twittering-mode-3.0.0/ChangeLog0000644000000000000000000107257512141747407016374 0ustar rootroot000000000000002013-05-07 Tadashi MATSUO * LAST-VERSION, NEWS, NEWS.ja, VERSION, doc/web/index.text, doc/web/ja.po, doc/web/publish.rb, doc/web/screenshot.text: release 3.0.0. 2013-04-22 tomykaira * twittering-mode.el: Check effective length of tweet when posting from minibuffer. (twittering-update-status-from-minibuffer): check an effective length of a tweet instead of a literal length. 2013-04-22 Tadashi MATSUO * twittering-mode.el: Suppress an error on a sentinel. Previously, an error might be raised from a sentinel when a timeline of non-existent user was requested. A sentinel for such a request tries to remove the timeline spec string corresponding to non-existent user from the history. In the process, conversion from an invalid timeline spec string had caused an error. (twittering-string-to-timeline-spec): add an optional argument NOERROR. If NOERROR is non-nil, the function does not raise an error even if SPEC-STR is invalid as a timeline spec string. (twittering-equal-string-as-timeline): do not raise an error even if either SPEC-STR1 or SPEC-STR2 is invalid as a timeline spec string. * twittering-mode.el: Reduce API rate limit information on mode-line. (twittering-get-ratelimit-indicator-string): reduce timelines retrieved by a common API. 2013-03-25 Tadashi MATSUO * twittering-mode.el: Decode surrogate pairs in strings returned by `json-read'. A new advice is added for decoding surrogate pairs. A character not in the Basic Multilingual Plane is represented by a surrogate pair in JSON (RFC4627). This is similar to CESU-8. But the function `json-read' in `json.el' does not correctly decode surrogate pairs. `json-read' returns a string including invalid code points from U+D800 to U+DFFF. `twittering-json-read' now decodes them by using a new advice. Thanks to multiSnow who reported the problem. (twittering-surrogate-pair-regexp): new constant that matches a surrogate pair in CESU-8. (twittering-decode-surrogate-pairs-as-cesu-8): new function that decodes surrogate pairs in a given string similarly to CESU-8. (json-read-string): new advice for decoding surrogate pairs. (twittering-json-read): use the new advice for decoding surrogate pairs in strings returned by `json-read'. * twittering-mode.el: Add `twittering-assoc-string' for portability. In Emacs 21, the function `assoc-string' is not defined. In such case, the reimplemented version is used. Othewise, `twittering-assoc-string' is an alias of `assoc-string'. (twittering-assoc-string): new function for portability. (twittering-get-server-info): replace `assoc-string' with `twittering-assoc-string'. * twittering-mode.el: Display rate-limit information for each API. (twittering-api-limit-info-alist): new variable for storing rate-limit information for each API. (twittering-timeline-spec-to-api-table): new variable for storing combination of timeline spec and an API for retrieving the timeline. (twittering-update-api-table): new function for registering a timeline spec and an API with the new variable `twittering-timeline-spec-to-api-table'. (twittering-make-rate-limit-alist): new function. (twittering-update-rate-limit-info): new function for updating the new variables `twittering-api-limit-info-alist' and `twittering-timeline-spec-to-api-table'. (twittering-update-server-info): update rate-limit information with new function. (twittering-get-server-info): removed. (twittering-get-ratelimit-alist): new function. (twittering-get-ratelimit-remaining): use the new function `twittering-get-ratelimit-alist'. (twittering-get-ratelimit-limit): likewise. (twittering-get-ratelimit-indicator-string): new function for making an indicator string of rate-limit information. (twittering-mode-line-buffer-identification): make an indicator string of rate-limit information by the new function `twittering-get-ratelimit-indicator-string'. * twittering-mode.el: Replace `delete-dups' with `twittering-remove-duplicates' for portability. (twittering-update-active-buffers): replace `delete-dups' with `twittering-remove-duplicates' for portability. 2013-03-05 Tadashi MATSUO * twittering-mode.el: Bind a local variable correctly. (twittering-call-api-with-account-in-api1.1): correctly bind the variable `spec-string' used. * twittering-mode.el: Fix the function parsing timelines related to direct messages with the Twitter REST API v1.1. (twittering-http-get-default-sentinel): call the function `twittering-json-object-to-a-status-on-direct-messages' correctly when using the Twitter REST API v1.1. * twittering-mode.el: Correctly add an authentication header for the command `get-service-configuration' with the Twitter REST API v1.1. (twittering-call-api-with-account-in-api1.1): fix a path for the command `get-service-configuration' and add an authentication header correctly. * twittering-mode.el: Confirm that `json.el' and SSL are available before calling the Twitter REST API v1.1. (twittering-call-api-with-account): confirm that `json.el' and SSL are available for the Twitter REST API v1.1. 2013-03-04 Tadashi MATSUO * twittering-mode.el: Use the JSON format for retrieving list information if possible. (twittering-http-get-list-sentinel-base): support a response in the JSON format. (twittering-call-api): use the JSON format for the commands `get-list-index' and `get-list-subscriptions' if possible. * twittering-mode.el: Use the JSON format for posting a status if possible. (twittering-http-post-destroy-status-sentinel): support a response in the JSON format. (twittering-call-api): use the JSON format for the command `destroy-status' if possible. * twittering-mode.el: Use the JSON format for retrieving server configuration if possible. (twittering-call-api): use the JSON format for the command `get-service-configuration' if possible. (twittering-update-service-configuration-sentinel): support a response in the JSON format. * twittering-mode.el: Sort newly retrieved tweets before rendering them. (twittering-add-statuses-to-timeline-data): sort added tweets before rendering them. This is necessary because `twittering-render-timeline' assumes that given tweets are ordered. * twittering-mode.el: Update the server information only when receiving a response from a Twitter-like service. Other types of responses such as image retrieval and URL shortening do not update the info. (twittering-send-http-request): do not invoke `twittering-update-server-info' directly. (twittering-http-get): modify the sentinel so that it also invokes `twittering-update-server-info'. (twittering-http-post): likewise. (twittering-update-server-info): receive an alist HEADER-INFO instead of a string HEADER-STR. * twittering-mode.el: Add a new function `twittering-call-api-with-account'. (twittering-add-application-header-to-http-request): receive an alist ACCOUNT-INFO for specifying an account. (twittering-http-get): likewise. (twittering-http-post): likewise. (twittering-call-api): call the new function `twittering-call-api-with-account' with the main account. (twittering-call-api-with-account): new function. This requires an account information alist which it calls an API with. (twittering-get-main-account-info): new function. (twittering-verify-credentials): use a return value of `twittering-get-main-account-info' instead of using variables directly. (twittering-http-get-verify-credentials-sentinel): extract an account information from the `account-info' element in `connection-info'. * twittering-mode.el: Add functions to make an authentication string from an account-info alist. (twittering-add-application-header-to-http-request): use new functions for making an authentication string for a HTTP request. (twittering-get-from-account-info): new function. (twittering-make-basic-authentication-string): new function. (twittering-make-oauth-authentication-string): new function. (twittering-verify-credentials): rename `account-info-alist' `account-info'. (twittering-http-get-verify-credentials-sentinel): extract a screen name and a password with the new function `twittering-get-from-account-info'. * twittering-mode.el: Access an account information indirectly. (twittering-register-account-info): new function. (twittering-get-username): use `twittering-get-main-account-info' instead of using the variable `twittering-username' directly. (twittering-get-password): likewise. (twittering-verify-credentials): use the functions `twittering-get-main-account-info' and `twittering-register-account-info' instead of using variables directly. (twittering-http-get-verify-credentials-sentinel): store or discard the validated account information with the new function `twittering-register-account-info'. * twittering-mode.el: Support the HTTP cookie. (twittering-cookie-alist): new variable to store cookies for each account. (twittering-add-application-header-to-http-request): add a cookie string if necessary. (twittering-http-get): invoke `twittering-update-server-info' with `connection-info' according to the modification of the function. (twittering-http-post): likewise. (twittering-update-server-info): receive an alist CONNECTION-INFO as a new argument and update `twittering-cookie-alist'. The new argument is required to store cookies for each account. (twittering-extract-cookie): new function to extract cookies from a HTTP response header as an alist. (twittering-make-cookie-string): new function to make a cookie string for a HTTP request from the cookie information stored in the variable `twittering-cookie-alist'. * twittering-mode.el: Separate the current core of `twittering-call-api-with-account' as a new function `twittering-call-api-with-account-in-api1.0'. (twittering-call-api-with-account): call a new function `twittering-call-api-with-account-in-api1.0' instead of processing a command directly. (twittering-call-api-with-account-in-api1.0): new function. * twittering-mode.el: Support the Twitter REST API v1.1. (twittering-service-method): change the default service method. (twittering-service-method-table): add entries for the new service method `twitter-api-v1.1'. (twittering-http-get-default-sentinel): switch parser according to the service method and the timeline. (twittering-http-get-list-sentinel-base): support a response from the Twitter REST API v1.1. (twittering-update-server-info): replace a header name for the Twitter REST API v1.1 with that for the Twitter REST API v1.0. This is an ad-hoc solution. Since each API method is separately limited on the Twitter REST API v1.1, the rate limit information should be managed for each API method. (twittering-call-api-with-account): call a special function according to the current `twittering-service-method'. (twittering-call-api-with-account-in-api1.0): new function that is the same as the previous `twittering-call-api-with-account'. (twittering-call-api-with-account-in-api1.1): new function. (twittering-update-service-configuration): support the new service method `twitter-api-v1.1'. (twittering-use-profile-image-api): add a supplementary document. (twittering-effective-length): support the new service method `twitter-api-v1.1'. * README.markdown: Add an explanation of prerequisites for the Twitter REST API v1.1. * twittering-mode.el: Move the cursor to the tweet that will be retrieved. (twittering-toggle-or-retrieve-replied-statuses): move the cursor to the tweet that will be retrieved. * twittering-mode.el: The timeline spec string "@" means the mentions timeline instead of the replies timeline. (twittering-extract-timeline-spec): interpret the timeline spec string "@" as the mentions timeline instead of the replies timeline. * twittering-mode.el: Fix a typo that disables twittering-mode.el from retrieving the ":retweets_of_me" timeline. (twittering-call-api-with-account-in-api1.1): fix a typo. * twittering-mode.el: Fix the function of rendering a replied tweet. (twittering-retrieve-single-tweet-sentinel): fix the condition for deciding whether it should re-render a tweet partially or not. 2013-02-11 Tadashi MATSUO * twittering-mode.el: Fix the jojo-mode that caused an error when the condition of automatically posting a tweet was satisfied. Thanks to the anonymous person who reported the problem. (twittering-post-predicted-message-like-jojo): fix variable name. * twittering-mode.el: Fix a return value of `twittering-render-replied-statuses'. The function returns nil without regard to whether a tweet is rendered or not. Thanks to Ikumi Keita who reported the problem. (twittering-render-replied-statuses): fix a return value. * twittering-mode.el: Support different intervals of retrieving timelines. (twittering-relative-retrieval-interval-alist): new variable. (twittering-relative-retrieval-count-alist): new variable. (twittering-retrieve-timeline): reset the retrieval count. (twittering-start): update all active timelines forcibly once. (twittering-get-relative-interval): new function. (twittering-get-retrieval-count): new function. (twittering-set-retrieval-count): new function. (twittering-initialize-retrieval-count): new function. (twittering-update-active-buffers): reduce retrievals according to the variable `twittering-relative-retrieval-interval-alist'. 2013-01-21 Tadashi MATSUO * twittering-mode.el: Update the regexp for extracting an ID from a tweet. (twittering-extract-id-from-url): update the regexp for extracting an ID from a tweet. * twittering-mode.el: Avoid rendering same tweets repeatedly. The function `twittering-render-timeline' rendered given repeated tweets as is. Since a merged timeline may include one tweet multiple times, such a tweet was rendered multiple times. (twittering-render-timeline): skip repeated tweets. 2013-01-14 Tadashi MATSUO * twittering-mode.el: Fix a bug of backward retrieval of favorites timeline. The functions, `twittering-goto-next-status' and `twittering-goto-previous-status', did nothing for favorites timeline. They now treat favorites timeline as they treat other timelines. Thanks to the anonymous person who reported the problem. (twittering-goto-next-status): Remove a special action for favorites timeline. (twittering-goto-previous-status): likewise. * README.markdown: Add explanations of major configurations and others. 2012-11-05 Tadashi MATSUO * twittering-mode.el: Support the backward retrieval of favorites timeline. (twittering-call-api): send the parameter `max_id' for retrieving favorites timeline if necessary. * twittering-mode.el: Display how many tweets are added to each buffer. (twittering-http-get-default-sentinel): display how many tweets are added to each buffer. (twittering-add-statuses-to-timeline-data): return a list of pairs of a timeline spec string and the number of addtional tweets. (twittering-render-timeline): return a list of tweets newly rendered. * twittering-mode.el: Extract the format from the HTTP response header. (twittering-get-content-subtype-symbol-from-header-info): new function for extracting the content subtype from a HTTP header. (twittering-send-http-request): fix docstring. (twittering-get-error-message): extract the format from the HTTP response header instead of using `connection-info`. (twittering-http-get-default-sentinel): likewise. (twittering-retrieve-single-tweet-sentinel): likewise. 2012-09-17 Tadashi MATSUO * twittering-mode.el: Request a compressed HTTP response when using `curl'. (twittering-send-http-request-curl): add the option `--compressed' to the arguments for the program `curl'. * twittering-mode.el: Do not call `force-mode-line-update' via the unread status notifier. It had been invoked via a sentinel or `post-command-hook'. (twittering-set-number-of-unread): do not call the function `force-mode-line-update'. * twittering-mode.el: Add a new function `twittering-retrieve-timeline'. (twittering-retrieve-timeline): new function for retrieving and rendering a timeline. This accepts any timeilne spec string including that for composite timeline, though `twittering-call-api' accepts only a primary timeline. Also, the new function can be invoked with more detailed retrieval options than the existing function `twittering-get-and-render-timeline'. (twittering-get-and-render-timeline): reimplemented with the new function `twittering-retrieve-timeline'. * twittering-mode.el: Add a new command `twittering-get-tweets-before' to get tweets before a specific time. (twittering-parse-time-string): new function. (twittering-time-to-id): new function. (twittering-get-tweets-within-specific-time-range): new function. (twittering-get-tweets-before): new function. * twittering-mode.el: Display how many tweets are retrieved. (twittering-http-get-default-sentinel): display how many tweets are retrieved. This may includes some tweets that has been already retrieved as an other timeline. 2012-07-22 Tadashi MATSUO * twittering-mode.el: Clear list of undo entries on a pop-up edit buffer. (twittering-update-status-from-pop-up-buffer): clear list of undo entries. * twittering-mode.el: Fix the bug that retweets may not be rendered in a composite timeline. (twittering-render-timeline): render a retweet if the first ID referring the retweet is unknown. This is necessary because a referring ID table of a composite timeline may lack information of some component timelines. * twittering-mode.el: `twittering-id-to-time' restores the milli-second parameter. (twittering-id-to-time): restore the milli-second parameter. * twittering-mode.el: Fix the bug that `twittering-render-replied-statuses' may ignore the argument `pos'. (twittering-render-replied-statuses): correctly consider the argument `pos'. * twittering-mode.el: Fix the bug that a single tweet timeline consisting of a retweet causes an error. A single tweet timeline is registered to `twittering-timeline-data-table' in a special way (See `twittering-retrieve-single-tweet-sentinel'). However, `twittering-current-timeline-referring-id-table' did not take it into account. (twittering-current-timeline-referring-id-table): return the correct hash table for a single tweet timeline. 2012-05-06 Tadashi MATSUO * twittering-mode.el: Add some timeline specs to the definition of timeline spec strings. * twittering-mode.el: Remove routines for the filter timeline. (twittering-timeline-spec-to-string): remove routines for the filter timeline. (twittering-extract-timeline-spec): likewise. (twittering-timeline-spec-primary-p): remove the mention to the filter timeline from the docstring. * test/test-twittering-mode.el: remove tests for the filter timeline. * twittering-mode.el: Fix the docstring of `twittering-call-api'. (twittering-call-api): fix the docstring for the command `retrieve-single-tweet'. * twittering-mode.el: Support a `single tweet' timeline, which consists of a tweet specified by its ID. (twittering-retrieve-single-tweet-sentinel): support the retrieval via `twittering-call-api' with the command `retrieve-timeline'. (twittering-timeline-spec-to-string): support a `single tweet' timeline spec. (twittering-extract-timeline-spec): likewise. (twittering-timeline-spec-primary-p): likewise. (twittering-current-timeline-data): likewise. (twittering-call-api): invoke the `retrieve-single-tweet' command if the `retrieve-timeline' command is specified with a single tweet timeline spec. * test/test-twittering-mode.el: Add a test for a `single tweet' timeline spec. * README.markdown: Add an explanation for a `single tweet' timeline spec. * twittering-mode.el: Add the expanded uri to the url string as a property if possible. (twittering-make-fontified-tweet-text-with-entity): add the expanded-uri property to the url string. * twittering-mode.el: Visit a single tweet timeline via a URL of a tweet. (twittering-extract-id-from-url): new function. (twittering-other-user-timeline): visit a single tweet timeline if the cursor points to a URL of a tweet. 2012-04-02 Tadashi MATSUO * README.markdown: Fix the order of tags. 2012-04-01 Tadashi MATSUO * README.markdown: Fix the explanation of the key binding 'd'. * README.markdown: Add an explanation how to post an official/native retweet. * README.markdown: Add basic key bindings to the 'Quick start' section. * twittering-mode.el: Bind "C-cC-w" to `twittering-delete-status'. The binding is a future replacement for "C-cD", which violates the Emacs Key Binding Conventions. (twittering-mode-map): bind "C-cC-w" to the function `twittering-delete-status'. * README.markdown: Fix the documents related to "C-cD". * twittering-mode.el: Add a new variable `twittering-pop-to-buffer-function' to specify how to open a window for an edit buffer. Previously, a window for an edit buffer was opened by invoking the function `pop-to-buffer' with specifying non-nil as the argument NORECORD. This was an ad-hoc solution of the problem that an edit buffer was assigned on a different window for each time. However, with the solution, a window for an edit buffer might be hidden by opening another window because the window for an edit buffer was not recorded in the list of recently selected windows. To avoid the behavior, new functions open a window with a fixed rule and record a new window in the list. (twittering-pop-to-buffer-function): new variable. (twittering-pop-to-buffer): new function, which just invokes the function specified by `twittering-pop-to-buffer-function'. (twittering-pop-to-buffer-simple): new function for the new variable `twittering-pop-to-buffer-function'. (twittering-pop-to-buffer-in-current-window): likewise. (twittering-pop-to-buffer-in-largest-window): likewise. (twittering-pop-to-buffer-in-bottom-largest-window): likewise. (twittering-update-status-from-pop-up-buffer): use `twittering-pop-to-buffer' instead of invoking `pop-to-buffer' directly. 2012-03-27 Tadashi MATSUO * twittering-mode.el: Fix the filename of the footer line. * twittering-mode.el: Fix the calculation of length of a tweet including a URL. (twittering-effective-length): always use the length retrieved by 'help/configuration' API. The function previously used the minimum of the length by the API and the original length. This causes failure in posting a tweet because the t.co URL wrapper automatically wraps all links as of October 10, 2011. * README.markdown: Fix a typo. * README.markdown: Update the document. * twittering-mode.el: Ensure that a pop-up edit buffer is initially marked as unmodified. (twittering-update-status-from-pop-up-buffer): mark the pop-up edit buffer as unmodified. Since the help is rendered as a read-only text, the buffer must be marked as unmodified explicitly. 2012-03-17 Tadashi MATSUO * twittering-mode.el: Fix the condition of confirmation on posting a tweet. The variable `twittering-request-confirmation-on-posting' had been ignored on posting a reply. Thanks to Takashi Masuda who reported the problem. (twittering-edit-post-status): fix the condition of confirmation on posting a tweet. * twittering-mode.el: Support error messages formatted as JSON. (twittering-get-error-message): receive a new argument CONNECTION-INFO and support error messages sent as JSON. (twittering-http-get-default-sentinel): send CONNECTION-INFO to the function `twittering-get-error-message'. (twittering-http-get-list-sentinel-base): likewise. (twittering-http-post-default-sentinel): likewise. (twittering-http-post-destroy-status-sentinel): likewise. * twittering-mode.el: Parse a HTTP response body whose status code is 401 or 404. (twittering-get-error-message): try to parse a HTTP respose body whose status code is 401 or 404. * twittering-mode.el: Display an error message from the 'help/configuration' API. (twittering-update-service-configuration-sentinel): display an error message in a HTTP response body. * twittering-mode.el: Record HTTP response headers on debug mode. (twittering-get-response-header): record the extracted HTTP response header if `twittering-debug-mode' is non-nil. * twittering-mode.el: Remove the function `twittering-make-field-properties'. It is unnecessary because `twittering-render-a-field' automatically add a field property. (twittering-get-common-properties): update the docstring. (twittering-make-field-properties): removed. (twittering-make-field-properties-of-popped-ancestors): removed. (twittering-make-properties-of-popped-ancestors): new function. (twittering-show-replied-statuses): use `twittering-make-properties-of-popped-ancestors' instead of `twittering-make-field-properties-of-popped-ancestors'. * twittering-mode.el: Add a new function `twittering-make-field-id-from-id' which generates a field ID from a tweet ID instead of a tweet alist. (twittering-make-field-id-from-id): new function. (twittering-make-field-id): reimplemented with the new function `twittering-make-field-id-from-id'. * twittering-mode.el: Add a new command `retrieve-single-tweet' to the function `twittering-call-api'. (twittering-retrieve-single-tweet-sentinel): new function. (twittering-call-api): add `retrieve-single-tweet' as a new command. (twittering-make-alist-of-forbidden-tweet): new function, which generates a dummy alist for a forbidden tweet. (twittering-make-alist-of-non-existent-tweet): new function, which generates a dummy alist for a non-existent tweet. * twittering-mode.el: Add functions for finding a region of replied statuses with the common base status. (twittering-replied-statuses-visible-p): add a docstring. (twittering-get-beginning-of-visible-replied-statuses): new function, which returns the beginning position of replied statuses rendered by `twittering-show-replied-statuses'. (twittering-get-end-of-visible-replied-statuses): new function, which returns the end position of replied statuses rendered by `twittering-show-replied-statuses'. (twittering-hide-replied-statuses): determine a region being deleted by using the new functions. * twittering-mode.el: Fix the behavior of the function `twittering-replied-statuses-visible-p' on a header or a footer. (twittering-replied-statuses-visible-p): return nil on a header or a footer. * twittering-mode.el: Add a new function `twittering-render-replied-statuses'. (twittering-render-replied-statuses): new function, which renders replied statuses even if some replied statuses have been already rendered. (twittering-show-replied-statuses): reimplemented with the new function `twittering-render-replied-statuses'. * twittering-mode.el: `twittering-redisplay-status-on-each-buffer' supports various symbols as a specifier of regions to be redisplayed. (twittering-redisplay-status-on-each-buffer): support other symbols besides `need-to-be-updated' as a specifier of regions to be redisplayed. * twittering-mode.el: Support iterative retrieval of a series of replies. (twittering-retrieve-single-tweet-sentinel): redisplay some regions related to the retrieved status. (twittering-render-a-tweet-with-delay): new function. (twittering-toggle-or-retrieve-replied-statuses): new function. (twittering-mode-map): bind "R" to the new function `twittering-toggle-or-retrieve-replied-statuses'. * twittering-mode.el: Add a new function `twittering-id-to-time' that extracts a corresponding time from an ID generated by Snowflake. (twittering-snowflake-epoch-time): new function. (twittering-id-to-time): new function. * twittering-mode.el: Use the time extracted from ID for forbidden or non-existent tweets. (twittering-make-alist-of-forbidden-tweet): use the time extracted from ID. (twittering-make-alist-of-non-existent-tweet): likewise. * twittering-mode.el: Update the docstring of the variable `twittering-initial-timeline-spec-string'. (twittering-initial-timeline-spec-string): update the docstring. 2012-03-04 Tadashi MATSUO * twittering-mode.el: Fix the escape of a query string in a search timeline spec. (twittering-timeline-spec-to-string): correctly escape a query of a search timeline spec. (twittering-extract-timeline-spec): correctly decode a query string with escaped characters. * test/test-twittering-mode.el: Add tests for search timeline specs. * twittering-mode.el: Support ":exclude-re/REGEXP/SPEC" timelines. (twittering-timeline-spec-to-string): support the new timeline spec ":exclude-re/REGEXP/SPEC". (twittering-extract-timeline-spec): likewise. (twittering-timeline-spec-composite-p): likewise. (twittering-get-base-timeline-specs): likewise. (twittering-generate-composite-timeline): likewise. (twittering-current-timeline-referring-id-table): likewise. (twittering-current-timeline-data): likewise. * test/test-twittering-mode.el: Add tests for exclude-re timeline specs. 2012-02-28 Tadashi MATSUO * twittering-mode.el: Fix the function `twittering-current-timeline-referring-id-table'. There was the possibility that the function returns nil for a composite timeline spec. This made native retweets disappear on the composite timeline. Thanks to Boots_of_Lead who reported the bug. (twittering-current-timeline-referring-id-table): for a composite timeline spec, return the table of the first primary base spec with a non-nil referring table. This function previously returned the first direct base timeline spec, which might be nil. * twittering-mode.el: Add an explanation to the docstring of `twittering-new-tweets-rendered-hook'. (twittering-new-tweets-rendered-hook): add an explanation to the docstring. * twittering-mode.el: Reimplement jojo-mode as a hook. (twittering-add-statuses-to-timeline-data): remove statements for jojo-mode. (twittering-initialize-global-variables-if-necessary): add `twittering-jojo-mode-hook-function' to the new tweets rendered hook. (twittering-jojo-mode-p): removed. (twittering-update-jojo): removed. (twittering-post-predicted-message-like-jojo): new function. (twittering-jojo-mode-hook-function): new function. * twittering-mode.el: Display the replied tweet on the pop-up edit buffer. (twittering-edit-set-help-string): new function. (twittering-edit-setup-help): add a new argument REPLY-TO-ID. (twittering-update-status-from-pop-up-buffer): send REPLY-TO-ID to the function `twittering-edit-setup-help'. * twittering-mode.el: Generate a description of a edited tweet by `twittering-generate-format-status-function'. (twittering-edit-set-help-string): do not add a text property to STR. (twittering-edit-setup-help): generate a description by `twittering-generate-format-status-function'. * twittering-mode.el: Render a help on a pop-up edit buffer as a read-only text. The replied tweet can be copied on the edit buffer. Rendering a help as a read-only text also suppresses strange behavior of overlays exceeding the size of the current window. (twittering-help-overlay): removed. (twittering-help-overlay-priority): removed. (twittering-edit-help-end-pos): new variable. (twittering-edit-mode): remove the parent mode to suppress invocation of hooks for `text-mode'. The trick for disabling font-lock mode is introduced. `twittering-edit-help-end-pos' is prepared as a buffer-local variable. (twittering-edit-extract-status): determine the region being extracted with `twittering-edit-help-end-pos'. (twittering-edit-reset-status): new function. (twittering-edit-set-help-string): render a help for `twittering-edit-mdoe' as a read-only text. (twittering-update-status-from-pop-up-buffer): move the cursor just behind the help. (twittering-edit-next-history): extract the edited message by `twittering-edit-extract-status' and reset it by `twittering-edit-reset-status'. (twittering-edit-previous-history): likewise. * twittering-mode.el: Dynamically determine an end position of a help on a pop-up edit buffer. (twittering-edit-help-end-pos): removed. (twittering-edit-mode): remove the variable `twittering-edit-help-end-pos'. (twittering-edit-get-help-end): new function, which replaces the buffer-local variable `twittering-edit-help-end-pos'. (twittering-edit-extract-status): use the function `twittering-edit-get-help-end' instead of the variable `twittering-edit-help-end-pos'. (twittering-edit-reset-status): likewise. (twittering-edit-set-help-string): likewise. (twittering-update-status-from-pop-up-buffer): likewise. * twittering-mode.el: Control an attribute of a tweet being edited with an alist bound to `twittering-edit-mode-info'. (twittering-reply-recipient): removed. (twittering-edit-mode-info): new variable, which is an alist specifying the attribute of the tweet being edited. (twittering-update-status-from-pop-up-buffer): control the attribute of the tweet being edited with the new variable `twittering-edit-mode-info'. (twittering-edit-post-status): determine the attribute of the tweet being posted by the variable `twittering-edit-mode-info'. * twittering-mode.el: Allow a reply where a mention is not placed on the beginning. (twittering-edit-post-status): allow a reply where a mention is not placed on the beginning. (twittering-update-status-from-minibuffer): likewise. * twittering-mode.el: Send the cited ID to the function `twittering-update-status' when editing an organic retweet. (twittering-edit-skeleton-alist): mention that IN-REPLY-TO is non-nil when a tweet is edited as an organic retweet. (twittering-update-status-from-minibuffer): post a tweet as a reply only if TWEET-TYPE is the symbol `reply'. (twittering-update-status): mention that REPLY-TO-ID is non-nil when a tweet cites or replies to a certain tweet. (twittering-organic-retweet): send the ID of the cited tweet to `twittering-update-status' as REPLY-TO-ID. * twittering-mode.el: Generate a help on an edit buffer from the buffer-local variable `twittering-edit-mode-info'. (twittering-edit-setup-help): generate a help from the buffer-local variable `twittering-edit-mode-info'. (twittering-update-status-from-pop-up-buffer): remove obsolete arguments from the invocation of `twittering-edit-setup-help'. * twittering-mode.el: Enable to toggle a reply and a normal tweet on an edit buffer. (twittering-edit-mode-map): bind "C-c C-r" to `twittering-edit-toggle-reply'. (twittering-edit-setup-help): display a help for `twittering-edit-toggle-reply'. (twittering-edit-toggle-reply): new function, which toggles whether the tweet being edited will be sent as a reply or not. * twittering-mode.el: Confirm that the edited message should be sent as a normal tweet when it has been edited as a reply but it does not include a mention to the cited user. (twittering-edit-post-status): confirm that the edited message should be sent as a normal tweet when it has been edited as a reply but it does not include a mention to the cited user. * twittering-mode.el: Support a new format specifier "%u" for `twittering-retweet-format'. It is replaced with the URL of the cited tweet. (twittering-retweet-format): update the docstring. (twittering-get-status-url-from-alist): new function. (twittering-organic-retweet): support a new format specifier "%u". 2012-02-12 Tadashi MATSUO * twittering-mode.el: Accept a symbol as FUNC of a composite timeline spec ":exclude-if/FUNC/SPEC". (twittering-extract-timeline-spec): accept a symbol as FUNC of a composite timeline spec ":exclude-if/FUNC/SPEC". * test/test-twittering-mode.el: Add a test of an exclude-if timeline spec with a symbol as FUNC. * twittering-mode.el: Give the help overlay a priority specified by `twittering-help-overlay-priority'. (twittering-help-overlay-priority): new variable. (twittering-edit-setup-help): give the overlay a priority specified by `twittering-help-overlay-priority'. 2012-02-11 Tadashi MATSUO * twittering-mode.el: Use an after-string property instead of a before-string property to show the help on an edit buffer. Thanks to irie who discoverd the problem and wrote a suitable code. (twittering-edit-setup-help): set an after-string property of the overlay for the help and give high priority to the overlay. * twittering-mode.el: Remove duplicates in a merge timeline spec. (twittering-extract-timeline-spec): remove duplicates in a list of timeline specs in a merge timeline spec. * test/test-twittering-mode.el: Add a test of reducing duplicates in a merge timeline spec. * twittering-mode.el: Remove duplicates in the list of primary base timeline specs. (twittering-get-primary-base-timeline-specs): remove duplicates in the list of primary base timeline specs. * test/test-twittering-mode.el: Add a test of dependence of composite timeline specs. * twittering-mode.el: Fix the behavior of the function `twittering-get-current-status-head' for the position following the header. Thanks to lemit who reported the problem. The previous one made `twittering-replied-statuses-visible-p' return an incorrect value on the position following the header. (twittering-get-current-status-head): fix the behavior when POS points to the beginning of a field and also points to the end of another field. The function previously returned the head of the previous field. * twittering-mode.el: Fix the behavior of `twittering-get-id-at' on the head of the footer. (twittering-get-id-at): use `twittering-get-current-status-head' instead of `twittering-get-previous-status-head'. On the head of the footer, the former returns the head of the footer and the latter returns the head of the status followed by the footer. 2012-02-06 Tadashi MATSUO * twittering-mode.el: Delete a specified status from composite timeline buffers. (twittering-get-dependent-timeline-specs): new function. (twittering-delete-status-from-data-table): delete the given status from buffers bound to composite timelines. * twittering-mode.el: Decode a HTTP response body before invoking a sentinel. (twittering-decode-response-body): new function. (twittering-send-http-request): decode the response body by `twittering-decode-response-body' before invoking the sentinel. (twittering-http-get-default-sentinel): do not decode the response body here. * twittering-mode.el: Delete a status after the successful response for the `destroy-status' API is received. (twittering-http-post-destroy-status-sentinel): new function. (twittering-call-api): use the new function `twittering-http-post-destroy-status-sentinel' as the sentinel of `twittering-http-post' for the command `destroy-status'. (twittering-delete-status): do not delete the specified status here. * twittering-mode.el: `twittering-render-a-field' moves the cursor even if the given status is not rendered. (twittering-render-a-field): move the cursor even if the given status is not rendered. * twittering-mode.el: Do not use the return value of the function `twittering-render-a-field'. (twittering-render-timeline): do not use the return value of `twittering-render-a-field'. (twittering-show-replied-statuses): likewise. * twittering-mode.el: `twittering-render-a-field' returns nil if the status is not rendered. (twittering-render-a-field): return nil if the status is not rendered. (twittering-render-timeline): show replied statuses only if the status is rendered. * twittering-mode.el: Add a docstring for `twittering-render-timeline'. (twittering-render-timeline): add a docstring. * twittering-mode.el: Add `twittering-rerender-timeline-all' that re-renders tweets after clearing the buffer. (twittering-render-timeline): modify arguments. (twittering-rerender-timeline-all): new function. (twittering-get-managed-buffer): replace the invocation of the function `twittering-render-timeline' with that of the function `twittering-rerender-timeline-all'. (twittering-icon-mode): likewise. (twittering-toggle-reverse-mode): likewise. (twittering-erase-old-statuses): likewise. * twittering-mode.el: Add a new hook `twittering-new-tweets-rendered-hook'. (twittering-rendered-new-tweets-spec): new variable. (twittering-rendered-new-tweets-spec-string): new variable. (twittering-rendered-new-tweets): new variable. (twittering-new-tweets-rendered-hook): new hook. (twittering-http-get-default-sentinel): call `twittering-render-timeline' with non-nil INVOKE-HOOK. (twittering-add-statuses-to-timeline-data): likewise. (twittering-render-timeline): add a new argument INVOKE-HOOK. (twittering-rerender-timeline-all): call `twittering-render-timeline' with nil INVOKE-HOOK. * twittering-mode.el: Unread status notifier uses the new hook invoked when rendering tweets. This corrects the number of unread statuses on composite timelines. (twittering-update-unread-status-info): modified for use in `twittering-new-tweets-rendered-hook'. (twittering-enable-unread-status-notifier): use `twittering-new-tweets-rendered-hook' instead of `twittering-new-tweets-hook'. * twittering-mode.el: Add a new hook `twittering-mode-init-hook'. The new hook is invoked after initializing global variables. (twittering-mode-init-hook): new hook invoked after initializing global variables. (twittering-mode-hook): add a docstring. (twittering-initialize-global-variables-if-necessary): invoke hooks specified by `twittering-mode-init-hook'. 2012-01-29 Tadashi MATSUO * twittering-mode.el: Follow the header conventions. Thanks to Jonas Bernoulli who reported the nonfulfillment. * twittering-mode.el: Expand a path before calling the function `alpaca-after-find-file'. (twittering-read-from-encrypted-file): expand FILE into a full path. Since "alpaca.el" uses the `buffer-file-name' as the prefix of the temporary file, it must be a full path. * twittering-mode.el: Add a new argument of the function `twittering-render-a-field' for rendering a tweet without a separator. (twittering-render-a-field): add a new argument for rendering a tweet without a separator. * twittering-mode.el: Render the header and footer line. (twittering-make-field-id-of-timeline-oldest-end): new function. (twittering-make-field-id-of-timeline-latest-end): new function. (twittering-field-id-is-timeline-oldest-end): new function. (twittering-field-id-is-timeline-latest-end): new function. (twittering-render-timeline): render the header and footer on rendering the whole of the buffer. In that case, the function now moves the cursor to the normal field not to the header nor footer. (twittering-mode-map): bind "G" to `twittering-goto-last-status' instead of `end-of-buffer'. (twittering-enter): update the timeline when the function is invoked on the header or footer. (twittering-goto-last-status): new function. (twittering-get-last-status-head): new function. (twittering-goto-first-normal-field): new function. (twittering-goto-last-normal-field): new function. (twittering-get-first-normal-field-head): new function. (twittering-get-last-normal-field-head): new function. (twittering-goto-next-status): move the cursor to the normal field before instruction for updating the timeline. (twittering-goto-previous-status): likewise. * twittering-mode.el: Add variables for customizing the header and footer. (twittering-timeline-header-face): new variable. (twittering-timeline-footer-face): new variable. (twittering-timeline-header): new variable. (twittering-timeline-footer): new variable. (twittering-render-timeline): render the header and footer according to the customization variables. (twittering-initialize-global-variables-if-necessary): initialize the faces for the header and footer. * twittering-mode.el: The current version of twittering-mode always behaves as the previous version does on scroll-mode. The variable `twittering-scroll-mode' is obsolete. (twittering-scroll-mode): removed. (twittering-mode-line-buffer-identification): ignore the obsolete variable `twittering-scroll-mode'. (twittering-render-timeline): remove expressions for restoring positions on non-scroll-mode. (twittering-mode-map): do not bind "s" to the function `twittering-scroll-mode'. (twittering-mode-setup): do not call `make-local-variable' for the variable `twittering-scroll-mode'. * test/test-twittering-mode.el: Remove tests related to the scroll-mode. * twittering-mode.el: Remove invalid timeline specs from the history after the failure of the retrieval. (twittering-http-get-default-sentinel): remove the specified timeline spec string from the history after it becomes clear that the spec is invalid. (twittering-remove-timeline-spec-string-from-history): new function. (twittering-get-managed-buffer): add the requested timeline spec string to the history. It may be removed from the history after if it is invalid. * twittering-mode.el: Support ":exclude-if/FUNC/SPEC" timelines. (twittering-http-get-default-sentinel): remove timeline spec strings depending the invalid spec. (twittering-timeline-spec-to-string): support the new timeline spec ":exclude-if/FUNC/SPEC". (twittering-extract-timeline-spec): likewise. (twittering-timeline-spec-composite-p): new function. (twittering-timeline-spec-depending-on-p): new function. (twittering-get-base-timeline-specs): new function. (twittering-get-primary-base-timeline-specs): new function. (twittering-generate-composite-timeline): new function. (twittering-current-timeline-referring-id-table): support the new timeline spec ":exclude-if/FUNC/SPEC". (twittering-current-timeline-data): likewise. (twittering-add-statuses-to-timeline-data): update composite timelines that depend on the primary timeline. (twittering-get-and-render-timeline): add new arguments SPEC and SPEC-STRING to retrieve timelines that have no buffers but constitute some composite timelines. * test/test-twittering-mode.el: Add tests for the timeline spec ":exclude-if/FUNC/SPEC". * twittering-mode.el: Support merge timelines. (twittering-timeline-spec-composite-p): support the merge timeline spec. (twittering-get-base-timeline-specs): likewise. (twittering-generate-composite-timeline): likewise. (twittering-current-timeline-referring-id-table): likewise. (twittering-current-timeline-data): likewise. 2012-01-14 Tadashi MATSUO * twittering-mode.el: Do not record the edit buffer in the list of recently selected ones. Thanks to tdkn who reported the behavior related to the list. (twittering-update-status-from-pop-up-buffer): do not put the buffer at the front of the list of recently selected ones. * twittering-mode.el: Add a field property to a tweet on the function `twittering-render-a-field'. (twittering-make-common-properties): Do not add a field property. (twittering-render-a-field): add a field property. 2012-01-08 Tadashi MATSUO * twittering-mode.el: Explicitly signal an error when twittering-mode fails to retrieve a request token. (twittering-oauth-get-access-token): signal an error when twittering-mode fails to retrieve a request token. * test/test-twittering-mode.el: Add a test for parsing JSON with a character unsupported by Emacs. * test/test-twittering-mode.el: Add a test for parsing XML with a character unsupported by Emacs. * twittering-mode.el: Confirm that a file is readable before decrypting it. (twittering-read-from-encrypted-file): confirm that FILE is readable. * twittering-mode.el: Expand a path before invoking the function `epg-decrypt-file'. (twittering-read-from-encrypted-file): expand FILE before invoking `epg-decrypt-file'. 2011-12-09 Tadashi MATSUO * twittering-mode.el: Retrieve an ID of a tweet replied by a tweet on a search timeline. You can display replied tweets on a search timeline if they have been retrieved. This is available only when tweets are retrieved as the JSON format. (twittering-json-object-to-a-status-on-search): extract the "in_reply_to_status_id_str" field, which Twitter begins to serve recently. * twittering-mode.el: Replace `json-read' with `twittering-json-read' in order to prevent abnormal exit caused by decoding an unknown code point. Thanks to lemit who reported the problem. (twittering-http-get-default-sentinel): use `twittering-json-read' instead of `json-read'. (twittering-json-read): new function. 2011-12-07 Tadashi MATSUO * twittering-mode.el: Rearrange some codes for interpreting a JSON object. (twittering-json-object-to-a-status-base): rearrange codes for interpreting a JSON object. * twittering-mode.el: Fix the interpretation of JSON objects for direct messages. Thanks to Alexis who reported the problem. (twittering-http-get-default-sentinel): use `twittering-json-object-to-a-status-on-direct-messages' for timelines related to direct messages. (twittering-json-object-to-a-status-on-direct-messages): new function. 2011-11-26 Tadashi MATSUO * twittering-mode.el: Fix the strange behavior on moving the cursor according to logical lines. Thanks to lemit who reported the problem. (twittering-mode-setup): bind `inhibit-field-text-motion' to non-nil as a buffer-local variable. If it is nil, the field property attached tweets interferes with the cursor motion based on logical lines. * twittering-mode.el: Store the tweet parameters, `truncated' and `user-protected', as boolean parameters. (twittering-normalize-raw-status): store the `truncated' and `user-protected' parameters as boolean parameters. (twittering-generate-format-table): use the `truncated' and `user-protected' parameters as boolean. (twittering-organic-retweet): likewise. * test/test-twittering-mode.el: Update tests to follow the change of internal representation of a tweet. * test/fixture/timeline-data.el: Update data to follow the change of internal representation of a tweet. * twittering-mode.el: Store the tweet parameter `created-at' as Emacs internal time representation. This avoids parsing a time string whenever a tweet is re-rendered. (twittering-atom-xmltree-to-status-datum): store `created-at' as Emacs internal time representation. (twittering-normalize-raw-status): likewise. (twittering-created-at-to-seconds): removed. (twittering-generate-format-table): use the parameters `created-at' as Emacs internal time representation. (twittering-generate-formater-for-first-spec): likewise. * test/test-twittering-mode.el: Update tests to follow the change of internal representation of a tweet. * test/fixture/timeline-data.el: Update data to follow the change of internal representation of a tweet. * twittering-mode.el: `twittering-call-api' receives `sentinel' as an argument for the command `retrieve-timeline'. (twittering-call-api): receive `sentinel' as an argument for the command `retrieve-timeline'. * twittering-mode.el: `twittering-call-api' receives `format' as an argument for the command `retrieve-timeline'. (twittering-http-get-default-sentinel): refer to `format' in `connection-info' for parsing the retrieved content. (twittering-call-api): receive `format' as an argument for the command `retrieve-timeline'. The `format' is automatically added to the last of `additional-info' for `twittering-http-get'. * twittering-mode.el: Support retrieval of tweets as the JSON format. (twittering-http-get-default-sentinel): support the JSON format. (twittering-extract-common-element-from-json): new function. (twittering-json-object-to-a-status): new function. (twittering-json-object-to-a-status-base): new function. (twittering-json-object-to-a-status-on-search): new function. * twittering-mode.el: Retrieve tweets as the JSON format if possible. (twittering-get-and-render-timeline): retrieve tweets as the JSON format if possible. * twittering-mode.el: Render a link wrapped by the t.co service as the original URL on a search timeline if possible. This requires `json.el'. (twittering-call-api): retrieve a search timeline with entities. 2011-11-13 Tadashi MATSUO * twittering-mode.el: Fix the bug that unconditionally adds `emacs21' and `url-emacs21' into `load-path' on byte-compilation. On byte-compilation, the directories `emacs21' and `url-emacs21', which are included in the repository of twittering-mode, were unconditionally added into `load-path'. Due to this bug, some macros were embedded as obsolete definitions for Emacs21 in the result of byte-compilation. Some functions in the result cause errors on Emacs 22 or later because the obsolete definitions conflict with Emacs newer than 21. On Emacs 22 or later, the directories are no longer added to `load-path' on byte-compilation. Thanks to HKey who has discovered the bug. 2011-10-30 Tadashi MATSUO * test/test-twittering-mode.el: Remove obsolete tests of the obsolete feature related to `twittering-sign-string-function' and `twittering-sign-simple-string'. (test-sign-string): removed. * twittering-mode.el: A tweet has a greater field ID than that of its ancestor tweets. The order of field IDs matches with the order in which tweets should be rendered. (twittering-make-field-id): attach a greater field ID to normal tweets than its ancestor tweets. * twittering-mode.el: Use a common macro for rendering a status. (twittering-render-a-field): new macro for rendering a status. (twittering-render-timeline): use `twittering-render-a-field'. (twittering-show-replied-statuses): use `twittering-render-a-field'. * twittering-mode.el: Accept list names including non-ASCII characters. (twittering-extract-timeline-spec): accept list names including non-ASCII characters. * test/test-twittering-mode.el (timeline-spec): add a test for a list name including non-ASCII characters. 2011-10-23 Tadashi MATSUO * twittering-mode.el: Keep the private information unless the server explicitly informs that it is invalid. (twittering-verify-credentials): display the reason of authorization failure. (twittering-http-get-verify-credentials-sentinel): keep the private information for authorization unless the server returns 401(Unauthorized) as the HTTP response status code. 2011-10-09 Tadashi MATSUO * twittering-mode.el: Bind `default-directory' to the temporary directory to avoid problems caused by executing programs on a removed directory. Thanks to tomykaira who reported the problem. (twittering-send-http-request-internal): locally bind the variable `default-directory' to the temporary directory in order to prevent Emacs from executing an external program in the invalid condition where `default-directory' points to a directory which has been already removed. (twittering-start-http-session-curl-https-p): likewise. (twittering-sha1): likewise. (twittering-read-from-encrypted-file): likewise. (twittering-write-and-encrypt): likewise. (twittering-convert-image-data): likewise. (twittering-save-icon-properties): likewise. (twittering-load-icon-properties): likewise. (twittering-initialize-global-variables-if-necessary): likewise. 2011-10-07 Tadashi MATSUO * twittering-mode.el: Fix the argument of the function `twittering-read-username-with-completion'. Thanks to Akira Tamamori who reported a problem caused by the bug. (twittering-read-timeline-spec-with-completion): fix the argument of the function `twittering-read-username-with-completion'. * twittering-mode.el: Search the content-type header from a HTTP response in a case-insensitive way according to RFC2616. Thanks to luozengbin who reported the bug. (twittering-http-get-default-sentinel): fix the check of the content-type header of a HTTP response. The content-type is now searched in a case-insensitive way according to RFC2616. * twittering-mode.el: Add new functions related to preparation for invoking APIs. (twittering-add-application-header-to-http-request): confirm the existence of OAuth token. (twittering-api-invocation-is-ready-p): new function for checking whether prerequisites for invoking APIs have been prepared without side effects. Strictly speaking, this function may have a side effect because the function `twittering-lookup-connection-type' may change some variables. (twittering-ensure-preparation-for-api-invocation): new function for ensuring prerequisites for invoking APIs. (twittering-visit-timeline): use the new function `twittering-ensure-preparation-for-api-invocation'. * twittering-mode.el: Signal an error when no valid connection method is found on sending a HTTP request. (twittering-send-http-request-internal): signal an error when no valid connection method is found. 2011-10-03 Tadashi MATSUO * twittering-mode.el: Allow users to supplement a username for timeline specs with a following username afterward. (twittering-read-timeline-spec-with-completion): allow users to supplement a username for timeline specs with a following username afterward. * twittering-mode.el: Add a username to the variable `twittering-user-history' after retrieving a user timeline. (twittering-timeline-spec-is-user-p): new function. (twittering-add-timeline-history): add a username to the history bound to `twittering-user-history' if the given spec is a user timeline. * twittering-mode.el: Fix the macro `twittering-revive:prop-get-value'. (twittering-revive:prop-get-value): use `macroexpand' instead of `macroexpand-all'. 2011-09-25 Tadashi MATSUO * twittering-mode.el: Users can post a tweet consisting of only mentions from the pop-up buffer. (twittering-edit-post-status): check a tweet with a simple regexp instead of `twittering-status-not-blank-p'. * twittering-mode.el: Add functions for `revive.el'. (twittering-revive:prop-get-value): new macro defined only when compiling `twittering-mode.el'. (twittering-revive:twittering): new function for restoring a timeline buffer with `revive.el'. (twittering-setup-revive): new function configuring `revive.el' for restoring a timeline buffer. * twittering-mode.el: `twittering-update-status' receives a tweet-type symbol instead of a timeline spec. It replaces a timeline spec representing whether the tweet beingedited is a direct message or not. (twittering-update-status-function): update docstring. (twittering-edit-setup-help): receive a tweet-type symbol as the second argument instead of a timeline spec. (twittering-update-status-from-pop-up-buffer): receive a tweet-type symbol as the fourth argument instead of a timeline spec. (twittering-update-status-from-minibuffer): likewise. (twittering-update-status): likewise. (twittering-direct-message): invoke `twittering-update-status' with a tweet-type symbol `direct-message' instead of a timeline spec. (twittering-enter): invoke `twittering-update-status' with a tweet-type symbol instead of a timeline spec. * twittering-mode.el: A skeleton can be used as `twittering-retweet-format'. (twittering-retweet-format): update docstring. (twittering-update-status-from-pop-up-buffer): accept a skeleton as the first argument. (twittering-update-status-from-minibuffer): likewise. (twittering-update-status): likewise. (twittering-organic-retweet): invoke `twittering-update-status' with a skeleton for generating an initial string. * twittering-mode.el: In default, the cursor is placed on the head when editing an organic retweet. (twittering-retweet-format): modify the initial value so that the cursor will be placed previous to the initial string. * twittering-mode.el: The symbol `organic-retweet' is added as a tweet type referred by edit skeleton. (twittering-update-status-function): update docstring. (twittering-edit-skeleton-alist): likewise. (twittering-update-status): likewise. (twittering-organic-retweet): invoke `twittering-update-status' with the tweet type symbol `organic-retweet' as the explicit fourth argument. 2011-09-05 Tadashi MATSUO * twittering-mode.el: Fix extraction of hashtags from a XML response. (twittering-normalize-raw-status): Fix extraction of hashtags from a XML response. * twittering-mode.el: The sign string feature is obsolete. The feature based on the function `twittering-sign-string-function' and the variable `twittering-sign-simple-string' is removed. The edit skeleton feature can be used as its alternative. (twittering-initialize-global-variables-if-necessary): display a warning about obsolete sign string feature. The function also translates the configuration of obsolete sign string into that of edit skeleton if possible. (twittering-sign-simple-string): removed. (twittering-sign-string-function): removed. (twittering-sign-string-default-function): removed. (twittering-sign-string): removed. (twittering-edit-length-check): do not use the obsolete function `twittering-sign-string'. (twittering-show-minibuffer-length): likewise. (twittering-update-status-from-minibuffer): likewise. 2011-09-04 Tadashi MATSUO * twittering-mode.el: Remove stickiness of text properties. (twittering-make-string-with-user-name-property): add front-sticky and rear-nonsticky property to STR for removing stickiness. (twittering-make-string-with-source-property): likewise. (twittering-make-string-with-uri-property): likewise. (twittering-generate-format-table): add front-sticky and rear-nonsticky property to the string for "%r" in order to remove stickiness. (twittering-generate-formater-for-first-spec): add front-sticky and rear-nonsticky property to the string for "%@" in order to remove stickiness. 2011-09-03 Tadashi MATSUO * twittering-mode.el: Fix a comment. * twittering-mode.el: The properties for hashtags, mentions and URIs are non-sticky. (twittering-make-fontified-tweet-text): make the properties non-sticky for the both direction. * twittering-mode.el: Render a link wrapped by the t.co service as the original URL. (twittering-call-api): call APIs with the option `include_entities=true' if possible. (twittering-normalize-raw-status): extract entities. (twittering-xmltree-to-status): extract entities of direct messages. (twittering-make-fontified-tweet-text): do not fontify a region if it has been already fontified. (twittering-make-fontified-tweet-text-with-entity): new function. (twittering-generate-format-table): try to fontify the text with entities first. * twittering-mode.el: Fix indices in entities of a timeline retrieved as XML. (twittering-make-gap-list): new function. (twittering-get-gap): new function. (twittering-normalize-raw-status): correct indices in entities so that they mean the position in the decoded text. * twittering-mode.el: Suppress redundant decoding. (twittering-normalize-raw-status): decode entities with `twittering-decode-entities-after-parsing-xml'. (twittering-decode-entities-after-parsing-xml): new function. 2011-08-27 Tadashi MATSUO * twittering-mode.el: A list timeline includes native retweets. (twittering-call-api): retrieve a list timeline with native retweets. * twittering-mode.el: Update the service configuration with the 'help/configuration' API periodically. (twittering-call-api): add `get-service-configuration' as a new command. (twittering-service-configuration-default): new constant. (twittering-service-configuration): new variable. (twittering-service-configuration-queried): new variable. (twittering-service-configuration-update-interval): new variable. (twittering-get-service-configuration): new function. (twittering-update-service-configuration): new function. (twittering-update-service-configuration-sentinel): new function. (twittering-update-service-configuration-clean-up-sentinel): new function. (twittering-update-active-buffers): invoke `twittering-update-service-configuration'. * twittering-mode.el: Count characters with considering the t.co link wrapper. (twittering-effective-length): new function. (twittering-edit-length-check): check the length with `twittering-effective-length'. (twittering-edit-post-status): likewise. (twittering-show-minibuffer-length): likewise. * twittering-mode.el: Ad-hoc support for non-ASCII hashtags. (twittering-extract-timeline-spec): support non-ASCII hashtags by an ad-hoc way. (twittering-make-fontified-tweet-text): likewise. (twittering-edit-skeleton-inherit-hashtags): likewise. 2011-08-18 Tadashi MATSUO * twittering-mode.el: Display the requested URI if a HTTP request has failed. (twittering-send-http-request): display the requested method and URI if the request has failed. 2011-08-17 Tadashi MATSUO * twittering-mode.el: Correctly store icons when `twittering-convert-fix-size' is nil. (twittering-save-icon-properties): correctly generate stored representation of icon images when its size is not specified explicitly. 2011-08-14 Tadashi MATSUO * twittering-mode.el: Update the API for a list timeline. (twittering-call-api): use the current API for retrieving a list timeline. * twittering-mode.el: Support ":retweeted_to_user/USER" timeline. (twittering-timeline-spec-to-string): support `retweeted_to_user' timeline. (twittering-extract-timeline-spec): support a string like ":retweeted_to_user/USER" as a `retweeted_by_user' timeline. (twittering-timeline-spec-primary-p): add `retweeted_to_user' as a primary timeline. (twittering-call-api): support `retweeted_to_user' timeline. (twittering-read-timeline-spec-with-completion): add ":retweeted_to_user/" as a candidate. * twittering-mode.el: Support ":retweeted_by_user/USER" timeline. (twittering-timeline-spec-to-string): support `retweeted_by_user' timeline. (twittering-extract-timeline-spec): support a string like ":retweeted_by_user/USER" as a `retweeted_by_user' timeline. (twittering-timeline-spec-primary-p): add `retweeted_by_user' as a primary timeline. (twittering-call-api): support `retweeted_by_user' timeline. (twittering-read-timeline-spec-with-completion): add ":retweeted_by_user/" as a candidate. 2011-08-13 Tadashi MATSUO * twittering-mode.el: Add `migre.me' as a URL shortening serivce. (twittering-tinyurl-services-map): add an entry for `migre.me'. * twittering-mode.el: Save icons correctly when `twittering-icon-storage-limit' is nil. Thanks to HufflepuffBR who reported this problem. (twittering-save-icon-properties): fix the list representation of stored data when `twittering-icon-storage-limit' is nil. 2011-07-29 Tadashi MATSUO * twittering-mode.el: The hash by newer algorithm introduced in OpenSSL 1.0.0 is also generated for each certificate. This is required because OpenSSL 1.0.0 and later fails to find an appropriate certificate if its name is based on the hash by the older algorithm which has been used by OpenSSL before 1.0.0. Thanks to Sakuma who reported this problem. (twittering-ca-cert-alist): redefined as a constant. And each entry has the hash generated by OpenSSL 1.0.0 and later. (twittering-delete-ca-cert): delete multiple files for each certificate. (twittering-ensure-ca-cert): generate two files for each certificate, where their names are the hash by the older algorithm used by OpenSSL before 1.0.0 and the other hash by the newer algorithm used by OpenSSL 1.0.0 and later. * twittering-mode.el: Embed a new root CA certificate to follow an update of the server. (twittering-ca-cert-alist): add a new root CA certificate, `GeoTrust Global CA' in order to follow the update of the server certificate of `search.twitter.com'. * twittering-mode.el: Output embedded certificates as a single file instead of a directory including them. This avoids the management of multiple hashes for each certificate. (twittering-cert-file): new variable replacing `twittering-cert-directory'. (twittering-cert-directory): removed. (twittering-ca-cert-list): new variable replacing `twittering-ca-cert-alist'. (twittering-ca-cert-alist): removed. (twittering-delete-ca-cert): remove a single file including multiple certificates. (twittering-ensure-ca-cert): prepare a single file including multiple certificates instead of a directory including multiple files. (twittering-make-connection-info): replace the parameter `cacert-directory-fullpath' with `cacert-file-fullpath'. (twittering-send-http-request-curl): use the option `--cacert' instead of `--capath'. (twittering-send-http-request-wget): use the option `--ca-certificate' instead of `--ca-directory'. 2011-07-25 Tadashi MATSUO * twittering-mode.el: Fix the API call for `user_timeline' in order to prevent Twitter from confusing a username consisting of digits with a user id. Thanks to Makoto Fujiwara who reported this problem. (twittering-call-api): fix the API call for `user_timeline'. The new implementation gives a username as a query parameter. This prevents Twitter from confusing a username consisting of digits with a user id. * twittering-mode.el: Fix a bug that moves the cursor by calling `twittering-update-status-interactive' from buffers which are not managed by `twittering-mode'. Thanks to mofigan who reported this problem. (twittering-ensure-whole-of-status-is-visible): do not change window configuration unless the given window is bound to a buffer managed by `twittering-mode'. 2011-07-20 Tadashi MATSUO * twittering-mode.el: Fix indentation of the function `twittering-verify-credentials'. (twittering-verify-credentials): fix indentation. * twittering-mode.el: Display exit status of the process for authorization if it exited abnormally. (twittering-http-get-verify-credentials-clean-up-sentinel): display exit status of the process if it exited abnormally. * twittering-mode.el: Embed another root CA certificate to follow an update of the server. Now, the server certificate for `api.twitter.com' is updated and it cannot be verified by the already embedded certificate `Equifax Secure Certificate Authority'. So, a root CA certificate `VeriSign Class 3 Public Primary CA - G2' is also embedded, which is used for verifying the server `api.twitter.com'. (twittering-cert-file): removed. (twittering-delete-ca-cert-file): removed. (twittering-cert-directory): new variable. (twittering-delete-ca-cert): new function. (twittering-ensure-ca-cert): prepare a directory including multiple CA certificates instead of a single file. Now this function generates "VeriSign Class 3 Public Primary CA - G2". (twittering-make-connection-info): replace the parameter `cacert-fullpath' with `cacert-directory-fullpath'. (twittering-send-http-request-native): remove redundant bindings. (twittering-send-http-request-curl): follow the modification of the parameter generated by `twittering-make-connection-info'. (twittering-send-http-request-wget): likewise. * cert/equifax.pem: removed. This certificate had not been used. * cert/Equifax_Secure_Certificate_Authority.cer: Add a certificate that has been used. It was retrieved from https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer , which is used only for verifying the server `search.twitter.com'. * cert/PCA-3G2.pem: Add a root certificate. It is retrieved from https://www.verisign.com/repository/roots/root-certificates/PCA-3G2.pem , which is used for verifying the server `api.twitter.com'. 2011-07-16 Tadashi MATSUO * test/test-twittering-mode.el: Add tests for HMAC-SHA1. * twittering-mode.el: Fix the function for HMAC-SHA1 so that it always return a correct digest. (twittering-sha1): new function. This function can return a correct digest without regard to the current coding system. For very long object, the function `sha1' uses an external program and coding system for the program is not correctly specified. Therefore, the result may depend on the current coding system. The new function is an alternative without the above problem. (twittering-hmac-sha1): use `twittering-sha1' instead of `sha1'. * twittering-mode.el: `twittering-wait-while' is reimplemented with `lexical-let'. (twittering-wait-while): reimplemented with `lexical-let'. Redundant statements are no longer added. This suppresses warnings on byte-compilation. * twittering-mode.el: Fix docstring of `twittering-edit-skeleton-alist'. (twittering-edit-skeleton-alist): fix docstring. * twittering-mode.el: Load private information before initialization. (twittering-private-info-file-loaded): new variable. (twittering-private-info-loaded-p): new function. (twittering-ensure-private-info): new function. (twittering-verify-credentials): do not try to load private information. (twittering-visit-timeline): ensure that private information is loaded if necessary. * twittering-mode.el: Initialize global variables before ensuring a connection method. (twittering-visit-timeline): invoke `twittering-initialize-global-variables-if-necessary' first. * twittering-mode.el: Open the timeline buffer only if authorization succeeded. (twittering-verify-credentials): return t or nil according to whether the authorization succeeded or not. (twittering-visit-timeline): open the timeline buffer only if authorization succeeded. * twittering-mode.el: In `twittering-start', bind a local variable only if necessary. (twittering-start): bind `action' only if necessary. * twittering-mode.el: Start timers only when an active timeline buffer is opened. (twittering-verify-credentials): do not invoke `twittering-start'. (twittering-http-get-verify-credentials-sentinel): likewise. * twittering-mode.el: `twittering-account-authorization' must be reset if `twittering-verify-credentials' exited non-locally. (twittering-verify-credentials): do not manage the global variable `twittering-account-authorization', which will be managed by the new function `twittering-ensure-account-verification'. `twittering-verify-credentials' raises an error if the function `twittering-account-authorization-queried-p` returns non-nil. (twittering-ensure-account-verification): new function. This function can correctly reset the global variable `twittering-account-authorization' if authorization is failed and the function `twittering-verify-credentials' exits non-locally. (twittering-visit-timeline): call `twittering-ensure-account-verification' instead of `twittering-verify-credentials'. 2011-06-26 Tadashi MATSUO * twittering-mode.el: Revise the routine for the format specifier "%C". (twittering-make-string-with-uri-property): new function. (twittering-generate-formater-for-first-spec): use the function `twittering-make-string-with-uri-property' for the format specifier "%C". (twittering-make-time-string): removed. * twittering-mode.el: Add a function to go to the next/previous URI explicitly written in a tweet. (twittering-make-fontified-tweet-text): add uri-origin property to URIs explicitly written in a tweet. (twittering-get-next-thing-pos): new function. (twittering-goto-next-thing): ignore things except URIs explicitly written in a tweet if a prefix argument is given. (twittering-goto-previous-thing): likewise. (twittering-goto-next-uri): new function. (twittering-goto-previous-uri): new function. * twittering-mode.el: Wait a moment after finding that the process is dead and the query has not been finished. This prevents Emacs from canceling the query on the middle of evaluating the sentinel. (twittering-wait-while): new macro. (twittering-oauth-get-token-alist): wait a moment after finding that the process is dead and the query has not been finished. This prevents Emacs from canceling the query on the middle of evaluating the sentinel. (twittering-tinyurl-get): likewise. (twittering-verify-credentials): likewise. (twittering-get-list-sync): likewise. * twittering-mode.el: Correctly ensure an available connection method even if SSL is unavailable. (twittering-ensure-connection-method): return correct value in the case with compromise. * twittering-mode.el: `twittering-ensure-connection-method' displays an error message if no connection methods available. (twittering-ensure-connection-method): display an error message if no connection methods are available. (twittering-visit-timeline): do not display an error message if no connection methods are available. 2011-06-21 Takashi Masuda * twittering-mode.el: Add text properties to "%C". (twittering-generate-formater-for-first-spec): use `twittering-make-time-string' instead of `format-time-string'. (twittering-make-time-string): new function. * twittering-mode.el: Add timeline spec aliases as completion candidates on specifying a timeline spec. (twittering-read-timeline-spec-with-completion): add timeline spec aliases, defined in `twittering-timeline-spec-alias', as completion candidates. 2011-05-21 Tadashi MATSUO * twittering-mode.el: Fix the message for dead process on basic authentication. (twittering-verify-credentials): make the message for dead process on basic authentication similar as that on OAuth/xAuth authentication. * twittering-mode.el: Fix the display of messages about authorization. (twittering-send-http-request): do not display a message on authorization. (twittering-http-get-verify-credentials-sentinel): directly display a message whether the authorization succeeded or not. `twittering-send-http-request' does not display it. * twittering-mode.el: Add the variable `twittering-disable-overlay-on-too-long-string' in order to avoid interference between the update of overlay and some input methods. (twittering-disable-overlay-on-too-long-string): new variable. (twittering-edit-length-check): do not update the overlay if `twittering-disable-overlay-on-too-long-string' is non-nil. 2011-05-16 Tadashi MATSUO * twittering-mode.el: Ensure that a sentinel is invoked when a process is started successfully. (twittering-process-alive-p): new function. (twittering-start-process-with-sentinel): new function. (twittering-send-http-request-native): ensure that the given sentinel is invoked when the process is started successfully. (twittering-send-http-request-curl): replace `start-process' with `twittering-start-process-with-sentinel' in order to ensure that the sentinel is invoked. (twittering-send-http-request-wget): likewise. * twittering-mode.el: Confirm that the process is alive on waiting for its sentinel. (twittering-oauth-get-token-alist): check whether the process is alive on waiting for the invocation of the sentinel for the process. (twittering-tinyurl-get): likewise. (twittering-verify-credentials): likewise. (twittering-get-list-sync): use `twittering-process-alive-p'. * twittering-mode.el: Ignore errors on `xml-parse-region'. (twittering-xml-parse-region): return nil if an error happens on `xml-parse-region'. * twittering-mode.el: Fix uri property of a list name in a tweet. Thanks to Naohiro Aota who reported the problem. (twittering-get-list-url): new function. (twittering-make-fontified-tweet-text): correctly generate uri property for a list name in a tweet. 2011-05-08 Tadashi MATSUO * test/test-twittering-mode.el: Fix and add tests of proxy configuration. Now they do not depend on environment variables. 2011-05-06 Tadashi MATSUO * twittering-mode.el: Replace the symbol `us-ascii' for a coding-system with `iso-safe', which is valid even on Emacs21. (twittering-ensure-ca-cert): use `iso-safe' instead of `us-ascii' as a coding-system for ASCII. (twittering-start-http-session-curl-https-p): likewise. (twittering-initialize-global-variables-if-necessary): likewise. * twittering-mode.el: Add some directories for Emacs21 to `load-path' even when byte-compiling the file on Emacs21. * twittering-mode.el: embed a timeline spec string such as "#HASHTAG" for `goto-spec' of a hashtag instead of a search timeline spec as an internal representation. (twittering-make-hashtag-timeline-spec-string-direct): new macro. (twittering-make-fontified-tweet-text): embed a timeline spec string such as "#HASHTAG" for `goto-spec' of a hashtag instead of a search timeline spec as an internal representation. * twittering-mode.el: Add `twittering-update-status' as a function. (twittering-update-status-function): update docstring. (twittering-update-status-from-pop-up-buffer): rename the argument `spec' `tweet-type-as-spec'. (twittering-update-status-from-minibuffer): likewise. (twittering-update-status): new function. (twittering-direct-message): call `twittering-update-status' instead of referring `twittering-update-status-function'. (twittering-reply-to-user): likewise. (twittering-organic-retweet): likewise. (twittering-enter): likewise. * twittering-mode.el: Edit skeletons can refer to the current timeline spec. (twittering-update-status-function): update the docstring to follow the additional argument CURRENT-SPEC. (twittering-edit-skeleton-alist): update the docstring. (twittering-edit-skeleton-insert-base): support the new argument CURRENT-SPEC. (twittering-edit-skeleton-insert): likewise. (twittering-edit-skeleton-inherit-hashtags): likewise. (twittering-edit-skeleton-inherit-mentions): likewise. (twittering-update-status-from-pop-up-buffer): likewise. (twittering-update-status-from-minibuffer): likewise. (twittering-update-status): add a new argument IGNORE-CURRENT-SPEC. * twittering-mode.el: The predefined edit skeletons `inherit-hashtags' and `inherit-any' insert hashtags if the current timeline is a search timeline where the query string includes hashtags. (twittering-timeline-spec-is-search-p): new function. (twittering-extract-query-string-from-search-timeline-spec): new function. (twittering-edit-skeleton-alist): change the definition of `inherit-hashtags' and `inherit-any' so that they add hashtags if the current timeline is a search timeline. (twittering-edit-skeleton-inherit-hashtags): insert hashtags if CURRENT-SPEC is a search timeline where the query string includes hashtags. 2011-04-23 Tadashi MATSUO * NEWS, NEWS.ja, LAST-VERSION, VERSION, doc/web/index.text: Version 2.0.0 released. * twittering-mode.el: Fix coding system for some operations so that they work well even if the default coding system is `utf-16le-dos'. Thanks to Moto_Dong who reported the problem. (twittering-ensure-ca-cert): explicitly specify coding-system. (twittering-start-http-session-curl-https-p): likewise. (twittering-read-from-encrypted-file): likewise. (twittering-write-and-encrypt): likewise. (twittering-load-icon-properties): likewise. (twittering-initialize-global-variables-if-necessary): likewise. (twittering-status-not-blank-p): likewise. * test/test-twittering-mode.el: add a test for a timeline spec string like "#hashtag". * twittering-mode.el: Store the formatter function before compilation. (twittering-format-status-function-without-compile): new variable. (twittering-update-status-format): store the formatter function as a lambda expression before being compiled. * twittering-mode.el: Embed expressions for fontification in the formatter function instead of calling them as a function. (twittering-make-fontified-tweet-text): return an expression that fontifies a given string. The regular expressions of strings being fontified are concatenated on generating a formatter function. (twittering-generate-format-table): embed the expression fontifying a string in the formatter function. The expression will be byte-compiled by `twittering-update-status-format'. * twittering-mode.el: Redefine some functions as inline in order to make the formatter function more efficient. (twittering-make-common-properties): redefined as an inline function. (twittering-make-string-with-user-name-property): likewise. (twittering-make-string-with-source-property): likewise. (twittering-fill-string): likewise. (twittering-update-filled-string): likewise. (twittering-make-passed-time-string): likewise. * twittering-mode.el: Reduce redundant calls of `string-match' on formatting a tweet. When generating a timeline spec from a string with obvious meaning, the new macros are used instead of the general function, `twittering-extract-timeline-spec'. (twittering-make-user-timeline-spec-direct): new macro. (twittering-make-list-timeline-spec-direct): new macro. (twittering-make-hashtag-timeline-spec-direct): new macro. (twittering-extract-timeline-spec): use new macros. (twittering-make-string-with-user-name-property): call the new macro `twittering-make-user-timeline-spec-direct' instead of calling `twittering-extract-timeline-spec'. (twittering-make-fontified-tweet-text): call the new macros `twittering-make-{user,list,hashtag}-timeline-spec-direct' instead of calling `twittering-extract-timeline-spec'. 2011-04-09 Tadashi MATSUO * twittering-mode.el: Fix headers for a proxy. (twittering-make-connection-info): extract proxy information from `connection-info' instead of directly referring to `twittering-http-proxy-user', `twittering-http-proxy-password', etc. (twittering-send-http-request-native): generate the "Proxy-Authorization" header correctly and give the absolute URI as the request URI when the connection is peformed via a proxy. (twittering-send-http-request-urllib): add "Proxy-Authorization" header if necessary. (twittering-http-application-headers): do not add headers related to a proxy. They are added in functions for each connection method. * twittering-mode.el: "U" pushes a URI of a tweet on text without a uri property. (twittering-push-uri-onto-kill-ring): push a URI of a tweet unless the currently pointed character has a uri property. * twittering-mode.el: `twittering-direct-message' always posts a tweet with direct message API. (twittering-direct-message): always post a tweet with direct message API. * twittering-mode.el: Introduce "edit skeleton". (twittering-edit-skeleton-footer): new variable. (twittering-edit-skeleton-footer-history): new variable. (twittering-edit-skeleton-alist): new variable. (twittering-switch-edit-skeleton): new function. (twittering-edit-skeleton-change-footer): new function. (twittering-edit-skeleton-insert-base): new function. (twittering-edit-skeleton-insert): new function. (twittering-update-status-from-pop-up-buffer): insert the current edit skeleton before editing a tweet. (twittering-update-status-from-minibuffer): likewise. * twittering-mode.el: Add pre-defined edit skeletons. (twittering-extract-matched-substring-all): new function. (twittering-edit-skeleton-alist): add some examples of edit skeletons. (twittering-edit-skeleton-inherit-hashtags): new function for an edit skeleton. (twittering-edit-skeleton-inherit-mentions): likewise. * twittering-mode.el: Add the variable `twittering-fallback-image-format'. (twittering-fallback-image-format): new variable. (twittering-create-image-pair): use the value of `twittering-fallback-image-format' as the fallback format instead of directly using 'xpm. 2011-03-27 Tadashi MATSUO * twittering-mode.el: Discard standard error of the program "convert". On an environment where the option "-flatten" cause a warning for a non-animated image, Emacs must exclude such warnings. (twittering-convert-image-data): discard standard error of the program "convert". * twittering-mode.el: Entrust image type estimation to the command "convert". (twittering-create-image-pair): do not send image type estimated by Emacs to the function `twittering-convert-image-data'. 2011-03-26 Tadashi MATSUO * twittering-mode.el: `twittering-other-user-list-interactive' works well when the specified user follows no list. (twittering-other-user-list-interactive): fix an error occurring when the specified user follows no list or selection is cancelled. * twittering-mode.el: `twittering-other-user-list-interactive' displays a subscription as a string like timeline spec string. (twittering-http-get-list-subscriptions-sentinel): exclude preceding "@" from a string corresponding to a subscription. (twittering-other-user-list-interactive): follow the above modification. * twittering-mode.el: Modify the prompts for subscription. (twittering-read-subscription-list-name): modify the prompt for subscription. (twittering-other-user-list-interactive): likewise. * twittering-mode.el: Add an advice for avoiding an error occuring when `getenv' returns an empty string on Emacs21. The bug had been fixed on Emacs22 and later. * test/test-twittering-mode.el: Fix a test of formating a status according to a change of behavior of `fill-region'. It does not keep white spaces and tabs adjacent to hard newlines on Emacs21, but it keeps them on Emacs22 and later. * twittering-mode.el: Remove opacity on converting an image into a XPM image on Emacs22 and earlier. (twittering-convert-image-data): add an option "+matte" to the command "convert" in order to avoid color allocation error occurring when Emacs22 and earlier try to decode a XPM image with opacity. * twittering-mode.el: Convert an image, which may be animated, into a single static image if Emacs does not support animated images. (twittering-convert-image-data): add an option "-flatten" to the command "convert" unless `create-animated-image'. * twittering-mode.el: Always convert a GIF image into a XPM image if Emacs does not support animated images. (twittering-create-image-pair): always convert a GIF image into a XPM image if Emacs does not support animated images. 2011-03-26 Naohiro Aota * twittering-mode.el (twittering-http-get-list-sentinel-base): New macro: from `twittering-http-get-list-index-sentinel'. (twittering-http-get-list-index-sentinel): Use it. (twittering-http-get-list-subscriptions-sentinel): Ditto. (twittering-call-api): Add `get-list-subscriptions' description; Implement `get-list-subscriptions'. (twittering-get-list-subscriptions): New function. (twittering-get-list-sync): New function from `twittering-get-list-index-sync'. (twittering-get-list-index-sync): Rewrite to use it. (twittering-get-list-subscriptions-sync): New function. Use it. (twittering-read-timeline-spec-with-completion): New function. (twittering-other-user-list-interactive): Accept prefix to read other users' subscription list. 2011-03-15 Tadashi MATSUO * twittering-mode.el: Support cancel of retweets posted by the authenticated user. (twittering-delete-status): cancel a retweet if it has been retweeted by the authenticated user. * twittering-mode.el: Explicitly use binary coding system on I/O of icon properties. Thanks to Naohiro Aota. (twittering-save-icon-properties): explicitly use binary coding system on writing icon properties. (twittering-load-icon-properties): likewise. 2011-02-19 Tadashi MATSUO * twittering-mode.el: Disable the persistent icon storage if `jka-compr' is unavailable. (twittering-save-icon-properties): confirm that `jka-compr' is available. (twittering-load-icon-properties): likewise. (twittering-initialize-global-variables-if-necessary): disable the persistent icon storage if `jka-compr' is unavilable. * twittering-mode.el: Add `twittering-add-to-history' for Emacs21. (twittering-add-to-history): new function. (twittering-add-timeline-history): use `twittering-add-to-history'. * twittering-mode.el: Introduce the limit of number of icons being stored persistently. (twittering-icon-storage-file): add docstring about `twittering-icon-storage-limit'. (twittering-icon-storage-recent-icons): new variable to which properties of recently rendered icons are stored. (twittering-icon-storage-limit): new variable. (twittering-update-icon-storage-recent-icons): new function. (twittering-get-display-spec-for-icon): invoke `twittering-update-icon-storage-recent-icons' whenever this function is invoked. (twittering-save-icon-properties): write properties of icons within the limit specified by `twittering-icon-storage-limit'. In addition, this function records properties in the new format. (twittering-load-icon-properties): support the new format for storing properties of icons. 2011-02-15 Tadashi MATSUO * twittering-mode.el: Confirm validity of a format string before updating the function formatting a tweet. (twittering-update-status-format): update the function only if the given format string is valid. * twittering-mode.el: Support a new format specifier "%RT{...}". (twittering-status-format): update docstring. (twittering-generate-formater-for-first-spec): support a new format specifier "%RT{...}". 2011-02-13 Tadashi MATSUO * test/test-twittering-mode.el (test-hmac-sha1): Fix a typo. * twittering-mode.el: Rearrange internal representation of a retweet. (twittering-add-statuses-to-timeline-data): use `retweeted-id' instead of `source-id'. (twittering-normalize-raw-status): rearrange internal representation of a retweet. The information as a tweet posted by the retweeter is stored with keys prefixed with `retweeting-'. The information as a tweet posted by the original author is stored with keys prefixed with `retweeted-'. Keys prefixed with `original-' or `source-' are obsolete. (twittering-make-common-properties): use `retweeted-id' instead of `source-id'. (twittering-get-common-properties): likewise. (twittering-generate-format-table): use `retweeting-user-screen-name' instead of `original-user-screen-name'. (twittering-generate-formater-for-first-spec): use `retweeted-id' instead of `source-id'. (twittering-render-timeline): likewise. (twittering-native-retweet): likewise. * twittering-mode.el: `created_at' for an official retweet means when the original tweet was posted instead of when it was retweeted. (twittering-normalize-raw-status): do not override `created_at'. The key `created_at' in an alist representing a retweet means when the original tweet was posted. * twittering-mode.el: When `twittering-follow' is invoked on an official retweet, ask a subject. (twittering-follow): ask a subject when this function is invoked on an official retweet. * twittering-mode.el: Add a function to report a user as a spammer. (twittering-call-api): support a new command `block-and-report-as-spammer'. (twittering-block-and-report-as-spammer): new function. * twittering-mode.el: Add a function to block a user. (twittering-call-api): support a new command `block'. (twittering-block): new function. * twittering-mode.el: Support persistent icon storage. (twittering-icon-storage-file): new variable. (twittering-use-icon-storage): new variable. (twittering-register-image-spec): new function. (twittering-register-image-data): reimplemented with `twittering-register-image-spec'. (twittering-save-icon-properties): new function. (twittering-load-icon-properties): new function. 2011-02-05 Tadashi MATSUO * twittering-mode.el: Remove a trailing newline from strings received from `bit.ly' and `j.mp'. Thanks to mm_o_ig. (twittering-tinyurl-services-map): add a post-processing function that removes a trailing newline from result of `bit.ly' and `j.mp'. * twittering-mode.el: Revise some messages. Thanks to Server. (twittering-http-get-default-sentinel): revise messages. (twittering-show-replied-statuses): likewise. (twittering-hide-replied-statuses): likewise. (twittering-edit-post-status): likewise. (twittering-read-timeline-spec-with-completion): likewise. (twittering-other-user-list-interactive): likewise. (twittering-direct-message): likewise. (twittering-goto-next-status): likewise. (twittering-goto-previous-status): likewise. 2011-01-29 Tadashi MATSUO * twittering-mode.el: Reimplement `twittering-tinyurl-get' with `twittering-send-http-request'. (twittering-url-wrapper): removed. (twittering-url-insert-file-contents): removed. (twittering-url-retrieve-synchronously): removed. (twittering-tinyurl-get): reimplemented with `twittering-send-http-request'. In addition, the query parameter is correcly encoded by `twittering-percent-encode'. * twittering-mode.el: Add `is.gd' as a URL shortening service. Thanks to Michael Kohl. (twittering-tinyurl-service): update the document. (twittering-tinyurl-services-map): add an entry for `is.gd'. * twittering-mode.el: Extend the format of `twittering-tinyurl-services-map'. One can register a service that requires a special HTTP request and/or post-processing. (twittering-tinyurl-services-map): extend the meaning of the variable. (twittering-tinyurl-get): support new format of `twittering-tinyurl-services-map'. * twittering-mode.el: Add `goo.gl' as a URL shortening service. (twittering-tinyurl-services-map): add an entry for `goo.gl'. * twittering-mode.el: Add `bit.ly' and `j.mp' as URL shortening services. Thanks to Lars Gregori. (twittering-tinyurl-services-map): add entries for `bit.ly' and `j.mp'. (twittering-bitly-login): new variable. (twittering-bitly-api-key): new variable. (twittering-make-http-request-for-bitly): new function. * twittering-mode.el: Reimplement normalization of alists from XML structure. (twittering-atom-xmltree-to-status-datum): change the value corresponding to the key `source' into a URL with a tag. (twittering-status-to-status-datum): removed. (twittering-normalize-raw-status): new function to generate normalized alist representing a tweet. (twittering-xmltree-to-status): use `twittering-normalize-raw-status' instead of `twittering-status-to-status-datum'. * twittering-mode.el: `twittering-make-clickable-status-datum' does not redefine `source'. (twittering-atom-xmltree-to-status-datum): define `source' as a text surrounded by A-tag. (twittering-normalize-raw-status): likewise. (twittering-make-clickable-status-datum): do not redefine `source'. * twittering-mode.el: Add text properties to tweets on rendering. (twittering-http-get-default-sentinel): do not call `twittering-make-clickable-status-datum'. (twittering-make-clickable-status-datum): removed. (twittering-make-string-with-user-name-property): new function. (twittering-make-string-with-source-property): new function. (twittering-make-fontified-tweet-text): new function. (twittering-generate-format-table): add text properties. 2011-01-23 Tadashi MATSUO * test/test-twittering-mode.el: Add some tests for the format specifiers "%FILL[prefix]{...}" and "%FOLD[prefix]{...}". * twittering-mode.el (twittering-status-format): add a document for the format specifier "%FOLD[prefix]{...}". * test/test-twittering-mode.el: Fix an error of `url-generic-parse-url' on Emacs21 by calling `url-scheme-get-property' before `url-generic-parse-url' is called. 2011-01-21 Tadashi MATSUO * twittering-mode.el: Decode received XML document as UTF-8 before parsing it. (twittering-http-get-default-sentinel): decode received XML document as UTF-8 before parsing it if Content-Type in response header has a parameter "charset=utf-8". * twittering-mode.el: The format specifier "%FOLD[prefix]{...}" does not squeeze white spaces. (twittering-fill-string): does not squeeze white spaces if `keep-newline' is non-nil. 2011-01-16 Tadashi MATSUO * twittering-mode.el: Ensure that the pointed tweet is visible on editing a tweet. (twittering-ensure-whole-of-status-is-visible): new function. * twittering-mode.el: Isolate addition of text properties from a function parsing XML. (twittering-http-get-default-sentinel): call `twittering-make-clickable-status-datum' here. (twittering-atom-xmltree-to-status): do not add text properties to statuses. (twittering-status-to-status-datum): likewise. * twittering-mode.el: Render statuses in order of field property instead of id property. (twittering-make-common-properties): add field property as a common property. (twittering-get-common-properties): likewise. (twittering-field-id<): new function. (twittering-field-id=): new function. (twittering-make-field-id): new function. (twittering-make-field-properties): new function. (twittering-render-timeline): render statuses in order of their field properties. (twittering-show-replied-statuses): add special field property to replied statuses. * twittering-mode.el: Move point by using field property instead of id property. (twittering-get-current-status-head): redefined with field property instead of id property. (twittering-get-first-status-head): likewise. (twittering-get-next-status-head): likewise. (twittering-get-previous-status-head): likewise. * twittering-mode.el: Use rendered-as property for rendering replied statuses instead of a trick with id and original-id properties. (twittering-get-common-properties): add rendered-as property as a common property. (twittering-make-field-properties): add rendered-as property if necessary. (twittering-make-field-properties-of-popped-ancestors): new function. (twittering-rendered-as-ancestor-status-p): new function. (twittering-get-base-id-of-ancestor-at): new function. (twittering-replied-statuses-visible-p): use the new function `twittering-get-base-id-of-ancestor-at' instead of directly referring id and original-id properties. (twittering-hide-replied-statuses): likewise. (twittering-show-replied-statuses): use `twittering-make-field-properties-of-popped-ancestors'. * twittering-mode.el: Remove a trick using id and original-id properties for rendering replied statuses. (twittering-get-common-properties): remove original-id from common properties. (twittering-show-replied-statuses): do not overwrite id and original-id properties. (twittering-enter): do not refer original-id property. * twittering-mode.el: Support favorites timeline. (twittering-timeline-spec-to-string): support favorites timeline spec. (twittering-extract-timeline-spec): likewise. (twittering-timeline-spec-primary-p): add favorites timeline spec is a primary timeline spec. (twittering-call-api): support favorites timeline spec. (twittering-read-timeline-spec-with-completion): add ":favorites" as a candidate of completion. In addition, one can input a username with completion for ":favorites/". (twittering-goto-next-status): display an error message on the oldest tweet on favorites timeline. (twittering-goto-previous-status): likewise. * test/test-twittering-mode.el: Add tests for favorites timeline spec. 2011-01-09 Tadashi MATSUO * twittering-mode.el: Ensure that encrypted strings are written with no conversion. Thanks to Sakuma. (twittering-write-and-encrypt): ensure that encrypted strings are written with no conversion. 2010-12-17 Yuto HAYAMIZU * twittering-mode.el (twittering-organic-retweet): prohibit retweeting protected tweets. 2010-11-30 Tadashi MATSUO * twittering-mode.el: Ensure that the methods using url library works well for HTTP redirection. (twittering-send-http-request-urllib): make the variable, `url-http-attempt-keepalives', buffer-local in order to send the local value to the sentinel invoked for HTTP redirection. If the variable is not made buffer-local, the connection with redirection may not be closed according to its global value. * twittering-mode.el: Introduce an ad-hoc treatment for url library on Emacs21 again. This ensures that the sentinel for an redirect HTTP request, such as asynchronous retrieval of icon images, works well. (twittering-send-http-request): introduce an ad-hoc treatment for the url library again. It is required because the process for a redirected HTTP request is alive when the url library for Emacs21 invokes the callback. (twittering-send-http-request-urllib): add an ad-hoc treatment for HTTP redirection on Emacs21. 2010-11-27 Tadashi MATSUO * twittering-mode.el: Fix a bug of retrieving a URI repeatedly. (twittering-resolve-url-request): bind `additional-info' to the appropriate alist storing the URI that will be retrieved. The alist is referred by `twittering-url-retrieve-async-sentinel' and `twittering-url-retrieve-async-clean-up-sentinel'. Since the alist was null, a URI might be retrieved repeatedly. 2010-11-25 Tadashi MATSUO * twittering-mode.el: Delay next asynchronous retrieval until all sentinels for the current retrieval finish. (twittering-url-retrieve-async-sentinel): call `twittering-resolve-url-request' after sentinels finish. (twittering-url-retrieve-async-clean-up-sentinel): call `twittering-resolve-url-request' only when the current retrieval is failed. * twittering-mode.el: Periodically invoke actions associated with idle-timer even if Emacs remains idle long time. (twittering-timer-interval-for-redisplaying): extended to 5.0. (twittering-url-retrieve-async-sentinel): use `twittering-run-on-idle' instead of `run-with-idle-timer'. (twittering-idle-timer-for-redisplay): new variable. (twittering-run-on-idle): new function. (twittering-run-repeatedly-on-idle): new function. (twittering-start): use `twittering-run-repeatedly-on-idle' instead of `run-with-idle-timer'. (twittering-stop): also cancel the idle timer for redisplaying. * twittering-mode.el: Add retrieved timeline spec string to history even if it includes no new statuses. (twittering-http-get-default-sentinel): add `spec-string' on successful retrieval even if there are no new statuses. * twittering-mode.el: `twittering-url-retrieve-async' immediately invokes the sentinel if the url has been already retrieved. (twittering-url-retrieve-async): immediately invoke the sentinel if the given url has been already retrieved. * twittering-mode.el: Call `url-retrieve' without attempting keep-alive. (twittering-send-http-request): remove special treatment according to `status-str' for the connection method by url library. It was necessary because `url-retrieve' invoked its sentinel before the process exits. (twittering-send-http-request-urllib): call `url-retrieve' with binding `url-http-attempt-keepalives' to nil. * twittering-mode.el: The property symbol `belongs-to' is renamed `source-spec'. (twittering-render-timeline): add `source-spec' to each status instead of `belongs-to'. (twittering-direct-message): use `source-spec' instead of `belongs-to'. (twittering-enter): likewise. * twittering-mode.el: Fix a bug that some text properties of a tweet rendered on a buffer may be lost by redisplaying it. (twittering-make-common-properties): new function. (twittering-get-common-properties): new function. (twittering-generate-format-status-function): use `twittering-make-common-properties'. (twittering-format-status-for-redisplay): use `twittering-get-common-properties'. (twittering-update-filled-string): likewise. * twittering-mode.el: `twittering-redisplay-status-on-each-buffer' restores common properties of re-rendered tweets. (twittering-format-status-for-redisplay): do not restore properties. (twittering-update-filled-string): likewise. (twittering-redisplay-status-on-each-buffer): restore common properties. * twittering-mode.el: Add `source-spec' as an entry of alist storing a tweet. (twittering-add-statuses-to-timeline-data): add the `source-spec' property to each new status. (twittering-make-common-properties): add `source-spec' as a common property. (twittering-get-common-properties): update docstring. (twittering-render-timeline): do not add the `source-spec' property. * twittering-mode.el: Correctly define the alias of `open-ssl-stream' for Emacs21 even if `url-gw.el' has been already loaded and unavailable autoload has been declared. (twittering-start-http-session-urllib-https-p): ignore the autoload declaration of `open-ssl-stream' in `url-gw.el' if "ssl.el" is unavailable. * twittering-mode.el: Fix a bug that `twittering-username' is not initialized when using encryption of authorized token with OAuth. (twittering-http-get-verify-credentials-sentinel): apropriately initialize `twittering-username' even if encryption of authorized token is used with OAuth. 2010-11-14 Tadashi MATSUO * twittering-mode.el: Fix a bug in registration of a sentinel for asynchronous retrieval. (twittering-url-retrieve-async): fix registration of sentinels to avoid registering a sentinel repeatedly. * twittering-mode.el: Contents retrieved by url library are copied as unibyte string. Without this modification, binary data may be retrieved incorrectly. (twittering-send-http-request-urllib): copy contents retrieved by url library as unibyte string. Without this modification, binary data may be retrieved incorrectly. * twittering-mode.el: Sentinels for `twittering-send-http-request' are called with a process status symbol instead of a process status symbol. This is necessary for faking a status of a process generated by url library. (twittering-send-http-request): call sentinels with a process status symbol instead of a process status string. (twittering-http-get-default-sentinel): receives `status' instead of `status-str'. (twittering-http-get-list-index-sentinel): likewise. (twittering-http-post-default-sentinel): likewise. (twittering-http-get-verify-credentials-sentinel): likewise. (twittering-http-get-verify-credentials-clean-up-sentinel): likewise. (twittering-oauth-get-token-alist): define sentinels so that they receive `status' instead of `status-str'. (twittering-get-and-render-timeline): likewise. * twittering-mode.el: Redisplay tweets with idle timer. (twittering-timer-interval-for-redisplaying): change the meaning. (twittering-start): `twittering-redisplay-status-on-buffer' is called by `run-with-idle-timer'. * twittering-mode.el: `twittering-resolve-url-request' uses `twittering-send-http-request' instead of `url-retrieve'. (twittering-resolve-url-request): use `twittering-send-http-request' instead of `url-retrieve'. (twittering-url-retrieve-async-sentinel): new function. (twittering-url-retrieve-async-clean-up-sentinel): new function. * twittering-mode.el: Sentinels for asynchronous retrieval are invoked with `run-with-idle-timer'. The delay will prevent Emacs from stucking on inputting characters on other buffer. (twittering-url-request-sentinel-delay): new variable. (twittering-url-retrieve-async-sentinel): invoke sentinels with `run-with-idle-timer'. 2010-11-13 Tadashi MATSUO * twittering-mode.el: `twittering-send-http-request' correctly transfer `additional-info'. (twittering-send-http-request): call `twittering-send-http-request-internal' with correct arguments. * twittering-mode.el: Remove redundant entries from an argument of `twittering-send-http-request'. (twittering-http-get): remove redundant entries from `additional-info', an argument of `twittering-send-http-request'. (twittering-http-post): likewise. * twittering-mode.el: Fix docstring of `twittering-call-api'. (twittering-call-api): fix docstring. * twittering-mode.el: `twittering-call-api' extracts a query string from the given timeline spec. (twittering-call-api): extract a query string of search timeline from the given timeline spec. (twittering-get-and-render-timeline): remove a query string from the second argument of `twittering-call-api'. * twittering-mode.el: `twittering-call-api' can calculate how many tweets should be retrieved. (twittering-call-api): let the argument `number' of the command `retrieve-timeline' be optional. (twittering-get-and-render-timeline): remove explicit calculation of number of tweets which will be retrieved. * twittering-mode.el: Add a new argument `additional-info' to `twittering-http-{get,put}'. It can be used to send information to generated processes. (twittering-http-get): replace the argument `noninteractive' with a new argument `additional-info', which will be sent to `twittering-send-http-request'. (twittering-http-post): add a new argument `additional-info', which will be sent to `twittering-send-http-request'. (twittering-call-api): send the information of `noninteractive' as a member of `additional-info' to `twittering-http-get'. * twittering-mode.el: Timeline spec is sent to a sentinel via `connection-info' instead of `twittering-process-info-alist'. (twittering-http-get-default-sentinel): receive the timeline spec from `connection-info' instead of `twittering-process-info-alist' via `twittering-get-timeline-spec-from-process'. (twittering-get-and-render-timeline): send timeline spec to the sentinel via `additional-info', which is an argument of `twittering-call-api'. * twittering-mode.el: Confirm that `twittering-proxy-use' is nil when trying the connection method `native'. (twittering-start-http-session-native-tls-p): return nil if `twittering-proxy-use' is non-nil. * twittering-mode.el: Display the current connection method on the mode-line. (twittering-display-connection-method): new variable. (twittering-lookup-connection-type): add the entry `display-name' if necessary. (twittering-get-connection-method-name): new function. (twittering-mode-line-buffer-identification): display the current connection method on the mode-line. * twittering-mode.el: The default value of `twittering-url-show-status' is changed to nil. (twittering-url-show-status): initialized as nil. * twittering-mode.el: Postpone configuring the global variables `twittering-username' and `twittering-password' until the account is authenticated. (twittering-prepare-account-info): return a pair of username and password instead of setting them as global variables. (twittering-verify-credentials): do not set the global variables `twittering-username' and `twittering-password' until the account is authenticated. (twittering-http-get-verify-credentials-sentinel): set the global variables `twittering-username' and `twittering-password' if necessary. * twittering-mode.el: Add new connection method `urllib-http' and `urllib-https'. (twittering-connection-type-order): add `urllib-http' and `urllib-https'. (twittering-connection-type-table): add new entries for `urllib-http' and `urllib-https'. (twittering-send-http-request): add special treatment for the connection method using the url library. (twittering-start-http-session-urllib-p): new function. (twittering-start-http-session-urllib-https-p): new function. (twittering-send-http-request-urllib): new function. (twittering-pre-process-buffer-urllib): new function. 2010-10-14 Tadashi MATSUO * twittering-mode.el: `twittering-get-error-message' generates an error message with explanation if possible. (twittering-get-error-message): generate an error message with explanation if possible. `twittering-xml-parse-region' is called only when it is required. It is determined by the new argument `header-info'. (twittering-http-get-default-sentinel): use `twittering-get-error-message' for generating a total error message, not only explanation. (twittering-http-get-list-index-sentinel): likewise. (twittering-http-post-default-sentinel): likewise. * twittering-mode.el: The second argument of `twittering-call-api' is replaced with `additional-info', which is sent to `twittering-send-http-request' via `twittering-http-get' or `twittering-http-put'. (twittering-call-api): replace the argument `noninteractive' with `additional-info', which is sent to `twittering-send-http-request' via `twittering-http-get' or `twittering-http-put'. (twittering-get-and-render-timeline): send `noninteractive' via the new argument `additional-info' of `twittering-call-api'. 2010-10-09 Tadashi MATSUO * twittering-mode.el: Correctly render the format specifier "%L" with a preceding whitespace. Thanks to Tom X. Tobin. (twittering-generate-format-table): add a preceding whitespace to the format specifier "%L". The previous routine contradicts the docstring of `twittering-status-format'. * test/test-twittering-mode.el: Correct the test for the format specifier "%L". * test/test-twittering-mode.el: Fix the test for HMAC. * twittering-mode.el (twittering-connection-type-table): remove obsolete entries. * twittering-mode.el: `twittering-release-process' is called as a clean-up sentinel. (twittering-call-api): accept new option `clean-up-sentinel' for `retrieve-timeline'. (twittering-http-default-sentinel): do not call `twittering-release-process'. (twittering-get-and-render-timeline): explicitly register `twittering-release-process' as a clean-up sentinel. * twittering-mode.el: Classify functions into some groups. * twittering-mode.el: Add a new function `twittering-send-http-request-with-default-sentinel'. (twittering-send-http-request-with-default-sentinel): new function. * twittering-mode.el: Adapt some functions to `twittering-send-http-request-with-default-sentinel'. (twittering-get-response-body): removed. (twittering-start-http-session): use `twittering-send-http-request-with-default-sentinel' instead of `twittering-send-http-request' and `twittering-http-default-sentinel'. (twittering-get-error-message): assume that the given buffer consists of HTTP response body without headers. (twittering-http-default-sentinel): removed. (twittering-http-get-default-sentinel): modified so that it can be invoked via `twittering-send-http-request-with-default-sentinel'. (twittering-http-get-list-index-sentinel): likewise. (twittering-http-post-default-sentinel): likewise. (twittering-oauth-get-token-alist): likewise. (twittering-http-get-verify-credentials-sentinel): likewise. (twittering-http-get-verify-credentials-clean-up-sentinel): likewise. (twittering-get-status-from-http-response): removed. (twittering-get-and-render-timeline): modify arguments of `clean-up-sentinel' to adapt it to `twittering-send-http-request-with-default-sentinel'. * twittering-mode.el: Rename `twittering-send-http-request-with-default-sentinel' `twittering-send-http-request'. (twittering-send-http-request-internal): renamed from `twittering-send-http-request'. (twittering-send-http-request): renamed from `twittering-send-http-request-with-default-sentinel'. (twittering-start-http-session): use `twittering-send-http-requeset' instead of `twittering-send-http-request-with-default-sentinel'. (twittering-oauth-get-token-alist): likewise. * twittering-mode.el: Validity of a HTTP request is confirmed by `twittering-make-http-request'. (twittering-make-http-request): check the validity of arguments. (twittering-start-http-session): remove validity check. * twittering-mode.el: Remove `twittering-start-http-session'. (twittering-start-http-session): removed. (twittering-http-get): use `twittering-send-http-request' instead of `twittering-start-http-session'. (twittering-http-post): likewise. * twittering-mode.el: "Content-Length" for OAuth is calculated by `twittering-make-http-request'. (twittering-oauth-get-token-alist): remove explicit specification of "Content-Length". The header value is determined by `twittering-make-http-request'. * twittering-mode.el: Add `encoded-query-alist' entry to an alist of a HTTP request. This is required for generating "Authorization" header of OAuth. (twittering-make-http-request): add `encoded-query-alist' entry to an alist corresponding to a HTTP request. * twittering-mode.el: Add `uri-without-query' entry to an alist of a HTTP request. This is required for generating "Authorization" header of OAuth. (twittering-make-http-request): add `uri-without-query' entry to an alist corresponding to a HTTP request. * twittering-mode.el: Introduce `twittering-add-application-header-to-http-request'. (twittering-http-application-headers-with-auth): removed. (twittering-add-application-header-to-http-request): new function. (twittering-http-get): use `twittering-add-application-header-to-http-request' instead of `twittering-http-application-headers-with-auth'. (twittering-http-post): likewise. * twittering-mode.el: Fix `twittering-buffer-related-p' in order to support multiple edit buffers. (twittering-buffer-related-p): fix a condition so that it works well even when multiple edit buffer exists. * twittering-mode.el: Solve cyclic reference on definition of `twittering-unicode-replacement-char'. (twittering-ucs-to-char-internal): new function. (twittering-unicode-replacement-char): initialized by `twittering-ucs-to-char-internal'. (twittering-ucs-to-char): redefined with `twittering-unicode-replacement-char' and `twittering-ucs-to-char-internal'. * twittering-mode.el: Modify some codes to avoid warnings on byte-compile. (twittering-start-http-session-native-tls-p): load the tls library before byte-compiling this function. This avoids a warning of the reference to `tls-program' on byte-compile. (twittering-read-from-encrypted-file): likewise. The epa library and "alpaca.el" are loaded before byte-compiling this function. (twittering-modeline-properties): new constant. (twittering-modeline-active): defined with `twittering-modeline-properties'. (twittering-modeline-inactive): likewise. 2010-09-26 Tadashi MATSUO * twittering-mode.el: Remove redundant pre-processing of HTTP response buffer for SSL via a proxy. (twittering-oauth-get-response-alist): remove redundant pre-processing of HTTP response buffer for SSL via proxy. Instead of it, `twittering-oauth-get-token-alist' invokes an appropriate function for pre-processing. * twittering-mode.el: Correct schemes of URIs used in OAuth/xAuth procedures. (twittering-oauth-request-token-url): removed. (twittering-oauth-authorization-url-base): removed. (twittering-oauth-access-token-url): removed. (twittering-oauth-request-token-url-without-scheme): new variable. (twittering-oauth-authorization-url-base-without-scheme): new variable. (twittering-oauth-access-token-url-without-scheme): new variable. (twittering-oauth-get-token-alist): refer to the scheme of the given URI instead of `twittering-oauth-use-ssl'. (twittering-verify-credentials): make a URI with correct scheme for OAuth or xAuth procedure. The scheme is determined by `twittering-oauth-use-ssl'. * twittering-mode.el: A HTTP request alist is included in the connection info for the request. (twittering-oauth-get-token-alist): add an HTTP request alist into `connection-info'. (twittering-send-http-request-curl): extract the HTTP request alist from `connection-info' instead of an argument. (twittering-send-http-request-wget): likewise. (twittering-send-http-request-native): likewise. (twittering-make-connection-info): generate connection info according to an arugment `request'. (twittering-send-http-request): register the sentinel so that it will be invoked with three arguments, process, status-string and connection-info. The connection-info is automatically generated from the given HTTP request alist. (twittering-start-http-session): do not bind `connection-info'. * twittering-mode.el: `twittering-send-http-request' receives optional arguments for connection method. (twittering-send-http-request): add two optional arguments for customizing connection method. * twittering-mode.el: Fix docstring of `twittering-make-http-request'. (twittering-make-http-request): fix docstring. * twittering-mode.el: `twittering-make-http-request' automatically adds the header field "Content-Length" if necessary. (twittering-make-http-request): add the header field "Content-Length" if it is missing on "POST" method. (twittering-http-application-headers): do not add the header field "Content-Length". * twittering-mode.el: Add `twittering-make-http-request-from-uri'. (twittering-make-http-request): accept a string as the argument `query-parameters', which is treated as an encoded query string. (twittering-make-http-request-from-uri): new function, which generates a HTTP request alist from URI. * twittering-mode.el: Rearrange `twittering-oauth-get-token-alist'. (twittering-oauth-get-token-function-table): removed. Instead of the variable, `twittering-connection-type-table' is used. (twittering-oauth-get-token-function-type): removed. Instead of the variable, `twittering-connection-type-order' is used. (twittering-oauth-get-token-alist): use `twittering-make-http-request-from-uri' and `twittering-send-http-request'. (twittering-verify-credentials): remove unnecessary statements. (twittering-ensure-connection-method): take account of `twittering-oauth-use-ssl'. * twittering-mode.el: Transfer sentinel functions to `twittering-default-sentinel' via `connection-info'. (twittering-start-http-session): transfer the variable `sentinel' to `twittering-http-default-sentinel' via `connection-info'. (twittering-http-default-sentinel): remove the arguments `func' and `clean-up-sentinel'. The sentinel functions are retrieved from `connection-info'. 2010-09-19 Tadashi MATSUO * twittering-mode.el: Fix `twittering-push-uri-onto-kill-ring'. (twittering-push-uri-onto-kill-ring): confirm that `kill-ring' is non-nil before calling `current-kill'. * twittering-mode.el: Copy tweets by "C-". Thanks to Faried Nawaz. (twittering-mode-menu-on-uri-map): new keymap for menu on URI. (twittering-mode-on-uri-map): new keymap used on URI. (twittering-mode-map): bind "C-" to `mouse-set-point' to move the point and bind "C-" to `twittering-push-tweet-onto-kill-ring'. (twittering-make-clickable-status-datum): embed new keymap `twittering-mode-on-uri-map' in texts that have `uri' property. (twittering-generate-format-table): likewise. (twittering-generate-formater-for-first-spec): likewise. (twittering-push-tweet-onto-kill-ring): new function. * twittering-mode.el: Introduce a function sending a HTTP requests with `curl'. (twittering-connection-type-table): use new functions `twittering-start-http-session-generic' and `twittering-send-http-request-curl' for connection-type `curl'. (twittering-oauth-get-token-function-table): register the pre-processing function for `curl'. (twittering-oauth-get-token-alist-generic): new function. This works with a function sending HTTP request. (twittering-oauth-get-token-alist-curl): removed. The function is replaced with the combination of `twittering-oauth-get-token-alist-generic' and `twittering-send-http-request-curl'. (twittering-oauth-get-token-alist): use `twittering-oauth-get-token-alist-generic' if the found entry is a cons pair of functions. (twittering-send-http-request-curl): new function. This is abstract interface for sending HTTP request via `curl'. (twittering-start-http-session): add more entries to `connection-info'. `twittering-send-http-request-curl' requires them. (twittering-start-http-session-generic): new function. (twittering-start-http-session-curl): removed. The function is replaced with the combination of `twittering-start-http-session-generic' and `twittering-send-http-request-curl'. * twittering-mode.el: Introduce a function sending a HTTP request with native functions. (twittering-connection-type-table): use generic function for connection-type `native'. (twittering-oauth-get-token-function-table): likewise. (twittering-oauth-get-token-alist-native): removed. The function is replaced with the combination of `twittering-oauth-get-token-alist-generic' and `twittering-send-http-request-native'. (twittering-start-http-session-native): removed. The function is replaced with the combination of `twittering-start-http-session-generic' and `twittering-send-http-request-native'. * twittering-mode.el: Integrate generic function into `twittering-start-http-session'. (twittering-connection-type-table): remove the entry `start' and rename `start-process' `send-http-request'. (twittering-lookup-http-start-function): use `send-http-request' instead of `start-process'. (twittering-start-http-session): unified with `twittering-start-http-session-generic'. (twittering-start-http-session-generic): removed. * twittering-mode.el: The HTTP header field "Expect" will be added only when using `curl'. (twittering-send-http-request-curl): add the field "Expect". (twittering-start-http-session): remove the field "Expect". * twittering-mode.el: Integrate generic function into `twittering-oauth-get-token-alist'. (twittering-oauth-get-token-alist): unified with `ftwittering-oauth-get-token-alist-generic'. (twittering-oauth-get-token-alist-generic): removed. * twittering-mode.el: Add new connection method `wget'. (twittering-wget-program): new variable. (twittering-connection-type-order): add an entry for `wget'. (twittering-connection-type-table): add entries for new connection-method `wget'. (twittering-oauth-get-token-function-table): likewise. (twittering-find-wget-program): new function. (twittering-start-http-session-wget-p): new function. (twittering-send-http-request-wget): new function. (twittering-pre-process-buffer-wget): new function. * twittering-mode.el: Use an alist for representing parameters of a HTTP request. (twittering-oauth-get-token-alist): use an alist for representing a HTTP request. (twittering-send-http-request-curl): receive a HTTP request as an alist. (twittering-send-http-request-wget): likewise. (twittering-send-http-request-native): likewise. * twittering-mode.el: Rearrange `twittering-make-http-request'. (twittering-make-http-request): return an alist representing parameters of a HTTP request instead of a function. (twittering-start-http-session): generate a HTTP request alist by `twittering-make-http-request'. * twittering-mode.el: Ensure an available connection method before visiting a timeline. (twittering-lookup-http-start-function): do not retry finding connection-method with compromise. It is assumed that an available connection method is already determined here. (twittering-ensure-connection-method): new function. (twittering-visit-timeline): ensure that an available connection method is determined. * twittering-mode.el: Add `twittering-make-connection-info'. (twittering-make-connection-info): new function. (twittering-send-http-request): new function. (twittering-start-http-session): use new functions. 2010-09-12 Tadashi MATSUO * twittering-mode.el: Add an edited tweet into the history without text properties. (twittering-edit-extract-status): extract a status without text properties. They may cause `session.el' to fail to save `twittering-edit-history' because `twittering-make-clickable-status-datum' adds text properties with self-reference to tweets. * twittering-mode.el (twittering-auth-method): fix docstring. (twittering-timeline-spec-alias): likewise. 2010-09-04 Tadashi MATSUO * twittering-mode.el (twittering-push-uri-onto-kill-ring): avoid pushing the same URL repeatedly. * twittering-mode.el: Fix xAuth with `gnutls-cli'. (twittering-oauth-get-token-alist-native): add a CRLF following the POST body. `gnutls-cli', which may be invoked by `open-tls-stream', requires the CRLF at the end of input. * twittering-mode.el: Introduce `connection-info', which is transferred to a sentinel. (twittering-start-http-session): introduce the variable `connection-info' to transfer the connection information to a sentinel. Since `connection-info' includes `noninteractive', the argument `noninteractive' is replaced with `connection-info'. (twittering-start-http-session-curl): likewise. (twittering-start-http-session-native): likewise. (twittering-http-default-sentinel): use `connection-info' instead of the current `twittering-use-ssl' and `twittering-proxy-use'. * twittering-mode.el (twittering-http-post): remove use of unbound variable `noninteractive'. * twittering-mode.el (twittering-call-api): use the argument `noninteractive' correctly. * twittering-mode.el: Introduce a framework to pre-process HTTP response buffer. (twittering-connection-type-table): add the entries for `pre-process-buffer'. (twittering-oauth-get-response-alist): remove redundant pre-processing for `openssl s_client'. (twittering-oauth-get-token-alist-native): pre-process buffer according to the variable `connection-info'. (twittering-oauth-get-token-alist-curl): likewise. (twittering-pre-process-buffer-curl): new function. (twittering-pre-process-buffer-native): new function. (twittering-http-default-sentinel): pre-process buffer with the function registered as `pre-process-buffer' in `connection-info'. * twittering-mode.el: Fix replying to tweets displayed as replied tweets. Thanks to Naohiro Aota. (twittering-enter): correctly use `original-id' for tweets displayed by `twittering-show-replied-statuses'. 2010-08-25 Tadashi MATSUO * twittering-mode.el: Confirm that a buffer associated with a process hs not been killed. (twittering-oauth-get-token-alist-native): confirm that the buffer associated with the process has not been killed. (twittering-oauth-get-token-alist-curl): likewise. * twittering-mode.el: Verify an account synchronously. (twittering-verify-credentials): wait for the authorization to finish. 2010-08-22 Tadashi MATSUO * twittering-mode.el (twittering-atom-xmltree-to-status-datum): retrieve `user-screen-name' and optional `user-name' from XML for StatusNet correctly. Thanks to Takashi Masuda. * twittering-mode.el: Introduce `clean-up-sentinel' to `twittering-call-api'. It is executed whenever the process sentinel is invoked. (twittering-call-api): add new argument `clean-up-sentinel' for the command `get-list-index' and `verify-credentials'. (twittering-start-http-session): add new argument `clean-up-sentinel' executed whenever the process sentinel is invoked. (twittering-start-http-session-curl): likewise. (twittering-start-http-session-native): likewise. (twittering-http-get): likewise. (twittering-http-post): likewise. (twittering-http-default-sentinel): invoke `clean-up-sentinel' if it is non-nil. * twittering-mode.el: Fix the race condition on resetting authorization information when the process exits abnormally. (twittering-verify-credentials): use `clean-up-sentinel' for resetting variables when the process exits abnormally or the HTTP response is invalid. (twittering-http-get-verify-credentials-clean-up-sentinel): new function for resetting some variables when the process for `verify-credentials' API exits abnormally. 2010-08-21 Tadashi MATSUO * twittering-mode.el: Restore `twittering-get-{search,status}-url'. (twittering-lookup-get-status-url): removed. (twittering-lookup-get-search-url): removed. (twittering-get-status-url): look up a function suitable for `twittering-service-method' and call it. (twittering-get-search-url): likewise. (twittering-make-clickable-status-datum): directly call `twittering-get-status-url' and `twittering-get-search-url' instead of calling them via `twittering-lookup-get-status-url' or `twittering-lookup-get-search-url'. (twittering-generate-format-table): likewise. (twittering-generate-formater-for-first-spec): likewise. * twittering-mode.el: Switch ways to parse XML depending on `twittering-service-method'. (twittering-atom-xmltree-to-status-datum): switch ways to parse XML depending on `twittering-service-method'. * twittering-mode.el: Simplify `twittering-call-api'. (twittering-call-api): reduce calls of `twittering-api-path'. * twittering-mode.el: Replace direct calls of `twittering-http-post' with calls of `twittering-call-api'. (twittering-update-status-from-minibuffer): use `twittering-call-api' instead of `twittering-http-post'. 2010-08-20 Takashi Masuda * twittering-mode.el: Support StatusNet. (twittering-api-prefix): new variable. (twittering-search-api-method): new variable. (twittering-web-path-prefix): new variable. (twittering-service-method): new variable. (twittering-service-method-table): new variable. (twittering-api-path): new function. (twittering-lookup-get-status-url): new function. (twittering-get-status-url-twitter): new function. (twittering-get-status-url-statusnet): new function. (twittering-lookup-get-search-url): new function. (twittering-get-search-url-twitter): new function. (twittering-get-search-url-statusnet): new function. (twittering-call-api): generate a path of API by `twittering-api-path'. (API ã®ãƒ‘ス㯠twittering-api-path ã‹ã‚‰å–å¾— ã™ã‚‹ã‚ˆã†ã«ã—ãŸã€‚) (twittering-edit-post-status): likewise. (twittering-update-status-from-minibuffer): likewise. (twittering-atom-xmltree-to-status-datum): support the format used in StatusNet.(ã„ãšã‚Œã‚‚検索関連ã®ä¿®æ­£ã€‚ 「interpret-time-diff.patchã€ã€Œuser-name ãŒè¨­å®šã•れã¦ã„ãªã„ユーザ ã«å¯¾å¿œã€ã€Œæ¤œç´¢æ™‚ã®ãƒ¦ãƒ¼ã‚¶ã‚¢ã‚¤ã‚³ãƒ³ã‚’å–得出æ¥ã‚‹ã‚ˆã†ã«ä¿®æ­£ã€) (twittering-make-clickable-status-datum): retrieve `status-url' and `search-url' via `twittering-lookup-get-status-url' and `twittering-lookup-get-search-url'. (twittering-lookup-get-status-url 㨠twittering-lookup-get-search-url を介ã—㦠status-url 㨠search-url ã‚’å–å¾—ã™ã‚‹ã‚ˆã†ã«ã—ãŸã€‚ (twittering-generate-format-table): likewise. (twittering-generate-formater-for-first-spec): likewise. * twittering-mode.el: fix statusnet user URL (twittering-get-status-url-statusnet): fix user URL * twittering-mode.el (twittering-generate-format-table): Do not use icon images scaled by API unless Twitter. * twittering-mode.el: fix statusnet URL (twittering-get-status-url-statusnet): fix id URL (twittering-get-status-url-statusnet): fix hashtag URL 2010-08-20 Tadashi MATSUO * twittering-mode.el (twittering-edit-post-status): call `twittering-call-api' instead of calling `twittering-http-post' directly. * twittering-mode.el: Do not add unnecessary parameter `source' to API calls. (twittering-http-post): do not add unnecessary parameter `source'. (twittering-call-api): add the parameter `source' when using BASIC authentication. * twittering-mode.el (twittering-call-api): Change parameters in order to follow the update of Twitter API. * twittering-mode.el: Add `twittering-push-uri-onto-kill-ring' and bind "U" to it. Thanks to Faried Nawaz. (twittering-push-uri-onto-kill-ring): new function for pushing the uri property of the current position onto the kill-ring. (twittering-mode-map): bind "U" to `twittering-push-uri-onto-kill-ring'. * twittering-mode.el: Add `twittering-new-tweets-statuses' for the hook functions of `twittering-new-tweets-hook'. Thanks to Faried Nawaz. (twittering-new-tweets-statuses): new variable. (twittering-add-statuses-to-timeline-data): bind `twittering-new-tweets-statuses' to `new-statuses' so that the hook functions can refer to the new tweets. 2010-08-15 Tadashi MATSUO * twittering-mode.el: Confirm that sufficient information is loaded from the private file. (twittering-load-private-info): load only variables that are enumerated in `twittering-variables-stored-with-encryption'. (twittering-has-oauth-access-token-p): new function for checking whether `twittering-oauth-access-token-alist' has sufficient information. (twittering-verify-credentials): confirm that sufficient information is loaded from the private file. 2010-08-06 Tadashi MATSUO * twittering-mode.el: Fix options of `curl' for POST with an empty body. (twittering-start-http-session-curl): add an option "-d" whenever `method' equals to "POST". * twittering-mode.el: Use the ID of the retweeted original tweet on generating a URL or retweeting it. (twittering-status-to-status-datum): add new property `source-id' specifying a source tweet of a retweet. (twittering-generate-formater-for-first-spec): generate a URL for a retweet from the ID of its source. (twittering-generate-format-status-function): add `source-id' as a common property. (twittering-native-retweet): use `source-id' for a retweet. * twittering-mode.el: Update the embedded CA certificate into `Equifax Secure Certificate Authority'. (twittering-ensure-ca-cert): replace the CA certificate with `Equifax Secure Certificate Authority' currently referred by `api.twitter.com' and `search.twitter.com'. 2010-07-25 Tadashi MATSUO * twittering-mode.el (twittering-mode): avoid repeating authorization when `twittering-initial-timeline-spec-string' is a list of multiple timeline spec strings. * twittering-mode.el (twittering-http-default-sentinel): display an error message when waiting for a response of an authorization query. * twittering-mode.el: Replace functions `mapcan' and `map' defined in `cl-extra' with built-in functions in order to prevent the byte-compiled `twittering-mode' from depending on `cl-extra'. (twittering-oauth-get-token-alist-curl): replace `mapcan' with a combination of `apply', `append' and `mapcar'. (twittering-start-http-session-curl): likewise. 2010-07-04 Tadashi MATSUO * twittering-mode.el (twittering-redisplay-status-on-buffer): Fix the condition of redisplaying a timeline. * twittering-mode.el: If it fails to retrieve an image a certain times, retry no longer. (twittering-create-image-pair): return `twittering-error-icon-data-pair' if the argument `image-data' is nil. (twittering-make-icon-string): fix the condition of `image-data'. If it is an integer, it means the time of retries. * twittering-mode.el: Use icon images scaled by API if possible. (twittering-generate-format-table): generate the URL of the scaled icon image by API. * twittering-mode.el: Use `GET users/profile_image' API only if the variable `twittering-use-profile-image-api' is non-nil. Since the API is rate limited, it may cause troubles on other API calls. (twittering-use-profile-image-api): new variable. (twittering-generate-format-table): call `GET users/profile_imagne' API only if `twittering-use-profile-image-api' is non-nil. 2010-07-03 Tadashi MATSUO * twittering-mode.el: Replace `xml-parse-region' with `twittering-xml-parse-region' in order to prevent abnormal exit caused by decoding unknown numeric character references. (twittering-unicode-replacement-char): new variable. (twittering-ucs-to-char): return `twittering-unicode-replacement-char' if decoding failed. (decode-char): new advice in order to return `twittering-unicode-replacement-char' for unknown code-points. (twittering-xml-parse-region): new function. This function does not exit abnormally even if given XML includes unknown numeric references. Unknown numeric references are replaced with `twittering-unicode-replacement-char'. (twittering-get-error-message): replace `xml-parse-region' with `twittering-xml-parse-region'. (twittering-http-get-list-index-sentinel): likewise. (twittering-get-status-from-http-response): likewise. * twittering-mode.el (twittering-oauth-get-token-alist-url): fix a list of bindings. 2010-07-02 Tadashi MATSUO * twittering-mode.el (twittering-oauth-get-token-alist-native): use `twittering-tls-program' correctly. * twittering-mode.el: Detect abnormal exit of an invoked process. (twittering-oauth-get-token-alist-native): confirm the exit status of the invoked process. (twittering-oauth-get-token-alist-curl): likewise. (twittering-http-default-sentinel): likewise. * twittering-mode.el: Allow insecure server certificates if `twittering-allow-insecure-server-cert' is non-nil. (twittering-allow-insecure-server-cert): new variable. (twittering-oauth-get-token-alist-curl): add "--insecure" option to the arguments for `curl' if `twittering-allow-insecure-server-cert' is non-nil. (twittering-start-http-session-curl): likewise. (twittering-start-http-session-native-tls-p): add options to the programs in `tls-program' in order to allow insecure server certificates if `twittering-allow-insecure-server-cert' is non-nil. * twittering-mode.el (twittering-verify-credentials): display an error message if the variable `twittering-auth-method' is invalid. 2010-07-01 Tadashi MATSUO * twittering-mode.el: Support the url library included in Emacs 23 and later. (twittering-oauth-get-token-alist-native): support the function `url-generic-parse-url' that returns parsed URL object generated as `structure'. (twittering-oauth-get-token-alist-curl): likewise. * twittering-mode.el (twittering-call-api): `user', `friends', `mentions' and `public' timelines include native retweets. 2010-06-30 Tadashi MATSUO * twittering-mode.el (twittering-verify-credentials): reset `twittering-username' when authentication via xAuth failed. * twittering-mode.el (twittering-verify-credentials): invoke `twittering-prepare-account-info' before authentication method requiring account information. (twittering-visit-timeline): invoke `twittering-verify-credentials' before reading timeline spec. 2010-06-29 Tadashi MATSUO * twittering-mode.el: Confirm process status for avoiding dead-lock. (twittering-oauth-get-token-alist-native): confirm the process status in order to avoid dead-lock. If the process exited abnormally, the variable `result' becomes nil. (twittering-oauth-get-token-alist-curl): likewise. (twittering-verify-credentials): wait for the process to exit in order to avoid dead-lock. (twittering-get-list-index-sync): likewise. * twittering-mode.el (twittering-verify-credentials): wait for the process to exit in order to avoid dead-lock. * twittering-mode.el: Support authentication via xAuth. (twittering-get-list-index-sync): likewise. (twittering-xauth-auth-str-access-token): new function. (twittering-oauth-get-token-alist-url): add an argument `post-body'. (twittering-oauth-get-token-alist-native): likewise. (twittering-oauth-get-token-alist-curl): likewise. (twittering-oauth-get-token-alist): add an optional argument `post-body'. (twittering-xauth-get-access-token): new function. (twittering-prepare-account-info): support xAuth. (twittering-verify-credentials): likewise. (twittering-http-application-headers-with-auth): likewise. (twittering-visit-timeline): call `twittering-prepare-account-info' for xAuth. 2010-06-13 Tadashi MATSUO * twittering-mode.el (twittering-write-and-encrypt): fix arguments of `epg-context-set-progress-callback' because of the difference between EasyPG 0.0.16 and that included in Emacs23. * twittering-mode.el (twittering-save-private-info): change the permission of the encrypted file in order to prevent others from reading the file. (twittering-write-and-encrypt): return t explicitly when it succeeded in encrypting private information. * twittering-mode.el (twittering-write-and-encrypt): In order to prevent `epa-file' to encrypt the file double, `epa-file-name-regexp' is temorarily changed into the null regexp that never matches any string. 2010-06-12 Tadashi MATSUO * twittering-mode.el: Fix bugs. (twittering-hmac-sha1): remove invalid arguments. (twittering-oauth-auth-str): correct a variable. * twittering-mode.el: Support master password for storing private information in an encrypted file. (twittering-use-master-password): new variable. (twittering-private-info-file): new variable. (twittering-variables-stored-with-encryption): new variable. (twittering-load-private-info): new function. (twittering-load-private-info-with-guide): new function. (twittering-save-private-info): new function. (twittering-save-private-info-with-guide): new function. (twittering-capable-of-encryption-p): new function. (twittering-read-from-encrypted-file): new function. (twittering-write-and-encrypt): new function. (twittering-verify-credentials): support master password. * twittering-mode.el: Add codes for debugging functions for OAuth. (twittering-oauth-get-token-alist-url): add codes for debug. (twittering-oauth-get-token-alist-native): likewise. (twittering-oauth-get-token-alist-curl): likewise. 2010-06-09 Yuto Hayamizu * twittering-mode.el (twittering-oauth-get-access-token): reject invalid PIN code input and strip extra white spaces. 2010-06-05 Tadashi MATSUO * twittering-mode.el: confirm that a valid access token has been retrieved. (twittering-oauth-make-response-alist): do not decode a null entry. (twittering-verify-credentials): confirm that the retrieved `token-alist' is valid as an access token. 2010-06-04 Yuto Hayamizu * twittering-mode.el: removed (set-terminal-coding-system 'utf-8) (twittering-mode-map): changed key bindings: twittering-public-timeline: C-c C-g -> C-c C-p, twittering-set-current-hashtag: C-c C-h -> C-c C-t 2010-06-03 Yuto Hayamizu * twittering-mode.el: add encrypted oauth consumer key/secret (twittering-auth-method): changed default value to 'oauth (twittering-oauth-get-access-token): give users a choise to open authrization URL with browser or not when twittering-oauth-invoke-browser is nil. 2010-06-03 Tadashi MATSUO * twittering-mode.el: Use `twittering-oauth-use-ssl' instead of `twittering-use-ssl' on functions for OAuth. (twittering-oauth-use-ssl): add docstring. (twittering-oauth-get-response-alist): use `twittering-oauth-use-ssl' instead of `twittering-use-ssl'. (twittering-oauth-get-token-alist-native): likewise. (twittering-oauth-get-token-alist-curl): likewise. (twittering-verify-credentials): likewise. * twittering-mode.el: Restore window parameters after automatic redisplaying. (twittering-current-window-config): new function. (twittering-restore-window-config-after-modification): new function. (twittering-redisplay-status-on-each-buffer): restore window parameters after redisplaying. * twittering-mode.el: Suppress automatic redisplaying if unnecessary. (twittering-redisplay-status-on-each-buffer): do not modify buffer if updated string is same as the current string in the meaning of `string='. (twittering-make-icon-string): give different strings for displayed and undisplayed icon. * twittering-mode.el: Stop automatic redisplaying of buffers in which the mark and region are active. (twittering-redisplay-status-on-buffer): do not update buffer in which the mark and region are active. * twittering-mode.el: Reimplement the status formater that allows recursive specifiers such as "%FILL{%FACE[bold]{%C{%m/%d}}: %T}". (twittering-parse-format-string): removed. (twittering-generate-formater): removed. (twittering-generate-status-formater-base): removed. (twittering-generate-format-table): new function. (twittering-generate-formater-for-first-spec): new function. (twittering-generate-formater-for-current-level): new function. (twittering-generate-format-status-function): new function. (twittering-generate-format-status-function): use new implementation. * twittering-mode.el: Add an optional argument for the format specifier `FILL'. The argument specifies the prefix for the filled region. (twittering-status-format): use 2 white spaces as fill-prefix in default. (twittering-fill-string): use an additional argument `prefix' as `fill-prefix' for `fill-region-as-paragraph' if the argument is non-nil. (twittering-update-filled-string): transfer the local prefix for `twittering-fill-string'. (twittering-generate-formater-for-first-spec): recognize an optional argument for the format specifier `FILL'. * twittering-mode.el: Add a new format specifier "%FOLD[prefix]{...}". (twittering-fill-string): add an argument `keep-newline'. If it is non-nil, do not remove newlines in given string. (twittering-update-filled-string): add an argument `keep-newline'. (twittering-generate-formater-for-first-spec): add a new specifier "%FOLD[prefix]{...}". * twittering-mode.el: Fix unintended cursor motion caused by automatic redisplaying. (twittering-redisplay-status-on-each-buffer): fix the incorrect cursor motion occurring when it points the beginning of region that will be be modified. 2010-05-27 Tadashi MATSUO * twittering-mode.el (twittering-toggle-activate-buffer): restart the timer if it is not active when activating a buffer. 2010-05-24 Naohiro Aota * twittering-mode.el (twittering-native-retweet): Check if tweet is my own one. 2010-05-22 Tadashi MATSUO * twittering-mode.el: Use the coding-system `utf-8-unix' for reading data retrieved from Twitter. (twittering-start-http-session-curl): use the coding-system `utf-8-unix' for reading data retrieved from Twitter. (twittering-start-http-session-native): likewise. * twittering-mode.el: Omit a successful HTTP response and headers if they seem to be sent from a proxy for CONNECT method. (twittering-http-default-sentinel): omit a successful HTTP response and headers from a proxy if using SSL via the proxy. (twittering-get-response-header): do not remove headers from a proxy. * twittering-mode.el: Do not initialize `twittering-tls-program' multiple times. (twittering-start-http-session-native-tls-p): check `tls-program' only if `twittering-tls-program' is nil. * twittering-mode.el: Cache the result of capability confirmation for `curl'. (twittering-start-http-session-curl-p): do not initialize `twittering-curl-program' multiple times. (twittering-start-http-session-curl-https-p): do not execute `curl' multiple times. * twittering-mode.el: Look-up of connection type is rearranged. (twittering-lookup-http-start-function): reimplemented. (twittering-lookup-connection-type): new function. * twittering-mode.el: Confirm an available connection method before visiting a timeline. (twittering-visit-timeline): confirm connection method. * twittering-mode.el: Support authentication via OAuth. The authentication requires a consumer information registered with Twitter and an external WWW browser to authorize a request token. (twittering-auth-method): new variable. (twittering-oauth-consumer-key, twittering-oauth-consumer-secret): new variables for specifying an OAuth consumer. (twittering-oauth-access-token-alist): new variable for storing access token. (twittering-oauth-url-encode): new function. (twittering-oauth-unhex): new function. (twittering-oauth-url-decode): new function. (twittering-oauth-make-signature-base-string): new function. (twittering-oauth-make-random-string): new function. (twittering-hmac-sha1): imported from http://www.emacswiki.org/emacs/HmacShaOne . (twittering-oauth-auth-str): new function. (twittering-oauth-auth-str-request-token): new function. (twittering-oauth-auth-str-exchange-token): new function. (twittering-oauth-auth-str-access): new function. (twittering-oauth-make-response-alist): new function. (twittering-oauth-get-response-alist): new function. (twittering-oauth-get-token-alist-url): new function. (twittering-oauth-get-token-alist-native): new function. (twittering-oauth-get-token-alist-curl): new function. (twittering-oauth-get-token-function-table): new variable. (twittering-oauth-get-token-function-type): new variable. (twittering-oauth-invoke-browser): new variable. (twittering-oauth-get-token-alist): new function. (twittering-oauth-get-request-token): new function. (twittering-oauth-exchange-request-token): new function. (twittering-oauth-get-access-token): new function. (twittering-prepare-account-info): acquire username and password only if `twittering-auth-method' is symbol `basic'. (twittering-verify-credentials): support Authentication via OAuth. (twittering-http-application-headers): do not add Authorization header. (twittering-http-application-headers-with-auth): new function for generating headers adapted for each authentication method. (twittering-http-get): use `twittering-http-application-headers-with-auth'. (twittering-http-post): likewise. (twittering-percent-encode): encode a string according to Percent-Encoding defined in RFC3986 instead of RFC1738. It simply calls `twittering-oauth-url-encode'. (twittering-url-reserved-p): removed. * test/test-twittering-mode.el: add new test `test-oauth'. * emacs21/hex-util.el: imported from Emacs22. * emacs21/sha1.el: imported from Emacs22. * twittering-mode.el (twittering-oauth-get-access-token): fix the guide string of authorization via OAuth. * twittering-mode.el (twittering-hmac-sha1): fix indentation. * twittering-mode.el: Fix `twittering-hmac-sha1' so that it works well on Emacs23 and later. (twittering-hmac-sha1): ensure that internal variables are unibyte strings even on Emacs23 and later. * test/test-twittering-mode.el: add new test `test-hmac-sha1'. * emacs21/sha1.el: Imported from Gnus distributed with Emacs 22.2.1 on Debian 5.0 for Emacs21 that does not include `sha1.el'. * emacs21/hex-util.el: Imported from Gnus distributed with Emacs 22.2.1 on Debian 5.0 for Emacs21 that does not include `hex-util.el'. 2010-05-20 Tadashi MATSUO * twittering-mode.el: The configuration of a proxy is referred via the function `twittering-proxy-info'. (twittering-proxy-info): return all configuration of the proxy for the scheme. * twittering-mode.el: Give priority to the variable `twittering-proxy-*' over `twittering-http-proxy-*' and `twittering-https-proxy-*'. (twittering-proxy-server): defined as a variable. (twittering-proxy-port): likewise. (twittering-proxy-keep-alive): likewise. (twittering-proxy-user): likewise. (twittering-proxy-password): likewise. (twittering-normalize-proxy-vars): normalize `twittering-proxy-port'. (twittering-proxy-info): return configuration generated from `twittering-proxy-*' regardless of the scheme (HTTP or HTTPS) if `twittering-proxy-server' and `twittering-proxy-port' are non-nil. 2010-05-17 Tadashi MATSUO * twittering-mode.el (twittering-start-http-session-curl): fix extraction of the scheme from the variable `request'. * twittering-mode.el: Use a relative path to specify the temporary cert file for `curl' to ignore the difference of path representation between Windows and Cygwin. (twittering-start-http-session-curl): change directory before invoking `curl' and specify the temporary cert file with relative path. 2010-05-15 Tadashi MATSUO * twittering-mode.el: Add copyright of the ACTIVE/INACTIVE indicators derived from Wanderlust. (twittering-active-indicator-image): add the copyright as a comment. (twittering-inactive-indicator-image): likewise. * twittering-mode.el: The function `twittering-icon-mode' keeps the current cursor point. (twittering-render-timeline): add a new argument `keep-point'. (twittering-icon-mode): keep the current cursor point. * test/test-twittering-mode.el: Remove an obsolete test and update `test-format-status'. * twittering-mode.el: The proxies for HTTP and HTTPS can be configured individually. The variables `twittering-proxy-{server,port,user,password,keep-alive}' are now aliases. (twittering-http-proxy-server): new variable. (twittering-http-proxy-port): new variable. (twittering-http-proxy-user): new variable. (twittering-http-proxy-password): new variable. (twittering-http-proxy-keep-alive): new variable. (twittering-https-proxy-server): new variable. (twittering-https-proxy-port): new variable. (twittering-https-proxy-user): new variable. (twittering-https-proxy-password): new variable. (twittering-https-proxy-keep-alive): new variable. (twittering-proxy-server): changed into an alias to `twittering-http-proxy-server'. (twittering-proxy-port): changed into an alias to `twittering-http-proxy-port. (twittering-proxy-user): changed into an alias to `twittering-http-proxy-user. (twittering-proxy-password): changed into an alias to `twittering-http-proxy-password. (twittering-proxy-keep-alive): changed into an alias to `twittering-http-proxy-keep-alive. (twittering-normalize-proxy-vars): new function. (twittering-proxy-info): new function. (twittering-url-proxy-services): new function. (twittering-setup-proxy): initialize individual proxy configurations for HTTP and HTTPS. * twittering-mode.el: Enable to retrieve icon images silently. (twittering-url-show-status): new variable. (twittering-url-wrapper): control display of status even if the retrieval is asynchronous. 2010-05-11 Tadashi MATSUO * twittering-mode.el: Fix initialization of `twittering-tls-program'. (twittering-start-http-session-native-tls-p): use `twittering-tls-program' if it is non-nil. 2010-05-09 Tadashi MATSUO * twittering-mode.el: Use "\\`" as the regexp for the head of a tweet instead of "^". This prevents misinterpretation of tweets including multiple lines. (twittering-edit-post-status): correct the regexp for determining whether the "in-reply-to" ID should be attached or not. (twittering-update-status-from-minibuffer): likewise. (twittering-status-not-blank-p): correct the regexp for distinguish a blank tweet from a non-blank tweet. * twittering-mode.el: Prevent applying improper functions to a failed connection. (twittering-verify-credentials): give up authorization if `twittering-call-api' returns nil. (twittering-start-http-session-curl): return nil if it failed to open a connection. (twittering-start-http-session-native): likewise. * twittering-mode.el: Support HTTPS with `tls' library. (twittering-tls-program): new variable. (twittering-connection-type-table): register `twittering-start-http-session-native-tls-p' as the "https" entry for "native". (twittering-start-http-session-native-tls-p): new function. (twittering-start-http-session-native): call `open-tls-stream' if `twittering-use-ssl' is non-nil. * emacs21/tls.el: Imported from Emacs 22.2.1 on Debian 5.0 for Emacs21 that does not include `tls.el'. 2010-05-08 Tadashi MATSUO * twittering-mode.el: Add an abstract layer for Twitter API. (twittering-call-api): new function. (twittering-timeline-spec-to-host-method): removed. (twittering-host-method-to-timeline-spec): removed. (twittering-manage-friendships): removed. (twittering-manage-favorites): removed. (twittering-get-tweets): removed. (twittering-verify-credentials): use `twittering-call-api' instead of calling `twittering-http-get' directly. (twittering-get-list-index): likewise. (twittering-get-and-render-timeline): use `twittering-call-api' instead of calling `twittering-get-tweets'. The function also calculates how many tweets should be retrieved. (twittering-update-lambda): use `twittering-call-api' instead of calling `twittering-http-post' directly. (twittering-update-jojo): likewise. (twittering-native-retweet): likewise. (twittering-follow): use `twittering-call-api'. (twittering-favorite): likewise. * twittering-mode.el: Bind "C-c D" to `twittering-delete-status', which is a new function deleting a tweet. (twittering-delete-status): new function. (twittering-call-api): add a new command `destroy-status'. (twittering-delete-status-from-data-table): new function. (twittering-mode-map): bind "C-c D" to `twittering-delete-status'. 2010-05-08 Takashi Masuda * twittering-mode.el (twittering-update-jojo): 自分ã®ãƒ„イートã«ã¯è¿” ä¿¡ã—ãªã„よã†ã«ã—ãŸã€‚ * twittering-mode.el (twittering-update-jojo): do not reply to tweets posted by the current user itself. 2010-05-08 Tadashi MATSUO * twittering-mode.el (twittering-jojo-mode-p): confirm that the buffer has not been killed. 2010-05-06 Tadashi MATSUO * twittering-mode.el: Fix the format specifier "%r" for direct message. (twittering-status-to-status-datum): add `recipient-screen-name' as a element of a status. (twittering-xmltree-to-status): store `recipient_screen_name' without modificaiton. (twittering-generate-status-formater-base): replace "%r" with `recipient-screen-name' if it exists. 2010-05-05 Tadashi MATSUO * twittering-mode.el: Use a dummy buffer to prevent the cursor from moving without intention after invoking `url-retrieve'. (twittering-url-request-dummy-buffer-name): new constant for dummy buffer. (twittering-resolve-url-request): switch to the dummy buffer just after killing the content buffer generated by `url-retrieve'. This prevents multiple threads from having different cursor points for the same buffer. 2010-05-05 Takashi Masuda * twittering-mode.el: twittering-jojo-mode ã®åˆ¤å®šãƒŸã‚¹ã‚’修正。 (twittering-add-statuses-to-timeline-data): 判定方法を変更ã—ãŸã€‚ (twittering-jojo-mode-p): new function * twittering-mode.el: `twittering-jojo-mode' for each spec is correctly referred in order to decide whether to invoke `twittering-update-jojo'. (twittering-add-statuses-to-timeline-data): correct the condition for invoking `twittering-update-jojo'. (twittering-jojo-mode-p): new function. 2010-05-04 Tadashi MATSUO * twittering-mode.el (twittering-ask-post): renamed `twittering-request-confirmation-on-posting'. * twittering-mode.el (twittering-edit-post-status): correct the condition for requesting confirmation on posting a status. 2010-05-03 Takashi Masuda * twittering-mode.el: Tweet ã™ã‚‹æ™‚ã« y-or-n-p ã§å•ã„åˆã‚ã›ã‚’出æ¥ã‚‹ よã†ã«ã—ãŸã€‚デフォルトã¯èžã‹ã‚Œãªã„。 (twittering-ask-post): new variable * twittering-mode.el: Add confirmation on posting a status edited in pop-up buffer. It is disabled on default. (twittering-ask-post): new variable. * twittering-mode.el: `V' ã®è£œå®Œå¯¾è±¡ã« :direct_messages ã‚„ :home ã‚’ 追加ã—ãŸã€‚ (twittering-read-timeline-spec-with-completion): dummy-hist ã«è¿½åŠ ã€‚ * twittering-mode.el: Add some primary timeline specs, such as ":direct_messages" and ":home", to candidates of completion. (twittering-read-timeline-spec-with-completion): add some timeline specs to dummy-hist. 2010-05-03 Tadashi MATSUO * twittering-mode.el (twittering-edit-setup-help): generate help message by using `substitute-command-keys'. * twittering-mode.el: The format specifier "@" can receive the time format string, which is used to format the time of sufficiently old statuses. (twittering-generate-status-formater-base): add new parameter 'time-format' to the specifier "@". (twittering-make-passed-time-string): receive new argument `time-format'. * twittering-mode.el: Functions for retrieving URLs asynchronously are added. (twittering-url-data-hash): new variable for retrieved data. (twittering-url-request-list): new variable for additional requests. (twittering-url-request-sentinel-hash): new variable for sentinels. (twittering-internal-url-queue): new variable. (twittering-url-request-resolving-p): new variable. (twittering-url-request-retry-limit): new variable. (twittering-remove-redundant-queries): new function. (twittering-resolve-url-request): new function. (twittering-url-retrieve-async): new function. * twittering-mode.el: Icons are retrieved asynchronously. (twittering-icon-prop-hash): new variable. (twittering-image-data-table): removed. (twittering-get-display-spec-for-icon): new function. (twittering-convert-image-data): new function. (twittering-error-icon-data-pair): new constant. (twittering-create-image-pair): new function. (twittering-register-image-data): new function. (twittering-make-slice-spec): new function. (twittering-make-display-spec-for-icon): rearranged. (twittering-make-icon-string): new function. (twittering-retrieve-image): removed. (twittering-generate-status-formater-base): use `twittering-make-icon-string'. (twittering-image-stack): removed. (twittering-image-type): removed. (twittering-image-type-cache): removed. 2010-05-01 Immad Naseer * twittering-mode.el: New interactive functions for direct messages are added. (twittering-direct-messages-timeline): new function. (twittering-sent-direct-messages-timeline): new function. 2010-04-25 Tadashi MATSUO * twittering-mode.el: Fix mode-line to display the rate limit. (twittering-mode-line-buffer-identification): add the remaining number of API requests if `twittering-display-remaining' is non-nil. * twittering-mode.el: Stop keeping undo information for buffers managed by `twittering-mode'. Thanks to irie for pointing it out. (twittering-mode-setup): call `buffer-disable-undo'. * twittering-mode.el: Verify the account in advance of retrieving statuses. (twittering-account-authorization): new variable. (twittering-account-authorized-p): new function. (twittering-account-authorization-queried-p): new function. (twittering-prepare-account-info): new function for completing username and password. (twittering-verify-credentials): new function. (twittering-http-get-verify-credentials-sentinel): new function. (twittering-get-managed-buffer): start the timer after authorization. (twittering-mode-init-global): initialize neither `twittering-username' nor `twittering-password'. (twittering-mode): call `twittering-prepare-account-info'. (twittering-get-and-render-timeline): ignore requests unless authorization is completed. (twittering-update-active-buffers): do not retrieve statuses unless authorization is completed. (twittering-visit-timeline): verify the account. (twittering-get-username): use `twittering-username' directly. (twittering-get-password): use `twittering-password' directly. (twittering-username-active): removed. (twittering-password-active): removed. * twittering-mode.el: `twittering-visit-timeline' initializes global variables if necessary. (twittering-visit-timeline): initialize global variables and prepare account information. (twittering-mode): delegate the initialization to `twittering-visit-timeline'. (twittering-mode-init-global): renamed `twittering-initialize-global-variables-if-necessary'. * twittering-mode.el: Support multiple timelines on initialization. (twittering-initial-timeline-spec-string): mean multiple timelines if the value is a list of strings. (twittering-mode): support multiple timeline specs on initialization. 2010-04-24 Tadashi MATSUO * twittering-mode.el: Reimplement indicators. (twittering-ssl-indicator-image): new constant. (twittering-modeline-ssl): defined as a constant, which is initialized on loading `twittering-mode.el'. (twittering-ssl-image, twittering-ssl-indicator): removed. (twittering-ssl-icon): removed. (twittering-active-image, twittering-inactive-image): removed. (twittering-active-indicator, twittering-inactive-indicator): removed. (twittering-icon-directory): removed. (twittering-active-icon, twittering-inactive-icon): removed. (twittering-display-image-p): removed. (twittering-init-mode-line-icons): removed. Images are initialized as constants on loading `twittering-mode.el'. (twittering-active-indicator-image): new constant. (twittering-inactive-indicator-image): new constant. (twittering-modeline-active): defined as a constat. (twittering-modeline-inactive): likewise. (twittering-mode-init-global): remove the call of `twittering-init-mode-line-icons'. * twittering-mode.el: Display the buffer state as `mode-line-buffer-identification' instead of `mode-name'. (twittering-mode-line-buffer-identification): new function for generating a mode-line string for `twittering-mode'. (twittering-mode-string): removed. (twittering-modeline-ssl): remove brackets from the mode-line string. (twittering-modeline-active): use a whitespace with `display' face as a mode-line string. (twittering-modeline-inactive): remove brackets from the mode-line string. (twittering-update-mode-line): call `force-mode-line-update' only. (twittering-mode-setup): initialize `mode-name' and `mode-line-buffer-identification'. 2010-04-19 Takashi Masuda * twittering-mode.el : 関数åãŒå¤ã‹ã£ãŸã®ã§ã€ãƒªãƒãƒ¼ãƒ ã€‚ (twittering-init-mode-line-icons): (twittering-mode-init-global): twittering-init-active-inactive-icons ã‹ã‚‰ twittering-init-mode-line-icons ã«ãƒªãƒãƒ¼ãƒ ã€‚ * twittering-mode.el : rename old functions. (twittering-init-mode-line-icons): rename `twittering-init-active-inactive-icons' `twittering-init-mode-line-icons'. * twittering-mode.el : SSL 㨠ACTIVE/INACTIVE ã®çŠ¶æ…‹ã‚’ãƒ¢ãƒ¼ãƒ‰ãƒ©ã‚¤ãƒ³ アイコンã«è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«ã—ãŸã€‚-nw æ™‚ã¯æ–‡å­—列を表示ã™ã‚‹ã€‚ (twittering-update-mode-line): mode-line-buffer-identification ã®è¨­ 定を追加。INACTIVE 㨠ssl ã® mode-name ã¸ã®è¨­å®šã‚’削除ã—ãŸã€‚ (twittering-display-image-p): æ–°è¦ãƒžã‚¯ãƒ­ (twittering-init-active-inactive-icons): æ–°è¦é–¢æ•° (twittering-mode-init-global): twittering-init-active-inactive-icons を呼ã¶ã‚ˆã†ã«ä¿®æ­£ã€‚ * twittering-mode.el : display graphical indicators for SSL and ACTIVE/INACTIVE state on mode-line. (twittering-update-mode-line): add graphical indicators to `mode-line-buffer-identification' instead of `mode-name'. (twittering-display-image-p): new macro. (twittering-init-active-inactive-icons): new function. (twittering-mode-init-global): call `twittering-init-active-inactive-icons'. * icons/ssl.xpm: 上記ã«ä¼´ã„ Mew ã‹ã‚‰æ‹å€Ÿã€‚ * icons/ssl.xpm: imported from Mew. * offline.patch: 上記ã«ä¼´ã„削除。元々ç§ãŒãƒ–ログã«å…¬é–‹ã—ãŸã‚‚ã®ã‚’ Hayamizu æ°ãŒæ‹¾ã£ã¦ä¸‹ã•ã£ãŸã‚‚ã®ã€‚ * offline.patch: removed. (Mr.Hayamizu imported it, which originated from Masuda's blog.) 2010-04-19 Tadashi MATSUO * twittering-mode.el (twittering-get-buffer-from-spec): return nil if the corresponding buffer has been already killed. (twittering-update-unread-status-info): do not count statuses for a killed buffer. (twittering-http-get-default-sentinel): do not render a timeline for a killed buffer. 2010-04-17 Tadashi MATSUO * twittering-mode.el: Reimplement support of multiple buffers. The timeline spec and active-mode flag of each managed buffer are stored as buffer-local variables. (twittering-timeline-spec): new buffer-local variable. (twittering-timeline-spec-string): new buffer-local variable. (twittering-active-mode): new buffer-local variable. (twittering-buffer-info-list): redefined as a list of buffers. (twittering-get-buffer-list): follow the redefinition of `twittering-buffer-info-list'. (twittering-get-active-buffer-list): likewise. (twittering-buffer-p): likewise. (twittering-get-buffer-from-spec): likewise. (twittering-unregister-buffer): likewise. (twittering-unregister-killed-buffer): likewise. (twittering-buffer-active-p): use buffer-local `twittering-active-mode'. (twittering-get-timeline-spec-for-buffer): use buffer-local `twittering-timeline-spec'. (twittering-get-timeline-spec-string-for-buffer): use buffer-local `twittering-timeline-spec-string'. (twittering-register-buffer): removed. Its body is integrated into `twittering-get-managed-buffer'. (twittering-replace-spec-string-for-buffer): set buffer-local `twittering-timeline-spec-string' directly. (twittering-set-active-flag-for-buffer): use `twittering-toggle-activate-buffer'. (twittering-toggle-activate-buffer): set buffer-local `twittering-active-mode' directly. (twittering-get-managed-buffer): rearranged. (twittering-mode-setup): set up `twittering-timeline-spec', `twittering-timeline-spec-string' and `twittering-active-mode'. And register the current buffer to `twittering-buffer-info-list'. * twittering-mode.el: Add functions to switch timelines. (twittering-switch-to-next-timeline): new function. (twittering-switch-to-previous-timeline): new function. (twittering-mode-map): bind "f" and "b" to `twittering-switch-to-next-timeline' and `twittering-switch-to-previous-timeline', respectively. 2010-04-09 Tadashi MATSUO * twittering-mode.el (twittering-mode-init-global): initialize faces without using `copy-face' because it does not change the default face for new frames. 2010-04-07 Tadashi MATSUO * twittering-mode.el: Fix a bug on updating timeline history. (twittering-http-get-default-sentinel): call `twittering-add-timeline-history' with correct timeline spec string. (twittering-add-timeline-history): receive timeline spec string instead of timeline spec. * twittering-mode.el (twittering-mode-setup): omit redundant call of `run-hook'. * twittering-mode.el (twittering-direct-message): fix a lack of separator. Thanks to Takashi Masuda. 2010-04-06 Tadashi MATSUO * twittering-mode.el (twittering-new-tweets-spec): new variable for timeline spec on running `twittering-new-tweets-hook'. * twittering-mode.el: Add an experimental notifier for unread statuses on mode-line. You can enable it by invoking `twittering-enable-unread-status-notifier'. To disable it, invoke `twittering-disable-unread-status-notifier'. (twittering-unread-status-info): new variable. (twittering-reset-unread-status-info-if-necessary): new function. (twittering-set-number-of-unread): new function. (twittering-make-unread-status-notifier-string): new function. (twittering-update-unread-status-info): new function. (twittering-enable-unread-status-notifier): new function. (twittering-disable-unread-status-notifier): new function. * twittering-mode.el: Support fixed fill-column for the format specifier "%FILL{...}". Thanks to William Xu. (twittering-fill-column): new variable. 2010-04-04 Tadashi MATSUO * twittering-mode.el: Improve compatibility with global-font-lock mode. (twittering-mode-init-global): use `bold' instead of `font-lock-string-face' if it has not been bound yet. `twittering-mode' does not require loading `font-lock'. (twittering-mode-setup): prevent `global-font-lock-mode' enabling `font-lock-mode' by using buffer-local `font-lock-global-modes'. `twittering-mode' can be used with/without any configuration for font-lock mode. * twittering-mode.el: Replace hard-coded hostnames with variables and functions. Thanks to William Xu. (twittering-api-host): new variable. (twittering-api-search-host): new variable. (twittering-web-host): new variable. (twittering-get-search-url): new function. (twittering-make-clickable-status-datum): call `twittering-get-search-url' instead of using hard-coded hostname. * twittering-mode.el (twittering-start-http-session-curl): do not overwrite headers that `curl' will define internally. Thanks to William Xu. 2010-04-03 Tadashi MATSUO * twittering-mode.el (twittering-buffer-active-p): renamed `twittering-buffer-related-p'. * twittering-mode.el (twittering-start): check the value of `twittering-timer-for-redisplaying' before setting timer. * twittering-mode.el: Multiple buffers are supported. (twittering-buffer-info-list): new variable for managing multiple buffers. (twittering-buffer): both of the function and the variable are removed. (twittering-update-mode-line): remove timeline spec from mode-line because it is displayed as the name of buffer. (twittering-switch-timeline): removed. (twittering-get-buffer-list): new function. (twittering-get-active-buffer-list): new function. (twittering-buffer-related-p): modified to support multiple buffers. (twittering-buffer-p): new function. (twittering-buffer-active-p): new function. (twittering-get-buffer-from-spec): new function. (twittering-get-buffer-from-spec-string): new function. (twittering-get-timeline-spec-for-buffer): new function. (twittering-get-timeline-spec-string-for-buffer): new function. (twittering-current-timeline-spec): return timeline spec for the current buffer. (twittering-current-timeline-spec-string): return timeline spec string for the current buffer. (twittering-register-buffer): new function. (twittering-unregister-buffer): new function. (twittering-unregister-killed-buffer): new function. (twittering-replace-spec-string-for-buffer): new function. (twittering-set-active-flag-for-buffer): new function. (twittering-toggle-activate-buffer): new function. (twittering-activate-buffer): new function. (twittering-deactivate-buffer): new function. (twittering-kill-buffer): new function. (twittering-generate-new-buffer): new function. (twittering-switch-timeline): removed. (twittering-get-managed-buffer): new function. (twittering-mode-map): `twittering-toggle-activate-buffer' is bound to "a". `twittering-kill-buffer' is bound to "q" instead of `twittering-suspend'. (twittering-mode-init-global): new function for initializing global variables. (twittering-initialized): new variable. (twittering-mode-setup): new function for initializing a buffer being managed by `twittering-mode'. (twittering-mode): reimplemented. (twittering-icon-mode): support multiple buffers. (twittering-http-get-default-sentinel): render the retrieved statuses on the buffer bound to the timeline spec. (twittering-redisplay-status-on-buffer): support multiple buffers. (twittering-redisplay-status-on-each-buffer): new function. (twittering-render-timeline): require the target buffer. (twittering-timer-action): support multiple buffers. (twittering-get-tweets): support multiple buffers. (twittering-get-and-render-timeline): retrieve and render the timeline bound to the current buffer. (twittering-start): use `twittering-update-active-timeline' instead of `twittering-current-timeline-noninteractive' for `twittering-timer'. (twittering-toggle-reverse-mode): support multiple buffers. (twittering-friends-timeline): call `twittering-visit-timeline' instead of `twittering-get-and-render-timeline'. (twittering-home-timeline): likewise. (twittering-replies-timeline): likewise. (twittering-public-timeline): likewise. (twittering-user-timeline): likewise. (twittering-other-user-timeline): likewise. (twittering-other-user-timeline-interactive): likewise. (twittering-other-user-list-interactive): likewise. (twittering-search): likewise. (twittering-update-active-buffers): new function for retrieving timelines for active buffers. (twittering-current-timeline): retrieve statuses for current buffer. (twittering-erase-old-statuses): erase statuses of the timeline bound to the current buffer. (twittering-visit-timeline): switch to the buffer generated by `twittering-get-managed-buffer'. * twittering-mode.el (twittering-update-server-info): update mode-lines for all buffers managed by `twittering-mode' if `twittering-display-remaining' is non-nil. 2010-03-30 Tadashi MATSUO * twittering-mode.el (twittering-get-response-header): return nil if an empty line as a separater is not found in the given buffer. (twittering-http-default-sentinel): generate `header-info' only if `header' is non-nil. 2010-03-29 Tadashi MATSUO * twittering-mode.el (twittering-url-wrapper): new wrapper function for using URL library with proxy configuration for `twittering-mode'. (twittering-url-insert-file-contents): likewise. (twittering-url-retrieve-synchronously): likewise. (twittering-setup-proxy): call `url-scheme-get-property' to avoid `url-proxy-services' to be reset. (twittering-retrieve-image): use the wrapper function instead of a function in URL library. (twittering-tinyurl-get): likewise. * twittering-mode.el (twittering-update-status-from-minibuffer): fix infinite loop on updating a status from minibuffer. * twittering-mode.el (twittering-start-http-session-curl): modify the order of arguments for `curl', where the URL is placed last. 2010-03-25 Tadashi MATSUO * twittering-mode.el (twittering-get-status-url): change the format of a URL of a certain status into that used in the web interface on `http://twitter.com/'. 2010-03-24 Tadashi MATSUO * twittering-mode.el (twittering-register-process): store timeline spec string. (twittering-get-and-render-timeline): register a process together with timeline spec string. (twittering-release-process): use `delq' instead of `delete'. (twittering-get-timeline-spec-string-from-process): new function for registered timeline spec string. * twittering-mode.el (twittering-http-get-default-sentinel): display the timeline spec string in notification. 2010-03-23 Tadashi MATSUO * twittering-mode.el (twittering-mode-map): bind "SPC" and "C-v" to `twittering-scroll-up', and bind "" and "M-v" to `twittering-scroll-down'. (twittering-scroll-up): new function. Thanks to Jim Crossley. (twittering-scroll-down): new function. 2010-03-20 Satoshi Yatagawa * twittering-mode.el (twittering-edit-post-status): Don't add parameter `in_reply_to_status_id' if the tweet does not begin with `@' and username which is passed from callers. (twittering-update-status-from-minibuffer): Likewise. (twittering-generate-status-formater-base): Make the specifier "%r" work similarly to web interface. 2010-03-19 Satoshi Yatagawa * twittering-mode.el (twittering-retrieve-image): Use `create-image'. 2010-03-19 Satoshi Yatagawa * twittering-mode.el (twittering-regexp-hash): New defvar. (twittering-regexp-atmark): Likewise. (twittering-extract-timeline-spec): Use these. (twittering-make-clickable-status-datum): Likewise. 2010-03-19 Tadashi MATSUO * twittering-mode.el (twittering-remove-inactive-processes): add `exit' and `signal' to `inactive-statuses'. 2010-03-18 Satoshi Yatagawa * twittering-mode.el (twittering-other-user-list-interactive): Revert part of 2010-03-12 change to prevent an overwrite of a message which is outputted by `twittering-read-list-name'. * twittering-mode.el (twittering-http-default-sentinel): Check process-status before processing sentinel. * twittering-mode.el (twittering-make-clickable-status-datum): Add a text property `goto-spec'. (twittering-other-user-timeline): Refer it. (twittering-make-clickable-status-datum): Add a text property `screen-name-in-text' to both `user-name' and `user-screen-name'. (twittering-make-clickable-status-datum): No longer add text properties `hashtag-in-text' and `uri-in-text'. (twittering-enter): Don't refer these properties. (twittering-make-clickable-status-datum): Reduce loops. * twittering-mode.el (twittering-follow): Copy username and clear its text properties before using it for display on minibuffer. (twittering-other-user-list-interactive): Likewise. (twittering-read-list-name): Likewise. (twittering-native-retweet): Likewise for text. (twittering-favorite): Likewise for text. 2010-03-17 Tadashi MATSUO * twittering-mode.el (twittering-generate-status-formater-base): fix the formater for "%FACE[...]{...}". 2010-03-13 Satoshi Yatagawa * twittering-mode.el: Improve a support of sending direct messages. * twittering-mode.el (twittering-update-status-from-pop-up-buffer): Use twitter API which is related of direct_messages if necessary. (twittering-update-status-from-minibuffer): Likewise. (twittering-timeline-spec-is-direct-messages-p): New defun. (twittering-reply-recipient): Rename from `twittering-reply-to-id'. (twittering-update-status-from-pop-up-buffer): Adjust callers. (twittering-render-timeline): Add a text property `belongs-spec'. (twittering-update-status-from-pop-up-buffer): Add optional arguments `username' and `spec'. (twittering-update-status-from-minibuffer): Likewise. (twittering-enter): Adjust callers. * twittering-mode.el (twittering-edit-setup-help): Add optional arguments `username' and `spec'. (twittering-update-status-from-pop-up-buffer): Call it here. (twittering-edit-mode): Don't call it here. * twittering-mode.el (twittering-direct-message): Call `twittering-read-username-with-completion'. * twittering-mode.el (twittering-make-display-spec-for-icon): Use `create-animated-image' if present (on Emacs24 or later). 2010-03-12 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-default-sentinel): Revert part of 2010-03-06 change because the scheduled removing of public_timeline from twitter API had been canceled on 2010-03-11. * twittering-mode.el (twittering-other-user-list-interactive): Fix condition to detect a null string. (twittering-other-user-timeline-interactive): Likewise. (twittering-extract-timeline-spec): Modify the condition for detecting a null string same as others. (twittering-get-replied-statuses): Likewise. (twittering-generate-status-formater-base): Likewise. (twittering-search): Likewise. (twittering-follow): Likewise. (twittering-direct-message): Add the condition for `username' is nil. (twittering-reply-to-user): Likewise. (twittering-other-user-list-interactive): Likewise for `list-name'. 2010-03-11 Tadashi MATSUO * twittering-mode.el (twittering-update-status-format): kill newly generated `*Compile-Log*' buffer if it is empty. * twittering-mode.el (twittering-mode-init-variables): initialize account information explicitly. (twittering-get-username): simplified. (twittering-get-password): simplified. 2010-03-11 Satoshi Yatagawa * twittering-mode.el (twittering-render-timeline): Call `twittering-show-replied-statuses' if necessary. (twittering-show-replied-tweets): New defvar. (twittering-get-replied-statuses): Add optional argument `count'. (twittering-show-replied-statuses): Likewise. (twittering-have-replied-statuses-p): New defun. (twittering-show-replied-statuses): Add optional argument `interactive'. (twittering-hide-replied-statuses): Likewise. (twittering-toggle-show-replied-statuses): Adjust callers. (twittering-show-replied-statuses): Show a reason to do nothing. (twittering-hide-replied-statuses): Likewise. * twittering-mode.el (twittering-get-replied-statuses): Fix condition because `replied-id' always non-nil. (twittering-hide-replied-statuses): Fix condition to avoid an infinite loop. * twittering-mode.el (twittering-hide-replied-statuses): Go to the head of parent status before hiding replied statuses. * twittering-mode.el (twittering-default-show-replied-tweets): New defvar. (twittering-render-timeline): Use it instead of `twittering-show-replied-tweets'. (twittering-toggle-show-replied-statuses): Pass `twittering-show-replied-tweets' into `twittering-show-replied-statuses'. (twittering-show-replied-tweets): Add a docstring. 2010-03-11 Tadashi MATSUO * twittering-mode.el (twittering-lookup-http-start-function): rearranged. 2010-03-10 Satoshi Yatagawa * twittering-mode.el (twittering-lookup-http-start-function): Don't use `booleanp' to work on Emacs21. * twittering-mode.el (twittering-mode-map): Use `kbd' macro same as other keymaps. * twittering-mode.el (twittering-goto-next-status): Show a progress message. (twittering-goto-previous-status): Likewise. 2010-03-10 Tadashi MATSUO * twittering-mode.el (twittering-fill-string): receive adjustment width as the second argument. (twittering-update-status-format): support formating status with a prefix. (twittering-generate-formater): likewise. (twittering-generate-status-formater-base): likewise. (twittering-generate-format-status-function): likewise. (twittering-update-filled-string): likewise. (twittering-format-status-for-redisplay): new function for redisplaying a formated status with a prefix. * twittering-mode.el (twittering-find-status): new function for finding a status from an ID. (twittering-get-replied-statuses): new function for making a list of replied statuses. (twittering-mode-map): add `twittering-toggle-show-replied-statuses' to keymap as "r". (twittering-replied-statuses-visible-p): new function. (twittering-show-replied-statuses): new function. (twittering-hide-replied-statuses): new function. (twittering-toggle-show-replied-statuses): new function. (twittering-get-id-at): new function. (twittering-get-current-status-head): new function. 2010-03-09 Tadashi MATSUO * twittering-mode.el (twittering-redisplay-status-on-buffer): call `func' with the region. (twittering-make-passed-time-string): restore the original properties. * twittering-mode.el (twittering-timeline-data-table): store ID table and referring ID table, too. (twittering-current-timeline-id-table): new function. (twittering-add-statuses-to-timeline-data): store updated ID tables. * twittering-mode.el (twittering-generate-status-formater-base): redisplay filled string including substring that should be redisplayed. (twittering-update-filled-string): new function for updating filled string with `need-to-be-update' property. 2010-03-07 Satoshi Yatagawa * twittering-mode.el (twittering-edit-replace-at-point): New defun to call `twittering-edit-length-check' forcefully. (twittering-edit-mode-map): Bind F4 to it instead of `twittering-tinyurl-replace-at-point'. (twittering-edit-length-check): Make all arguments optional. 2010-03-06 Tadashi MATSUO * twittering-mode.el (twittering-server-info-alist): new variable for storing server information. (twittering-http-status-line-regexp): removed. * twittering-mode.el (twittering-display-remaining): new variable for specifying whether the remaining of rate limit should be displayed on the mode line or not. (twittering-update-mode-line): display the remaining of rate limit if `twittering-display-remaining' is non-nil. (twittering-get-ratelimit-remaining): new function. (twittering-get-ratelimit-limit): new function. 2010-03-06 Satoshi Yatagawa * twittering-mode.el: Use the new versioned API endpoint at "api.twitter.com/1" instead of the legacy API endpoint to fit twitter API specification as of 2010-02-17. (twittering-timeline-spec-to-host-method): Likewise. (twittering-host-method-to-timeline-spec): Likewise. (twittering-edit-post-status): Likewise. (twittering-update-status-from-minibuffer): Likewise. (twittering-manage-friendships): Likewise. (twittering-manage-favorites): Likewise. (twittering-update-lambda): Likewise. (twittering-update-jojo): Likewise. (twittering-http-post): Update a comment. * twittering-mode.el (twittering-http-get-default-sentinel): Add an additional information which is related to obsolete public_timeline. * twittering-mode.el (twittering-http-post): Set parameter `source' here. (twittering-edit-post-status): Adjust callers. (twittering-update-status-from-minibuffer): Likewise. (twittering-manage-friendships): Likewise. (twittering-manage-favorites): Likewise. (twittering-update-lambda): Likewise. (twittering-update-jojo): Likewise. (twittering-native-retweet): Likewise. * twittering-mode.el (twittering-http-default-sentinel): Call `twittering-switch-timeline' and `twittering-release-process' only when `proc' is non-nil. * twittering-mode.el (twittering-http-get-default-sentinel): Change style of an additional error message. (twittering-http-get-list-index-sentinel): Likewise. (twittering-http-post-default-sentinel): Likewise. 2010-03-03 Tadashi MATSUO * twittering-mode.el (twittering-toggle-reverse-mode): invoke `twittering-render-timeline' correctly. * twittering-mode.el (twittering-make-display-spec-for-icon): add 2 pixels margin to icons in order to make the cursor stand out. 2010-03-01 Satoshi Yatagawa * twittering-mode.el: Add a support of direct messages (which was originally written by me in 2010-02-16) * twittering-mode.el (twittering-xmltree-to-status): Convert a XML tree retrieved with "direct_messages{,/sent}" request into a list of status alists which is retrieved from a standard timeline. (twittering-host-method-to-timeline-spec): Add condition for `direct_messages' and `direct_messages_sent'. (twittering-timeline-spec-to-host-method): Modify condition for `direct_messages' and `direct_messages_sent'. * twittering-mode.el (twittering-status-format): Modify the meaning of the specifier "%r" to display a recipient on both `direct_messages' and `direct_messages_sent'. * twittering-mode.el (twittering-format-status): Add `url' property for `direct_messages' and `direct_messages_sent'. (twittering-get-status-url): Change the second argument ID as optional. (twittering-make-clickable-status-datum): Call it. 2010-03-01 Tadashi MATSUO * twittering-mode.el (twittering-generate-formater): changed into a function. (twittering-generate-status-formater-base): likewise. (twittering-generate-format-status-function): likewise. * twittering-mode.el (twittering-find-curl-program): replace `find' with `memq' in order to execute this function without loading `cl-seq.el' . (twittering-start-http-session): likewise. (twittering-goto-next-thing): likewise. 2010-02-28 Tadashi MATSUO * twittering-mode.el (twittering-format-status-function-source): new variable for the status format used for generating `twittering-format-status-function'. (twittering-format-status-function): new variable for byte-compiled formating function. (twittering-parse-format-string): new function. (twittering-generate-formater): new macro for generating a lambda expression for given a format string and specifiers. (twittering-generate-status-formater-base): new macro for generating a lambda expression for given a format string. (twittering-generate-format-status-function): new macro for generating format status function. (twittering-update-status-format): new function for adjusting `twittering-format-status-function' with the current value of `twittering-status-format'. (twittering-mode-init-variables): invoke `twittering-update-status-format'. (twittering-render-timeline): call `twittering-update-status-format' before rendering statuses. (twittering-format-status): changed into a function receiving one argument. It only calls `twittering-format-status-function'. 2010-02-27 Satoshi Yatagawa * twittering-mode.el (twittering-retweet): If `C-u' prefix is given, `twittering-use-native-retweet' is temporarily reversed before use. (twittering-follow): Handle a prefix `C-u' correctly. (twittering-favorite): Likewise. * twittering-mode.el (twittering-edit-cancel-status): Show a message when cancelling a request. (twittering-native-retweet): Likewise. (twittering-follow): Likewise. (twittering-favorite): Likewise. 2010-02-26 Satoshi Yatagawa * twittering-mode.el (twittering-fill-string): Calculate a column with `fill-prefix'. 2010-02-25 Satoshi Yatagawa * twittering-mode.el (twittering-format-status): Use the return value of the flet'ed function `attr' directly for the specifier "%L", forgotten in the 2010-02-18 changing. * twittering-mode.el (twittering-retrieve-image): Check the return value of `call-process-region'. (twittering-make-display-spec-for-icon): Check the return value of `twittering-retrieve-image'. * twittering-mode.el (twittering-format-status): Don't check `twittering-image-data-table' here. (twittering-format-status): Don't define `profile-image' as flet'ed function for the specifier "%i". * twittering-mode.el (twittering-get-tweets): Don't call `twittering-retrieve-image' here. * twittering-mode.el (twittering-retrieve-image): Bind `url-show-status' locally to inhibit showing a progress message. (twittering-tinyurl-get): Likewise. * twittering-mode.el (twittering-image-type): Don't use the external command `file' because Emacs can display only an image which is recongnized by `image-type-from-data'. (twittering-retrieve-image): Don't look up `twittering-image-data-table' here. (twittering-make-display-spec-for-icon): Call `twittering-retrieve-image' only when `gethash' returns nil. 2010-02-22 Satoshi Yatagawa * twittering-mode.el (twittering-atom-xmltree-to-status-datum): Call `twittering-decode-html-entities' to decode entities properly. * twittering-mode.el (twittering-get-error-message): Change the first argument to `buffer' from `proc'. (twittering-http-get-default-sentinel): Adjust callers. (twittering-http-get-list-index-sentinel): Likewise. (twittering-http-post-default-sentinel): Likewise. 2010-02-20 Satoshi Yatagawa * twittering-mode.el (twittering-current-timeline-spec): Check `spec-string' is a string before calling `twittering-string-to-timeline-spec'. (twittering-get-and-render-timeline): Likewise. (twittering-read-timeline-spec-with-completion): Likewise. * twittering-mode.el (twittering-read-timeline-spec-with-completion): Return nil explicitly when `twittering-string-to-timeline-spec' return nil. * twittering-mode.el (twittering-retrieve-image): Use `unless' instead of `when'. (twittering-icon-mode): Likewise. (twittering-scroll-mode): Likewise. (twittering-jojo-mode): Likewise. (twittering-toggle-reverse-mode): Likewise. 2010-02-19 Satoshi Yatagawa * twittering-mode.el (twittering-delete-ca-cert-file): New defun. (twittering-ensure-ca-cert): Add it as a hook into `kill-emacs-hook'. * twittering-mode.el (twittering-get-error-message): New defun to pickup an error message from a xmltree. (twittering-http-get-default-sentinel): Use it. (twittering-http-get-list-index-sentinel): Likewise. (twittering-http-post-default-sentinel): Likewise. * twittering-mode.el (twittering-http-get-list-index-sentinel): Call `twittering-get-response-body' instead of `xml-parse-region'. 2010-02-19 Tadashi MATSUO * twittering-mode.el (twittering-set-window-end): use `window-text-height' instead of `window-body-height' for Emacs21. 2010-02-18 Satoshi Yatagawa * twittering-mode.el (twittering-native-retweet): Add a margin for wide characters. (twittering-favorite): Likewise. * twittering-mode.el (twittering-extract-timeline-spec): Delete an unused argument to `error'. * twittering-mode.el (twittering-format-status): Use the return value of the flet'ed function `attr' directly for the specifier "%r". (twittering-format-status): Reverse condition for the specifier "%R". * twittering-mode.el (twittering-lookup-http-start-function): New defun to decide a connection method from currently available methods. (twittering-connection-type-table): New defvar. (twittering-connection-type-order): Likewise. * twittering-mode.el (twittering-curl-program): New defvar to cache a result of `twittering-find-curl-program'. (twittering-start-http-session-curl-p): New defun. (twittering-start-http-session-curl-https-p): Likewise. (twittering-start-http-session-curl): Rename from `twittering-start-http-ssl-session'. (twittering-start-http-session-native): Rename from `twittering-start-http-non-ssl-session'. 2010-02-18 Tadashi MATSUO * twittering-mode.el (twittering-current-timeline-spec): return nil if `twittering-current-timeline-spec-string' returns nil. (twittering-current-timeline-data): return nil if `twittering-current-timeline-spec' returns nil. (twittering-extract-timeline-spec): raise an error if the argument `str' is nil. 2010-02-17 Satoshi Yatagawa * twittering-mode.el (twittering-extract-timeline-spec): Check STR is non-nil first for avoiding an error caused by `string-match'. * twittering-mode.el (twittering-icon-mode): Add an argument "P" to `interactive'. (twittering-scroll-mode): Likewise. (twittering-jojo-mode): Likewise. (twittering-toggle-reverse-mode): Likewise. 2010-02-16 Satoshi Yatagawa * twittering-mode.el (twittering-timeline-spec-to-string): Replace `-' with `_' in symbol name `direct-messages' and `direct-messages-sent' to fit the parameters of twitter API. (twittering-extract-timeline-spec): Likewise. (twittering-timeline-spec-primary-p): Likewise. (twittering-timeline-spec-to-host-method): Likewise. (twittering-timeline-spec-alias): Likewise in a comment. * twittering-mode.el (twittering-icon-mode): Call `twittering-update-mode-line' and `twittering-render-timeline' only when mode was changed. (twittering-scroll-mode): Likewise. (twittering-jojo-mode): Likewise. (twittering-toggle-reverse-mode): Likewise. 2010-02-16 Tadashi MATSUO * twittering-mode.el (twittering-get-first-status-head): return nil if no statuses are rendered in the current buffer. (twittering-goto-first-status): go to the beginning of buffer if no statuses are rendered in the current buffer. (twittering-render-timeline): render tweets from the beginning of buffer if no statuses are rendered. * twittering-mode.el (twittering-reverse-mode): new variable for reverse alignment of tweets in timeline. (twittering-update-mode-line): add "reverse" to mode-line. (twittering-render-timeline): support reverse alignment of statuses. (twittering-toggle-reverse-mode): new interactive function to toggle reverse mode. (twittering-goto-next-status): support reverse mode. (twittering-goto-previous-status): likewise. (twittering-set-window-end): add new function. 2010-02-15 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-list-index-sentinel): Get a listname from `slug' element which is only in `list' node. 2010-02-15 Tadashi MATSUO * twittering-mode.el (twittering-get-and-render-timeline): copy spec-string and clear its text properties. * twittering-mode.el (twittering-http-default-sentinel): use buffer object directly. (twittering-http-get-default-sentinel): likewise. * twittering-mode.el (twittering-current-timeline): keep the current timeline spec string. * twittering-mode.el (twittering-switch-timeline): adjust the current timeline spec string to the given `spec-string' even if they mean the same timeline. * twittering-mode.el (twittering-http-get-default-sentinel): invoke `twittering-render-timeline' only if necessary. (twittering-add-statuses-to-timeline-data): return newly retrieved statuses. * twittering-mode.el (twittering-render-timeline): receive `timeline-data' as an optional argument. (twittering-http-get-default-sentinel): invoke `twittering-render-timeline' with new statuses. 2010-02-14 Tadashi MATSUO * twittering-mode.el (twittering-get-usernames-from-timeline): new function for collecting user screen names in a timeline. (twittering-make-list-from-assoc): removed. (twittering-read-username-with-completion): use `twittering-get-usernames-from-timeline' instead of `twittering-make-list-from-assoc'. (twittering-read-timeline-spec-with-completion): likewise. 2010-02-14 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-list-index-sentinel): Parse current-buffer as a xmltree. 2010-02-14 Tadashi MATSUO * twittering-mode.el (twittering-current-timeline-spec-string): new variable for storing the current timeline spec string. (twittering-last-requested-timeline-spec-string): removed. (twittering-last-retrieved-timeline-spec-string): removed. (twittering-set-current-timeline-spec-string): new function for referring the current timeline spec string. (twittering-current-timeline-spec-string): new function for referring the current timeline spec. (twittering-switch-timeline-if-necessary): new function for switching timeline. (twittering-mode-init-variables): explicitly initialize the current timeline spec. (twittering-http-get-default-sentinel): store the retrieved timeline even if it is not the current timeline. (twittering-get-and-render-timeline): switch timeline just after requested. (twittering-erase-old-statuses): reimplemented. (twittering-update-mode-line): use `twittering-current-timeline-spec-string'. (twittering-add-timeline-history): likewise. (twittering-current-timeline): likewise. (twittering-goto-next-status): likewise. * twittering-mode.el (twittering-add-statuses-to-timeline-data): integrated with `twittering-cache-status-datum'. (twittering-cache-status-datum): removed. 2010-02-13 Tadashi MATSUO * twittering-mode.el (twittering-mode-init-variables): make local variables by using `make-local-variable' in order to initialize the variables with the global values when invoking `twittering-mode'. You can initialize `twittering-icon-mode', `twittering-jojo-mode' and `twittering-scroll-mode' by using `setq' in your `.emacs'. 2010-02-12 Tadashi MATSUO * twittering-mode.el (twittering-format-status): remove a newline from `icon-string' that underlies the icon image. (twittering-status-format): add a newline to the default value in order to keep the interval of displayed tweets. 2010-02-12 Satoshi Yatagawa * twittering-mode.el (twittering-get-tweets): Add optional argument `since_id'. (twittering-get-and-render-timeline): Adjust callers. (twittering-get-tweets): Set parameter `since_id' instead of `since' because twitter API had dropped support for `since' parameter on 2009-04-08. (twittering-http-get-default-sentinel): Modify the condition for if retrieving statuses is nil. (twittering-erase-old-statuses): Don't add parameter `since'. (twittering-status-to-status-datum): No longer use `twittering-timeline-last-update'. (twittering-get-and-render-timeline): Likewise. (twittering-timeline-last-update): Delete variable. (twittering-local-strftime, twittering-global-strftime): Delete functions. (twittering-setftime): Delete function. * twittering-mode.el (twittering-get-status-from-http-response): No longer make a reverse list. (twittering-http-get-default-sentinel): Adjust callers. 2010-02-12 Tadashi MATSUO * twittering-mode.el (twittering-find-processes-for-timeline-spec): new function for finding processes retrieving a specific timeline spec. (twittering-remove-inactive-processes): new function for removing inactive processes from `twittering-process-info-alist'. (twittering-process-active-p): new function for checking whether the processes for a specific timeline spec are active or not. (twittering-get-and-render-timeline): use `twittering-process-active-p' instead of referring `twittering-process-info-alist' directly. * twittering-mode.el (twittering-http-get-default-sentinel): run `twittering-new-tweets-hook' even if the retrieval is non-interactive. * twittering-mode.el (twittering-timeline-data): removed. (twittering-current-timeline-spec): new function for the current timeline spec. (twittering-current-timeline-data): new function for the current timeline data. (twittering-remove-timeline-data): new function for clearing a specific timeline data from `twittering-timeline-data-table`. (twittering-add-statuses-to-timeline-data): new function for adding statuses to `twittering-timeline-data-table'. (twittering-http-get-default-sentinel): use `twittering-add-statuses-to-timeline-data'. (twittering-cache-status-datum): change the third argument into non-optional because the global `twittering-timeline-data' is obsoleted. (twittering-get-and-render-timeline): do not modify `twittering-timeline-data'. (twittering-render-timeline): use `twittering-current-timeline-data' instead of `twittering-timeline-data'. (twittering-erase-old-statuses): likewise. (twittering-read-username-with-completion): likewise. (twittering-read-timeline-spec-with-completion): likewise. 2010-02-11 Tadashi MATSUO * twittering-mode.el (twittering-fill-string): load "kinsoku.el" in advance if necessary. 2010-02-11 Satoshi Yatagawa * twittering-mode.el: No longer clear fetched timeline when switching to another timeline. * twittering-mode.el (twittering-timeline-data-table): New defvar. (twittering-http-get-default-sentinel): Save current timeline into `twittering-timeline-data-table' when retrieving it successfully. (twittering-get-and-render-timeline): Load target timeline from `twittering-timeline-data-table' when switching to another timeline. 2010-02-10 Satoshi Yatagawa * twittering-mode.el (twittering-status-not-blank-p): Fix the regexp for case of "text @user". * test/test-twittering-mode.el (test-status-not-blank-p): Add a testcase. * twittering-mode.el (twittering-setup-proxy): Return t explicitly when the proxy related configurations are consistent. (twittering-toggle-proxy): Call `twittering-setup-proxy'. 2010-02-09 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-default-sentinel): Get a buffer associate with the process from calling `process-buffer' instead of `current-buffer'. * twittering-mode.el (twittering-edit-cancel-status): Confirm before calling `twittering-edit-close' when an edit buffer was modified. (twittering-update-status-from-pop-up-buffer): Mark an edit buffer as unmodified. * twittering-mode.el (twittering-edit-length-check): Calculate length of a tweet with a sign string. * twittering-mode.el (twittering-native-retweet): Truncate a tweet by width instead of length. (twittering-favorite): Likewise. * twittering-mode.el (twittering-http-default-sentinel): Get a buffer associate with the process from calling `process-buffer' instead of taking from an argument. (twittering-http-default-sentinel): Delete an unnecessary argument. (twittering-start-http-ssl-session): Adjust callers. (twittering-start-http-non-ssl-session): Likewise. 2010-02-09 Tadashi MATSUO * twittering-mode.el (twittering-goto-previous-status): simplified. * twittering-mode.el (twittering-goto-next-status): retrieve additional statuses if the function is called at the end of the buffer. * twittering-mode.el (twittering-render-timeline): use `insert' when inserting a status at the end of the buffer in order to keep the marker pointing the end of the buffer. * twittering-mode.el (twittering-render-timeline): move the position correctly even if the buffer is invisible. 2010-02-08 Satoshi Yatagawa * twittering-mode.el (twittering-http-default-sentinel): Delete a call to `twittering-release-process' in the BODYFORM to avoid a double release. 2010-02-08 Tadashi MATSUO * twittering-mode.el (twittering-http-default-sentinel): call `twittering-release-process' even if some errors happen. (twittering-http-get-default-sentinel): remove invocation of `twittering-release-process'. 2010-02-08 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-default-sentinel): Call `twittering-release-process' when status code is not equal to "200", forgotten in the 2010-02-06 changing. * twittering-mode.el (twittering-status-to-status-datum): Change `regex-index' variable to local scope from global one. (twittering-status-to-status-datum): Rename `regex-index' to `regexp-index'. * twittering-mode.el (debug-print): Reduce redundant calls of `insert' because it can take multiple arguments. (debug-printf): Remove an unnecessary call to `concat' because `insert' can take multiple arguments. * twittering-mode.el (twittering-extract-timeline-spec): Fix the regexp for "search" timeline spec; same as for "filter". * twittering-mode.el (twittering-make-clickable-status-datum): When trying to add a text property to `source', check it is non-nil first for avoiding an error caused by `string-match'. 2010-02-07 Tadashi MATSUO * test/test-twittering-mode.el (test-format-status): replace the format specifier "%t" with "%T". * twittering-mode.el (twittering-extract-timeline-spec): fix the regexp for "filter" timeline spec. * test/test-twittering-mode.el (timeline-spec): add a test for trailing backslashes. * twittering-mode.el (twittering-extract-timeline-spec): add error messages for some conditions. * twittering-mode.el (twittering-read-timeline-spec-with-completion): fix the regexp for judging whether a list name is required or not. * twittering-mode.el (twittering-read-timeline-spec-with-completion): catch errors on interpreting timeline spec string. 2010-02-07 Satoshi Yatagawa * twittering-mode.el (twittering-http-get): Add an optional argument for a response data format. (twittering-http-post): Likewise. (twittering-get-list-index): Adjust callers. (twittering-http-post): Delete unused argument `contents'. * twittering-mode.el (twittering-http-get-default-sentinel): Check status-code here instead of `twittering-http-default-sentinel'. (twittering-http-get-list-index-sentinel): Likewise. (twittering-http-post-default-sentinel): Likewise. (twittering-http-default-sentinel): Adjust callers. * twittering-mode.el (twittering-http-get-list-index-sentinel): Set a null string explicitly if user does not have a list. 2010-02-06 Satoshi Yatagawa * twittering-mode.el (twittering-http-default-sentinel): New defun to share code between `twittering-http-get-default-sentinel', `twittering-http-get-list-index-sentinel', and `twittering-http-post-default-sentinel'. (twittering-http-get-default-sentinel): Adjust function. (twittering-http-get-list-index-sentinel): Likewise. (twittering-http-post-default-sentinel): Likewise. (twittering-start-http-ssl-session): Adjust callers. (twittering-start-http-non-ssl-session): Likewise. 2010-02-06 Satoshi Yatagawa * twittering-mode.el (twittering-edit-post-status): Don't add parameter `in_reply_to_status_id' if the tweet does not begin with `@'. (twittering-update-status-from-minibuffer): Likewise. * twittering-mode.el (twittering-status-not-blank-p): Fix a regexp pattern for USER. (twittering-status-to-status-datum): Likewise. (twittering-http-get-list-index-sentinel): Change a regexp pattern for LISTNAME. 2010-02-06 Tadashi MATSUO * twittering-mode.el (twittering-get-and-render-timeline): ignore non-interactive request if a process is waiting for responses. * twittering-mode.el (twittering-mode): set `buffer-read-only' to t explicitly. (twittering-render-timeline): bind `buffer-read-only' with `let*' locally. 2010-02-05 Satoshi Yatagawa * twittering-mode.el (twittering-update-status-from-pop-up-buffer): Use the current hashtag if set; same as `twittering-update-status-from-minibuffer'. 2010-02-05 Tadashi MATSUO * twittering-mode.el (twittering-format-status): replace a lacked property by an empty string. * twittering-mode.el (twittering-get-status-from-http-response): use ATOM format instead of JSON format. (twittering-atom-xmltree-to-status-datum): new function for converting an entry of ATOM into a status alist. (twittering-atom-xmltree-to-status): new function for converting a XML tree of ATOM into a list of status alists. (twittering-json-to-status-datum): removed. (twittering-json-to-status): removed. (twittering-get-tweets): retrieve "search" timeline in ATOM format instead of JSON format. (twittering-get-and-render-timeline): remove dependence on `json.el'. (twittering-search): likewise. 2010-02-04 Tadashi MATSUO * twittering-mode.el (twittering-status-to-status-datum): assign a retweet the ID issued when it is retweeted. `source-id', which is the ID of the original tweet, is also assigned to the retweet. (twittering-cache-status-datum): do not register multiple retweets referring the same tweet. * twittering-mode.el (twittering-http-get-default-sentinel): make a hash table for already retrieved IDs. (twittering-cache-status-datum): use a hash table of IDs to avoid registering redundant tweets. * twittering-mode.el (twittering-status-to-status-datum): fix lacked binding of `source-id' and `source-created-at'. * twittering-mode.el (twittering-cache-status-datum): register IDs with ID-TABLE when a tweet is added to DATA-VAR. This prevents duplicated tweets in one retrieval from being registered. 2010-02-03 Tadashi MATSUO * twittering-mode.el (twittering-http-get-default-sentinel): sort `twittering-timeline-data' by ID. 2010-02-03 Satoshi Yatagawa * twittering-mode.el (twittering-status-to-status-datum): Don't rewrite `created-at' by a same name element in `retweeted_status' node. 2010-02-02 Satoshi Yatagawa * twittering-mode.el (twittering-get-response-body): Add an optional second argument to share code between this and `twittering-get-response-body-string'. (twittering-get-response-body-string): Delete function. (twittering-get-status-from-http-response): Adjust callers. 2010-02-02 Tadashi MATSUO * twittering-mode.el (twittering-http-get-default-sentinel): use `twittering-get-status-from-http-response'. (twittering-get-status-from-http-response): new function for extracting statuses from HTTP response. (twittering-get-tweets): use `twittering-http-get-default-sentinel' for the "search" timeline spec. (twittering-http-get-search-sentinel): removed. 2010-01-31 Tadashi MATSUO * twittering-mode.el (twittering-http-get-default-sentinel): rearranged. * twittering-mode.el (twittering-start-http-ssl-session): return the process object. (twittering-start-http-non-ssl-session): likewise. (twittering-get-tweets): likewise. * twittering-mode.el (twittering-process-info-alist): new variable for managing active process and timeline spec being retrieved by the process. (twittering-register-process): new function for registering a pair of process and timeline spec. (twittering-release-process): new function for releasing a process. (twittering-get-timeline-spec-from-process): new function for getting timeline spec retrieved by the given process. (twittering-http-get-default-sentinel): discard statuses if the retrieved spec differs from the last requested one. (twittering-get-and-render-timeline): register a pair of the requested timeline spec and process for retrieving it. 2010-01-30 Tadashi MATSUO * twittering-mode.el (twittering-fill-string): use `frame-width' only if no windows display the `*twittering*' buffer. * twittering-mode.el (twittering-for-each-property-region): new function to process each region with a certain property. * twittering-mode.el (twittering-timer-for-redisplaying): new variable for timer of redisplaying statuses. (twittering-timer-interval-for-redisplaying): new variable specifying the interval of redisplaying statuses. (twittering-redisplay-status-on-buffer): new function to redisplay statuses on buffer. (twittering-format-status): append `need-to-be-update' property to the specifier "%@" and "%FILL{...}" including "%@". (twittering-start): start the timer of redisplaying statuses. (twittering-stop): stop the timer of redisplaying statuses. * twittering-mode.el (twittering-make-passed-time-string): new function to generate a string displayed as passed time of a status. (twittering-format-status): use `twittering-make-passed-time-string' for the specifier "%@". 2010-01-29 Daiji Kanematsu * twittering-mode.el (toplevel): add `easy-menu-define' in order to add the menu `Twitter'. 2010-01-29 Satoshi Yatagawa * twittering-mode.el (twittering-fill-string): Add an extra argument to `min' for avoiding error "Wrong number of arguments: min, 0". * twittering-mode.el (twittering-extract-timeline-spec): On search-mode, return a spec only when the length of `escaped-query' is greater than zero. 2010-01-28 Tadashi MATSUO * twittering-mode.el (twittering-render-timeline): simplified by using `insert-before-markers' instead of `insert'. This removes additional movement of points for scroll-mode. 2010-01-26 Satoshi Yatagawa * twittering-mode.el (twittering-status-to-status-datum): Add `original-user-name' and `original-user-screen-name' to return an alist; fix an incomplete merge on 2010-01-22. (twittering-json-to-status-datum): Likewise. * twittering-mode.el (twittering-json-to-status-datum): Use `retweeted-status-data' as variable instead of `retweeted-status'; same as `twittering-status-to-status-datum'. 2010-01-26 Satoshi Yatagawa * twittering-mode.el (toplevel): Require 'unicode explicitly on Emacs21. See a comment of `twittering-ucs-to-char' for more details. (twittering-ucs-to-char): Check (featurep 'unicode) instead of (featurep 'mucs). (twittering-ucs-to-char): Update comment. * twittering-mode.el (toplevel): On Emacs21, always call `set-terminal-coding-system'. 2010-01-25 Satoshi Yatagawa * twittering-mode.el (twittering-format-status): Call `twittering-make-display-spec-for-icon' only when `window-system' is non-nil to avoid error "Non-X frame used" under Emacs which is using a text-only terminal. 2010-01-25 Tadashi MATSUO * twittering-mode.el (twittering-extract-timeline-spec): add new timeline spec string for hashtag. 2010-01-23 Satoshi Yatagawa * twittering-mode.el (twittering-json-to-status-datum): Don't refer to `twittering-use-native-retweet'; same as `twittering-status-to-status-datum'. 2010-01-23 Naohiro Aota * twittering-mode.el (twittering-home-timeline): Add new funciton. 2010-01-23 Tadashi MATSUO * twittering-mode.el (twittering-fill-string): adjust `fill-column' to the minimum width of windows displaying `*twittering*' buffer. Thanks to Naohiro Aota. * twittering-mode.el (twittering-render-timeline): take account of multiple windows displaying `*twittering*' buffer. Thanks to Naohiro Aota. * twittering-mode.el (twittering-format-status): fix an incorrect index on filling text for the specifier "%t". 2010-01-24 Tadashi MATSUO * twittering-mode.el (twittering-extract-timeline-spec): support functional alias. 2010-01-23 Tadashi MATSUO * twittering-mode.el (twittering-timeline-spec-to-host-method): return query string as a element of returned list. (twittering-host-method-to-timeline-spec): receive query string as a optional argument. (twittering-http-get): remove special adjustment for search method, which is now unnecessary. (twittering-get-tweets): always receive query string as an argument for search method. (twittering-get-search): removed. (twittering-get-and-render-timeline): send query string if the given spec is `search'. (twittering-search): execute search via `twittering-get-and-render-timeline'. * twittering-mode.el (twittering-timeline-spec-to-string): modify the string format of `search' spec. (twittering-extract-timeline-spec): likewise. 2010-01-22 Satoshi Yatagawa * twittering-mode.el (twittering-initial-timeline-spec-string): Change value to ":home" from ":friends". * twittering-mode.el (twittering-status-to-status-datum): Don't refer to `twittering-use-native-retweet'. * twittering-mode.el (twittering-http-get-list-index-sentinel): Fix a reference to `mes' as a variable, not as a function. 2010-01-22 Tadashi MATSUO * twittering-mode.el (twittering-fill-string): add new function for generating filled string. (twittering-format-status): use `twittering-fill-string'. (twittering-render-timeline): remove unnecessary binding of the variable `fill-column'. 2010-01-22 Satoshi Yatagawa * twittering-mode.el: Add search support (which was originally written by Kensuke Matsuzaki in December 2009) * twittering-mode.el (twittering-json-to-status-datum): Add code for native retweets. (twittering-http-get-search-sentinel): Sync with HEAD. (twittering-get-response-body-string): Likewise. * twittering-mode.el (twittering-get-tweets): Rewrite to match this to the new-timeline spec. (twittering-get-search): Call `twittering-get-tweets' instead of `twittering-http-get' (twittering-search): Call `twittering-get-search' instead of `twittering-get-tweets'. * twittering-mode.el (twittering-timeline-spec-to-string): Add a condition for search-mode. (twittering-extract-timeline-spec): Likewise. (twittering-timeline-spec-to-host-method): Likewise. (twittering-host-method-to-timeline-spec): Likewise. * twittering-mode.el (twittering-http-get): Add an adjusting code. In search-mode, a `method' variable is now contains a query word for internal use. For this reason, we must adjust it before pass it into `twittering-start-http-session'. 2010-01-21 Satoshi Yatagawa * twittering-mode.el: Add a fail statement to work again under Emacs21 without Mule-UCS. (toplevel): Don't abort if require failed. (twittering-ucs-to-char): Return `?' explicitly if `decode-char' failed. * twittering-mode.el (twittering-get-tweets): Rename from `twittering-get-twits'. (twittering-get-and-render-timeline): Adjust callers. (twittering-new-tweets-hook): Fix a docstring. 2010-01-21 Tadashi MATSUO * twittering-mode.el (twittering-render-timeline): reduce redundant calls of `goto-char'. * twittering-mode.el (twittering-render-timeline): fix logic for inserting statuses not to duplicate the last status. 2010-01-20 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-default-sentinel): Show the reason phrase with status code if status code is not equal to "200"; same as `twittering-http-post-default-sentinel'. (twittering-http-get-list-index-sentinel): Likewise. * twittering-mode.el (twittering-http-status-line-regexp): New defconst to share this between several functions. The regexp pattern to obey to RFC 2616. (twittering-http-get-default-sentinel): Use it. (twittering-http-post-default-sentinel): Likewise. (twittering-http-get-list-index-sentinel): Likewise. * twittering-mode.el (twittering-tinyurl-get): Remove an unnecessary call to `concat'. * twittering-mode.el (twittering-update-jojo): Make a tweet by `twittering-ucs-to-char' instead of `string-as-multibyte'. 2010-01-19 Tadashi MATSUO * twittering-mode.el (twittering-get-first-status-head): add. (twittering-goto-first-status): add. (twittering-mode-map): bind `twittering-goto-first-status' to "H" instead of `begininng-of-buffer'. (twittering-render-timeline): use `twittering-goto-first-status'. 2010-01-18 Satoshi Yatagawa * twittering-mode.el (twittering-ucs-to-char): Add a workaround with navi2ch prior to 1.8.3, which is currently last release version as of 2010-01-18. The problem is fixed in navi2ch dated 2010-01-16 or later, but not released yet. 2010-01-17 Tadashi MATSUO * twittering-mode.el (twittering-format-status): fix the regexp for the specifier "%FILL{...}" to accept pairs of braces inside of "{...}". * twittering-mode.el (twittering-format-status): add new format decorator "%FACE[face-name]{...}", which decorates braced strings with the specified face. * twittering-mode.el (twittering-render-timeline): support additional rendering. (twittering-http-get-default-sentinel): send the additional argument `same-timeline' to `twittering-render-timeline'. (twittering-status-id<): add new function for comparing two ids. (twittering-status-id=): likewise. 2010-01-16 Satoshi Yatagawa * twittering-mode.el (twittering-get-response-header): Delete an adjusting code bacause `with-current-buffer' that can accept both a buffer and a buffer name. (twittering-get-response-body): Likewise. 2010-01-16 Tadashi MATSUO * twittering-mode.el (twittering-format-status): fix incorrect destructive modification of the replacement table for the specifier "%FILL{...}". 2010-01-16 Yuto Hayamizu * twittering-mode.el (twittering-edit-setup-help): use 0-witdh overlay to display help. (twittering-edit-mode, twittering-edit-post-status): do not use newline chars for help-overlay anymore. (twittering-edit-post-status): probihit posting over 140 chars tweets. 2010-01-15 Yuto Hayamizu * twittering-mode.el: changed URL 2010-01-15 Satoshi Yatagawa * twittering-mode.el (twittering-edit-buffer): New defvar. (twittering-update-status-from-pop-up-buffer): Use it. * twittering-mode.el (twittering-buffer-active-p): New defun. (twittering-http-get-default-sentinel): Call it to show a non-critical message on minibuffer only when current buffer is twittering-mode related buffer. (twittering-http-post-default-sentinel): Likewise. (twittering-get-response-body): Likewise. * twittering-mode.el (twittering-buffer-active-p): Delete an unnecessary code which is added for keep a backward compatibility. 2010-01-15 Tadashi MATSUO * twittering-mode.el (twittering-get-next-status-head): add a function finding the next head of status with `id' property. This replaces `twittering-get-next-username-face-pos'. (twittering-goto-next-status): use `twittering-get-next-status-head' instead of `twittering-get-next-username-face-pos'. (twittering-goto-next-status-of-user): likewise. * twittering-mode.el (twittering-get-previous-status-head): add a function finding the previous head of status with `id' property. This replaces `twittering-get-previous-username-face-pos'. (twittering-goto-previous-status): use `twittering-get-previous-status-head' instead of `twittering-get-previous-username-face-pos'. (twittering-goto-previous-status-of-user): likewise. 2010-01-15 Yuto Hayamizu * twittering-mode.el (twittering-mode-identity): add. Identify 'twittering-mode.el' by $Id$ tag. 2010-01-14 Tadashi MATSUO * twittering-mode.el (twittering-remove-duplicates): check availability of `delete-dups' by `fboundp' instead of `emacs-major-version'. 2010-01-14 Yuto Hayamizu * twittering-mode.el (twittering-format-status): add docstring 2010-01-15 Yuto Hayamizu * twittering-mode.el (twittering-update-status-function): add (twittering-update-status-from-pop-up-buffer): renamed from twittering-edit-status (twittering-update-status-interactive, twittering-enter) (twittering-organic-retweet, twittering-direct-message): use twittering-update-status-function (twittering-mode-map): bind 'u' to twittering-update-status-interactive 2010-01-13 Tadashi MATSUO * twittering-mode.el (twittering-format-string): fix the search of the key string following the prefix from a string including newlines. * twittering-mode.el (twittering-format-status): remove a newline as a separator of tweets. (twittering-render-timeline): insert a newline as a separator of tweets. * twittering-mode.el (twittering-format-status): add new format specifier "%T", which is converted to the raw text. * twittering-mode.el (twittering-format-status): add new format specifier "%FILL{...}", which applies `fill-region-as-paragraph' to the strings in braces. * twittering-mode.el (twittering-status-format): use '%FILL{...}' and '%T' for the default value instead of '%t'. 2010-01-12 Yuto Hayamizu * test/run-test.sh (exit_status): add 'emacs' command to test target emacsen 2010-01-12 Tadashi MATSUO * twittering-mode.el (twittering-format-status): fill the text with strings following "%t". 2010-01-12 Yuto Hayamizu * test/test-twittering-mode.el (test-icon-mode): removed use of twittering-tmp-dir 2010-01-12 Satoshi Yatagawa * twittering-mode.el (twittering-start-http-session): Call `twittering-find-curl-program' only when `twittering-use-ssl' is non-nil. * twittering-mode.el (twittering-wget-buffer): Delete function. (twittering-wget-buffer): Delete variable. 2010-01-11 Tadashi MATSUO * twittering-mode.el (twittering-convert-program): initialize without confirming whether `convert' comes from ImageMagick. (twittering-mode-init-variables): confirm whether the found `convert' is a part of ImageMagick or GraphicsMagick if `twittering-use-convert' is non-nil. If the program does not come from ImageMagick or GraphicsMagick, `twittering-use-convert' is changed into nil. 2010-01-10 Yuto Hayamizu * twittering-mode.el (twittering-convert-program): checks whether 'convert' is a part of ImageMagick. Windows XP has 'convert.exe' in WINDOWS/system32, which is a partition converter. (twittering-use-convert): use the value of twittering-convert-program 2010-01-11 Tadashi MATSUO * twittering-mode.el (twittering-status-format): modify the meaning of the specifier "%t" to remove implicit filling as a paragraph. (twittering-render-timeline): remove implicit filling a text as a paragraph. In addition, a newline as a delimiter is added by `twittering-format-status'. (twittering-format-status): with "%t", fill a text as a paragraph. This function adds a newline at the end of status instead of `twittering-render-timeline'. Then, the newline as a delimiter also has the same text properties as the body of the tweet. 2010-01-10 Tadashi MATSUO * twittering-mode.el (twittering-remove-duplicates): add for portability. (twittering-completing-read): add a modified version of `completing-read' that can accept candidates as a list of a string on Emacs21. (twittering-set-current-hashtag): use `twittering-completing-read' instead of `completing-read'. (twittering-read-username-with-completion): likewise. (twittering-read-list-name): likewise. (twittering-read-timeline-spec-with-completion): likewise. 2010-01-10 Yuto Hayamizu * test/test-twittering-mode.el (test-status-not-blank-p): add a testcase reproducing the bug of twittering-status-not-blank-p. * twittering-mode.el (twittering-use-native-retweet): renamed from twittering-use-native-retweets (twittering-status-not-blank-p): bug fix: return nil if a status is ended by '@foo'. * twittering-mode.el (twittering-edit-post-status): add trailing newlines to new history element because help-overlay need it. * twittering-mode.el (twittering-make-display-spec-for-icon): returns nil if the type of the image is not supported. 2010-01-09 Satoshi Yatagawa * twittering-mode.el (twittering-status-to-status-datum): Change retweet related variables to local scope from global one. * twittering-mode.el (twittering-extract-timeline-spec): Change syntax of error message to fit the GNU Emacs Lisp convention. (twittering-timeline-spec-to-host-method): Likewise. (twittering-get-and-render-timeline): Likewise. * twittering-mode.el (twittering-extract-timeline-spec): Remove an unnecessary call to `format' because all arguments of `error' pass to `format'. (twittering-timeline-spec-to-host-method): Likewise. (twittering-get-and-render-timeline): Likewise. * twittering-mode.el (twittering-read-username-with-completion): Convert a list of username strings to an alist before calling `completing-read' to work on Emacs21; same as `twittering-read-timeline-spec-with-completion'. * twittering-mode.el (twittering-icon-path): Delete function. 2010-01-09 Yuto Hayamizu * twittering-mode.el (twittering-edit-mode): setup twittering-warning-overlay and after-change-functions (twittering-edit-length-check): add. check length and set warning overlay if the length exceeds 140 chars. (twittering-edit-mode-map): fix keymap (twittering-edit-extract-status): add. extract status from pop-up buffer by removing trailing whitespace chars. (twittering-edit-post-status): use edit-extract-status. (twittering-edit-status): takes reply-to-id as a second argument (twittering-enter, twittering-organic-retweet) (twittering-direct-message, twittering-reply-to-user): use twittering-edit-status (twittering-edit-post-status): bug fix. 2010-01-09 Tadashi MATSUO * twittering-mode.el (twittering-http-get-list-index-sentinel): `save-excursion' had no effect because of the following `set-buffer'. This is fixed so that `save-excursion' saves the state of `temp-buffer'. (twittering-get-response-header): Likewise. (twittering-get-response-body): Likewise. (twittering-tinyurl-get): Likewise. (twittering-tinyurl-get): `buffer' are killed even if `search-forward-regexp' fails. 2010-01-09 Yuto Hayamizu * twittering-mode.el (twittering-edit-setup-help): add to setup help overlay in pop-up buffer (twittering-edit-next-history, twittering-edit-previous-history): use twittering-edit-setup-help 2010-01-08 Yuto Hayamizu * twittering-mode.el (twittering-percent-encode): bug fix: '\n','\r','\t' were not encoded correctly. 2010-01-08 Satoshi Yatagawa * twittering-mode.el (twittering-use-show-minibuffer-length): Add suggestion into a docstring. 2010-01-08 Yuto Hayamizu * twittering-mode.el (twittering-status-not-blank-p): bug fix: always return nil with strings with trailing newline. (twittering-edit-next-history): add. (twittering-edit-previous-history, twittering-edit-history): add history for pop-up buffer (twittering-edit-mode-map): defined key for next/previous-history (twittering-edit-mode): initialize local variables for history (twittering-edit-mode): setup help string overlay (twittering-edit-post-status): don't close buffer if tweet is empty 2010-01-08 Tadashi MATSUO * twittering-mode.el (twittering-image-type): Try to detect image type with `image-type-from-data' at first. (twittering-retrieve-image): Do not invoke `convert' if Emacs supports the image type and resize is not required. 2010-01-08 Yuto Hayamizu * twittering-mode.el (twittering-tmp-dir): delete (twittering-icon-mode): don't make temp dir (twittering-image-data-table): add. hash table where image data are stored. key:( . ),value:( . ) (twittering-use-wget): delete (twittering-image-type): re-implemented. Now it just returns a type of a given image. (twittering-make-display-spec-for-icon): Now it receives image URL as an argument. (twittering-retrieve-image): Now it receives image URL as an argument. (twittering-url-copy-file-async): delete (twittering-retrieve-image-without-wget): delete (twittering-retrieve-image-with-wget): delete (twittering-retrieve-image): changed default image type from png to xpm (twittering-image-type): bug fix in the case of bitmap (twittering-retrieve-image): handle error of determining image type. (twittering-image-type): let case-fold-search is t. * url-emacs21/*: add url library for emacs21 2010-01-07 Yuto Hayamizu * twittering-mode.el (twittering-url-reserved-p): bug fix: some reserved characters considered unreserved. Thanks to IMAI Toshiyuki (twittering-cert-file): add (twittering-ensure-ca-cert): generate temporary file for CA certificate 2010-01-06 Satoshi Yatagawa * twittering-mode.el (twittering-http-get-default-sentinel): Move `debug-printf' to outside of `unwind-protect' because we expect that mostly code of this function should be executed by way of BODYFORM of `unwind-protect', not UNWINDFORM. (twittering-http-post-default-sentinel): Likewise. * twittering-mode.el (twittering-http-get-list-index-sentinel): Add `debug-printf' same as `twittering-http-get-default-sentinel'. * twittering-mode.el (twittering-status-not-blank-p): Fix and modify a regexp pattern. 2010-01-06 Tadashi MATSUO * twittering-mode.el (twittering-read-timeline-spec-with-completion): return nil for an invalid timeline spec string. The function is unified with `twittering-read-timeline-spec-string-with-completion'. If the argument `as-string' is non-nil, it returns a spec string. (twittering-update-mode-line): the delimiter followed by a timeline spec string on mode-line is changed to a whitespace. (twittering-timeline-spec-bookmark): new variable for timeline spec bookmark. (twittering-extract-timeline-spec): support timeline spec bookmark. (twittering-equal-string-as-timeline): add. (twittering-get-and-render-timeline): accept a timeline spec string as well as a S-expression. `twittering-last-requested-timeline-spec' will be updated even if the requested spec essentially equals to the current one. (twittering-initial-timeline-spec): replaced by `twittering-initial-timeline-spec-string'. (twittering-last-requested-timeline-spec): replaced by `twittering-last-requested-timeline-spec-string'. (twittering-last-retrieved-timeline-spec): replaced by `twittering-last-retrieved-timeline-spec-string'. (twittering-initial-timeline-spec-string): added to replace `twittering-initial-timeline-spec'. (twittering-last-requested-timeline-spec-string): added to replace `twittering-last-requested-timeline-spec'. (twittering-last-retrieved-timeline-spec-string): added to replace `twittering-last-retrieved-timeline-spec'. (twittering-last-timeline-spec-string): removed. (twittering-visit-timeline): call `twittering-get-and-render-timeline' with a timeline spec string just as it has been input by the user. (twittering-extract-timeline-spec): `bookmark' is renamed `alias'. (twittering-timeline-spec-alias): this variable replaces `twittering-timeline-spec-bookmark'. * test/test-twittering-mode.el (timeline-spec): add tests of timeline spec normalization. 2010-01-04 Satoshi Yatagawa * twittering-mode.el (twittering-get-response-header): Change syntax of error message to fit the GNU Emacs Lisp convention. (twittering-get-response-body): Likewise. (twittering-tinyurl-get): Likewise. * twittering-mode.el (twittering-start-http-session): Change syntax of question message to fit the GNU Emacs Lisp convention. * twittering-mode.el (twittering-user-agent-default-function): Use `format' instead of `concat' to easy understand. (twittering-sign-string-default-function): Likewise. * twittering-mode.el (twittering-start-http-session): Remove an unnecessary call to `format' because all arguments of `error' pass to `format'. (twittering-make-http-request): Likewise. (twittering-url-copy-file-async): Likewise. 2010-01-04 Tadashi MATSUO * twittering-mode.el (twittering-last-requested-timeline-spec): new variable storing the last requested timeline spec. (twittering-last-retrieved-timeline-spec): new variable storing the last successfully retrieved timeline spec. (twittering-last-timeline-retrieved): removed. (twittering-last-host): removed. (twittering-last-method): removed. (twittering-convert-last-timeline-retrieved): removed. (twittering-last-timeline-spec): removed. (twittering-get-twits): do not update the information of the last request. (twittering-get-and-render-timeline): update the information of the last request instead of `twittering-get-twits'. (twittering-current-timeline): replace `twittering-get-twits' by `twittering-get-and-render-timeline'. (twittering-erase-old-statuses): replace `twittering-get-twits' by `twittering-get-and-render-timeline'. (twittering-initial-timeline-spec): new variable. 2010-01-03 Tadashi MATSUO * twittering-mode.el, test/test-twittering-mode.el: rebase the `timeline-spec' branch. The new timeline spec based on S-expression is introduced. * twittering-mode.el (twittering-timeline-spec-to-string): add. (twittering-extract-timeline-spec): add. (twittering-string-to-timeline-spec): add. (twittering-timeline-spec-singlep): add. (twittering-timeline-spec-to-host-method): add. (twittering-host-method-to-timeline-spec): add. (twittering-last-timeline-spec): add. (twittering-last-timeline-spec-string) (twittering-add-timeline-history): modified for new timeline spec. (twittering-update-mode-line): modified for new timeline spec. (twittering-get-twits-with-timeline-spec): modified for new timeline spec. (twittering-read-timeline-spec-string-with-completion): add. (twittering-read-timeline-spec-with-completion): modified for new timeline spec. (twittering-get-timeline, twittering-get-list): replaced with `twittering-get-twits-with-timeline-spec'. (twittering-get-and-render-timeline): renamed from `twittering-get-twits-with-timeline-spec'. * test/test-twittering-mode.el (timeline-spec): add tests for new timeline spec. 2010-01-03 Michael D. Ivey * twittering-mode.el (twittering-retweet): Add support for native retweets 2010-01-03 Yuto Hayamizu * twittering-mode.el (twittering-tinyurl-get): more descriptive error message (twittering-url-copy-file-async): more descriptive error message 2010-01-02 Alberto Garcia * twittering-mode.el (twittering-start-http-ssl-session): Set noninteractive using lexical-let so the HTTP sentinel can receive its value and `twittering-new-tweets-hook' works correctly. 2010-01-02 Satoshi Yatagawa * twittering-mode.el (twittering-use-show-minibuffer-length): New defvar to enable/disable a function which is show the number of charactors in minibuffer. (twittering-update-status-from-minibuffer): Refer it to add/remove hooks. 2009-12-30 Yuto Hayamizu * test/server.rb: add. Twitter API and Proxy mock server * twittering-mode.el (twittering-get-response-header) (twittering-get-response-body): Raise an error on broken responses. 2009-12-30 Tadashi MATSUO * twittering-mode.el (twittering-get-response-header): On failure, the function returns an empty string instead of the whole contents of the buffer. (twittering-get-response-body): When the function fails to find the tail of header, it returns nil without trying to parse a region. (twittering-find-proxy): add new function for finding proxy. (twittering-setup-proxy): add new function for configuring `twittering-proxy-server' and `twittering-proxy-port' if they have not been configured yet. (twittering-mode-init-variables): invokes `twittering-setup-proxy'. 2009-12-30 Satoshi Yatagawa * twittering-mode.el (twittering-get-response-header): Correct a reference to an unbound object. This problem was found by highmt. 2009-12-30 Yuto Hayamizu * test/el-test-runner.el (with-network): add macro. body of with-network is executed only when 'NETWORK' env var is set. * twittering-mode.el (twittering-image-type): No temporary files for resing images. Use standard in/out and temporary buffers instead. (twittering-convert-fix-size): set 48px as the default size of icon images. 2009-12-30 Tadashi MATSUO * twittering-mode.el (twittering-image-type): Don't generate redundant temporary files. The image format is specified by the command line instead of a file extension. 2009-12-30 Satoshi Yatagawa * twittering-mode.el (twittering-image-type): Don't set a third argument of `make-temp-file' to work on Emacs21. 2009-12-29 Satoshi Yatagawa * twittering-mode.el (twittering-get-response-header): Add an optional third argument for `search-forward-regexp'. 2009-12-29 Yuto Hayamizu * twittering-mode 0.9.0 release * twittering-mode.el (twittering-start-http-session): check if curl can use https or not. (twittering-get-response-body): bug fix: goto the beginning of buffer before search-forward. 'xml-parse-region' doesn't return when parsing unbalanced XML. (twittering-start-http-session): Use call-process instead of shell-command-to-string. If 'curl-program' contains space characters, shell-command fails. 2009-12-29 Satoshi Yatagawa * twittering-mode.el (twittering-get-response-body): Return nil explicitly when a broken XML data passed into `xml-parse-region'. (twittering-http-get-default-sentinel): Adjust callers. (twittering-http-post-default-sentinel): Likewise. * twittering-mode.el (twittering-http-post-default-sentinel): Add `debug-printf' same as `twittering-http-get-default-sentinel'. * twittering-mode.el (twittering-http-post-default-sentinel): Change a regexp pattern for HTTP response status line; same as `twittering-http-get-default-sentinel'. (twittering-http-get-list-index-sentinel): Likewise. 2009-12-29 Yuto Hayamizu * twittering-mode.el: load mule-ucs if needed (emacs21) (twittering-start-http-ssl-session): add 'Expect: ' header field for avoiding '417 Expectation Failed' HTTP response error. See http://d.hatena.ne.jp/imait/20091228/1262004813 and http://www.escafrace.co.jp/blog/09/10/16/1008 * twittering-mode.el: load 'cl' only at compile time. cf. http://www.gnu.org/software/emacs/manual/html_node/cl/Overview.html 2009-12-28 Yuto Hayamizu * twittering-mode.el (twittering-get-response-header) (twittering-get-response-body): inefficient code were replaced. thanks to Tadashi MATSUO 2009-12-27 Tadashi MATSUO * twittering-mode.el (twittering-show-minibuffer-length): keeps activated mark from being forcefully deactivated. 2009-12-27 Yuto Hayamizu * test/run-test.sh: add. invoke unit test for each emacsen * Makefile (check): add check rule. * test/el-test-runner.el (twittering-run-test): exit with appropriate status code. * test.el (test-transform-body): add. transforms the body of `defcase' recursively (defcase): use `test-transform-body' * test/run-test.el (twittering-run-test): colorize resulting outputs 2009-12-27 Satoshi Yatagawa * twittering-mode.el (twittering-http-post-default-sentinel): Check if buffer live-p before killing it. (twittering-http-get-list-index-sentinel): Likewise. * twittering-mode.el (twittering-setup-minibuffer): Remove an unnecessary call. * twittering-mode.el (twittering-other-user-list-interactive): Fix condition to detect a cancel. * twittering-mode.el (twittering-http-get-list-index-sentinel): Use `search-forward-regexp' instead of `search-forward' to fix a meaningless search. 2009-12-26 Tadashi MATSUO * twittering-mode.el (twittering-format-string): reimplement without `block'. (twittering-format-string): invokes a function in replacement table with a context alist. (twittering-retweet): replacement table is adapted to the new `twittering-format-string'. (twittering-format-status): reimplement with `twittering-format-string'. 2009-12-26 Yuto Hayamizu * twittering-mode.el (twittering-ensure-ca-cert): kludge for ssl certificate problem. (twittering-start-http-ssl-session): use `twittering-ensure-ca-cert' 2009-12-25 Satoshi Yatagawa * twittering-mode.el (twittering-show-minibuffer-length): Replace `minibufferp' by `minibuffer-window-active-p' to work this on Emacs21. (twittering-show-minibuffer-length): Change a message style for Emacs23. (twittering-setup-minibuffer, twittering-finish-minibuffer): Hook `post-command-hook' instead of `after-change-functions' to work in cooperation with SKK. 2009-12-25 Satoshi Yatagawa * twittering-mode.el (twittering-tinyurl-get): Fix typo to resolve error "Symbol's value as variable is void". This problem was found by naota. 2009-12-25 Yuto Hayamizu * twittering-mode.el (twittering-show-minibuffer-length): disabled on Emacs21 because `minibufferp' is not available. (twittering-update-status-from-minibuffer): set `minibuffer-message-timeout' to `nil'. `t' causes error on Emacs23. 2009-12-23 Satoshi Yatagawa * twittering-mode.el (twittering-show-minibuffer-length): New defun to show the number of charactors in minibuffer. (twittering-setup-minibuffer): New defun to add it to `after-change-functions'; invoke via `minibuffer-setup-hook'. (twittering-finish-minibuffer): New defun to remove it from `after-change-functions'; invoke via `minibuffer-exit-hook'. * twittering-mode.el (twittering-update-status-from-minibuffer): Set `minibuffer-setup-hook' and `minibuffer-exit-hook' temporarily. 2009-12-23 Yuto Hayamizu * test/test-twittering-mode.el (tinyurl): add test for tinyurl * twittering-mode.el (twittering-tinyurl-get): fix for emacs22. In emacs22, there's "^M" at the end of a buffer created by url-retrieve (twittering-tinyurl-get): fix by cvmat * twittering-mode.el (twittering-edit-mode-map): keybind 'u' to twittering-edit-status. F4 to tinyurl 2009-12-22 Tadashi MATSUO * twittering-mode.el (twittering-tinyurl-get): retrieves a shortened URL without `url-insert'. (twittering-url-copy-file-async): add new function for downloading a file asynchronously. (twittering-retrieve-image-without-wget): retrieves images asynchronously with `twittering-url-copy-file-async'. 2009-12-22 Yuto Hayamizu * twittering-mode.el (twittering-ucs-to-char): turned into function from macro (twittering-update-lambda, twittering-update-jojo): more portable string expression. Executable only in Japanese environment. (twittering-tinyurl-get): use with-temp-buffer with url-insert 2009-12-21 Tadashi MATSUO * twittering-mode.el (twittering-icon-path): `require' is added. (twittering-tinyurl-get, twittering-retrieve-image-without-wget): The dependency on `mm-url' is removed by using `url' library. (twittering-http-application-headers): `Content-Length' is added to `headers'. 2009-12-22 Satoshi Yatagawa * twittering-mode.el (twittering-get-host-method-from-timeline-spec) (twittering-get-timeline-spec): Add more timeline specification. * test/test-twittering-mode.el (timeline-spec): add more tests for timeline specification. 2009-12-20 Tadashi Matsuo * test/test-twittering-mode.el (timeline-spec): add tests for timeline specification. * twittering-mode.el (twittering-get-host-method-from-timeline-spec) (twittering-get-timeline-spec): Add new functions for timeline specification. (twittering-update-mode-line): Shows timeline specification. (twittering-render-timeline): Invokes `twittering-update-mode-line' to update the mode-line. (twittering-timeline-history): Add new variable for history of timeline specifications. (twittering-add-timeline-history): Add new function for adding timeline history. (twittering-http-get-default-sentinel): Invokes `twittering-add-timeline-history' to update history when retrieving tweets successfully. (twittering-other-user-list-interactive): The codes for retrieving list index synchronously are extracted as the new function `twittering-get-list-sync'. (twittering-get-list-index-sync): Add new function for retrieving list synchronously. (twittering-read-list-name): Add new function for reading a list name from the minibuffer. (twittering-read-timeline-spec-with-completion): Add new function for reading timeline specification from the minibuffer. (twittering-get-twits-with-timeline-spec): Add new function for retrieving tweets with timeline specification. (twittering-visit-timeline): Add new function for visiting a timeline. (twittering-mode-map): The key "V" is bound to 'twittering-visit-timeline'. 2009-12-20 Yuto Hayamizu * twittering-mode.el (twittering-update-mode-line): add (twittering-toggle-proxy, twittering-icon-mode) (twittering-scroll-mode, twittering-jojo-mode): use update-mode-line 2009-12-19 Yuto Hayamizu * twittering-mode.el (twittering-use-ssl): add (twittering-find-curl-program): add (twittering-start-http-ssl-session): add (twittering-start-http-non-ssl-session): add (twittering-http-application-headers): add (twittering-http-get): rewritten by using start-http-session (twittering-http-post): rewritten by using start-http-session (twittering-http-post-default-sentinel): use the same argument format of http-get-default-sentinel 2009-12-16 Yuto Hayamizu * twittering-mode.el (twittering-tinyurl-replace-at-point): distinguish between URL and others based on `bounds-of-thing-at-point'. 2009-12-15 haya * twittering-mode.el (twittering-status-not-blank-p): fix invalid escape sequence (twittering-tinyurl-replace-at-point): disabled when 'mm-url' doesn't exist. 2009-12-12 Alberto Garcia * twittering-mode.el (twittering-retrieve-image-without-wget): Kill buffer after retrieving the image 2009-12-11 Satoshi Yatagawa * twittering-mode.el (twittering-tinyurl-get): Call `mm-url-insert' only if argument `longurl' is non-nil to avoid error "Wrong type argument", otherwise return nil explicitly. (twittering-tinyurl-replace-at-point): Replace a region with newurl when `newurl' is non-nil. 2009-12-07 Naohiro Aota * twittering-mode.el (twittering-http-get-default-sentinel): Check if buffer live-p before killing it. 2009-12-07 Yuto Hayamizu * twittering-mode.el (twittering-read-username-with-completion): rename from `twittering-get-username-with-completion' (twittering-make-list-from-assoc): simplified (twittering-other-user-timeline-interactive): changed init string to nil 2009-12-06 NAKAYA Toshiharu * twittering-mode.el (twittering-retrieve-image-without-wget): set require-final-newline is nil locally since emacs can not save icon images because of "error in process filter: save-buffer: Text is read-only". 2009-12-06 Tadashi MATSUO * twittering-mode.el (twittering-use-wget): new variable for specifying whether the external command `wget' should be used. (twittering-retrieve-image): new function for retrieving icon images with/without wget. (twittering-get-twits): retrieve images with `twittering-retrieve-image'. (twittering-use-convert): add a new variable specifying whether the external command `convert' should be used. (twittering-make-display-spec-for-icon): new function for generating properties for icon with/without cropping the image. (twittering-retrieve-image-without-wget): write an image as binary explicitly. 2009-12-05 Satoshi Yatagawa * twittering-mode.el (twittering-get-username-with-completion): New defun as a wrapper function for read-from-minibuffer. (twittering-follow): Call it instead of read-from-minibuffer. (twittering-other-user-timeline-interactive): Likewise. (twittering-other-user-list-interactive): Likewise. * twittering-mode.el (twittering-make-list-from-assoc): New defun. 2009-12-04 Yuto Hayamizu * test/test-twittering-mode.el (sign-string): add test * twittering-mode.el (twittering-current-hashtag): docstring (twittering-idle-time): removed (unused?) 2009-12-03 Tadasohi MATSUO * twittering-mode.el (twittering-mode-map): define bindings so as to be also valid even on non-window terminal. 2009-12-02 Naohiro Aota * twittering-mode.el (twittering-icon-path): New funciton. (twittering-format-status): Use it. (twittering-get-twits): Ditto; wget now invoked for each icon. 2009-12-01 Satoshi Yatagawa * twittering-mode.el (twittering-update-status-from-minibuffer): Add more strict length check for status. * twittering-mode.el (twittering-status-not-blank-p): New defun to separate a check code from twittering-update-status-if-not-blank. (twittering-update-status-from-minibuffer): Integrate a post code from twittering-update-status-if-not-blank. (twittering-update-status-if-not-blank): Remove. 2009-11-30 Yuto Hayamizu * twittering-mode.el (twittering-max-number-of-tweets-on-retrieval) (twittering-number-of-tweets-on-retrieval): add (twittering-http-get-list-index-sentinel): restore the variable 'indexes' removed by mistake (twittering-get-twits): use 'twittering-number-of-tweets-on-retrieval' These changes were made by cvmat. thanks. 2009-11-29 Yuto Hayamizu * twittering-mode.el (twittering-status-to-status-datum): defined screen-name-in-text property (twittering-enter) (twittering-other-user-timeline-interactive) (twittering-other-user-timeline): put a screen-name-in-text ahead of other elements(uri, ...) 2009-11-28 Yuto Hayamizu * test/run-test.el (twittering-run-test): use test.el * twittering-mode.el (twittering-http-get, twittering-http-post): use a temp-buffer for each connection. This change solved the problem caused by concurrent HTTP request. (twittering-get-response-header, twittering-get-response-body): requires 'buffer' because now each http request is associated with its temp buffer (twittering-http-buffer): removed 2009-11-19 Tadashi MATSUO * twittering-mode.el (twittering-format-string): Add new function to format strings with a user-defined table. (twittering-retweet): Use 'twittering-format-string'. 2009-11-18 Alberto Garcia * twittering-mode.el (+twittering-direct-message, twittering-mode-map): New `twittering-direct-message' function to send direct messages. 2009-11-15 Naohiro Aota * twittering-mode.el (twittering-convert-fix-size): New variable. (twittering-image-type): Use it; Resize icons to fix size if the above variable is set. 2009-11-15 Yuto Hayamizu * test/test-twittering-mode.el, test/run-test.el, test/elunit.el: add unit testing framework elunit. * twittering-mode.el (twittering-goto-next-thing, (twittering-goto-previous-thing): add new commands. (twittering-goto-previous-status): check whether prev-pos is not nil. (twittering-set-current-hashtag, twittering-hashtag-history): add functions to support hashtag. Set the current hashtag with C-c C-h. (twittering-update-status-from-minibuffer): use the current hashtag if set. 2009-11-13 Satoshi Yatagawa * twittering-mode.el (twittering-convert-last-timeline-retrieved): New defun to keep a backward compatibility. (twittering-last-host, twittering-last-method): Call it. 2009-11-10 Satoshi Yatagawa * twittering-mode.el (twittering-follow): New command. (twittering-unfollow): Likewise. (twittering-manage-friendships): New defun. * twittering-mode.el (twittering-favorite): New command. (twittering-unfavorite): Likewise. (twittering-manage-favorites): New defun. 2009-11-09 Satoshi Yatagawa * twittering-mode.el (twittering-mode-map): Bind "L" to `twittering-other-user-list-interactive'. * twittering-mode.el (twittering-other-user-list-interactive): Set default username interactively. (twittering-other-user-list-interactive): Fix typo. * twittering-mode.el (twittering-make-http-request): Use let instead of let*. 2009-11-07 Satoshi Yatagawa * twittering-mode.el: Add (preliminary) Lists support. * twittering-mode.el (twittering-other-user-list-interactive): New command. * twittering-mode.el (twittering-get-list): New defun. (twittering-get-list-index): Likewise. (twittering-http-get-list-index-sentinel): Likewise. * twittering-mode.el (twittering-last-timeline-retrieved): Now it expects a list, not a string. (twittering-last-host, twittering-last-method): New defuns. (twittering-list-index-retrieved): New defvar. * twittering-mode.el (twittering-get-twits): Rename from twittering-get-timeline. (twittering-get-timeline): Call twittering-get-twits instead of (previous) twittering-get-timeline. (twittering-current-timeline): Likewise. (twittering-erase-old-statuses): Likewise. (twittering-goto-next-status): Likewise. * twittering-mode.el (twittering-make-http-request): New defun. (twittering-http-get): Use it. (twittering-http-post): Likewise. * twittering-mode.el (twittering-http-get): Add new local variable `server' which point to "twitter.com", "api.twitter.com", or your nearest proxy server. Otherwise `host' always point to "twitter.com" or "api.twitter.com". (twittering-http-post): Likewise. * twittering-mode.el (twittering-http-post): Add new argument `host'. (twittering-http-post): Change handling of the argument `method'. Now it expects `(concat method-class "/" method)'. * twittering-mode.el (twittering-update-status-if-not-blank): Adjust for change to twittering-http-post. (twittering-update-lambda): Likewise. (twittering-update-jojo): Likewise. * twittering-mode.el (twittering-get-twits): Set parameter `count' from twittering-get-count if existing. 2009-11-06 Naohiro Aota * twittering-mode.el (twittering-image-type): Support bitmap type using `convert'. (twittering-convert-program): New varibale. 2009-11-05 Satoshi Yatagawa * twittering-mode.el (twittering-render-timeline): Set the `fill-column' locally. 2009-09-01 Alberto Garcia * twittering-mode.el (twittering-retweet): Don't set the original status ID when retweeting. 2009-08-23 Yuto Hayamizu * twittering-mode.el (twittering-keybind-message): add. displaying important keybindings in minibuffer 2009-08-22 Yuto Hayamizu * twittering-mode.el (twittering-get-username): add (twittering-get-password): changed prompt (twittering-status-to-status-datum): added a new text property 'uri-in-text' (twittering-enter): use 'uri-in-text' 2009-08-19 Alberto Garcia * twittering-mode.el (twittering-image-type): Use external 'file' program if available to detect image types, and store the results in memory to avoid having to call it once and again. (twittering-format-status): Pass full image path to `twittering-image-type' 2009-06-18 Alberto Garcia * twittering-mode.el (twittering-http-get) (twittering-http-get-default-sentinel) (twittering-get-timeline, twittering-mode-map) (twittering-current-timeline-noninteractive) (twittering-current-timeline, twittering-erase-old-statuses): Get rid of the `twittering-last-timeline-interactive' global variable. 2009-06-18 Tsuyoshi CHO * twittering-mode.el (twittering-sign-simple-string) (twittering-sign-string-default-function) (twittering-sign-string-function, twittering-sign-string): Add new. (twittering-update-status-if-not-blank): Fix params, support sign. 2009-06-18 Tsuyoshi CHO * twittering-mode.el (twittering-mode-map) (twittering-format-status, twittering-retweet): Add new feature ReTweet 2009-06-18 Alberto Garcia * twittering-mode.el (twittering-status-to-status-datum): Read 'in_reply_to_status_id' and 'in_reply_to_user_id' attributes. (twittering-format-status): Add new '%r' format string for " in reply to user". (twittering-update-status-if-not-blank): Code refactoring. No need to use (format) to convert a string. 2009-06-18 Tsuyoshi CHO * twittering-mode.el (twittering-status-format) (twittering-format-status, twittering-status-to-status-datum) (twittering-update-status-if-not-blank, twittering-enter): Fix in_reply_to_status_id support not work problem, and marge Alberl patch below. 2009-06-17 Tsuyoshi CHO * twittering-mode.el (twittering-last-timeline-interactive): New add variable. (twittering-new-tweets-count): Ditto. (twittering-new-tweets-hook): Ditto. (twittering-mode-map): Add new binding v/V (twittering-http-get-default-sentinel): Add new hook support `twittering-new-tweets-hook'. (twittering-render-timeline, twittering-get-timeline): Support console emacs. (twittering-current-timeline-interactive): Add new function. (twittering-current-timeline-noninteractive): Ditto. (twittering-other-user-timeline): Ditto. (twittering-other-user-timeline-interactive): Ditto. (twittering-status-to-status-datum): Add support status id and reply to id. (twittering-update-status-if-not-blank): Ditto. (twittering-update-status-from-minibuffer): Ditto. 2009-03-12 Tsuyoshi CHO * twittering-mode.el (twittering-start): Update target chagne to current. 2009-03-12 Tsuyoshi CHO * twittering-mode.el: Append new methods by Alberto Garcia 's patch. (twittering-get-timeline): Add new general method. Old name is `twittering-friends-timeline'. (twittering-friends-timeline): Renew use general method. (twittering-replies-timeline): Add new. (twittering-public-timeline): Ditto. (twittering-user-timeline): Ditto. (twittering-current-timeline): Ditto. (twittering-last-timeline-retrieved): Add new variable. (twittering-mode-map): Add new key binding. (twittering-erase-old-statuses): Support multi method. (twittering-timer): Comment update. (twittering-icon-mode): Ditto. (twittering-http-post): Ditto. (twittering-get-response-body): Ditto. (twittering-cache-status-datum): Ditto and Fix renaming. (twittering-timeline-data, twittering-timeline-last-update): Rename. (twittering-render-timeline): Ditto. (twittering-icon-mode): Fix renaming. (twittering-http-get-default-sentinel): Ditto. (twittering-format-status): Fix indentation. 2009-03-09 Tsuyoshi CHO * twittering-mode.el (twittering-mode): Add keybind in Major mode docstring by Alex Schröder 2008-08-03 Tsuyoshi CHO * twittering-mode.el (twittering-mode-version): Update to 0.6 * twittering-mode.el (twittering-friends-timeline-last-update): æ–° è¦å¤‰æ•° (twittering-setftime, twittering-local-strftime) (twittering-global-strftime): `twittering-local-strftime'を機能分 割 (twittering-http-get): オプション引数`parameters'を追加ã€ä»–調整 (twittering-http-post): åŒä¸Šã®èª¿æ•´ (twittering-status-to-status-datum): last-updateã‚’æ›´æ–°ã™ã‚‹å‡¦ç†ã‚’追 加 (twittering-friends-timeline, twittering-erase-old-statuses): statusã®update時ã«sinceã‚’ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã¨æŒ‡å®šã™ã‚‹å‡¦ç†ã‚’サãƒãƒ¼ãƒˆ 2008-07-21 Tsuyoshi CHO * twittering-mode.el (twittering-http-get, twittering-http-post): 改行ãŒ1ã¤å¤šã‹ã£ãŸã®ã§é™¤åŽ» 2008-05-11 Tsuyoshi CHO * twittering-mode.el (twittering-format-status): id/user-idã®ãƒ•ォー マット整形。時間情報ã«uriを付与。Nicholasã®ãƒ‘ッãƒã«ã‚ˆã‚Šå…¨ä½“ã« username情報を付与 (twittering-status-to-status-datum): username/user-screen-nameã«ã¤ ã„ã¦æ•´ç† (twittering-get-status-url): æ–°è¦é–¢æ•°(マクロã§ã‚‚ã„ã„ã‚“ã ã‘ã©...) 2008-05-01 Tsuyoshi CHO * twittering-mode.el : 全体ã®ã‚³ãƒ¡ãƒ³ãƒˆä¿®æ­£ã€ä»¥ä¸‹ã®ä¿®æ­£ã¯å¤§éƒ¨åˆ†ã‚’ gan2ã•ã‚“ãŒå®Ÿæ–½ã—㟠(twittering-mode-version): æ–°è¦é–¢æ•° (twittering-timer): コメント追加 (twittering-scroll-mode, twittering-jojo-mode) (twittering-icon-mode): Nicholas Riley ã•ã‚“ã®ãƒ‘ッ ãƒæŽ¡ç”¨ã€ãƒãƒƒãƒ•ァローカル化 (list-push): æ–°è¦ãƒžã‚¯ãƒ­ (twittering-mode-map): キーãƒã‚¤ãƒ³ãƒ‰å¤‰æ›´ (twittering-mode-hook): フック変数新è¦ä½œæˆ(以å‰ã‹ã‚‰åˆ©ç”¨ã—ã¦ãŸã‘㩠定義ãŒãªã‹ã£ãŸ) (twittering-render-friends-timeline): Nicholas Riley ã•ã‚“ã®ãƒ‘ãƒƒãƒæŽ¡ç”¨ã€ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã®æŒ¿å…¥æ­£å¸¸åŒ– (twittering-goto-next-status) (twittering-get-next-username-face-pos) (twittering-goto-previous-status) (twittering-get-previous-username-face-pos) (twittering-goto-next-status-of-user) (twittering-goto-previous-status-of-user) (twittering-get-username-at-pos, twit): æ–°è¦é–¢æ•° 2008-02-08 Tsuyoshi CHO * twittering-mode.el : å…¨ä½“çš„ã«æ•´å½¢ã€Proxyã€Safe Password〠User-Agentã€Major mode stringを対応。Version 0.3 (twittering-mode-version): 暫定ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³å®šæ•°ã‚’定義 (twittering-proxy-use): プロキシ関係設定を導入 from (twittering-proxy-server): åŒä¸Š (twittering-proxy-port, twittering-proxy-user): åŒä¸Š (twittering-proxy-password): åŒä¸Š (twittering-toggle-proxy): åŒä¸Š (twittering-user-agent-default-function): åŒä¸Š (twittering-user-agent-default-function): デフォルトUser-Agent生æˆé–¢æ•° (twittering-user-agent-function): User-Agent生æˆé–¢æ•°æŒ‡å®šå¤‰æ•°ã‚’å°Žå…¥ (twittering-user-agent): 内部ã§ã®User-Agent生æˆé–¢æ•° (twittering-tmp-dir): ユーザー固有ã®ImageTmpDirã‚’ç”Ÿæˆ from (twittering-mode-map): ãƒ—ãƒ­ã‚­ã‚·ã®æœ‰åŠ¹ç„¡åŠ¹ã®ã‚­ãƒ¼ãƒã‚¤ãƒ³ãƒ‰å®šç¾© (twittering-mode-string): メジャーモード文字列を変数定義 (twittering-mode): ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰é–‹å§‹æ™‚ã«æ–‡å­—列を設定 (twittering-http-get): プロキシã€User-Agentã«ã‚ˆã‚‹å‡¦ç†ã‚’追加 (twittering-http-post): åŒä¸Š (twittering-get-password): パスワードを動的ã«ç¢ºèªã™ã‚‹é–¢æ•°ã‚’定義 2007-10-14 Y. Hayamizu * twittering-mode.el : Naoya T. , masa_edw ã®ãƒ‘ッãƒã‚’ã¨ã‚Šã“ã‚€ (twittering-url-encode): 使ã‚ãªã„ã®ã§å‰Šé™¤ (twittering-decode-html-entities): patched: 数値エンティティã ã‘ã§ãªã,asciiエンティティã«ã‚‚対応. (twittering-font-lock-keywords): font-lock-keywordsを削除.text propertyã«ã‚ˆã£ã¦è¨­å®šã™ã‚‹. (twittering-format-status): patched: statusã¨format-strã‹ã‚‰statusã®è¡¨ç¤ºç”¨æ–‡å­—列を生æˆ. (twittering-scroll-mode): patched: æ–°ã—ã„twitãŒã‚ã£ãŸã¨ãã«,カーソルもスクロールã™ã‚‹ã‹å›ºå®šã™ã‚‹ã‹ã‚’設定ã™ã‚‹ãƒžã‚¤ãƒŠãƒ¢ãƒ¼ãƒ‰, masa_edwã®ãƒ‘ッム(twittering-status-format): twitã®è¡¨ç¤ºæ–¹æ³•ã‚’ãã‚るテンプレート文字列 (twittering-icon-mode): patched: ifã‚’whenã«ãŠã‹ãˆãŸ.nilを渡ã•れãŸã¨ãã¯ãƒžã‚¤ãƒŠãƒ¢ãƒ¼ãƒ‰ã®ã‚¹ã‚¤ãƒƒãƒã«æŒ¯èˆžã‚’変更 (twittering-local-strftime): patched: 時間をフォーマット文字列ã«å¾“ã„æ–‡å­—列化 (twittering-mode-init-variables): font-lock-modeã¯,Emacs21ç³»ã§ã¯autoloadã™ã‚‹ãŸã‚ã«ä¸€åº¦å‘¼ã¶å¿…è¦ãŒã‚ã‚‹. icon-mode, scroll-modeをマイナモードã«ç™»éŒ². (twittering-inspect-object): 使ã‚ãªã„ã®ã§å‰Šé™¤ (twittering-http-get-default-sentinel): エラーを追ã„ã‚„ã™ãã™ã‚‹ãŸã‚,condition-caseを廃止 (twittering-status-to-status-datum): å…¨ã¦ã®ãƒ‡ãƒ¼ã‚¿ã‚’抽出ã™ã‚‹ã‚ˆã†ã‚³ãƒ¼ãƒ‰è¿½åŠ .ユーザå,URIリンク表示ãªã©ã®å‡¦ç†ã‚‚ã“ã“ã§. 2007-10-13 Y. Hayamizu * twittering-mode.el (twittering-font-lock-keywords): ユーザーåã®ãƒ•ェイスをé©ç”¨ã™ã‚‹è¦å‰‡ã‚’修正.アイコン画åƒã‚’表示ã—ãŸã¨ãã«,下線ãŒç”»åƒã«ã‹ã‹ã‚‰ãªã„よã†ã«ã—ãŸ. (twittering-render-friends-timeline): ãƒã‚¤ãƒ³ãƒˆãŒç‰¹å®šã®twitã«å¯¾ã—ã¦å›ºå®šã•れるよã†ã«ã—ãŸ(patch from masa_edw) 2007-10-12 Y. Hayamizu * twittering-mode.el (twittering-idle-time): ã¤ã‹ã‚ãªã„ã®ã§å‰Šé™¤ (twittering-get-or-generate-buffer): ãƒãƒƒãƒ•ã‚¡å–å¾—ã®ãŸã‚ã®é–¢æ•°.存在ã—ãªã„ãƒãƒƒãƒ•ã‚¡ã ã£ãŸã‚‰,æ–°ãŸã«ç”Ÿæˆã—ã¦è¿”ã™. (twittering-buffer): Variable:twittering-bufferã‚’åå‰ã«æŒã¤ãƒãƒƒãƒ•ã‚¡ã‚’è¿”ã™é–¢æ•°.ã“ã®ãƒãƒƒãƒ•ァを使ã†å ´åˆã¯,(twittering-buffer)ã«ã‚ˆã£ã¦å–å¾—ã™ã‚‹. (twittering-http-buffer): twittering-bufferã¨åŒã˜ (twittering-wget-buffer): twittering-bufferã¨åŒã˜ 2007-10-11 Y. Hayamizu * twittering-mode.el (twittering-icon-mode): アイコンを表示ã™ã‚‹ã‹å¦ã‹ã®ãƒ•ラグ (twittering-wget-buffer): アイコン画åƒã‚’wgetã§å–å¾—ã™ã‚‹ãƒ—ロセスã®ãƒãƒƒãƒ•ã‚¡ (twittering-icon-mode): アイコンã®è¡¨ç¤º/éžè¡¨ç¤ºã‚’切りæ›ãˆã‚‹ã‚³ãƒžãƒ³ãƒ‰ (twittering-tmp-dir): アイコンã®ç”»åƒã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª (twittering-image-stack): ダウンロードã™ã¹ãアイコン画åƒã®ãƒªã‚¹ãƒˆ (twittering-image-type): ç”»åƒã®ç¨®é¡žã‚’判別ã™ã‚‹é–¢æ•° (twittering-render-friends-timeline): friends timelineを表示ã™ã‚‹éƒ¨åˆ†ã‚’切り出ã—㟠2007-10-10 Y. Hayamizu * twittering-mode.el: ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå·ã‚’ã¤ã‘㟠0.1.0 2007-10-07 Y. Hayamizu * twittering-mode.el (twittering-http-get-default-sentinel): http-bufferを毎回生æˆ-削除ã™ã‚‹ã®ã‚’ã‚„ã‚ã¦,内容をeraseã—ã¦ä½¿ã„回ã™ã‚ˆã†ã«ã—ãŸ. (twittering-http-get-default-sentinel):HTTPレスãƒãƒ³ã‚¹ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚³ãƒ¼ãƒ‰ãŒä¸Šæ‰‹ã拾ãˆãªã‹ã£ãŸã¨ãã®å‡¦ç†ã‚’追加 (twittering-http-get-default-sentinel): カレントãƒãƒƒãƒ•ã‚¡ã‹*twittering*ã®ã¨ãã¯,friends-timelineã‚’æ›´æ–°ã—ã¦ã‚‚ãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ãŒå¤‰ã‚らãªã„よã†ã«ä¿®æ­£. 2007-09-24 Y. Hayamizu * twittering-mode.el (twittering-status-to-status-datum): URIをクリックå¯èƒ½ã«ã™ã‚‹å‡¦ç†ã‚’追加 2007-09-23 Y. Hayamizu * twittering-mode.el (twittering-uri-face): URI用ã®ãƒ•ェイス (twittering-click): クリック時ã«å®Ÿè¡Œã•れるコマンド (twittering-enter): Enterã‹C-mãŒæŠ¼ã•れãŸã¨ãã«å®Ÿè¡Œã•れるコマンド 2007-09-19 Y. Hayamizu * twittering-mode.el (twittering-mode-syntax-table): "(double quote)ã‚’,文字列クオートã¨èªè­˜ã—ãªã„よã†ã«sytax-tableを変更. (twittering-friends-timeline): friends timelineã®å–å¾—ã—ãŸãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜ã—ã¦ãŠã変数.twittering modeãŒèµ·å‹•ã—ã¦ã„ã‚‹é™ã‚Š,ã“ã®å¤‰æ•°ã«å–å¾—ã—ãŸstatusã‚’éšæ™‚追加ã—ã¦ã‚†ã. (cl): assocrefã‚’innner defunã—ã¦,ãƒã‚¤ãƒˆã‚³ãƒ³ãƒ‘イル時ã«WarningãŒå‡ºã¦ã„ãŸ.clパッケージã®fletを使ã†ã“ã¨ã§WarningãŒå‡ºãªã„よã†ã«è§£æ±ºã—ãŸ. (twittering-status-to-status-datum): twittering-status-to-lineã‹ã‚‰åå‰å¤‰æ›´ (twittering-friends-timeline-data): twittering-friends-timelineã‹ã‚‰åå‰å¤‰æ›´ (twittering-status-to-status-datum): idã‚‚status datumã«å«ã‚るよã†ã«ã—ãŸ. (twittering-cache-status-datum): status datumã‚’data-var(デフォルトã¯twittering-friends-timeline-data)ã«ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã™ã‚‹é–¢æ•°.ã™ã§ã«ã‚ã‚‹status datumを渡ã™ã¨nil,æ–°ã—ã„status datumを渡ã™ã¨tã‚’è¿”ã—ã¦data-varã«è¿½åŠ ã™ã‚‹. (twittering-http-get-default-sentinel):éŽåŽ»ã®status datumをキャッシュã—ã¦,ãƒãƒƒãƒ•ã‚¡ã«éŽåŽ»ã®statusも表示ã•れるよã†ã«ã—ãŸ. (twittering-erase-old-statuses): 21件目以é™ã®å¤ã„statusを消ã™é–¢æ•°.実際ã¯ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚’全部消ã—ã¦,twittering-http-getを呼んã§ã„ã‚‹ã ã‘.C-c C-eã«ãƒã‚¤ãƒ³ãƒ‰. (twittering-username-face): ユーザå用ã®face.(defface )ã®å¾Œã«(defvar )ã§ä½¿ç”¨å¯èƒ½ã«ãªã£ãŸ.ãªãœï¼Ÿ (twittering-status-to-status-datum): ユーザåã®ãƒ†ã‚­ã‚¹ãƒˆã«mouse-face属性ã¨,uri属性(ユーザã®ãƒšãƒ¼ã‚¸ã®URI)を付加ã™ã‚‹ã‚ˆã†ã«ã—ãŸ. (twittering-click-username): ユーザåをクリックã™ã‚‹ã‹,C-mを押ã—ãŸã¨ãã«èµ·å‹•ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰. (twittering-mode-map): vimライクãªã‚­ãƒ¼ãƒã‚¤ãƒ³ãƒ‰ã‚’追加 (twittering-mode): twittering-mode-hookã§font-lock-defaultsãŒè¨­å®šã•れãŸå¾Œã«,font-lock-mode ã‚’2回呼んã§å¤‰æ›´ã‚’åæ˜ ã•ã›ã‚‹ã‚ˆã†ã«ã—ãŸ. (twittering-mode-init-variables): twittering-username-faceã®å®šç¾©ã‚’ã“ã®é–¢æ•°ã®ä¸­ã«ã†ã¤ã—ãŸ. (twittering-browse-user-page): twittering-click-usernameã‹ã‚‰åå‰å¤‰æ›´. (twittering-update-status-interactive): twittering-update-statusã‹ã‚‰åå‰å¤‰æ›´. (twittering-reply-to-user): ユーザå上ã§Enterを押ã™ã¨ã“ã®é–¢æ•°ãŒå‘¼ã³ã ã•れるよã†ã«ã‚­ãƒ¼ãƒã‚¤ãƒ³ãƒ‰å¤‰æ›´.ミニãƒãƒƒãƒ•ã‚¡ã« @<ユーザå> ãŒè‡ªå‹•挿入ã•れる. (twittering-view-user-page): twittering-browse-user-pageã‹ã‚‰åå‰å¤‰æ›´.C-c C-vã«ãƒã‚¤ãƒ³ãƒ‰. (twittering-update-status-if-not-blank): 引数statusãŒ,空白文字ã®ã¿ã‹, @<ユーザå> ã®ã¿ã®å ´åˆã«ã¯ nil ã‚’è¿”ã—,ä»–ã®æ–‡å­—ã‚‚å«ã‚€å ´åˆã«ã¯ POSTã—ã¦tã‚’è¿”ã™é–¢æ•°. (twittering-update-status-from-minibuffer): ミニãƒãƒƒãƒ•ã‚¡ã‹ã‚‰statusã‚’æ›´æ–°ã™ã‚‹ãŸã‚ã®é–¢æ•°.ç„¡åŠ¹ãªæ–‡å­—(twittering-update-status-if-not-blankã§åˆ¤å®š)ãŒå…¥åŠ›ã•れãŸå ´åˆã¯,æœ‰åŠ¹ãªæ–‡å­—列ãŒå…¥åŠ›ã•れるã¾ã§ãƒ«ãƒ¼ãƒ—ã™ã‚‹. 2007-09-12 Y. Hayamizu * twittering-mode.el (twittering-ucs-to-char): Emacs21ç³»ã§ã¯,Mule-UCSãŒãƒ­ãƒ¼ãƒ‰ã•れã¦ã„ãªã„ã¨,(decode-char 'ucs HOGE)ãŒnilã«ãªã‚Š,文字コードをå–å¾—ã§ããªã„ã“ã¨ãŒã‚ã‚‹.ãã“ã§,ucs-to-charãŒä½¿ãˆã‚‹ç’°å¢ƒã§ã¯ucs-to-charã‚’,使ãˆãªã„環境(Emacs22ãªã©)ã§ã¯decode-charを使ã†ã‚ˆã†ã«è‡ªå‹•ã§åˆ‡ã‚Šæ›¿ãˆã‚‹ãƒžã‚¯ãƒ­ã‚’書ã„ãŸ. 2007-09-10 Y. Hayamizu * twittering-mode.el (twittering-refresh-buffer): 使ã‚ãªã„ã®ã§å‰Šé™¤ (twittering-http-post-default-sentinel): condition-case ã§ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã™ã‚‹ã‚ˆã†ã«ã—ãŸ. (twittering-http-get-default-sentinel): *twittering*ãƒãƒƒãƒ•ã‚¡ã‚’read-onlyã«ã—㟠(twittering-http-post-default-sentinel): condition-case ã§ã‚¨ãƒ©ãƒ¼ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’追加. (twittering-start): 複数ã®ã‚¿ã‚¤ãƒžãŒèµ°ã‚‰ãªã„よã†ã«,twittering-timerãŒnilã§ãªã„=既存ã®ã‚¿ã‚¤ãƒžãŒèµ°ã£ã¦ã„ã‚‹å ´åˆã¯ä¸€æ—¦twittering-stopを呼ã³å‡ºã—ã¦ã‹ã‚‰ã‚¿ã‚¤ãƒžã‚’スタートã™ã‚‹ã‚ˆã†ã«ã—ãŸ. 2007-09-09 Y. Hayamizu * twittering-mode.el: リリース (case-string): CarbonEmacs (Emacs22)ã§,case-stringを呼ã³ã ã™ã‚³ãƒ¼ãƒ‰ã‚ˆã‚Šã‚‚å‰ã«defmacroã‚’æŒã£ã¦ããŸã‚‰,警告ãŒå‡ºãªã„ã¨ã„ã†å ±å‘Š. (twittering-decode-html-entities): ucs-to-charã®ä½¿ç”¨ã‚’ã‚„ã‚,(decode-char 'ucs ...)を使ã†ã“ã¨ã«. (reported by masa_edw) (twittering-update-status): read-from-minibufferã®7番目ã®å¼•æ•°ã«tを指定ã—,input methodをカレントãƒãƒƒãƒ•ã‚¡ã‹ã‚‰ç¶™æ‰¿ã™ã‚‹ã‚ˆã†ã«ã—ãŸ. (twittering-decode-html-entities): string-to-intã¯obsoleteãªã®ã§,string-to-numberã«å¤‰æ›´ (reported by masa_edw) (twittering-get-response-header): (setq (get-buffer ...)) ã¨ãªã£ã¦ã„ãŸã®ã§,(setq buffer (get-buffer ...))ã«ä¿®æ­£. twittering-get-response-bodyã‚‚åŒæ§˜ (twittering-timer-action): twittering-refresh-triggerã¯æ—¢ã«ä½¿ã£ã¦ã„ãªã„変数ã ã£ãŸã®ã§å‰Šé™¤ã—㟠(debug-print): ãƒžã‚¯ãƒ­ãŒæœ€åˆã«ã‚³ãƒ³ãƒ‘イルã•れる時点ã§ã¯,debug-modeãŒå¤‰æ•°ã¨ã—ã¦å®£è¨€ã•れã¦ã„ãªã„ã®ã§,debug-modeã®åˆ¤æ–­ã¾ã§å«ã‚ãŸã‚³ãƒ¼ãƒ‰ã‚’åãよã†ã«ã—ãŸ. (twittering-http-post-default-sentinel): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«ä¼´ã„æ›¸ãæ›ãˆãŸ (twittering-get-response-body): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«ä¼´ã„æ›¸ãæ›ãˆãŸ (twittering-xmltree-to-status): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«ä¼´ã„æ›¸ãæ›ãˆãŸ (twittering-status-lines): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«ä¼´ã„æ›¸ãæ›ãˆãŸ (twittering-status-to-line): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«ä¼´ã„æ›¸ãæ›ãˆãŸ (twittering-get-timeline): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«å‰Šé™¤ (twittering-status-lines): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«å‰Šé™¤ (twittering-parse-xml): xml-parse.elã®ã‹ã‚りã«,xml.el(Emacs標準?)を使ã†ã‚ˆã†ã«å¤‰æ›´ã—ãŸã“ã¨ã«å‰Šé™¤ (twittering-timer-interval): twittering-refresh-intervalã‹ã‚‰åå‰å¤‰æ›´ (twittering-inspect-object): ä»»æ„ã®Lispオブジェクトを文字列ã§è¡¨ç¾ã§ãるユーティリティ関数 (twittering-timer-action): xml.elã«ã‚ˆã‚Šå‡¦ç†ãŒè»½ããªã£ãŸã®ã§,一定時間間隔ã§ã®æ›´æ–°ã«å¤‰æ›´. (twittering-xmltree-to-status): Emacs21ã¨Emacs22ã®xml.elã®å·®ç•°ã‚’å¸åŽã™ã‚‹ã‚³ãƒ¼ãƒ‰ã‚’追加.Emacs22ã§ã¯,ノードã®ãƒªã‚¹ãƒˆã«ç©ºã®æ–‡å­—åˆ—ãŒæ··å…¥ã™ã‚‹ã“ã¨ãŒã‚ã‚‹ãŸã‚,文字列を除去ã™ã‚‹ã‚ˆã†ã«ã—ãŸ. twittering-mode-3.0.0/INSTALL0000644000000000000000000000260712141747407015637 0ustar rootroot00000000000000 Installation Guide ================== For Windows users ----------------- * Uncompress the archive file, and add a path of a directory containing `twittering-mode.el` to your `load-path`. * For example, if you uncompressed it under `C:\foo\`, there may be a directory `C:\foo\twittering-mode-X.X.X\` which contains `twittering-mode.el`. So add the following code to your `.emacs` (add-to-list 'load-path "C:/foo/twittering-mode-X.X.X") * Proceed to **Set up your Emacs** For Linux and other Unix users ------------------------------ * Uncompress the archive file, and add a path of a directory containing `twittering-mode.el` to your `load-path`. * For example, if you uncompressed it under `/path/to/foo`, there may be a directory `/path/to/foo/twittering-mode-X.X.X/` which contains `twittering-mode.el`. So add the following code to your `.emacs` (add-to-list 'load-path "/path/to/foo/twittering-mode-X.X.X") * Install cURL, gnutls, or openssl for using SSL connection. * Proceed to **Set up your Emacs** Set up your Emacs ----------------- * Add following code to your `.emacs`: (require 'twittering-mode) Run twittering-mode ------------------- 1. Execute `M-x twit` to run twittering-mode. 2. Open OAuth authorization page with your browser, click "Allow", and enter the PIN code. 3. Your friends' timeline will appear. Enjoy! twittering-mode-3.0.0/INSTALL.ja0000644000000000000000000000310012141747407016215 0ustar rootroot00000000000000 ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã®æ‰‹å¼•ã ====================== Windows --------- * twittering-modeã®ãƒ•ァイルを展開ã—ã¦ç¾ã‚ŒãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’`load-path`㫠追加ã™ã‚‹ã€‚ * 例: `C:\foo\`ã¨ã„ã†ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸‹ã«å±•é–‹ã—ãŸã¨ã™ã‚‹ã¨ã€ `twittering-mode.el`ãŒå…¥ã£ã¦ã„るディレクトリ `C:\foo\twittering-mode-X.X.X\`ãŒã‚ã‚‹ã¯ãšãªã®ã§ã€`.emacs`ã«æ¬¡ã®å†…容 を追加ã™ã‚‹: (add-to-list 'load-path "C:/foo/twittering-mode-X.X.X") * **Emacsã®è¨­å®š** ã¸é€²ã‚€ Linuxã‚„ãã®ä»–Unix環境 ----------------------- * twittering-modeã®ãƒ•ァイルを展開ã—ã¦ç¾ã‚ŒãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’`load-path`㫠追加ã™ã‚‹ã€‚ * 例: `/path/to/foo`ã¨ã„ã†ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ä¸‹ã«å±•é–‹ã—ãŸã¨ã™ã‚‹ã¨ã€ `twittering-mode.el`ãŒå…¥ã£ã¦ã„るディレクトリ `/path/to/foo/twittering-mode-X.X.X/`ãŒã‚ã‚‹ã¯ãšãªã®ã§ã€`.emacs`ã«æ¬¡ã®å†…容 を追加ã™ã‚‹: (add-to-list 'load-path "/path/to/foo/twittering-mode-X.X.X") * SSL通信を利用ã™ã‚‹ãŸã‚ã«ã¯ã€cURLã€gnutlsã€opensslã®ã©ã‚Œã‹ã‚’インストー ルã—ã¦ãŠã * **Emacsã®è¨­å®š** ã¸é€²ã‚€ Emacsã®è¨­å®š ------------- * 次ã®ã‚³ãƒ¼ãƒ‰ã‚’`.emacs`ã«è¿½åŠ ã™ã‚‹: (require 'twittering-mode) twittering-modeã‚’å‹•ã‹ã™ ------------------------- 1. `M-x twit`を実行 2. ç”»é¢ã®æŒ‡ç¤ºã«å¾“ã„OAuthã®èªè¨¼ãƒšãƒ¼ã‚¸ã‚’é–‹ãã€"Allow"ボタンをクリックã—ã¦ã€ 表示ã•れãŸPINコードをEmacsã«å…¥åŠ›ã™ã‚‹ 3. Twitterã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ãŒè¡¨ç¤ºã•れるã¯ãš! twittering-mode-3.0.0/LAST-VERSION0000644000000000000000000000000612141747407016406 0ustar rootroot000000000000003.0.0 twittering-mode-3.0.0/Makefile0000644000000000000000000000343612141747407016247 0ustar rootroot00000000000000 EMACS ?= emacs DISTRIB_FILES = twittering-mode.el \ README README.ja \ NEWS NEWS.ja \ INSTALL INSTALL.ja \ win-curl \ url-emacs21 \ emacs21 .PHONY: all check clean update-po release release-upload upload all: update-po: $(MAKE) -C doc update-po check: ./test/run-test.sh -y clean : rm -f twittering-mode.elc README *.zip *.tar.gz VERSION = $$(cat VERSION) DISTRIB_DIR = twittering-mode-$(VERSION) README: README.markdown cp $< $@ release: $(DISTRIB_FILES) @(! [ -z "$${SF_USERNAME}" ] || (echo "Environmental variable 'SF_USERNAME', which is a username of sf.net, is required."; false)) @echo -n "wrote NEWS file? [y or n]: "; read ans; [ "$${ans}" = "y" ] @echo -n "What is next version number?: " && \ read version && \ (if [ "$${version}" != "$$(cat VERSION)" ]; then \ mv VERSION LAST-VERSION; \ echo $${version} > VERSION; \ fi) && \ ruby misc/vernum-updater.rb \ --prev-version=$$(cat LAST-VERSION) --next-version=$$(cat VERSION) \ doc/web/index.text ruby misc/vernum-updater.rb \ --prev-version=HEAD --next-version=$$(cat VERSION) \ twittering-mode.el NEWS NEWS.ja @([ -d $(DISTRIB_DIR) ] && rm -rf $(DISTRIB_DIR)) || true mkdir $(DISTRIB_DIR) cp -r -t $(DISTRIB_DIR)/ $(DISTRIB_FILES) zip -r $(DISTRIB_DIR).zip $(addprefix $(DISTRIB_DIR)/,$(DISTRIB_FILES)) tar czvf $(DISTRIB_DIR).tar.gz $(addprefix $(DISTRIB_DIR)/,$(DISTRIB_FILES)) rm -rf $(DISTRIB_DIR) release-upload: release make upload upload: (echo "cd /home/frs/project/t/tw/twmode/"; \ echo "-rm $(DISTRIB_DIR)/*"; \ echo "-rmdir $(DISTRIB_DIR)"; \ echo "mkdir $(DISTRIB_DIR)"; \ echo "cd $(DISTRIB_DIR)"; \ echo "put $(DISTRIB_DIR).zip"; \ echo "put $(DISTRIB_DIR).tar.gz") > upload.bat sftp -b upload.bat $${SF_USERNAME},twmode@web.sourceforge.net rm -f upload.bat twittering-mode-3.0.0/NEWS0000644000000000000000000010010012141747407015270 0ustar rootroot00000000000000 NEWS -- The history of twittering-mode ======================================== HEAD: XXXX-XX-XX ------------------ ### Important notice ### Improvements ### Bug fixes 3.0.0: 2013-04-21 ------------------ ### Important notice * Obsolete implicit sign string feature. The function `twittering-sign-string-function' and the variable `twittering-sign-simple-string' are now obsolete. The `edit skeleton' feature can be used as an alternative. For example, the configuration (setq twittering-sign-simple-string "footer") is equivalent to the following one; (setq twittering-edit-skeleton-footer " [footer]") (setq twittering-edit-skeleton 'footer) * Obsolete variable `twittering-scroll-mode' The variable `twittering-scroll-mode' is obsolete. The current version of twittering-mode always behaves as the previous version does on scroll-mode. To track the latest tweet, put the cursor on the header or footer that is rendered on the latest end. * A new key binding for "C-cC-w", future replacement for "C-cD". "C-cD" has been bound to `twittering-delete-status`, the function to delete a tweet. But the binding violates the Emacs Key Binding Conventions. "C-cC-w" is bound to the function. The old binding is also valid, but the new one is recommended. ### Improvements * Edit skeleton according to the current timeline. You can define edit skeletons that refer to the current timeline. See the docstring of the variable `twittering-edit-skeleton-alist'. In addition, `inherit-hashtags' and `inherit-any', the predefined edit skeletons, insert hashtags if the current timeline is a search timeline where the query string includes hashtags. * Disabling overlay on excessive string. In default, `twittering-edit-mode' emphasizes too long strings by putting the overlay `twittering-warning-overlay' on characters following the 140th character. On some environments, however, some input methods seem to interfere the update of the overlay. In such case, you may avoid the problems by disabling the update of the overlay as follows. (setq twittering-disable-overlay-on-too-long-string t) * Jump to next/previous URI You can go to tne next or previous URI explicitly written in a tweet by the command `twittering-goto-next-uri' or `twittering-goto-previous-uri'. Also, you can use the commands, `twittering-goto-next-thing' and `twittering-goto-previous-thing'. With a prefix argument by preceding "C-u", they ignore things except URIs explicitly written in a tweet. * Additional root CA certificates. The root CA certificates `VeriSign Class 3 Public Primary CA - G2' and `GeoTrust Global CA' are also embedded in `twittering-mode.el'. They are used for verifying `api.twitter.com' and `search.twitter.com', respectively. The certificate `Equifax Secure Certificate Authority', which has been embedded, is now used for verifying the server `www.googleapis.com' when shortening a URI. * Support for new URL shortening services. You can use `migre.me' as URL shortening service by the following. (setq twittering-tinyurl-service 'migre.me) ;; for mig.re * Support for retweeted_by_user and retweeted_to_user timeline. ":retweeted_by_user/USER" and ":retweeted_to_user/USER" are added as a new timeline specs. The former consists of retweets posted by the user and the latter consists of retweets that will be sent to the home timeline of the user. After specifying ":retweeted_by_user/" or ":retweeted_to_user/" for `twittering-visit-timeline', which is bound to "V" in default, you can supplement a username with referring the username history. * Counting characters with considering the t.co link wrapper. When editing a tweet, the t.co link wrapper will be taken into account. The length of wrapped URIs is retrieved with help/configuration API periodically. The default period is 1 day. You can configure the interval of updating the length by the variable `twittering-service-configuration-update-interval'. * Ad-hoc support for non-ASCII hashtags. Non-ASCII hashtags are decorated and you can visit its timeline by `v'. Note that the rule of detecting hashtags may be looser than that of the Twitter web UI. Problems have not been found yet, but a string considered as a hashtag in twittering-mode may not be treated as a hashtag in the Twitter web UI. * Rendering the t.co wrapped link as the original URL. If a tweet includes a link wrapped by the t.co service, it is rendered as the original URL. If `json.el' is unavailable, a link on a search timeline is rendered as the wrapped URL. But the link will be opened as the wrapped URL when you invoke `twittering-enter' (bound to `C-m' in default). * Posting a tweet consiting of mentions from pop-up buffer. From pop-up buffer, you can post a tweet consisting of mentions. * Restoring timeline buffers with `revive.el' by HIROSE Yuuji. Timeline buffers can be restored with the Emacs LISP program `revive.el' written by HIROSE Yuuji. There are two types of configuration. 1. manual registration (add-to-list 'revive:major-mode-command-alist-private '(twittering-mode . twittering-revive:twittering)) (add-to-list 'revive:save-variables-local-private '(twittering-mode twittering-timeline-spec-string)) (require 'revive) 2. automatic registration (for revive.el 2.19) (require 'revive) (twittering-setup-revive) Note that `(add-to-list ...)' of the manual configuration must be evaluated before loading `revive.el' and `(twittering-setup-revive)' of the automatic one must be evaluated after loading `revive.el'. Since the Emacs LISP program `windows.el' written by HIROSE Yuuji implicitly loads `revive.el' if possible, you should also take care of the order of loading `windows.el' and the configuration. * New format specifier "%u" for `twittering-retweet-format'. "%u" is added as a new format specifier for `twittering-retweet-format'. It is replaced with the URL of the cited tweet. * Skeleton for initializing an organic retweet. You can use a skeleton as the variable `twittering-retweet-format' for initializing an organic retweet. This means that you can also specify the initial cursor position. Strings included in the skeleton are converted with the below replacement table and then the skeleton is inserted with `skeleton-insert'. The replacement table is as follows. %s - The screen-name of the cited tweet. %t - The text of the cited tweet. %u - The URL of the cited tweet. %# - The ID of the cited tweet. %% - % itself. This is equivalent to the rule applied for `twittering-retweet-format' as a string. Note that it is inserted before the edit skeleton specified by `twittering-edit-skeleton' is performed. * Tweet type of edit skeleton for an organic retweet. The symbol `organic-retweet' is added as a tweet type specifying the type of the tweet being edited, which is referred by edit skeleton. You can define an edit skeleton that is performed only for organic retweets. Note that edit skeletons cannot refer to the tweet being retweeted in the current implementation. * Support for list names including non-ASCII characters. * Display of replied tweets on a search timeline. If `json.el' is available, twittering-mode can retrieve an ID which a tweet on a search timeline replies to. If so, replied tweets can be displayed by `twittering-toggle-show-replied-statuses' bound to "r" in default. * Header and footer on a timeline buffer. On a timeline buffer, the header and footer are rendered. They are special field and do not correspond to tweets. If you press the enter key (or invoking `twittering-enter') on the header or footer, the timeline buffer will be extended by retrieving more tweets according to whether the cursor is placed on the latest end or oldest one. You can track the latest tweet by putting the cursor on the latest side of the header and footer. You can customize the header and footer strings with the variables `twittering-timeline-header' and `twittering-timeline-footer', respectively. Their face can also be customized with the variables `twittering-timeline-header-face' and `twittering-timeline-footer-face'. * Support for exclude-if timelines. ":exclude-if/FUNC/SPEC" is added as a new timeline spec. The timeline equals SPEC, except that it does not include tweets that the function FUNC returns non-nil for. FUNC must be a function that receives an alist corresponding to a tweet as an argument. A lambda expression and a symbol bound to a function are valid as FUNC. But a symbol name must not include two special characters, "(" or "/". You can specify any timeline spec for SPEC. For example, you can ignore tweets including "WORD" from the home timeline by the following timeline spec; ":exclude-if/(lambda (tweet) (string-match \"WORD\" (cdr (assq 'text tweet))))/:home". * Support for merge timelines. Merge timelines such as "(SPEC1+SPEC2)" or "(SPEC1+SPEC2+SPEC3)" and so on, are added as new timeline specs. The merge timeline consists of all tweets in the specified timelines. You can specify any timeline spec for constituents. For example, you can see all direct messages, which you have sent or received, on a buffer by the following timeline spec; "(:direct_messages+:direct_messages_sent)". * New hook invoked when rendering tweets. A new hook variable `twittering-new-tweets-rendered-hook' is added. The hook is invoked when new tweets are rendered. It is not invoked when rendering tweets that are retrieved formerly. Since the existing hook `twittering-new-tweets-hook' is invoked for each successful retrieval of tweets, it may be invoked for tweets that are not rendered in composite timelines such as exclude-if and merge timelines. The new hook works well for composite timelines. In the new hook, you can use `twittering-rendered-new-tweets' as a list of new tweets. `twittering-rendered-new-tweets-spec' and `twittering-rendered-new-tweets-spec-string' can be used as the timeline spec and the timeline spec string. For detail, see the docstring of the new hook variable. * New hook invoked after initializing global variables. A new hook variable `twittering-mode-init-hook' is added. The hook is invoked after initializing global variables. Unlike `twittering-mode-hook', which is invoked every time a buffer is generated for twittering-mode, the new hook invoked only once. * Description on a pop-up edit buffer. The description is rendered on the top of the pop-up edit buffer. Which the tweet is a reply, a direct message or an independent ordinary tweet is explicitly displayed. You can also copy the tweet being replied. * Switch of a reply and a normal tweet on a pop-up edit buffer. You can toggle whether the tweet being edited will be sent as a reply or a normal tweet by invoking `twittering-edit-toggle-reply' bound to "C-c C-r" in default. * Support for exclude-re timelines. ":exclude-re/REGEXP/SPEC" is added as a new timeline spec. The timeline equals SPEC, except that it does not include tweets that match the regular expression REGEXP. In REGEXP, a slash must be escaped with a backslash. For example, tweets including a slash are excluded from the timeline corresponding to the Emacs string literal ":exclude-re/\\//:home". * Iterative retrieval of a series of replies. You can trace back a series of replies by a new function `twittering-toggle-or-retrieve-replied-statuses' bound to "R" in default. The function behaves as follows: - If some of tweets in the series of replies pointed by the cursor have not been rendered, try to show them as possible. If some of them have not been retrieved yet, retrieve the latest one and show it. - If all tweets in the series of replies pointed by the cursor have been rendered, hide them. - If the cursor does not point to one of tweets in a series of replies, do nothing. * Configuration of how to open a window for an edit buffer. A new variable `twittering-pop-to-buffer-function' is added. It specifies how to open a window for an edit buffer. The default value is `twittering-pop-to-buffer-in-bottom-largest-window', which opens a window by splitting the largest window on the bottom of the current frame. You can also use the function `twittering-pop-to-buffer-in-current-window', which splits the current window. * Support for `single tweet' timelines. ":single/ID" is added as a new timeline spec. The timeline consists of a tweet specified by ID. You can read a very old tweet by using the timeline spec. * Single tweet timeline from a URL in a tweet. You can visit a `single tweet' timeline from a URL pointing to the tweet by invoking `twittering-other-user-timeline' on the URL. The function is bound to "v" in default. * New command to get tweets before a specific time. By using the new command `twittering-get-tweets-before', you can get tweets of the current timeline before a specific time. * Support for backward retrieval of favorites timeline. * Different intervals of retrieving timelines. An interval of retrieving each timeline can be configured by the new variable `twittering-relative-retrieval-interval-alist'. The alist consists of pairs of a regexp and a relative interval. The regexp specifies timelines and they are retrieved at intervals that are the relative interval times as long as the variable `twittering-timer-interval'. * Support for the Twitter REST API v1.1. The default value of `twittering-service-method' is changed to `twitter-api-v1.1'. The configuration means that twittering-mode uses the Twitter REST API v1.1. The service method requires SSL connection and JSON parser. Note that the former requires cURL with OpenSSL, GNU Wget with OpenSSL, OpenSSL or GnuTLS and the latter requires `json.el' that is not distributed with Emacs 22 or earlier. In addition, some timelines are obsolete in the Twitter REST API v1.1. The obsolete timeline spec strings follow; ":friends", ":replies", ":public", ":retweeted_by_me", ":retweeted_to_me", ":retweeted_by_user/USER", ":retweeted_to_user/USER". ### Bug fixes * Fix of displaying a message of authorization. * Fix of confirmation of available connection methods. * Fix of the function for HMAC-SHA1. Results from the function `twittering-hmac-sha1' might return incorrect digests depending on the current coding system. The problem has been fixed. * Fix of confusion of a username consisting of digits with a user ID. The confusion when retrieving `user_timeline' has been fixed. But the confusion when retrieving `favorites' for other users has not been fixed yet because the API for `favorites' has no parameters to directly specify a screen name not a user ID. Thanks to Makoto Fujiwara who reported this problem. * Fix of unintentional cursor motion on editing a tweet. If the current buffer was not managed by `twittering-mode', the cursor of the buffer was moved without intention by calling `twittering-update-status-interactive' from the buffer. The bug has been fixed. Thanks to mofigan who reported this problem. * Fix of storing icons on some cases. Icons were not correctly saved if `twittering-icon-storage-limit' or `twittering-convert-fix-size' was nil. The bug has been fixed. Thanks to HufflepuffBR who reported this problem about the former variable `twittering-icon-storage-limit'. * Fix of unconditional addition of `load-path' on byte-compilation. On byte-compilation, the directories `emacs21' and `url-emacs21', which are included in the repository of twittering-mode, were unconditionally added into `load-path'. Due to this bug, some macros were embedded as obsolete definitions for Emacs21 in the result of byte-compilation. Some functions in the result cause errors on Emacs 22 or later because the obsolete definitions conflict with Emacs newer than 21. On Emacs 22 or later, the directories are no longer added to `load-path' on byte-compilation. The bug has been fixed. Thanks to HKey who has discovered the bug. * Fix of the strange motion of the cursor. The cursor motion based on logical lines had caused non-intuitive behavior by interfering text property attaced to tweets. The problem did not appear when the motion was based on display line. The bug has been fixed. Thanks to lemit who reported the problem. * Deletion of a tweet from a buffer after the API is succeeded. A tweet is deleted from a buffer after receiving a successful response of the `destroy-status' API. If the API ends in failure, you can try to delete the status again because the status remains on the buffer. * Fix of the escape of a query string in a search timeline spec. * Fix of errors raised by asynchronous sentinels. Previously, an error might be raised from a sentinel when a timeline of non-existent user was requested. The bug has been fixed. 2.0.0: 2011-04-22 ------------------ ### Important notice ### Improvements * Support for storing private information in a file encrypted by master password. Once you save the authorized account by using master password, you have to input PIN no longer. This is enabled by `(setq twittering-use-master-password t)'. The private information is stored in `~/.twittering-mode.gpg', which can be specified by `twittering-private-info-file'. To enable master password, you need GnuPG and an additional Emacs LISP program, which is `alpaca.el' or EasyPG (Emacs23 includes EasyPG). To use with `alpaca.el', you should use the version 0.13. With other versions of `alpaca.el' the current implementation may not work well because it deeply depends on internal implementation of `alpaca.el'. * Authentication via xAuth. You can enable xAuth by "(setq twittering-auth-method 'xauth)". * Rejection of invalid PIN code input and strip extra white spaces. * Confirmation of process status for avoiding dead-lock. * Native retweets on `user', `friends', `mentions' and `public' timelines. * Detection of abnormal exit of an invoked process. The exit-status on abnormal exit is printed to the buffer "*Messages*". * Support for disabling server authentication. Server authentication is enabled by default. It can be disabled by "(setq twittering-allow-insecure-server-cert t)". * Replacement of unknown numeric character references with its alternative. The alternative can be specified by "twittering-unicode-replacement-char". Its default value is U+FFFD. * Addition of the files ".nosearch". The files ".nosearch" are added to sub-directories. This makes the sub- directories be excluded from recursive registration of "load-path". * Suppression of multiple authorization. Authorization will be performed only once even if multiple timelines are specified as initial timelines. * Independence of byte-compiled form from "cl". Byte-compiled `twittering-mode.el' does not depend on `cl'. * Update of the embedded CA certificate. The embedded CA certificate is replaced with `Equifax Secure Certificate Authority'. * Support for StatusNet. You can switch `twittering-mode.el' to StatusNet mode by "(setq twittering-service-method 'statusnet)". Note that you cannot use one instance of Emacs with `twittering-mode.el' for Twitter and StatusNet simultaneously. To use StatusNet, you must configure variables of host information. For the service on `http://identi.ca/', you may require the below configuration. (setq twittering-service-method 'statusnet) (setq twittering-auth-method 'basic) (setq twittering-username "YOUR-ACCOUNT-NAME") ;; host (setq twittering-api-host "identi.ca") (setq twittering-api-search-host "identi.ca") (setq twittering-web-host "identi.ca") ;; paths for API (setq twittering-api-prefix "api/") (setq twittering-search-api-method "api/search") (setq twittering-web-path-prefix "") * Copy a URI in a tweet or a URI pointing to the tweet by "U". Thanks to Faried Nawaz. * Copy tweets by "C-". Thanks to Faried Nawaz. * Support for `wget'. The external program `wget' can be used for communicating with Twitter as well as `curl'. You can give priority to `wget' by the below configuration. (setq twittering-connection-type-order '(wget curl native)) * Display of the current connection method on the mode-line. By default, the current connection method is displayed on the mode-line. You can disable it by "(setq twittering-display-connection-method nil)". * Silent retrieval of icons. The default value of `twittering-url-show-status' is changed to nil. So, icons are retrieved silently by default. * New connection methods, `urllib-http' and `urllib-https'. New connection methods are added, which are implemented by using `url' library. The library supports HTTP redirection, but it may be slow and unstable. This method is not recommended if you can use other methods. If you give incorrect account information on BASIC authentication or xAuth with this new methods, you will be asked to input account information again. This behavior is a function of the url library, but twittering-mode cannot use account information given on the second try. When you are asked to input it again, cancel it by 'C-g' and do 'M-x twit'. * Redisplaying tweets with idle timer. Twittering-mode waits for Emacs to become idle before it redisplays tweets for time and icon image. Tweets are redisplayed each time Emacs remains idle for a certain time specified by the variable `twittering-timer-interval-for-redisplaying', which is 1 second by default. * Retrieval of icon images by `curl' and `wget'. Icon images can be retrieved by the same connection method as that used for retrieving tweets. The priority of methods is similarly determined by `twittering-connection-type-order'. * Lazy invocation of `convert'. The program `convert' for converting the size of icon images is invoked after Emacs remains idle a certain time. The delay will prevent Emacs from stucking on inputting characters on other buffer. The delay time is specified by the new variable `twittering-url-request-sentinel-delay', which is 1 second by default. * Support for favorites timeline. ":favorites" and ":favorites/USER" are added as new timeline specs. By using the latter, you can read favorites for other users. You can specify a username with completion when you input ":favorites/" for `twittering-visit-timeline' bound to "V" in default. Note that favorites are rendered in order of time when each tweet is posted. This is because it is impossible to retrieve the time when a tweet was favorited. At most, 20 favorites can be retrieved. Backward retrieval of more previous favorites is not supported yet. * Support for new URL shortening services. You can use `bit.ly', `goo.gl', `is.gd' or `j.mp' as URL shortening service by the following. (setq twittering-tinyurl-service 'bit.ly) ;; for bit.ly (setq twittering-tinyurl-service 'goo.gl) ;; for goo.gl (setq twittering-tinyurl-service 'is.gd) ;; for is.gd (setq twittering-tinyurl-service 'j.mp) ;; for j.mp To use `bit.ly' or `j.mp', you need to configure `twittering-bitly-login' and `twittering-bitly-api-key' according to your account as follows. (setq twittering-bitly-login "YOUR-LOGIN-NAME") (setq twittering-bitly-api-key "YOUR-API-KEY") Thanks to Michael Kohl and Lars Gregori. * Change of the format specifiers, "%c", "%C", "%@", for official ReTweet. `created_at' for official ReTweet means when the original tweet was posted instead of when it was retweeted. * Function to report a user as a spammer. The function `twittering-block-and-report-as-spammer' is added. By invoking the function on a tweet, you can block its author and report him or her as a spammer. * Function to block a user. The function `twittering-block' is added. By invoking the function on a tweet, you can block its author. * Support for persistent icon storage. By "(setq twittering-use-icon-storage t)", you can save retrieved and resized icon images into a persistent storage, which is disabled in default. On next and later invocation, twittering-mode can display icons faster because the storage reduces time required to retrieve and resize images. In default, recently rendered 500 icons are stored at most. You can change the limit by the variable `twittering-icon-storage-limit'. To store all icons, configure the variable as nil. The default storage file is `~/.twittering-mode-icons.gz'. You can change it by changing `twittering-icon-storage-file'. Note that icon images in the storage generated on a certain version of Emacs may be unavailable on another version of Emacs. * New format specifier "%RT{...}". For `twittering-status-format', the new format specifier "%RT{...}" is added, which is rendered only when the tweet is an official ReTweet. In the brace, you can use any format specifiers, which are rendered with the information of the retweet itself instead of the retweeted original tweet. For example, "%RT{%s}" means who retweeted the tweet. * Cancel of official ReTweets. If an official ReTweet has been posted by yourself, you can cancel it by 'C-cD', which is the same way of deleting a tweet. * Completion of lists to which a specific user subscribes. You can visit a list to which a specific user subscribes by 'C-uL'. Thanks to Naohiro Aota. * Edit skeleton. Edit skeleton is a dynamic template system on posting a tweet. You can define an "edit skeleton", which specifies what string is automatically inserted as a footer, header or others before editing a tweet. `twittering-edit-skeleton-alist' is the alist of edit skeletons. For further details, see docstring of `twittering-edit-skeleton-alist'. The following edit skeletons are pre-defined; none: insert nothing, footer: insert `twittering-edit-skeleton-footer' as a footer, footer-only-normal: insert `twittering-edit-skeleton-footer' as a footer only when the tweet being edited is a normal tweet, not a reply or direct message, inherit-hashtags: insert hashtags extracted from the replied tweet, inherit-mentions: insert mentions extracted from the replied tweet, inherit-any: insert hashtags and mentions extracted from the replied tweet. You can switch the current edit skeleton by invoking `twittering-switch-edit-skeleton'. The footer string, `twittering-edit-skeleton-footer', can be changed by invoking `twittering-edit-skeleton-change-footer'. * Variable of fallback image format. You can change the fallback format of images by changing the variable `twittering-fallback-image-format'. The default format is XPM. Images which Emacs does not supports are displayed by converting them into the fallback format. By the following configuration, you may avoid strange behaviors when displaying XPM images on NTEmacs. Thanks to Silver Chariot. (setq twittering-fallback-image-format 'png) ### Bug fixes * Support for the url library included in Emacs 23 and later. * Fix of options of `curl' for POST with an empty body. * Fix of retweeting a retweet. * Fix of a race condition on abnormal exit of a process for verification. * Fix of replying to tweets displayed as replied tweets. Thanks to Naohiro Aota. * Fix of rendering the format specifier "%L". The specifier "%L" is correctly rendered with a preceding whitespace. Thanks to Tom X. Tobin. * Fix of repeatedly registering a sentinel for retrieving an image. 1.0.0: 2010-06-05 ------------------ ### Important notice #### Posting tweets with minibuffer is obsolete now. There's two way to edit and post tweets in twittering-mode: with minibuffer (existing way), and with pop-up buffer (new feature!). You can choose it by setting the variable `twittering-update-status-function`. Currently its default value is the new way, `twittering-update-status-from-pop-up-buffer`. If you want to post from minibuffer, set the variable value to `twittering-update-status-from-minibuffer`. The new feature, pop-up buffer, has several advantages over the existing way. * Not conflicting with input methods. * Much less risk of posting halfway typed tweets by error. * Visual assertion of length of tweets. ### Improvements * Introduction of a concept 'timeline spec'. * Pop-up buffer to edit and post tweets. * Auto proxy setup with environment variables (http_proxy, HTTP_PROXY) * Support for official ReTweet. * Added some format specifiers of tweets. * Support for recursive format specifiers such as "%FILL{%FACE[bold]{%C{%m/%d}}: %T}". * Support for user-defined prefix on filling by "%FILL[prefix]{...}". * Displaying image files without temporary files. * Support multiple buffers, where their name is derived from timeline spec. * Multiple initial timelines by setting a list of timeline spec strings to the variable `twittering-initial-timeline-spec-string'. * Toggle automatic retrieval of the timeline by pressing 'a'. * Improved compatibility with global-font-lock mode. * Unread statuses notifier on mode-line (experimental). * Switching timeline buffers by pressing 'f' or 'b'. * Graphical indicators for SSL and ACTIVE/INACTIVE state on mode-line. * Asynchronous retrieval of icon images. * Deleting a tweet by inputting 'C-cD'. * HTTPS connection using `tls' library working with an external command `gnutls' or `openssl' instead of `curl'. * Individual proxy configurations for HTTP and HTTPS. If `twittering-proxy-server' and `twittering-proxy-port' are non-nil, they have priority over the other variables `twittering-http-proxy-*' and `twittering-https-proxy-*'. To use individual proxies for HTTP and HTTPS, you must keep the prior variables (`twittering-proxy-server' and `twittering-proxy-port') nil. * Silent retrieval of icon images. You can enable silent retrieval by "(setq twittering-url-show-status nil)". * Authentication via OAuth. It requires a consumer information registered with Twitter and an external WWW browser to authorize a request token. Additionally, for SSL, it requires an external command `curl' or another command included in the variable `tls-program', which may be `openssl' or `gnutls-cli'. (Caution: Neither `openssl' nor `gnutls-cli' support SSL via proxy.) You can disable SSL for OAuth by "(setq twittering-oauth-use-ssl nil)". You can enable OAuth by "(setq twittering-auth-method 'oauth)". If `twittering-oauth-invoke-browser' is non-nil, twittering-mode automatically opens a browser on authorization. ### Bug fixes * Avoid SSL certificate error by embedding CA cert in code. * twittering-cert-file * twittering-ensure-ca-cert * Fix URI (percent) encoding (thanks to IMAI Toshiyuki). * twittering-url-reserved-p * twittering-percent-encode * Improved portability. * twittering-completing-read * And lots of minor fixes ### Thanks to * Alberto Garcia * IMAI Toshiyuki 0.9.0: 2009-12-29 ------------------- ### Improvements * Moved to GitHub. * Brand new web site in English and Japanese. * Secure sessions via HTTPS if 'cURL' is available. * Lists support. * Follow/remove support. * Favorite/unfavorite support. * Hash tag support. * Direct message support. * On-the-spot TinyURL-ize(tinyurl or to.ly). * On-the-fly tweet length check. * ReTweet format string. * Remembers visited user names and tweets. * Parameterized the number of tweets retrieved at a time. * Walk through items(username, URL, etc) by TAB. * Image type discriminant with 'file' program if available. * More descriptive error messages on minibuffer. * Do not discard old timeline data as possible. * Suspend by hitting 'q'. * Image file resize with 'convert' program(imagemagick) if available. * Unit test framework was introduced. * Support 'Proxy-connection: Keep-Alive'. * Flexible format string function (twittering-format-string). * Refactored 'twittering-format-status' by twitterint-format-string. * More efficient HTTP response processing. ### Bug fixes * URL cannot not be opened by mouse-click or Enter. * Don't set the original status ID when retweeting. * Wrong regexp for searching URL in status text. * Username extraction from status text. * Update mode-line immediately. * Use a temporary buffer for each HTTP session. * Use MD5 hash to distinguish image files with the same name. * Check whether temp buffers are alive in sentinels before killing them. * And some typos. ### Thanks to * Alberto Garcia * Jaemok Jeong * Kouhei Sutou * Naohiro Aota * Satoshi Yatagawa * Tadashi MATSUO * Thomas Danckaert * Tsuyoshi CHO * IMAI Toshiyuki twittering-mode-3.0.0/NEWS.ja0000644000000000000000000011543212141747407015677 0ustar rootroot00000000000000 NEWS -- twittering-modeã®ã‚ゆ㿠================================= HEAD: XXXX-XX-XX ------------------ ### é‡è¦ãªãŠçŸ¥ã‚‰ã› ### 改良 ### ãƒã‚°ä¿®æ­£ 3.0.0: 2013-04-21 ------------------ ### é‡è¦ãªãŠçŸ¥ã‚‰ã› * æš—é»™ã«ç½²åを付加ã™ã‚‹æ©Ÿèƒ½ã®å»ƒæ­¢ 関数`twittering-sign-string-function'ã¨å¤‰æ•° `twittering-sign-simple-string'ã®æ©Ÿèƒ½ã¯å»ƒæ­¢ã•れã¾ã—ãŸã€‚åŒæ§˜ã®æ©Ÿèƒ½ã¯ `edit skeleton'ã§è¨­å®šã§ãã¾ã™ã®ã§ã€ã“ã¡ã‚‰ã‚’使ã£ã¦ãã ã•ã„。 例ãˆã°ä»¥å‰ã¾ã§ã®è¨­å®š (setq twittering-sign-simple-string "footer") ã¯ã€ä»¥ä¸‹ã®è¨­å®šã§ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚ (setq twittering-edit-skeleton-footer " [footer]") (setq twittering-edit-skeleton 'footer) * 変数`twittering-scroll-mode'ã®å»ƒæ­¢ 変数`twittering-scroll-mode'ã¯å»ƒæ­¢ã•れã¾ã—ãŸã€‚ç¾åœ¨ã®ç‰ˆã¯ã€éŽåŽ»ã®ç‰ˆã§ scroll-modeãŒæœ‰åйã§ã‚ã£ãŸã¨ãã®ã‚ˆã†ã«æŒ¯èˆžã„ã¾ã™ã€‚最新ã®tweetã«è¿½å¾“ã™ ã‚‹ã«ã¯ã€timelineãƒãƒƒãƒ•ã‚¡ã®æœ€æ–°å´ã®ãƒ˜ãƒƒãƒ€ã‚‚ã—ãã¯ãƒ•ッタ上ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’ ç½®ã„ã¦ãã ã•ã„。 * "C-cD"ã®ä»£æ›¿ã¨ã—ã¦"C-cC-w"ã‚’å°Žå…¥ ã“れã¾ã§ã€"C-cD"ãŒtweet削除用関数'twittering-delete-status'ã«bind㕠れã¦ã„ã¾ã—ãŸã€‚ã—ã‹ã—ã“ã®ã‚­ãƒ¼ã¯Emacsã®Key Binding Conventionsã«å‰‡ã£ã¦ ã„ã¾ã›ã‚“。ãã“ã§ãã®ä»£æ›¿ã¨ã—ã¦"C-cC-w"ã‚’åŒé–¢æ•°ã«bindã—ã¾ã—ãŸã€‚"C-cD" も有効ã§ã™ãŒã€"C-cC-w"ã®ä½¿ç”¨ã‚’推奨ã—ã¾ã™ã€‚ ### 改良 * ç¾åœ¨ã®timelineã«å¿œã˜ãŸedit skeleton ç¾åœ¨ã®timelineã«å¿œã˜ãŸedit skeletonを定義ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ 詳ã—ãã¯å¤‰æ•°`twittering-edit-skeleton-alist'ã®docstringã‚’å‚ç…§ãã ã• ã„。 ã¾ãŸã€å®šç¾©æ¸ˆã¿edit skeleton `inherit-hashtags'ã¨`inherit-any'ã¯ç¾åœ¨ ã®timelineãŒãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’å«ã‚€ã‚ˆã†ãªsearch timelineã§ã‚ã‚‹å ´åˆã«ã€ã ã®ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’自動ã§è¿½åŠ ã™ã‚‹ã‚ˆã†å¤‰æ›´ã•れã¦ã„ã¾ã™ã€‚ * è¶…éŽæ–‡å­—列ã®å¼·èª¿è¡¨ç¤ºç„¡åŠ¹åŒ– 通常ã€`twittering-edit-mode'ã§ã¯140å­—ã‚’è¶…ãˆã‚‹éƒ¨åˆ†ã«overlay `twittering-warning-overlay'を付加ã—ã¦å¼·èª¿è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚ ã—ã‹ã—環境ã«ã‚ˆã£ã¦ã¯input methodã¨ã“ã®overlayã®æ›´æ–°ã¨ãŒå¹²æ¸‰ã—ã¦å•題 ã‚’èµ·ã“ã™å ´åˆãŒã‚るよã†ã§ã™ã€‚ãã®ã‚ˆã†ãªå ´åˆã€ä¸‹è¨˜ã®è¨­å®šã§overlayã®ä»˜ 加を無効化ã™ã‚Œã°å•題を回é¿ã§ãã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ (setq twittering-disable-overlay-on-too-long-string t) * tweet中ã®URI文字列ã¸ã®ã‚¸ãƒ£ãƒ³ãƒ— tweet中ã®URI文字列ã¸ã‚¸ãƒ£ãƒ³ãƒ—ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰`twittering-goto-next-uri'〠`twittering-goto-previous-uri'ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ ã¾ãŸã€æ—§æ¥ã®ã‚³ãƒžãƒ³ãƒ‰`twittering-goto-next-thing'㨠`twittering-goto-previous-thing'ã«C-uã§prefix argumentを与ãˆã‚‹ã¨ tweet中ã®URI文字列ã ã‘を対象ã¨ã—ã¦ã‚¸ãƒ£ãƒ³ãƒ—ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ * CA証明書を追加 æ–°ãŸã«Root CA証明書`VeriSign Class 3 Public Primary CA - G2'㨠`GeoTrust Global CA'を内蔵ã—ã¾ã—ãŸã€‚ã“れらã®è¨¼æ˜Žæ›¸ã¯ãれãžã‚Œã€ `api.twitter.com'ã¨`search.twitter.com'ã®ã‚µãƒ¼ãƒèªè¨¼ã§å‚ç…§ã•れã¾ã™ã€‚ 以å‰ã‹ã‚‰å†…蔵ã•れã¦ã„る証明書`Equifax Secure Certificate Authority'㯠URI短縮ã«ç”¨ã„ã‚‹`www.googleapis.com'ã®ã‚µãƒ¼ãƒèªè¨¼ã§ã®ã¿å‚ç…§ã•れるよㆠã«ãªã‚Šã¾ã—ãŸã€‚ * æ–°ãŸãªçŸ­ç¸®URL生æˆã‚µãƒ¼ãƒ“スã«å¯¾å¿œ æ–°ãŸã«`migre.me'ã«å¯¾å¿œã—ã¾ã—ãŸã€‚下記ã®ã‚ˆã†ãªè¨­å®šã§æœ‰åйã«ã§ãã¾ã™ã€‚ (setq twittering-tinyurl-service 'migre.me) ;; for mig.re * 指定ã—ãŸãƒ¦ãƒ¼ã‚¶é–¢é€£ã®retweetを集ã‚ãŸtimelineã«å¯¾å¿œ æ–°ã—ã":retweeted_by_user/USER", ":retweeted_to_user/USER"ã®2種類㮠timelineã«å¯¾å¿œã—ã¾ã—ãŸã€‚å‰è€…ã¯æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶USERãŒæŠ•ç¨¿ã—ãŸretweetã‚’ 集ã‚ãŸtimelineã§ã€å¾Œè€…ã¯æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶ã®home timelineã«å±Šãretweetã‚’ 集ã‚ãŸtimelineã§ã™ã€‚ `twittering-visit-timeline'(デフォルトã§ã¯"V"ã«bindã•れã¦ã„ã¾ã™)ã§æŒ‡ 定ã™ã‚‹éš›ã«ã¯":retweeted_by_user/"ã‚‚ã—ãã¯":retweeted_to_user/"ã¨å…¥åŠ› ã—ã¦Enterを入力ã™ã‚‹ã¨ã€ç¶šã‘ã¦è£œå®Œæ©Ÿèƒ½ä»˜ãã§ãƒ¦ãƒ¼ã‚¶åを入力ã§ãã¾ã™ã€‚ * 文字数カウント時ã«t.coã§ã®çŸ­ç¸®ã‚’考慮 tweetを編集ã™ã‚‹éš›ã«ã€t.coã§ã®URI変æ›ã‚’考慮ã—ãŸæ–‡å­—数を表示ã™ã‚‹ã‚ˆã†ã« ãªã‚Šã¾ã—ãŸã€‚変æ›å¾Œã®æ–‡å­—æ•°ã¯help/configuration APIを通ã˜ã¦å®šæœŸçš„ã«æ›´ æ–°ã•れã¾ã™ã€‚ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ›´æ–°é–“éš”ã¯1æ—¥ã§ã™ãŒã€å¤‰æ•° `twittering-service-configuration-update-interval'ã§å¤‰æ›´ã™ã‚‹ã“ã¨ã‚‚ã§ ãã¾ã™ã€‚ * éžASCII文字をå«ã‚€ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã¸ã®ç°¡æ˜“çš„ãªå¯¾å¿œ éžASCII文字をå«ã‚€ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã«ã¤ã„ã¦ã‚‚ã€å¼·èª¿è¡¨ç¤ºã•れるよã†ã«ãªã‚Šã€ `v'ã§ãã®timelineã‚’é–‹ãã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã® 検出基準ãŒTwitterã®web UIã®ãれã¨ã¯å¤šå°‘ç•°ãªã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。 今ã®ã¨ã“ã‚大ããªå•題ã¯è¦‹ã¤ã‹ã£ã¦ã„ã¾ã›ã‚“ãŒã€å ´åˆã«ã‚ˆã£ã¦ã¯ twittering-mode上ã§ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã¨è¦‹ãªã•れる文字列ãŒTwitterã®web UIã§ ã¯ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã¨ã¯è¦‹ãªã•れãªã„æã‚Œã¯ã‚りã¾ã™ã€‚ * t.coã§çŸ­ç¸®ã•れãŸãƒªãƒ³ã‚¯ã‚’短縮å‰ã®URLã§è¡¨ç¤º Twitterå…¬å¼ã®t.coサービスã§çŸ­ç¸®ã•れãŸãƒªãƒ³ã‚¯ãŒçŸ­ç¸®å‰ã®URLã¨ã—ã¦æç”»ã• ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚但ã—`json.el'ãŒåˆ©ç”¨ä¸å¯ã®å ´åˆã¯search timeline 上ã§ã¯t.coã§ç”Ÿæˆã•れãŸURLãŒãã®ã¾ã¾æç”»ã•れã¾ã™ã€‚ã¾ãŸã€ãƒªãƒ³ã‚¯ä¸Šã§ `twittering-enter'(デフォルトã§ã¯`C-m')を実行ã—ãŸå ´åˆã¯çŸ­ç¸®URL経由㧠開ã‹ã‚Œã¾ã™ * mentionã®ã¿ã‹ã‚‰ãªã‚‹tweetã®æŠ•ç¨¿ ãƒãƒƒãƒ—アップãƒãƒƒãƒ•ã‚¡ã‹ã‚‰ã§ã‚れã°ã€mentionã®ã¿ã‹ã‚‰ãªã‚‹tweetも投稿ã§ã るよã†ã«ãªã‚Šã¾ã—ãŸã€‚ * `revive.el'ã«ã‚ˆã‚‹timelineãƒãƒƒãƒ•ã‚¡ã®å¾©å…ƒ HIROSE Yuujiã•ん作ã®Emacs LISPプログラム`revive.el'ã§timelineãƒãƒƒãƒ•ã‚¡ を復元ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚設定方法ã«ã¯ä¸‹è¨˜ã®2通りãŒã‚りã¾ã™ã€‚ 1. 手動登録 (add-to-list 'revive:major-mode-command-alist-private '(twittering-mode . twittering-revive:twittering)) (add-to-list 'revive:save-variables-local-private '(twittering-mode twittering-timeline-spec-string)) (require 'revive) 2. 関数を使ã£ã¦ã®è‡ªå‹•登録 (revive.el 2.19用) (require 'revive) (twittering-setup-revive) 上記設定ã§ã€æ‰‹å‹•登録ã®`(add-to-list ...)'ã®éƒ¨åˆ†ã¯`revive.el'ã‚’loadã™ ã‚‹å‰ã«è©•価ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã¾ãŸé€†ã«è‡ªå‹•登録ã®å ´åˆ ã¯`revive.el'ã‚’loadã—ãŸå¾Œã§`(twittering-setup-revive)'を評価ã™ã‚‹å¿…è¦ ãŒã‚りã¾ã™ã€‚ ã¾ãŸã€åŒã˜ãHIROSE Yuujiã•ん作ã®Emacs LISPプログラム`windows.el'㯠`revive.el'ã‚’æš—é»™ã«loadã—ã¾ã™ã®ã§ã€`windows.el'ã‚’loadã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚° ã«ã‚‚注æ„ã—ã¦ãã ã•ã„。 * `twittering-retweet-format'ç”¨ã®æ–°ã—ã„æ›¸å¼æŒ‡å®šå­"%u" `twittering-retweet-format'ã§æŒ‡å®šã§ãã‚‹æ›¸å¼æŒ‡å®šå­ã¨ã—ã¦"%u"ãŒè¿½åŠ ã• ã‚Œã¾ã—ãŸã€‚ã“れã¯å¼•用ã•れるtweetを指ã™URLã¨ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚ * skeletonã«ã‚ˆã‚‹éžå…¬å¼ReTweetã®åˆæœŸæ–‡å­—列設定 éžå…¬å¼ReTweetを編集ã™ã‚‹éš›ã®åˆæœŸæ–‡å­—列を指定ã™ã‚‹å¤‰æ•° `twittering-retweet-format'ã«skeletonを指定ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ 文字列ã«åŠ ãˆã¦ç·¨é›†é–‹å§‹æ™‚ã®ã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã‚‚指定ã§ãã¾ã™ã€‚skeletonã«å«ã¾ れる文字列を下記ã®å¯¾å¿œè¡¨ã«ã‚ˆã£ã¦å¤‰æ›ã—ã¦ã‹ã‚‰ã€é–¢æ•°`skeleton-insert' ã§æŒ¿å…¥ã—ã¾ã™ã€‚ 対応表ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚ %s - 引用ã•れるtweetã®æŠ•ç¨¿è€…ã®screen-name %t - 引用ã•れるtweetã®å†…容 %u - 引用ã•れるtweetを指ã™URL %# - 引用ã•れるtweetã®ID %% - %自身 ã“ã®è¡¨ã¯`twittering-retweet-format'ã«é©ç”¨ã•れるè¦å‰‡ã¨åŒã˜ã§ã™ã€‚ ã“ã®å¤‰æ•°`twittering-retweet-format'ã«ã‚ˆã‚‹åˆæœŸæ–‡å­—åˆ—ã®æŒ¿å…¥å¾Œã«å¤‰æ•° `twittering-edit-skeleton'ã§æŒ‡å®šã•れãŸedit skeletonãŒé©ç”¨ã•れる点㫠注æ„ã—ã¦ãã ã•ã„。 * edit skeleton用ã«éžå…¬å¼ReTweetを示ã™ã‚·ãƒ³ãƒœãƒ«ã‚’追加 edit skeletonã«ãŠã‘る編集中tweetã®ç¨®åˆ¥ã‚’表ç¾ã™ã‚‹ã‚·ãƒ³ãƒœãƒ«ã« `organic-retweet'ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚éžå…¬å¼ReTweetã«ã®ã¿é©ç”¨ã•れるedit skeletonを定義ã§ãã¾ã™ã€‚但ã—ã€ç¾åœ¨ã®å®Ÿè£…ã§ã¯edit skeletonå´ã‹ã‚‰éžå…¬ å¼ReTweetã•れよã†ã¨ã—ã¦ã„ã‚‹tweetã®å†…容をå‚ç…§ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 * éžASCII文字をå«ã‚€ãƒªã‚¹ãƒˆåã«å¯¾å¿œ * search timeline上ã§ã®è¿”ä¿¡å…ˆtweetã®è¡¨ç¤º `json.el'ãŒä½¿ç”¨å¯èƒ½ãªå ´åˆã«ã¯ã€search timelineã«ãŠã„ã¦ã‚‚返信先tweet ã®IDãŒå–å¾—ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚`json.el'ãŒä½¿ç”¨å¯èƒ½ã§ã‚れã°é–¢æ•° `twittering-toggle-show-replied-statuses'(デフォルトã§ã¯"r"ã«bind㕠れã¦ã„ã¾ã™)を呼ã³å‡ºã™ã“ã¨ã§è¿”ä¿¡å…ˆtweetを表示ã§ãã¾ã™ã€‚ * ヘッダã¨ãƒ•ッタã®è¡¨ç¤º timelineãƒãƒƒãƒ•ã‚¡ã«ãƒ˜ãƒƒãƒ€ã¨ãƒ•ッタãŒè¡¨ç¤ºã•れるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“れら ã¯tweetã¨ã¯ç‹¬ç«‹ã®ç‰¹åˆ¥ãªè¡Œã¨ã—ã¦æç”»ã•れã¾ã™ã€‚ヘッダやフッタ上ã§Enter キーを押ã™(ã‚‚ã—ãã¯`twittering-enter'を実行ã™ã‚‹)ã¨ã€ãれãŒtimelineã® æ™‚ç³»åˆ—ã§æœ€æ–°ã®å´ã‹éŽåŽ»ã®å´ã‹ã«å¿œã˜ã¦tweetã‚’å–å¾—ã—ã¦æç”»ã—ã¾ã™ã€‚ ã¾ãŸã€ãƒ˜ãƒƒãƒ€ã¨ãƒ•ッタã®å†…ã®æœ€æ–°å´ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’ç½®ã„ã¦ãŠãã¨ã€å¸¸ã«ã‚«ãƒ¼ã‚½ ル行ã®è¿‘ãã«æœ€æ–°tweetã‚’æç”»ã™ã‚‹ã‚ˆã†ã«ã§ãã¾ã™ã€‚ ヘッダã€ãƒ•ッタã¨ã—ã¦è¡¨ç¤ºã•れる文字列ã¯ã€`twittering-timeline-header'〠`twittering-timeline-footer'ã¨ã„ã†å¤‰æ•°ã§å¤‰æ›´ã§ãã¾ã™ã€‚ã¾ãŸã€è¡¨ç¤ºã™ã‚‹ éš›ã®faceã¯`twittering-timeline-header-face'㨠`twittering-timeline-footer-face'ã§å¤‰æ›´ã§ãã¾ã™ã€‚ * exclude-if timelineã«å¯¾å¿œ æ–°ã—ã":exclude-if/FUNC/SPEC"ã¨ã„ã†timelineã«å¯¾å¿œã—ã¾ã—ãŸã€‚ã“ã® timelineã¯SPECã§è¡¨ã•れるもã®ã¨ã»ã¼åŒã˜ã§ã™ãŒã€é–¢æ•°FUNCãŒnon-nilã‚’è¿” ã™ã‚ˆã†ãªtweetã¯é™¤å¤–ã•れã¦ã„る点ãŒç•°ãªã‚Šã¾ã™ã€‚FUNCã¯ã²ã¨ã¤ã®tweetã«å¯¾ 応ã—ãŸé€£æƒ³ãƒªã‚¹ãƒˆã‚’ã²ã¨ã¤å—ã‘å–る関数ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。FUNCã¨ã—㦠ã¯Î»å¼ã‚‚ã—ãã¯é–¢æ•°ã«å¯¾å¿œã™ã‚‹ã‚·ãƒ³ãƒœãƒ«ãŒæŒ‡å®šã§ãã¾ã™ã€‚但ã—ã‚·ãƒ³ãƒœãƒ«ã§æŒ‡ 定ã™ã‚‹å ´åˆã€åå‰ã«"("ã‚„"/"ã‚’å«ã‚€ã‚‚ã®ã¯æŒ‡å®šã§ãã¾ã›ã‚“。SPECã«ã¯ä»»æ„ã® timeline specを指定ã§ãã¾ã™ã€‚例ãˆã°ã€home timelineã‹ã‚‰"WORD"ã‚’å«ã‚€ tweetを除外ã—ãŸtimelineã¯ä¸‹è¨˜ã®timeline specã§æŒ‡å®šã§ãã¾ã™ã€‚ ":exclude-if/(lambda (tweet) (string-match \"WORD\" (cdr (assq 'text tweet))))/:home" * merge timelineã«å¯¾å¿œ æ–°ã—ã"(SPEC1+SPEC2)"ã‚„"(SPEC1+SPEC2+SPEC3)"ã¨ã„ã£ãŸå½¢å¼ã®timeline㫠対応ã—ã¾ã—ãŸã€‚merge timelineã¯æŒ‡å®šã—ãŸtimelineã®tweetã‚’å…¨ã¦å«ã‚€ timelineã§ã™ã€‚ä»»æ„ã®timeline specã‚’æ§‹æˆè¦ç´ ã«ã§ãã¾ã™ã€‚例ãˆã°ã€ "(:direct_messages+:direct_messages_sent)"ã¨ã„ã†timeline specを使㈠ã°ã“れã¾ã§ã«é€ã£ãŸã‚Šå—ã‘å–ã£ãŸã‚Šã—ãŸdirect messageã®å…¨ã¦ã‚’ã²ã¨ã¤ã®ãƒãƒƒ ファã«è¡¨ç¤ºã§ãã¾ã™ã€‚ * tweetæç”»æ™‚ã«å®Ÿè¡Œã•れる新ã—ã„hookã®è¿½åŠ  æ–°ã—ã„hook変数`twittering-new-tweets-rendered-hook'を追加ã—ã¾ã—ãŸã€‚ ã“ã®hookã¯å®Ÿéš›ã«æ–°ã—ã„tweetã‚’æç”»ã—ãŸã¨ãã«å®Ÿè¡Œã•れã¾ã™ã€‚以å‰ã«å–å¾— ã—ãŸtweetã‚’å†æç”»ã™ã‚‹éš›ã«ã¯å®Ÿè¡Œã•れã¾ã›ã‚“。既存ã®hook変数 `twittering-new-tweets-hook'ã¯tweetã®å–å¾—ã«æˆåŠŸã™ã‚‹ãŸã³ã«å®Ÿè¡Œã•れる ã®ã§ã€exclude-if timelineã‚„merge timelineã®ã‚ˆã†ãªè¤‡åˆtimelineã«å«ã¾ れる実際ã«ã¯æç”»ã•れãªã„tweetã«ã¤ã„ã¦ã‚‚hookを実行ã—ã¾ã™ã€‚æ–°ã—ã„hook ã¯è¤‡åˆtimelineã«ã¤ã„ã¦ã‚‚ã†ã¾ã動作ã—ã¾ã™ã€‚ hook内ã§ã¯ã€`twittering-rendered-new-tweets'ã¨ã„ã†å¤‰æ•°ã§æç”»ã•れ㟠tweetã®ãƒªã‚¹ãƒˆã‚’å‚ç…§ã§ãã¾ã™ã€‚ä»–ã«ã‚‚æç”»ã•れãŸtimelineを表ã™timeline specã¨timeline spec文字列を`twittering-rendered-new-tweets-spec'㨠`twittering-rendered-new-tweets-spec-string'ã¨ã„ã†å¤‰æ•°ã§å‚ç…§ã§ãã¾ã™ã€‚ 詳細ã¯`twittering-new-tweets-rendered-hook'ã®docstringã‚’å‚ç…§ã—ã¦ãã  ã•ã„。 * å¤§åŸŸå¤‰æ•°åˆæœŸåŒ–時ã«å®Ÿè¡Œã•れる新ã—ã„hookã®è¿½åŠ  æ–°ã—ã„hook変数`twittering-mode-init-hook'を追加ã—ã¾ã—ãŸã€‚ã“ã®hookã¯ å¤§åŸŸå¤‰æ•°ã‚’åˆæœŸåŒ–ã—ãŸå¾Œã«å®Ÿè¡Œã•れã¾ã™ã€‚twittering-mode用ã®bufferを作 æˆã™ã‚‹ãŸã³ã«å®Ÿè¡Œã•れる`twittering-mode-hook'ã¨ã¯ç•°ãªã‚Šã€æ–°ã—ã„hook㯠一度ã—ã‹å®Ÿè¡Œã•れã¾ã›ã‚“。 * 編集ãƒãƒƒãƒ•ァ上ã§ã®tweet種別ã®è¡¨ç¤º 編集中ã®tweetã«ã¤ã„ã¦ã®æƒ…å ±ãŒç·¨é›†ãƒãƒƒãƒ•ã‚¡ã®å…ˆé ­ã«è¡¨ç¤ºã•れるよã†ã«ãª りã¾ã—ãŸã€‚編集中ã®tweetãŒreplyãªã®ã‹ã€direct messageãªã®ã‹ã€ã‚ã‚‹ã„㯠通常ã®tweetãªã®ã‹ãŒç¢ºèªã§ãã¾ã™ã€‚replyå…ˆã®tweet内容ã®ã‚³ãƒ”ーもã§ãã¾ ã™ã€‚ * 編集中ã®tweetã‚’replyã¨ã—ã¦é€ã‚‹ã‹ã©ã†ã‹ã®åˆ‡ã‚Šæ›¿ãˆ 編集中ã®tweetã‚’replyã¨ã—ã¦é€ã‚‹ã‹ã©ã†ã‹ã‚’編集ãƒãƒƒãƒ•ァ上ã§åˆ‡ã‚Šæ›¿ãˆã‚‰ã‚Œ るよã†ã«ãªã‚Šã¾ã—ãŸã€‚関数`twittering-edit-toggle-reply'(デフォルトã§ã¯ "C-c C-r"ã«bindã•れã¦ã„ã¾ã™)を呼ã¶ãŸã³ã«replyã¨ã—ã¦é€ã‚‹ã‹ã©ã†ã‹ãŒåˆ‡ り替ã‚りã¾ã™ã€‚ * exclude-re timelineã«å¯¾å¿œ æ–°ã—ã":exclude-re/REGEXP/SPEC"ã¨ã„ã†timelineã«å¯¾å¿œã—ã¾ã—ãŸã€‚ã“ã® timelineã¯SPECã§è¡¨ã•れるもã®ã¨ã»ã¼åŒã˜ã§ã™ãŒã€æ­£è¦è¡¨ç¾REGEXPã«ãƒžãƒƒãƒ ã™ã‚‹ã‚ˆã†ãªtweetã¯é™¤å¤–ã•れã¦ã„る点ãŒç•°ãªã‚Šã¾ã™ã€‚REGEXP内㧠/ を指定㙠る際㯠\ ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚例ãˆã°ã€Emacsã®æ–‡å­—列リテラ ル":exclude-re/\\//:home"ã§è¡¨ã•れるtimelineã§ã¯ã€ / ã‚’å«ã‚€tweetãŒé™¤ 外ã•れã¦ã„ã¾ã™ã€‚ * replyã®ç³»åˆ—ã®é€æ¬¡å–å¾— æ–°ã—ã„関数`twittering-toggle-or-retrieve-replied-statuses'(デフォル トã§ã¯"R"ã«bindã•れã¦ã„ã¾ã™)を使ã£ã¦ã€replyã‚’é¡ã£ã¦å–å¾—ã§ãるよã†ã« ãªã‚Šã¾ã—ãŸã€‚ã“ã®é–¢æ•°ã®å‹•作ã¯ä¸‹è¨˜ã®é€šã‚Šã§ã™ã€‚ - カーソルãŒreplyã€ã‚‚ã—ãã¯å±•開表示ã•れãŸreplyå…ˆã®ã„ãšã‚Œã‹ã‚’指ã—ã¦ã„ ã¦ã€ãã®replyã®ç³»åˆ—ã®ä¸€éƒ¨ãŒã¾ã è¡¨ç¤ºã•れã¦ã„ãªã„å ´åˆã€ãã®reply系列 ã‚’å¯èƒ½ãªé™ã‚Šè¡¨ç¤ºã—ã¾ã™ã€‚reply系列内ã®ã„ãã¤ã‹ã®tweetãŒæœªå–å¾—ã®å ´åˆ ã«ã¯ã€ãã®å†…ã®æœ€æ–°ã®ã‚‚ã®ã‚’å–å¾—ã—ã€è¡¨ç¤ºã—ã¾ã™ã€‚ - カーソルãŒreplyã€ã‚‚ã—ãã¯å±•開表示ã•れãŸreplyå…ˆã®ã„ãšã‚Œã‹ã‚’指ã—ã¦ã„ ã¦ã€ãã®replyã®ç³»åˆ—ãŒå…¨ã¦å±•開表示ã•れã¦ã„ã‚‹å ´åˆã€å±•開表示をã¨ã‚Šã‚„ ã‚ã¾ã™ã€‚ - カーソルãŒreply系列内ã®tweetを指ã—ã¦ã„ãªã„å ´åˆã€ä½•ã‚‚ã—ã¾ã›ã‚“。 * 編集ãƒãƒƒãƒ•ã‚¡ç”¨ã‚’é–‹ãæ–¹æ³•ã®è¨­å®š æ–°ãŸã«å¤‰æ•°`twittering-pop-to-buffer-function'を追加ã—ã¾ã—ãŸã€‚ã“ã®å¤‰ æ•°ã¯ç·¨é›†ãƒãƒƒãƒ•ã‚¡ã‚’é–‹ãæ–¹æ³•を指定ã™ã‚‹ã‚‚ã®ã§ã™ã€‚デフォルトã®å€¤ã¯é–¢æ•° `twittering-pop-to-buffer-in-bottom-largest-window'ã¨ãªã£ã¦ã„ã¾ã™ã€‚ ã“ã®é–¢æ•°ã¯ç¾åœ¨ã®ãƒ•ãƒ¬ãƒ¼ãƒ å†…ã§æœ€ä¸‹æ®µã«ã‚るウィンドウã®å†…ã€é¢ç©æœ€å¤§ã®ã‚‚ ã®ã‚’分割ã™ã‚‹ã“ã¨ã§ç·¨é›†ãƒãƒƒãƒ•ァ用ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’確ä¿ã—ã¾ã™ã€‚ä»–ã«ã‚‚ã€é–¢ æ•°`twittering-pop-to-buffer-in-current-window'を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ ã™ã€‚ã“ã®é–¢æ•°ã¯ç¾åœ¨ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’分割ã—ã¦ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’確ä¿ã—ã¾ã™ã€‚ * single tweet timelineã«å¯¾å¿œ æ–°ã—ã":single/ID"ã¨ã„ã†timelineã«å¯¾å¿œã—ã¾ã—ãŸã€‚ã“ã®timelineã¯ID㧠指定ã•れãŸtweetã®ã¿ã‹ã‚‰ãªã‚‹timelineã§ã™ã€‚éžå¸¸ã«å¤ã„tweetç­‰ã«ã‚¢ã‚¯ã‚»ã‚¹ ã™ã‚‹ã®ã«åˆ©ç”¨ã§ãã¾ã™ã€‚ * tweetã«å«ã¾ã‚Œã‚‹URLã‹ã‚‰ã®single tweet timelineå–å¾— 特定ã®tweetを指ã™URL上ã§é–¢æ•°`twittering-other-user-timeline'を呼ã¶ã“ ã¨ã§ã€ãã®tweetã«å¯¾å¿œã—ãŸsingle tweet timelineã‚’é–‹ã‘るよã†ã«ãªã‚Šã¾ã— ãŸã€‚ã“ã®é–¢æ•°ã¯ãƒ‡ãƒ•ォルトã§ã¯"v"ã«bindã•れã¦ã„ã¾ã™ã€‚ * 特定日時以å‰ã®tweetã‚’å–å¾—ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã‚’追加 ç¾åœ¨ã®timelineã®ã€æŒ‡å®šã—ãŸæ—¥æ™‚以å‰ã®tweetã‚’å–å¾—ã§ãã‚‹æ–°ã—ã„コマンド `twittering-get-tweets-before'ãŒè¿½åŠ ã•れã¾ã—ãŸã€‚ * favorites timelineã§éŽåŽ»ã®tweetã®é¡ã£ã¦å–å¾—ã™ã‚‹æ©Ÿèƒ½ã‚’追加 * timelineã”ã¨ã«ç•°ãªã‚‹å–å¾—é–“éš” æ–°ã—ã„変数`twittering-relative-retrieval-interval-alist'ã§ã€timeline ã”ã¨ã«å–得間隔を変更ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ã“ã®å¤‰æ•°ã¯æ­£è¦è¡¨ç¾ã¨ç›¸å¯¾ é–“éš”ã‹ã‚‰ãªã‚‹é€£æƒ³ãƒªã‚¹ãƒˆã§ã™ã€‚ã“ã®æ­£è¦è¡¨ç¾ã«ãƒžãƒƒãƒã™ã‚‹timelineã¯ã€ `twittering-timer-interval'を「相対間隔ã€å€ã—ãŸé–“éš”ã§æ›´æ–°ã•れるよㆠã«ãªã‚Šã¾ã™ã€‚ * Twitter REST API v1.1ã«å¯¾å¿œ 変数`twittering-service-method'ã®å€¤ã‚’`twitter-api-v1.1'ã«å¤‰æ›´ã—ã¾ã— ãŸã€‚ã“ã®è¨­å®šã§twittering-modeã¯Twitter REST API v1.1を使ã†ã‚ˆã†ã«ãªã‚Š ã¾ã™ã€‚ã“ã®å ´åˆã€SSL接続ã¨JSONè§£æžå™¨ãŒå¿…è¦ã§ã™ã€‚SSL接続ã«ã¯cURL with OpenSSL, GNU Wget with OpenSSL, OpenSSLã¨GnuTLSã®ã„ãšã‚Œã‹ãŒå¿…è¦ã§ã€ ã•らã«JSONè§£æžå™¨ã¨ã—ã¦`json.el'ãŒå¿…è¦ã¨ãªã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。 Emacs22ã¨ãれ以å‰ã®Emacsã§ã¯`json.el'ãŒåŒæ¢±ã•れã¦ã„ã¾ã›ã‚“ã®ã§åˆ¥é€”用 æ„ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã¾ãŸã€Twitter REST API v1.1ã§ã¯ã„ãã¤ã‹ã®timelineãŒå»ƒæ­¢ã•れã¦ã„ã¾ã™ã€‚ 廃止ã•れãŸtimelineã«å¯¾å¿œã™ã‚‹timeline spec文字列ã¯":friends", ":replies", ":public", ":retweeted_by_me", ":retweeted_to_me", ":retweeted_by_user/USER", ":retweeted_to_user/USER"ã§ã™ã€‚ ### ãƒã‚°ä¿®æ­£ * èªè¨¼æˆåŠŸãƒ»å¤±æ•—ã«ã¤ã„ã¦ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れるよã†ä¿®æ­£ * 利用å¯èƒ½ãªé€šä¿¡æ–¹æ³•(connection method)ã®ç¢ºèªå‡¦ç†ã®ä¿®æ­£ * HMAC-SHA1ã®è¨ˆç®—を修正 以å‰ã®`twittering-hmac-sha1'ã¯ç¾åœ¨ã®coding-systemã«ã‚ˆã£ã¦ã¯é–“é•ã£ãŸ çµæžœã‚’è¿”ã™å ´åˆãŒã‚りã¾ã—ãŸã€‚ã“ã®å•題を修正ã—ã¾ã—ãŸã€‚ * æ•°å­—ã‹ã‚‰ãªã‚‹ãƒ¦ãƒ¼ã‚¶å(screen_name)ã¨ãƒ¦ãƒ¼ã‚¶IDã®æ··åŒã‚’一部修正 他ユーザã®timelineã‚’å–å¾—ã™ã‚‹éš›ã€æ•°å­—ã®ã¿ã‹ã‚‰ãªã‚‹ãƒ¦ãƒ¼ã‚¶åを指定ã™ã‚‹ã¨ ユーザIDã¨æ··åŒã—ã¦ã—ã¾ã†å•題を修正ã—ã¾ã—ãŸã€‚他ユーザã®ã€ŒãŠæ°—ã«å…¥ã‚Šã€ (favorites)ã‚’å–å¾—ã™ã‚‹å ´åˆã«ã‚‚åŒæ§˜ã®å•題ãŒèµ·ã“りã¾ã™ãŒã€ã“ã¡ã‚‰ã¯ä¿®æ­£ ã§ãã¦ã„ã¾ã›ã‚“ã€‚ã€ŒãŠæ°—ã«å…¥ã‚Šã€ã‚’å–å¾—ã™ã‚‹APIã«ãƒ¦ãƒ¼ã‚¶IDã§ã¯ãªãユーザ åを指定ã™ã‚‹ãƒ‘ラメータãŒãªã„ãŸã‚ã§ã™ã€‚ Thanks to Makoto Fujiwara who reported this problem. * tweet編集ãƒãƒƒãƒ•ã‚¡ã‚’é–‹ã„ãŸéš›ã®æ„図ã—ãªã„カーソル移動を解消 `twittering-mode'ã§ç®¡ç†ã•れã¦ã„ãªã„ãƒãƒƒãƒ•ã‚¡ã‹ã‚‰ `twittering-update-status-function'を呼ã³å‡ºã—ã¦ç·¨é›†ãƒãƒƒãƒ•ァを作る㨠元ã®ãƒãƒƒãƒ•ã‚¡ã§ã®ã‚«ãƒ¼ã‚½ãƒ«ãŒä¸å¿…è¦ã«å‹•ã‹ã•れã¦ã—ã¾ã†ãƒã‚°ã‚’解消ã—ã¾ã—ãŸã€‚ Thanks to mofigan who reported this problem. * アイコンä¿å­˜å‡¦ç†ã‚’修正 `twittering-icon-storage-limit'ã‚‚ã—ãã¯`twittering-convert-fix-size' ãŒnilã®å ´åˆã«ã€ã‚¢ã‚¤ã‚³ãƒ³ãŒæ­£ã—ãä¿å­˜ã§ãã¦ã„ãªã‹ã£ãŸã®ã‚’修正ã—ã¾ã—ãŸã€‚ Thanks to HufflepuffBR who reported this problem about the former variable `twittering-icon-storage-limit'. * byte-compile時ã€`load-path'ã«ç„¡æ¡ä»¶ã§ãƒ‘スãŒè¿½åŠ ã•れるå•題を解消 twittering-modeã®repositoryã«å«ã¾ã‚Œã¦ã„るディレクトリ`emacs21', `url-emacs21'ãŒbyte-compile時ã«ç„¡æ¡ä»¶ã§`load-path'ã«åŠ ãˆã‚‰ã‚Œã¦ãŠã‚Šã€ byte-compile時ã«ã„ãã¤ã‹ã®ãƒžã‚¯ãƒ­ãŒEmacs21用ã®å¤ã„定義ã¨ã—ã¦å–り込㾠れã¦ã„ã¾ã—ãŸã€‚å¤ã„定義ã¯22以é™ã®Emacs上ã§ä½¿ã†ã“ã¨ãŒã§ãã¾ã›ã‚“ã®ã§ byte-compileã«ã‚ˆã£ã¦æ­£ã—ã動作ã—ãªã„ファイルãŒç”Ÿæˆã•れる状態ã«ãªã£ã¦ ã„ã¾ã—ãŸã€‚ãã“ã§byte-compile時ã«ã‚‚Emacs 22以é™ã§ã¯ãƒ‘スãŒè¿½åŠ ã•れãªã„ よã†å¤‰æ›´ã—ã¦ã€ã“ã®å•題を解消ã—ã¾ã—ãŸã€‚ Thanks to HKey who has discovered the bug. * カーソル移動ãŒãŠã‹ã—ããªã‚‹å•題を解消 tweetã«å‰²ã‚Šå½“ã¦ãŸtext propertyãŒå¹²æ¸‰ã—ã¦ã€twittering-modeã®buffer内 ã§ã®è«–ç†è¡Œå˜ä½ã®ã‚«ãƒ¼ã‚½ãƒ«ç§»å‹•ãŒãŠã‹ã—ããªã£ã¦ã„ã¾ã—ãŸã€‚ã“ã®å•題を解消 ã—ã¾ã—ãŸã€‚ Thanks to lemit who reported the problem. * bufferã‹ã‚‰tweetを消ã™ã®ã‚’tweet削除APIãŒæˆåŠŸã—ãŸå¾Œã«å¤‰æ›´ bufferã‹ã‚‰tweetを消去ã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’`destroy-status' APIãŒæˆåŠŸã—㟠ã¨ã„ã†å¿œç­”ã‚’å—ã‘å–ã£ãŸå¾Œã«å¤‰æ›´ã—ã¾ã—ãŸã€‚APIãŒå¤±æ•—ã«çµ‚ã‚ã£ãŸå ´åˆã€ 対象tweetã¯bufferã«æ®‹ã£ã¦ã„ã‚‹ã®ã§å†åº¦å‰Šé™¤ã‚’試ã¿ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ * search timeline specå†…ã®æ¤œç´¢æ–‡å­—列ã®ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—を修正 * éžåŒæœŸå®Ÿè¡Œã•れる関数ãŒã‚¨ãƒ©ãƒ¼ã‚’èµ·ã“ã—ã¦ã„ãŸã®ã‚’修正 存在ã—ãªã„ユーザã®timelineã‚’å–å¾—ã—よã†ã¨ã™ã‚‹ã¨éžåŒæœŸå®Ÿè¡Œã•れる関数㌠エラーを起ã“ã—ã¦ã—ã¾ã£ã¦ã„ã¾ã—ãŸã®ã§ã€ä¿®æ­£ã—ã¾ã—ãŸã€‚ 2.0.0: 2011-04-22 ------------------ ### é‡è¦ãªãŠçŸ¥ã‚‰ã› ### 改良 * OAuth, xAuthã§å–å¾—ã—ãŸèªè¨¼æ¸ˆã¿access tokenã®æš—å·åŒ–ä¿å­˜ã«å¯¾å¿œ èªè¨¼æ¸ˆã¿access tokenã‚’GnuPGã§æš—å·åŒ–ã—ã¦ä¿å­˜ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ tokenã‚’ä¿å­˜ã—ã¦ãŠã‘ã°ã€æ¬¡å›žä»¥é™ã®èµ·å‹•時ã«OAuthã®ãŸã‚ã®å¤–部 ブラウザ起動やPINå…¥åŠ›ç­‰ã®æ‰‹ç¶šãã¯å¿…è¦ãªããªã‚Šã¾ã™ã€‚代ã‚ã‚Šã«æš—å·åŒ–ã‚’ è§£ããŸã‚ã®passphraseを入力ã—ã¦ãã ã•ã„。 ã“ã®æ©Ÿèƒ½ã¯"(setq twittering-use-master-password t)"ã¨ã™ã‚Œã°æœ‰åŠ¹ã« ãªã‚Šã¾ã™(デフォルトã§ã¯ç„¡åйã§ã™)。 æš—å·åŒ–ã•れãŸç§˜å¯†æƒ…å ±ã¯ãƒ‡ãƒ•ォルトã§ã¯`~/.twittering-mode.gpg'ã«è¨˜éŒ² ã•れã¾ã™ãŒã“ã®ä¿å­˜å…ˆã¯å¤‰æ•°`twittering-private-info-file'ã§å¤‰æ›´å¯èƒ½ ã§ã™ã€‚ ã“ã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹ã«ã¯å¤–部プログラムGnuPGã«åŠ ãˆã¦Emacs LISPプロ グラム`alpaca.el'ã‹EasyPGãŒå¿…è¦ã§ã™ã€‚Emacsã¯23以é™ã§ã‚れã°EasyPGã‚’ åŒæ¢±ã—ã¦ã„ã¾ã™ã®ã§è¿½åŠ ã®Emacs LISPプログラムã¯å¿…è¦ã‚りã¾ã›ã‚“。 `alpaca.el'ã¯version 0.13を想定ã—ã¦ã„ã¾ã™ã®ã§ã€ä»–ã®versionã§ã¯å‹•作㫠å•題ãŒã‚ã‚‹æã‚ŒãŒã‚りã¾ã™ã€‚ * xAuthã®ã‚µãƒãƒ¼ãƒˆ OAuthèªè¨¼ã®ä»–ã«xAuthã«ã‚ˆã‚‹èªè¨¼ã«ã‚‚対応ã—ã¾ã—ãŸã€‚xAuthã«ã‚ˆã‚‹èªè¨¼ã‚’ 有効ã«ã™ã‚‹ã«ã¯"(setq twittering-auth-method 'xauth)"ã®è¨­å®šã‚’追加ã—㦠ãã ã•ã„。 * PINコード入力時ã«ä¸å¿…è¦ãªç©ºç™½ã‚’自動ã§å‰Šé™¤ * èµ·å‹•ã—ãŸå¤–部プロセスã®statusを確èªã—ã¦dead-lockã‚’å›žé¿ * `user', `friends', `mentions', `public'ã§ã‚‚native retweetを表示 * èµ·å‹•ã—ãŸå¤–部プロセスã®ç•°å¸¸çµ‚了を検出 異常終了ã—ãŸãƒ—ロセスã®exit-statusã¯"*Messages*"ãƒãƒƒãƒ•ã‚¡ã§ç¢ºèªã§ãã¾ã™ã€‚ * HTTPS通信ã§ã®ã‚µãƒ¼ãƒèªè¨¼ã®ç„¡åŠ¹åŒ–ã«å¯¾å¿œ サーãƒèªè¨¼ã¯ãƒ‡ãƒ•ォルトã§ã¯æœ‰åйã§ã™ãŒã€ã“れを無効化ã™ã‚‹ã“ã¨ã‚‚ã§ãã‚‹ よã†ã«ãªã‚Šã¾ã—ãŸã€‚"(setq twittering-allow-insecure-server-cert t)"㮠設定ã§HTTPS通信時ã«ã‚‚サーãƒèªè¨¼ã‚’行ã‚ãªããªã‚Šã¾ã™ã€‚ * æœªçŸ¥ã®æ•°å€¤æ–‡å­—å‚照を代替文字ã§ç½®æ› decodeã§ããªã„数値文字å‚ç…§ãŒç¾ã‚ŒãŸã¨ãã«ãã®æ–‡å­—を変数 `twittering-unicode-replacement-char'ã§æŒ‡å®šã•ã‚ŒãŸæ–‡å­—ã«ç½®æ›ã—ã¦è¡¨ç¤º ã—ã¾ã™ã€‚代替文字ã®ãƒ‡ãƒ•ォルトã¯U+FFFDã§ã™ã€‚ * サブディレクトリã«`.nosearch'を追加 å¿…è¦ã®ãªã„サブディレクトリãŒå†å¸°çš„ã«`load-path'ã«è¿½åŠ ã•れるã®ã‚’防㎠ã¾ã™ã€‚ * åˆæœŸtimelineを複数設定ã—ã¦ã„ã‚‹å ´åˆã®èªè¨¼æƒ…報入力回数を1回ã«å¤‰æ›´ * byte-compile後ã®clライブラリã¸ã®ä¾å­˜ã‚’解消 * 内蔵ã—ã¦ã„ã‚‹CA証明書を更新 内蔵ã—ã¦ã„ã‚‹CA証明書を`Equifax Secure Certificate Authority'ã§ç½®ã æ›ãˆã¾ã—ãŸã€‚ * StatusNetモードをサãƒãƒ¼ãƒˆ `twittering-mode.el'ã‚’StatusNet用ã«åˆ‡ã‚Šæ›¿ãˆã‚‰ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ "(setq twittering-service-method 'statusnet)"ã¨ã„ã†è¨­å®šã§åˆ‡ã‚Šæ›¿ã‚ りã¾ã™ã€‚Twitterã¨StatusNetã‚’åŒæ™‚ã«ä½¿ã†ã“ã¨ã¯ã§ãã¾ã›ã‚“ã®ã§æ³¨æ„ã—㦠ãã ã•ã„。 StatusNetå‘ã‘ã«ä½¿ã†ã«ã¯ãƒ›ã‚¹ãƒˆæƒ…å ±ã®è¨­å®šã‚‚å¿…è¦ã«ãªã‚Šã¾ã™ã€‚ `http://identi.ca/'ã§ã®ã‚µãƒ¼ãƒ“スã®å ´åˆã€ä»¥ä¸‹ã®ã‚ˆã†ãªè¨­å®šãŒå¿…è¦ã§ã™ã€‚ (setq twittering-service-method 'statusnet) (setq twittering-auth-method 'basic) (setq twittering-username "YOUR-ACCOUNT-NAME") ;; host (setq twittering-api-host "identi.ca") (setq twittering-api-search-host "identi.ca") (setq twittering-web-host "identi.ca") ;; paths for API (setq twittering-api-prefix "api/") (setq twittering-search-api-method "api/search") (setq twittering-web-path-prefix "") * "U"ã§tweet中ã®URIã‚„ãã®tweet自体ã¸ã®URIをコピー Thanks to Faried Nawaz. * "C-"ã§tweetをコピー Thanks to Faried Nawaz. * wgetã«ã‚ˆã‚‹tweetå–å¾—ã«å¯¾å¿œ Twitterサーãƒã¨ã®é€šä¿¡ã«å¤–部プログラムwgetを使ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ 下記ã®è¨­å®šã§wgetãŒå„ªå…ˆã—ã¦ä½¿ã‚れるよã†ã«ãªã‚Šã¾ã™ã€‚ (setq twittering-connection-type-order '(wget curl native)) * ç¾åœ¨ã®é€šä¿¡æ–¹æ³•(connection method)をモードライン上ã«è¡¨ç¤º デフォルトã§ç¾åœ¨ã®é€šä¿¡æ–¹æ³•(connection method)ãŒãƒ¢ãƒ¼ãƒ‰ãƒ©ã‚¤ãƒ³ä¸Šã«è¡¨ç¤º ã•れã¾ã™ã€‚下記ã®è¨­å®šã§è¡¨ç¤ºã—ãªã„よã†ã«ã‚‚ã§ãã¾ã™ã€‚ (setq twittering-display-connection-method nil) * アイコンå–å¾—æ™‚ã®æƒ…å ±è¡¨ç¤ºã‚’ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æŠ‘åˆ¶ `twittering-url-show-status'ã®ãƒ‡ãƒ•ォルト値ãŒnilã«å¤‰æ›´ã•れã¾ã—ãŸã€‚ デフォルトã§ã¯ã‚¢ã‚¤ã‚³ãƒ³å–å¾—æ™‚ã®æƒ…å ±ã¯è¡¨ç¤ºã•れãªããªã‚Šã¾ã™ã€‚ * urlライブラリã«ã‚ˆã‚‹tweetå–å¾—ã«å¯¾å¿œ 通信方法(connection method)ã¨ã—ã¦`urllib-http'ã¨`urllib-https'を追加 ã—ã¾ã—ãŸã€‚`native'ã¨ã¯ç•°ãªã‚ŠHTTP redirectionもサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ãŒ 動作ã¯é…ãã€ã¾ãŸä¸å®‰å®šã«ãªã‚‹å ´åˆã‚‚ã‚るよã†ã§ã™ã€‚ä»–ã®methodãŒåˆ©ç”¨ã§ãã‚‹ å ´åˆã«ã¯ãã¡ã‚‰ã‚’用ã„ã‚‹ã“ã¨ã‚’推奨ã—ã¾ã™ã€‚ `urllib-http',`urllib-https'を用ã„ã¦ã®BASICèªè¨¼,xAuthã§é–“é•ã£ãŸã‚¢ã‚«ã‚¦ ント情報を与ãˆã‚‹ã¨urlãƒ©ã‚¤ãƒ–ãƒ©ãƒªã®æ©Ÿèƒ½ã§å†å…¥åŠ›ã‚’æ±‚ã‚られã¾ã™ãŒã€å†å…¥åŠ› ã—ãŸæƒ…å ±ã§é€šä¿¡ã‚’続行ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。å†å…¥åŠ›ã‚’æ±‚ã‚られãŸã¨ãã¯C-g ã§ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã—ã€æ”¹ã‚ã¦M-x twitを実行ã—ã¦ãã ã•ã„。 * ユーザã‹ã‚‰ã®å…¥åЛ待ã¡çŠ¶æ…‹ã«ãªã£ã¦ã‹ã‚‰å†æç”» 時刻やアイコン画åƒã®è¡¨ç¤ºã®ãŸã‚ã®tweetã®å†æç”»ã‚’ã€EmacsãŒãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã® 入力待ã¡çŠ¶æ…‹(idle状態)ã«å…¥ã‚Šã€ãã®çŠ¶æ…‹ãŒä¸€å®šæ™‚間継続ã—ã¦ã‹ã‚‰è¡Œã†ã‚ˆã†ã« ã—ã¾ã—ãŸã€‚å¾…ã¡æ™‚é–“ã¯å¤‰æ•°`twittering-timer-interval-for-redisplaying'㧠指定ã§ãã¾ã™ã€‚デフォルトã®å¾…ã¡æ™‚é–“ã¯1ç§’ã§ã™ã€‚ * curlã‚„wgetã§ã®ã‚¢ã‚¤ã‚³ãƒ³ç”»åƒå–å¾—ã«å¯¾å¿œ アイコン画åƒã®å–å¾—ã«tweetå–å¾—ã¨åŒã˜é€šä¿¡æ–¹æ³•(connection method)ãŒä½¿ãˆã‚‹ よã†ã«ãªã‚Šã¾ã—ãŸã€‚å„methodã®å„ªå…ˆé †ä½ã¯tweetå–å¾—ã¨åŒã˜ã変数 `twittering-connection-type-order'ã§æ±ºå®šã•れã¾ã™ã€‚ * アイコン画åƒå¤‰æ›´ãƒ—ログラムã®é…延呼ã³å‡ºã— アイコン画åƒã‚’指定ã•れãŸã‚µã‚¤ã‚ºã«å¤‰æ›´ã™ã‚‹ãŸã‚ã®ãƒ—ログラム(convert)実行 ã‚’EmacsãŒãƒ¦ãƒ¼ã‚¶ã‹ã‚‰ã®å…¥åЛ待ã¡çŠ¶æ…‹(idle状態)ã«ãªã£ã¦ä¸€å®šæ™‚é–“ãŒçµŒéŽã—㦠ã‹ã‚‰è¡Œã†ã‚ˆã†ã«ã—ã¾ã—ãŸã€‚å¾…ã¡æ™‚é–“ã¯å¤‰æ•° `twittering-url-request-sentinel-delay'ã§æŒ‡å®šã§ãã¾ã™ã€‚ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã® å¾…ã¡æ™‚é–“ã¯1ç§’ã§ã™ã€‚ * ã€ŒãŠæ°—ã«å…¥ã‚Šã€ã«å¯¾å¿œ ã€ŒãŠæ°—ã«å…¥ã‚Šã€ä¸€è¦§ã‚’表示ã™ã‚‹timeline specã¨ã—ã¦":favorites"㨠":favorites/USER"を追加ã—ã¾ã—ãŸã€‚":favorites/USER"ã§æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶ã® ã€ŒãŠæ°—ã«å…¥ã‚Šã€ã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚`twittering-visit-timeline'(デフォ ルトã§ã¯"V"ã«bindã•れã¦ã„ã¾ã™)ã«å¯¾ã—ã¦":favorites/"ã¨å…¥åŠ›ã—ã¦Enter ã™ã‚‹ã¨ã€ç¶šã„ã¦ãƒ¦ãƒ¼ã‚¶åを補完入力ã§ãã¾ã™ã€‚ã€ŒãŠæ°—ã«å…¥ã‚Šã€ã¯å…ƒã€…ã®tweet㮠投稿時刻ã®é †ã«è¡¨ç¤ºã•れるã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。ã“れã¯ã€ŒãŠæ°—ã«å…¥ã‚Šã€ã« 登録ã—ãŸæ™‚刻をå–å¾—ã™ã‚‹æ–¹æ³•ãŒãªã„ãŸã‚ã§ã™ã€‚ã¾ãŸã€å–å¾—ã§ãã‚‹ã€ŒãŠæ°—ã«å…¥ りã€ã¯æœ€å¤§20ä»¶ã§ã™ã€‚よりéŽåŽ»ã«ã•ã‹ã®ã¼ã£ã¦ã®å–å¾—ã¯æœªå¯¾å¿œã§ã™ã€‚ * æ–°ãŸã«ã„ãã¤ã‹ã®çŸ­ç¸®URL生æˆã‚µãƒ¼ãƒ“スã«å¯¾å¿œ æ–°ãŸã«`bit.ly', `goo.gl', `is.gd', `j.mp'ã«å¯¾å¿œã—ã¾ã—ãŸã€‚下記ã®ã‚ˆã†ãª è¨­å®šã§æœ‰åйã«ã§ãã¾ã™ã€‚ (setq twittering-tinyurl-service 'bit.ly) ;; bit.lyã®å ´åˆ (setq twittering-tinyurl-service 'goo.gl) ;; goo.glã®å ´åˆ (setq twittering-tinyurl-service 'is.gd) ;; is.gdã®å ´åˆ (setq twittering-tinyurl-service 'j.mp) ;; j.mpã®å ´åˆ `bit.ly'ã‚„`j.mp'を使ã†ã«ã¯ãŠæŒã¡ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«å¿œã˜ã¦ä¸‹è¨˜ã®ã‚ˆã†ã« `twittering-bitly-login'ã¨`twittering-bitly-api-key'を設定ã—ã¦ãŠãå¿…è¦ãŒ ã‚りã¾ã™ã€‚ (setq twittering-bitly-login "YOUR-LOGIN-NAME") (setq twittering-bitly-api-key "YOUR-API-KEY") Thanks to Michael Kohl and Lars Gregori. * å…¬å¼ReTweetã«ã¤ã„ã¦ã®æ›¸å¼æŒ‡å®šå­"%c","%C","%@"ã®æ„味を変更 å…¬å¼ReTweetã®`created_at'ã¯ã€retweetã—ãŸæ™‚刻ã§ã¯ãªãオリジナル㮠tweetを投稿ã—ãŸæ™‚刻をæ„味ã™ã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚ * spamé€ä¿¡è€…報告機能 関数`twittering-block-and-report-as-spammer'を追加ã—ã¾ã—ãŸã€‚tweet上㧠ã“ã®é–¢æ•°ã‚’呼ã³å‡ºã™ã¨ã€ãã®æŠ•ç¨¿è€…ã‚’ãƒ–ãƒ­ãƒƒã‚¯ã—ã€ã•らã«spamé€ä¿¡è€…ã¨ã—㦠報告ã§ãã¾ã™ã€‚ * ブロック機能 関数`twittering-block'を追加ã—ã¾ã—ãŸã€‚tweet上ã§ã“ã®é–¢æ•°ã‚’呼ã³å‡ºã™ã¨ã€ ãã®æŠ•ç¨¿è€…ã‚’ãƒ–ãƒ­ãƒƒã‚¯ã§ãã¾ã™ã€‚ * アイコン画åƒä¿å­˜æ©Ÿèƒ½ "(setq twittering-use-icon-storage t)"ã¨ã™ã‚‹ã“ã¨ã§ä¸€åº¦å–得・サイズ変 æ›´ã—ãŸã‚¢ã‚¤ã‚³ãƒ³ç”»åƒã‚’専用ã®ãƒ•ァイルã«ä¿å­˜ã—ã¦ãŠã‘るよã†ã«ãªã‚Šã¾ã—ãŸã€‚ ã“ã®æ©Ÿèƒ½ã¯ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã§ã™ã€‚次回以é™ã¯å°‚ç”¨ãƒ•ã‚¡ã‚¤ãƒ«ã«æ ¼ç´ã•れ㟠画åƒãŒå„ªå…ˆçš„ã«ä½¿ã‚れã¾ã™ã®ã§ã‚¢ã‚¤ã‚³ãƒ³å–得・サイズ変更ã«ã‹ã‹ã‚‹æ™‚é–“ãŒçœ ã‘ã¾ã™ã€‚ デフォルトã§ã¯ç›´è¿‘ã«æç”»ã•れãŸã‚¢ã‚¤ã‚³ãƒ³ã‚’最大500個ã¾ã§ä¿å­˜ã—ã¾ã™ã€‚ä¿ å­˜ã•れるアイコンã®å€‹æ•°ã¯å¤‰æ•°`twittering-icon-storage-limit'ã§å¤‰æ›´ã§ ãã¾ã™ã€‚ã“ã®å¤‰æ•°ã‚’nilã«è¨­å®šã™ã‚‹ã¨å…¨ã¦ã®ã‚¢ã‚¤ã‚³ãƒ³ãŒä¿å­˜ã•れã¾ã™ã€‚ アイコンをä¿å­˜ã™ã‚‹ãƒ•ァイルã¯ãƒ‡ãƒ•ォルトã§ã¯ `~/.twittering-mode-icons.gz'ã§ã™ãŒ`twittering-icon-storage-file'㨠ã„ã†å¤‰æ•°ã§å¤‰æ›´ã§ãã¾ã™ã€‚ã‚ã‚‹ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Emacsã§ç”Ÿæˆã—ãŸã‚¢ã‚¤ã‚³ãƒ³ä¿å­˜ ファイルã¯åˆ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯ä½¿ãˆãªã„æã‚ŒãŒã‚ã‚‹ã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。 * æ–°ã—ã„æ›¸å¼æŒ‡å®šå­"%RT{...}" `twittering-status-format'ã§ä½¿ãˆã‚‹æ›¸å¼æŒ‡å®šå­ã¨ã—ã¦"%RT{...}"ãŒè¿½åŠ ã• ã‚Œã¾ã—ãŸã€‚ã“れã¯å¯¾è±¡ã¨ãªã‚‹tweetãŒå…¬å¼RTã®ã¨ãã ã‘æç”»ã•れã¾ã™ã€‚括弧 ã®ä¸­ã«ã¯ä»»æ„ã®æ–‡å­—åˆ—ã¨æ›¸å¼æŒ‡å®šå­ã‚’入れるã“ã¨ãŒã§ãã€æ‹¬å¼§å†…ã®æ›¸å¼æŒ‡å®š å­ã¯RTã•れãŸtweetã§ã¯ãªããã®RTè‡ªèº«ã®æƒ…報を使ã£ã¦æç”»ã•れã¾ã™ã€‚例㈠ã°ã€"%RT{%s}"ã¯RTã—ãŸãƒ¦ãƒ¼ã‚¶ã®screen_nameã¨ãªã‚Šã¾ã™ã€‚ * å…¬å¼ReTweetã®ã‚­ãƒ£ãƒ³ã‚»ãƒ« è‡ªåˆ†è‡ªèº«ãŒæŠ•ç¨¿ã—ãŸå…¬å¼ReTweetã‚’tweet削除ã¨åŒã˜æ“作(デフォルト㧠ã¯'C-cD')ã§ã‚­ãƒ£ãƒ³ã‚»ãƒ«ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚ * ã‚るユーザãŒãƒ•ォローã—ã¦ã„るリストã®è£œå®Œä»˜ãé¸æŠžæ©Ÿèƒ½ 'C-uL'ã§ç‰¹å®šãƒ¦ãƒ¼ã‚¶ãŒãƒ•ォローã—ã¦ã„るリストを補完付ãã§é¸æŠžã—ã€é–‹ã‘ã‚‹ よã†ã«ãªã‚Šã¾ã—ãŸã€‚ * Edit skeleton 投稿内容編集開始時ã«çжæ³ã«å¿œã˜ã¦è‡ªå‹•çš„ã«æ–‡å­—を追加ã§ãる仕組ã¿ã‚’å°Žå…¥ ã—ã¾ã—ãŸã€‚edit skeletonã¯ã„ã¤ã€ã©ã®ã‚ˆã†ãªæ–‡å­—列を先頭ã«ã€ã‚ã‚‹ã„ã¯æœ« å°¾ã«è¿½åŠ ã™ã‚‹ã‹ã®è¦å‰‡ã§ã™ã€‚連想リスト`twittering-edit-skeleton-alist' ã«è¦ç´ ã‚’追加ã™ã‚‹ã“ã¨ã§ã€æ–°ã—ã„edit skeletonを定義ã§ãã¾ã™ã€‚edit skeletonã®å®šç¾©æ–¹æ³•ã®è©³ç´°ã«ã¤ã„ã¦ã¯`twittering-edit-skeleton-alist'ã® docstringã‚’å‚ç…§ãã ã•ã„。 デフォルトã§ã¯ä»¥ä¸‹ã®edit skeletonãŒå®šç¾©ã•れã¦ã„ã¾ã™ã€‚ none: 何も追加ã—ã¾ã›ã‚“。 footer: `twittering-edit-skeleton-footer'ã§æŒ‡å®šã•ã‚ŒãŸæ–‡å­—列をフッタ ã¨ã—ã¦æœ«å°¾ã«è¿½åŠ ã—ã¾ã™ã€‚ footer-only-normal: footerã¨åŒæ§˜ã§ã™ãŒreplyã‚„direct messageを編集㙠る際ã«ã¯è¿½åŠ ã‚’è¡Œã„ã¾ã›ã‚“。 inherit-hashtags: 返信先ã«å«ã¾ã‚Œã‚‹ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’末尾ã«è¿½åŠ ã—ã¾ã™ã€‚ inherit-mentions: 返信先ã«å«ã¾ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶å‚照を先頭ã«è¿½åŠ ã—ã¾ã™ã€‚ inherit-any: 返信先ã«å«ã¾ã‚Œã‚‹ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚„ユーザå‚照を追加ã—ã¾ã™ã€‚ 関数`twittering-switch-edit-skeleton'ã§æœ‰åйãªedit skeletonを切り替㈠るã«ã¯ã“ã¨ãŒã§ãã¾ã™ã€‚ ã¾ãŸã€ãƒ•ッタ文字列`twittering-edit-skeleton-footer'ã®å†…容ã¯é–¢æ•° `twittering-edit-skeleton-change-footer'ã§å¤‰æ›´ã§ãã¾ã™ã€‚ * 代替画åƒå½¢å¼ã‚’指定ã™ã‚‹å¤‰æ•° アイコン画åƒã®å½¢å¼ãŒEmacsã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ãªã„å½¢å¼ã§ã‚ã‚‹å ´åˆã€ç”»åƒ ã‚’EmacsãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹å½¢å¼ã«å¤‰æ›ã—ã¦ã‹ã‚‰è¡¨ç¤ºã™ã‚‹ã®ã§ã™ãŒã€ãã®éš›ã®å¤‰ æ›å…ˆã®ç”»åƒå½¢å¼ã‚’指定ã™ã‚‹å¤‰æ•°`twittering-fallback-image-format'を追加 ã—ã¾ã—ãŸã€‚デフォルトã®å½¢å¼ã¯XPMã§ã™ã€‚ 下記ã®ã‚ˆã†ã«è¨­å®šã™ã‚Œã°ã€NTEmacsã§XPMを表示ã™ã‚‹éš›ã®ä¸è‡ªç„¶ãªæŒ™å‹•ã‚’å›žé¿ ã§ãã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。 Thanks to Silver Chariot. (setq twittering-fallback-image-format 'png) ### ãƒã‚°ä¿®æ­£ * Emacs 23以é™ã«åŒæ¢±ã•れã¦ã„ã‚‹urlライブラリã§ã‚‚æ­£ã—ãå‹•ãよã†ä¿®æ­£ * 外部コマンドcURLã§bodyãŒç©ºã®POSTã‚’æ­£ã—ã行ãˆã‚‹ã‚ˆã†ä¿®æ­£ * Native retweetã‚’ã•らã«retweetã§ãるよã†ä¿®æ­£ オリジナルã®tweetã¸ã®retweet扱ã„ã«ãªã‚Šã¾ã™ã€‚ * アカウントèªè¨¼æ™‚ã«ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ã®ã‚ã£ãŸç«¶åˆçŠ¶æ…‹ãŒèµ·ã“らãªã„よã†ä¿®æ­£ * 返信先ã¨ã—ã¦è¡¨ç¤ºã•れã¦ã„ã‚‹tweetã¸ã®è¿”ä¿¡ã‚’æ­£ã—ãæ‰±ã†ã‚ˆã†ä¿®æ­£ `twittering-show-replied-statuses'ã§è¿”ä¿¡å…ˆã¨ã—ã¦è¡¨ç¤ºã•れã¦ã„ã‚‹tweet㫠対ã—ã¦`twittering-enter'ã§è¿”ä¿¡ã—ãŸã¨ãã«ã€ã‚«ãƒ¼ã‚½ãƒ«ä¸‹ã®tweetã«å¯¾ã™ã‚‹ 返信ã¨ãªã‚‹ã‚ˆã†ä¿®æ­£ã—ã¾ã—ãŸã€‚ Thanks to Naohiro Aota. * æ›¸å¼æŒ‡å®šå­"%L"ã®æŒ¯èˆžã„を修正 `twittering-status-format'ã®docstringã®é€šã‚Šã«ç©ºç™½ãŒæŒ¿å…¥ã•れるよã†ã« ãªã‚Šã¾ã—ãŸã€‚ Thanks to Tom X. Tobin. * アイコン画åƒå–å¾—ã®éš›ã«åŒä¸€sentinelを複数回登録ã—ã¦ã„ãŸã®ã‚’修正 1.0.0: 2010-06-05 ------------------ ### é‡è¦ãªãŠçŸ¥ã‚‰ã› #### ミニãƒãƒƒãƒ•ã‚¡ã‹ã‚‰ã®æŠ•稿ã¯ã‚µãƒãƒ¼ãƒˆå»ƒæ­¢äºˆå®šã§ã™ twittering-modeã§tweetを投稿ã™ã‚‹ã«ã¯ã€ã“れã¾ã§ã¯ãƒŸãƒ‹ãƒãƒƒãƒ•ã‚¡ã‹ã‚‰å…¥åŠ›ã™ ã‚‹æ–¹æ³•ã‚’æŽ¡ç”¨ã—ã¦ã„ã¾ã—ãŸãŒã€ä»Šå›žæ–°æ©Ÿèƒ½ã¨ã—ã¦ãƒãƒƒãƒ—アップãƒãƒƒãƒ•ã‚¡ã‹ã‚‰æŠ• 稿ã§ãる機能を実装ã—ã¾ã—ãŸã€‚変数 `twittering-update-status-function` ã‚’ 設定ã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ã“ã®2ã¤ã®æ–¹æ³•を切り替ãˆã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚今回ã®ãƒªãƒªãƒ¼ スã§ã¯ã€æ–°ã—ã„ãƒãƒƒãƒ—アップãƒãƒƒãƒ•ã‚¡ãŒãƒ‡ãƒ•ォルトã«è¨­å®šã•れã¦ã„ã¾ã™ã€‚å¾“æ¥ é€šã‚ŠãƒŸãƒ‹ãƒãƒƒãƒ•ã‚¡ã‹ã‚‰æŠ•稿ã—ãŸã„å ´åˆã¯ã€ã“ã®å¤‰æ•°ã®å€¤ã‚’ twittering-update-status-from-minibuffer ã«è¨­å®šã—ã¦ãã ã•ã„。 ãƒãƒƒãƒ—アップãƒãƒƒãƒ•ã‚¡ã«ã‚ˆã‚‹æŠ•稿ã§ã¯ã€å¾“æ¥ã®æŠ•ç¨¿æ–¹æ³•ã«æ¯”ã¹ã¦æ¬¡ã®ã‚ˆã†ãªåˆ© 点ãŒã‚りã¾ã™: * tweet入力時ã«IMEç­‰ã¨å¹²æ¸‰ã—ãªã„ * 入力途中ã§èª¤ã£ã¦æŠ•稿ã—ã¦ã—ã¾ã†ãƒŸã‚¹ãŒãŠãã«ãã„ * å…¥åŠ›å†…å®¹ã®æ–‡å­—数を表示ã—ã¦ãれる ### 改良 * ãƒãƒƒãƒ—アップãƒãƒƒãƒ•ァを用ã„ãŸtweetã®ç·¨é›†ã€æŠ•稿機能 * 環境変数 http_proxy, HTTP_PROXY を利用ã—ãŸè‡ªå‹•プロキシ設定 * å…¬å¼ReTweetサãƒãƒ¼ãƒˆ * タイムライン表示ã®ãƒ•ォーマット指定å­ã«æ–°ãŸãªã‚‚ã®ã‚’追加 * 一時ファイルを生æˆã—ãªã„ç”»åƒãƒ•ァイル表示方法を採用 * 'timeline spec'å°Žå…¥ã«ã‚ˆã‚‹æŸ”軟ãªã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³è¡¨ç¤ºæ©Ÿèƒ½ * 'timeline spec'å°Žå…¥ã«ã‚ˆã‚‹è¤‡æ•°ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ãƒ»è¤‡æ•°ãƒãƒƒãƒ•ァ表示ã®ã‚µãƒãƒ¼ãƒˆ * `twittering-initial-timeline-spec-string'を設定ã™ã‚‹ã“ã¨ã§ã€åˆæœŸåŒ–時 ã«è¤‡æ•°ã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã‚’表示ã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ * 自動更新ã®on/offをサãƒãƒ¼ãƒˆ(キーボードã®'a'ã§åˆ‡ã‚Šæ›¿ãˆ) * global-font-lockモードã¨ã®è¦ªå’Œæ€§å‘上 * モードラインã§ã®æœªèª­é€šçŸ¥ (experimental) * ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆæŒ‡å®šå­ "%FILL{...}" ã®ä¿®æ­£ * タイムラインã®åˆ‡ã‚Šæ›¿ãˆæ©Ÿèƒ½(キーボード㮠'f' 㨠'b' ã§åˆ‡ã‚Šæ›¿ãˆ) * SSLã®æœ‰åй/無効をモードラインã®ç”»åƒã§è¡¨ç¤º * アイコン画åƒã®éžåŒæœŸãªå–å¾—ã¨è¡¨ç¤º * tweetã®å‰Šé™¤æ©Ÿèƒ½('C-cD' ã§å‰Šé™¤) * 'gnutls', 'openssl'コマンドを利用ã—ãŸtlsライブラリã«ã‚ˆã‚‹HTTPS通信 * HTTPã¨HTTPSã«å€‹åˆ¥ã®ãƒ—ロキシを設定å¯èƒ½ã« * ç”»åƒå–得時ã®å‡ºåŠ›ã‚’æŠ‘åˆ¶ * .emacs ã« (setq twittering-url-show-status nil) を追加ã™ã‚‹ã“ã¨ã§æœ‰ 効ã«ã§ãã‚‹ * OAuthèªè¨¼å¯¾å¿œ 0.9: 2009-12-29 ----------------- ### 改良 * GitHubã¸ç§»å‹• * è‹±èªžã¨æ—¥æœ¬èªžã§Webサイトを開設 * cURLãŒåˆ©ç”¨å¯èƒ½ãªã¨ãã¯HTTPSを使ã£ã¦ã‚»ã‚­ãƒ¥ã‚¢ã«é€šä¿¡ã™ã‚‹ã‚ˆã†ã« * リスト対応 * フォロー/リムーブ対応 * ãŠæ°—ã«å…¥ã‚Šæ©Ÿèƒ½ã«å¯¾å¿œ * ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°å¯¾å¿œ * ダイレクトメッセージé€ä¿¡ã«å¯¾å¿œ * URLã‚’ãã®å ´ã§TinyURL化ã™ã‚‹æ©Ÿèƒ½ * å…¥åŠ›æ–‡å­—åˆ—ã®æ–‡å­—æ•°ãƒã‚§ãƒƒã‚¯ * ReTweetã®å½¢å¼ã‚’é¸æŠžå¯èƒ½ã« * 閲覧ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚„ã€é€ä¿¡ã—ãŸã¤ã¶ã‚„ãã®å±¥æ­´ã‚’ä¿å­˜ * 一度ã«å–å¾—ã™ã‚‹ã¤ã¶ã‚„ãã®æ•°ã‚’パラメータ化 * ユーザーåã‚„URLãªã©ã®è¦ç´ ã‚’TABキーã§ç§»å‹•å¯èƒ½ã« * 'file'コマンドを利用ã—ãŸç”»åƒã®ç¨®é¡žã®åˆ¤åˆ¥ * よりã‚ã‹ã‚Šã‚„ã™ã„エラー出力 * å–得済ã¿ã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿æŒã™ã‚‹ã‚ˆã†ã« * サスペンド機能 * ImagemagickãŒåˆ©ç”¨å¯èƒ½ãªã¨ãã¯ç”»åƒã®ãƒªã‚µã‚¤ã‚ºã‚’行ã†ã‚ˆã†ã« * å˜ä½“テストフレームワークã®å°Žå…¥ * 'Proxy-connection: Keep-Alive'ã¸ã®å¯¾å¿œ * æŸ”è»Ÿãªæ–‡å­—列フォーマット関数ã®å°Žå…¥(twittering-format-string) * HTTPレスãƒãƒ³ã‚¹å‡¦ç†ã®åŠ¹çŽ‡æ”¹å–„ ### ãƒã‚°ä¿®æ­£ * マウスクリックやEnterキーã§URLã‚’é–‹ã‘ãªã„å•題を修正 * ReTweetã®ã¨ãã¯ã‚ªãƒªã‚¸ãƒŠãƒ«IDを設定ã—ãªã„よã†ã« * URLæŠ½å‡ºã®æ­£è¦è¡¨ç¾ã‚’修正 * ãƒ¦ãƒ¼ã‚¶ãƒ¼åæŠ½å‡ºã®å‡¦ç†ã‚’修正 * ãƒ¢ãƒ¼ãƒ‰ãƒ©ã‚¤ãƒ³ã‚’å³æ™‚æ›´æ–°ã™ã‚‹ã‚ˆã†ä¿®æ­£ * å„HTTPセッションã”ã¨ã«ä¸€æ™‚ãƒãƒƒãƒ•ァを利用ã™ã‚‹ã‚ˆã†å¤‰æ›´ * MD5ãƒãƒƒã‚·ãƒ¥ã‚’利用ã—ã¦åŒã˜åå‰ã®ç”»åƒãƒ•ァイルã®è¡çªã‚’å›žé¿ * センティãƒãƒ«ã§ãƒãƒƒãƒ•ã‚¡ã‚’killã™ã‚‹éš›ã®ã‚¨ãƒ©ãƒ¼å‡¦ç† * ã„ãã¤ã‹ã®èª¤å­—修正 ### æ„Ÿè¬ * Alberto Garcia * Jaemok Jeong * Kouhei Sutou * Naohiro Aota * Satoshi Yatagawa * Tadashi MATSUO * Thomas Danckaert * Tsuyoshi CHO * IMAI Toshiyuki twittering-mode-3.0.0/README.ja0000644000000000000000000000211712141747407016053 0ustar rootroot00000000000000 Twittering-mode: Emacs用Twitterクライアント ============================================= Twittering-modeを使ã†ã¨ã€Emacsenã‹ã‚‰Twitterを利用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - web: http://twmode.sf.net - github: http://github.com/hayamiz/twittering-mode 機能 ------ * Twitterã®æ©Ÿèƒ½ã¸ã®å¯¾å¿œçжæ³: * 様々ãªã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ã®é–²è¦§ * フレンドタイムライン * 返信 * ユーザーã®ã‚¿ã‚¤ãƒ ãƒ©ã‚¤ãƒ³ * パブリックタイムライン * ã¤ã¶ã‚„ãã®æŠ•ç¨¿ * ダイレクトメッセージ * ReTweet * ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚° * ç½²å * フォロー/リムーブ * ãŠæ°—ã«å…¥ã‚Š * HTTPプロキシ対応 * HTTPSã«ã‚ˆã‚‹å®‰å…¨ãªé€šä¿¡ 動作確èªç’°å¢ƒ -------------- - GNU Emacs 21 (一部機能制é™ã‚り) - GNU Emacs 22, 23 作者ã¨å”力者 -------------- - Y. Hayamizu - naoya_t - Tsuyoshi CHO - Alberto Garcia - Satoshi Yatagawa - 高山智也 - æ¾å°¾(cvmat) - é’ç”°(naota) - Jaemok Jeong(jmjeong) - Thomas Danckaert - IMAI Toshiyuki å‚考 ------ - http://www.emacswiki.org/emacs-en/TwitteringMode twittering-mode-3.0.0/README.markdown0000644000000000000000000003350112141747407017304 0ustar rootroot00000000000000 Twittering-mode: a Twitter client for Emacs ============================================= Twittering-mode enables you to twit on Emacsen. - web: http://twmode.sf.net - github: http://github.com/hayamiz/twittering-mode Features ---------- * Activities on Twitter * Viewing various timelines * Home timeline * Replies * User's timeline * Public timeline * Favorites timeline * Retweets timeline * Merged timeline * Timeline without tweets satisfying a condition * Posting tweets * Direct message * ReTweet * Hash tag * Signature * Following and removing users * Marking tweets as favorites * HTTP Proxy support * Secure connection via HTTPS (cURL, GNU Wget, OpenSSL or GnuTLS is required) Supported Emacsen ------------------- - GNU Emacs 21 (some restrictions) - GNU Emacs 22, 23, 24 Prerequisites ------------------- - For SSL connection, one of the followings is required. SSL connection is required for the Twitter REST API v1.1. - cURL http://curl.haxx.se/ - GNU Wget http://www.gnu.org/software/wget/ - OpenSSL http://www.openssl.org/ - GnuTLS http://www.gnu.org/software/gnutls/ - For parsing JSON, json.el is required. It is distributed with Emacs 23.1 and later. - For keeping an OAuth authorized token in a local storage encrypted with master password, GnuPG ( http://www.gnupg.org/ ) is required. On Emacs 22 and earlier, either EasyPG ( http://epg.sourceforge.jp/ ) or alpaca.el( http://www.mew.org/~kazu/proj/cipher/ ) is also required. - For displaying icons in formats that are not supported by Emacs and resizing icon images, ImageMagick ( http://www.imagemagick.org/ ) or its compatible alternative is required, e.g. GraphicsMagick ( http://www.graphicsmagick.org/ ). Note that twittering-mode on icon-mode converts retrieved icons into XPM in default. So, icon-mode without additional configuration requires, ImageMagick (or its alternative). - For keeping retrieved icons in a local storage, gzip ( http://www.gzip.org/ ) is required. Quick start ------------------------ 0. Put *twittering-mode.el* in a directory specified by the variable `load-path`. Note that the directories *emacs21* and *url-emacs21* must be placed at the same directory on Emacs 21. On Windows without curl or wget, the directory *win-curl* must be placed there. You can add a directory to the variable `load-path` by `(add-to-list 'load-path "ADDITIONAL-DIRECTORY")`. 1. Execute `M-x twit` to run twittering-mode. 2. Open OAuth authorization page with an external browser, click *Allow*, and enter the PIN code in the prompt of Emacs. If you have introduced the configuration `(setq twittering-use-master-password t)`, twittering-mode will ask you a master password and it will write the authorized OAuth token into *~/.twittering-mode.gpg* (in default) with encryption. Once the authorized OAuth token is encrypted, you do not have to retrieve a PIN code with an external browser. The master password is only required to establish authorized connection to Twitter. 3. Your home timeline will appear. Basic key bindings are as follows. - `V`: Open or switch to another timeline by [timeline-spec](#timeline-spec). - `u` or `C-cC-s`: Post a tweet. - `RET`: Post a reply to the pointed tweet or open the pointed URL with `browse-url`. - `C-c RET`: Post an organic retweet. This is only a tweet citing the pointed tweet and not an official/native retweet. - `C-uC-c RET`: Post an official/native retweet. - `d`: Send a direct message. - `C-cC-w`: Delete the pointed tweet. 4. Add some of the following major configurations to your init file if you like. - To display icons, add `(setq twittering-icon-mode t)`. This may require ImageMagick or its compatible alternative. - To resize icons, add `(setq twittering-convert-fix-size SIZE)`. The default size is 48 pixels. This requires ImageMagick or its compatible alternative. - To keep retrieved icons in a local storage, add `(setq twittering-use-icon-storage t)`. This requires gzip. The icons are saved on *~/.twittering-mode-icons.gz*, which can be changed by the variable `twittering-icon-storage-file`. - To display tweets in the *reverse* order, add `(setq twittering-reverse-mode t)`. With it, the latest tweet is rendered the bottom of the buffer. - To use a HTTP proxy, add the following configuration.

        (setq twittering-proxy-use t)
        (setq twittering-proxy-server "PROXY-HOSTNAME")
        (setq twittering-proxy-port PROXY-PORT-NUMBER)
      
- To change the number of tweets retrieved at once, add `(setq twittering-number-of-tweets-on-retrieval NUMBER)`. - To change the interval of retrieving tweets, add `(setq twittering-timer-interval SECOND)`. You should be careful not to exceed the limitation of number of API calls. - To display the number of unread tweets on the mode-line, add `(twittering-enable-unread-status-notifier)`. - To display the remaining number of API calls, add `(setq twittering-display-remaining t)`. - To change the format of an organic retweet, configure the variable `twittering-retweet-format`. For example, add `(setq twittering-retweet-format '(nil _ " %u RT @%s: %t"))`. For details, see the docstring of the variable by `M-x describe-variable`. - To change the timelines automatically opened on starting twittering-mode, configure the variable `twittering-initial-timeline-spec-string`. For example, add the below configuration.

        (setq twittering-initial-timeline-spec-string
              '("(:home+@)"
                "(:search/twittering mode/+:search/twmode/)"))
      
For details, see the docstring of the variable by `M-x describe-variable`. - To customize the format of tweets, configure the variable `twittering-status-format`. For example, add the below configuration.

        (setq twittering-status-format
              "%FOLD{%RT{%FACE[bold]{RT}}%i%s>>%r @%C{%Y-%m-%d %H:%M:%S} %@{}\n%FOLD[ ]{%T%RT{\nretweeted by %s @%C{%Y-%m-%d %H:%M:%S}}}}")
      
For details, see the docstring of the variable by `M-x describe-variable`. - To inherit mentions and hashtags on editing a reply, add `(setq twittering-edit-skeleton 'inherit-any)`. For details, see the docstring of the variable by `M-x describe-variable`. Enjoy! Usage ------------------------ - Move the cursor. - `0`: Go to the beginning of the line. - `^`: Go to the beginning of the text on the line. - `$`: Go to the end of the line. - `G`: Go to the bottom tweet. - `H`: Go to the top tweet. - `h`: Move the cursor left. - `j`: Go to the next tweet. - `k`: Go to the previous tweet. - `l`: Move the cursor right. - `n`: Go to the next tweet by the author of the pointed tweet. - `p`: Go to the previous tweet by the author of the pointed tweet. - `TAB`: Go to the next thing (link, user name, URL, etc.). - `M-TAB` or ``: Go to the previous thing (link, user name, URL, etc.). - `C-v` or `SPC`: Scroll the buffer upward. - `M-v` or ``: Scroll the buffer downward. - Switch a timeline. - `L`: Open a list timeline interactively. - `V`: Open a timeline by [timeline-spec](#timeline-spec). - `b`: Switch to the previous timeline. - `f`: Switch to the next timeline. - `C-cC-d`: Open the direct messages timeline. This is equivalent to `V` with `:direct_messages`. - `v`: Open the home timeline of the pointed user. - `C-cC-f`: Open the friend timeline. This is equivalent to `V` with `:friends`. - `C-cC-q`: Open a search timeline. This is equivalent to `V` with `:search/QUERY/`. - `C-cC-r`: Open the replies timeline. This is equivalent to `V` with `:replies`. - `C-cC-u`: Open the current user timeline. This is equivalent to `V` with `USERNAME`, where *USERNAME* is your screen-name. - `q`: Close the current buffer. - Update/clear the timeline. - `g`: Update the current timeline. - `C-cC-e`: Erase tweets of the current buffer from memory. - Display replied tweets. - `r`: Display replied tweets or hide them. - `R`: Display replied tweets, retrieve the replied tweet or hide them. - Post a tweet. - `u` or `C-cC-s`: Post a tweet. - `RET`: Post a reply to the pointed tweet or open the pointed URL with `browse-url`. - `C-c RET`: Post an organic retweet. This is only a tweet citing the pointed tweet and not an official/native retweet. - `C-uC-c RET`: Post an official/native retweet. - `d`: Send a direct message. - `C-cC-l`: Post a joke message. - Delete a tweet. - `C-cC-w`: Delete the pointed tweet. - View more info. - `U`: Push the URL of the pointed link or tweet onto the kill ring. - `C-cC-v`: Open the profile of the pointed user with `browse-url`. - ``: Open the pointed URL with `browse-url`. - Change the mode of twittering-mode. - `a`: Toggle the state of the buffer between active/inactive. Twittering-mode does not update an inactive buffer. - `i`: Toggle the state of the buffer between with or without icon images. - `t` or `C-cC-p`: Toggle between with or without a proxy server. - `C-cC-t`: Set the current hashtag. Timeline spec ------------------------ By pressing *V* (`twittering-visit-timeline`) on twittering-mode, you can specify a timeline to be opened by *timeline spec*. A timeline spec can be used anywhere you have to specify a timeline. The valid timeline specs follows: - Basic timeline - `:home` : The home timeline. - `:mentions` : Tweets mentioning you. - `:public` : The public timeline. - `USER` : Tweets posted by *USER*. - `USER/LISTNAME` : The list timeline owned by *USER* and named *LISTNAME*. - Direct message - `:direct_messages` : Direct messages sent to you. - `:direct_messages_sent` : Direct messages that you sent. - Favorite - `:favorites` : Tweets that you marked as a favorite. - `:favorites/USER` : Tweets that *USER* marked as a favorite. - Hashtag - `#HASHTAG` : Tweets including *#HASHTAG*. - Retweet - `:retweeted_by_me` : Retweets that you posted. - `:retweeted_by_user/USER` : Retweets posted by *USER*. - `:retweeted_to_me` : Retweets sent to your home timeline. - `:retweeted_to_user/USER` : Retweets sent to *USER*'s home timeline. - `:retweets_of_me` : Your tweets that have been retweeted by others. - Single - `:single/ID` : A tweet specified by *ID*. - Search - `:search/QUERY-STRING/` : Tweets matching *QUERY-STRING*. In *QUERY-STRING*, */* (slash) and *\\* (backslash) must be escaped as *\\/* or *\\\\*, respectively. - Alias
You can define aliases for timeline specs. By defining a short alias as a long timeline spec, you can refer it more easily. There are two types of alias, *simple* and *functional* as below. Both types are defined in the association list bound to the variable `twittering-timeline-spec-alias`. - `$ALIAS-NAME` The timeline spec bound to *ALIAS-NAME* in `twittering-timeline-spec-alias`. - `$ALIAS-NAME(ARGUMENT)` The timeline spec generated by calling the function, which is bound to *ALIAS-NAME* in `twittering-timeline-spec-alias`, with the argument *ARGUMENT*. The function can be specified as a symbol or a lambda expression. Functions must receive one string argument. As an example, consider the following definition of `twittering-timeline-spec-alias`.

    (setq twittering-timeline-spec-alias
          '(("FRIENDS" . "my-account/friends-list")
            ("related-to" .
             (lambda (username)
               (if username
                   (format ":search/to:%s OR from:%s OR @%s/"
                           username username username)
                 ":home")))
            ("related-to-twitter" . "$related-to(twitter)")))
  
With this configuration, you can use the below aliases. - `$FRIENDS` is equivalent to `my-account/friends-list`. - `$related-to` is equivalent to `:home`. - `$related-to(twitterapi)` is equivalent to `:search/to:twitterapi OR from:twitterapi OR @twitterapi/`. - `$related-to-twitter` is equivalent to `:search/to:twitter OR from:twitter OR @twitter/`. You can use an alias on definition of other aliases, but an alias including a circular-reference is forbidden. - Composite timeline spec - `(SPEC1+SPEC2)` : The timeline generated by merging two timelines, specified by *SPEC1* and *SPEC2*. - `:exclude-if/FUNC/SPEC` : The timeline equals *SPEC*, except that it does not include tweets that the function *FUNC* returns non-nil for. *FUNC* must be a function that receives an alist corresponding to a tweet as an argument. A lambda expression and a symbol bound to a function are valid as *FUNC*. But a symbol name must not include two special characters, "(" or "/". You can specify any timeline spec for *SPEC*. For example, you can ignore tweets including "WORD" from the home timeline by the following timeline spec; `:exclude-if/(lambda (tweet) (string-match "WORD" (cdr (assq 'text tweet))))/:home`. - `:exclude-re/REGEXP/SPEC` : The timeline equals *SPEC*, except that it does not include tweets that match the regular expression *REGEXP*. In *REGEXP*, a slash must be escaped with a backslash. For example, tweets including a slash are excluded from the timeline corresponding to the Emacs string literal `":exclude-re/\\//:home"`. Authors & Contributors ------------------------ - Y. Hayamizu - naoya_t - Tsuyoshi CHO - Alberto Garcia - Satoshi Yatagawa - 高山智也 - Tadashi MATSUO (cvmat) - é’ç”°(naota) - Jaemok Jeong(jmjeong) - Thomas Danckaert - IMAI Toshiyuki See also ---------- - http://www.emacswiki.org/emacs-en/TwitteringMode twittering-mode-3.0.0/TODO0000644000000000000000000000011612141747407015267 0ustar rootroot00000000000000 == ToDo List == - use temporary buffers for http request - write more tests twittering-mode-3.0.0/VERSION0000644000000000000000000000000612141747407015645 0ustar rootroot000000000000003.0.0 twittering-mode-3.0.0/cert/.nosearch0000644000000000000000000000000012141747407017327 0ustar rootroot00000000000000twittering-mode-3.0.0/cert/Equifax_Secure_Certificate_Authority.cer0000644000000000000000000000216712141747407025521 0ustar rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- twittering-mode-3.0.0/cert/GeoTrust_Global_CA.cer0000644000000000000000000000232412141747407021631 0ustar rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- twittering-mode-3.0.0/cert/PCA-3G2.pem0000644000000000000000000000214012141747407017172 0ustar rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE-----twittering-mode-3.0.0/doc/.nosearch0000644000000000000000000000000012141747407017137 0ustar rootroot00000000000000twittering-mode-3.0.0/doc/Makefile0000644000000000000000000000014312141747407017004 0ustar rootroot00000000000000 .PHONY: all update-po all: update-po: $(MAKE) -C web update-po $(MAKE) -C manual update-po twittering-mode-3.0.0/doc/manual/Makefile0000644000000000000000000000023312141747407020261 0ustar rootroot00000000000000 .PHONY: all update-po clean all: twmode/twmode.html update-po: twmode/twmode.html: twmode.texinfo texi2html --split chapter $< clean: rm -rf twmode twittering-mode-3.0.0/doc/manual/fdl.texi0000644000000000000000000004415312141747407020272 0ustar rootroot00000000000000 @appendix GNU Free Documentation License @cindex FDL, GNU Free Documentation License @center Version 1.1, March 2000 @display Copyright @copyright{} 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other written document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (For example, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, whose contents can be viewed and edited directly and straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup has been designed to thwart or discourage subsequent modification by readers is not Transparent. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed for human modification. Opaque formats include PostScript, @acronym{PDF}, proprietary formats that can be read and edited only by proprietary word processors, @acronym{SGML} or @acronym{XML} for which the @acronym{DTD} and/or processing tools are not generally available, and the machine-generated @acronym{HTML} produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies of the Document numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access to download anonymously at no charge using public-standard network protocols. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has less than five). @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section entitled ``History'', and its title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item In any section entitled ``Acknowledgments'' or ``Dedications'', preserve the section's title, and preserve in the section all the substance and tone of each of the contributor acknowledgments and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section as ``Endorsements'' or to conflict in title with any Invariant Section. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections entitled ``History'' in the various original documents, forming one section entitled ``History''; likewise combine any sections entitled ``Acknowledgments'', and any sections entitled ``Dedications''. You must delete all sections entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, does not as a whole count as a Modified Version of the Document, provided no compilation copyright is claimed for the compilation. Such a compilation is called an ``aggregate'', and this License does not apply to the other self-contained works thus compiled with the Document, on account of their being thus compiled, if they are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts may be placed on covers that surround only the Document within the aggregate. Otherwise they must appear on covers around the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English version will prevail. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. @end enumerate @page @appendixsubsec ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have no Invariant Sections, write ``with no Invariant Sections'' instead of saying which ones are invariant. If you have no Front-Cover Texts, write ``no Front-Cover Texts'' instead of ``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: twittering-mode-3.0.0/doc/manual/twmode.texinfo0000644000000000000000000001105112141747407021516 0ustar rootroot00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename twmode.info @settitle Twittering-mode user's manual @c %**end of header @copying The manual for twittering-mode users.. Copyright @copyright{} 2010 Yuto Hayamizu @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. A copy of the license is also available from the Free Software Foundation Web site at @url{http://www.gnu.org/licenses/fdl.html}. @end quotation The document was typeset with @uref{http://www.texinfo.org/, GNU Texinfo}. @end copying @titlepage @title Twittering-mode manual @subtitle The manual for twittering-mode lovers. @author Yuto Hayamizu @page @vskip 0pt plus 1filll @insertcopying @end titlepage @c Output the table of the contents at the beginning. @contents @ifnottex @node Top @top Twittering-mode manual @insertcopying @end ifnottex @c Generate the nodes for this menu with `C-c C-u m'. @menu * Getting started:: * Introduction:: * Copying This Manual:: * Index:: @end menu @c Update all node entries with `C-c C-u C-n'. @c Insert new nodes with `C-c C-c n'. @node Getting started @chapter Getting started @section Installation @itemize @bullet @item Download the latest twittering-mode from @uref{http://twmode.sf.net/,http://twmode.sf.net/}, and expand it. @item Copy following files and directories to the same directory, which is included in your @code{load-path}: @itemize @bullet @item @file{twittering-mode.el} @item (Windows users only) @file{win-curl/} @item (Emacs21 or older users only) @file{url-emacs21/} @end itemize @item If you are using GNU Emacs on Windows, you might need following libraries in order to display images(png, jpeg, gif): @itemize @item @uref{http://gnuwin32.sourceforge.net/packages/jpeg.htm,GnuWin32 Jpeg} @item @uref{http://gnuwin32.sourceforge.net/packages/libpng.htm,GnuWin32 LibPng} @item @uref{http://gnuwin32.sourceforge.net/packages/giflib.htm,GnuWin32 GifLib} @item Download binaries and copy *.dll files to the directory where emacs.exe exists. @end itemize @end itemize @section Quick start Add following code to your @file{.emacs}: @example (add-to-list 'load-path "/path/to/installed/dir") ;; if you need (require 'twittering-mode) @end example and execute @example M-x twit @end example Then you are prompted to enter your Twitter username and password. After that, your friends timeline will appear in @code{*twittering*} buffer. @subheading Browsing timelines You can see some kinds of timelines on twittering-mode. @itemize @item @code{g}: Reload current timeline @item @code{C-c C-f}: Friends timeline @item @code{C-c C-r}: Replies @item @code{V} and enter @var{USERNAME}: Show @var{USERNAME}'s tweets @item @code{C-c C-u}: Your tweets @item @code{C-c C-g}: Public timeline @end itemize Following commands help you move around a timeline. @itemize @item @code{j}: next tweet. @item @code{k}: previous tweet. @item @code{h}: move to left. @item @code{l}: move to right. @item @code{i}: on/off icon-mode @item @code{TAB}: next interesting things(usernames, links ...) @item @code{G}: go to the end of the buffer @item @code{H}: go to the beginning of the buffer @end itemize @subheading Posting your tweet @itemize @item @code{C-c C-s}: Post tweet from minibuffer. @end itemize @subheading And more settings Some more settings will make your twittering-mode life better. @example (setq twittering-username "YOURNAME") @end example @node Introduction @chapter Introduction @node What is twittering-mode? @section What is twittering-mode? Twittering-mode is an Emacs major mode for Twitter. You can check timelines, tweet, mark posts as favorites and so on with Emacs. @node Supported platforms @subsection Supported platforms @itemize @bullet @item GNU Emacs 23 @item GNU Emacs 22 @item GNU Emacs 21 (some restrictions) @end itemize @node Features @subsection Features @itemize @bullet @item Feature 1 @item Feature 2 @item Feature 3 @end itemize @node Copying This Manual @appendix Copying This Manual @menu * GNU Free Documentation License:: License for copying this manual. @end menu @c Get fdl.texi from http://www.gnu.org/licenses/fdl.html @include fdl.texi @node Index @unnumbered Index @printindex cp @bye @c twmode.texinfo ends here twittering-mode-3.0.0/doc/web/.htaccess0000644000000000000000000000005512141747407017721 0ustar rootroot00000000000000 AddLanguage ja .ja LanguagePriority ja en twittering-mode-3.0.0/doc/web/Makefile0000644000000000000000000000375612141747407017576 0ustar rootroot00000000000000 CATALOGS := ja.po LANGS := en ja MARKDOWN_DOCS := \ index.text \ how-to-contribute.text \ screenshot.text PUBLISH := ./publish.rb RM ?= rm -f HTML_DOCS := $(subst .text,.html,$(MARKDOWN_DOCS)) HTML_ASSETS := style.css images .PHONY: all clean upload update-po publish .SUFFIXES: .text .html all: publish .text.html: $(PUBLISH) header.rhtml footer.rhtml $(PUBLISH) -H header.rhtml -F footer.rhtml \ -d lang=\"en\" -d langs="\"$(LANGS)\".split" -d file=\"$@\" \ -o $@ $< upload: upload.bat @(! [ -z "$${SF_USERNAME}" ] || (echo "Environmental variable 'SF_USERNAME', which is a username of sf.net, is required."; false)) sftp -b $< $${SF_USERNAME},twmode@web.sourceforge.net upload.bat: $(HTML_DOCS) Makefile publish files=$$(find -name "*.html"; \ find -name "*.html.??"; \ find -name ".htaccess"; \ find -name "*.css"; \ find -name "*.png"; \ find -name "*.jpg"); \ dirs=$$(echo $$files|xargs -n1 dirname|sort|uniq); \ (echo "cd htdocs"; \ echo $$dirs | xargs -n 1 echo "-mkdir"; \ for file in $$files; do echo "put $${file} $${file}"; done) > $@ twmode.pot: $(HTML_DOCS) xml2po -k -o $@ $(HTML_DOCS) for catalog in $(CATALOGS); do \ [ -f $$catalog ] || cp $@ $$catalog; \ done update-po: twmode.pot Makefile for catalog in $(CATALOGS); do \ xml2po -k -m xhtml -u $$catalog $(HTML_DOCS); \ done publish: $(HTML_DOCS) $(CATALOGS) for catalog in $(CATALOGS); do \ lang=$$(echo $$catalog|sed 's/.po$$//'); \ [ -d $$lang ] || mkdir $$lang; \ cp -t $$lang -r $(HTML_ASSETS); \ for text in $(MARKDOWN_DOCS); do \ html=$$(echo $$text|sed 's/.text$$/.html/'); \ $(PUBLISH) -H header.rhtml -F footer.rhtml \ -d lang=\"$$lang\" -d langs="\"$(LANGS)\".split" \ -d file=\"$$html\" --po-file=$$catalog \ -o $$lang/$$html $$text; \ done; \ done clean: $(RM) *.html *.html upload.bat for catalog in $(CATALOGS); do \ lang=$$(echo $$catalog|sed 's/.po$$//'); \ $(RM) $$lang/*.html; \ done twittering-mode-3.0.0/doc/web/footer.rhtml0000644000000000000000000000202212141747407020465 0ustar rootroot00000000000000
twittering-mode-3.0.0/doc/web/header.rhtml0000644000000000000000000000260312141747407020424 0ustar rootroot00000000000000<% lang_menu_items = langs.map do |l| rel_dir = "../#{l}" if lang == "en" && l == "en" rel_dir = "." elsif lang == "en" rel_dir = "./#{l}" elsif l == "en" rel_dir = ".." end "" end.join(" ") %> Twittering-mode
<%= lang_menu_items %>
twittering-mode-3.0.0/doc/web/how-to-contribute.text0000644000000000000000000000361312141747407022425 0ustar rootroot00000000000000# How to contribute to twittering-mode ## Code Recommended way is to fork on [GitHub](http://github.com/hayamiz/twittering-mode). Visit there and click 'fork' button. Of course you can clone the git repository in the ordinary way: git clone git://github.com/hayamiz/twittering-mode.git ### How to create patches We recommend to follow these steps: 1. Pull the master branch(`hayamiz/master` on [GitHub](http://github.com/hayamiz/twittering-mode)). 1. Create a **topic branch** and make some modifications. 1. Before sending a patch, **rebase** the topic branch to the master. 1. Now it's ready to **post** your patch. Send a [pull request](http://github.com/guides/pull-requests) on [GitHub](http://github.com/hayamiz/twittering-mode) (if you have forked) and write a mail to [twittering-mode ML](http://sourceforge.net/mail/?group_id=288615). #### Topic branch (now writing...) #### Rebasing a topic branch (now writing...) #### Posting your patch (now writing...) ## Communication All your voices should be sent to [twittering-mode ML](http://sourceforge.net/mail/?group_id=288615). ### Bug reports If you find some bugs in twittering-mode, please send a mail with detailed information to [twittering-mode ML](http://sourceforge.net/mail/?group_id=288615): * Platform (Windows, Linux, Mac OS X, ...) * Kind of Emacs and its version number (GNU Emacs, XEmacs, Carbon Emacs, ...): you can check it by `(emacs-version)` on `*scratch*` buffer. * What you *wanted* to do, what you *actually did*, and what *happened*. * Any other information you think it's important. If you have enough time, please try to reproduce the bug in a minimal environment. You can launch Emacs without loading any scripts by `emacs -Q`. This saves our time so much :) ### Feature requests and others Join [twittering-mode ML](http://sourceforge.net/mail/?group_id=288615) and let's talk! [« Back to top](./index.html) twittering-mode-3.0.0/doc/web/images/bottom.jpg0000644000000000000000000000514212141747407021400 0ustar rootroot00000000000000ÿØÿàJFIFddÿìDuckyPÿîAdobedÀÿÛ„      ÿÀ ÿÄy a#Ó–W1AQ¡ Qa‘Ñ’!1qÁ±2ÂÿÚ ?ñÂ×^{zÝøãø¹ïùmÓžšóö޼þx¨ ŸÚzo&ß·úÃíþ™ú¿¿áJbX¶¿êON{ëÏÕúñùæ %ÿIê\›~¯ë?·úDKê¾ÿ†S /^zúÝ8çø1,èû^<½9ëñùÛBûåXú?¡æIúJûGÓ}c¿·çLDUö½_¿±ß¯^¼Ý¼^'N¼÷ç¯N½yíÏ?qÇëƒUû¤’_/•“þQ ¿åkvÊgª0¨F;ÞT^c¡Í_,‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùb÷l¦z¨ „aÞT^c¡Í_,^í”ÏUaPŒ;Ê‹Ìt9«å‹Ý²™ê L*‡yQyއ5|±{¶S=T …B0ï*/1Ðæ¯–/vÊgª0¨FåEæ:ÕòÅîÙLõP&ü¨¼ÇCš¾X½Û)žª¡w•˜èsWË»e3Õ@˜T#ò¢ójùdñ[¶S=T …B0ï*/1Ðæ¯–s—~ùV>ñèxR~ùR¾Ñ÷4Ÿ_ØéíøÕ}¯{×éìtëÛ§_7_ŸÉ߯øëß·^;qÇÏÇ<ñûäãýÒi¯—ÎÉ($þ?–jz¾<]8ëñø2,Úßñûø‡l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€l;`ÛØvÀ¶°í€Çøý|fÿÙtwittering-mode-3.0.0/doc/web/images/content.jpg0000644000000000000000000000070112141747407021542 0ustar rootroot00000000000000ÿØÿàJFIFddÿìDuckyPÿîAdobedÀÿÛ„      ÿÀ ÿÄ_ q4´w8 1qÁ2ÂÿÚ ?ÆÓ¸·ÐwË.»îŽ@”ÐF¶õ㥻J5¬ß¥ V&¿©½wÚü ’måÇ{v„mX¾% ±l£¿ÿÙtwittering-mode-3.0.0/doc/web/images/famfamfam-logo.png0000644000000000000000000000521512141747407022752 0ustar rootroot00000000000000‰PNG  IHDRxi¹sRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ ':²}qˆ IDATXÕ˜yUÅÆ§ïòÞ¼Ùg`` 1 jMŒU£¤4ÆBˆ%nÑ¢(—X¦ÔHJ䟣B1åP4ƨq!D‚!(²ˆ0,3Ì0˃yoÞrß½?ÞyÛ•®®©yݧ»o}Îw¾nÑ®GKZSZDh¬ÅPþO­áÀQ¿Ý4 Œ{Stô PYFM9%–¤;Pf3¨êp/ÈÊÓŒ ´¤<ÚDh0 ©‚®¸K— P¡¨5ƒ—íÎóª * 7EH©™Â´ÜÿS£5™4 Ã4gèÉmQg\7M‡‡XÔ‰Ž%5›Œ`²Ø6Ÿ!5¹–¯Ú8í.B&¸žÛ..0~}#3Ÿ$l1a8ëæù§RT¦ÏgÕv€i“xéΓþGOÒÑ úìÜO­y±“91áÏ'1£®`â¿uqÛ€ïGø×)kMÛHhÍo‡rOcëG\hPQjVÎØI¼šßr„îá!—Ä™üµ†sò»ö³à©eòé, pÒ›ùYŠvÐX¨Ò7 ¦39úÍO¡×cÞë~˜vp\>ÞÁ–½;n‹òÆ&æŒ ¤5NP-ZT„¿G³NÄëÑâ‰]üQã¤KÂRkÖÇètq4iׇÀ`åLÑð<ãáÆ~ÏŒ§qÀëäÃíº)âìNp@ãx8àåÅ¡¡R]\•ä>¹+Ƨû0"´FÙòU0áD"üfY@×ý/c¥@˜0ÔdH^­·Š‡~Ôãÿóf”JJsÿáâÉEx±+ÈÍa›AVA­-àBšc|!ˆ zùÊ¥·M@0;Y#%\´“ o«j`Ûü÷!ÂçÉô…ºmòÞ9kt°å'{q=ÿH²;N¤y[1­ƒ†3#¬à‰ýžûnâa•E‡…íÌiXÖ€Å<ØH™ûWóB– °odú~]ò=: ™F·°Ì ’mw莱»š3ƒ€–f6quþØ;âìVØyçš¿¹@¦ÎvÏ®Dk E™ ðÚ†\WqÒKðÌŠT"¬ÛIû±¯™»ô°úË ‰ïaÅü6܆hÍÊãs9a_ì¢Öw” ‚É.¾ÇrÂ$-¬èwjAÚyW° è۔쾗|pÞxn› °}?;‚³ip÷ Þòt)o|›òeŠc."œa„…ÖÄ\º2Ïí¹ÃKx,ëæoØ.’!ÖÃwWqH7;tÚ+Êšy6K,Ù¿-¼\D&y@'Ò¬ùœÕŸñÁgügOñd —c…¦Oæª)ˆ²¹û…€eLƒ÷>Ek´fíZ»ýÆ„Ž{¬±ú8«óY¢x²Õ=hHxÌÌ}$5q·¢ç›öÖ÷°µ×ïÝ– Íˆ¨€ƒIq$ʦn6v³!Îî¢Þ}<–uäÑÜUÉ÷@+BGYYJÓiAâìÉГ=¤C,ÍЫъ²~û< wqÉ£L}„©pë¢âð~s¶‰ëqÞxNBEÓ`ýnbÉ‚MhÍeg‘tP³+A„—ײp=¦MÄ-X%ìJòÃ]LÝÃÔ=ü¾µ˜R·û‡uM7Ô<ÔZ¼3êÊ èK‰Hj^¢' ƒ[¹~7lef3Obç´ðªÂ 1Ô¦¡‰«]‚êd¥ ùX{dFp‹‡£IæE@ã`±AXPCù¹Gªh%„mÂ6a‹Yœ˜¶ìCkê+9m8Ueœ6 ×ãxo{Ü~1¶‰Ö¼µ‰–.€%$ãÜ9- î„2EXVa.BsšÍ½3êýÆ +¡Õac¼È­8¿%lî%î²½—51”0ÒæÊZ<]ʆ"¤I.ЗÊ> WÁwV˜a•|W£;XÝÏã}Æ™QÌ1)c?O¹$È¡ Æ©ŽÊ2®<Ð4Öìøµ Ĉ0ïZ¿ñO³˜x/e!ž|§Y“ nâŽçY<ø µ¤3X&÷Ngpui&lrE- 0)RÐ;ÿˆ/6fÖù-¿¨cUaá(“ ¯ŸÃm~ZÍ›Q޹,íâËe‚§™Q‡¨BSÍDÖxUœžOЬÒhänñ³wp òÜn*$_»†s;Y+|x”åÏ#=–¹ùª#èÁU¼up°ð¨áܱܘܳìfdo1iÁÔAžÎ,)º‰GYanfaœ½ Ó¢¶‰«Úx;èÊ®t`(>ÞU -;Äҵ̼ ðÎ[Çù§²j;ñ¤ß2¢žõì8ômó¾Ðé°3‰!ˆøâëeØ‘`oŠ1…O"eŠU°>Ž)´:××3Òæ¸{’£ƒ2ôD³› 9GGq‰§9bHþ:Î0*Ik/û¦Fá²eòeÃ.” 5¦Ay(W-­±LÞÝ0ê‰}ù!BoŠy× ÁËcmhКP®rÕ´&¤x¸%`ÔìÁ$=Ÿú an㉠;>ÌÒ¬Z,ƒH_- öHw°ªtàî‘hâšbÅûµËjDxæ}Dˆ§x÷¦ŒËÅa,ÉÈÛ)óïmÇ eÊ8>Ý0®‰ËÏ9¡ ;šídYlçß‹}Ë0y'iÍòãô”¸êµD®F„:ƒÑ¡`Å=ÊšL/{³Òb¯æ=æI’ƒŸp¹A¤™§†1£h` g+Bš´F×òƒrN9¡ýw 5 UL›Dmu}õ¤AL§‰Æy{sîU¤ÿ–vóq2xš[/:1·Òlˆ¡A„S˨7©Ë«'‡¨2|I·;ðܹh$z=nò™çÛßSzØžâˆÆ 3¬œ±ÕÙjRYÉ„£Iq¤‡/ŠšT5ðGÑü*èR“}¸° ì 48÷*«°Mf_Ð;ïZLEu„{—`›Ø¶é#.¬ q=<ë.È]v-ÓlÁL 8ßåÇ ) ¸ ¢àK¸®À–tQXB¨/=iÍE•T 2˜5ÈwgÉ®¥üQX‚%췙ŊÈÉÜQz5oà2Á2©:ÊrA –Ê»gãw Û¦¡œqýð*ßFIîáß4ZSìG¢8.hª±Í‚ÞìEâp—ÿ5åtŨ¯$Ò—¤ÚŽ‘L3²/ G¢Eÿ¶0¤ä¹®Ý!¥Ñšz‹rp <â ‚‚:“Ž Z3È"¢üïjq°…ÁVî÷ƒ>ü”[TÍœà`€1´PZ Ñ ‡cY¬°²ÿ!³T#HŠ6P¡>Âqéuˆ‚XÔý#ô0ÿ­±¨ÓIEND®B`‚twittering-mode-3.0.0/doc/web/images/lang-en.png0000755000000000000000000000114112141747407021417 0ustar rootroot00000000000000‰PNG  IHDR ù€šngAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<óIDATxÚbLN?Âÿþ1üûÃÀð‹á?œ%¿çÿ·¯o^¿òÿP Ãrn@Ðþ+0Dc0P,Jî÷¹eÒ >Ü{ê2}R¦©jÆL±›{Dˆ`·–¿bj°´X~èßß @ôëÏÿ¿ÿAŒþŸe¨fx÷áÓG†/Ÿ¾}cŒò¼qæ@mØ4h’}ݯ¯_¿ZUþ|ÿþ½~ñ–’Ÿ>}úðáûwïÞ¼yó÷oô—/ŸNž<@, ÿ˜Žwofü÷ï¿k ËŸß -œW~þùzš+n Ð`†/_þÿøñï×/Τ®?WÏCrò »m«~~üøÑ¬äçëׯ™ Ÿ>~ü˜Á+ÄìW¯^½|ùòùóç×ÿýݲe@±dÁÆ?[Øÿýù/ÑòíïϲiýãóöšÍðó'¢Ùá7îÞ ÆGîJJÊ-ùtÓÿÿÿÀ΀³!¥ÈÊ0eÀb‘^0Ñ#„ië¾ÿ/_2|øt1ýøñèú_¿þÃ@KøŸÜ Æ[·.ËË«}feåùõãÿ qÿQÁŸ?¿üb`xò÷ï?¡I ÄÂÝUþò?(?A"£?>30|£ß`.D À [¾ú0ý+IEND®B`‚twittering-mode-3.0.0/doc/web/images/lang-ja.png0000755000000000000000000000064412141747407021416 0ustar rootroot00000000000000‰PNG  IHDR ù€šngAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<6IDATxÚbüúõ+ø÷ï„DfÀÁŸÿˆ(ÊÅÅ$ÿÿÿѦÿÿ‡SHàÅ‹ÄSôÁØ·ïÿá#ÿÿúofößË ®š‘‘h @± «^»öÿÂ…ÿÿüùÿë÷ÿÇÿ?}ò?9¢âB€b‚»$ôöíÿÕ«ÿÿþýÿ×/(Z¼äÿãÇpKþüù@LÏÁÝøÿãG¨Òß`òË—ÿþ‡YT @,@ ãÿgýÏÄV ¶hÐ,))¨þÿ* &¸ñ@õÿ……ÿûûÿÿù ªHÿ—“ƒ‡ ¸“ :þsqýßµ ¤ÚÎîL ÜÇ@ô@1¾}û–. e@ÜÉÈøÿ?BˆïÞ½ @ Þ½{‹HÄ –&“lŸäº‰=IEND®B`‚twittering-mode-3.0.0/doc/web/images/logo.png0000644000000000000000000004457712141747407021057 0ustar rootroot00000000000000‰PNG  IHDRhK]ªùsBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î< IDATxœí½y&Çuø{™Uõ=='0ƒÁ`@Ü÷E€"A ‘”xX¢%^¶HÙŠ°BÚC»Ö†ÃöŽØØðnÄÆÆîz¥Ø5Å];,ëXË’ÅC@ΜSpŽ`A€SpVówœ‹×8ò-Ðë>òMÚ¤Mºt)»Ð8ÿÁp9(8€E Rʃ´"¥Œ¿ÎzLMÖ0G°PüÓj(ÇÀlÈVƒœö ÍÏpäþ?›´I›´Ik 78@7Á™È8 0²PTC)ã?uoEÎc*9À:8ë4¬Õá'lë”Õ°PüØMÞ¤MÚ¤³¤74@SòÓµÀY©¤ ´2PªbPÖ´ªùwe@ )iÑ:Šàl3X›Á˜†,e ë`á›5@ZÌ„†>þ¦¥t‰ÚäÇ&mÒdZ géz÷Äò½#‡¶æ\GMYWÈT¥Kh]Bë ™®¡TM5H±­š[$8C0NÃÙÆd¨MMÆæ0Æ¡öZ; ›ÁBÃ9îƒ5-úÒåïú¨=NšÐo¤qoÒÅO«íg/¤@¯ ×¡Û©ÑË º¡Ð JœxTÆbT†Y…L32ÊP©…2¨µA® FÊ@!¬«¬#œ£ 5k äŠy­yÀƒ1X!«KDŽœ3 šÐÉäà ­Xµq( aT9(Ëje$$ñÒ÷&]ZÄJ‚Òû9Ö:Ô–ü‹Áëßlj4¯$ >EÆ“kϼB¦ Uípl‰í²®Žöà ÑùÉ4!gXƒVĶbå5èL—Èr颢Ûa®[¢_Xô …~®Qè ]ÝCA],Õ (­Á°6(´C¦jd¤‘© µ®ajƒy] ª;XXQ8aÛU-`ÉAÁBò­r¥Pd„í]Â|O8¾l±R: ö¶0{öWgA)ßeVhB7'Ì„~Aèçüÿ]}S‹Aå0¨–•…ªø^ç#f.ÎÅ“.m"ïÑœ;ak—påV 8¶dqjņ9(ÊðúNÅÐéÄ""(dš·¥ÝœðO>° WlÕxé´Á?ùÜi8ÀoÃlb ¹X¶£Z'EÞIè#3´ª‘é ¹!ÏGè%ºE…^a±¥CØR串 îØòlÑ»j7Âóƒà©Å‡¡©ôVf M9líuñßÝû.ÀWž=Š?{ü8Œq¨”C­-ŒuPŽ#<Éî„ÐÍï¿¥‹OÞ;øŸ¾´€¯T~›åÍJ‰úbàï,"Jµþ~AØÚUؽEá#wõqëž Z±ïù5þãc+8¼À»ká?î"[ü7éR§°»C4iä èdÀ{süÃ÷nüþ#ËxèàЛ –8 ëõÎePcH:Ÿ) ã$5¨w2BG˶¼i¹(ˆ-ÚkÏðµ5Ò0;Ž}®‘g% ]¡“ôr`®Ð¸nî6¼cÛ§°E_&-!£nì¿ oßñK˜+ ô ^Aèå@/wèä‘ ²ûÈ3­ ð"á9®”óvY ð ¡PGŠŒ+‚n9/¢`wfy™+—mQøûÎ㎽9´ßJ*®¿,Ãßpû·kô …NÎf1«mÒ&m4‘ŸWÊkÐ…ÿɼÌy9¼0²Øè4䄽î­"óNÿ·B³íT+‚J".†¹Ô4møm I˜…‚ ™„J;ŽæP5òÌ “Yt2`.ïã¶-ïMÅ=ÅM¸vîô2…NF(ròöêxÖÎ/b„L9@±ß*ÍH¹"ä P®=87À‹€¹«µ~'b)4ÐË ¿x[Û{c:þûÇïî£_°Æ) ‘bϾø9°I—ÉÌÄÌ_™—™–ðÐ ÓÇq hLŠÌ;°Ò¿gZ&ï<.îÉ#štÍ¡ #±ÉÃú¥°»¸…š›ÙæÞÎM(t†\)äÉKÒdÚAkçù7EœÈ¤«è=Xs̃›ìf. `Jù#ÑŒpóî|æ½×ìʰµË[ÎLE3É&mÒù ^D„¿Éôáwò—ר'«3ˆfq¦Zræ¿ +ËÅ8‰(µ18»´„¨7}"×nù'0—í\µù¾Ú­”ßùOòöJ_0ÊÛÃÁF ¦§ 9 @%iÆçõ Ô\ÖË [:³ŸLvoÑaìÒÑiw½ã»Ð<lÁû,Z}Ò 7Ê@?Þ630 «Þ;t‹cIM"ÔxÁ§¦9H^b{ %Úµ&ç3ï\ÓÎ?ÅQØϬ՞0î>_Ž`Ts¤F/Ÿ-¶§væßÓ»7z|ëáߤ/_æ¹ÊÀÄëfñá,x°.>ŸOÿ#öå¶l¥ÊјܹÖÿg<â\æÙšŠ%Qûÿ= Šk<!‘eV‡%ñ`µŽÎœˆn⯭k(Ñ¢â”#_¬ˆHÙPÀYk¬­`,p²zµ"£îÔþ(_ðì‚#Yƒ±ÿ¨5ˆ#^.l“Øt×´pÅávfÆ"ØæSX Ú¬™Ä®5¾—±gÎxžsü‘R%?=^㎽ÓÍGÏ,m¸Þµ¢ó5¾i²¶žöÓ?\ –>ž &¶›òcÂýIW㳈µðXÚ˜Öþ´gL¢öûm*–‰Æ;a¬é÷ä!ŵ¯=ólmÕì¨ùpMðÛzç5«8Œ(¦ê¦m´;3+ClŒYSmYfrüqÄ@JÐpNûªt¬Ó¨¡² •µX©Wðìà›¸¥ÿÁ‰-.ÔGðâà ”Æ 6ŠÃp¬òÆ‹ØiEš´ç•‚Vœ5ç'iÈÊÝÖ ™¿Þþ¯´´·Ì@ÑS>1ï¨!|c|CŒ_g>ÆkÍÜ›9Ùü/œqZY‡²vøêÓC\»+Ã\1Þ«Ú_80@Y•q!å[†šN‚_c,éLú¯’g¶Û—¶œoßµ.x½@ºýÖ#@st*Û0Õ­ÏÓjW4úšôQ%<Œ™ô€ð lŒœÊ³ÃOÑ8Æ´4jø,øµóXÂDsžWkïÿL€ž´2qìnG;Œ2Ncæjâ‰E–&¶3­(NCKJ®o× ÂDÓë5HœbúG'K&4@ pàrÀf€)P›•ÉQÕ£Š0Ê,bw~3væ×4ÆbQãéåoaXW`d*£«áTd'A!#…\idJ!W F+Ö²Í:¤x·x,޵"ã »Bó¸*8N½³œe—ò-­™ì× qv"ôœDã×ÀXk±¢1­&µ¿ÙXΊàôÀâÏ ñ‹·÷ÆÚüþ‹#Y0Ö¥áìÂÎ1òe£Æ'ž"ÿø9ºÕ~˜|-µÇúöã"òÿ´vÊ4þm¥à#ý”ÝÚzx$€!;@šÐæˆú6d5.fÁ¦ DÊçt7)}LÃHåg lÎ×j™…“x“>[dHv¨4aþµÛ ò´s¶rˆµ[]ƒ¦¦ñœÀAݵ%tÔ‹àë´aMÈPrnH²ºÈ LkLL³çHŽ|ˆ¡dÀ–žZ¤eހ㒟 9Go ‡BÖÖ°¦€© F•Ã0³–@¡,žZþÞ¾íJdT„¦ ÃéÑi *‡a ”µB]gP6ƒS1NG‘B®3t´B/Ó0™9…\ñNûO´QG&KrGmˆk@ª‚óÄw¢|Í”Œ’ú)ASHX&óѸ˜pdV)VÔ„TàÃØzƱF<¬V*‡¯T¸õŠ×튢wbÙâ‘J¬”ÃÚ%4“÷\ÆW[7VŒIÆ"…œ´œÉf´¤ÀÍ7õø·‘4é]èuÊ@:ùh¢én¯Õ†fcçs¬!c"æ°3T² —ˆæ" Àl,?£6.ð¹¶r˜ZcobĆȒ«5¾´¡TþØVã1åÄX_¾aó,¥UëAÇF îf^cp‘‚VšFhÏ@Y9åEK‡åÆ`c! ”9òI 8à'EMÒ&K =w^û€òœA“AF4à\õ ¶žCU9”Êb¨k¬(…L9änG;Ïbï6~¶«ðÜÒX©¥Â "ŒÊ®Î¡ÑK)5)tt†*W¨ ۸ɯ´µá5[ë éË-2B/çÓ[ЮQÍ…–ê„w’±'™Ÿ¹ØËkM,ÑHŒåv*ƒð‘´Åtñ—…qP ‹h˜¸ñ½Ô(=H/—OoàøÈOpŒâŽ%ói顯Šj¶/“ˆÁŸå\Š<•^9© >‹ˆ¥$ÑÒç|<€å…¬iNÀWÉ3Ú-Z[òãFØýIgˆ%!¤ðyyæk`…˜ÿtñ¨ /Ø¥!Œj‡²”/ª$澟SÞj‹tÉ÷…"­&ðXd‰Ò˜'ò˜ò8í¿CäIr¸9™mâ@ìPÚñnNc«‹0¤4¬Iû"PaËxp6@­üö¶6À‚ÆÂ&}É ˆÜv$æúëHÄÔàÐÑ9 Í J8 k-êÚ RÀˆFC!áÔè4öûùr½ˆ•X) ƒRcXʲ¸ —ÃfÑ&m2“œUa±*‰8­TcË'$‰€GËX$Câ±O,¢ƒ]dI¢ö‚ÙÖ WÔ³^© adXðGµÕ„ “…' k³:]®#@[¯ÙÔ–‚ff¼pŽjÖœ1°.ŽùåÓÃÎìxup¡ÍV1gÄ]c'#Ìw~ùθ®3Õ¹(´w›ÆWæøà-]|íày`àç V„Yr²*@‡#®üÿkëprÅF­ZÞ)ÿ½¬<í"@Ú “LÒ`ÛK¶'a{¶EÍ:ŒX[1 ÀrHks\âÉv¡D'Sèf„ûßÒÁûn`•x.Ï0_lÁ±åWš³g5„9FYôÚh F= FF¥Ã¨Rp¶‹ ]dº€µ‘+¥ÅRÙä“8¾^[²°>Ôn’™æÔŠEi\Ð¾Åæi°\ò•béx{õ¶žÂ?zï<.Û…¾4‹ÃñÄE„­=ŵ@4á—ïìaß6ûýeÞº‡¾ú}šç§˜3º™×fsB/#¼u_û™9È«ÞÚQÍ-Ÿì´,ó‡Ø˜—)ãy$6o¢è,í„s ÿè}[±³…¡¬G“Ç·­§Âîâ#wõpÅV…?|tEăí€à¿÷ V$~ë]ó¸áòøuXº~¥‹°µÇÛr"àÁ뻸z{†ßýæ¢Ïäããù÷`<ØNL±›Ä¶÷þñZe@¶uUؽ}èV®“rbÙ⃷viÏ‹C–Ç6us@|ß6øÞyüóo-á©c•×>׊ù®Â-{2üÚÏÌ5Ú_ mé(|òÞ>æŸ |çùŒµ¨ ¡U™Ëš¸N€sÏ—·íd\ë忸žwâ¢0ŒiÎÂgDÇ `X®YAúíŸ #À6÷3Ãv\+›ÛºÑÆýþ›»Ø¿]ã_|{É;U)ʾÄßµhM&ŽT@ÿßV0ô[Õ•’½óÊmqá=Ê6#- $u'Tâùo3†|ØŠb'Z¦›«5¡¸¤æ½¡ b;p¡"sèæ„Ýs »sžÜŸþÞQ¼pÒÀ˜.*ÏPkr3ÈAÈ¡Qf1$¬69Fe£2ǨFµlGäàp=¡§Ž ñÈ¡kÛ%ë°oÝ,x‚ §ïæëÏ ñâ)ƒ•Êa¥´xjÖ6e;'f NFøè]ý01ž1øü>m|tA“GZ:¸õŠºµ‡¹‚ð¶« ú$éOjo”k£í™Á§›>qO?€ó‘3Ÿ|€—fŒ/#Ü~EŽÝÚE/'ÜMO«ñƒK8ç>Äz/#üüͽΧ_80À³¯Õ(k¼‘­B®Ù™áÃwô°³¯pÍ® ¼µ‡Ï=1@e•fÐâÌÚ +´€³òÑyØ2Ö*™"t3àö½Þsý‚yĽåwòýC#|ë¹–Fn¬ íµÊm=ÂÏÝÔÅÝû dŠð©·õñ<´çlðI~'½³§ð‘;ûëç´ß¸¥‹NŒê ÚPø~¹Ð/Ùáõ}ýñ^NøØ]}¼ë:çAåðÏ¿µ„—NÕSw6D¼ˆ±E€k¹w4ð‹·÷8ŸX¶øÜ:9[Nn¸<ÇoïakWá–=9Þsc_}zˆÊpÿkâÈ·I%…g´k…s $dj¹Œ†ûQÍ/Ñ9¿öŠNZŸBlC*¤0s‹¢Ë• Ò1a#}Ÿ©Í6lYÛfÿxŽsoæø•·n ©Æ_xj/œ¬Q×JS v¼ ›ƒ`¡ QÑ í“aTö0*-ʨj‚³ :¨‘ûè ¦ÚÌK#‡•Ö@Y±ZØÂ!8M—†…h¥´aäø`v¶ÁŰº\×íÊðŽ·°¦ÿê¢ÁgY b‡Dé½ë²È*âH•{¹Â±E‹ÿòÖh>~w?<\z‡óÙ|äi¬•8Ï„{÷øä}œÿòÀ_|r´“à'%±¶ñ#Æž·V\ѯЄ›.Ï‚YãÕEƒÿgÊøD¦rÍNº¿>\âµ%ƒß¸Úïñ#¥wPRè]s ¼…ßóréðû,ãôÀ¢ôxKÿæ{5–KÂHËÂAÁaž‚s?'|ìî>¸6‚ó¿úάƒ»»Ýæ3Ç{å6¯çìâ3C‹O?¼„¥2:·'ÉI¥'_­ñê™eü7ïÞ‚^Nøðí=|÷P‰Qm‘kö½ì§˜ Ðé…ÎÅ î‚ö¼<מɿ|çš¶kˆ©ÏM0nÄA·~i;Кç÷¹ÆßÒçh’rž¬Eß~E›v³|­Äw Q× U¡4µ‰p&‡‚AI„JiÔuL÷66CU÷QV†3Þj\å Ô*ƒ±É¶ÇV*ÂJi±?±uxé/Ž2¾aÅÀ‘Ž¯ÊØÆ(až/ž¬ñv¯]^¹]ãÕE Ù¹ešpå¶/œ4( ;˜AÕäŸì@Œ¥‚uèd¾R½ IDATt$ïß®ñèK\Õç§Yk_I´Î:YPZŒ™DHs×y‘"ÿKeäEª$ŒOvr¬)žN*äíðã“´f­€mÉ!§Uíüäs!vÕpCW¦|N®$í÷U<„T#8z£_$ÊçZ¦‚˜‰$”UìœÍŒ<`[—[[Y³ ˆ-èd'X¸ÀÛ¡¿¿¬ãB¨(³GlÇ:,xgä\ÁÁò< É쯲ÚÑWxy!æIˆ9³;EsþýG–ñ܉*(=•ØŒ!óó0uòg¬ EM99¹bCب,fU‹ÇbJË”C¥Ùù/´½¯bŠ+åÙ‚½«kЭŸ@têÄWþX%‘÷2ÖKQƒ›wÔ’^]4Þ{ Ô†PÕ Ædœ>J0£u­`2‚I"3œÓ0&‡5¬ñg BÃ’†± ÖÅh-` ¡¶ÆsíX°ʼnæo¯RKÆeL鸩6šîÒ{ylRÓÁApÐŽï)P6Ť;¤ÔöŸi21oìݪñ·îéGp~zˆ¯<= ¶òAj³qçE´6p‘a¦†˜\Â2Ç'&•t|Šü÷¶™qÉ}Iš ’´omÌd僷®!dP1²i“d ¶pñÂr N&IšP>VX®ŸFòžOá˜h×—cÁ¤žmªk‘æûiàs‘~œÑŽíMVŽMIá³3S9"òñ¾Rø~Æ{? ’…‰š•—܇ÔÝ{U‚ÃÊá3,ã¹ãUð爹ð;6„ÔÒ„¤Ô¯Œ'%k%s2É 8è ¼ù@+‡Žê–s< ’àO,áœòqMQíÙ%)#ÿçKy ´qŸgMÔÔÄrM!¶øÔŠ !.R7ÀXåm˜ €Q>³Êª†VìÁZíSyÐä4nçtkÌ’©ÅšG/øâ:@ƒ§ím̓ÿ[×Qø'6$0¡í ๪Þxôˆ4*Α\³–Wø˜ç¿ýÖ>:?ðëÏ ñÕ§‡AkNíµÎâPZ±#n:1|Òñ‰ý>_\Ôü{tÍæD Ïk¼ü‰ÊGÚ¾¢¤æÄ*ïϼfÔÉæ;2/Ó:3«‘ŒMRÊ+Ë!]•qñX0štÏl-8d}&ƒ°a”* ’tDŽ£ŒãûLËÉò™ýN4VSþ\‰ˆ¼ß5ätW_á£wõðÂò™ï²æ,Á Á\èünH‰ö.:Üæ¬Ë`­…³Ž½óDÁÁàZ«pÕ¸,Jœol÷Éß0»ŒíSѲ:ѺÀãsræùdÐÓ‰SâtÞ}}êg:Uã«Oƒ#Mä51 ™ ál땇YZ%¢rÇÇÇ)Ì>qò5š'ÖV&ò²«‰ XÓË«¶qûnÌ~yÈêüƒ×wðwÞ6ûµõÐï~ã ~|´š¸Jmnu° òèbüyÊY¨l«=6qPÂ÷¸lð€â\\ëb´Љ:‰"¡ÞÝÇœ?¹ç+Oñ ¶9¼©fäƒÎw²í€mŒaÆÿS lËIÊcnŸÎ× ÐmºÐ€<‹ÄŽÔpÀ I½¶¨¬bÆ:¥èÑ%¸ÄlÁ‘üs> E®q íW*Yypµ‡ôé÷Mz~º³7bB¬¹ñ^T‡ÿø×ƒ`ŸU‰ýÍŒG¤81œŸERÜ ƒK4Ö”§ !½>ý›?©õ¶ßŵ¾—gLj7´O±Ýq©8wjg÷¶iš ¤<’&G÷˜¤–.\h™åÆÁýÛÐg“ƒ&àŠ­wú!^}ž­Î…YSôœúb¤hۙΜ(˜­íY¨këOYIµb8+àìß.ÅöZ½Ø˜Áœ¥&§I¤ˆ³&  h=ðÊÖ®ÂVï ùñËŽ-™PôE"*ë×Ù`òzhõ…'‚Ï$šÕ=°Õž‘j¨í¾ÉÇX‡C§ zfèOÆIã÷WC¢CbæŽ-ZÖd'ØMÛ÷­¥mKûoÿ°ÎçœO &¿K³ÑþíξýÜ(d,‹¬Š!¡ªãþŸõÒ4õ)5]„Ðâ–"îĦñð ÐãÔ‘°úÉ6?Æm‡AЈ©ÕŽü-]BÉ7{á@y-˯Fª& _Ä]ÂJ%…£šahGΘ†I"x$å_èõé‹•Dã§ÞS¯Vx浊#;TÌLó¦µ#&ã\(8e\œüÁ„s‘îbÏ…¨‘£(†cÀ˧-Ÿä㕇Z¦,HÛ7ò!¬"w¡QÛd¹t-󑛸ؽIz5€°mnÛ• ?/¤Æ¼’°.‰/–­Löm‹}tÁÄ(ðD¸2ùûŸ^]ÙR·#Ýö]ÜÜ8Ïä5g9¬@46]KYÊ´Í,-˜_„ØzEƒ–ö@ÏФßÈ$vnåc™E‘X©N j#þcÑüp7cwu¶}Zó¬«ÞX@Lx—ÑtÄ”‚ô&@O$¸öŒÖw¿Ê¶Xþÿ¡ú™Ž…Ý9?&9Y0>ê$ÆìnKªëZ±Ás:˜Ö¸#~SP80@jšØÛÂüðÿ¬nGMZlÂ?ém4)½ÙHf¢ëP ÀV ¾8”"e1Å& xÞL.þ§ìN¥Îxáë]™$º¼xªöEÉbÇI´ ÐoP’]ìÉD±pyáÓd‹ Ø9§pãnƒ×–øL@ u[¶³PaϹj)»”hšíOÀólM4ÁÄá\8¬@!‚ƒ2i{¢*ý=lËù­8 %d¡ž]7/yŠ ùRš&­ñ†ö {hIjɤFŠö@h`K‡p»w`.ŽNlÐì£ïf¼g›ý¤Îäã|•ó)Ê,0R!®Ð„ÞÙC×Ç6ÿॵI2ÆÜx<»€D°—]‚àœNÖð…§6(Ÿ­¶œ„!FÖÍ0§Ï™ÅJòÎ-„K®vÏ‘Ú \û½ÉâkÝx$ËFûFÂ{ISþTß¹Qgœ4üä»ó±Ëh*AóLŠúË G½œðÖ« Üã«1¾²hðÅ'¡dAm\4s¸ñ¾®)Õ{¢'¿¿éI¶'-F‰4=¾ÃM`pÓž|_¥[h© õ¤]/':ʃó¯ÞÁù/Ÿà«ÉA±fºkbì„çLÔ ÃÊí|,¡ããÃ`g_…£Õ¥Ôa(w¸á šÈj@“hžé¥áÖ5, v©¡9‹6æ€ÓƒÊ§*]¾E%GQ\ÈZ´#ôÚR¬÷xùí™J´¸„³Æ‡¤#{‘¸¶ƒÝÁù?<¶‚‡ŸµNÞ¬@7U`.vj€ò„w/¶àP¶Ô:[2q¡nܽ/Ç–…©NÆ!S™hÒ„5ÉÞžRyœrÉùt^ÿ 9 ;û) siFLN¯D…y棢޺¯ÀßIÀù ¡êcz< ”&]Í„ØèÔù UºÄ>rd$Ó„=ó:T‘ 5iUÜŽ¯ˆÔþ„dj¼t±ó4l±þº ”~Ÿ´?cÁH s!fñ ¼²È ÙÞ­ºQøžK#RZ ѼŸŽ}ż  È}’–½*Ä"2²ý¸¶ƒOÜÁùO~Äà,B³’d¯ V]Õ/FjšÚb2H*#@ä{;]ýû‡J\wä÷÷<8S8Z©ðÇKɉAoVpnÏ¿pMޤQ2“R˜Ï•Ú¦ŸIfBéoòßF ù¾1–Ym¶H¡9ÏîÞ—ãïþLçÏ=1Àמ†96HLˆr~áj‹Lè &ögkcQþ—¹fgÖØr[ ¹ç¡ÍÖ“CBC£ æŸã[û”ob*PÞ0/góqø5îU$×Ì`úY ŽÄ´ºÎÌ+YÈvô¶÷gìùXÈ<ì8â˜$%xa`±4âÎìß‘ù@w¾¯ÐaÄä‘v_»0nÜM¿roçÿè2~aÔ8%Ž*¥WÏÄz½h’ü¤2ßU<±fTŸ?0À«‹üîîÙWàÞýE°'vs9ÿŽ­eb†öõF¦”¿:ÌÓȈp L"SMé.¿-¯áÝ#ÖÞœHkeùhõh:vÛ ÊB uUî¼²Àß{Ç\8±ü?ýd€¯ŒõÒÅ¿S&ykY¸&; ‘.÷…Â_HŽ(ïM]lï© e~(ŸIŽP@DÅC5e«L&Asô[Ë„oéɲý&Š&B=a9Ïü4dl-”jÝ¢‰‰æ,Ýä|:ðáÛ{lÿõ[åÂOr^Œ(ð¸6\Ûâ¥Ó|ïUÛ5îÛ_øŒ? NÆÛO[0ë9€ãK|všuÀ¿ýÞ2y¡ à<ª’Ó§“¢â—’í’Ÿ)hÊqgšø˜+¡“Ë6˜7*ÃõGþä?þáJ(¦óñ»ûxëUy ™*¨Ãb)õºøÂQ[sŽQ.Ì}æÆ™¡ '¸¤õº7’Ò"R“€Žb Åß)Á Ÿ6N¤‰FÖa¬æwC prÙ`è ýéc+øÚÁ!‰I£Lœ‚mçû,ÎL¶AûAË9¾dñõg‡€-áoÞÑ )Ãé »²R…­ÍÓ¼mÕׂ\õ\7kDHJr¡©qêEî‹Ú{ûSh ÏN°P*[sû~V‘SÉÊÊÛeÖ>+|÷Ð(˜+n»"ǽWa! @«ã¢c,Bá¡Ï>>6ì_¸µ‡Ë·(æmù›.X“L5DIäž=^ã÷¾µˆÏ|wß}qäË/ò6«’"2˜V4ñÒ!X¤&ž^rERáði_ìÉ' ”þ<¹Aíð܉Ÿ|€yü+÷ÎáÞýE8„T4iÑ¢e§òféh" Ì:á±&`Ï<óùè™Úc‡ R™émŸ I!$I•6­xö´PQ¡=n(Ü´hX ã€¦Ž?ÏŽ,üî7ñ?XÆC‡A[–ã°ŒãybÖ8áÆ:ÚUY{®<ðŒj‡/à¨ßÂß±7ÇÏÝÔ 3q+žœæXƒ“íÍŽ¾B¦ ͩƲ}L?½ä§¤InïÇnîÞ\ï&a-á~Éâ³BFÓ„O®ØxX«ãhŠI¼š¨E¦t®ép’íò°rø£®„3Ï~éή¿, ý ™’û9›hT³éËOñ"ØÉ ÷msØÞSaLŒÂ1G@|O'üa”Ÿî@ˆ?=^ã‡/|‘#ÖœC4)’m^S+œÈ›6³ÕhRbŽ›ô½&\:3ìL¶°Z´Ž”T9TÇ— Ÿ8î'ΨŒêµo<;ÄçŸéž—­NÆ¡‹™nÙ¹/Mzëx?a7Ùþ“A„ Å€š•Ú.Ÿ×á8´# 6(’1WLxA'W¤Z]\Nù@†í=Cß²f@Àš$ÛOv¶;œ9¾l½9VÄKÞé±,OæÙ‘ƒïåÍ*Äü ;ÿS@=N¬ñÝJt$ ìøö±ÍŸ5Sºk™ k.¹.hˆ»•‰×zJ·Ý8¼ftãî ×ù÷ø´ŸÔ hT©í?âs¤5Ÿ¼oo½ª‹¤¼Ã,qú¾ÞÔàã¤O~ŸñŽR%d’œ·›nš6š»”ÞÒ ×:Ucd¢oCð#T:ZZœºð 9Øöðh'#\½C£È€^.8£+<^léð÷¢ÔäšpÝ®<Œùðé:ÈGåeæðBìÿu—eÈ}Q¤NkžEÇ!xžµæ¢J#fuЉ# EŠLTlcýƒ¬Àxþ·vñó7uC´ê·pá ËƒÇ*|lù{oìp¶MNØÒQ˜ï*lí(>µ££°µË Ý÷«Ü{nì¢Èâ(Þñ–—Ï1xÏu˜·v};þ§0¿›vÍ)üì|Âoi~z¼nœÀ;)C4[9°µù½×@ý΃´œð;ò“ük‡xä… LNøû·àúË3ùÂ"o"ñà>ðŸó½e¼âVWnÓø¯˜Ç|W…-Yh¿Ëyúµ:ôóý7wÑÏŤ‚° výïéÎeÌæm÷ ºÅŸ¶Mq- Ý‚X4=mÓ¹hjq^~‚9jµ텃(jvò™ë>žÄ}!Ô@ˆZQåå{dø½‰Çýë‡øÜã¤õms¸çª"”Ž fuð9Ù&GM-R“œ²in /ƒí5¹HüÍ]Ê}ûsܲ'ÖtùÉ‘Ò;_]Ü¡TlBÚzñ”i„¬±9xòÕ2\óá;úAÉ›ë(Ìw'#'úω[÷ä¸e/ä/Ÿ6XÚÐnY;Œ ðÓת`‚|ï ]lë©ûœÎ³NÖLZiš)SÆê’£¯þÐ?þÛ_ÊJIáþ{ÿåñe‹c‹w^™Cá¦Ý9FµÃ3¯™x²­‹öª—OÜw5o÷ïȰg^ãô€'F¦¢­Y1×Q¸zG†_¸½‡›w󋯭 ‚qû9*ã°Rò³2¯-{x®°£¯pçÞŸ¸gýt[D¬ð|æ‘e_¶ñ¬M/c¥á9róî¹&ÜyeÁòäOG‘y&ÊŽÌ9¥b«`ÛÆÚj³L¬Å!Ú¡@^;¨Š…c}©Dm]-ùè]} J‡ÏÄ#ÆkÎd[ZüÑ£+øÍwÎ!×¼Zݺ'GÉõ‹³Qhahñ?à†Ë3¼óšº9áC·öð¡[yuklóü}Dë€'^©ðÍgG†‰“T‘‚€l<0Vvu⾇ßçš'KîDº¸9üñVP[àÁë¹ß¿ýà<þ—¯œÁ“¯TAkd~†µóÈâ5çð{ßZÂo½kû¶g¸zG†ðà<þç/ŸÁ rA‹%âû¾x`ˆ/Ïqõvm=…ßÃGÏKF|±c¿â¥ÓÿÃNÃ( R#÷x<è6Ô@ð&p 5RvK_{zcÞÕƒ&à×ïß‚Q½„Ÿ)cŒ~ê\šðÙh’žq̧Ê4ÃÌÒÝáXÄ€È9((rBŽ uŠg“wÀÕ;4~ûÁ-èzè³pøtÌEâ4Ž3S”ÅŸýx€_Ç\¸g=d¬ÃçŸàÕ%çAÉïRv¢ ÀŸ=¶‚kvj\¾EcלƧî›c¹©[ñ¦š\7ûñ…lb”E\Ú—cÆ:8ÄM»3ܼ;Ç\Aø¥;bÁ±”7~ÅÂÀáüÙIh (ÛÌ,žF«V³cS¡Bgç¿ô¥¥þ«æ`,ð܉xJ '-ñϾañ«÷Ía¿?úEœ8³èȃ?ùÑ VJ‡—Nœ:|à–nèK‘Í~ѵuøËœ/ñˆe2bg•q9øþ; 2Ô`¼±rl{ Kc pž'žO‰ ¢¶À>ºŒÒ8üüM]œ\¶8¶d¢æÞ§V{Ð7¨¬ÁÿùEüöƒóxËÎ ÏŸ0X)mpàÏ:‚Åï~ã >|{﹡úÐ^¨&Q7Çc¬+ᕬE­Ð¹±°¼6¾Rb23,øiéÍXÿÃmEo/uà¦CðŽsüx˜øUÍQGpz`ñ¯¾³„őĢ"T“£ºb_ ¨£0HŸ¿üG×ü­·ö±8´xåLÝÖšã9Ô2Ö4Á‰Mé8\Ð|JDûùαüŠòU%«pmÑs‘Q€ß¥ÈçÂÀaiôsàáFøÊSC;¹—ÈB‘Âó'jüËï,á#wõpÍεW;>±lñŸ~²‚g^«CÎÀ â…–”JX±øßZÄGîìáþk;aý\m,Žþä‡Ëøë—+»ly ²HûüËo/á·ôð[:!)e-ó¬4·ØF^{wÝTš^ÍÎÿë“CmÓ¦ƒ‘áâÓƒÒbP9<~´ Fuq ðüñÿì¡3¸ãÊûwh\¹U‡bñ)-—‡NUxá„ÁÑ3 fòè‡ñýGxËŽ ×ḭ̀g«‚jM ‡Ë/Ÿ6xúX…£glà Mã+˜|W@“ÃòˆÇ°©¦¬/j/cK‚ðýb†: fm Møwß_Æ«g ¾ýÜ'–, 9Y\'€ñŽÃÿõkgðàõ|öñÛOM2ëgŸh|úØß?TâÆÝ®Ü–ag¿Í¦ýÑ8‡Ww˜Æ$•Úd"‡OÕËeÓé¦'µxNðïŽOÿ0PŠ}Öq‚Î(17“ʰ–qðµK¥ÃÂÐ66-tnW¦3(-ðû,áôÀâû/–xåŒ ¶çvšmÃN›¼?Ù†ÿþ¾øä‹#‡g_«ðê¢ SÌaÜ.¨ðy#(å'Íc¥GϾVcTË#‹QÕ*eÙê‡ðËzßɨæ…LÞñ‘…(çi|¼ŒO°#g þéOãý·ôðç­?ŒÈ‡ðÉ/€õ²Åf„[¯È±»Æžy~>æVúƒ# O­±0´XZ,%ög©’:ü­³ø÷®àáF¸þ²û¶klëŽÏƒÚ²ì9mðÄ+5N LÀ ±?³"D0*îÔ­åĦáæ=9®Ü¦±kn‡Ž;ÅäIDATÂ<›Ï ]05%:ÇL¢wÿÎ+3¯ [vj&‰äº© ã%,EB‹í'Ä#8Z$âC”hé¸u1ݶ‚9 .O¢ð!8)ÅÛ+v±iÙk™1Ò'Iî’,Üm£šÖ(Á‰`âñc§cƒg’¿ޱ á–1šG’Wä¼ÀË»F¾P’˜Ùª5¤{¯©`¿ÜÉ‘4­–…¨9P•{(Öô0Ö¡ àð,19óÂDB,v:¹‰ÉÒ†€ñ[À6(NKµ´.ÚÝ|mdŠmË MÍ#)À[ϰÚp-åÚ¥©°,œfÙÔÀÉëIÎðŠ[«x¯¬Æ’.Ïeð޵@*äÚypÇI”®è²˜Æãw’£™(ޝN"ä=Љ`Ø´eÇX¿½›Ðfp؉‰C!Ø­káK® 5Cü‚":¦·%§æµTë›ôîE;•žƒƒóïÏøgJfb¦  b‚÷&‰0GüiÍ©| ù¬³¥”ŸŽàý#1©l:’6\”'ãÀF<)\‘Êyšª­à`-¡† ×ɧÈFêp1*ª²¬,72d“ˆJ)À…°=Oê–§»ÙÚ•æÝRæçÁTœ°’,A¹j·ö1ñ{¥X&`óŒÍ¥©b7ŽÓäbMF T0Œsަȕä¹Fœ éñ涬âNièZÀU·c÷â–µ™**³ˆÀöIEÞ; =±$ô#aŽ›˜fMPÙ.Á’·Ó¹XàHúÓÚ´ï@2É-ñ3)Ú¥ESpIï ü%òà”Œ-ðÁîMŽß…µFE›¢&øCÉóC;.‚m:ƒ)Ò1ç ½–"÷NâãjÀ# Ÿh JÚLÞ±Œ Üþ·¯móÏú7i½†ÜœŒÍ{Ú€™Ê¿Ã(Î98ܯ=#CÊ0û¶ÇiôâéÚ/^Q~ϨáüÈ)üLmìÓÆ(kš`6MÎEqv²|Êüoì,̰²“ñ*;Ñ>BåþTѪ‹Fëý'íÅ÷hã±"™Bm™ Í¿Ý>‘Ȥ »”s™gk•5[éøDKí&­b’=Òûï¼W^©XCZ!j–cŒóš–¼ð0““‘ Úw» an{ò SÖ2A§›«.ÐŒ8¥m=ÌÓø”ò*x8›ì.Ò{xcA hë¢Ù‡Ä)‘tÎß”òȸhgLk&8ßïD‘ˆ»œ ýŸD©Ü¶ÎÒ„wÞ”šÀÿôÚö{2‰¼MãÛ4mv"€ü"è'6£ˆ¹fϼƽû8Zda`qrÙ†jeq§³q(Ýæ§,ækåÑ49'·ºœqþËû™5ÿÛ÷¥ÅqÔˆÔ3id±R³FŽõX`-&gTª™ñÊ#‘Ä©·æAà‘ï“‹ïjšâDåi#çÙjÊͺmeøÿxó“ä1€•‰[ YÑ&1.}ÔØ‰. (·Ûˆ÷4ï_mrÊwÔ¾Æ¯Š³Úqc¿¬Î§iD[ó´{ÛÏp4ÎjߌT@™&U›5þiýŸØWÿO0­¡ÍõÆÿz,pgC¼U€¦FèVWBÃrÂGïî᜕Ãÿû½%œZiºÛ?Ü`í¹MÑöëÉçó‚«Ý·8q¾wn)½®=‰ÎU0.%½´ÉŸµQ Rù/€s«ž}üîîOÀùÓ/㧯Õá0Ðõœ7·I‘Î7§.ÕöϾjÉ&mÒŒD{&ÄbMibÂ'îépV¿ÿð2ž=ΩÁQ{†?^{â&mÒ4ÚèMÚ¤„ñ(§,ÉÒûÛ÷ôƒYcX9|ú‘e image/svg+xml twittering-mode-3.0.0/doc/web/images/menu.png0000644000000000000000000000101512141747407021037 0ustar rootroot00000000000000‰PNG  IHDR [ŠísRGB®Îé pHYs  šœtIMEÙ 9Éÿ>¾ŸIDATxÚíÝ½Žœ0€Q_CŠ<ßN¹—6ïe¹öhЄ?´Úêœj$3 Õ§kñx<"¢?µÖ¦iÊÌ¿ÓGþ)ÓÛ¯À¿ÆßïãÏø1ŒÃ0ŒãXk§Þ{ˆåÒ×Ìš¹}[­µÌl­-ù´,Eĸª«%­¦iÊìÕýØÈ6•ŒV‡9œæÁÕ2·WW¿6Vk `/°2KFÚ<ÄZ­ÖU]½þÎL·`kÕU«ÆÚ™`=å6ÇXk{k¶³øzÔÝí8¬íêþ!«“?pK‡¬RªÀ8 ¬9–.L°¸M`|W`E/¥8ä°«E¿X¥´êÀnBŽ¢l|u~¬½~€ÿÌ$,€/vX­Í `O–žQ/Võ!À±ê;À7¶×ßÉ8rÿ»÷`ìVë7«„cX…u¼Ýg‹àz_Eœì‹ÐS„'uã)Â(ÃGbìè½÷rý=XÜ#°€ÀXÜ÷ óï-OA »IEND®B`‚twittering-mode-3.0.0/doc/web/images/pic.jpg0000644000000000000000000005260612141747407020656 0ustar rootroot00000000000000ÿØÿàJFIF``ÿáExifII*bj(1r2Ži‡¤Ð¦'¦'Adobe Photoshop CS3 Windows2008:04:30 21:25:22 ÿÿ Î &(.Ì HHÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ2 "ÿÝ ÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?±Ò:¸5 l·YW·"7sþïߥ߸Ý,nQ½¦›âZ×kÄsKþ‹× Òá΃Xƒðüå³OT¶ÚêÃÉ·Ók8Z~ŽÏð~­›]»ßÉþeQŽ[wû’ïæä£ Óˆ\€ý}\Qôàèõ&ý—!™mѳ²ØýÓô]ý‡-¬+•W á/‰¬ÌAø¬“s²©·)¢¬Ê„[_gͺ¯Þ­éú5κ×cVý™ucD‡–}*·ô”YŽA(‹ôÈ~Ïï4¸ „´”5xðþ÷÷Ù í,xƒ¨Z&Ýô5¶êØxðA-Ǿ†>±²·É kµßžßúÛz{ÝUÖÒó­Dü‡ûZöÿ'r‹˜”ø#=$q¯Ž÷?¼Ã(FßÅ>n3XÒö„ŽšKvÛ ìLGÅl]UNÚöG„éÂÂÀfe”<ZK cý¤ØNqH'I ×$=dø,Ž@yQ±ŸçÅ$=M»r˸ö‡ÒêÞï"ý`šÈ|sYüº»»ùEO†5Íäò¿¶™²Ëú$§óv-G'f]Y€Ô5Õ^?ÃïþÞ»oÿŠõ–GFÊ sð2‰ÛpôìúM±£ÚOïocwïüû+ÿ†[˜÷Ye~ã98ÎÚÿ?ÿVæ&t>:Óôÿ[ùÏïñ¹y°˜HåÂ~IÜ7è3Icµ}F ñ¿ù¾åC6“_R«!º7!¦·ÿ]ƒÕ«üïObµMeÌ{š¸mhðô?²‰‘P{6wcšæÒ[¿THcå‚^8gòŸü/ÿI4æ¾,(Ú-Í&Îýñaߎì|ìÇ ‹=+X;iº«?ðF-¨-±­àIgߣQnæ‹#W5ÀüÇ©ÿWZšGÓGqã~—üè4ò|§ùlŽÐÑùú.pÉÐãÿEë ‡ oÇý§¶Êß6<7wù‹lÃë¥ß¿PoÌUÿ}YôT+êùÎh¼³ nº7ÿൽ-,ÿxI­#èîb~Ïý+šCƒ„±Õ<ã¡–«*OÇ|C_[64v£Pš ±³¬¹í3ßWý$méø€çúnW¹'1Ø1ÀëH>µ_GµüÁhÀ“ ¿ÕÚž:moxÛêKš$ír±õ«ÿ}@v³wÜæ9bc»k\f{?;j¼!úÓ/êÿÎ-ƒ?Ôˆ\ËüXÿèO5õÿ÷ácæVÝõc¹Ââ9h~Ðǹ¿¹¿Ú±éÔÕg‹‚í~±Oì\ã²@¥í-$AnÍßÙݹqû*§†´n¶·XóßÚßMÁ¿›ùêï+Å#ûÔ>Î% \ýÛü]ndã4w¬–GÀûè¹^…‹ÓòšÛ›Iiñ;¦}ãOúm[, ŽV?‚Xy™‚(Lœþìÿô'OÄñDö'Ì?ÿÑé•£‚Û˜\Ѩ ðO¨Èq -èÈÄØx|ŠaÒXãîŸë7ùJÎ=̹‚‹H2?DþAŸÌþ«¿õÞê]6»Ú^ÑŽ1}Â×ë[<Áîïý(  ÄÑu¹^dHÈ×oê—^»ßak-v̺`Sqüà5mWßoø+VîPõÝö€Ò×Ö6d°qý ¹f[kÚfé[sFî=Ã|çÆ«#:¼|ƒ×ûÛh"ÊÉôaãßê:°Û=?ÌÙé¡’&Q¾£«6|”Nš€Hý¿àËþcÜU´Õs £iÞÇÏlGõ•ªím­cÇç öþJóì­þ™wOcZZ絬¹€¸±¤>‹ë÷{n³}¬{ê3è-Ú~¶táCÞç9Ö²§^ê›[«.Ú?šoªZßµ=ÎØÊÙÿžÕLÐÆ‡õtþ÷©ÆËËÈ*»wo‰xÜݯøNŸ÷Å –‡Õ¸è¼}ÿùžÕÎá}l§+«;ÆÙX:áZ+!¶0µ®¿.·=ÎûMoݲÊFÿÌÿ„µÔþ°`ãSU^­v>çŠé©–4ímV2»=͵ÔÙí²ŸçS¡ˆT† _ýëžmÐOØ«ñ©ÏoݶÑÿTå X—]ƒ½6Öëom¬ÿ¡r›¯ÖlÍn­/ü×L·Ÿí&¶ÊýfPL:ê¿”~ĚŠý•õ l|”Á2t‹\>÷OýùO¦·nÂÛþå8.šùñÔ†•c»(Ûá}§ïyr¿Éišcú§óY˜µþ°Rnè]J¡Ë¨||@Ÿûêž3ÆÃÐÇÅÄ«™,£!§PXé"ªÐØ«½Åm?ôej»!;6ÖYg@êNîÜ[\;þc—$ÛØ}jÍ~ʃ¸Ž3s’ÝÛWaõ‚½Ýª7Çøÿ¶¬\Oq´ØÓb±ÿ±ÿ¾«|¯éÔWGkñ-º/`¶›ÐÖî"FÃ~ç~òèX0y –p-¤;»,äBê˜ýà8pí~ñ+;ã¸À–Ž¢p?àðÊ?ôÛü‘ÒqíGíÿÒé% ¼%D7{ws_‡ýáÏýRòt”Yº6y™ôOÌþ¿o£Ïæÿ%;Ÿÿô[üÿóŸá>Ÿüî¯=IÑu²4>©·ù‘ýû§üÇŸõÿ5y:J©Ý¡=ŸPÉþdÿ5ÈþsèóÿWþsƒþRé¿ÌH¯ú7ÑþyŸÌÿ/÷ÿ–¹$•ž_oåýf—3òŸ'Þqþ‘çù×ÿ7üßÑÑÿÑŠ®ü§_Òä}>›ÿÿuþ¸¼A%T|˜üÇý˃=Ÿ jþŒÿøï—æ«t0yþ~Þyúkç4–—!üïøþšÈoô~”Èþnïê9V¯œ>?›oýBùÑ%¬õ~ëò7Qÿ—ÿ盞tOûKÿ„Ç?ñNåp)+<¯Ï?îÿÝ2Gäú¾‰ÿiíø³àºL_èÔÿÅ·ãÀ^.’«ñÏæ±|ÿÐmò_<ü¿kÿÙÿí Photoshop 3.08BIM8BIM%èñ\ó/Á¡¢{g­ÅdÕº8BIM/JØHHÐ@dÀ°'pg8BIMí``8BIM&?€8BIM 8BIM8BIMó 8BIM 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM8BIM;ÎpicÎnullboundsObjcRct1Top longLeftlongBtomlongRghtlongÎslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongÎurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM8BIM è 2à]À ÌÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ2 "ÿÝ ÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?±Ò:¸5 l·YW·"7sþïߥ߸Ý,nQ½¦›âZ×kÄsKþ‹× Òá΃Xƒðüå³OT¶ÚêÃÉ·Ók8Z~ŽÏð~­›]»ßÉþeQŽ[wû’ïæä£ Óˆ\€ý}\Qôàèõ&ý—!™mѳ²ØýÓô]ý‡-¬+•W á/‰¬ÌAø¬“s²©·)¢¬Ê„[_gͺ¯Þ­éú5κ×cVý™ucD‡–}*·ô”YŽA(‹ôÈ~Ïï4¸ „´”5xðþ÷÷Ù í,xƒ¨Z&Ýô5¶êØxðA-Ǿ†>±²·É kµßžßúÛz{ÝUÖÒó­Dü‡ûZöÿ'r‹˜”ø#=$q¯Ž÷?¼Ã(FßÅ>n3XÒö„ŽšKvÛ ìLGÅl]UNÚöG„éÂÂÀfe”<ZK cý¤ØNqH'I ×$=dø,Ž@yQ±ŸçÅ$=M»r˸ö‡ÒêÞï"ý`šÈ|sYüº»»ùEO†5Íäò¿¶™²Ëú$§óv-G'f]Y€Ô5Õ^?ÃïþÞ»oÿŠõ–GFÊ sð2‰ÛpôìúM±£ÚOïocwïüû+ÿ†[˜÷Ye~ã98ÎÚÿ?ÿVæ&t>:Óôÿ[ùÏïñ¹y°˜HåÂ~IÜ7è3Icµ}F ñ¿ù¾åC6“_R«!º7!¦·ÿ]ƒÕ«üïObµMeÌ{š¸mhðô?²‰‘P{6wcšæÒ[¿THcå‚^8gòŸü/ÿI4æ¾,(Ú-Í&Îýñaߎì|ìÇ ‹=+X;iº«?ðF-¨-±­àIgߣQnæ‹#W5ÀüÇ©ÿWZšGÓGqã~—üè4ò|§ùlŽÐÑùú.pÉÐãÿEë ‡ oÇý§¶Êß6<7wù‹lÃë¥ß¿PoÌUÿ}YôT+êùÎh¼³ nº7ÿൽ-,ÿxI­#èîb~Ïý+šCƒ„±Õ<ã¡–«*OÇ|C_[64v£Pš ±³¬¹í3ßWý$méø€çúnW¹'1Ø1ÀëH>µ_GµüÁhÀ“ ¿ÕÚž:moxÛêKš$ír±õ«ÿ}@v³wÜæ9bc»k\f{?;j¼!úÓ/êÿÎ-ƒ?Ôˆ\ËüXÿèO5õÿ÷ácæVÝõc¹Ââ9h~Ðǹ¿¹¿Ú±éÔÕg‹‚í~±Oì\ã²@¥í-$AnÍßÙݹqû*§†´n¶·XóßÚßMÁ¿›ùêï+Å#ûÔ>Î% \ýÛü]ndã4w¬–GÀûè¹^…‹ÓòšÛ›Iiñ;¦}ãOúm[, ŽV?‚Xy™‚(Lœþìÿô'OÄñDö'Ì?ÿÑé•£‚Û˜\Ѩ ðO¨Èq -èÈÄØx|ŠaÒXãîŸë7ùJÎ=̹‚‹H2?DþAŸÌþ«¿õÞê]6»Ú^ÑŽ1}Â×ë[<Áîïý(  ÄÑu¹^dHÈ×oê—^»ßak-v̺`Sqüà5mWßoø+VîPõÝö€Ò×Ö6d°qý ¹f[kÚfé[sFî=Ã|çÆ«#:¼|ƒ×ûÛh"ÊÉôaãßê:°Û=?ÌÙé¡’&Q¾£«6|”Nš€Hý¿àËþcÜU´Õs £iÞÇÏlGõ•ªím­cÇç öþJóì­þ™wOcZZ絬¹€¸±¤>‹ë÷{n³}¬{ê3è-Ú~¶táCÞç9Ö²§^ê›[«.Ú?šoªZßµ=ÎØÊÙÿžÕLÐÆ‡õtþ÷©ÆËËÈ*»wo‰xÜݯøNŸ÷Å –‡Õ¸è¼}ÿùžÕÎá}l§+«;ÆÙX:áZ+!¶0µ®¿.·=ÎûMoݲÊFÿÌÿ„µÔþ°`ãSU^­v>çŠé©–4ímV2»=͵ÔÙí²ŸçS¡ˆT† _ýëžmÐOØ«ñ©ÏoݶÑÿTå X—]ƒ½6Öëom¬ÿ¡r›¯ÖlÍn­/ü×L·Ÿí&¶ÊýfPL:ê¿”~ĚŠý•õ l|”Á2t‹\>÷OýùO¦·nÂÛþå8.šùñÔ†•c»(Ûá}§ïyr¿Éišcú§óY˜µþ°Rnè]J¡Ë¨||@Ÿûêž3ÆÃÐÇÅÄ«™,£!§PXé"ªÐØ«½Åm?ôej»!;6ÖYg@êNîÜ[\;þc—$ÛØ}jÍ~ʃ¸Ž3s’ÝÛWaõ‚½Ýª7Çøÿ¶¬\Oq´ØÓb±ÿ±ÿ¾«|¯éÔWGkñ-º/`¶›ÐÖî"FÃ~ç~òèX0y –p-¤;»,äBê˜ýà8pí~ñ+;ã¸À–Ž¢p?àðÊ?ôÛü‘ÒqíGíÿÒé% ¼%D7{ws_‡ýáÏýRòt”Yº6y™ôOÌþ¿o£Ïæÿ%;Ÿÿô[üÿóŸá>Ÿüî¯=IÑu²4>©·ù‘ýû§üÇŸõÿ5y:J©Ý¡=ŸPÉþdÿ5ÈþsèóÿWþsƒþRé¿ÌH¯ú7ÑþyŸÌÿ/÷ÿ–¹$•ž_oåýf—3òŸ'Þqþ‘çù×ÿ7üßÑÑÿÑŠ®ü§_Òä}>›ÿÿuþ¸¼A%T|˜üÇý˃=Ÿ jþŒÿøï—æ«t0yþ~Þyúkç4–—!üïøþšÈoô~”Èþnïê9V¯œ>?›oýBùÑ%¬õ~ëò7Qÿ—ÿ盞tOûKÿ„Ç?ñNåp)+<¯Ï?îÿÝ2Gäú¾‰ÿiíø³àºL_èÔÿÅ·ãÀ^.’«ñÏæ±|ÿÐmò_<ü¿kÿÙ8BIM!UAdobe PhotoshopAdobe Photoshop CS38BIMÿá—http://ns.adobe.com/xap/1.0/ ÿîAdobed€ÿÛ„            ÿÀÎ"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷5!1AQaq"2‘¡±B#ÁRÑð3$bár‚’CScs4ñ%¢²ƒ&5ÂÒD“T£dEU6teâò³„ÃÓuãóF”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö'7GWgw‡—§·ÇÿÚ ?³Ñº©­Â»´­œŒmàdãtIŠâk°ÖWGÑz¾Ò*´ËOªØ²é“»Íò¤~³øAÓÇÉmÀ·‡·–« Uòqež¾#€xúBS;*ºa—¸5üù# CŸ,vn ëÒµ ©Q{e3Ûæ!t-eQs3ha 3ÃM¦§‚ß¹’°º…N®Ákt ê«ó±lØ%ú.Æ=²µ±m‘ œÄÈÞÐàµqí-‚«bËÁ-WäÇz7²qœésB¬ÒF…hÓxuqÉ*žC\ÒtåZ”„=q:ؽ 7™j¢D"îÑ ÇU$2Fb i#öØXµèa8šîÊÙÆÑ€žJÌæ?W”™ ™g«Z¡v1Ô+¸–i´ò›*¸;‚“7¯sÃxèXv4ã>§°ê4Z ÑÊ•¢ ^[™÷,^nXÆvèØ­%Iœzo²Ü›:ôÕ«}fJ>;ÀB{tvƒ•åÅŒÍbãÞÂ×!XV­›!ÃUŸ—NÉ#‚Ž) ­Ÿ@E«~WñO :u ö)Ô!Ÿxù±ó#@[¶VöË ¸G¶J¯`•QRjÝ{jæ°ÃˆEŸjžÛTË¡…IŒéN¬MÄK¸kZ}ÈÔžKK•ª9ȵyßæþ­‚4CpУ¢‚l†®]êÑ~B½ý‘®Ñʯ—Âl~bîb7ŽÀ:]4Iù­¶hX+RãFjàùÌÖ•œ7Q¤[D,ž ßx(s"ñKÁ(k Úl0…ýQ¢©q÷,Ø:E¹€V˜áftþ -œ±‡#š7’L-ú%bߜʭ-q%¹`ö•ÄõòæåŸÞfxšþRU’¿x'ÏÊeï†s?%_ÃêA<«ÛA]äEaˆ_ÌÖ%S#_ÒaØCO’æëæ;-~™|5ÕžÅCñLW‹‹÷udågR#¸uh)šðT–Ûx±!4)&H© 1îS*=ÓTÿÿÐËs$ˆïÂ-SXÔêƒd‚ô˜“žçì³,½f#Ç;;}+5•Þß\ŸHèDóæåÐæôÜ|Ì}ôù¸šmì·ú?Y³+xÝYüørŠàžÇ«Wœå§c&š=]Ëé÷–‚KAÕŠßÆÈmõ ß©õhÌ ]S $êæêGÉPÀê_e¸ÑfŒžâH‘Wq;¶LG6>!ɘ~“»`,ÌêØtåiµÌ±Í ƒÂÍAFQ°Ñ‰ ¸8uwº£Ç!mÓfá ð²¬h®òx­ã¼‡Ø¬ì‚¤[¢¥v°®‡‰:+ùo °65=Ö—z@V/ff(éµKƒ$Œe­5òc¢%â×u`’¨KLwZ Æ5·r«ÜÍÆ#R†>,R[ICFƒš 'ÅicÛ>ß¹P±¥¤ƒÈE²LžÊ.~Š2-";ìÓ-÷"Yxt«cZ yVéÇk˜tÔ¨0Œ“ý\¤‹!Št ”ok׺¡—Qo¸p´ð´òÒ‡eaÕžádãÊN¨±Ñ°êŽðÐâ«Ü ^GOC‰wÁ[æäL#!±DþWWé‰W2Ñ·©6[^æ‰(¸®.%§’4CϹݔ’%SÈÂ×s B¶9Ï‚x<*ýB˜Ü8ÒB$>ÅÑÁ?I_Å1¬ð@yžÅ_Ç%ÐBviÙ€ú®æ§ò‡FÍkª—B¸Øu*««BY÷MIµo¬>\g˜l+¶4€¨ÞD&ã-ÎS,êËUü«XçPª“<+Øñ»…,ãdsÇÐrØV²Æ ›1S§,è\ÜÀZIY°›5[½BÌ.o`¹¢ø¸„G©Øå&%Š CÒt}@[£€°z$–´®€ ÕÂ=!£›ùÉy°<,¾¤=À­boSo´³ Ç/$òçõ±ûÒt*…¤—è®<ÃOÁg¹Ò啿u‹«Ó…¨;,Þš=«HpÖ!è“‹˜þ²^jtm+ŠúÎݹ ®ÕÜÇýjoéZS²ÕÉvY"óô:. \bƬŭ[5ë\ù)¹x‡gæ>£èås Ûn€B ï Ýf×?5¿k½7h¡e[Òr¹=&7­¦©€8OÞòç ÚGx*wÙ°HV±¯¯&°×˜xîˆn¦×HêvôûÆâ]Y>æ­>§Óߟsrñœ v6wyø9bäc>,?œ­t®¨ì7zV{±ß£›áæ±–¼3Û¡käÄOë±Öê¼Ûé}Eøö}Ÿ ‘Úe´ý®h ÈwQÀ¯%‚ú\ "kxüáûŽþRNê/gê÷Fšöø§‹‰¢}'bÑÏ€f‰ËŒpÌ9Ú“6®J  3qå‡U¡ÐöHƒ!adŸNÂÙ€ý ƒ˜Æ5=عsuõ½>¼|úƒ§ÝŠNv^Óôf ÉèYNĸVO´ê%tJ~8ɯ5„ÈT±\Ed†ªÈ 2“è–«'h{L±Ú€܅Òò··ìï:þl«†\¢ŸrC¯æÂcÂLKO>‘æð~’©ŠðÛÃáj€ Öï¢yX]U¯À´ æŸ$2VLDãºÐ*UÝÙ©®¦Å¯`1æ²)¹¹xuÞÃ2ÌKe£Ä*—±˜Ñ;-˜¸ù7/hižÎЪâ`´ö(ÖX÷W h;¨i!Þ<§ó<2™0Ð ƒƒÕ*ôîÝù®îªTý¤•¹Ôñ½lw÷3P°¨TxŸåÂa~¨è¸ëo ÍÕ~ju·Ê0 {«íÞbÉLÇq'x±Ý²¯#â—Qnæ‡ú([¨eïv8ÑO¼'¨Z^?2kµß{ÀÊ7»Á¬Ös_ØèQ1¶Û†G0«æ"GjG3¬"|)Ñé×›Ù`ðá ÍíàðTºVÚݳóœ°–Øæ% Ç ÜhZäh{Àh'‚³s½ŸÂÒ±¡ÕüwUnÜf¿Á6 ñPeå¥Ã”v!§[„…§Š}À¬j_. g{g¸O‘>àðO=#îÐÝú€AMeïÐB&óÂ2•É¢M£-l äúm§5ÍBìiip\§W©Öõ![>“ ¤€º¹ÉL‰ÕéEÜè:ÖÒºÀYÝ#¸´´;S JG`µ1F¢‚É›‘=˪Ïêmš¥iHU³hTCyOœnÉÆjq=‹Í\èaø,àérÑÌg¦Ò¢Ëa’²!$Aè]{¸Øêô3è´‡ ;¦Ñ…¦‹fÑ'&³Ÿ›4•Éýma®ó]y/õ¹Ÿ Í>Bã/%ؾxù‡áálÑ­@y,R}Ákã¤%ðÿæÈñló?0aÕ°}TwÓVëߒбàX¢ìcô°ù#·EK¦¾i#÷Nªè×)ÌÃ4ããn¶3Å|ŽHpžk–"SFªIwIOÿÒ–v>àLp±í`î5 ©È¤ÁX™Ôë Ysëaž›¹Ì»ÚN£€•#ÑwyQ¶’HG'©þ¨ÚãµãñK£©Ëæ<2:»89uÚÏNÏsOÒ xF“½¾ê«]ü²ØçTù·0r붯Nïs!íî?”…Et„±ž8ôÔ…úGUv+Ž=þ꡺x-§Ó›s}|râ%®<äÖ6f¨x,vµ¼wù%o¤õgc~­K±ÞDx´þóSã/П]‹\dŸÍúqýöx=AÀzÿTOeOª‰;›Ø­^¥ÓE£íàĈáãÄÂ,ÀEÍ5¿Gp>!3 #C¨èX%Š/61R<ôÛFF4L_V±âWÑs™v>Çëù¥p•ZüÖØ}ãÉt8™BŒ–ZÏæm‚<5Q {rPÃ<|q#®áØÍ¡ØÖ¶êøòZTÚÛêmÞ„ 2(Úu h|•<;êŸô`©Iù2~kÇý8ÑoZØ2;*½G ½KÔ†hšÝðüÕyíƒ1ð@×`#P„ý3³òËI-€FñÕÇú¯{ÃnÁ»K*&[5Uŧ@VwSÆûP§«Ð"«f@‰üå©h¬=ºÀWæpÜOõ=QþêÓ MþöíúŒ´=¦\ϘQƶZÞ‹hÚàñÂŽøñ7Æuþë TˆbøsAä.c¨ÐqòˆîÓˆ’ÞÎÔ,ε‹êãz­úuóðGA €ô˜¥ ØÒýÞ£Pá Ó˜¾ª5Þ¦ ërÑi–ƒâóo † uðY†h#÷ «"FœB­N–žú+çØæÍ%?æ'­ÅkÎýa¨ýÖ&³*§EÞqœ]¨v­[ù´ k¶¢$=¤,Nˆ×3Òï¥SËÉEÃp—x™5…vnaº2ñ…c5¡¹À‰TØK-ž!ËC8I­ã‚ñŸlÅ®ÝZàN¡_©Ólî[ª·Q‡GˆQïeµ~óJù‚ jQ#¡y|'‰ÁlôËM»ÌD%s˜o,ÏuüÒA ¥éÀð<Ëüàò_ΛÈö›ôãÒM+«uíâà=§Çù.Ré69û°.öÚÍkŸ.ËK¨àNN?ÓÏháÃ÷Ùü¥œZm{/¬ìɬû]ûÀ~k”s…:‚²QŽHñãÐï(þìƒÓt|·znÒÊŒG’»Ô(`½Ÿ5ÏU”æXÌÆ»´µ¾t¸–²ælY`–¦ãÔK ºü¾m ±1Éçÿz¾O¯FÃôëãàc›#žVY.ÂË‘ ~ SsH7V?ò£ qFXçóGÓý¬9#ÂD‡Ë-±>õ¿á,´AžÅG–WYÆ·WWíŸùŽQxôìžÊà‹«„`ƒæâç†ßÖƒAZ¤‡Ûk+A >²[ÜAq ТÍwU0˜Ã)‰ù'd¶cÈ4 GÑŽí)­k^ ‰kƪv –Ogrš4-ýÝBdJ&‚ß§Vqó21Üß5~¯æã»IyuåQ˜ßÍ;,øè mµÃ³½ÁZ÷8ðãÉÖá“÷óbéküåXiÛ“Ä…^×Kcº&íÕWgvè~JN 'V5d°Ÿ˜XâŸC:Ð>„=¿5µkƒ¶»‰Ñgf3kÙgvûOÁ Sïñ[-‹RѹhÝïªÏ•Ÿ?Jï~ƒ¿¦–÷aMÅ´£àÖSZ!à©´mɳ¥Eü'{š¨ <_P âýhs"Îáó]MúN>K?ëM½s ,iüÐé n'Ë„ì•Æ<“Ì1?Õ¿éz´9²³S=ÐêLnà'hÑÿ¿™RKXã?F°ScÔtY}Z½½B‹³%i´ûáTëuï¡æú£»¯ÓìcáOsI*¿G€Áä‰þæ¶aò†Pt °íºnÜ‚k8M^ „ê]Ùæ>¸U×pú'B²:#oÈõ%•öó]ÖÖÙºöv‹êÓ¤9£ÇU ±ƒž$ö¶ÈÈcËšÞø~ר¯€;#5ª5VHhµ£I×ÂUšj˜m*/Ò·Ï_+šCJTñ]:c·:‘Æ,ÇÅctÓ5Âë~²mwK¾·kpû×)Ñ«/lŸkN›Š—@È|E²‚eŒ_è–íŸFR­ÇE?šý/ÒH÷8øª2ÑÜr‹GUìÒàBÙ¥Û«k‡p²ë«× ð*æ ­}~˜>æhAåe|_¥Ž2ˆ¾êþëk“˜ÄõÙº :!…6’VØ7‹>É%ªQ¨NSÿÔéHQsšD k>ú&¡Qj sö#t^ÛêWó¸÷º§;…P9ôÙ¹¢AävG G©^­=¼ñtqe ·uå™-AýÕVÊ‹N×hP1òKÚyZ0˘:~iðN¾-Õ®3¦É:oP Œl‚vƒî”\ìG›ª«Ú;ÿ³ù+1ì ôZ7¨¹$Ç °öþ²x>‰ý«2@ÄûؿÊØ÷±í5ÙùýÖŸGÉsìGŸ{5®|~vªy¶°4ÕÍõlC¦â\ËKYÐøHHw‰Ñ‹.(å”6:‘ýg¨Îco \4{tr]3 qì<êÕ |†ÙP¶=–xð*µ­4_¹§NBfIê2Æ“ÿ¾sã Œ±Ÿ8ºÏip ý –5¥ƒÛCæUso©¶Žxr…€‡o4r—$N±ÿ,ɳ‘H@ý£Ú|Òİ–m<µOÆÛY©ÆAÕ§ÍVFN×wPó@J1Ë”ªÅ¡Ü:V{™(m2ù:ȈCú/>Gñäî8eýæ/6089ŽáÚ(Z݆·yí(ÎGp…|ú'ù$þZ`qâ;LXþðY1 Dñ©5,}k²¿pIæZ<5C¡û25àè~jXbø,UºVúË{U\Áº’|¥[l²ÂÓÇ6¶k{{‰?$‰®ç°¹™?B·«4î¦êþjºãO‚±Ò]úrßÞl¥€ú¼ÚàjX[ðIúÔä)½°ç7À”Õ‰­Íð@¾Å®gÖj·W’?2ͤüB—Júe[Ï«×éOozˆxù*}$ËŠtÏ®'¸[“Zt+YäÔ<æñ(µ˜õ|ØP±u¤ü‚üú¬:æÆ=áªÑ´£¤ú¨œf¡ŒÔ–÷ntŸèL>JgùÏšFן?ÊŠáï+kÊÊ6 —kSWôŠ“‡´(3éñ²ëÙÂúÜ éVõLmyà8.ƒëK7t¬ŸäË›úº0¿D$Ùf§ÈÞÖƒýVS/ÔHX=£ØïL0ªÓM‚ðç™W]£ÁW¬þœ)z0Ö‰mc‰–˜ (°ÚX[o?ÁßIDwŸz'«Ê}pm©•´À´Á>K†µ• ëÖ {ëk§¥2Â!Í´‘X˜àš‡„jU¬ WU÷éÅ»•{ïéì­ex‰Z4±ÎÄ€*"·*Æ*–tp<ů¦íÀê #XáÏ 7.“å)H`‹j¨­)Þ¢áuL°rá¯Ä#4ÁT:|5Ž`âA®·•Ès0Ï8Ça#N´ ”##Ô&ʃS¨×?ÿÕéG”üS‘)y”¥S¶âßX „O˜ê4A6åäâ¶x÷x¬Ëé‰ð] •ȘÕgdÑ¦Š dzcêžzÚˆ >ú ê`·qϨ\ÃaÍÕŽGÆÈ4ºº·*UØkvÇêÇ~ÄlÓ–987á18ÑÝÖumµ€pÿß\ª=§q\“Wèß­nà«–Ö,ÏîŸV€L c¨4cd8®ÃÛù?ÕM™Šêž^Á—ÿTßä¬â Ç- Lù¯ÐȈú=¿’œ$áŸÐ¬” O¹ˆ_ïÁ·Òú¦};±ß‚Ô¸ +žHÕ®ò\õõ~’¿¢yop­ôüâ"·lÀžÊ ÇqаgÁ~¶w¾ ÅØãí*ûô,²Ò ÷žV…6ú´ùÃB «‰;42ÄXú¥Æpãù§²³O­PµƒÞÝG˜TëÒ¸îJ¼ëZÚF½”¸Œ}™Â[UýZ¹ãw[ÍõµÓ¨Ð¢Z4•Cí–‘¡*ó-T8ê2B¶qá•® ‰ûÔ\–žŠUÄ?$ÜŸ$¬ŽÕŽMv*ÚîX`¡;C#CÊVo¾áØÁ%D+x¥p,Ú{ ¹¯8OÌ(8Íœ}!ªTûéËR-ñ”òn$ùªÂç[Qk-¬ö$Cé¯Û‘Iâ}ªÞdz®hçh'â³èvǵߺïâ„ HxWæÖ—Î]–ÆCÇœ¡WôÈñVs@vp’ªÌZš~M%/ï-–é1ÚÛiwç>õ‘Òš[uŒ<´Çܶ+;2Hìå›U~—XȯÆÅ.0—k‰ýˆÐã~›ç÷OXq±Á¼OtQ>®ÁBÅç·Ã²wèGÀÇú>ENñÝC¨‰ÄoÅNϤ–pœ|B:Hù-þ º(ýE¿Œÿ¤Pú7ô!ñ(¯â¶ñüƒÉ–;Ïø6¨7é)ÿƒ=Á>;.-¿^þ›”ßÜ~๟ªíŒ:Gï:×u*ýL[›ûÕ¸~ ˜ú·\QŠß¿ïNˆÖü)2>Šî^ªÝ«UüøV­î[c k0è·¢Wr‡w|½2ç¢ ‘ êòÿ^[ÑDiúV²(?£a᥺•«õîaákV¶Ï°VF¾ÝµËëc²úô‡G(5Ï¥š‡ JO0Z&<wK±îÈÚÿ¤àdü´Vr,uo¡#U8ZQgö‚\{‚¡l[€ÝØüzÜMÃÌ©ÚÏ{]»d~ õ[öPup5«ÌhUÖY]*ð/5C¦ÁkŽf-ñL'5;ÚU êróÇ &5Rg²fžÊ}¼•>ŒÏÿÖét!/$ÀiñHOÍQ¶âó s©I<È€Š˜˜Õ Êw‚Ž8Õ"m.œlœR YwPwx+©¶½ÀÂËÈÄ#XQJ œYÎ[N¤;ŽÅB« ¥f¬?Dø¥“‹¡ÓEŸ}¡àðS¦î<•¨fAg´êÃÇû¼L­Ÿ¡°ËÑ> 6kèYý‚Q6–§ŽÇÁ;żÉKX9'^Añh7Bž›};½ÌñîŒêå»ê;ÚîÝÂG]TŽ„èÜ¥¾¶8´iתøî;ÏÏðMˆç1¯­ÎÚ×êARÆmoyc«´O‚$],®;7ëÖÛlQ—^¼6À´}PÙèÒ¹ëÌ+sƒÈ3µ§Íhç<ŒÒÆÖ71¯1?ÉÑWœ*TÐæ1Ä(LuF½®ß¼I ~­ÆßÒ@aËegÝ“Ñêê¸OuWÐñêT8ƒûÁee}jëo¨Öm¼ÿ92X̬ -®0ÊZèhúªNáÏ’=Vݶv\×GꙮǭÓêÖà#w+r›Ýk~Ê©(˜“±¦¾X“dØy’cD½G9¤š¬CKdAYk©çôüG_‰Sm C»á³ ßá&wYöW6Ò;Á!Y³m•‹«\°º'S«¯b6Û>ÐÒEÕ þðºµ(c¼µ¾êe68Ê 6úµæŽ!¯ÇDB&Év€*âÂëaº7dl'y–ðTàTìÂQM¹·Ð#䪵Ïý¨”dã¤ìvX×ZZNÐg@–CvXIK•zž÷ø°LT­Ð¹ÂÊjxÔí X"#·ãmîÓ¢kçsGr¥‘±Å޾ղݕŸN§ö*¾]af§Ž.¬ÏÄ+nÛ]mV¨_Ù‡g¥ÃðRú¹Ž¢¤ƒ\$.Í/B–ÆCô€dþ*cKGmyL4Ê€d×äžâò“~TvrWØyjžáæ¤Áº‹âÒ¢ÕôYÕŸDþ†|œU‡¹WèŸÑþQV]ô–Þp“,6I›üÐø(~pSgój$j±Ùqc’Ùaˆ#ï žèôúwÓ\}ré.ú ¬\ÿ”Ü?t¹:=Q.Ž­ÿDøªØ`úÓʳ‘£J¯†?KòG¢“½Ä8ƒuŸ5;¥Aœ¤òÿ^Äý^´ŽÖ3ò®c×~˪ÆD…Ö}wlý[Êò-?ô—Ó wGƒù®*Ç,}uÜ2× y¶ðn.É®Çr<¾¢?HŠÍÃt<§Qn>*àÝ]ZCG‚<‘²¾Œ ‘¨óV/lÓ¡“§ÕÕ—JþÈçtŸ’è£Y?zæzköd±ßʺa®“ò\÷Ç"}èK¡}þHúdyA-/¸ý1>hÒûs)u6:³·‚cîO'O%šc¹QŠä†ΤËkÈ1¶5Ž;ž_?F>š§×Æm½FË3Î܇Fö»Ú@oµÞå,Ios¬%Þ ¥yƒí¸øî=Ì’NWRe ®ªK÷<YFþ÷ ›Æf1ípuÍ2Ö̸ü™)ž!ýmÖÀzš¨Ï´´3Ç_¹Nù¡Ü8<ªØºå ÊÇG„u“5£böO‚lQ¸¸x´¢d@d÷'…xk\ñ©ûF¥) ˜Aßèˤ7m(îúE£’qÜH‚^t(ïúKc—þn>L°éäš½kLy=_A'¢ž+ŠÖë\¬¬”îò“÷­k?š+7§öûÌë´hŒv(—FÖIöŸ4,?çÁ+è¨a½ÚöEI©* úH‡’ Ï¤R+«Ïýslý[Ìòh?ô‚áz݃{æ¹w¿\ÿ›™¿Ô”. }†öŽ{)9súèÌ?š>Míy[Yƒv;ä Æ`÷9mºÓë'C·ºÐ;ýVÚ¾ÐQG»äD¡:cDz ÒgMQ)-JÛð]=.ÜÖ»Är¹‘¶ž+£Â$ã0¼kÀ•“ñÈ^,së_ã6¹)z¤;†Î€'Ÿ¹0ë åsí÷ÿÙtwittering-mode-3.0.0/doc/web/images/screen-friends-no-icon.png0000644000000000000000000053755212141747407024366 0ustar rootroot00000000000000‰PNG  IHDR0h–6Š| pHYs  ÒÝ~ü vpAg ÂaÜl€IDATxÚìu\TÙÛÀï.˜¡»ARRÄîîîum×µ×Zuuí0Ö\»± )‘n¤¦ûÞ÷³óÎ ê‚êoÏ÷óqîœ{ïésžó<ç9hMMeei)@ @ ÿy0 @ @ÂqÇq˜@ BB@   ŠG@  á8‘ @ A¾Bƒ¤V×Ô$$ܼyï^J Ÿ¯V×A&›™µk7p`ŽŽt:Šj®+•ïß_¾¼|ùÎ"Ñôé›6çâB¡|ÙãRi^Þ½{W¯¾xQ^®T~$ÃHÆÆúú„zN.d²·owíZ¼øöí6mZº4 €Åú ^­ ³³<¸|ùæÍ/òò„B*ÕÒÒÇ'<|Рˆ26Æ£TVT<}zåJtt~¾L†ãB H4š¾¾™™«k@@P··¥%Nø"÷(8.•æçߺuðà¡Cׯç䉾¾ãÆ-\8eJëÖµµwï~x}êÔÀ@"ñÇÎÓû÷Ï;}º´T¡ø·d²¹yûöƒuïîà@£iûœ¦(×ï³×R*++Ÿ=»};5ÕÆ¦gÏ®]íìtc…ãRinntôÇ\®¯oxxP±1‰ô#§@ –à‹5H*UiéÍ›;vüþûƒ..={¶kgjZwè¥Rår‘('gÿþQ£–/Çñ͛Ϝ™9ÓÞ^*-.~û61‘Ç 1ì{r¡V … lذ?‹Õ»wvvTªn2Y"qtT(0 Ap¼þL¡àñÒÒ^¾LIiÕJ,ÎÎÞ¿ìXmÚ[µ¢PTªêêä䘘ÌLsóöíÍÌ6ei*Š÷ï¯\Y°`Ô¨³²üüF=ºcG±øíÛ³g'OŽˆ8wnÒ¤cÇœ=ÛÛ›Élè4óÓéR(rr1bÙ2Ý|øßlP ENÎÙ³[·îÙÃãõì9dH@›­R  ·níÞ½bÅŠŽŽ ž{-…"/ïܹíÛOœèÑ£cÇÎmm µ-ÃøüׯÙµ+)iÉ’®]&.¯é…@ ¤%øb ¸‹Häp‚ƒ§Oÿõ×M›üýéô…T*œØ·A Èä'làû÷3ø‚˜P©NN£F-[¶jUÏžlöçB~î:™lg7z´nÚD©¬ªº}{ãÆ­[33—/o×®}ûËæD¥*+»|yùò-[Þ½ Û»÷Úµ_~iÛV£ :tÀ€=&M2dñâC‡ºt¹zõ矽¼2ÕT©>. ÅÖöÃ|ø_nt‘HææÝºMž:ôöí³gÑÑ£F-]ºqcD„ÁÇÄø¦Mû÷Ùk}>V_çï¹—†@ ¤y! HÝᯱŸ€Ï…!“Y,SS ˆGŸºK¡(-}ôhÇŽùóÇŒéÝ{À€±cúéÀgϪª”ʯ‰á—¥èßÓ… &gf^º´zõôéãÇ»páÁƒ11••À4Ç„DÒ¦Dž„„#Gþøãüùììòò§OÿüsåÊ V®žîä4{öÔ©~~úú‚n ÅÅeøðŸ~ —HnÞ{vàÀáÃ¥¥={vìØòå³gÏ™3þ¶m×®ee‰Å¦¿\þþý;Û·O›6|øÀ½{>s毿FFÆÅq¹*UË×¢ºWˆDB!‘H$DBQµšÇ{ñbß¾ ÎËËzAµº¶6.îСM›þú+7W¡P«¹Ü—/ÏŸ?{öɓР±8/ïÚµ#G¸téÙ³èèsç>¼þ÷ßb1Ž7¬MaŸ·ÿ\¹’™™•uåÊÊ•S§.X™ŸŒÚ¾Ÿ\mLÏÓÚÕ¸õßø=×·OÿÚОöû>ßh¾à'ü„Ÿð~ÂÏÿó‹ÏAwa˜Xœ}ïÞÅ‹§Ogfjͦ==îÝÃÂ<<ª«:tÙ2 ÛºõìÙY³ìíµ0þbqròÖ­S§nÙRU5iÒÎ'N,_.—_¿¾rå¢E3gR(‡>=qb]ûúæ@“JeYÙ“'/ž;W]Í`h~EQÍÖ64´OŸà`SS™ìÕ«õëgÏ>v ÇçÌùí·%KŒŒ’’X»öõk>ßÜ|ð`…";{ÿþ~ý4iŸ6ÍÑ1,¬ÿ›7ããóòúô9râDww[[ ¥ùO¤’ÉJJ’“+* ýý=<8ácï¤Ó;t°²‰"#³³ù|™ÌÂâÕ«Ó§·n=uªM›3V¬X¿~ÅŠ’’ƒ,˜;÷·ßììÎ[²äsé’˳²Э..JeRÒï¿O™²aCié˜1[·îÚ5w®\~÷î† Ë—O˜ íÞ}ñâO?¹»µµ))W®ž’ÂãùúvéÒP£/¯A@­®~óæÚµóçétCC Š‹ß¾ŽŽŽ.+ [ºtÑ"OO*U­®¬ÌÍ}úôÖ­ÄÄ€€ùó‡ ³·'“Ã$’¼¼Ç¯]{ùÒËkîÜ¡C ,-­¬ i4"Q.·°°³³··°0442’Éê_g2‰D±8)©!mŠH‹óò¢£oܸ{7559™N·´ 2¤CSS"è¿u®ÖÏãºýGÝ:ŒãbqÃj•ÚÐÀXQ÷­*UYÙ÷PßpjTÛ¶­Zy{÷í»xñŒææÏž]¸•E¡ü[ºêÖ‘(!áäÉÛ· fÍZµjèPoo[[{û¶m'LX±bÔ(½råôé·o%mÌQÔÆfÊ”•+§LéÝ;$$"búôiÓ||øü¸¸¬,¡ìÃ0 S©d²ÚÚ²²š•J_ßή}ûiÓV­š;·e'ñ8®TòùUU¥ÿPQ! ‡Ãá0&—º5|¤‘ôôZµjß¾}{77}}ÃÂ"0°{÷ððvíÜÜ||:tøðzP••R™”Ô˜6¥Rq¹yydòĉëÖ-]:rdçÎŽŽ Š~O¹ÚP^»[ë–ñ÷“3¦Pðx••ååeeeeºŸUUµµ`ÇdSô´ŸïÒÒà€ @ ÿ ¾Bƒ„ 8N$r8“'/Y²víÇ÷ )ÙÙZ…UÝõ^ÍJ¬@ðþ}qqmm^^ZÚüùãÇ_»¦ëã‹Å23ëÙS¡…›WÇ¢y>•êè8bÄÒ¥+V||’Z]UUQQYI¡ØÙYZ2™( ↢T*‡Ãb‘HÚ§}˜vM*êþÕ"…Mâp¬­™L   ªJ.Çq'§ú‚™RY]“S]M ››³XD"Ž£(‹eaac£¯O$‚úúöö$Òµk••b1†Y[*]æƒRY[[XXQA¥:;ÛÛ3?†D26vuµ¶Æ°Çß¿‹Õj__à ÎÀÀÙÙÑQOO–@ Ph4 Ãär¥ÃpœH´°è×oçÎ JKW¯Þ°aàÀÀ@µÚËkðàÙ³—,Y° o_''àÚÜ5ˆL63 8qöìÉ“5{D¡ÈÏŠ9røð… Oœpw?uªOÝû´5C7Ï>¬7õC×¿ÞØ6…ãB§»¸ôêåçÇáhj3‚ È÷‘«õ{Ýïu[JÕÐÚ¥PXX4´úø|˜ÇßS}£Pìì š;wÑ¢>}t4¨Õ••çÎ¥¤¼~œŒãjõ—ô´ºµïßú–ìÍ i>Hß> Æáèééë{{âÄÑ£ááFF-9åú’8S(zztº\Îå …`Å•Fš±X&Ó¬Ø~_P©]»Ë–]¼˜”$uè ¯¯›× EAÁÝ»W¯VT¸¸LžìåÅd"Hn.‚¨T@цT©D"O¥¢ÑX¬Oë£>‘H§Ðé2YUŸö¹Ðh|gÕÔðxÆbq8JcaS(––ݺ͛wøp·n3gVUÅÅEE-ZôÓO³fmÞlcsåʺu~~ w‹ÐÔP(ffîîTê±cYY\®JE ‰‚a†aÚ‰¥Z-VU‰Åsžßôm ¼E 2™LþX˜ï;W¿¼v‘H_[¬œiL­ø”KõÏ÷ßsŸ @ HÃ!hת¿ì<æKîÕÞ©¯ïëÛ·¯‡Gvö‡½zÅã©Õ8ŽaRiVÖÙ³ ¬\y÷ne%Øôüu±mè'†Éå\nqñûz—•UWËd †«k—.––))§Oß¿_R¢Tâ¸H”’uäpMð©Td2ŠÊåH¤TªTr90dk‰t1¾¾sæÌœéìüäÉòå+VDF&'×Ô(•8®V‹Å¹¹·o¯[7þÉ“(:bÄÏ?÷êeb¦†V[ûúuTÔµk¹¹R)Ž+•¥¥÷î>žneêâÂ`4&]Âfûúöêåàðöí‘#.deI¥8Ža"QJÊéÓ‘‘ïß{{÷ïïíÍdj7Ì}ªþhU*+*bc£¢.\HJª©Q*I$?¿Þ½ûöµ·—É ++e²–ª?8Žar¹P(ðù|~m-—[\üîÝ­[{öüñÇýû8Þ¦M¯^ŽŽt:›íèè舢©©Ož¤¦òù*•D’}õêÎ.hÜ6Ômkõ[\ýëmSÚ{?Ìíï+WÒó4¼v5®Öíµ¾ŸœÑ-ûk)ïiuŸüïýÀ·© ð~ÂOø ?ágS~ñ9H(J"±Ùffff`ÝùÓÏ!“ ¬­­­1LŽLæp,-ÍÍ5WSÓððÍ›7nÌΞ?Ù²¾}CBH$EÉdW×ñã7oÞ°ÁÈu4·ÄH$2ÆÆlvqñŸN:fÌŸ~ QŒ{öܾýÒ¥•+ûôY»vÒ¤Ç'Lèß¿{÷íÛ ìí{ö6,<ÜË+3“FCQ ¥nÚQb›6½{;8lß>wnïÞ¡¡Îν{oÝzôè¢E,VskΈD+«¡C·m;yA¶lY±bæÌnÝ6nA¨T›.]¦LÙ¾ýäÉ)S<=étÅq±AÇÕÕÞþíÛ+ Ø»· @(¤PÚ¶7ïÈ‘þýÍ͉D"Q©üTºüü>¬D¢…EŸ>¿ÿ¾bEFÆìÙS¦„…> Ìä†ݼyÇŽ®]ŒW* ÃØØØX¡ ‘€H …Âf›˜ÐéŠâ8Š’ÉTªTúìÙºu½zýù§XÌ`P(J%‚¸¸Œ¿sg‡úú_ZÛÓ.(CCƒêêãǧN8ðøqEQ‰J50°µõõíÚuãÆ“''OîÚÕÐEQT_Ö¬_~ œ3gÚ´‚ƒÉd7·~ý,˜934´²23èæê)êN†ë 6ÚëiSD"nllnndD¥‚Zª›žï!W?lƒ,–™™¹¹‰ ÐÚ~øö†×.ix=ü°×ú>r†@ P8ssccM·uhJE™Lcc‡LFÑ†× µúÃôS×Ï÷-] iÐòò¢¢ÜÜï+RjµB!“©ÕÀ-ò÷· ¼~|år±X.' ƒDú¾Í?ÔJ™L¥">žÛbñ‹K—|éÒ A—.mÛÖ¦ ™,—#™L¥‰M‘VW©är…E)”¦y&x¢L¦V“Ht:•úýס¡Mý˜¹ÚðÚõåõðG­o©Íß@ ò½@ú×ü2™F#üsFÓ÷¿"I P© Økðã­¡¢(‰D£iŽo­wÉܼC‡:u23#‘@éhŽŽmšÒAQ"‘BiÚg’HÀ‰ÃX"ßo›úsµáµëkêáYßS+š¿€@ ä{-++,ÌÉ@ @ ÿ¸£†@ @ _|@ ü¯AÊÍMOûf@  *•J:…@ @ ÿ6$¡ÇãraF@ @ f@  €@ @ ÿ$@ ù( A @ È?@ @ @þ H@ ò¤–|Ù³g±±ÏŸƒÏ/{²eK–,Zô£dî•^µZ­V«ß½KMMK«ªâr¹\Áqíï(ú¹»uCj¯Õ½Šã‚a8Žãææff¦¦^^žžD"‘H$6m*Š˜˜ë×QôÞ½cǨԲ²¸8mºwhÓ£V#ˆ\naѶ-އ…MšD¡„„ôíÛT)ª®®©©©‰D"‘¨!áe2™L¡ Ñh4 ¥áoùÔ]¦¦&&&&t:N§ÿøAäÕ«7oÞ¼±µµ±±¶¶°0337oìÞ½KOOM}õêÍ›øøÉ“ÇŽ7æêÿÂ8þ÷ßW®\»6|ø¨QcÆ0 ƒQ? è™ ÓÓSSSSìí­­œa=i*’“““’““’ÀøÞ´Ï㵿¿¯¯¿¿ÌsàH›7ÿþû¶m ¿+;;;;;[.—Ëe²[·nß¾{·W¯ˆˆððï?s¬ô‚®§´´¬¬¬lèÐáÃGj¾w]¸pîÜ™3îînn®®M+ Éår¹\®Vß¼yð ¹ù˜1Ó§#>kŠ’ÉT*‚‰ ‚‰d2Š¢(€ã(Š¢‚a† ¦R!ˆZ­P ˆR)—ã¸J%“!ˆB!‘à¸\.k¾ËdB!ŽËå"•*…ÕÕ7o<ˆãaaŸP €œ ¹\¡@Qkácâjiiiii©½½½}ÃßRPŸ_P`ddlldôO§@"‰ÄÒÒÒÒ’;;[[[[ØQâ8ŽãxM —Ëåòù<^M½½³³‹ @ ~=¼@  II))oßæåäå5l؈8jþ¿£T*•JeRÒÛ·)) …B¡¼_RRZjcceeiÙÜñó&11!!>>)))ékžciinnaÑ·oDDDÄ÷YR••••UU¹¹ùùùùŸ ãääààà`jjjjbÒò1üïŒãb±H$ƒþAPTÓÿªÕ¦VƒQSSSSS3xðСC‡^¾|éÒ¥K`)ÐÉÉÉéÛ‰I ¿£á»wiiééïß¿_R‚ã‚ㆆAAmÚÐhT*• RÖgÖÿÕÞÞÎÎή!Ïi,@4Z´hÁ‚¥K›/Ƕmûã-[ €Ñ…ô­^,•J¥ …¦­Ú&!†a†©ÕªP*I$2™LîÙ³wï¾}oÞ¼yóÚµÞ½#"zöüQ2úûO/W[[[Ëd²Xúú$‰D"˜h'äšáA{FGRÄ š”iþa˜J…a,–¾>‹ÞÞhffjjjÚT©‰Äb±ØÄ„ËMJ°ââ¸8!‘Èd!H$ñ×LjA9hbŽ 8®+&)•8®VkE&•J¡ßq|W© U*år‹ËMJªª‹Åâ¦*•R©R) …\N$‰$’T*•J¥Ÿ ¯T* Eýë@|Ò½bmmmmm J`à:•ª§§§;GÝZ]]UUUþ&ˆD"Q©T©T**•BiŒ¾î[‘••“““Ó¹sÇŽ:UVr¹••YY¹¹¹¹­Z9:::jÚïçÂU§N!!;3™L&“™’’’’œÜ2–.]¼ø—_¾æ9[¶lݺqã÷P"@À翯{½¦†ÇAMÓýU­V©Ôê„„øø7o¸\.·¢âÃmc£¯¯¯Ïf·L*þWÇq2™B!“8Æ2Õµ“WPE…B@(ÔˆIC† råÊ•+ÿ Â:;1 o÷ïGG?~lgçààè8dȰaǃ±©²²²²²2&æéÓ'O:vl×.0X |J¼åøèÑãÇOžØØÞº¥k’ŸomÂ4‡öLWkTTTRRP@ø­Èª]:ÔÌU4ÿ4)ÒM(WÍ?##3³æÐMA~t¾™€¤:«ÕºmǪAÓ<0ŒË­¨¨¬tssuusëÓ§ÿAƒnݺ~ýÊ•ˆˆðð°°ï?£¿çô‚ws¹\nuµ±±‰‰©©X,‘H$ kÔê,@‡£pt;8®VkE"Á0Q«q\­Ö&d²LF"·€7S®¦ZyÒhZˆDç*ŠªÕB&ƒ¸øãxC$•JóÃÔêúŸr9(MKD¢æíÍU‡P´!ÙÏÃd2™,–X,‹DàYZ Þ×=ùSäååççç—––––•}ì×ÂÂÊJGG;»’ë‡ìرC‡ö훳ÍjE#P™LKOO,‰„†ë^¾Þ¿/)))8°ÿà`ÁËëĉ¨¨cÇœ?ßòD"‘H,ÎÏ/***êÔ©S§ÐP‰D"‹++++ëNÐ[†ÄĤ¤¸8⑦EÄÍ/ ï" ggGÇV­¾Ÿ¢Q«V®®îîàJaaaaQ@ €¶‰ãõÍkÁD´TCCccðkVVffzº‡‡‡GK Hÿ«ãxQQQQq±fiÇ1 EÁøF< ÓH`zþêÕ«W¯^éééééé´ióôiIIIIIIçÎ:…„´dü@jllddh˜œœ””PVVVVZÚ¡C‡;‚¥±ððž=#"?~øðÁƒÚµ  £ºÏ£vtôÇYZæå]¿hlœ“£F.ÏËS(d2kë3š;] Çóòrs³³åò/6J¥ÑÜÝÝݽ¼~”>Òò|3I¥R«Uª÷ïóòJJd2™L*e³Ùl6tøºfW`-¬y<~üøñãLJÃáøùµixïÞƒ†…uïú=gô÷œ^0ˆ}GÞÞ¾¾J¥L&—ë®Ì€®IkÚ…¢8† Xhvi]4à †á¸D"•J¥ææææææoß&%Åǃ0M% wiÿR©ÀðŒ¢£G£¨«k—.A¤ýÆõëq¼¶¶¤D+ H¥BQ}}334hËÍ3 Ç““¯_G{÷¶nÅq¾þÛ›¶®q%«{ïÇB€éå× ^ŸˆFÝ»‡‡TUUYYU†a2™L&“óò Oò÷oÓæßês^^aáùó¦¦<^\œ©)•Z\Œ Ò<R]ÑÃ0ŒÁ`±X¬¦­«- 0¦AL&‹Åbùúz{ûù½~ýæM\\ppÛ¶mÛ~Jü~ý:>>..<¼Gž=A? ‘ˆÅB¡X,“Éd-Ÿ"‘D"‘“’´«Æ w"@ßÁ¿víÚµkNAº)JG( ++«ªªª‚ƒƒƒƒ‚ÀäLþpªR)•Jepppppð«W¯_¿~M¥’ÉD¢¾>‡c`Ðò1oȸ ½x¼ÚZïõëׯ_¿NIIIIIa±X,ËÀÀÐÐÀàܹ .]0 ÿ¾}¿•Vh~ýuÍšù|>_(œ4iÊ”©S1 è4í´͘fmmmme›››››—Çd2™ †““““³óƒÅÄìÝ{àÀñãFFFF††6¬]»b…¡¡¡as–X0°±±¶¶²cpffVVvv~~~~~>ÐÈå …R)B¡‡Ò©+YXäæ^»æãSTtþ<‚„‡ˆD‡ÅǃwI¥ÆÆ$Rs.jqsvvvvuÕêÀ7Í¿ºh5Iõ{øúû¤!]¾™€t¦¦ffu­¨ ¥ìÑ\‘J¥R™ Ø._½zõê•+b±X,‘øøøøøø0™ ƒñàÁÇuïÚµkËÄXâ>~üäIĻÂ$%%'¿}ûý§t|>ŸÏç¨nÖN³5Šið¬«AIWì‘V'£íŒ€ê¼¼ñëµ"Ÿ«eJ¥f½ïÕ«¨(µ´ôôD}}33MÿAƒäþýíÛ?Ôj 3ìYÒ„¯­-)ÁñGv﮲¥hØÔ\W4úTƒë*•J¥V“ÉÀ ¤¹‘¨ªªªª¢‚Éd2õôÀB†ïܹ{÷Ágg''''''‡k×®_¿|ÙÞÞÞÞÁÁ`0X,¼¼­[ÇŽ --OOoŽxêŠFÀ<ˆÁ`25¢âÊʲ2`²Xß•‰Fˆ"“)*UOO_ŸÍbÉ·êoe2 Ý”Ë¥R¥R¡ Óýýýüüý9~üÈOOOOOOëC‡••\.—«R©Õ8niiaaiY]ÍåVT€þ,›´|Z€€D$ýÐ#}( i5LMik‚ษ©±±±ñ«W¯_ÇÅ5ä.þÛNð>5®ºÆår¹\nQQQQQHeXXXXX˜­­­­­­fOKAAAT*‘H¥§OŸ9ó×_}ûöéÓ«—±±‘‘‘QK.F€Å;.·ªŠË•Je2™LW÷¥;éÖ]þ:yWWWWWW:Ng0”J¥R¡Ð××××Óóõõõõö~ùòÅ‹W¯Àò¢D"•J$††ÒÔ’¦ïª®®©ÿììììììh4:F«­åóù| õÅ0 óð}¯‰‰©©™˜Ïp8› ž£+ùú?ÏbM›¦X¬€€€‘(>>>h«„–Шƒº““““•êØ—=‡F£Ñh4//OO¸ãòi¾€¤Vã%A.Xöã¸fK:•J£Ñh`ò 6°ffbbjjjêæææææ °¦uwwwww¿xñüù¿þjI)##++;{þü -R«e2@"‚ó-¡¶¶¦†Ëá1L­Æ°ª*.·ª Ø‘³X,“©T*•*•L&“Éd`˜ÿ|z-----,îß¿{÷ΦJ¯fO Š`ûµD"‘H$`Ø"º“@PRš4QDÛYk5Hàš¦ôÁ[ÀÁÛÁjbS—Ø)¦G¦VãxLÌ¡C(¶x1‚É4ŠZ[ûø ˆ••·7޼~ *•\Ž ––^^(jkëï¯yšB!cØ™3³fáx~þ«Wj5ÀZV@ú7ê‹Fº“{`\§ù”†iÚZsÇ ¬ö7Á ¬ÿ;888ØÙѨ°°¨¨ „çp82ùøq?¿N¦M›6­´4>>>¾¬,>>>ÞÉiР¦Í7hj)ƒÁd2™šÜÓNÓØl##C íÝþa8v µµ<žT*‘H$FFMiPÚpØl==}}‘H( Á®33+«.]:uêÜùéÓ˜˜§O{÷ïÙS·¶<þòå‹}úôé3`€D"‘ˆDr¹L&•r¹55<pxÐò5LÈß¼ùßÐ  9ðYwŸDýzúé¿[ŠOãB¡P(#íòòòò²2OOOO//0RkÔ4q622444 ð÷÷÷……EE ]&&ÆÆÆÆ-Ó^À[€¾K+iŒÃ5;Y>ÀTÛÂÂÂÂÒ’Á`0˜L I¹¹¹¹¹…#“I¥Rió¥´‹ì윜ÜÜÊJ.·¦æÍ›øø¤$++++ ‹ì윜¼¼=ÂÂÂÃÁøÆ\GGGGGÇîÝ»}ÛÃÃÃÃÝ=&&&æÙ³†ˆF7o‰;p8: dg×üî|@îµjÕª•««vב®Iwo’î.¤5HŸ[:„@ßH@Â0™L*•É€¡ ¨®l6‡ÃfC,]?] …B¥r8d²Jåé)UWS©±±Tj^^j*‘øüyiéìÙ8Îd‰çÎåæâ¸“SH†¹»‡‡#“ùáT¦);#ðHÌȸ~AÊÊÒÓ5~Ò@ƒ,(ˆÍH›Íáè>‡J¥RDW< Ói4:]³*ãààè4-@AoiiiieÕ´iÆu +ÃCÝýÀ¥fš¨Ñéê“´b’îm÷ó¡B¼¼¼½9$W« Åq ‰8þþ}b"‚¼ysîжk7~¼¦Û ;ÇÀ£TJ¥BHÈ´iºOðk×V¯Æñääk×Z¾Õ€®ÿc¦ú©®›ëê{·Óî˜Âñ¦õ%øé¸iw-€6¦NNŽŽvvº¢Ð4Ñ( àCÑèÕ«÷ï{õrrjªXéŠF*•RI£1ZÑH³·âß§5º¥jµFwJ"‘É$’R©PÈd\neeE…±±©©™YKŠI­[{yyz¦¦¦§§§·m ¦8B!ŸïêÚª•»û«W¯^½|Y\\ZZVfeeaanž—WPPP`kkkko¯§Çb±XÅÅïßççƒ5òøøääääÐÐŽ;vüƒÖÿ Iw¢V_4ª?‘ûöS»Oã@_‘““›››ëááááá–ùââ’“ÓÒ€çC[[++ …B©T*ß¿/+«¨pv¶³³±éÔ©sçγ³³²23sssr²³AÝkÉÃtE#­Á¸f‘,ê‘“H$‘¨¯Ïfëëû¥R¥R*–U&“Éär™×ǽ6]‰`†Q©T*•jcckkkzûöíÛ·oÛÛ;88:ÝÝýû÷ïß¿_SS]]]=kÖìÙ³góxB¡X|çÎíÛwï:;WTDG^4ºqƒ@èÐ!#ÃȨS§¾}»u io™òÑ–0ÄñÄÄãÇ-+34äp¸\¡P ¡MLôõÙlKK@$jÓfòäI“@o¡yÖ÷Ü+@¾=bc££oܨ½C‡nÝúôišŽU­P_ …J¥P”J• XÊ«T`…€F+.~ùÒÈ(5õÂ}ý÷ïµ&m`JŽab`@ ðùòöí•+( >32îßǰví&M"SÓfœîð¤V{{A øú‰Ú‰Š"Èóçšô‚4 … é~Nc¾³ÙODàÔ 33ƒÅb0X,&³©=Œ•———WT˜›[ZÚØ(ºµ]îÀ¡ÛQiLèt ï4ÿëîHÒìQ¿€·˜šššš™•——–¾ïàÐ8çÔ C¥R(€×1{ ºÛ6ÁÐÐÖE]]»vFwBÏžZG¢Zw8ž–vïŽ?|¸k×÷ߤÁªí÷;?(Í?Д””–––Êå2™\îììââìL¡œ8ñ1Ñ(>>>> €ÍþùçI“š*NZ–J¥[s5­øÓ)Áq°Žz0M;EÍ„ªî] …\.“ |>ŸÏfs8u—KšWWgg—wïRSSSkjjjx<Ç0ƒÉÔÓ íÞ=:úáÆ éßàÀøø¤¤ÄÄQ£FŒ3˜ÕÑh4žžž‘‘™ibbhh`Œ ¾Á E"Éä7oÞ¼yó¦¾7+ÍzíšrÇŽ;Öíÿ<~üرO=ÿ[¸ÿP(’J¥R¹\¥j¨g-±X")-e2Y,6»°°¨Hã,@˜™5½Cðúã8ðVÇåVWs¹à½@kôúurrjª@ ŠÅ~~*†á¸\®TªT †ž›••““›+‘ˆÅI‡AAþþÀ©Ø—ekkcccÓÜ `ê¬;®1躵ã‚ÖMƒf©G#BiF<µT Ί4}î½éãO p8޾~tô£GOž€RË­ZµjÕªÐeeeeee?}úêÕ«WééÏŸ¿xÑ¥ †%'ûúš˜ääü›hdlܹsŸ>}úôî üЂw5w;Ñê„PT$âñjjž=6läH{ûλt8pòä)S 6[³ÔÎçs¹••ÉÉ¿þºjÕõë]º„†öèqõê•+,–¡¡¡aC!ÿe>" 5• ô)Àd|²Ùl¶¾þ§BR(……/^èë'%:D&s¹ÙÙšnF­ÆqåpLMQÔÄÄÉ Ç«ªrsq¼¶¶²˜¸¡hzú;‚PX^Žaaa¿üÒÔb’V‹Åb¡L»*(*UkZ¦™4iV›>Ô˜Éåµµ••¥¥EE……55••ååÚn@Û%`†1™ …Ì~X,¹\c¼÷õ€ ÁÆÆ&&FF`CQ"htÕÔZ/>š-ªš¿tëtwé¢õœg«Tà……¹¹ÍS×€Kn‰D,Æq‘ˆËE¡°²A”J™ ÃNœ˜0HÜ´I{ªC]'æÚ5uªfGÓ·‡J¥Ñ¨Ô†_oh«l ŸlÚ‰,ø›L&“©Ô7oÞ¼yõ ˆ(zzýü)Ѩ¼¼oß!CÂÃ]\š6fÀ WSS] &¨4Ú‡ëÖ`ò£u[¬R+uõKÚ’ú×®hoÀ®¤úž£š/ßCC;wîÜùöíû÷<èÕ«gÏž=‚ÚÚškk[[ƒNg0¢£Ÿ ¤”Ï‚¬¬ììÌÌÁƒ 0à› Z$‰Djß¾C‡öí5>ì4:$"”ˆÆ¯ÖG÷ ŸwÞò®Àëë‹€häääìììü5OÎÍÍÉ©ës¬©¨?Žƒ±èŽZ·öòòò£BaaqqY™¿¿OëÖ2†ÀuŽR‰ (ªT8Îá›™½~””о}Û¶¾¾ffffææùù¹¹ÙÙÖÖVVVVÍ¡å‹# Žƒ#"€uh1%%%%¥¥T*•ª™úëŠGº{që;(áÁÓ@.‰Dr¹\®y‹Ö GS¥Ú…¡¡¡¡OëÖžžÀ¸a Ο€# «WÏŸ?>8¸¼üþý==‚:u¢8ðÿ·Ì‰pº"rlìÈ‘cÇ.^¼d‰““››»»R™œüö­XàïB2iiéé;Ž=jTF†¿¿Ÿßƒ4`À“'ÿˆîv -É71±Ó¬°àxMMu5®P©T*…¢Y­‰¸\[Ûׯ׊F‚¢tº¾>†ñx|>`hhcC"ùøôï¯R%$\¸€aUU••‚›ãJ¥L†¢ÅÅII‹ÇީտæMgt§mZ`0x¼šš«W;p\g0$àÖ­3gŽUþ? è>Áʧ‰‰¹y›6öözzL¦OÃD¸€…"6¶©&´öö¶¶`ÎήåëCQQ^^óHÆåà¸HTU„¢ÿF 4-MûLàS®¹cN&“É4X¹Wìììì€F±²²²²¨èS¢QaaxxŸ>¾¾žž^^––––àì™ë׆v ËÕÓÓ×çp„B>¿¶ü 4Ûºg¹hû/íÄVweS«ÑÐöºß4“,±X$‰ZR&OAAmÚÜ¿ÿðáÇ=z„…©­——‡GëÖqq‰‰ññŽŽÎÎ55UUee O~úôÙ³gÏzô  Aߪþ‰$‘øúõ«W¯_×=ýDKHHHHHˆ®˜¤ûkjjzzJÊ÷ä üs&s@ߨ­_uk[]ÏŠÚz–Òš/ÆõÇq°ih~€3°pF§3 Ÿ/“ivVU …Rim­D¢P(† AMLöðá‹ññóæMš4j”™™¹¹…Å›7¯_¿zĘæ=zòäÙ333ss[[µZ­FÑ_~ùå—µk·lùý÷ß~{þüùó—/5;fµz º‘õ÷jrÁ˜ž°téÒ¥+WŠD Šæääæ–––———uëÖµk§N_ŸPö`o³ƒƒƒƒƒ¨Ûqqññ À]NNv68-,ŠŠrssròò?~üø÷ßCB>-]¿Ž¢íÛgfjµF-/é¦óÝ»³gÏ33§L™™™›Ëd{÷îÝ›šš———ß¾}` hmÛÆÇ''M¦«k×®]º”•ÙÙÙÙ%$œ8qâD@Àĉ'"È'øf&v`ÂÁbéé}¬g± ïÞe± ?gµ ¨‘‘µ5‘èâ‚ ïÞݹƒ¢d2N XX¸¹i¾‰^^={ªÕÙÙ118^UUX¨Ñ&¹¹õèamÚŒÕ4ÃF@©®®¨¨¨((xúôòå±cG2¤áÏ‘ÉpœDb±ÊË_¼Àñââ¢"Á0¥EŠãw2™Z-—K$4ŠªÕ\®XÜTÓª{÷îßð€Ba0ôôd2©T¡ÐL*t7>ê:ÕDQàZwÍL÷´#;àÍ÷ú׌ŒŒŒŒbcŸ?ñÂÓÓÓÓãi+7ŽóxuaÔ@$’ÉÂØ±‡x‡VèÔj“@H Û³§OŸïAdhhddhØ´ÏǶDìq<$$$$(HSÿe2™ìï¿ÿþûÒ¥‰'Nœ8ñøñãÇÄÛ;>þÐ! Ñé?ý4þ°aÞÞ>>b±X¬Tj×tëžóe€ZM¡‘ÅÒôHB¡@P[ ´(º!5kÄ™ &ms;°ü¡VƒÉœæŒ)Ý鬶níà2™ÖIFKM2œœÀéFOžÄÄ<}Ú£G÷îÝ»gddggd 6dȰa@§ _ïߎ¾?(¨mÛ6m€ç´o!11111ñûqäPw§æÇë'ÐàéÚ€ºÓqð›¡aS÷õ©?ŽS( XdÑ:‚º-ˆÅ‰BÁåŠDµµ*‘(H¥š¥ ÐϪÕD"‰4¬ÚfnG©Ôêkš¡P(”J4(8X är@(:tèØ±cÇêj.·¦hæI$P£ˆDÍ¡@/´O‘ …\™L"‘H¤RKKKKkëvíÚµÓ,€²Ùl6ƒqæÌéÓMÝ:4z$2™D"“O\`tglldd`жm›6ÀÆ»w/_ÚØlÞ,•¶i³lÙ¡CQQº¢Ñáɉtú»w––ÆÆÓ§׳ç·4máý{&“FëÕë÷ßÿ]¡x÷.5õÝ»œœœœŠ +«1c–,Y¶ ´ìèèY³fÎDѬ¬ÌL^½""¼¼6mÚ¸ññãØØ§OÛ´$Èg[SýKÍmb§Ö¡ºº¦¦¦ÃT*µœº+;ûñcÝ;pœÏ¯¨ßÉänÝ~ú (‚©©‹ ‘èáF$zz†‡cXiiZš&¼¶[EÑÜܘiI»WEKKó󳳩T>ŸBIK»qC­&ˆD.W, MLìí=<€1ŽfŸƒf8#H$Çq™ 4J"8èd2‚HT*‚P(t:†1d2‚H¥©©oßVUuèÐô¥síÚõëW¯¶Lå6lذ¡C[¾Ò£hhè¼y(êá¡=šÇ+.ưÇ÷î]ºÌž ÖÖ $¸ ÇCpÈ—&>à;—[UÅãUUUUUVjC:4q¢·w|üêÕ¹¹ š™Mœèâbcccãà\Öfeeg5O­ø¸˜$ |¾Æàˆ;8Ž úúúúúú@ï­1ÔÓ9•J©”Ëe2™ hŒÉd2ìm¨;½U«•J¥²å$€¯¯····T*“I$·nݾ}ûvu5ÇãcÞ¼‰ó&++'';ÛÃÃÝÝÍ )û=Ô"++KK›¯yB»víÚµk÷ý8rø¼ËPs 8Í5ŸtõHÍçúã¸\.•ÊdàÝÙÙ99ÙÙ~~¾¾~~@ '&gdp8ÖÖ U ÿét:J‹‚ÚZ??WW ÐéÍ»³è„ËÊÊÊ€+$Þ¸¤¤¸¸¸ˆ9Àxž@¨k®©=]­3`©Ñ3+•J¥Z Ä$Ð3è¬,—Ëåà®æH¨Õzzzz,–ƒƒƒƒ½}·n‚ ÀÕ“¹¹™™¹ùÇ=zÔ³çàÁƒM™2uêôéK—އ +WÆÇGE;—šÊf?|˜œ,•zyååÅÆæä¸»»»ÛØÌœ9mZË÷WºTW žž‰‰©©RÙ±£¡abâãÇÑÑ£G¯X±r%™L¡P( v……:tøðÉ“ëׯYãîÞ¡C‡†aXUŸÏçC;Èçù&v=‚Zaàäé:"Q(Šž^mmV˜ˆ (‹Åf#“ijŠãBae%`o?n‰doŒã N¡tí:w®JUPðò¥Z™ùø1Šr866"WVâ¸DÂç#HqqRRÓ¥Bãx@­V©ª« ™L•J(Ôœ¼C"Q(¦TÊå¦R)Ú½  sØvæ:¶„‚­Þ*°I'PT"Áq‘¨ºº¨H&£ÑšC@,[¶|ù²e••º“W }ÒÒX,WW‹NŸ0ÁÏÏÍ­¤$333³´tß¾ýû££¹\.7$äçŸçÍÓ×ÿ6‡è¶ Á2è±µ>î´û] `Ü þºþº­ù8ßÀĬ³„B@ P( Љ€s”JI (+êP”Í67']]»vEQ3377%‘èta08Mõ&‘¨TpHôöîÛ—@¨¨ÈÈP«33=Âq‘ˆÏGÑÚZÍ·¦iž"‰ÅB!†q¹yy ‡£R¡Hó»X\Qã"‘±±J%•êîaP*‰DU«‰D «®F S(@—‹ "XÇÂ0`ʧѕ‘HJm­H$—óù(êíÝ|Õ"33--+Kw3½î¢¢¢ÂÂ5kÖ¬Y½ºþ½kÖ¬Y³vmUUe%8j³®é]QQa¡Ö)BsC&ÓéÀm78õˆ@3æÐ!¡R5.ÅqüÝ»[·tE#Íõää«WÁ¯(êåÕ«¸ Ï71±npQ©íôu;_}}KK2¹¶öý{çóËËUªÔÔèh¡¢";›@°°puE‰¤¶hPT¡Jq\¥’JÕê·o¯_Ç0.·¨hÀ¤Ç9 Üo ÀÚ/W^^\lh¨Rq¹qEårQ«¥R «®./Ç02™D"UªšÃÀ•Æ«›¶ák·€¢(Øu%“Í«8N&—”ðùJ¥HÌðš‹¿ÿ¾zõòåχ:tذáÃë_÷ôôððð¸~ýÆë׿må.=pœk4dȶmbllo¯9 ”ÃÅ‹‹º”/^\¼EÝÜ´Ú0cc{{ÍÓΞ3¼Aš[@úPDjz Róë1€ï&ࢄÃ16æpèt&“Fc³ Ùl° 8KàpôõÙlð´ µÃÀIP-W>“ên‹ÿÜ„LÀæl&“Éd2‚ÚZ…B3 Çq>-ë;hZrr¶lÙºµU+''''&³K—.]=Ú¿ÿ~…B,‹Q”D"‘úôéÛ·oßììK—.]"‘ „ãÇ£¢üý׬Y³æþýÈÈÈH±¸°°°L¦Ñh4WW7777—V­²³×®]¿ÞÛûðasšï¯wÞœíøSuÿÔ4>¿¶¶¶öó«õšécËìAúp×A+vssssu}ýúõëW¯@þøû·iãããêêèøa 4ŽNΜ9{öÌ™;wîܹ3=====}ܸ1cFÞºuË–M›šÃIÈq…Bk+ðù8“Çãñjj¾þ-àÙÙÙEE))(šœìï¯VƒYVóOÑAhD¡P©tº®hTZZRRR2p`ÿþýú pØôü9ƒÁd¦¥Ý¼yë–ž™L&wìØ¡C‡ MUUÅÆ>»páâÅ~~+W®XáâÒ¾}»v-#&ÙÙ "Qaá¨QcÆøø„………v횘wúô–-›6>X³°Òµkh¨Jµk×îÝùù>|èä4þ¼y-“ÿ—o`b¦:ºêfPMuOØ–ËML<<Èd>ÿý{ ÿA¥R.GQ‡6m0¬ àÍ…"??.ŽDò÷¿¤$?ŸÃQ*««1ŒÏW«Õj¹\$B•J"!“Åb¡ÇårÍÆSï:V01âL¦Ý"¯ë.›H$1 A¨TàV›Ëe0\]•J±¸9˨!&v¶¶¶¶Ÿöz÷=˜Ø¡(Îáà¸@PQ!Ÿ=;gi󌲲´4™=ûÓvðà-‚ ûòæi5Í«AjnÁ#&&&æÑ#¥R"Q*³².\HHÀqµÇÁÚ=ÂnU.;w …B&Ÿ2™\®Rá8†uï>sfËN£í™€˜D$êé±X`åèˆ>/˜.ºÂ0Nb0h4­¹§ÕÕÑÑ98xzzz>{¶gÏž=!!¯_?N£™šššÞ¼ijji©uÚ¢;Ï™3wî‹9"—'$$$Èååååå¡¡ii)) ¦OŸ†„téÒ¥Kjêӧڳ龾ÞxsµbÍÑõ¯Jp#†ªƒfr§ëGñCw Í™–ã@Œ±²²²²¶. ¢£££<ÈÌÌÌÌÌôðpw÷ðptttûÙpvìØ±cÇFFFEEEô1©9ümêÑ#_·lÙ²åÏ?Á¡ºÞ5Z;?;Í·õ§šöN&“HTª¡¡‰‰¾~|¼¥åÉ“:ÈåÔ_(m*€¦ýÑ£'Ož>e2™L==‰L¦Rë‹F½zEDh\/]0$‘†<øùs*•BIJºzõúõà`@hÕÊÂÂÂ"7—F£Re²ì윅bëÖíÛÙì?þضÍÜÜÉ©ùw*¶n=nÜØ±9r옹yRRR’™†aX@ÀøñãÆµmëèèè¨éoËÊÊÊ”Ê;vî,/÷.%¥¢‚@@ÑÆŸ0¡%¶€üÈ|‰Éd±˜L]õ´F4ÒB¸¸té‚ 99wïjº}6ÛÌ ˜±(•ÑÑþI ˜›»¹ÖÖÞÞjuZÚ½{V^ž‘¼ØðÀ‹¦ËjêãbQT¥**Šg0jj²²€úÇÁ°K¥½‘H €ÁØ|h¢(ªT"•J"iÏÒT ¾‰àôn™L,¦ÑÛµCQ.7=½ùÊèÝ»ää””ºžÜ´ëÜ 1±+-----Õõoþo;`eŒ¢t:8l·9oÑÚ57gªtÿjj Rsù‰„„„„tí ¾oß~éÒš5š³åu½BãS`Ÿ¯5wë»ÀpÅãukw÷–ïµ@ßôeg €ö #ˆD°•X³ù»ùb®=tE‰D …BQ©„B‘H$„B*•Á`0€8J¥r8Ž\®T*`WÐP( ƒ!fggg³XÖÖÖÖí™æ鿝ûåë]7O ÖŠÇÚÒÁ0‡Ã14ÔŒ‰†a2™\^]­[ûjkIs¥î“ Œ4û/ZB@úÔ8RÜ€OKKkkKËÂÂüü‚‚»wïÝ»{W$‰4 ‚`ÿpK |¯uìØ¡CûöQQQQQQS§N:uêáÇk<Ž6­˜$‘ˆÅ"Ñ«W¯^ÅÆ7 `y†Ãa³ H$ ¼E{¼cxfÿþ}û6§1pÓ•د )AÕÓc³Y¬–9{ŠÍöñññá󫪪ªZ·nÕªU«gÏBC{ôÆržž>>>>eeaaÝ»S© …blÜ»wïÞååqqoÞxy¹»»»¿};aÂäÉ …D"ûøxxxzJ$\.—Ëdºººº~oyþõ®À›CCCCc㜜œœÌÌú¿2™À5‘¦OCQ°Õ\ÑÕ#Õ=Iûkóżáã¸fç)p[¢Ñ +•ó<A¹\*•J‚ÚZ¯_¿~ýúô)©¢Q}1içÎ?þضíëÓRZZVVRrçν{ÑÑ`ÿ³““““³srrrrb"ˆï×ä'(°âããããç—““““ ®x{·níæÖ´¥vJ%I“FŒ=Z÷W°ÏËËËËÓÓÛ»uëÖ­Yî2M]xöööö6p`ÿþ/^€S>~laK¥ŠÅbqmmÛ¶mÚ0ffM›©T*­k¸®«iÕ×7553ëÑãùógÏŽ;v,::&æÉ“š±ˆß(jdÄbééÙÚŽ5rä€óæÍŸö‡jv}8î7‚<ùþGHsó ¤†OîQ47·K¿woãFpä+ŽC;2¬¼¯RÍô55ïßk®Ÿu`½ÖÚÚ×ÃÚµ›4©éŽˆE‘Ëy¼Š ‘É **d2ÃH$µE‰Dpr†§(J&`ÈŸÀ 8õƒ7Øs¤ÑØènûT«1ŒBAQµ:=½´A:v ëÔÉÙÙÅÅÅ¥éJF;4Äõ60hݺuk/¯O…G³µ|…ú’oïÞ½•ÊW¯®\±¶V© €õ¦hŠ‹I${{.·M›¬¬šÞqBMMMMuµ®€T]ÍåVWëŠ5ºÞxê{µW°OžbiieŽ^mjÀç­{e$•J$b1˜†Óh “I£Ñhtzs쩨¾>Øx=qâ”)ÞÞÞÞááݺuë„ éÍÈ(,,(°·ß°aÝ: ¶9;/\øóÏÏŸwèЩ“““•••U§NmÛ¶mK$’Éd2ØóæMrrr²¡áÆ¿ýÎT©ï•ô[ñõ®À›@ À¾°? ¸Öœ¶õkõÃ`'Þ÷“ŠÆŽãõÏÉÓ=׈Gj5†oáŸþé'¦¾˜ÔT8tœÈG¡P(TêÌ™3gΛ·mÛ¶m›6 …B!Ÿÿ5<€€¨§§§Çfƒ'ïÚµk×öí 81©éüS‰D"‘Ht¯¯]»zõªU4F¡´oÜ·/¨{Ÿê…ê‹I8>xð A 4V^ž˜ˆã~~>>C† Ìf7ýηª*.—ËÕ¡™™‰‰…Eý=z,^¼lÙ×¼ ,©€7‚]Xß[ïiyHßsä€Q†……ýò ðâűcàÈW ‡Áq>¿²Çy<Í^#p/еk7iRÓ×!ˆ¯o›6.Ÿ/<{öìÙãÇ{÷îÙóá1â_KTÔ©SÇŽQ©d2‚˜š›˜xy5ýñèšœ$ˆÄeË–,Y´81z9{ ·½Ðçõc DØl6[_ßÉÉÑÑÑ‘FþÍ[[{{GÇnÝ""ú÷מ¯\÷loµZ¥R©t¯iÓœ²œ––’’””×®]‡:Á,†@ @ ? „ššêj.×ÝÝËË×EQA0 ÃÔj S«Á§J¥V«Õ*•B!—Ëd …L&•‚O¹\*•Här©T,V* ™ÌÑÑÉÉÅ¥ºšËåraæ( ‹€€±c‡ éÚµkW33 æ òm ‘¬¬ÂÂÆŽ]´hþüþý==Y,…¹@ D0¨#ˆDÂW:lÀqÚ§/3Òk)P”ÍîÓgãÆ;nÞœ2ÅÞžJmÞ÷Ñhöö:ÍŸ?zô€ýû[Zþ×$:ÝÇgëÖôôœ±X,Ö|&%­ZåæÖÜeñm¡P¬¬‚‚ú÷ïÝ»uk##"ñóù“’òàÁèѦ¦èH¥ !“†?íÚ &LhÛV_ÿÛåoÃê@ –æ?:ù"H$‰B!‘€Ö¬9‘É Ÿ=Û½ûìÙëׯ_/-U©þÛUN&KO߸±G.]¼¼üü&MÚ¿ÿý{i™²ø– ¨ž^ûö DF<8v¬›ö©pB"Q© …'ÍMRYPpùòž=ëׯ^/|«¥œ†Ö@ -Mµ8Žã\nEEI‰‘‘©©…̸†£P”–ÆÅ8qþ<Ì P— ¯¸¸¸˜Ç£RétO¡Ðìlƒ@š•ª¸øöíãÇ7o¾}æ@ ñ¯ŽãxVVjjRREEIIa!ŸÏãÕÔ8:¶jåáñý$Ei4 ‹ˆˆ#úô0ÀÝʼn²²^¾}ÌÍŸ>Œ¼wïí[©ôSO! Z·îÑcÖ¬}ðàôé{÷^½âó1 AˆD}ý€€ˆˆ^½F¶±16F =ý厼};;»¦F­Ö>‹L630`üøž=Û¶ÕÓš™,%åÒ¥K—þú«¨H©¬û^7·  ¡C;wvw÷ö¶³36æpˆD…¢¢"//9ùôé³gŸ|ÅŠùó'L64ââ._Þ²åèQ>¿_¿Y³œœnÝZ¹òÀW¯G2ÙÄ$$dÚ´9sæÎí×ÏËËÌ A¸ÜÄÄk׎ݸñàÁׯ++ëëÖY¬àà#GŽ4AnÝ0ÀßÑ¢§OE"8tC ¤9ùŒ‰Žãxffjjb"Ÿ_SÃåš›[[ÛÙ …———••–B}ë$ (ƒ4mÚüùë×÷ëge%fffgèëwîüÇ«V 6vlX˜··­-…ò¹g89……ýùç/¿„†ff¾y“˜D#¡P<=GúùçC‡Æsp¨­ML|ùòÚµÄD±¸uëqãæÏ?rdÔ([Ûº&2¦TÖÖr¹\nIIm-…Ò¶m§NíÚl¯™ìèØ©S›6nnBUÕóçÑÑÑÑ'OÞ½›‘¡V·m;dÈLêꪳär.75U*uv?~Ú´ž=[·>2ÙÒrĈéÓ#"Ú´‘J KJþ7D#¡R=<-ŠŠºwoëÖöí¥ÒÇ/_ŽŒ¼wO  Ù²%*êÌ™ñã­­µ{»¨Toï+¢¢.\X¸ÐÖ6#ãüùãÇÿüóС۷U*OÏáà °·×–WcÃ7ÍÁaäÈU«V¬X³fÜ8¡ÓæÌÙ°aåÊ­[·n]¹rÓ¦yóÚµ31©»;HôòZºôðá?ÿìÒ…ÏüøêÕgÏ*+}}g̈Œ}|}‰Ä‚‚û÷##Û±ãÈ‘ØXµºwï_=~ûööíÙlPH$CÃààáÃG^½úÔ©³gwî ©­}ôèÓÏo|y5&>i銃CDĈK–ìÛ·cÇøñdrQއ‡ÿúëÍ›wïnß!ee‰D£GÿþûÒ¥>>L¦¦=Êd……ïß—”ท×СãÆuïîâÂ`|¸©±ùC"™™uí:zôÀ:YXèæÀfûøDDŒ7p »;› Z~ãëCcë󖊲١¡;vœ9sôèܹnnµµ¯_¿z••eb2vìùóW¯®ZõÓO“&uïîìL§ƒ;èô€€U«Îœ¹sgýzÿêêû÷/]ŠŠº¿¦&(hýú3gîÝ[µªukãcq#‘X,CC …J54d2Éd8dC ¤E8yòСݻç:µZ¥R*U*¥R¡HKKHxñâåËGnݪ­­®®¨‰ø|Çãr+*^¼xøðæÍ·o_¿~ú”ϯ®®¬¬­år+*x¼ªª²2ðLðݲ‘46þ(Êby{ïÚuþüîÝ'N„‡je±:w^¼xÛ¶øø¿ÿ^¼¸OEÁ߯ßï¿ïÞ}ÿþŒzzffÁÁÛ·Ÿ<¹}û‘#XYivƒáî¾eË™3»wŸ<nh¨Pææáá‹ÇÅ>=yrpðLJxa±üü޹|ùÏ?wîôókøD›@03 _¶ìÕ«úõsqÑN==/¯ "#wî<|¸{w##cãààiÓ=:yrâÄŽ5ÂÔ÷•êâ²bÅÛ·ÙÙiiëÖ¹»,o ?¿Ý» ²³ããþÙÁA› Tª·÷úõóù/^Œ§™°¢¨‘ÑðáÑÑ™™%%‡·m«™"º5.ü—‚¢FFC‡ž;Ççÿþ{‡Ÿzƒáã³cG^^NŽXœž¾lY@€6¤¾~xø••55Ç÷êÅfþD¢µõäÉW¯ÖÖ¾{·p¡—pÑtÏo,OcrÃ<øþýœ±8/oíÚ  ƒÅ ¿|9=],Ö<“NïØñðá7oøü»w{ö40¨ßCB¶o/-‰þþ{ÂKË,›?,VÇŽýUQ‘˜xòdçκ}™ìêºlÙýû|~RÒ¬Y­ZÕ] ix}h\ýoÞòBQƒnÝ._®®ÎÌ|ôhòd++Í[ ƒÞ½£¢Åb±øÒ¥Ñ£ÍÌÑ×ïØñÔ©ŠŠÌÌÇ'OÖÍo"ÑÆfÊ”K—‚òòÝ»»uÓÓû0еuÿþóæÍ»|ù¼yááööŸ^ä‚@ ¤éøäÊᙚZZÚÙ9:ÒéL¦žžR)—Ëå$‰D&»¹µn ÔÖÖÔ|ÛɆ†66¶¶DbUÕ©©Æ ÇE¢øø‡ssŠöíY¬ú÷zzîî ¬^Ý­›•Õƒû÷O›võjI‰TªÕ‹‘ÉFF­ZÑhµµee …Z#+ «©ÉÎÎή¨ Ó}|Z·62"‘^¾”H¾Ì Àá8:úúöéÓ¡C«V­Z™šêéq8––ff$…’—G¥j…  ÓÒöî=}º°ðܹ‘#‡_¾\¡ppÈÉ9sfóæ/„Âÿ•]=D¢««ŸŸ±±Xœ‘‘—‡aFFææ¦¦àW™,+«¼Ç'Lðò²²¢R¤ @, SSŸ<)*âpæÌY°`ñâ[·Ö­Û»÷æÍŒŒªªúûp¼qá[Ž¢¢Ë—¯]KMÕšÝ)•\nI ŸO øø°ÙT*ÖA$Œ|}ÃÂF<¸];oo[[CCCCggGG2™NOL¤Ó?Ô•4îù/¹ÆÆ§áàxvö«W99R)Ž{{K¥*•Z]R’šZZ*—#ƒ!‘¨TÀ§¦ÆñÇ—”bÃòG"ù¾êÿ—:iXyQ(^^ÎÎdraáéÓÏži ã0ŒÇ‹‰9}ú͹|Ð CCp•B±´ôókÝšÉ,/¿~=.®ºZk¨VWUÅŽzURÂbõèheE&GGgdhÍŠââ«WwíÚ½ûêÕÿþ @ ?Ÿœ¢˜šZXX[³Xzzl6Š~è_ ˆIFF&&ß6(J¡04Øú/“ÕÌ©Tb±@ lŠG p8íÚõîݯ“™˜¸}û¥K¹¹À^¾n(*•ɤÓD.äòºOÂ0™L"‘É„BáptE˜Æ@"ÙÙEDÌž}åÊæÍ}ûúùUU qq ¦§óù8ò¿îÓ1¬´4&æöíØXÍÓ³K}ýŒŒ#Gbbt§ ÿ”À`°Ù вXœ9›››ûü9øLLýèÑ””‡.ìÐH,(ˆ‰¹yóöí«WŸ?¯¬üxýiøó˗ŧá`˜X\YY[+—k­V©¤R¹¼nZZ*ÿ?W{µ"ZËÕÿæ,/N××g0p\*år?ìYU*>¿ªJ(Ôö@D"“Éá0™"•ÖÔH¥uû&µZ"áó¥Ra0 ™Lèµ@ ß?ü™<8®PH¥r9ŠR©††šUiͰM$Òé,Vý} LMÍãÇçÎ]ºde5hІ 3f¤¥óçŸ ••ÚaÇ•J™L.G2™É¤PêNB …F£PD¥‰”Ê/Y§¦Ñ¦L9ÒÁ!%e×®Õ«/~ö è©ss£G?•@06ö÷ïÚ50P.ÏÍMM%“ÝÜFŽô÷g³ãâž=ÓìŸúÑÁ0©T Hp\(<¾W¯&N|úôßWíåòÒÒÛ·7mš3çöí-[èt{û^½úС5k®];z”Ëõô4èÖ­ÊJO ß2iW©Àtüs°X~~Ë–ýú«¿ÿë×Ó¦…†Žyñ"— ‹ØØ°ÙÓ§*Æ {~cùòø4¼Í«Tr¹J¥sÇñ¦NIcó§þ2‡ce¥¯ÿ5Óþ/­ÿÍU^&• …R)Š2¦¦,èY5ý%‘ÈbÕt0L&‰¤R¡Rõõ5:ImF¥²XT*X~úpy @ oÅ’BQ]]P“£P˜š††ilôQ”ÁðöîÔÉÉéÓ{Š’’¨¨Í›£¢ââZ·7nçÎaÃìí íDG©¬®.,,,T*9oo[[]à ÕÓ³µut45U*+*ÒÒ¾Dwƒ¢ ›meE§K$yyeeÚIвX>>ææõÅ;e0§N0ÁÅ%'çôéÈÈ5k.]âñÚµ›0¡gOŸº»¨tïc³;uúí·ƒ¯_¿tiݺ¡Cml¾åª-Žã¸vEþc!ÔêššŒŒøøª*=½¶mCCíìï,ä҂‚˜˜³g׬ٵ+=Jõôô÷·¶þT½hlø†§U­Æ0Ç27Í.1¥ÑLMííY,>?==7WkJ ÷éãäÔ’%ÜRñizqèËc¢PˆÅ*•jd¤¯¯Ý#C§;:öîª16û²úÐõ¿)ËK./)INNK“Éú÷ïÙÓÆF“be³ƒ‚†oÓ8Ñô°¥¥))ÙÙ2™¹yP‡‡îÁ¼‡ãééïoi)“åå%$”–~¨¤ÓÝÝ-ŠŒ|ìØnÝBCùüÝ»—.ÕÕ–µ<*•PXZZ[‹ ææíÚ…†vëÂb Æã½}ûòeNŸ/‘¤¦îß¿o_zú¤I«WïÛ·?Ÿ¿mÛ™3Éɉ‡G›6Jå•+«W<˜-“!“Ù¥ËÞ½{÷ŽWZzóæÅ‹OŸæå …zzîî£GOŸîêªP¤§:¤õòרð_Š\^^^XÈç³Ù:M˜0lXÇŽ–M&›˜P(™™·nEG—–Ñ©?"QNNllI‰…Å„ K—޳wov¶¡a¯^³f­^í燢Ò”¦g?V|x“óöîÑ£ÿ6m ˜L''&EML:u1bØ0 ËÉIL¼råÆŒ  ±O—ÉŠ‹Ÿ?ÏÉ!·m[ºtΜ P41Q_¿ÿŸ~š<8‰(/ÿòúÐøúß¼å%¼~½cDZcïßGGoØpöìµknn×®¥¦êéж­Z­Ûßâxmíë×»v?_[{óæöí[¶,[† QQññâí=sæ¶mAA<ÞùócÇ>{¦ël@$µiÓ«Wǎݺ!ˆTúçŸÐ@ -Á?RTÔ‘#ûöý˜IÀq™,99*jÇŽÙ³kk{÷6ÌÇÇÂÂȨ¨èñã¥K|H¥‚“€ÔêÚÚôô—/££%’ª*¥Ç CCOÏ®]GŒ9ÒÞžLF™ìõëçÏß¿·±‰ˆèßøð¬,¡ðáÃ[·22‚Ææ¿Z]VvîÜœ9ëÖµo¿gÏÔ©+WnÛ’•uëÖÑ£#FÌžíî>wnhhQèi_¤±õ¿yË ÇÅâ—/W­1¢_¿ŠŠŸ~š>½[73³ÔÔÈȱcOžô÷?sæÂí²™@ðäÉ¢EcÆLš$þòË‚ëÖmÞ½`AÏžëÖ½|ÉçׯmjummròÇqq’–öåg=A Ò(ŽÝ·ï?är™L*U(är©|—Ëe2‰Dó)•ŠÅ‰HÄçK$B!Ÿ/ …µµb±@P[+ <žHÄç×Ô”—åä€g¶Œ›ïÏ£§0sæ‹/ΛץËÇ<ÙµzzþþGŽ\¾¼sçöí¾¾Mk"Ó8œ>}Ž«®æñNŸ9Ò®ÆB ¦ƒÍîÙóСêêÚÚÈȾ}9˜#ù1ùGƒüÔIc4§ý|W(är™LsýCÇ¿Õ[¥RõõY,"Q$ 5+µD¢¡a×®½{·jE¡””ܾŸ/•~‹ØQ(FF(*•ææÖ_Gn)Èd[[•êÍ›'޽}»¼®ÆB Æ‚¢tº±±‘‘Èãq¹"èGÈd+«~ýfÎl׎FËÉÙ³'#Cë@ ‹Þ‹]|üßïÙóïáú÷¿|ùâÅþý¿mlmm·lÙ±cÈ–{c@ÀÀ³g#‚(•ÙÙûöM›þ-s@,‹sr`Ã@þ—Y¼8)©¶vñâÆÞÇd2™ÎÎ0ÿ òmùá$  (™¬§çèèææèØª•©)‹E¡Èå55ééoßfgge _z|â—@ º¹ùûwêdeE UU%%IIii%%55-ï8‚@~tP”J52rw hÝÚÞÞÀ€J•JKK=zù2%…ËmY74-?¼€Àq¥R(ÌÍMIINÎÍýÖ±Á°ššŒŒ7o®\ÉÈ€U üoãryuuZÚÓ§÷=} s@ ÿ[üðç 5I&h4##*œE‚¢4š…E@@` ““¡¡æ\%ÔE [[ŸŽýýÍÍi´úg:¡(•jeåïß¶m›6¶¶Ÿ:§ @ ïƒÿ ÒWdÉÚzèÐ?þxþ|ëVµzæL?¿ùó_¾lß~íÚ›7÷í ‡÷ðX¸ðɓƘŒlv`àèÑÓ¦Y[ÇÄìÙó÷ßRiC]&£(•j`àèèããïߥK÷îíÛ;9åæ?¾zõ¹sÅÅƃH40ðñéܹS'6;+ëÞ½˜˜â↿«á0™íÛ¯]{÷îš555³fõë÷çŸoß6öÌ•†‚¢$n``lÌá0™‚BÁçWWóx\þ­\\|kP”Je³ÍÌ ¡°²’Ç‹¡“ïÁаk×åË—,7ÎÙY{\¬Z]S½yó–-§Nåä(•B&s8­ZµnmgÇf7•IµZ$ÊÍMIÉÍ­©ÑôD¢™YÇŽ½{GD´jÅ`¾`) ÃD¢¬¬G._~ö¬ªJcŒ¢о¾¡!‹E¡hÄ2ÙÅeêÔ;oÞìÓçÒ¥ÐЈˆ3g u͉I$kë±c=uj̘7F ûóÏü|Í©_À ¦F(Ô¸–'8œ¶mÇŒ6¬kWssÒŽS*—uòd\\U•¶½P(Î΃ÿöÛ²e:˜˜hKA.Ïɹté×_7mŠårÿ«} @þÓ‰deÕ¯ßÚµ·o8àë=eÊÀwïòùS¦,ZÔµ«žž¡!ŠÞºU^Þ×¹¹«Wûúöé³m[v6ŽëéY[»¹}üøÒ¥ýû̘1hÐêÕÏž ŽŽ.X0~¼»;›M¥R©zz††&&––––ææ66ŽŽnnÖÖ,‚(•\nZZlllìÍ›ÙÙ(úñ5W ÅÅeâÄ "#ýü¶msuíÚµ9$ÉÂ"000ÐÃÅ:uŠÇkÊ$’‘‘Ï!3fŒ=vìàÁ¡¡:¹ºr8õ§tµµééÑч­Y³~ýæÍ7n7÷)NJ«V3f>;9&ÝOÃbuè•‘±k‘8~|§N£FEG7½5ÉôôìßàÀ’’¶lÙ°!&F À0‹³²jk5“me³ƒƒ×­;sfÆ=½ºOb0›M§#ˆDÂçóù*ÆfëëS©&ÕÖ …ÛÅ(¾~={vÇŽ³f]¹Âå‚ÖO¥ººN™²víÞ½}úTU½~˜Øð$’‰‰ŸŸ¯¯™ÙcÆÜºõìYU•HÒilÜ­Û±c/_nÞ¢=8Hd±˜L A~úéÎää©S?/&“Å"QtÁ‚“'§MÓ¶ ‘èÕ«™3ƒƒg̸|¹ª Ã@¯Ðµë‚K–,Y"ߺuî\B‚@ }&‰dm>dHX‚x0sæÈ‘3f\ºTY©§×£Ç¶m¿üâë›™¹~}hè´i'NÔ] ý8®PˆÅ<žVp(.¾|ù×_CBòòrr"#¯]Û»÷äÉŒŒðð¡Cß¼a0 ˜L E&“Hjjòó33år‡NzôP(Nê×ÏÓsß¾§O ¥òßE …ɤPD&‹›JÃB£y{Ï{éÒ±c}ûZY‘H“ikkoO¥’HsæÜ¼?~üÇß$“%$¬Y3iÒ”)W®4lŠA&ÛÙõè1aBÇŽ8þèѶmóæ-^üèQRRffY™D¢V£(™lhèì8jÔêÕ[·nÙrîÜÉ“Db»v½z­Zõömó I F@ÀìÙcƘ›?~¼lÙ;Ÿuþß!ÍÍû÷_¾|ð`CËgÌpp˜<ùÉ…ÂÄDOO&û¯;üh((J&S(T*‰D 4·i—RY^þìÙQQQQ••õë?Žs¹wîŒáævçNý»Y¬Îÿü3##2R.>ÜÃcéÒŒŒ^½þú++kåÊØØ.]ڶݵ+=½q5^*‰Ù¸±_¿? v‹þ÷ß/_ž8ñá/VUuûö!NN÷ï[Y…†öïß«—³3‹ea1oÞÒ¥þþ¯^íØ±ysl,—«[û‰D#£®]—-›7¯S§„„£G7l¸}»²R ÈɉŽ>wîáÃòò újuQÑ¥K;vÌŸÿÇùùÚ0Lf×®§O÷ìÙ®‚;¶hÑܹ±±@„o³¶ž2ÅËkРE‹>öT•ŠËMJº|ùÔ©¤$AÁÂEGŽ\µÊ×¶ü$*ÕÅeĈ F’Ëw숈èÛwÏžÜ\?¿¥K7m5ÊÃcøðþýŒH$Y²äܹsç&LÉ>%¤,–¹9‰tá˜1ÎÎ&¼|©P (™ÌbÑh&&%?>|¸Ÿßýûl¶HT^.Éå§O/^‘Èf»¹÷ìQ[«T ÙÙ±±ÏŸ¿/ã¸fOÅúõ³g³XQQk×FGÛÙMŸþÓOÓ§‡‡;:R(¹¹ý5{öìÙ.äæ‚}d²‰IHÈ´isæÌÛ¯Ÿ——™‚p¹‰‰×®=ºqãÁƒ¯_WVªT †¿ÿ‚K—öé““sëVQQ÷î3f ®§÷øñ²e¿ü’ЮÝêÕ‹ baQPpìØÂ…6œ9““£ÙYòïÐhžž³g¯X1c‘xæÌ’%ûöUWwî¼bÅÂ…ƒS©11¿ý¶zõ½{TêØ±Ë–ÍšE§Ÿ;·|ùÞ½™™R)‘h`}âÄ€µµ‡O™²m[ó9‰ ÓÝݧN5ËÆæéÓåËoÞ,*ú|Î66ü¿4I’‘QçÎóæ-_¾h‘—›miÉb!•:räüù[¶„‡«Õryjêþýƒ¿~ýþ½X 6þ›š¶m;bÄøñžžÆÆ..Ó§‡†Òhîßÿ×_çÏs¹RiI‰D¢©Qtz@ÀªUgÎܹ3{¶L¹qãÙ³÷î!HëÖ“'¯_æÌ½{ff¶o¿zõû÷#F,YâîÞ£G\Üõë÷ïK¥áá¿þzóf@@~~|ü½{OžˆD'þþûÒ¥7n\½:uj\\C÷øà8…bmݥ˸q]ºdfnÝzüxZZïÞcÇ\^Þ¥Ëܾ={vBÂäÉC†DEiPÃ×wãÆÛ·W®41¡R ßÈ)Ž+7nìÙ³}{|¼ÖÈíó0íÛ[Zvëæïÿï}uAÁ¹s›7Ϙñ1»®]ýýäÀ¹s§N­obçâÒ»÷ÇMì ù<ÿA‰@ÐÓ ˜7oïÞ[·6lð÷‹Oœ>üÀ˜˜øx‰D_¿{wQ(JJ4(<ü×_?½Ëåã–úÆç¿zµcÇÔ©íÛçå­^}þü¢Eº»Ÿ?¿mÛÌ ¬Þu¡Ñ¶m  íÐáÂ…¥K§O?uª¡“l%‰DU«•Jµºé½×Ñéîî½zyz"HRÒ¹s™™Ú5jA_ßÑÑǧU+##‘¨¬¬¨(!!==>žËåó%™L&“Ë¥R‘¨¢"1ñËÖæi4;»#vî<|øàÁQ£H¤¿ÿ^¼xðàŸ~:|8%¥¹VûQ”à ™:uÔ(2ùÆáÃ>äñ>÷¦Æ†ÿw”Êââ'†ïÙóÄ ÃÇgÇŽwïΟX³fÈ.]"#?¶³ES"Tª»{ÿþ²bEÛ¶½z;§õ¦E_? à矧M³µ‹[¼¸k×9sŽ--U«„H¼{·¶¶U«ÔÔß~›6­]»mÛV®D!QT¡¸Ù²… ·nåpÌ̆ »|¹U«»wW¬X±bß>‡Í8ðæM[[## m¨€¤P'&––ªÕC†88˜šêéUVZY‰Å))yy †™™±±‰‰™™©©Z]T”˜X^.—33gΜéêš½vmXØŒ;v€©óÅ‹¯_ëë·i3ujh¨µuddddA¦œ„BÉËÛ¶­_¿1c.]*)Q« „ƒôôÒÒŽ?><ÜÜüæÍ'JJZÊ; Ž+•AAAVVNNF†HD XX’H8^]™ùömZZNNmm«V‰Z-“UWçæffæädd€þˆÅ22âó•J¯»Üòaý¤Ó»v]·îá×/ùü†¦ŒHäpÜÜh4½råÓ±f½dr÷î?ÿ|æÌ•+ †ZÈdÒh$’J%“I$r9†}Ø/¡(fhH"Éd7nÔÿõÃÈÚºU+__??&SÛ'Òé..††d2™Œ öö>>~~|¾Öì—@03³µý2ß}üç$"ÑÖvüøC‡îÝûå&óÅ‹ÂBµÚÃC¥ÒNÀ¤E,61™>ýÁƒ¤¤Ÿf2Éd…B$âó%’…"‘JEêê¿þR©>æUªââ«WW®ìÐáÚ5Åq77OOKKK3|S(îîææ ‘ÈbÙÚúø´iããcf¦‰†ñù99iiYY<^ý @$‚a:ÝÜÜÔE«ªÊË%’Mž¨T;»°°Îõõ33·oOIÑÝW#•&'<8}ú¤IM_N(ª§²iÓ©SG”Ÿ¿dIûö3fìÛ÷îDÒôB nyš›÷ï¿hQHHEÅÁƒC†$$|~ªßØðÍOuõÙ³6\»ö1ÑÔ5KK?¿Ö­™Ìòòë×ã⪫µå®VWUÅŽzURÂbõèheE¡deV‘ýêUNŽTŠãÞÞR©J¥V—”¤¦––ÊåÂ`H$*Ž‚ÆÛbÃJ ÇÅâ‚‚Œ O_ßÞÞÂÂܼ¼ÜÀ€Ë}ó&6Ç;urv¶°0337g³ùüwïòó%ÁÀÀÕÕÏÏØX,ÎÈÈËÃ0##ssSSð<™,+«¼Ç'Lðò²²¢RD# !Ž''Ÿ>£Õa—{ûvZŽ/ZÔ¶­­-…râDIÉ·1TCQ==oïðp¹<===½¢B©D*ô‰ô%NÁq\­NO¿|yË–uëÞ¾mhí¤ÓÛ´Yµê?êî•Ôüfoß»÷ðá:XY={¶cǂϞiû ‡Þ½ýuÞ¼€€üü£G÷í;~üÝ;`ú)ìíGš0F{øðܹèèœû&———§¦feÉå¡¡ >Z·åéé98P©4‚Ìž½ÿñã"ч 8žžžšZ^®ÕB Ò0þc’Z]YsìØøñ:½}«VoÚôàÁÞ½º!„Â'O†wuíÛwâÄÈÈóçwïîÔéÝ»gÌ8v,)I$úp¨Çq™¬¸½ür§€IDATøÍ›ÄÄO>ˆDCCoo??SÓ¢¢ÄÄÜ\cãÁƒÏœyútÑ"sóââ÷ï««5f#Ba~>‚ôè±iÓ‘#=zaÊÒÒÞÞÄ$!a„¶m{ô¸pÇûðýÄ;"‘LnÌz)•êæ6uê;ÏžõèqìXÛ¶îÚ•›[W$‘,,‚‚""¬¬Š‹ÿþûùóº~©(›NFŒðö.(8þæÍ¢¢¦2yCQ'8xáÂñã-,237l?þСæ@ž´j5tèO?yy¥¤lÙ2n\AÁç÷T46|KÔïââW¯òó?½ŠHd29&A¤Òš©´®X¬VK$|¾TŠ †¡!“ j†‰Å••µµš3jÇU*©T.ÿúôÊdïß¿{W\L øû·jåââà@¥¿za}útïnkkmmdÄ`TTDFËå‹Åf3(Êb pæLtô€õŸÊã•—“ɺ©¦PðxUUu'ËjµHT]-â8ÆáÐhßJã@$š™õì¹xñŽýû+×®õê•’"1³ªª¢B¡pp:tëÖýûsrÄb C2ÙÜ<8ØÀ€@¨¯“ÖE¡(/OJº{÷öíÆx±Ã°iÓ”ÊúЉzz¶¶®®....T*Ð6¹»0|x@€±±@œ|þü‘#gÏòxjµ¥¥««›èˬ¬zô?¾kW•ª àîÝ3gbc5çÃÉåDâ›7D¢V¸V©Š‹##GîÛ72òc1&v±±gÏ"ÈâÅíÛ­kb@ È×ñŸ3±“Érrîß¿qÈ}ø+•jkºzudä®]?ýÔ¶-VRòꎷo?nܸqíÛkÂsá:wöô‹ìÒ%4tÁ‚¸¸µ0Š£ãôé'OFEõïìXÏž¡¡·o#p±jU÷î>üþýÇ _4æUçεnýéô¨Õb1§PP© 5)!Œ{õZ½zâDkëׯ7n¼|¹  ¾A‘hfÖ¥Kß¾­Z•—?|xçNa¡öJsóž=|üø÷ß[µ:{væÌ[·îÜ)*’ÉšÊ8I¥zÿ>2réÒ_‹ïÜyÿ¾%&30pÞ¼#Øì7.¼u«¼üóëÎ ßà¸Z­PÔ×fjÁ0™L$’J„JÕ×ÿpï @¥²XT*‚ÈåLR„ã*•\^÷©84_ † éé‡ãåååek‹aùù—.åç+•J¥µµ¯¯—“Éçggçä†aD¢@ ‘à¸Pxþ|¯^:Lœøôé§|*"‚€³z2YOͦRQA4 ƒÁá0™(*—¶ü1ÄD"‡²råéÓ.Ì™ãáñöíºuãÆ-]úì™Pb(ÅÆ®YÓ»÷ر½z…„8:‚2ƒ$R}vó×0‘(%åàÁ D¢°°)SfÏ^½zôè€à³ŽÇ+(ÉLLœœLLêÞ‰¢yyJ¥ƒƒ££½}xx¯^\îÑ£[¶ìÙó矑‘ÏŸçæj—Ÿ}}W׈ˆ>}Z·64ü˜æŒJõðpt¤Ó éÜyÔ¨±c-,>¦ùÃ0àÝ»[·¢£?¦‡@ äc@7¨‚K}?¿ nÝzøpÊ"ñüù;V­**3fÉ’Ö­ËÊþúkúôuëΟÏΖËõôüüÆŽ=zôòå¶m߾ݱãçŸ×¯ÿ˜öDO/(hÒ¤©Smmß½ûí·+WŠ‹•J*µic®P”•¥¦VU‘Ƀ»¹™›“É …Ÿ(ˆDsóV¯Þ½»W¯ÊÊ]»:t¸~½¸øc¦{††;ŽáæÆãÝ»·aCv¶&…d²‹Ëĉ öëWR²q£ÏêÕžyòõ¥ãbqqqVV~¾\þi'MÎÆê×O,>y2<<>þókí ÿý P”–¦¤dgËdÓ¦yxèëïÞ«ÇÓÓßßÒR&ËËKH(-U*5û[šFú2Yiibby9‡3wn` Dòþý©SååÅÅ"ŸolÜ·o@ƒQQU\,“!ˆZ]S“‘_U¥§×­[h¨öôizú¿k/ „Ö­ ò÷74¼xñþýêj CQƒ¶m{ôpsCÑ÷ï##‹Šî¯iP«…ÂŒŒ‡ïÝ[²äÚµ9sΞårë¶^•ŠÇKH¸|ùôé„Ýë,VP»ûŒ={~nRS¼tÆÄܹ3a‚¹yU•D¢¯Ïb¥¥-_Þ³ç/¿ÄÄ4D‹ÃbíÝ{çÎòå#F,Z´wïäÉ›6•—ïÝÛ³ç AK–¼x!L¦Mpp÷î;ÛÛ“ÉïÇ,-‰D"A¼½»v ³°ø˜°¨R•—ËåÏž=|˜˜Èãým@ ß( !‚ 8.•¾{9eJ‡'Ndd¤¥ÕÔ(•Dâ… /^üôÓÖ­'O>~ïÞĉUVº¹u颯ÿðá²eC‡öèqüxFF}Ã;pÒûÈ‘kÖôïO&_»6sæ¥K@SäìÜ´1W*‹Š>|õŠÇûå—¡CÇŒiÝúäÉÕ«ꯦ’ÉÖÖ}ú¬Xqýú‰ݺeg¯^=pàÖ­÷G  ‘Ü¿ÿÛo™™Ú5z “J««…B"ÑÞ¾C‡Žíí¯\9w.7·é ÅÑqäÈ“'oÝš6­¤äÓæ…MÖHŽŽ#FLŸ˜‘qôèœ9ŸŸ(76ü÷UÓkk_¿ÞµëüùÚÚ›7·oß²eÙ2‰ŠŠGoï™3·m âñΟ;öÙ³ÚZïÞ½¹c¤VóxééÙÙJ¥ƒÃСFF‰‰›7×ÖVT<ž‘Q›6íÛ+çÏçæjÜvK$©©û÷ïÛ—ž>iÒêÕûöíßÏçoÛvæLr²Db`àáѦM@€RyåÊêÕjÅz Cmß~Íš3g¶l±²:{¶ ÀÚzÔ¨•+»w'¢£.¼}»e<Ø}˜úªªØØ¿þº|ùÇ0‹““Oœ˜<98xïÞ¼D¢‘QP™PZú¹x‹Åññ‡ýþû‹nÝzçΙ3¦¦[·ž9óàAFFm-‚880bÄ´iáálvlìÚµcÆŒµs§®O:]“®]GŒ–H>0 )IׄI­.,ŒŠZ¼ø§ŸÚµ;tèС·oãâV¬xùòÅ‹øøœ.W,Æq …Éd³ --íì rrV¬7nÖ¬G¦gQ«E¢üügÏž<‰‰árËË?g2öõ0žžÓ¦Íœin½`Á;Z×ÐMþkP«E¢ŒŒ'ObbTªÒR…âSù Vóx™™GG …eeŸ×p\ xòdÑ¢1c&M ùeÁ‚uë6ož:Ç«ª’’NŸ^° gÏuë^¾äó1ŒÉ¬¨xó&&æÑ£òr@­œ·occ>¤RÈ¢V×Ö¦§¿|-‘TU}ÉY\ry^ÞÍ›wî<~lfF¡DG) …òèÑ­[11"ÞºUX¨äŠŒŒ;&LèÕK._²dÅŠ –/?thî\µšÇ+,LO¿{w÷n­Óµº¶69ùÁƒ7ž?ß»÷üy:uѢŋ 04¬©¹{wË–þýþùÆ àɯ%! ""ŽþÜË«¾‹¿›Å²³30 ïÜùt(¥ÓÃÂvìHNÎÉ‘Júe2-,h4½páÃÚ#‘'$¤§§ä‚ *U|ü’%áácÇÞ¼)üûÓõõ»w¿q#?Ó&M¿›žž’ÂåjÒE§[[»¹9:š˜ƒÈñy/vÆY¡¨©ÉÉIO/-m|>C ä¿A2ÙÆfìØC‡®]ûóÏÐPkk¡²29ùáÃÇoÞ¼tiݺ1c^¾ÌÎ qœÅrtlß~Ĉ)SFŒ˜:õÈ‘9s01)(ؽ;4´ÿeË’’ zõš1#8¸¬ì?&L8z4'çÃ)4†‰ÅÉÉÉÉqqŸr M&[[ÛÛ÷îüo±W( öï0 OŸòòyófΜ4iР™3·l±°`2q\ (/OOþüï¿'O>yòï¿SRÀd÷SP(&&ææµµOž?~ölbbý•Y©47÷äɉÃÂ._þí7ÿ=ºtñõus³±ápètU(Þ¿ÏÊJIyôèÒ¥üüääÔÔÆ8pP*óò.\˜:µW¯§gM@&+OŸ®\ùÓOIIÑÑ@mºð_‡\ž›{ðàĉS¦|>œL–ž~üøØ±ƒ5ì¹8.‘äæž;·téäÉçÎ-]ú©p"ѳgË—O™¢õS† ÉÉ[¶Ìœ9t¨öJVÖóçü¥©T«‹‹/\øå—Þ½ë–÷ñããÆõìyüøÇîQ©ª«cbvíZº´gÏ]»>÷t©ôÝ»M›Fš?_s%6vР?ÿl®2CQ"‘D"‘H$"´làH¥~+Çq±øÕ«ßŸ3gÇŽÄÄÆúΣӽ¼V­ºxqÉ’Ï—´J·{÷¤I‹ÇÇ7Ô‹“Ù®ÝÖ­Ç/_ÞÐ$R`à©SÙÙÉÉZ7ŸÏ! …N'‘D¢¿þªÿ+X<Ú³gÿþñãmmIŸ¡ø|AfÏ>yòs=…Z]VvíÚèÑáá›7¿y££"‘D^ÀO cùrôè¾}ü¡PÈå2™H$ðxB!Ÿ_S#ÖÖVW µµ\®@ÀãUUq¹ååïßs¹eeEEUU¥¥……••%%ÅÅùùïßçæ–—åä€gòxUUee–¤åRN"Y[wï>hаaíÚQ©l¶££——³³¡!Ö˜¡’Dâpìí-,ètÍ}(J"Ñétú‡Ã;Š2––mÚtìèåeañùýH‹åìܶ­‰ вÈw ‰dm=}ú“'iib±Xœ“£ù‰ž>ýóÏà`:½n?@&3™ ÆÇvØ4ô,–‡ÃbÕõاé?ôõ]\|}ƒ‚ÜÜØìÆ¹ç ùùº¸èé}Êõ ™le2uê¬Y={::6|w%•jk;pà¬Y£Gwïneõ-z6#8xݺŒ ‘H[RbqNNMÍ“'cÆØÛÃÞ@þë @˜;vòäY³ ¹\*Õø§Òþ¾!JsýCÇ1 |¿yóÆk× :täHOOŸ€€†G¨´´´ôó&e@ Ò<À“Æ!@ ä~xS‚iÓâãÏŸoxøC‡† ƒ@ @êó?bkݱ§±¢@ ù¯Mìš"ÑÌÌß¿sç‰  tvnœÒ”HVVaacÇ.Z4~ÿþžž,l@ê¤f†H´²êرOŸ9sÆïÚÕË‹Éü¯OÈètŸ­[ÓÓëúJJZµÊÍ­áž°~D(+«  þý{÷nÝÚÈèS~Å4ù“’òàÁèѦ¦ØF›2ÙÁaèÐùó׮ݰa„¶mõõ¿]þ6¬>@ iiàä«™Q«KJž?¿ukÿþS§žÆ. iL²fÎ vq)+óõ ˆ Óß½ûã“'óò|}Gêß?<ÜаªêåË/yŠ2'Ž׺u~þÉÉúúáá={öíÛªÎ㥥=¾ÿ¹sqqyy2™v¢O¡X[7uj÷î®® ‚ ˆRY^~ñâ‰wï&&ŠDÚTª¥å!ãÇwëfi™’rãÆ¾}/^ðx*‚ ¨ODÄœ9AABá™3'OÆÄêëûùÍš5|¸£cnîÅ‹W¯Þ¼Y^®RéÆv„ ‚ƒ•Ê»w/_>u*7W.ÿñ+*‘h`˜›GDüôÓŠ‰‰¿ýöÛoUT HãêˆYcëó–вX..ǯX1þ„ ÁÁ††A\ÜåË[¶=Êç÷ë7k–“Ó­[+W8ðê•@€ãB&›˜„„L›6gÎܹýúyy™™!—›˜xíÚÑ£7<øúue¥¦ÓÂb9’pìØ ArëÖ€þþ‹=}*Á¡@ ÍÉmb‡¢šÏ'Ož={âÄH¤ª*2äÀß~›0!$D&+-‹]\BB@Ⱥ'Ú7䊙YçÎaaÝ»/^¼jÕôéÆéëWTÄÇggËd®®Œøð´innúúºb8®PTWWVVWWT ˆ­mxx·n>>vvTê‡fdr9—›š*•:;?mZÏž­[ƒ8’É––#FLŸѦTZXXR"—#ˆJ% …NÛ¶¡¡S¦têdbB&kŸÅd¶júìy<ÔÛÿøß³›Å2ö})²f)%RQ‘$T–vIûªM{ IE¥¥Rˆ"’-K²D–lc;Ï0f1ËïùúQ©L©Û½Ÿ÷óñ¸®fŽó>ï×yåuÎë¼ÎÚµóçËÊÒéÃÃÿ%E¡ÔÔöî õÊ×ר˜BIOŽ {õŠD21ññ ˆpu•–†ÃGÓkj>þäÉž=²²••‘‘w¼|YTÄ`¨«;8,[&/?êÒÄmzîàáQPpr:vìðáãÇ]\ÖÓóôƒ¯lp8'(ˆD¢P‚‚XìØ¾ä7rûvpðÅ‹t:F¥’H}}DboïÀ@O‰ÔßßÝM"õõuuuw··úÔÝÝÖÖÔÔÕÕÚÚØØÙÙÒÒÐÐÑÑÜ\_ßÑñéSmm{{SÀɳ¯¯««­M’K¸);‚År‚wÞ½ë訩‰BñðÌšuäH``aáõëÖÖJJ©«»}û… œ”||ÜÉ 02 ‰ JOß³GCctb…JI-^|à@AAd¤‡ÇܹãGÄÂ`ÔÕ]]ÓÓ££X¶LHh¼CáP(/¯†Æ™3aa—.ݼ9¾°°‘ѦMii¡¡k×ΞÍË;6g$RKËÃãüùÂÂ+W,“9©‚Dêèxzúøäçûû›šJIýý'XP(%¥Ã‡KJjj>~6¶¿¿¬lÏ Î~ëäåÏ-ã—‡ ØÙ%'dr]݉†† ·pattE™<’'={öÍ›DbRÒ¢Exü—¹àp&&þþ­­ƒƒ11nn’’_¶nåƒÃÍžýèQGGQQhèܹc§ù„²òÁƒÉÉDbq±‡Ç´iœdîõ;ýÿ½õàñææÑÑ==UUiië×KI< Åã//*"“É䨨իÅÄ Pàã›=ûþýŽŽªªôôõëÇÊ“‘Ù°!*ŠDjo¿rÅÜœ—÷Ë ‘ÒÒ66Û·oÛæåµ}ûÂ…òòŸËä÷ð9ƒÄf·´TW75Ñé ¬L§³X,Vw÷§OÃÃÀÃC§¸FàþÔËðpqqzzm-‘8ò·,VggIIié§O0ØŒªª‚‚0XFÆàà×®"?‚Åøø1(èÁƒÆÆÇœ¼¼èt!"âüù·oÆ–—N¯ªJI).îé™?ßÀÀÄDT4%¥±±§GBbþ|mm †@ˆ-+koÿY—›¿  WVÖÑ&“++ëêX,!!qqQQηTjuu{;›í榡!%…B@C™<0P^ž‘ÑÔ$ àé¹{÷¾} 'OÅÇWVvu}}Þ‰Íæ.ýŸ£©)::.®¼|Ôínx¸»»¥…H„Bµ´øùQ(ޱÍÑmLHH[{Á‚Õ«íìfÎÔÔ”•TTœ2@£‹ŠÐè/Msîòç¾æ¸-7í½¦æÝ;Ba³55)ƒÉli)/om¥Ñƒb0Øl( ýùö>Qù ý]úÏ}ïÃM}!‘ŠŠDcãƒYY£Žq,V__fæƒ4Úòå‚‚œO‘HIIéÓ±ØööçÏóó{zF{%&³«+?ÿÝ»–ÎÂbÆ ))"%¥²rtß›Non޽|ùÊ•ØØÿÆHòïàS”'O""ž]SƒÑÒmiy÷.3³³ó¿a‹E¡HCClöÀ@d¤•Õ¬Yk×¾yóãU{­µõåËsç<=_¾ôñA£åågͲ³óö 9~<.îöíînuõåË:;9rå6ýŸywãK­þNGçàÁ#Gtuóò6m23srzú´»›Åâ¸0ñóoÞü­O,nùùòL6›Á ÑŒ±%ÿ}·òù҂䤸ø~eÚÿ³úÿ»ê‹Å¢P(ƒÅá8ýáHoƒápŸ:,•:8H¡ ÅÇ7²'9Úç¡P8 4‰D¥þS!×A@@@@@>ç?sÒï6Õ $rútCCiéÑSP¨ºº††Œ “ÙÑQQ1Þ^ÏDsÇ`¦LÙ¸ÑÍMI‰@xð ,ìøñ¨¨¾¾™3ÝÜ-ÒÒ9î<–áášš´´÷ï{{§L±°ØºuñbQÑOŸ22JJZZ¾U„ŸΜӧoÜxþ<*êäI{{™rÕ–Íf³GWäÇKÁdööVVvuñò˜™ÉÉq,Å¢P23><~üòåŠ J]]WWZú[g`¸M?ñwe2Y, …Á~~æËåá•—ÇáˆÄŠŠÚÚ‘I&*(hd´dÉÔ©²†ÿTyþ–¥N82™Á@¡„„øøFÏÈ ÑS¦,^lf6âlösú0ú?™õE£µ´|øðñ#•ª `c³h‘ŒÌÈC üü††úúcáÐé­­¥¥55Tª¸¸¡¡šÚØ‹y¡Puu]]II*µ®îýûÖÖ/wÑhUÕ½{ÃÂîÝ‹‹ sw×Ôä6ÈÈÏðƒ$Ž‹Ý·¾]ºÔÆfùòÿ A±ÙÀËkbâêzþ<™œœœ–60 #³råš5 Dâ›7W¯¾?’áåUPÐÒ23SRÂáÐh))qq áãÓן;ר˜Ínm­¯OIy÷®¥ep͆Ãåå-Z¹rÙ2(4?ßÝ='§»»¡xñâÍ{û÷ï·´LOwq‰Žîè;… Ó›šòò^½êí53svéèÎËëéù¶c!­¨èààìlnnfF$^¹ràÀ?»×Ä` ´¶ö÷€¸øÌ™ffææ&&8‰Äbõõ•”äæDâÐPyùµkÁÁëÖy{_»F$úùED|ø04„Ç«©éëëé ?{æí}ãFM • X¬©iPPP‹Kkk|üÓ§oÞÔÕ ðòªª®^½y³²2^Q‰ ܧÿYh´ööÆF"‘ŸÎ7·•+gÏf±jj$²ª*!!%¥µ• š½$²³[Z$$ÜÜX½:33(¨¦FPÐÊÊÃÃÛ[G€?Íðo+p¢ÉijZXØØèëãñX¬’ÒÔ©X,""2gŽ£ãÊ•,PTôìÙ‹••$·¹S©ÍÍ99 æçwà€§§›RTÄÇgc³cÇúõœ íí?¯Üëÿï­/)// àÎOŸRRΜyø0.NE%.®¼œ—×ÈhÙ2&s¬ñÊf÷÷çå]¾Ùßïïïãs𠄇€¦æ–-~~††}}‘‘ÎÎYYcƒ­s€Á„„ôõ­¬fÏ67 %0tÂùü«]ìØì‘É}^^SÓГ Lf}}een.18Èdr 45UWL™ò¹cÎÄa±’’®]‹‹ëï77_´hÓ&YY¬µ5-íáÃ-[nß®¬äÜ÷œ˜trr––¦¦¢¢ —–VTôôHHèëϘ±hQs3…’››ŸßÒ28‡‹‹›˜LJ"%$„…½zUZJ¡pv1**®_ø°¨hï^UÕéÓ§LA¡::ªªÆNÓ‡‡;:22JKÉdggUÕ‚‚´´Ñ;‘¾ÐÖž1CXŠ‹}|¢£««ÿÙ;’X¬îî„„S§nܰµ=wÎÁ!(èÁWW*µ¢âÞ=;;Hd2éôÊÊ€77++mÿþÇÝܼ¼BB¶mc2ûú+*’’®\áÔ>*µ¢âéÓ7o¶nut<{ÖÍMZZ@€ÍîﯪÊȸpÁÖÖË+!¡£cd­œÛô? ™\Ppõê®]ÁÁ’’^^úùÝ¿Ïf‰eeaa»w'%¥¤´¶“98XY™‘‘™É`´¶~$‚ɨ­ÍÌLI@Z[9gp¨ÔÊÊ V¯ööذáêÕ{÷ØìúúÔÔ°°õësr6mruíë#G$Ä]þÜÂ}y&ÞÞŒŽŽ‚‚ÌÌ´´öv‰ÓÞ{{KJ²³SSQ(ÎM@LfEEnnJÊÐPW×ð0› … ª«Ï›çèèä$/@•š——“ó铌Œ¥¥ƒCuõÀ@jjBBe%‰Ä­ü™Ì¶¶Ç==Ož46¾zuãÆ£GýüLLª«nßvtܺUUuÛ63³¦¦¡¡/õgbúÜêÿï­/6›LÎÍ=vÌÑÑÚº£cÇŽÍ›ÍÍ•”ÄÄÊËÜCCuu#"ž~üù»ž@@@@@@¸âßæ€¼{rSŽe$Ì÷Ó§çÏ>À È¿…RU54ÔÓ›>]^G¡(”ÖÖ¢¢´´ÜÜÒÒîî?†drù×H!!zz+WþÎ'0™ÕÕ••×›³Xýýuuýý ƒ€€ü9Øl­§çãÇ7o^½úøñÍP" ÿ-þ3÷ üM@ <<ââÓ¦é訨 ÊÇ7uªšÚôé²² ÔDÿa P( E£ed llæÏÿÕ[·@@@~¶-òð áñ(çn2„‡GBBOoÆŒ©SPB ÿüG\ìþbÃ¥¤,prrrRS#‘^¾¼u+.®¼|pðo¹ær2€B‘HbÔÈA ¦MÛ°!88-mٲnjLMÃÂ>@ŽÃÍðøqPP{û¦MÚÚÛ·¿?44ò-‹E§S©ÃÃßwäáÑÐØ°!8xÇÃ×wÛ¶{÷**¸½ 䟓‘qu½s'9yÅŠ¸8??ÿÐPÐÒÚ²%6¶»{b޳;uª½ý–-ææ}}÷ïß¾œ<ÙXÐè3λ}ûðážž'üüªª~®½a±ÆÆ'N$%?ÞÛëáamXRò'[.!*jn¾u«“üôi}ý?ã…ò󺻻»ÛÙq‚Ðÿ*Ãà ññ¾¾×¯õ÷ÿ3n×ÿtýþ,p¸´´½ýÅ‹99¾¾Læ–-::;wææŸ8<0àà ¦¶gOF7º…òóϘ±zõ¦MÒÒ™™W¯ÆÄ44LÜMA¡ðø)S´´tuMMçÏ76ž:µ¶öî]oïÇ››¿, †ÇkiÍ;g?uõ«W™™Ë‘€_í'EE-Ú·ïüySÓÂÂÇINnkûö•&©QQGÇèèˆGÇèh—+ÂÂZ[%G°}ý÷øŸ6H))CCKKmí¡¡¬¬ÄÄÒÒžžÉŽì†@((ØÛïÜyâĪUMMÝÝ‘‘/^”—D~úµòü‰òÿ¸›[¶ìÕ«ºº  ÆKqà@aaGÇßË%<üÓ§Õ«Ç~òáæMS¦ØÛ?xðíû‡`0!!ƒÅ‹ml´µããÏœùùw‡Á0~~<‡C"áp …ýp8 ‡ÃáœO¡P‰D¡Ðh †óFc0<<#ÿâáA ††JK_¿~ñ¢¤„D[v8\NÎÞþþý¨( ž‰—oxøÓ§û÷wì°µ=þgL@$rêÔ½{³³]ÝY³®_¯®æöZÚßÅŸ‘ÿŸyyùõëoÝzùòèQ554úû©‡†Š‹rv~þ¼¶öüù-[œœ¶l ¨¯ŠòòZ³FN.!áÒ¥±Sw$RYÙÃÃÏÏÏO^><ÜÉiÿþüüÁAàÓÁãMM==wìPPhlŒŠJIyò¤§g²%€ÁÈËÏœ©ª*%…BH0 …Áðòb±0ØÐP_ßÀÀç7H}.!1cÆŒjj8Üýû}}Î4ÃEDfÎ

|h``brï^}=“‰Åjh¬ZåêjjÚ×—–V_¿zõ;çÏ··{x̘±gOQ…2š3“É`ŒÈŠówº¸L™2êz„@HHÌŸ¯¦ÆÃƒÃuumß~挸ø/¾¥Ñª«Ã®^½u«¬Œó<$RYyÏž˜˜üüƒee¿÷® •J¡ÐhL&Åb±_:R(]]uu©©gϾŸ˜XRB"5A˜ÌÎÎÌÌóçwìhläåý¶S!.(h`àèxêÔÉ“VVS§ööææ>yRPÐÝý³8›Íb1™P(gXe±X¬¿iMñOÉ~þ)S´µuuŒŒŒ´µõô´µUUÕÕUT¦L‘‘Áã±X8œÅ¢PˆÄ¶¶ÚÚªª¼¼””„„»wCBbcß¾moÿþ`Äbµµ½xqöìš5%%£Ž£P(Ÿ®î† GŽøø¬Z%"òñcLLTÔ“'‰‰ééÙÙ?~øÐØfgçé©£3<´sçÙ³l¶¤$‹Å¹ˆ`ô™ Fo¯°°±±——ƒƒŽÎÉ“ùù™™‰L®ªŠ‰ÉΦÓÃÂlm55ÅÄÞ¼©­ÅãÅİØáá®®††ÚÚ¶6 e¼—pt¼uëÚµ}û45ÑhŽË…ÂáH$‰@ ‘H$‰Å b±0XHHs3™ Ÿ×Ab¢µµ²²§gJ §T<<ššÛ¶EEݹ³t©”…b±²²òò(îé_Xèê:~¿H¥¾üøºu6<{6ѽ´ñ€ÁDEçÌqw¿s'"b×.#£ºº[·V¬ÐÕõ÷ù²¥åûuúgô“Élk{õêæÍcÇNúúo fΜ{÷Þ¼‰ˆOO7·ÜÜQùŽ”SMíèQss{{+«?Û‚ÿùúýyQÑyóöîõó ÷òš2åõë-[œœÜÝ£¢:;yy-,üüÒÖ®ª:uÊÌlÓ¦{÷Ô ³Ùt:™Ü×7:qmnŽŽ>rÄĤ®Ž@ ‹‹ ­¬\¸ÐÞ¾ ƒÁãñx,‰¤R‡†z{ë뫪h4…9s,,èôû÷­­ÕÕƒƒß¼il$‘†‡Üo#‘X, T*™L£M†Dÿ\ÿü'k]RROOO‡kj ª©ùÖ¢#*,¼xñ… ‰‰{öTW¯ZµhQHÈŸ_Xü7·¯ÉƒÑÓÛºuÍqñôôƒ;:¾oêp›~<@»ß ƒÑÜüòåÝ»çÏ¿|ùß}K4zÆŒƒss££gÌÈÌA"%$ôõ••¡Ðºº/:;™Ì±ß~&û¼ã¦Ó+*Ο·²ñóc³™ÿ‹ó“3(!bb›6:uèо}K–ðòææ>yòôiDDLLZZzz^^MM{û÷" ²ÙJ{{qqvv{û×ßB¡8œ²²ƒÃ©SçÎ]º´q£¬lqñ•+;vØÛŸ9“PUõ+n™l6ƒ1<<2°ÓéLæßd ýnù#JJ[¶Üº•’âç7k–°Ù½½55ÅÅyy……eeoßFEed„‡76vvöö’É, ÅÏ/*:eŠ––¡¡µõúõçÏ¿~½wïÚµAAvv..^^ÉÉßÚ«e³i´ŽŽššÂÂŽŽ=UQÙµëáÃ3g-jjÚ¿ßÐÐÖöæÍ²²¡¡±uÐØxà€“SvöÈ¿‚ƒÇËŸÅêêÊȈŠzÿ‹Ý¿ßÑQSÎÌÌÏG¡TUMM­¬æÏÁøøfͺy“@°±6›É€®®ÔÔK—V¯vq ÎÎîë•“ÙÛûæÍ¥Kgδ´àpÀd2™ ƒ1<ÌdÓét:L›¶yóóçwï*(œ>mh¸aÃãÇŸ>‘ÉCCTêè‚Æ×5ÜØ˜pîÜ> ÑŒ’Òöí·níßßÙéïâÄñãyy£-ýËÖÚ×W^þ³;ŒÌÒ¥ÞÞ7onß®¢R]äá¡§wôè«W?^Nù“ýÿ—ª~JIÉÑñÌ™U«h´€KË¥K¯^­­ÕÑ9pàܹU«ÔÔll„„àpØ¿ÿñãÇÝܨÔoõP('##.‡?y²f¢¢›[n. 8‹50P\|÷®ƒƒŽNr2?ÿà`{ûà öàÁ¾}cóááÑÓãçwpX¿~Ö¬ææššææ‰™Fœ2 ‘X,ÁdR©4ÚäìŠüMú@()­_ýöíÒ¥ãÕ™üþý66Gޤ¤ô÷s¾‡Á„…MM7nôò²³“–F"9ùÈÈÌ›§¬ŒB1‹9râ„¶öð0›ÍfS(B~þÓ§aa))ByyqñЎΖ-›7kk‡‡ïÙ“—7v)l_¿(TDdΜ={ììèôû÷/ÎÏ'¿×"¸Mÿ-þ $L@@Kkî\]]AA8œ‡‡Á02Z°ÀÌŒJ&“Dª©ÉÎÎÉéê’—÷ð8|ØÝ‹ˆØ¿?8¸§gîÜÇ÷ì±³C¡23OŸöö~õ …rv>xÐÃ~üØË+(¨ªŠBA£UUwîô÷߸QK‹ãhC¥ÖÖÞºååœ=Òt¹-ϧOd2Ê]ú‘N72Z·ÎÓsûv;;mmii¬§§¨(*êúõ'nÞ|ÿ¾·wtʇD**ÚÙ:µu+~âDJŠœÜæÍ;vlÞ¼pá”)Hdmí£G[·nÝúäIm-Îfæäœ;·xñ¦M;v\¿~ýzTÔû÷&&žžFF6äæ**8ôäÉÁƒRR¹¹÷ï?zÔÜL§KH(+«ªŽ òòóæ­Zef& ðêÕš5/_ÆÅUVŽL"Éä’’û÷½¼vïØ44öì±°X±‰ôöÞºõèÑèèîîŸö³ÙÃÃTêÐÐx+ÉP¨€€±±§gdäÓ§ë×c±;fe¥¬üüùÇ¿Úñ@ << K–xz]½ºqãôéÕÕaaÛ¶éë¯Yóäɨ~ 6›É.étã×r…Áp8iéiÓôô ¦O×ÖÖÐPRRT”“Â` Hì訩yÿ>''.îéÓŒŒ²²¾¾o¯ßü^ù·´¼~ºk—OnnnnUUKËøn®ŸóøñÇgÎ\½º~}xøÓ§÷ïŸ:•­¡áéÛÕõã§óð(*º¸lÞ<}zcãÅ‹ ܽû¥iÄ-,VW×»wÑÑUU‚‚gÏ^»öøñܹ’’jj ,V]]ZZRRaaG›­ ðð¡‰É¢E‡ÑhÌ”) úøÄÅ]¹òøñÅ‹¥¥ëÖedŒôDl6ÖÚZ\œŸÿ£[èZZââ23)”Ë—ÍÍØìÛ·kjF'bP( †@“9öü ‹E$ÖÖfe¥¤ÔÖÂáòò §N!‘õõGF¾~œ<6‡ÉNyy55íí/^ ;yrÕ*!¡wïΞµ¶63»p!%¥³“[—”?Õ?ÀáÒÒ›6ee%$œ?¯£ó­T÷ïwtØÛùiQÑ™3+V¤¤üí÷O×ïäA£}üdjª­ÍdÒé *ºbEx¸Ÿß66||Ð××Ð08(Ô½{NNÖÖ§N•–~ˬÆáæÏø0-íÚµ±ŸÍœyäH^ÞãÇÊʹ¸xzž=›–ÖÜÜÝé¨8;ïÚei© À™´j””±1ƒÉÊZXìÜy䈈Èç®’Lf__NÎ;áá¯_·µ­‰Ä`àðáa2y¢FÕß<>~­iééÇÇÇ77­U FOOyùç=,›ÍbÑ郃ýýýýD" (”¢âÂ…bbÃÃåå±±UU]]#.v0''gm}æÌµkk×Njg§¡±o_bâåËYY\º´e‹žÞ‰yyYY$ؾþ0˜œœ½ýæÍ³fwîìÝ[^þý¥-nÓ§Gþ/‹u|xxœœŽ;|ØÆFQQNÐhOÏ3g$%Éd h´òòk×ììòòbc‘HiiSSSÓª*_ß»w?~\¼ØÙÙÎnÕ*>>^ÞGÎËÎÆã-- £¢Qi*µ££±ñÓ§–eeKË;]\22Nº~=;»¿´1pSžOŸÈd$’»ôÃÃ(”šÚÞ½áá¯^yyÁ`Ožœ?ÿ~X“©£ãááãA§/\¸dÉ;#]!*j`àèèꪮ.,¬¤´y³™OjêµkEFvwS(--#kAÁÏ/(Ô×ÇÆúøXZfg¿|9wî”)(”ƒÃÓ§ÉÉ'Nhjöö¶µ ãpHdMMtôÑ£/¾ßßÏbA 8œºúªUwï&$ØÙÕÖÞºµuëæÍqqãyá­C5µÕ«—.zûöüù7oz{ÏŽ©¤´fMdä³gëÖÑhÇŽÙÙÙØÜ¸A üºW7)!al¼}{`à¹s‡ÏK¡$'ß¹sæÌÞ½EE(”ÁÂ…+V(*¶·WWøðk÷\±Ù ƯH(”ªêæÍ±±‰‰ûö™˜ …ÒÖV]]TôáCuuuu]]K ÐÚ `±bbS¦XZ:äævø°OYY@€­­›Û±cÜœŠ˜,ù ÕÔ¤¦FEÕÔüŒìÈdáÞ½;/\pvþøÑÛÛÃÃÌLHèùóÇl"1™Tjo/…… +)‰Š¢PÐÐÀíRUµ´\½ÚÑqÆ V¬07Ÿ:•ã. DG;9-Ztñbb"Ð߃M›v䈶vLÌüùšš0XQQ{ûÐP]]RÒñãGfg;9]¹bm=}:“‘‘™I&Ÿ‰É‘#ž<©­ÅB :r¶€³s‹ø?H ƒàãÃ`bbÞ½ëíe0àp 眊`±23]\ --£¢úú¾®'N]}Î"±¨(7·¥eD+Q( ‹õë´´ä䤤ÄÅ¥¤$%ED„…ùù±X F¡Ðh6»ºúìY;»ýûcb¾v™€Byyuu=<üüž<ññ13£R££OŸ65ݶíþýüü±½îßÙ?0­­wïZXhjÞ½ ƒÖþÔ©nn‰‰99»wkh@EʼnÆÆÎÎÁÁµµc]ô@^~ï^gç¶ýþÎúý=0™t:‹…FkhìØqõêõë G.Zäã“›K$JH;–}éÒúõáá11‹{ áå•—G¡ §OG>ÌͽxqíÚ‹/]zò$...NYyûvgçM›¢¢xxDD¤¤$%ed>? ƒ‰ˆðòÂá€D HHÈÈHJòòŽ•:ƒ@ ‘_ŸC‚@`0a±&kÿ蟿]W$RmmFFRRjêD]ÝX¬ÞÞœœû÷OÊÉ@£§O¿paåJ‡ìlŸ3gŠŠ;ƒàቊb0tuSRfÌPTä瀒’””ë׳³áð۷׬11Áã³³ãã¿ìÝÀöõ{@£UU7nôð‘yóÆË+>¾©éûšÍmúïrûvpðÅ‹t:F¥’H}}DboïÀ@O‰ÔßßÝM"õõuuuw··úÔÝÝÖÖÔÔÕÕÚÚØØÙÙÒÒÐÐÑÑÜ\_ßÑñéSmm{{SÀɳ¯¯««­M’KþœØ!!!{ûÇ‰Äææ fÍÂbÇK#"²råãǽ½55GêëKJ.XýáCLLiikkT”››‚´i—–&'¯\)$ôu—…Ù˜øû·¶ÆÄ¸¹IJŽ|Ü—çgÒc0::W®44ÔÔîÚ¥ 0' …ÒÔþÓ'2™@èî~ñÂÁáËU®ÑÁ{ÊW׌Œîî‚‚ÄÄS§,,ÐhŽxx¦L™7oöìiÓp8 ƒQR²µ½q£¨¨´´®îùó={6lؽ; àǾ¾ââׯ52þ–tƾ7߬Y·nÕ׿}2¾´´²òܹ66Û·Ÿ8qòäݻ޼yõêÍ›~~Û¶¹ºÎ+-ÁŒ¨õÛ@¡ÂÂ+VÄÄ””tt<{fm-!ñã²ýL@`ƌ͛ýý‹ŠˆDL&“ 2¹­-=='çÕ«{÷ž<¹? àîݰ°ë×ãã³²Þ¼éé!“ „ÚÚçÏ·oŸ;w"_WRS 29%ÅÆFD„[iprÁá¦N57_°@[{Ê»3¢PÒÒ+W††æç“Éõõ§Oãpÿ¤üjÚ´#GJJ„šš ¦Oÿ2.'çì|ñâ“'ÇëéñòŽH“–^³æÞ½ÎÎÄÄãÇ °Ø±Ò‡BEDÌÌ‚‚ÒÓoÞ\¿~l+ä|+*ºxq\\w7ÐÖöîݵkçÎmÜ8{¶šš¾þ¶mÅÅ$RJÊ‘#jjc[' ¥¢²aþ}{ö,X *:6?ÎÔôÊ•¶¶ŽŽk×ÌÍGëÓÒ²°°´œ7oÑ¢E‹LM,°°01177336ž;×ÄdÆŒY³fÎÔÖÖ××ÑQSÓÓ³µ=wŽ@ ‘’’Ž36äãC£‘È…ëG£gÎ ÊÍíèxölÁAÁQI ÑZZ›7߸qçιsþþgÎlß¾{·‡‡““‹ËêÕ66+WÚÙ-Z´téÂ…::ÒÒ<<ãé/­«{äHM ™\ZúâÅæÍJJŸKzr™,ý„Ã¥¤6o~û¶²²´ôèÑiÓ>ïŽ@ÈÈlØ_PÐÕÕßO Éýý¥¥ÍÍññNN_ƼãœAJMíïûvÍYÙ/ÛçŸh¿¿³~W=òòêéíÜÖÑA&AAzz ç[>¾ùó{z22NŸÖÔü~è}nᘘ²²¶¶{÷ŒŒ¾”.-mcsêTNNfæÞ½úúßßyxôôüürrH¤ñëñ{ðñY['&VV67‡„ühñ7èÿD[É”)Û·'$ô÷{xL›6þld" ‘**Û¶÷ö>{¶q£ŒÌ×¥F ””öîMJêëËË[»VA#>¾Ù³CC[ZJJbbllðøñŒS°}M6ˆ€À‚ UUÇþxVÌ]úêÝ¿CLÿl6™ÜÐPYÙ×ÇÇ'//!!.ÞÞŽÇwwdg³Ùsæ(*JHˆ‰‰‹óó‰eeõõ“ã5™À`x¼²²ŽŽ°0™\YYWÇb ‰‹‹Šr¾¥R««ÛÛÙl77 ))ÎêöçÖvOÏÇgÎÄÅÕ׿Z3<\Wwÿ¾­íâÅpëÖÕ«>,]éä´páñãññiiYY#iÒÓ¯]ó÷Ÿ=ûÆ-[ÍÌ`p05õìÙM›®_/(èîþÑš &%ekëé¹b…¨¨ÐÐÐÇ©©66­­……¯_gd¼_Zúî]}ýÀ‹…ÅJKkj9¿}û¾}¡¡[¶˜›oßþúõDVN ==—¹s!ÌÌÕ«32>weà¶DEçÌ9}úÉ“«W·oWVnlŒ‰¹r娱}ûÂÃ22ªªúûÇßU€@0EEkë  W¯üýŸ<¹~@ÐÐX¹2!¡³sâ;1l6“I§sj–ͦÑ~n‰Í¬­MIyõj¢A£57GG?¼gχë×ÛØL›ÆÃ““óþý"ñM®ü'‹F#‘h4 …ÿ4àpqqKKw÷… §N‰¹z•F‘0“ÙÜüðáÞ½®®3gFEEFÆÄÔ×Ï™ãéZWG§³X½½¥¥©©~~—.:5gγg®®©©œøs,VWWJʆ ššºº½½­­$ÒHûäáééyñ¢¹ÙÓÓÚzþ| Ÿ‡‡€F«¬¼uË×·²òsž7ÏÍmæL ¦¦&0°¶v´†‡;:>|HN{NÃ`¤¥9!,ääñxdh¨»»­­µµ¦&99(èܹwïusST¼|y󿬬ïE®@¡ää,˜;—¯ªÊß¿´t¬_8…òáÛ7¯[÷ó54xpäÈË—kÖ;!!ÒÒ{ö„†îÜY\liéçWQ1‘‘ç÷·ßß[¿¿ct”•uu yõêÐ!,öíÛÆF&SMÁ­I6{x˜D"“ED6o~ýº¸x×., Ó‰Ä¡¡/W¦a0 zz=úº‡e0š›cc5+.a³ÙlŽƒµˆˆŠŠºº¤$7Ò§ ‘ªªââH$ †ÃÉÊjiéëki‰‰”‰Å" „««ÇsÊ‚B9'lY,nÏ™B¡h´¸¸¨(ÒÕÕÞ>4ô}mþûú片ËÉ-^¼x±œ\míÓ§iiãÅ4•§–8HÅÅ÷î½zE§?zä쬯ÇÇÅ%'ÝyÛ×ä·Oqq›½{ML::nÜX±âýûï!ã6ýôå¿#Ìß•úéSYYs3ª«;mš’’‚ ÕÜüî]a!‹µdÉüù²²ÒÒBBLGGXXsóÏz:þ> P †Ÿƒ@p¸eË""RR–-û:U__{;ñõª“ÙÜüî]}ý÷ß‹Éìí}÷.4ÔÍÍÐðÍ›§OäåKJyyUTLMçÍ[²dٲŋæÎ••moOM Ù¸ÑÎ.$¤ @HhåJ/¯]»ž=«­Ýºµ±1!!:úþýG^¼ˆ‰IJ*)iiù|»‰äçG£[Z²²bc BCÏŸ¿}ûÙ³’’oAAgÎ\»¶kWVVzúɓܻ—½{w~þYÂáx¼´´„90™ÙÝýk5Ëd ´´ä燄xx¨«ÇÄdg74ŒLi`0Žf³‡†È䱃+›=4D ¼xqäÈÉ“®®+W^¼¸l™¶6›ðêÕÀ7% Ó ‹Å€áá?9”1ÝÝõõ--t:+.þ½è}¿Oþ¿‚ÁÈËÊʲÙMM>´·]0@ ¬¬Ö¯WQih {ö¬©éóå&³»ûåË]»V¯Þ´ ö,$$.ÎË«¡aöìS§22úû»º^¼ðö¾sçС¬¬}ûÖ­SRÊÌôõ­ª6›JíìlmýrȤR8C´§§‘‘˜XPPccs3›- `fæí}ø°½=ÛÓÓÝM§£Ñ &&K–ØÚjj¶¶úú.X3~4.BFÆÚúÀÐÐà`7·3 ¦¦’’ÊÊöv"‘Á@"ñx))yyYY(´­­½16>}úàÁÛ·­¬¼¼Þ½ûöT—04´´”’jnމÉÉù|9‰”‘™3ÇÑQS³¡!22>¾©‰Ûpö4ZYÙÕ«¶¶k×âñß¼ùèчFFkÖ¬[wýú›7]]“§÷¿W?ápYY{{Ÿ˜˜]»(”3gLLîÞ­¬xðö-“¾l™ž/orrrò÷Î"ý¯·¯_…š6ÍÞ~Ç ÒR—¹¦s›~B:ùïáï‡Å"‘**H$ YY«¾¾¹¹¾¾±qxXZZ[[CCX˜H¬©!þÆX!,…B" ±Ù‘‘––ššX,«¨øùOié;ÓÓ¿ ;ºó0±nˆÍª¯ñ"<<;»«KPÐÜüôéK—vï>xpãFSSUU,¶»»¥…N—”œ?ûöÓ§##ÃÂvíZ±BUioïîæå>}éRgçíÛO:~|ëV5µ¯](”òòë×÷î]²dÕ*ÿ'O¾m”ip°¬ìåËØØ¦&AACC--<~"®Læà`oïÀàñŠŠRR#nƒ? …R[ýàAVVC“)%em}úô½{eeÝÝUU==ïß·µuvVV67?~÷®»»ºú¨›“I"µµõöÒé‹Fù^Ø Ñ**nßöõ=zôöíšš?in ââÊÊòòDoouugçÄü'[þ¿­¡±yóÞ½K—ÂáïÞݼ™œ4ôéÓúúñß‘Non~ôÈÃcÇŽû÷q8gçàà={TT8çh´ªªGÎËÌ”pw÷ôÔÒú±3"…òñcttNÎà †ÆÒ¥ÆÆBBœÁ•Í&ëë[[©TNTTVVJ ‹íîNNö÷_²DSÓÞþĉwïÆ‹‰ˆ@((8:†‡‡†ÚÛ“ÉgÎ,]*..#cfflln¾j•¥åÂ…+Vihèë IIÙÚnÚtòäµkwܽK Œîš &&fjºté´iíí©©‰‰£“L\|Ñ¢7ÒÓ¯^ݼyæLîçÜuØl*•@ˆŒÑòp—žÉìí­¬,,ìêâå5003““ãæ‚R®Õ *(¸tiXXzzNŽ»{uµ‹‹‰‰—×ë×dòððÛ·ÇŽyymß¾wï©SûöíÛ7öçÉ“û÷ûùeg“ÉLfIÉ‘#óæ-_~èPaád¬@ h´¸¸’’°0›=0ÐßO¥N¤á°X½½EEÏž••!sçnß¾dÉ”)“1¹‚Õ”¶l¹v-,ÌÙypðâÅùó 8f*Ÿ––¦æ–-ººgÎ\¼èá1mç™(ÔÔ©sæ()!‘Ÿ>××sdt$Èscc]]WÀ`¦ëãá‘“[µêÜ9w÷©S?~|ü82rì±òBþÜjŽŒŒ•Õñãwî$'{{KI½zµ{÷áÃOŸ¶¶Ž šP¨˜˜™™——³3 wþ|bbKË÷ö)Øìþþ÷ïÃÃ_¾ìë““[¸ÐÐPB‚cî²XÝݯ^¦¤Àá¶¶®®3gòóÿ¨„drIIB»wLæôéË—kkãpœÂÂ{÷vírwß½ÛÕÕÕuïÞ;OžŒˆHKklüö!sjêÔÙ³54 Ð’’ˆˆŠŠÁÁñÛ “90ÐØ˜™yÿþ¥Kžž»v…†¾}ûýKª¡PAÁÙ³UTúú^½JJ½yPRZ»vÏkë––³g¼½³³ìjû£¾‘J­¯OLÜ·ÏÌÌÂbåÊ{÷HOÏgÏ^¿NN>{ÖÌLJêçÏ0ü>ýäœFóóóõÕÓËÊÚ¼yõê={¿%W&³«+1ñÄ KËÍ›óòŒŒ|}µ²Nâ˜>ñöûûê 07÷÷ô(<ÜÅEF å„íŒ óö64Äá&¿/ƒ@Ðhݻ߼ùðáêÕ ªª‹ŠjiáçÇãÛÚ=Ú¿ßÓsùr[Û]]OžÌÈ “ED Ð’’€€]»Näâå54\·nãFYÙ²²gÏš›'ÿ‚O:½­­¼¼« PPPQÿ‘NÂ`ââË–y{_¹beÕÙyùòþýÏŸ77ÿ¸v&WÿápqñY³œœ45ÛÚ7l8yòúõ/òó‹‹ËÊ**òóß¼yý:.îíÛîîááêêà`GÇ;³²¤¥xô¨²2'çÜ9WWMÍQ'Åñ{7UUgg{{yù#"¢¢¾µŒ‡ MŸ>}:/oWWII[ÛØÅD6»¿ÿíÛC‡wíºzµ¢âWïCú_m_?.çn2kk294ôòåÂÂï{Ëp›ž þwƒ4Œ E“sûöºu³gÏšeb2oÞ²eææ’’£C(ç’¾÷ïÉd2¹  <|Þ<,·± ëî&“ „ÖÖ»wÇÊ„Bùù55.tqY·ÎÑqË–sçž=#Éäìì;wvïvrrq±¶VQáãû²9O´<ܦG"UTöí{þ|``p0-íîÝ]»/¶°03›7oåJOÏ}û||6oVRk8äL$FF®\),<‘&àpFFGŽTTH©©§Nikóð7{ö£G%%š™}ûÈÜÏ~ln¾woî\„Îݽ¨¨·7.nü€c5@K+  ®®²òõk{ûñ‚pÀbgÎ<{¶¡LNI9qBW÷[»„´ô’%Ç‘H?¦¥íÞ­¬ÌÝŽÈäõÏP¨¸¸­mJJ_ßÛ·3g~],vΜ۷ z{,-9Á° NQÑÑñòåçÏ{zÈ䜜'O¶o×ÑÏG‡30 ª¯/+{õÊÙY\8\LLKKUU\…‘&1uêÚµ99$RAÁ­[sæLn˜‹ÿåöÅM¨¨¸}ûóçmm))ŽŽ22?êǸMÏUY€ÿaÈä‚‚«Wwí –”ôò:xÐÏïþ}6›H,+ Û½;))%…s'VWŸ˜˜ž.&†D¦¤45ÑéCCHdZZBBf& $$46Ž®A¡êêóæ9:ŽD¢Róòrr>}’‘±´´±qp¨®HMMH¨¬ë–7Ñòp›žN¯¬ ps³²¢Ñöï?|ØÍÍË+$dÛ6&³¯¯±±¢")éÊ•Ïe2™}}UUéé))mm?^'@xyuu¾yÓÅ…zð`Ý:ÿ¨Tàt0 %#cb²`Áòåã­®!‘ÊÊrrq €@ML.\¸~}Õ*<¾µµ±±©©££¿ŸD"“i46…Âãed8“Ý%KfΔ•ýôéÙ3OÏE‹ŽMLä}Ÿl6‘˜™yöìüù¶¶ƒƒwîܼyæLNNkëÞ½™™……eeÍÍ$ƒ‡ãp¼¼½½Ïžíرoß«WãüB))¹q#,¬´4#ãìÙôô¸8ðð—/?|¨©éèd±ÄÄÌÍ—-“•åçïíõñyþ¼¦F_‡{÷îìÙõë׬¹sçÓ'î×Ùì¡¡êêääÄʨ«û•KgG‡,mísçž=óñY¼XZšOXX\\D„Ÿ‰©¦æíÛ˜˜°0OOmí7RSkjFnäâ¦Ô“/66ññoßFD˜š~nÔP©µµ……9999aaqq%%ííã9±ÙDbV–ÏâÅ£¡H8ì’Ò–-—/_¼¨¯_[ûòåë×eeÍÍL¦°°½ýÆ»w›˜´µ]¿ni™žþy¨ðÁÁâboï•+‹‹'&#«§çíÛ¸¸º:w÷yó¦Láá),,-ý™½W:½¦æþýÍ›Oœ01yñ"<<99+kÅŠ'O¢¢ÒÓËÊjj>}êé!‘h4@"1,–—W@@HHJJNNH¨·÷éÓ7ªª¾vß„BEDæÍst42JM]¶¬¸x쵆Lfccxø¾};vÌœRR’ŸøpnîÛ·……Bw7™Ìf#‘X,?¿  ¤¤œO >ìââá‘–6ñuÂáá––¤¤ -24¬¨ˆ‰ñ÷OIÉÉQRÚ¼ÙÆæÈ‘jj¸ N<¹ú … êèÌŸokkeÕÖöe‡Bùøêêââ=•+œ¥¥¿Ì—–ÖÑ™èuòÚïï¬_6›Åb2Y,Œ‡…`0$ å\Uú;fÃÃÝÝ¥¥?Â`üüòòZZÆÆóæÍ»xñܹ²²¼¼0ÎÇ'"" €ÁÀá(”´´¡á‚¶¶õõÃÃññYYµµ½½#u…ŠˆXZ8p옞^U•ÏæÍ#7!ŽL‰Q(…µkýýýýÇsõã¼±¡¡˜úý›ÊÈä Þ¾µµõõMLŒˆõõˆxýº²²¿ðx#£eË7mZ¸Ÿ?;ûĉ5kV­ºt©ªŠ;Ï„ÉÓ«³óÍ›K—bczøðÁƒ  ³g##32„ÁA,vúôeËNœ°·‡Á^½ruÍÏ眽b³ „G¶o·³ËÉyýzß¾OOsseå»w‹‹ss8 …Šˆ,X°yóŠHdZš‹Ë‹L& 5uª‹ËÏŸ?®¦ÖÙùáÛ7ee$’¢¢©éôé?^º´aC^ÞÏòÛ×ÏÁ¨«oÚ´e‹¸xJÊî݉‰ãÝvõ+é¹ÂÙíqv^¿ÞÃN§Ñ(6›»côÿœß9»L#Ÿ ç:.Îïññ/^ÄÅ-_noï䤮®¥¥§7ñµ¶¶¶þèªB¿ ÆÐÐ×71ñõë¥KÓÓ­­gÎ<~<-­¯ÅÙAª¯¿woÖ¬²²ÔÔ¬¬ööñÖÖ¶²š9³¹yíZyy‡ÈÈñ/~…Byy•”/vt47××WV–““’æåååÅb‘H6›J%‘::ªªÞ½KIyýúùóÌÌúú_? @àñ¦¦óæÍ›7c†¢¢´´ ‡vv~ü˜’róæýûŸ_¹û-P(qqeËV­²´œ7OWWAAZZH‡C €s\sseeaáÛ·ññÑѯ_çåµ´|ÿŒÇŸÃãutÌÍõô$$€Lîííèho¯¯¯­mjêè˜È5¬ÿœü¡PNNNQQ^ƒa0Èd©¿¿««³³¯opp2®W„Áõô–,qw߸qÉSSMMYY114šFkmýð!3óÁƒË—oÞ|øðýûɸ›…š>}Ïž·ocb”•Ïœ™5ËÝ=*ª£ãW†5(‡STœ9ÓÎÎÎÎÌÌÄDOOII^^BçãC¡8‡—G<ÚÛ››ëë33ƒƒoß.)ù:H†ÆŽ~~'Nàñ7oº¸?þáÃ·Ž°óòNª«kaajª­­¢"## €FC t:™L$ö÷·µ55Õ×øðæÍÛ·ÅÅÜ_ø:¶ÑÐðð¸wïÎ3g¦N}øÐÄdæÌ€€’nW]?9;H™™þþxüû÷©©?×[Á`||ªª³fõõ8¡ªjbrÿþ·ï™¼öû{ëáå52:~üîÝë×uuËË£¢ àðY³lmååSR\]7lðõýðáWêgéíÛkךšÖ­³´,(ظ1..0ÐÌLZ íìüð!55==>þÙ³øøÈȘ˜ÜÜšš6‡›2ÅØØÑqÃGG‡ ôôDD®\13³±9x°¸wuõô|÷ÎÍmîÜ“'ËË9S\ÎÒ»wïß»¹UTœ?ãFVgÜO»¤¥íísqa2ÝÝŒÆÒ0'ä´­íöí[¶¬[·t©®®ŠŠ„Ëf“Híí99¯_‡……†ÆÄ”–’H“Ñ[ÿzÿÌÃ#%µ`»û–-7.]:¤ÁèII¹s'0ðôé**¸»€™=ÛÑqýú©Sß½ %FôPQ1113[¸ÐÄDUUJ ihˆ‹ zô(+ëWº€íëçzf~~UU++ <¾¸8..'§¹ù{ ôܦçšÿe;ÉTë©Sµµ¿vB‚Ã…… —.?Æ ‘o¯mÂ`BBÓ§[YÙØ~ ÈdƒápxüŸ>Ý6ƒQQ±¶¶··³ÓÖæçÿy§?(T@@[ÛÊÊÅÅÚZQñŸ8;ð;¥„DJHèé™™ÙÛ¯Xajª¥%"2¹nÂp¸´ôüùË—¯\9s¦ ÅÏ?eІ†¢¢  w.Ÿp¸€€¼ü”)£‡Ü!8þ:¸‚ÁHJêëÏž­¡!!ñýQ³hadd`0ùïò¿Îïo_ÿR¹€;H À0ß ÿh €€€€€€€€€€€ü ò€Òÿ Püüââx<;¹7­€üŠ E"yy……EE¥¥%%q8ðÈ!ÈùŸ7`01±%KÎ+)éí-,¬­%òó;;sr6lPTü'cM„’Ò¦MïÞ d2™<þÏ/víRRú»$RJÊÐÐÆfñâéÓ…„¾eÄâpFFwî45}üØÞÞØ˜“SUUS“—×ÑA$æå¥¥]ºdc£¤„Áü¹OP¨¨èªUÉÉ¥¥••~~ZZÜ]Æògù7`0qq//;;AÁ§OÝÝøùUU¥¤–-‹ŽžÜ §þ)†‡##ôô-ÒÓÓÓ³³Û³§   àÄ SÓ‘ÏÝÝCCÿæ7†@xywï »qÃÙYE…‡ç[)áp †‡Þ¿ß¾ÝÜ\\\RröìÙ³ÝÜbcápWWÿÄÄ ŒŒøùÿœ‘ƒ!‘H$ …@@ ÿ¥à» ÿ=þÇÝŽH!!%%QQ6»¡áÞ½{zŒáa&³­­·÷¿òŽtzCCuu?/ï”)ƒƒL&“ --UU••‰ô_¬[6›F#‘H¤ÁA"±¯¯¨èÉ“óçW­âåÕÒ*+ó÷ߺuá“'ß½‹Œììü³7Eƒ€€€€€€€€üÍüî A h´‚¬YsçZZ.\8cÆ´i||0?¿ŠŠ‘Ñ¢E––ff Ìš%#ƒÅŽ®õ#‘ŠŠvv>>®®ÒÒ‹8àë—š•˜xó¦½ýÔ©HäèS“­[OœˆŒLJŠŠÊÈHJºqãÒ¥­[gÌqeÃ`tuwï>qâØ1kkCC7·Ë—ïÞ}ùòî]WW-- ‰éÓÝݯ_ }ý:6öĉU«Ç>áwÀ㮾uë©SW®lß®ªŠFÃᢢ‹y{ûøÜ¼yöì’%rr9mÚºuÇŽ]º´u«²òˆÃ †ÇmÜxôhDDbbTÔ›7ÉÉ!!î‚‚_»ÃM<= &  ¥ef6oÞüù::‚‚p8””‘Ñ‚ff––ã××ø0™­­Éɱ±ååH¤ºº¥¥²òè.·å(”OSsùòÓ§CCÃÂÒÒ22?~ñâÁƒãÇ·l12øñ…0˜°ðܹ[¶\¹rõª‡Ç¼yß»HäÏð?h ÁáBBsçnßîååë{æÌúõ&&8((89íÜéããë{ôè¹sÛ·Ïœ9ö&aBTÔÀÀÑÑÕuÅŠ]»îߌ¼zÕ‚FËÊzô(222òÍ›––¡¡‘4ZOïØ±ˆˆÄÄS§tu{z’“£¢ÂÓ“{{ OŠˆxõêØ±éÓ1‰TP°´ttÜ¿?88 ÀÕhjb³.>)ÉßßÒrp°ºzpPOoõê ÐÒÂb§lØl$RZÚÔÔÅÅÉIOOD––^¼ØÙÙÎnÕª ¬¬yx°XMMGGGGKKii8œÍJMmïÞððW¯|})”ôôèè°°W¯H$ŸððˆWWiéQir—ž‡GAÁÉéØ±Ã‡wqQPàÈ×ÓóÌ™£G}}ǯ¯oÁdöõÕ׃ƒ8œ¼¼Œ  …r_~@¡TT6n|ñ"3óÂ…µk%%›š’’¢¢^½ÊÎnmåãÓÒRSø^i NGÇÝ=*êÉ“uëDEóò^¼ÈÉéêb2Á. äæöíàà‹étJ$‘úúˆÄÞÞþþž©¿¿»›Dêëëêêînoÿô©»»­­©©««µµ±±³³¥¥¡¡££¹¹¾¾£ãÓ§ÚÚöö¦&“g__WW[›$—üÙ·Ç`´´êꪪ޼qqýÖª?kl|þü§Od2ÐÝýâ…ƒƒ‚·vsøøfϾ¿££ª*=}ýzIÉÑ]LFfƨ(©½ýÊss>>;»ädL®«;qÂЃÁá.ŒŽ®¨ “ËÊöìÑÐ@¡ÐèÙ³oÞ,( “’-Âãíyy­¬â㫪H¤øx33>¾Ï¿…@DDV®|ü¸··¦æèQ}}IÉ ¢£?|ˆ‰)-mmŠrsSP˜6íÀââÒÒää•+…„  FGçÊ•††ššÂÂ]»FC[ Pšš§N¥§‰oߺ¸ÈËsLnÓ–MHÈÞþñc"±¹ùÂ…Y³¾e*âp³g?zÔÝ]Sóúµ½=ÿù¾££sùr}}MÍ»w[·ÊÈÀáÜ—‹;÷îÝ÷ïÉäòò}ûtt0˜ïI uvÎȨªª¯ ÔÑáç——·³{ü¸©©¸øÕ«;TU¼÷ò§Ã|sIOÏÇgÎÄÅÕ×Óéã}DJJêèLŸŽÅ¶·geåç÷ôŒî 0™]]ùùïÞµ´àp**3fHIYlvMÍ»w…ÂfÓé ƒÁd¶´”—·¶Òh@§ 1l6 …þÞCþl6™ÜÐPYÙ×ÇÇ'//!!..'‡ÇwwdgwvâpŠŠbbJJüüDbYY}ýЊÇ++ëè “É••uu,–¸¸¨¨¸¸¸8??•Z]ÝÞÎfKKkhHI¡PW6nÒO> …›Íb±ÙÜ—‰”06ÖÕåãkmOL¬¬šØ“a0!!ŸØØcÇäåCC7n\¹òÊ•Š 2™Í[Èßx7 W0™ÍÍïÞÕ×ÓhßJƒa±X,P(½½ÊçNSLæÐ‘H¡#(Èqð‹Lîììï§ÑF&Êl6ƒA¡ÐhÃÃú ©ÔOŸÊÊš›¡P]ÝiÓ””P¨ææwï Y¬%KæÏ—••–Â`::š›i4(‡ãçÇ` nÙ²ˆˆ””e˾ε¯¯½€@ Å`¸I?Ù@¡X¬ˆËf tw ±ÙÜ–Ãb……q86›Djk˜hä?LHhÙ²íÛ{zž>µ²òõ-(èïD€€€€€€€€ü]€W°ÙL&Î`|{ÅŸÅ¢R)@¡øøP¨Ïö P ‡C¡€F#‘¨TÎô˜Íf0h´Ïse³Ùìb_Å"‘**H$ YY«¾>*ª¾~xxxXZZ[[C‹%kj‰Åb±`0ihˆÍˆŒ´²š5kíÚ7o¾½§ƒQ(ܤŸ\ UUEEžÞÞ¬¬¦& …Éä¶<(…Òß?4X¬ˆÃq¡ü±)Ëdvu=|xüø­[ŠŠ^^wïfdÌž½qãË—­­ÿ…€ò ÿ @»I†Nom--­©¡RÅÅ ÕÔøøFM$(T@@]]WWR’J­«{ÿ¾µutZýϘCãA¥¶¶µ· ̘!"20P[ÛÞÞÜ\YI$ Ïœ©§'$ÔÑQZÚÜL¥“ÙÛ[YYXØÕÅËk``f&'÷íû‰€ûô£°Ùl6“ÉbA P( …r¿¿„BM›¶b…ŠÊà`^Þóç•• ÷å¡ÑÚÛß½++£Red,˜3GVv¢±Ùì¡¡ŠŠÀ@'§ýû32LM}}£¢ÔÒÂáÀ3H  Ÿí !‘(ÏèT}tÊÎf³Ùp8Dr>ÿ?6{pHüïÜ ô3°Ùýýyy—/GFö÷ÇÇûûûø<áá…… ©¹e‹ŸŸ¡a__d¤³sVV?›=þßöLf__EEMÍð°‚‚½½PQÑùóýý$R_Ÿ¾¾±1Y[ÛÛËq*/¿v-8¸¢bÝ:oïààk׈D?¿ˆˆ††ðx55}}=½áágϼ½oܨ©¡R¹M?Z2­½½±‘HäçŸ3ÇÍmåÊÙ³Y¬šBD‰¬ªJHHIim=HHÏŸ¿t)N§KKÙÚîÛ·}»ŒLn®——‡Gf&‘ÈIÉmyH¤ìlÿðp!#cÏž§OoÜ`0Žˆ¨ªb0¤¥µµ `°—/Ïœ¹u‹@[þù¶·'%mÛ¶b…ŠÊë×ÉÉ·n…„66®®5™A@@@@@@@@þ þÏ@ ¿};8øïõ™ÌÁÁÊÊŒŒÌL£µ•NÿÖ.“Ù×WU•žž’20ÐÖ6~x†Øl)#cïÞ5kÖ­8th÷î“'ϟ߸‘Íîê*.~ð`÷îE‹NžÌÍ%Y,,¶££  33-­½Db29;,%%ÙÙ©©(Ça2ûû+*rsSR††ºº†‡m§‰Áèî.,ÌÊJI€çKh´ººøøÄÄôt11$2%¥©‰NB"ÓÒ23`` !¡±qtêO§WV¸¹YYÑhû÷>ìææå²m“Ù×רXQ‘”tåÊÐÐ賸M?™\Ppõê®]ÁÁ’’^^úùÝ¿Ïf‰eeaa»w'%¥¤´¶ƒÑÓ“——’RV¦ªjeµ{÷•+¶¶ FOPTêæfcãç÷ôimíè92îËC&\¼¸páÒ¥$ÒÙ³^^+Wúø„„`±Jkkeebb@@tôHz6›NoiÉËËÌÌȨ­`29{I……W¯ÚÛoÚ„Ç_¹âèèâbnžšê뛘ØÙ ûùç€dg¿zõìÙ´iºº“•iuuYÙû÷jj::††êêZZzzÿÛÖÖÖÖÖV°b@@@@@@@@@@@þ<à$ÿŒb÷‡L&“ Pÿ°X,VQ”È?h ýÇ'Ü t±ù?@ äÿøÏHP(//?¿¨(  @8\JjÁgç½{wî´±QW/ÅùÛùO0˜°°ŽŽ•U@@pp@@vvXØÙ³/_††ddøøX[ëꎖ¡Ñ**>>÷ï½|éî>u*3š««»eË›7ááë×¢Ñ?“þoÖÒòõ­¨ 88?‹‹SQA¡þËÊDJIÚØ,^<}º ö}ù”–¾~½zµ¨(hTO&„‚‚½ýÎ'Nœ9ãæf`ÀÇ÷ÏÉwbúò¿Î`2àpFFË–ééÁ`ÙÙ÷ﻹ¹»>lk{êTrr[Û´i îßof&, ‡þŽ@€¨èìÙ&&Ó§š<ƒ!‘ 6jRq›þï‚J­¨8{ÖÂÂÔTCCGgݺk×>}$‡@þË«ù/¯±ñîÝaa7n8;«¨ðð|+Àá(‰D‚“æÉfx¸¡!:úêÕS§¼½Ãà I$ëïÖÿuþQìØìÔÔ ΟOH “‡‡G&`]]oÞDFÖÕYXìÚ¥ª*$„DÆÅuu1cÿ‹ÕÔ\¹RC‹ÍËËË#“ô,nÓÿò¡Óûúš›››ûúP(4º¯Ng³AÕù0ÍÍ/_Þ½{þüË— 4@@@@@@@þ ü'Â|³XCCdò—+Ó@¡°XLæx&Aggyy¿¦æ¢E**x|~~a!þ½çp›þß †Ç­[çé¹}»¶¶´4 ÖÓSTuýú‰7o¾ßÛËdަçá‘–¶²Ú¾ÝÓsà ‹iÓ„…¡ÐÁÁææòò¼¼gÏnß {úôÇÑýnÓsSr-­¹suuUTttápÃÈhÁ33>>*˜L©¦&;;'çÓ§Ï\JRrá½{÷îuw·´œ2…jm}ûöúõcÇ®^}ö¬¾žFã{ÖɉÁ¸~ýüùÛ·««9í·´Ü±ãðá3ŠŠNŸ>}:-­£¸ÓNɸÕÿß[_§¤äàpøðÎnnFF‚‚$R~~t´ÏíÛD¢µµ‡ÇÔ© G^¿þî‰Äf!"bb²i“§ç¶mÖÖbbÐÝ]TwûöÙ³7näåuv~¾X€Ãݺõþý;Ë—@B²eºº{÷¾y38• ÿKü‡Ï[ððHHHH@ssEEw÷דϞž÷ïß¼©¨“31™=[PðG§#¸Mÿo…RSÛ»7<üÕ+__cc %==::,ìÕ+ÉÄÄÇ'<<"ÂÕUZzÔe…ÒÔ<|8<üÉ“={de++##ïÞ yù²¨ˆÁPWwpX¶L^~Ô¥‰ÛôÜÖ»‚‚“Ó±c‡?î⢠h´žž§ç™3Gúúúú=zîÜöí3gŠˆÀ?[€Á44¸y30ÐÔ”HLOÍÊêìÔÖvw »wÏÞ^^~$= ¥ªjo¿d‰¶6 ÖМvçN@À­[ÙÙLæâÅGŽDFúûóósápAA##‡Õ«½½ïßøðÒ%“þþ´´oçÏ}}qSž‰ ‘ ––ŽŽû÷¸º"MMlöÂ…GŽÄÇ'%ùû[ZVWêé­^}áÂZZX,çoY,*µ££±ñÓ§–6[CÃÞÞÅeþ|%% æËVí|àp1±yóV¯¶µ3GBb¬Ì P~~--KK[[UU~~ŽÃ$÷úÀ­þÿÞú‚@øùÍÌ""nßÞ¶ME¥¿?/ïÝ»êjgçÈÈØØcÇvìX·nþ|EE4šóh´žÞ±c‰‰§Néêöô$'GE…‡''÷öž:ñêÕ±cc…?¯ NP‰D¡±X"A@@@@þ'ÉÎ~õêÙ³®®ÖÖ¦¦ÉúÉɳ¯¯««­M’K&ç­ <ÞÈÈÝ=++:úС5k$$FO— Ñªªþþ……YXHJš˜ìÛwæLh¨¥¥?¿žž§gnî£G›6ià.ýß ¥¤tøpIIMÍÇ'OªªŽg„`0::W®44ÔÔîÚ¥ 0:IB¡45OJO'ß¾uq™°B BB))UU--7oŒL‘¿]7Ü¥ÿy²·ü˜Hln¾paÖ¬o=ƒÑÒ ¨«#È䊊ƒõôFSòñ-\xýzggoïÝ»VVüüß" &-½~}llYÙž=œ“—?·Œ_n$( `g—œL Éuu'Nb08ÜÂ…ÑÑdòHžhôìÙ7o‰II‹áñ_æ‚Ù˜øû·¶ÆÄ¸¹IJ~y΋[ùàp³g?zÔÑQT:wîØi>¡¬|ð`r2‘X\ìá1mùsúÀþÿÞú‚@ðxsóèèžžªª´´õ륤Fž …âñ‹‡‡‘ÉdrTÔêÕbbP(ðñÍž}ÿ~GGUUzúúõcå ƒÉÈlØE"µ·_¹bnÎËûe Hii›íÛ·móòÚ¾}áByùÏeò¿ÁÂÅîKqq;;'' &óÝ»›7ããÛÛÇw‡a±††Š‹++……×®ÕÕ•–ŽŒü^Îܦÿ÷ƒáñÊÊ::ÂÂdree]‹%$$..*Êù–J­®nog³ÝÜ44¤¤P(hh “ÊË32šš<=wïÞ·/!áäÉ  øøÊÊ®®¯Ï;±ÙÜ¥ÿs45EGÇÅ•—ºÝ ww·´‰P¨–?? ÅÙýà¸ýÁ`BBÚÚ ¬^mg7s¦¦¦¬¬    ¢â”)]T„F¹WÂ]þÜ×·å™8lvMÍ»w…ÂfkjR( “ÙÒR^ÞÚJ£34Ä`°ÙP(:øãgjqbòú»ôÿkGµÉ¬/$RBBCCQhl|ð +kÔ1ŽÅêëËÌ|ð  €F[¾\Pó)))©£3}:ÛÞþüy~~OÏhÏÇdvuåç¿{×Ò‚ÃYX̘!%…@¤¤TV¤ Ó››cc/_¾r%6ö¿82€€€€€€LŒÿœ“ &%efæè¸n¸8påʽ{ee}}ßž®±ÙdruuVVf&chhi))ùýuanÓÿëŠÁðóc0·lYDDJJmmmmNçgQÑõëúú‚D"#.[tzY™«ëŠ==VVÁÁÏŸ74ôôde%'»¸ÌœùyPenÓÿ˜ÌžžÚÚÞÞÑé"‹Åb±Ùpγ ‘JJ›7ß¾]ZššºgϬY0XCCff|üË—±±99l6ÇLøÜ¥mâùsËÏ•gâ°Xdrgg?6ÒŽØlƒB¡Ñ>—?%ÿïi降öçôÿwÖŠFóña0l6…ÒÝýåIKƒHìê5‚`0,V@‹ ¥·—Bù|aˆÉ")À`±X0j#Èxü§&÷H¤¤¤‰ÉÉ“ëÖÉÈß¾}æÌ³g?>JM£57ÇÄääÀ`AAóçKJ"@ L^ú,…B" ±Ù‘‘VV³f­]ûæÍWíi´ÖÖ—/Ïóô|ùÒÇ–—Ÿ5ËÎÎÛ;$äøñ¸¸Û·»»ÕÕ—/OHèìäLñ¸MÿgÞÁàLÇ¿§£sðà‘#ººyy›6™™99=}ÚÝÍbq\˜øù7oþV‰'–?·ü|y& ›Í`Ðh ÆØ’³Ùlöd¿ ·òù҂䤸ø~eÚÿ³úÿ»ê‹Å¢P(ƒÅá8»€#} †Ã}nè°XTêà …(ßÈžäP( …áP@£‘HTê?räïæ?²ƒ`0 ›7<¸|¹¬l^^Xرc¯_÷ôLÔýex¸®.--/D’Àb¼Ö>Ñô?ÿœ9§O߸ñüyTÔÉ“öö22ÿäª-›Íf®È—‚Éìí­¬,,ìêâå5003““ã>X‹E¡44df>|xüøåË(”ºº®®´ô·ÎÀp›~âïÊd²X ƒýüþÌ—5ÊÃ#**/ɵµ#“L(TPÐÈhÉ’©Sÿd ÿ©òL¾9ôó%¡ÓÉd…âã=#ƒFO™²x±™Ùˆ³ÙÏéÃdèÿdÖÖÒòáÃÇTª‚‚Í¢E22#o ðó:8èë=ûH§·¶––ÖÔP©âↆjjc/æ…BÔÕuu%%©Ôºº÷ï[[¿ÜD£UU÷î »w/..,ÌÝ]Sóï?W 2ùüv 4ÚÀ`Ãww77™þþW¯Þ½]²dÙ² 8)†‡;;KK££³³ÛÚ(”ñsnm-(ˆŽnhX²d×®‹˜Xz4ZQÑÁÁÙÙÜÜÌŒH¼råÀÎΟ <0­­ýý .>s¦™™¹¹‰ G"±X}}%%¹¹‘84T^~íZppEźuÞÞÁÁ×®‰~~> áñjjúúzzÃÃÏžy{߸QSC¥kjäâÒÚÿôé›7uu¼¼ªª«WoÞ¬¬L§WT„„´´ŒÄä6ýÏB£µ·76‰üüs渹­\9{6‹USƒ@ˆˆ ‘UU ))­­Üjg³ „ìì– 7·V¯ÎÌ ª©´²òððöÖÑ@`2]Ïþ]åN49MM }}<‹URš:‹…@DDæÌqt\¹’Å"ŠŠž={ñ¢²’Dâ6w*µ¹9'‡@€Áüüðôtsƒ@ŠŠøøllvìX¿ž$¢½ýçõ{ýÿ½õE"ååܹóéSJÊ™3ÆÅ©¨ÄÅ•—óò-[f`ÀdŽ5^Ùìþþ¼¼Ë—##ûûããýý}|€ððÂBÐÔܲÅÏÏа¯/2ÒÙ9+kl°u0˜¾¾•7M&=€IDATÕìÙææ@¡‚Nx ÿ‹ü'\ì PdhèÓ§â⊠$RTT]]CcäX5•ZW×Ôôü9Ç@b2ÉäÊÊâ⊊ööÞÞQÇ!&³§')éÉ“¬,cã¹s‰D"qÄ”á6ý„„„¶öŒÂÂP\ìã]]ý«“þ_ƒÅêîNH8uêÆ [Ûsç‚‚}óf``ëVGdzgÝܤ¥ØìþþªªŒŒ lm½¼::FÖʹMÿ³ÉW¯îÚ,)éåuð Ÿßýûl6‘XV¶{wRRJJk+0™ƒƒ••™™ FkëçA"˜ÌÚÚÌÌ”¤µ•s‡J­¬¼paõjooqñ€€ ®^½wÍ®¯OM [¿ÞÙ9'gÓ&W×¾¾Q}à.ná¾<…Íf0:: 23ÓÒÚÛI$&“³ÃRR’šŠBqnb2ûû+*rsSR††ºº†‡Ùl(TPP]}Þ~üù»ž@@@@@@þÍ@8!¹§MÓÐÐÕ¬L««ËÊÞ¿WSÓÑ14TW×ÒÒÓ›øß¶¶¶¶r¦)ÿ~–,¹s§¶6<…òôTSsqyø°­ œr€€€Lüü‹…„ÔÕ=zÄÃãæ&/ïâòüy?(_ã?|Qì? !""+Ë`Ü»üòå·Bƒ€€€|ÆáÆ:¼!RRÖÖ[¶ÌœÉÃC dgWVކGùþõ.v……11AAOyôôlm·n®© Þ´iá²ûö÷÷ïÛÇíßa±X¬¢"(?±üë ¤Qƒd<À È¿…RU54ÔÓ›>]^G¡(”ÖÖ¢¢´´ÜÜÒÒîî?†ä¿Íê$ÿl6ÖÓóñã›7¯^}üøæ (ß xi¢‚‚"‘X,‡Áàp_þD£ˆÉ¹eg2Ë‹ÃÉÈL:mšŒ 岞!‚‡çë7Åáp84úËë'A~'p¸¨¨ÁÊ•vvººbb(‘‰€@ÈÉ-]êâ²eËÒ¥ÒÒ£·%|«¿àáÅã±Xø/.›A H$/¯€ ÿžŒøøðx.S‚ü¢6!8œ°°ˆùwÍE  WPPR’–æçÿ–®C¡h´¤¤¢¢¬¬¨(ÏÏ¿‚D ÉÉÉÊJIñò‚ýȯvÍ‹52:y²²29yÅŠÏ/¢ln~òÄÁaîÜ#G^¼à„a€@p8MM'''§E‹¤¥'cBK§77§¥Ý¾ýðaEÅÀ ‘||‚‚8Ü÷ºB^ÞE‹BC“’nÜ€45W®LK#¿•šÍèíà„R†Á„„LL|}32®]sq‘–›¶¿?<ÜÂÂÄÄÝ='ç[·JM ‰D"€N§Ó?aÁÌžüüyp0zôÆ•+P( e۶ׯ+*¶lá®®« Ù´ÉÚúÂ…ñMŽo退°0Gþ¿Z÷0˜¸¸•Õ–-ööxüû÷cM£‘'B¡h´€€ŒŒ¶ö‚nn›6éëJˆNol|ùòÙ³¤¤Ž™µk##ãâ¼½……››kjº» F\\L èîno'9·•!‘D".$´aCPÐÝ»«V}ýDBXXAA^¾»ûâE3‚ƒ««GZ!G……‡†P(~~UÕY³fÍÒÕupصKT4-ÍÁ¡¬LVv÷îÐÐC‡ìíÕÔddØl++{ûµk-,¬­í캺"#çÏg³W®Œ‰IN–‘ññ±µ=þûÓàÉÐBZÚÅ%"":ÚÛ[Nn` ¿hˆÍæáàãûôéÔ©… gÌ8¾¶–Û+’¿‹Õа´œ7OA‰‰ééa00-­­[¯_ß¹SNŽDêè@ ¼½ÃÃCBFuJPPZZT…ÊÊrv60X´(:z¢† -'gn®«+(88H$~n¡¢²{÷£G©©ÏŸ¿c¦¡±sg@ÀÉ“ÙÙVV;vddH¿ÛH‚Bùø””ÌÍ-,TTðøo¯`c±††ââ0DΚek»r¥ˆÈ·ïÈc2‰ÄÒÒää¬¬ŠŠ¡¡‘ñeÿ~$-íÅ‹ŠŠÁAD@@]ÝÚzîܶ¶òòçÏ`çÎk×NŸVR*.ÎÍ-/ÿþ-h FW׋oß¾z5j Á`‚‚jj::ÒÒííEE%%Ü݉ƒ‰ŠÎ™sðàþýjjoÞœ;’™ÙÓ3ª±P(7eжö´ibb(ÔÏ÷/ÃÃ}}?ÕÕ}û ÑhMÍ'âãoßæãsuÕ×·²Šø•Þ ‡“‘‘——•åãC `0 …Ãáp8œó;ìÿ€Ãáp$…âáA£Ñh ƒáüŽÁp~çáA¡X¬ºº˜˜ˆˆ/G—$Hyù­[SS“’NRWÿ¶|._¶µ51‰‰f2¡PŒB©­Íϯ¬œ:õÚµŒŒôteå5k–.=s&!3uÇá´´¼½SS~üÖ”sx¸¡!&&,ìþýÒR~~Ï7—Ñh}}}}ŽT\œœœPRòùŠ ƒA$ö÷××kk/]jo?ò)‹ÕÕ•`k« –&#£®>mš¸øx+8Üœ9W®„†ž< /®X±mÛÛ·_OÍØl*µ««¢¢¼¼µ•LþrÂE¡|üxïÞ–-¾¾+V¼}»¿¼üäÉJ%BC/^|÷nÇŽ7Οߴ)&ÆÁáòåwol|äÈÁƒêêB@ÀÞ½ååãíd1­­II¡¡—/?.$¤¯¯¨ˆÃMÔ5Å$>|èì´°pqqtü^yp¸iÓV­:}úôésç6nÔÕÅb›šJK‹‹©Tee##)©ŠŠèèøxQQ=½3g<<.\¸v­¶6,lçÎ;öî}ð€@ “¿l h´ªª‹Kxø½{K— @MÍ™3NN^^‚‚«V…‡ß¼©¦víš­íáÙ™h´¥eHHD„¥er²«ëîÝOž [X„„}ÚÍmʔϿƒÃÅÄæÍ„Áp¸µk ™;—Jýö˜F«« =zôƬ¬±‹Ÿp¸¨¨±±……˜XKËË—åå}}úúLfk닾¾›6yy•—sÚkl|þü¬YaaÜj§¢2ož”ÔÀ@AÁû÷­­cç=h´ºúѣϞ]ºäà %õm\ãÓ§¨(gg[Û«WKK9%¢Ó[[££==í캺Ž }ü8<|ýú¦¦ÐP€ÃEDfÌpqÙºURòëùÞx½Ÿ¼P(#*ÊǃÁ`l¶Ç´ürýebÝ£œÜªUGŽlÚÄf?x`eÛÙù½•h­ª*$ÄËËÑñÚµææñÖ¸àð¡¡úúœœ‚‚ÎN}ý}û’“}|,-+*òó UU‡C‡üýÕÔfÍRWçåذáêUoï)Sº»%$ðxŽ bbZZFFÓ¦@YÙƒMMCC,"(¸h‘OvöíÛÆÆx<Çd€óçýüëêRR>|ž3ÇÝ}÷îk×´µÅÅŸ=Û°áèÑ÷ï½¼MLbcwï¾{wþüÀÀÇ®\qrRRjn¾vmÅŠææ¯Âß¡?Àáxyi´ääC‡/>z´¤„Fµ² {ñÂÞþÍ'§M›nܨ­…@”•·o¿u+4TEåËU~,VMÍÙyÙ2AÁÚÚ§Oñø#G9+Æýýµµ$’…űc—.YXptINNYYJ hi©­­¨hj^½úôé“']\xyåä¦MãåML\´hÚ´Ý»33a0aaSÓ½¼ììF\Ä™yó”•Q(cñâ#GNœÐÖf³Y,:Lnk«¨xû622""+ëĉõë¯]ÛµkÚ4ª©éúu77míðp ¥­í÷šF†‡ëê?vq™;÷ñão§‚@ìì^½â¸Ø<8oÞÄ]ìF¦K„‚Š»vùù)) @ ‚‚::ÒÒD_ßd¼Çàà‡—/_ºôñãÚµGŽlÛfiéï¿iSTTgçÄúBDD^§ÑÚÚÆ[|#“óó·lQTTTܲågÊ'(¸|ùÇ AAdòd8&qCÿ³g‹kh|Ûƒãè4kÖš5gÏúúzzZYUU¥¦^¹rëÖÓ§QQ/^dg¿ßÔD&ÝB xüìÙ~~ìÜ©«;âòãþ‡“‘‘•E¡NŸ~þüéÓ­[ÇJeÚ4SÓ·oOžLIéëc³i´††øø­[MM;:llTTzzH¤õëwíhiyòdÇŽïÞû^Þ¹s££¯_‡ÁŽsw·±ILÏ …Á„„(”¾¾îîÞ^iiSÓ={^¼ yÿÞÌlÓ¦%Kzz.\xø°§gÑ"—eËââüýRSkjˆÄááîîÜܸ¸çÏ£¢ i郞;€Á8½çFZ}_‘ø¹   §‡ç”¡··¯o¼%WBBÂÄdýúU«””rsÏŸ ÉÊm90˜˜˜±±““ºzjê®]Ÿ>Ñhúú0˜˜˜…Å–-. PÝÝœ± ’š1CP{û–B¡DEµµååáðææ/Z[?ŸIÒéŸ>=yrúôÉ“¹¹ß;‘ÅbQ(--c{6C¡ P"13óøq55__àåup07njJHðööôŒˆ¨¯Ÿøn‹E¥¶µqæe¼¼sæ<|XQqû¶µ5ÿeÙH¤¸¸ ‹‹›˜:¸¿–Vsstô³g]]šš6œ>+«˜˜¬¬»wàòåÕ«mm_¿=ƒ ÙÚ††–”œ8ñãÆÑÙ™™yófFnf¶`ÁdÊ’ÁhiyøpïÞ›7·oÏÉÙ»wÇmíääƒ ÇKÍ㦶~ýµk[¶ ¡¡¶¶—/çæ~î]ý5ÃÃõõG®\1ös>>këÄÄÜ\_ߢ"oï•+GׄÆ6"%¥Ý»ÇÏ‘Y¿>,ìòåÕ«»ºüýMMmmoÞüða¤<||**üü$Ruu{ûÈ^›=8øñãÇGŽXXô÷Ãáùùþþîî Ë—ÔÔ ³Xƒƒ%%/®[çævãcmó葊 Ÿ  °°   ‡C¡H$Ÿ°°  °0ƒÅ" †Ã Óé#Ÿ ÑœO„„(”¡¡þ~"qhh"Ž2(”¸¸¦¦¤$ç_jjœ5¼ÖVîΜÁá22¶¶—/Ÿ=«£S[ëë{ö,0’/ï¢E‘‘ii-X€Ãqtà$‹§¦öôœ;Çé )”üü}û–.µ´¼y³¹™ÅÂáÄÅ%$ddLM-,DD²³KJúú¤¥áð’’ÀÀmÛâãUUoÜxð@Y9*jÇŽåË_½²±yþ<0PBâéÓ¹s׬ hlTQ9~<=ýþ}IÉ›7ׯ_°`×®ÜÜލ¨µk¥¥ãâää¶oÏÉII9wN@ 4tþ|-­S§ ±ØùóïÞ-.¾~Ý̬¦¦´tÚ´sçììjjššh4ND¤·÷þ} V®,)Ù¿ŸH¼}»´tÆóçml"#MMïÝ«¯XþL¼v†‡ûû?}ªªª¬$¨T©½}hˆÁ Ñ:;kk „ÊÊÊJ(èî¦Ó¿ìç <ÞÄÄÍmùr~þ’’‹kjÄÅ—,@˜L(/ ²±16¾{wäM1-­€€îÞww_¾ÜÉ)5u¤§ÃáæÎ ¬ªzðàó~Å¢Óûûûû9 JQqáB1±ááòòØØªª®.Ž‹‡óñM™âèxñ↠«WKI-Y2kVhhS•º`’’°0›]QÑÐ09F7 ‘òòòòÂÂ<<_ï[C üüRR8 ƒ HK++«¨(*Žw¦ƒÅ¢R;;š›{{?7ðØl ¥««©©¶–@èï‡@ÄÅåå?¯+BTÔÕ5"âÅ sóoM8’êêÐÐU«Ö¬yð€@y ƒQ[{ÿþ¥Kqq‡…„:äꪠðü¹¯ïDœ3ápqñéÓåäP¨¶¶çÏ[['Û4…Ãeeñxèë+,ìëû±³ÐŸÁátuwî Ž‹óòŠ‰Ù¹sÍ•GªªQ(QQyy4zxƒÑÓÛ´) ÀÅ¥µõøñ={^¼à,±ÙJ}}lìÍ›¡¡ïÞ}~ A¡„…%$DE!ÞÞææ®®Ñ½~þ3Ž¿tiÉ’ªª˜˜û÷>ll•ÊðpWWMÍØyN»ÑÐPPPS[µjÏgg;;,*ê×ÞŸÉìﯩÉÍ­®64‘ØØÈi.ã­ÎQ©?Þ¸ai©«ûøñÀ@]]ÿŸ ˜0^^cã;ŽÑÓ+-Ý¿_W÷öíÑ©-p 8¼­íÅ‹öö/wX¬îîW¯Nž,.~ýzÿþµk•”®];tèãGÌÀÀË+%%!áóp ïß¿{8úIppqq^ÞØ\ÕÔÒÓsrûIbbVÖ¶mÐÒ0sæ‚GŽ””üÈÙ×Ñ™5K\œóo}ý3ÄÄ`°‚‚††‰žC@£§Móô¼wïÈ-­úú–jõj33™+WÊÊ**h4N/$²ºúÔ)'''§èè¯W’0cãË—<ðôÝ¿`±¨T*UXXC/,ÿx?¸û¾ç}Îë¼Þçõ:¯ó:šÃÃöö™™_edb’–ÖÑ£´‡‘Ñ™3ë×{{<88¨¦¶|ùÀÀË—ææÑÑff>œ?/!122:ÊÌ,&&(¸råÁƒ{öˆˆddÜ¿¿cGDêìlb¢¥¥¨ÈÌìï__ßÝM"ý>ùùýcáp~þ;/\ÐÑad‹ŒÌÌ|ñÂÁ!8˜H”’*+»tiõê½{G ¦vœÀá<<Ë—³°`±ôôFFVV'OÊÊN½ŽH‘%K°X,+›ùt}}ÏŸ_½š‘A‘%ié›7ŒŒÓÓ]\œœÎŸ íë›n-*:‹MK‹ŒTRD"Ÿ>ed\·îèQ[[‘´´ää½{?|XÈþ…_!(hbžŸok+&F"‰““Ó!‹ ƒÃ§¦¿7n$$¨©QöÍMÿkÔÖ^º$+»i“«ël˜@èèHN }ð`*ÄŽÁÊêÀA !‡‡“’¼½ýüÒÒÆÇ{z ‹Šúú¦§ÍH¤¤äÉ“·nqs“Éãã_Žm2¹¯/#ãÖ­'OZ[ÓÓ¶²RT|ðÀÞ>=ýÛk]”uN55>><¾¸¸  µõWH(”°°’//‰ÔÐPRÒÖ¶°ða(tÉccSS#£ááøø>®­ýÒìü P^^##7··oíí1w÷õëŒnÝÊË£x§qq?¿¤$=½ÈHMÍ;êê`0}}/¯œœ¼¼mÛÚÚ(ëþ))áá­­_Þ^³ÆÏ/=ýÎFÆ'„…·nMJšZÅÁb¶o¿vMWÏÊzÿ>$$9ù누…ESÓÑ1..(hÇŽ¥KGFŠŠÂž?÷. àÓ')©C‡ãåݱÃÃãÅ {{IÉ©BƒB"ápôñyû¶¤dz?Ÿ—çꪧ·{wTT¿´ô¡C¯^ïÙƒ@ÄÇ?|x÷n}½œœƒƒ££ˆÈ‡7nܽ[YI&#‘““¾¾—.=xÔÜ,/ïí”cj*%eiil,&öáCxx_ßÈ™ŒDrpHK;9mÝZVæârï^AÁ|{ NÎÅ‹99A°¯¯®îÛ§ÃA¡w‰411slÒÑ-Ybeuô¨”:6VXHq-ÐÑQ\ß¹¹‘‘>>^^3CìÄÅ­­·l¡VC01qq¡P8\yùÂÕ|"±½="ÂÉÉÉIGÇß?88-ƒãðáõëíìÒÒ(ûm††²³Ï36¶³ki™ù«h´¼¼«kTÔþýùù»v9òâEkëôßÉ䉉Þ^Ê”L&“»ºššZZfþ2ËÇ72B"±°èêúùÅÆjiUTܹ³{·¢âåËii]]SZgt´·wd„LþÚì]X«‰ŠîÚae5>îà`` ¯ÿðaMÍLÓ!€ ÅÁ! €B feuwÏ/'4‰Jðø¦¦ÚÚ…‹ôøxYÙ“'»vikO{U‹Ý°!<<;;8œõôf*;ŒŸÿèÑŒŒ÷ï-,æº#Åøa`((pw¿v²0þµ2URrrº{×Ö‚‚ìíííóòæz­‰0s {®R}}µµ­­x<ü¬„@,ZtìXxø“'66K–Ì—c 1nn,–ž<<ŠŠjjæ7ãÆÇ++=Ú²eëÖ§O««¿.…FËÊ^¿éâ¢£ÃÆFyR(”‘QTàà—÷öÎÌÔÑ™d$ROObâÁƒzz·nÍíyF¡–-35]³‰LJ:w."¢¹y¶4€ -$´r%7÷à`nnqñÜ)"ˆÄžžOŸÞ¿okãàÐÖ^º”‘)+ëìÌÈ8^Hˆ‘ÑÞ…Z¾ÜÁ¡°06VBÂÞ~éÒ;Þ¾åä<~<++!aùòK—–.55}û‹Ý¹3))7×Ô4$DIiË/¯ÉICä¤üü={ââÖ®Õѹzµ´tb‚D""µP(/¯––¾¾˜XggBBHÈð°²²‰‰–—Ï£G­­ßóÖÂá<<††^^OŸž?D>z¤¯þ<Ï“'·nÍ¡~`\\«WoÚdf†Á|tX¼xÑ" gn£«¨¸ysçΛ7> úøQR2(¨¬LQQL hl|󿨱sç>|\²DJ  ¿?$äêÕË—ÅÄÜݯ_×Ñ!‘¢¢ˆŽ®¬œki™™•”ôõW¬€Á`r²µ‡[·îÞ=?¿P¨%K„„H¤Ž/¯ÄÄyy¹¸Ðè²28¼¡‰iÓ&·o§îsñâ«W||ååÝÝp8'çÆ’’(THHR‰ôûägÚ@B"W¬xüøóçááǧ>«®ÎÌü™± …rrnÞlgwñ¢œÀÐåsih(//8øæM??~~ kkccyyvv ++ÃÃß¾ííÝºÕÆæØ±´4ÿçÏËÊðxèíýøÑÝÝݽ¸¸©iî©*!(¨¦¶~=;{m­§gVÖצ™<2ÒÝǃ ˆ …¶¶¾}{éR@€MT”ƒƒ¾þµkIIþþÓº÷Ï11QQq挜œ¾¾§çLçÂ컹²ØÁ`BB––ééùù;vÌ}o$RRòøqØØmÛÆÆ@‹E ªª $ƒA"`|—-Û½ûòe9¹ˆ%%EÅû÷§vaÑÑIJê舋ÓÑ••yz¦¥Íëkl¬¤ÄÇçñãÜÜ£GÏž=}Z[ûÎOŸ^¿þÚ1ýlŒŒ²²ÆÆ+V@ yyÖÖ•• ß¹´0011}}%%$²²ÒÕu!ÎÊ)ØØV­27ðÀÀÀÖ–Ž**’“““ß¿MHˆŒ OHÈÊjnþžËp.°XyùóçoÜPSkjºrE[ûÎ)ÓhJÊËïß?{ÖÛÛØøùó ŒŒLLŽMNNKóôxˆÄîî==/_æç·°00`eÍÉñó ­®þ:±Î”&nnîí%);CïÜÙ´ÉÜœ@8{VG‡ƒcùrEE,°X!!11AÁÑÑ‘2„@`0S§ôõéèrr>|ó†ýÊ•/üý‘Hw÷þþ‰ II•åËÕÔnß¾w¯ `î6 $H‘’âàÀájkKJzzæß FIæ@ LLLNRž åáÙºõÌ™C‡¦ö»NÏËvîtq‰ŠZ¾|êm…23‹‰qrB¡11 —Ê¥£€‰ nllni£¤› ‘&&f;O¾™<:Z[ëç·{÷Ö­½½·oûúÚÙYYIHwwÃá ˆ@ íÝëãó䉂ÇtæãcffbRRòõ}úÔÄdªMFGóóíì´µOœˆˆèêúº.0;û’%¼¼ôô0:š˜xúôλv=xPQñeþD‹¥£#“GGæ{îùÚŒMOïæM[[™ŒŒ de=¢Þ4šjY,–…ƒ®»{ddþ7Í@¢"Ÿ):߉””´·/*êí¹ñy: ?ni˜ Àá02Ó¯:[TæÚW38œ‡gjIMÍÒrÿ~qñ™(”ATT]]Ii`àĉ¥K·n}ôèˉÚl&'ÇÇÅcr²­-4ôÌkëÏŸÑè/} ˆFKK;æî~ÿþ¶m”Ïèé¡ÐOŸ\\,-ïß//ÿzHH££--?À×™£ðøòr7·Ý»÷ìññ™J™ŠÅjj>{~î\iéåËFF®®’’&&úúll>øúáñ0Õ‚_ªa‘¥K1˜––ð𺺯ƒüP(QÑÕ«%%¡Ðúú€€ÚÚù¼ú$ÒØØÐÐØÐÑa±S¡8$‰D$@$B&SÌ@ ÉDâ—ŸP¾7û“©2 5è‘HQQ ‹#G$$}}·lqvîè`fNK;vÌÐpÉÿ»wKKç÷×"ââÖÖ^^wïJIEGkk{{ŠˆÌÈ ‚H$##77ýe;"¬¬(B&ÏV¤d2ßÚZPóñcoïÇÛ¶õöúù½{——§¥µzµƒÃóç«WÏ-{ÍÍOž\»VR²l™«kLLv¶ŽÎ½{'OÚÛûù}øÐÐ06F&C ,,ëÖYY-_N1Þ;:=JIÑÐ8tˆ™ÙÙÙÜÜÊ*9¹¥¥³³³³¿[½úàÁ#Gääxy™™ûûkk‘–¾p uq »qchÈÙÙÐ04…âälnžœ¤ì2ûò3ÅÄDQÑÙ³††ÆÆããkÖ<~yïÞöí66dz°ÐÓ³²NN9âáñèQw7‘ˆÁ,^¼d ÉLJF_»vãÆ¢EýýÀ¢¨ÈÍDrq™˜ØÚnßÞÖÖÜ|ü¸ªjoï‡EEd²œÀ`ŒŒ‹-_.)ÉÆÆÃ#'·~ýÖ­²²ãã>89ÙÙ¥¥‰ˆ?~ㆼüȈŸ_TTW×™3(TZÚíÛ‰‰ãã––/_mÛ¦¢òâE||cãLÏ%À`‚‚ºººº‚‚µµ¯_'&Î5Ÿn?Š!M&ŽæäÜ»÷ðaiinîGŽÈË¿zek›•õ³ÇüMÍÍïÞ=~|íZDDW nßþèÑ;ÍÄ„FWRòêUp0'§¾¾……•Õ²eS‚Ž”•wïÞµ‹=?ÿâÅððÖÖù¼¨Bccxø¡C&&ÍÍHfæ·×í¡PžÍ›÷ï×Ö†B33÷ïŸ/-ð‚,,kÖXZ°°”—_»õ}—Íô»;=ÝÆF[{Ó¦¤$ FVvíÚµkµµµµ×­ÓÖ>vìöm›ëסОž‚‚¸¸àà  ˆˆ  W¯’’ ;;¿•ß´IG‡•µ²òúõðð/#>(àp%%·nYYݽ‹D®YÃÀ0:úþ½½ýêÕ**ÐÞ>s‹8Âá¼¼ªªë×ki‘É@¡0e ¡PªªçÏGFÆÇ>$Òϯ³ókÓ”HîîÆb/VT\½š’x Åb?~ôô¼qƒ²^»d ÎÏ¿jÕÆFFBB}}oÞDE55ÍŸçädd„Ãûúzz@nmMK Œdeåæ–‘áäܼyÓ&nîÉI `fæç“£pò¤¢¢¸xv¶ƒÃªUvvÁÁ}}==·okjŽ77wt°±?nc£ªZ[ëííîþ­z4ZBB[[L ++_¿žçž[Ž(k$ÒØG™ÑA ¬¬ëÖYYIHTU½}[[+.>;pŽHìíMM}þÜÙùáúº)7ƒ´ô¡CÏž:ESò‰49ùe»‚ +%uêTXØ“'ÆÆ»w¯]{ùri)5Ž¡«ëí[kk=½¨(„ÃÅÄììàp €M@€DŠutôòJN.+ËË+)“•uuŠ:p ªêæÍ/òòJJ22rrp8yyèhcc&¦¹ÒÍÃáFF7nÄŹ»/_ƒ EFº¹ùûiM•fbdf€ÞÞº:jVoA‰IAÁÜ|íZLM55MNž§úÂÚ£ä:ürm64‰JÐh..ÊÔia;>^Zê䤠03.ö Ò¡C ]AA4š••Ž®´ôåËë×ËËçûU fíZ/¯U«œœàÍ›7®\™ÅÙµKRråÊåË$$DEyxz{++ÛÚæö!,,llßÚ–ºPÈä±±¶¶ÒÒ¢¢/3£@¡ÜÜúú..AAººccÙÙ D¢¼<–”àñººÇŽ™›¿~½uëÁƒoÞL/Ù.ìÇÇ{zš›[Zzz¦>c`èì%‘&'::ëëÛÛ89ׯ÷ö¾wol,?_CÃÃc.ŸÝt"ÑÉÉññ¯e8\@@CcÕ*VÖúúW¯òóçOc ‡³° 23“É]]SY¬@gbââbccgçäÄba0‰deåååááãcc£§‡Ã!$’——‡‡ŸƒadD"!8œ™™››››Ÿr’ò ÆÀÀÅÅÍÍËÛÓÓÛÛÕÕÙ92òí ^ÞmÛΞ=r„‹+=ýØ1_ߪªšš±1w÷wï.^¼ßÉiëÖ  ƒààÎι•ÓÄDyù;&&K—zxŒSNÕB£EDæûʼn‰ªª€k뀀ÎÎ/'RôôAAkÖ88Lµ eãúõž?××G =23““óò ¯ªšÏÃ9§âƒ=~¹ÿµk/””XZ~ø`f¶yóž=yyë×=*/_WøéÓ¢Ejj##ïÞ#ÏŸ»¸WŠrJêQˆˆhjÒÐ (J öíLLÜ¿_[[Oïõëß+?Sf™<6ÖÛÛÙÙÒÒÒ26ÖÝlj½½ÍÍééaa÷ÌÔjÊÊ eó*öö66Ö׌Ô×××{zææRÖ«:;[[“’\\ΞÍÌÄã×® ñõ…Ãáp~~MM+«-[xxòóýýmmåå·o/.Æã—,Ñ×wp¸{—Ž ݹs÷¨¨ ãÇ53““[³ÆÅÅÜnÝÚ±#2²­íK©‚Ãùù7mÚ±CP°¾>((!afž¯i Êd&'ÇÆ(SÙÉÉÆÆÈÈ[·>|8qÂÛûĉU«œwîüøqfhÞ¿"qh¨¦¦  --5µ¥éî^¹rd„Dâà˜ 4‚@jj ""òòââ~ôèÒ%mí»w Œœœ6m"‘^½Ú³'"b¶Qúµþ)-ŽNJúv vv5µ«WœV¬èîöó34Œ]hR‡…‚X¬¬¬­íÍ›::$RxøþýAAÔN“ÈdʹgyyÑÑÁÁ”«³3"22k×íØ±mÛÎgÎxy=êâRYio/+«¯÷nuõüo(”•U@€……Lîïom?å8™<2’Ÿÿô©]~þÔg}}³Ã•¾ÿMM©©ÁÁþþåå”9ÐÝ]VÖÒ26ÖÓòví²e\\0Xnn]Ý—5Azz™cÇnݲ³[±âë÷9ÉÆ&** ÀÀx<(Ôþýþþ~~6ÔÕÍ ‚€ÃåçŸ;·yóÙ³ññhôºu×®=~|ð ÐðpOOGG{{gç›7·´47·¶66¶¶¦§óñmܸc‡AcãåËûöÕÖRÆnJÊ;»w§¤À`ÂÂ::&&ÇŽõõ]»æë[[;Ÿs޲nia¡¥…ÅVU¹ºæä|; †Á00 ããýýSë…$RooLÌéÓGŽ 9òñãl‰Lmn..NOOM±#·mûVž¼¹{¢û££ƒÃ§][ HO¯ªêìüðá¥KüüïßoÛvÿþT/S JOÏÅÅÎN" 13óñ10ÀÈHo/GGG"¡Ñ²²Û·ß»wñ¢¶ö­[»w¿zE9O‰\²DGçæM{{--}û^½›Ë„€ÃoÝúøÑÇgùòÜÜ'O²³éé¿jH9Æ‚•ub¢µµ¹ù{Ìî/ff>>nnbx85µ§‡ºœ¼_ëÎÑÑÁÁÑQ@¡˜™§4ÿR^0˜¥Ki•@ ‹++óó£P ñH"‚‚ºº/ºº N{ßaa83³7nßVS›êt„ž^NNPp®µ!BPP_ÿÆÇ·oŸ»ÄÔà`d¥ü{ÏOϧO gŠ#ÒÑqqqq ½{·‹ËÙ³}};v8pçNyù×v=ЪU M“MýPæâÚ¸ÑÁ!6öÙ35µÜÜ£GwízúTG'8ØÏ<<¶o‰16މyö,0ÐÕuçÎ;mm££©3“¾ ‰Ô×æÌž=—/‡†úúž;§§÷êÕÌý<Óƒkx¸©©µ•@àâ’’¢luœÎ·†@ nÙblÌÏßÔš˜8·'‘R’‡gÝ:MM6¶––êê) -)ioýìÙîÝüüP(LLÀÕ«?¾õêTàúõ¤¤¸¸ë×)ŸpôhDDLÌÑ£”O&&ÀÂâå˨¨;**>ÔÒÒи¾õŒoóæ»woßVRªªrrÒÕˆèè (ÆOŸ.]ºx±¨(7×ÍíÊCÃÔÔǃƒç›T‘HccÃà S`Œ¼¼‡GJJ¿‡Çü¥ŠŠ>| ´ ‘ØÛ›™ùâÅÙ³§NA¡'Oêé9;GFêé9;ÿh¿÷÷‡…íÙcm}ÿ~RÒȈ„Ä™3ûö‰ˆ|þìîþà‰do¯¦##?ZX¬Y³dÉŠgÎ$%rqÙÙ))ÙÚN¹5@™yãÆ€€ˆˆ‹«ªÔÔ|ð€íĉãÇ98BB®^}ýº¤¤»{pD"1˜ß)?óC tt$&úû»¸Ì< aaÙ¼90ÐÒ’@™œD"¡ÐÂBŸ7¢¢æžÞ¶µa0«V­YCù_Rò𡉉±1#ãÒ¥zz§N…„ܽkn.+ÛÓóâÅùó––+W\¾œ–væÌø¸»{F†  ÝƒÆÆ‘‘ÇŽmß¾wïÓ§ÕÕ_;"‹mÜhn¾xqcãóç‘‘óµåå‰ÁŒww MùúÉäþþ„w÷¨¨±±7o¬¬´µ¹¸’’Æóø7DJK߸ñî]cã… D"À`ôôLLtt™™LLbb¢¢ ýýµµÝݹ¹ÞÞµµ™™~~rr‹gd=jd4žäÇA F\üèÑ€€»w'&BBôõ¯_/,ü¹£¥g¿MM}|||ll˜˜bbÌÌΞMNþu«SdòÄDWWAA|¼‡åzî % °l™Ðèè÷Ã3I¤‘‘îî‘LZZT”€¡¡ßÔ96ÖØ˜š0íT`d€ÒR<~ï^MÍåËYXž=««ëêA!!nn¤¥¥¥e` ¯/!aÿ~•„„©ÑÃÄ$*º~½¹ùîÝ'OZ[¯_?>þüù… û÷ÛÙ%&Šˆ<|ãéIGçí­¯o`ðêUcãä$ÊÆ¶nÝÉ“¯^¹»‹ˆ¸»;66ÆÆö¥)CG…NEð·¶VVVTÌ>Û£¢ââŬ¬Îδ´™Ûj`|¼¼ÜÇG__QñË“%fCÉÒ–—ªªÚÚqqÓYì¦6èææ¦§«©¹»oÞ¼wïü!vH¤ àæÍ7rrÀôBÿ¯Q(qñÝ»oÝzûöÞ=•²²3gLL¬¬^¼hiY±BG‡Rjb¢¡áÅ‹'´µ<øð!$$"‚íØ1 ‹üüæšZM+BuõË—­­--—,™™µçã““C øøííýý…„¦÷•ŒTUŒˆ‰-^ÌÌuêäÉÅ‹ËÊœœ^½šNÕ9:ZPpú´œœŒÌ™3X¬„ÄŽFFllAAéé]]llRR+Wòò¶·§§þÜÕE$²°HIéêjh P™™ááÙÙ]]„°ðÖ­GŽhjöö>}ê뛜<ÿŽ€@—/¿páõë7ÔÔ œ”•½½§B(’ÜÒdgwü¸¾~T”—×ë×66ÚÚwï~ú48ø3S.?߯fÓ¦ ž?ÿÚã‡Åji…„ÄÅÙÙQ§(uéê*,Œ ñðèì,)aaA"1˜%Kví:xPT43óÁƒ¨¨ª*<áå54¼uëÙ³íÛ 23ó÷¯¯gaY·îÜ9kkvö7o®_ýº¨hhh|¼§§¬¬¤¤ºzhXYãッœº»SS{z¦^Údòääððð0‰ÄË+&ÆÍÅÊÊ::ÚÙ©¨lÞlcóöm]ÝØØÀ@t´·÷çÏ..÷ï:t劬¬„„²ryù©Sׯ ™L$RÚê÷Ê5@ ¬¬¶¶®®ëÖUVÚÙéë©©½|yú´ŠJjê©S©©ß>\ åäܸñúõÜ\CCAÁööÔT??/¯óçML²³ñx…Ý»=<ž<‘•¥£ãáû»÷î½y39YYÙÖ‰œœ;| ‰7334*+{ò$4t¾I*Éã¨(* ‡··ÌNæ=2’›ûäÉÕ«ÞÞÚÚCC”œKP( ‹ŠŠ‰ÉÊ•}}±±ååóë¿¡«+4t÷nCæ& :ººº¶6iivö¶¶OŸ*+ÙØìí_¼ KJ?®ª¥ìÒ|þüÌ™ÀÀ={bc-,DDrrNžÜ·/$döVmêå‹•ÐÓsrzúôƽ{?>}Z]ýêÕ…ñ`±ââ›6]¾üð¡“Ó¡CbbùùçÏoØ`g>÷ž©_‰„Ç75Ì¥1“ÑѲ²÷ïÓÒFF¶mÛ³ÇÜ|éÒG.]*)ùÕû¯¾Åðp~~tt^:;›šª¨01½zèèøúÆÆÚÙÅÄè驪úûc±Û¶­_¯«»yó† úúk×rs““tttt {÷ 8”D™””ØØ\¸°eËçÏnnaaÎÎããׯnÛæêzúôÒ¥¹¹çÏ[Y…‡77/Ü„B)' ‰‹‰¥¥ÁÁ55s‡Ãá||úú‡mØÐÕURòìÙ£G³SMË3óªU—/»¸¨¨ŒŒ¼xaiô½dB´4vw××wwOwŽŽ~údk»}»¦¦˜˜´´”]}}QQW#"ÂË;1Q]]^^__ZŠÇ /t 45 £Ñ""ll”™ ‚H$KOƒáñ……ýýß ìœ$rñb##CC.®Š oïÎÎE‹Ž@š›ãâZ[ÇÇHII[Ûǽ¼ºº||¬¬ö훘pqÉËST”—¿rååËmÛ::¼¼¬¬ìíÇÆîÜÑÑ‘•jm6¶5k®\qt””Œ‹³´44´¶ŽˆèìD"UU¿W'¤$ÆAJˆ)`0vviéåËéè*+?nnž«7H¤¾¾üüˆˆ’8üêUkëM›-ŠŠ ¨­ý±£uGG«ªÂÂ22ˆÄ§OwíZ±‚…åíÛ¸¸Þ^2yj¥úäÉË—UThÒ°h‘‰É¡C+V<~|ìXjê—ž[8œ‹KSÓÔtýz1±¯÷ØL ÅtŠÄ©³¿< ãåUS308xpÅŠººÈÈ/RS[[''‘Hié‹CC?~ôô+VXZî޽С¿@ƒY¼ØØøæMOχ--Q¨ÐÐ}û¶n=|80°¡alìë,vd2_Zêéyà€ªj¿³óÛ·½{—’²|ù™3;vœ9YUõõD‡Lknþô)99:º¶öËöŽ~ÿ~~ÖÕÕÖ†ÇKKÏ5X;:Þ½»uËÛûܹW¯|}}|**Ž 33mÛÆÆ?Þ¹óéÓÚÚ/_p8 ËòåææööOŸÞ½«¦VYyé’Ÿßס€BÉÉ9sïÞƒFF))::!!Ÿ>A [¶8;‡‡ïÝKÙr][Ë¢¤doïãcj¡­}éRUòòêèØØÜ»'/ßÖ¦¨¸kWTÔמs‚—WCÃÉ),ÌÓóÐ!$òÅ ==SÓ™©~g¶G{ûË—{öìß/.÷âELL\½sç¶m..ÑÑóï`ø6„ˆˆ‰Éñã..22_ï-ƒÃ¥¥ÑhxûvößH¤¡¡úú¼¼¢"lß¾€€' 98üü>ÌÌÌÍ-,Äá ÐE‹q8"qt´½½°0337·¬Œ……‘±¸‰¼ÿæÍ›7I¤½{·n½téÓ§éžz{¼½½½ƒY·nöhäæÞ´ÉÊjÉ’šš{÷NzúTDäüùÌ̬¬ ®^ݳçüyŸÂ¤¤Š &&GÇíÛ±Ø{÷”•OœHK£§?p 44.Ž—÷âE%%[ÛÂÂ?!?eÛ¾”””Ôø¸°0#ãLù‡B98ÔÕO \¿¾¨èĉ-[?þü¹½ýíÛsç6múô)(èÞ½ÚZǽ¼Š‹çß Ý×—•pìØºu·nå䔕 b0ÒÒÚÚG>ys옊JO¯ï¥K·oº¹rpô÷‡…íÞ½oŸ¼ü§OÏž=yâäÔÚjbrî\BÂt: ,vÙ²ýûMMÙØ²³ââš› $’—WVV@`|¼´´ºš’£ŠŽNLLW×ÈhÑ¢ÞÞ¸¸ÄÄ/3¦ÕÖ>}zá‚§ç´æáàPPصËÉéÌcc66--“çÏËË© Ðüõ@ (77ŒML@¡¼¼ ‘811eZS˜œìëëêbd44¼xñÄ ÊÑñÞ=4ÚÎnïÞºº}ûÜÜxy••a°œ[Ûœœþ~À`¤¤¬¬œ?¶°Àb««q¸åËíí/]:p 3óĉ îBÉþ$#£®¾aƒ±±…Å®]ûöéê.^<>žžîãcd¤¨x÷nTÔÜSœ…@Ù£ ¨¨¡¡©i``jjb²{÷† ÂÂýý>Ü¿¿e‹¼¼—W|üìC5ÿÈä¾¾ÔT'§üüÌÌë×}}Ÿ”•)+ ‘É--UU}}$?ÿ–-VV›6ñðGF^¿®©ia‘—ÇÂâêš‚Fϧ"ÛÛcbÞ²…—7((:úöígÏZ[?Ö××Ñ9yòǯSÈÍÍoßz{_¸0°†¢Ayx6l8s&,lÿþ±±˜këÇxþ|®]d ÈÆ¶iÓòåû÷¯YÓÛ;ßy6H¤  ¹ù£G÷îíÚE&GD]¸ðéÓüAÉSßâç×ÐX½š™yx8;»ºš’^â[PÞ7íí¬¬OŸ:8@¡çÏ««lØpåʽ{¼¼·o¯Y³{wVÖÐP{»™™°°†™<119IG7û2Íøxggqq{;®]+%ÅÁD†‡ Œ··SV½mmŸ|øî]sóô ‰ÔÓóñãž=²²ÉÉ79Ié—…¤ '“ñøžž¶¶ñqVÖ•+W¯¥£SP¸råÑ£'Ÿ<Ù¾]]ÝÅ¥ªj.“yr²±ñÙ³Ó§ýýˆ½téÝ»‡'&LLNœxýº°pþ Öùê28˜’âæöúõÀÀ‡vv§N­\™‘aoŸ•ƒ­Ysé’›ÛáÃhtd$Í@ú!ØØvï¾uËÌÌËKMíÁƒÙÉu¡P,VHHJJJJNŽ‘q> ççgf¦ü[HhÙ299b>µO&NN&&R«''ÇÇ‹‹¯^Ý´‰ƒc*äêkõôbcssÉäC‡ttâãg® Áá‹›š>îë+/ßÓ3Ÿ§‚ŽNTôÐ!WWCCvö_Ór”,ö®®IIÏž8ÀÀ˜xîܺu§O{xde-ä52>^Sxú´²rMMyùãÇÁÁnnyy**²²ººjjW®$'O…u@ ÌÌRRŠŠ’’uu8åT……ƒÁˆ‰©¨HI12~öp¸¢¢k×¶l9y’ž> ÀÑ1000KJ^¼°³Û¼ùÂ…ììiÏ;ÂʺqãÍ›‰‰[¶,^ …Öׇ„ØÚÛØœíí½g³³®nfæ•+·oëëgeíÚÖÝM$Â`LL ff§O{x¸º/^\Xèé¹qãÆ÷|kAŸDÌɹ|yÆ;GGƒƒ}}_½*,\¹òéS[[{{‡çÏg§þv?VUEGgf‰×¯ëëoÛF >z”‘14Äή¡aiia!+ÛÜâééåš=óZ¤£ÒÒºråŋ۷÷ìAƒÍ›½½ §d„’DŸDšJZ19ÙÖ–`g§¡¡«[PpŸ¯oFÆãǼ¼ºº‡»»çåͦ°³¯_òä… RReeŽŽææïÞùú¶´|üøáƒ‰‰µµ¹¹“SJ᱆ýéSIÉÐ’Ò¶m‡mÞœ]R²iOw·ŸßtÂîß)?S#\BÂÞÞÇ'>þäIJÛáñåå©©ÒÒ––îî7o^½ºw/?jêÉ“;wZZ¾x1•䤥%8øÔ)!!?¿èè´´·oÏŸ·³;{öÑ£ììÎÎÙ“_„@@Db`Xµjï^_߇ ·n•’Âáâãïßws[·nß¾¨¨ª*.®ýû33Apll``llr²³óíÛ‹·msrzò$..""4”‰iß> ‹cÇ^¾lme`X¿þÀíÛˆÄDsówï:;‰D4zÙ2kë/BCåænkËÍMM­¬œœ”–^·Žïóç«W½¼ ¾—æœLÆá**îß74ܵ Œ‰ñõY»ÖÜü{9¿,VYÙÛ» ÀÇGSsz²A$VU=}š™9sÏ¢¥åììì¼ysCƒ§§²ò‹/_ÒÑñ󛙥§¿xqó& 6>ž–vøps³¢¢ƒÃ›7çÏÛÚ®[‡Ç<¸y³Í«Wãã7Þ¾ýôé“'éé±±ëÖ]¹book{ï^JJCÃ—Ž (”“SSÓÝýÕ+GÇ;89éè ¿¿¨(*êÍ› 6oÞ»×ß?1±¹ùGLLdfÖÔtrЉyôH__Zšƒ‰€‘‘¦¦ÔÔ·o#"VS ËÎîéùýþ UU{÷jkÀÍ›nn--§NÆÄ$&–”ÔÕõôŒ MO‚yy]¼èï__ÿå{ A"ØØØÙÑhŒ…EAA_߯æÒ%,VYYE…ž…âáyø°­­·!º»««32’“SS_¿þø±»;6öÚµçÏ››SRΜyüøîÝ’))vö†'§ââááÑÑúúÛ·õõ7mšù‹ôôZZ”½®||ÊÊ»vY[+*ЉÉË/[¦¨¸b…œœ„ÄÄD@À† kÖ÷©$ ååýýáájj_ ?u@ ll[¶øùEEäæFEefffÆÅ54àp55õõîîrrh4õ/.zzeåk×Þ¿Ÿù¼8—“ãí½jÕBÏøž«¶ òòFF7ÊÈ00Ì·« ƒY·îÅ‹‚‚ŽŽ/TT(ÇœÍ}/ ##ié©HYJŠ‹¬¬šš¡¡’’àà7oÂÃ}}Ãé¿>}_RRY‰ÃeeíÞ-, ûaw ÆÅµ|¹®®–Ö²e||ó¯+Ðщ‹_¾\XXYYYyïÞêÕÌÌÓmƒ š›þÜßog·t)eYYõô=êìli¹sG]aê5#*jmÚÝ]Zjg''‡BQT½ž^ppYÙû÷/^œ:¥¬ÌÅ5ÿN¶o?›ªê‰¹¹eeñðÌeJ¢Ñ+W^»V^ž›km-.ŽDÂ`œœªªû÷¿~]SS^^]ýü¹‘‘¸8;õ]„™yåJGÇÔÔâ⎎ÄD{ûmÛDEQ¨™qÚ[¶$&~þüàÁ¶mK–`0 ˆBÉÉ>™ÙÒ’—×ÜÜØ˜“ÓÕ…ÃÕÔô÷GEééqr~-g”ðK'§ˆˆªªððmÛxyg÷/Esr*+½¼LMïÜ)))*JI9yRLlêl$rÉ’ ò󫪺»srîÝ;uJS“‡‡ŽÁ`ääŽ÷óki¡Œšîn__ccnî¹ÚçWË.$täȇÉÉaaÛ¶±°L¯Ssq™›ÇÅ•”ôôäæÞ¾}䈒Óü5AJTÔÈÈÑ15µ³³°02ÒÐÒŽ}X_ßÔäáqðàÕ«oÞTWgfúøÜ¼yèÐÚµ¢¢¬¬‹[[ü˜ÝÞÞÒ’“ÓÞ>4TSƒÃUT\¸°|ùLÝ‚tt¢¢;w^ºäî¾c¥ PvöÕ«MMíì,,DDf—F XY¥¥7l04õñ¹zõÒ%##¹¢?°X•çÏ;;)z#3³¸øÓ§  ÐЧO¯\¹zÕÖÖÔÔÐPKKFFD„mî–A4Z^ÞÎ.4´¿‡«©im}ñB[›“sz„`±ÊÊ.$'WTääôöNé¨ÏŸ‹Š22ƒƒ½½Ï³µÝ³GGgíÚeËxxèég¯>32ÊÉíÚeoYVVY‰ÃŒ¼ïä45²‘H kkŸ‚ÊSôô|üøöííÛ¦¦ªª<<3Ÿ^³æéÓüü/çS׊ -­™5ŸúÞ²e‡ÇÇúúÚØ((ÐÓÏ5@"/Þ·ÏÃÃÛûÍ›˜˜àतÔÔ7oÒÓ““Ÿ?úôôiee6¶¹µƒ¶öÓ§ÝݵµŽŽ**»v}øÐÝ“óòåμ¼³ß—h´„Ä… ÙÙ99ÑÑ»vñóKHœ>ýå¬)#ÃÒòËù²°hi9:FDøølß.,üí·0‡£ÑX, …D~KÓQ‚¦ýý««ß¿¿rEV‹27÷ðHH¸~]FÆ`}|ªª¢¢lmEE§ƒ‘—wuML|øÐÔTTTVöÆòòéú77»¹}{–ŠÅªªº¹5557ß¾­ª:ß|mªŽ(7·ˆˆ  ''ýãûÚápff))-­mÛŽ³·?sÆÅåömGG77—Ó§Ïžµ°—gaYÈ[ ebRP05=zÔÉéÒ%33 ~þ)'H1fÄĤ¤äå•j¨ª*)ÉË““[¹RRRFFAaáßmkkkû2»Ù?. °~ýñãû÷+(ÌnôÉÉ®®„oïgÏâã§NW^Hä’%––ÖÖ»v@X˜““Ÿßüé|ÒÅÌÌ¢¢ââbbììh4 ‡C $×Ý]YY\\W×Ý=>NwçáY³æÐ¡ƒUT¸¹g]"q`àÓ'ŸG"#›š~ßÉ"07·šÚæÍëÖ@zú«WII]] óYP6 ëééè,YR[ûþ}ddI u§2ƒ”Ôúõúú‹×Ö†‡GF.d+üÏ‚Œ  ˜3sWWUUKËLŸ.ÎξbÅêÕüüÝÝÙÙõõ##$ÒÑqrJI-Zµµ” }”òŒŒ¼¼ôô££­­}}Ó-øís¯¨¯ñüwC"—.ݽÛÛûäI,3“@00pvÞ±Šºxñôi›òòúú¾ôñPKÖ׿xÑÅÅÝýÈQѲ²+WÌÍ·ows++Ãá(+dòTŠTÊfY>>AA&&4Á‰‰ÁÁææÚÚÖÖoEsC¡J dúZuuW¯ÆãSS£¢ªª Pdp°»{ÚS `±\\LLBgg_ß—[F)‰P-‚@Z[++ÛÚ~tSé¯ê%‚ \øY/ ÅȈFƒƒ”<ˆ0'çÊ•FFššPhbbHHFF{ûìÑ …ÒÓóððññð01¡ÑH$ 69Ù×WWW_ßÒ22ò7¥I€ÁØÙedV¯fc«­MI)/§&·ÒƒBIK8`m½mÛÀ@pðõë/_.t ÆÈ($ÄÉ91ÑÔÔÚúu/RFÂ` F ŒŒLL|ï‰`0:: ÆÆðø?Z¯5A&OL|¿ç¾}zznnVVèîîêžîY(”aÑ"!!©µµ®®¹¹³óÇF%ÒÑqsKH NNVUUVR_^^EÅuë„„zz23³²êëæ{C¡H$‹ÅÒÓc±”õ$(”HêééèèïŸÿÄ-¤œ‘÷«µ*Îǧªjd´j÷þ}XXi)*,ÌÈ88XSC99êËò LL0ØÈÈÀÀÄÍÎÎÏÏÍÍȈFÃ`BooccSÓô;ù÷ ttPèä䨨ä$™ À`‰D É0==++K"õ÷ àpó'¾@ 0J*t<‡ûžf ”§£€±1î˷鿚Dƒ?ÒÑñóKI-^ŒÇ———–öô,d2‚(?¿¸¸°0WYYVöµ1Eƒ 4hРñ+¡íA¢AƒÆ’2£¸¸´”ºoáñÍÍeeßN&Bƒ 4hРñ«€Ðš€ 4hРAƒ 4(Ð $4hРAƒ 4hÐøhŒ—wýz33[ÛãÇõõ%%±Ø_›Áè¿ÑF ;;77;;33ý£™Ðhõÿ›A$’‘‘‹‹››™ƒ¡µÑËÚÿ¦>¡É 4hüZþ $JFæÖ­òòââLM98žfàå]¹R__WWZš•õû/!jËÿy1±ƒ?}ª¯úÔØ˜‹ë{uœ«<«¢ÐÒ’›¨¡ñå¯ß64<~ÜÑÑÉÉÒRQqþÄß¿«=§äav‚Ñ‚‡¥KrüÙïj$RDd×.7·‚‚ÞÞ††ššOŸZZº» Þ¾52¢FnRE@88vîŒ/.®¨pu•‘Yh‚÷¿¥þ¿[þ(”“sÓ¦ë׋Šúúrskkkj²³»º22öîNáü_áOèÃß©OþF}þwË«¡áéÙÚÚÒrÿþºußNþKƒ ÿƒ †D"5/9¤§_µêäIÿ‡ÍÌ–.: åW•ÿó Ñ GŽìÚÅÅ•”äë;ó8Bjʃ Ž@ ‘B­¿vr²¡!,ÌÃãêÕK—rsgúgÚsl¬¼ÜÙYKKMMJJNÎÊêÁƒæf@ `0ü½ÞçùÛ24|üøþ}-­ŽŽk×ÌÍ¥¤øù-’•57wvÎÎþ“ £)‰g‘H8|amò·Õÿ÷ÊÿÏ´+—¾þ¹s,,¯_<(,ÌÈ(.ÎË»eKXXKË+áòŸÑ‡¿OŸüúüo—„@àp$€Áþ‡ 4h,Z»ÿQ vö5kN20˜˜xþ\W7;{pð[SVjË/¡¥%&æéÓ7bbþ™– “'&úû[ZZZúû‘Hê[gæü™ö‡Áõôvkm}öLEåÞ½ŒŒ©óÖûúòó;;ÿr¥ò/¨ÿß!ÿ+«¨(™ÜÐàçWVÖÛK LN‰íí}}4õïÔ'šüРAƒÆïâÜ«ƒDòðlØ`k{óæ›7?¾~pêÔ–-ÂÂÓÁUP(“ŒŒºúºuššrr,,0/¯’Òúõêê::::êêë׫¨ðóc0ß:uåAANîôiww[[=½%K–-37¿yóáø¸ÄÄÀÀÀ@gg}ý¥K狤Çb•”?®ª*+ë뫪ru]³faa P¨  ¡á**55Ožøú––R¦¯?W¡§35uqñöŽON~ýúÎ;¿ô¢PââÇ{yݾýôéÓ§·o?}úàÁ‘#**LL_>)µíÿ{Ãùùµµ¯]{ðÀÞ~ÇŽE‹f‡±PzÓÖÖÓóÚ5kk9¹ùNmÿv{b0ZZBBcc……™™ ããŽ@@¡_>!¤ä‘#W¯Þ¿om-.ŽBÁ`ÚÚ—.¹¸ËظÑÉÉÓóøq--Žo¯°B¡llk×:tÿ¾‡ÇáÃëÖ±³SÊ/¼þhô’%ûöݾíâríÚ–-3%†@ØØÖ­³¶öòº}ÛÔTBb¾Ö¤žß#ÿ Q(aa•µkut6lX±BLŒ ed\ºTII[{nyF DD \\îܱ°’bbâãÓÕ={öÖ­ÈÈ„„ÐÐØØG /žÙ—p8;»ªê‘#ŽŽ!!ï߇†&'¿ÿðáÝ»GެXÁÁ1u¦;-/ò¤££ƒƒžÞÊ•––÷î=}óô©……Œ 7·´ôÁƒÞÞÏž}øðæ£ãÎ""³¥e¡m½ðñK½}òcú efVRÚ·ïâÅÀÀØØÐД”øxw÷ƒç:ßšþýù¡¶>Ô–‡@˜˜ddöî½sÇLJ¢ù_¾tqÙ¶MR’žž¶rDƒ)”ƒb»»ÛÚšš~Õ•rÏþþîîöv*ùýOŒFËÈܹSWWSÓ×WS“]Uõî½ý‰ÖÖÇûûWW %'ïÚ%$D™F`0rr7n$%}üX^ÞÒBÙ£RQQ__V–˜XRRR’˜˜›ûò¥‘‘ejG]y„“sÛ¶¤¤áኊªªŠŠŒŒôô§OÏœqp¸uËǧ´‡«©ijòñY½úëW=`±«W÷ôÔÔàp==hh,Ä@B¡¤¤œKJrr^¾Ü¼™™ù{¯°o—§Ô¡»»¦¦³³²òÓ§ÜÜ  {{‡ë×ïÝËɨ©éî ÓÓãæž½ÃFXxÇŽ³gOœ¸víÉ“¸¸‘.<ÜÒ’‡çË—/µíÿ3 ‘¢¢ööEEÕÕeeW®ˆ‹ÏFƒÅ**>xÐÔTSSXxîÜìI#ƒ†ÆýûÃà Îm`|»=ápaá'rskj:;““}|¦vFõöæçß¾ma!*J1à‘H9¹ë×SS?}ÚµK@€ž^^þþýššš®«ËËKCƒžž™yûö¸¸²²ÊÊë×%%éè0OÏÆÆššÜÜ'f¶ÊÃca:8ØÐà쬬LÙOpp˜™%'WVÖ×»»ËʢтX¬œÜ‘#ÉÉ]]ÙÙ/_š› L¹¨©ÿT{ÈÉ]½š€ÃÕÕ]½ª¢B‘a::qq‡ÂÂÊÊââ«W¥¤~yôkåŸZàp>>KË—/ccKJJK?}êë£ì|kkKI™Ož1˜U«nÜhlìë{ûÖ×÷Ý»ŒŒúú®];sfÿ~cc++3³U«¸¹§ÌJAáêÕøx®¯ïíÛlmwîÜ»×ÖöúõOŸúújj ®\‘–F£A‰ÉÀ >¾²rd¤¥%##1ñÁGÇèè¶¶êê––¢¢¸¸7o\]íí#"ZZjjZZ=RT¤v!uã÷Gäùwëêõ)!qöì»wCC11¾¾vv¦¦{÷ž>íêš—78XZkeÅǃͬÓÂû—zù¡¶>Ô•‡B98ŒŒÂŠ‹q¸˜ÿë×Oœ¸q#8øýûººÊÊÂB®»{¡ï&4hÐøkø_6p¸òr;;…é—>Æ ÞÞ]]}}OŸnÜÈÈ8ó{ ÈÊjhøòåà`KËÍ›**ß›*,¬ü”„ÃÕÔ´µ={¦®ÎÂ25ƒB……Šˆéí}üXW÷k àãÓ×·¶>vìÜ9kë „„¾çãA&¦õëÝÝ*+/_^¹òûOñ½òÓFZLŒ/ïÔ”áä44|ú´·wx84ÔÒrú/³¿¯ªêæÖÖ622÷„æGÛÿGXˆ(”²²‡Gf&——wð ¨èÔD…RQñöÎÎÎÈ07Ÿ2°©mO::IÉë×++kjp¸°0‡õë/XºTSóæÍ‚‚šš÷ï xx Pdg72zù²¯¯ºúâÅåËyxÖ¯ +, /.nk µ´;{¶  ¸8>ÞȈ•€ž^SóùóÂÂÁÁøø-[89§ä‘QGçõ뢢ööçÏUU¦zq¦$'ÇÈ($d`ðòeSSAA\œ¸øl_55õŸ,,ëÖ=}ÚÜ\Ròþ½…—žÞƒ­­wîhkO‰Ÿå×Ëÿ¯ÐE••))ææó'® L ››q¸ššžžw…çé «W?ÞÙYY™”´gÏÌV†Bùù÷î êè¸_Cƒb ÕÔàpuuŽŽ+W¢ÑXì† aaåå8\IÉ©SRRH$ µzõ£G99ƒƒïßkk33ÿxËüþ˜<ÿ}²Ðòh´œÜýû ÕÕ¹¹'N O›¹Hä²eW¯&% ~ú4[?PÓ¿Ôʵõ¡®<ÊËklœœ<<\RahÈÎ>ýöâæ67­¨ ÆyGƒ  ÿÓËßMMaa‘‘¥¥8ÜÔ'““==­­ƒƒ==##ù'ÃÆÇ32³³ûú¦¶‰­­‰‰?ÖÖÂáÂÂrr<<_®‘LL´´¼ysïÞýûׯ߻÷þ}CÃÄÄ·~ƒ²©×ÖVUµ³óáCÿ¼¼égÿÙòdraá‹©©ííS[×I¤žžôô˜˜²22™Ÿ_QQ@àGBtþ>ðøÂ€€÷ï;;EE7oÖÑ€Á…ݲECƒ¡´400)i®MÒ iO„Á ††ÂÃ]]oߎ‹«­mjª¨HH¸}ÛÕµ°SPÐÒ’@£Éd®¡¡¢¢¿ŸAHˆ››‹KP™¹§'''=½« ‹áææäed,)©¯%“`d¤  ,,?Ÿ@X¶LKKZš2qA£/ÖÕUPÁœœÐÐ’’áá¯kÏʪªêâò惃гgûöÝ¿_^ŽÃÍÜCMý§¾C"õõ¥¤\¾|ùrq±¬ìÅ‹ŽŽwï:9­XQRr力ۇÓcâçøòÿgèí rrŠŒ¬¯Ÿ{¤#<ÞØ8>þkÖþFG++_¼ ëîÞ½{Çuõ+èéµ´xykjÂÃcbšš¾žÔ/´=‰Äááöö¡! G£gO£@ E `02™’­ŠL&‘FGÊˇ†˜˜¤¤¤¤H¤úúÐÐúúÉÉÉI>>YY)) fp°ºº¦f:å1‘ØÕ••^[ËÌln¾f //Oo¯š/o}}LLZZW×× ¬‰Äîî  Ë—?9wîéSw÷ääÕ«÷íûÒ¤®þ3e‹K[ÛÜ|Ý:.''7‰TQ9|X[›ƒ#9ùÕ«¹jô7ÉÿŸaÚøœ_§Œàñ€D20|¹ ‘X, ããÓú„L&ÆÇgß•L&“ÿ ÍH" Q/Ï$?44:J&‡„lܨ¢²{wJÊèè¯êßß](”ºòÌøøÈÈø8rs33£ÑLõ ÒÑ11ÑÓ#‘ ØÛû_Ñü4hÐø_–afÁÉd2‘H" …~}‰ºò ˆB­X¡§'.>© …rr®^½nÝ¢E““õõmm_ztQ(qq[[?¿ÈHÿƒ—-›ûO„ƒcÝ:[[==îÙ³{÷rs¿ ú™ò”ïHKoÛ&/?½_™™µ´–.Áææœœ¦¦Ÿ ¡¶ý)ûG””œœBBž={÷.$äìÙ5kæJu1û7¦W¿}÷±±ÒÒÀÀ˜˜®.YÙ®« úðáë•jÚsr²§§¸¸¼ç䔕¦§Ÿª1 ÆÅ%%% €@ôôTW·¶ŽQêÑÖ–ŸßÑÁĤ¨¸b;ûðpmmGGKKEÅà ›²²‚+kggqqK ¥üÔ¯´µ%$DEut nܨªª®®¯/$ÔÑ•–ÖÒ2÷Ê™<:Z^îî¾cÇ™3ÉÉjj·n…†ÚÙÉÈÌαHmý)=EO//ogç䤤TZzùòéÓû÷ߺÕÖ¦©éì|䈒Ò|Y¬æþ€üÿLL´µWWqq­\)!1ó T„‰IRR^ž‡gl¬®./o¦>ùýæÐBÇïÉóߢωľ¾ŠŠÜÜînzzEEuuAÁö¼$jëCmù±±¦¦ÂÂúzݼYQ‘‘qª] ffeåmÛ–.ý“‘4hРñ« ƒDãッŒŒkÖXZ­^M"UWÃáììDeetôÇmm3M€…”Ÿò½“ÉÀÈhdäæ00ððadd_Ÿ¤ä—/ËÉõ÷‡„XZ¦¦ Ìö´|ùÆ«Wkhïî>×–dlÑ"“V¬¨¨ðõ=z´¢âÛ† µåH$ÁU«._ tqáå jhàãÛ¹óâEMMäãÇS§bb¦v'A ŒŒË–iiéë/_ÎÌŒÁˆŠ.^ŒÁ€ ;ûš5&&FF$RMM~~DÄ»w3½ÄÔ¶?"‘<<**ºº**ŠŠ€ÅQV¸(íý5Âðp[ÛÀpq)+««kh¨ªb±CC$RQÑçÏ55ƒƒÓ+ccååáá¡¡íí»wÛØðó×Õ9:¾{×Üü¥yAm{ŽŽæåùù}ø€Ã½}{áÂýû§OÃá¯_ww/Y²oŸˆHkë³gvv%%S~ÝþþòòêêÉIaaCCVÖüü7:;‡†úûYY—/_µjb"$¤¶¶¯oöÌÄDmmttjêÀ€µõ§OOLàñqq..ßð!;:Þ¿?vlûö¥K?|ˆüØÇ§¦F_ßÂ"8˜2妶þp¸˜Øþý––Pè›7ººááÍÍUUHäÝ»ÑÑçÎyy¹¹íßïï¿fÍíÛµµ?bbÿ ùÿ[ “²²îÝ ˆŠrssq±³€€€Ü\X¶ìÐ!Wו+ûûCBÌÌÒÒÈdMÍ¿M‰ÔÊóŸÒ' +?:ZZúà—Wy¹•Õ¥K^^ ººŽŽ23KH,_® 09qéÒÇÕÕ?gä-jëCmùöö„/¯ÏŸ÷õ}ôÈËËÅåêÕððÆF!¡­[OœPVAÊÛ 4þ]@÷ì1331aeåààæþU7íííêjoggçææãóòòööñYøw‡‡‡‡¯·Áb…„¤¥ðøŒŒ˜˜øøºº©×‚ÅòòJK/^<1‘ž–’ÒÐ0ý ›œì쬨hnf`“34Ü»wÇSS==EE>¾ÞÞ””ÐÐÔÔîî™ÁF )O$b±ââGÊ˧¦:tófSÓ† {÷<¨«+ ÐÕáêjnnk3×ú ÊÀ **+»x1R_Ÿ—÷ömXXVVGÇÌZ ÑÒÒvvíÜÙÓséÒ¥KÏžUU}ëµLmyJ¤¥±ØÏž½{·¦FUu÷nkk##II!)éÁƒ={~ù²¬ljK5ÊÅ¥®¾g¹¹’’”ÐÚÚÜ<4ÄÈ(*ºt©¸83sKK|üû÷UU3'4Ô¶?Àá,,²²üüB}}QQtôë׳ût6dòØX[[K ¾l™®®Áž=ææúú7JJÇÆ†„dgÏþaddlLZzçN334:$äÔ©›7?}êé™iŠPÛžããYYŸ?ŒˆˆlÙ²{·‰‰‘‘š'g[ÛË—Îλw_¾œ’ÒÑ1eˆ‘HD". -ÍÂÒÜüî]PP\\~þÀƒ¸¸¸8 VXòúõ»wee³÷LNöõ12ÊÈHI1156ÆÇß½ëã“–öåJ%ÎÆ&!±t)SUÕÇ‘‘99}}x|{{NÎû÷µµ<<úúFF’’}}IIŸ>ÕÔàp$5õG£—,13Û¿_^¾£ãáÃ[·?ÎË"ñø¶¶²2<^XXUuÅ ¦°066/¯³“Ú}1¿[þ—.š=ưX~þeË„…GG““CCSS›šæ7cÇÇ“’jjXYUUwï>thçNcc55.®ŽŽW¯®_·´´·OHhk›˜€ÁXY%$$$ØØêêß¼ÉÌìïÇ`DE%$øù»»SSÃÂ’“»»!!qñE‹FG? ûða¶Ù°p:~©•ç?¥OZžHìéÉÊŠ‹KKÚ¸ÑÂbçÎÝ»ŒÖ®]¾œ‡‡H¬©ILüø1!¡¼|x˜Rêú—Zù¡¶>Ô•'“q¸òò¸¸ìì‘uuCÃ5k-ê鉈8qâÂ…ÏŸVÖ¤¤ˆˆ/ßM4hРñ÷RRr‹‰IIÉËÿª›VU•”äåIHÈÉ­\)))#£ °ðï¶µµµµµýït%ÍwBBUÕÙ³ÅÅë׫©;–™‰Çÿºû32Š‹oܨ¥ÅÌ\P™‘ÑÒò­é µåÿ·A DEÏŸÏÎ~÷ÎÄäÕ«Í›¯]«ªš9µ¡µç?=¾hòOƒ 4hРZˆÝip°¼üݻׯOùÿeH‘ML-jk{ý:<¼¡ák¯/­=iòOƒ 4hÐøwñ?g áp8\MÍßY7EÅ„„âb++šXþû8{6+«¬ììYZKü^0 FD„Öÿþf}Kƒ6~iРAc>þç ¤¿OAÃᬬÒÒË—óñápÅÅÅÅuu³wŠÐø;BYY%%eeEE „ššììÊÊ™ hРA›Ó Aƒ'´»œÉÉÞÞââOŸh'Eü» {{KKssiýFƒ 4hРñ_‚v 4hРAƒ 4hü?ÿ9 ¡££§gdäà``@ 4Œ—wýz33[ÛãÇõõ%%öÈW4hРAƒßÍ€€BÙØää6n¼sÇËëÎôtg瘘gÏîÜINvqÑÓ“—Ÿ9-C¡–.uqyþÜÓ3&æàÁÅ‹Ñèé;a0òò‡¥¤ìÙ³r% õ#åÿ6P(™[·ÊËkj(¦)ׂ‡¥K‘Èÿ²p#¼¼+WêëëêJK³²Îu„îÌö).þðÁÔ”ƒƒfTÿJàpaaCÃãÇœ,-þ¹ö]˜<РAƒ 4þ×ùLA‹URÚ²EA MOþÜÒòàA{û­[¯^ooÛ°áÌuu66lú0«W«ªJKO›< ‚P(‡C¡Ó&µåÿ.ÆÆÊ˵´ÔÔ¤¤ä䬬¾­­Ý»WKKLŒ ii)-ÍÊŠˆðõõ÷ýº°pzý€ÚòÔÔœ‰IFfíZyù¥KåäXX`0::AIiýzuu†±1 ‡†ª«ÓÓ32š›g¹H$φ ¶¶¶¶êè,Z„D¶µ}úäííààáQ_O9 ecSVÞºuÿ~ccUÕ•+%%ùùYYáp<¾¥¥  >ÞÃãÚµ€€´´ž"~~ccGǽ{ÙÙCCýýëê44JèéZìco€IDATØXmíãÇçÎyy¥§ LGjÛ‡ŽNTôÀgç;oï7|}«ª(ã åâÒѱ±±·_±"?ÿÚµk×;;€:y ÔŒZùÿ½ý‚X¬¨¨±±½ýñã––JJ,,CCÙÙaa..¾¾ƒƒzz‡/^}ñ¢·wfæÐ™ p8;»ªêþýG;¦§'%ÅÉ ==ùù‘‘¾¾ÎÎfeuuÍv`±JJçå=y²mDGoÙ"/ok›’22B{UÒ Aƒÿ%þÃû-è踹¹¹ ¥¥¼¼§çëÉgoo^^JJy¹  ªêêÕ,,ßÛAmù+H¤„„­m@@\Ü­[«VáñIIaaþþqqCCªª..||Ó!‹Hä²eöö¯^:% PQòô©»»OLL~> )il¼e‹ÐtHµå©íwaá;ìí/_67JAáèQ'§‹oݺuëâÅë×­­••ÙÙa³ÜP¨”ÔÙ³¹»«© &%½y“–ÖÕ%+{ð ¿¿ŸŸ¡¡ÐTy$R\ÜÐpÓ&YY(´¡!>ÞßÿÉ“;w?NO'uu/\ qs[µŠ‘‘Àƒ±°()›š^ºôüyPÐÝ»ªª‰‰óߟúþ¢¦> aa“3g¼¼îܱ°€Ã›šÈä .\ˆŠzÿÞÍMGgd¤ªjdDAÁÔôæÍ³ged0ÊwI¤±±ÎÎÆÆææÖV2YJÊÐÐÜ\SSTþrÔPÛ>0'çºu¦¦[·®YÃÍ=³Í FFsó­[ÅÅ)“Ô˵òÿ{û ÕÕïÜ ôõ=vléÒ¬¬Ì̪*vv3³7oll¬¬45EDP(Ê7P(‡ÀÀØØ«Wåå{{ããCCâãûúV®¼z500.ÎÁaf ðìÞÀbYX$’…ƒÃi¯H4hРñ?Izz\\DDww[[SÓ¯ºRîÙßßÝÝÞÎC%¿æ©@™YIéàÁ´´°°óçwíâæžÞ]‚B‰‹»¹½|éééﯥÅãªzú´“Ó³g::¬¬ŒŒ G~þ¼¿’ÒT’êÊÿÍ ‘¢¢ööEEÕÕeeW®ˆ‹Ïe„ Ñrr÷ï74TWçæž8!,<=IB"—-»z5)ipðÓ'só© +²²üXYÙÚúè‘¢âÔyþ¾¡®üË+«¡áË—ƒƒ--7oª¨Ì÷;h´ŒÌ;uu558\y¹‚ÂtI† ¼½»ºúúž>ݸ‘‘ñÛ¿…òñíÙóæÍÀ@IÉ©SRR”¿îþÔ2w}¨iA&&ƒøøš®®ÎÑqåJ4‹Ý°!,¬¼‡›º' µzõ£G99ƒƒïßkk33y,VUÕÍ­­md$<ÜÒ’‡çË}^Ô¶»zuppgg~þ³gk×ΜæÃáK–ØÙÅÇ>,&†@ü˜>}}këcÇγ¶Þ°AHhvÒ Aƒ ÿü'Š…Ã¹¸ vì’"33=ŠŠêè˜;†D-(ˆ­¨`cÛ½[^ž/$ä[w¦¶ü¿(”™yÉ9966®¢¢®ŽDbeåââà üul¬ªª£ƒL¶´”’âåE" ¡‡.-MNnjbb:zôäÉÓ§££¯\ñôŒŠª¨èîþz¿™L]ù?GSSXXddiétØÝädOOkëà "#ÃȈDRV?(aP(+«¬ìúõ¦¦ÊÊË– °°°°ˆˆ,Z‡£Pùù(Ô—k%ÔÝŸúž£¶> ‡L®®Î̬©ÁãÉäeËðxHlm--mk4zt”@ “!d*ñÇôâÂÚgtôï’ÿ¯Õ~e!ÜÜRR""pxcã‹iiÓq$Rjê‹99ããÛ¶±°P>E xxä䤥1˜ŽŽ·o³³{{§5‘ØÝ™ÙÚŠÅji­XÁË ‡üXQ199Ubb¢¥åÍ›{÷îßóæ¿øf Aƒ 4Æ.H ååUW71±²â⪩¹ßϯ¤¤¿þ陌ÃUU¥¥¥¦¢Ñ+Wêèðð|Û/Lmù@@ÐhFF4±Ø-[?~¬­­­ÍÈ \óó½½—/‡ÃA€Ã§B¶&&JJ\\,,¶o¿s§·wãF/¯·oz{ÓÒâã½¼ÌÍ••g'U¦¶üŸHìí­­í뛞.H$™ HÙÏ€@ˆŠ8àë[\œpꔊ ÚКóæMFFW™L1f‡´-üþÔòcõY8$×Õ500>>5ŽÈdŸý,ªý¿%½Ó&ÚŸ“ÿßÙ_ ÅÀ€F“Éx|OÏ—;- „ÁÁîîáái# Å`˜˜0ÀãûúðøÙŽ!"qttp4š…ƒ¡em¤Aƒ 4æâ?5¹G xxTU¯\±²âç/(ðõurŠˆèìüþVêññ––ððŒ (ÔÓSS“‡€šš_Wþ߉„Ç Ž’ÉÃÃ!!7ª¨ìÞ’ò}¯ýøx[[LÌõëGÆÄ¸¸ PBB**—.ùø\¾éëÛÓ#)¹m[ttWeŠGmù?óìe:þ-°X99;» äå³²öïWWß±ãõ랉ÂÄÈxàÀ|5^Øý©åÇë³PÈda|œ@˜Ys2™LþÕOBmû|i Á`LL¼¼ ?3íÿQùÿ]ýE"áñÃÃx<¢ÑX,epJ§A¡XìlC‡DÁã‰d`˜Z“œA"±X$ÆÇ‡†ÆÆþ©”ë4hРAƒÆßÍd Ñhaáìì¶mÈÊò÷wpøð¡·w¡á/““uu‰‰YYCCÜÜÌ÷}í -‚ŒŒkÖ\»öðáÛ·¡¡W®òóÿ“^[2™LžöÈÏU‚Hì뫨ÈÍíWTTW¤>Y‰„Ç74¤¦]¾|ï^y9)))/ÏÇ7ßjË/üY‰D !(ôÇ×g¾ìQ::!!,vp°¼¼¶vxxj’ °°()mÚ´xñŸìá?UŸ_oýxM&&p8‰dee`˜Þ#ƒB-Z¤««®>löcòð+äÿWö×øxkkaaYÙØ˜°°¾¾¶6?ÿÔƒ #ãÊ•ÆÆË—ÏÜû81ÑÖV\\]=6ÆÅµr¥„Ä̃y!&&IIyyž±±ºº¼¼¶¶/WQ(qq[[?¿ÈHÿƒ—-ûû÷UÒ Aƒ ¿žÿÀ ¢PŠŠ{÷¬® FMÍÓÓÓÓܼ­-*êõë””ººáazzqqSÓ–,™˜(/÷ñimÊ#Hmùe|¼££±qp‘qÍKK#£Õ«I¤êj8œ¨¬ŒŽþø±­ÚDídòÈHMMzzk+7·¥åÙ³¦¦©©žžÕÕ,,7>|é’œÀ¯ =ûwÕ(Ùä–-ÓÒÒ×_¾œ™ƒ]¼ƒAvö5kLLŒŒH¤ššüüˆˆwï**††¨½ûØXKKFFM êêzöìÑ£–– ˜ŸÏÀ ¯oc³g%IDGÇËõòÿ{ûkh(+ëÎ'Oš›?~tr ŠŒ\º42²´”ž^IiËEE"q¦ñJ& deÝ»20åææâbg¹¹°lÙ¡C®®+Wö÷‡„˜™¥¥ÍL¶N ee]¾|ãÆÕ«54ww§áÑ AƒÿEþ!vŽŽ67”—#’’RRS󻮮êêššÞ¾¥HD"WQQPP^ÞÑÑ×78D$öö¾ÿêUZÚªUk×N™2Ô–Ÿçæ–•]±‚ \\ªª~vÒÿsH==ÑÑW¯>|¸uëõëÆÆžž/^XXŒ•—ûùèë×Ô ‰wîXZnÜ8>~挽½¥å¹s>>ÇŽ‰ýýååïßß¿?::ý´ccåå¯_§¤ 9bbâìliÉÇÇÄD& TV&'ß¼¹uë¹sÑÑS¾rjËÿ(8\NŽ‡Ç‰^^<<çÎÙÙ¹º>N&–”øûŸ<ùþýÇmm@$ŽŒTT$'§¦mm³“D‰Ãõµ©©?‚`[eÎØXEÅÍ›¦¦—.qqݹ³w¯‡‡Ÿ™\_Ÿàï¿g™YFÆþýýýÓò@Ýý©…úú,2™@èìÌÉIMMLìè")+,EEéé H$å$ "q` ¼üóçGG»»''Éd„…ERrÝ:“;„„àpËÊÊÈhnæç×ÑÑ×76®ªNHˆŽ®¨¢¶ý‰Äöö—/½reÕ*}û.^tuUU­ªŠŽöõ519rD\üØ1uõ¦¦ÑÑ/ågaòÔÊÿïí/2‡ûüÙÁÁÄDO¯³ÓÆæÀ QQNÎÒR3³gÏäå_½Þ64”œlk»k—•Õððùó'O^¹rãÆ¾}drwwAÁ‹'Ojk_¹òùóàà×ÒF$ &$dg33@YÙŸõDƒ 4hü›))¹ÅĤ¤äåÕM«ªJJòò$$ääV®”””‘QPXøwÛÚÚÚ(Ó”?LL›6=yR[€D=*!anÔÞN›rРAãWÀȨ­íãSWLGgi)$dnþöíÀ­]hРAƒŸã?|Pì? ÎÎ. @ ääøùyyÅÄÌ—jœ 4æQ(6666,vfÀÎË«§wè²2]MMzzEÅtzt4hРAƒÆÏð¯±ËÍ ÷ôü{꣠°uë‘#““ÕÕ^^û÷oØðOÖ‡Ãáþ+öhР17§O œ>Mí÷0 FD„Ö~4hРAƒÆLþõÒ´ABc.h 4þí€ ÉÊ*.¾r¥‚‚´´33‰Ç·µåç'&~þ\\ÜÓógÓpРAƒ ÿmþSç Ñ AƒÆ2y|¼··¬,%%.®¬,%…Ö"4hРAƒÆï„¶i¡ A 0,Æb¿¼¢Pp8µ§ì@¡œœÊÊë×ëé)+³³Ã~¹¡ …²²Š‹KKKIññ¡P*ûáp:º¯Ÿ‹ÅbQ¨/ŸügAjÑ"uõõëåå™™ÿ†Ñ Aƒ 4hИƒ@@…^½ZOO^ž‘ñïœÁѦ• ƒQRºr¥¢¢³³¨¨³sæ57÷âE VVj»…’•=sÆÝýÙ³3g$%©;ŽA¡èèæÿMJRÒÎ.224ôéÓmÛ88¾uš "‘X,1ÓăBYYUUoÝÊÍýòy;;SSÝÝ•”þ‰$A‹•“stŒ‰ñó;qbÙ2>>-­³g]]ÃÂÜÜÔÔØØhF 4þ.@ŽŽ“SFFYYZZ@ƒYˆ+ ¥£C¡þæ3¨`0AÁ;nÜ÷ôÜ´‰öÇ¢@¡ K–¬\©  !ÁÌü¿q²"tt0د9ý¿ÎÈÈÃ#*ºh++õ®ãRй¸45­­ƒ‚RRÞ¿ÏÊŠ‰¹vÍÒRJjaåoaeÕÕ½};++$ÄÀ`Ñ"AA '§  ‡ ¦fpP(7·–Ö¾}W¯^¿~îÜõëÓ׫WmlTU¹¸`0„][ÛÑ1>þÍ›={–,™>0ž"ýÌÌë×»º}þ|þüÊ•Xìì¿¢PBBŠŠJJ<|æÌ™3‡ÓBì~©¤ÄÁaëVGÇwïff¨A&¦ îß÷ñqtœ}ÊýlqgbZºG àÊ•„„ÏŸç?§‡ËÉqs34þäÉ­[]]—-Ëʲµ••ýõË]³ææÍôôÇedz{KKËË‹‹‹‹ËÊòóóòŠŠòòrsKKËÊš›‡‡  œSU•—ÇËûö­‡‡šš†Æž=ׯWT¤¤\½êè¸fMNÎÑ£IICC?ržõ ‘‹ë蘛KK×Õ½|YY94ô³g7ý9E…Å.Z$++&ÆÉ‰DþxßNNö÷—•åç×ÕÍ/¿„°ðþý~~NN22þþGŽ;ÛßO"Q”¥‡Ç½{ÆÆ™™vv{ö<{ÖܼðÝ4p¸ˆÈîÝÑÑÑÑLmmyyqqQQYYAA~~qq^^nnqqQQmmo/Om¿ PÚÚ«VñðÌV¾Ô뉑‘ªªÄݰ´´înŠ$ÿ)ùA MMRScc£fjH$öô|útëÖ¥KaaµµÔ§üëF˜ˆÈÉ“oßz{¯]ûò¥¥¥¯oKËÌ6üûÁxy7oöõ}ÿÞÌ,6võêõë/\(*šyÊή¢²mÛæÍdrBBT›£cFÆ•+mm¦¦«W_¿þùóÈÈŸÑhÔè FDdÅ •¦&4úožh¢PË–9:FEùú20XX,_¾qcTÔðð¿I†æïŠM@@RRVVZZ^~ùryù5k45ÕÔÖ¯WT¿uKQqóæ[·ªªæÖªÄâÅÖÖ‘‘ÞÞ¯^íÞýýñ‡‹Š=úäIhè¦MIIÛ·ëéùúVUýSúºq( `lìâéä$)90ÐÕEGÇÃ34²cÇöíäæþs£ a`”TU]·Žƒ£¡áǤ¤ÆFnº6;ûúõ÷.Yòö­±±±q\;»•Õë×>œŸ¯¦vëVa!µ‡–ÿŠZ/Y²iÓ–-rrll w‘ PÝÝJJgÎ\¼²sçñãññ»¹<)!‘”tþ|u5'§ºº™™Auu`àû÷ííÀÏ¿nÝÎ[¶É¯_?|˜šZRR\\TD ¬Zuþü… êê¡¡ææ±±d2¨è¾}×®mÚDG—šºsgiéÈÈô¯ƒ #/ô¨‹Ë»w›7çåíÙ£®ngÖÚJ Àá¼¼ššgÏ^¹²}{CCppTÍ@úAª«oÝ:wÎÓ³¬ìK±$“GG‹‹ýý=<£¢`0(”míZ''oï;ðø»wOŸ¾z5-mxøë©=ýòåGŽøøœ=‹Á^^þìÙéÓ/ÊÊ.[&--.¾l™¬¬¶ö‰––§N‰ˆ°²¶¶º¸¬X¡­}åJiéÄÅDÊξ~ýìÙÇW¯¶µÝ¸Ø¿ï^SÓ‘‘úú?©¨a0..eåM›Îž}øpÃ—ŠŠèhgçsçnÞôôŒoiÁã¿§nA```dD FGFFþäÄ…?}:$$(ÈÜœ›ûÇï36–°e‹ÐþýññóM: JHH^^^^Z:6vÚg‚p8'ç²eòòrrííÔ{óˆÄŽŽÄÄ+WΜ‘““’ZºTZZFfÕ*+«mÛöïwuåáÁ>|01QVÖ×§î| D"ùùÕÕŒ¶l‘“û±ÕRVR’@¡‚‚všm ý ù!“ „‘‘¾¾¾¾ž Î@êëÃá&'ÿÙ‰9"llüüŒŒÔ2ÿ[ £ÖѹvíêÕU«ººÖ®õô|ð‡ ññ±·Ž^µêüù‚‚?7}ƒBÙØ”•õõ™˜æ–Œ›{Õ*(”ƒcÅ ‹#GÆÆ:;çr‘H½½ÙÙ‘‘ÁÁŸ>ѦNƒ°³khܽpø°œ==Ba0 ==33;;;;==I);>ÞÕUV–••ŸÿéSbâǶ¶ ‰‰ÕÕßr8 ÎÂÂÏ¿ðñ‚p833/ï¢EüüLL³ãNþfP(II›Ó§99ïÞUSÓÕõókmE£×®õô utܸ1$DO/$¤§çŸqpÒÑÉÊÚÚÞ½ëïÏË{ñââÅiæˆddäããäìíÍÌLI©­èìlmMK+-…ÁÌÍÇ…É'#£¸øÖ­VV¦¦ââttß×+ ‚‚CC~~ûö¹¸dfvu ¥¥>½e‹š‰48ˆÇÅ!I" eg?ybk{ìXz:¨«{ymÚtÿ> ¼¼ªªVV›7óñµ·wv22ß¼yáBE…„Du5,]ºmÛ¹s’’ÃÃqqññ+VXYíÜI øû H##ééçÎíÚµ?+ëë×GE=ÛÛ«®~ýzV¥¦““uuÏž?ïà@3~€ññ´4''oïÊʹmö‰‰¶¶¬¬””©oA0'‡SQÑÖ~óFK‹›»ºÚÑñÍ›Ù~(”›ÛÌÌÆfÉ’±±¨¨“'ÝÜ^¾üøqî;1ÑÜüöíµk«WWUݸqä%àŽL&FGzzúúº»gz)‘H–ÑQ@ ÅbyyYXª«ÕÕwïöôÌÊœ[5Œ•”x{»»'$ØØÜ¹£®>¥““ÝÝ¥¥qq/_R®³1AOÏȃŽÎ6{Èä‘‘¼<{{55 FFVV /-}û¶¥åÏNæ„ÆÆçÏ•’JN^µjÿþË—ÏŸwpOJ:xðÃ/¯“'OzðàíÛššù¦ºh´ŠŠ‡GBB` jm-&fjš–ö§<›8\vö¡C""""‡ýÈ÷YX¶m jhðôÄáÆÇÿ™i4‰42ÒКA¹~©¾Q(,–Hœ¯M‘H)©3g¼¼œÑè{÷vì¸|¹°òZ"“ÒÓÏœÑÓKOÿ±ºA¡¼¼Û·GG—”88 ½yS]=:úçågr²µõÍ›[·nÞ|󆦷ÂáX,==âpCC³Ûa0,–žýY3’Hln>þÔ©mÛ¢¢îÝspxóFUõàAOOuuWWMM ¦  +k¦ôw00ˆ‰­\©­½q#ßì ”é2X¬ˆ ""kÖhkÃá3}Þ3e°±qp0!áÕ«…H¶ýÿVÈäÑц†¸¸  ×¯óó`bbl ìë#–-»s'2rïÞüüM›44ÌÈÀãÿ—Ç-ÁÏ¿nݱcÖÖjj ¥¥aaîî……}}”ö„@¦Œ:„@ P$“)û§ô ÆÂ"!±t)ÓÛûùssó×ãhr²±1&æñãîn?¿W¯^¾”–./g`PPX´(.îìÙ3gþ™ð„ææˆˆÝ»ÕÔ¾|÷ÎÝ7RR—.½Ÿ™inžœìçš=ýVœ9[ýÞ-Ú²åòe'§Õ«KJÂÃ##CB&'!ié%KJK_½ @èéµ´Ž»~]W‰}ýº¨h`€2›œœlk{õêða33VÖ  ‡­­uuŸ>µ°()€ÃednßÎÌLKÒÓãâ""º»ÛÚšš~Õ•rÏþþîîöv*ù;³jÕÍÍ8\MMooX˜– ËܾŠW—‹‹››oú*,¬ªjk[P€Ãåælß."ÂÏ?õW^^qq#£{÷ZZp¸¤$uuAÁ™ßåããããà`dœß_ps››‡…áp8\EEKKmmFFMMMÍôµ¶6'g`‡«©II17çà Æ[‚LLzzááee8—“ãí½jÕ?±i6 kÖutä稫ώ2nŽ;"#³²zzzzJJz-(ÈξvMJŠº§„B™™ŒïßOMÍÍ­ªòöVQadœ¯ÏÐh™;wjk+*’“­¬¸¹ÿM±ñ0˜ˆÈñã±±CCee¶¶ÒÒßöÑÑIJ^¿^QQQ‘œlf6-{P(—•UZZyyqñÅ‹bb¿Òø^È3ðñ<øéSyyAÁ¹s"" ¤ÃbW¯¾t)66$dÏqñ¯k 02®[çá‘‘1<\Tdk++»09úß‘Ÿ…BG'!áì\QQU•—wò¤°ðÜ“õ‰23»vÍÆFSs*áâÚ¹38¸µõãÇíÛ¹¹¿Ô”¡aJJgçË—††llßó¡Ãá‹ïÝ›“34”œ|íÚ²eóK9 ÆÁ!#³f„ÃßÞ›„„ÄÅ‹ CC‡‹‰ýXêŸhÊx î马ŒŽÖÕ¥§ÿoŒ dcÓÓûøqpðÇßÈHäÒ¥—/—–VV.t|MõûÈHié©SRRVgϲzµ»{yyMÍà`uubb{;WSSZêé©¥ÅÍ ƒÁ`üüFFnnµµqq©©Ÿ?§¤TWÇÆ>¬ €ÅÎ-EF>ééUU;;++ã⌌XYçÿJO/"¢¬¼zõÚµ22ttÿŽ<df^³æéÓ––êê¼¼³g¿ý¶E"ee¯_OIÁáÚÛß¾}÷îÙ³ØØÏŸ p¸òr;;--7·––ÎÎ44æžùQôé¢EÖÖÑÑßÖQÓF3 %'go_U58øæÍ¡Cll´$ª©¬Œ-+œÛ+€DŠ‹ïßÿæMl¬¥åâÅ_+<øø¼½#"tt¾þ6{ö„„DEíÙ3óóÉɆOOmmƒK— )¶6b0bbºº®®dri)19ÙÜìç§«++{ãÆì˜TÊT£  ,LKKZúèѸ¸´4VÖ¤$W×Û·ïÞŒ¬­™oy™L.(ˆ‰©©€õëËȸn]ppA››ŒLggEEaaAAII~~~~II^eRQQccoïÜ댴´ŽŽ²2Z\lk[\ü¥ž‰ÔÓnf¶aC|üÂtÐèU«<<""nߦ§§v‹+‘ØßŸ›ûòå±ckÖ„…¡Ñp80::·œ`±òòÆÆ[·²³WUݼ™˜ØÕµðàŒ]FFCCI‰ƒ úûóósrZZþT2 %,¬¤ÄËK"54””´µ}ÛûCñÔA¡@$NN’H¿Âß‹DЉ?Ÿš¼oQ__X˜Ÿ?%?ùùùùEE99ùù55mm##sµ,ÊÁ¡¤´}»˜X_ßÇññ-- ÏAŠ—WRråJ™‰‰Ùû·@…’Ø¿ÿîÝÀ@sóáaww--oïÂÂ…ùu•ü <<+V()ÉȰ²þŠà ¡··´4%%+«³sá~¾„ÁH„H'çjG‰LffÖÒ27ß¾='ÇßÿãLjˆþþ¾¾œœä䎎[·tt–/gd }û¶¿êû0==;>ÞÓÓÛ;6¶Pi†BYXtu×®•—ïëKM-(hi™½7Ž@èê*,LIéêú¹çþÕú …Á P"‘@X˜Ž‚B‘H, ˜ùÒ»þϵ?@¡K–›š ÇÇøðùsmm_߯Ëþçõóê$ÒÜcêÏ·ÎÇgjêëëá±{7çí­©¹nÝ;µµË—Ÿ=ùàÁû÷{öhhØÚž:µ|yL —+ëøxKKccÿü2ô'䓎NDdÍšåË1˜¦&_ßÂÂoí ¦dîUQQS“•MO/,LIù7¬¢P²²66/À»wÕÕ}Ô‘Éx|CçOaa/_VU€¤$+«¢¢žÞ¯¯™üåœ ed\²dåÊ+h•àñMMµµó½*ÆÆ ]]W®äævuý¿‡sr®X±oߥKgÏž?oa!.ÞÑñâ…““ƒC{»¡á‘#ÌÌ[·ZX˜˜((ÌŒ>†Ãyyed˜™!‰‰ææøxoïÁASÓK—ž={ÿþСÌÌGسçöíwïæÚ&O$öõÕÖ¶¶âñðk $.?ßÁa×®3gåä$$deee¥¤Ö¯?xPOÏÎNL ^¼ÐÐX·îèÑÏŸ¿œ^‚ ƒ’ÒÞ½ZZhô§O—.¥¤ôöÎgÜ‘Hccƒƒýý U½ccccdòÏ)2yròËÐÀi`0nîmÛ.\Ð×§§OMµ·oj¢&6VP8~<$$8XU€ââ#GDE·o÷ókkû1þŒ˜˜¾¾’YYéê:¿³` Àb‘H2y|‡ûö”éK;œöíceõ÷wrº¿¸xlŒfpð µuU•¼¼””¬¬ŒŒ”ÔÊ•&&G:tý:WYÙªªššÏŸwu})P¨€À–-»v)(ôöÆÄœ=[ZºðW3ÊÀÀɉł ×ßɃ±²ÊÈXX8;»¸¸¹íÚEG÷ò¥™ÙŽŽŽ™™?²wägäÁb—/?vÌÁáömee4zþ_Áèé¹¹ÙÙQ(i` »»³sî`>îÓ§Ë—54,,ââÆÇÿiH@‘qõjŸüü›7a°£Gut,,¢£f?ßäd{{bblìÀÀ©SÛ¶IJb±iiÃÃÍÍÉÉ##ææ›7KJÒѽ}›–6¥…nî%KXXz{++ÛÛ©™^£P«WÛÙyy¥¦^¸ccMM……ññïß'%½óáûw‰‰ÝÝÔß«èèdeß½‹Œ\¶ÌËkÕª­[þܫ:slpp˜˜„‡ÇÆ^¼XV¶{÷ŠvvSa«sñgÛØØV­27ðÀÀÀÖ–Ž**’“““ß¿MHˆŒ OHÈÊjn¦>©Ë¯kD£¥¥wí²²Úºõ[k: ˆF/]ºx1 ÆÀÀÈheu옃ƒ¦æ\;Ž&&êëcc=<ž?//ÿÙlP( ÅÈHGccCCxü¼o~¥|¢PÒÒ'NxzÞ¿¯¢RRbk»j•»{VÖð0‘‰‰..::FFhtbâë×EGŽš™­_ñbffMÍB‚Ù¿|ÂáZZk×òòvwú”˜øí$E$°±­_¿kשSŠŠ}þœ0mœMÝsÑ"3³+WÜÜŒ¿ÌÓF=BSÓË—ŽŽÇ45Q7Þ@‹UT¾¯ï{£‹âtÄãëê’“({ÔÕ6ožY ‰dbbccaac›+†caÁ`(æüÄ’%ÄÇ'$;&)IYÿœ^~¸qcêΜœjj;vÓ $*!ñø…Æ<ÓÑ-[væL~þ§Oû÷ Pÿ[­­wî(+™õ‹Y¹’…%/ïÜ9UÕ={‚‚òò±XUUvöׯÄÄ–,QSSWWS[»V]]Q cb’“;;‡†Þ½ûü9?¿¨(44555õ͛Ǖ”ŽqtÔ×gf†B¿õ\““ãã¿.00PU•žþáåúâÅlÑF")ê¹Tаð–-/êë¡¡[¶¤¤twkÀ ÍÍ-++'ÇÏÅ~/´…’•åâB @ppðwÈÊÅ¥¯ooㆪjw÷Çk×¾ßÞþïÙº ‚,,kÖXZ°°”—_»ÕÚú=©€@0j|¼»{*#áB ƒYºÔÄÄÂBC£®îÕ+gç©¿Éx|ss^^Zåúúõì_„Ãéè ákÉAzz…'NZº´¢ÂÝýøñ¢"j"÷ápŽ%KØØÈä®®††ÞÞÉI„‰iåÊ]»Ž“•--={vÍGÇGrsGNÃïˉÔ×if¦©ù­;Á`BBææiiEEû÷''oÞ¬©yöl^ÞÁÇ 0ØâÅff'N`±¥¥VV99óùe'&êêâãss „Ç54–,A¡ÒÒrrðøºº˜˜Ü\8ÜÍMSSP‰LK«¨§8šV¬€’’…¯;‘ØÚêî¾ví¦Mîî22šš6¬]«­­­­¯ýú¾}66““mméé¡¡/^DD„‡§¤ÔÕ þ3yû vv5µóç÷íãæ.+³µÍÈøž¦"{z>~|ò$;ûîÝÇOŸÞºõþ} ‹çÏ[[çûÞŸk ÓÓml´µ7mJJÂ`de×®¥´ÿºuÚÚǎݾmcsý:ÚÓSPôêURRaagçÏ­ÔI/#£ à¢EââßÚú`±BBŒŒ”žE‹ÄÅ1˜¹4ÎØ‰”–ö+‚6A‰äã[º”…er²­­±±¯ïŸË( 03¯[ggâàÀŶsçÞ½¾¾553 "±«+&æòå ,,P¨¤¤gÏž=‹Œ51ÑÕuv.(ø~¾Ûß+Ÿp8¶ööí‹ $$88”•Í 3­Û{{““_¼(.¦£»yÓÐPI‰‘111&f¶ã‡Dëími©®®ªÿÙ¡³³·—zÇÎË»q£‡Ç«W²°¼zuðàÑ£¡¡s'rùRÊ(ç$QVðæ*19‰Ã @¡ººOž”–feM=#e›’uar’@Àã ÆÆ(÷šœlh ±´TWÿø‰d`PRzðàýûDZXJ„¥v““ee·n™™íÞM3¨æâba¡D3~[˜g lm­£ãªUFF^^õõßKc ƒ [Z&&fdÏ% QQ·nùú*+‹‰ )+ëéMe—«¬|ûöÕ«ÊJ DS.^L1>õª¤djÈξjÕÖ­Û¶Mݳ¡áõëgÏ’’š›çWw ógZ™@ŸÛ8âç73»wÏÖVBâÓ§«WÍÌ22†‡¿·’]EÅÆÆÙÙÂbéÒïÅLC¡ "" BiÇ_b±²²ûö½xñè‘¶v_Ÿ‡ÇŽ7näæR¿­vxøãÇcÇ„…„LžœîïÿýFå lmoÞÔÑ!‘ÂÃ÷ï jlüÞïÂ`,,‚‚¼¼pxLÌìD×ß‹••ÕÖ–—€ŠŠÇkj:}'‘&'ÇÆæ6ŽV­²·¿qÃÒ’H|ùRW×ϯ±qá‰ÅccSPX¾œ‘±­-&¦¡‡i|<:úôiYÙèèßÝú¿B~¦F4‡ˆ''ö÷×ÕõôPÓ 3Ä¢EÆÆŽŽË–ÕÔ¸¹éêFE}½†8Íèhqqxø«WÙÙ**(%dÇá²³ÝÜ®]»u ‹N-‡óñmÜh`ÀÆ–Ÿïì<;}ìB%sb¢»»¬,--(ˆr½sÇÉ Á`øø”•7oÖÓÛ±ÃÔtëÖ›7ß¾=|ØÓ³½=4TWW^þìÙ¤¤¡¡?©àp1±Ý»×ÑÁã##7nŒˆ˜y˜ÅüÏ×Ý{玧gKKd¤ƒƒ”Txø™3ó¯#ýÙö§ÔàpííyyÑÑÁÁ”«³3"22k×íØ±mÛÎgÎxy=êâRYio/+«¯÷nuõÂt×ϵ?™<4”–víÚÉ“iiß*‡B)*^¾\R²fÍÈÈ­[{ö>ìïßÞNÝ4vb¢¾ÞÛ{Û¶-[ûú¾ïêÂ`–,Ù¸QZ ­®¾y³ºúÇ’ü¼|Â`üüzz¾xab26v÷îŽ66oßvwÏ}¡¥åõësçÖ¯§£C¡’’>|þüõëÑQ#£mÛîÞ-+ûöªÚï“OBXxãFKKIɘ˜Ó§‹‹¿/ÏDbGGBBxxa!mggn®¤ÄÀ;3ŠƒHlk‹Žöô> II99&¦ï)!(”‡‡›{þ“%`0vv55+«½{MLøùçòÀáììââRR||”ÿ8àåuýzEEqñÜÓÓÉÉææ7o**RR**椣ZµJXøŸ;íãàÐÕuuõó»{WN.#cÿþ•+þeÒM?]cãë×––k×Î^e˜4zÍ?¿äd_ß_Ww8œ—W[ûÔ©ààÀÀ½{-JL¼xQMíÒ¥ìì;±‰Lžœ¡¤nþSÐÑ ššúøøøØØ01ÅĘ™=›œ¼Årzzié5kDD„ÚÚÜÜÖÖ…ú|a0žmÛΞ]¿OJ:q"=ýËPj ®>|ÿþëׇžž::®®iiÔõ ÆÏ¯®¾c‡¸øà`JÊÉ“bOί– œ¤¥µj;{{{bbvö|“‹P(;ûš5ׯGD8:ª¨ÔÔÜ»§ªêî>_®ÑéÑ48øé“™Ù§O3?È͈˜ú„r4áñãÖÖ¬¬>XX$$|°÷ãH8\KKzzp°—åzü8#ãâÅ«V­XDS7ýyý°±©©98œ8!$”ŸõêþýŸ?/<¿æØXU•“SZÚ±cžž667º¹íÝûêUgç\Úâoh “'&ºº âã=<(×sçP(eË„„FGëë©qëü ý ƒññ­]«¬ÌÁÑÞžPXØßÿ#«ÕdòøxGGeeyyGÇ÷e‚ƒCKËÊJO‘±¬ìÚµ¨¨¶¶sªüLû€ #.~òdPÐõëêêÅÅÎÎÊÊW¯æå}ÏMJY zþüäIMMÊË+9ùîÝ  À@<ÞÀÀØØÛ»¦f¾¹Üï’O::))+«;—,é쌊:|8'ga£œHloOM )+»rÅÞÞØXRƒ‰ÍÈøS9.¿%!ŒŒË—[X¿ø-(!våå8\MMSSAÁ»wŸ?þüöí·¯™™ÙÙ8÷½¬G_ª$RHhÓ¦³g?~li)*jnîﯩÁáúûsrººZZBBœœ6mâã£>ó ¹dÉ¥K%%55:‹BO/.¾iÓõëññùù8\k«Ÿß±cË–¡Ñ¿+{ Å@Êή®vw—•ýÖŽoC9½]SóÌ™€€øø¡!®²2'çÞ=]]aá¿%óÏBÚ‹×ÓsuMI).Æá::üýmlddzz7ÊÁadQ\Ü׫¯ÏÅ5ÓÄž/‹¢PÒÒÖÖAA==ÃÃQQvv mó %%këgφ††‡ãã=<ôõ¹¸¨Ì†@XXtuŸ>ÍÉÁáÊÊΞ••ýþÉ?Îï”(”›{Ó¦—/;:ª«óòÎ¥æŽP( ‹ŠŠ©©ŽŽ¸øï>Å}aYì P66%¥Ý»ƒƒkkkjp¸êj7·íÛùø~Õé ƒ¢âÁƒññÙÙ†† XZx»¿$RZÚÁ!>~x¸¦ÆÑQEe®_ßÏb‡ÁÈÉݾ]SSU•ŸO­ŒýÊöÿïe±AFÆU«<<êêjjJJ._^È4?+‹·¶ÖÔÔÖzzª¨01ý3ùÓ!¡­[½½ß½srÚ²…‹ëG)ï›ÀÀîÿcï,¢è¾Ç?³½ËÒ]R’JƒŠ‚˜X6‚``bŠ‚ˆ… ˆ H ÒÝÝÒ½°°õ±?þ€‚‚õø<ßù¼ØpwvæÌ¹çÞsï¹çtÙÙ~~ffBBR?AMW÷å˶¶êêüü3gÄÅç–…’‘¹x1.Ž@¨©¹tiñâ6§0ÉÅ¥£s옧'Ýú=~¼a“giX¬¨¨…Å›7YYBCƒ»»™™˜Øô‡Á¸¸ÌÌ‹‹32¬¬Æ­8¯«ëîÞÜ\Rrú´¼<]ßA…eõꀀÂÂöö7o–.efŸ¿åä|þüꕦ&8ÜÒ¥>>YYEEW®|ÙS˜˜tu?|èêJM½sGEçàX¶ìêÕº:!%ÅÇçêU{{ÈAšS$!=ýÁmí™’CŽ3î DDØÚΟ?»{n* †ÇKJ®\yáB``BBooKË›7††ââkו•õöéëKIž<ùéSKKYYYY`àÑ£ëÖ-XÀÀðý!ddÔÖ¾v­¾~üÙŸƒD¯Ï$-­§gfvøðÇ Beeqñë×êèÌm`üææ Á`( ßüù‹-_¾jÕçÎ98¼}›–Fwq««ÛÛ33]\ŽÕÕåáùû§FH$ ‹†Æ† {öܾýî]ttOP]]Slk«§7û#Ÿ ˆÃÉÈ8ðäÉçÏBjª««¶6#ãÔþ2ÙAºpAZš›[BbéR›gÏ>~ìï'²³ýýÍÍg?t ÅÎ.*ª©¹aƒ…Åõë¯_øÐÚJ TW·´ÄÆ^¼hj*%õ#®5ÁÁ¡«{åÊû÷½½B|üíÛK–03ÿŠÝÔ?«?p8 ‹¢¢©é³gÅÅUUƒƒÙÙvv**ß³b_ʘARÒÆ&""7·¹9$dçΓéì˜ÞA‚ø¹åå wî¼~=0ðÓ'zƒ††ÐP›¥K…•A4š‡G^~ëVGG/¯êêÞÞ´´·o’’š›¼þ}Îʪ­}ℳó;&&ÜÜÓË’^Õ$.n` /ÏÒrúº„°°……»{D„‹‹žÞÜ&³¿Nþÿ% ‰äâRU=u*"¢ €@¨ªºzuÅ 6¶ßׂh4—†Æž=ŽŽÉÉÕÕíí‘‘ûöÉËÏý ü€ ¿hÑéÓ½½Bdä©SRR³wS~F?‘Hqñ#G>|êêòòÚ¼ùGÜ<NUÕÁ¡®Ž@ˆ‰9wNZúÇÒìÿŒô°X11Cý½óóËË „®®<عsÁ‚™%€F ™™½~Mw“ÜÜvîýòÎq8ee7·ÚÚœœ—/—-?Ôñµƒ„ÅÊÊZYed ää¼xa`@wÙ¿vðxƒ÷ïóòòòNžœ?â×`0ff Ó§‹‹ééà=²³ ©«ËϯªÊÎ~ó&0ðùóK— iV|é UWéé––ÒÒßZ»™ØAÊÉ ¾zõàÁcÇŽ;pàÛŸvvW¯>ÞÒ2Ób±BBÚÚ[¶\»øéSO“{÷î¦MŠŠã•ÏéjQVÖÛûþýÒ¥ôAga‘•53»{7  ¥…@(--( |O ™™‡IJN·×0î M•|ww^ÞƒvvË–qq}ÛC£ÅÅ·oþ<&&"¢¼¼µµ²ròýüøôéÑ£;wjjòòþX½Äã¯\IN..&zz>|¸ukõêÙ}ú'õ‹]°`óæ{÷Æ—ª«KKýüöîUSceýÑ©âñÒÒGFEåç×׿~mb"$ô«kÑíÝAª®&Z[“’**ŠŠ&´¥¨¨  4ÔÑÑÆÆÀ@Hègö³`0EE+«;wî߈ÈÊÊÌ rs32|}ݰAJj6ËIÓñïÛAš<^SóäI??W×gÏ<=ïÜ ­¬¬®Š‹Û°áëj0üÿí#.nlìààåPSC TWwt$%]¼¸nݼy¿®Ï /&flleu옫ëë×ååô”îî}|Ž×ÒâåýÓÓðß ÆÄ$-­¥%&ÆÈø-ýúuú‰F‹‹Ÿ:•–VTTXèà #ó£3)FF--Ÿööêê´´C‡~Ý~ùlt…ÝØøñãŽ!--2ÒÅÅÔtñb6¶ÙÎÒ0‘ݻ߾ÍÉ*.>}ZYybž…FKKÛÚöô¼{·{·€Àø5õô<=?.)9sfÉmíݻ߽kjª®nmõ÷_·nâéq8mí§O³³;:—-cfF¡„…ml²²Š‹Çë‚ -*ºq££cnn__QQ\œ‹ËÙ³>46–•••½öì¡Cë׫«+*Š‹óñAg~˜… ùÒÞ>3séÒ rr¾uƒáæž?_\\JŠ“ó{±Â0Óôi é $#sð`pp`àúõŸ?ûú>~¼~½””¿BBcã÷rîS(}}ÅÅÞÞGŽlÞp玆†¹ùñã––§O>{&(¨«»zõ•+ÅÅccô#uõsçîß¿xQVöwÈF#[[ ££ß¼il|ýº¶¶¦¦¸8?¿¸¸´´©ihèWäÇ¡PÚÚ¼½õô¤¥_½šÛä‰F£R)”oŸË  ]]—-“”|ð §§µµ§‡žôùß64TR|ㆭmXXccIIIIQQmm_ßæm¢Rûú23½¼\\¶nus‹ -.œNë©Ô¡¡üügÏîÜ9hjÊËKIIMMM--©úÕTÈäÞÞÊÊää7oâãÝܪ«KJ ‹‹ kj~üþ'ˆ@¨®~÷ÎÕõÌ™Ðи¸ˆˆÌ̹%™ø6F(‰D.(xùr×®Ó§ß¾ -(èíý™¤ 4ÚÐPié½{›6íÝËÊúñã“'ÁÁNN--K–œ:•™ù½´ï³‡LîêŠuwwwÅ㇇»»ÛÚ>®­­¨(-ÍÉÉÍ­©ioÿ¹”̺866<<4ÔÚš—÷êÕ… Ož8”TTÔØøíC¼³³sEEÙÙ¥¥?›@úŸ »»¨(5µ øùÙÙz{ïÜñööõýøqúÓE‡ü€J¬®ÎÎ.(Àáf.Ðñ·B¥R©p8 Õ×—’âè¸zµ]@@BBCÃÏËeª–ÂáÜÜË–­Y£¤ÄÁQU•šz÷î®]ÁÁQQEEŸ?Ï¥ÞÔ¿Kº¥¥ÉÉßK€òëôst´ªêÆ mm77ŒHüÑ$;CCYY'Nhk¯XA¥65µ¶þ¹|‚4ZOÏǧN)*òó ´´ôõÍí·‰ÄººçÏÍÌLL*+%% „‚‚ñtg0 ‹ŒŒ¼< KEExxJ kjóùóÙ³ŠŠLLh4=8ØÐðòedä¼yýýoÞœ9³l™µupðDÚ‡±±––ììúz æÖ­Ç[[{{éo¯´ôÒ¥Ì̾>8\LÌÜüõkââ£Gׯ·´ôòªªur 35=|x×®íÛÏœ¹yóüyqq¾Û#!!+«¤ô«XYY\œ›+-­¨¨ª*##/¯¬<ûï¶¶¶¶¶¶þm݉œ7O_ÿÈ‘ýû••§zÊ$RGGl¬‡Ç‹ÑÑ_*) †Ç‹ˆhjª©±±56¦¦ææ64ÌTøqÄáÔÔ44øøººÒÓ³³«ª&wB„Ã1‚J%gN8Ž@¬X±nݲe’âç÷éÓçÏ3M‰@‰D£áp2yt”L¦Ñèé'ut,-ÔÔäå¼NE¡ôõ¥¥yz>~ÒØøÏ%ù„€€ø —}ÔÒâ਩IL,+ûµ7ˆÿ@ƒáââáÁº»;:@—wþüyó88ðxjlljfaÁ`zzjj:;§wÜA‰Äã™™YYàp"±¯¯§g`€¾è ƒa±ÜÜœœ@¯ü÷íÑ r þ$:ƒñ@Ò_b0||ììô¬UM8œ›[]]_íZuuNN”ìâ?ÁÿäÄÃãçÍ[°@R’›…úyg„Hlo¯ª*)ilþ‘Ê8œšš‹KX˜¯/ž;gk;:zìØ©Sht@À©S§O?{ÓÜ<]Õa,VFÆÌÌÑÑÚZJj¦„Ô##W®¸ºfg÷õQ©0›ŠŠ¡¡ªjoollddUÕÈÈä§ÁbNž¼wïÅ °´œ7ÏÄ$>~öµÖ!þg ‚Ÿ__ëÖ­[¥¥""ž< ))úoæDú/€Áˆ‰­Zuà€‰ W]]@ÀË—!!õõ?“ó‚^7…™™›› ìèèíý÷e¼üø_µ'þ@@üü/ÖAÂ`””CBêë[ZrrZZ¦ÿlmíî¯ÍÒÕÕÚ:SËŒŒÔTGÇ… ¼2§­ýüyvv{»ŸŸ¶6;;ŸšÚáÃÏŸüØÝÝÓv횦æ—E6A…âæ^¼xãF;»³gmlΞøtpxþ<:zhh¼ZH|¼³³†ÁÌŸ¿ukHÈçÏùù>ìÞ-(8}Œ}ÅŠ³gBC_¼ îóÕ«ÌÌövzÍ™°°ÈÈ™[zz^»¶bÅ×\™+X¬¼üÍ›eeEEŸ>mßÎÅ5ûßE¡øùUUW­Z¸ýûYýçÚþσBIH<˜–VW÷üù–-ß/H7]{<^SÓǧ¹9'Ç×wùòñÂm³ZZçäÂû÷ææ||3ßÃï‘ç¸>L­¶”ŸႤäï®I3;ù#||»v…‡==^^FFLLÓ__¼ØÃ£®®ºš@¨­½~]Kë[ïãÇäɲnÝë×PZúö­žÿ3@"ÅÅ÷ïÏÈüVå±ÁÁÐУGÅÅõNô¯ÐÿŸçæ^½úÚµ¢¢ÉÏ›‘±w¯˜Øï¨õÏZ›ßo§=ùíùß­?xüòånn--ÍÍ÷ï/[ös–âïãr‰HÌÍ=wníZaásçfnÅÄ´råóç >>Dâ–-––11CCß»623/^|öìÝ»²²ß*#;é% 88TTXXðxîÈ‘Gnßno'‘ ¡!?¿£CQQOïÈ‘={BC‹‹ïÝKIéï<^]ýìÙ„„ààÅ‹CBÌÌ,,Ξˆèè RYXTT®^ß³§¨ÈÉiË–cÇ@ðòå°0iÁ6¶×¯÷ï_¶ÌË«¹VT´°¸ysõꆆ7®]‹ýü™L¦ÑFFêëSSß½{ó¦²rúI #'Çǧª*#ééïß¿ySV6žÍ~*drGG}ýŸ«£‚€@ Ñ( 5·Ú파ÇŽy{»¸44-XpòdJ ð«Úÿyp8ee+«;xxâãOŸŽŒloÿöšãôí@‰D¡Ðh›ë~+‰T_ÿî݃ýý993í±þ.y‰eeW¯êé-]êîŽÃ‰ŠZY…„<{fd„@€àï eüAWU=xðâÅ%KèK,HäL.=-,¬££¦†D64´´ P‹­X!"‚B%'Ók—ýy‰%%¯__¸àèSSS]=:ú32 ‘üý·lQVŽÅ``0†¥K= ¼}._^ºôÀ´´ÁA*•Hìèhhøµe~þÿ p8±ñ™36°±½}{ð ˆÈž= ccœœŒŒDâ«HŸ±‡¿ÏžüöüoׄÁH4…¢P`Ðq ˆÿÐÙ‘_ F"õôTTä䌌̮ò4 ÆÅÅ̬¢¢¡!#ÓÝ]V–“SPÐÛK7üYY9906ÖÜÜÕ5Qõhh(-íæÍÍ›/^¼{÷Ãÿ‘K—îÜ©¨X³æìÙÍ›‹‹/\X²äæÍœœ¦&Ø¿ßÒRJ*8øÙ3ƒôô½{oßNKëïçáY¹òñã·o—”|útË–ñé6<\]˜22""""ÂÊúõZÇÀÐ×G/¥Z__P—W\üµûH"õö64TUµ´üX ăqrêè?¾aÃØØË—«Vee}»|ç\ÛÏ2¹¹9"âùóë×#"þ©96ÖÛÛÜÜÜÜÛ‹Fc±½½?_BöWɉرÃÉiýz,¶¶¶¿DDfº"ÎÅ¥®®¥ÅÁQPðâÅíÛŒŒvv6¨©qp88·¶þª€"±ª*$äöík×~ÍõÆÆúúêë++ûúEE‡†èv£¥¥¢¢¼¼ºú{Eÿ½úB±³‹‹sqÑhõõ^^¥¥ÝÝd2‰D¡|þÜÓÙ¨§=ù“@úñO9H¿œáášš·o<¨©™í7àp~þÞ^}ýæÍ+/óæþýGŠ‹¿½rK£……îîVVúú(Ô›799NNW¯*+¿ú´¾þÞ½ÁÁMMãçZ[ß¼Ù»wÓ&êÉ__” ‹ÑQII!¡ØØãÇ—-sv.)!¦NÐh)©C‡œ_¼Ø°“ó˽ „Ãáp°µõö~ûöëóWTj[[` ­­‘‘½ýDµäÉàñjjOžäæ>{¶~=„‡¯[§¤dg—˜øýºÙFóñØÙÙÙ¿›ß£ÿ³±X IINNqq &&8œ™YRRMmåJCþ>éKù£Pbb688XYáñ>>—/ÇÄ 8`k{à€¨( USãçgeeePSCß+D"99µµ÷ï·¶>|xíZYYnnèêÊË yúôêÕG23;:ÈdNI騱S§V¯®®ol\±âàÁ-[ããOŸ>{67W]ýâE;»yyëëŸ=;~ÜÉÉ×·ºzºó®ß’Ýìõ­³SXøÐ!{ûƒáp_ß“'ÝÝ»»—,±·?~|Ã4:)ÉÑñâŨ(4zçÎÓ§Âbß¼9sÆÍ­¢bdä÷Ù“¹Ùóñþ‡³²ª©íÞmmmc³aƒ‚‚€ÞÝ—èáqùòãǹ¹==Ksy¿$ÒÜõg®÷3×ötíÞ}ñ¢•Õ–-JJLL==ééþþ..ô#è<Ä‘ÿy X¹ÒÌÌÔ”•5>þÁƒ×¯kk‰ÄŸ½* ÆÌ,%ed´j•Œ +ë·½H¤ŽŽ‚‚îî®.2™“ST”““¾_ó­!q¸yóV­²³»råþýS§.$RR<X¬”Ô¾}‡ &&ž9ÖØøí`ŒÙ´A FSóÚ577!¡ÜÜÐÐààÔÔ±±µk--¯\‰Œ’“Û´)$äógúPI¥‰íí MM-- 9bf&"’àààá‘’Ò×71 b0s“ÿïM@"õövw³³¯Zeaqútcã›7×®O/Þ½ÛÎÎÌLPðâEgçéûèlä‰D ››;9­ZE <}jjúî]K˱c×®ÀôÖ‡72Z¸pt43óúõ¦¦ÊJ<¾¤„JݱCWWJ ‡‹ŽNM¥‡ý˜<©ÔÑÑ®®¦¦ÆÆúzIRr×.›•+_¿vvžì ý ùün~‡þÏÅ¢±³/Ybcs挬,33hôÖ­GŽÜ¸a`@¡|-$’‹kñbSÓ]»dd88ÄÅÐÕÅ`bc>ôóó÷ïêii™X€Âb••/\ðõŒ´²"½½¯^}ý:* .ܳÇÁÁ×7*Š›ÛÄDCãâŦ&CCSÓ“'¥¤ôô²²>|ˆŽ108w.,LY¹®.''**!ahHYÙÂÂÙùÔ©ÐÐàà}û²²æX6} F¡–.53[º´¢âæÍçÏKKW­Ú¹sÆmÛ˜˜ýü®]KIae555554ÌÉ <}šþ+¿ÏžÌÍž$--mgçãuæ pýúË—ÞÞŠ¢â¡C7nøøøúެ^ýìYs3]“æò~ç®?s½Ÿ¹µ‡Ã¹¸6n|öìåË{÷tu››>ŒŠjm9pÀ×wÝ:,SSÿ×g’ÿIþ“4LÕÕÝݳ²úú"#õõ™™'þC?ƒÔßÿ­$ UUÁÁ›6 ~yN‰œ7oíZW×wïÆÓDD$%¥§BYY~~TÔDÿS§ôô45-*êë µ²™Ù¥Âbedöï ml¬®*-õô¼{÷ñãׯ³³ ’’ÚÛé‡8[Zâãóóóó£¢òóóócbêêèïíMM-,ÌÏŒ|øðòåÀ@úáõ¦&oï£Ged0úª ¼½==fú|ö,9¹­­ºš@hk š¹¥§g@€·÷Ñ£ZZÌÌ_žù@¡Œml>sÆÆÆÀ@XxvA‰ß‡“—wq©­­®&ÊÊNŸVVž8ÈÎÄd`àáÑÑÑÓóü¹‘Ñä· ÈξiÓ›7ýýÍÍÎΚšßKG0»ö07÷úõññBuuk닺ºllãÑÚp¸ˆˆ¥ePÐÐPw÷“'«V±°ü¼|@…E_ÿÞ½úúŠŠK—TU¿ÿßkÇkiùùuuUW÷öFDlØÀÏ?®07÷¦MÏŸwwš›Oügê÷µµoßnmúö¡ê¹ÊÿG@£ÅÅíí «ªJK¯\‘’šþŒ «®þàAF›{ð ¸ø¸[ŠÅjjzxde ¦¦š™ Ow:o6òA6¶•+ïÝkjjk{útóf8|ÜÚ ½zµzõ—IÐhié#G ÚÛ½½MLØÙA05MJê鉉9wNZúk½øqy²²®\544S’†Ÿ‘#£‘QXXEÅÀ@X˜®îLÉ(~œ_¯ÿ¿ÂUT$&š™Íœ0†ACãúõ¦&úXºe‹ˆÈL=‰IKëåËööŠŠøø={&÷'8\PpïÞÀÀ¶¶û÷—/gbbaÙ°!:šžÒãòeUU70x÷®¬Œ@(.>~\V¦§=ÈÎîïÿøqåJVÖ—ü÷õ 997o~󦧧ªêüùE‹øøôõß½+(xÿ¾¨¨µ50ÐÜ\DDBâÔ©üü¢¢èèÍ›é{™ƞ̶=§¨xÿ~}}UUNÎÑ£""‹Vh´œœƒC||ZÚTýŸËû«þÌõ~æÖççß²%!ap°¸8(hÓ&NΉы—×Ì,2²¼œ@èêzøpùr(IÄ (Äî;P©$RvöÅ‹[·^»–™ùe°…28ØÜÜÑñåŠ#‰ÔØbc³~}Hý/Xì¢E/ÇÄÈÉݼ¹s§…Å«Wíí!I,,+VÔÖR(ææšš¢¢X¬›[]ÝtTDbssF†¿ÿùó;vìßïç—žÞÚJ_§E£%%/]ÊÍ ^¹òÁƒ;´´>¤¯11­]™•õðaS“­­ºúä5B4úáCSSmíááææÑQml¬½=33**6¶¹ùK#ŽF ,Ybcsê”®.iQQO´´ˆY\üömHHSÓ„$@ƒ™7OQ‘Ÿ¿¿?++?¿µõë³ccÍÍÁÁ®®÷ïÿúwרøî]HHIÉÄz(‰ÔÕÕÒÒ߃ÉË33£Ñtcÿ#©ÙçÎèhjª¯oVVOÏøïQ(--qq1155HäºuŠŠ||HdXX_ßDˆË\åC?Ôkg§­ÝÞþèÑÆ¹¹ß^ žK{­ àÕ«¤¤ñ=" R»ºRR""JKi4;»Å‹çÍC¡¼¼ZZFFþÝ}~d¤ ÀÇçãÇöö]»Ö¬14œ7ïÉ“ªªÖVqñuë–/gb*)¹w/>~|ux®òD£ÅÄöïwrÒ×ïéyøpýú¶6 å[Ó%8œ“SMMG‡Ÿ¿¹ùãÇââB!ŠŠ’“;:øøôõUUÙØ®]+-mkû¡.?.ŸßÍïÔÿ?Cw÷ë×NN!!uuÓº¡P||ŠŠ 20´µ}ø•ÕÝ=ñÆ)”Îά¬ŒŒ–<^OOE…Ÿ…ª¬¤÷ݪªŒŒêê‘MNnd„L¦PZZJJèc7{–’ÒÝ=1zµ·GE½|YR‹ý»->Äô@Òw!‘z{ËËsr ²²~ÕÙ˜¯ª¬Œ‰©­Å`ÒÕ7ƒ‰‰)-ý:ØFëï/,ôõõóC¡D£1ú:8Á`±ôU" ‰Ä`04š¾¥ŽBÁ`‚Fc0hôİÚÛ›™éç÷îÝèèè(}8jlŒŒ|ù²±‘þ 14´²²³»vÍÖVM­­ÍÕõàA}}‡¢"--ÿ¨¨«Wùùëë·o¿r…$†F‹‰YXÜ¿·m/ïýûîî7oÖÖþÙ‰3…ÒÝ]SÓÓ35$‹J¥Ri4zþ?YŽ—B!ÚÛ¦—ÊÐPw÷Ð`±ÌÌXìÏeB£%$6m²µ••-*ºqÃÌì{ÕkæÒžJëííìœzÒŒ~ÿƒƒ4ÂÁüW2 utlÙbjª§ÇÃóôiRÒŠ††œœÕÕžž­­_Oÿg#OFF ++ ‰úúçÏ‹ŠXX/ÖÖVQa`•eeE @‰”‘ÑÐX´¨¾>++/¯¸¸»——_µjÁ,VLŒƒÃ×7)iõj …~E@‰daY½ZF†‘ñùó¶6z*„¿S>¿›ß©ÿÊJ47gdÐÏFNÎÀÀÂÂÀ##==##Sb ex¸¿dp866†ñ ¡££¯oܾF&ŒŒŽþùç%›šŠ‹››a0%% qq4º¹9##'‡J]½zÅŠyóØÙq¸övoïææ&Dó[À`833‚xüºu¾¾11ëÖ}ݪ··­ ‰üz|ùþûýÝ÷3÷ö K£]]CC“­?•J tvöõý¹ µÈAúK “ÛÛ“’bb:;œ ut/]*-­ª"‘àpVVqq¬¯ohèéA"ïÞ-+ó÷·°àà˜þjÎÎÑÑííÎÎ_ÿÇË«©ióæ/ÿÚÚê奭-'ç蘛;2‚@°±IKë蘚ZXlß~ðàž=K–ÌŸFÀèhdäÞ½ZZgÎÄÇÓsO½ò¤§ç‘#ÉÉׯ;:îÜéç'/ïà`oÏËûöí¶m[·Þ¹SZúkÖËæ•J&ÓÝ¡ ‹egg`˜‡ãpôé‘80@$þÌ^ƒŠŠ©)3shèñãáámmß¾ÚÜÚÃ`H$##33 ‚0žN£ß?ŽŽ64ŒŽþ™½¸?ÁðpEÅ«WïÞuvZXlݪ««¢ÂȨ§ÇÏ_]ýþ}DÄt§Tf#OD"ñxnlltTPðÀOÏÇ ÿø;wîÕ+7·E‹ÌÍ 6oމ54TVF ÊË====]] é ' È̬®neu㆑‘®®¤$“žþgR"Ì]>¿›ß«ÿB›zôK›F$ ŒÍÄ4¾>ÑKÑh<žn©'ì F&ŽN½*F£ý–‘J¨¯/+`a‘•••7J­« ¬«#‘H$YY†þþªªêê™SxÿsP©##ÃÃ4Úà ¿¿‘‘¦¦…EbâlûÜ÷ßïï¾8|níFG‡†FGA——•‡ƒÁ`ü½€ ÃÂÂȈFƒ`w÷¿ÓÎC@| (wý_ÃèhyùÛ·ÑÑíí6lÜ8> 0‡±ñ³g11GŽÌŸB çç?.--'ÇÍÍÍMÿ”—[¿>8¸·—F«¬<^UUYyâ¿ZZ©©J@ÀîÝ""ßâãYºTJJCãöí‚‚‘dfÖÓsq)*Êȸ~}Û6ž²²›7W­20ز%<|d„B¡P(”ÉæH,-}üxçÎó盚LMß½‹ŽþøÑÖ–LvvÖÓ31±µ û:q,VJÊÎÎÛÛË+$ÄÛûàA9¹/·û³Ðh4…B¥‚ ‡iníA‹UQY»VJj"RçæÖÒZ¶LT”Dª«ËÏomýrEw¶òÁ¸¸–-³³[»–@xñÂÕ5'çÛ 3æÚžþ… ׯWRš8C‚¬¬‹ëéIJ‚`SSvvcãϸÁs•?ýüˆšš““¿ÿøY>¯Ïq}ù;ˆß¾:‘XRâëÑÑ¡ pàÀåË––""µµ¯_úôõNÃlåI£õô|ø°¿°0‡¬,ÇħˆÈ¦MIId2–‘±u«ˆˆªê¦M>ôõ!‘óæijjk³²Ö׿zåééççãããóö­O@ÀÓ§OžDG·´pp¨¨,[6oÞä$s—çܘ‹|~7BÿÿÆÆZ[‹ŠªªˆDUUii&¦ =†ÁXXdd””øøˆÄÚÚÜÜÉöä÷»C³Õ7"±µ5/¯­…eñbNÎÁÁšš¶¶ææòòþ~uueevööö¢¢ææŸK–ô{ì9…ÒÓS^ž“ÓÙÉȸx±®®Ðìjþ.æz?smO$66ÔÕ ¸øš5‹Oœ#†ÁXYÕÕׯ—”ü“‘h邌  ²ò’%[·Š‰-Z´dɲeÚÚªª££êë››¿zõøqeåöí––GŽ,ZäæfgG"©© Q©MMåå]]ccô33Âð0}£Žst\³ƒ‰?}úÍ›²²þþ¡¡ñð ‚H¤Pè5šFF„¡¡áažÜvç·óòöî UUUS{ô¨ª*.îäIII"qpp<(_±bævl¬²ÒÃÃÒrÝ:NN/¯à`[[aavv &+‹¾^5ý7ápvöE‹ŒŒ´´–/€‘‘{÷þÉú壣mm ýýÌÌ::ææ›7kiQ©UUH$'' UQÓÚ:Ù˜MûqçFfæÍ›oßöñéë{ô($¤§GFæÀK—{{ýýÍÍ“’¾Ì`7[ù ¢¢¦¦¨¨”—?}jm]^þmGe®í€®s ¨¡qé’¯ïüü¯_×× lÛvþüŠ0XLÌñãã§“`0ff99==cãE‹XYÄÅçÏg`ANNSÓÍ›©Ôêê¼¼  ÐÐòòÉ«Äs•?¢Ñ||šš«Vij.^ xüë×ô®™ÎPɃƒ­­}}Àã®®«»|¹¶6?0@¥öö¦§WW÷÷O-‰eeïß~þlaak+(X[{ùrhèDúüŸ‘çì€Ã98TT–.îëËÍMKû2pmd¤¦&-­°HܵK__E…íÆòòñ³s•ç\™­|~û öôÿoFëëËÌtuõ÷ïë »}ûÆÓ§ÀÇ''ää,-oÝRUííõ÷ß¹“ì¼bÅßf?)”ÞÞ²²ª*IDdÓ&vö¼¼ë×ûúÚÛz{ÙÙ-ÒÐó÷¯©™H3ý§ìÉìÚ—”<|èî^V¶{÷Å‹îîö÷ߺåë[P0<ÌÊ*-½h‘²2‰tñâ£GUU?Ÿ÷{Ìõ~æÚþóçØXw÷˜˜³gŸ>}üØÝýÆ ‡÷ï„…MLŽUWÁ?uŠâOó?è !ìì›7)(°°`0"" âñH$‡®îÞ½‡ñòÒÏÊ`022óæ¡P8™ll¼oß®] L;L¥öõ•”úûggwv’Ép8Û¢EFF[·êéÉÊJIII‰‹ËÊ*)©¨ððÀáÌùóÞÞ))ééqq11>–”ÔÓC$?~|æÌ‡VVïÞݼùð!‘X[««ËÊZ[ëàPT4q Ñh~~-­Í›/]ºwïܹmÛXY##wï^¿>$¤¥eú£Úp8‡O¬÷`±BB <<0XoïçÏ}}ôÉ62288>ƒÁÐh&&vv..<Àb¹¹W¬8tÈÞ^GGHHRR\|áBYYII ÅÏOWW]}Û6†GG?¿§O££ wìðô´·¿páñãwïòó{{§Nž(”¾¾‚‚ØØ¬,VV(-Z«áÇ P††ÊË’’Èä/CP(ƒƒ55II11 ØÚ:“O‡@ÈÎ~ðàèQww>¾3gNŸ¾uëåK­¿¿¸ØÛûرcbZ[çÚ~\ŽJw÷Û·‡ß¾Ýݽsç¡CgÏJK#õõ¾¾çÎíÝ{òäÔZs‘'#³¿¥%OḺc‘‘ß;?×öô{øô)445ÕÍÍß÷í³³;qbÝ:6¶žžoÜ06>z44t¢T)}%{Ù2SÓ­[……‘H 33SS›š ·l©¬Œ Ÿ:¡™«üi´ÑÑööÌ̘˜ìl Š‹¿~§_öÔ®®ðp‡GLL®]Û²ÅÍíÕ«]»ˆÄ²2/¯ Œ§:H@$ÖÕ……%$ôõÙÚª©}øRW÷åô®òœ2¹««¨(&æÓ'$²³süHvvNÎööØØ×¯?|(+û:fh¨¤Ä×÷õëÔÔM›89ÙØÐhho§[°¹ÊsîÌF>_?gNNrrL üŠÞþûõÿwÙ¢©íz{+*âãcb?þ¶»F£ $$ØÙíØ±{÷ààٳǎ]¹rýú¾}4Zgg~þ«WÇŽ­\yåJzz?•ÊÀÐÞž”×ÖF/N¡ôô¦¤ÄÆ¢ÑtùS(}}eeéé11ÃÃÅÈçÎlõmt´¶6,,22>ž›…ЉilF¡ââÂÓ’`p0<¼¡aµøSöd¶íÇÆÊË]\ÌÍŒFGOž´·77?sÆÓóða ¥··¡¡¬ìãÇû÷‡‡'ëö\ÞïÜõg®÷3·öJ{{@ÀîÝ<<..ööûö9rèPwwr²ÏÞ½Û¶}údn~è÷kz3ÄßHOÉ-!!+«¤ô«.ZYY\œ›+-­¨¨ª*##/¯¬<ûï¶¶¶¶þì°ýmP(‘={îß?wÎÄ„Ÿñ \D©¥%2òäÉÇ_¿®ªƒÃ7o¾téæÍÕ«ˆúúòòÊÊ’’ââ²²‚‚üü’’ÒÒÆÆ äk`0–%Kœœ^½úðÁÆfÁ‚þþÀ@++ee ‹;:@ŸßÜ<(("ÂÍmÙ2­¨ÈÏïîÝãÇOòöNIéêúÚLa±&$DG›™±±  ô÷Á`x< ?6–˜xäȪUk×>~ÜØHŸÞ°°>|X\üö­ž=ñëèh__[[cc}}ccUUYYyyaaaaYYQQaayyQQQQee]]w7ý b±ÂÂK–X[_¹rêÔÉ“601½|¹|¹žÞÑ£ê”Äß=Íwlleå©SEEúúK—>œ‘ñëÒUŒWÜÒÓceÍÏ IMmnþÖ<×öÿÛ PââgÏfe…†šš¬Y³x±£ceåäe’ÿ¢<ÙØ £¢nÞìéY·NUÕÔ4&fúìnß—Ïïï_þC@@@@üzþ¤p8ÏÍÍÊ ]]]]!sp8‡‚‚‚'gssaaYYW×÷ƒZ@…beåããááàÀãQ(8œF#‘;:Z[[[ûú¦®Â`xé¿ô¤œœêêFF«V‰‹Ã`½½©©©©åå3ïýïÈbf  1ÄÈA‚€ø­HÝÝEEiiP¥ˆJwwIINÎÿ½Q(ii>xy¥¥Aò€€€€€€ê A@@@@@@@@@@@üþs †Á0223sq11¡P0È„€øA øùõõwî´³;rÄØXF‡Ê B@@@@@@üÝü'8œƒCQÑÈÈÅÅÝÝÅ%%ÅÛûêÕˆˆ/\\nÜX»VIiò´ ‹•”¼qãåK7·ˆˆƒçÏÇá&®ÄÀ ¤di™˜èã³gª*û#íÿ6°Xyù›7Ëʪ«éjéŸùù.HJ¢ÑÿeåF¡øùUUW­Z¸}¦´ãò)*úôiûv..È©þ• ‘""›69rù²““¹ùâÅLLÿœ|g§ÿëü&ƒ ˆÇ«©­[§¬ ‡§¤¼|in~ð ½½‰‰ƒCtôçÏ'OêêrpLT<A‰..--mí… '\A8…B"'Tkû¿ "±¬ìêU=½¥Keewï~ø°© P(ÿË«ù ÈȨ¡q옷÷£G;wJJb03µF¡P(hÒü«!‘êëß½{ðÀÁáâEŸœœÉ…ÿN}€€€€€€€ø_ç?¤FŒuv¾~=<œ@ ‘Æ'`‰‰þþµµzzGJI±³£P!!S˳20ÈÉmÞ,+ËÀ™™™9}1ÄŸiÿwÈgl¬··¹¹¹¹·Æb{{g®èñk!“››#"ž?¿~="’Ä¿ÿD;*ux˜@øreA R)”é\‚ŽŽ’’¾>9¹•+%%YY³²rr¾]äp®íÿÍÀᬬjj»w[[ÛØlØ   ‡wwçåzx\¾üøqnnOÏ䤾Œ€€‘‘µõÞ½zz0ØÐPssIIffPÐÓ§ÞÞoßLì̵ý\E^~É%%IIEE66ƒ!“ÕÔôõuu™˜ˆD PªªRRRS›š¦:¹h4ŸÝÁƒ††¢¢htkkZš‡Ç… ÕÕŽÒƒC]ÝÄdÿþ-[´µUUedÙÙ‘È‘‘ææüüèè}|’“»º(@¡·l¹|yï^NÎÀ@oïÚÚåËþôé³gssÕÕ/^´³Û¸‘—·¾þÙ³ãÇœ|}««ÇÆ‹•’:räöí}ûäåé¡§DbMÍ“'gθ»§¤ôõMôǹʃ?pàêÕ­[Édëן>­¬¤÷C8œ‡ÇÐÐÖÖÞ^E%/ÏÑÑÑ1.®½æ¦ô;›«þÿÞ÷‚x¼¸ø–-ööGŽ˜›«©±± de½{wãÆÓ§ýýk×:4~xøùó4 ‘œœÚÚû÷[[>¼v­¬,77tuåå…„<}zõê£G™™S‹ðx5µ'OrsŸ=[¿ÂÃ×­SR²³KL‚†Jˆÿ%þÃç-0^ÞÅ‹yy ¹¹¬¬«ëëÉgwwnnbbY™¶¶–Û÷NG̵ý¿4ZZÚÎÎÇ'*êæM ‘‘øøwï¼½£¢´µoÜðññõݵK@`"d–“³·÷ñ 8~|Þ¼òrÿçÏïÝóôŒˆÈË#“ed¶lY·NXx"¤i®íçúÞED¶n½pÁÞþÒ%33Àb••­­œÎŸ¿yóæÍóç¯]³±QWçäDLY€ÃeeOzüøÞ½¥Kûûãッ““;:ôööòÚ´IXx¼=-%µiÓêÕ px}}t´·÷³g..Ož¤¤P(«V;çïû¶†33=€`cSSÛ²eûö‹_¾|ýúî]mí¾¾¸¸™¯?÷÷5—û™= ˆB‰ˆššž<éîîâ²kÙØH£œ;öñãíÛ††CC••CCÊÊÛ·;;Ÿ:%/ÏÀ@ÿ.•J$¶·7445µ´Ðh²²›6™™­X!.ŽÃ}Ùkæ*‚›{Ù²íÛMLttxy'Ë cf–—744331‘’bf¦LÎ]æªÿ¿÷} 3³®®‹‹¯ïÓ§‡KJöõeffdTVrrîÜéï|á‚­íîÝ+Vˆ‰a±ôo`±ÊÊ.øúFF:8()uwGGúøDG÷ô¨ª:8øúFE]¸09PxêÛÀãÙØP(4š‰„†HˆÿIRR¢¢‚‚:;[[Õ'ýš½½Ÿ?óÍ‘_óT Èʪ¦vð`rò»wgÏîØÁË;qº‹•’º}ûÍ77oo==>>mí'œœ^¼04dggfVV¶¶NO÷óÛ¿_Mm­¬<Ñ’‰ÉÀÀ㣣§çùs##fæoÿ". °gOpp__qññã²²ô¿îúseúû™‹YX6lˆŽ®®&jk/_VUÅáðxƒwïÊÊ„ñkb±ZZgg÷÷ü¸r%+ë—WÁãµµoßnmzÿÞÜœïËs^s•¯¥åç×Þž—÷âÅ’%“§ùHä‚§OGG÷÷çç:$!Bý˜>ÌMÿïûAVÖåËß½ëˆ‹Û³‡ŸüWa0VÖU«||òò!0pûvnn ˜˜´´^¾lo¯¨ˆß³g²¼ápAÁ½{ÚÚîß_¾œ‘ñË;@¡Œml>sÆÆÆÀ@Xxª ! þ7øOŠE"yx6lغUV–BÉÈxü8,¬­múp*ux8??2²¼œƒÃÂBII@Àßÿ[Wžkûp8+낊ŠByym-•ÊÎÎÃÃÅEÿ/‘XYÙÖF£™›ËÊòó£ÑP_O –”$$46²°X[;vâDxø•+nnaaåå_Ÿw¢ÑæÖþÏÑØøî]HHIÉD؉ÔÕÕÒÒ߃ÉË33£ÑôÝzØÎή  ¯¿}û† êêrróæ±±±±‰‰‰Š"‘Xl^ûå^ÉÜ®?÷77×û™=4ZUUFFuõÈ&'72B&S(--%%­­££€Ã “É4 ƒ'þø‘·8;ù ÿ]úÿu Ú¯|_(/¯¬¬˜ÙÐðêUròD`•ÚÛ›”ôêUvöèèúõllô¿¢P||ŠŠ 20´µ}ø•ÕÝ=aù(”Îά¬ŒŒ–<^OOE…Ÿ‰Œ‰)/'‘Æ[Œ57»ºÞ¿ü_ fÇ.H çç×Õ55ݽ›‡§ºúþ}/¯ââÞÞ™§k4PY™œœ”„éªòñ}{]x®íÿu Ãᘙq8Äã×­óõ‰©©©©IM¥æåyx,Z„D‚ …Dއl߸±kׯ..ÝÝFFîî>Ô×ww''GG»»›™©«OMª<×ö ¥»»¦¦§gbº@¥R©4€ ý< %.~àÀÓ§EE±±ÇkjÂáõõIIaaÁÁ©©4ÝM˜Ò6ûëÏ•»ŸÙC¥}}££ãýˆF#“GFFG§>ËŸ’ÿ·´wÂEûsúÿ;ß †Å21áp4ÚÈHW×—'-ÉäþþÎÎÁÁ 'g``aa`€‘‘žž‘‘© CÊðpÿÈàpll PÖFˆéøOMîQ(>>mí+WvïÌÏúÔÉ)(¨½ýûG©GG››ß¿OM…ÃÝÜV¬àãC" ºú×µÿ7A¥ŽŒ ÓhƒƒþþFFšš‰‰ß_µmmˆ¸vÍÚ:"âÆ ,VXXSsÆ‹==/] yú´«KFfýúððŽúo®íÿ̳“Éôéø·ÀãOŸ>wNI)3sÿ~]Ý­[ß¾íê¢Ré!LÌÌÌtdz»þ\ùñû™-4™<:J&O¾sFûÕO2Wù|é !,,üüLL?3íÿQýÿ]ï‹JAŽ‹ §ïŽÛ48ŸêèP©DâÐÐÈ ÑLLã{’ãÀ`h4FÀèèÀ‘øO¥\‡€€€€€ø»ùì '"ràÀéÓë×Ï›—™éí}á§OÝݳ !‘jkãâ23xy¾¿Ö>Ûö È̬£ãèøèчW®lÚ$(øO®ÚÒh4ÚÄŠüt-(”žžòòœœÎNFÆÅ‹uu…„æž,J©¯OJzýúÒ%Wײ24ZFFII@`¦30sm?ûg¥P¨T„Áàðߟùòb0\\ÂÂx|YYMÍààø$ccSS[½zþü?ù†ÿÔýüzwèÇïdlŒ@ “Ñhvv&¦‰32X¬¨èªUººãÁf?¦¿Bÿåûmi)((-%EDŒW®bdfVUݲeÑ¢ÉgÇÆZ[‹ŠªªˆDUUiéÉ…ya0%%>>"±¶67·µõË@,VJÊÎÎÛÛË+$ÄÛûàA9¹¿ÿ\%įç?°ƒ‚XìâÅ{÷Ì]ÿïûÈÌtqyö¬©)&ÆÉéõëIÉ’FF5µuë/¦P&;¯4Z__f¦««¿__XØíÛ7nœ> >>99 'giyë–ªjo¯¿ÿÎÉÉ““­ÓÃÙÙ-22ÒÒZ¾FFî݃‚ð þùO„ØÁ` 8<ÜÔ”Ÿ_V†BqqÉÈÈÊŽ« kk?| ;H P^žŸ_VÖÖÖÓ38D¡twüœ¬¡±dIÿ¸+3×öã ‘¼¼ **ŸãÆ»w••?;éÿ9¨Ô®®ðp‡GLL®]Û²ÅÍíÕ«]»ˆÄ²2/¯ Œ««ûû)”±±òrss#£ÑÑ“'ííÍÍÏœñô<|˜Béímh(+ûøñþýáቧ%ËÊÞ¾ML´²25½zÕÜ\@€……Fë뫨HHpv619s&<¼½}|­|®í!;ûÁƒ£GÝÝùøÎœ9}úÖ­—/i´þþâboïcÇ>~Œ‰im eh¨¼}ÙUNAáæÍÜÜ„/¯e˾ý+(”˜Øöí¯^EF^¿¾f ìÞâp²²ûö¹»WW UWBjêë×ûöIJâñ³-– ‡³³kkß¼™“óåó¶·'%Ý»§¦ö§ Hb022––‘‘™™¡¡ÑÑ!!ÏžMý |òÄÜ\Jêû%=áp#£/îßß¼™ïÇ«¼À`x¼ˆˆ””°0ÇÌŽÛäw+ `l|ôèþýÆÆââ X[‡†ܺ¥¢‚@psoÙrúô… K–03ëJpø¼y;wº»'$<{¶bìô^Œ•UCÃÑÑÛûâŵkyx~¾. 5ožŽŽ––œâ'h11›·o‹Š||V®ï-h´„ÄÉ“?¾}{ïÞªUœœH$/(¨¨¸téŽ55))AAvvººòò‚‚ XX<}šœüü¹‰‰9×{ÀbUT®]óõ ¶³[°`ö%eQ(>>%%mmqqnêÇb,8|øÕ«ŽUPÀá$%ׯ?uêÂ…£G/\˜üyæÌ–-ÊÊÌÌßÖ8œ•U^^WרXGG@‹ý5å’§³—/''GEÙÚÊÉýÚâºÿŒÅ×ÕõöNK«©ñöÖÒÂãEOââ25 úô)(ÈÌŒo:ÝG"™˜¸¹‘HvvmmKËû÷Ïž]¼˜…evo çæ^¿þÁƒªªººÇ7oþùÞ ƒ±±éë߸ñ𡇇µµŒ ÷«åü§ôóÏ€ÁÈÊîÝûìÙãdz~H$×òåGŽYçAr€IDATØÚnÜ("2{Köß’ÿßǯ™ÍN÷ddvï~úÔÛûèQUÕïÍ5§Óqq aafæÙËp8—ºº•Õ©S7JJ~oFø§ÇëÙØÛïí ý0Tjqñ… &&—/‡†Î”¡‘HffNNvvVÖévc¾|¥8?¿’’ºº´t|ül¦Ý“ ‹Þ¸ñúuw÷ÇÍÍáðçÏ·mÓÕ½÷ìyûÖÛ;((.NVöøqSÓÓ§ÃÃkjFFf^%“ÛÚ¢£31¹uKN.3ÓÎNAáŸ4TêÐP|ü®]òò{÷FE þø•HVVqqYYNNjfib0,,ŒŒ4ZÿÀÀ×õ‰àp^ÞU«^¼HNÞ³'4T]}Õ*gçÊÊo­«¢PüüëÖ;¶o•šíë{êÔååÉÉGŽˆ‹{x¸¸TTXX<¨©ÉÁÞÙ9ݪ ¢ÑœœóçËÊΟÏ‚@üÉS©ÌÂ…Ë—Ãá..ׯ‡„üx>FdaÑиzÕ×÷úõááíÛW¬Ø¿?!ahh.W`d””ܸqÇyy]]aa>>~~MM33++޶¶áá… ÷îUW¨¬ÌÊRQY¸DZ²äýû÷ï I¤úú®®ÑÑC‡<ˆŽ¶µÍÏŒTVëìln^¶LN.6ÖÛ;'§¿.kV8œ°°ºº”??}ëVE½t,ŽFãpŒŒ pøðpoïààD…'náÂ={.\>}ZP07÷þýóç--¯^ÍÍ•‘¹}ûÙ3GG%¥˜“ÆÆÑQ,vÅ SS{û#GðøÈÈ  ’’ÁAIÉuëV¯Áîîׯ߾ÍÉéïŸYïÄÅ-,œœ¼½oÝZ°`Ù²ææoõüàåUQQQ‘–Æã_¾ìíý{wèEŒwí:thùrAÁ™‡X4Z\\J ‰D¡`Æ3g.\PTœ¹(0‰ÔÚæî0³ö`±BBË—+)±± Ý»×ßO&i™$%óó‹ÕÓ{ófÅ [ÛÑQYÙ#G\\®\II12²µMH˜éÍ ¯¨xòäÕ«Ë– ùùmÝÑÞ>µŸ"‘œœRRÒÒ0XuuAÁ÷öàp.®U«ÎŸôhóf4zdäðáOŸÊÊ,-ç¦=$Rm­§çþýk×:;÷Ž?­Ÿ8œ}ñâU«ŒœœþDÖZ‚“S]ýÔ)w÷³gË˯^ÍÊzñ««ëëû¾û/Éÿ׃DŠˆØÚ&%}üèèÎΊŠÚÚOžTWß¾ýÚù¯£sûvAAh¨±ñl–=^¾lnž95™ÜÔäïoh¨¬|ölj*=÷)=¾µõÛ·K–\»¦«k`àç7ý,äKݳ´åæîßÿínO"54îÚµyó£G¥¥EŠ1˜ùóõôvì00àãC¡èÛÙp8 ƒÁá‰@ ‰Db0ŒŒóæññ¡Ñ||RR.\¹ÂÌÜÙ‰@àp8‡Çãñ0Xyù­[ÇŸ;—œümWãæ^¹rÏ=½  ƒŒŒ¹¸Fãæä”•UQQRRTf`À`XX,PUUWga!“ttøùáp>>cc99Nδ4«ªòò21QU½}»¦fá‹ vìX¹’ Éäyó ttøù<ðñÉÉ¡^^SÓ'O>]Ø -%eeuåÊþýÌÌ11ææ×®åæNžpÁ`,,ÚÚ—/?y¬¯Ÿ‘±g®î©SþþÓÙ.,VJÊÌÌÇÇËkÍ66¨ªrrÚºõÌ™„6¶mÛ||?––~øÐÄÄÞ>) ‹54ôôôõ54ŒŽÞµëر€IOÏÓÓÏÏØ8=}ÏžcÇ\]SRg*‘þ;ôówÃÀ +»mÛéÓff¢¢hôÄ;æå]±BZƒÁã;;mlœœxx¾_~t´²ÒÛûÁƒ'OŠ‹¿œ^Î ÎÅ¥£sðà³g¾¾Gª©ÕÖ>y²q£’ÒíÛsþòÿSÐh Fi4 …Jýžëø»æcËÀ08¹cÇÒ¥NNYY##x¼®®—Wh¨³sGÇ‘#::'OæçOíÇrrŽŽññ÷98oÝÚ×G£Q(ÃÃmA‰iÁ~þŽŽÄĹ-~ÛÚþ™ñzîövü}qp¬Zåìyüxeå¶m+WzzVVNØXÈAúFG““œ<<¾^‚…eÁ}}CC8†‡³²²³‡‡%%W¯>~ÜÜ\J ‡{÷n``dDUUAA[›—w|/çàPVæåE øø¶m»råÊ99úôDúü94ÔÙÙÃããǶ6 ±X•+íì><}ZCc`ÀßÿòeMM[Ûׯóó&+8•:8XPðê•™ÙâÅùù{öÜ»çêêîž™³iÓõëgÏ򯆼W_?Ý‘X\ìáqï^l¬­­‹‹®îÄpð·C&÷ôgeÅÅ £PôÉ ÆÊJ¡¨¨,_ÎÎ^Q‘šššßÝ=.+HljêîîéÉξxñðáOŸ^¾|ôèäÉòòÍ›¯^ÍϧKçà‘Å`Z[ýýLJ~df^²ÄÑÑÙùÄ yù/Ã+àp66EE66VVíÆ OÏÐОú #ÖÝ-)yãÆÁƒ..eeãíI¤ææÀÀ‹ÏKK|€Ã·n½}ûÉààÓ§­¬ââ&î~z?2ÒÞþõ$‰äâZ¸pÙ2==ii,–J¥R) …J¥PÈd2™4‰±±ÑQ©¡¡µ•F30A£ûúrskkëë‡ÿššÖÖï¯Ï ‘7ÚØ((Ô×?ztþ|IÉÌ+ò3C¥vu%%]¼ha‘–&.~ìXpðÇrrwîXX˜›§§S©‹ÙÛ§¥%$XXÐh¡¡99ÊŠŒ¸¸¥eFFO¥åø•::ââÞ¾mo×ÖÞ¸‘ƒ#!áãÇÉr¢PzzïÞurjiÁã€B— …2.™±±±1”8pàÇçÏEDUU÷î}󦩉@&Éäo½ eh¨½½³³«k``l 88Èd`f–’ÒÕ]¶lþ|ÿÚÚæfqqMM>¾ÑѪªêêÎÎ餌B‰‰ÙÚ†‡KJ^º¤ °gOfæ„ãI?;‰DR(Dâèè­¢}ÍØXCCxøµk§N`±8œ¸¸Í“''Ovtܾ}ùò¥K™™SêÉOÝÛ[R2Õ>ýI¨Ô¾¾¼<‹‹ŠXX„„„„xx¦ ,b`ÐÖ^¼xÛ6CCHJzýúÅ‹éÜy*ud¤³³®®¡¡¿BwàpŽ¥K÷í;sfú†D .[¶`M&¯ZuîÜåË $F¥ŽŸ?—•¥¥ùûûú&'_¾¼gÏÇGJH Ñææ >>##Ÿ?O¢…ß¶ÍÝýôiAÁøx[Û}û‚ƒ¿Ü;¢?wlìÑ£Û¶Y[{{>{sý:Ðݤ¦¦qÍ€ÁXYµµ]\BCOŸ/-­©!åå««óò ²³¹¹uu‡‡I$AÁêêÜÜ‚‚¬,<^VvhˆLnl,,,(ÈÊ“”"“‰Ä––â⢢ââææ™NCüýüýÀ`0âÿ¼¼‹-XƒÕÖ††vtP(“ÿû-;‡Ï6X1AÁ5k.^tqyüØÆFR²²ÒÍíÐ!eåó磢¾ïŽý-òG DEmlBB²²6oöö–“[²Äϯ¥åï«I¡LH…Dšé⟙ “ŒŒ©©ÍÚÚ$ %**&‡32òð¬[gcs옪êÔ~†Drs+*23Ã`ììkÖìÚu옄‘H¡ôöfe=xpãFXX}ýØ`0rrBBJS“«ëÄÙ%jÁ‚½{ƒ‚Þ½Û½[Bâ˹¢Ñ¬¬<< éá‘››šzó&…ccUUÏŸ¯_¿nÝãÇå忼ž‹½¥ÑH¤‘‘ŽŽêꬬ·o½½cbª«KJòó‡‡--PPðñ9~<3s|©ræ ‘ÿêULÌô££UU¯^YX¬\ùêÕÔalÁKË””¬,NÎÈÈgÏŠŠz{åäÄ҆††&$ŽD¢RéÝrxxxxhˆ¾æ@"'EÀádewï~ù28øìY8<#ãñc'§;wjkûû ;vîÔÐøödg¿zuéRU•žÞžž%%ææññgÎ>ìêúå:•ÚÑ‘”ôøqBÂØ˜®®¾þ¿å=‘ÉÍÍŸ><~<ñ78\PÌÌNžIIyýÚ××Ó³¾~z³åä´yóÍ›~~±±>>ÇÇÅih89¥¦¢P\\ââlldrss}}OϸkiIM‰ ihø2xecSS£ÑRRbbBBªªÆÍPYÙÝ=up¢R‡‡òóss&•®.uõáaI^¾¾>;;--'§­íG¦šƒƒiiwîlßnb2›Öp8?¿¹¹˜X~¾Myùóç7nxxLÜýì@£,ظqÿþùó‹ŠnÜhjúѽS FJÊÞ>:ÚÇçèQ%%,ž?¯©ÑÒJH8tÈ̬¨ˆL¦ÑH$.®C‡ÜÜ^¾”ÈË£Rëë½½W­22òðhh’:~<2òÎ4º«‹D¢R)cãgÏÞ¼¨ªRPprÊÍmmÍÏÏÊjmýöý´´„„$%Œ¸º._."B£=}ZU5ñ.a08‰ …Þ³a0<^\|ýúÓ§íí¯_?zTMmpðÕ«K—45W­ 'Œ.^|óÆÁáôi3³¶¶œœíÛW¯¦PBC7l(( CL¶üü’’ zz||CC‰‰}}_JQ( ‘„_—D†JíﯩINމ©©A „…EDP¨ºº7oüý?}ŠŽž,¿‚—wÇŽ€€oÜjk««ëìœ,;dd†Ãáp°µõö~ûvêÊ. ÅÉ)(ÈÏßÐàä$+«¡ñüy]Ýø3ÓÝž¡¡¾¾¾¾þ~ Ðh11nn©¤$8¸¢¢³“ò‚“¨¨©é;{÷nßÎÏ¿zµ¦æ‹D¢¾¾¸8VVV_ßÛ;ýS P""û÷?ztâ„´tjê¥K‹ûú¶´P©h4++ 33;;++;;++;;'';; –žUZjh¸yóóçaaýýK—::ÆÅõôP©TêÐPaá;»w››?z„í]ûþ½ŸŸ¤$;;‹@À`(ÇÀ€D‚ ŽÇ³±±±qpŒÿ‹¥ÿ…}ddx¸¯¯¿xxªµý=úù»! _¾x -ý䉵õ¥K‰‰4•J ´¶65Ñïå÷××®Õ×ÏÎÞŽÇ ­]ëäôð¡…Åüù6ÈÊž8éêšœ|êÔÝ»––ÊÊ—/gf&' ä ý‘‘¥¥ýý³7&Hä¼yææ÷îYY‰Š¦§_»¶iSrrMM}}\ÜÍ›ÑÑí09¹“'׬ٸQK+0ðúõë×?njšÚ)áp­²21ÑÕõÀ;»Ç„%KŽ»qÃÌLNn¶û;cc55ÞÞNNkÖHI={¦¯¿oŸ¾þÈH{ûô“^mp0??"¢ºôõùøþWÞ4‘XRrïÞáÇQ(ê꣣0ØøN33??74ÔÒ200ñ~FFª«ÃÂüý§‹þÅãUUÕÕOž\»–J yóÆÓ3)i¦Uöé€ÁedXX0%¥cÇ¢£KJNœàà`gÇá`0‰@èìlh¨¨ÈÌüô),ìéӇ߿OIùüùçσP(mmŸ>:;ïÛ·e‹˜Ø³gŽŽ¥¥³w‘p8eå6ndc‹‰9w.<üóç_+¤O*YYI¤œœ˜˜ÏŸed˜˜ º»ÔÕOœxòDWWRº»‹ŠŠ‹@TT]]L ‡cbš7ïúõgϤ¥‡‡ÅÄ„„XX€ÞÞòò’’ÁANNYYEENN8¼ºZHè̙ׯ¯\QP``Az"}E˜¾rŒü?P(4‡ãâbaabÂáÞ¿ÏÈèé!“4z<äŠJMJ23SU54 ìíA<^TtÙ2IÉ––›7õõ—,‰Œ{ø0//.Ž‹KSsñb;»Å‹£¢´´îÝKM}ü˜ÁËkÿþ³gÇC¦(”þþÚÚ¼¼š3³'O\]‡‡››oÞ|ó¦¾þË5d„ÑH¤R×ú0/#££#"Òߟ——žÞÒ2þ+h´ˆˆžÞž=[¶ÈË ñóóððóóñqrrp0330àpX,ÅÒh••W¯nØpòäû÷_ï{ü~ÆÆJKœ¶mÓÐpu¼ƒˆÇ¼Ÿ•åç'Oªªš˜ÄÇOœ}_ÿÎÎÞ±ãëkR©==©©/_:8¤¦`± :;oÞ¼eKJÊNNgÏöôLŒXlx8Ÿœ¢¦&$„F?Î̼l™µµ˜XrrBÂÞ½Ÿ>7ŒœÜ¡C~~­]+"ÂÎÎÏ/&ÆÏO_5ur*-íï¿zõëþ;<Ü××ÝÝÙÙÑÑÝÝÞÞÞÞÙY[ûî]HHk«ŠÊöíþþ¾¾MM::&&ÏŸ76**ž9¾q#ÛÄ5îÝËÍÍȸwoâ/îîùù™™“GZ:>>5õìÙɉŒLN>|ZZ\\ÔÕõõÏ+,œ¬£¿_?ÿŒ´ôöíkÖ°³§¥]¿ž˜8ùíþ 0#£’Ò¡C·nܸ¡«K$¾{çè¸téáÃ/_feõõý|ù§åÁ(*ÚÚ~øšº}ûÄ)M«­õóÛ³ÇÜüÕ«¹.Æý:èÒx¤ÇØØ×;H££íí“çc±±õõH¤¸¸®n]]~>ÓlÒ¤P(CCååññ))gÏzz¾zed4ý|ŒJíï/*zñâæMW×”‘ÑÈHSsÏžåË[[nÞ¼z5+‹¾ˆ61î*)ññYX˜˜HJ¾{çéyõj@@oï—σáñÜÜllÄÀ@FF_ß„ÐhBKKnnJJKË×÷F÷ôhi$_iijjFFRÒ×K9¿¼ÁÜܹØ[ &0LVRЉQQcf€Â˜”âéÓ;´µYYSRÂÂz{i4ÈAš###55³5M ˆÇ«¨œ9ãævû¶¶v[Û**õõ?>i¥P:;““ïÞ//11'ÇÓ36–…åúõ£GUTîßß¿?9y6Ë Èʪ¦fmmbQQ.psŸ8ñúõ›7K–prvv~øààpñâÍ›ññÝݳîi4 1..nn ‹Åáxx˜˜(”úú'ONŸ~ð 66..>¾¤dxG£YYed ׯ××76ÖÖff®¬LHð÷÷ô¤PÆÆjjƒƒ³³ûûa08œF#‘( ‰ýðáî]gç”8œF£ÑèAˆtÈd‰L&“Éä±±ÑQ"qlŒFÞ¹óÍ›/””¼½ wíz𠸸¿hhhhddò¹ *µ¿??ßÝýÚµ¶6ãã“–Åã‘HŽ—wáBee99<~t´¯ïåË3g®]+,ddäã[»v×.SÓÉ2HK{ðÀÅ%-°QZóþýt „Ãáp¤PèOö«5‹•’22’‘€üü7o**&V;a0&&QQyy vö¡¡ÏŸssËÊrrººúû‡‡‰D"qttddh¨½=/ï׿ÏJDdëÖ3g<<.¤ïÖÓA"••éIöí»ÿñãU«&¬6 ÆÈ(+;oÞl¤P(!¡¥Kõõ99kjÜÜ23¿î34ÚÐPgçÈЉáñpxKˇ/úøØÚ†…]¸`lìèïíMß¡"‘š›=ºy³¶ ‰Ä‘z¬Áààà`ÿÀÀààÀ@ÿà`___ßÀ0yÚù%?lì“'QQÖÖ»w+)œ<™’rö¬°03³½=»hÑ… ‘‘ÒÒöö’’[·~øÀÍ}äHfflì¢E/JJnßþá¿m[||NÎöíþþjjëÖ¹»“H›6ÅÇçåíÙµd‰¡¡ƒCIÉØ•J&Ý÷~þ~@‰IYÙÊÊÔ Ý·¯¸˜][ÛØxÛ6]]eeEE ^^ff8|t´»»±±¢"9ùÇ÷ï››‡‡¿õÄX¬‚‚­í›77nhh”•;fd´e‹§gUðëäôOËŸDª©ùðÁÑñäÉOŸ&ÇäÐw!¦žü蛢¢;w^¹rûö–-||sÏ=:2¹±ñ͛˗ññilœjA¿ÜAúÚAšn>••Ÿ>WVþÈý44|=A$’¾äFßט ÆÊºmÛ“'eezzDâT; ƒ¡ÑœœììpxZÚ·gLLh4ýÚ—×øy~ÿx=7{K¡ ´·ÒhX, ƒÑhmmII/_~üH¡¸»ïÝ«£ÃÂÜÛ 9Hs„B™]½#Œ™Y]ýÔ)OÏÐÐS§¤¤`0 ºvmÛ¶  ­[_¼(.þ1C‚X¬¤äƦ¦FF‚‚33ž‹‘jjЉyöìíÛêê™ï‰Dúw­ñ +&¶f³ó«WW¯îÞ-,ÜÜÝÓ32ÍÍOžìÜicãí][K"¡Ñ¬¬¼¼RRêêzzNNš›»º®YcbòàAzúÔ  †@À` H¡É4ÚïTaa3³îÝ 9th͚ÇùøîÞýôiÍšœœˆˆOŸ²³ÛÚ¨TŒ›{Ó¦Ó§ee»»ýý×®50¸v­§ÇÔÔÃ#9ÙËëÚµôt…¾Î>ƒ11©«Ÿ9óäIpðÙ³²²mmqqaa™™ÕÕ d2ÍÆ& °xñþýÇŽ©© ÓÏkØÛ:tïÞºu×®;îçá14ܳÇЕ•‰ipðôéµkß¼¹yÓËËÕ•ÏÂÂÕÕÇçÂ…¼<9¹#G>~üzuk:s 4 †ÃññÍ›‡c0„DÖÕµ·§¦ÆÇ—”Œï¶É££]]ááqqêêçÎ=+,üúµµõ»wQQ_f~£P&¤C"µ·DGO^t€Ãq8))II!!66VVîêúü¹µµª*:ÚÍíÚµŒŒÈÈóçÍÍÅÄ\]HNþzrŠB ™˜Ü»°oŸ” ‚(  ¢¢úú####MMAA/_VTðð()ñðL7‡ÁðxIÉ%KäåAðÑ£ BCÓÓ¿ Ô¤‡øÁ`@¥Îuúƒa±<<\\ ØÙÙÖöeh4ZHH_É&¦ŠŠÛ·‹Š&F##8°{÷ßmÏûûKKÓÒ"##"&/"`±ŠŠòò«Wkk@~~ttDÄäP8œ›SW72Z¸ð{½XHhÕªU«„„jjÞ¾‹›.ä„ÌèÖ„FÎÎvu}ô¨¤$'çÀ++%¥€;»ÌÌ‘ ¥§§¤$"âÝ»²2ffeå öï70àåý‘i"‰ÔÒòñ£¯ï¾}òòáá$ÒÄ™9 …L¦ÒÿB£ÑÝ2™L¦T§Ñ(”/ÿ2~†qò_ÆÛÌ´øñ{õó÷‡óó›˜X[oÜÈÅÅÎ><üúul¬±qkkNΧO ¹¹EEuuƒƒT*ƒ€€œœ†Æ¹saa66'N¼xai¹|¹Í§O3íœR©$‘H$ÉÌÌÁÁÌŒBÁ`@ üºgý§åO¡ ÔÖfd$'gfÎö •J$vw77WUUVŽŽþl6W2¹½½»{ú…ΩÒØØL2¢§zòäýûcÇ””~&þðpQÑåË&&'N¼ßÞ>~Op8Å"ôý,8‡ceegG¡òó62RV?c=ó˜I" À`¬¬x<ÑÛ;44ÙÕ£;É0Øx ø¯Ñü‰ñúçì-ü|/¯¨¨±1?¿;-be ‰Ž†¤9‚Ãñð°±ÑÝ’éB¤vveeKËîÝ»~}íZNN FFÂÂvï>~¼ºúøñ»wcbÞ¾…ÃW¬Ø¸ñÙ³¢¢¹»IH$›˜˜´´¢¢´ôÔd(”€€¦æêÕ** ˜•šœ< ú-ˆD4:'çÛ†…bcãà˜{výŒ“SW÷Áƒ¨(gg•¨¨S§uuCBjjØØ¶mKJ24ܺµ¡¡¨¨¤¤¸xü RYYNNrrl¬¯ïÓ§>ܸ‘˜èååãsñbR’‚±cyy›×ÊØØØ•ŠDb0SsWѳäéëïܹqãêÕªªÂ¬¬Ðß___V60 $„Fƒ`]Ý÷ïŸîVÜ»ç쬠°g‘‘µu``O¨èDÔûø/âñ vvW®,ZTVvçÎ… yyÂè(‰ôêÕíÛÏŸŸ8áç·g¶6 ËÛ·ÝÝ“u ƒ‘“³²zöììYAÁ÷ï·lY²ÄÊ*4túT ˆFóókkoÝzꔹ9WUÕDÈáÌúKOÌpø°ª* E$ff^¿¾f……»{EÅè(`±--‹mßþò¥••Ž3sTTpp_ßä«áp {ö\º´|yI‰³óÝ»éé]]ôß#‘ÚÛSRbbH$EE6¶ÌÌŽ55]]ss§OÍÌ0˜©¡ ô÷"!ÁɉÇ_¾ìç÷â…ÍTÃI£ ¦§ß¹³g£caáDÏF"×®=uêÅ wwssll,,,/okëï'“Q(VV~~aaIÉyó`°ÏŸÛÚHNN GÇÓ§Ÿ>52:s&#cê*ñèhy¹‡ÇŠ¢¢€ÅJK_¹’•rü¸ˆ44xyYYéêÚÛ§§÷öb±ÒÒÇŽ=~ê#£‹‹µõ•+iiô¡ñxuõsç²³µ´˜™ýü¼¼¾N°Jg|ÝG"çR7 –”Ü·/229YOïٳŋML\]kj¦jÁË«ªjhÈÏßÜüþ}jjW×d™¢P‚‚::¦¦rrõõþþaa?’”ãwC¡ôôÄǽ{75ÄŽ@عÓÉÉÚ²²BBÞ½û2ÄN@àÐ!'§o;HH¤ àêÕ[· ÕÕ½~ÛÐ0ÝŠ8 †BápH$HôýHzþÉ›7?}:zÔÃãèQ «W·m‹‰™ÁØÙ55-,.]:y‹ˆx÷®¨¨·w6SL8œ™YIiýz]]*uh(,Ì×wr¢xD"YXxx8889¹¹ñxC£ÙÙùùùø88‘H æààççãd``fF£a0$’••———WPD¢ÿ`bâááååçïêêîîèhoúòù§~þ P(ff,¶¥%9988;ûÅ‹ëן> *,üú4 77'§‡MNŽ¿råÔ)/¯””cDz²¦ë½££ÅŘ˜XX°²¾yóø±Ÿ_Ašš‹ËŽ»w{x$&~;*`vüåO¡´¶†‡»¹<þ»‹J%‘Èdúd|æ¤;4ÚÀ@qñóçׯ»¸„†ÎÕeƒÃÙÙW¬°·¿ti×.NÎôô®®©éàp<ž““ „¾>MYùüùÌÌÐÐM›æÍC íÚ%*º}{JÊDÊm|ñ…ÂbÇõ`üYé Ë55·o73Ó×WWgcƒÃ‡†Z[ËÊš›¿§7n¼ž‹½E¡&Û[€¡¡œœW¯ÒÒ(Ÿu딕!iÎÀ`óç«« b±AA}}_š54ZVÖÎîöm%¥ÂÂ'V®|ÿ^Eåõë›7Ñè®®””sç ÷ìÁÈHW×[·LM?~\µêéÓææ¹m` 5õÚµ'è—JÅ̬¯ïåg`@£Ý¸±sç¶m~~SÏ0ÁállÚÚVV––‹gfººº¸¤§OM;=Œ°°††ˆì_QX˜?ßÌìĉõë{{]]ÕÕmmƒƒ++GGéÏÿ}“ØÓ“‘áîîáQUµwïîݪª||Hd^^UÕxg£P††ººFG±XNNn<7//ùr|¼¿¿µ5žàí\TTZ ‡sqÉ˯[·i“ª* ‹‘‘²2OzzRÒôiÞéÕ‚6oVWïéyûV_?,¬£ƒB™8ž?¡‹ÌÌZZ.ܼia1<üü¹žž·÷Dò©§§¦¦»—/çæÆáàp˜¼Ã@OH¯¦ÆËÛØøþ½»û§OÓ»FãZ7:ÚÒ’˜èåec“˜8»÷€FKJnÚtð œÜØXb¢µõ‰žžt׈ÎÈHMMhhjêèè† óçc±ÁÁ99Î +/¿wïž=¦¦ŒŒ'O:8Ð5™¾VŽDòò.[¶r%¢PH$ÑÑáæY^N"k*âñRR89ijÒ°œœ¶6'çÓ§gÏúøäç'y§ÑFG¦ÔG"EDLM}|^¼Ø´ipðìÙ5kxx=*+›Š5.KFF!! cc“-[”•{{ƒƒ««¿®Ÿ5UKEEÍÌΟ?tHD »;=½©iõê{÷|}›š¶m31ñðhnÎ̬©áã ÿþþýööeË,-?îèX´èêÕçÏwî„Áž?73sq)*šiB!z{ÇÆÐhVVnvýãà02ºxÑÂB@ 3óêÕwïêë¿Ö 8œ›{éÒ5k$$ÚÚbc##'#8œ‡gåÊGâã%$^¿¶´ Œll¤ž­e`X¾|åJ]]QQ2¹¬ìãǨ¨ÄÄésmþ4…‚BIK_»Û×wíÚLíž“ ÑFF𛓒BBš›çruŒ…EGÇÑÑ×wûvìl{û¥K¯]KNžZï ‰äâ’`g€îîÆÆÆÆ„„;wÄÅYYÝÜLMïÜqtÔ×ÏËst´¶~ö¬ºzêr ÆÈ¸hÑ‘#aa.°°<|èê:žìgòŒgh¨«‹@zÉŠñÅÊÈ<•”dkËÌÿömPPVVEÆÅ%!ad´¿¾> Õܬ¢"+ËÂ’”4ýñ“?1^ÏÖÞÂᬬ‚‚ŒŒTj__W×ÐÐÄýææ†„¤§Ã`&&²²X,’ÔÙÙÚÚØø«>é×ìííìüü™oŽü]Ýc ë×›š„êj¡¨èÈ™éãÏ‘H>>z(¯ªúüyss~þë׺ºãû/0ÃȈÁ|iŽèIÊÊúûCBöí£N³çå]·."¢»»°0 `íZ6¶é«¬ìèÓ×WXxò¤²òlö„Ðè .^,.¦×ÎÎöðÐÐø^Ýä_»hÑÅ‹UUííOžèë32Îî;ÚÚOždeµ´¼x¡®N?µ3.%AÁíÛSS»»CC­¬„…g’0­ píZbbOO\܆ ¼¼Se‰B-\xåJ||WWd¤¡!ýMkkß¾ÝÜÜÞîé¹f ýo“ÁãÕÔ¼¼>®®&††ª«;:NŸ60˜®ì.*zøpXXwwJʶmz€@ˆ‹;öñcwwR’…Åš5vv¯^}þÜÞþꕵµ¤äT}Aff/¯ææüü7o ˜˜¾üdg71ñöîînn¾uKGg²œ~8œ––›[FŸôèÂ…ÓÕ•‡Áxx¶oèìÌÊÚ»wþü‰@!dfÖÖ~þ¼¡!#ãéÓ¥K'îcd”’Z¾ÜÈÈÊÊË+5µ½=.îÈ‘­[׬Y¼xü¸ú¸ÙØôõïÝ‹ïînlLNîìlo zó&--/¯¬ÌÝ]W—‹ë[} _±âÑ£®®þ~Ÿ5k˜™¥VKKïÛÛÜ~ÿþÍ›áá½½……¶¶ŠŠÒÒÛ·‡…56FGß¼©­Íă!‘¼¼ë×{z&& ut„…}üXPPVÖÓ“”tø°¢â÷ª±#‘RRöö11ýý¹¹Š‹/ çáY¿þþýææÁÁ/\“›î½Ñ÷h·l‰Œ,.®©¹wOQq"¬‰””|ÈÈðñ9räÐ!kk;;?¿ÌÌ€€K—&jšý^èIÊÊz{ß¿_ºtvvçK"/ïèßÛ›’bf&,<Óº2½`ÁùóEEùù'OΟ?5hƒ™?ßÂÂÑÑÊjõjÉ× 'Šïï/,´±‘’š}ºƒTXXQ‘•ec3oÞL:‚x¼´ô¶m»wëè c±p8'((/¿l™šý>áp66YÙµk7mZ¼˜›ÄáDDÖ¯?qbß¾%K88¾=éþõúùwèÏÌ€ ˲e¾¾ííee‘‘7~=V|ûÝññ­ZuíZ``g'PTõª®îT»7~—}¿ú¼yVVIIÅÅUUÏŸ›šjjŠ‹óððò JH¬]{÷nR@ŸSõõÅļ|y䈚7÷Ïž*úuÀáll**7nÚ´kׯ sµf3B lØðða\ÜÐPOÏû÷çÏ««Ó­¿ÖVÖ ""JJ>\´hbƆ@ðó;8äç÷÷§¦Þºeh(&†Ã ÎÊ*/oiéí?0ÐÙxùò’%¬¬3Ý=¯£s÷nsscã­[ÚÚã¿€Á,ZtûvJJGGxøš5\\_Þ=scI ý II^^;wŠˆLþ©ñz¶ö°´LO¯¨(/¿zUFfªþÒ×—-SW—–fe…Ãÿ;¢¢¦¦––**Ó™Z©««®®µõ[ëTT*‘88ø+áP ìÞme¥¥ÕÝíïïìüéSOÏôWÉͽ}ûÊ•À@–={ÜÜ,-Åľ5´‚ #£ŠŠ¹¹…}ûOC£‘ÉÃÃ}}==ƒƒ³MC::ZYùñcQ¡¯¿gÏúõ¢¢ãÝC£q8 ©Ôñì4_>/»`ÁÆ»wspäæ¾|™‘ñeBw©­­¸¸­ ¤¥é¥VÇcîi4ø:RcdB¡š›]\ ·nupèì41yû6-ÍÍmß>iéɵX(”®®òòºº±1 CÃåËÇw©@A FIÉÞÞÏïèQ åæM#£ÜÜÊË'VfNN‡+WÖ¯ ¹?5u"> ¸zõíÛgÏjiýªÁ ÙØÔÕ­­×¯Çb££_¾œ¾ê•ÚÝ™]_?oÞÊ•::ÜÜtˆÁÈÊZZž>½fMoïë×..ééãp833//;;…244002B&ÓhccBÿÐÎÃÃÍÁÀ`h´€Àºu·oûú¾zeh˜›keµk×›7õõCCµµ;wž8§£sï^TÔýûkÖˆ‰MW ÆÆóòêëápié-[–/çâBüôŽ;ÉÏohøàÁû÷ÖÖ0Ø;Çß½[\L$Òõ‡H¬©ñó³°Ø¾ýÁƒððêjJ%“{zrrBB¢£++,Ð҃ë«SSËÊ&RÌÏ‰ÔØ›‘ÑÛ»`Á¦M;v,\8ÓÒ) °zõùó^^Ë—WU]¼hcsófaátï ãàPUݹSYyx8::  ¢bbßJéî„Ã……55µ´„…¿Ubõë+sr.YräÈ¢EŸ>YXìÝ{÷®»ûƒ·nYXXZæçëë?®®ÎÂò3–rþ|cã+WîÞut¼ÿþý™>ÏŸ·²RP@"Q(só[·fnéèxÿþÝ»vv¦¦“|<^NnÿþíÛ98²²<<¢¢ššÈd4šŸ_AA\œƒc¢#!±jÕæÍ¢¢ÝÝ11qq--SC¢‰ÄššçÏÏss [¤ÁÏ‚Å**ž<éêúðáÉ“K—òñÁá0ϺuW¯¾ÿèÑ–-t« ƒ±±©©ÙÛ{z:;:$%…FÓh òóÚÚ¾zuÿ¾¡!/ïÌÓš_­Ÿ¿[~Î*âñââ;wÞ½ëädl<:qï^\ÜÔ âïm­­aagΘš*(¬_ïãûöyzfe½ð š Ë\c<~}æã[¼XHh` 2òÑ£àà””ªª¶¶ÏŸ›šêë««»ºÆÆˆÄ´´'-22òñ!“wï~þ¼°0.îüùuëDDþùš‹h´ àÖ­ÎÎ×®¹»;;›˜üü=¡PººŽŽ‘‘ááÞÞkÖÔÕ=««»s§£cZÚôÕá,02Z¸ËÊbcëê&,-™ÜÒ|Ⴆ¦ŠŠ½}v¶ŽÎ;UUŸ>•–ÖÖ^¸ÀÅõáÃæÍJJ[·^¼˜0sîèèçÏeeíí óçÏŸÏÌ<®EôB¹ 8½ýÆ`øøDDØØúú>~,-Kt= †ÇÏŸ¯¬¬©)!15~…fdD ˜™.\¶lÙ2CÃñÉ9™ÜÓST”‘‘‘ÑÜ<: ƒa±‚‚üü,,LLÜÜ‹_¼xø°ˆH__b⇋ïÝ{è¡!////77?¿  €€°°ˆˆ  °0?>d9sáÂæÍ~~>>ÍÍ_v zÁ®[·6mâäüg$M$æçß¼¹x±”Ôì¿C¥¶·=ki¹|¹¯¯—WNNdäæÍïß§§wvŠˆJIõö†„Òó¦Áá,,JJÆÆÆÆkÖ¬\¹cÇöí‹“HoÞ?nhèãóõ´„F¬¬,(èêââRPÀãA°¤$/Ï×××·£ãõkOÏׯíí¯]{þ<+«©‰BáàPWß»÷øqe寯—/mm³²²² ·n]·®¶öäÉíÛè†câoß>w.>ÞÏÏÍ­¤$'çüù¶6››‡‡F+,|óæÚµS§Îœyñ"1±½L†Á°X..9¹eËV­Ú·ïäI IÉâb{û•+¯_OI™>Œ’Jíꊉ±²Z¿þîÝ—/ýý½¼jk·m+.ŽˆˆŒÌÊ*,¬©éèèí¡R‘Hމ‰›[Hhþ|vö¦¦Û·»p!=ýë“xp8/¯‘Ñ޽˗­]9}Í0ú]W÷áý{YYÖÖ·o¿|éè(!QZ**jf¶y3•úà¡áãÇ“+ FRrË–«W]]—/çååææãcdÄ`öî½uëþý¡¡Îδ´ØØúzEESÓ•+‰D?¿]»–.½qãÓ'†½{§÷¤¶¶OŸll–/·´>ÑÑÉÉ7ÆÇWU55uw ŒŽ …Ã1002²°°³óó ±³÷ô¼}ûè‘·÷äBºfg€Á‚ƒ75½w¯¢·oŸÜ‚BéìÌÈHNîé14Ü»×ÃÃÖvïÞ;UTFF"#œ8x0?_ZúÌ™û÷=<Ћ׬‰½}ûâE—»wß½++û:À@ÈÉñôtvNK31¹y32Ò×—‹ëæM_ßOŸÊËûú€•UDDMmÝ:SÓýû ˜™SR._Þ±cÛ¶»w'礛jÁ89—-35USŽ]·njýv ¥¡ÁÇçÄ [[uuOOOϬ,{ûôô´´œœêê®.FC¡˜™ÙØøø„„XY««ííÍÌŠ‹¤õ§Ráp ž°Žp8ƒBÁ`ô‚Æ?nOh4"±§§©©¾¾©©¯oæé$F‡¢tt44ÔÕ55ÍlåéA*t7—.}ý6nD¡ââÌÌBCÛÛ)NNÎÆæÕ«À@kk^ÞÖÖœœ¤¤Š iáÂeËÒÓÜÝóóç~N àã[ºôر+Wººf#ŒMS“o&·…ž{ÕÚúéÓ#G˜˜Þ¾Ý´ÉÕ5=}hˆDÂbóòJKùù••ÅÅq8(/¯­ ¹{7=ÝÖöêUKK9¹›7ÊÊòðسçêÕU«22®\¹sÇØ83sÇŽwï¦;5ókõówëÏtÒbcÓÖvvöðØ¶•µµµ¡¡±±½žApt”FC£YY¥¥õôV¯VWŸ7¯©)(ÈÚzåÊóç##¿]è{fè 6œW®TU-+sqyÿþö혘ÔTqñŒÏ{õªªjvÁ„¿Þ>L02R[–źº^ºdi™”tõê§OÕÕ )yè™_]Ý“'……55©©55jj ›69;»»ß»÷èÑÆùùFF¯^}+€ï÷BOÀ‘‘”UUýý?H¯cµ}ûÉ“..[·ŠŠæå=|hl¼hѽ{Ÿ>µµÍü|x¼¢âºuzzŒŒee—/§§÷õÑhƒ€€´´‚‚††ŽŽ¦¦ÁêÕ+W®]+#C¡ÔÔÄÅápXìÚµÚÚ;v89¹¹qq©«GF&%ÅÆ&$dfæä”—wtL-#‘>...-%÷ìÑÐE£½¼Z[GFJK_¾ô÷¯«KLtr ¸w‡ÇÓ36¶¡Hda‘•ݺõÜ9}}ú¹¦^½ÊÌüø±µµ¡aß>&¦ñåì?1^÷ö²±}moÑèùóÍÌ=úðáÒ%i鎎‚‚ÄÄââ1±¥K.,-½{wïÞÌÌ™‚&ÿ驪ÃIHÈÊ*)ý*µª¬,.ÎÍ•–VTTU•‘‘—WVžýw[[[[¿WšñÏC±+/ŽžZ¢¢âÎ-[–.½p!'gjÜè¸z«ª>^^þècf¦©¹uklìØ˜˜ØÁƒ9òíÝ›©¦&+ËÞ~ÇŽ]»;;ôôÜÝ‹‹ß¼ÑÖF¡††††úûûû»»»ºzz:;;;»º::ÚÚÚÛ[ZZZ>niinþü¹±±¡¡±±¶¶¦¦¡¡¾¾§‡“ÓÒòÓ§ððãÇ+*öïWPØ·/)i<22ª«;8¼}ûéÓÑ£óçOÜI_Ÿžž¶öÁƒ©©ß3ÿ4ôÔêê+Wnذt©¸8++™ÜÒ’’SW72B£!||[¶Ü¿励1™\Xéïÿö­¿rrkëø”g:õhѵk/^lÙR^~âÄÙ³/^ÔÖ’H;»‚ÂŽGîÚµaƒ¦æüùœœHäðpSSNÎÇ\»æã“ð-ƒøåý#‘ììbb’’óç31‰­­µµÍÍ“}ˆ^»ÖÓ3/ïÁ~þ¬,__//gç[·33gÕ ‚h4—¢¢žž††ŒŒ¸¸€ ‚$Òð008Ø××ÝÝÔTSS]•òñcuõ×Ã0 5þöí'NXY¡P¾¾§O?^W÷íT!0+«¼ü®]Ç›šª©ápMMQQ¿xñþ}YÙÔÐ镹äåmm);;?¿ãÇùøÂÃïÜ9wÎÃ#3“ŸB‰‹<˜’)!q옼ü±cIIô=)8œ™YNnÍ]]–´´ÄÄérJÁ`x¼˜˜ºú† 6èêjk++‹‹ óò²²ÒÓ£Ò³M ôö¶µ57×Õ%%¹»ß»÷ôiaá·SùÂ`¼¼ffoß–”ØÙÅÇkj.^ìé‰Ã]¾•˜haA „†>~üôé;®®ÁÁ%!éÇXŒ²±±·?rDS³ºÚÜ\OÏÌ,:úëT°ôIïüù&&66––»w¯Y£¤$)ÉËËÀ@£ ´µ••¥¦~úäííæöâÅû÷EE“«{} #+kk{ëÖåˬ¬›™]ºôu\;8œ‘qþ|%%=½¥K$%YX°X¤¯!öõ}þÜØXWWP˜˜––ŸO:ddTS»téùs%¥’’ÀÀìlBSÓÄDX8&f×®½{oÞ,(øÝ–gr$KËyó¦ÖAú6p8'§––©éž=óçgdÜ»÷âEu5ý~A…bg—•]¶LWWOOCCB‚››L®¬|ûöÁƒwï²²f—da\ÿéµ˜ŠŠ.\{óæÅ‹ììÙõv8œ•UCc×.cc4úÊ]Ý©5 0)©K—22‚‚¶nMHسGMíÈ‘ääÞ^*•ž#ÊÌ,99?çΠ uu#£ë×ËËÉdvöµk==KKÝ݇†¶n•–>z46v`‰·±ñóKM=p +K_Ñ¢ë×óò¦s¿N?ÿ´þÀ`ŒŒââ«V™š._¾hÑ‚BBüüŒŒŒŒ (F$ ´·××WTddÄÄ|úôáCRR]Ýàà¯|¨ªšl%AÀb‘H*uj‰„'H¤¸øÑ£ïÞåæ^¹‚LJ„ØÛŸ¾Í›<øøqÇŽ¨(CÃC‡h4OÏÂÂ[·–,¡P>ÎËKJJNŽŽŽˆˆŽ~ÿ>889¹¨¨£ƒ~Š‘^9Q^~åJCÃÕ«W®ÔÒZºTCCB‚‹«§Çß___NîìÙñd 0;ûêÕ®®7nèꆅ:egAwÞa0cã#G¬­×¬ÑÖ–’âäÄ`ˆÄŽŽÂÂÈÈW¯nܸ?.®¾~æ¹Òï¯`&{ H$ ‹¤¤¶¶®®¶¶”??Öׇ„¸¹ùù%'?Í ä ÍRÉçÍÓ×?rdÿ~ee6¶É+o$RGGl¬‡Ç‹ÑÑ­­_*<ÁÅ¥­½i“¦&‘ðáC\Ü×mþI0aaee8¼¸8-­¦fx˜nŽH>>K˃55§¦¥PúúÒÒ<=? ilü÷–öûïñ½Œrÿ5qñ£Gß¿ [¸ÐÑQIi÷‰Ì<_ö_qñ’’ÂÂÄÅOœPR²³7¸CRW××—è쌋‹‰©®B"ñx,–LšMú\D"±X4šJ™K"„¿[›Q(^^%%----*µ²2!!9¹ àû“Š_½`¹¹ÍŽðî““—WMÍß•…¥¥õõML$%››CB‚‚JJúúf·ƒÄ̬ °n¾¾PyyDDHHiéøágú•„„$$XY;:*+››'/ ‘œœ**ZZ‚‚YYùùuuCCT*b0Üܲ²¢¢PSS^ÞÞ>1’03óó32·´ôôü|Ñê‹þü3Àáx¿?æç…¢LŸú|?˼ÿðzÕÜyæ>÷ž{î=÷ž{Ž‘ØØÈͽe‹‹ËÉ“[·ji)++*Κ¥¨¨¨8kÖ¼yK—nÞìååî¾j•´´€€ž^ddkëû÷.¨©¡Ñp¸¨¨––¹ù† êê_§‘„Ãåävî¼y33óÉ ‹3à¿ÑÅbUUÍÍÕÕáð²²OŸ¾N6øó`0ŠŠ..¡¡÷ï'&&&>x0½¿ AAžžZZS¥œûgƒÁ¨ªúú–—¿~½eË·ù¥¿'qÚÚëׯ^=ož€Àsr³[þ1†fÏvtüð¡®îÞ=++QÑÕq²ò8Ü¢EaaÍÍùùáᆆcy§!+kaqè·÷Ù³vv Lžüw¶ç¨<°²‰þ-,ôôTPøÝ©¿×þ(Ô¬Y66W®öôÕ×WWøÐÜÜÕUX˜`i9&·0˜°ðæÍ))ÅÅ—/«ªþ¯G-£¬|î\qñ—/ÝÝ­­99ÕÕ_¾¤§×Ô´´”–vwþxð –Ö×ýŒÁÌšµ{÷ãÇÝÝMMYYÕÕMM%%••ÛØ((ü®wúòÿç€ ‘5kΟÿü¹·7?Ÿ€¿³3+ËÞ~Ö¬_“ôùï¤m~¿>üúäï¨ÏÿÞòƒÃÞ¸ÑÒÒÜ|íÚ²e8Ü¿Kž9üýùÏž ÁẺFF""--/^”–öõijÒé­­‰‰¾¾»v¹»&§de@Z´(4”ýÁ­ °l™„Äà`^Þ§O­­ãƒ;b0JJ'OÆÅýñ‡••„ÄÔ¦ÖÔ³uë† ×¯³j‡‹ˆ˜˜;æä´v­¤$ÎJuª¡ajÊLJFççoÙrùrP™“Éd\»véÒíÛåå †¬¬¥åèêâpÊððÐÐÕÕÕÕÚZWWRòêÕóçŸ>µ·¯'•ÚÓ“““ÐÑFOžO™)_UÕÌÌÝ}ÏMMž¡¡üü¬,:}ªòÿl@àp ‰D"Ù™ä@×Õ=r$4Ôϯ¡ÁÄdÎW×ÌÌ©•±[þ¯‡‹KCcß>QÑ·oÝÜ^¾œ,ƒÐËc± ˆ@ ‘(ƒ±+3Tj}}lìõë§OùÒߟŸ?y6òßÙž$Ryù¹sFFK—rqÉÉíÛbb‡O•ü÷·?.#ca|íš‘Q{û™3¶¶6ܽ[Z:<, '''G£ML AH$‰B!¿»ÎÓ'„Á`±PUåãcb²pá¥K55$-­­íèxãÆÍ›çÎEE¹¹åå)+³òxÀá³f98øù]¼¸paaáÁƒºº‘‘CCFF¡¡YYg΄„88¤§/YÐÐð+Cÿùÿ3@¨èúõîîææüüÑÑŽŽ²²;w¾{G¡ áñ$Ò¿+ õ_£Ÿ>ù;êó¿»ü€ †@ PH$ã\áð—ó5 HDDWwÓ&%%!-íðá¦&2YS‚DDŒŒöì¹t …êîf©BBBK‹Ÿ‚>|`çP(aáùóedàðææÄÄÖÖ‰94(”¦¦'OΜññÉΞÚðcd¤¥¥¡aü‰“I£ õôtuµµA¡Ñ3g.\¨¤ƒUUEDdg74´¶Ž–'‘VÚ0€ÃEE—.µ´Ü±cñâOŸ\½:7·¿ÿû QÙ+?]h´ææ/îÝ»páÅ‹ÿMK0™J__ssss_ …ÁôõޏÿUûÃáÒÒëÖmÞ¬¦ÖÒòàÁ¢EYYuu,×ßÞÞ‚‚ŽŽ‚„1™TêȉD£1™túÈH}}VÖµkÇŽÝ¿og—½v­‘‘Œ ™™YQ!,ld´y³œ\yùùó{öÜ¿_TD Ðhpxvöë×55äëkm½x±¸x``XXCïYöý=䉗f2ëëïß/+ëé¡Ñ¨T:½­­·—££þ™ú䯄#?8|ÿ¤A3f¬_¿y³†ÆÈHvö©Såå##h4k©ÓÛÛÒR]]]=šÐ‰d0æÏ§R,`ï7AAyyAA*µ¥¥¶ökcN¨¨HOOO¯¨`·ötzOÏû÷7o¼ŒŽŽ¿¿…ÅŽ¯_Ÿ=ëêzòdJJoïdS/ËÍ„ÁÈË{ðÀÃãСììŸI¾AüüZZ[¶\¹r玻ûÚµJB‚‡ÇÒ¥NNwïææÿ%³…76vqqqqt\µJN…jmýðáæMOÏë×ãâX‹RâåUU]²D]]AAMŸG£i4+ ¸¹I$–4TUeffe55±RÁM¿üð0¯¦æârú´¡á—/Éɼ¼;wîÛgc³`ßÝýáÃãÇ>>çÎÅÇWT|ëIÃéèúbfII¦¦êê..ïßÿH. HZÚÂb÷îE‹ª«CB\\JKÇnÞý|y Ÿ={Ë–‹wí²³ÓÑáåíïÿô)>þüùS§"#óóûûÇvs1EÅC‡®\qpu #‘jj‚ƒÝÝ33 „±7e·ý¯qƒ@HI­\éååá¡¡QZêë{éRDDmíè¦rs«©9;Ÿ?onN¡Ÿ;PP0<Ì^{b±sçÉÈHEE99õõd2 †@ ‘ H£Q(tútß‚—,ÙµËËËÂcc½½oÝzû–LVQ™¾¼±ÞègåókŒ‘‘‰Á€ÁàpAÖ6––„ÄÈHyyIIo/0˜  ±±‹‹‡‡ª*@ÿüù3f Ñaa ¿"áàï‘ÿ邌¬¬®®––‚‚¼üìÙÜÜÄã  £³råªU•úµ<#‘³f™›Ÿ>½oæíš*-½{÷Áƒ»wËÉ!‘55‘‘ûöíÛ÷äIM ks Ò×ßµËÉiÿþu딕ED »»  >þîÝsçnÝúø±³“FãâRW?r䨱5kª«“’—/wt´²Âãß¾usóðøôiáB//—ÅÄêëCBœÏž ¯®fÏœñÛÕ%#³wïñ㎎îêØÓ³dÉñãÎÎææ(Tzú™3^^ÉÉ(ÔÖ­nn{÷b0»»ß¸ñåËÈÈïÓ'ìéóQýA||::;v898`n>¾¤$õôÄÄܼéí}çΧO½½c3-;ýK¥²/?ìÖ‡Ýò¬6Ú±ÃËkß>++uunîÞÞìì¨(?¿œÖÉg³•Ãÿ‚ÿ „FÏ™³c‡““²2‘HEE¬œßh40}}ùùññ·oŽw±ST¾¾þþ}mm!! ‘*+ãã±´twð`|@™¯{‡SSstŒ‰yòÄή½ÝÅÅÜ<+««‹NAväm`€]ùüÞˆÕ×74”“)+ËÊjl¤PçåÃá(”òr‰ÁAnþ|W× 4532üüÞ½[²ÄÉIT”ŸÿWÝýò?}àp%KpwwqQVæáÇá…Ú´éС‹éôoå^°ÀÚzÛ6%%AAyùÝ» Ðè´´  ÈȨ¨îî‘‘–Ö<Ȫ¯††§gxøË—ûö‘H¡¡çÎED$'À¼y;wž>žœ,"²aƒ®®—WS“¬ìªUÖÖ®®ŠŠFF¹¹ ))##ÆÆ'N<®¡QW—ŸŸœüîÝІÆöí—.;–˜øì™ƒCn.;ŽeìŒßgÏHIÉ¥Kmm—.ýòÅ×÷Þ½²²Õ«·n57ß¼™›Œ<>3“ÏÚÚÚzÕªüü˜77Ö¯ü>}ž>'©Tjî\—°°ädwwzòäÂ…‡CCét5µ½{/^ §PŒ×¬ inõs™~ÿ²/?ìÖ‡½ò$,¼qcHÈÇþþÍÍ11AAÉÉ­­²²»w‡‡›šŠŠb0 ˜•õï^Mpø›’™™œ×ÕÕÚÚØø«þ²žÙ××ÕÕÖ&Î&¿÷m!H\|Ó¦û÷»»Yשkk½½,àâÂጟ>-+#SSSR"#SRRR"#ÓÒòò>}"ëêΞÕÑ™¤‡30 lkkh¸tiÑ¢± æ0˜˜˜…Åû÷Âû÷çΩªN~Y‚H8üç}þ¹¹—-»zµ±±¥åÆ•+yy¿ÿ$ fáÂÀÀššîß×Ñ™î…G8\DD_×®Ç+*F/  ´¶æçwtttäåUV––¦¥•”TTäätv²Zµ¯ïíÛ„„³gW®”•E£ÿm#†‹KUÕϯ¶¶ºšH,/wsÓÐëwnncã›7;;{{ïÝ31ááÿ=°°xü¸¿¿¹y¢´LÎôÊÃ`""ffo߉ÕÕ­­ðózkC¬ìž=qqCC==ÁÁ«W+!H¤¤äúõìßïî~à€±±Œ ù£Zñò®Xáï__ÿåË©SÚÚ?~‹•Çáôô"#»»««ûú^¼07—½Ùƒ‰ˆXXÜ»×Ó38cg7öÉÄïëë_¹ÒÚ:4ôô©¸øT÷ÂØmÿŸ…’—?~üó窪²2EÅÉ¥ƒY¸ðúõœ"ñÓ'GGyùQ³ƒY´èæÍÜÜÁÁ¬,[[™Éô?nO4ZIéüù/_ª«‰D!6ÖÓsÅŠ™3gÌPPX¾üÒ¥ÂÂêjáÕ+sóÑ–‚Á„…·n}÷îË—º:55sóÇ ““TTÄbÇä†]yc_>ÇÆWGGjª¯ï•+—/{{ß¹“˜ØÖ64ôñcTÔöí3f°$……MMß¼!>|ðó[°€›{ÎgçgÏêëÌÍåå-:}º¾¾¿?:zÓ&aá?¿ê×Ëÿ¯ÐE_¾¼ok;uÀÖMÚ¦&"±ºº»;1ÑÊJVvª‘ÎÍ­§÷ðaGÇ—/oßîÜ9~™ny..5µk×ê뫪òó–•Û´B¡TTNŸ~û¶¿ÿljúþeW~Ø­{å!HBÂÊêÝ»ÁÁ’’¸8 !¡1í &fkûòeE‘ØÝdhÈ ÒÀá¯æ?uñ X¶lÇŽ¹s++jj¾¾+@§÷ô¤§?|xîœÏÕ«>>>>W¯ž?RT4Þ¹g:€ A  •Ê`LüÄᔕ]\^¼ÈÈøðÁËKI‰‹‹ÝwA^ÞÅ‹÷ìY¶ ^¾|ôh¢ÀŸq¸Ù³7oxú´¬ìåKWW]ÝÞÞW¯œ—-ÓÑY¼X\\DDSsöl%%eemmaaMMmíݻ߽Ý¿ÿúõ—/ÏœQWÿ·*¶ÆÆØØøøÒÒ±ýP*µ»»¥¥¿ÃãyxP¨¿òb)™œ•ž›ÛÛ;*«tzKË›7©©55„¬¬šš¸ø×'DJsó³g×®?ðêU}ý÷Ý_X—z]\ôõ;:nÝ ýôéû{Áì”g2‹Š=JO=#£»;3óÅ‹²2&SJjÁ‚ÑEñ?‘‘¢¢°°W¯::äå×®]µŠáƒ‘—7554äæ.- ûvtw˜ÝöA8‰„Ã``àéÓË—¯^MN®©il¬¨HK»zõòå¢"8\CÃÈhîܯµ èë_¼øì™§§ŒÌƒ––×®•—OîvÈ®¼±/ŸÄÅ…Çóó IJ*)ik+(`±Ÿ>ݺuüø£G¬Ó#–Ü0™L&Â`Œ´ôÚµ¾¾NNpíÚÑ£ -- ƒÁ`0™Læ×Zøgøòÿ×ÐÓqöl||]Ýä#‰WS›7‹moÏÈÈÍíé;;¡Ó»ºrssrZZp8-- ‰ÑñÈdVUåäTWŒ0™ÊÈF§·´”–¶¶’É@¡ ÓhL& ƒýÞ L&‘X__QÑ×ÇÍ-##&&**-ÍÇ×Ý——™ÙÙ‰ÃÍš%&&""/ÏÃÓß_RRW7<üw ß A||s権 ‰µµ †€€¨¨°°¨¨¨(‰TYÙÞÎdJJ*+KHL¶íú£þýÝõa·< 5c†ªªŒ “YYùôiffOϘvèèHN~ø°´ôß ó9ü3ùO¹Ø1==/^=ºo_q±¬ì¾}©©o1™ÃÃMMÅÅ™™ééc.vtº™‰Äž"e2©T2™J8F ÆÊ ˆÇëëŸ;wë–——”Ô«Wff×®•—{ËàGjKLlùò–-#?^µª `põtJTTWwãÆ Ö¬ÑÖ––æãÁÁÁ––²²ÒÒ¾>aaì…A<cõd2Ñh^^4úßÉhx¸¸8&&.®³ÓÊÊÚÚÈHTôîÝôôåËW­ª®¾}ûÅ‹Ñ;ì·'“I§S(4“ÙÕU]ÝÕ5V†ÁjmmkF£EDXáaF—ì$ `jzàÀÖ­==ÑÑ&&¾¾yyÂTCìÊûòÉdÖÕEDœ;·kW@@c#ÈÉÙÙ½yóéÓÞ½ÎÎÚÚ‘‘ŽŽééD"“I¡ Œ0™üüFF>>ÎÎÃÃÑÑöö›7³òÀiiAÒéÃÃCC6xÆï”ÿ¿JK47çäŒì˜\óc±¼¼X,ŒŒôöŽŒ|}wvx¸¿d¸¸øù±XV1D"+CÕhû2™4ÚÈkük!‘ššJJš›a0uõÙ³ååeeQ¨ææœœü|cÍšåËgÌ”àâêè mnþù›`¿ Œ‹‹‡‡‹ q8SÓððÔÔÉœûûúÚÛˆÉò5þ¨w}Ø/Fssc0L&‘ØÝ=44^ß0DbWÀîꋇ_ÅìÞÛ[X˜›K£‰Š~;è)©"#kkmmG'SD"yxxxˆÄǧÿ; ÆÈHÿà ŽÁ ޹¨À`‚‚K–¸¹mÞŒBEEYZúú¾~=¶g2íNƒËÉYYmß®©ÙÒòøñŸ?Œ={öáÃ/^ÄÆž<) úôiQQCƒÁÃ#'gb²wïþý¼¼Xì—/††‹ϘQPðâEcãdÉki´––„'§mÛ~¦©T–ñÀZøpqý;Ct24گؗþÀ`Œ€;Ñ!‚¸¸Xˉu¹ýç‹ÕÒ:pÀÚš‡'1ÑÙ9)©½ýûOc¯< †@°NÝ@F¯ëÃ`¬úƒ ™ÜÐðý¡ÿ,†‡¿|yô(6¶«kûöM› ´´ðx## ‰êê§O_¼˜ì–ÊtÛ“Nlk`0.®‰Ë(d¹õ2™¬hUãe—Nïꊈ8u*8xÖ,w÷{÷üýß½ÓÓsp˜ÜXcWÞþ¬|R© ¯^…„|þìîîí½u«’—žþñãЕÚ×WW×ß‚K—òòfdXZ^¼XXÈ’ <Ä`úû›šº»ÿÜrý÷Êÿ_Øñ<µN#‘††FF…âæþú C¡p8 Èä±þb2i42yâSYçzÿ <0P__^>0ÀË«¬¬¬>ÖJa´_@æåÅãQ(ìéù·h~ÿ$8±å€áá\\6n\¾|ãÆ³g½¼œœöî53³´}N§÷öVTäçwuáñ HKÿooñ²[vË“HEEuu (/¿ví‚<twÓé ‚CCgÎDFÆÆ¶·:AŒzw3tú·ç0/-=s&]]}õêæÍ7®]{÷nHHLLnîÂ…G._noרøóû¬0'+»f›Û¥KÁÁ&&drlìæÍÏžMåZ‚(”¸ø¢E«W/Z´`àp¬˜lºýÝå7dr{{CC?ÏâÅvv––zz FU!$„D~ù’””š:–ÁjºåG÷ö™Làá±´¼r%,Œ@¸u+>¾·WIi÷îS§ÔÔúú¢¢ììÒÓ¿½¥Ašš&&zz††02âï?Ù•d8\NÎÚz÷n-­ŠŠ»wœ**¾o¨°[ž%µ‚ºº§N…‡_¼(!Q_/)¹yóɓ˗Ã`©©ÎÎ/^ŒÞN‚ÁxxTTŒŒÖ¯×ÔäãÃbåågÎÄbAPHhñbkkKK£ºº  ..1±¢bü.1»íϾüÐhƒƒ­­ˆŠ.\h``h¨¯Ã 0}}Ÿ?ggWWøO"•—?}ÓÖ¶}ûÁƒRRµµÞÞ‰‰MM_vÛsxøÓ§û÷_¿&Nœ¸víèQ":º«kÎ7·Y³ZZ¾5kNrrÂã““7oÎÈèîþÙó‚¿Bþÿ.0™ÂÇQQÂóçW®\¼èæaaùù ¢²gÏåËÚÚ}}QQ[·²"b._þwÓŸtz__yyU•*+ka! PPpáÐÑ10Ð×'  ©©«K¡DEÕÔŒ…™þ«ôÉôÊ—––—ïØáåÔßùrxxQÑð0ßܹššTj\œ—×­[UUÎÈ›ìÖ‡Ýòmmii©©wïÞ¹xñâéÓOŸ64ÈÈlØpøðÂ… Èš8pøëáH°¢Û™›ûøš˜ÔÕ;§£óömUUmmNÎÖ­÷îÅÆÆÇGFîߟ½xñ•+ùùD"Æšò!F£!ˆÁèíýÚa¥··¤¤¸xpPLLKKV‹ÁÊJ2™Nï쌎ޱcÍš¾¾={>zÔÍíúõcÇfÎÄ㿞zz*+óòÞ¾õ÷ÏÈxþœe 1™DbMͳg7nÔÔLTcÅÅ!!uu117oFG{{KKß¹“•USC$¢PÒÒzzÖÖjjµµW¯îÛ÷åKUÕ—/ÅÅË—««gfÚØ¨«74tvNm¡Ñ󿹏\¾|îÜÂ… ØÛÛß?8XS“žžš ‚ßþ‘˜—wýúáÃââîînn—/?|Èdö÷—”„†9òêUjjk+»åG $:½§':zÿþ+Wzz¶nÝ»×Ãcî\8¼¾><üÄ {{W×ɃxÐéBQQZZn.”•MÌeÁ‚ub¹g¨hjê‘#/_N<àÏ”gÕáõëÄĬ¬7¢¢@ÐÁÁÅåèQSS~þÞÞW¯.^\¿þðáÄıÅ9k'{Ù2këM›dd ‘>~ÌÊjj’’Zµjýz+«ÊÊÁÁ´´¤¤‰ vÛŸ}ùa0º»“’NŸ¾ukÆóç­¬nÜxôhÛ6©¼üþ}sóõë'H@"ÕÕ=þîpð ŽNBB||]Ý×£Ýö&³¿ÿíÛ3g,-=<¼¼ÎŸ··?vìòeª¯ïóçœ×®=uª¨hôî“I¡´´|ü˜žþî]MÍà Î:KÊÏ¿~ÝÂb×.>¾k׬­mm ÓÒ|}““Ù“·Qókúò96¾ ¨¡a¢ÛÝÈHEE|ü½{ÏŸÏš%$$%…ÇÃ`%%==]]‰‰6xxx{_ºtø°—×Ê•ÐÖöþýñãöö‡=>‚]~·üÿ.]4±\_ß—/oߦ¦¶µ}ß\c2Þ½sq±±Ù±cpÐÃãÈŸ ˜Ì®®ÂÂGŽY¹ÒÇ';»¿ŸÁÀb;:òòÒÓß¼iog%³ Ó{{?ÎÌLKC¡XÚ„N'Ê˳³SS‡‡»º¨ÔŸ×¿Ó¿drmíóç/_¾}+"‚D¦¦66R(ÃÃHä›7IIéé08˜”ÔÐ0fZüUúdºå)”Š ??;;2ÙÕõøq;;w÷Û·÷ï§ÓûúÊË_½ºvmb vú—}ùa·>ì•§Ó;:ž<Ù±cûvQQ?¿ãÇÚ»·§'##,ÌÞ~óæ×¯íìöîåâšlnâÀá÷²BrÏž­¬¬®þ«ZYYRòéÓܹjjÚÚJJªªÓÿnkkkëDµò;àæ^¹òÞ½šš7MM×®­ªòö~÷îСžžƒׯ·± oi]¨pqÍ{âÄ»w¡¡ººþþ6¸¸ˆ‰çæž:5sæèóŠŠÎœQV^¼øþýººÑéùùŒN ±°(.>|xß¾èèo—?cJàâââ‚Ãéô‘‘‘2ùgÔ †ÃÉ˯[·{·™™žžœœ°0 E¡tw×ÔÆÇ?x]TÄ®÷5‰ˆ,^lffeµp¡¤¤//ÇÅ…D‚ N¡‰½½­­ååyyïÞeg×Õý8 ‡_+ŒrZZeå±cÅÅ+V,]ºNÎô]Aü|EE##>¾ÂÂøø¬¬ææïMÀì–ÿoƒDÊË{xäæ&&Z[?y²ví‚gÎTVŽwHý»µ'»òö»åó÷¿/Gþ9pàÀá¿Èôid¤¤$$äÐ!ww"ñË—ÊÊÒÒ-[tu““ûû««¿>I.+»xÑÐpùr8|hˆ@ P¸¸ll””ââxx¸¸àp­§§¡¡±±£c¢IÀdöö¦¤xy™š¦¤ü¸F •:<<4ôç.3CCUUqqW®xyÅÅ]¹ò«Ú‹NïèxÿþÉ“€€÷ï9ƒæ¿ƒÑß_^ž˜ý{Êÿ—A¡fÍ21±¶–“kmŽ~ú´¾þÛ»zœöäÈ?8pøëùž qàðs°RårÚ‡"X,;k§þ)pô-Îøåð¿‚s‰6øû)hB@`Þ|xãÆ‹ŽŽ3grq= ‹UWß³çýû°°;µµY) Ù-ÿwƒQUõõ-/¯®f]xeý-,ôôTP@¡þÍÂDJHhk¯_¿zõ¼y“¥@ß>Åů_oÙ",Ì1ª%„¬¬…Å¡CÞÞgÏÚÙ-XÀÍý¿kßéÉ8pàÀá¿Î¿`1‚8œŽŽ©©†ef>|hgçèxüø† §O§¤´µÍžmlìêj` (‡}G @XXOO_Þ¼1“A‚H‚ÆL*vËÿ½ ‘ÊËÏ32ZºTYYMmÇŽ  ¦&@"ápü7ïæƒ ¯«{äHhè­[[·*( ÑS•8…B"‘H΢ùWC¥Ö×ÇÆ^¿~ú´—WXX~>»¸þzyàÀ8ü×ùi`2ÓÒ.]ºp!)‰H¤RG`]]ïßGEÕÖ>¬¨( €DÆÇwuMÌU„Ū¨XZ*+c±?~ü8š[~jØ-ÿ÷h ¥¯¯¹¹¹¹¯…Â`úú¦Î¸Îï…Fkn~ñâÞ½ ^¼à´8pàÀáŸÀ¿"Šƒ1õöŽJŒFKJš˜8àädood4{¶  64ÔÜ\Zúñc\ÜÝ»¡¡ÑÑEEcçì–g§æ¼¼ªªK–¨«+(¨©ñóÃáh4¦£³b…77‰túÀ@UUffVVSÓD#…76vqqqqt\µJN…jmýðáæMOÏë×ãâêêX‰}Z¸ÐËËÅeãF1±úúgç³gÃë«)À`ºrÅÁAU•åzJ"ÕÔ»»ffcã‘ÝöA£ååwï>wnÓ&íæÍ îÞ­¬dC]µêàÁãǵ´ Μ9sæÍ›Ž`OX5cWþo '/oeuüø¡Cvv::üü¹¹±±/Þ½Ûß¿nÝÞ½3g&%{–‘ÑÙ9¾£chèýû22£åQ(EE ‹5kæÏ‡ úú””ÐÐ?¿ààÌL:}õê'¢¢®\ÑÕåáa90Âáüü::VV[¶xy=|ñÇúú›7S?Ÿýþb§>Ó‘HYÙU«¬­]]ýü¶mC ™Lcã'ž?õêÊ•U«††*+‡†44¶l¹téØ1UU,–õ]ƒDêèhhhjjia2••-,lm—/——çâúzÔ°Û>p¸ˆÈ²e[¶lذx±˜Øø6ƒÁxxTUW­²µÝ°AQ‘‡‡å0ɾ<°+ÿ¿·¿@‡ÇÀÀÏ/<üîÝýû„sr*+…„¶nŠzöÌÓóàÁ;–/Ÿ5 ƒa}ƒÑÐðô ùòôiuõžž””˜˜°°””Þ^míÓ§ÃÓ“==Ç; Oì ŽŸ‰D¡øù±X‚3EràÀ‡ÿ$™™ÉÉqq]]­­¿ê/ë™}}]]mmâlòkÞ ùøtt32bc=x°j•€††“Svvdä®]::£AØ+ÿw…’—?~üó窪²2EÅÉŒ..5µk×ê뫪òó–•[$¡P**§O¿}Ûßÿჭí肬¬RS¿|ii¹sgÁ‚Ñ%òÔ}Ã^ùŸ— ‹Çûû››/]Z´hªßáâRUõó«­­®&ËËÝÜ44ÆJrsß¼ÙÙÙÛ{ Ï÷‚$%wî|öŒ@()qvVVf…ÀøuÏg—ÉëÃN òò𛧤TW‰µµÞÞÚÚ\\8œ±qlly9‘8úL FOïμ¼þþW¯V®äãûú)8œ¾þ•+­­CCOŸÚÙ‰‹}Ï‹ÝöÁáôô"#;: &f` ½ýÚ5CC<þë ‘’’ë×8°¿»ûÆÆ22Û8pøoð¯L‹@ˆŠš›oÚ¤¬L§çäܹóüy{ûäî0 ÆðpaáË—‚‚Û·««KJFE}ïÉì–ÿçA||s権 ‰µµ †€€¨¨°0ëS©²²½É´³SV–@¡ ¾žH,-}÷®±‘—×ÉéÈ‘£G“’||nÜxþ¼¢¢«ëÛûNL&{åÿ:ccããKKÇÜî¨Ôîî––þ~LU•‡…b~°Üþ H@`þü+¶l17_¸PEeÆ ~~~þY³ää ¦ ƒùú¬„½ç³ßsìÖgú0™UU99ÕÕ##L¦ŠÊÈF§·´”–¶¶’ÉÀÅ5ÍÊ‚ 7–/G  ºúוÿ'Á`ŒŒ 3™ƒƒQQ&&‹mßþþýwíÉäÖÖ/ΟwrzñââE FFfÑ"ss/¯Û·OŠ¿{·»[IÉÌ,)©³“µÄc·ü_óî4k9þ=p8557·'ÔÕ?~ܵËÀ`Ó¦èèînƒåÂÄó{÷T5žÞóÙåçë3]˜LL¦ÑÆ×œÉd2õ›°Û>_›Bp8/¯„7÷ŸYöÿ¬üÿ®þb0FFGF@‹KX‡cŽê4Âá&: ‰4442(7÷è™ä(0 …áP@& Hÿ«ë8pàÀÃß›É rqÉÊîÞíæff6cÆÇ¡¡žž¯_÷ôL×ý…J­­}óæãÇ11,öÇ{íÓ-‚<<‹Ÿ9sëVBBLŒ……”Ôÿr×–Éd2Çvä'+A§÷öVTäçwuáñ HK³,Á©¯OOˆ8u*  ¼…RRRW—”œê »å§ÿ®t:ƒ‚0ýüùÌ×=ŠF ËÈàpýýåå55ƒƒ£‹LŒŸ_GgÍš™3ÿÊþ«êóëÍ¡Ÿ¯ …B$Òh(”€7÷Ø FNnõjƒQg³Ÿ“‡_!ÿ¿²¿Èä––¢¢²2IVvýú•+¥¤Fßyx´µ­¬45Çß}¤PZ[‹‹«ªH$QQmí¹sÇ'æ…Áxy•”ÔÕÅÅI¤ÚÚOŸZ[¿>Ä`]\BCïß utTQùûß«äÀ~=ÿ‚$Ä`,°·wt´³“’"’“sr„…׬15]±‚U‚Jíì,.ŽÍÌlk™ü)Tjkk^^ll}ýš5‡ÿ8XÄôÊc0³fYYmÝjhh`ÐßíÚ±c?øW@£ ¶¶ *ºp¡¡¡¾>70À`ôõ}þœ]]Ýß?<\ZX^¾c‡—W``PPÿåËááEEÃÃ||sçjjjhP©qq^^·nUU‘H€Å.]zãÆ¶¶­­ÏŸGG¿_[;8ˆÇ+*nÙ²{÷œ9JyùíÛ--£qÙ-ÿ³Éíí ýý<<‹ÛÙYZêé1UU„ùåKRRjjk+»Ú™Ì¡¡êêÌÌ–11;»cǶlIO¿q£ªŠŸßÄdï^//55€_ézöϪ°¢É©¨­_¯©ÉLJÅÊËÏœ‰Å‚ ÐâÅÖÖ–– FuuAA\\bbEÅÀ»O'‘𛳲ª«!èòåcÇœœìì@° €›{ýúƒwîd‰hoÿyy`_þo |üèçÒÔ”šzölDD|¼‚B||i)¯£cjº`>Þxe2 „¢¢„çϯ\¹xÑÍ ÂÂòó@EeϞ˗µµûú¢¢¶nÍÈl hjš˜èéÀȈ¿?Ç 8üùW¸ØÁ` 8<ÜÔTXX^ŽD +))+^« ‘jkXN$VT–—··÷öŽ9Ñé==¯^=y’‘¡«»dIÿ¨)ÃnùQ1±ùóµ´ °ðâÅØØÊÊ?»èÿs0ÝÝII§OߺµaÃùóVV7nËIDAT®þ«ZYYRòéÓܹjjÚÚJJªªÓÿnkkk+k™òχ—wÍššš°0ÊÉiî\[Ûˆˆ¶6Î’ƒ¿ž•+oß®­ŒD£íìddlmN»pàÀŽq¢Øÿ5„ÐŒ4Z^Þýû/^Ljœ¦1AAAAn¼Ã!!±nÝž= ¢ÑÕÕ™™cáÑ9pàÀ†¼‹]~þÓ§7nü}꣡±aþ}TjUU`à®]ÆÆÿËú‰Dâ¿%Â&çèÑÂBáèQv¿‡Åb±³fqÚ8pÏ?Þ@3H8LgÄÃ?D¡µµ54æÍ“‘áãC¡FFZ[ Þ¼ÉÎ..îîþkÃppàÀÿnþUy8pàÀáß“I&÷ô”•½Ÿœ\Vöþ=§E8pàÀ‡ß çÒt †Db±8÷õ_ øù,;p8/¯’ÒÂ…óçËËÏZò¿4úÛ7Åáp8 æëô“8ü÷€Ã……ÕÔV¯^µJUUHÎÙjšñò*(¨«ëè((ððp‚…ÿÁp8)© tuedTUŒ¬­õõ9²þ÷‘Hnn^^>¾ñ)£µ, P||ÂÂx<û«ÂãeeUT´´ä丸&ÿ6rqIK«ªjjÊËóò"ìÔ æåÅá~§\¢PbbÊÊúú::22xþÑ£ÈHسgÆŒ Þ¾ü§èûÿÄÅ% ÀÃ==##“K< ÅÇ'$„ÅR©Ýݽ½CCSõ ÆÃ£­½k×Ö­ÒÒ©©ÁÁOžTU‘HÓI(€DÊÉY[ß¿ÿô©’’··­me¥›[p° —¾þÎ!!õõÓMÄþý÷åçàå…Á;:º»'ß_×¾""7Þºuõª±ñ‹‡;:ÆÄü|nÂß3¿€ 7g޶öìÙ==¹¹Ÿ>M®óÆJóð¬]““ãçWUµy³¢âÞ½ùùÓ Øƒ Þ»—œ¼iSZÚ† »w?xÐØ8Ùo ?¿±qttU•§gUÕªUìÎþHäìÙööþþ))kÖ<¾d‰ŽÎåË……ã¿@HKÛÛ‡‡?~|èPaá¶mªªNN99Têå‹ÕÖ>q¢  )iöl//eåM›BC[Z~­ AÐêÕgÏ>îáQXhh¨¬ìå•›ûýU@„„©é±cžžÊÊ))®®gÏææN–\%I 66W¯î߂׮9;‡…UT°›cï‡c ý4 FI‰§ç† ÞÞc¦K™ Ñ‚‚22ZZÚÚ.^|øðŽ^^ÃÃûö…‡{x()¡Ñ‡/+ AX,þàAR’†Æ×K\&³¿?=}ÏccOÏŒ "‹UWwrºx11qíÚOŸvî40ps‹mog0¨Ô‘"‘H¤ÑddV¯Þ¾][»§'::..;»«k4ƒ"‘ nÙba¡¯/,<8˜šZ]ýèÑÕ«c¿H£µ·§¤9²aÃåË**?º¸ÌŸÿógdS œŸþüíÛÏŸ?}úìY›Ù³«ª\]—/_²äƦ¦o'_vË!)¹~ýþýÛ·ÏŸÿæÍ£GññõõÓY#‘rrff›7/Z$,œšêï?] ˜5KW×ÐPWwáÂyó¤¤DEùø0cp°³³¦æÓ§’’^¼Èϯ«b'ÏË(Þ¸ñÂ…ÀÀ;wìì è޽͛ ®]Á;££CCãâÞ¼QVvv¶¶vsKJª©™\Ã`x¼ºº­­½½­m__DÄ­[ß7à§‚-²±Ù»wéÒ––àà›7óòúú ˆOMmõjSÓ%%'7@‰_°@EEFfx¸º:'§¤„@˜ªtzssb⇠ $Äbee×®uu=}úڵÇåå <=wïÎÉééa2UU%$fÎTV67¿|9'ÇЃåâ"“[[ëêÊÊÊʾ|))ùü¹´4#ãÍ›êêÁÁ±þA<^EÅÉÉÓÓÒröì‰ãuLFddæÎE"¹¸èôýû¯\9sÆÔtr!“kkããÏó÷ÿø±¯_°àäÉk׿ÍÃ`¦bbúú¢¢àâòðá“'¶¶SKîÈHy¹¿ÿþýü‘‘1Õ<¾ßxyçÍ33³µ56ð÷¿~}ú '%<©­ÅN]—‘A H¸t)'§¤„HœZÞ‰ÄOŸ\]ML\\’’zz~&ØßSÿL4Z^ÞÜüÚµÈÈÓ§7oVP@"G%§¢âéÓ¬­Oœxø°ªŠL†Áôô|}_¿ qtœ=€ŽŽW¯vï608xðáÃo„Ãñxiicã  ŒŒE‹dd֮ݳçþ}jÃ''QÑ©6I`0!!mmQQNDÄÂÂØ¸±±®ŽJ]´èêÕÇOœèï·°8s&&¦±‘Ý7‡ÃEE—/ß»÷Úµ«WMLfÎ}ß¡¡ƒ‚ÌÍ7lðóËÈ &J̯h ƒ‘”œ?_MmÞ¼ü|$òÏÍj¿c~Áøù—.usûã°0UÕ„ss#£‹ËËW®|ô¨¼üöm ©7µtu?îìܶí[ ”•µyóÌ™¶¶ÏžõõÁ`ƒA¬ì–-®\I"ÅÅ9C ˆŠjh(*ŽŒ´·Ïëípö¬ª*ר*EJ Çã55##SR–.ŸgŽDª¨¸pÁÔtÏžÐо¾Ù³MLV¯VRâãÓþÔÙ™—×Ú:k–ƒCP·wGGPPqñè…BÍšen~òäüùCCoÞÄÇËȘšÚØHIÍBaáóçiiÅÅýý㥋UWß¶ÍØXX˜NonÖ×?pÀÕUQ‘™•JmjJL¼{÷æÍÌ̾>””´²JN.*:{VGg2ͯ¤ôömW×–-ã秪ªË—mlNžTT¼sç?ÚÚììæÍ;x°¬Œ‡gÞ¼åË-,–/¯¬ôò:wnj RS[»vÝ:ŒŒy²wïÖ­·n8°zuxx_Ÿ  —׃;wJK#‚4-)¹eË•+÷îíz 473™FFÇGD,]ºm[xøÁƒ¦¦çΕ—ýF$RIÉÍ›þþiiúùŒ*Ÿ? %+««ËÍýꕽýŠ/¦¤àñgÎ/Z¤§÷+ÊÿU@ˆˆÁ•+¯^mÛF£ÅÅ=j`°wohhNÎвòÅ‹¯_§¤ÌŸ÷î¡C;v$%õô€ 7w®••‡Ç£GAAqqÏž ˜™­]ëï_Y9~Y‚Œ¤äÊ•..gι¹éê DEy{/Ztð`DDaáDs–Á,*zôÈÖvÁ‚ÂÂ;ýý?~LMµ°¸pÁÃãÀË—ß¼©¯ŸìL ‚,X»vçN qñ±¥!.®§§««¬L ¦¦–”ô÷4ZSÓ“'MM7oþL»!ZZ††ââÝÝïÞef¶·O?)+kddm­ªJ „…ÙØ˜›;åëË`Œo&“F¡RAPQqË–sç®__¸°¯H¤Ph4„ÃÑh..,–Ÿ_NN]]SHJòñéèøzšFëéÉȸs'0ðܹϟÉ䉟âpÚÚòò»v­]+"òøñ­[çÎ=þc72©©)%åñãŽ^^QQ‰ÙFÁb™Ì-[èt ÊÊÞ½{ó&+k2;:}x¸««½½¿ÿ¯0(”îîÂÂôôîn€ QÑÍ›££££}}µ´¦>û"ñãÇ3g–-Û¸ñéÓ_íóÏÒ?hôŒúúŠŠðñãîÝefvt°ÌìÏŸïÝ»z5#ãøñ‡utääÐ蘘Þ^YY~~&³µµ¤¤¶¶··½¨©¡PøøääøøÆ¬¬“ ‚„FCÐðpAÁØÙÍ{ï %!áèøô)™\]ýüyPPHHq1ŽF_|3™d264,X°n¹yBÂùó>>7nÔ×ÿÙ¾b0zzž=Û¼yݺˆˆþ~2ytÔ66>|xëVaá®]çÏ/\(%…BH?Óþ\\óæ?þøñ­[ëÖ Œ½"  ƒÀ¡CÏŸïÙóí¸A ƒA¡h´äd{ûÿ…ƒèÈHMÍ;66;v<{véÒž=ººÏž…„ܾ±i“ˆÈX_Ã` //¡PÚÚAA……&&ÊØ;‰éé{÷ššnÚôì‰D¡tw75Q(zz””x{«©••ijž9""òì™Ý£Gee¯©©  !Ár’A^^ gµ ÇÍÍËËËËZ 0ÃÃõõ55]]$“É`46ÆÇ>¼}{i©¦¦ŠŠ€À×FÒ˜| ·¶47OæMA¼¼ZZ›6­['#SPóäÉijJ$rΜíÛ04ŒŠZ¹ÒÁÁÓs¢ŽäâRW¿~}Ý:•G._vv íìüþé F¡ôô|ùRWÇÇwäHBÂóç‡3™,WPB"#"²²V¯f¹ÿ ƒÑÝ“óê‰Ä`ÌœùãžÅã/Žˆ(/¿{wÝ:>¾¯ÍÝøøÑYRTT_ßÃãÁWWUÕææØØ¸¸®.{{Ÿ«W33ÓÒLL¢¢º»Ù9/ãÀ‰mH¤·o=JMíêšlPKJnÝüáÃÑ£ÝÝ'OZZ?þàAYYkë˜Â‚Á„…W®Ü·oÛ6žÌL'§°°ººÑ}gÖé—×±ced„„<}êçWU¥«»woZZW×·SÓÈHMÍÍ›6¬Xq듉Dª«_¾,/?cF{{` ±±“SNk7]Gçòå°°S§ºº<,7·˜˜‚ÏÀ@ee{û¨iÂd ••EDœ8adD Àá¹¹ááW®8:&%™™ùùUUQ©\\ÊÊ;v<|øì™‡‡±1ž—÷à§çÁƒéé­­Äœ9óæ-X𽺹»oÛVZºaÃÞ½û÷ß¾]Zjg÷ö­»ûúõû÷L<º§RëêÂÃOž´´ ÿÿÜÜëÖ½|™íë[Pàåeiéî^Zúµñ ‡ËË92U ŠŠnÚôðáƒ^^jj—Î0+&&!ƒ ”TddròêÕ“;ÈŒŒ\½ºfM\kM$~üxùò† „Áðò kj&$„†Þ½;88<ÌÍ-(ÈÏÏrŒ¨©ñõݵkãÆ´4AA,…B"‚Á€Á Ó©T*ux¸¯/ àÓ§÷ïóó++~ÎÄ€ÃgÎܸÑÞÞÕUIék# ˜L"±´4>þÎçÏ[ZFG:£¤tòäóçÁÁ66SÄH$xz¾{—Ÿ?Ùç4ZKKl¬™™žž·wNÎ|â¿í#žyóŒW®43›7oò Ñúû‹‹ÓÒ>|¨ªúöŒ!"‘bbìí Ï›|Ûh$RYÙÃ#**6vÁ,‚~½ãîßOÿ|*µ§§ºº³æÍ“—g-(  …µDœ1CDèêJOïê¢R©Ôžžòò¶6&ÓÞ~ñâ%KÔÔš›UTTTÐ莎ˆˆÎN:—wþüƒýüllššŽss{ÿ^[ÛÏ/+ëôéáá'LMOžŒŠª¯'“ÅÄFõ˜˜˜©é… öö[¶Ì™3~û‹B©¨¸wïñc2°X!!‚È™37l8{vçN åÆS§âãëëÙ¿›I§ ßn•%Têø¹õgÚh(+kÇŽ9sæÍ›øÿ8œž^dduõ‰úú;w¦§{—‡32ŠŽÎÎg0~<_üŽùet¶(*:~ùòU«@ÉD£õõ--EDÈôtww'§¼<"yy׬‰Ž~ñâìÙÚÚƒ.>4ƒÁ„…ÍÌSRöí+*²³[µ*(¨¼œBa2©ÔþþÎΖ–Þ^$ÒÐpñâéhŸÔÕ]¶ÌÃcLÿa0 œ8ñúõ•+0šÚöíOž„‡{x¨©åå]º´|ùܹ!!>ô÷‹ˆ88¨¨¼ysô¨ºº¨( ÕÝ=õ]0NG'8øÓ§33HJ25UWwqyÿþ×Ý•ý·Ã1ØæË——/ËÊ&÷%¥Ó››##ÝÝ÷ïŸ?ÿöí{÷22"#g϶°°·èïWRZ¸PNnÆŒ•+½½ p¸ÎÎÄD5µ}ûÜÜ.•–ƒ ÿÛ·32V®´´  ¢ðµ"e0Æ×‚øøddTUÕÔˆÄáa–‡;??‰FÃ`3gªªª©! `03gŽ÷žZQ¾xQ] +Vˆ‹ÿÓzŒÉ¤ÑJJ= ºp¡°p:W1MMOÏ«W÷îüs<^W÷àÁ'44Š‹]]ÕÕïÞ3P(QQ55YY8¼­-1±½ýëe3ƒÑÝœìççãSXøúµ«ëöíòòAAeedrGGeåû÷»w»¸Ü½[R¢©yëVhè;ãÍ V„)QQ>> ZZššÆû„šëÖ)+ß¼©¢²cÇŠ##£;Ó ˆ@Ìœ)#ƒ@¼}{ô¨­íÝ»“; M)+»s§¿p°º:ßd7XÓÿÛ·¯^yyÍœ9=MÅçææáÁájj®^USÓÒÊÉùºþì,Ýq8qqiiyyíÛñÉ`ÝÝwç`x¸ ÀÙY]]CÃÙù72 ìíwïž3gªkû$RU•¿AANNUÕÔ ˆŸ_KËÔtïÞƒ¿¥‚DD´´øø ˆã‚L®® ¹p!#cÏž«WÏsqÉÍ=z4"‚ÁXµ* ÀÇGJ*%ÅÙ92òË2™Á ÓããÏžõñ±´¼yóÆwïîÞøøñÞ=gçÜ\=½{÷rsRPxûöäÉ úûi´îî”_ß'Ö®}ðàÎÌÌ[·W¬8|øÍÖ¯S(õõAAk×.[æåõ톧£sÿ¾£ã¶m¢¢ÜÜH¤¦æ¦Mvv††‰‰žž¿²°ØY³–,‘“€ºº°°ÆÆßqE‚xy¥¤¤¤P(!1±«kª{K ˆ@ PÄ`ô÷Oœ[ÿšùåëç¯âpJJëÖíßï쬡A¥=gŽŒ qsss›šîßï쬭M£±׈ˆ|;¿S©ÕÕwïzzîÜùì™™Ù§O®®+W~ú´zuDÄþý¯^íÛwü¸Mfæt´ ë´þÛQÏ`ôõ=nk«¥uäHzúØ¢œ›{õê°°ºº?þ}# …B£¹¸0˜»mÂ`üüÆÆçÏ{yww‡…­_ßÒbg›’¢¬™ÜÜw䈥eCC]]@ÀÝ»»våç74¬Yã쬫‹D74dd¼|ÙׂÂÂHdWWGGmmvvQчmmÍÍmmMMííTª¶öñã gÎ=j`˜xøð›7»v¥¤¤¥í߯¤Ä¼Tj}ý+WÚØ°Žg~~yy--]] †Bay¹ " ×ܹ::ººÂÂ4+r ?ÿtâŒÑé½½55--##ðÏ2@ ¥¥%'çÝ»/¦ë#Î`ìÚE¥N>a0**[¶,^ŒB½}ëî×Ô4Q@‹KFF[[L¬¿??¿¸xòtzw÷‡¯^µ¶ ¯\© ÀÕ•uttuedüñ‡¿ÿh¹ÚÚ-[Œ£¢¾®¡±ñÓ§¹¹‘‘à⢡ñ='¦&ÿ;wÆTæ×ŸsqÍŸþ||üÅ‹«V ²”.ñðÈË#‘ÂÂêê7oæä¬Z5z Æ`tw¿yãè¸n¯o_ßÛrx¸¥¥¢"//7·²òÛó•ÉA"‰Ä•+I$&S]ýû%ŒææÛ·÷ï_»öúõÚÚéºê!‘òòNN÷ïÇÄN.5„@Àá ÈdÒéLæ÷—H4ZQQ@ÀÉ“Óq±=Eyò$9ùÈ‘± ê? …òåËÕ«›7œ;WQ1ÝfI`M¿¿…ņ —/WUýLªY:@xÿþÒ%/¯ãÇÅĦw#©©)4ôÂ…ÚÚrrz{ÿZ线'¬m5WW{ûeË£¢ž?OK;~ ³3*jß¾… cbÚÛG—HCC%%~~¦¦zz~~0?þ®]çÏGF††._þáƒ«ëÆ‹Ý¿ÿåËØ†MccTÔž=ææ]]§Oß¹ãëëè8~QQW“‰Bééݺ••õàÁæÍÂÂã籎qrú𡿇ÓÒ’”””\²ÄÚZ^¾µ5113³µõÏǰ\²dË–å˱Øòò3g^½{ß_ -#£®>c•ZWWPÐÖ6•ÌC …BÁ`4‰ôýHj¿z~A"çÌÙ½{òùÝÖ65•õo¡¡¡´ôóçª* ±X fp(”žžúúÒÒÏŸkkÉd8\TTF†Db2EE'«5 …B ™\Uøþýð0.#388wîþýüwçΊ’’t:•J£MåÄ‚‡75ëêΟáBQј‚h´˜˜ŽÎŠ8ÜØ9»`  _¾°ß‡/ @&øù9:–”HJ/]:oÞÐÐ¥KÇ'&ŽnÄ¡P22Û¶©ªÎž=cFffbbXXzú×w­ÉäæfVàñã±½=9ùúõ#GÊÊ0Œ%ŸkÖ\¼øä‰]IÉ… GŽ>&¦¥EAaÿþ'O|}q¸Ó§7nÜ·OE%:šNïé!˜LŽŠ²³30HME¡¸¹ut‚‚^½Ú»‡Û*,¼ßÅeÿ~Ö¢‹]¶ìÑ£åËçÎmk –G; Ær2ú±´ŽºÖ<îîŽÇÿ•Îjh´ªê±cüqéÒòå¼¼?9yÕ*K˽{™ÌÞÞׯOŸ¶³»xq4Í f޼ÇoÝ ^²¤¨ÈÓÓÂâæÍìl<~åJŸ€€€€/||¬­õõOœ((`iÄáwî¼q#(èüù Š‹½¼,,ÌË#‘àp~~,³ƒNïí}óÆÃcãF--D¡TUÏC @J¥R™L$hk»woóæ \\êê ããSSf0º»ËÊÚÛÀÜÜÈhóæƒ54ÚÚ""ª«cÇÿ>(ÔÌ™;wzz.[F§ÇÇïÛ^W÷;f$RZzéRuu®¦&4´¢b*SC"ñx4("qâ™Ã×%õüB¥Ö×O5¿Þ*£P:;++sr²³?}^^Á “ÛÛ+*rr²³‹‹I$8\ZZEehˆÁo áñ+Vܾ]_ÿô©ÁhŒ¶ýûƒƒß¿·¶nnnkƒÁ°Xii<žÉÌËssSPXµ*- –@£;;ë꺺HIIII<¾¯¯±±¯oáÂààª*?¿É53{¶™™ƒÃ¶mK–Œ#"2U|ÓC&74„…9::8°z@XxÓ&ÖVMEEB£GÑÑ£F—ºº¶öÉ“HdFFbbXXXØî !‘²²ëÖy{{z._>¶å‚ÌÌ™bb ( €DnÙ²w/1¶¹Ãdææ††¾|ÉþÛ 3fXZ^¸œìﯩ ‡ ÄÇ_¹:yº‚—WZšzzjk{{dîP(ÍÍÏž\»ö=WNSÃ1Ø„‹KT”ŸŸµëûcŸVHmYYžººÎNƒŸ_IÉØØÄDM-/ÏÙ™ua]OÏÚzãÆÖÖ‡==cbÚÛq8 •ùóyxðxéî&Æ+ˆ¾¾ºº/_úú€›{ÆŒ¯/8‚ ·bÅåËùù¬c` ‹•”äååç§Ñ‚ƒ ׬a9Ô°Ü´0ãÁƒO.üü‚‚S‡õý;ƒáp<½{·ŠÊt\}ÿÀ`BBË–={ô¨¸xt´™™­í•+™™¬™åóg++2YN®´4$ÄÅÅÄ$ `ëÖ'OˆDuõ‹ÓÓïÝ[¿¾¼Ü×wýz<þüùÄÄØØsçèt@ FF’“wìÐÑÙ¿ÿñã±ÄÍ-**(H¥ `±‚‚ 6884Ä’!&“N§PÈd‰L¦PXË}&“H¬¯/.–Þµkóf2ùý{W×ÐП;oœ|¤ÉÊnÝêãsô¨ŒLn®›ÛÆii¿çÚ9 5s¦•Õ¦M’’õõddL}ÆÊÍÄÅÃÙ††Þ¼qvž;WQƒ!“™L}ý¸¸¢"'§·o7nܺ56VTÔÈÈÊÊÖÖÑqß>ÖÝ·ïÕ«—/œ<=ââÖ¯¿~ÝÐpÍš‰Žba0úúÞ½suµ°ø¾‹Ýß :}p°±1//##;›—w¼NJOÿð!9yòo‘Hµµýý4;A[ii++_ßÔÔÛ·55óóCBrsñøÑ›]S}G@`Ö, ¥¥¥©‰½D!~J?qš€=`°™3.”’Â`ââ„ïïwÂ`ÂÂÆÆ!!>=ZZjbbdäãÃÃ#++ @¡´···/3ÈÏÃd¿{çãcllk›‘18\\úú·n%$\¾ÜÞ~äÈòå^^¬Z,ÖÀ 4ôÅ _ß=–‘ÑÕ••ýgeF¡ÄÄÅÅ ¥åñãË—^¼˜,´Æ·|ÏGœ¥B[Zh4QQeeQQ š›G'[$RZÚÔÔÊJJª±1&æÍ›©íH¤¸ø²eË— 67GEM~!‡ Vhøñ@ÐØ™ Æ*óõD>¾ÌŸ…ÁèíMIquݹóÔ©˜˜»wÝÝ×­{òÄÃãGߣÓ[[ÃÂÜÝÍÍÇ‚‘üB^~ïÞààGtt¾_…„tu--äåý^(Þ¯¿ÅÍ=w®€NÞ;h´¸¸œ??™ÜÖÖØ80@§³"÷]º¤«klìí]Zú£7 )©-[ÒÓKJöìùú3­µ5)éÆ /¯OŸ**FϽ@‹=[GG\œÁhiinsãA‚  3ŠÉÊÈððصËÞž@˜þý®_§gH¤††bc£¢>}š7ïò凗/Çã¿'sL&ðúµ‡ÇêÕ..]]ë×?¾k׿kŽ`$RRrþü9sÈææG&Ʋd0„¢¢àð;ÕÕÅň'Oêê@°¾Þß߯FK+4´²RAá?Þ¼™?¿¸øäIee“ÒR'§OŸž<9|xýz1±˜˜À@–vÂ`ÔÕ½½££Ÿ=“¸|ÙÛ›‹kp°¢¢¿ŸFãåAUÕ5köîíîVT”–fmR(¹¹--°k×ðp@€›Û‹ýý""’’BB==--]]?=…’—ß²åöí ””²³]]ML<øÉg'ï||K–ØÛoß.&öù³·wdä÷‚KÀáÜܼ¼00ÐÚÊýÝü2Õ@“YQqéÒöí‹]º4þ³ña¾]\–.<Ì7kî¦Ó <~ݺ‡££—,¹q#(hô]ìíCC°··¶Þ³'5•¯¥¥¿70ÀãI¤îîþþ¯µåÐлwGjj._N¥vt|}¦‚Œ´´Á† k׊‰}ŠÁ¨«‹ˆ ‘?ãbÇÚœY»vÕªÙ³ñx yxtu……‘H^^…µk·lÙ¸QEeÌÅNA‡ƒ QQ=½5k¶ne2'7`Œ¡¡²²/RRòó»» ’’Š‹õôVTü~lN ¥®.6ÖÍ-$¤­MIiz𠉔•ݼùòåׯçÏOKÛ±ÃÂâèÑÎN—ÏŸMM¿§=‘H^^11 fx¸¬lú³‡Ÿ‡c ±„„‰‰¡¡œœ§gqqiéÔŽĬY66ŽŽ‹uu={æî^ZÊdÊÉ?®¬ŒÁ44Ü»W[;]WÄá–-»uëÞ=›„„Ý»{{¿?4 2y` »»»»·wpÈdD¢Ói´‘‘ÁA–ï*A +nN¥ÒéSOs(”´ôÚµ&&""?>5ø›ˆ6\LlÑ"mmQÑ®®ôôððèèׯ³³§éëûwˆÄ¢¢èèÏŸ±ØK—¬­.äåÍÏýš@==GGYÙÊJ?¿ˆˆÚÚÉå‚DE×®uv>rdæÌ²²³gŸ<™lK$–”„‡Ÿ<éê:Y åå-,  <üÄ Wן D Aüü§N8`g71†!)©¦†DJJJK?*#3¶`ª¬š={æL>¾{Ü“H]] _¾TTTWOÿ 6Ý¥ðùóë×?y2ý[p¸¤¤……ššžÞdgB(”ŒŒŽŽ¬,ÞÔÖÐ𫯋Óééé‘‘×®ï #£}û/f232vì(+ûqËÒh½½mmh´¶¶‰IoïÕ«QQ¥¥ìƲû@7÷Ì™³góózymÙrãË+bŸÎž½oß~~3gâñSoµ@?ÿ¢EÖÖÚÚ½½qq/_–—ÿSs}€ /¯ŽÎ™3·oïÙ£ª ee—.íÚuéÒû÷c§ÊtúÐPo/‘‡ ++‹‹#‘wu¶)$$## ƒ‰]]CCt:“I äæÞ¿Ï*Åâñ¢¢X,…ÒÞÞÜÜ×G"õôÔÖöô0™kÖˆˆàñ¬ ‹UTܺuÝ:nî‚/¯înyy¬­-:º£ƒLÖÓA$’OJJAAQ¦R_¿ŽniQVvvöõUS(*ª¯ïîA…Ç=zò„—×ÅeÞ<‡ÜÜéÜ»™Ø2x¼šÚñã‘‘îîòò‰‰‡éèÂãÐhÀb/65ݾ]^~òw­µõñãÜÜ´´üüÞ^…’–ÖÓÛ¸ÑÈoÜ8uêÙ³¯7÷ HPÐÀÀÉÉÃÃĤ¤äìÙS§²³§SLPpñboo%¥äd;; ‹ââ::P(}ýK2!¬œMãÍ(8\HhÞ‰‹KBBAaöliéÔT.œ‡GYYKKVƒ–“³²š??)‰µG4ÑšÁ “»ºÚÚZZúú`öì}ûBBŽcM…í퉉wî´¶N¾xA<^KËÎnûvYÙR¡Ñòò[·:8Ì™ÓÕïéY\üëŽ F{{b¢¯ïÍ›îîOžÜ½{ûvE…“SXlÝzýº™‰¼yó½{55_O­?¿¦¦­íñã÷îýñÇÒ¥_¾xy™›ß¿_[û¿¹ÝÅd’HMM>¼{—”TSóõ%û¤¤W¯¦ú&ÖÙÙÚ:2òuÝ¿ cp°¬,)éùóŒ YY ,--’”ÔÖÖÒ­©ÉÊÊË‹R‡ ª¨,]:gÎÀ@^^NN}=@£}ü”TY9q/Ñ×74íîÎÌÌÍmi¡R54~ß›€ ?oÞÁƒ!!žžºº55wî,Z”œü£MH¤´ôòå9"&V^~íZTTiéÿrÔ¡P²²JJóæ!‘_/váð3„…‘Hüž™ ‚h´°°††ÍÙ³®®VV‚‚FFÖÖ–—›âñï¢Pââ‹­^½hÑ‚€ÃED P£7IXe¨Ô††””°°ââ#GΜ‰ˆ¸repÐÇ'6öógMNÎÊÊËkóf!¡¢¢K—âã¾ÕdrCCNNs3½ÿÆ›6™šVW[ZÊËS©UU/²âV‚ /¯®®­­™—“sðàçÏ¢¢NNââB~~qqwwk+=~÷njêÝ»îîaa tº€ÀÂ…§NÅÇß¹³iSKKDDl,±~½•Õ¢E¢¢]]3gâñýý?öö²oÒ€ ¿dÉ•+·n9;+(´·GGÇÇËÈlÞ|ðàîÝ£mÒÔ”šýý$Ú?þ%NQÑÉ)<üÖ-;»îîk×–-;{öóçQs!ˆ9Df…‡ aa}ýuë45‘Ȧ¦‹§ÚÆüó ‹‰óûÌ™²²11ÚÚxüáÃuòòš›''çäøùUUmÞ¬¨¸wo~þT&+òóKJΛÇÏßÛÚÖF¥²Ü "±££µ•N””dÍ€ªªƒÃ¶mRRµµwî¼?Y ]4Z^ÞÁÁ×÷رêê’’´´ñ“Ù×—™yêÔöíßw±£Pjj¼½÷ìÁá~t ‘L®¬ ³µ52 ûQ ²ò •—GD¨¨œ;goo`ðã …ÉAJNÎÜüäÉèèààõ뻺nß ²² º~=??,ìôé°0 eÖ,yyqñÖÖîî¢"w÷MLF'›M›ääÆâ¤±îd-/¿gÏåË?¡åÇÐéCCïÞ¥§CPCÃc³ü¨<1kÖŽ§N<8cFQÑÉ“þþEEìíqÂáh4 A FOÏä-C$~þ|挩é‘#x|X˜·wxxx8–”½bÅöí“Hööóçgeùøœ:uô(Ïd––Þ¸ñs‰ ëï/+ËÊÊÊB£ÅÅõô–.*22RXXZúð!Ë@ú¹öG£çÌ9r$>þÉ““'¹¹#"ÌÍW® **opáñK–DF65ݾmhȧ£Î®08øòåÑ£ÑÑ“¹üýÞùeªù}ãÆ»wssç̉Œ¼~ýáÃ7o²³‹‹ëë››»º(”öö„„ÐÐ{÷ººHŽ‹ëkG-ƒD"I$BFFSsÆŒÞÞ¢¢ªªñ·Xh4¡¦¦¹™Báå›7o÷nÿÀÀ]» èéS3³»wëê(&SF†NgéT‚Á ‡A"I¤F³Mµš d0 V` d0ètƒÉ¤Ó{zòò^¾|òd¢ã8ÃÃÁ°<\~Uˆ%öäTPPGçÀ³gOœø:â! ÆÇ§¡!)9Þb0h4:Áa0 G¡¾~&“B!F“‰¥¥÷ï?}ÚÕútlla!ÞÐðôéñãÛ¶­^}ãÆ˜i4:R„¢¢´´Ü\>>(+ãD e—ÿX—Æ@ëTEQIEND®B`‚twittering-mode-3.0.0/doc/web/images/screen-friends.png0000644000000000000000000044737512141747407023031 0ustar rootroot00000000000000‰PNG  IHDR0h–6Š| pHYs  ÒÝ~ü vpAg ÂaÜl€IDATxÚìwxUÛð§ÏöÝôÞÒ $zïE:(MAÄbAlØ}°€ TT¤ˆô^HH€Ò{ß”íeÚ÷ÇyæÛ $Ÿ÷ü®Ë5ÌÎÎÌ9sÚ}î†65Õ×WW#@ ò V@ AA€@ @ ‚  @ A(A @ €("A @ ‚܇‰ãšš23÷î=xðÊŽãn=ƒ$½¼zô?~ÈÐP©EÅã SQ±cÇo|þ¹ÑøôÓË–ÍšAQ£:Áb).>xp×®sçjkæo*ŒpwON1bĈ˜• »%È…ÕzùòêÕ‹ïÛ׫ײe¯½–œ¬PtÄÏqCAÁáÃ;vìÝ{î\q±Á@Ó¾¾‰‰Ã†M˜0bD—.$ »Gëa˜ºº“'wî|À€  ç§‹¥¨èÈ‘£GµÚ¤¤aÃRSÝÝ âß\^@÷¬AbÙêê½{?ûì“OŽˆ>¼GOϧ^š¶ÙbbŒÆÂÂo¾™6í7áã7o~öÙà`‹¥²òòåK—š› žïHA"8Î`ÈÌüöÛ>úæ…bÔ¨!C‚‚hÚù ’4›CCívžGA¸u f·77_»vþü•+:™Lß|3s¦£ì:QË66fgŸ:•—çíݧOÏž^^w·di+ìöŠŠ;_~yÚ´¥Kóó;wž6múôÞ½#"L¦Ë—·lyòÉ#¶n3gýúµkçÏOHËïv™yûrÙí……ß~û裯¿î\ÿ›Ên/,ܲeÅŠ/¿ln>|Ò¤ädµšeõúÌÌ¿þZ³fÉ’%KBC-úùçuë<,ìÆ¶õO˜LçÎ}ðÁœ9ÿùͶ`ÁêÕO=LÓ~~’žþwÇ C–òòüü¼¼‚› A„ç †k×þúëðáÊʸ¸‘#‡ 둦&.ÎnGAh]Ýþ<ß1G-»½¸xëÖU«~úiÈÞ½ûõ tuuôXž×éÒÓ¿ÿ~õꬬW_0 [7w÷»—;jy!yܳ ü Ç5šîÝŸ~ú­·–-ëÒE*ý»3&,ìÛo¿þA\\Hòæø»ãL¾àIh:,lÚ´×_çáÃÕê;y§ã$4}ºsÙ„aöí[ºtÅŠ¼¼7ÞèÑ£gÏ›Ëö„ekjvìxãå˯^:ô«¯vï~óÍ®]EMØäÉãÆ 2gΤI‹¯[׿ÿ®]/½w7KM–½}¹(*0ðæzø_]nr„·÷ AO>ùüósç‚zàù¦¦ž~Р>X¿þòåÉ“?ú¨k׿ï3ßêë³²._¶Ûãâ^}ذ””„¹A¦¤ä›on=~çVúobΜ·Þzÿ}G=”•­[wùòéÓGŽL›öÚkK—Žáâòwb|Û–½cŽZw~ªûyæŽsæ¢Ekמ:U_LóAÂQvA023¿ÿþÓOû­  ¶öäÉ/¾xûí—_~ûí~ÈÎ6™Ú¿t,[]}øð¦M¹¹aaóç?õTçÎ*†9ŸCQS§¾ð°afóÞ½[·^¿n±ØíEE¿ý¶fÍŽ/>¼fÍ‹/N™2eÊܹK–lÝzýºÉÄóÿ\®¿k‚`·×Ô?þÅ/¿üøãcÇNš4gÎ+¯|ÿýÙ³Îoœã´ÚÓ§¿ýö»ïŽ»víôéõëßxcþü ^|qåÊÝ»óóM&žw<¿ÍVQ±ÿªUóæM:~ü¨QS§>ûì[omØpá‚V˲¾ÝxÇ%Š"‚HE9®¹ùܹ¯¿þ裭[‹‹ÞA„ãZZ.\X·nÙ²_-*²Û9N«=þ·ß¶l9q¢®Îd*.Þ½ûûï¿ývûöÓ§ÙºõæãüqýºÉ$w×§x^§»pá›o>ýtçμ¼üü;ß~û©§^~yÆ’`ÔÖqjµ5#ÏÝ´®Öyë;r{»ý·w;ÒÞü«;âÆü„Ÿð~ÂOøùïÿ¼ço^hèСcÇöé³woFFqñèÑ=6{vt´‹K` EµF*«µª*;»®ÎÕµK—˜ÃþîžRihh¯^~~Fㆠ:Õêã“–¶iÓŠ¿ü’’òÌ3K–|øá’%UUk×¾üòóÏÿç?AA[·¾úêÊe³åçû­sˆˆ`˜¬¬O>™;÷£ª«gÌX±bõê矷Ùøè£7Þxâ £qÍšmÛ^x!:ÃZZ®\Ù¹síÚmÛvíêÞ}Ò¤ùó§N1âÚµ¯¿þÏž{níÚˆˆ?ÿ|é¥ÈH‚¨­Ý½{ñâ¥K¯^1â›oÖ­9R&ËËÛ±cƳg¯\inNJêßÿnMŒî½Q´±ñâÅÝ»ûM*uuåy½¾²òòå#GŽ©©:ôµ×^y%6–¦9®¾¾¨èäÉ¿þºt)9ùŧL &Iáy³¹¸øøñݻϟ‹{þùÉ“ÝÝ]\|}ýü\]%·Ù||‚‚‚ƒ}|\]ÝܬÖ[Ëå8n2eeÝMŸÂq“©¸øÈ‘?ÿ

ztË– êëby^¯Ï̬­eY¥Riï®U8×3ø¥Ý^[{çq`ûö¥KSS;¦Ï%@ ­»¿Ÿ Ã47—•^¿ž——Ÿïø,-­«³ÙÀ˲ Ã0w»å¿ÑxéÒ/¿üù§T:mÚüùC†øûËd EXØØ±óæ  ÓíÞ}èPeåß…Lh/xÞl®ª*(p.Q~~nnQQm-ÐY˜ÍW®ìØqî\`àüù¯¼2fLbb\\ïÞ3g¾ûî‚ 2X¤‚sÙ B­ ññ‘Ë%w÷ÐШ¨¸¸¨¨  •êA˜Ù ÃX,G EÝηE B*¥(±Û-†áyáy š>ý7¦MëÚµS§„„1c/~æoïÓ§ÿ=?Ÿ¢þ©\7¶£13óçŸ÷ísqyî¹wÞ™<9!!008¸k×'žX²dÚ4ݹsӦ˗ÍfÇ“£h@Àܹo¿=wî¨Q}úŒñôÓóæ%&êt.äç À#Œçyže­Ö––šš¦&–U©‚‚zöœ7ïwžþÁ.âatº††ººêÿRW§×#ˆF£ÑÈd%"•FDŒÙ¹³F#¶fAŽQ«·Ž<ÎߨƒXön[—Ýîãs·í01ñæ:îHí¢‚‚&LxþùW^=Ú9HÇÕ×oÝzåJzzv¶ pܽŒ´Î­ïŸÆ9šA Ò~ÿ0L"Ñh”J•*!áñÇú釆 ss{K®{yfŠR*¥R›M«5ÀŽ«D4&“Õ*îØv,h:$dÀ€îÝ1ìõ×·mËÊÒëSS{õR©œëÚn/-=p`×®ººˆˆ'ŸŒ‹“ˤ¨AX"Ž3YÖhlnfY‰D¡¸½>êïÀq©ÔÅE*µZt:àç"‘ ˆÕÔÔÜÌó …FCQ­ †MQ¾¾ƒ-\øÝwƒ=ûlCÃ… 7¾òÊ /<÷ÜÇìÜùÁ;ß}X„¶†¢¼¼¢£CBhzýúü|­–e1 Ç„çyžç KŽ3L¦¿ žßö} ÜE1Œ$IòïÎ騵zï­‹ î·þ»j¦5­âv!Õï<tä1@ »sìUßÛ'¸Ì½üÖñK•*)i̘˜˜‚‚o¿]·.-­¹™ãç-–üü-[^~ùí·¨¯NÏ÷÷´wûÉó6›V[YYq ••55V«LÙ¿¿¯ï•+›6:TUÅ0‚`4^¹²qã÷߃з+5†‘$ŠÚlz½ÑÈ0,k³C¶Q.™,)iÁ‚gŸ ?qâ7–,Ù°!;»©‰aãL¦¢¢}û>øàÅþE}ô¥—FŽôðKCžoiIO߸q÷î¢"‹E¦ºúàÁM›rsýüŒˆÉZS.Q«“’FŽ ¹|ùûïÿ=?ßbž7¯\Ù´iÃ†ŠŠ„„±cär‡ÃÜíÚã[†©«;sfãÆßÏÊjjb‚ððèÜyÔ¨1c‚ƒ­Ö²²úz«õAµAày›Í`Ðëu:®¥E«­¬¼zõ¯¿¾üòÓO„””‘#CC¥Rµ:444EsrNœÈÉÑéXÖl.(صëóÏÿ½´T Ûpc_»µÇÝz¼µ}ÊñÛ›k»cÕêÝŒ}B&CQ’ŒŒ|üñ?þè#77`ÔÑÞ#ŽËdîîjueå_<õÔŒ_|q“D‰¹»¾jÕöío¿=zôûïÏ™süøOŒ;xðªU..ÁÁÇO™2lX\\^žD‚¢ucÙQbJʨQ!!«V=ÿü¨Q†‡µbÅ?¼òJ·n E{kÎpÜÏoòä•+þA–/_²äÙg ZºT¯G¡é€€þýçÎ]µêçŸçΕJQTL&Á0&228øòå%KÆûê«ÒRƒ¢ºv]¸ðûïÇŽõöÆqg˜Û•«sç›ÛŽûøŒýÉ'K–\¿>þܹC‡~÷0“ ™<ùã?ûlÀ77 †Á0™ÌÝÝÝÝn'`JBQjµ‡‡‹‹TŠa(*(J’4m±œ>ýÁ#G~ñ…É$“Qà HDÄãþy¯^*Õ½¶öÖô Šruuqilüñǧž?þÇQE ‚¦]\“’ Xºô矟|rÀWWEQ•ê¹çÞ|³[· æÍëÕ«{w’ŒŠzä‘—_~öÙëëóò€nîF#EçÅð‚ãxkúŽK¥îîÞÞnn4 Z©sy:B­ÞÜ //oo µ½ùîwߺäîÛáÍ£VǨ £(ÆÛÛÝ]"qîâÛCQ¹ÜÝÝÃC£!I½ûVÁq7—˜ºÞyxÐ-@ ö­­-//*êXÅqv»ÕÊq ,rÇs¿õym6“ÉfÃq™L&#ˆŽmx3<Ï0V+ËbØß×¶ÉtîÜk¯Mœ¸}û„ Û·¯\™’B’6‚$Mãx[”UXÖf³ÛQ”¢ÚæšàŠV+Ç„TJÓ¿ ýúÔ¿³Vï¾uÝ{;ü·¶·Ö´Šö é(qÏÃHR"Áþ›£©ãïHbMËdÀ×àß·‡Š¢!‘ˆé[o}v‚ðöîÕkܸ¾}½¼¼1ulÛ¼ÅqŠjÛkâðo|#·Oýkõî[×ý´Ãg{kM«hÿq@ ŽZSSVVX+@ @þŽV@ Üs$@ ù_ƒ(*Êͽ|V@  ,˲ Ñ)@ ü߆0š›µZX@ ‚Á*€@ @  @ ä¿@ @ @þ  @ ä¿@ @ @þ  @ ä¿òf§OŸ9sö,ø¼·+¼þú«¯¾òÊ¿¥rÿ]åå8Žã¸«Wsr®]khÐjµZÇ÷(z§_;Ÿé8vãQA@žAðööòòôŒ‹‹‰ÁqÇñ¶-…Ý~êÔž=(zðàúõ4]SsáжÝ=åá8±Ù||ºv„¡CçÌ¡¨>}ÆŒi«566555F£Ñx7ç[­V«Ý.‘H$u÷w¹Ý¯<==<<<¤R©T*ý÷tA´´‹/^ ð÷÷ññòòöní®^ÍÍÍÉIK»x1#ãÉ'gΜ5 Öêÿ5þ/Ìãü±sçîÝS§N›6c†L&“Éd·žFæ²²²²²²ÜÜœœœœà`ÿ°°ÐÐÐPØNÚŠÌÌììììÌÌìì¬,0¿·íõÁ|Ý¥KbbRR—.‰‰‰‰°Î!€‡ }üñ'Ÿ¬\y÷¿*(((((°Ùl6«õ¯¿öí;p`äÈ#† ëø•ûï*/zª«kjjj&Ož:uÚ´ö»×ï¿oݺysttTTddÛ H6›Íf³qÜÞ½k×z{ϘñôÓ"•>÷Š’$M#ŽS‚à8I¢(Šb˜  (Š"Ïó<‚ð<Ë"ÇÙíÂ06› °¬ÕŠ v»Ù,6›É$þmµ ‚`³4­× {÷®]+ݺ z» µµ€ 8$$44,Ìn·ÙìvOa'®VWWWWWßý]JKKJJKÝÜÜÝÝÜþ;(8ŽãÕÕÕÕUUAAp A„¦&­V«Õéš››š‚ƒÃÃ#"0 ð^¯7ôú¬¬+W._...--.ž6mÊ”GÐòÿ†a†Éʺ|ùÊŠ¢(Šª¨¨ªª®ðóóõmïç¿xñÒ¥ÌÌŒŒ¬¬¬¬û¹Ž¯¯··Ï˜1#FŒÑ1ßT}}}}CCQQIIIÉíÎ ñôôôôðxðOøg7™ŒF“ Œ‡‚¢âøËq<Ïq G455555Mœ8yòäÉ;vlß¾};Ø {xb¯Àlxõêµk¹¹UU‚€ ‚àêêâââ’šÚ­[JŠDBÓ4 Jv7×,--+++»õÛàà    »¹Nk¢Ñ+¯¼üòk¯µ_­\ùé§Ë—C â ñ°nl±X,f3Ee«£KNÈó<ÏóÇþ†!’$ÉáÃG3fïÞ½{wï5jĈáÃÿ-ÝñËÛÜÜÒÒÒ"—+*AA€'q,ÈÅéÁñQGJÄ ±dâ<ϲ<¯P¨T ¸ ¸£——§§§g[•Âh4™L&­6+‹ç++/\@‚ IÁ0‚@ðü⢼ñÉDœÅ$†ŽsˆL,k·ƒ¿üͲv;Š2ŒÍ¦PhµYY &“ÉÔV€e†eív»ÝfÃq'‹Åb±Xnw>ÃØívû­Çøä|Äßßßßß¼] €ã4­T*•pptî¡ à߆ã8Î0,˲4MQ­Ñ×=,òó ûõëÝ»oßúz­¶¾>?¿¨¨¨¨S§ÐÐÐP±ÿÞ \õíÛ§O¿~r¹\.—_¹råJvöƒ€hôÚk‹¿ùæý\gùò+–.íoD¯×ëuºÊÊÊÊŠ çãMMÍÍz}·nݺuëZšó·Dz—™™‘qñ¢V«ÕÖÕÝÜ£T*•J­~0¥ø_ÇI’¢Hˆ`.CQg; pEQÔ`Ðë QLš4iÒ¤;wîüãpnxøÃ“€ðvèБ#Ç…„„†Nš4eÊÔ©`nª¯¯¯¯¯?uêäÉ'z÷îÑ£[7`)p;ñ¼ÇcÇŽ?q"  ¬ì¯¿œíCJJüý‡ ç´‡öÌYkT^^UUZŠý‡ÈêØ:×*âb‰œËÞ«øŸ‡‡››—W{è¦ ÿvš€äX:s‚€áÇ1°ŠˆÝƒçµÚººúú¨¨ÈȨ¨Ñ£ÇŽ0᯿öìÙ¹sĈaÆíøÝ‘Ë î­Õjµîîžž&“Ùl6ƒ¡Ñ¡³ŽC@0ìÇ9D"áyá8Aà8çi@’V+A€»€;S®¶Úy5-8êœeQ”ã„$Á³ç„»XVü›ç9îÖO› ¼MPK8.Þ½½ÚŠÞÍBöÎÈår¹Ba2™LF#¸–CƒwW¾ÅÅ%%%%ÕÕÕÕ55÷mYY}}hhPÐ? É·žÙ»w¯^={¶gŸuˆF Ëå …Ri2ÃÝë^:UUUUãÇÛ½{L †ÅÅýôÓÆëׇ‡‡„„†Þ¹çF£ÉTRR^^^Þ·oß¾šÍf³ÉT___ãýÁpéRVÖ… ( ÄË"ü¿€…Žø »pÃÂÃCC;uê8oˆF:EFFGƒ#eeeeåå†a o ­æµ`! zª‹‹««‡‡‡‡‡‡»;ø6??//77&&&æA Hÿ«óxyyyye¥¸µ'<¢`þ3Ï‹Xž§¥¥¥¥¥)•J¥R™œœœœ’rêÔ©S'OVUUUUUõë×·oŸ>òù@êîîææêš••™YSSSS]Ý«W¯^½{ƒ­±aÆ1âøñ£GîÕ«GÔT°1ê|0k9rôè±c¾¾ÅÅ{ötëæî^Xè|ŽÍV\l·[­þþÏ<ÓÞå5^\\TTP`³ýýVàÝ ‘дD÷oÃ!ž‡& ±,DZlEEqqU•ÕjµZ,jµZ­VƒßÙì ìå€=ãÇ?~\£Ñh4šÎSRºu;xððá£G‡66666V¡¸9 G}½V«Õ²,Ç ‚¯¯¯oc£V[WưmòàËìÔÔÔÔÔTú! GºY@rh˜Ú>DKÛ¶:OOwww÷´´ôô îæWàü‡»À»Ý¼ÚšV«Õjµåååååå ”C‡:th````` èÓRZZZj±˜Í˦M›7ÿúë˜1£Géîîæææö 7#ÀæVÛРÕZ,V«Õê¬ûr^t;oÿ|ddddd¤T*•Êd Ã0v»J¥R)•IIII çÏŸ;—–¶Íf‹ÅlvuE¶ı«±±© ü$‘H¥IK‹N§Ó­/Ïó|L {=<<=½¼ÀzF£ÑhÔjpgÑ()©¼ü·ßŠyóDÑH¡HNNN63222€¶ ÄF´…ÂÂÂÂü|ÐÆîí:‰D"‘ÄÅÅÆB#ÈíyÇã%A­Xö ‚è’NÓ‰Dß`b{fžžžžQQQQQQ £kÚèèèèèèmÛ~ûí×_¤€týz~~AÁ‹/¾üò+¯pœÕÚÜŒa@$@`¾…a--MMZ-8Ÿç9Žç´Ú†`G®P(r9Ã0 ËZ­V«Õ ¦ù;—×××××ÇçСöïo«òŠ>-(ŠaÀýÚl6›Íf0mçE xSb(â¬$pL|ûà.àŽàî`7±­ßðË#žç8A8ujÝ::tñb!I‰EýýÄÏ/!AJKÓÓ„em6ñõ‹CÑÀÀ.]Ä«Ùí&ÏoÞüÜs‚PR’–Æq@{°Ò?q«h伸Æuâ÷à­ñ¼Ø×ÚûÙÀn¸#ÌÀþHHHHPÊÊÊËKKÁùFãâB’?þعsß¾óæÍ›W]‘‘‘QS“‘‘‘6aBÛÖ›(V*“Éår¹X{ŽešZíæ&´püúæÿó¼ ï1½¾¥¥¹Ùb1›Íf7·¶4(½{Ôj¥R¥2 ƒx…xxxyùùõïß·o¿~'Ož:uòä¨QÆ îÜZΞ=þܹѣG7Îl6›F›ÍjµX´Ú¦¦æfðàÁ·p° »téÒ¥‹ÿ74HWWWW|Þè'qk;½ý¿·›Ç ƒÁ`FÚµµµµ55±±±±qq`¦v©‰ÏìææêêꚜܥK—.Àb¢´´¬¬¼”ËÃÃÝÝÝýÁôp ïrB¢q¸èÉr³€–Ú>>>>¾¾2™L&—Mν½½½}|À9V«Åb±´_Y@¿(((,,*ª¯×j›š.^ÌÈÈÊòóóóóñ)((,,.2dèÐaÃÀüæÜÐÐÐÐÐÐÇÜ·/&&&&:úÔ©S§NŸ¾Ñhï^ïÝ»´T£éÕk„  öçj¯S§N"#^GÎ$gß$g/¤›5HwÚ:„@I@ây«Õb±Z¡ h®jµF£VC,ç8]EQ4­Ñ$ËÆÆ4]Zzæ MçäàøÙ³ÕÕóç ‚\Žã[· BXXŸ><=l‚Èå7/eÚr0ãøõë{ö HMMn®' tÈÒÒ3g@w’F£Vk4ÎסišFgñ@*•H¤RqW&$$4hZ€‚Þ××××ϯmËŒëÀP¦‡ý+@Hq™(ꋜõI1Éùˆcø¹Y¡ îîîÞ’ pœÝŽ¢‚$„ŠŠK—äâÅ­[Q´GLJÝîÝgÎ ð0ŒÅ‚a}úÌ›ç|5žß½ûÝw!;{÷îßkÀÐÿw ¦[K}c­‹ÜÝÎá1%mKðöÏæðZ},ÂÂBCƒ‚œE# i¢QròÍ¢QZZEÅÈ‘aamõT΢Ë2ŒD"“9D#ѷ⟗5Î¥'êN ‚$ ‚aìv«U«­¯¯«sw÷ôôòzbR||\\llNNnnnn×®`‰c0èt‘‘:EG§¥¥¥?_YY]]Sãççããí]\\ZZZ¬T* EeeEEI Ø#ÏÈÈÎÎÎ8°wïÞ½¤õ?¨Ar^¨Ý*ݺ{øK»ÛÍã@_QXXTTT¶ù.\Èξv D> ôóóñ±Û†a**jjêêÂÂúöíׯ_¿‚‚üü¼¼¢¢Â‚Ðöd²gÑÈa0.nòíBg#r‚ W©Ôj• Øw0 Ë2 вZ­V«Í&šyý}ôѶ{#<Ïó4MÓ48pàÀîÛ·oß¾}ÁÁ!!¡¡@wwèСC‡555666>÷Üüùóç77 &Óþýûö8^WwäÈE£?ÿİ^½®_wsëÛw̘Aƒe0ïÇñž€)  \ºôã?üPSãêªÑhµƒ^ÎöðP©Ôj__½ÞhLIyòÉ9sÀh!^«# ‡ÏßHgÎ9ò矷ïÕkРѣÛf`å80ˆU0°ñ¥(š¦(†aY`)ϲ`‡@"©¬<ÞÍ-'ç÷ßUªŠ ‡IX’ó<‚¸¸`˜N‡ —/ï܉¢àóúõC‡x¾G9s€ÈÔ¶ç<=q\B£bXRŽ;R(Š gÏŠåe2@×½“Æ ü­V‹‘ˆ@Ö //™L¡É ¹¼­#ŒÕÖÖÖÖÕy{ûúØíÎŽŽ!Èyâp¨D:gÃ;ñÿÎI¢øÜÅÓÓÓÓË«¶¶ºº¢"$¤uÁ©ï–µÛAÔ11<Ð:´r%†¹º¢hdä€ÀèÆwu„£„kׄ£GW¯îø]ìÚvÔ§ãA‰ÿ± ªªºººÚf³Zm¶ððˆˆðpŠúé§¿2222’“Õê—^š3§­žÉ¡ÑbYç–+öâÛ—DÀ>:ÁÄ~4Šâ‚êÆ_Ùí6›Õª×ët:Z­Ñܸ]Ò~DF†‡GD\½š“““ÓÔÔÔÔÜìâ"¢‹ªø/gã:g#gã@ðl–w,++--*jŸ¶Br›Í&“ Z-‚ õõÂ0V+ÏÿôÓOàø²eެ71w´ØŸzJôhzøÐ´DBÓwün{åƒˆÉæXÈ‚“$IÒôÅ‹/¦¥E©üõ×îÝo'ÕÖŽ3iÒ°aáámûd CssSSc#X J$7ï[ƒÅ#l1Ë‚#7ê—$·º ½^I·FŽj¿z8°_¿~ýöí;tèðá‘#‡>\¯oiij ð÷ ”ɤR™ìÈ‘'ŽïÑ#5µG O%Õéôz½>?¿  /oâÄqãÆ{h“Aѳg¯^={Š1ìDŽƒ7"Ƶs˜à8_áÎáÂ|(ð[õE@4 ¿Ÿ+Þs¬­¸usÐÅÇÇÅÅÅY¡¬¬²²¦¦K—ÄÄøx«•ç1 „ÎaAQ†Á0AÐhÜݽ¼ÒÓ³²23{öìÚ5)ÉËËËËÛ»¤¤¨¨ ÀßßÏÏϯ=´Ü`s´q"X7€SUUUU]MÓ4-.ýÅ#g_Ü[óÁÕ@-6›Í&ÞÅ„£­r©~áêêââꚘ LñA†nÝRSSSAð'H#""&&&f×®ß~ûí·îÝkk?>6V¯ÿgѨo_ „ïÀøÿÁd„s‘Ïœyì±™3»u[¼øÕW⢢£&;ûòe“)9¹Kp¦LvíZnnïÞÓ§O›výz—.;><~ü„ ãÆ8qüø¿1ÜäAòPLìÄAhjjllnGhš¦)JÜ­1µÚÀÀôôtˆF‚¢R©JÅóÍÍ:†¹ºDbâØ±,›™ùûï<ßÐP_a..jµ 0ŒÕŠ¢••YYvîÜúõçíÓvFwŽ®&c½¾¹¹©i×®õë¿ý—ÉÌf½þ¯¿6oþáæÿc·ƒáì|º¸xxx{§¤+•rybâ݉pÉÉvû™3mµ   {tAA¾=”—·€ÄóZmi©  @(úßè´@ÓÒ¶×1åÚûÉI’$%°s Ž…„b}}}}yùíD£²²aÃFNJŠ‹óõõõ¹wD3×ûLí@—«TªTÁ Óµ´€ofÛ9—‹cür,lw6 ÇXáü—¸È2™ŒF£ñAê‘Àâ)55%%9ùС£G1bÈ¡CÁÒ6..&&>þÂ…K—22BBBCÃÛšjjÀ˜|òäéÓ§O2pàÀ`#èaµ'OOOKKO¿1û‰ƒ>}úôéÓÇYLrþ6''7÷Ê•Ž üN&s@ßèh_7¶¶#+:ÚØJk¿'¾uNó@ó‚1€3©T&“Ét:«Uô:lh0,––³Ùn·ÛyAôú¦&«õèÑsç22.œ3gÚ4//ooŸ‹ÓÓÓÒ€ÓÒ±c'Nœ>íååíÈq‡¢o¾ùæ›ï¿¿|ù'Ÿüç?gÏž={þ¼è1ëÐÝhy«ÿ¡Ã(Ìùà ¯½öÚko¿m4šÍ(ZXXTT]][[[[^>hЀ}ûÞYÀ»¾Í!!!!!! m_¸‘‘™ â×Óǧ¼¼¨¨°°¸øøñãÇ?ù¤OŸÛ‹F{ö hÏžyy­ÑƒœËyõê–-[·zy,S^^ÞÞVëW_}õUNNqqqqFFϞݺžÑµkFFv6ÐdFFпMMPPPPfæO?ýôSròìÙ³g#Èmxh&v`Á¡P(•7ˆ+ee(¥¥Çƒ\-(êææïã}ú ÈÕ«û÷£(IJ¥æã%þíîîîŽãqqÇs\AÁ©S‚ÐÐPV&j“¢¢† áù””iÓÚfz”ÆÆººººÒÒ“'wì˜9sÚ´I“îþ:V« „BQ[{îœ TV–—#Ï3 HE*bŒ;«•ãl6³Y"AQŽ««ÓjM¦¶ZV}ú¤¦ŠíßjµZÿøã?¶oŸ={öìÙ³üñÇ$!!#cÝ: I¥/¼ðâ‹S¦$$$&šL&Ã8ötoÌso€VMQ@DT(ÄÉ`Ðë[Z€ÅùLqÃH,ÚDs;°ýÁq`1'æ˜r^Î:Úp·ZA2Ô"#<<44, d7:qâÔ©“'‡ |øÈ‘;_aðàÁƒÁ|#žž^^žž¼lÙÇ?ø¶B2`ؘ1ï½wãÛܲeÁAÈÎ…Cž¯©ÉÍŰçžÛ¹¿âùòòÌLAÈË;vìáv]G ºû˜=¨¾ïÜÝ=<\\L&³Y¯Ÿ3gΜ9sJK‹Š-BQ*ÃÃ##Á>1QÌæ™8|ÝÚ§…ÜIL%KR 9»&;j`‰D"ÁŽm6³Ùd"I’µ± x¾¸ÀjßL¦‚‚ÂÂÜÜ7ÞX²¤±Q4NCQð¼åîîæþå—_|±uëï¿oÙ¢Õ!ÈÑ£ÇWTÌ›7~M ˆ¸Éó<¯Ñ$'wéõÑG~¨RÅÅÅÆ¶÷󧦦¤tízÿÞA þÏ;wîܹŽ üïC{ƒ–òØt Ò­ó8ˆ5çééåå啟Ÿ——Ÿr÷%$DF†„”—Ÿ;wåŠÙ¬Ó55)• xBŽkjª««®&³¹¹yàÀ=ºt=¢°°¨¨ ÀÓÓÓÓÓØ.´×ˆ$ ž/))))-5›Íf“ èd ÓyþÄDèŽÿ‹þ†a@ŒVçì‚,Ëq ÓÞ£hí º\.“Éå`3àìÙsçΟwuusóð?~âÄI“>ýtÕªU«ÒÓóò®_=úÚ5…"2R¡JŸx¢s稨ªª¼¼¼¼ê꯿þæ›#G´Z­¶OŸ—^Z¸P¥z8I œû…h° FlGŒ;‡¿+†ãnð/ ë¿±A ÏC0±û,ƒA¯×ëív» " /Ä^_S"Ô¡¨Zííã‘‘ ¨—WTŠ„TŠ 2™F#6o‚ ipÇÆŒÁ°ººë×9./ïØ1A0u:mi=Ú¦{"ˆÑh2 <¯ÕËd Ë¡HüÞdª«£ÑÝe-g†Áqå8çùÆFáy» ¹b4‚},ž¦|¢®Œ (ª¥Åh´Ùt:MHh¿f‘—wíZ~¾³3½³wEyyyyYÙ{ï½÷Þ»ïÞúÛ÷Þ{ï½÷ßoh¨¯©6o4½+//+sEhoHR*a»AÖ# ›1cÝ:¡i1¤¸ \½ú×_΢‘x<;{×.ð-ŠÆÅ ~®Àq|/ú5» ˆÅÒže¹y"}‚MÛ•Á± $³Ùd²Z7nܰa󿆆††† ™Z#…B.W«FƒÁb¢ˆ³ˆÕ~ÜYL¡Wnýîþ hi:p1+—ã.bÖnolllLK3fܸ˜˜ðððð· 2DÜÆ0 +(ÈÍÍÍ­¬|þù_Ôh/~é%ž¿páÂ…ÈÈ 23cbÆŽ;V ¨+¾»††ŒŒI“¦LéÞýðქRÿ¶N?àLRR|||<ø¼Ý9 6ÀpíÚõëW®8|:v(ð›Ã|ߨ×;¦éÖy„´ÖhÔjµ:===ýÂ…óçÏŸ?>5µ[·ÔT°Ùyñâõ륥%%—/KTTp°Ÿ_JJ·n11ññÁÁ›7oÚ´i“Õj± ±±ÑÑí§¯-eÆnçg–e“ ä 3 pw ânäÖs˜š;'´p®%«ÕbQ©eÅp, ö¥¯}Ç1øˆyÇŽ?~â„D"•ÊåcÇŽ?aÂ÷ß÷ÝÚµZmCC]ÝŒO>9{ö•+§N>-“:täˆTj2™LýúuëÖ­[FFffffuõ/¿lÚtèPyyyyjêo¼öšŸ_LL{¾£[KäêªT*•--UU••jµN§×ÇÆêõ&Ó‘#‹½üòСŸþÅ '8°`Á‚11>>¾¾(ZYYQÑÒÂ06›‡‡FãâÅ#Èy(&v .Š‚DŽAßyðU©|}I²¥¥¢BtºÚZ–ÍÉ9rÃêê 0ÌÇ'2AÌæ– ABQ»Ýb–µX8îòå={x^«-/$°((÷Û°÷ÛÜ\[[YéêʲZ­(͆ g±ð|ccm-Ï“$Aà8Ë65aσ=*1ª›£ã;\@Qx]Y­À@L±*$YU¥Ó1ŒÑÌðÚ‹?þصkÇŽ;Ÿ3yò”)S§Þz<66&&&fÏž?ÿܳçá6nÒC@^£I“V®Dw÷à`1,xÛ¶-^|û·¼mÛâÅ(åІ¹»‹WÛ²eÁpioéf©í5Hí¯Ç±›@ˆÆÝ]£‘Jår‰D­vuU«?– Ñ¨Tj5øô Žãy êÁµŸ›Å¤Ýâï´ Ëàœ-—Ëår¹^ßÒb·‹‹pA@ÓòÖmKaáòå+Vtê&—÷ïß¿ÿ±cß|óÍ7v»Éd2¡(AÄèÑcÆŒSP°}ûöíQZZV†a?þ¸qc—.ï½÷Þ{‡mذaƒÉTVVVF’‰DÑ©SAÁûïøaBÂw߉Ái:÷ ¼=ûñí êþþÐÒtº––––;ïÖ‹ËÇãƒtó<Žƒ^™žžžž–ê?9¹K—””ÄÄÈÈÐЛK :Ù¼yË–Í›?ÿüóÏ?ÿ<77777wÖ¬3¦O_±bùòeËÚ#H¨q»Ýa«×ëtz=ÈÉÖÜÜÜÜÔtÿw×.((/¿r¥®E³³»tá8°Êjÿ%:(#(Ц¥RgѨººªªªjüø±cyèAÀ¦³ge2¹üÚµ½{ÿúK©$I’ìÝ»W¯^½@Ÿjh8sæìÙ3g-Z¼¸sç·ß^²$"¢gÏ=Œ˜¤×eeӦ͘‘˜8tèСݺ 0pà¥K.lÚ´|ù²e` 7V 8eW¯^³¦¤äèÑ£GÃÂ^|qáÂSÿ/ÁÄ,uœÕÍ ™:gضÙ<ýû÷sò¤#7]GáþC·W/S?Üzüv‚˜1\\\\\\P'ÄÅsśôgYþ~bŒŸŸŸŸ¿?QpäÈ‘#‡çåååååÅÄDGÇÄ„†††6A(....)âЖ-[¶lÚþž9sæÌ™37lظqãFP &µG¼Mg#:òuùòåË¿øøÝPÔÚ‰ñìÄ¿þn<û;IM»ºzx¨T¾¾?ÿÜ«—Í6nÜ­¥mд;vâÄÉ“r¹\®TIÒô­¢ÑÈ‘#Fˆ¡€® ÄäÉ'ž=KÓ••µkמ=Ý»c†uêäãããST$‘дÕZPPXh·¯X±j•Zýé§+Wz{‡…µ¿§b|ü¬Y3g;öý÷ë×{{geeeyyñ<Ï''?þø¬Y]»††††ŠãmMMM Ã|öÙçŸ×Ö^½zåJ]†¡è¸q?þÄ"±äßÌCär…B.wVO‹¢‘ó""¢),PŸ ˜vièpÃÀd ln6@Qe¡i‚päU‚¿qdï¶ZM&‰$4´GÕjssÛï]½š}åÊ‘ÜûÜwcbW]]]]]íßüÿÁ˜Ø+c•JA²ÝöÜÅa×Üž¥rþW[kÚ+N OŸ>} ¯Zµ}û{å£BãS`Ÿï0wû»Àp%&&>>:úÁZ`lº·œE@àÈ Âó†ãÀ•Xtþn¿'w$ÝFQ§(ŠbYƒÁh4õzƒ¦e2™ ˆ£4­Ñh46ÃØíÀ+ h(J&“É †‚‚‚…Âßßß_Ôž‰i¤Û¿í·–ûÞ>=Ø!;ÞÏk4««8'ò<Ï[­6[c£sëki$ñÈWvuuuusý/„€t»y” „Ÿ¾¾þþ¾¾ee%%¥¥|äÈQ£À·@4!(’’@aç¨tbhºý‘GÆŒ9wŽaX6;{ÿþ¼¼(Š¢d² °Z3223M¦êêšš††ªªêê# þÜ­ÛlÛvþü#ŒXWWWçï?kÖŒÕ RzBSSKKsseåÑ£GŽ€ ƒ:tèXÑ€þ×ÑÆ.HÇá H`à[±bùòÒÈå‚`±ŒIaa‘‘,[T í8.;{Ï EÝÜ,ž¯©¹~˜Qñ¼V«Õ"Hvöž= ’h\=|8ÏGGÖVeöÊRiCõk*AØíû \sìØ1cÚÓ¸íÞðWß Š*•jµBñ`rO©Õ‰‰‰‰:]CCCC||§N:>=pà!ÀX.66111±¦¦®®®ÎÅeèÐÁƒiš¢(ÊÝ}Ô¨Q£jk/\¸x1..:::úòå'žxòI»Ýl6™cbbcÍf­V«•Ë####;Zß(ðöÆÕÕÕÕݽ°°°0/ïÖoåršHÓP¸Úƒ#Îz¤ó 9¾m¿'¿ûy\ô<aKD½0Èæy‚ 6›Åb±èõ--ÍÍ<òÈ#£Gƒ’‚RÑèV1éóÏ?ýtåÊû/KuuMMUÕþý9üŸÃÂÂÂÂó³³³/]Ï{?õ ÞØ ILLLìܹ°°°° IHˆŠjÛ·<¥ÀÈœ9>:}ºó·À/....66!!>>>˜Õ9oÓÜ/888˜çÇ;öÜ9à9uôèñã>>§N9CÓ&“ÉÔÒÒµkJŠLæããåÕ¶e±X,– ×5­*•§§—×!gÏž>™¹~ýúõGŽœ:uâDS“ÉÄousS(”ÊÀÀiÓ{lܸ… _|ø‡ŠÞ_7Ï{àŽ N:þÌio‚€t÷‹{-*êß_\º¤|`hG’`w ¢‚e3}SSE…xĬûµþþII<ߣǜ9m—"AÄfkn®«C«µ´´®ÎjÅ0ž'ŽCQ™›x@Q’Ä00eƒO`†‚zƒÉø‰g·OŽãyŠBQŽËÍ­®FÞ½‡íÛ7<<"""¢íÞŒc¸›ÐÛÀ">>>>.îvç€Ôl¾A}HUUB¨Q “–¶s§¿?Ë––‚0êm ÐUVDp°V›’2nœŸ_ÛNhjjjjltµÚÆFg±Æ9Ï­Q­Àþ6€«øúúùÔ«mMhhHHHøü¿6¼‚wd±˜Í&X†K$2™\.‘H$Ri{øTÜŠJ¯gÏž;799!!!aذAƒ BÐô^¿^VVZüÑG|ĶððE‹^zéìÙ^½úö óóóóëÛ·k×®]qœ$IøÃ\¼˜íêºtéþrªÜ•ôaqÿ¡ÀÛQ‡aüv€-fnýý0ðÄë8¥hí<~kž<ç¼F@ü!pσoÑ¢—^zápέbR[ H é6ÈÈGQEÓÏ>ûì³ ®\¹rå²eƒÁ ÓÝO *•J¥Z ®¼zõêÕ«VÙí cRÛ§üK³Ùl6›¿ÿþ»ï¾óŽD"‘PTϞݻÚÞíF¡[Å$A˜8q„ÌL‰D"©­Í̼tI:wNLLNž4iâDµºí=ß´Z­Öù ½¼<<||n=sÈÅ‹_ý~î¶TÀVG= ¢#?0Šãù¡Cß|ÃÎ[¿¤|zAÐéê롹Y à úß­Qsæ´½q‚$%¥¤tëöûïÇŽéõ6ÐVkåÂqÎÝîJÉÅÓÓÇÇÏÏÇE1  Þ×ý—eÈÁƒܳg×®?þ»h7Zµß® ·s4FA¸v-'çÊ•óŒ;ç¤BQz“$‡ :tðà¶z/ ȧտÿøñ¹¹¡¡ÉÉçε´ètí‘q ©F£V‚»·í]€ñŒó‘ÜÜk×®]snAÎ;œb°܈sz_pNÇYÚþ/!ÆäáT*š†u$I’Ä{==»téÜÙdúøã¥K33?ùdåJ†¹páÂàEE’‰‰ žžß|óÕW®®âî©T*•&$ìÚµcG~þ»ï¾ÿ~^Þ™3g΂Íf³a˜»»››\¾xñ¢Eîî=z¤¦‡[Ûm ¼ýöE ¤vüMQ4-@4ýÇ Âb)**,,,¼Ÿ;>!üîK}ççßq%2²S'¹UL6lèÐ!CÚêÙRR’“;w¾z5'çÚ5N§ÓëOŸ>}úøñ¯¾úò˛ӈß/7þòËúõ4M’âééîîá×öéÑÅšÄ0ýõW_}åÄèå@íÑŒBwÖ7¢V«Õ*UXXhhh¨D2qâøñÍÍz½ŸŸ¯¯J¥T¶ÅjäVBB‚‚‚ƒW¬XµêãÛ#Š)ÎÃÃ;Fž7HÇmnnh¨©ù7<ªÉÔØˆa¹¹ˆ)_++³²@ðn1B¿R’(Vƒº¶Ô9L쀠2U· 8–¾*•R©T:ç`¹†ÎíQ`ïÐÙÐåþ¯ Jü&“É|uÚ# *Ðÿ€“k[-J@úÅææææ–`žò`zXÄ»¸¸¸h4Ά=ÖõUш£ÀÆyqüàŸŠqã8ž)ÌXAxž 0 ED,'lj)X1LLÙÆqà[åy– ¡(I‚ïA"HEQŽŽ£i yÞlF‘ÉxÃÃ@Ú;Ž#IÅq» x\EÁ÷wýÂþGÓB @ ââÅ Ο÷ó 0`èÐÑ£ù•™¤Å¬ð, ŽÞúÏsÇ]¹’•uñbFÆ… ii½{÷í;`@»€Å ŸØ!Ú †¡¨ à8†ÙíâopœãAxÃÀ_@,rˆL(Š ‚€aB‚€a81peÇ0ÁqÅqApAxÔ… ð<Ž ¸¸'Ç‘$Ž“¤ Eãv»Í†  MÆ@ tˆÆF­¶¡aÈ‘#Çã8–µÛYVÄ…¾C»Ýf³ZÅã7DŠÐÐüü¼¼ë×T€¾‹ 0 1(J ´ ¨  (EóÁq–†! GQ”e„¢‡ã(JÇq@çIJ! <@W„ Ãq8Žã!ê¡0 E%p˲,‚͆á¸Ý.Dz(*&‘дD!@ ÒQÀ€AŽã¸¸ä¿7€˜´O÷f¤wo¡耩›(¡(‚Øí( D$‡¶ ¨O [‚8F¢›hj‡ã8Î0Ž;R” Žó<‚Ib˜Í†a<ϲ$‰ 6ÃX­àiXV"!Ž#§(–åyŠây—ÉP” phä @ HGá_ÅbÆq`@¿~}ûvœˆ†sÀo ÀŸÇY,V«Ý<‹hè‡pœ¢(J*eYA"^LŒçFÄp& ‚ÀÜÉlfY›¦IR4ã+*b˜––¼<›M«ÕjëëÝÝ]\\]ƒƒIR¥ŠU*½¼ aŠ¢iš&I–EƒE9N©ts@ äáò>ÿü‹/Ö¬9pààÁC‡®^ÍɹvmÁ‚gŸ}úéŽQŽC†Á0 ³Á0«U†¦qÇiš$)ª¹Ùf3™ôz–mi)/¯¨¨¬4™B”J‰D.Š’H<<ÜÝIR¥v ƒã‚@’@L²Û9N(Š PTD&CQ’4™aÖ¯¿|ùèÑC‡ššòó¯_on®­U*­VEÑÆF£Q¡Ë¥Òwß<ùÉ'»v•Éüüh0Œ¢¤R1ê@ éÜV@E£Ï?_½úêÕ«WsrÆ7î‘GΟOKKOÿò˯¿^»vþügŸ7¯c„çyž$qÃH’aPÇ1 Çkkm6ƒaÅŠôô½{7n¼~ýìÙÀ@ǰêj coï'ž JM<9((%ÅÃC£quuä Az=‚ðüðêÕ}û’’T*oïo¿íÞ}êT¡(77AÀ°¤$OÏÐÐÇ{ñÅÊÊææÆÆÏ>;~ï^!g†™’ø'äb r1\8ÐŽ‰ŸÎa×!@ H{p[©k×””””eË–.ýÏ”J¥R©Ç•J…B¡øàƒwß}ë­.]ºtIJjÛ° HR ¬`·ó@ Ò^ÜÖÄ®W¯^½zöt΃äü­B¡P(=z¤¦vë&æKj+0 „бä@p1ø‚#Žó<Ï ÏŠŠébyžãššÁlþì³k×JMŽŽ‰9}:3óüùmÛÞ²ÇIR.ê)ŽÓjããããÓÓKK¯_¯©±Z››1Ìn·Ù¤RŠ¢i»Ýn·Û9džㄢ8Ãä×_srNœ ¡(µº{÷øøÄÄÉ“?ú腌Ɩ–º: õó›;÷?>ýÔÍ h:0P¥Òhêê\\¢¸Ø`Ðj==¥R77h–aHÄÁÃ0¥  ŠÑŒçqœã@@rè³@ ´'.Ì7È2Äq,Ë0 P6Çá8†qÈw„a²†  Š"HS“Ýn±Ñ„Ò^»67÷äI»Ýb±Z§Nuq‰ŒÌÈÈξt‰¢¢£CCq¼OŸÈÈk×8®©éòå¼¼œŠòðP©ŠŠ,–¦&½žã¬V¢0Œ¢hÇ) Çj ÉÌÌšš²2µÚÍÍÅÃZZ´Úòò²2‚÷ôôññõuw7 A8xðĉC‡ÂÃ1L.wq!Š"I$1 ˆF6‚M).DZ,Ç; †QŠãÄãÒÀq™ÌÕÕÓÓ××Ý]*ýç  “J]]==}|\]%ì_Ÿf@ ÿ›tÀ Ênç8ŠÂq1T‚³P ,Ëó c±ØlR)†¡¨§'EÑ4•]VÖÐP]ýãW®;ö裡¡))qqaaQQ(ÚÒb±h4f3ŠªÕ‰Ri2™ÍV«BAÓr¹ÙÜÒ¢×ØlÍÍï½—ž¾{÷óÏ_¼¸mÛÂ…ii›6½ñÆþý?ý4wî™3¿ü2nÜŸ®^ÝÒRW×аxq×®£F54X­fsK‹D‚a,Ëó‚PQÑÜÜØž¥OŸÈȤ$–ež—ËU*µÇår©”ã8Žã0Ìlæ8©”ãÁb1›- øÑ4Ž„T <Ìf–Z<‹Åj¼=AQµzôè¥K?ûlïÞ¹sƒƒivXŸwTš˜¸bEnna¡Éd2‰ŸYYï¼õ¿]vŠòóKM;vÔ¨øx7·Û bý\¹røðôéžžÿ>! ¼½^¸ð÷ß/_¾r¥¡¡¢âìÙ‚‚²²+Wª«[´¨woææRI¥ááO?½uëéÓZmEÅÙ³……W¯æçoÝ:cFT”T lj¶@¡4諯ªª*+׬0@¡€5@ ÷Ê ÓEÑ´DBQ4-•R”D"•Ò´D"“O™L¡P©d2…B­–É”JµZ.W*5¹\¥Ÿ..mñH8îHò þ ¼qX–ç BD*ºEêj³¹©é»ï._>rdÊ”;>ýÔË ÇЧžŠŒìÓ':Z.÷õ}þù±cgÎDQŽ#­ö¯¿23%’òr£qüøØØ^½^|1)iäÈñãCBRRÜÝ]]ÝÜD¡HššH’ç †¦1L0,88 0ð‰'†7nÐ W׈ˆÿÐÐñãûõ3ÆË«¼œe=äÞÛ †‘$MSÈë@ {å¿>H7þðÃ×_wG"„a€8„ãbÒV .±,†ñ|Q‘ÍÖÔtùrYYIÉÇgeýù'Ç••ÕÖ’Ò½û‹/&$ ¦V«Tz½Ýn·?ÿüàÁ=6dHLLjêçÎ<ÙµkLLBB÷î¾¾11©©( /A`½Þh¤iš¦i«Õl¶XhZ­V©€×“ X,V+IÒ´DÂ06›ÕªRI¥2Ù_Lœøâ‹ öé3q¢Ba6Ûí>>~~Çó$™šêé½ti¯^S§nÚtæÌþý+VìÛ·y3ŠŽžœÜ»wDD||r²›[p°›› P†aˆÝ‡a(*>Ý»/\8fŒD²{÷æÍW®øúŽ1jÔ”)ÉÉ^^$Y]}æÌ‡~ýõÙ³(êã3eÊìÙ½{sÜÞ½ü±}{UXta˜»{JʨQO?YRòí·[¶\½ÚØÈ󂢉ψ>:zô¸qÑÑ …јŸþü?8`60z´·÷É“6tèÀ*•ÕŠ §×œ9sölE…Éäü[šöõ6ì•W^yå™gFŒ ¥éêêsç¾ýöw¾ürçÎ’°%‚ãîî=zŒ?oÞÔ©}ú¤¦ÆÆ¸¹‘¤ÅRY™•uèЗ_þç?7ž>­Õ‚`2S§¾ÿþܹÛ·oØP\Ãéð<Ã8êQ"ñóëÖÍÏÏbÉͽzµ©‰eAO6ì•WÞ|31AD§KJ ”H6n,+3ïå™Zû~[ÛÞÃTª„„qã^}uÑ¢qãzõ ¦i“©²27wïÞ5k>ÿ|íÚóç[ZÄ들‡GŸ>óæ-Xðüó<çå… Zí¥K»wÿðÃÒ¥kצ§×׃Qé^Þ†i4‰‰sæ¼ûîüùS§vé¢R55?ÿÛoŸ}––4G7¿ökÿ­mŸ ­(S§.Yòâ‹O<ѽ»««^áÂŽË—ÿðƒN÷È#Ï=ö×_o¿ýí·iiz½ ´¦>Q(ºwÿþûÌÌõë'L@¿þ7®K—W^9yòÞÚù¿E‡SÃÓ4ÇG x7†aŠ’dn®ÕªÕ>õÔþýk×=ZPpñâ›o:aÂ{ïõé3}zß¾4.‘Øí$ɲr¹D‚ãR)E1 Ç1 †©T ù`µò<ÇaÏó<ËŽ4a|™ìvŽãyÅ0šð$v;Ï ¥P”ã8h³ÌfŠây’¦C4\Çq(Êq$IQÀ¤FA"! CQŠR(x^*íÑÃÃ#2r󿤤éÓ¿újôèçž«««¬¬¯ùåãÇýµ®AL&“ ˆZv;Ï‹(*“…… úÅo¾9p «k^ÞÅ‹—.‰"I††öí›’…a gÏ9räÈÏ?8pý:Çuí:iÒ§Ÿ>õTd¤R)X‘dXØÄ‰ ~ÿýܹ‘‘Vë•+ii»wgfšÍÉÉsæ,\¸bÅàÁ7úp„F>bÄàÁ={ΚõÊ+‹½õV—. “™yâÄÙ³û÷çä46Z­@OAMjꀩ©))®®ÎWÁ0¥24´K—±c{ôð÷W*ÁREe²ÔÔyó^|ñÃyÄÏÏ`ÈË+((-U©úõûôÓwÞ™2eæÌ¡C)ê^Ÿ¿uõIQ±±Ó¦½ôÒºu³f…„´´\ºtþüîÝ—.™Lññ³f½øâ÷ßO›ø¿“h˜¦cb^yeãÆƒW¬èÙÓb9~|ÇŽ ÔëûôY¾|ãÆÍ›Üߟ ç'$,Y²qãï¿/Zxýúo¿ýøã_¬[·oߥK,;uê¸qÁÁŽúiíù­C" yì±wÞY²ä½÷fÍ A©49yÁ‚>zûí+V¬xûíeË.ìÑÃø!f(ŽÇŽöÚwß}ñEÿþ:Ýñã»v>]_Ÿ”ôÌ36üôÓäÉÁÁâù4=yòèÑII8^ZzèІ ë×öÙ÷ߟ9Ãq£F½õÖo¿­ZÕ³§Z-&$puíÞ}êÔéÓß}÷—_¶lùüó>}ZZŽ»ýõÛ¹<<¼_¿ÐP))9¾¼Üjuô]…Ân×é¬VžGQ…")éÕW?þ8%åôéÏ>;qB¯—ɼ½]]ïõyZßZ×Þ„¦£¢žzêÏ?Oúä“Ù³}}ËËؾýàÁ3gª«UªÄĘÆq¾TšœüÎ;›7ïßÿá‡]º46:´}ûƇ55¥¦~øáæÍ¾óN|¼L&ÖOëÞŽ{zNš´~ý/¿|ñÅìÙ55gϦ¥•”=ýôæÍË–uí*•ÞhÊÚ¾í¿µíEÕê?ûlóæ~xþù¨¨––ôô´´ü|™3ûm×®wÞyá…9sËѺú¼‚P(\])Ц]]århÆ @ZÁ™3îÜÙÐP]]^ÞVŸàšÍÍ 55¾­D,†©®› dD2ív«µW¯mÛÞÔ¨Ÿ~ë­Ý»óòNŸnl£œ# #‚`4Z­ õ*>.þÍóà<žÆ{‚À²à¨ g·‹ÿâyñÎ Ã0à/žg†a Ï²XÀµ9NL&AÎb1™Ìf ëâyŽã︦øl@$ãyžß·¯¥¥¨(2róæ7Þxá…Ç¿ÿ^¯·XZZ†ãìv [kÿ¢jõ#|òÉš5‡=óLHˆRéåÕ½ûªU?ÿ¼jÕ÷ßççwó|;0ÌËkذ×_OKûöÛG‰ˆÓM‡„,YòÓO_~ùûïãÇ{z:$9s椧úiÿþ~~C*Žž1ãèÑ?þøê«³gß{¯W/?¿Û-§¤ÒèèU«¶lY¹rÙ²øxg­A„„L™òî»éé_~9|8Xp ¨B‘°zõo¿­YóÓOÆ9D*U(úõ[¼xåÊŒŒ?þX¼xôhE[ÿü­­O™,:zùò͛׬ùùçaÃ\]¾æí=lØâÅ.lÚôä“Ý»ÿý’ #AÓK–\¾\PpíÚDGÿÝ"L&ëÜyÍšÒÒ‚‚ŒŒ—^ q,bh:!áÃ×éΛ5K\ ¢¨›ÛÔ©GŽäåUU}÷]×®rù?µçÖïýÆÍmòä­[uºÊÊO>éÕëv÷‘É?û¬¸¸°ÐdÊÍ}ýõädÇ™*Õ°aß~[_ßÔôã#GªÕw¾#Žûû?ùä®]--W¯.ZÚzÛ]ÿîÁ0w÷GY·®¾Þhܳgá°0±W ¨§ç¸qÇŽµ´œ;÷Ùg]»ªT‘‘‹íÚUZºgÏĉ½z}øai©N·mÛcyzÞ‹ZkßokÛ‚Èåýúýøcf¦É”“³xqçÎwîw*UïÞ¿üRW——wüø“Oúú:F1˜;wûv½¾¶vÍšAƒ@nÁÖ½/÷ó›:õÄ ƒáêÕ;'OöðÇ÷ñ™5kÿþë×M&­ö›o ATû¿»ö‰¢..ƒíØÑؘ—wìØ“O:Æq sq5jãÆK—L&“iûöéÓ½¼0¬õõé Eùû»páóÏ¿ñÆÂ…Æ‹›\òOt@GNš&àõƒ (Êq_~™“sà€NgµšLo¿=bÄÌ™£Gwꔚêêj6ã8‚X,ÀžãA.§i‡¡‡ Ðâ`Ï#Ðâ Ðò‚Èd&N’ ü}œ)¦nåy‚ –µÛY–çÉËò¼L&¢T¢(IJ$Àô ›Ü ¸¾ø7ð+BQ±XHAPT¯·Û‡W©BCçÍ‹ïÛ÷çŸëê.]:t¨¼<+Ëj5™ †áù«CÂ0¥2:úå—ß}wòd?¿Ã‡¿ùæå—wíªª²XþNPÃ0&4´K—3fÎ|ôÑ>X´èÉ'—,:ÔË‹ (J"¡iPr…ÂÏ/:Z¥²ÙJJjjA£qqQ«ÝÝ]\d2›­ºº¥EÜÝ<=ÿn¿Ï`Ø»÷×_/\Íæî’tu  Äñ††Ó§srôzÑ DŒÆŒŒ£G‹ŠìvçRÞûóßM}’¤›[HH§NIKKFF~¾Áàœ:¸©©    ®N*õ÷wsk[ÀÃÇ]\"#;wvw7™®_/.æy77ooOOooooµÚjÍϯ­ÿ¸8?? ‚Á“sâDy¹F3vìË//^<~|t´‡Eýýòºµç?8ÊËwìØ½;'ÇavÇ0ZmU•N‡aJ¥ZMÓÎŽö8îæ–”4bÄÂ…~øÁßÿóÏ_|±zõœ9¡¡$)•*•RéÍnù­»þýŒØaaO>ùÎ;pÜîÝkÖlÞ\Râè`; E1L* 3fÅŠ d͚ŋ÷쩪²ÛÁ–Øšº—»·îý¶¾½Q”OÏž]º¨TÕÕ{÷îßýºÙ|û§¡(_ßÎããåòÚÚÓ§/\hlt»q\CÃ… iiUU ETT·n~~7Žwó¾h:00118XòóÿøãÌ`" ®^Wwðà/¿ää<œöwí“¢||ââÂÃI²¬lÿþÓ§†q<ßÜ|êÔ¦M/:Ïr÷SŸb·WVîÚµzõš5Ë–­^}à@i©óX@ w¢Ã H6Â\β8^\l±44üðÃÅ‹û÷/\Û¯_·n¡¡F£Åb·#Ž‚Èd4­ÓaË67#ËŠ.Šx2iEÅi˜$šp ˜Âÿƒ1Œ¦år©Al6½Þá/–ßj5›­V¡(ˆœÿò“ÉÔj™ EŠqã6o>r¤¨¨¨èìYðyéҷߦ¤$Š‚¸•à7vûÕ«Ë—?þø¤IŸ}ÖØ8rä×_ïÙSZÚØxúô¡C_=kV78¶öüÇ5655ÝØ–¸â‘‰å¥¨ˆˆ§Ÿþá‡+WŽ]´¨W//-=ujïÞ}ûví:{¶¾Þ¹ÝËõï‚ ™9óƒ/¾páí·ß|óèQ­ÖÑjÁn7-Apu2äƒ- Ù¶íý÷×®ÍË!hpE9Îl6ï5˜GkÞoëÛŽËåîî … èõ55Ã7fp\.×här±Xšš,–}8ÎlÖé,‘É\]årçVwwï Ã$•J*“I«5Çž7™ZZDcãÕþ[Ó>1L*U©d2A°X´Z瑌·:]CƒÁਵ{¯O¹?:Ü4ÐðŽsÜÆ99ÇK$ƒÕ:qbLL÷î"(*—Ó´D"†a@D¾A`Æ0 è€IBÔÕ (ȨŒæ( ÃpÇÁ9¢Î¿E©ÇqÜnÇ0›eív’dŠ"G §ÃÝÕ§ 0ŒÕj³!IÊå7ïòbEI$… ,k42Ì¿?:Ï[,z½Ù,Ão¿Ù«×ìÙ'OÞi`³UWïÛ·lÙ‚ûö-_.•÷ê5qâ»ï®[÷Þ{»wÿðƒV;aÂ_Õ׃wÙÚóLÙ¹ïÏR(:w~ýõ·ÞêÒ%=}Þ¼{lÛ6 ‚àx@€ZýôÓ·{â»»þ½CÓÓ§¯[÷ñDZ±çÏ¿úêÈ‘?ÿ\Zz³Á0ÍÍ%%:Šöï¯Ñœ>=eÊòåYYF#н+•îîR©NWQ¡ÕÞë¶GkÞocckÛM[,--f3‚Èå2X„ßîYyÞj5-¡i•êf†Ñ´BAÓ`ûãæí˜»y_‚`³6Šúø¸¸€‘I ­€¢‰F£TÒ4Š66Þ_¹{Z×>yÞb1,•É<=ŠCJà¸Bq£ s?õ @ ÷C‡Ó ™L<Ïq@x8r¤¹¹°pìØØØÔT…‚¢T*›aXÖnÇ0µXÆbÁ0A@Q¥R(J¡{’V+Ç%20¸Ì8pÇqœãxÞy— Ãìv 8…=†aØ‘#¹¹™™'O––fd°¬TŠaëן;·wï_]¼xò$Ça¦ [ Ôƒ³A@œð-ÑèEQÔng³™e) AxÃPÔjå8†éÔÉÏ/$„$}}ÝÜÌfŠÂq› ˆd»½ªjãÆ?Þ¸ñÂ…øøY³>ÿ|Ê”à`™ÌQB¥(µÚÏO*5›‹‹kj“Š*‰‰Ýºy{;?5Ï UU99:TŸàîÞÖVá‚À²f3Ç‘¤Z ²H(ÊË«_¿¤¤Ó'Úí¥¥……v»§çÀÉÉnn¢æEe²„„¾}Üý˜îïùÿ¹>¦±±¬¬¬Œa4š„„À@gÃ)U*CC==¦®îÚ5gsñ µºoßÿügíÚ={¶oÿàƒÉ“殪Ãt „꿎kjº~=#£¡A©ìÚuàÀ  Ö;‹ó¼ÅRZzêÔ–-ï½·zun.MÇÆvéâﻨ­=ÿîË*xÁñ¶ÑÏ€E¯§gp°B¡Óåæ9L.1ÌÕµ{÷Ñ£ÃÂüFQ¥²sç%K~ýõ7""þüóÕWçÎýùçÊÊ¿¬ÖòòS§rs9Îj=~÷î³gE³0‰$<|РèhÏÏOO/)Ã:Ü/wz¿­oo6[mmZÚÕ«Vk@ÀС}û:‚µü}¯®¾r¥ ÀjõöNM‰Q©œ}5šØØ.]|}­ÖââÌÌêêÖ‹„VkyyvvI ŠFDŒÓµ«úøðôè1aBTÔ?µ¼¶lÿ­mŸ6[UUvöµkVkHÈØ±Ã‡ˆµ‰¢jujêÔ©))Îiƒï¯>¥ÒèèW^Ù°á§ŸvïÞ°á™g`Jbr·t8 ’DÒ'ÚíKU•Å¢Ó…‡‡†¦¤à80Çày KO¯­-.ÎÉ©ªÊÏŸ0!9yȵ,Ä ³™ ¤R‰DpEY–ã@d9A@Q‚ ëD=Iâ8À#ÏÓ4‚¤ÝÎó÷Ùg;wnÚÔÐàâÂó¯¿.“MŸþÅW¯<Ø­›\îãÞ©Sx¸««Jåæ&‘A (˂ĮÀs‰çEÿ# érû9 H*‚PÔŒ§Oÿø£¿?ÏËdÜ«×äɽ{»¸„†úú’¤JURb±èt--6[[-!ZÇ57ge}ôÑGùùýðÃÒ¥Ï>ûþûÕÕË—¿ñƉMM,k±ÔÔ\ºÔØèâ2nÜäÉ}ûfdüùguµZ’2|øsÏ……/Çõl¶ŠŠ­[÷î­¬œ0aÚ´yóÞ}×lÞ½{ïÞâb›M¥ ‹eÙôô5köí«©i½Í¸ÝÞØ˜•USƒa‹Ož|Ønß¼ùÍ7?úèÉ' âÄ —Ñ£ß{oÁ¥òàÁiÓNŸv6Ìk­{¿<ßÚö¦×Ÿ9³jÕÆ……'N,Z´mÛÚµ,ûÞ{›7ç屬¿RR×®8¾oßG}ÿ}a¡ÕÚÒ’ž¾zõo¿µ´ìÝ»jÕòå¯¿Ž 7fd HB³Ϯ\™šÚÜüÛo3gž>ÝÒÒž·n4®©9zôë¯yóÍ~øî»¯¿^¾üÃÿø£¬,8xüø—^êÑC´•¸×úiïö©×§§öÙúõGŽ|ôÑ–-»wGEíÞ“£Tvï>n\×® À’ãú­­OgpÜÍ-%eäÈÞ½ B‹å‹/ ¹[ð'Ÿœ9óÑGÝÜ<=}|Úê¢õõ55>>þþ_ýí·ëÖÝýo_}õé§_z A¤R ÛºµªêÒ¥”©Ô×·sg/¯ˆ CQÍ̬¯/*zé¥#G~øÁhÔëÍæ€oo__OO•ÊÅÅfÃ0ž7a€.H"aìv– Ž#: eÂq1‹A0 ÇÙl$‰ §N™ÍuuõõUUññáâb±øù©T½{DG÷íëãÓ©“\Žã4-‘ð<ŽSËâ¸ àø‚èù‚ ¢AËŸ(EÑC‡ª«/_þðË÷ìéÓ'""1±O7·  ™Œ$%’´´ë×/_®«cY«uذ€€¸¸Õ«—.]µª=›Š„Fäç§TVV^¾|ìXAÑhµ659SSãê:p`ß¾þþ:Ý•+ùùååf³Ápõêµkz}``¯^LŸ>xp\œŸ_sóùóŸ|²ysY™TªP47Ÿ=›–VVÖÒÂó<ßÜœ——™i±xzöí;hPŸ>ãÇ÷íëæÆóååÙÙ—/§¥UTX,`ªÇ0™ÌÝ=2ÒËËf»páÌ™ÜÜššÛ- Áj-++(0}}SRzô7®W¯ðpµº¼üÈ‘?Þ»·©I­ÆñÊÊcÇ.^¬©1™xžeëê®^Íʺ|ÙjU«#"BC=Û³ÇnïÓ§wo…"-m÷îsçòó­ÖÖ=këÓje˜êêË—¯^-/W©bbÆ9²oß‘#\\NÚ±ãÍ7þùÊ•[ó~d`àȑShQŸ>UUË–½þúªUçÏß[n“¶A¬ÖêêÊJ’LH5jâÄ'Ÿœ5kìØ‘#cc †ýûûíÂ…†–å8­6=ýàÁÓ§õúàà‘#|Ú´Ù³§Lé×/%Å×—ã ;räèÑÜ\°?Íó‹Åââ’šúÈ#&<ùäÓO?öØ´iÇGFrÜÙ³ß}7þÂ…¿ÿ~íš(@¶öü{…aêê®_¯¨P©:wžý‘Gºvõ÷ol@øø°0»ýÌ™;Nž,-5µÚ Μil ›8qöì žx¢ÿà຺;^~ùý÷/_–Ë5šªªƒ÷ì¹|¹±QZwýÖnº ¨LÚ·orrp0ÃX­Je``ppDDDDHø Äñk×öì9tû³¹ àÌ™3g †˜˜éÓ,˜>}„¤$={ö“O^yeáÂM›Š‹ÿ>ôËÝÐÚ÷ÛÚö† S]–¶sçùó6[tô¨Q“&=ùäãÙ·oDA”–?~èÐáÃ×®óm¶²²cÇŽ/,tsëÓgöìgŸ6mêÔþý½½kkÿ}Ù²'žX²äèQQßÑÚö`±¹¹^¸`4†‡øè£“'÷íªÕîÜùÒKo½uþ{¶¼üÚµÙ³·o_±¤­\9hÐÌ™‰‰$éãÃqR)AI‚˜L,kµJ¥8NÆó$‰ $Ñ‚[ü „dfz—/—–ææúøøù¹¸H¥r9Ž3 ÏK$À¨Ã@N%žÇqà e³!ˆÁ@ ô8Ï+†ãÀØü‚ãP”çÏ«­-,|â‰={¾ùfâĈˆ””·ÞêßÒ$¥ÒjEQ‘HbÆŒ={V¯®©Q(8nçÎÞ½gÏV©(ÊÍ 6܃R™œüì³¾ñI¾ñÆO¬^}üxÇM2¨ÑàM½€IDATŒ½~}QÑÆ4½`AL̬Y[¶ÔÔü/¥“…@ ÿ»¨Õǯ[W\üë¯ÉOÏšµgOK ¬ò0èp>HÍÍgµšÍÁó]º……]½ZZšŸÏq‚`µ*‰R‰ v»ÍÖ¯_``LÌúõ>úâ‹--f³Ñ8bį¿.[¶reEÅñã••,ÛÜÌóv»ÕJ2HôŠ ‰ÕÊó8ÜaÁ~4–€abˆ©THR¡ày’ìÝ;44>>(H.ww—É$qÃHE)†¡(„ìvŽcY£E­VšÆquuÅq§(AÉiYöøq­öúõçŸ?}zãÆiÓöïÿúë bc»wç¾}§LQ(„¦kkÆqWWWSSWˆ¢r9Ç9"ïAÚ¥i•J©¼1|Ž»º0jT§NUUuýzI‰ÅÒ‘KA’,{ñâO?}ýõ¾}µµP4‚@  •JÝÝÝÝ çùŒ$ýüyäÙg{ôH Ïœ¹~Ýî@<ÎÉÕ•çI²¹Ç$:Z©ôðøñÇ+W¶n­­:´¹Y¥¢i//›ÍfcY±Xp|Ð —ˆˆÝ»§N}õÕo¾¹|ùèÑ/¿<{öÏ?׬9~ïÞ±cãã»w6ÌÏ/&¦[7& @&“Ë]\Hx4{‚À "úʰ,I‚¼J‚Àq,k·SÏã¸D‚¢8N’(Šãâ¹À|Ž$) ¨í) Ç¢8În×jÆ––½{++¯^ݲ%'çÌ™œœšš²²>}¢¢6m>|Þ¼„oïNd2› dV²Z•Jš&ˆÒR»]¯ÏÏ·Û››_|ÑËkÌ• h¾Ú—ŒŒ?þøê+Ø1nfìØ;¶m;¶£=Wròøñóç#‚0LAÁ×_Ï›7lØÃ|“Éd*,„íÜ;‹geµ´,^ÜÚßÉåryx8¬?rÿt8‰eç]\E»v ˆˆÀ0µZ"Ù°áøñ?ÿ|ë­§M£i©T©r6›ÝÎ0>>4íêúþû©©“&M›ݫ׾}yy{öäå]¼¸wïÉ“GFD¸¹ùø àãæå%•ªÕR)Ðñ<Õân­ˆ³#',ÛÜÌ0K}½Í¦××Ö2ŒÑXV¦×76VU56Ö×[,uuÍÍõõMM••:Vkµ Kß¾~~‘‘K–LºhQl¬·wh¨FÃó8Ž¢6Š¢(I„^o·Ûlr9†ÉdW®_¿Î²z}\œ—W` Š"Hûk îÿK (I*•¡¡QQ¡¡:yz*e³55åæ^¾\PŸ¯×C«õ».P ÈAQšvs‹ŽNMMNŽvq¡i‹¥ºúÒ¥cÇΟ¿råþB¾C H[Ðá|ŠŠ€’Õj6cE¡èöíUUYY‹mÞüÕW+Wòøã=ß¿¿Ù̲ ÀŽ[,bènŽS* ‚¦1Œ$q\§‹¥¬ÌlnnNO¯¬,(ص« àÂJ»©ÉhÔéôz‹Åd"IŠ¢(•J­V(d2Š’HHï&I‰¤¥Åb1™l6£±¹Ùd2Æl¶Z]]q\"qsÃqŠ"I›ãL&šÆñîݽ½Ã†MLìÞ=6ÖÍÍÏ/0çår™L"‘Ë­Váy‚°X8ŽeQTŒFš™ AP´±Q§kl|ôÑ >þØÓÓÓÓËë?}ôÕW›šÆjus£(¥6\@ ¤=èp$’´Xl6–•Je2»Ýn7›}ÔÓ³K—ÌÌÁƒÇŽ}ñÅßÿö[!nÚ´””ÍfA …ÂlF‚ Išz«•çy^£1™0ÌÕU*õõŽŽŒôõ3'2²gO³™em¶ÊÊææúú¢¢ººªªòò––ººº:£±¥x4Ùl cµb‚Øl¾¾8N’2™J¨Pøø¨ÕJ%†Q”·7E)¡¡*•‡‡§§L¦REE©Õ~~‚ãApˆ”Œï@Ü<‹ÅnÇqA IƒA.çyww»Ã.^4ËÊæÍ;|ø‡ê릥eõêaÃ^|D“ËIòÆ>@ ¤mépðê¡i³™aA&“ÉXÖl¶Ûß?!aìX»Ý`°ZgÏþþûeËÌf½¾©iÖ¬}T„aĬ tÇñ<Ã(•4 bÕ‘¤Õʲšœ-M«-.™ŽÞ}·K—#fÌèÚuà@’¤išÆ0†!1Q­ p(©Í´h(*2™(lÁ @ ´'N@Â0 ¿çãÌß@0oަoB‰Ñh4šLÑÑ …¯ï7ßôì9cÆ7ߤ¦Nž¼rå™3üñýöÝwÛ·ãøž=:yzzy ܽ{ß¾;GEÅÇS”F£TnØpþü\¾œ›{õêØ±ùù©©Ï=×»÷¸q55õõ55Ÿ¾ÿ¯¿VWËå×¹s}}nnb¢JŒ¢‚€¢ee§×_¼XY™Ÿ_SÓØØÐàç'•º¸ÄÇËdžž;v ²`ArrppT(‡ÍÆó,Ëqv;0'$P&¥(’ 1 EÆèÆš€@ @ íE‡@úW•LÀÐ A0ŒçZ&–åy†!…B¡Æy‹Ng0H¥j5E ‚JÕ¯_LLbâ…ݺuú´ÍVW——WQQZúÃׯÿöIj4II‰ÉT[ÛÐ@ÓFãÆåå§O§§ïÝ[XØÔTY R¾Ö×c˜J%‘ง‡RY\\SSY鿆¢ ÅÕ«……¹¹âë«V÷éûÖ[ݺש“«k` Çá8ˆb‡¢ ò‚`6£¨ ($)‘X­(Š pꂘ“$Œ„„`p@ @Úèƒ éÄ¿C‚ã¢&Ú$‚ IŠÒéXĤ£i©T&“É´Zž7™ÎŸoi©¬”JcbBBúõëÙ³oßáÃA.gYEÚÚ––¦¦ÜÜææŠŠ×^Û±cÍšÊJ‚HXÖËK£),4L&³ÙÝA(*0088&F*uu‹c…âõ×ÇŒyüq†;'ÇbihxçÇ7ntuÅqŠÒ뛚Ífoo‹…çq\£±Ûqœ¦) Ç„ hˆ‚ L!âÛÇ9ëŒPAŠG@ HûÓá¢Ø‰Æu(Š¢(Šã>ÿû¸˜€› HE1Œ ôz³ÙÍ hd&BÇ0F(Š¢jkM&ÆfCQ 3›ív‹AD¬VAð÷—H\]{÷ ILLL ‹‹“Ë)J­V©*+íö^2dÉ’ÈÈQ£hºªÊhliAQÕé¤Ršnl4›m6 ³ZQ42R&ó÷ïÑ# >~ÏžššË—Ï«®ÎÍaÜÜ@¼<™ Çõz‚@³™al6  #Žãyà…$ ‡ 0…:\YV!@ HûÐá4H<¾©ÉËkôèÄÄÎ_{-9yôh†¡išÖë Ã(,ÌÊbY†1™ÜÜärWWàRÀvéâï-‘”—?~þ|EE^ÞˆFc}}Hˆ»{PÏ3ŒÝ®R¡(E!Ž“dK †Ùl ‚$¿À²‚À²†¢DBG–%A`l@ @Ú‹¤áÖã@0rEQ”¢ìv‚Ðé(Šaär`pÇ0(Êq$‰¢J¥J%—UVÕÕ‘dK‹—A¸¹!¹Bd2Áñ§ŸNH0`ÆŒ°°nÝ<=½½½¼XEW†­X1`Àôésçz{wíJQ$)‘„„ÈåžžG’Âó6˦¦ªTþþRis3ÇååUWWV–•™Í:]x8Ð qAØl$Éó ¼„Fò$ Ìç€ÎÇQ»E§'ÖIBñ@ i_: Rk!IQ©„$yÞb±Ù€àäåE’2ÙcÅÄôî½lYNÎ?tíºråË/“¤Zíê ø†eY–$I’$FÓEQR©T*•êtMMÍÍááJ¥›[|¼¿xxŸ> II¾¾ÞÞMM c6z½ÙŒ J¥TªÓÙíFcS“\Naa>>~~2AÐ4ð4BQN–eYAÄDµb–'@ Òø× H d6Mã8A€¯,‹¢(JDz'††v놢ÇÛíçÎéõee‚ÐÒb³yxxxxx¨T*•J%“Ñ´D‚ ,ËqÂó ×’ 45iµZ­V˲:]AAuuiéÙÙgÏ66ÚlV+A¨Õr9ðw×±Ûív»ÇM&»}È„„Þ½;wöõŽÏi4ò<ËJ¥EŽH}< bj\@ ò°ù× H4¢À÷Hx˜¨ñ<ÇÇ!ˆZã ÅìÙ))Æ=ñøÆ\ˆ' ‘˜[Éñ­Å‚ f3ÈIT[k04557 ƒT*—Ëd&“ÁD–U(d2™L¯§(ˆË==%–E³ÙjµXPT&£( q˲,Ž Ï#ˆèA@ @6ÿ&v‚ 8ÎqÀ›EÄjEIWA(p3Éjåy—HpœãÄt³GA(Šãa·ó<ÐêøV*%I‰A‚hÚÍ-(H"ñö‚(•rßá8Ã`ˆDÇqÇó2™L&•‚gýìuXUK×Àwž.º%¤%lÅÀÀn±[±»[ì¸vƒ‚ (a` Š¢ÒÝÍéÞûûc_> TPñúÞ»Ïóž× Ã>³gÖÄšµf-¥R­V©ˆ¬G0LX½HHHHHHHHHHHþþtA‚a"ÊŽÓéDxpâ~©Tj5† TªJ…aD`a® žã8N¡€ ×ÅÈ#‚'¨Õ Vïê­= …J…ã ‘¾Ã;†ª‘\NX² ‚èt¥R­¥ÇQ”Fƒa…‚@P,…‚ÉÒ‚DBBBBBBBBBògð/P` ;…‚Pv@‚¥A0ŒP‘”J¦PPÇëìLõY†plj u.p„ Ç1 † U}@ÂR„¢„ʼnxªÕ0L$­³-á8 |( Ãg7BQ¢TÝ¿HHHHHHHHHHHþ þ示Dª8NØs`”J¨»ED¤`EQ&Ôµº>X6‘c¨î>¡a† †a•Š¢¢V#†aŽ«Õ0LDžS©ÔjþØúDX‘0¬.‹‚V+Æ0‰U*† ¡R‰ÒAÄ¿É $$$$$$$$$$œ‚T§²ünHëÅ?"‡£©Éb‘I`IHê –N77ïÐaÀ´´’üþ“›f±tt ÌÍ­¬¬­œÚ·wwïÙsÀ€&L˜={æÌõëwî  ‰Œ Ú»·K6@Ç0àÊ•¸¸'O.lÙò[@F30hݺm[kkCÞ=ƒ‚?NLܾÝѱ.šQŠÇëÒåÌ™””û÷ôôüøw?jjöépÿ~pðèÑ߮㈠¤«;räµkwï^»æçghøk#ðÑh¶¶£GoÚ´ti§NzzdÝzYÕÐptìÖÍ×·S'cc:ýŸR¤QTW·{÷ùóçÍ:ÔܼùîÎÁ°‰Éøñ§O'$œ8Ñ£‡‘‘‰I·n›7‡†®_ß·¯Ž)Í "HÝ]Ê?I>™LOÏ bcoßž7¯M"®(É¿æpllÚ·wumÝZC£¹ÆxcÖ/åpôôØlÕÒêØqæÌƒW®tsãñÈãKrü’üù†™¦Ñ¬­/ŽŽ ›;×ÄD.çóù|…‚Å22ÒÕEÑ””{÷BBîßOK{ùòúõ'O^¼ÈÊR(@˜LËåñ8íÛ§Ù(ji9}úÁƒW¯ÚØìÚµx1‡£­­­-"Hýß ††§ç°a: h^ÞŽN›6;vìX—BöSÔj¡0-íåË””òr"0Ä—@¶¶·÷ܹ>>¦¦/––~­äA§›švïî⢩)íßÏç·¬~Š™™·÷´icƼ~¼ÿãÇeejõÏ>•p×$n©5å¯`˜JE “Ë•ÊÆü-•êà°vmxxLÌÔ©<^eeqqYYIIqqiiIIe¥@ K$r¹T*•Êd|~JÊõëûö¦¤ˆDß{:…be5qâ–-ÎλvÙØtíZX(•6í}~j‚@tt<<–- :|xåJgçÔÔ­[΃ œœÚZ"`É×Û‘Ëurš1cÉ’~ýÌͧ®Ë噙ׯŸ:u÷î¢EÛ¶­\>zôìÙׯŸ9süø† íÚ=z4{öÓ§²XNNÖÖzzTêo`”Êšš^¿ÎÎæó^Þ~TöÍͧM;{vËGÇÀÀÙ³çΉ©©Á0ÒÒêÛ÷¯¿1âùóåË'O>w® €¸aÙ<0ŽŽ;w¾}{þ¼£ãöí½zõìyòdQÑ·Fúï‘O10h×®]»Ö­Y¬óçkj~M ¨¥åĉQQQQãÇ3™YY))ÉÉoß~ø”ôúurò«W‰‰ÉÉoßfeUUI¥ß–ô¢a˜ÅÒ×70ÐÑùqµäҪªÂÂÒR‰äŸ’~ ÓÛ´Ù°!2òÔ)güø¶m}|"#…Â_ÿ-ß^¿PÔÖvá‹ïß÷ö íÑcÞ<¹ÜÞ~þü½{7nŒ‹óñ™7ïÑ#àKɦR[·ö÷ö,!ÁßßÚº±µÉÈèׯ}ûSSåò¯×¹U«Å‹[¶¬KMÍÆö2ŽK$/^lÚ´páÆ/^H¥À?ί¿ô;æ ¥eKÿˆˆ£G»w¿tiâÄ!CN*,üÖ|ˆ¢VVsæœ>Þ¯ßÇC‡pêTzú¯Ý‰ýÌŒ§¥eiééÙ½»§§‡‡ƒƒ‰‰¾¾†ŽaBayyVÖ«WOŸFEEG'&æäˆDßšó~Oû7/TjË–}úøù98dg‡†FD¤¥ Ÿ¿óPAR« ŽñõíÙóäI¢c©TKË… ££OêÖ-"âäÉ;OŸ.,T*Ç•J@­Æñú“U'ÂyK õôll´´h4CÃÎ}|tu).WSsàÀ¹s.lÓ&##*êÁcîÜNX,”É.<}úÌáPÔj‘ˆÏ‰ ˆËår â™IIS¦˜›R^A––þþ—/'$lÛfoßÐÆ³sçK—Ê˧LùvKTW‡…ùøté2qâ£GÉ÷†–¡¡«««+‹•ŸèPF‘kª¡£­Ý·ïŽ11‹¥§Ý»÷ñã?>AÀ°††ƒCãÆ׫W§NvvººTª@ŸõjPСC—/§¤|)Ötº›Ûž=·o_½jl¼aƒƒÃðáwïÖÔ|oëÆdvèpà@tô… ÚÚ›7»ºŽsûveå÷¶G Ezú‘#sæøøÜ¾mhh``` «khh` ««££¡Áb1™ F¥R©t:‡ÃåR(ŸR(&“B™L,–Ëf£Ö´–×ÕíÔiƌӧƒƒ,pwÏÎ>yrèP—Ý»££‹Š·À ¢(Îb1™lv]P’oƒ TªDòêÕæÍS¦?>eŠ¡!†%$¬[7ztŸ>TjUUÝ…ÁhÕjÉ’°°??ƒO™ìþýÍ̦M»sçÇ7e„¢ ‚à¸RI$hÚ_Óéff....11õÖ9DQ=½6m\\œKJèôæv2d0ìí0ÀÀ ´ôÔ©¸¸òòÆ‚4‡|ÒhmÚÌ~útÿþFFALf‹ffT*‚Ì™™˜8~|Ãß$“½zµ~ý¤IS¦\»ö½q«V—–>x°qãÒ¥"‘³³½½­­ƒƒ££§ç¤IƒO›¶k—¡!‚ܽ;r¤‡‡¯ïµµ?.¿¾!HKkРÐЇmÛöÇ[úåËåË[¶ìÚõòåÒÒß5·ü|ýR*ÓÒŽÙ°!4t„£G÷ìqw2döìÍ›ûõ{ð`÷îqãöô??(hÓ¦ rs¿·.*•UUϟ߸qãFYöµ5‚xz”ÃY¾üõëk×ôôæÎµ·Ÿ7/9¹_¿àà7oÖ¯g2•JMM¥R&S*‰ ò³3ÆÌ,0A@P¶o¿zõÂsó:v5**ª¬ìÛ Žc˜B!©Á°¶v—.S§®X1dˆ±1¡€¡¨‰I×®66TªJÕ·ïêÕ689)•8ŽãJ¥TZ^ž™™pùr`à½{™™ïß'%I$ÎÎ3gNŸîä´hÑÇçX¤£3bÄÍ›wïž>ݹ3“ùéwge½~ Atº¹ùˆ»vм¼¨¨mÛ–-{ó†Ng0¬¬üýOž\º´¼|÷î Ö¯ñâk:juMÍû÷ ™|)Ÿ"Qnî“'×®ŸŸ¿Îá°Xjõ×n*ÕÞ~éÒÇ·ne05jýú7o>–ÑæÃÊ˃‚:w¶´ jè÷,V¯^W¯&$\¼3g¶h1hÐÇ¿Î*‚(Êb±Ù (  ŧã„Åb³)¹\(”Hg…ÿu4eý"ÖÀ’’””§Oƒcc7l˜<ùÈ‘ ¬­©Ôüü£G'Lpr ’JKJ¾¦Î(•"QYYQ‘HôéÏQTW·sgÿ Ž[¾ÜÖöýû]»&Lppس'6¶¤¤1£K¥*/òäÒ¥ðð'O¾ü-fdäã³|y@ÀÖ­3gÚÙåæž9³bŬY«V]¹’”ôÏYÄÇøý“æÿ?ÖÓëÖm÷î[·Ž?^¥ºvmÉ’nÝfÍ |þ\$²·¸{÷Î'§S§æÏŸ4)*ªª Y¬Ö­GŒX¹òÂ…#G®]»~]Kkðàþý÷ïOOÿÔù¿¿þªTyyçÏÏ™coÿè‘§ç´iëׯ\¹víÕ«Θq÷îáà .ZtäÈNAR(23ƒƒ'O1âÍ 6›ÈSdj:eʹs;vxz^½ºaôi—.•–ªTAl¶©©¥¥™™††®®··£cÛ¶ ƳgwïFD<}*Bž^—.«V-]Ú¾½¹9aíQ(Z¶ìÜÙØ¸¨èøqoïÅ‹_¼xüøÈ‘¼¼;'L˜7¯²r„»w££éôK—¦M;s&+ AœœöíëÝ›É|ôhåÊ„€ÁhÛ¶O3³²²§O“’ŒÞ½©T¹¼~ÂÃ0¹\,æóår€a#£=,4ÇÃÂFŒxò†<<úö52°Ì̇=zñ¢¸¸ñbH,"Qmmm-ŸO¡6¶^½ôô”Ê÷ï¯_OK«¨¨sQ€aËÔtÀ€-[Ž™8±eË!Cìí—,‰‰9p 6vÙ²}ûfÎtuݰáÅ‹ØX ®îUU×®٥˽{õ',N÷î¾x±sgÛ¶«VÅÄL›æãC£Ý¼9gŽ›Ûˆ.|øð±Šsüø_EDlÜøòåõëë×Ozòä€;w¦§×/:4š±qÛ¶ÆÆJefæë×_wLü‘èÕ«‹CCËËÃÃ'OîßßÈèôé¿þÊÏohó‡¢&&ãÆ^¼8zô¹s½{{z8—÷+ @Ba0D©‹›o£Alv›6ÆíÙ¸qãèÑZZÏŸoÝ:`@·n;vÜ»W^Þœn]ÿ¢©Ù¢…†ÔÔ$&ÖÔ|}c‚0\Ÿ9íkOƒa"YâA`˜¸á€ãjµZ­V¯ßê"w6Õ´1=Ëb¸»Ï›7gΜ9¾¾.L:zô¶mááYY2ñ}bbÒ¯ßòåƒ1™qqóæEDdg7ÖJØò‰a|~VVlì½{YYbffn¾i…’“v÷î;Í}T@¸Ÿ u³VC½®£Ó¡Ã Ažž-ZDDlÛö­öj¾þm^¨T3³qãÖ¬ñõ-)Ù·ïàÁ»w++@_Ô¨  ÄÄÉ“/_nÛÖÛûòå’’ú - õúõСÚÙyéReåï|ïÆ¯_D˜$ ‹‘#÷ì™2eÌ#£~ý¼¼ÎËÏ—Ézö´²ÒÖÆñ””ÜÜššÆÏ×tº™Y~~›6Lê䔓sþüâÅíÛûûGFfg׸†55Ûµ3f÷î'V¬èß_¡¸qcåÊ.]æÌ9u*!¡¶öGÔ"f±Œ­­]]ÝÜœœìí­¬,-MMõô´´ ”Ëùü²²ŒŒW¯âã#"._~ôèÝ»šš¯ÓŸ0~Íüÿ¿ Šš˜LžxàÀ˜1»wwé2hЉoÞÔ9õs8¶¶\®@ž^ZZçã"ч!!«W{{×Ö"HBBpðîÝ3fDE ¼woFƯÚü9ë/ŽËdqqLž<`@PÐáÃC‡nܸoßÒ¥»v-^üüùÐņõô† ;}úÒ¥­[Ùìää/Š‹¤eK]]ÐÑé×oÚ´uëÚ´w÷V­ &NlßÞÛûôi}}#£9s¦Ne±®^ 9v,"‚ϧP¬­¹ÜéÓ.ìÓ‡Xüèt+«Îíí•Ê·oÈÍ•Ëëœä@NoÝzîܽ{7nlÙòÁƒ©SGŒxúT ÐÒòö^´hèP¸reÈ„„ÚZ&ÓÁaäH©ôáÃ;jj||¼½y<…âËSd³;tX¹rÉ’Î ¥RGçÈ‘«W{ô¨®NIIK“Ë-,ºv=|¸¦fçÎîÝGŒØ¼91Q"ùþaÕÕññçÏoÚ@§;8ìØ1|øˆqq[¶¬\^]]ÿ-<\¥rq¹w¯];KK.Þ¾½wïèѸ89ujìØŽ54ââ"#ëÜ0L.jj>¶G(|¾BA\ŽíÞ=9yûö®]GŽÿõëgÏêoDQ©ææÞÞ“'áèhjjd¤¯oddh¨££­Íå2™ N¥Òé8žž¾uë!K—^½úñ­F*ÕÚzåÊ'O.^œ:•BÉÉyóæõëwï^¿®û|ûöåËׯ33‹‹E¢†Ú†uuÝ݇µ¶®®¾wïίÁ4gÿ6/†ãÞÞ~~C‡¾|xïÞµk55ÕÕ/_>zTZºsgŸ>mÛr¹áá7nÔ;/#›­«ËbÉå••UUMQ`ØÆfĈ1c† ïܹ{÷Ù³¬¬êꦻg7uý¢Ó£¢X¬ØØˆwwSS*õÌ.·k×9s/¶´Œ}ôhÊ”»wùü¯½ŠjjZ[÷è1bİa&Œçíݲeyùýû§N-_>fÌÚµ™™j5‡£­íàе«––¶¶––††¶¶¶¶¦¦––¶6Ç`\º´qã±cŸŸÓ,C †¹ùàÁëÖíØqàÀ¤I\îýû»v-XЧOdd^†Q©FF660œ››—WUÕ˜;eTj«VÓ§_¿³dIÇŽÚÚ •–”¤§¿~ýæMzzzzvvQQffq12™zz}ú¬\9aªUïÞíÝ;hЄ k×>zô½›¨Í3~Çüÿ£k*±]ǰïŒ5l¶§ç¼y«W»º&'/]êârêT½jD´½¾¾³³¹9‚””ܼYZúùûcXeåíÛ{÷nܘ”t÷îÒ¥'ZY9²r凿Æ3âÏZëP«kjCCçÎíÔéÊEUªÿ ‚T‡R™™´mÛìÙ×®±ÙsæDD=Ú¹shèŽsæ\¸£G‡†;æéY×Y,–‹%“••ÕÖÖo„ëω›JL¦††Zœ|åÊåËIIb1Ô=).—F#Ìö7^»VZJ¡8;oÙ²ti§NÇ»»¿|)•r¹;Ù£‡JõèÑĉ99LæÀ*•TúåBÁ`8;OŸ~àÀ„ ÚÚŸóæ‰ãÆ­_êÔË—µµj5òx={ž:uçNhèÑ£«VàíÛ hmíèhccggcchÈç>>#F?ž‘ÑXwįɋ±ñ AkÖlØ0yò·âÝA®¥¥§ÇãÁ°DRQQ^Þpà•ª  (hæLŸ Þ¿ÿWŽ™Lkk__ww*5-m×®¾¶ùQ©rs==™ÌÀÀ†ŸD£ÙØLú×_ìÛ×¥‹Pxà€¯¯£cS]ì ˆBa±¨T—ËÅâÏ–¾×Ú-ZŒ½eËÔ©ZZ[¶<˜œÜÐw+•¥¥±±›7÷ïß»÷óçk×9ãî~õêË—††ƒ1™÷ïOŸþ×_OŸ~{Üý>ù$d´U+;;HJ MKûØU—ñ°pt´¶ÖÒ‰JJòó_½JIIL¬¬äó%™L&“Ë¥R‘¨¬ìõk>ÿóMœBQP4c†¿zº‹‹½½““££½}ûö#GΙ3sæ¶múú>LŸÞ±cçÏ——þ×0Ü¢ÅÀcǺºVUEG/[öíþþýÛ\kdIɃ11µµ‹ lgÇb]»+ÄÇ?z$ùùõïogG£Ý¸[×3ЦfUUZÚ×ÝÒF[ÛÓÓÏïÈ‘!C/¦Ñ ¶65õÑ£GnÝŠ‰¹?"âêÕû÷_¼((hJÐŒï¯_8.UTH¥ hiÉbÁpQÑëÖÍ›¹v­¯ïæÍæäÔÍNL¦»û¦MG:4j”““­­Á—hýüvíòööóÛµëãŸVVff&$¤¦––VVVVVWWUUUÕÔK$_{ÑÓëØqÒ¤NœXº´_?P«ù|>¿gÏ… 7onßÞÏO P(`˜ÉÔÕ51ÑÒb2ŠÂÂû÷Þ¾ÝßÓ¦˜˜œœ†%F¡((¸{wçΩSŸ?Ÿ5ëÅ‹wï²³kk¿µVR©ÆÆÃ‡?~õê™3gÏ.^åà°zu|üçÎ…Í?~Çüÿ#À0ÎåÒh “ RiC+;ŠZXŒ·qãîÝ#FþlDX•*??4tÆùóƒ‚òó "èɘ1:Q©®XqíZAÁ§µAÃ̬}{>?119¹a[ Z]Yùôé­[Åźº½{ÛÚr¹ôáƒLöó=ñ§­¿_‚ãJ¥D¢Pü'ƒ4Ô‹i‹L›¶fжi£« ‚ÆÆ}úLž¼zµ¹9ŽÛؘ˜ (±)A*UK«E C(|ö¬ººn©3†©T†ã••·ooÜ8dÈíÛD 6»îïutLMµµ‰xt:Æá´m;iÒÉ“3gÀ©S½{_º”a::£F-Xе«@2rdr2†ÍŸO¡(•UUŸZèôV­æÏ?vlút ‹ÔÔ3g|}{÷Þ¾ýîÝÊJ ÅʪOŸÉ“çÎ={Ô¨Q£ºvÕРPÀǧC‡„„  ›7CC>qbôè%KîÝKHÈË«;ÍA*UW×ÃcÊ”CBvì ¼p¡¶ÖÛ»_¿Ó§¿‚`˜¯¦¾Ñéúúºº XQÑp”* S*e2™ P”ËÕÖær)±øgNêd²””mÛ¼½;wÞ¶íÛÓdÇŽ»v¥§GF¶h±`›ÛˆaaÍ}悚š:M˜0dˆ¦fJÊæÍ‘‘ߎÒöµ§0™mÚÌœyà@DÄòå,ÖÇÉÉb±“ÓÕ ‚˜L]]:].¯¨ ›Rd2mmGŽ?¾{÷ììK—¶nýÞ_(•ååwî¬Y3ztûö™™‡ÅÇ>Ü¥ ‹%DEÍžE¸7¥îÍ'Ÿ@¥ššöìÙ¹3‡“–¶{wròÇK©TúæÍ±cÓ§OšôcK TZPðêUl,ñyùò§uCQ ‚ Ç‚l¶«ë‚‹ÙÚ¦¦îß?þÛ·ßVÛgÿþjŠìì;wUª“'»w·±¡Ócc_¾”J³³££Qt÷î=LM©ÔØX"еkgm ïÞ……}Ë®ö%ju\ܼy½{÷ë÷ð!“éäÔ¹sçν{÷îݵkïÞsçîÙ3oÞ¶m0\Y™”tûöÅ‹!!×®…„\ºôðá›7ee_[1~dýÂq‰äåËŽ{ÿ>1qúôÙ³]\.]Z¼¸î&­BQRòôéÍ›‡¥¦†…UUUUUWWVÖ}ÖÔTW 4Zûösç®_¿ysŸ>"QHȆ {ö:ýíè`uýÎbY[µuëîÝNžÜª•DòæÍ­[ìÛwõêåËQQOŸ&%åç>S#go?xð‚gΜ<ù×_11Têðá®®‹¿zõ¥ƒã"QVÖ½{u{•ï#—^¹²~ýá˽y3y²¯¯µ5ÿêUÃÒæ¿ÿìüÿõ§S©ÆÆ¶¶ššJeqq^^ýNñc0L&«ª*,ÌÈHO—Ë6]ŠJUVVUU‚8KK[[&³°ðêÕìì/#åÒéVV:ØÙÁpNNPPVÖ×” “É™ h4«.vóÏ)Hâúû-þà ’JURòèÑ•+'NܺÅdN˜àåååE¡ÄÅ]¿~òäÕ«8>p ««»»½=…¢¯okkh‚¥¥>”–ÖY@E©Tµšˆž¢nnC† Ú±£‡Gûönn=zt숢l6 ÏŸ¿b‹uïÞ¥KçÎyymÛ¶cÇ”)0|ôè¨Q[¶$$H$ †‹Ë¼y«W·m›’²k׌jµ‹ ‡ƒ¢ Enn½îAÚÚݻϞ=s¦Áƒ3gzz<|‚ë×ߺµÿ‚VVAA{÷îØÑ¯ß®]mÚœ8qõjÇŽaaÛ¶íßòäç' _EMLúõ5ÊÔ4''$äþý†ï×@…Â`P( TÊdõK•H”˜xáÂÓ§juPÐÀ®®lö;wî^ýÄãué²eËéÓ»wÛÚÆÄLšäïodtàÀ¢EMéC¥ÑD­–Ë?\¢VK$|¾Dtº†ƒAäÖøü­™L[[?¿É“mlÞ¾ ¼q#)©Þ]@¥ªªJOOM‹utœœLMi4øTA‚ ËÀ@K‹8’HîÜYºÔѱoߨØÂ†MÆ8.———ÇÇ>¼r傽zÅÅMžÜ¹³¡á¹s.äç7Ô+¦R©ÕÃ(Úw5*ÕÖvêÔ˜˜ØXoïÓ§ÝÜ :p +ëÓ©H.÷ š8QC#4ôĉ‹ß¼qwß»wìØI“Ž}ü¸¢¢ù®ùwcZ´`³Å⢢z/èæY,'§Å‹wìèÓî^6-$äëá7¾&qºº½{oÚtêÔ¹sÇ­ZÕ³ç¬Y™™Ë—GG:ôCS0¢©ijjd„¢55ÑÑMY.X,'§Þ½]\ 5õäÉÌÌÆ› “iaѯߘ1,–P˜–öî†ùø\¼S^>r¤¯ïöíÑÑ%%©IsÊ'‚´oß§‘QaáÕ«ññ••÷…bbÒ©ÓÈ‘mÚ俆…EFæçÿ:Ë qtаräé¹jÕöí&¨Õ¡¡}ûž=û½;‡¿¿-IròÕ«—.%$xyÑéDH_©T,NHؽ{óæ;Y¬êêº~AQccŸ!C´µ_¿Þºõýû¯[¾Žc˜X\RòêUTÔÅ‹ÄçÖ­ H¡èê::vî<|ø¨Qƒ½téáÃs椥­Zåääë»oß—7[š²~¡èÇë—R™—±sçÝ» =º`§çÖ­£Gß»W]ãJe^^TThèéÓ ÍÆÆãÆ?ñâæÍÊÁƒ½{w휒Ò4«< s¹66žž\nlìœ9:ŒwéÒë×ß¶î«Vmí»waa[·Nšdoß¹ó³gãÇbo¿ví«WÏž}/RmãP©*+srŠŠ &S_Ÿ¸Åý5Éÿ§Æï¯šÿŠœœ£G808¸ºúû[y&ÓÆÆÇÇÁ†32vìÈÈh8d‹Z]\uèÐÒ¥QQÍñ–0L¡ (• ¥)AÑ-ºw÷ôÔÒÊÉ!¤ê[Σ¦¦8^[[^.þìnàÏ\¿Í0Q,ŽËd¹¹±±ññEEŽŽcƬX±lÙ˜1:é耑QÏž~~Ë—/_>b„­m^^|üóç%%j5‹ekëꪯ_Yùömzz½NAT*“I¥‚ B!‘(F¥š™y{Ù½»‰‰RùþýýûQQYYVYyîܤI^^#F\¼Èd.Z´yó°aEE{÷޳eKR’H„¢S§îÛ7f íÜyéRA0™ÚÚ J$55õ§EVYyóæüù­ZÙÙÍ{áBY™©é¼yW¯;6aBeåöííÚÙÛ5gηo¿|™•UR"‹¥¯Ïf7% …baáããçײe^Þ… ùù o`XCÃÄ„ÍÆ°ÚÚÊÊ}ö…ÂW¯""ž=ƒ W×Aƒìí W57÷óÛ³'$Äϯ¼|íÚ7lˆŽ./oÚPa [[;;«²òýûŠŠÏ*1ŒÏÏÉIM‰´µ]\,,ŒÏ/ùAž^߾˗ïÞ½ví AVV_KW(*+SRÊË!H_ß‚ÇûÜŽaeeaa&èës¹^^ƒ|]5ú\%’üüŒŒšàrõõ9œ¯Ÿ"©ÕbqMBA¥jh|j%ûÆ †´µ}|Ö­›8ÑØøÅ‹ÀÀ+WrsžÚq\&ËÌ [½ÚËËÉiΜÐPMÍY³¢£ß¾=~Ý:oo=½æI ‚NÛ¶ÚÚbXròãÇ¿fñþ:4š©é˜1Ç?>o=wî²eUW7ö<ŒB14ìÜyÆèèèèsç:v|úÔÏÏÓsöì“'SS&K²Ù:YZªTYY‰‰EE=sGCÃÁƒ—-ëÙE> ‰‹û~{âpÚ´™?ÿòåÐЭ[]]ß¾]½ºgÏaÃ:vts›6íÄ 7îòågÏš2¥U«Æä×i>ù„a=½.]ú÷·¶.-½?&¦~s Ãúú½{;öðá_MŸîáabÂb5w ad0fÍ:xðòåY³TªC‡&Nܵ+6¶¡Ì8ÿ\ÿ6ÏzÉç?}º|ù¸q»v=yR·Â°ÚÚÄÄkׂ‚="ÂÁCŽNïÞóçûûkiݽ»wïýû_ßzýH-Šòò¤¤;wþúkÙ²™3==ÍÌZµòòZ¼øüùz÷·Y¿DCÃØ˜É”Ë+*êcòaXMÍýûû÷GFÊdÞÞ“&õî­¯ÿm)#äzíÚ]»:w~ófÞ¼iÓBBšª¨TEE7nÌ™3~|@@HHcT£OQ*«ª²²ª«€Nçr;.ŠêëÛØ˜™¡huuzú×SüYã÷Çæ—ËKKÓÒRRÒÓ+*¾í×AººÞÞ“& Àå~øY\üO7R«…Âüü¢"•J_ßÞ^_ÿÓôŠ©éÀ#F˜˜äç_»öàÁׯ±âuíÚ£‡¶vaáƒßÏÙøëÛÿÓÚ4Çúû]âânß¾v­¢¢¸8?ÿW}Ϭ©©¨()1l"Í/@(ª«ëéÙ¿Ÿ>ƒܧÏàÁÇOZX˜™™•uꔟ߰aÄÏöööò22ÒÐèÚõÌ™—/KJ‚ƒ;uâpêŸÅbuíú×_¥¥ååÇ{{îtŸÂfûøDF~ø—wø°«+“‰¢FFƒ¯X1nœ›‡CL\4ZëÖ „‡WVææîÞÝ»·–ñs ÅÎnݺª«<4HO¯áiŽJmÝzþüääššˆˆ©SML>jkÓ‰?>k–•Uã7¼Tª£ãæÍÖÔÄÅùù™™}m ÆÆ3g>{–––šºu«Ý§Y²!ˆÅ²µíÚÕã.K:‚}î\XØÁƒ>>ÚÚD}9œÞ½Ïœ)+{óÆß¿U«ïçÌ¡ÑZ·ž3'1Q ˆ‹ÛµËÍís/pärûô MJ*- ëÙSK«~³‚,–‹K@À‡éé»w»¸°X OxãÆ=z”šš–¶m›½ý¯Ëþ¢¦¦sç>}š™Y[Õ·¯ŽÎ×0mÕjÕª{÷øüW¯fÌø~ÿÁ°¾þàÁ …·n­]ÛÔ¬åTª¡aß¾Û¶…‡WTˆÅÉÉnÝÚ­›‘QãÒ¼6ÃÑqÞ¼ÄD‘èÍ›ÐP_ß:yÿõ@‹ÕªÕ€»v=~œœ,—–ΛçèÈd6.?‚hh´k7}ú®]/_–—'%=~Ы—™Ù§mÊ`têtöì‹ïßoÛö¹ü¯·tu‡¿v-9¹º:&Æ×W_ÿã–€a}ýI“bcSR’“׬±¶® H§;8øû‡„TV …‘‘Ë—ÛÙ}{Ä€ ne5`ÀáÃIIbqIÉÙ³þþNNŸ¶²Ùööþþ7n$%‰Å!!K—¶kW7Ký^ù$’Äļ{—•µ¿³s]¨"¡çŠwîTU=~^ xútìØ-š{ÓÿõþÐÒ8ðÒ¥äd±øÅ‹É“[¶üUÇ\4š©éøñ—/¿~Íç?}:mZC‹ÒøýÙù¿ñ²fa1dÈÅ‹EE™™YY‡yyñxÿ\$Ò×1"(¨¢"/o×®=êê‚\n·n¹¹|þóæYZ~MžaX_ÈC‡ŠŠjk¯\™5ËÂâÇÿôõ÷[37‡ccÓ£ÇPAb±—-;}úðáÇCBÂÂΟ÷N(Ì̬©yõêìÙÐPâç!!»w¯\Ù³gŸ>çÎ&%]ºÔ¯ßÇ‚‚ºº#G^ºT[›•µn]Û¶_^ÕüRAú¼ttzõÚ¸ñÃ>?6öС=x¼ú%”ÉìÞ=8øÍ›²²ààÚÄBdn>a³gÁÓ§‡uëöñ~¦•ÜÜÊÉy÷îöíq㈳3ÑÓstlÕJ_¿>w2жl9qb|¼@ðòåÉ“:}þ†¥! EuuÛ·ïÒÅÞÞȈ8cAÍØ¸C‡ ΟÏÈÈÈ(* é×ÏаáI–Él×nõêÔTàþý­[ÝÝY,„ ¯sç;< sswïöñÑÖþZ{q¹>>aa±± [¶884Ô»Mƒ¸9hÐîÝQQXüèÑîÝ:°Ùßž,˜L­[ssÅâ{÷6lpqùZ=PÔØ¸_¿õë_¿>|xð`áB›¯3ŠõêµtéÇ™™ÅÅ‘‘3f¸»ÿŒl •jbÒ³çüù11ee™™%%—/Ò¢ò Ý|Q”Ç35õô2dòäÝ»¯\¹s§ºZ,ÎÌÌʺ~}Þýر͛gÎôðÐÔl¸® FçÎçνxñþýÖ­­[7n‚AÃÎnúô“'KJÄâøø:vü\>Þ@¯]Ûºµžžµu—.þþ§OߺÅç‹Å/_†…M˜`júõÍ3 óx®®S§îÞ”$ffVUÅÆ®ZÕ¯Ÿ±ñ·ÚF33;öܹ¸¸šš×¯çÏwpøÖ;5‡|B®n¿~7oVT¼xqôh‡õÛ+€aSÓiÓ®\©­ÍÏ?xpäÈ–-¿žB³©J¡hiYXxy 2qâöí!!7n‹Å™™EE÷ï¯[7rd«V_Ú¢ÿ‰þE]Ýöí'O^´hÖ¬¥K—.ýòsÁ‚Ó§?|ÈÌ‹?|ؽ{íÚ†ÊÌšµté¢E£FuìØ4…¦n4ëë;:޵yóÙ³™™55OŸ^¾t(…òàŸßÍ›eej5•Ú²¥Ÿß±c7n¬_ߺuyù›7¿{'XZvéâàðáþ}S¦¼xñë%°¶v»vsçž<¹oß AŸfk^½:}zÙ²nÝ–-‹Œ,.nØ9O,~ùòàÁiÓŽïÚ5:úöí¨¨Žß¿§R­¬òó7mêÕkݺèè¯çëæó£¢†ïÐáÛžÂtºƒÃøñëÖ§§'WUñù|¾X,—«ÕD:E--== ;;gç.]¼½ùü/öí>|òä bc¿3L,NL<~|ÇŽ§O Ú¹3&&8XWwçÎàà»wSSkk@CÃÜÜÝ}àÀ‘#§MëՋˋ۰aìØÑ£÷íû8fPSQ*‹ŠnÝÚ±£wïöíSRöî½zu÷î{÷âã­¬¦O÷õ]½úÂ…ŒŒÆÜ‚a.]¦Oß½{ëÖ)S† qt„áÄÄ£GçÍëÐaõꨨ†óK5e™ÒÐèÑcË–èè'|}tu©T‰òóŸ<¹qãÚµY³ºt ¾r%!¡²²éƒåò¬¬cǦO_½úÓŧ]»Å‹ÏœY¹ÒÚZ­‹AÐÔ´G.—Ï_·N øÞû@¦fïÞ‡]¹îçÇ`ÄÄ,Yâç·bÅ×%E-,–-‹ˆÈÎ^¶ d²ôô˜˜M›úõ7nÿþÊRE¡˜›ûúîÞ}áÂæÍ“&9:ŠDwïnÝ:iRß¾;w>~ü=7/™,7÷üùI“zõº{—Å’ÉJK¿u;à×Ë'éètí:r¤»»DrÿþÀII;`ªÕyyAAK–Ì›çáqüøñãoß&$¬ZõìÙÓ§‰‰™™••b1ŽS(L&—«©ihhjª¡‘™¹j•Ÿß¬Y|š*•Jµ²3æèÑ£GÇŽõðhÕªeK.‚ù‰½yóÆeËzöœ6íÒ¥øø’’Æ…¬þý ‚L¦½½««“Óו]ÂÁØl7·†¯0+•%%W®|oKA<ž³óÌ™k×NšÔ¯_ÇŽíÛ{yµn ))ׯ-[æé9{öÕ«))bq3º»4’†×/£Mÿ ÂÃçÌ10(.NL|ò$-M©tpèÚÕØøÙ³M›NJú™{0juaaHÈêÕëÖ ºoß«W·n yï^bbvvqqm-‡Éäñtt(”¬¬K—.^¼w¯¤äÛîå4šƒÃâÅ»vmÝêá‚ÕÕDœ7¥Ç„FãrõõÍÍ­¬\]]][´`³ùü7oNœ˜½ùóu˜L'§mÛ®] èÛר˜ÃÑÖÖ××Ñár)22ž>½z50pÎ'§cÇîßÿV¬Óß5~›þÿø{X,KËÆ0 {÷<Ž·k7}ú! ¸aCŸ>½{Ÿ9C§/\xëVHȪUnn\. @yù•+ãÇ8aÂåË_Þ£!,HÏŸ9’—7n\ëÖ³f%&J¥ššÝº;—”´k—ŽÎÁƒ“&±{wf¦»{XØÓ§W®ôéóñÉjjê† ®®ƒïØ‘šúmCMM;»ú÷ïÝÛÍÍÉÉÆÆØX__CƒÁ R!Ãär‰D"‹‚šš’’‚‚œœ¸¸ BBbb >+ÖÑéÐaäÈÉ“[¶|þ|ÿþsç23ë¶2(ÊãÙÚvìØ­[¯^;¶jed‚¹¹‡]¼ûã×úÙì=JLܰ!9¹ÿ®]MK#Þ -ßÐÐÀ€ÍưªªüüÂÂòò¯‡Fýâ}äȱc¶´äóïß?}:,ìÞ½¦©´__XFZ±bÊ''##MM6›É¤ÓQ†q\¥’H‚êꢢì쌌ׯãâž<¹};..+«¦¦iþÉ Èbµl9h¿ÿÌ™“&õïïâbkk`Àdâ¸@PZš’÷n`à¡CçÎ]½šœü«òÕ/yl¶½ý¬YgÏž>½eKË–!!;zxìÝû½ø]„Û–»ûŒë×÷î]SsãÆ¹sׯ?z”“óë‚2 ¨Aûöýú¹¹!H~þû÷ïß''gg×Ö6-œrÓ¾QOÏÅÅǧ[·–-utØl*„ÂÜ܇o܈‹ËÌüž·6ij¶oß¿‡bñýû7o¾{'6$Ë„+èĉ~~]º HAÁë×qqññññ>TU};í3r¹mÛ.Z´f›Û‡‡Ÿ=Ýœ0~¥|ÒhööóæíÚµaƒ†Æ‰~~ë׿yÓðÁ ³Ù-[º¸x{wéâädkkbÂãÑé ¨PˆÅ|~mmII~~NΛ7?}š”ô¹ªÃÚÚnn&Œcg§Rdf¾ÿöí»woßfeýŒü4ÿþ066ãÇÏšåå¥V¿Ÿ˜øøñ“'ÉÉùù‰Êö½';:nÞ|åʪU ƦM&,\÷3w¿¾~6B{û®]»uóööô´¶ÖÓS©ÒÓ/_þë¯+W¾•ü´) çààã3hЈ>>nnŽŽ––ÚÚ… …TÊç—–¦¦††®X±qã™3ß^ÙaXO¯S§ÁƒGŒðð06ÖÑáñX,ƒBAµZ¡‹««‹‹óóSR^¿~ùòÑ£gÏrršzk‰¸Óëìܽ»««ˆÅÕÕee¥¥99YYùùee gûgÇïïÿ¹\/¯}ûBCgÎÔÕÍÈHL|üøÎ{÷®_¿};9¹±‡'*¢¯ß¶m¯^ Å›7qqÉÉ……ɘù;Ûÿãoü¹õ·~þ¥Px_(”ɾ>ø„ÍÖÖ¦Ó¥ÒÊʦ…h­ëL“ž=}}==Åâ‡ÃÃãâ*+‰+­L¦¶6“©PTV …|D*•Éd2étQ©„ÂÚÚŸ ¼LBòk€aËÀ€Ã‘ËKJšªâ‘üoðŸs±Ãq©´ªª°°±ÎG*•PXYù¥i·±(•·o_¾úéÏ1L,nø¹8®RÉå"Ÿÿ+ó;“ünœ‡ÇСwîÔí‰!HSÓÑqÈ=LMõô,-[¶l8;‘R™›{õê™3AAÉÉb1ŠZZ²yóòå^^::õf¹<33<|õêmÛâ⾞nåßä×|S®£ch¨§ÇbAÐèô8®TÖÖ–—ÕÔ44‘BiÙÒß?"âèÑîÝ/]š8qÈS§ ¿kE­¬æÌ9}:<¼_¿‡‡0àÔ©ôô¯¥PŒŒ||&MêÛ×Ö¶±)ëê.‘dd„‡Ÿ>}ÿ~~þŸàŸ‚NwtܹóÕ«óç7oîÞ½gÏ ÊË3P(FFíÛ÷éãä$‘ÄÆÆÄ$'WU}kjjùß…bm=cÆ£G·nµo¿oŸ‡Ç”)¡¡¥¥_¯cCåE"w÷  ÔÔ`xüøNF¾w¯ñÙ·PÔÜ|ذùó7l=:?¿²2,ìæÍ÷ïbÛ<íY'áá³fµhQ÷ÓŒŒ€€~ýڷ߸15µù‚³4ÔžÕÕ¦¦ ÆÆÞºµi“]CcÇ߿߹ÓÙ¹C‡cǾøWÔÑ¢)õ¡P¼¼‚‚ÒÓÏsw¿|yäHggÿ—/‰ÍîÙóøñŒŒ3gäòQ£llæÎ}ð@$"ÂÚvíºiÓÅ‹{÷úû»¹Õ%áNŸž8qĈ€€˜˜²²_=z~…ü«ü÷a=½~ý6o¾{74tØ0 â§ïÞmßîèØ¡ÃÉ“MÙôýéüŽù°9ç“?q>ÿ³å‡ÅêÞýС´´sç0lìX[ÛºñÞt ˆÉ´³óõ4ÈË+)) `Ë–'O Ãq±8=½¶¶nýFcãÞ½7oÞ²eÀSÓ¯§ÎEƒöíQ”B€¹sÏœ >üë-¥P……­Zµ}ûàíÝ|Ï¿zµ°‚,,F^¾|Íš>}tuAtt:vd³ét^¾|çΠ ??©´¸8:úìÙØØ.]Ž=~¼kW>_&3442JO¿xñòåçÏ Ù¤R[´8pʔγ³?|&$ «­ÍÊzöìáCd2A54:vœ7oÓ&_ßä䀀€RAúÏÁdvêtüø½{W®ôì‰ü`;——Ÿ<9t¨Ý¼yŸ&[«QTSÓĤE .E¿¯Â€ ŠjhYX˜˜ðxÊ·ÿ†54»uëÚµ[7 Æ(HÄbYX¸¸´iÃbEE½~}þü]AA@*•B¡Pšâ ‚l¶§çÂ…{÷æåùøØØ,]÷uU ©å? †«ëìÙcÇêë?|¸|ù÷7  —g2AE)*Aš~ð Tææ^¹ò×_›6¥¥ñù‰‰ÁצåæjO™,%eëVoï.]f0,,fÏŽˆ8}ÚÇA@°y3°­ý ƒ‚ÆŽõõ}ðàc‡ d³;vܱãÔ©5k„¼¼¦gVù1”ʦՇB!ä ‡=º]»Õ«_¾¼_ „ ¥R)µºîI¤£3hБ#ÌËã…… Þ¦ÍÁƒOŸ‚`Û¶+W^¾|äH`àáÃIIÆEE••ýºeû×ÈÿÏÃúú¾¾+V ¢©yùòŒææ“'?z¤Pèè°Ù2Ùïéßß7ïþŽù°ùæ“?q>ÿÓå§¡ñþ³ý[Z{ófPPPPCÇš&æåÅÆÞºuÿþû÷__ßi´6mllºuss€¤¤;w¢¢RR¾žëK­®­ÍÌ qÃ@°°0!áÑ£¸¸ììoï#jÔ¶m)O¥ZZ.Yedtÿ~hè«WÒ䟂tt:uZ´hÈ…âüù¾}øüo¹¡4µ|cQ© ££ÏœÙ¾=:úŸi W(jj kj¨T:ýkÖáß×þ EEEzú‡õåaØÀ`РmÛœœÄâëׇ­¨ø='|8þãõár{ô˜>½cGïÁƒÈÈÚÚ†ÚA[ÛÓsÊ”®] &fìØƒ£¢²²ˆ…üÞ½­[׬yøpüø  ±c;wÖÖŽ‰ kœµ÷Cþ)--++]]ÏÍ={öǪ*•J©T«KJª«É9ês>ùòó9Æç§¤Ü¼yñbI‰—ל9³gbf†¢_¶œ¹9GüÛ̬MggþÒS@¡Èܱ͌㯿ª«ëæwïÂÃOŸþðÇss>|æÌ>} ¾ü†ÆÊj`àÙ³ |þdzZEÅӧׯŸ<ùô)‹åéÙ±ãÊ•C‡Òé‘‘—/‡„ÔÖN˜³}»M|ü¼y>œ–Ö¹ó!?°-.YÒ³'Ž_¿>cFL̯™9ÿYÈ(v$¿61>|õê%KZ¶|ýzË–­[Ÿ?¾½¨³Xîî'O¦§øP]ž¾kW§NuÎ.ÿN¨TCÃ^½/Þ±ãúõ{÷._މ Z´hà@ss*µ¾y<Âj×£‡³³¦&‚ÐhFFîî={vëÖ§OŸ>ݺõìéåebÂdö†¦•AÇÙyÉ’ýû/0ÀƦM?¿;Ž»}ûÁƒàààà­[}}mmY¬†m?Ú_0lj:lØôé^^™™§OŸ:õþý·ÝÈW‚Ølkë1c޽sçÑ£‹/_Þ»wôhWW.÷óóC:½U«ùóÞ³çÌ™3göì9sæÈ‘Ù³½¼x¼Ïß´©íß¼ ¨‰IïÞ›79²jÕ¨QŸ.ŒDo.^|èÐæÍþþÎΠƯi15:tÒ$šš7Ž}ñ¢ÎQ†uu;uZ³æðáµkÇ·²úÔéE[´ðñÙ²åСùó½½uu ;»Ù³7m:xÐß¿U+:Atu{÷^·. àĉ­[ûõ35EQ ÅÚzÒ¤µk÷í›=ÛÆ†NoZ}>¦¸øÉ“ÒÒví¦MóòÒÑiø™F37wuµ¶†áœœ[·Þ¼ ëg(çóß¼yô(3†-,¼¼ÌÌêGåÏÎÍ!ÿétss/¯ÎûôéÕ«];kk†¹\[[w÷Þ½–g ÅÒrÈ€€½{Ç··çñŒûö]¶lçΈˆû÷ÃÃcbNœ6¬eËûEut:vœ={ư°[·ÂÃ=ºuëØ±}ûfÏn×NW·îä›ÁpqY¸pƵk hß~„Μ‰Ž>sfüxGG‡3Ž=wîîÝë×7l=úã»MiëÆ_íGå³ùæ“›`XCÃÝ}êÔ5k‚ƒcbÂÃ?¾sçøñýûgÌpqÑÔüܲєþýùij}šZ‚x EF§·j5|øºuÛ¶­X±mñ¹~ýèÑ..l6îà0}ú–-1111þþNNbñ‡¥¥vv#GNêé©¡ññs GljW¯öð((8xpÇŽ/¾·÷û߀´ ýç€ AÀ0µúW‰0á‰}äÈîÝîî[·öïî\NNcLîÂbijR(T*0™?r.ò¿ ÛÛ/[vâÄþý©©×®9rýzl¬³óÔ©³gž=[VÖ¦M÷îçÏçæR©ææ£F­]»j•¯¯¥¥©)Ðé&&sælÙbh(cÈåïß92dÈ‹b1…Ò”òùùtº¹yß¾“&M™2uj¯^ƒWT<}zíÚ­[/_ZZŽ1oÞîÝ·okkWUµi3}zll‘ügú‹NoÕjêÔY³LL?^±"22?ÿےјò H£yymÛvè©é«W7o^¿¯P 0sæÆ11¦¦"Q›6ÆED””nI&“••ååÙØôé3¾ŸŸ¹ù£G›6=W[[ï¼D£5­ý›×ç^©¬©©ªÒÒêÛwâÄåËóóCCÃ÷mËÌ$œVÙl7·I“/öó31Y·nÇŽ†·ÑMm ÅÌlĈɓmlŠŠBC—.}÷®ÞD­‹Åb}ý¾}ýüÌÈ Þ»77W©ÖÑéÚuòä9súöMK»yséRµšB16îÒÅϯK—´´;Ïœùð¡oßqㆠ=šÃa³/^ܶ-.NCcäÈ‘#ûôIL _¾¼iõù˜²²;w.\¨¨˜9s̘^½ôõcb®_ÿr¾ÑÐ01áñ”ʲ²¼¼ûx»šš‚‚’¥’Ë53kh#÷#4‡ü7ÑÒêÜÙßÅŠÅ‹íí¹\CC ¨ÔQ£æÏèÕK­þRžQTW×ÍmäÈñãíì´µ­¬¦OïÖF»ÿÈ‘‹ÃÂ*+¥Ò¢"‰¤î|˜Nwu]»688&föl™,0pëÖÛ·ÀÁaòäM›‚ƒoßÖÓ4ÈÓsݺ‚só>}FŽ\º´U+oï„„7îÜ‘J{õZ½:2ÒÕ5''1ñöíGD"W׉wìX¶ìæÍë×§NMHhŠBSÆïõë?*ŸÍ7Ÿ4m>‹•J*µuëÅ‹ƒ‚nß^±†/]Ú¾ýüùÀ@µÚÙyÖ¬€€  à`…¢W¯~ýNŸ®»ŸÜ”þmºü4µ>M+úºC‡ž>}þüþýݺ†‡9rûvq±¹ùôéÁÁêëÓé ÿϬòjuUÕ«W÷ï_ºVPP?n™ÌnÝúõ[°`ìXxþüêÕ°°ØØú bfÆå޹`©é÷¾A¥*+‹?v, àÀ””ÆœP©VV 8tèÈ‘~ù[„aa®›í0¬²òÅ‹¤$©tøð>}z÷–Ë##CBÎÍ•Ëq‚‚>vn§PZ´7nçÎqãX¬«Wgο°pÇ/¯ï¹j6®<éé üð¡Xœ™Y\|î\·nššuçU0ln>sæµk"QUÕÉ“}û~yÚôþA¯gÏýûssÓÒÖ¯oßþûoñ½ò,V‡/VVffÖÔDGbdT7±CžÞ°agÎTU …áá&ÔÿæÓ¿ïØq÷îâb‘èêÕ  ¿¶ njûÿTª•ÕªUoßfd|ø°qc«V4ZÃcÖÃ㯿ž?‹_½š1Ãʪn”Óé^^G&$…ññ~~ff 妶?P©öö‹½/=|¸~½½ý—=Ìf÷èqþü›7|þ;êéÕÉ—Û§ÏåËoß–”œ?ß±#‡ ¨£3|xhhuuFÆš5mÛöìyåÊ›7W¯&'‡‡O˜`nnm½lYRRrò;Çki}i•û^}êåáñã ¬­ûô Š}øpútccMÍ޽Ϝ©©©¨8r¤{w 45‡ ¹xQ (-Ý·¯!û'‹åáqöliiZÚíÛƒ×9ÅüÜ\þkåÿWÌEiiûùéê~í´Éôôܾ½ @,Î̬¬¼ysÄsó¯t§C‡óçËÊÒÒ>œ<ùãñÃ&&S¦„‡ ¥¥vïÎáëZf¦Xœ½aCûö ‹Õ«×•+))bñ»w‹ÙÛS©tz‡'N¼|Éçߺջ·†Æ·ü÷Çï¯ÏæšO[žÁpv>x077##1qÁ‚÷Tj›6›6=|Èç?}úéüДþmªü4µ>M+ÃFF#FŸ>-)‹33Åb±øõëììOŸ—WY™™)¿x1q¢¹yC39‚XXøûGEñùoßúû·jÕxëvÝ*“––àïߢÅ×w‰¢©Ù¡Ã¢E§Oçå‰Å¯^EF.^ììÌã}þö0lb2fL||uõ­[‹ÛÚji¹»¯\yùriiNΑ#ãÆ}o' A~~W®TV~ý}ÿ H Ò ¤Rmm55•Êââ¼¼êê?›A«U«¹sÃÂÎ[¼˜N éßìØ¬¬Æ‡dP( ¯_?pààÁ/Ïzÿ}äç_¹ñþ}ýy¨RYYYTÄçC£#—K¥ÑïñÜ•Ëãッ?öuV«‹Š<¸w/+ Etv64DÑÈÈÚÚúþlj—z/îØ±¬ìر¡C¿w'­)åqüÍ› ž<©³'_qqÑÑ>àøâÅnn-ZP(gÏI¥ÿÛr#•¾ytëVYÙøñýû÷éÓ¢ÅÉ“ÅÅVVvïÎἿÿÇ E¯ljû•jm=|xÿþffQQW®ÔÙª>F$JJºråõk•êÈooëÚµ²2•ªe˾}]]AðåË… ß½ ÇUªÜÜÔÔšÇÌÌÀ@_¿´TC£²òå˸8ïÔÉÒÒÀ@OO_ŸËåóß½ËÉ‘H>·i7¦>õ`ŸâD|¼¾~@€¹ùçw'qÃpœ¸ÎÝð¦‰ÓQÿyûzsÊÿ*$dË–ˆˆœœ†ÛB14tvvp`2KKoÜHHø8ΚZ]Q‘ðüyQ‹åíÝ®‘…’žNôBFÆóç™™R)Ž·i#•ªTjuQÑû÷ÅÅr90‰J…ãÄ95¡’4»Ž‹Å?'Ÿÿ40¬¡acã쬭-§¦fgc˜––¾¾®.ñ[™,=½´Ç'L°·72¢R 7÷ÓYâ{ýÛÜõ)(àñšR¾¼¼E GG33OO?}:.®ªª~õ*+»}ûüù÷ï mÛª?Š6n:ÔÓóÀüüz; ‹Õ«×Õ« /À‚ŽŽŸ†á&”Ÿˆˆ—/ÇŽý~ kjÚÛûúŽ3thÛ¶±Ô ¨¾¾³sýAèç@›mg7`Àúõ‡oÜ8cFÛ¶Ä‘<†µk·dÉÙ³iiK–Ô••ÉÞ¿?|ØÇgÚ´z'gµZ xö, `úôÉ“--£¢‚‚‚‚Æö¬[·“'›?êió‚dddgçæ¦¦fffgÿÚG·níìܾýÿrãüù(99G}tt23Ž..þrì7µý€J558pÐ cã’’¨¨[·22d²/KáxMÍóçQQÉÉÊüù}úX[Óh‹D^^:°Ùii{÷Ö{ ËdïÞB‹‹µµ••¹9•ZXøüyb"†õë×£G‹ÆÆZZ FYY``aáç#«Ï§u _¾ ŽŽf³·o1ÂʪªŠ¨ñ{•J$ •J*•Ãa2º A§kjR©*•@ ý\\®æ”ÿß5K>ž“óuGf2y<&¤Òêj©ôs—E‰„Ï—J€ÁÐÔ¬‹Iˆabqyym­\^·Jà¸J%•Êå¿ÿ}N>ÿy ˆÁàr d± ¾w¯!7ªššÒÒ†bÜ~¿›»>M/O£q8t:ދŕ•"Ñdz?†‰Åµµ2Ù?·û@Ñ-|}çÎÝ¶ÍØøã@Š……ƒmsôèÍ›wìèС¾Õ!HCÃÕÕØø[V< ?|¸{74ôÁss;»®];w¶³«û-òxmÚx{wëfjš›{ï^ddzúÇß/•>xq󿇄›&‚XXLzêT|ü¾}^^l6`Øóç  2kÖãÇï!H[»_¿½{##'Nd±P?¿ªVWUÅĬ[·wï›7oÞÌ›7w®³ó… þþÏŸÿ/P"j5†aØØ±“&ÍœIœÖÔŸœ}|}ÇÕjâÂŽí8.ñùÕÕ‘‘7oFDüï6Êÿ8.——–¦¥¥¤”–~êÒÕõöž4iÀ.÷Ç͛##‹‹›¶ A›íè8jÔáÃaa6ôï_[{æÌàÁ66gΠè’%çÎ…„ܽ{îƒÑ·ïĉ۶={öõ§ÿM0L¥"Ô¡¢Óµ´>ß"Â0ƒAlwd2àçRf2™íÚùûÉåÞ¼¹hQTTié·ŸÖ´ò„¢l6—K¥‚ Ô)äDÔåò¼<¹üß#IZÚ… W®TTLœ8jT·níÚ±ÙÞÞFF™™W¯FG7tK¥©íO,î]º haQ[ûðáµk_[ÚÔêòò/®^ÍÊÒÐðóëÔÉÈÈаªªK#£œœèèØØòòz«ž@››’"ðxöööö-Z`XNNxxNŽR©T;9ÙÛ3™|~FFfæçóEãëóy[¥¤œ={í GDøùÙØP(@üN©¬¨Èή¨€á®]mltu$2’ϯk=ÕÕµ²24„᪪˜˜òòŸÙ°7¯üÿp\­V(Tª¯ÏY&“‰DR)P©N ¼~”R©,• ryý|‚ã*•\þéSqüWXì~dNþqùüÀ0©T Hp\( óññòš8ññã¯njÿ6w}`¸iå™L¹\$’ËAÐÀ@CƒÁ€ ¨ë¤Ñx<6›JAâXäwöCmí“'{ölÛ`hø±ƒ…Ò¢…Ï”)}ú?éÖmäH— ö틊"l¦PZyèÐÊ•ÅÅÏŸ×[Å>s+*îÞݳgòättúõÛºuÙ2[Û+W6nܳçùs™ÌÖvÍš˜˜gφ ¹~}ñ≗J Xµjà ‹¨¨Å‹wíúØ[„@¥*)yôèÂ…éÓ{õºpÁ×7$äÀssFþ¦¾$Â0qwý[¨Õ¥¥/^ܼ™›ËãÙ¾½Ž‚<þsw(ÿY º×AT(är™L¡Ë¥R…B&“Jår™L"!>%‘H HD">_" ù|±X(¬­‹⳦æµþíP©ƒ8ð×_Ý»‹DAAÙÙ[ÑÒêÐaÞ¼¿þJHˆ_¿ÞÙ9.nåJOÏîÝ·n½u«°°¸øæÍ… GŒðõ=q‚ÁXº4::(híÚ¾ô]ý:½U«Å‹Ïžˆ œ1£M›†£XÕI)çî¾eKXعs7o†…-[Ö©Ó—÷d~_ùæ…8”À0„ þ¾}©iåANo×nÀ€V­ê=µaXO¯C‡®]-,”Êœœ¤¤/èÆöéêvíºxñ€bñ¹s$&~;«wSËãà0x°‹K½ëjh¸¹y{ÛÚ‚`AÁË—?—«©íÿ#òƒã»|}ûé2Ùû÷ÁÁÑÑååNNÓ§oØ0s¦¹yvvHÈÝ»_Z~¤=aXO¯S§Þ½mme²¤¤«Wß½û–:¢Tß¿YZjjêãÓ±c·n¾¾ff¥¥‘‘±±……×G&+.~ýº´”Çssk×NGG(ÌÊ*--,LMåóµµ=<\]µ´ÊÊ’“ ?µ5­>Ÿ"—§¤œ?ýzM¥%Gä"««MNγgII‰™Ù€:ééÕo`ØÀ KooKK‰äÝ»‡ssôdýwÈÿŸBQ\œœœ‘!“éë·oߺ5‡S/ÇÄãÙÙ¹¸ÊdÙÙ¯^}<Ÿ4¿:ÔØñû£òùgÌçjuuujjbbE›íæÖ­›©iÃ÷M­OSËËdùùoÞä䀠•Uÿþnn\n]»@††‡ÇàÁ¶¶ÿÄŠaBá›7/ž>½gÏž=ÇŽíÝ{øpddF†ŽNçÎÇ·j•—÷øqa!@aá³gYY­Zõïß³§¶vvö•+‡?NüÕ/~øð­\Z †£ã¼y‡93a‚¶veeYÙ§>ËDRZZ]mh¸`Áùó±±Çûú¶lùyëJ¥éé·o_¿þúuMJ‚Ү݊»w_¼xñâ‘#õŸ‡;æïomý½ÛBD&*‚ jŒJõ§CÞAj6PÔÌÌ×wìØaÃllèô¦ îà@\]ûðáG¿©T]]±cýýwìØ¾}äH+«ÄÄ€€ž=—-‹ÿ<:Y¢èèxxŒ±iÓž=+VŒgi™™yâÄäÉ}ú¬^š™ù©Z]]}ÿþÊ•£F  V_¸pýúçÎáx¿~~~›6ÅÅ}w¿ÖÒjÛÖǧC‡îÝ@*Ý¿ÿ[q£@J54ôòêÛ×ËËÍ X¬‚аzs—onäòÒÒ¼<>ŸËíÔi„áÃ;tÀ°Œ ÕÑ¡PÒÒ¢¢îÝ+.þXhLù:¥Ç€Ë>|÷î  ÚÚcÇ""ª«íì¦O_¿ÞÙ¹¦&,l„ú4oMí/±°9rúôvíRSOš3'5õÛŠJSËqO ==ׯ02 ÉÍ56=zÍš= èÞ½E‹¢£ën'A—Û¦··¯oÛ¶L¦•UË–L&êètê4räðá–™ùúõµk7o¦¦~¼85µý›.?*•PX\\[ úúݺuïÞ±#‹%`XMÍÛ·ÏžefòùõNK2YJÊÕ«áá%%'Λgb’½aÃÍ›Ÿ«G?Òž Èá´m;p`ëÖðîÝÚµIIß ÓªPdeEE=yR[ëï?}ú’% …Tzûv@@^Þ§j…Z]S“’’‘¡T𛦥õúõöíµµeeAM–VÛ¶žž EXXVVuõÇîYM¯Ï—µ»qãôéääùó·m³´¬ÿ@°PPYÙݻ۶íÝ»e ž=ûâ8;Ïž½u«£cQÑ™3ÆÅÇóù?¸¨þùÿSÀñÚÚ/ «­ŒÜ½; `ùr JL€6mfÎܵ«}ûšš°°q㈈˜=züiógÓåówÍ'+/‘¼äÈáÃ))“&­[wøð‘#|þ®]ÁÁoÞH$­[·mëêªT^»¶nݱcßwQýyšZŸ¦–/)¹ÿðá{÷V®½cÇÇçÎQ(]»úù]º”™ùåñŽËdwïN›Ö¿¿¯oLÌLJ4¤«;jTXXjêêÕŸþ Švé²`Á„ ^^­[;:vé2r¤•Uqñ–”ü¯G³#¤f†¹Ü–-ííÝÜÜÜØì¦kÒ¯_ß¾}ãÆ«WË`‚,–¥å€ãÇн{‡={öîíìlb‚aYYW®lÝ:a°aÆÆ–”|ù¥Plmgμ}ûÖ­É“E¢óç·mëÞ½ÿ‹Ÿ=«¬üV6w «­}ôhíÚ±cFÑ‹¯]»re÷î”'§éÓÃÂê¯Ó×âÚÚ7oîßOHÐЀ>Ý$}9|åò²²/îÝ{ùR©€wëýØùÆ¡V‹D©©=y¢RšT­ ³²ž<¹w¿ü.±øåË¿þZ°àðaCÃ+–/ßµëüyçóß½ \¸ðÖ­{÷Š‹›Z¾N–Ôꪪ˗çÎݽ»ªjܸY³V®lÝArsƒƒW¯ž2eéÒ¸¸†TèÆôƒag7mÚÌ™úú÷î-\ÓPð€Ÿ)OÔáîÝ›7ãã Á©S/^²dà@MÍêê[·|},¸y³¸¸~CÃãÙÙuí:rä¨QD?™ìÅ‹øø‚“>}|}GŒHO ïߊútCÓÔöoºü`XeeTÔ¦MÇŽ ´mÛˆ‡]¸0~¼L–’röì!¾¾Ÿ*H„ý#2òÑ£ÚÚyóÜÝo܈ˆÈÉù| jj{ÖxMM}ýªªgÏBC¯]{ñ¢¢â[#‘@"yÿ><üܹ{÷¬¬:vÄñçÏÏŸoÈÎ#—ggGFÆÄ<|¨§G¡Ü»—Ÿ¯PH$ʃQQOž€P•—÷éÖ­ñõ©“É'O >_Jeaá¥K/z{UVV'«8.?}ºzõ˜1cÆH¥kÖ,[¶hÑڵÇ@EÅË—GŽÌž=yòÖ­¯_7”i©14·ü7×\ôi¹šš´´‡ïÝ ¿·^à¸@ðèÑâÅcÇNš$®\¹páÆÛ·OŠãII.,\Ø»÷ÆÏžñùÆd–•½|ùäɃ¥¥ZM¬½}wÿ>•JôZ][›’òìÙ½{IE…RùãóocÇoSåówÍ'-¯P¤¦îÝ;a‚\¾téªU&¬XqüøÜ¹juMM^^JÊ­[J$Ÿ¦ôoÓå§©õiZyµº¬ìÒ¥I“&NÔ×ß»wÕª©SçÏŸ5«ª*66(hʔѣïÞ0aÖ,ãÛ{‰_Šjj:9ùúŽ»`Á’%S¦ Ú²eaaHÈÚµ£GÛÙ?ž˜XY©R±X½zÕ™,/ïöíåË»uëÒåúõiÓV­:pàܹ»wçÍËÊŠŒÜ¿çÎãÇ¿~ýýûÊJ¶°ðó;räôé¿þêß¿ºzï^_ßQ£6n|ü¸¶¶^¶@Ba0PÕêOùe²ììkצMëÚU*=xðîÝýûoß>~\¡èÚuêÔë×óò>í}ÍÒrȉ.lÝúc ÙlCÃ/1 S($ RAP xó&4tƌ͛/_ {ýºùÕñfçԩÇ÷ì!œëD" ¦F(äó««…ÂÚÚª* ¶¶²R ¨©©¨¨¬,--(¨¬,)!Âyçå•—åæ–•æä”•de•–æçgfÏ$Ã|ÿ^¸\/¯}ûbbΟ>xpÁ‚3 hÓÆÀ€Fû3'1úúººMµ}Õƒ ššÎÎ:˜šþž”š$ëW"Ì7ŸÿüùÁƒíÛË¥ñÇžÏå¶jÕ¯ßСžžß¾túcåÿÛP(VV+W¾y“–ööíêÕÖÖ_†z%ÛóŸ_¤ü“ü¯SæûÉ“‰ )!îæÀðÇÎÐеõŒ±±yy11!!k×úøØÙ}ìfZÅ.%¥¦æêÕ.]Øì/çÇÆfȵk~õ*/ïÚµ… ­­Q”pìÔÉßÚ´~ýêRW£¨µõâÅÑÑB¡Xœ™) b±Xœ™YRrî\ÇŽõއŸB¡˜šöë·mÛöíZZ~ìnÇdº¹?^P™YP³o߉'NìÜYÿ¹k×ùó¼y#¿¿h‘““•U}˜ïúÄßžéˆ|K‚ (jb2qâÕ«~˜oRAú×(H$$™¦šWA"i>¨ÔÖ­çÍ{ûV(|ð`íZ;;r;MBBBòëAcãéÓ=úðP<ê>E¢Ç÷ïwwÿxÝ$îˆ}ÿy=z :n\ßS(¾ÿDf±ttLM--[¶lÕÊÎÎÚÚÆÆÂB[›[Ñt`˜Ëmݺs眵µrœ§P œœºwïÐÁÌŒÍf0 ÜÝ»woÛÖÜüûà †»ûÆ©©"Q}KŠÅ™™ÕÕÛp¿?PfÆ›Ÿ¯T¡¿qÈðâ8^<œ°RÕ)E ‘›I­&ìEDØñ:EÕj±X*U(EétâßùùEE%%›Í`€ ®®–§R©TPZZZZY©¥ÅfÓét:á¾§R@yyyyy¹J…aÄãijjjòxd$’æäs±£Ó1ŒpE€Â¢¢²²üü¬¬¼<¡Ï‰ ¹\©$)ÀpQQyyUUiiyyEEU•X,ñùb±LFVÐÔÔÒ’ÉòòJJЋ߽KIùðÁÑÑÕÕÅ…ø.¹\.'RʪT ƒÁ`Š¡ö*ôÿ á>G(K8A0¬Rá8Èd2™\^—Á D ‹E¢êêš ¬¬ªJ B>hjêéééq8,‹%—‹D ƒ¢ ¨©©©©©Éá0T*,È´´BaM q#‹Á ÑètRdIHHHHHHHHHš?ÎÅNCƒB ªªªªÚÚÒÒ¼¼‚¥R&S*™L:Å’Ëùüš•J¥‚a]]##SS"Û®®‰‰…EU•H$¤¥effgËd …J…¢t:VYYYYY™ššžž–F§3™4F¡ ¡–ÐhDX …B!¬IB¡X,–¢z;q' Ç!‚`˜Ng0X,6›Ãáñ † ;’Z]U%òù%%¥¥UUB¡X,•2™D9B¹\&S«««•J¡EÚ´±³Ó××Òâr G;…B&#¢ø)r¹\®T Bam-QŸŸR(®®#Fxyq8……Ož/tº£ãÎ))™™b±X\÷™”´v­­-•úo~s ÅȨ}{_ß¾}´´`øÛ퓜|÷î˜1ººÐ7‡}Ñ×ïÑÃßÿÒ¥·o““+* âã32òò’“‹‹}ûîꪧ‡¢ÅÅqq›6>_PðïØP°††»û¤Isæøûâädl ÃUU¯_‡‡=ºaɯ^}Ü>@£ûøøûÏ™3eŠ··µµ¶6‰D……ïß¿xqíÚ©S—/¿ySßcM-ß”šóxŽŽ;»¸ØÚ:;kj"¦R¹»÷ìÙ­‡#“€Z-ddÄÅÅLjşʫ¡a¯^‹/^TjqñÓ§G®]û×_×®åä 0¬­íá1hдi#FtìØ¾½‰‰–ŠJ¥……IIwîüõ׿ÍAA±±••j5P(&&#FlØ0eŠŽNxx``vv÷î3f̘ѳ§¹9…ÒÐó›ŠZ-ñùŸß4"ŽFˆÔÐJe};ÒhFFíÚI¥))ïÞUWGFÚÚ½z-^¼r¥£#ŸïäÔ¢”—'ýؼ۴þmª¼q8mÚ ¸té¢Ezy™™Q©bqaaJJdäÁƒûö;öìYmmÝóQTG§cÇiÓæÌ™;wÀ{{==¨¬|ý:"âÔ©­[{ñ¢¼œ¹?Ò_Äã9:Nš´nÝìÙ#F¸¸p8ÕÕÏž……íÝûü9a9ú¼wšOþ›*Ÿ„¬°XVV#F¬Z5þ„ îîššAB•+§NñùÌšÕ²eTÔš5G>.àxSÚócX,w÷“'_½:}zð`ˆŠ8ÐÅeñâÇLÆHHHHþ—øÝärçñèt.‚†ÕjA¤RQT*U«•J• †qœB¡Ó) Å"â¿€J¥T"†©Õ8.I¥R)±Xl6§§§¯onnlln®­Ífki UUb1ab³Y, µà Eét‹Ng³55‰„³T*‹Åã1™ަ&€ …‚¢Â`P(0Ì`€ R úº::&&ZZææ-ZXX´icjjjjcSw{ A`˜ÇãrY,Çãp†!H*A‹aA„Ç30`± ÌÌ@ÍÖÔT©P”Á Ó9MMmm==CÃælyD#£¶m½¼&Ož={âĤ¢Ç]]‡=ztóæ :v”ÉŠ‹Åb+«Ž-6ÌÌŒNµ°èÔ©m[[[ª¨ˆ¿wïÞ½sçnÝJMU«Ý܆ݳgêT›:5ˆÃ”ÊÚÚÊÊÊÊ¢¢ÚZ ÅÍ­S'w÷†îžP(vv£G/Xpü¸ŸŸ¹ymíë×ÏžED¼~-;8øùÍŸòäèÑ-Z|ì’… <ž¥eŸ>=zxzúù-^¼hÑêÕ..Jå«WÅÇÇļ_U%“ý[ì2TjëÖ‹ݾ½s§§§Túðá•+·o ;ol\·‹JmÓfÕª  K—-jÑ"55,ìÌ™ýûŽ~ýZ¥²³1bà@3³úöljù¦A£™›µvíªUë×ûù™›îê:gΖ-kÖìܹsçš5Û¶ùû{xèè|z; †íí—-;qbÿþ.]øü‡¯_-/wrš1#0ðìÙaÃÌÌêÊS©­Z Ö¯Ÿ“ çæÞ¹xúôÞ½'OÆÅ©Õ}û®^¶{·§'—KÈ'‚hjº»1f̺uçχ„ìÛ×±cmíƒ_þ¯É´´ìÜÙÂrrž=ËÏ—ÉêeÙÀ€ÅR(ø|™ Ã@ÅrrZºtûö¶mcc÷î}ôH `0ôõ55´>M—‡¦ÉP©¶¶S§Þ¼ùäÉŽ'æçߺ~ûv\\q1‡ãèØº5W_žNwu]»688&fÓ&—ªª;wÂÂîÜ©®nß~Ó¦ààÛ·×®up`0êÚ§iýúºC‡ž>}þüþý'š˜””ÄÇ?ž“cj:}zpð¶mnntú§®¬Í+ÿM•Oär»uÛ»78øÔ©¹smmkk_¼xþ<=]Ggܸ°°ë××®7oÒ¤=,-ëÞ£iíù)ÂbijR(Tª¦&“Iºq’üwøã,H‚ H„F l5j5Ô…Û&,<àGA·‰Îo„å§.47•Š¢T*‚P(„ãÀãñx<•Êd²XA0Lõ–J …J©T«•Jµš°XAJ¥R©ÕDèâëîGa†±Ùl6›maaaaaAäHÒÑÑÑÑӣјL‹BÁþF¡P( ‘R©VqðpœLã¤T"ˆZ A ˆ Dý‰ààô{ýá —Æ·o÷ì9qâúu6›Çóô‚¤¤…„mH­®®~øðÚµÈȇY,gg—þýíìª ƒÑ²¥Ÿ_Ÿ>ÚÚïÞ:µnÝæÍ·nUWcÄÅÅÆŠD7nøùy{;9…‡Ÿ:õì™DRÿý(jdÔ½;¶fM\\QѿωÁhÝzæÌ™3ml226lèÙsÆŒ½{sr”J¸|ùÅ §mÛ'O¦NíÖÍØ800007W­f±Zµòô44¬­ˆXºtË–'ê,3¡¡!!Ÿ>›V¾©ˆÅ¯_/_Þ¥K;wvñbvöÞ½yycǺ¹-]÷©Å ~“F¥*•áá£F±}{b¢X NZš­mïÞ!!Ý»·nÍdž?Ÿ›ËçK$Ož,\8a“'Ÿ> †Ÿ?§R{õz÷nÁ‚víLL(”'Oøü[ǯ\éÝû{Ïÿ#N[»sç1czô`2SR6o¾u«´”T¤Pèt"s…bm=}úºuÇçæîÙãííätçÎܹ­Z1 Q¦iŠSû·©ò¦R1™îîË–MŸîêZXxìX‡¾¾;w¾~]?N?…Ãqu]°`Ú´-–,éÚuΜS§Š‹ ‚[·jk­­ß¿ß¼yÚ4;çνw¯ÞÖÓ˜þ*(`±ºv=ÛÛïÜ™4ÉÏo„K—**0 †/^üð!2òÁƒ#G>Î7×ÜòM‘O€ÁhÛvöìÁƒ9œ/æÍ8pìØS§ŠŠT*:wîéÓsçîß 31ùñöü8¹B‘›²qãþýoÞ@zzV–Bño›?IHHHæŒbA@§Óét:¡Ü|Rüc…ø ¡8já Gü›P™Àq‡Çãñˆ8u„rEÜ2R© åßÿV©”J¥ÃT*µš°^ßNÜP’Jår™ŒB¡Ói433 KKKKOSSG‡J¥P˜LÂD£Ñh,‘–PàØl"üÆdÒét:‹EXªPE‰¨T‚ãÃ8‚Rçn÷;Àñ¢¢ôôü|…T*…Ã0¬²²  ¼\©¥R¡ 2AmW×s<ž……‹ËرãÆ¹qã¢E“'¯ZÕ³§ž‚P(4•ú#!PTKËÜÜÚšF«­MLLO ëX0¬º:###£¬ŒN76vpÐÒúò ](ŒŒ¼x1!áߨ’¯¡acã쬭-§¦fgc˜––¾¾®®¾¾¾>—+“¥§—–⸱±½½‘Ç…Â÷ï=ÊÏçñ|}.\²dРV­ttê¶×_ÊBÓÊÿ>òó¯\‰ˆxÿ¾^‰R*++‹Šø|b³¹\*õãƒÖÒrrêÓÇßÓ¦Ož …Á Â|—T*B-$ÒÒBÐïqqÀq©”Ï‹ëƒàxºØPy15íÓgöìk×¶oïßßÙ‚**^½JHxõêþý”>Ÿp‘$Ú¢É Q©L&r¹@P¥Ãd2‰D& …ÇûR𪪷oËÊ>¿Ñô/ÀƒÁå2 Èb |ï^VVVV|<ñùúõÑ£mÛ¢(!iu­£P¼{0~üС{÷VUùø>|ãFnnUUlì;‡ûùyx|êèØÔò¿µºª*+«ºúÓ¾%F(1æêÞ—B±²š>ýÔ©ääû÷-òò‚áÜÜ'O"#££¯_//oX>ÿüŸAÌÍÇÛ¸qÉ3³„„5kV®¼¿²²^Êq\¡‰¤R×ÔôöÞ¸qÑ"sóË—7l8v,-M¡"ÒSK$"ÑóhJÿ6]Þ`˜ÉÔÖf±p\ () ¿}PÃL&Çd€TZ]ýyN(µZ"áó¥R`045™Ì¥®qýA4‡C§ã¸X\Y)}<Ÿ`˜X\QQ[û¹ómsËSä‚èt‡ÁÀq©´²R,þt>T©øüŠ ¡°¾Õ~¼=IHHHþÛüQìpXQUÃuwŠTïþF¸«A´„Pg`˜ˆW÷oAbÉAÂòDä4Â0B àb†ª‚ aK¡Þà8†©ÕDÔ:† ÂÖ„a‰DB|#ñ,¡ZA‚Ô)`V¥N©T«Uªš>¿¶–p¢S©Ôê:%­ÞuÃpœxK*EaE)”ßÓ„ÕèÓmÂ×’ÓhææS¦Œenžœ|àÀºuK–ÄÆvÒ×g0¼½æ®Ž+•Dô>e2??µ… "Å/¨T"‘Rùù7á8†)•ÿÆôºu`˜T*H$8.†…ùøxyMœøøñ·Îè äòââèèmÛæÌ‰Ž ÓÍ̼¼† Y·îøñõë#"Nª¬´³<8*ª¼œØ‚5µüïyw•êûvËÙyùòÕ«]\^¼˜6­[·Q£._&T61ár§OÿZ÷ü‡Jµ²3æøñíÛíìž=[ºÔÇçܹÜÜÏ¥²¦&'‡ÏÁ.]x¼ØØáÃ’’D"6›ÍÖÖ¦Óùü‚‚ÊÊŸ9hlÿVU5UÞ¨T©´¶V"&SG‡Á æò¯ÕÃd2‘H**•ÃùÜFAT*‹E¥Ç%Ÿ§ÈmLá¸\.Éå h` ¡Á`@Ô…VAˆ/ ‚UU?7^OÓääR¡P*ACW—Åú4¤ ³XŸ*:?Óž$$$$ÿeþ8 R‚ÄfÓhu7…¨T*•Ptë q_ˆPN@ ¨ùâ'„•éKËá¬A„‚„aFX¢”Ÿ “ÉåF8ÔŽ|V÷½Ä“?vü#"éŠ@ œ¸±Aõê†a˜D"—Ëd••55ÕŸ@¨LH$H$2™TªP¨Õr¹J¥R)„bø{ûáû€ …ÂåÑéIvvIIý" ‚,–£c»vúú?㈤TVUåååå)•<^›6-Z|ì‚lv‹ººJeYÙ‡»ü Èåvê´yó±c7n„‡oÜ8l˜‰É?yªZï:E¨é_¢VWW§¦&&VT°Ùnnݺ™š6Ý äÒÜÜ'OBBÖ¯?p %…Jµ³sq16þZZÚ¦–oü»Ö{6Û_Ñ‚ H£éêš™±X|~JJVV½‹&ijº»÷ëײåïïad³W­ºxqÅ +«›7—.2åܹ†ƷL–ŸÿäIJŠZ-“={_çF£YZvïÞª §§¿x‘“SÖáÿØ;븨²ÿÿßœ.fè’6@EìVìîîvíZ»×î.ìNl @PPº»§{æþþ8;?p×ÂØõûÙó|T«srÞ¼ÉÌDQw÷îÝýýM©ÃÌÌš6íÓ§N/¼9þk:>5šüü7oÞ¿W«{öìÜÙÁÁÔ›(Êç7i2p Ÿ_õ²ÁßןLfݺsçž|¨Õž9³xñÚµcÇDx¸™Y·n+VL›ÆåÞ¿?dȳgÕójFÍίÑXÓñ&•FDlÙœ–>gÎ¥Kèõ+Vœ9“œ¬×ÛÛ7lèïãwî¬]{øpZšZ-¿zµsç… bñíÛ[¶lܸp!‚ÇÄ Hƒ“'oÞܤIeå… Ã‡?{&S‚ÔlÉn0††îÝûèÑâÅGŽ:´wïÆ«W_½šíäÔ»÷o¿5m r ~{ÿüìñ)•¾zµmÛÑ£¹¹­]{öìuêܸñî—Ы—¿¿ÁPýáEÕ´?«ƒã"‘Ÿ_PPóæíÚ!ˆJµctƒ@ ÿ~9,8$I䟘ò¹U¥F’Eqˆ" ZH# xªÛyLùîLEÆ)™d’N§×›òßá8Üá@LcÀBÜó( Ç1Œ h4:XÀo¨T*•R‰ãaú£EF½ž¢À¢(‹Åb1Z­^"k à ÄH&AQ@²?P éçAQCyyJJbâ«Wb±Ri0 ˆÁ gf&%½xA’r9°¥Éd99))/^¨ÕR©^¯Õ9²iÓ¹sææ&´o¿téìÙ’—öûï›7''÷ïß¾½Bñ¡¿MöJ¥ŠŠ:|xûö¥KUª¾}GŽ6løðþýA¤ÇŸ0áÌ™”™¬êön0(QQqq*Uiéצg I›† 767G¸¸¯\IIùwKóee!!«W8л÷úõîÙsúôÈ‘jubâñã}ûöì™–&‘ ZmRÒ¶m£Fi4óç/Y2jÔ¢ENŸn0TVfg'&Þ»·k8›µ:1ñÒ¥'Od²©S Z·nÔ({{€¢ÄâääððM›z÷^´($¤¸Øt¾jºý·¢PDGïÞýÛo{÷ÚÚ.Z´páæÍ§NQ”D’pòäìÙ÷î=zTPª%%…‡?}ª×|wc0ÈdééOŸ>z„¢ E!ˆZ”´iÓС˗[[oÛ6nÜîÝÇSTffhèÉ“cÇ9aÂÈ‘••U•‰jÖ~ÍÁq “HÞ¿ŒŒŒd0lm›7oݺz•*.îÝ»S§€@B£±´ôÖ­Å‹{÷^¼xåÊM›~ûmùòΤ°ðÉ“%KÆ›5ëöm×ñÛ¨éù­éxgvëÖNºw—J×­[´hÀ€d³Uª‚‚¤¤»w·m»rÅ´=EI¥áásç6fŒL¶xñìÙ«VmØ0~={vçΫV½x!‘€Þ¯éx0Š‹/^3fôhkëmÛ–,?~Ö¬)SÊËŸ= 7nȇGš2…ŪªãôsÇMÇ'E)/^,[6hPÅÅ3gNœØ®»»•Õ»w'O~âD£FgÎ\¼èî^?Z³þ¬ŽÁ ¿yef† ïßÿµ¶üï‚9²wï֭Ç;eŠV«Ñ¨T¦|qUÿ‚¿µZ«C}ïþ¾}ûÖ­7úôéßð`OOoo_߯ߡüü¼¼ü|™L*U*óò²³sr’““’2223ÓÒ µßÂÂÜÜ`@ÕjU*µº¬¬¬¬¬L&“H¤RSÜ‹Åå9\ÝLâŠ$i4 ‹‹‹Š€µÊÊÊÎÎÖ´Ïᘙñù@2Ñé$I …B¡PˆÅb±X\å䇢ÀvTY)K¥‰D"‘€Ô¦”àz½Áö†$ét|º|ùŠ þo B.·Q£Ã‡Oœ1B"YµjáÂ9sââ~”»PMºu;z4==8˜NŸ6­^½#Ξ-,„Kò>¿sçƒ32Îc0Frr1âæM±ö Ôœ_΂TX˜Ÿ_^žPTTP—R$˜™ "‘\.K$%%J¥L&“¡¨Ba0P”V«×³Xl6N§s8l¶F£Ñ¨T%%……@˜™ …ææZ-EétÇçƒ4à8Ža¥PÈå‰R©PH¥ ‡Ãã™ê,!†Éd2™L¦ÕêõÀ5Ž¢ …a lV*¥Ñ K­ÖëÕjä´c±X¬êSUµ›p¼ºC°ƒ¡Ôp\¯×ëéoÒhff66"ŠªTééJå¿uŒ$iaáè¨×GG?~äÈ;EEPA _ e2ÍÍE"¯¬,+v}!I;»=&OnÚ”ÁHKÛ½;)éï5Ä òµüréíÛ7o‹‹‹‹ËÊpE >ŸËåñd2™¬²²²R«-/ÑB ¾H§ÓëU*­V¯W«µZ­–¢ÔjµZ.//¯¨()ÉÍÍÊÊÎf³Y,`¡Ñx<ƒÍV©$½XËäòÊʲ2F&‹Mi¤ÒÊJ`áÎqª?ÑëµZSÒ:Áîy*•B!•ZZZ[ÛØ…ffÖÖ¦¤²z½F£Ñ(2™T*‘˜,H4ÎdVw4µ¯Ñ€º&&×Aà.lG jÓÏîÿ˜˜«W÷ìù·Î¾£ãÆÛ¶õë÷Ïý¢¯oïÞS§"‚èt©©{÷N˜Ð©Ó¿9þ …"- NLäÛ™7/.N,ž7¯¦ßc³Ùl77ØòË $±¸²R©47‰lm--ÍÍ£Q¯×連H]Ò6€DʪêõZ­)æ¤Í6%×h@rnÎ`P*5…B*Õét:ƒ$](û“’’ÒÒªE1 A€˜No Qpi+++*ÊÏ6`A9éèt‚Àq…B©”JËËKJJK•J­Öä“ "L®q$iªn¤Vk4 cœÑÈbq¹޽½]VVvvn®Z­Ñèõff—+š›‹DF#( ê&!ˆZm4êtZ-†lsƒNŽ‚Ëåp8.—Çãp€³8"•J£ÑëÅb™L*’ $$òÇãóÙl EqÜÊÊÊÊÂÂÎÎÚÚÊ Y@ äçñË $×éÔjàpf0`†r±L&I3À¢daaeegÒyw¸òòÒÒÊJDóÐhl¶¥%ŸÏåZ[ƒB¨ å·¹¹™Hè ×WT”••–ŠÅ2YVVE…X\^n0èõ Hã8®RÑét:‚p8‚ (Š‚¤àr9ˆâói4>_¡0u:&“Í6330ŒÁ`%¥R£¡Ó«’u#Š F£a˜^OQF£TZYYYÉáp8<žF£PˆÅ4Ž3ŸÏãYY …ŽŽZ­J…apÈB @ ?_N  Oõw@Ì(F >­žº”XÑ;`Küÿƒa`K­Ö$ºt:µ$ÚÖh@Ö8F"‘ÉT*¹\­Öé F¯×é´ZEÕj­–Ë,,Çe2ŠÂqC¥Òél¢(ª×k4‚ã*•R©Ñ(•Z-((ËdòxffÈq,]`¿4•J«Õh´ZƒÁÜÜÌL(T*ét‹Çãpø|†ÍV«‰ÉäpØl&“Éd³™L‡N‡C@ ùyür ˆð7ˆ;aŽ£¨Á`4êõ(Š¢rÁñù—Ë`h44šV«RQ(j’GJ´‚6A¢½Þh±Ga ñ¶Phii0P†Édr¹X¬ÕªÕ †ÑhF#Šêõ¬>z=ÈjÇ`ðxÀ‚D£±Xl6‚„VË`ÐhL&›Ífs¹<ŸofÆ`€ªG:ѨÕJ¥ …V Ò0èõ¥Vk4 zŠ¢8‹Ë)Å Ó+“IQ ª’é @ ÈÏá—´ ™já‘É‚„ (Zݾ¬1 ËBR©P˜Jº Z-x´ Ó;†á8H N(Šã$ â„ÀoQ†ét –EÉåJ¥B!“étF#hãB§“$›M§ƒ(#&“ÅâpX¬*A$ƒÁf³XF8œµZƒA£íƒÔV«×™E’$I£‰D"‘Hdaaaai Üü@2‰¼¼‚‚²28d!@ ŸÇ/'€#ɉˆ$ 'ŒFê€uÃpˆÕëM2Øe ­V§ÓéL œóT*àj§×ƒ´*ØZ­òJ"‘É*+Åâ²2¥R&“Ë$ÓjA‹z=pª z=‚ètz=Š‹F’a0 ŠbŽ“$?@Q(^[%ó@Zp‹Åâp@v;àŒG£1t:Ø×·oß¿ÿ>11555Y@ äçñ‹ºØ¡Õ¨.oŒÕÛ›R (Š,KƒÁ ×ƒ-Au#¤‹ÅbF§S«år±X,–J%PõH"¢H¥R*¥Rì$A¾;àf‡a Ez=F§3™@d_Ö$33[[ ’$:]£Ñé´ZŸ60!I’¤Óét$étƒÅâp¸\.—ÇßåqeI­V«5š””ÔÔôô’’’’’8d!@ ŸÇ/*@ñVv#1ý 09Ì$ JU¹’7€¶LÒ¬1(Š z=†ãÅf3f0¨Õ¦×k4@¾ (Ž3™4šÑH’8¾‹ã$ öÃHÇQ”Åb0pœND™™ "‘¹¹••R©Ñh4r¹\äH2Ža,“Éå2™¦X#‡Ïçó3333¡Ng±Øl`uqG IŠŽƒ–à…@ @~¿p †¡(Šâ8° !HÓ éªàp8ˆF¥2I¬*Û‘^¯Ó™Üê4PŽ• Hǹ\&“Ng0p\ `±ètQ(h4 S©T*’4t:½D4«)K†‘$H¥Àd ŸÏáˆDææR©J%—+• žNgª¿¢‰€• ¤vV/`ïï€ö …B¡@µÃ@„H+¡ÑhµZ-²@ ÈÏãH&y„ À½Eq|а‚4 ÀR„ã:N§RÀÑM¯7Õ E) ÇAþ;ƒA§3u:P—ˆ ˜L¥R£ÑjÕjµZ¥Ò…ÉììpœÅ D.—H€ Ç SâWD£G>:ɉ¾•J'IŠÒhT*¥R¥R«u:£8 "I²X$‰¢ ˜-ŠêõÀNÅdr¹\®^o0iÄd2™t:‹’Œ3L&8R7773ãñ^¾,--(€C@ ùyü‚ILGÀ¹Î”bÈ•êNvújT·UYœLyðLRÇq\«U*•J“=I£Vð]S;`{:D UY~€ðb0  l£V«TZ­LƒËd2°9’$I‚¹éÀîÄ®I›m²qI¥R©)A†Ñé$I£aN¶¶¶¶ÖÖ±±±±pØB @ ?‡_N €PõŠðj€O(ÑAUi¼?HÕØH’$I¼ °‚²:^ìHj5HÏm’gb0Tw„3½_%Þª¢¤L{ œê¸\:ÉQCt:84ƒdRÕQ`D$I¢R©T ‚ (޳Xl6Øž €ã pºS*•Jƒ@ üL>H4Î`TÙ_Lÿ;A$Þýø%—K$ß³CÕ-H@$U<`›*ùò×}ÚjDŽÑh4’$x—ɤÑHR­V«µZàf„ †a˜é[z½Éeˆ1“• Xš(Š¢T*qüÈžÇ` (‡C£1L&øe:Á0YÀö@®ýÖ' ƒ€ E1ÌÔ8N`Pȧ²²òr˜Å@ ù™ü)‚ƒÙ»÷WØ¡ê OõÔÞÕ-E@BT—Ow«2 |¦VkµZ-WÀV„aÀnÃb±XÀ•N§3ÔjSyY`ç!I:]¯7 ò»JÚG ŽÓhtºV«×ët8¬WF’ã&G=à¶gJç ª9™öÓh"L.—Ë¥RÏŽËåñX,N2dêƒ@ @ ?¢N77/¯F~T£)) ¯_Ûwÿî,WeM2Ƀêö¢êïü]\U|*—ËåJ%°.UÙ˜h4ð/0br¶Yã FÃq$c (“›°pvL.}† ÕÛ¬î"XÝmì•)ù8(+ j.QH_®Ñ¤Z œñ´Z ×à…@ @~د¶C@0T·©R=%ÃÇÒ6T‰¨ê©½µÕ’£Ê"D’ E8°Uqªñw1Þ-€ï‚¿ÁûÀRŠÀ»p««nã{ öªúqm@k i„V«ÕªÕ ƒA£9:Öªeo‡,@ òóøE Å¢è‡nsÚˆ@¤x¿º4ª.ªcª‚,>z½^äˆB¤\ 'I`éŽs(Š ¦ZLCõ}‰|Š¢z=E!ˆV«ÓUßÎD•} Ä™Äp¾ÓhÔj­TrV'‚ I‚`±Øl:ÝÉÉÉÉɉËåñØìû÷ïÞ½w\@ ägðË ¤©S.œ1ž@ òÏó˹ØA ?‡*k$@þWÁq6ÛÒÒÑÑÞ^  ÓáÌÿ#À0Ïݽ~ýzõ¬­aŸBþü¢uþ‰Ë](lÓfÑ¢ùóGŒps£ÑLï mذqã©Sii&E@Q«N©SûãQ£D¢ØØuëF^µêÊ•Ü\‚pwïßذ޽«Zû;ƒXüòå©Sçχ‡ BÍšõéÓ¦MíÚö$«Ñ(—§§ß¹såJTTq±^ 4š›[ß¾kÖ,\ج™……ɽA4š´´Ë——.]¿>"¢¬ÌõõSáâ2iRpð½{ýúÝ»×¥K—.Çÿµ¿ÍÒ²I“Žë××j#"ÂÂbc++?Ìï‡aŽ«kÛ¶M› QQYY­Z9sá‚ÏÁƒ:Í™sýzIÉçób‡ãì\·®‹ A”–fffe•–Êd:݇Ñhߎ …-ZŒÛ¯ŸƒÃóç§OŸ=¯PüÈ_€üWûŸ${ôزeݺºu/]š6mÓ¦'OÄâÿÊØÂq¯vm??wwOI‰‹{ÿþ¯ó䟆ÍnÝúر»w@ |}GŽŒ”Ë¿æ›Æãùù5rdP½=ñÁŠE¯/,|òdÿþ£Gcb**LçÃD¢=öîß°!9¹S§ºu—,yñâW¯!ˆ¢l¶«kÿþ“'·kWYyêÔ‘#ý*ã–Á¨]û·ß._>{¶M›;;ujßþðáü|½þÃ#àrýü&Nœ~ãÆ¶@Bg±„BKKss þç æá1cÆáÃÛ¶Äðá>xðáÍ–ÉôðèÕkÓ¦Ó§Ûµ»t©S§©SOŸÎȘ1cûö[µŠˆ;64ôsÇK§×©3a¦M!!3fÔ®ÍfƒwU*‰¤¨¨¤¤¢¢¢B,–Je2¥R­Îɹreùò‰÷î­Ù´ÇdÖ­;~üŠS§’äˆgΜ9ÿ½}Ìf{zΘ±~ý¨Qõë3™5û®J•”´gÏ¢EGŽÄÅ)ÿÆ5I’nn£G‡„„„ŒÉf§§'&ÆÇ¿}ûþ}\\ll|üë×11ññoߦ§——«Tß?VFÿÿ:³—ëæÖ¶mPPãÆ/_šž÷þû‰F³³ 3¦k×:uX¬šÌ¥T¦¦^¾|ôhhhNÈ.úé3Û ÁÊ•·o9Âãéçtû¶Lö#öÿg__4š«ëŒ7nìßß®ÝÅ‹£G÷í{äH^Þ§æyp͸»O›vôèåËݺ……õëףǑ#))ï&Óѱsç¾}mm?÷ïËryJÊãÇW®<{VZú¹}«ŠÒé¹¹¥%‚Ðh59óÆçLš4}ú¤Iåå/ž8§T …ƒ ÊåÒéz}óæ‹÷éS»¶éÈHÒܼN‚07¯]ûðá°° äòªC¥zóf÷îAƒ¦L¹w܃?Ý»"‘›[``»vM›Ö¯ïà`mmfÆd2YIIzúë×ÏŸ‡„ܹ“™Yý>wÔ®=eÊæÍ›7;9<~T¸wQ‚˜™µn=mÚÌ™ÎÎÙÙ—/?ztñbyù¿/ pÜÖ¶wïyó¦Owue0˜Ì;ÂÃ%’;>éé»vMzà@óæcÇ®P\½zúô›7Õ{ÃÌÌ|}ûõ<¸uëüüÇ÷ï7 $g±ø|33‡F#7eô1Þ¦lÀ 9F§3™,øÉd2Y,Ãô I*•ññÞºõö­TZ½÷¢V­þýOº|yÊ/¯­Ò>…N—›{êÔÌ™½{oؘ¨V×´ B(ôõ;výú{÷x<½¾cÇI“®^MO¯yKß;ÿzxLš~ï^“&Û·7m:nÜùóŸá5ÝþkÆ’•U·nkÖ<|xþ|ÿþ..àÝ„„ ¼½›7?|ø[šÿ,þ³©jè={vëVppppIÉÇ&#Íή_¿]»NÚ¿ßß?4tøð¶mwï¾s§¬ìĉ´4¥òС+W"#Ú´©yóAƒÆß±ãc·o ³²êÓ'4´{÷¹s?üD­NIÙµkôèÑ£wíúô~²ÙmÚœ>qö,‚lØÐ¯ßС_÷AD¯/+‹‹»råÔ©¸8°766(:xð²e þî§e ¥eÆ͛ …©©ááII¢¯VgeEDdeÑh'úûÛØÐh¤¦Vïu…âõë½{ÇÛ·¯cÇ;wvíjß¾mÛQ£Ö­‹Š:}ºgÏV­,-ÃÃ/_þô¥®REG/ZÔµ«¥åâÅ8ÎáXXØØØÛÛÛÛØØÙY[‹D"‘PÈçóù¦V¿{'‘ÔtÒ`0ÜÝ[·àóÙlKËcÇîßÿ²¼R«ccW¬6lðàS§ >¶4¡(ƒA­V( ™ìk—.&4µ$ù·0ŠŠ?^µjþ|¹ÜÇÇË«Núõ½½ÇŒéÓg„͛mm âáÃAƒš6íÙóæM±ø{~ëçôÿÏÃX, ++ãklÌ$ioÏçÓh8N§[X8:ÚÛ;;³XU‰m”ʲ²ÜÜââ!4kvå›™y{·mÛ¦MÛ¶ff_³LÆ0ÇÅ¥Q£ 8œØØS§¾,~?ûúBQ’ ø|’ür¡(Iš™ÙÙ¹¸88Ÿ’(J§;8´m;`@¯^>>5•vUcÐÙ9  ^=&óìÙ!Cnß®‰@ú~tºÌÌË—wï^ºôøq7.4tÐ _ßsç®_¿téñã°°¨(øF ¨™YûöË———·ÿò凿{Wµ5$’´4‰äãcE9!CÖ¬Y³fýúñã5b³srâããâÔêÚµìì¯\¹}ÛÒÒ×wíÚ)S6mÚ·/=ýäÉY³fΜ;÷ôé´´ÏÙ¡õz±¸¢ÂÜ<0pÑ¢}|V­ŠŠzúÜÉŠää«W#"´Ú“'{÷nÐÀÊêÉ“ôt33++6[§+-ÍÊJO/,üÜ5K’|¾‹KÆ4lèëÛ°aݺžžuê8;»¸88XX˜™±Ùa4ªTIaazzrò«W…„;vðàõëÏŸ}¸@%{ûnݶoß¼ÙÏ/:zÞ¼Þ½çÌ‘JçÍ ]±"/oذöí·oW«)J¯W©èôž=oßÖj32.^ܱcÁ‚Ç «îŒáâ2cF@@߾ÆUÿ ­ví9s®^ŠZ¸ÐÑñÓ#ÀhÔëÕj•J£1˜L6›Íþë\¨R•–fd„†®[÷úõÝ»oßJ¥Õg ƒ¡¤äéÓ fÎÌÎær?=„Pèï?hÐêÕ«V¹ºVT¼xqñbttYÙ÷vkëþýÿøãÅ GGW×Áƒ‡ݾýáÃÂÂæ*b±|}§N6ÌÚ:,lá»w?ÿp æÛÍüomݳç¢E}û …—.Mšäìx°_?§´49ÙÅeêÔ£G:Õ´R~üø£G™™}úœ:•=cFíÚ·!1A”—ÇÄüõM °²²¶¦Ó%’¼<±ØÆfĈµk§NmÕJ$·<’´± äp¸\™:uß¾cÇúöÊh,/ñbÆ%K.]ÊÏllÌÌ4š’’‚±øÇ:…}&³^½Ù³wíš:ÕߟÍþû š¢d²—/ؽL>îî­[·lic³woRRv¶é’CQ§~ýyó®^=sfúôœœ9s||† »sçc¥^_^þæM\œLfo߬™›—‹¢©©åå«J»iÓ”)Ç?}Š ÙÙéé4irùrMŽŽ¢ ¹¼¤$//) ¼þ˜>kÐ`ذ  +«¤¤Ã‡Ç_¼82òÓÎtº‹Ëĉ‡-^lgÇd~ΠT&%<¸hÑŠÿìu‚¢$Éáp¹(ªPH¥Zí‡{ˆ¢Ááp¹4šF#“)•Ÿ•F£\ž•õôéµkàõÃO1ŒÉäñ8ƒáSÖ:ÝËkþü½{×­c±vîþ¬þgõÿÏê]3³N6oŽŽ>uªY3«fß^»6,,4tíÚªwŠ&LpwïÕ+4T"ù'D¥JHX¿~À€Áƒ×¯ÿšíét7·yóž= ±³ =þõëǶùo__ß E‰Åóç÷èñm-à¸]¿~!! Ë–I¥×¯§¦š\ÖHÒÞ~ذ={Ö¯9ÒÙ™$?þ}‚°°ðñ!I A/¾qãÁƒI“>µ Òé23/^œ2eêÔË—³²þ:—0uêôï?eJíÚïÞíÜyíZ^^IIQQvvIIÕLaiéä$“ Mié»wÑѱ±QQ*Õ‡=b4þÕ®ŠãVVmÛnÙrïÞ¾}#Gêõ׮͛׶í”)'O¾|)—{ymÜøðრ92kÖ˜1!!åå(ÊáÔ«7pàâŧOïÛwíÚõë"QŸ>Ý»ïØ‘’òáïUÍq¥¥áá—/¿~ÍfÏŸ?hPƒLæÓ§QQtzݺ­[µooaã<^³f‡¥¥õì î@‚¢8Ž ¥¥¡¡Û·:bÄÞ½¦‹$ÝÝ'O>|øÑ£Í››5‰„¢**RSãâ^½Š‰IHxþüòåððààìì’’Š …Âh¤Óù|KKoï&Mzô;vƇçÎ=zÏž¾}GŒX´èÁƒòrpßEQU«ãã/^<|8%%5ÕÒ²C‡9s||0,=ýÙ3ÍÙÙݽn]AƒA¥ÒjY, c26\¿þÚµ””… †êç$KK:=#£zŸhµ‰‰6YXlÞLQUùˆAvb£´@’VVþþ&¬^½xñ¼yݺq¹/^\¼xéÒ™3W¯>~öêUjjQ‘RùiùHQ*UQQ\\DDQÑß?Å0§víW¯^¿~ûöñããâvíš9³ÿµkCB’“åòï›÷uºÜÜÈÈàà”w÷áÃÛµ›4éúõ¸8_ßuëúõ›2eƧO¦#0†YX´l9gNß¾Zí©S]»FEI$Ÿ;žšnÿuÐh"‘»»¥%Eee?þþ}y¹^¯Ó ……¿æÌ Òg1 nÞ\½ºmÛ;wd2‘¨Q#oï-fÎ\µjÆ 9rdæÌ={Þ¿ÏÏý:<üéÓ›7Ÿ=;räcOþ0ÌÂ"(èÒ¥ˆˆ þ>lêÕ[°àâÅÐP?¿õëÝÜz÷./oÕjàÀvíllÞ¸ñôéŒ «W¯NŽ$!áéÓÐДƒÁÅ¥OŸµkÇ 8~|ÅŠû÷48uêÁƒu뢣û÷÷ö^´¨ús³Ÿ×GRiZÚë×oÞ H‹^5º¸ 4ujïÞjõ¹sûö™\˜¼½gÍ?¾Nàà¥Kß½S«Y,w÷ N:yrÑ"6ûìÙ=¦Ný¼óƒZœüðar2‚lÝÚªU:,Ö;¦Å†±Xvvžž­[wìØºu‡íÛnذysyùòåmÛNŸ~ófEÅ×]ìÀSÖÎÎÑÑÎÎÁÁÞÞÊÊÜ\ `±˜L’¤(•ª¢¢°099.îÝ»ÔÔ²²¿ ƒƒã66;.Y2l‡óðá¤I‡]ºtïÞç\)8nØ0¥(©´´T©ü÷|uét'§áÃÿ½gÏÂÂíÛwízø°¬ A¬­މ;öÒ%?¿.]*,¬îXacÓ»wHHll¿~»vyztñbYYÍ'[£Q¥’J¥ÒONe„…Eóæ½{::Þ¸±~ý§Lõÿ÷úŸ¢Ê˯^9ÒÂÂäìùiHÒÎ.(èàÁ'Ovî0ÀÚúÍ› \\ú÷?}º¸øÿ–·?Ž;8 °té¼y®®±±¿ÿ>`ÀË—R)ŒÑûñp8Í›/_~éÒŒyy¿ý6|ø‘#‰‰Õ­©Æç·l¹hÑìÙ¹¹'O¶hñðaee•=R.OJzøðÞ½«WÍÍ«â[?œG9'§† ÝÝ)*>þÎk×Þ¾ýÔ’Ó`(+KK3¹GU¿£`˜™Y»v Âå^»¶hQqñ¢E$~üØ4¸u++«OŸ¿¾Ÿ“³}{³f]º,Y§Ñ I:8Œ{òäÎC‡––nÙÒºuïÞ‡½ycÚGÏÆ¦N>_*MI)*R©À»%—¿öìÒ¥:ˆÅuæÌ–-“&…„ôé³m[jêÇæ £±´ôåË+W’“…Âuëöí;¾U+[ÛzõœÆŒŒÇïÝ‹‰).¦(gç³g[´èÜyÉ’ØX†ÅrqéÔiãÆ7ví:~ëÖøx/¯1cÂÃÅbŠÒéòó>ÝÏoذ‹“’”Ê5ã€àC‡† ™1ãØ±1c6m:{výú¶m/¾{÷Ò% K—>},xòäS–Íï›KkÕêßâÄfÍÒÒŽ;÷Ý»Ï{KÔtûÏ÷0“éìظq:îî<ŽóùuêtîÜ¥‹X¬ÓI¥©©‘‘¹¹Àú bæW¯ž:•à ^¹òÑ£Zµ&Nœ9sâÄN\\h´ôôsç¦N:õâÅôt`#$I ‹-&L˜6múô=¼¼¬¬¤¬,6öÆ#GÖ­;pàÕ«’½žÅjÔhöì ºuKK ÉÉiß~Ò¤¹Ü°°… /~ýºiÓåËçÎí×ÏÆ&+ëèÑ9sÖ®…é hµyy¯_Ç4ÉÊÊÏ×ézôX¸pÜ8‰ˆ¸zõÂ…/ ËÁ¡U«Î6´´$>ѧ|¾››@€ãN:íÛw蘛Y\üñíF™ìݻ۷¯^ ŽŽÆñ6m:wž7oôh ?s&88"Â`ðóóôœ?Ì>ÿßí¡7öî=xð¯·]_ß;&O;öùóË—“’ ð‰Jeg7~ü¼y}ûž?¿¿½ýæÍ,YâàpçΈ:¬_VQñùI‚¢$’ØØ°°ÌLoðàüýýýmmýý{õ>|È®]Ûµóðàp¤ÒÔÔ—/ïÝ»?<|ûöàà'O^¾üÔMÇÿ¡CGŽ6¬S§Æ›6õ÷÷òòô´³«Š@ª¬,))))/—É4Š¢Óù|{{++G¯OK»tiõê!C¦L9sæÝ»O9YูyPкuK—¶n™¹o_ãÆ!!_ò2Çq¡ÐÕÕÃͮ¨xñ"?ÿcSI::vì8kÖ„ ¾¾BáÇ)_‡F““séÒÖ­gÎÄÄü}9j4R”™Y‡#Fôë}òä£G×®UVVTDG‡‡ýñG—.~~|þåË7oV- ‚˵´äp4š²²òrµúã=C§{x,^üôé¹sãÇÓh™™oÞÄÆ&$ÄÆš^ß¾ŽŽMK+(øøÇ--úõóð¨¨xôèÁƒ¼¼¹aý¬þÿ I;»Îwízð`Ë–6m årsóÿ›³.I:;÷ï¿oß–-©©ëÖuï~âDffM]0p¼ví‡0@&{ðàáÃ/ÒÓ+*¾Å=¾¾ ÃqE£ñçõ_ Š2™vvžžMšx{kµæ'CQ&³^½ ¶o?sfÄ™lÇŽöïó¦ºuÄ`‹££/\8u*:úS¿A§×®½lÙ¤I¿ý† ’›{ûöáÃ'N|ݲ«ê~Šaææ“'wìh4Þ»×§Odä­[Ïž5nÌf ¶`2ýý7mºwïÖ­ºu7l¨_ìX‚8{öýû©SïÜiÚ´[·Í›SS1ÌѱE ‘(7×4¢¸ÜÀÀ™3—.õõŸ?¿Q£#Gª¤Økkgg‚(,¼u«¨è¯ûm4–•Ý¿¿mÛªUqqΟ?z´»û¾}‹¿P’¤HT·n—.C‡4nܸqýúµkçê Ί^¹2xpçÎ[·Þ½›–&㸇ÇÒ¥ ^½Ú¾}ƒŽÇÆ)•÷î­XñûïƒïÚÕ£Gýú,VxøÓ§ ‚(•©©¡¡—/§¦ÖüüS”B‘–vüø¬Y›6 þþýòåS¦´m+ݼyþ|i©\¹zu‡ÍšYZöïöì;Û¶ÅÆ.ZÔ¢ÅèÑïß÷ésëÖ©S-[îÜÙ§Ïðá!!4Ú¨Qáá“&‡Ãç››››ëtÕ’PÈfÄ×G ÑhîîÆ]¸píÚ˜1Ͳe}ûöìyà@ZšI ~;4šM`àŒ;v¬_¿dI«V*ÕƒG®];wnl¬LF§ûûwêÔ¯Ÿ›[QQJJ\Ü›7ññyyŸ³N}}oƒ4];wNžÜ¤É»w Þ½{ãÆèÑS¦¬Y´cG›6gÏæåýØGp Úvʇ'O-º};'çó3iM·ÿÒõ+µj5cÆ¢Esçzyñù¶¶‚ÐéƒÏšµqc§NƒFóîݾ}}û¾z•›«PètB’––þþƒééinîî>qbÛ¶ Fhè¾}çÎ]¸PV¦RåçW &Ó×wÙ²3gîÞ:U­>yrݺ³gïßGúõÇŽ]½úÌ™û÷­¬z÷ \¾<7×Ù¹K—AƒæÏ¯[·C‡¨¨›7|ù©'»Æãy{÷é3xð„ ¡h:,› :Œ3a‚““ÑèäT¯ž@€aùù¿Z¯ÙÚvï>}ú A4ÚÇ‚']¢×§§_¼¸n]ZZïÞ¼xqê”RµÏž­ZmÛZZú5“І©TR«Ö¼y·oŸ=[^{÷î©SÌ™³lÙµkÏž½yST¤Ñ|ÝTJQÂç×­ëâÂdæä<{vàÀåË{÷ÆÆ¾}›””””™Y^þqËAXXøû´cÇÅ‹+WÞ¸±n]JŠ·÷Ì™¦ÐÛ*ŒÚµ'NܾýÈ‘ž=srV¬hÞüøñää/-PT ðñiÛÖÝ]«MNÞ¸1#ãc6A 3É5[ÛêY ¿:ÝÉ©U«®]4xý:"bûöÓ§?¶•NWXøøñÝ»bñœ9}úxzr8×®={&“åæFF†‡Ëå#FtïîéÉ`ܼùì™iE£ÙØÔ®-–—''~jyªÕææOš4cFJJ£F^^ z{{y5i2hдi“'¯_omýþýĉ-Z´oêÔßcqÜѱW¯aÃ|}ËËïÜY°àc–ÓŸÙÿÿ&(Êbծݿÿ¡C!!«Wûù……͞ݾýîݵk_»öèQ³f_n$]\†_µjË–mm?å$õµèõ99çϯ\9kVppÍ£…P”ÇkÔhéÒ V®lÜ8:zÕª¦MwîLMý¶^77 1bß¾¾}çÎe0D,NJ ¿wïîÝÐÐ7®^ }õ*7÷K±XÿÔõõ-3-“Éç3¢VK¥*UÍ—V8ÎãYYq8(ªP˜rI„Häí=räºu7nÙ2lƒqþüðჯ\ùéGLŸûsó† Û¶5…d·háïon¾k×»wùù5Ù_£±¤äáùs×­ëÜùîݵkܲ¥}ûcÇÒÒt:ÍÁ¡W¯ß?vlüx£ñÔ©nÝž<)+3Û¶5+“«º­m¿~›7oÜX¯ÞܹíÛ÷ô)‚4h0thË–tzXØ¢E×®åæ~¸W(Êb995ibc#‘ÄÄÄÇÜÊ`(+{þüÞ½‚KËÎëÔáó1ìý{­Öܼk×˗߿߱Ãß?=ýÁƒãÇwíš8qáÂØXŸ3gBC{õÒj32rrÄb° Õë³³/]Ú¹óøq•ª°ÐäîQMe¥L¦Ó‘$‹U³T_¾j‹‹££<ÈÈÀñ‘#}}­­éôóçKKU*!I'§áÃ7lس§kW¯°ðöí6m–/?p`âÄþý…ÂÄÄüü9sÖ­³·¿w/7<ÿ:tþü;Ú·¯îU¢ †½=A|ê¡ð‡×œ¹y›6Íëí¹tiƇ}¯4Âq qãqã~ÿýÀM›zöôðò[*Í˳·÷õmÛ¶_?‡ÊJ¹Ühd2--]\êÕ ðñ±µ‹CCwî3fôè={ÂÃËʾ_ ¥¥mÝ:cÆÉ“½zÝ¿ïïÏf›"Lœ@BQ E‹ñ㇠!É[· ý|ÞÀšnÿetº¼¼ãÇìÜùøqËÛ{Û¶„„ |}W¬èׯuë“'?ùošuëÖíÙA–,ñ÷ :>3óï÷Ï×÷·ß&LptŒŠš7¯M›iÓŽ)(0ÇïÝ‹=<Þ½[³f„¦M7oþýw0 PT«}ð`áÂ9sþøC °²0àÊ{÷–,Y²dï^€ÏïÝûömGG‘ ¤/NÊ2Yrò•+ž8ñä AÐ鞞ӧ׫÷Ûor÷îÁƒû÷§¦*••r¹›ÛàÁ––¯Zµ|ùùóyy\nß¾÷ïGGŸ<Éç_»6qbPСCéé|~«VëÖmÝêí}ÿ~J ¸í<«Š’¤HäääêZ§ƒ¢ŽŽ<†a‚ØÚzxÔ©ƒ em-$ŠþJ ÃÌÌš6]¶lݺ€€ŒŒmÛ‚‚"#e2ŠªUËÔ£ee·o/XðÇmÚ4o>gNeå®]'O†‡4¢Ó]] Z½úêÕC‡úôa2=Ú¿Ô¨e˾zõí[ÓMæ[γXüðá¢E3g>|X³KiiTÔ™3sæ,[Ö»wRÒòå]»Ö­»paTTu¯w53óó›9sâD ‹‹GŒ>|×.ÓÓÅÏOè:L˜Ð¤ Ž¿zµdÉ‹U–™êh4©©/Ξ=jÔÅ‹ßrôtº·÷Úµñx¯_§§:%®V›‘ñàALŒ^øp»vµk3™ÏžEG«TwîÄÄä–-íÛתE§?{–”\Wìì7öð@„„ >n×Aàž›ûúõ³gàõÒ¥ÇI2¦×ÿ}2EQ.××÷·ßæÌ©S')iÇŽY³Þ¾ý«ÿÿÏîÿ’´µíÜyΜóçO1‚N?vlòäÖ­/ ­¨ðð¨]ûëǾZ]^ž——šš’¢ÑßyOÐë‹‹ËË5ššÞVQ”é[wúô Nœ˜;—É<{¶{÷aÃΞ59QÔƒ!"bæÌλu c³6lÕªU«Î;wnÓ¦sçéÓ·n9sýz/+‹‹»ÿܹ³g¯];{öâ۰7oŠ‹?t—ý箯šöno_§ŽP¨Ódg:³éçF‘¥eíÚææUR’•U^®Óa˜@ФɰaÓ§7løîÝ‚-[®\yèPL̇9Á¾wtìÑcð`oïÒÒ§O¯]“ÉüüÆŽíÞÝÆæÔ©ýû?Ÿ£ïï¨ÕÉɇoÚtçδi6LŸ>p ^¯Ó 4~üøñÍ›k4çÏOžŒwÅqsó6mFjÚ”ÅJMݱãGç@35©T£11Œ ÀBÇÍÍÛµ[´èÚµ={Z¶d³ËÊBCoÝzý:/¢5jÛ–Ã)+{ñ"""))?¿¸¸¬ \õ*U\ÜÚµ£Fµlù±$ 7nDG˜¤áã#[ ðõ1¢U+}útèÐððê-Õ| ZZ¶l¹fÍÅ‹»wϘQ»vvöÕ«»v-[6o^ppHHxxr²Xüq—le±ÜÜzôسçþý-[.^Ü¿?-ÍËkÀ€O/ì¿‚‰ê×ws‹ÏŸ_½úúõÌ̛à $E˜;·E‹ââúõûR gM·ÿù”—Ÿ=»ví“F‚ 4š­­OýúlvQÑÍ›QQ¦Ø90ÿ—–FE½|™ŸÏátèи±–’‚ BQ©©/_¹Ý J¥× ùùïÞh4Âb)•z=Ea†Aô(J«Õëíìúô8ÐÕuëÖÙ³Ãó³•ʉäå˰°²²~ýîÝ›??!aÏ™¬sç͛ׯôhäȨ(Sžž£GOøôéë×Ó¦mÙ2|8†­Y³{÷çý[ †òòÐЭ[׬™3¸ØYYuíÚ¼9‚œ8±páìÙÀÅnùòŽ›5û7]ì>¼ÀD¢Î7nüãaÔʓ'Û¶=| ퟺjµÙÙ.Lž¼xqPЋ{÷nÞ¿eË%KBBŽi×.!aöì®]GŽ{6mš¯oPEéõ_ã ƒ¢<^`à”)«Vµn­R]ºÔ½{hèω#a2=< êÛ×Ö¶ àúõdz²>·$U*ãã¯^½x1*ªY3&¸ä¨T ETÔ–-kÖüñ‡SU‘„$í탂úö57]·îÝ»¯Ï»ø!F£N§V\.Y²aèQÃùó]»?ÿ—ú¿¦ÐhVV:ýþûîÝ'OΞmo>wnß¾cÆìߟ˜®:½&í !!{öÌŸòïÌBa“&K–\¹räÈ‚þþ ‚ÈåîîÞÞµj±XWT|ÏNQF£BQXøúuHȹsàuÝ:¥Ñ,-½½[µ0`ðà>}† ™?ïÞiÓ6nLN^²¤aÞ=·oOMý1y•¾þúÒj33÷ïïÓ§W¯3g**þZgæï°Ùµkկ㩩›6¥¦Ö|9ÊGøùñùwîde)`©2o^Æß;P”ÇkÜxîÜyój×~ÿ~ëÖnÝ/..þý÷—/×®<90ðÌ™¥KŸ<©™«!E)•™™OŸæç‹DãÇ[[·o‡†nÞÜ®ÝèÑ!!ÑÑ¥¥F£¥åàÁ›7_¾¼aCJJ·n^^ùù\.—K’¢ÑˆÅ…………ÅÅÀYÇqœF#Ñé4š¿'!IGÇvíE¢ÌÌ‹cc?]OŒ$…ÂZµÌÌ(J,.)‘ÉÀ,HQjuIIAÁ_åŒZ•uãÆƒÓ¦õí`eµgOvv^E mÛ._¾dIÿþlvyyY™VËd:;·hÑ­[ïÞ üñGÇŽW¯fgÿȬ_&+™£#Eåä¼yST¤Õ"“Ù¸q¿~Í›ã8³\.†ÔÛJu (xE5šÊJà@M£98tî¦ÑlmÛ´ißÞÜl•¢(êc¿‚ýÛ]ð•*1ñúõ¸8§C‡À@;;ð<´±ÉÊ:{öæÍÜ\¥23óìÙ  ëÑãĉ… ›6åp¤¤$$dÇŽ#G²³uº¤¤ãÇOž|òäK>¬F£NGQ66“&…‡'$( Å›7·nõêÅáp¹½z8Q\¬P¤¥••…‡noOQÿný:ÝÅeðàCB6oöôŒˆ˜1cüø5k^½ú\=Ó4XRríÚ”)Çϛ—’ҥ˹s­^ݳ§Ý_§ c±¬¬„B—ɲ³ ŠÿòÅ0.·nÝ Ž ^¹ÒÕõåËeËV®|ñâ[b¢(“éêÚ½û¼y·n½xñÇ]ºdfîÚÕ»÷„ ·o¯ÚŠ2™µk¾iSHȦM ¼}»råÂ…‡§¥}ÿÒÃx<ÿ Μ9|80ðùóE‹¶nˆÉ¾Œ¢(nk0cÆñã·nEDlØ`gwùòðá#F,[öý¿ðmýaA»v[¶œ;>‹¶k·nݽ{yy·nÍž=p`Ïž‡±Xóçß¹¼lYóæöïWF£J•“—˜ø#êüÌë ̸½{ïܹ{w»vrùÉ“7gdÔ¬e  ;uZ¶lúô† óò._>p &æóFjrìõëOºgϹs#GJ¥›7¹m›)zI­NIÙ¹sôèmÛ ‡ Û»÷Ì™)SêÔùXˆ¿Âd6l8gNXXjjHÈï¿[XDF9òäIi©\.—+2™L^år¥,ßFN¥u«LŸ*2p¡1Í Å›7—.½}Ëfwí:hPÓ¦Øåó›7?~Ò$g甔ÇϞÍÈø¸€ÄqkëîÝçÌ™=ÛÕõýûƒ/^ÌÎþÇP…âíÛ—/ †úõûôiØÃA£Q"‰‰9~|Û¶ß~›4iöì‘#GŽœ;wÖ¬U«ÎœyüøGJ#e2‚‚V¬8zôÁƒåËíìîߟ={É’K—ªf;ŠÒjU*“Ã)A°X<ž™ŸÏã±ÙQõ—ËãÑh2YDÄÆË—ÿñÇ‹‰T¶uë´ië׿zUYYV¹ví¤Ióæ-[fnÞ¦ŸŸ™Ù§âùŒÆŠŠØØk×H²U«3ºusqùÞèHpîî“'ïÛwòäðárùÖ­íÛûû l¶››Íãy{7h0yrtt£Fk×nÝ:eЇøM:ÝÕµeKww-77..3óË× faQ§N›6½zuïÞ§OûöŽW9­¶´41ñçH#ðð¤M›¹s{ôP(NœØ¹3&æóÖ®šnÿë ÕÄǧ¦ªÕÖÖMšÔ«ÇãUÝ#0L ðôlÔÈÖV­ÎÈxýºú¤Ë¡qÿþµk¥¥99?ê´YYYZZXh[Cþ¹›´ƒÃ´i¯^%$=B0L hÕjíÚÛ·ÅâÊÊë×—/oÖŒÏÿÒHåpš7?w®¬,99$¤kW.÷Ÿ:Ÿy}+ÌÒ20pìØ5kž=+-MK+.¾{wüxoïš^aanÞ¶íªUW¯VV*aa[¶´jõå^ýº°²êØqõê+WÊËåò°°½{{ôøT^W77oßþ÷ßcc%’øøððÕ«[µ²µý{<®éNýî]dä´i Ô­[·n­Zææ–”øpÔXZ|é’D’½vm@À×Tc³4X½:..99;ûÂ…qãºwïÞ}ܸ ²³SS“’¶lñ÷çñþþ{$)úù»eK|¼Löî]hèìÙuêÔ¤R†YZúðabbvöÞ½¾¾_Nä_ó™ƒÁàrÍÍœêÕóñéÐaÀ€#–/ß·ïøñ¸¸ÒÒ´4…"'çÌ™µk»w··ÿ¸k.IÖ®½páƒ2YFÆ®]‹O›6zô¢E'OFF*¦w† <¸iS¡$‚æÍÌÌ|ûöæÍþý-,x¼V­vìÈËËÎÞ´©Y36›Áð÷ߺ5,ìíÛ/­RP”ÏoÑbÙ²w´ÄÄ£Gôöæó¿'‹$“°{÷Ë—••õëgkû÷¶˜Ì 6oNL|öl÷î€G$jÑbΜÈÈÊÊwïîÝ?ÞÁásB$‡ßµ+9Y¡HKS(ª¿FEëêú#dÞ—®o7·3nÞ,,|ôhÐ ‡/­îjºý·’4dd$'~ÕÍfnØ›+‘\¸0`€¹ùçæ7åñZ·Þ»÷ùs…"7÷ȑŋ hݺS§f̸v-77--#cïÞ¦Mù| +äääüüC‡üýÙla³Û´9}úíÛòò«W[·ær[éŽ/^ˆÅA»/Þ–Øl;;?¿–-½½=<š5kÖ¬G¶mù|G ˜1cÑ"#!A¥rwoÚ´ÿ¶móòΟŸ0¡_¿©SÏS(úöíÝEõz­V¯‹Ÿ=Û´iذ;.^|øðöíÇåò.]ÆÛ¼9:Ú¤kétŸ©SOºzµo߯;V}Oi4;; A>põG#—GG80jTûö{÷FE=^Xøñgl(J Ž›ÒÑþõè@E‰Ý» èÚ5%eÊ”  •êöÔ길uë&Ož;×ÙùÀÍ›Ÿ={ýzÖ¬ØØ'Ož_ 07·´´´´µµ²ÒéBBfÌøí·={’“¿ü|$íìzöüí·±c»vmØÐÝÝË«Q£† ½½˜LŠ**Š=wnë։ǎݻ7445õËö2:½NQ£Þ¿ðà€€ºu]]AÊK­¶ à͛۷/^üãnݾr%,,3óÛ]³¢uëI“FîÙÓÛ»V-w÷:uêÕóõmÔÈÁÇ3Š‹_¼¸x18xÈ_ßãÇoÞLJª¹=ßɓ—-3¦[·-š4iÖ¬^=‚HL¼~=8xÁ‚ÀÀ©S¯^ML¬IËtº»ûСû÷ïß?lXÓ¦u뺺:8€…›\ž“óìÙ­[7o.Xбㄠ/FFÖôYêÏèŠ2 £ÇŒê~g0h4 ¥¿ÿ:3d²¬¬¬¬¿Âå]»qáB‹Ce¥L¦Ñ ¨@`nnfVRrâDZÚ¿ïˆJ£Õ©3yòýû÷î+—Ÿ:µ~}»vÝ»Ÿ;÷âÅçméF£X¾lÙ°a}úä¹s×®]¹²eKbbÆ'^¸ð=aÛßÃ?q}¡(‡ãæÖ£ÇÈ‘=z´k×¼yÓ¦;vîìããà`4¦§_¹²nݨQýûïÚõìÙ§3C~¬MŸ•+ïÞ ž3§^½ÌÌ}û4hÑ¢ððï±C’¤µu³f®X±uë¢EÇ;:¾y³n]PPŸ>6þû0={Þ¾ýüù™3­[¸ W«‹‹ÓÓcb"###Ožœ2eÛ¶3gnÜxûökò½bƒ!9889ÙÛS”…Ž ¦wœœ˜L œ]·®}ûÞ½åò£GZ»62² `îÜÄħOcbòò¤R½”!¯¨¸vmæÌyóîß/*út«*ÕÛ·œ<¾n]XØ>>ÁÁwî¼y“šZ\,—VVíÚõêåèÈçWTlÜxófjªŸ‡óòåºucÇvôhnî§Yi4GÇæÌéÒÅÞþÃOäò;w¶m ùX„ì…Åòôœ0aòdkëGfϾ{÷K¡5ÝþûîbryRRxøÓ§z}AÁ§ëF ••ÉÉaaÉd_šß(J* Ÿ;wذ1cd²Å‹gÏ^µjÆñã)ª´4.îôéÙ³;w^µêÅ ‰Ähd³‹‹££Ÿ>}ü¸¨\÷CEÅÛ·¡¡t:˜© ±81ñÅ‹G”ÊÒRX{<<¼¼5úQÝ’’ðúu½z>>Mšxzz{ûú~ýw þ‰›œƒÃ´i‘‘wî ¸o_ÇŽíÚ›B°A¬ø›Éôõ??$dß>ŸüügÏ"#Þ>}ð 4ôíÛÂBsó¾}>|8002rùòóçmm7mÚ¾}Ä;;:ÝÜÜ‚$<6¬U«¾}¯^-/7 ÂÒ2(hÍšåË[´ ]¶léÒû÷åòúõׯøðÙ³ž=Ÿ=[¼xóæ7o¾%œÅòó›;wÑ¢ví®_ïÕ믅bMÁ”( ,HÇ_¸;yòþþÇŽý8¿{¡Ñ<=,8uêÊ•ñã­­ Eù|''ãþý)SÜÝûô¹ÿk˵þ73«[700(¨cÇÆ5ª[×ÞÞÆF(äp ‚>¦jµ\.‘H$ee%%¥¥¹¹iiW®Ü»÷a®“Oÿ†¥e×®+WΛ׽;ƒQT”œüþý»wÑÑ‘‘¯^½|™œ\Qñu…a«·(ùø л·››V›““žžðæMbbjjqñ— ×ìwL{Þ£›]Zš‘‘šššúömLÌë×ÏŸ¿~ý©œ=5mµk9eJ³fûw11Ož<}Ÿ“#—ë‘ู¹¿ÿ¨QC‡zzêõ¹¹iiïÞ½}›ðömzºX\ÓÞþ§úE¹Ü€€+ŽÛ¿¿Q£wï._ŽŽ&ˆfÍz÷vrzôhäÈqãþøãÃÊ1? c³mm]]íì„B€Ã¡Ó Â`ɲ³ß¼IHHO—Hþ½ÒÂU{ÉbY[››STqqIÉ·ˆ‚ }|¸Ü””ˆˆììO?`±¼½×¬¹reÉkõêQ£fÏŽˆøQyãþ¹ë‹ÏoÖlûöóç'O¶´LM‰yòäÁƒG®_¿?>¾æªÆjÆýû·nM£=~|çΫW¥¥ß;ë3™uë.YòðááÃ;¿}»wïœ9K–œ;÷êÕ§„ѧgô FZ³fùò ¼½ÃÃûöíÐaçÎøxÜ©ïÞ<øàÁöíAn4&³Y³U«BCoßþ[|.äòðð‰ûö;öÑ£š»„µµŸ_§NõëkµoÞDD€*9ß:?ÑéõëÏ™óüùÕ«µk¯]Û¬Ù¤I—/_: ãpjÕrssrb±ôz…B*‹KKKJ*+åò¿§¡øÀ‚òúõôéEEÇŽ<ùþ}õ>Ãq+«ÀÀñã¬[Aâッ‡ïÓgíÚ[· ôz&ÓßåÊ„„°°¡Cy¼òr±˜ D"¹r%(¨uë±cÃÿv­C’ff^^­[·iÓ¦MãÆnnöö"›M:\^Ròþý£G‡:õúõ׌–ÃètO ßNÒ±€IDAT y<:A”ÊÊÊ’’Š P‚ò?4 l¶………‹¥×K$••ŸO¿ZpœÅ E"Ãd²ââ²2•êGŽŸš¶ã,–H$ñù"“•””—ÿØýù¿Žs8\®^_YY\\Y©Ñ|.JÍ·ÿ¹ãáçŒÍÍ­oß5k.lÖÌ¢ªvŠF“–vùòÒ¥ë×GD”•Á´3ò¿´ ýp8œfÍ‚ƒóòbbΜi×îÇ~ûóÄal¶§gÏž½{7k¦Ó%$„……†FF†††…ÅĤ¤ˆÅŸºY“¤³sÿþ³f­\¹ví¨QþþÕ+›¶prš1ãÙ³ä䊊ÂÂW¯ÒÒ’“Ÿ>MKËÍMH¨¬LJ:rdáÂ-ªj`3™ÞÞü‘˜ÿðáС_*¹û¼Ä0KË!C<<^—.G–•}|ÿSSwìhÔ¨ª<"AX[·o?cÆÅ‹oßÆÇ—–ææFF¦¦fgÇÇ<~E¿¾:ò73ss«[×ÇÇÇÇË ¼úùuê4cFXXeeZÚ»w›77nü±Jí ¸c³f«Ved˜|§Owëö½ b‚pr6,,¬²òíÛ»wçÍ tv ù|++wwŸ¦M™Ìª½AQ¡°oßsçär™ìâÅ©S›77…§g½zööL¦é¼ƒÚð·oß»wõêŠ=z4nììleåæÖ±ãüùQQ EZÚË—3fÔªUUÀ°fýSÓö ÂÞ~üø°°ä䊊ÐЩS›5³²¢ÑHÒ̬AƒéÓoß~ûV,~üxÈGÇo­ N’Î΃­[÷òeYYZZnnxøñãQQ••iiQQ3f8:þµvú¯50Ìܼ_¿ë×d²¨¨yóÚµ«UK °¶nÜxüø{÷ÊÊ’“Ÿ<™8ÑÞÞÔ;5ß¾fç Ei4 zõª÷O£FM›Î˜ñðáû÷¥¥W¯vîlaaq?{|~¬ÏllFŒ¸r¥¬ìÕ«Ñ£ è‰@ ÿk@ô£ùµÒ—©HÉÉë×{z2UŸ‘¤›Û„ 11rùóçÛ·7nÌdBTsètgç‰ïÞ// ›0ÁÓ“Éüø–$éà0iRXXBBaa||LŒB!—¿@"W×3BB$’„„9s¼¼¾d=Á0kë¡C/_–ËKJvïnÛöKcÇ9>ŸNÿp$อí¸qii¥¥gÏ6oþéV¾Ô?5kŸÃ ÿŸ–Lfݺ³fíÝ»uë±cÇŽmÝzìØ¾}S§6k&Ô¤ ¹NW^ž“S^n4²Ùæælö_‚N·µíÔiîÜM›®_ôèÒ¥»wƒƒçÌéÕËÙù¯‹p’´°hÑbêÔ•+/\¸wïòåðð{÷ؾ}êÔÆ--«/8h4‡ׯ_¹rÚ4??W×   þøãÆÏ·ÿ-ç A8œ€€Ã‡SRÞ¿¯¨HIÙ¼¹eË+pQ”ÃiÚtÙ²ýû7mòô Ÿ4iÈ#GÞ½ûXAbåó›7Ÿ>}áºu_¿^½zÇŽwï~LÑQ6»^½œœÔê7o^¾ÌÊÒh0Œ$i4ÿøX@Q’d±HAt:µú襯 ¹\"ùk, Š¢(Žc‚:ÝÇ]@¿®jÖ¾NW^ž–VR‚ VVîî"Q•cŽ ŽŽVV$YZš‘ñaqÚ —‡†Î˜1mÚ²e×®ed(__,óß(Êdš›ÛذXMaaa¡RY½çJJRS+*ÂÆÆÍÍ‚$k¾ý÷Q«V¿~cÆ4mZYyóæþý¯^ÉåÿÆø„@ È…ÿ˜@¢(ÍÞ¾uë#öõµ°`2íí»v>¼oß!CÆ rsc0Øì  4¨K{{‚ (¡ÓëÕ›;78øþý?þ T©Â®\9yòþ}©´E‹ƒƒÏœ9²Ê¥€¢ F³fë×ïÙ3{¶£cnîÓ§‘‘%%NN£G¯Zu÷î±cÝºÙØ|j™þ30ÕêââììÜÜü|ŠòòêßĈöíÝÝY¬šH5:ÝÖ¶^=[[—HrsÅâê 4÷òZ°àС;Z·–H®_ö¬¤¤aÃI“Nž<~¼''S1™¾¾Ë–9s÷îêÕ•—?xpùrpðƒMš¬^}æÌýûË–Õ¯oŠ ¡0 `àÀ¡C—/?uêìÙíÛ[´‹?þtûßr¾L‡#ÒhtºPÈféÙMÀq+«ž=׬9~Ö,3³+WfÎ\·îúõ‚‚‡¨“¤“Ó¨Qk×víªP9òÇW®äçÿ˜`v’ ÝÜlmi4±·1âÆ¬¬”±¸²29¹¬,6vëÖ‘#?ŒÉAQ’d2 E ÂÆ¦[·Å‹×®=vìèÑÕ«—,0 ví¯‹Á`³ÝÜZµrqAÌÌ/rr>¬Å^Óþùúö5š´´£G7lxöÌÚzîÜuëæÎmÝÚÑÑÙ¹eËqãöí[µÊÁáÁƒ5kÎKNÖhþɹèWƒN§×#ŽÓé$Y]"£(ŽÓh†al6ŸÏbùª¦Ûëx¨‚Fsr8pìØÚµóóÏŸ¿x1!A©üp®ý'Æ'@þKüÇ’V›—`0˜›;;[Zr¹æævv E||F†^oeåà`nnaáêjii0ääÄÆi4,V½z“'Ož\»vjêÊ•S¦Lš´aÃéÓ‡ÿñÇ’%£FíÜYZÚ´éøñmÛ~¸äFQ¡Ñ226oîÑcذµkW­Z´hÖ¬®]ÇúÃ:t9²S'këN"i4™™gÏnܸmÛ† ÇŽÅÇK¥_zΊ¢ †¥¥££««««³³—W‹}ú¬^}àÀøñÎÎ^½š’òá’’N×é._sæðáÍ›—.0`þü7o\\&L˜0¡iS.÷Ã=b±(êÊ•/µÿmçË4>²²Îž]µjÇŽ5kV­ºv-=]«ýQg€N¯]»W¯Ö­E"  ~ò¤´4.nÓ¦>ŒAQ¡°]»Y³æÎuqyñbåÊ;ß¿W*¿Þ.ñypœÅ²´äp„Ãñö67 ›0¡S§ºu}}'M:rE{ôرc÷înÝlmM£EI’Á áp|};uª[— ´Z 0páÂcÇ.]:q¢_?KËÏe 37oÕjèÐöíÙìÄÄ3gîÝ+*ú«õãëû§¦í yyçÎÍŸ?nÜÍ›ŽŽK–ܾšpçμy^^þþû¬Y—/ÿ}~6¿Æx (µº¨(%¥¼œFsw÷ó³±1YØ0ŒÏ÷òjÜØÆAPÀȨéöß>ªúÉãgÏaÃÜÜ .\8w.=ý¯Ò域ù/ñŸ³ )YYII••<ž““µu­ZffeeÑÑ%%Ž››••»;Ÿ/‘$$df*•ffV»¶¹¹B‘””‘a4ŠDÖÖ––ÖÖÖÖ|¾Z’RTDQöö^^vvºyQÔ›7§O?}ZXhzÒk4–•EDܹóþ=E98øû;:~*OÕ¯¹ù A»v½zõöíƒ/_Þ¹³lYP\~áÂĉ=züñGT”Bñáö99W®Ü¸ñî]Õû:]YY~¾D‚a\.ðú§Ñlm}|ê×g³‹Šž=‹Š*/¯zn0”–FE½|™ŸÏáÔ©Ó¸±Ý‡œ¯iÇ¿õ|!Ðׯïܹk×úõ;wÞ»—•õã’RùìÙøñ‹Dææ º¸Ì™sá—Û§ÏÎkÖ˜âHèt7· Ö®íØ±¢b߾͛oÜ(*ú‘‰Q” h4‚@©ôêÕÍ›·n½?==''))4tëÖ͛߼!_ßêÕ3Ùðôúìì'&OhÔ¨E‹€€¾},˜8±ÿaæM{ñ‚NïØqÒ¤->}F§»ºŽ»lY›6ûv9“™ù÷åç×öOÍÛg2ë×ÿí·nÕêÍ›eËú÷ïׯcÇ1cÎÈ Ú¹óÎU«||þž®äçò«Œ¥2)éôé+WJJÜÜæÍÛ¼ù?¦O0`Ê” vîܶ­ysG­V¥Òj$«éöß:LÛzx н»“SnnHÈ•+ii¿"ÿ™ñ @ ÿÿ¹€zµ:77!!/Ã,-=<ÜÝéô¼¼„„˜˜ÒRÏÝÝÑÑÞÞɉÅ*.ŽÍËÓh0ŒÅâóY,åpzõ:sæÑ£ôôôôÈH𻿟I¢(ö¡»‰Ñ¨ÕVV––V÷ÑÞïåå2E1ƒñ+'4 ¨¼¼;{ö‰Øl776›ÃiØÐË«sçåËOJLüûlƒ¡¼<=½¢âÃH£Ñh¤(ðLEÇÙl€ÍF•ª¢â¯5G ¥R"Q©„Å ÙìêO}¿®ýo=_ÿF£N§ÕªÕ*•\^\ïÞþýW®””p¹5nìà@§#—8uêŒYY·nÅÇ þþ-Z4nèåefF(*xzúùyy‰Dßb¤(ƒA«Õë)ª´4-­zäÑ(—*• †H$1 ‡(J­..NOON.-U«Á™7**bc## PÔÎÎÃÃÊêcrŸ œ‡_µjÞ<'§¨¨ß_¼84ôSc¾¦jÚ>†YX´i³ví¼y¶¶—.5{ö–-!!qqçÏoÚ4pàĉáá¶¶“'ÏôO'ù5Æ‚(•/^,Y2lØèÑûöxy 2lXÏž¯^mÝzõjE…Ñ(•K¥&ÑPÓí¿u< ^«V¯^½{ÛÛ†„Ü»—šú1Ç·j|B ä¿Ã.ûŽÑ(•fe%&J¥————££Ñ˜™yùrf¦N§ÓÙÛ7lèåÅfK$©©iiR©Ñh4â¸TªTR”LváBPP³f£G?yò¡ü‡€°~ #I`Õ@Q1bÅ0K `³QT£ÉÎþ|IÅÿ‹}«×¹ò¹mÔj¹\¥B:Çûk&) £Ó9:A4©T­þ°¾®}•ªfçëßì/• ÈAƒÃa00 EI’Ãa±´ZÆÁaâăš8AEétS>Á¥KOŸÞ³ÇÏoÔ¨N ¸yS,®‰»•Á “J¥F#mÿ{ AP”^¯Ó Ÿo—¢( œ!àRõWÁI§»»zðà† žž/^ÌŸtâDVÖ×?›ÿ{ÿÔ¼}ÍÞ¾aÃÚµi´¼¼Ó§SRª§?0Åâ7ož?ÏÎ&ˆ±c5²µ%É Š‹ÿÙX¤{<€3©Tfd\¸°xñäÉ.˜Þåó»u»~}ìX¥2==#£¬¬ªgkºý·’ttlݺW/±8,ìÚµÔÔ%¯ø÷Æ'@þwù¦dV« bc‹ŠÿÆ-,d²ôô¢¢¼¼¤$‰ÄܼiS__‘¨¸8>>/O­Ï!“’bbJK¹\ÿ¶mkÕªžöú³]‹Õ¯ß§O£FBaU½33ÿêÔAÑÜÜè蜜çÀõ­¶  >>5U­¶¶nÒ¤^½ê…j1L ðôlÔÈÖV­ÎÈxýº  æyžý|!Èõ7wîÉ“Ç߸qòä¤I |*áò÷ƒ¢,–«kÆVVRQ‘›[Q¡ÓQTEÅÍ›&89™›{y™›W½:;÷ïÿô©^OQ/_ììܤIÿþ] £¨@°ví… 'Nܺuá‚-[þ=K¡NWVŸ˜¨RYY5lèìÌåš¶ kk//GG­¬,55?ÿóaê&Ô¯`cƒ EEiiÅÅU£E¹\Ÿ%KÎ[´ÈÝýÖ­ùóÇ;q"/¯&çócýSóö ¹¼¢B¡ KK//š¢ ÍÂÂÉI$Â0…¢´T.ÿ«ëŠòù-[®YsàÀÍ›—/¯ZÕ¿¿ƒÃÏŠü·ÆÃ§àrëÕëÙÓÇEãânßNIùÒC†Ïmÿ-ãÇ­¬Z¶ìܹNµ:.îêÕ„„šÉ£Ÿ=>!ò¿Ì°~ƒÁPY™˜˜šªÓ9;÷ï/ÅÆnØ K¥••"‘Ÿ_` V{áBzzEX.)•ïÞíÛ·wobâ˜1Ë—ïÝ»oŸD²yó™3oÞ(•ffõêùùùúêt×®-_~à@• ˆÑˆ (¸bÅ™37ÚÙ=›•eo?dÈï¿·oaÍ™sçNUtÒÏÃøü :tèÙÓÏÏÌŒÍvwwue³QÔ¢eËAƒ 0ÓÒbc¯]»u+)I*ý¹ûBQbñ«W;w^¸ ß¾½eËÆ "HppL ‚4h0yòæÍMšTV^¸0|ø³g`¹WS‰òmç €ã"‘Ÿ_PPóæíÚ!ˆJµcÇX3™~~+VìØñÛoLæ«W÷î½~]QÁåúúöí»xq—.4Ztôüù¡¡yyßûìEét[ÛfͺvmÖÌßA8œ³gAª/œ•ÊׯøP¡¸yséÒ]»æÍ#ÉK—JKk×?~áB7·üü'.¬ÊöçÎÙ³ÙìèèbbJJ˜L?¿ÁƒW¬hÞÜ`Ÿ<ùéÓâb0šQ”ËmÕjË–æÌ©S§¨èÒ¥7œœ† ™9Ø>D§ËÍ}ôèèÑK—ÒÒ ŠªYÿÔ´ýì삃ããgÏ^³æìÙ-[d²U«®\yûV¯wq8pùò!C,,Þ¼Ù´éÆì쿞&ÓÍmàÀáÃÛµkÛV"ÙµkÁ‚’’ï¿fµñ€a"QëÖ'ΘáãSQ‘”T\L£5h0dÈŒC† È;½{ß¹SZZÝm±&Û×|<€oñx~~½zÕ«‡ Ë–ÅÅ}:­ÌÏŸÿ½{$@þ“î4šŒŒÛ·ïÞ ³²¢Ñ=ÊÉÑj•Jíñã§OD& ÉήZ:kµIIÛ¶¤ÑÌŸ¿dɨQ‹<8}ºÁPY™˜xïÞ®]J¥iád0ˆÅoÞ<|xëVdäž=. èøñsçΛ׫—PXQqïÞÆ={þöÛ­[_ŸÀø{–™6m <ØÉ‰$D­~õ*227×Á¡K—ž=LI‘ÉBCCB’’¤R£Q©ÌÌŒˆxúôÙ³”¹üKn€ƒ\ž”þô©^_Pðah¶Á “¥§?}úèŠh4… %•†‡Ï;lؘ12Ùâųg¯ZµaÃøñUZwúôìÙ;¯Zõâ…DbŠ%¨Yû5=_‹XüæMhhT”™‚¼oÉ߇V[PðâEB‚V;kVÏžóæõécaÁd*99÷ï/_>zôÂ…dgþéµ^_VÿèÑÇ$YZúñ½¢(¦¸øÕ«G¢£u:IH¨ê“·“HÂÂÖ¬0`ñâåËׯ7nÁ‚Í›éôÊÊ·oOœ˜3§{÷+Þ¼©J…ö?>^£™5«{÷Ù³{õ27g0ŠÌÌk×.1báÂÓ§ ª–ó8ŽaÉû÷‘‘‘‘ †­móæ­[W/­RÅŽ{wêX€Ö¼jÖ¾V›ž¾kW¯^#FkÖ̘1räªUë×O™‚ bqRRXØÆ]».]zìXjê_í¹$icÓ°aãÆææ·qã•+ÍÛø¥+dz³ÿê(ú+ŽƒÁ``³½½ 8pèP —H’’îÜ™:µk×<¨¬¬þ­šn_Óñ€ B£ …ÖÖåå/^œ?íÚ«WŸ:Æb|B ä¿qÿþµk^^ý¨FSR^¿®WÏǧIOOoo_߯ÿnAAAAA<1_‚ ¦M‹Œ¼sgàÀ}û:vl×.8¸¸,ÅŒF½Þ`€ÆÈ÷ tëvôhzzp0>mZ½z#Fœ=ûOY}!¿†ã¢ ŒÍðá.ÄÆNž|ㆿ`à±c0óü/ñŒAú_¢t:• Ã5Ú½ûÉ“ÊJ‰$9Y"‹?Þ¶- àçÅÎ@ ÿHÒÂÂÑQ¯Ž>~|ïÞ;w~lrmÈÿ%X¬€€+Þ½‹““%‰$11)i÷îúõ1L¥Òé üï-H@ ò'Ђ@ @ @ ü H@ ò'P A @ ÈŸ@@ @ @ ü H@ ò'P A @ ÈŸ@@ @ @ ü H@ ò'P A @ ÈŸ@@ @ @ ü H@ ò'P A @ ÈŸ@@ @ @ ü H@ ò'P A @ ÈŸ¿ÚMœ8}úôé(Š¢IAètZ-Ei4JE’8Žã|>Žã8†¢$IQEQ( ¾ Š(*•â8EA„Á€ :Z-—ëõF#Š"ŽEi4Z­^Ïb±Ù4‚ 8®T*•J%ŸÏçóùZ­N§Vƒ¿mmííml’’Þ½KMU*år©T¯71ŒÉ¤ÑètN¯×hÃ0 ÃAÀoP†½3qE ì-Ø^­V(ÔjƒÅâp\]ÝÜh4§Ñrsóó MmR†£@Qǰýûwîܽ\@ ägðË $ CŠâp˜LŠR©Ôj±X&“ÉÄbN£1d²òr‰¤C{{kkÏÌL£ÑéŒFŠÂ0%EQ•J¯×éž<¡Ó5±X§Óëu:µZ¥ÊÎÎÉ),43ãóy<'I“²µµ²ªS'))119Y*•J Ÿ (ÊhT©ºwïÔ©cG.—Ëårïß¿~ýâE…B&“Ëi46›É¤ÑpÔJ¥R£Áq ÓpÇ5F£áp8&³´´´´¼œF£ÑètƒÁ`0ê×÷ôôôìØ±cÇöí7 ôñÉÍÍÊÊÍ]·nãÆíÛõzF«•Ëår™ŒÏçó…B‡Ï·´„C@ ùyür `4F#E F#‹Å`p8))™™^^ööµjkŒN‡¢… a8n4"‚ (E EQ••‰\Ž ¥Ó©T F$I£Ñh4šX,•ŠÅ¶¶¶¶¶¶*•J¥RI¥‰Jeggooc#‹Åb1“ÉbÑéffffÁիׯߺÿî]JŠPÈçóx<†De¥\®P F£Vk4 (J§³Xt:F!—Ëd:]ýúõëׯoeeaaeåèèääèØ«WïÞ]ºX[ÛØ8; z½J…aB§‹Å2™T ŽËår9œ¢¢¢¢¢"KK++ssð>²@ ÈÏã—HÀ $i4W«5Šª¬,/¯¨`±X, A4­–Nçrù|Õj)ÊhÔét:Š"' Ã0’DQ #§Ói47ËÊJJJKy<Ç#I:8æ!›Íá0™EE……¥¥z½^¯×SEt:ƒA’À½Ãáp8œyófÏž:µqãF||òóóó ß¿OLLKc±X,:ÝÃÃÃÃÃÃÅÅÁÁޞˉxA(Ê`ÂC&“J °H$‰DÀ•H#'åñø|‹Fc2‚Ž»téÓ§¼\,V(ÓÓãã23=züøÙ3WWOÏúõ½¼ê×oÜX$‰ÌÍ›5kÙ²E‹Zµ\\jÕ {úôÕ+&“Ãa2ApÜt¼fú È3¹\.W(lmíì,,är¹\©Ÿã8Ž£(²@ ÈÏã—He0 °«ØØØØØÚJ¥J¥D¢Ó!ˆ^O§°¤ØØøúúùyx :x0‹emmk«V«Tz½)aƒF£T–••–ŠÅÁ`à8“Éb±XÀºÄd2™L&ˆ>??¿°°  zš¡P(Øl‹ÏGQƒA§3 ©4>þíÛädÍŸètZmJJZZnnyyii~>‚ ˆZm0èõ EJ¥·wýúMšôêÕ£G×®t:AÐéRå*GQ(Š ~“ ÂÚÚÆÆÂB,‹¥R‹ÉäpŠ‹‹‹KJT*•J£C@ ùyü‚‰¢ ‡Ïg0T*…B©QC ʈ ôz% CQ¡ÑB­.+++‰êÖ­W ˜L’9ïEi4 ¸¸\‹ÍÎ{ 5ƒÁ Ó¹\ÍÎËËËËÏ·²²´47W©T*µZ¥R©”Jss¡P$¢ÑètÃhDQƒEqœÁ°´´² Õj•J§m²ÙL&‹Å`°ÙÀ:¬=$ b¤Ad2/¯ ÜÝ++++++Eu:ìO p4F#‡Ãd2™R©D¢Pñ¦Ñhµ*pó#I’„Nv@ ÈÏät±Ã0‚ÐjÕj†ÍæóY,½^§3LÂF§£(ÀÉÉÝ] pssw7 ¹\./(ÈËsphÒ$ ¤Ñ.-­¬¬¨ ÓÙlK(4773bÆÉÉÕÕÁN§Óét±¸²R&c³ÙláÄ`ðx<— ¶´´´´YãHR¯×j5¥( ó÷÷õmÐÀÎÎÚZ$¢Ñ@Ö=N«µ°àñ“õ AL¶,£Q¯7 :Ç£Ñèt‚(+++++î„…a&{IšdˆXb³Ë Z­V«ÕRÝò@ @~<¿¨‰Fc0˜LƒA¯×ëóòòòŠŠ˜¬Fåå!!·o§¤Ü¸që†1,pÎC­ˆ ­–É$I‚0ôzŠ)š6mÒ$ @­V©d2ƒ¢ŒF­V­ÖëÁßF#‚PŽc‚ØÛÛÚZ['8Pƒˆ¢PT¯wttp°³[»vÑ¢éÓwìX¿þ÷ß--ÍÍÙì´´ÜÜœŠ2Õ;®sd‚ †ÙÚ:8ØÚåå ^’ ƒÃa± ‹Á`2KK‹‹KJ‘ˆËÖ$£´ @ @~¿`šoPèEQ´¤¤´´¢ÂÂ$¹ÖëµZ‡NçrA W™ìÝ»„O„ J¥B¡×ËåR©J… ¥×ã¸Ñhaaeea¡Ñ¨Tjµ““£cíÚ®®..••b±BdƒÁbÑéææffjµR©Vs8\.Ÿoeeeei‰ (ª×c‚€ F#N’8n0h4:]­Z^^NN¶¶:^ŽÃ( TtÂqŠÎy… *•ƒƒ­­­mtt^Þë× ¥_à[l6›ÍfËå …JÅd²Ù,H ¡Ñ¨TZ-‹pÈB @ ?_΂„¢B’Z­Óq¹l6› ª!±Ù ƒA’F£ÑRaóxNN.. ŸÏåjµZ­V‹ @p$A…ff<ÈGQb0xx¸¹¹¹ …|¾PH’$IÖÖVVææååee‰L&+†a(Êd²Ù †•••••‚ ˆV $øÅârÙìòr™L.GN«mÑ¢eK??ssÇRˆ¢ŒF½AŒF’üÍ`€êJL&V^^^^^Ž¢8N’e0èt ÊÈÒÒÂB$QR8Žã8b•€ã²@ ÈÏãŒAB½¾*›‚”•UVVT(åå2‡C§³Ù¢× ææÞÞ^^Îν{÷íëàЮ]Û¶ Špoãó9>ßhÔhLö''`‡©UËÉÉÁ¡°°  ¸X§Óë5•$“Éd2™­­ “Éfs8 ‚E ‚$Ø),LK+*"­à KJŠ‹mmÙlKË7oî܉Ž./‹‹‹qœFãóF “PÇë 8"kkKK+«’’òòòrŠ) ½¸ä9888ØÙô |¾™ŸRŸcH;ñßÇ­¬5jÕjôè^½7vsc0 ÛáEét>ßÚÚÆÆÌŒÍ6%¡ÿ߃ ìì:v>|îÜY³zöôôäpàø@ ò!¿œ@2€Ì!‚¨¨¨¨H„B¡P(‰,-…BŠR©d2¡°^½ºuíìüýD­V«+*Þ¾MHprêÔ©}{µZ¡¨¬”Jår¹8°‰DB¡……¹¹HÄbq8L¦¹¹¹¹P(‹Å2™µµµµ…ÆdXžžµk»¹79E‚ùêBB޽q#'çÎÔÔÜÜ—/óò^¾¼ÿÍ›üü¨¨¢"§´AÎ[»öÌ™øøgÏ^¾4EÉfr¥ÓëÍÍ­­íìÊÊŠ‹‹‹QÔh4Çi4PFV :Fc2S_eeE…Dœ ÿÙ³Á`¸¹-_~ìØž=11ÇŽ Ö¨ƒñ³kÞ¼[·iÓFŽlÓÆË‹ÍþÕ¸L¦·÷$&ÆÇ?|8t¨¥%†ýœöÓÒ …Âô·lY:tú—ûÓʪ[·õëß¾­¨ˆ‰IOOK‹Š*)‰Œ7ÎÍí1g"I:;÷ï?kÖÊ•k׎åïÏãaÿÚH£ÙÙ5iÒ³g×®õë‹Dÿ»¢@ ÿkü’ILv >ŸÏçpÇ B*-+«¬äpX,.W&+..)ÉÏõêÅ‹´´»wïÝc2-,ÌÍI’ÃáñØlƒÍ&ÅqF£Q*mlllììX,&“ÅÂq‹"’´°°° AqX Ãq’äóù|>ßÉ©V-GG ‹‹‹Š=ÚµëæM KMU*ÝÜœœËË¥R±ØÚZ*e³5™L¡ÉÃëÔárííß¾=}úիׯ¯]‹ŽF #IŠ2‡¥Ó³³SRRRp\¥Ò뢢¢£ÁÑ!‚„HdfÆçƒ”r¹L¦Tr8<—k4G¿ÍÚº^=oo‚(--.f0\]›6µ¶&þÕ¸5ƒ!??22$dß¾S§ÂÃß¿W*u·C0Žèt¬þÇ·¯V'&®[סCëÖ^^>>cÆìÛ—› Rà›$ù§Áqkëž=-êÛW(¼tiÒ$gg>¿n];»^½®\ÉËû_ŒxÓé²²®\Ù½{õêå˃ƒcb¤Ò+3$Šr¹³gŸ /_AŠÒj++óòòò*+ét&³²R«ýZÑH£‰Dîî––••uüøû÷åå ©~aaEÅÿfoéõyywî;¶aÃ;pì@ ù¿œ@Â0üOP”Ng0Hdqãó™L$Í%ci4.W 0µZ¦¼<1ñý{:Ãáp@DEiµz=ŠÒhaiif&!¨#„¢Fc‹-Z4köâEttL ø]ƒÉ$ÉÀÀ¦M}}A¸Ü²²ÂÂôô† mm=<˜L‡ÅŠŒLL|ó¦eËzõ||rrJJ ÊËår…‚Ãa0X¬ÂÂŠŠ’‚@Q‚°µut´° ¨¢¢ÒÒ Ö®=ÞhT*5š† ;tðòª¨ (ƒA"1u:WWww6›ÇãrA´ZP²–Ëåóy<ÑÇIÇ5ÎÅôóAQ&³nÝÆÍÍKJ^¿NI‰Žæóåò±c›4qpàpî߯¨J)ŠN¯W¯OŸÞ½[µ*(ˆ‰),lذS§.]˜Ì„„­[OœÈÈhØpÈž=;u KK¯\9tèÒ¥[· õzÁ0ÇÛ»cÇ.]† kÖÌÉÉÊ ÇåòÄÄgÏîÝÛ»÷îÝŒ ‰¤º£ÑìíGŒ?¾}ûÚµA$–NWTtéÒñã÷îÅÆÊåÿ7ÒWÐé¶¶:Í;wî¤I]º¸¸ÐéÏŸïß¿lÙîÝ×®efj4‚ 8nnÞ´iïÞ& Ø¢E“&žž"IªTyyqqìÞ½fMpð³geeß2P”Étv lܸN wwÇùü:u:wîÒE,Öé¤ÒÔÔˆˆÈÈÜ\…¢æ=ûóöŸÅjÔhöì ºuKK ÉÉiß~Ò¤¹Ü°°… /~ýºiÓåËçÎí×ÏÆ&+ëèÑ9sÖ®=s&-M«E&³nÝY³¶l?ÞÛ”sV«ÓÓ^´hïÞˆ±¸ê(i4‡W®7ÎÂâòå“'32Úµ›4iÒ¤Ži´¿Ÿ/ÃÝ}âÄuëÖë÷ïß°áÈ‘”à ‹ãÖÖ]ºÌœ¹dIãÆ±±kÖ¬Yóøqq1‚ÞÞ­Z5jT§ŽPH †^бcÛ¶<žZ ÃßûÇÍÌÆŒ™6mÆŒ¾}6´·ÇñòòØØË—÷ï_¹òСׯ+*¾uv¨ùùBQÇÝ}àÀ%KfÍ5* @(”J£¢®\Ù¸ñȉ¤G)S\]CB~ÿ}ÿþ—/¥RŠöú-&L˜6múô=¼¼¬¬¤¬,6öÆ#GÖ­;pàÕ«’’¿[,9œ€€Ã‡_¿>z´O éÕ«Q£¹sŸ<‘Ëá­@ ?“_ÎÅÎÜ\(´°°¶¶µµ´¤Ñ‚$ÍÌD"‘H£1KEg³ §Ó E ½žÃqtttU‡èt (J­Öjy<lj,,€@Â0£Ñh4A<ˆDÒëõz½ÞÚÚÚÚÒÒÍÍÕÕÃA(J¡`±H’NÇqEQƒ$‹A$$df¦¦êõƒÁ Rj5—Ëd2À9ÐÒÒÌÌÒR­Öh”J olm)ŠÇóö¶¶vq‹Õj•êùóÓ§_¿V©år‡Ïg±d2‰D,IX,‡Çsttt´·GQÅ0F©4ÌÌø| ¢þ èt›–-œtºøøää²²¬¬øøÜ\£ÑÅ¥~}Û‚¢agçç×¬ÙØ±S§ŽÝ«A”–R”¯o¿~û÷¯Y3jT‹juABáîޢŜ9ýû;91™B’®®}ûΘqøð¸qµk«Õññ/_Þ¸ñúµRéë;fÌŒüѾý_c2(J«-//))//.FGÇNÚµóö®U‹Nÿ¿dã^^ :´cGëÖIXØõëÏž•”4l8iÒÉ“Ç÷ïïädr^¤ÓëÖíß¿[·ÿÇÞY‡E•ýÿÆô 3CwwHˆ`*&*v'v­íª˜«Ø`¬Ø‚(ÒÒÝ!=ÀÌ03LÏýýq¿ü°W\qÝÏÞ×ó, çžxŸó>ïrt„᪪èèË—½x1!A.9rëÖ°°#G `0¾ïÉq8UÕAƒ7o>thïÞyó<>|~I ŸïìpðàÆT*ú^…B$jjª®~÷®®Aìì&Mš9sØ0ss åã$NE¥_?ÿ€€;®_¿uëØ1çåË/§©9dH@€ŸßÀÚÚï÷1>>3gúùY[3èŒ&‘Œ§Nݾ}Ë–;gÎ462ÙÙyùò½{·m;tèsýO$ÚØ¬[uèЀBa\Üýû!!QQí턆޼9k–žÞ÷»¾vo¼@Áðôz´²R*€»wSSéô>}âã,ðôÔÓ ©ªê~äXwÆ«½BéÓgÙ²ñãéôÔÔ•+Ç›>ýÒ¥º:™ ‚®]KJºv-66,L_¿ëSètgçÕ«.40HK[¿~ÈåË/]ª¯—ˆ##9 ‹üü={.ìßÿС+bbx¼®÷J$UU·níÞœ %%åå?;M Æ“_NA e²ŽŽ^½zõ²µMLLHHN®¯g³[Zh4uueeA<^$ª¯¯¯76ž4iâD…¢µµ  ;†i4*‡Ããñx™Œ@ Óõõut””””¨T´ŠR§mÂÌÌÐÐØXI‰Á Ñ¬¬,,ÌÌМs]­Q(P jÛ),¬®®¨06ÖÔÔÑ?¾ÿAƒrrª«+*h4‹F#“‰D"±´´¾¾ªÊÈHMMOJ23ÓÑÑ׉Äb©Ax<¹\.‡ …BCÃÐPM PA  èäóí쬭ml44ÔÕutø|¯¢B"‹NØ<)+[YÙØhj¶´de•– ¢P…ÕÕ޲ò€––4ÚùóïÞI¥è;¤®®¤¤¦F"KK‰D¡P(ZZÞ½kn–J€D’H Ô¾‡Ã))éêZ[ÓébqeeC‚0™ÊÊ ú9bq}=‡ƒ ÇëëkhàñЩ ý/PSsÿþ£Gùù]‡`©´¥¥®ŽË… ƒHD­¨‚ꪎŽ^^&ôïooo` ¢¢¢bffb‚Ǔə™d2ôËÙß§'Û ¥¥))eeB!‚ØÛ …2™\^W—Ÿ__/…ÒÑ!“!ZÕ ]Sßã‚ùmãÕ³q0¬¬lié䤦&UT(ªªZZè_E¢’’ÆF™=ÛÎNW—H€ïQº3^‚¶¶™_]}ãÆ›7]Žq ›ãÆÛ·bñøñ**èo '§^½¨ÔÆÆÇÓÒZ[»Ö³\Îb¥¥¥¤ÔÕÑhÇ»ºêêâñ11EER$’ÚÚ‡?qâáÃÿ)€ñoà—SPûN§+)yx 2`@HÈ­[wîÐéd2€ vt´µµ¶ÖÕ½~ýú5¯$• …BaSSbbr2‘H"Q(ÄãÉåzz:: ˆÃ‘É …L&£ê€LÆ`0™tº––ºº††ŽŽ¾¾®. ÕŠ:•(®£C$‹Éd<žHliioçpššø|GW—ÉTW×ÐPRb2ÃÃã⢢Èd¡PTU55Œæf¯¥ÅÄD[ÛÀ€LÆáˆD©†Ñ"³h¶;NCCGuüCQ(@a­D&S©L¦««‹‹“Smmmmm-Z÷gŒ‰deåꪣC$êè():tøpŸ>r9š¶AM ‡£Óûö50 Ñ^¼(/@¡Ëº’ ˆL&‘H¥ŸÖ@H¤PH$$‘†ݸqçΡC?mŸÏáü¯¹ÓÈå­­ååmm]Ç?tÔÑ„$ ˆ¦” ÌÍ-:þÕ«  =½øø³goÞ|öìéÓ”pq±¶öòš0­Éõk>iO·_¡š›9±øýù&ŠÅöíϯ/ó¾Šö}@…Â`P( H£wófL̸qŸ¾ŠÍnlDë´õôxA™L§S("¶´Ze2.—ÅâñäòN †©T&“J¡°­M(üðºC.ïèàr…B PTT:ëoýÈQÄÀÀÀÀÀø~Á,v Ã"‘H$õïïêÚ¿nn^^aaQQBBZZgâ"‘@hk+,,(@ßE HJJ Èåhþ7%%…†MMŒ S-B,´p,’HT*nggeenN§+)©ªÊå À0 ·ÃïW2’É´´˜L&M1€ "‚äæææ––jk::¾¾..--"Ÿ_YY___?`€³3'´·8 ++Óht:2™x¼––±±–Àû‡´}è·vt äááæ–’’––šZW×Ðð3²Ø‰ZZff0\QñâÅõë••Ž-4š••ÏÚµ..vvÆÆDb§‚$“¡6¢÷?uLü‘H::D" #"vìØ²eË–ÜÜî»YýQ(d²{éSh4'§M›¶níÝ;5uáBOÏ©SïÞmiQ(†õõŒE‹þ©ÄÔßFÏ·Ad2±X&{¿';aþx}(»>®8&SW—Nÿ;ÉÝ ¡°½½£Ax¼°0__7·9s^¿þ‘r {ã¥P…<žP‚І†Z;% Óh]Šúz‘ˆÏ €H¤Ó;m¤@‘H£‰ ··‹D¿öÌÆÀÀÀÀøïð :造L†ü “&Mš4i’ºº¶¶††P(K$Ã„Æ Á0‘H"Éd …TŠf¨Cctth4:ÝÌLGGO-·Šª¨óMi)‹ÕÖVYÉf³Ùбqyyk+‹USÓÒ"´µÉdb1‹% hÐãàpx|nnAAIIVVQQa¡HAb1“©£C¡ÔÖŠDNk«PÈá”—³Xµµmm<^[‡ÃÁ0ª’‰D$Òéšš4šŠŠ¦¦²2€LAÔ_‚0 A …L† $‰¤¤4fÌèѾ¾‚Z·z<^CÃÊÊÙ™Fkn~úôÙ³7o=ЉIJBÞ»™“ÓÔD§››»ºjhtÅD}ëñT.çñêêòó¹\2¹W/{{554J¤§æƒ1pàž=çÎ=~|ïÞîÝ“&éëÿÚ9ADÒÐ02¢Ñ¸ÜÂÂòr¯óÐA**ýúejúå'@é²püûÚÿíüxuèû["‘2‘¨ªJ§wÍf2ÙÄdäHOÏN[Êçž@.W(@‚`øKö(¹¼­­¨(=ÅRRrqñô44ü±õ’º;^bq]]vvAHdlh–@‰¤¾>7·´T$ÒÒêÛׯæý¼ÄdÚÚöî­£#UTddÔ×l;"“­­×­ ¹zõѣŋííßÿl ŒžâLó €Ã¡"•2JJL¦¿ÿÌ™éé^¾Œ ºiËåB§m ¥R‘ˆÏGáó96»­­¦¦¶VSÓÐÐ̬­M$âñNœˆŽNMmkãóù|ô[PÇ‘ØØÒÒW¯Ð4 0L$<—ËåJ¥2 “ÉdššL&“Ù¿ïÞööMMl6› A0 ‚\®XÜÑ‘’’’’™‰  R©::JZZYYA··£c¿~\®HÔÑ¡¡A£166ææÆÆx<…B  V¯÷{h‘\‚ B…‚ÏwtìÕËÁÁÔÔȨ§kÿ@²²……­­®®@PQ‘™ùqê`±¸¡¡¨¨¤D*<ØÍÍ‚J­®îîwˆÅïÞݾýôimíøñÓ¦-\¸cGGÇ£GOŸVTˆÅtº©©­­L–šzâÄóç  ZRÓØØÁÁÓÓÜœF#“uuµ´(¤Óûô4hÀ©¯¯¬Œ‰II©«û0á7™lfæï?cÆÐ¡žž\î‰767ÿÚ1MÂç—•%$ÔÕikÏž½qc@@|ü©S¥¥**¾¾K—îØáä‚_vB’Éx¼úz´´ú÷÷ô:ÔÃFkoW(Øìœœää²2.·gŸÿﵿ§f5ƒao?|øØ±}ú(+S©ææ¦¦T*ª«8eÊäÉ EYYfæƒOžµ·w÷ÓE¢ÚÚÄIJ2>|xãÆåËgÏÁÌL:}ìØ•+çÍC¯@?¿««¹\càÀÙ³'OvwW(JKñxuu¡¸øÙ³˜˜úz‰¤£#?ÿ̙ӧ çÎݱãôé3g¸ÜÇoÞÌÎîèPV¶±éÓÇÙY*}ð`ÇŽsçJK;3}öÜxµ·§¦=zùò»w11{÷Þºõè‘•Õ£GùùJJýúçâò¡4C'5õøñ°0çéÓ#GØ´ BCÓÓÀÞ~ɒÇûöe³ÃÂfÌxóæýdë(0¬ªÚ§¯¯»ûС ÿÚ×ÿ+ür ’BnÈ0 A¢ ¥D_ßÔÔ¢ªJGGS†Y¬–Ô-«©I¡Ë«ªø|.—Ç#‘@‚2yذ‰½¼ètuu D‰äÝ;.·½½­ËåñÔÔ”•ŒŽŽöv.—Åb±X,¹\.GÕ€aÆãY¬–––™L]M¥UU H$ZZêéµµµ·s8 †²raavvi)F"Q©'º¹ ›‘ñömqq}}M©©––¡!š‡Á R).!ˆBU´q8ÔéN.—ÉärTMB¿¶êÙÞ‡a&“Áàr““ãâÞ¾í¬Ëó>Bamí“'qqEEÞÞt:‰Äå–”¦¦r8r9ÈåNeeQQr2ÏçËå Pðx55%%ÉÉ"Q{»L† 2YEExøÉ“‹K¥ãÆ-Z4lØøñ»v£Pp¹Í͵µ ŠÅ]î6¤¤dhhgçã3x0šºA*ÍÍ-,lmÕÖîÓÇÕÕÛ»¶V(LNNK««C¿×ÖvttuUS€¬¬îß/)ùùÎ|r9Ÿ_TôêU|¼LV_ÿaW¹œÇ+/‰Áúz4¦F$**:x0 `Ç-­£GçÏ?yòêU©¬Œ ™7oÆŒÄÄ… gÍb³?§ê(--Ïžýþû¹s~~AAþþ§Nݸ1k–HTXxõê„ cÇ~¬ }­mßËßiÿ×A™¬©éíÛøø—/ÛÛÑùÖÖ–““K$¢ê¼\Îá&'ÇÄtt°XR)‚@ŠŠ­í!S¦Ljd„Ç€H”šš˜øî¾¾ÏØ±þþ%%<^lì³gEEííÝ/¹¼¡áöíåËwï0àäÉ ¶m;|ØÃ£¤äÙ³K—¦LY¶ÌÚzÅ OÏššŽŽÈ‚·oOž\½úôiÍ›7m:|øúuáróòBBÖ¬‰ŒŒ‰©¯HŠŠŽ=Û×W,Þ°aË–Ù³7o>~Å ¹œÍ®®.,ŒŒ´¤$//#ÃÆÆÉ©o_[[´ôê·1nÜ´izznn½{+)Ñhd2“I ‰ÊÊÊÊ FSÓ½{Êå,×ÒÂdâpõõ‡Ãå 8‡Ã99õêec³bÅÒ¥k×*"•BJ¥yymmAHHLÌ›70,•J$2‡Ç›™éèhjöîmb¢§‡ÃI$b±²²’•š˜—šª¯_UA†† †²²@ ‹ÅJJ …"“!ˆBQTTSSUek«¯od‘œœ˜H$‘èã3x°››Íãµ·?y’’òúµ‡‡““žž††¦f]]{{SSB‚™Àã)0¬¯¯¢B¥ZYihhjZ[hjÒéŽy2 9rôè•+ëÖ­]»i6q¿&sԨ˗ËËCC‰ÄåËmlfμu«¡;ba`ô †·÷ùóþI"Ížmd4sæãÇÖ/ÿ6~Á,vr¹\^W×ÔÔÜŒ --8!I$ ¨PP(FF&&`mM õõMM\n[[[›T*—CT*I$<žX|üøÃ‡kiêèàp8PW×ÖÆfK¥b±HD$’Hd²P(‹ÅêêtzŸ>::úú¨[—ËåÖ×S(ïÞq8::x¼žžXŒ …B$’HííííAVV~~Q‘‘‘™™®®P(“‰Dx<…ÃYYeeýû;8ØÙ!(}ûÒ§OCCss[›LVY)‘P©úú †‘N¡üùç«W©©ùù2™Túè‘B!—3™ …2tèàÁnn^^ööffjj$‚Èd¿nÞ²_<^]ÝÀ@&{ûöêÕK—ž?olÄT# Œ¿’Éjjªª0Ìf·´tÚlñx]Ý1c–,éߟD*+;y²¨èÓšNÿ~9 /G³GÁ0èG;‰„Çãñ2™L&—ãpR©\Îdjhhhp8ÕÕŠ\.•ŠD2™X,CŠŠ†F~~CCSÓ‹¯^%%©¨èêjiÉåbqGF§3x<ƒ‚|¾H$R(D& 55UUIIoÞdfŠD\.' ‰¤PÈå ÃòæMLLzzuuGGCƒ»»»{ïÞ,VkkK ƒA£18•ŠÇ'$$'gg÷ïïììà@$ji1£GÏœ9th\Ü™3‹ÅR)—ëáÑ»·³sNNk+'…B¡PÈçs8hâÛ;wž=‹ˆèèÀãÇŸ7ÏÁÁÐ:+äô$ééáá§Ný{'´³³Ÿß²eRiiééÓ ŽñO¶G ÊÊ0Aƒñßbýú¬,gýúî¾J¥RḬ́þÃÀÀÀÀøgùå$2‡ƒ Þ½mmML€H$“e2™L¡Ëa ´Ô+šSŽNg0ÈdJsr^¼ˆŠ"‘¨T ¥©©²²¢ÂÑqäÈ1c,-{õ²·‹Åb‘ˆÏokãp <žB!‘ììÄb£²òüùgÏš›†UUµµ5445--%‘JQ›@&©©ññ¹¹YY55ÅÅþþ“&ùø‰ ˆÇ76¶µq8lv{;—;y²¯¯—×›7))YYÍÍl6‹…ÉD** Aóçûø ‰(òó…B‰„FÓÑÑÖ–Éêꪫ[Z*+¹\"QCCUUE…@ µµ)A‚ V(z>3Y—‚ñ#À|ÿ{€ ‘¨ªjmÝ·¯³s¯^FFÊÊD¢PX_Ÿ™ùòerrnnK VËãßÌ/§ Q( ‰äïß·oŸ>x<‘ˆ&iè´œ ê €\.•¢)r­¬ôõom­«ËÈÈÌÌÍ5ÊÙÙÎÎÞ^[›ÉÔÐÐÒRWGS†ËåhqÇ맛ªJ$©©‚°XùùµµZZššR)š‡A¹\,€„„¸¸¼¼ÈÈÔÔ„oïQ£ÜÜ,-utôõ>¿£ÃÐPSS[[K‹ÉTQih`±š›••µµi4F•:©#BŸ£¢JK+*BCŸ<‰mh(**-… ‰@ÐÕ566660 R‰Doï!Cúöup02ÒÓÉäŸJ݌тˆÅ­­¯_GE¼~õÆÿ¿ ‹B r¹L&x<šôM‹VsïÌu„ÖàAÆã§OŸ2eòäÊÊòòŠ UU*•É´²21±°‹¥Ò–Æã!<:U,4½¶Læê0thAÁ³gÉÉ/ž:uÿ¾L&È厎FFVVÕÕïÞÕ×WT´·¿{çèØ¿¿……««™™•Ÿ/‰D¨5‹B!‘H$--ƒÁÈ̬©)+8ÐÒÒÖAd2lkƒ ´íÉ… GEݽûâEr2‘Ar¹½½››««››££Í€&&::ššÊÊjjÔÙZ4q/ZÍ00000000000zŽ_2©³¨+joAÎbŠ]ö#4E¡JÕÔ44´µ—,Y´hþü¦&¡°½½´T,.--,ll¬©‘Éd2‘hÌ77<AðxôS`¸³´¦Pheåããêºp¡¦¦ŠÊýûÇŽ=|—’’‘A¡hhÀð’%³fùûãñ0ŒÃ¡m£Ñ¨T †Ñ„ÜA'N¼zúömbbvvSS]]@@¯^nnJJ0¬¤”–VXXX˜’R^ÞØhbbggb¢¡¡¯ollddjjdÄ`‰„æÙ{󦾞͖˥R™L*•Ëe2‘H$’HÙl.›²=Ç/Y(‚: ¸‚ BÑùoÔŽ‚¨MI&ƒ N—3™L"±´´±±±ik‰òò¢¢ÒÓß¼A¡P"a0 ee<I$Q(Ð⣨=UÆ H.G±XGÇÙÙÔtùòsçóò^¿~û6+ëõë¼<¡P*•Ë›šx<.W,‹¥Ò¶6¡°½] ‰¤ÒØØÒÒüü¨¨òò¢"uu55›7³³ÓÓŸ?ÏË+*Ú³GIiâD##[[mm6[$êèÐ×WVVWçñšš32êëëê¤R‘H$±˜H„a’J%…Mó¦/Çã…B‰›²=Ç/§ Éd —Cª@§ú€Ç£v¨J£P ˆP‚B tª8R©LVU•ž^YÙÞÞÐÀá”–¦¤XYyx89••I¥uuff¤­ •¢ê"áp PÈåRiG S(Tª¾¾ƒƒ¥å³gwî¼~½k×óçÏŸËå„á%eE"‰¤£A`†q8†aee%% ÕÕ ƒÅârÅâ¼<6»±ÑßßÔÔÚzäÈ¡C‚üüÒÒòòöv.—ÏG[N£áphY\ ‚p8D¢Ñ¨T‰B!“Ñ” \nj*6e1000000000zŽ_NAÂáÐ8#A¹U– †ÑZ‰L&64Èdlvi©@PWçà ¤djª¥E ¨©¡iÁ]]íìˆD}} E]]KK]½´4;»´ôñãׯcbFŽtw2ÄÂ×ÑA³âuÚ© ‡Ãã …B(d0˜L*•F32b0øü”™LYYUU]]&“H::ðxMö@ Èå …D"•J¥b1€fÜ#H$H”Ëe2¹¼³ýìÙ®®66|~Ÿ>ÖÖ AлwŽPX^. D"¡š¤Òöv´vSS“T* …Ø”ÅÀÀÀÀÀÀÀÀÀè9~ÁB±‚ ˆÖABã„@†kk;:jk33y¼wïØìÚÚ––ššÊÊêjww%%--2922??%åÅ‹ððØX##;;##"‘H$uuÍÍuuùüÖV/6633)IEÅÅeøp55¤Ñd2@T1C]îPë‘É †¡¡‹‹ ß½ ‚"•J¥ …TŠZ¬@G¹\,–Ép8"Ð2P© —‹D,—+ ‚H¥¨*E§ãñ$RYYeeuuXXLLjj{»B¡PÈdR©PˆÆ\Éåb±D‚ÃápÃd2• Ã65 Œžá—KÆ¡ÙáA Aär¹œL†a2¹¾¾¸¸²²¤$%¥¸¸µµ²²­­©‰Dê舉©«KOÏÎÎÍ-,TUÕÕUW§Ri42uš«®.(¨ª2007××çóÙl>ŸË•JÛÛ ¨S C¿Q›êÂ'‘P(D"îÿ€a<G“4@Ax<O"ñùb±\Îçóù<¦¤D¥‰x¼XL"ápbqïÞvv&& ‚0Œ~Nsskkkë©SQQ 2¦¤äè8x°‡‡XÌç‹DTª’nbboooonîââêjeåêÚ§@£ÑhØ”ÅÀÀÀÀÀÀÀÀÀè9~Á,v€æ–CÕ$4ƒ\®¡A$2™3gzxŒªP<}ÚÐP]]W'•€BQ^ž]^®­­££¢Âdjh¨©•”dgàåÕ¿¿ºº–VFFllzºªª––ª*‘¨ªŠ ¨MAP8…AЂ¬2àphrpZZZZZZ¤R™ †Éd2™BA‹¶66²Xl¶¯ï AöösçN›æë[T”’ÖÞÎf77 >nÜȑÇÈd ‚x|q1‹ÅåJ$x<@&Ã0Õ×—••–Z[»¸89ñxl6×ÞÞÖÖÖlvK ‡Ç‰¨M ›²=Ç/ª AÿGgF;©T.§ÑðxÃØXW×аºº¬¬¦†ÇkkkoG_* †††²²¹¹¥åóç7oÆÆúù-X0jÇf··×׿{W[+‘€ ªl‰‰Ã†Ñ$ÔéÎ&ÚÚZ[[X<¸u낹¹EE™™99$€ Ó¦¹»“ÉË–­Zµd‰¦¦®®‰‰¾¾†•õöíË—vvýúéèhjª¨ÈåRi§Ëœªª††º:™¬ªªª*p¹\.›ÝÚÚÚŠ>«\‚0 Ã"—K$"ŸÏãq¹4ZG‡@€MY ŒžãTP¥H.G3סecÑ8$èÿÍÍ míÔT%%"±¶¶¢¢¦FUUGG]½¹¹¾¾©ÉÌ ÇáÈd UU5µˆˆë×##GŽœ={äÈöö'Ox¼´´’’¼<__ Ô¥¯ó»D.‡ 4±¸B L&“Éd.]º`Á¼y<—ÛÜüøñŸ<Èf·¶Z[÷êÕ§F£Ñh (—·µYXôéclliéâÒÍ$C “H€ …•N$Ξ=hPß¾¥¥,VkkKK{{GGYYNNN—[WWS#ŠDR)ƒ¡¥¥£cjêädlÜÜœšš›‹MY Œžã—‹A”É 46µèt r¹Hdjª®n``f¦®nl Ã0 é©mmb±D‚ …P(ŠD66}ú˜›óùBa~~JJ~¾¥¥½½…E^^QQQ› ííhâp…¢3&éýoDÓ+H¥,F£~~3flØàááã³y³³³»û‚Tª’™ŒªB —óù"“ A2ŸÏã …EEùù¹¹õõMMõõ„ÑHÖÖJJ4nœ¹¹™™³3 ˜’ééI§wt @&··3µµ7Žéí­§§¦¦¢‚MY ŒžãT SaAÿÕ¥À 5‹ÐßBРAÖÖ}úðx--íí::ÆÆ::hZB-NG X[æå¥¥ÐéÊÊJJhlSzzKKIIu5²X5‘P[âñõ–AðxÆá‚är"‘B!‘zõrrêÝ›Ng0(´Rúj4Z˨¤¤°°¸øÆÓ§ËË‹}ôèÊ•?þ8z´¤¤´´¬ †!ˆHDß+‹DB! ˆL÷ömIIVVQQu5ª$¢ Ÿ\Þ™.£gøå$ÔÓ©¨ õ@.GÝßÐè$¹\.‹ut´µõôÆŒqr4ˆÅª­e±ZZZ[ÐúF‚ÃAijêë«« PX_ÿî‹¥®®¯¯®žœ›’òàÁ«WÑÑåå<^CÀ0§P êà*kÃ$“Éd (“‰D¨òA …BŸEéŠîܹu‹Á år4Åw}}]]UUròË—±±‚¨Ý‰BA…B.§RI$2YY™NWR¢Ñ(<ÞØØÄD_p8ee4e6e1000000000zŽ_Ö‚„ª%¨¥U“PËÈå0 ‚‚B!“‰Å66&&ŽŽ6Ìœ¹t©ŽŽ‰‰®nffllf&Æ`P©R©D"—++«¨ÐéjjZZ** eeÕÕ½zYX˜™õêeb"•òù"QBB^^z: U˜Ð¨¤Îìv]-BîÐø$T ê²ê Žs€ 0 ‚¤¤¤§ghhjš–V\œ””–VPÀ`0LfvvFFBBDDdä“'¹¹%%ééÙÙÙÙ¹¹­­—ÛÞÎãq8—ÛÑ‘Ÿ_\\SvãFSScck+6e1000000000zŽ_.I #uÖATeA]æ:“4 ÊdhôQffKKvvs³LÆãõêåîîàðòå55%% zzææ::R©P(Ëå€ ÅÅtºšš²2ꧪªªªªZQQQñî‹åêÚÒ¢®AÊÊÑO‚Ú¯ ôAp8Ôš„þ]¡P(Äb.·­­­­©‰Åjkkiikc³ù|¹‚x<‰D&#‘`êëëê::är‹ÿøãÀ£G‰DMMCChooj¢ÓAP(”JÑÔ PÔÔ´·—–ffÖÔ°XÚÚ**ÚÚØ”ÅÀÀÀÀÀÀÀÀÀè9~9é} N§‹B!—w&ßF™¬©I.çpªª::ššRR¢£SSµµõô44<<Æ2$!áÉ“ädT¡ÉË{û6/ÏÒÒØØØØÁaÄ_ßæf ­­ªª¡¡¦¦¼~òäàÁ**ÿíƒ2 ̘qúô«W—/¦¦öï9îáñ¡¡IIçÏÈd~~I$ ÿcÇŽóó3777Ÿ8ñÒ¥/nÞÜ»×ÃNÿô=0Ì`ÛÚššª¨‰ÿks©TSÓɓ׭[¸pøp--´(›KÞÞ›6]¾¼ÿðáÚÚ¿š´Ãá˜L ==ã[ÚF"Ž=gΘ1®®VV#G^¸ðçŸS§âñññOŸ¾z… ãÇ߸qùòȑ݂ÁÀîîööjjØÁÿKÉŽŽ6_»¶aƒ­-™ücf¼ŠŠÏ±±7oN›fjú¿äÇkh ºjÕÊ•'ÿ›ö`ŒŸ•:`À®]oÞDE­\ioO"õÜ7ý\ù† P€DêÕ+0ðÙ³û÷LL¾eéóx sæôï¿fÍË—|þ¯òd²¡áС½{«¨ðùÁÁ\®Lö¿3F0ŒÆ‚u/Ñ9gh8iÒõë÷î-]jg×E+•¾{wýúÊ•~~û÷ŠDßÛn"‘ôõíìúöíÕ+!@@[ߣöå§¥ÑôõŒ èt<†a‚p8‡CÿÝ«†Ãáp‘H"‘Éd2‰D¡P(è¿)ôß$‘¨PTT„‡ß¼ùäIuµTúõoÆãUUÍÌ :tÀ€þý{õÒ××ÒRV&“ ¯¹¹¼<##)éÙ³çÏÓÓ++ùüîfUA"Q]ÝÔÔÎÎÔ”Éü­«|s÷ÞÃD"§PˆÅRé_¿©Tkk//GG•ü|6[,þü{$’ææÚZöñ9uêĉ¼¼ ÷î7.6öÌ™+þü³oß}û’“ù|ôÝ8œ‰É¼ygÏ&$LŸ~ÿ¾‹Kß¾çΕ–þÕýj––K—>|ø°‘QhèÔ©6¤¥¡2A@YyðàåËW®46®®¾w/&æÎÖÖ“‹i4 ‹Ç÷önoß¿ûöè膆_eþH66 >xãè¸s§M@@X‹õåoAÍÁaÕª#GV¯NK[·.9ÙÔ´¤äҥŋïÞ}ýšË¥Ñбc_¼ðñ16&‘?nl>ÿ9Læ€ûöݼ¹GG@À°a ¾zõ÷ö¨Ÿ¹?þùAªªÃ†mÚtöìªU––ŸW~p8 <ž@€õëïÜyòdΜÏï˜bqnî±c7nÙòâ›ýåÙ AjjǯXáëkhXZúçŸÉ¿k-¾ŸÔÕû÷߸14ôôéß~sr**Ú·/-íÚ5ª¬äpþ©¼º0L¡0ÊÊ4€Ã}¸'¢û"ú[Âã "‘L¦PÐÿÐÝ‘Dêü? ïèÈÍ}ñâÉ“œœööŸñDÄdöî=vìÌ™ƒkh|~”Hª«?¾uëÞ½ÒR‘)sóyóš;W.?vlçÎ+WJKÅâ_g–hk»ºººÚØÐhׯ³Ù=µ‹õ„|ûºüÁ$@,®¨¸s'0pÊ”W¯ÈäÎ[mN]ÝÃcÞ¼#Gvï>OH¸ÿÚµðð„„ôôüü¢¢ÌL¡ðWz <^GÇÙÙÙ™F«©9uª´ôK‡zRS9òàÁˆˆµkKJ¦Móö>¾¤äK¢g0LL{÷îׯ_?GGggGGkk[[++cc}}uuee*‡S(„B.·¡¡¼¼¸855&æÙ³+WΟø0)©±ñãÅB ˜š®YqëÖÆ¶¶Dâ·2™F#a¸OŸÇkk7n”Ëßÿ»H”Ÿú´——·÷¹sÅÅ]Ï"—77ÇÇïß¿reuµ’Ò—í8œŠŠ‹Ë”)¿ÿ¾{·¯¯©i[[rò;oß¶´|IÉ„a==ÿ¨¨ìì½{ûõû6Õkÿþòroÿþ+ed,_îà0uê•+µµès)) vöìÇ7n ÜùÙ šÈC&“JÅb±X$ ;:D"¡P$R( ##ãýOæó›šŠ‹ óóïÞ}õ*,ìK zÔœ6mÏž={‚‚,èÝ›J­©ÉÍÍʉ,-ûõÓÕ-,¼ÿéS gç½{—.=xðÌ™òòU«V®\·îƲ2àÓ£‘ha±fMXرc3g¢›‰ššÆÆ$¾iÓ‹ ~]—J««ïÝ›5kòäsç >ÜÈd—?þˆŠ ×ÓÛµ«W¯É“_¼`³ÿê¨K¥º»?þüùjj{ö8;DEµ´|¸-°A@@ppXØúõ$‰ššææd2îèxâDRÒˆŸ®¹¼®îÏ?×®?É’çÏcb‚ƒgÌPR;ûðáââ/ï;¤©éí=oÞðáí팑’ò#Ž=½?þxùƒ BaUUbâýû·o—”|~õHöö::}ûÚÚ@rrxøíÛ……ŸŸáÍÍUU"Q×wàpffw殮ÙÙ}ÎN4hÐ;ÍÍóçýÉÛÚÂÂ|}ž3çÕ«ÏwOì¿ß kh ¸xñåË7o®^ݯ_EÅÅ‹'öî}äÈóçuuÿì5`i¹vmxxZÚ¦M_~B!“‰DB¡X,—“ÉT*•úñ@(d±**bc÷íËȈˆÈÉioÿJmçE¡ƒƒ““¡a×ü UUgg/¯Aƒ ùüû÷srîÞE$‘ËaXGgàÀI“6nôòÂã9œAƒ6n ¯¯ÿð,ôs ‘ìíW¬¸wïòåÑ£uuq8¢R ŒŒˆDnùò§OÓÓgÍú¼T‰22vîœ;wþü>–›EÏÈ·¯Ë0!!*êÁ ;»Þ½T÷•”äåedØØ89õíkkëààìüíï­¯¯¯¯¯ÿ'—Òh®®6¼yóü¹ORÒ‚Ó§¯Zuÿ~mí¯¢±Ã°šÚàÁ lÞ\&‹Œ ¯«“JA¤R¡°¹¹¬,-íîݘ˜²25µiÓbc33—,IK1bذµkSSßßÎðxsó%K.^Œ‰9|ØÍMU¤­­´4++55==//''?¿¬¬¬¬ºº¹¹­M P(ˆDCCÃÄÄÁ¡oß1cFrqQV..>uj„™37oŽŽnmíZÈ8œ’’¦¦šƒæ ü«e¡¦6aBXXXØüùÑѳgsî\MÍû"A¤R¯¹¹©‰ÏÿvÑ A4š¥¥¿ÿï¿;¶`AVÖ‰;vîÝûìYqqçMÿ—Æ€LVW×Òb2¿æ…Ç›š.[òðá!ׯ{zNžüôisóûbA$6»±±µU 莨ƒauu7·éÓ÷í;thùr__)334ôâÅ»wïÝ{ò$!!#£¦æ¯>†55==‰Œ51Ù¶ÍÂÂÏ/6–ËEU²;ŽݱÃÅåc»¯¥5`€»»©iKËÛ·IId²­­‡‡­-^UuêÔ¼yÇoÝúêU}ý—/³ –/õêéÓ3nß=ÚÝ=8¸ªêÇeÜþØ“ò ˆJÕÕ5666VVþÔîE¡¸»?~ëÖÁƒ°g—W``§åó}¤R6»ºº´´®îC5‚ˆD*UI‰LFsÝ’É..û÷‡‡ß¸al|ü¸‡ÇÔ©Ïž55}}6#ˆB!‘<^GLJ×D=½ÿ~mlI$}ýÑ£wì8zôÂ…À@+«’’S§Ö¬™>}Û¶¨¨êê_å‚x<‰D&ãp"ÿÿ —ˆY„ñxMM—… ÿý·ßÖ¯5JI)'çλwoÞ ù2..5µ´´±±£ãW¨. ÃÚÚcÆìÙ}þ¼ƒCdä¼ysçnÞüôéûVH66^º4<ººd2…bnxñ↠**ǯ\¹sgjêç~ËÙìüü´´·o¿,É~–|ûù  ‹U__Só£~¢ŸÉf³X :Ý䟟¬ÊÀW®dfr8#Gª©ýˆØ¦Ñôô¬­ òó›=v¬ºú_Ç›À0“Ù·ï’%AAÏŸ§§ÇÇ——GD<~îÜúõ§Nåæed¬YówýŸAD26=zݺgϪ«‹‹ß½‹ŽÞ²eòd++ åÇGàñ––›6EG·µ½z5q¢–ÖߺA­wïÕ«CBjk››Ÿ>=qbÚ4KKÔ>‚d²††±±Š  ¤äì¼páÅ‹ÁÁ£Féé}z‹ŠÇëë/\™—ÇbEG/\èà@£½ÿütúÈ‘ææVVž8Ñ»wçá¶kª©ùø{ÆãUT9²`ÁèÑžž>>>>ÿ>ÜÁAKëÓ[þžœ?tº¯ïãǹ¹ÅÅôêÕ¥ áñÞÞ“'/\¸pa@Àû?-Z³æàÁâb 3óñã]»fÍêúëäÉ>>ÆÆei'íìÖ¬ÉÉijºy3 @GçÇF|}¸7üˆý±çå™Ü§ÏÞ½÷îåç½~]TôáÏ7ojk‚²2@ xû¶¤äs¯‰‹‹‹Û»×ÁáãoÿxßÒÕ0áÙ³¦¦ÄÄ“'ÖÓ³±4ÈÛ; `Ú4/¯¾}utº_ø³÷_RR²·÷÷¿p!+«¸X x÷.$dË–¡C54~L´Ñ=ÿ|b2  ŒŠª¯ÏÎNH8ztìX›¯yü³ÉvvK—&$47¿~}ò䈪ª_zzÎÄdΜ¤¤††‡Oºz5*ªµµªêüù… íìzâôò­’ØÈhÖ¬äd6;"bõjsóž‰ úÑòí[å¦ }‰äâòlj‰Avv` µõ·8}iP­­-Šˆ¨®FqYYKKYÙ³gÑÑ÷î;vêÔ¡C7îÞ½{÷¦MGŽœ;wþ|||eeY™@ÐÖöàÁž=ƒ1™ß¶¨Éä^½,.ÎÍ}út„OSHη%&r8¯^M˜ ¥A ¨¬hРAÇ/]zæÌ³g\®@PVöw$A[{À€uëÂÂ^½b³›š""‚‚fÎô÷Ÿ<ÙÏoÆŒ3üü&M5ª== å¯{ž@°¶ <>>>9ùñãääÏý|ò$+«¶¶¬L àó32>ükxø;ææß:Ã`XW×ßÿܹºº––{÷6lèÝûýüh‚µõ¦MèF½xq¯^††^^W¯VUef>z4cƇI;”” :|¸¦¦¥åÖ­9s >7D¢…ÅÖ­99……‰‰ |^Á°¶öœ9/_æçîÛgcóuGC¢R'O¾t)%E àñss SRš›ss›šêê’“óò¯]»|y÷îÉ“ÝÜ´µ¿<Ò ¨®>vll,›ýæÍþýÇîîlJ®®ÇŽ%%q8¯^ùûëê~YÜ’H½{8Ïb}x„a I“֮ݾ}óæ£GÏž=v,,ìÑ£7¢£ccïÝ{ó&)ééÓää‡/¶µý´}**¾¾QQNrrppß¾?&HüçÇ«ªZ[¸k×£G99ùù¨|x¼Çwï5Ê̬3ʬs.åçÇÅÍšõ~’TUõó»zµ¥¥¶öÈî(Ÿ ‡“•µt©…E÷â{rþÀ°¶öܹoÞäç§¥þ•úÝÙ5µ1cbbÚÚ^¾Ü±ÃÖ¶»áýÊ€'N$&ÖÖÞ¼ééùã¥ùÞ¾üùmĈððÂB6;<|ðàî)Èï›’Ò A§N%' <^||ZZaaZZQQBBHÈDZ±oÞ´·s8oÛæìüs°ß¶ÿB’RïÞË—Ÿ;W^.”–æç‡†ÎšåâÂdþûgº ÌÍgÎŒŠjnÎÊzüxñb3³Nï…_ÁØ80ðÍ›¼¼Âƒ?<¤níÙÚåç''_¾|ýú½{×®ED¼xq÷îë× §¥½ys䈟Ÿ¦æ×çÛ–oß.þÃ1H ¨¬<|øÎ—.•˜¸lÙÚµ‘‘ 2™H”“sîܵkYYóæÏŸÿôéèѧN•—£f¤ÑœœvíºÃ‘hýú9söíËÎþœÿ¿DòîÝ‹‡-X’²tijj^^E‡óµ¨ "QOoòäóçÃï\¹zuݺgÏzõÚº51ñk¾–‚¡áàÁ^^êêåå§N¥¦~êñ.—··75ñxB&Óéd2!Hcc|üõë‘‘rùéÓóçÈd>{öðá_ûà+2YSÓÛ·ÑÑ0z4#ã}ï{‰¤°ðĉÏžõ÷¿~ýÌ™ &Ož2eùòW¯Þ¼9ujÆ¡CŸv&@]tH$H‚ûìý§$p8…B"‘É~Ôºü»@†ÆÈ‘÷”—GG_½zâÄ¢E›6ef:9ݼ;nœDRQQSÓ)éd²êê»w¿zU(lh@Ëiwα˜Íæñ¤R<žBéLaò3èÉùA‚’‰"Q{û—züØ}¬_¿åËýü *jûvMÍõëoݺ}{Ð uuëñãßß±ãС¸¸os²úû#™ÜsòG,VRrqÙ¶íĉ Þ·Þ}*™µµû÷G“4¬Zzçδi_v× ƒƒW¬8vìÍ›.@¡89-ZtüøìÙjjPSóäÉ… 3fìÜyéÒÛ·Ž\‚L¦—×¥KÑÑ·oŸ=»e FE ……ƒƒ¥¥­­¥¥Ž—{úôôé^^G~›{çÝÉdGÇ•+oß>p`À€ÂÂ5k|}ýýÏŸ/-ý\Lé÷ðsÎ?]’IMm̘ƒ×­spHLܺÕÑñÂ…²2¡ðW‘œŸÛÑ]].\½ÚÂ"#cÓ¦‰33¿îÖbq}}ZÚ»wTêÖ­Î΢E;wôë÷æÍ A4Zg|"ob2cÆîÝGŽøûëèü] LVSsûö®]«V…†ÖÔ|¿¼<&&*ê[[%×ÖÞ¿¿sçéÓk×fgÏ›7v¬…‰”˜˜‘ñ¥lÎÐpäÈ‘# ËËïÞ}ù²±ñÓiÒµèÞÏ×ÔÞž•uõjT”DòçŸ3fô飬üèQtt[Û( …XÜÞ.+„Ã}í.‚ˆDee2Y*mm­¯ï bïZ |~CCk+è뻺êë“HðWÛ bºgÏ;'OZZVW‡‡Ÿ8±}ûúõ¡¡Ïž½zU\Ìá|~;A ÅÌl̘S§¢¢Ž¹sçìÙ²2;»É“Ÿ=û0vär'7÷õërs¿Ô<ÞÒÒÂ"0p×.ƒœœgÏÂß?olü¯g ÅÚzÔ(UÕââ  ðð£°:òòš;÷Ø1"qà@:½£#2rËww77hh@Õ_¢ÓÍ̬¬¨ÔÚÚððŠŠO…2™lnîînk Õ•¡¡åå_š{ …HÔÞ.‰D£‘Hèw>gd4sæÉ“¯^>z´téèÑ+Vèè;öâÅèÑééÏŸ¿xñömc£BAšš“&mÚdg×Ú6f̈AAmmS¦œ=ûæÍÕ«AAÉÉŽŽ‹ݹÓ5·AÍUr¹T*—wÎvt'&VTó绹‰ÏŸçä|ècAªªNN£G77¿xñúõûÏRiEÅ»vÍ{ãÆ÷H4!(Ri§×|×_i4;»µkïß¿|Ùß?1qΜAƒvîÌÏÿ’_÷ÏD¡`±bbæÏ··ïÝ»­­¾¾Kn’H­­OžÔÖ._>f̰aÚÚ iAÄ⢢‹**úpª© 2{vÿþJiipð—çYOHÿžœ?0ŒÊ;¹\&ën†¼îÃZZ>>óæùø(+Óé<Þ¦McÆÜ¾}èÐÕ«ÇëèÌ™süxhèöí™™öö«VEF~ûXÏí=+D"ijJMŠŠ­­ýØG$êé ¸q£§§ŠJAAnn[›±1Ÿ—w÷î£GïÞu=%’HNNºº\nZZVV}½DÒÕR2ÙÚzÕªsç-21)*ºreìXoïýû_¼hi!ÌÍ}|æÍ[±bÙ²©S§N2DY™@__w÷´´ÐÐ'Onߎ‹»x±  ¼¼¤¤¤¤ªªgüõþ«PH¥"‘H„&ƒPSc0€îEÃ~™Ÿqþé-&ÓÙyæÌAƒ@0>> àÕ«ÏʼnþJÉ66“& ¬¤”ž¾gOLÌ_Ŭ¡=*³X b±ººº:‘ˆ ÑÑ‘‘®‹ÖÖÚÚÒÒ’±øïº¼ÉdMM­­bñçZG$zy D§9’›ûþå¼P˜}îÜ¢EsçþZò­{òç?ª Aºº‡ÇâÅ áá£F|œ6U*­ªºqcõê#TT._Ž‹ =¾¢bàÀ©SÌÍåó:zôíÛŒŒµk×®uu}ð 001ñGad²––Êʺ:‰„JÕÒúºï,¯¯?jÔÔ©††••·nÅÆ~>O R©HÔ%æùüôô7’’äòÐÐq㜕”¢£££ÛÛDwjáRS“ýµ¤§Baiixøë×rùõë»v-]:|xVÖáÃhÚ^míá×.ݹsøp"‘LÎÈÐÐ@=²ÛÛ¿&þär¯®.-íüù¥KmmÃêª::Ðç†a‰F£ÓÉdéèàñ‚÷ï礣£¬ìÉ“­[wïž5kòä?þ7ÎÑ‘J}ö,*ŠÇûÒ³’Éýûâååâbd¤¦†Ç … ÅÅyyuußâ®÷-‚BUÕÀ@EAØìº:.÷KO |~fæ•+›6efvþ®­­¶öýÖ¢– J?—¦70:tÀUÕÊÊ;w23ßmÿø•**††ÊÊÂá47óx]mBÅZpðÁƒŽŽ¯^Í›çë»|ù½{mm&&kÖ|Üw4š£ãºu»w÷éSXøÇÛ·gf b±TzãÆ‘#W®¬_ÿçŸóæyx0™wïÞ¹ÓÚŠ¶E.ïèàr;:€LVV¦PPùÇ}B¥ZYÍœ9ož¥eNNHÈãÇYY]‰ie²ÖÖ’’¢"@]ÝÑÑÐD€$¤Óœ||zõ ߾ݢíPNjIDAT½»¬ìý¿B²²«ë˜1^^RiLÌ;™™<Þ·+¾‚ö=àp$ß5C@PIÉÃcß¾sçvìÐ׌?þĉ/å×úg@‘¨¹¹¾þã#‹HTU…^±,_>aB¿~šš§NUW×Ö"“éé¹cÇ–-“&Q©­­-- ™llìá1j”ŸŸ½}}ý¡C^^ááŸ^0A²²ƒÃìÙ[¶,[6w®££¹¹†šô™Åjl”Ëõôðx¹œÉTVFíOïa¿FOΟ®±%:ƒø»VŒššƒƒŸßìÙ£F Ú«—¶6™,‘´´””‚ šZw›ðx=½‰W¬èÛ—@‰RS÷ï=zΜӧ‹‹Åb “ëêúô ¸~}Ù²Œ¨¨‡?\ÍŠ£ã¼y;wšŸðà±cÉɨ­¼'÷Çž–?2YMMDÄõë55³ˆF36öñY¶lݺ  •+ûõkl<~|ñb/¯ßÏÍuw ‹ŠÚ·OW·ª* `÷î7o8!ÍÌæÌ9qâåËiÓ´µOœ8}úÐ¡ŠŠÎÛqRS:tÙ²%K´µ_¾\²dÀ€ââ@°ÿ;##ƒƒW¯67/- =zôàÁQ£¶·¿p!<ÜÃ#,,((8øâÅo¬{‚oÙÅâ¼¼“'ýüæÌQV¾}ûÂ…?ÿÌÎî×ïèÑéÓçÎ={öõë­ö?‹îœºÀᔕõô´µ />¾¥å×Iýåñ16îÕ‹ÉlmMI©ªú+ÛчˆD:ýK±mry}ý³g§NmØðìYO>§­Ý·¯®nmmxxbâ‡~6‚¾þÀS¦ØÛWU……=}ZSÓý °žožß&þ“…bq8ccÿ úõkh »t)'çó)ID(ÌÏ?ujåÊeË^¾41Ù²åäÉI“ŒÑ›ÇººçÏ÷ì¹s&O^·nРoIDðm“BKËÒÒÈok+)ùš`bâë;s¦©iuõ}Þª0¬¬¬¯¯¤¤Pp8--ï[hx¼ŒŒG’“!ÈÙÙÏÏÎîGÅBÉvv‹­[7z4—’ráBtôçœÔ:Q(ØìçÏ—-;v¬½ÝßÿÁƒ²²¢¢ÖÖÖÖ¢¢²²[·ÜÜÊÊ""š›…ÂŽ>ÿKI"–—ß¿ãÆ›7UUr¹®î˜1{ö\½š—×ÒR\ÜÚÚÔ”‘ÑÐÐÜ\TÄç×Ö>~|åÊâŶ¶JJG.ooohhk“Hðx*•LþÒ- ©¨ŒqâÄóç……ÑÑ;vÌëéicceåààæ6cÆï¿_ºôðáÚµ††D¢šš¹¹¹9ƒñ½¾Ý ŸÏbñù8œ††¹ùß©ý.—óx55uu2™–––Ö‡1‚¡á¸qþþúú55¼|ù¥9‚ŽÎ!Æ©©ÕÖ¾|YZÚ%âÑj“'÷ïßÖv÷îÁƒOŸ67nô!ˆÁpwß¾ýС9s::®\Y³&$¤+TÚÖV^ÞÚ ‚**šš‡ØÎÞàr++‹Šø|5µÞ½ML>õï‡ MÍ‘#7m:rdûv??sóO£:$’––ÂÂæfÒÒ21a2?vE R'Ovv€„„'Orr:Ý<@PI©ÿõ룣Ÿ> ÆÆË—?|xûöáÃnnÍÍׯoܸlÙˆC†Lžy’˜(ÛÙajú±t'“æÏŸ7oÊ{{N,î\£=»?ö¼üÁáTTll<=—.=tèÒ¥¬¬ššèè°°íÛGŒÐÓ‹‹[½zìØÍ›_¼x÷®££©)<|Æóç››'NÜ¿Ï//ccw÷ .]Š?vÌÔôÁƒ3æÍûã‚‚÷Õ …¢¥åÉ“U«¬­mmW¬¸q£©ÉÐpåÊððsçfÏniÙ¿ßÕÕÎnêÔåËŠzû¶¼¼¡ÏMKKI©ç’g|Ïþ‹ "QYYXØÖ­nnŽŽË—ß¾­¢²téóç99ׯïØ1|¸¦æÏ/ ûíçŸw5>¿­Çee33]Ý_;öí{Q(­áôm­… *U_ßÐFëèhlüØ×æçÚšƒmaÑØÑu9ÃZZÞÞçÎÅÅ<¹hQÿþúúÝK3Ò³ò­{òç?˜¤Fsq .-ÍÉyölÚ´¿ Ca0|}¯\a³y¼›7ÇïJƒ@$ÚÚ®Y“›Ëb……Íšõµ`ïoƒD24œ5ëîÝÌL.7)iáÂÏmÌ]ÓÇÁaÏž¸86;!aæL#£/ÒÐSÉÉÅÅEEûö}0Ah=–þýmlþ^öÔ’¢¯ïë»sç­[AFÆÝ»³féëw/ä‡c2 -,ìímm TTÈduõ‰>ÌÈÈÊÚ¶Í¢{AÁ8œ¹ùªUs8ÕÕ'OÎëèØ•ô†©TSÓÑ£wìÈÎnmŒÜ¸ÑÒý‘èè¸wï«WAAÁúõ_ª :‘%%q¹oÞ>Ü¿ÿû):—¨³sPÐë×!ìwî­§×ݰpTQ:ôÏ?›šÊÊrrví²³ûþ€LÒÒò÷ e±ª«6¬32žžTUq¹¯\ifö¥9ÃZZ&œ:UWÇáÜ¿¿t©‰Éû¯„a“+ž>mmMH˜6M_¿sVue±‹Ÿ3gôèuënÜhhhjºqcùr+«ÇŒ¯^­­Íʺ}{Ĉ3-‚ ƒáãsûvVVccX˜——ªjWߣ™þ(((--)9r¤wïÏe‰ƒ 3^½***. ú¸0•êâræLUUnî£G~~]a¡¤¦æï™›[P°w¯­í÷^)P(½{Ÿ}æÍ;r$7—ÇËÏ]³ÆÊêÓUD§~òdC‹:{v§òŽÇ[XlØÕ©.ÖÕ…„¬YóiîN]ÝÛûøñ¸¸ööÒÒÝ»ÝÝ»l{>ƒ«ëÖ­EEíí±±ûöõëG£ 1™ƒ:ôò%WUu䈯¯šÚ—zˆÁðõ {ó&-mïÞº)”~ývï./oi¹qÃß_Só}8cĈ[·23[Zbb-êÝûÛŽQŸ®"]ÝE‹’’ŠŠrsßWûaXCcâÄ7Þ¾mo/)9~ûöiÓÜÜLL44ÔÔTTTT´´ ŒŒlmûö8pÒ¤Ù³Çëß¿Ë9 ©T+«ÀÀçÏ32jk=š1ÃÚúgæÏ‚ €€/ ««OŸvvþ>yAZZ~~11lvRRppÿþŸÊU*uàÀK—Þ¾mk{öÌÇUo@F33›2åøñÇ[[‚ÄÄ;wœ¾tñÓSó·´Ü¸1*ªµ5.Í Ãzzóæ=xÀfçä¬\icó±\$íìÖ®ÍÏok{ð`Õª‰W®Œ‰in..ÎÈ8thà@uõÛßy]ÒГóàÁĉ_ö^ÀãÍÍ.LKkjº{wΜÎ㠉ԫצMOŸ¶´de­Zõ¾r÷³öÇž“?8™¬¤ô¡û6lXXØ—$tÝ1™îî;w>xÐÚÊfGD?>y²±ñ·¬ÎØxöìääöö¤¤S§<=»Ÿ{íWÜñx]Ý#6lˆ‹c±ÊÊêëŸ>]¼¸_¿ýlßþùüyÁððؾ=?_ (++,¼|ÙßßÁ¡{^?S~’Höök×fgóù))W®øùij~IIA2ÙÄdÞ¼û÷33‚¼¼Í›Ñ‹— ÒÐ5êÉ+5õìYw÷÷W .\xÿ>‡SSsâÄ”)¦¦_«ä÷¥çí)ùÖmùƒ¥ùîì°>}Ö¬ ¿ïÞß~[°`ôè±cÇ7nŊǯ_¯®Š‹ß¼Ù¸ÑÚú{oî©TGÇ  èèÈÈœœÂ¤¤úz6»3ýeCCVVhèéÓkÖ jnþW÷¤®>~üÅ‹MMuu'NŒÞ$‰ffë×''—• í퉉‰‰Ožœ?QTTRÂã%'/]ÚÝT¨]0™cÇ>}ZXØy´íúÙÚZQuýúŽkÖLšäàð¾zÖ½EA$êêöéãé9}úêÕ[·Þº•œœ™)´¶>~|ð ·÷§Ç„oƒBéÕkٲׯÛÚJJJJž>Ý»wÛ¶åË'Ož2eÒ$_ßÉ“—/?r¤¬L ÈÍMM}õêå˶6 -íùó-[úõûrMÁÈhùòØØ‚6;=ýСի'Oår Ö­ûüÍß·ÌsUÕÑ£¯^MKãó+*._Þ³gþ|oïáÃvwG¥rvv{{fæŸúù}ªÂcÆlÙµn]¿~ŸW°{jþ #gÏ66VU @¥¢v|?¿û÷‹Š²²®] œ={Â/¯qã¦M[¸ðüù·o Y¬çÏ'O60ÀáÐ4“'oß¾`Áû®¿=¬£3}ú­[,VyùîÝýû½Š§­=}ú“'99MMqqAAAA§Oß¾]W×ÒòøñÎ..ßvKÞûcOÊŸ®÷‰tº¡á´iÏžòùéé»vmܸeË–-§O‡†^½Ÿ›ûö-‹••µn]¯^d2…bk;gÎäæòxeeeemØàïÿ¾ßÁ羃É<8(èÉG xû6!áöí½{÷îݼyÁ‚eË.œ6mÞ¼ùó§O_¶,0pñâÍ›wïÞ¾ýÌ™+WX¹òÛÖÇÏØ?‰db2zô™3ÙÙ%%AAÁ‘#Ó§››Û;ÿ|N[ÛËkÍšçÏ;Ó‹§¥½}qöìÕ«/k–¹ù÷žã~ ¤©éïýzKKuõþýîîŸÊ2ÙÔtÖ¬+WbbÚÛ‚ÜÜÜܘ˜óç¯^=wnß¾S§Îž=|øêÕ[·._ŽŠJL ?}zÈ÷/-~–|ûù¢ÊŒ……]ïÞ?ªKJòò22llœœúöµµuppvþö÷Ö×××××ÿüA'ut\\¦M[²dÊ”qãÜÜ,, UU „ööêꬬgÏ._>þäɇËË»N÷ᶦ¬ìä4t¨³³¶6mmMM••åå55MMÝñ'…auuw÷)SæÍ35MI ¾v­¬¬ÓKg2­¬<<<=GŒðð°¶ÖÕÁªªGNúóÏ7o¾7ì‚h4CC33## E&ÚÛ9«¹™Íæó? sûÞe§¡áïçΟnÚÄ`ÅÆ>yòèÑÕ«W¯FGçær8Ïß–HÔÒrr7nÚ4Ÿ!Cz÷66ÖÓSU¥Ñðx‹¹Ü¦¦ÚÚ¢¢ôô¤¤§Oïßñ"5µ®îÛRôBnm=yòºu‹Ïž=|¸µµ®.† \nuunî³gçÏŸ8qìØãÇÕÕi"Ð1TRÒÒRS“Éšššš¾')Z‹fĈñ㇠óðpt44ÔÒ¢Ó 4¾¥ªêÅ‹ ‚‚ÂÂ>MÍù=›Ž–VŸ>#Fôê%‘dg'$äæÖÖ¾ÿ4_ÞðxUU33++SS:]$ª¯/.®¨¨­ýp¶ƒ ŠÊ˜1çÏgfž<©«›–vóæÕ«>|ï^jê×b׺ú’Étvž2eúôñãÍÌ¸ÜØØË—ÃÂbbÞ½ûžP]N[{âÄ£G÷ì2$"bÃÔYðsq@ H$êè89¹¹ :`€µµ±±†•ŠÃÉdBa{;›ÝÒòî]yyqqrò«W™™ÕÕ¦ÏA•áÃwî¼|yÒ¤ÜÜÕ«—-»{·²òK„ÇS( '— …BaWÄÈ×f&ƒÑ§ÏΑ‘/ŽóúõÂ…ƒmÜø¹B?Z–öêµvmRRx¸¥åÞ½nn‹ß»÷-9š>…DÒÕõòZ¼xÉ’ FîLÒ “µ´”–ÆÄ\¾¼gÏ……ÝIÑÓóýDmmŸS§Nrq¹áÂ={¢¢ZZ„B112dñâU«&O1ÂÉIW—NW(8œÒÒ7o>üãƒïßÏÊúZÒ[@­2ë×/[F ܼ¹iÓ•+••__ãhº‹Y³Ö®2¥_? åÝ»¨¨ ®] /,¾¥ïz~ü‘ò‡Éôñ9s&/ïîÝáÕ•Äb§±±¦¦ªª¦¦´´°°¨('''§°077'§¨(777·¤¤²²3[’ÉFFƒ-_¾{÷Æ6L˜@§_¿>tèðá«W'')e §¢bkëî>z´··‹‹££¥¥žž––²2…B$BB!wtttíílvCûw•• 7nܺñ~ö¼jÿýú÷+)ÙÙ-]zõêåË{÷ššÞºåáÑ¿ÿÑ£_ŠNûüšøQçŸoß!••íì2dÈWW33==UU*‡“Jùüææ‚‚˜˜ ®_ÏÈhkûüwÿ<ù ÃL¦ÝðásæÌžíã3dˆ££š™¬P´·76VT¼}õðá¥K¡¡ ••ß²óö$$’ÝÊ•‡ïÚ¥¬|áÂÌ™;wfgœÄ¥ó¹””LM{÷>|ð`GG++}}&“LA‰D àr9œ††ššÊÊììׯ“’²²š›ÑÝïŸo_S000~Ð{ž_·jÅ¿N]ÝÁÁÝ]M­¼üõëÂB>ÿß’ôãû€ M[ÛØXYY$jh¨¯g³;:¾÷‚“ÉdâpíílvGÇyõÀ0¦­M§‹Å lö—ëFý/ÉÏÿ2ÿáB±¿˜jÔ3Èd,Vvv\‹…õÆ…‚Ïoh(/ÿ–£‚H$›Ý3ÕŠþ]Èå|~C›ý_zfL~þ—ùO¦ùÆÀÀÀÀÀÀÀÀÀÀÀø˜‚„ñ` FÖŠ¶·×ÓûÙÕX0000¾VR24ÔÓc2q=耂x¼’“©¢¢¤„ÃaòãW‹Aú?¨Ôv튌ܹ³­méÒ1c‚ƒsrD¢×3€ ŠŠÏþýwïΘ‘½`ÁìÙ7o–—ÿßi<ÞÂ"0ðòåk×ìì.\ðñY´èõkçã¨ÉÂÂßÿþ¥K%’S§NŸVR:wîÅ‹ùósr&N5jõêׯÛÛ?~ ++;8 4p ƒQR_[û=9Ýþ ãûo‰DCSSE‚x¼æf6[ ø'ë€÷ìsª«««Óhr9‡ÓÜÜÖös2Mý;Àátu½¼¦N:ÕÆ¦½ýùó‹=ÊÏÿû™Ï HEeÈÍ›7l˜9Ó̬«‚Š\ÞÖ³ÿׯ—•ýUX9™li9}ú;¯_²Ù‹ðàAKË˦R==CB’’þü–,10ðó‹‹ãñ¾ýi™LGÇ9s–,2DW÷ï$ –ËÛÚâã/]º~ýåËÆÆµ"APYyÔ¨³gSS7nÌÈ5jèÐs犋ÿÝQ< H¥ššNš´dÉСlöõë—.EGÿ¸Ãø'G–Étw?p`÷nmíóçׯ¿s§¬¬{ù+ 3³ öìÙ´ÉÍíýr$bqYÙ½{[·%$ô„Áèi0 hj_WWWW­¥åß™Ÿ‚ÔÔ†_±Â××ÐÅ*,llüQZ»ÇËËÑQE…Íf³¿”þZ"in®­…aŸ;Nœ80!!0pïÞ––iÓΜY±¢oßÏU!ÌÍçÌÙ»7$ä÷ßûöe0zæ.õa|¿ÁÂbñ⤤ÊÊ+Wüý¿Tõáû_ÿ×À°¦æ¨QAA99mmééååeeiiÍ͉‰óç\»çß «© °}{DDJJ[[}}bbqqIIJJS‡“’µcGïÞ_ªÅóß76ž4iÕª]»öî=ÛÅåûÊì~NúQ©¶¶cÇúù¹¹I¥yyqq±±‰‰±±qqéé%%Î×' H&››Ož|ùrTÔ¶m4ƒáí}î\LLCCSSvvSÓ§?KKOòöf0þ™ù¦ªÚ§Ï’%[·Î;x°®.…B&“É$Ò·ÿ¤P45ûôY¼ø·ß,1B[ûÇ®E*ÕÁa„޽q¸‚‚ŒŒºº§‘ÉNN+Wþþû… .:ô­?÷ìY½ÚÅå[ªZ––K—?þøñÁƒ..ïW`APV.È‹ñwÀáTTœçÍ ŠŒ¿¥ŠD;wÎ;þ·Ü,âñ †‰‰£cïÞýúõëçèèììèhmmkkeellb¢¯¯®®¬L¥âph횆†òòââÔÔ˜˜gÏ®\9þá䤯ÆOó8œ™Y`àÝ»iiAAvvŸ«7=hÐ;ÍÍóç½ummaa¾¾ƒÏ™óêÕûµ`ØÀ 88,lýz  ˆDMMss2™NwtÍÈøtÿ‰Øl«±±±ñÛ lK$l¶Hô-3M&ãpÚÚÔÔ ؼÙßßÉi÷î´´øx4ž@P\ž ‘„„øùÙÛkj¾~]^®¬¬©I¥J¥,VUUyyCƒPøwg4¢óBGgâÄiÓ\]·n}û66¶½@‚ðx"‘@˱CwO ¥5iÒ¡CÉɦ¦S§;öâECÃ_­,™¬¥%+ëþýë׳² H[§NݾÝÑëÓ3ÿQI"©®~ö,(hãÆìl2™B17 ¼xqÆææ#GvíÚ¹35õKÅàär6;?ÿëÛ:on¾dÉÅ‹11‡»¹©ª‚´µ•–fe¥¦¦§çå%%Ý»÷êUhhuuss[›@ P‰ †††‰‰ƒCß¾cÆÌ›·ÿ‹ëÖÍ™sêÔ„ 3gnÞÝÚÚuX•É**Î 02 Aý×Éd—ýûÃÃoÜ06>~ÜÃcêÔgÏþª4#‚(‰@ðé“*--ññ—.ýö[s³’ ¥åí|æÌÀáá¿ý¶kWxxCçGg…B(¬©y÷®©©¤dÛ6gggg…B(”HФ¤={ÊË?ß "¨T<^.‰ÄâudîÙñý7Aêê®];a‚DrýúÈ‘ii_/o×Ýׂªª¹¹†‚TU]½ZPÐÚ*“I¥ryCC[ÛÿŠ,!õõ‡ é×F+/?>8844#£óàœžþðáÙ³ééþ7åì§ÈdµµÏŸ_¹²ÿóçÿ\+@J56öóÛ¶íàÁÓ§—.ÕÖ~ùrÓ¦€€5kª« ••Y¬ÒÒä䥉dn>sæ‘#TêÇ ž?Ÿýq¡L…‚Ç«ªzó&226¶¨èËXÉÆF_¿o_[[ÈÊŠŠzö¬¤äË.¿r9›]^þ©rÇ­[÷ôiTÔ¢Eß';[Z*+9‰äûå‚Èd|~k+‹ÕÐÃ0L"™šöïok A¥¥·n%'WW××wª‘"‡#‘ OÃii >-H´¶<Ø×wØ0uu¦ÓÝÜ.\(+;D.„a`±bc ˜9óôé„6ûïî" ưa‹yx0™/_>}Êá`ò£çJß½KL -)17Ÿ1cèÐÅ‹>ÌÊrvÞ·oâÄ¥K÷ïg³1‡Êÿh¡X«¾¾¦æGýD?“Íf±tºÉÏïÎÈhÖ¬äd6;"bõjsóšK¡˜›{zN˜0l˜®.ÖW%¤RÍÌæÏ¿?+K hj:}zìXuõ/ßÁ°®î„ Ïž55%&ž<9x°žžÍ AÞÞÓ¦yyõí«£C$þç:}Ĉ³g««ts£RlïÓhÞÞ45ݼéîÞN=1¾¿:0ll¼tixxCC\ÜôéFFõÌÝ}ý×ç/™llìæ6hϸqóç?|ØÔTV–—wäÈøñ#Gúøxzzy¹¹é뿟ºõá>pàèÑY³ìì˜L=½‘#7nfLß¾³g?~åÊóçW®Ìšåà ­Ý«×âÅgÏ^»öâÅÇ»vM›ö~ìÊ·ƒÇ›˜¬]›‘QVVYyüxïÞ½B`XM­ÿ‰ûíØ±àà‡££ïßó&.îÆ?ÿýyæÌ† ÎÎt:Úÿ$’¹ù¢Eü±}û¼yï÷ kiùø¬YsâÄŽC†hjv}K÷Ç‹L¶¶^µêôé®–œ9³l™›“ùcq8}ýåËSSóò^¿ž9SCãk÷ëTª‡Ç©SoÞÔÖ¾~½k×´i66T*sçÞ¿Ÿ‘Áãîß?nœŽNç‰FFcÆ\¹RZZT”Ÿìᡪú÷nði´#Âà ÙìððÁƒ•”º;çLMçÏû–ÉŒ\·ÎÜü×qV%“ûõ NLll¼woøp•/.™Ü¿ÿéÓIIïÞ]½Ú¯ß–ü8œ¦æ¸qÇŽ=ûûïjjöé³{wTTKKzúªUŽŽÊ×ß«§·dIRRi)›ýèQ^‹UV&45EE=yråJEŸ·w¯“ꊂЉ‰·÷‰yy¥¥µµW® ô½3›FswÿóÏ––²²ÒÒˆˆ¨¨ÊʇGŽDg4îí}å ›Íb93thgŸu_ž€ fn>eJPЩS/_Þºvðà¤IÎΖ–^^»v/YÒ·o§„øvy x¼¾¾·÷ž=gÎlÙ2uª‰É‡3ét'§uëNÚ³'0ÐÉ ‡ï‘‡?TS3æùóôô­[i4&³oßÀÀóç+*‚²2@ ˆ‰9thà@ã[×<ikÏœyÿ~KKjêœ9ÆÆÿ…3Çÿ&ØÀ4š­íÀÆÆ\nffrr]]çM‘hl<|ø¼yþþ††ººZZºº::êêjj •J¡ÉD"™Œ %%ûöM˜°aCxx—KRGGiilì½{¥¥Ýo‚eeW¯®ZuðàŒ;v,]ê驪úøñíÛ,Ö‡wR ¨¤äîþÛoë×D¡H¥êêg΄‡ÖÖVXX\,›˜ rú4›}èÐСþþ{ö¤§wttÏ.@"™™yzÚÚÂpaáþýÅÅ–ÖÐðð?~ÆŒ!CÌÌôôtt45ÑþQV¦Ñ:=Ýq¸ææÇçÍó÷?{6?ÿs7¤ Ãx<*?Î~ÔóãûkC&[[/X°t©¾þë×›7?}ú¾SÎxý_ˆœªê A›7¯[ggÇ`èèÐh@$NºjÕ#FÈåbq~þ™3&¤¦¾{'H¥€Çkh¸¸L™2k–­­šš¹ù¢Ežž$Rlì™3þÖÒ"ÖÕuÕ°'“·o¿y3"bÙ2‘($dß¾[·¢¢ W¯yó~ÿýæÍ¨(MM?¿vìx÷ÎØØÇgÊ” ¬­‡OK{ü8:Z(1bëÖ§O++ÓÓ£¢^½âóçÌ9xpãÆ'O>\° -M øöç•Jkj>¼r%;{ûö½{÷ìÙµ+&fñâíÛ=ª©ùüj#­­'M5Êц³³££CB¢£ÄÀ`üø;¶n SV./·¶ž=;>žËE"ÑÆfݺÐШ¨Í›aøÎýû¯_ ‘Ëœ–.=p 4ôæM‰dĈQ£._®­•É@¡X¬ÆÆÚZ%¥.%‡ÓÖöõ]¶l̃ˆˆ'O~û­ó÷ššC†øù‰Å>|éRI zãA †ƒƒÏÌ™~~"щAA/_¢k {ã PˆDMMÕÕïÞÕÕYZúø¬Z5s¦±ñ«W¿ÿ~ölB‡ó3W–@°v­··™™DÂçw¹^ W®LŸîïO"……ݽòì™X¼páï¿s8³gŸ<¹x±¾þ£G«W{{¯_ßÚúÏÚ˜AQEi×®¬¬ÂÂ]»¾÷“¤¦æüùÉ“W¯ÎÌü’eýÛe팣GS( «V¥¥±Ùÿ”C©LÖÚš™™M¡œ>}኱±žžëן<9zôõëçϯ\1p`PPQº'áñªªÖÖ>>S¦ÌŸ?þĉC‡šš‚ ( xÿþÔ©ÞÞüQVÆáÀ°…ÅÖ­ŽŽááÆÙÛ3™0œ™ÙØØÑQQ¹sç¶m S§ž81fL¯^Ê«WññÝ‘%ÒÔ}㋵dI@ÀˆZZŸ·DwOžƒáéyôèÍ›—.MÚÞþøñ©S—•ih̘ö𡊊ªª®nSSIɾ}çÎ¥¤´·“Hß&o·oÏÍíè`³[[UUGŽœ3gÓ¦ššÛ·ïÝ *+C%Š’’‹ËܹëÖÍœ©¯¿cÇÁƒ¨¯»ò°'ç ‚ÈåNJÊñãK–ô훟¿iSDÄ£Gsæ,]ºg¯opð!·nÕÖb–¤ÿ ÿy‰L¶¶öõEnß..îr™€ :ÝÄÄÁÁÂBU•Ïoh¨©ÉÈ(,LOoiár;:D"‘H, ùü¦¦ÌL.÷Go—2YSÓÛ·ÑÑ0_ôtt´¶–—¿{÷å ]„aA¹\*•˼ðûUÇ·§A&ÓÃcÁ‚iÓðø'Oüýcc¿îèÑÝ×ÿ5RimíÕ«þþÞÞW¯R(Gæå……9;ïÜ9qâàÁ!!_Ž "ÑÚzìXزÅÅÅ×÷öíÊÊOgîì¼zõÂ…iiëײ|ù¥Kõõr9Àpd$‡ca‘Ÿ¿gÏÂ…ýû>Œ:âÀ0J$ÑÑ›6­]{è“©©9yòýû‘‘[¶lÙrú4“É`øù=}j` ªŠ*Ý;ÔÈdeegÎ,Y2eŠŽÎÙ³!!7oÆÆNŸž™yçÎÖ­«VíßåÊÛ·\nצÚÑ¿fÍìÙññ~ §¤‰#Fäå­^íꪯO ÄÇs¹0lc³dÉ’%––¥¥»vyy-^|ôhe¥T w簾Òé}úÄÇ/Xàé©§RU%“ 99W®çäü132š?ÿÚµ%K¤Ò·o·nݼ9>þï^¿m¼PÄâÊÊ[·8z”FóðÐÓ›;wòd“j•("Ÿÿé… ‚tt”–ž?¿dÉï¿ûødfîßéRHHkkTÔÖ­S§º»gd|ëú€aUÕÞ½ôð02"‘>¾{&“œtuÑX—1cÆ'“?v×CŽŽªª””è茌Ý{@† N&«¨øýwÉ“Ož¬¨J©TW×ß~KL|ø°oßë×=='M:t¨°=†âñúú3gž;³tieåòåcÆEE57Ëd"•ŠDO5BW¦‹Ë´i£G‰ ¾~ÝS‡YACÃÅ¥wo<>//%¥®îóYOe²êêÐÐß~Û²eâÄ;w¶o;öÂ?¿9sD>}ˆD4"V"QS9òÞ½‚‚à`—òòèè«WOœX´hÓ¦ÌL'§›7ccÇ“H**jj8ôÚH&«®¾{÷øñ«W…†…¢ËÊ‚ b1›ÍãI¥x<…B ü]Û¨BÑÚš”tþ|RÒ‚7Ž­­ýôiuõ§¯ëŽwnÑ¢¹sÿ™¶)bq{»X¬P@÷ékm½jÕ¹s‹™˜]¹2v¬·÷þý/^´´ææ>>óæ­X±lÙÔ©S§¢¬L €¯¯»{ZZhè“'·oÇÅ]¼XPP^^RRRRUõ¥C ©ª:9mlÜÜüâÅë×ïûƒK¥7nìÚ5wîç)!†!ŠîªGD&kiih€ ‹ÕØØÑñ9¡õ+oO€&EX·Îã©éܹ‰32¾~Ôïîë{žÖÖ[·öî}ôèKGmAGÇÉ©W/*µ±ññã´´÷cóär+--%¥®ŽF>ÜÕUW—@()@ÒÒ””²2¡Aìí…B™L.¯«Ëϯ¯‹€BéèÉ‚ ½™GsVu™¬¹ùùóÍ›'M23»qÃÛ{Íš}û¶n ~õÊÍÍÙyÒ¤ñã—/ö¬¥¥«µ0¬ªêèèå0aBÿþöö****ff&&x<™œ™I&CêZgié䤦&UT(ªªZZègˆD%%2{¶®.‘UU[ÿp8ƒñãO êÝ;7wÇ_ßË—ËËTÇ¿¯ÏÊa0,,FŽ\´héÒíÛ7n5ÊÚšD 33CCCCcbÄâ^½¦N]¼¸W¯ß‰ AqqTÔÍ›11ïKH"ÑÖ60ðèÑ7Æko/((*z_IF%|aan. ¸bņ ¾ß&ÓÊÊ‚É|ð`út3³Ù³““ÑD²Ba0Èd‹Ùl‡Çãó%CÃyóvï?‡ [¼øØ±ôt6[ A‰NWU¥ÑäòŒŒ{÷"#I¤  ÐÐ{÷‚Ñ£‡ Šý|BŠî‚LæÀK– Ë–%$|ZâGŒ’ŠŠ—ב#aaaa^^oÞøùõí»}ûË—_ÊR(“ÕÖ^½êççéyã†T*J$ºkJÂbÅÄÌŸooß»w[[}}{{çú!‘Z[Ÿ<©­]¾|̘aôµ((¨®–J@,.*ºxñС¢¢Û¦¦6dÈìÙýûS(¥¥ÁÁå忌„BÁå&&^¸˜¨¥uà€¯¯±qPЗûæ[ä  ­mggf†ÇWW߸ñæMssçó*lv|üoߊÅãÇ«¨|¼ÅãcbŠŠ„ÂììÐÐÈȦ¦Y³Föñ10¸x±´´¾ÞÜ|ܸ¡Céôüüàà¸8ÔÚÝÝöÿ\p8UÕ^½ÌÌ8œÛ·ÿýáCôb ã¿ÃZAÂá´µûöõñÑÕ­­ OL|ÿø‚¾þÀS¦ØÛWU……=}ZSó3ëæ€ …bdÔ·¯‚ÔÔdg¿Ÿ´‚ÔÔ†]¶lÉmí—/—,0àÀ¸8ìßçÎÈÈààÕ«ÍÍKKCC=xpԨÇíí/\÷ð ¾xñÝ»o¹Aý…}|zõ ߾ݽûÃÚ¤¬ìê:fŒ——TsçNf&÷=›¬B!“¡·Qx|w ‘heµ`ADÄ›7Ç_¾ìââçwüxyù‡"÷Wßž€H´°˜4iåJ;»ÜÜfάªúº8ïîë{¹¼¶6%¥²òË·„0L¥2™T*…mmBá‡3Y.ïèàr…B PTT¨TtF)As3‡Ó•žAd2¡P,þñÏ+—s¹yyOŸîØáç—–†BCž=ûôéØØÃ‡ssE"ÁÜ|Ñ¢óç_½ ÒÓ‹?{öæÍgÏž>MIkk/¯ @@°ó(L¡€ 6nÜÍ›11ãÆ}ú­lvc#ÿé5§£3uêɓ۶¹¹9âêzáBwT™÷UÆï¯_<žÉ´´tw>ÜßƌɓgÍò÷wrÒÒ ssãâÂÃKK…B¡R--ûöíßÿsû‡ŽŽ§çðávvqqåå÷î}¨ uÎ4¡ðåËíÛ==»SéPJN¾zõóÇᔕut”•@$b0¦O?qâÍ›)Súõsr25ÅãÀÚúäɲ²É“ÉäÎ;o¡°­­¦æÝ»ÆÆúú¢¢—/ccuu§N½{÷áÃöö#||NœHKûþ ‹0¬­=lX`à!ÁíÛ>>™™è“‚ ‘¨¥5`Àĉ~~£Fõíkh¨¬ ‚<^]]AA~>›­¡Çƒàûªß×¾CKkܸ½{¯^2¥©iÛ6w÷ßÿ²jôþH$Bá—ç<‚ˆDÍÍõõK‘¨ªêÑ£èè¶¶åË'Lè×OSóÔ©êêÚZa2==wìØ²eÒ$*µµµ¥E"!“=h4--%%T„}ËsP©ŽŽ“';;@BÂúõ99Û¾~}tôǾ¾ÙÙ+V¼}ž™Éã}ϲ\.°Ù ‘¨¬L¡|›ŠAjj¾¾;vÌ™£§—šºoßýûŸÞ›÷ôøB•ja1t¨··§§‰‰LVXõúuUUO”¹ý¨TW×ÀÀ)SŒ'OÖ®}ö¬±ñëG‡î¾þg€ r¹D"“}¹Qç(¡ˆD:u“yTˆDH±¸½½3ºAd2±øÃOEéÙq’Ë››££¯]KK‹ÇŒqq±²¢Ñ@07‡srÚ´iëÖÞ½SS.ôôœ:õî]4¡< ëë3‹}»#¶·wt æëëæ6gÎë×ßâ…&rÞ½ûðá+*vïî×/$¤¤äkªÌǪÇdêêÒé_þëñúÕ ml–-‹MHX½ÚÞžÃ)(xþüÞ½ððÀÀÿøÃÍ-$äÊ•Aƒ.^ܶmÖ¬‹?—­³ TII ù¹ÏÃ**ææ††dr[[NNZÚ½{7n¼|yê”PÈçóù<Ççs8 …“ÓÕ«ùùü!Mž¿"“ñù\®LF$ÚØŒ={¶MyùÞ½S¦Ü¿ªFè«D(llÌÏÏÎ./ok“J¿u¡S©ÖÖþþC†‰©©«Wgeµ·wö›ªª¯ïÎÓ§S(.L™²|ùíÛµµßï^#‘44äç³Xxü„ VVZZx|\÷å›}ôqÇŽ'|}››ws{üøsA“=7¾ÄdzäHhè¾}jj11×®¥¤àpK–„…MŸ>dÈŠsæìÚ•’ÂçÿL‘ AC†¬[7fŒ@píÚˆéé_¿«îîë$’úúÜÜÒR‘há¾}mlètÊËC7Tb2mm{÷Öщ**22êë¥Ò΂=§AnnneE$VW°Xï[zÉdee%%<^& Q7>$‘44ŒŒh4.75µ¼¼Ëî A**ýúej Ù‰þV.ok+*JOg±””†õô44$‘^¿.,üºµ†µµ}}ýãÊÊ}ûF>}º¨èó«A$@&#µ´èt4«£Èd“‘#==UTàßg!úbqié³g;;߸QUUQÁátÊ"ÑÊÊÅåßð d²™™‡‡‚TT„†J¥nnS¦¬\9|øÇ¹¾ðxM;}I$ E.ß¶íèÑ[·,øð"I&++‹ˆØñÿÚ;Ó°¦®­g¦X@°LJ£H@1€„áVDʽôA‰ H­‚¥u¸ 2<(´ ˆ-¢Xe°¢eÃXÊL „)@ &†„0„¼ry@ë„¢}m÷ïC¾pØlÎÉ^g­½×ú/¿¦¦·wQ(ÎÝýðauõÚÚàà””ööéi…Ú¼ÙÙùØ1míššƒutÜÝSSŸ•’”Œ‹»q£´4/o÷n"1)‰Jµ´LK;sÆËëøñ˜˜ÆÆgë>%$V®Äᔕ…B«½ýéÓsÖÍå66fg?z$„‡ù¥žž”TRR^Þè(…A¡¼ì„où¿µ4Ú/¿<|ÈfŸõ`nnx¸ àС­[ Þ|Ž(”®®­­••”Tc£™¼P»#ÎÌp8OŸÎÎ**ffë×ËÈÐhµµoÛ9hf¦§§°ðÑ#6ÛÇg×.gg]Ýøx?¿ÚÚç –!qq•ÿüÇ×7##.΢½ÝÏÏÁ!4´±ñE®âû{¾0˜‚–-'Näçõ•¥eddKËÔáë[Pp挱qdäîÝ¿ÿÎf°E,¶f ‘èá±y3~ë–§çË\á·½þÿB!‡SUuõjR‡“•uùò÷ߟ= ܹC¡@ 69fdÄf'%¹¸üñ‡#ZZ¾ÿ»¯ `oŸœ¼gO[[bbL ‰ÔÔ48ˆBé踹òxùù^^55ããˆP(.Î`”—?y¢¬ìævæÌ¾}eeQQíí+VØØ=êç·i ,v4x¼ææèèk×h´üü®]‹Ž KLlhàñ0mm}ý™™ôt?¿7ÚÛù|(TZzË–‹ýýÿýoªµõÆ >ßÐÐÕÕÝ}ÞýŸž~ò¤¼<))+‹ÉäñøüÇÉd ;sÆÓÓÍ ­«“‘±³óòúúk @X¬w³¶²²6lßngg`€Á ÑX¬¦& …*(|þ9‘¸{÷܃QW—žž™I§¿ÿd33N{{gçÇúî’”ÔÔ´±!P¨ÎΘ˜úzƒBHIápž?G"q¸5k¬­utffŠ‹sr’“©Ôg­åÜÜøxW×Ó§o¿ý…B¡üqõjPÐýûii,ÖüXóç‘ssÁÜÜó¶“–VW×ÔD"Œðð½{ëëmmoݺ};5µºÚØøÔ)K˃ÓÓ{zDkÇkmMI)*âóïÞ 9wÎÅ…N¿pá—_š›ß´~JÔqOLlf†ËïÅôzk3:J¥¦¥56JH\ºdoÅ¢Ñyyʇ¯ÔœžîèÈȸ}›J=q"8ø³Ïf81±4{26VUqûvooAÁÅ‹÷î‘HZZ$Rs³´4`ooh(,ÞLZª½]ŸF{ð 5µ¿ÿ«¯¼¼TU;;23{{Ïféó7ÄÅW¯vq Ïͽ~ý‹/TTÿ¬¥%8xtôïѾ°<ü#$LAÁÜœH$x¼ÂB{ûúúÅ)+Aw÷;§NyyÇÄÄÄ46VWûúVVVTP( Æð0—+JH Ñ²²+V¬Z¥®ŽÁ0¾¾®®G½l^NÎÎ.+«¢"1qëÖg;ðù ™L&'$=‘˜H"56²X/N5ø3³³ÝÝéégÏFE9:¦§gdäçëéefþö[qq}=“Ù×72Âåòùss0‰BIIÉÈÈË+*ª©©ª¢Ñtzx¸Ÿ_dä³/NIÉ­¬de««ƒƒ‹‹ïü …££'Oz{ß¼yÿþ•+ee½½®®uuÅŵµ4Ú“'ãã³³ââ¢PQQMmÕª‰‰ØØ½{==cc_”p¹JLÌ?TT88„†ææ&&**††&&æçÓé‚Á¬^M ØÛ‰îî;vÈÊ–—8;ïÝ{åÊbMºõ|…BÑ G"'ÀáH¤„ &6%@´ƒ{䈒RA·wnîóůïzý» LLÐé%%ee³³}}/wK6»µµ¸¸ `|¼¿ÿÕášP86VRòÝwÎÎŒûøx{†„:$ Õ×ß½ëímmXY9::7‡F ÔÔ”•±XccèD¦±±¼¼°9†‡C£UVðxCCo~Æ:Ïô4“ùóÏ—.a0§N‰‡íÚ%#3338H¥&'ûúîØá3//Ðé?ü°oŸŸŸ’RDÄÁƒ?ý'vu&$|ýµ‹ ™ìî¾?›½PÒ?=M§GD¸¹ÙØLM>íëëæößÿÆÄ?.°ÙÝÝ4Úo¿ýøãb‘8¡RÉäª*$RW×ÖÖÖv±¸Àäd}}w÷ÇÙÙL&'ô÷ÿú«§g` ‰ÉO?:tþ|XØ¿þÕÖ–}ë‘xìØúõÇoÛÖÓ³X¶{)Ïk~§ÙÜœHܳGCC\áó«ªÈäÞ^UÕ/¾°³srjk/,ÌÎþÒk_‰bZZ—.ݽkañêtYQ#½ì(TRÒÊ*,ŒB¡ÓŸ>õ“’RUE"¡ÐääçW¯ŽŽ²rOOBBf&“Ébµ´´µ¥§74Îç …p8 %##'§  ¤¤¤¤¦¶zµ¦¦ŽŽžž†›bccd2/<ý:DJr$Rg§œÜáÃæækÖ ‘ÊóæòÚL§¡¡°°¬¬·w±Íœ™yü89ùûïïßß¾}Ïžù°–Ï_š= ¹ÜÊÊ ˆÄ;¼¼<<,,°Ø•+››\\âãñøÄÄäd,vaKôMííŸ× ŸßÕ••URÂáxy$ÒŸe–:ÿwABBMm÷îo¿}>4‚@&&rr""²³ñ*jêºv­Ž¿\ƒ¶µ55ÕÖjkoÚdd„Ãmܨ¯ÿæ¿Û×××××÷~ÿi$RGÇË+,, ƒ¹yÓÕÕß¿¡áÅ/8\ZZSß¾}ëV==--UU99II(tzšËåpúû{zººJK+*êëŸ5é‹Á¤¤ÔÕ?ûLC…šårÇÆ8œ¡¡ÁA6{bbé.ÙË[±‡33³µµ¶64ÔÓ[·NEEI ƒA¡lnnjŠÇãñ¸Ü±16»¿¿··««¼üîÝ{÷rs{{œd11eeGLjˆ  sóÜÜÓ§ÏÊzq×(XµjÓ&SS “õëW¯VTD£ÅÄfg''ÇÆØìááÞÞŽŽÖÖÊÊ’’ººîî…Ä¿%%¥©éàðÍ7GŽ8`k‹Çki)+£ÑBáØ‹E£‘Éùù QQññP©"g÷¯y¾P¨´4àï{ý:ßÜœšZS#&fjêà ¡QP°ÿÁƒ¡¡ /Ý–LVvýz›íÛ1˜úz‰L~õ‰ãR¯>DbÉäœ'§èh++ ‹;wæOÑgg_¿m@hiùû×Öffº¸TW‡…—–¾Z‰ÔÑùæ›sçöíknÞ¿_Ssß¾òòÁêóÏãâÊË3245oÜpròñysH4zóæK—®_ÿŽýû±Øy;(TZÚÈÈÛ;5õüy/5ufÆÓ3<ÜÊ x·»ÇdFGáñ—/75-g:% &%…ÅîÜéááìüå—ffkÖ(*"ÓÓÃÃõõ$ÒÏ?Çǧ¤44,5,†Á¤¤45 ll¬­ p8 O?ý䑳@09911::4Äb±X½½L&“ÙÚJ¥65UUÕÖvt --ÐÕýöÛŠŠÖ­»xÑÔôðáÔÔùïÖß YYk똘ÎÎû÷‘H77 W׌ çíÇ“Àb}|ª«33‰Ääd[[Cà W×A¾;¡¬¼cÇÑ£!!'OnÙ¢¦63ÓÙ™“yõjvöãÇoøÂ`p¸˜˜èÜSVvqIJª«;r„D2441‰íêgS!¢ih¨¯¯§g¹>Ec²ÙCCýý«–x"€(TBBYY_Û¶]»·nݸQAôËþÄÄTT<F`à€ Àÿüÿϸ]Ü”4–ºIEND®B`‚twittering-mode-3.0.0/doc/web/images/screen-user-no-icon.png0000644000000000000000000037430412141747407023704 0ustar rootroot00000000000000‰PNG  IHDR0h–6Š| pHYs  ÒÝ~ü vpAg ÂaÜl€IDATxÚìw\ÇÛÀw¯7¸£÷R¥ ˆ *öÞ{Æ£Q£‰±Å¨1jÔk¢‰DÆÞQDÞ{?®÷²ûþ1¿{ï ( &óý|rÁ½½Ý)Ï<3Ï<3Ï <^}}u5@ @ ÿy° @ @ÂqÇqX@ BB@   šG@  á84‘ @ AÞäÕòxÏŸ_¿~çNF†P¨Õ6¿ƒL¶²êÑcìØAƒ\]étÕ]W«+*.\øê«}û$’E‹vì˜5ËÃBéÅãryqñ;—/?~\[«V¿¢ÀHææÝº :t¨±1¡Y …âÅ‹Ÿ~Z³ææÍ^½vìX»¶[7«3V¼V+ܽ{áÂõë‹ÅTª­m@ÀàÁãÆ laA&ÃæÑzÔ꺺‡/]Š-)Q(pA‰F36¶²òôìÖ­{w[[:ðNáQp\./)¹qãðá#G®^-,$gÍZµjÁ‚®]‚Û·_¾þÉ'aa&&DâÇ]¦11gΜ!áæÍ¬,‡!Cú÷wr2LŽËåEE±±÷îq¹ƒwïnnN"}Ìù…@ ¤#xg’FS]}ýúÞ½?üp÷®‡Ç!=zXZ6íz©T¥ÒÇG"),_,ưÎ$B«‹Ÿ??thÛ¶ƒY¬áà rr¢R ï “e2WW• ÃÇ›ÁT*>?;ûÉ“ŒŒ.]¤Ò‚‚ƒgÎÔç½K E£ilLOÏ˳¶ŽˆèÙÓʪeC–¶B¥ª¨¸té‹/¦MÛ¾=??(hÚ´éÓ{÷öðJ_¼8}zþü¡CÏœ™7ïØ±Ã‡—.õ÷g2[:Ì|}¾TªÂÂC‡¦LY·Î°þ J¥*,<}z×®_~áó‡ ™0¡[76[£‰ž?¿qãçŸ×¯_¿ÞÕuÕª?ÿqv¦RíìäéÓW]g±ùøƒ°”—çççå(•‚ &gg߸q÷ne¥Ÿß°aQQÎκr¤RÕj??• Ap¼ueû60¬sj-•ª¸øÌ™={þøcР޽ûöut45Õ·X  Ÿ>ýí·Ÿ~JKûòËþýÃÂÌÍ[f.wÖüB Ò¼³ üŠHäpÂÃ-úæ›;‚ƒéôWÝ©V»¹:tà‚˜˜É/ØÀß§ó)¡RÝܦM[·nãÆ!CØì7Ýù¦ëd²“Óôé†yGµº¡áæÍíÛwíÊËûê«=zö|Ù°lO4ššš ¾újçÎĮ̀¨_½råë¯CCuž°‰ÇŒ4ÈÅeÞ¼ Ö¬9r¤_¿Ë—W®ôókÉPS£y}¾(GÇ—Ëáß:Üù"‘¬­ ˜?ÿ³Ï,ptå€a<ÞíÛŸ}6`À·ß;öâÅĉ۶…†¾ºÍ¼ºÕ×§¥½x¡Rùù­[7xpHˆ¿?“‰ juIÉÁƒÍ¯¿YJ?&æÍûæ›-[ôåPVväÈ‹ ±±Ó¦­]»}ûС&&¯2ãÛ6ïSk½9Uï“æÎ¬¥!i_Ò´ûkí'àM÷É,–¥¥…‹Ì£×ýJ¥ª®¾ïÞ+fÌ>|̘™3?ÿüС„„†µú}Røn9z{¾äҼ¼óç7mZ´höì™3W­:|8>¾¾,ÍÃq!‘ôyÇq±øùóß~ûñdzg jk>Ü¿Æ/¾Ø°á÷ßÓÓ¥ÒöÏFS]}÷îÉ“99nnK—~òIP±1`x…âá1yòçŸ,“]¿~æLn®\®R=ûóÏ.<{v÷îÏ?¯X1iÒ¤I ¬_æLn®TŠaoÏ׫dÇUªšš¸¸ýû¿øböìÑ£'L˜7oõêß~KL4¬q­–ËMH8tèèÑû÷³³Žûê«¥K—-[±b÷î+Wòó¥R Ó§_©¬¨¸ukÏž… 'O;vøðÉ“/þæ›'’“¹\¦ã¥¨é"‘F£PH$‰F#‘PT«åó?>p`Û¶3gŠ‹ßAD«’“Ù±ãï¿‹ŠT*­–Ë}òäìÙÓ§<¨«“J‹‹¯\ùí·C‡ÎŸOHˆ=sæåë/ææJ¥8Þ²6…aBaròÁƒ?þxéR^^~þ¥K6|òÉ_œ8QRµužRmæi‰tµîÎæoìÌòöúo[ªi_þÕ›õ€nâ ~ÂOø ?á'üüø?ßù$ð+ “J îÜ9wîäɼ<ý²)ÁÈÈÇgàÀ¨(ŸÆÆ£G'N\·Ãví:}zÉgg}Œÿ©4=}×®O>Ù¹³¡aÞ¼}ûþøã«¯”Ê«W7lX½zñb åÈ‘“'çÎmº¾¾=Е†Z]SóàÁ¹sgÎ462ºoQ”FstŒŒ1"<ÜÒR¡HJÚºuéÒcÇp|Ù²ï¾ûòK3³´´C‡¶lyúT(´¶?^¥*(8xpÔ(]Þ.tuŠ=:"âúõ””ââ#¦N;×ÛÛÄÄÑ‘Biÿ©Šªªôôº:SÓà`‡@xÕ;étW×^½ìì$’' „B…ÂÆ&)éäÉ]»þú+$äÓOׯߺuýúªªÃ‡¿øâ³Ï¾ûÎÉéÌ™/¿|S¾”ÊüüC‡ eÀÃC­NKûᇠ¶m«®ž1c×®Ÿ~úì3¥òöímÛ¾újΉäçŸÏûüsooA Èȸtéðásç._Ÿ0aéÒÉ“‡ÍÎ>pà»ï–,9|ØÃãÚµ•+==I¤ÚÚ+WÖ¬Ù¾=3sèЃ6ŒÁÈË»páĉÄÄŒ >?0°_¿–.1zw ¦hcã³gW®œ=K§›šb˜HTYùâEllllMMTÔÚµ«WûúR©Zm}}QÑÇ7n¤¦vë¶bŤIÎÎd2‚`˜LV\wåÊ“'~~Ÿ}6q¢¹¹‰‰­­©)F$*•66NNÎÎ66¦¦ff EóëL&‘(•¦¥µ¤M‰Riqqlìµk·oge¥§Óé¶¶ƒO˜Ð«—¥%‘|ŽºT›—qSýÑT†q\*m™tQ©-½,V4|«FSSÓä ÇÁ‚ç{÷NŸ>q¢¾ÞpQ,†‰DÏŸ×Öj4FF:MÛ2©0,gðK•ª¶öÍzàüùíÛ»wïœ{.!i „÷û9Ž«Õ|~YYaann^^~¾þ³´´®N©]¬F£V«ÕZíë†ÿIjê_]»F§O›¶té Aöö ‹åæ6zôÂ…ýû …W®ÄÄTV¾*dB{a2YUUAaŽòósrŠŠjkÏB&ËȸpáñcGÇ¥KW¯92 Àϯwï™37mZ¶ÌߟÁƒ7Ì;‰Äf;8¸¸ØØ0™4𹹫«——ŸŸ——““±qG,³ÃqµZ.×jI$ByÝÞ"%‘èt AT*¹\­Æ0Á0urš>ý«¯¦M íÒÅßäÈ5k>ýÔÚ:!áŸòó)”·å«© H$ÏŸÿùçÍ›&&K–lÜ8q¢¿¿££³shèœ9ë×O›†¢—.<ùâ…L¦O9Š:8,X°aÂÇGD ºhÑÂ…Barr~¾X v„a†i4 …@PSÃãi4ÆÆNN={.\¸qãgŸuì ÇÕj¡°¡¡®®úÔÕ‰DÂáp8 †)•¯o ¯h¤#£.]zöìÙÓËËØ˜Á°± 8pðà=¼¼zõzùz÷îvvjuZZkÚ”FÃå“Ésç~ûíÚµS§öíëêÊ` hg*Õ–Òréj­6­ãÎS2¦Rñùõõµµ5555†Ÿ Ø1ÙšöÍz ;v¨ùwð$Áq"‘à ›?ÿË/·lyõ$•ª @ï°j:ß«›‰‰***+‚ââìì+fϾrÅ0Æ‹ee5dˆJ6 ·¯E÷|*ÕÕuÊ”µkׯõ$­¶¡¡®®¾žBqr²µe2Q¤ E©T‡Å"‘ôO{9ïº\4ýW‡T6‰Ã±·g2E¢ÒÒ†¥ÇÝÜšfjuccaac#`nnmÍb‰8Ž¢,–ƒƒ±1‘RL »¸8;“HW®Ô×K¥foÿº|½\jµ@PVVWG¥º»;;ƒe~àÉÜÜÓÓÞÃââ**¤R­60D‚31qwwu52ÒÝK P(4‰„aJ¥Za8N$ÚØŒµoß¶mÕÕ›6mÛ6vlX˜Vëç7~üÒ¥_~ùÅ#Gº¹é ×ö– 2ÙÊ*2rîÜ¥KçÏ×íAB•ª¤$:zêÔÉ“W­úãoï¿þ1ÂðwzÉ0,³—å¦ùÝͯ·¶Má8‚ÐéÆq8:iFé¥Ú\óþÝ´i4-•.•ÊÆ¦¥rðrw&y£PœœÆûì³Õ«GŒ0 Ò ÕÖן9“‘ñôiz:Žkµï¢i ¥ïmz #µ@ íéÃ'@ Ñ8##ccÿÙ³ÿøã÷ß63ëÈ!×»¤™B12¢Ó•J.W,3®4ðH¥ …nƶsA¥º¸ôïN ¬[wî\ZšHÔ½{¯^ÆÆ†e­R•–Þ¾}ùr]‡Çüù~~L&‚!ˆF ýDÂçk44‹õzÔ« ét:]¡hh Á> A@ì,ÏÇ0‹Ã¡PZ ›B±µ0`ùò£G X¼¸¡!99:zõêÏ?_²äûï.]úöÛ  –‡Ehk(++oo*õرü|.W£!ˆDÁ0 Ã0ýÀR«‹¤ÒWÏoû6Þ‚¢™L&¿êžÎ]ªï.]$ÒûÊáÇU2­‘Š×…T³èÌ:@ –CÐÏU¿Û'xÌ»üVÿKcãÀÀ‘#}| :r$)‰Ï×jqÃäòüüÓ§¿øbÆ۷ëëÁ¦ç÷KmK?1L©är+++šQYYSÓØ¨P0žžýúÙÚfdœ<SU¥Vã¸D’‘ýÛo 4ÁërM É(ªTŠD‰Z­Ñ(•`![Gä‹Á \¶lñbw÷¾újýú'ÒÓy<µǵZ©´¨èæÍo¿]±âÏ?QtÊ”•+‡ ³°CC ž>޾r¥¨H.ÇqµººúΓ'srìì"#=<ŒÖä AØìÀÀaÃ\\^¼øí·þÉÏ—ËqÃ$’ŒŒ“'Oœ¨¨ð÷=ÚߟÉÔo˜{üè¿U«ëê=ŠŽþ矴4O­&‘,,‚‚†9ÒÙY¡(+«¯W(:J~pÔJ±X$ …B€Ë­¬Ì̼qã—_~ü1&ÇCB† su¥ÓÙlWWWWÍÊzð +K(Ôhd²‚‚Ë—÷íûçŸÒR]؆¦m­y‹k~½µmJÿÛ—K»s•jK4OË¥«urØTkuž’1¬û·µ”ÖkZÃ'¿]|I€Ÿð~ÂOø ?ÛúóÏABQ‰Í¶²²²óί™lbboooaºûÈdÇÖÖÚZw…@°´<øûï·o/(X±bݺ‘##"H$EÉdOÏÙ³¿ÿ~Û633°¨£½-F"‘Á07g³++÷ïÿä“3öïÉ¢$˜›²gÏùó6Œ±e˼yqqsæŒ=pàž=&&ÎÎC†Lš4x°Ÿ_^†¢JÓ¼ƒE‰!!Ç»¸ìÙóÙgÇGFº»¾k×￯^Æbµ·çŒH´³›8q÷î?ÿD;ׯ_¼xÀ€íÛE"A*ÕÁ¡_¿ öìùóÏ |}étÅq©AÇÓÓÙùÅ‹õëÇŒùõ×ÒR±˜B ]¾ü·ßF¶¶&‰Dµúuù zYˆD›#~øaýúÜÜ¥K,ˆŠ:z,“sq™8ñûï÷îíßßÌŒ@Àqµš@`0ÌÍÍÍU* ,‚9¡PØl :@@QGQ2™J•˾ývذýû¥RƒBQ«ÄÃcöì}ûzõ26~WioM» PLMMLÿ䓱cGQ%‘¨TGÇÀÀþý·oÿóÏùóû÷75EQ56^²äë¯Ã–-[¸°W¯ðp2ÙËkÔ¨/¾X¼82²¾>/øæš.R4 75lô×[Ó¦ˆD:ÝÜÜÚÚÌŒJRj˜ŸÎPª/·AËÊÊÚÚÂxm_~{Ë¥ AZ.‡/k­ÎQ2…ÂáX[››Óh†­CW{(Êdš›[Xp8d2ж\*´Ú—ó –º¾Yt´$@ Ò> µµååEE+QZ­J¥Phµ ,rçÛÞ<½J¥TªT‰ ƒA"uîå/ƒajµB¡Ñ¯.m©ôñãµkÇ?~ܸóçwï !“•J!“©T"±-òŠãR©R¡(…Ò6ÏOT(´Z‰N§R;¿ } mêã,Õ–K×»ËáÇ*o­‘Šö×tHqÎ@ “i4ÂÿÎhêü3’•Ê`€½ß*Š’H4šîøÖæi'‘¬­{õ3¦O++ ÔŽîèØ¶©%)”¶}&‰‚8|Œ5ÒyÛÔÇXª-—®÷‘ÃSÞZ#í¯ é, 55ee……° @ äá¨aA@ @ È;Ÿƒ@ @ ÿ6HEE99/^À‚€@ @ T£ÑhÀA§@ ò߆$óù\.,@ !À"€@ @ 4 @ ä@ @ @þ4 @ ä@ @ @þ4 @ ä:òe %&‚Ïw{ºu_~¹zõÇR¸W~µZ­V«ÍÌÌÊÊÎnhàr¹\Áqý÷(ú¦_Þ©¿Öô*Ž#†á8Ž[[[YYZúùùúúø‰D"‘ض¹P©âã¯^EÑ;wŽ£Rkj’“Q´íÞ¡ÏV‹ J¥Mh(ŽGEÍ›G¡DDŒÙV9jläñx<‰D"‘HZr¿B¡P¨T4F¡´ü-¯û•¥¥………N§Óé¿¢ƒ ‚$%={ö왣£ƒƒ½½••µukŸ™™““••”ôìYJÊüù3gΚKõ¿Æ¡¿xñÒ¥+W&Ož6mÆ ƒÁ`0šß4sYYYYYYNNVVV–‹‹³³½½››«««+”“¶âùóôôôôçÏÓÓÓÒ@ÿÞ¶Ïýupp@@``pp@@@,sàHßÿûw·üWJ¥R©PܸqóæíÛÆ :xpç/Ü+¿@õTW×ÔÔÔLœ8yò´ií÷®þ9sæÔ)oo//O϶5”J¥R©Ôj¯_?|ØÚzÆŒE‹„N_²EÉd*AˆD AˆD2EQ”@ÀqEQÁ0 C ÓhD«U©D­V*q\£Q(D¥’Ép\©”Ju+b1Ž+• •*‰Åׯ>ŒãaaQQ¯ëP[ è€]\\]ÝÜT*¥R¥BQjáUæjuuuuuµ““³³³sËßRZZRRZjffnnfö?¥@"‰Äêêêêª*''GGGG¨(qÇqœÇãr¹\¡ÏçñœÝÝ=<ðøáE"±X$JKËÈxñ¢¸¸´´¸xÚ´I“¦LÁq ùoG­V«Õê´´/22( …B©¨¨ªª®vp°³³µmïô?{–šúüyJJZZZÚû<ÇÖÖÚÚÆfäÈ¡C‡íœ5U___ßÐPTTRRRòº{ÜÜ\\\\,----,:>…ÿ~\*•H¤R EuúW«Å0­´ÇãñÆŸ8qâÄ Ο?Lº¹¹¹}83 è+ÐfffgçäTTTTTUá8‚ษ©‰‰‰I÷îaa!!4•J¥‚œµä™¥¥eeeeÍ¿uvvrrrjÉsZ 0V¯þ⋵kÛ¯ÄvïþñÇ;¡1„ô¡^,—Ëå2…†­ú&!†a†iµšÿ¡V“Hd2™ÏÙ¹s×®íÛ;CˆD"‘PXYYYYQaxÇãóE¢°°°°°0 i†ßjµVûüyJʳg\.—[W÷r‹vp0666f³;&ÿÖ~œL¦PÈd`N€¾ E ×I€+(Š¢b±H$ë̤ &L¸téÒ¥‹Á½îîÆLÆ[LLll\œ““‹‹«ë„ “&Mž ú¦úúúúúúøø‡<èÝ»G°0°Ràuæ ¨Çû÷ãâv>˜¤:kµÔ^±êÐ5 ãrëêêë½¼<=½¼FŒ=zܸ7®^½tièÐÁƒ£¢:Awæü‚ws¹\nc£¹¹……¥¥T*“Éd@5ê}@áè $jǵZ½I„ † Z-Žkµ†Ý$€LV(H$ððF°”«­fžtž"”¹Fƒ¢Z-‚É m ý8ÞI£ÑýaZmóO¥Ô&(%"Q÷öö’!mÉ@öÍ0™L&‹%•J¥ x–Þƒ÷~O~ÅÅ%%%%ÕÕÕÕ55¯ú¶¬¬¾ÞÕÕÉémFró;{÷îÕ«gÏöl³zÓÈ1“ÉbI¥‰XÜrßKg ¢¢ªªªjìØÑ£ÃÃ}|?¿?þˆŽ>vÌÝÝÅÅÕõÍ-O"‘H¤Ò’’òòòò>}úô‰Œ”Éd2©´¾¾¾¾é½cHMMKKNFQ`>‰`XDü` £ûè."‘@pwwuíÒ¥óÔ0ºtñôôöWÊÊÊÊÊË ´Mo¾¼ dAK5115µ°°°°°07ßæççååäøøøøt”ôoíÇËËËË++uS{8Ža( úÐãa˜Î@Ã󤤤¤¤$#####£nݺu ‰ø°ªªªªªªoß>}"":2ýÀ 577335MOOK{þ¼¦¦¦¦ººW¯^½z÷Scƒ2th\ܽ{wïöêÕ£G÷î`bÔð9 ×޽wïþ}[Ûââ«WÃÂÌÍ ïQ*‹‹U*…ÂÞþÓOÛ;_ Ä‹‹‹Š ”ÊWO¶J¥Ñ¼½½½ýü>éx>˜¤ÑhµMEEqqU•B¡PÈål6›Íf…o¸ì Ìå€9¸¸¸¸¸8‡Ãáp‚‚BBÂÂîܹ{÷Þ½¨¨##;sAwæü‚N ì;ò÷ ìÖM­V(”JÙ šôK»PÇA— Ýî"]‡bˆ®›Á0—Éär¹ÜÚÚÚÚÚúÅ‹´´”pO[Hà]úi4 {FѰ°éÓQÔÓ³_?!ò~íÚÖ­8.TUé $`i4(jlle…¢ãÆíÜ©{&@ àxzúÕ«rçή]8îoþö¶Fç­k]ÍþöUw€áåû^¯˜FRSÓÃ0ŒÁ`±X¬¶•ÕŽ,Kƒ˜L‹Å ô÷ zúôÙ³ääððÐÐÐÐ×™ßOŸ¦¤$'¥RÉd"ÑØ˜Ã11éø”·¤_ ½ø|€ÏúôéÓ§O322222X,‹Å2115519sæŸΟ3fôè‘#?”Wx¾ùfóæíÛ…B¡P,ž7oÁ‚O>Á0à[е{ÐJt}š½½½½Ý£G=zTTTTT\Ìd2™ †››››»ûÝ»÷ïÇÇÿúë¡CÇ›™™™™šnÛ¶eËúõ¦¦¦¦íY_`ÂÀÁÁÞÞÎôÁyyùù%%%%%%Àlbbbbb¢TªTjµH$‰Å&&&&ȧ¡idcSTtåJ@@yùÙ³2xp·nÉ‘#))à]r¹¹¹ ‰Ôž“ƒ:@ÚÜÝÝÝ==õ>$ð—è=IÍ5|ó}Òˆ!Ì@>KK+«¦«¨U*µìÑ]‘Ëår…¬]¾|ùòåK—¤R©T& `2 ãîÝ{÷îß802²ÿŽI?X‰÷àA|üëîIKKOñ¢óç( ¡P( ÍÍÍÍÍÍ_v7ë‡Ù:Ç4øÌ«CÉÐìÊHï“Ñ+#àúoo|¯È›¤L­ÖÍ÷%%EG£¨­­¯/‚éî 7AbböìyÙ@Òj¤{÷3Àž%ÝýAUŽß¿ÿóÏMïì(Z6474^WÂàºF£Ñhµd2XPÒ^ˆD"‘DÒÐÐÐPWÇd2™FF`"t÷nݾ}÷®‡‡»»››››››‹Ë•+W¯^¸àììììâÂ`0,–Oqñ®]aa3gFFVW§¤ää´G: M#°<ˆÁ`2u¦¸tÄõõ55`ÉbóP&:#ŠL¦P¨T##cc6˜%Jß*À»©TÊåjµJE§ÿöÛñã¿ýæëëëëëËb½£¾žËår5­Çmmmllm¹Üº: À´IÇçØÝ»wïÞ½;‘üCÀô²¤÷0µ}ˆ–¶•:ÁqKKsss󤤧O““[ò+pÿ‡཮_²Æår¹\nyyyyy9ÈeTTTTT”££££££nOKiii©\.“Éå'Ož:õ÷ß#GŽ1l˜¹¹™™™YGNF€É;.·¡Ë•Ë …ÂÐ÷e8è6œþ>yOOOOOO:Ng0ÔjµZ¥266662 ô÷òäñã¤$0½(“Éå2™©)‚´µ¤Ó]<øÏÉÉÉÉɉF£Ói4@( ×Ã0ÌÇè^ KK++0žáp86<ÇÐ4 ,/?{–ÅZ¸Pg±Xݺuë&‘¤¤¤¤oÐu …………ùù@ÆÞí94F£ùùùúÂG×ó $­,^BárÁÊ~×mI§Ri4 ¾AÇæÌ,,,---½¼¼¼¼¼@C«i½½½½½½Ï;{öï¿;Ò@ÊÍÍÏ/(X±â‹/V¯Öj >Ÿ@&‚€å[‚@Àãq¹à~ Ój1¬¡ËmhëÈY,‹ÉT«ÕjF¡P( ÐÍ¿9¿¶¶¶¶6611·oߺÕVùÕíiAQl¿–Éd2™ tÛÀCÀpjJ—G`Šè•µÞƒ®éj¼¼¼Ì&¶u-B`x„aZ-ŽÇÇ9‚¢QQkÖ ™L£¡¨½}@‚ØÙùûãxiéÓ§¢Ñ(•bkëç‡¢ŽŽÁÁº§©TR)†:µd Ž—”$%iµÀëXém47 ÷`qî{Pk¦kkí60ÛÞ 30ÿïââââäL£²²òòÒRp?‡ÃᘘÉÇõé³páÂ…ÕÕ))))55))))nnãÆµm¹éL# ¥ “ÉdêJO?Lc³ÍÌt-ô¿~ùÿ†ã`÷˜H$ðùr¹L&“™™µå‚Ò–ÃfK$b±X v…XXXYÙÙõë×§Oß¾ÆÇ?|8|øàÁC†JKbâ“'1bĘ12™L&‘(• …\Îåòx|>xÐñd©©©©Ïžý;‡J¥RÄÐ< Ói4:]7+ãââê <-ÀAokkkkg×¶y‹ë€*ÝCÓý ¤n˜¨óú“ôf’á½úyÙ¡ ÞÞÞÞŽkµ*Šâ80ˆD¯¨HMEgÏΜAÑ=fÏÖ©Ýðð™3qûðC»×õãÀ_QXXTTTäããããã¦ù’“ÓÓ³³AäCGG;;•J­V«+*jjêêÜÝœúôéÛ·oß‚‚üü¼¼¢¢Â‚ {yØ€¡i¤_0®›äÓ…†‹ÈI$‰H46f³ÁúµZ£Q«—U¡P(”JÝ2¯WGm»Á0 £R©T*ÕÁÁÑÑÑ122222òæÍ›7oÞtvvqqu¾»˜˜˜˜˜¯±±±qÉ’¥K—.åóÅb©ôÖ­›7oßvw¯«‹}³itíЫWn®™YŸ>#G òÞ1õ£¯'°ÇSSÿý÷šSS‡Ë‹E"p·……±1›mk+I$!!óçÏ›´…îYY+@><¯0=нv­ùõ^½ 1¢m«V ”pƒ5¾ •J¡¨Õ X)¯Ñ€­²òÉ3³¬¬þ16®¨Ð/iCr CA(D/.]BQ𙛃a=zÌ›L¦¶-8ÃîI«õ÷Ÿ2…@ $õ)EÄD]~AžÄbÐtßä1³ÙºHDàÔ ++ƒÅb0X,&³­#ŒÕÖÖÖÖÕY[ÛÚ:8¨T†õ*Ȱã0TTº%t† ïtÿ7Ü‘¤Û£¾o±´´´´²ª­­®®¨pqi]pꖡѨT ê˜.<ðÅÄìÞM ˜š::¢¨§gÿþ`Ñ0dˆ>¨>Žggß¹ƒã÷îýôSçoÒ`Ö¶³¦NJ÷ÐUUÕÕÕÕJ¥B¡Tº»{x¸»S(üñ*Ó(%%%¥[76{åÊyóÚ*Mz–Fc(¹ºVüúœà8˜GL×ÎGQ7 jú+•J©T(D"¡P(d³9œ¦Ó%퇧§»»‡GffVVVÇãñù&&8Ža “id9p`lì½{wïN˜0zôر))ii©©Ó¦M™2cXVG£ÑhtzNNnn^ž……©©‰ Xõ:-‘H&?{öìÙ³gÍ£Yé6Ðëç”{÷îÝ»©þ?|øøñcÇ^÷ü üe£H.—Ë•J¦¥‘µ¤R™¬ºšÉd±Øì²²òr]d<0aeÕöÁ›÷ã Z—ÛØÈå‚÷¯ÑÓ§ééYY"‘X,•†…uë¤Ñ`Ž+•jµFÃ`±Ùùù……EE2™T*“õêÕ½{p0*öe9::888´÷„:ök ¾n}¿ Ó ›êÑ™PºO«Ð X‘NÐÛ>ý‡ÃáÇÆÞ¿ÿà¨0MÐ¥K—.]ºßQ~~~~~~eeeeeåÇIIII99‰‰÷ë‡aéé……o3ÌÍûö1bĈáÃAZð®ön'zŸŠJ$|>—0iÒÔ©ÎÎ}ûöë7vìüù 0l¶nª](ärëëÓÓ¿ùfãÆ«Wûõ‹Œ4èòåK—X,SSSÓ–L8Bþ˼Â@j+Cèu€Áød³Ùlcã×ÝI¡”•=~llœ–vä™ÌåèÔŒV‹ã(ÊáXZ¢¨……›Ž74á¸@P_–¸¡hNέ[‚X\[‹aQQ_ÝÖf’ÞJ¥R±˜L»*(*U¿´L7hÒÍ6½ì1S*‚úúêêòò²2¯¾¾¶V¯ô*Ã0ŒÉd0(°ì‡ÅR*u‹÷Þ°!ØÜÜÂÂÌ tr(J$¯‘¡›ZÅG·EU÷/ÃÅu†;Ž ÑGŒÁ³5ðÆ²²ÒÒ¢¢ö‘5’[&“Jq\"árD,®¯GµZ¡À°?þ˜3‡HܱCªCÓ æz‰ŽþäÝŽ¦•J£Q©-¿ÞÒVÙ1ÙôYðo2™L¦RŸ={ö,) ˜(FFÿþ:Ó¨¶väÈ vw÷ðhÛ”0 |>ר¨4ÚËóÖ`ð£[¬Ñ€+MýKú ’æ×¯xoÀ®¤æ‘£Ú¯Ü##ûöíÛ÷æÍ˜˜»w‡ 2dÈ‘H àñìí :Áˆ}ð .®GîÝ{ôþ4S¡P$‰òó òòÆ3f̘Öi‘H$©gÏ^½zöÔŰÓùˆDP#º¸vú%8†Oxs¸ðŽÞÜ_L#77www÷÷yrQQaaÓ˜cmEó~ôuÀwÔµ«ŸŸŸèÊÊ*+kj‚ƒºvU(0Œ@¡sÔjAQµš@ÀqÇÜÜÊêéÓ´´çÏ{ö ´²²²²¶.))**(°··³³³k/7˜2Žˆ«@‹©ªªªª®¦R©TÝÐßÐ<2Ü‹Û<@¸< ”’D¢T*•º·èƒp´ÕYj ]˜šš˜˜štíêë –âƒ0 aaÝ»wï‚?@>>>>—/Ÿ={ölxxmmLÌØ±¾¾"ÑÛM£>}€i|‹ÿ;æD8CùÑ£©SgÎ [³æË/Ýܼ¼¼½Õêôô/¤ÒnÝ‚ƒÁ FvvNNïÞÓ§O›–›t÷îØ±ãÆóàA\ÜÇnÒ‘|%vºçñù|p…J¥R)ÝlDÂå::>}zü¸Þ4B¥Ó1ŒÏ SS) `ôhæùóþÁ°††úzÁÄ„ÍÆqµZ¡@ÑÊÊ´4áñãcÇ´ZkkŸ¶[t§oZ 3‰ø|ïòåcÇ× ™L$ºqãÔ©ßWÿ?*PŸ`æÓÄÄÂÂÚ:$ÄÙÙÈˆÉ h™ ×­›JõèQ[ hÁ“SÇËCyyqqûHÆå––â¸DÒÐŒ¢G£ž–¶}&ˆ)×Þ)'“Éd Ì\‚+NNNN..À£X____^þ:Ó¨¬lðà#}}ýülmmmÁÙ;ºe®ïèÚ/×ÈÈØ˜Ã‹…B| <Û†g¹èõ—~`k8³©÷hèu…á_ºA–T*‘H$éGƒ§îÝCBºu‹‰¹wïÞ½¡C ŠŠC[??Ÿ®]““SSSR\\\]ÝÝy¼††š “>LHHH4(222L}(ù'I$"ñéÓ¤¤§O›ž~¢'"""""ÂÐL2ü6++''#£3…Ó’9àoÔËWSikYQ/w`*­ýRܼ›æçcgt:ƒÁ`… …n×aCƒX,— 2™J¥Ra‚ˆD<žBqïÞãÇ))Ë—Ï›7mš••µµÍ³gOŸ&%3¦= ¤û÷xÂÚµk×nØ ‘Èd(ZXXTT]][[[[^>`@ÿþ}ú¼^@݃½Í......@¶““SRž?ñë €ÁicS^^TTXX\÷ï7®^EÑž=óòô^£Ž7 ó™™yúô™3VVà”)++kk…â×_ý5+«¸¸¸8%¥gϰ0Ð2BCSRÒÓ'ÓÓ³ÿ~ýjjœœœœž?ÿã?þèÖmîܹsä5|°%v`ÀÁb½J‰³Xee·o³X¥¥qqà¬53³·'=<""$3óÖ-%“étÁÆÆËK÷·¹¹¹9‘èç7dˆV[Pã ee:o’—× A2mZÛt:¥±±®®®®´ôáà fΜ6m„–?G¡Àq‰Åª­}üÇ++ËËÃÔjp)ŽëbÜ)Z­R)“Ñh(ªÕÖÕq¹Ri[ «î܉‰¹{—Ba0ŒŒ ¹\¥Ò * 7>ÕDQÚpÎÌð´#P:àÿº¿›_733333{ô(1ññc____Ÿ¶nç󛨃H$“ „™3}ùz£SïMwbØ/¿ŒÑüH¦¦ff¦¦mûLpÜaG¤Ç#"""ºw×É¿B¡P\¼xñâùósçÎ;wîñãÇ#ˆ¿JÊ‘#À4¢Ó?ÿ|ÅŠI“üý¤R©T­ÖÏé6=%æÝRM¡‘ÅÒi$±X$€ÅðNÝ1@&ƒA›n¹˜þÐjÁ`NwÆ”ápV/[`;¸B¡’ÑQƒ wwWW77pºÑƒññ4pàÀ¹¹¹¹“&M˜0iðé…¯11±±11Ý»‡††„€Èi¸Ó"‰$0t;ô'!5=Iï[2|Bjjjjjjç äÐt§æ«åxð ×€ÿ ‡ãà;SÓ¶ÖÍiÞS(*˜dÑ-t²-I¥2™JÅåJ$FC$ŠDr¹njèY­–H$‘€‡UÀ,ðí¨ÕzM[#‹ÅrùØ±ãÆ…‡‹D"‘R)‰Å"Q¯^½{÷îÝØÈåòxÀ3O"‰"u‡"¿ð>ébDªTJ ™L&“Ëmmmmíí{ôèÑC7Êf³Ù Æ©S'Oææ¶uëÐù‘LLÈd‰L1qÁ¢;ss33“ÐÐnÝ@8ÌÌ'O¾ÿ^. Y·îÈ‘èhCÓèèÑÔT:=3ÓÖÖÜ|Ñ¢Y³† ù¦‘®-TT0™4Ú°a?üðÃ*UffVVffaaaa]ƒƒÝŒ_~¹nhÙ±±K–,^Œ¢ùùyy>>Æ êç·cÇöíqq=|=H7¶¦æ—Ú{‰Ö€ÆFÇÃ0F«§uÃbÄÅþDžº:ð7™<`À矃…@°´ôð }|¢¢ˆD_ßÁƒ1¬º:;[w¿^­¢hQQ|<‚´¤ß«ƒ¢ÕÕ%%®®TªPH¡dg_»¦ÕD"—+•ŠÅÎÎ>>`1ŽnŸƒ®;#H$Çq…4J"8èd2‚HT*‚P(t:†166d2‚ÈåYY/^44ôêÕöµsåÊÕ«—/wŒðMš4iÒĉ/ô(¹|9Šúøè&äó++1,.î×_Á¿ „~ý–.E{{p'øŽƒ€àw |Àß\nCŸßÐÐÐP_¯¿ãÈ‘¹sýýSR6m**ZµÊÊjî\²6?¿  ¼¼}¤âÕf’D" …º§ÀÜÁq166666~oÝB0œÓhÔj¥R¡P(€Ç˜L&“ÁÞ†¦Ã[­V­V«;Þ@úûûûËå …LvãÆÍ›7o66òù|>8fàÙ³””gÏòó ||¼½½¼À‘²AŠììlmÞç =zôèÑ£Gç äðæ @rLL8Ý5¯3 ýHíææý¸R)—+àÝ……AAAA"‘H$•¦¦VVæær866öö W üét:J•JE" (ÈÇÇÓ˜Cee¥¥¥¥tzûîl>áššš Iç7®ªª¬¬¬fXÝû–uTÛ×Hææ&&R©L&Í›7oÞ¼y¥¥EE«V!‚¹»{z‚!|@€î4ÎD¿×­}$äMfÈ’ÓÈpk²a µšF£Ñ@°c¥R&“JÉd2YçÁóu¬öÍ@*-((,ÌÉùê«õëu‹ÓP¤—B1773swÿå—ýûÏœùçŸÓ§A´:¹w/.®¢báÂ¥Kkj@ÄM Ã0§[·à`/¯mÛ¶n56öóóõmïôwïúþ»ƒ@ù?~üøñãÇ/ø«C{IçØtRó~Äš³´´²²²ÊÏÏËËÏg÷ùû{zº¸”—?~œ‘!“ …<ž‘‡R¨ÕòxuuÕÕ$’LÆçGFöè ZDaaQQA¥¥¥¥¥%X»Ð^ ÇA<=¸^RRRRZ*“ÉdR)ðÉèLןó§Ô ;]ÿ] µZ­1Z OÔh´Zµº½µvHÉd0˜L0˜øøñ“'¦¦ffcÇŽ?aÂ?îÙ³gÏÓ§yy¹¹#Fdg³Xžž,>gNP—WUU^^^^uõÆÆr¹\nDÄʕ˗˜C Û…nÁ2ÐØúwúý®XÜ þ|ýM[òj>À;0Ï‹E"‘H¥R©€ç©Õ$’HTS"Ô¡(›mmM$zzöï¢VV^^(J"ÑéÂ`p8:ñ&‘¨TpHô÷9’@¨«ËÍÕjóòîßÇq‰D(DQ@·ó¡mš'‚H$R©XŒa\nq1ƒÁáh4À(Ò}/•ÖÕá¸Dbn®ÑÈå†{Ôj"EµZ"ÃÃT* rD"óX–òé|e$…"H$J¥Pˆ¢þþí'yyÙÙùù†›é wW”————•mÞ¼yó¦MÍ»yóæÍ[¶44Ô׃£6›.½+//+ÓEhoÈd:„í§3f9‚ Tª.¤8ŽgfÞ¸ahé®§§_¾ ¾EQ?¿aÃÀ¯À´Úo¿íÚU·¯ ¼AäòöÌËËiG6m—ý€xd2©T¡ˆŽ>qâÔ©†††††à™^#‹Éd³%±X.¦ˆ¡‰Õ~¼ÙL¡WšÿŠhþ €\w*—þ-1 «R5666&%9fŒ»»»{PРAƒ鿀 ¡  '''§²ò³ÏV¬àpÖ¬Y¹Ã’“““==““Ÿ?÷ñ=zôh]@]]Ý54¤¤L˜0iRxøÝ»wîÐéööm}ü€!]»ví >_wˆM0dgçæfdè÷ uîPà/‡ùnÚÖ;§©y?BZs8l6›ýôéÓ§ÉÉOž//gg;»°0Ÿ®]=<œO:yòäI…B.—Hüý}}½½ÛÏ_$A£Q«U*]ÿ¬Ñ¨ÕR)83L"‹ÁÛoHÛp¶ž~©¹á†¥¤PÈ寯8®Ñ豀ؗº(xí«Ç@ào`æÝ¿÷àF§3™£G;nÜo¿=zø0—ÛÐPW7cÆüùsçfdÄÇ'$011±±tºT*•öí–’òüùóçÕÕýuòdLLyyyy÷î_}µv­O{ÖQó™š UU••l¶P(ùúŠDRilìªU_|µoßþý %ݾ½lÙ²e>>66¶¶(ZYYQ!¨ÕJ¥…‡cbÍ#È›ù Kì@\Aꕾ¡ò56¶µ%“‚Š  kk5𬬨X¡®® €@°±ñôD™L $U©är×här­öÅ‹«W1ŒË-/$0(Áq8÷Û0÷Ëç×ÖVVššj4\®ÎÜAQ¥A´Z¹Ãkk1ŒL&‘ˆD†Ç#0 ÌQ颺é¾~ (Š‚]W X ;bÇÉäª*¡P­–HÀ2¼öââÅË—/\xó='Nš4yróë¾¾>>>>W¯^»võê‡nÒÇÁ¹F&ìÞ ææÎκ£`A=œ;·fÍëkùܹ5kPÔËKï 37wvÖ=íôéeËÀ[¤½ ¤—M¤¶÷ µ¿Än!J8ss‡Ng2i46ÛÔ”Íû‘@°Çؘ̓¶¡Õb8 ªãäçe3©é¶ø7 ÀplÎf2™L&S$T*Ý ÇÄ´l` m),ܹs×®.]ÜÜÜܘÌ~ýúõ»ÿàÁƒU*©T*EQ‰D1bäÈ‘# Ο?žD*--+#ŽŽÞ¼yóæ˜˜'NœJËÊÊÊÈdFóôôòòòòññðèÒ¥ `Ë–­[ýýÕ§é ¼(ðölǯ[P÷êo€¤ …@ðæÙzÝð±cö ½Üƒë {yyyyz>}úôiR(ÿnÝ‚ƒCB<=]]_Î.ÐÉ©S§OŸ:µoß¾}ûöåäääääÌš5cÆôé»víܹcG{i%®RéÇŠDB¡HÎdãóù|ïýßž]PP^ž‘QW‡¢ééÁÁZ-eµÿä˜F •J§šFÕÕUUUUcÇŽ=jð‚€M‰‰ “™}ýúFFd2™Ü»w¯^½z6ÕÐðèQbâ£G«V­Y´aÃúõ={öèÑ1f’““H$‘”•M›6cF@@TTTTXXÿþ‘‘©©))ÉÉ'OîܹcÐÁº‰•þý##5šŸ~úùç’’{÷îÝss[±bùòŽ)ÈÇËXb†:†îf ¦†'l+•>>d²PXQü?¢V+•(êâ‚a¥¥Ïž©T%%ÉÉ$RpðøñjõóççÏëžbddi‰ã……ˆ_Ôª½}``ÛåAPT(¬ª*)ápÔêÆF  µZ­V©”HD£‘ÉÈd©T,Æq¥R·ñT»ä Œ€9¤Pè·È†Ë&‰D C*„Õær OOµZ*mÏ:jÉ;GGGÇ×G½ë KìP”Nçpp\$ª«“JOŸ^¶ ˜4­yFMMv6‚,]úúuðà-‚ ºõåíÓjÚ׃ÔÞ†G|||üýûjµL¦VççÿóÏóç8®Õâ8˜»]8ð­*•`çŽJ¥R)àS¡P*5ǰ/î¸Óiôš ˜ID¢‘‹f~èÍ¿Ã!Ðи‹“ Fkï!Ecclìýû..¾¾¾¾ ¿üòË/OŸ&&Òh––––ׯ[ZÚÚêƒö£h߾˖}öÙãLJýö›RùüùóçJemmmmddvvFHéÇݺ……EDôëׯ_VÖÇú³é: ï ¼½Z±îè‡æ×_g8ÃÄÄÄÄÄ5@7¸3Œ£ør8öÌË«ûq`ÆØÙÙÙÙÛƒ±±±±wïæåååååùøx{ûø¸ººº‚ýl8^\\\\R̡ӧOŸ>yü=sæÌ™3gž8 ò̤öˆ·i¸ˆùºsçÎû÷ƒ=BM£ê¼vºxvº¿^¥OuíL&‘¨TSS cã”[Û?ÿìÕK©3¦ùDi[<í÷ï?xðð!“Éd‘Hd2•ÚÜ46lèP]èàk I¤‰ÇOL¤R)”´´Ë—¯^ '„.]llllŠŠh4*U¡(((,T©víÚ³‡ÍþñÇÝ»­­ÝÜÚ§b×®³fÍœyÿþo¿;fm–––fe…aÖ­ÛìÙ³f…†ººººêômMMMZ½wï¾}µµ™™uuŠŽ3{öœ9q°äcæHL&‹Ådº§u¦‘áÂã_?),¼}[§öÙl++°ŒE­ŽÝ¿Ÿ@°¶öò"ìíýýµÚìì;w0¬¶67D±÷ƒ(v:•ÕÖÇÅ¢¨FS^ž’Â`ðxùùÀ}Žã Û¥R߈H$@g ؼ¼EQT­F*•DÒŸ3¤;¨üM$‚Ó» ©”FsuíÑE¹Üœœö«£ÌÌôôŒŒ¦‘ÜôóÜ-YbW]]]]]mßü¿c–ØUÆ(J§ƒÃvÛðýºæöÌ•á¿ÚÚƒÔ^q¢ýûƒ¿÷ì9~ófÝÙò†Q¡ÀâS°>_¿ÜÌï‚…+>>]»z{w¼ÖºéÝÎ,ý *F ‰`+±nówû¥\è6Љ …¢ÑˆÅ‰D"‰ÅT*ƒÁ`s”Jåp8¥R­V©À®$à  P C,.(((`±ìíííuÞ3Ý1Òí/û­åýC·O Ö›ÇúÚÁ0‡Ã15Õõ‰†a …RÙØh(}ð é®4}²©©©©™™nÿEGH¯ëÇAÎ@xðikkook[VVRRZzûö;·oK$‰nBì_a©AìµÞ½{õêÙ3:::::ú“O>ùä“OŽ=zTq´mÍ$™L*•H’’’’=aÀô ‡Ãf›˜H$x‹þxôæšøíí´‘¬¬çÏóò¼¼rs·oÏÉa0 $©T(lëöŽa{ïÞýû F§2lØðáà[`þþàaètºÐàèöQ£FŽ|üX­ÖhÒÓoݺ}ÛÊŠB¡PŒÈÈþýŠ””çÏ¥Òêêšš††ªªêêŽ1@{ »xñܹ'OF;Öѱ®®®ÎÞ~Ö¬38…éã<ž@ÀçWVÞ» ‚n F4 ýu6Ýél‰äææé©Ñ…vZmzúÕ«à$53“Ë1¬¦&7,£Â0.—ËEôô«WÁ9HºÅuÞÞC†`˜·÷àÁm•°^™NohÈÎ66&‘T* £P áJI$"Q·ôË­ªÒ5H"t``õ¿~Û§LöêY(G• Ç „ÆF‘ÇŸ>‹++AI¶_M]»vãÆõëo¾çÍKìnݺuëÖ­ŽhP¦uu †‡‡£#Љ^^¶+ÔR‰ àºm{šï½Ç·EúßCë}±µµµµ±¹yóúõ¿ÿ®®®®®©ápBCßÕpýý÷£G÷îÏ=zäÈö\ Üvuö+èjEŒØl«cΞb³„††††®]»téÒ%!!2rÐ °XÎ×7  ¦¦®®®ÎÄ$*jà@*•B¡PÌ͇>¼¶69ùÙ3??oooï/æÌ™?_¥’ɤҀ__™ŒËår™LOOOÏÎVæï ¼½155557/,,,ÌËkþ-“ BétŠ‚­öàŠ¡©é9HúoÛ/å-ïÇu;OAØ_X­Ö-ÏCQ*år¹\$øüQ£F1ää˜FÍͤ}û~üq÷î÷ÏKuuMMUÕ­[wîÄÆ‚ýÏnnnnîîéééé©© ½ïSž vÀTH@@@@PPaaaaA¸âïßµ«—WÛÖØ)¦@æÍ›2eútÃoÁ^þÑ#*U*•J‚ÐÐÃÆÆÊªmó"—ËåM®zZ--­¬ JLLHxþüرcÇbcãã<àñ¤R`~£¨™‹edäè8mÚÔ©cÆ,_¾bتÛýõr¿Þʤó÷,öæH-Ü£hQQ¿~8~çÎöíàÈW íÈd0;PQ¡Ñ€Íô<^E…î:ˆYækíí1¬GyóÚîˆXA¥’ϯ«C…¢´´®N¡ 0ŒDÒjQ”H'7a¢d2ºlð –!€ Þ ó{ŽtÃmŸZ-†Q((ªÕæäTW#HïÞQQ}ú¸»{xxx´]Íè;€–„ÞK ºvíÚÕÏïu÷€£Ù:^ ?¤ªÊßøpµ:)éÒ%{{¦´„Qo[€×¨²’DrværCBÆŒ±³kûÀ <רhh 56r¹†fa4žæQ­Àì5€§ØÚÚÙ£WÛWWðù_S¯ Žär™L*ÃpÁ`2i4No=Í16¯çÎ]° [7ÿÁƒ 0 ÀÓ››[VVZêì¼mÛ·ß³ÍÝ}Õª•+{õêÓÇÍÍÎÎήOŸÐÐÐP"‘L&“Á~˜gÏÒÓÓÓMM·oÿî;p¦J󨤊÷Þèüxöí€ýi ´îÔ8°­_ï;ñ:O.ZÛ7?'Ïð\#`þé!hµ4ÞªU+W~þ9¸§¹™ÔV8tœÈG¡P(TêâÅ‹/_¾{÷îÝ;vˆÅb±Pø><€hdddÄfƒ'ÿôÓO?íÙ£R“ÚþÈo0ô—Éd2™Ìðú–-›6mÜH£ÑhJÏžáá#GÙ{jn&áøøñãÆ=N£ÑhµµÏŸ§¦âxPP@@·n&ŒÏf·ýη†.—Ë5L¡••……Mó; Z³fݺ÷y˜Ro»°:›ö€t<¤Îœ8°(⢾þš@xüøØ1pä+ðÃà¸PX_ã|¾. ƒn¯ø-ðõè1o^Û/®CÀÀ°°þ¹_$R*· ¬V~ú{Z:+:KK;;%€úñ¾Þ?/ƒ yõêåË/‚Y´¦«Ú_—‡×m4FÏÎÎÊÊÈhzθá™T( Bo’ɃGE ØVõÂbó´úõ;6'ÇÕµ[·Ç¡°=Nœ*•ÃápØl''GGGGðö¶} Xš^iŠáñ¾àžÎ3´ý7¡‹É Â1S©`a™L&“:H÷ZZI¥ß¿}ûóç?ü°{·Zœœœ vQ‘Éþþ––þú«©©££ƒƒnö”N§Óýý/_¾p!?Ó¦-[òò=zôÇ•J¥’@0773c2׬YµÊܼGîÝÁ[Úm ¼ýæu8>Xÿ7…B¥â80@»$I$¹¼¨¨°°°ð}ÞØ1FxËsýæô€o¹âéÙ¥ ‚47“ŽŠ4¨­ÒÒ­[PPffVVv¶P(ŠD qq¿þúË//#þ¾DGÿõ×±cT*™Œ ––ææ~~m<º®$ "qݺ/¿\½1~9Pz@Û-ôfÿ¨6›Í66vssuuu¥ÑÆ;–ÏŒìß´z;;[[cc#£¶4ÇÅÅÉÉÙy×®={¾ÿ¾=¢˜ãÜÝÝÙ¹sœóé< |~CCMÍÇT©´±‘@Èɹ}[wäkeeZÞ­‹Pgo¨3«À‚º¶ô–ØCœTÝþ% úžÁò>èBhµ`àÜÞç# Ì.tyÿ'ƒ\€þ$©T*{uÚ# *ðÿŸ0À&×¶”€ãù|>_ ËS:¦¥A¼‰‰‰ ‡c¸°Òº¶ªÛŽÌQ°ÆppÜñ©RRL7°¬îÍ¿‹£ÀÌ7h­m+íPZ ÿn¹„ü[»RÚØØØØØX\\RRZÚØØØÈãYYYYYX„……†††¾ÿ[tG·#‚p¹\.—[YYYYUÕËŽAMÙÛÛÛÛÙ™›››››ƒëï¶³ñÍíT ø|Ðw€¼€éT0F­ís ûV¥R©G`“H†aÄÛVÁ‚7àÕ1¬©ö¤ßÂÂÜÜÜ.±ƒü¯Í~<@ ´/X@ €@ üh A @ Èÿ€@ üh A @ Èÿ€@ üRfæ³gÁ‚€@ @ ´ºº¼¼¨(##--5µ¾¾¾¾®îÝÎ*‡ŽYZZYY[wíÛòõ èÖ­åÏ©®®®®®nùý ¦¤œ=ÛòûéÖmÒ$Xñ@ ¤9¤ÔÔ””gÏ]] :tôhýùÊMÏöÖj5Æðšþ;Ý)ËÙÙÏŸ§¥=žœÜ£G¯^}útL6Zbö´Ö”‚@ÚFãp F HÚãtp"ÑÈÈÅÅ××ÛE ““‹‹e²—Ï…GQÃÉÉßßLJB)+KO/(ÔjX;@þëx¼ÆF.wðà#ÆCQE Ã0­ÖÐÂ0Çq•J©T(tþ?Àwº{]]ÝÜ<¿®ŽÏW*[ï¿ü˜`2ÃÃ7nLK»~ÝÝ}ãF_ß©SOœ¨®ÖjÛòJ—. ìß3bÄõë}û†‡ïÞ–&—ëï “œ,8uêÌ™+ÒÒfÏX¶,)I­~ÙŒêhˆDÃÔÔÌŒÃ!Äâº:.W.}ÙP©ÎÎS§®];}zP‹…¢­{Ž …ÉÉÑÑ»výóOy¹J念åßúüBý@ XPG ‰„÷ Ø€ã8¼Oï¶Hò1C§»»/ZtæLB—[Q‘˜XXXQ‘™™ŸæÌŒ^^tzÓ»)'§‘#LIÉ̬«+-MH(,¬¬ÌÊ*/¿qãÓOƒƒ[?Ø}$’­íìÙ7nddH¥<Þ flÜ–÷·#£ÐÐyó¢¢,,D".×Êjðà±cgΜ9s„–~Ž;l˜·7‹Ú+Àf{{1mšá=ÇwíZ_ÿìYuµ»û'Ÿ<¸eËÌ™³f音`Á7ßìØ±aC` DòìYy¹³ó˜13fèŸ0mÚÀ]»²Ùï§H$SÓÀÀO>9|øêÕúz©4/ïÑ£¥KH¤—ï³¶8pùòþyñ"#£¡¡¢"1±  ¬,#£ºúþýU«z÷æp^2ÙÞ~ôèÏ>›;wÔ(gg2¹¥)£P\]Ç›;wÙ²áÃmm)”·ü¿½žZ_þ­ËïÇ]>ùïA‚Eyo!"¹»òÉÞ½;wöè‘–öùç={~ýõßK$ƒ8‘˜øÝwÇŽ}òI||ß¾?ýTV¦Vææ£FýôÓŽ3f`رc£Fùø=š•ee5qâŸÞ¸±zõ¾}Ó§_»yøpeåû.@CQ«{÷O?Ý´©o_0 #“ß4ìoíý­H´±0àË/ÇŽe³ëë ÌÍ£¢¦M›0AWŠffÞÞaažžJQQrrzz]Ý«–¼©Tyy2ÙãÇwîääH$(Êf{xDEM˜0r¤«ëËCý¢¢û÷Ÿ}ñââÅ{öÌšuî\ïÞ@~š¿Ãd²ÔÔC‡~øáË/ïÝ“JßžBkð`qãzõú·ËÿÛi}ù·.¿{ù@ ä?ÉŸ9òóÏ`YV«Ñ¨ÕZ­Ri4*•R©Ñ¨T …J¥PÈd¥¥ùù™™b±@ÐØ(óù"×Ð 66Ö× \n]ŸßÐPSž þ¶m%­MËwÁ=Hí‰do¿xñ“'YY/^lo¯óHK–$&J¥‰‰3g:9oX¬^½Nž¬¯ÏÏ¿woÚ4 ½ùÁdöïâDZŸóæÐ¡ffï?KL&;8|úi\\ffMMFFJŠT*‘œ<9bÄëùïñVŽãx~~VVZZ]]UUY™PÈçóx®®]º4þÐL¦¯oQQ':9YXI~~ZZlìñã•”€ûºt0`„^½êëÓÒêê¼¼ ˆŒ¤Ñrrºr¥¤ÄÏoذ#úõ36nh¸~ýÂ…K—bb0ŒÍvq =º[7//33cc"Q¥jh¨¬ÌÈ8þÖ­„„/$ùve2íìBB¦M0 $ÄßßÌŒL–ËùüªªÄÄnÞ¼|¹¤D¿užD23ëÑ£ÿ¨¨#¼¼¬­9U(jjŠŠ>LLŒ¿¿ªJ.ÿÐ{DšC£ÙÙ……ÙÙÉå99™™<žFƒ ‚¹ùàÁ«Wýu@‚ ˆPèèH£EG——Óéææ66 †RYSSS#“éËL­®¯/(àñH$ww 2A ÷†°Xáá¿ýöüù±cãÆ!ÈcƯ^ýð¡DÒ<](Êf÷îýÙgëÖy{?¾uëúõ²cǾ}Dâ«óÑÚû[™ìâ2~ü®]K—š›ß»·xñï¿§¥ÉdmWtz·n«V]½zõê€RiYYuµTª/WÁØØÁÁÉI©üãˆÿÝ» „-[nÞ¼xÑÕuËŸ ââÄbÉÂbР/¿üê«aÃ~ú)&æüù¬,©ô]öFI$÷î-_¾lÙ½{àß ‚סÕJ$BáËoBQ 1L­~ó¾#*ê§Ÿþþ;!A hIЉD__ E/_þ˜ä¿}h]ù·.¿eeÒ9õ@ ¯ç Žãx^^VVjªPÈãq¹ÖÖööNN|~ccCCqq~~v¶‹‹‡‡—WgȆ³óÀK–ìÝE Ü»wçNB­[æìeÊ… UU_|±c‚¼Úàiíý­){û3~ýuݺÐМœŸ ½x±®®mƒ20ŒÏ¿~}Ö¬°°/¾ˆ× ‡Ž.)Ù·OWΕJ£1t:ÐYçá™Lw÷¾}]]¤¤$:º¼\¡x½¦Òh23OžqâÑ£¢"Ýp$%%1±3 ŠR(t:•ªÛYB¡té²hѦM“&•–þøã A7oÆÄ|ö™·7ƒA¡ (ŽK$µµùùJDDHˆ …rçNAJE °Ù~~aa66`ÿª¥`*UiééÓß~»z:‚ä罪TQÔÔtÀ€+V¯vu}òdÕªqã²³e²ÀÀ×ç¡u÷·¹¼°ðúõcÇ>û,6öÏ?óòÚËÈEQÍÆ&<<**2’ÅÒǬc2CCÍÍÉdÉËû8Ô`nÞ·ïôé2™99ß}wûvmí«w› (€ *UUURÒƒ7o¶t†-\¨V¿¿Ô±òÿáË¿µùEQélú@ ·ñZ‰Ã13³´´µurru¥Ó™L##µZ©T*I$‰LöòêÚµ[7‘H àñ:C6<<˜L¥²¼œËÅqccccÝž•ª¾^ ÀñðpÃûq¼¾¾°°ªJ­Æq77•J«Å0 ²’ËÕh„JU«µZGÿøÀfÛÛûûèááæfjÊdXZ’Hdri)• î$MLüüèt.7++=½¬ìÍ4Ž+%%FFýú :mZVÖÅ‹.dfVW Zmç[T÷rúqÇQ”@ ÓœFŽÜµkÙ2ùùç¡C¯^­ª22ò÷¡à1 äD&ËÍ=yòÂ…úú¹s׬ٽ{×.±øäɼ<‡qã6mêÝ›HD²2¹\¥jžs•ª²òòåŸ~úùç×/¢RÝÝ.ܶ-*ŠÇ;xpܸ+WjkµÚ×G*kíý­ƒL¶³ <ØÏÏÆÆÊ*0pëÖÞ½_ÓI¶¶¡¡,‘H£-Y²oß®]ƽNr4š††Û·¿ÿþÇÏ++Ó™(J§wé2nÜ'ŸÌžÝ·¯ÞGE"YYÙÛXDk RÝÜæÏ߸±­öÊ•¥KO*)yµyD Ét:™Œa|¾N¾þÍòßÊ¿µù¿è<ú@ ·óZÉÒÒÆÆÞAôç 5ù‰D"“MLÌÌ,,ô§ }8h4¥Ñ""æÎ]¿>"¢ù÷2™P¨ÿŽ+b±L¦?õǵZµ,íxE!‘ìí{÷^°à—_F65}ñ">>1ññãÌÌÂBqr²³ BQ@¡°ÙT*ŽK¥B¡BñöÅTMqqLÌÁƒß|ƒa£GÏŸ?eÊêÕÓ¦Q©BaffRRlìÑ£×®=z”•e¸¯¤³€ã*•D"—㸩é Aß~»j•Lvî܂Ӧåå©TF$¢¨V+“I$º!LöäÉúõ3fÌ+—¯Y³hÑ´i3fxy忯ÅýøãÅ‹®®ß|ãî^W'½K„*#£ž=—.]¾¼K—ÒÒãÇ328œÐЈˆ°0&ÓÏÏÄ„DBQ2Ù×·gÏÒÒääÔÔ²2ÿÖÜŸ™ÙØØšåq8®R‰D55••ÕÕ*Õ›Œ*•Dû’P´±±ºº¦¦¢âu{δZ>_ xyˆˆa|þƒ_~9qâ›—Øuj…Drq™9óÛo׬qvNN^·n„{÷¸ÜWË=Àb™™±Ù ‹ö ‰D-i#m·©³É{—kó‹ãòo*ü7ø—„ùV(p\¡¸wïÀÍ›·o/,|Õ"¦… ‡ 1AÀžF«5J½ÞÌ£PœgÌ2ÄÙ9'çÔ©mÛ6mJM‹qAKK:}À€¦¿ÃqµZ"Q©„Ng±(”–-•Ñhøü'Onßþã'OîÜ¡P¬­ÝÜÂÂæÍ›6müø~àpÄâ3ŽIKãó;›GI­æóKJ„Bí×ÃIH˜4içδ4°ËÈÈÈÈÜœN +*¸\}ˆf—ÉŠ‹ÏžýúëÅ‹õ‘Ùì#._ž?_&+**.Þ¼Ö¢d2‹Å`¨TJ¥ƒÃ¢EGŽ=ºhø†J¥ÑÀ]ß|sò䯿†„Ì™3dȧŸ"HËï¿u¹§Óœ"#ÇŽ9ÒÆFßèôà`++ ¥³/±£R=<¦O?räûï}}Ÿ<ùòËaÃþü³´ôõR@¥ÚØx{ÛÚ"HUÕ™3»wÿôÓÍ› -1ÚrRg’ÿŽ(ÿÖç÷ßR>ùïð/1òò$-$ÄÓÓÌŒB),¬®~ÛÚó–qQ”L66¶±¡Ñäòœ.W?§¢L¦¯¯ŸŸ•€ ¥¥º_h4AvvMZ=c†··——•ÕõëUU-÷;à¸JU[[X˜˜xìØýû=zôë7`€‹‹…‰”–Æçžƒ¢lvŸ>[·þðÚ5ÞÞuu'N¬X±eË?ÿ´æmï‹BQ^Ÿ“£ÕN*“]¹’˜ØØ©4š»û€ÞÞDb~þž=%%oÞ>odäã3ztPЦ¥­[—Ÿÿª(otº·÷êÕ‡¯]Û§‚Þl”•Ý»wèЪUÍÈ‘s愇õå— Ž‹Å<^UURR\œnÁŸ_^ž——š*60L$ª®ÎÏOI!Á©/&‘ÔÖ¦¤¨Tb±F£V×Ôœ:uüø¹s¦¦&ôï¿råÌ™8^S“—ÿý÷þYP0jT÷îR©á)H Eyù+W:$“-Z¾xñ´iTªR)VW'%Ý»÷ô©áùee©©¹¹2YŸ>=z,ZnjÊbá¸TZ^^Ppõê×__¹’–Æã½ìõ"“mlÃÂÌÍ$-mçÎ òó?Dp kh¸víë¯ÇŽýúë-[~øaåÊM›† Ašš‡ׯ_°`ÅŠë×y<Ã} Z­VËdL™2yòôéD¢P˜›{óæÒ¥Ã‡ïÜóº…„Z­@ž~ï^r²‰ ‚dgóx-j4\nFFlìÝ»drCCKö…µîþΊD"Šb†@(ŠaZ-†á¸VÛØøìÙ­[ÿüC$‰º@ÊÎfÓé‚V«V·eÈ­V"ÉÍ}ð >žH,+S(^Ú‰‚P˜˜˜˜H£ÙÚöîݯŸá‘ÑryZZVÖ_:‚ÉîîóæmÞüù玎éé6ìߟžÞ’ØujD£ÑhD"†56¾N;JþÛ«½·¶ü[›ßA?@ Ò„ß?pàÇ•J…B.W©”J¹ü­T*2™îS.—Je2‰D(”ÉÄb¡P*‹©T$$‘ˆÏ—H„B¯¶¶¼¼°<“Ïoh¨©±m%­MÿÂ…))úUêmsçLJ3bıc|þÉ“S§ÚØÀÙÒ«oßýûëêD¢Ó§ÇŽ51iÝo##¨­­¬üñLj‹HtqY¶ìÚ5©T*-,Ÿ"Ñ;&ØÙ餄BñõݰáÞ=Ã{¤R©4)é×_{ö¤Ó;g)‘HÎÎÓ§ÇÆòùYY11Ë–¹¹Q©o+›°°C‡rs32êêž?¯ªª©ÉÌù}òdùrgçå´ØÞ!éþçAᬤ[4§ÿ?ø[¥R* Ýõ—Ñî`vd²……££FóìÙüþûÍ›µµp¶ôcF¡ÈÏ?}zåÊeËŒÔÔÖ-“Éž>ݺµoßÈH¯¬”É´Z™ìÈ‘)SœœÎŸ72b0ˆD¥²±±¦†Ç^RA•*/oïÞ)S|}ÿþÛØ˜Á PD¡hh¨ª*-­¯ï¬»64šÒÒ³g§MëÙ3!A.ÏË++{›E*ÍÈøöÛÑ£'O>z”ͦѨT2™@P«ùüÊÊììÜÜÚÚ7ít‚í@ ÿÿ’ wïîÝ»wï›ïÞ£–ÜÙ™8påÊ•+AÔê‚‚.<øC¦ÌÄÆÔÖ<Ëò:"#«ª.„å€ L&“éîË@ mË¿Ä@:{¶O;»–Ü©70 m @ @þM|ôÒ‘#ݺMš+@ ¼?øl@ éX @ N ŠR©l¶¥¥½½™‹E&ëÂÒ·Ç{¬­mlLL˜LòñB$Òéææ¶¶ÖÖ––FF$Rû´˜¶†@ RMMmlìímlllLMi´ÎÐi4w÷áÃ?ÿ|Íš¹sGúxbžBÚD*ÿs&XY}çNCCbâÏ?÷èÑ4œ1‹5`À¯¿ÖÖòx§OO™beEx‡ò¡ÓvíÊÉ1 \X˜–¶q£—×ÛBÿ· Pììºw=zøð®]ÍÌ>¼2ìléy€Fh[(/¯+~ÿýÂ…5kìíïÝ[ºtÂ//;»à`—®]Ç›7ïðáìl±X§tÚÄÖv„iÓÂÂŒß\žºñ…B 4ms(Š¢$•ú>ã%%i4 Ajk™2ÅÊŠÅòô´´ôòš:õ›o²²‚‚6løûïo¾éÛ—Íþã'…"+ëôé¿ûîÇÿú«°°-ŽænOù|—'ëÆ¼/×/ä_Å®3ã*Ÿ_YYYÉçS©t:Ÿ¯R½úÜwi)8.•VUee¥¥ef–—7¾ÿ{ Rú÷g±ŠŠŽÙ¿?:úùóúz• A$%åòåC‡RR._n›wQ(ff––8^ZúÇÙÙZ­ÕÖÔðxPÞ ,V`à_|þ¹—W~þ·ßºbʼnúa¼@ðâÅíÛÅůþ-›=pà¢EÎýûׯ 6'B!—k48®Õ*ÉÉ®]{èÐìÙiisçŽåéI£Ý»÷ôiǞѧP\¹²gÏŽPÖþ{ÀYåB$š˜„‡òɆ §NݺuþüÇ11GŽìßÿé§ÁÁ¦¦ï>“„¢ÆÆAAkÖìß¿zõ¨Qžžþþ³fýðÃáÃwîÜ¿êÔ©SÛ·íåÅb½«eÿnϧPÜÝÇß¹sïÞÙ³ýü8{ûáÃ׮ݵëÊ•{÷Ο¿uëèщÝÜ(ý/Èd ‹ˆˆ¥K·l9{ööíóç<¸}ûðá}û–. ³´$‘ K’à ˆŒìßàÀ  SS‰F³³ ŠŠŒ:tèÐÈȨ¨^½˜LÃ4µ¾ü ccÿqã¾ûîÏ?Oœ¸ÿÁƒ3g®];yróæÅ‹ÃÃ9Ý Ù»¥§u²cnޣDŽ _½oßþý—/ÇÄ\¸wòäßïÛ7gNïÞææúP(“'ïØ±e˲e!!nnÆ’=wîÖ­èèU«ÆŒqqiêè'8œ€€ öî=r$&æÁƒ¿ÿ>sfçÎqã|}ŒÚÆsD£ÙÛöå—ßáBLÌ… ÆÆž8qêÔO?-[6iR@€±±î=4š‡Ç¢E?þ¸qãüù]ºÊ‘hm=tè_üüó¦Mýû[Y‰­—Ïwm/-—ÏÖÊûËOëi}ûmmûj/}ˆ Z­LÆåJ¥(jddeedÔ²5ÿ-¯_¥Ó]\zõêÛwèÐÁƒÃºt16&Ùl/¯ðð!Cš×Wkê—Fóõ]ºtëÖŸ^¾ÜÛ›N'‘,-‡ Ù´içΣG·o1ÂɉL¦Pºt™7oãÆ}û–.õô¤Ó[«:¦~ÿ;úí}Ú/•jk;xðêÕ?üpùò›Òß~åO¥º¸ôéÓ»7›]Tô×_/––¶ÜÃQ]_[¶pa¯^q…ZÝØX^ÞØˆaL¦¹9“©Kc{ŽOtåêê:gÎîÝ{ö?~üø??~ìØ·ß.^ìãóê%vóøDŸ"#£.]¦Oß¹óÐ!ÐÊÎÛ»wÚ´nÝØl]jÈd‡!C¾ûîàÁõë§NuumªAï¼zõ¯¿~÷ÝòåAA Fç“©V–ÉÇžwE)KKooÿÐÐÐЀðìåÅá¼Ü\¨TŸÕ«££ïÜÙµ«gO¹<.îÂ…'î܉""v>ujöl{{éÝÒA§»¸ >oÞ‚»w_¾|èТEEE ÏžI$Ÿ¾gÏ;?þØ«‡ó. àÝžO&[Z††N™2{ö„ +Wþõ×Ù³¿ü2hR™ð÷ßgÏž=ûðaU•L¦sÙÓéݺmÜxêÔ­[[·76ÆÄœ?Ããuï¾uë©SwîlÜØµ«®±Ðh..S§nܸ~ýæÍ³f¹¸€ß/[¶mÛ† »víÚµaÃŽË—÷èaa¡+ÑÖ—?•êåõÉ'×®ÅÇÿðÃܹ¶¶åå·oŸ?çΣGÕÕÆÆ>>úZn}zZ߉y{Oœ8bD` ‘XZsâıc{÷þöÛ£GZíðáß|söìž=={êH¦¦áá“'OŸ¾iÓ_>½o_D„@pÿþåË õõŸ~zâÄLœèì ÒC$ZZN˜pìØ_íß?w®ƒCMMbbRRI‰“Ó¢E§NíØJ§¿Ÿê¤RýýׯŽþçŸU«ssÏž=~|ÿþ#GnÞLMÕh|}'O3ÆÙYçò'‘¬¬ú÷Ÿ>}ìØ>}ll ËŒ@`³†5kìXoo6H­“Ïw‘çÖÉgkå¿ýåGß– kk//??//??ݧ§g—.66Më¸uí·µí«=õ!‚¨Õåå—/?žžnj:gÎwßmÙ2z´£#ƒñzn]ý’Hff}û._þÕW»vmÛ6~D‹… ..S§®X±sgóújMýâ8…bo߯߬YS§vëfaA§ÛÛ>sæøñÓ¦-X0l˜»;ÆdúûO™2eÊСöö$Ž·V?´ýþ·ôÛ»¶_"ÑÏoíÚ£G÷ïï×O(Œ‹{]úÛ·ü)kë.],-•ʲ²ŒŒš­–Á°±qsóõ5Ô¾¾®®ÖÖ/—S]]LÌÉ“ii¾¾Ó§lmÝùvÕQ©¶¶>>¶¶D¢PXQ!è¼æí9>`˜RÉåVT”——–ÖÖÒé}ûNžöñ è[h´^½vìøõ×/¾pt¬¨ˆOL¬¯wvž;÷ÛooÝ:~|Ä"AÔj>¿±ÑÌløð¹s×­›<ÙÉÉÐ 52 7oõêY³üü”JïC-GlC~ÿýÀT©”J…B"‰ø|±X(äñÄb ±Q$¸\‘ˆÏohàrkk+*¸Üššòò††êê²²úúªªÒÒººÊÊ’’ººŠŠ¢¢ÚÚòòÂBðL>¿¡¡¦Æ¶•´w~ +«qãââ^½ÝYÿyþüôé`Ó!ƒôóÏ¥¥))+Wº¸è•êï¿uk\œPøøñ¬Yz…hØ<<Ö¯ñ¢  ;ûÛo½½›¯5LOuõŸFFššêç\\/¾tI"ilüí·áÃßÅDz·ç3™={~ÿ}E…TZXÈå^»6y²‹‹aC0ÄØ¸wï¿þª«ËË‹‹›?ßÖV¯f‰D‡ Ο‰jkþyÀ#£¦MÒÌlâÄ3g„ÂÊÊ~èÕëuÛ[_þLfß¾Ç?.•fe­YÓÒyŒ–¦§í ííçÏ¿|Y ÈÌ\µÊÏÌM1{÷J¥99ëÖuë¦O‰±ñàÁ‡Õ×óxÇÆf#‘hg7yòƒbqfæ¥K'êg‰D›Y³nÝÊÍ•J¹Üƒ x·MÌ(jf6yrll^^UÕÑ£¡¡o+«wï¿ÿ®«KMýóϾ}›šžžëÖÅÄ…iiK–ïRkå³õòü.òÙùoù¡Ó{ô8p 9ùÕšª  'gïÞ¦RÞšô·¶}½>l9$’¥åС;v\¸ÐÐ •ÖÖ&$ìØ±`AH0¬ß_ÿ¶µ¼¼‡gÍzó†û–Ô/ŠZXLštæ WP°aCHˆ­mTÔ… éé/fdTWŸ??gŽ‹K—.kצ¥edÄÄLšdfö&þjýÐÞõû_Óo­ïZ“þö.SÓqãNŸ ËËwìèٓɤӻwß»÷Á‰¤©–HLܳ'$„FÓég.·°ðáÃ9sºt:4::!!.nÑ"{{SÓ!CŽçótå©×·ÙÙçÎ Ô´Œur(éÇK­…BqsûòË´´Â²²ß:Ô××ÍÍÅÅÏ/"bܸ~HHÈÉ‘J 6m Ó—sGŒOô˜˜ rçŽDòªøøÇ'zyàóoÞ?ÞÎNWB‚•ÕĉÇ76ŠÅçÏÏ™£û†NïÑã—_’’¤ÒçÏ?ýÔÃC—c:½W¯C‡’“ÅâÄÄöÐ'‚ÿ¬I«¢£ êÚ•Éd2ÝÝÁ§µõ˜1÷îÚ½D¢‰‰§gP¹¹Tš›[\ŒaffÖÖ––ÖÖÖÖl¶B‘Ÿ_[‹ãöö~~vvïßD©LL[vÿûÊçÛä¿#Áñ/6oööf³uúŠÉd2=<¼½W®LM}µ”¿-ý­m_¥5šúú›7¿újâDw÷îÝ?ÿüða¯_¿ýû<¸zõ—_† Ó-ÚjoýÓÚ’JKKssù|ccggkk''.÷Ù³GêëY,ww++6[(ÌÌ,)‘Éô»S[¯Ú£~ÿ{úíÝiIúÛ»üq”@$¢(‚ÈåII+WöíËb1™îîÆÆ^^›6¥§ëÛDS0L(LL Ôž˜›O™òóÏOŸ¾x“”tóæÆÃ†I$gÏ.Z4jÔ®]ÉÉúrn¹üÃñIË%)=ýäÉøøš] a—ûèÑÍ›ÙÙ8îàêè¤C.OO޾}»®ÎÃcäÈ¡CA|D:ÝÃc̘Œ³²NŠ‹{9ÈÍÇ ÒðƒÍf0P”Å3æÔ©ØØ1cšßÅç×Ö¾ß Z­TZW'5*­V"il”H„Ng³_ÝE¶çóµÚÊʤ¤’’×»J‰D&“Ãa2D.çñäò¦ªX«•É„B¹A SSÝù"ju{–?‘Èdš›³X8.ÕԈž™R(‹9òàÁŽööññ‡:uãÆõëIIêí5~ִ싊x¼¦¥…a†ã ÞŠ"@£Óé8.•r¹‰a$3 “J…âý‚„¨T™™;wΞ=a‚Zýõ×[¶8põêš5,V]]bbtôáÃ7nØpòäãdžÏëj“@xu,ÇÖÊgKï'äÝåóíòß¹y{ú[Û¾:Jês ff^¿¾iÓØ±ÉÉ cŽŽÞ½{ΜîÝÛ½»°°}õOkQ(**23++ „àà.]<<\\¨ÔÊʤ¤” 1bà@GG{{33£®îĉÊJP/ï¦Ú§~ÿ‹úí]%³eéoßòW«E"O¡`0,-›ox;8.?{vêÔÍ›FFß?y²‡Gc#ãŽ.O¯¬üé§1c¾ú*+«eï‡ã“¶ÃT*>¿¡A¿0”DÒØ(ã8ÆáÐhºþW&ËÈ8þÒ¥úúÉ“§L4ÈÚú÷ßãã:Ô¢°ðÈ‘›7««ÿA„ ôVÁ‘ËE"™ ÇÅâ³g‡ ëÕkî܇ÛÞæ'èt3³—($ м ‘H¡x÷@¾ïö|×jU*æõ†)‰\Ž Tª±1•ÚÔÄ"¨T‹JE¥òÝÒßúò§Rår@&C&Ó‚ÁhÿAÑ›a±‚‚Ö­ûæ›àà§O.ŒŒœ:õÜ9’™Htp`³-z]©`˜FºÛ׃ãJ¥D¢T¢¨‰ ƒA ˆHžˆ¢4‡cdD¥¢(èöÞ¥²ºúæÍ;–-»ysçN:ÝÙ¹W¯ñã7m:rdóæ+W~ÿËõõ7îÆúzýo^6…H$ÇÎÎØøÕ[V['Ÿ-½ÃäÝåóíòß¹iIûm]û";F6G«­¯‰ùóÏäd¥rÔ¨ÐPŠ#?¿}õOëõ•HTZš“#q8~~~~ŽŽVRrþ|I‰Z­VÛÛúù1™BaAAa!h§ï®Ú£~ÿ«úíÝêúíéoïòW©*+33««Éä©S{õrq¡R¯_OKkÝ„ŽL–“óÇ—.‰W®ÌšåéI¡ Hr²a“Hl>AK €«àžÎ¨ßàø¤%d2ðz¢(‚H$ D П¢¨RYV¦TêËG&ËË;yòÂ…††¹s§NŒ 324Èή°ðâÅ›7ÿ=1Va»· Õòx¹¹)) FF¡¡‘‘NN­‰?ã8®ŸQzÓ(J§‡…åí­_ãJ$ZYõîÝ¿¿««Z]R’–V]ýîͨ½Ç‡‘³€IDATž¯RUWgd(ÖÖÝ»ûøè£™ØC¾¾ÁÁ¶¶ EqñóçMŸã8®ÕbŠ%ûêù³Ö—¿RY[›””™©P88DEõé£s ·¤®ÞžžÖ—;fiéìÌb …99EEúÓ(SÓðð#ÜÜÞgs¬BQ^žž^R‚¢#G††ê·r&&=zŒçåÕÖÑÓ0L./-?}zóæŸ~ÊÉ¡R}}ƒƒííÁW©¤R†J5336Ö—=îê:|xd¤©i[ÈgKïwùl-í#?M¿½Ÿ>l ‚±±‡‡…ÅËí–@ ÓMLŒŒÈdF.—É4ï|õ«PTW§¦ÖÖr8¡¡aabqQQmmeen®PhnÞ£G·nffuu•• Eûë‡ö®¯~kŸöÛÞå¯R•—ÇÇߺU]mk;uê…ݺ½ËiAJeNÎ_]¾Ìç»»s8†¾> S(„B¡P¥"“íìºt15Õ{©##''''cc­V(äó;b¢õåÓ¾úácŸj×®]Ç ÖïéEQ“ÐÐAƒ¼¼P´¢âÙ³òrÃeŒ EVÖ©S7oÖ×.Z´eËâÅ..ÅŧOß½[Zú¡Í½¶zÞŠL–•uðà99óæmÚtàÀÁƒBáîݧN¥§Ëd&&>>!!ݺ©Õ—.mÚtøpAAS×°F#WW bmÝ£Gdä€,–H„a|þ‹OžŠÅ:ñG6{Ò¤={¢£‚ǯ\áñ|}-Ú¼9(ˆÏ?{vΜøxàÝgiÚëù8.<}úÓOgÏ ׯïÙ³sçºu’‚ þþ‹ïÞݽ;ŸöìÌ™ /?_©¬­-+ Ùì>}æÌ™4©wo +( “-,(”¼¼7bc««UªÖ—¿HôèÑž=ÑÑ……¬ZuîÜáÃÍæÍ§Nååi4öö¡¡Dâ͛۶ýö[a¡a}µ,=­-‰¤°ðÑ£ª*›9sÖ®>=>þ×_ LM‡ [²dÓ¦  }Ÿù#­¶¦æÞ½bc¿þú÷ß=p`çέ[/^,+sv;våÊ=PAÞ¯ãb2ûõûõ×_5«ºúúõsç>,.‹Œ¼½§O_´ÈÓS¥ÊÉ9r¤ª Ì[¢heebba!‘¸{÷ڵ˖͙ƒ¢©©ÆÆ£Gþùüù&&‚ µµï.Ÿ––­¹Çä]å³µ´‡üt>ýö>ú°E]ÉÂb̘?ÿü矩SóóO:räÊ•ÌÌúzÃÏoΜo¿ •ÉîÞýüógÏÄb°£sÕ¯VËççä¨Õ..'𙥦~ÿ½@PW'ñùff!!={ªTgÏñxZmûë‡÷ë¿þú­}Ûo{·…"'ç—_6nŒ;÷رǯ^Õh~üñ×_ïÝkh06 6 ˜¨¿é)*UQÑÕ«ÇŽed¬X±c‡»»þ‰$3óÔ©ŠãÇ¿ùfçέ[e²èè§OÕj/¯9s¶oV(<>>¾¡A£AÖ—¿Z]]”téÒ“'J¥·÷ðá&ÌŸ?{ö°a}úxxH¥¥qq11wïž.Þšô´¦±19ùÑ£ÆF7·ñãçÎ]¶lΜ~ýœëê.\øâ‹-[^¼`29œªª;w®^}ñ¢±ÇY,gç®]åòÄÄ›7cbŠ‹uj’@`±ììºvusS©=ºpááÃÒR¹\"Éɹs'9Y"qwŒœ2eâÄ>}\]¹ÜK—V®üæ›'O(33 .îÒ¥§Okk[Ÿ “Ëår“îÝG7nþüE‹¦N6mÈOO­61ñèÑ¥K—/ÿçŸìl©ÇÁ©  %…Çsv2dâÄÙ³Ç 15ÍÊ:vlÅŠƒkjLMI¤œœ«WoÞÌÏ‹ŒÖÈç»Èsëå³uòß¾òfj]\||\]e²ää‹oß.)eýZµÞªô·¶}½»>l Z­H”““’ÂåZYõî=dÈÔ©3fŒ=rdx¸…E]Ý•+ûöÍŸ¿rååËEEº½'ïª@{z][{÷úÅ0­–LvtìÚÕÔ´¢âÚµÓ§ïÜIMŒ½½½½I¤ôô³gÏ»v-;["Á°Öê­¶½ë÷¿¦ßZW¿o’™W¥ÿ}Æ-ÇÅâììØØË—sr(”1c&Nœ5kòäÈÈÐP++ >þôéãǽz53³¦F­62òð ´³ãñâânÜÐ¥Ã$’òòÆF ??«´ôÆ ž>­­U©¤ÒÜÜ;w’’;»=&Nœ9sܸqãúô±³ãóoß>xðÓO—/?w.7×0äHkF(4š­­¯¯»;…’‘síZZšPøæÝ¬3>ÑA§»»ÏœùŃ+•gÎ=zölq±áXìãŸ‰ÆÆ]»²X±±k×îÛWX1wîòå“&ùúj4qqΟ¿dÉ™3ÙÙÍëW£‘HŠ®]§M›9“Á8{vÕª~xüX?žþð_ óÝÙÐ…Ñ “’~þ¹{w:ýãz>Ò‘ò å@ …©éСwîˆÅ™™ÿ=`@ûÿññ@¡xx|ýuzz^Þ‹ß|Ó¥ËûÅÁìŒÀ=H@ H¨Tkk++A,®­}7ß¿µdÜ݇ ›2ÅÕµºúܹ‹KKÿþ܃@ ùÏC¡té²páŽûöM™âééáìåec“}èÐüùÙÙr9,!PJîîãÇíêZ^~ýúÅ‹……oíû ¤ †ñx|öÙ!EERiVV[Ûàíý|¤#åÊ3@Ú ­–ÏÏȈ‹;{V¡xøÏÿöÛ¼¼ÄÄÄÄÜ܆†£ð®¥T[{áš5ž=[X˜ýï쉡ôÁQ«32?n¯“ÚûùHGÊ'”g´ZmCÃãÇW¯þñÇ›#ÿý×K©±1++%åßÝÃ=H@ ò? „ÐhîîÇþùš5sçŽåìL&·åÓI$;»¨¨™3W¯^±bôh__«møjïçC † (•Êf[ZÚÛÛÙ™™±XdrûÈxµµ‰ “ù>GMB mÔ·òßHæç7cÆöí›7¯Y3k–‡GÛ†*$“]\&N\±bË–mÛæÌ 5<Éùcx~{B¡ØÙuï>zôðá]»š™½nL§ìÚ•““‘q÷îôé––>tzxøþýI¥RiaaóO &fìXkë§&Þ‘hnÞ³çÆ·n%%ñxÕÕ‰‰yyùùIIuuARÒ;›6µÅP‘H´²1bÇŽ/x¼””¢¢ÂÂääúúÄÄ ÜÝ_žºh™üü÷ø÷Ê'‹5`À¯¿VUUVþüsÿþ,VG蟦t.}K&»¸|þù“'ùùbñ“'¯j#y7à$D¡ÈÊ:}zãÆï¾‹-**,lÛÍfjuié… ¿ü²uk^žP˜’"µm˜Èö~~û¢FF={~ñʼn{÷–• æéùå—I¥ÍïC‰J¥P(”Î2FQ2™BA¢¢£G'L˜7ïúõÚZýáhZ­X\YÉåþ;‚¢(›=`Àž=¿þºv­·÷£GË—GD|ûí¹s¥¥d²»{DÄÈ‘sæôîÍáÐh(Š bñ»¨ƒH´¶=ú«¯Æ75=wîÓO]\æÏð@¥²°02R(š‚×Rùù/òo•O%Èd*•BÑjß×0y7ùé\úǵZ' ǵZ {ŸÖ@ =Ð@BŠ‚‚+WöìÙ±£=ž®ÑTVÞ¼yüø÷ßß¼ù1>òzp\*­ªÊÊJKËÌ,/÷Ü;7TªƒCÿþáá,VQÑ‘#û÷GG?^_¢ù¤¤\¾|èPJÊåËmó. ÅÌÌÃÃÒÇKKÿø#;»±Q£Q«µÚšÊ”ÏOgÓ·Z­R©«YµZ£´ ÿY‰Juu3gÛ¶¥Kûö53CQÁq‰äéÓÝ»·m;x°yÐB2ÙÂ""báÂeË>ûlÔ(??++árSS¯\ùý÷íÛ~ú´¾ÞpB§{{¯X±gÏ'ŸÐé‚ EQÑo¿}õÕ úŽŒBqp˜~<=ÝÔtΜï¾Û²eôhGGãõuߺöB"™™õí»|ùW_íÚµmÛüù,‚¸¸LºbÅÎÍå¡5òƒãн}¿~³fMÚ­›…no?|øÌ™ãÇO›¶`Á°aîî4“éï?eÊ”)C‡ÚÛ“H8Ž Tª·÷ĉ#F‰¥¥11'N;¶wïo¿=z¤ÕþÍ7gÏîÙÓ³'›­/ö­ßö–ÏÖÖ—•UÿþÓ§Û§a* 6; `èÐY³ÆŽõöf³Á‚ØÖê"ÑÒr„cÇþúkÿþ¹sjj“’JJœœ-:ujÇŽÐЗõNëêëÝôOËõmëËó]ô?HÀ,ÒhT*èA‚@ 6ã÷ßøñG•J©T($‘ˆÏ‹…BO,E"€Ë‰øü†.·¶¶¢‚Ë­©)/oh¨®.+«¯¯ª*-­««¬,)©««¨(*ª­-//,Ïäójjl[ɇ(“!CîÜ‘H²³Ï4èå­¿ÆÆ½{ÿõW]]^^\Üüù¶¶ú}0D¢ƒÃ‚çÏ‹Dµµ?ÿ<`€‘Ñ«žÎbEDìÙS]-‘\¼8gŽáï F@ÀÞ½ÅÅ……RiNκuݺ1™úw|èP}=wüø°alvû?EML ¸p¡±1/ïþýùóíìtÝ2`b2|xttjªT*•ž??}º•Õûì@Q3³‰Ïœ ++ø¡W/}ªÞ¯|Œ  Ÿ.--(HIY¹ÒÅEoðR©þþ[·ÆÅ …ÏšõªGË Ó{ô8p 9ùÕ›à rröî 24˜™Ìž=¿ÿ¾¢B*-,är¯]›<ÙÅ…By]~[—þöÏ/‚ ‰di9tèŽ.44H¥……µµ ;v,X¢·E{ÑÕu^Þdzf½9 GKäE-,&M:s†Ç+(ذ!$ÄÖ6*êÂ…ôô‹32ª«ÏŸŸ3ÇÅ¥K—µkÓÒ22bb&M¾ä×A$ÚÛÏŸù²@™¹j•ŸŸ>œK{Öo{Ëgkë‹ÅêÝûï¿ëêRSÿü³o_C)'“==×­‹‰ ÓÒ–,éÒ”@ëÚ/‘hg7yòƒbqfæ¥K'ZXèd€H´±™5ëÖ­Ü\©”Ë=xpÀ€·ix}}µFÿ´Vß¶¶<ßGÿ£¨©éĉwïJ¥wïŽñfù…@ HËQìÞ…bkÔµ+“Y[›œÜØh¸Ù¹¡!99)©ªŠÅòò {•÷©5”—_¸påJV–~Y™ZÍåVU …‚‘›M¥¾ßÆä–<ŸB±±ñósw'“ËÊnÝJHÐ/Ä0>?>þäÉgÏ>Ô™É-I?‘hbâédn.•ææc˜™™µµ¥¥µµµ5›­Päç×Ö⸽½ŸŸÝûÆ+Äñ/6oööf³ÝÝ™L&|zxx{¯\™š*“½ê7§OoÛvåJIÉ«©µ6ý•_¦¾þæÍ¯¾š8Ñݽ{÷Ï??|˜Çë×oÿþ®^ýå—aÃÌÍÁ@°#ÛKKjH*--ÍÍåóml¬­œLL¸ÜgÏ=ª¯g±ÜÝml¬¬<<Øl¡03³¤D&ÓÏÀ‰ffC‡._¾uë·ßþöÛŸîßÿÓOóæ¹º’Étº‘þªÖØÖõÛÞòÙÙô•êèàìŒãùù/>zÔØ¨ó»iµuuwîüõWVÖ«ŸþnõÕ™ú‹ÖëÃ%vJ¥ÕB´ 0HÃ[ ™L‡ÉD¹œÇ“Ë›®òÖje2¡P.GÃÔTw^‹Zý.oÒj‹Šx¼¦¿Æ0™E „÷›lÙó :ÝØ˜ÁÀq¹œË•J›ÆhÒh„†±X«55íèšhiú 6›Á@Qk̘S§bcÇŒiþ,>¿¶¶½Nðys*+“’šï%ÐÓÚôwt~µZ¡03óúõM›ÆŽMNNO޾};:z÷î9s¸wo÷îÂÂŽj/-C¡¨¨È̬¬$‚ƒ»tñðpq¡R++“’RR0lĈííÍÌŒºº'*+A½P(‹9òàÁŽööññ‡:uãÆõëIIúìu@TËûðÏÙd––”¤¤E °DEL ¾v{ Œ«XØyMDi”†¥ai–í`wÏûÇþx±å^¼žÏ\/;ÌÎ<ó<ÏÔ33ÆÆ“&yx€ ô~žnßþèß¾ …Bà·ËÝUû•‘‘“# ˆÃinf³?õ? ‡ÓÔÔÖÆç> è~{õ'yvÏÿK$íí"‘X,€Hô߸7¡?€L~‚DÂç³Ù<àñrr_®á¡Px<™ŒÇ€@Àdòù=ë $‘¨//jíJþ Çbñx H$ªª’ÉŸ‰F£Éä® ”þÝò3™\.±Xaa..öö &'{7ç×Ó±âûý:À-?ýoÕW,nlŒ¿qãÍ`út[[##2‹‹½tMg˜ÌŠŠ‚&S^ÞÔÔÔtà@‰¤¼<"¢¼¼½½½]KkØ0SS‰Á()¡R¥W6“É––[·þõ—•Ufæ²eŽŽs愇K¯ÄF£µµ)ÿï—º÷Û·?û·/§BŒ¼¼¦¦œÜ÷¼CWì‚6[ Auué ŸŽ«´APFF^^VÁ––Ž¿èI{õ/yvÇÿs¹Û·ûùM›……È%÷½b÷„B-'§¤„ÏWS1bèÐOD¡äåML¬¬44øü²²÷ïi´¾\ ÿ5µµ>äçóùzznnS¦hkwœ¥A eÄ//é-N=‚¤/w€ …F÷t¬±¸µµ°ðÝ»¦&YY[[GG™ßIþpËß÷õE¡ää ‡UQùòT E ((ÈÊb±"ÇåŠDôë쥫úÃçÓhYYõõòò¶¶Ã‡«¨°X¥¥õõ55…… †²òÈ‘ÖÖJJ 9955|¾t®ªª«K&3¥¥,VÇ …RT´³›:uРž,ô7ý„ß^$r8"¯¤$'ש‚¾¾««£cÏö–ùüªªÊËAÐÐpÚ4[ÛΫ0P(…‘#gÎ42ú´¥»ß^}ã~mFS(ƒ ¬¥¥«;x°ŽŽ‚ò\2Bï€ì ýjkË̾fÍÛ·,@D×^úVÄb:½  ¤¤½]OÏÓSI)+ëС¶¶†&“NWR²±5J( +-•^« Al6•š–V[«®îç·eËܹ))gÏ–”(*º¸¬\¹{·¥%ö,(°é'|ÿ†BÕÔ¤§S©hôÑ£[¶øù`V–œœ›Ûš5‹+(Ô×w·# ô5à‰@°°8r¤  'çùó¹sUU»Þ©àpšš#F¸¹¹ºš™))ýÜ)ÃMÿëÁá^¾üÕ«òòk×¼¼ÔÔ~VF¸é?Ðè¦N=xðãÇÖÖwïJK©Ô7oÓÓ—,10è¡z_çß¿éŠþÈȘšÎ›÷÷ß{ölÚäëkhˆÇ÷f °X==Oϵkð󳵕“ëé ‡8ÐÇçäÉ;wòó›› *+ÓÓKJÊ˳²ÚÚª«ïß š:uÀÌ¿Îügë[ï謾þúõ™™%%‡C¥~ý“ÍÎÌô÷74Äá:ÿŠ@00ð÷¿w/5µ¹¹º:=J­®ÎÍ-.¾woÞ<#£o?‹Á(*¶téÅ‹76r8EEii«Vik­98œŽÎ´içÏ¿{—›ÛÐPQ‘šJ¥ÖÔäåUUÅÄ,_neÕ»Ó~xöÛ“ôˆ>÷=d²½}HHMÍ»w¡¡NN$"„ïñN@0<‡Ãáà8l”•5jýú›7/^œ?ßÈHF¦wÓÿzˆDkëU«æÍSSKL¼råéÓΧ>{'ýï­¦ææ¶m›‡‡¢bxøòåzzᱦ¦»{ddMHÔßóïßtMøü¼¼;wvíÚ¿ÿøñ[·¨T 7ËÐÞ^QyæÌ¾}»w‡„¼{ÇdöôZN]}øp]]íæÍ•+çε±12²³4ÈÜ|Μ RRôô®\ÙµËÉI^þWï'ýÙúÖ[SS2ož›ÛèÑ£G»»wütp˜?Û¶W¯„B¯¶¶²²­­CžŒÁÒ¥ÁÁAA#Gfg¯Y3j”Í€ææÛ¶}ü8nÜÎW¯.]ª£Ó9œÇbõô¼½ÿþ;-­¸8<|×.#£––ÊJ¡ÆáÐhü\kP(eåéÓO:xpÞ<‰äêÕéÓ‡µ±4hüø  ¼¼áÃ×­;qbî\MÍÞŸÿûý¢Ï½b±8áPýe‡¡?òG^Ò€(”ŠÊ˜16xx…·n¹º¾yÓñ²{ï¤ÿ=Áá”” UU!¨¢âúõüü–‘¨½],®«kmýòÿ/èŸ_RuìØÁƒ}Q‘¨¦&6öÚµC‡bc{'G6;#cíZ7·ŒŒ/?in 9{öåË;§O7552RRB£Ÿ=ëHÿþúü'ABaSSqq~~SSçoÑhuõ36ŒÃyôhÖ¬ÔÔ¦&éTƒQS›8ÑÇG_¿ ààÁ+®_ÿð¡­M$Â`^¿~þ¼´>rÄÛ{Ì sçBB*+E"<^OoÔ(9¹gÏ–,™4)((>^Vvÿþœ{ûÑ£¿.‘8dÈŒ#GâpoÞ¬]{ýúË—••mmIeehè¡C11«VEFº»›™Q(—.ÕÔ´´ôŽ—îý¢Ï¿Ž?ü ¯¡1yòƇ?z”þôiHȆ îîzz=h´¼¼……£ãøñ&XZ**b022ššvv“&9::;;;;:Nšdo¯­M"IWcà¥A99KËM›NžÜ¸qúô!CÌÍ}}¾x1.îåËÐÐÐпÿvs32ú^È™lg÷Ï?ÅÅùù­­ÅÅGŽC&w¥Þh´ŽŽ§§¿¿½=•zõê•+yy?^§ÿ^z“U«öí;}zõjccƒQU2e÷î  Ë—ÿþ{êT,‡x°œM¡ÙÙM™òuûJ‘‘ÑÒrqÙ¼ùСÈÈøøÈÈää„„›7CCO ˜=Û¢3t«{ùËUQqpXµ*00,ìÙ³ˆˆ¤¤gÏ.^½|ÙÓsРÎ!$“ ½½<{öéÓ—/ïÜ ;|ØÓÓÚzÈI“Ož\±bÄ9¹ïÕàçú†Çëëûù=zìØµk×®?~íÚÕ«{÷®X1tè·CìàÕcãµkÏ;~¼#ÿóçW­²·ÿzW‡ÓÖöò:x000 ÀÆfÐ ©d¾ç¾ŒŒ¡á¤I¶¶òò,VIInnSSÇÔ®üVP°³[ºtçÎÐЧO#"’“ãã/]:yrùr++EÅOw»§o]Ï¿;åïËúv/ÿžÁèèÌšµhÑÈ‘túãÇ.df²Ù­®©9|¸¦&WP›ÛÚ*Iw}&OÞ¸qûv ]ÝaÃìˆ)`³_¼X½: `×®‡ËÊ8œM$¤x««‰A]]]—Û¹ÚÞÞØXRÒÚŠÁ¨«¨¨ô^ÈYoõÝ¡;ú _ºæOˆD+«õëwíš>}Ä?¿S§®]‹½vmÁ uu3³åË/\¸qãùóG}| àjÜþ´³¿ƒg/ÿ7øCÉÊ"bëVØ&€QR;võêmÛ6n45¥P44ÈdÀãçÌY»6(hòd±øóömoÇãÍÍwì ¹Ù²ºº“'ÿúëÚµwï˜L2Y_Ĉ1c¼¼ÜÝuuŸ<ùðáãG.~þpk@ X[ïÚúôéªU|þÍ›ÿ}çN\˜™-^¼o_hh\Ü€3fŒµkWN— €ÅªªÚÚz{/X`b¢¬lhèïïè(#óâÅùów57óxµµC/¤PƒƒCC¯\™3‡É|üøìÙÇ©TUÕùóÃÂ=RTTRÒÔlh(.þûï‹32˜Ì/x]Ñ7‰D hn®®®ªª¨ho72Z°`õê)SdeïÜ9|øüùüüOXðë  ŸßÐPYY]][;dˆ³óÚµ¾¾zzIIûö]¸–ÖÖÖüƒÁ(*ÚÙyyÍ;oÞŒÎÎt:•úèÑ÷ý÷l…RT7nÓ¦76lPWÏÊÚ½{Ù²´4&³ãs8ò<~èÐCBââ¶mC£ïß?tèÖ­›7ÅbKË•+ƒ‚BBBC…ÂÉ“§N½zµ¦F$êŽ>ÃÉ~ùû¶¾pó'õô¦O÷ñ3FKë{X¡°®.>>44.®¤¤Cƒ:Áátu½¼/2¤¶ö޽͛ss?MƒÁÈË««“ÉBaAŸ/‘€ ™žÇ›<ù¯¿¢£­­ËËß½‹‹KJb³­­.<|xË–'O=Zºôͧku…ÛŸJû;øö (#coðàÙ³::ïß?yòèQzºP8}úŠ{÷>}ª£Ãf››{zFEÕÕý×Âè`påʹsÇ …ŸÏf3™t:‹Å`´¶²Xmm--Lf[[s3“I§7557××WW77×ÕUU55Ñh••µµ 55åå ÕÕ¥¥õõUUTª4O:½©©®N&}_c"ÑÂ"8¸¬ŒJåp ¶nµ¶î<¨('7yò… ­­×®¹¸P(Ÿþ*)yzÞ»Ç`ÔÔ>loÿ³ã]KB 0sfb"‡C¥Òh7n8:**v¬Þ Ñzz+V<|Èf·´üó«ë·V»µ´ÜÜV¯þßÿ¶m[½zòd]ÝŸ­Y ¼ü¤I'OVTíÙ3bÄÏkñ£ô ¨¢2{ö½{­­%%;wÚØhhLšùáÃ994ZD„ŸŸžÞàÁ[¶dgçäÄÇÏž­¬¬ªÚ—é•”zSÝ¡EEÉɾ¾ß¾À•”¼¼ŠŠjk/_¶µ…s̵+ùÃENnôè[·ŠŠ/ÖÐè¡ÑÚÚK–DD0™õõ§O;9ÉÊv|B"uèPu5‡C¥67?yâ奧÷mÍA'§ÈÈ––¢¢—//î<Û€B)(¸º†„deq8NDÄܹ|]¸ú  0eJ\›Ÿ>qâ—{¢Ý©ï§ÉÇŽÑhlöƒ~~Ÿþ}ÏüCX¬ŽŽ—×ãÇMMTjyùµkS¦¨«9îºü€H´´<}º¢¢¤äÝ»uëôô:Aðxsó}ûŒW¯|}uu¿pwEߺ“?œòÿŠúÂÓg‡'ž={ø0555õÛ?Ÿ= œ0AAá[Þ75ݰ!/ÍNLܳÇÔôóïAUUw÷—/ÛÚ^½ ¶µ•“2dÆG**?öð04´·ß·¯¢‚ÁŸ3GUõÛÞª£ÕJJÞ¼Y½zàÀÏ—½ˆD+«3g*+©Ô¶oï¼…RUõñyö¬¨ˆÃ¡Rwí²±¿›Þ×ýEoõÝ?óŸpô­ëþDNN^ÞÃ#>žJåpÊÊGŒ ÉäÉ“## 8œÜÜ LMñxaôèË—ß¾e0ž=›2EAž´áõ§JJ ×^ÈäÑ£ïÞmn¦RéôØXMÍŽ£Pxz^»ÖÒÂbEDøùu~‚€ðgòGŸAªªŠŒŒŠÊËë\ßioon®­e0P( ¥ãÚÔžãîAzzhè›7­­ß'×Ö¾|™PZŠÅº»[Zjh`±ÑÑmmBaÇß…55:uúô£G]ùé!×.^œ5ëýû¯mý,=q8……tºœœ®®ººšZ}½‚BsóÛ·ii4fŒºú€jj ƒ‘›[^Îá°Ù Øwé¹Ü¾?A,V^^RRU•¼|@Àúõ›6ÅÄìÝ{ölttaaS“PøkOfáp––ff$R}ýãÇoÞ´´t®ø‰ÅMMoÞddÔÖ’É'®©‰Å&$~ºGÕÒrçÎQQååZõyþêꦦXleåíÛ©©k ž’rûöÛ·ÁÌ™ŠŠ½¡o}_ß¾ö‚µõúõëÖ9:2™·oOž¼zõ³guuß_Aÿ™üÑh…!C,-••9œÂ²2‰DIIMMUUú)Ÿ_\\_A~~¦¦ššx<|{GëGÞ³üVþ_]ߟåAtzJÊÚµ“'§¤tG'ðøÁƒgÏž6MW·º:&&2’Jýò{ ‚ Q(AGgÚ´#GàôigçÇkkeeÍÍ%‚ ‰¤{ž‚Ë-,¼};2²±qáÂM›Ž=r„ź}»¨H[{æÌÝ»GF£ ²’Çë OÔÛýůççþ Ž?Áኋ¥m\R’‘A¥òxdnÎã‰Dbqmm^&‘ÈåŠD„B¡PWlt­-àö§\. ×^:¿ëÇ۷SR:÷ˆ$’ææ´´ØØü|Ú¸ÑÖvà@îúõÚZ@@ø#ùƒ'HbqKKiikëçÃ'‰DÚq௽áE,æp˜ÌÏ»{±˜Ínia³€@ P„ží8àñƒ{z®Ycjš“äë[Qñã¡cWÒóùÕÕ¹¹55(”•ÕàÁ††zzx|MMFÆ»wÉÔ©& ¨¥¥¤D$64ܼYS#ðùЗéE[ …¹¹AA ÌšÕÞ¾}{`à¹soÚD&74¤§‡„\¼¸k×ηo¿zõigÛW Ñ$’¼<‰<^k+÷ù7ŠÅ\.ƒÁ㑨¨Øñ^Hg+ŠÅ55ååß— E ÈɉÄã57KCD;‰Œ¦&K,þÖ ®¾õ}}ûÚ?àpZZŽŽãÆ))UV††Þ½ûö-‹õ£¡QWäO$R(D"’Éîî¡¡ îî_§¢Óëë»÷æRÏòÿyùm}»RÄáääÉdî{ƒ öv«µ•Å>m?<^GÇÝ}Æ -­ºº˜˜gÏJJøü/ÿR(d³y<RTœ8qïÞ ¸Üðð%K||ŠŠ„B>A±˜Ëe³»;…ár_¿Þ±cÞ¼… y¼M›üý}|æÍ32*,LL<~üÁ}ý¿þ20øº/éýůåçúÏŸt,ˆp8mmºA"'ô¼¾pûSŠLH$B!ÞÔôi lÇxƒÅ‚ yù¾x· áwâÞA’HD¢î®ãõ6( ¤ôå“wh4‘(uß|>“Éç÷d/‹D>|õjoo åÉ“ bbêëœ[×ÒK$LfEEA“)/ojjj:p DR^Q^ÞÞÞÞ®¥5l˜©)‰Ä`””P©L¦D"‘@_¦ÿUí%Ðh±±Äƺºöö»w_º´gOTÔ•+ÍÍ&&3gÆÄ46öm™$>ŸÍæñ—“ûò©H '“ñx¾¥?$ …"Ñ÷m@"áñX,‰DUU2YšÇ0&“;'"=Ó·_Qß¾ö"Q]Ýýû+W.XW^^VöåðùKº&&“Ë… +,ÌÅÅÞ~áÂää¯ÏÅt¿Ž=Éÿçåÿµõýyþ(”ªêÔ©QQee‡ÛÚ~?§–-Ó×÷ô¼}»¡¡C‹°ØÇsw××okKL|ø°¤ä[këíítzy9ƒ‚ãÆÉ˧¦Îž”ÍfCÈÊÊÊ*+ Fuuss÷‡ÓÄå–•……mß¾bEXXÇo)”©S=Z¼˜Ë---+knîÙ©oú‹_KWô ¾? ‘H øÃ¹qãÔ©wïX¬ªŒô|>–•U_//ok;|¸Š ‹UZZ__SSXÈ`(+im­¤ÔГSS#.öuúOe*/ogwà@XØOž„…mÙ2fL_¼E#‘ðx))wîìÙsêTAobbe¥¥ÕÓ'N»R~¡FËÉ))áóÕÔFŒ:ôÓ‡OQ(yy++ >¿¬ìýû¯õççµµ>äçóùzznnS¦hkwÄòƒ …2b„—×·Î:ÀÕ·®Ó×õí‘3E‘ÉššÆÆƒik\GGGçÛ?ôó ÿ|q0`̘)SŒŒøüììrs¿zÄçWU¥¤ˆÅ|þë×QQéé--Ò|dd œœŒÑèââÌÌòòŸMŸá!+;t¨››¥%fgGG÷dÝ—ýEÿ¢»þ¤w¦CßÖ8ý]÷í…23›9ÓʪóÌ3*(ØÚNœhd‚ÕÕoßVUu-lá¿ ò ‚úúÊJƒB3ÆÏoöìÑ£%’’,VE‡+*ЉIH Ñ>u)]IßyP(³g;ÒÖvñbTTk«‰‰¿ÿž=––tzX˜Ÿ_JÊ—7Ø­¤dcãâ2z´“ðx'O~k-ƒÑ×÷öö÷>¼°ðÊ•€€ÂÂ;>xéÅb:½  ¤¤½]OÏÓSI)+ëС¶¶†&“NWR²±5J( +-mmíØwèëô€ ¯¡aoïêjook dò;Ò³®Æ„iܸ³gÏžõõ¥Ñ¢£ÃÓ“ËÊX,YYcã¹sýý‡  .]ª­íiÀ_WÊAmm™™§N……µµEG;´u+„„¼{ææ+V=:b6þ×7 v &3338øêÕêê„„î܉Š22ŠŠÊË“•µ³sw·µ‹¿,ÀÕ78t§¾(…bn>q¢››‚‰dh8h‰‚**cÆx{Ïž-‘P©YY>yRXØyÓ\7œ)fÀ€ñãϟ߸QO/.nÉ’Ç_¾¬¯ïÙ4ËÍË;þܹ‚‚E‹vï>wîüyãèÑÐи\…¡Cml¬­ÛÛ>ܽûâůC¾þýüû[y H(d2[Zཛྷ‚rr66îîC‡@nî®]ÙÙ_ßÖ(E"im}ñâܹçÏ…ÂÐÐíÛX¼ƒIJRP˜:uÏž€YÙ¸8ŸÔÔææî®Ï£PJJãÆùû¯^miÙÚZXØÐ€Ã™›ûø¬^íã±±3fÄÆv¼ÊÔ==îËþ¢ןL˜Ð×%‚ÛŸvÏ^$ÁQ£öì ÒÔ¼s§¢BKËÇgçÎ P¨„„ bc‘ìþtþÀ ’XÌf&%¥¤ˆD4Úçqàb1‹UZš’’‚4ÚçñçÀá¼}{æÌºuçÎihlÛ¶uëÑ£·nAƒ‘›{óæúõÏž%$ÐhpÓwLÄâ––ððÿýïØ±––ùóW®Ü¾}èP ¦¢"4ô¯¿–,Ù¼9-í[Ã[±¸­íÇ/Þ¼QP€üü¯' @$š˜,[¶b…šZBÂúõOŸþìÅq¸é@ (+‹Ž~ú41qÀ.!¡ªJ(ärq¸—/cbRR€ÅЉ©¬ìÊôuú H hhÈÌLHxû¶½rs¿nÓ®ëF'|~AAxxr2‹µj•·÷ßûùiiÉËCP[[QQRÒáÃ3flÛÓš7xå‡ &3)iãÆyó-b±¶o_¿~ïÞC‡–.… ¦¦ìì۷ׯŸ2eïÞׯ?}¨Q,¦Ó‹ŠX¬ººg ˆÃyýz×.oïéÓÖ¬ñ÷wr240 /ïæÍùóoܰ² ½ßа#wøúøõ•®ïí=gŽ®. |~ffzzuµ¶¶³³››—Wq1‹õâELLa!“Ù}ÿ ‘p¹ÕÕé鉉oÞ”•ee}ËáË„ÂÂÂà`??`óæ;üü¶m»téÿ‹éôÊÊ‚‚gÏNŸær¿õ]]Ó7øùÃ+ß×nyàƒÃ)*ª©µ´¼~}ïÞÇ™™MMßcÆö퇯[·{÷”)PW—œ¼cÇ’%k×FGw^Åó£VC£++¿+“HÞÞ^^s窨 Ñ FaalìªU®®AAññtz÷€ú¾¿è›¾»»úÖu"‘H oߦ¤¼|Y_ÏdŠÅÒœÓÒ^¼Àã¥ö.·µ¼~Àå65µ·Ão ¸ý<{‘Žž?ò$=ýìÙ°0\ºtãÆM›ÜÝ[[Ÿ= rs[·îÉ ™!üñüy×|÷/:®ùf022NŸ1¢7®fý< ÅØxêÔY³Fúþ»ÝOð'C¡L™réRKK[Û͛ӦÉË÷Žþ(*:;ÇűX¹¹wï:9õîEÁßé/¤ !vÿq$£ àÉ“ðð¾Iðß ee%%4šNonf³¥+‹X¬¦æôé+VŒ)#C¥ž9SXÈá€DÒÞÞ3ýÁãÕÔ  @¡X¬ü| 9(Œ€ð«@ú )܉Ãáp¨ÔþY6[Û/rr-BÔáwcÓ¦ìì¶¶M›z7Wƒ—/sr–.Eä‹€ÐH$ÉÀ‘\þ¸ Rÿë0°X%%33--''''§¬ŒÍFVÍú ˆÇ+)ammf¦«« €Çóx4ZVÖË—¯_çäôäÊb@£UTFŽtqqu54D¡èôªª¢¢ôôôtéûˆô~-HˆÝ¿N{{KKNΫW--ˆ,ú'$´´äç''ÇÅåç''÷nîbqSÓ«W_¿þê"k„ä$„_mt(yy2ÓgËh´¬¬žž¹ùðáúúDâ·_~A"QGÇÂÂÆÆÐP^¾ç/ö ü7@vþÓ P‚¢¢²²¼<0™ ­­__›ûk!‘ììvíÊÎŽŽ60صËÄdΜ›7{ûJUnðà%KNžŒŸ:5:zìX;»£G³³?}Ø‹ÕÑY²$4ôÞ½µk³³,°°ÈÈèÎ¥´ÿ&x¼®îœ9[¶ÌkiI&Ã}‚Œ7oBB޹¿·ED£‰DEE%%yyŠÅjhhnæñ~Ö¶ ‰¤¢¢¢B$ŠD Fk+þíK»pË×¾à¦G£ÉdYY‘ˆNoh Ó$¡¯Avz FQqذ¥K/^|ü¸±‘Ã)*JK[µJ[û{;%pÓÃ@00ð÷¿w/5µ¹¹º:=J­®ÎÍ-.¾woÞ<#£//S—“sv¾zµ¹™Ã¡R¥×x|ú³¤ääI++"±7d$+kk»hѤI**Lfsó€“'Ϙ1þüù³fuõçŒ..ÆÆd²ôýóŽkv}|>MãêjfÖØøö-f`°téùóóçûúvæ³dÉ_<¸sç°alöÛ·UUººîîóæuæàã3a‚™…‚Bõo}Àbµ´ÜÜþ÷¿… §O—¾pÔ5p8}ý™3. puÕÐèéåÄŒšÚ„ «Wß¿ÿñcNNSSuuzzIIeeNöòå† £GËË-I<ÞÀ`Þ¼cDz³[Z>|¨¨ R_½ª©ijÊÎ~üxölUUÔ/óÍÝ)?<û‚›‡ÓÑ™6íüùwïrs**RS©Ôšš¼¼ªª˜˜åË­¬àO†àð“¡èýû¡¡7o~ïÓiÓÜÜfÎD„ø§ƒÅêéy{Þ½{æÌìÙyy©©••B!Ã¡Ñ øå`nzØJ10Xº488(häÈìì5kFÚ¾ýî]6{âÄ›7ÓÓ÷ï¿zuéÒ””±cOª¬loÄ`ˆD"QFF"ÉÊÚ¼ÙÙ900=ÑæAASSYÙ×ÑÂVWwrÚ¼yÆ ¥±±¤DYyÒ$ŸY³:J­¤dl<|ø!8\ié›7>44|ëê¡°¨ˆË}õ*.® €ÍA ÅÐpÒ¤Y³¦MÓ×ÿr¨_Zúòåë×0tè„ ³gúy>/_æå‰..^^ŸVU%¤¦&&æä0pWìµ>H$\nVÖ… ‡oÞüâEG»ý2yòdCÙ3íí{®ý(”¢¢“Óºu®®LdäÖ­ãÇ߸‘‘ÑÚjh¸`Á;¬Xq옯oxøèÑúŒ®®§ç?ÿœ>=qb}ýþý¾¾3f\¹’—Çå*)éëëë‹D,Ö¯Ú˃_~¸ö/= ¥¬<}ú©SΛ'‘\½:}úС—/çå àéyãFLÌÆ'NÌû䉣ãÅ‹}ù() òP,BO!“O:sfï^ww}}‰D²°.++)yófõê¿\Ù‡›Œ–ÖŠ¯_çå½zµb…–VÇþ£­½rez:•Êᤧϟ¯£Óñ ¥¦6wnD›ÝØx挣#™ÜR"¬¬öïù’Í.,ܾÝÚúË)2yìØ“'˜Ì;wfÌPP€“7M¡ 4b„ƒÃðáßþ9z´µµ–VÇÎÓ·ò—>|Þ<_ßÙ³MLH¤îOS>É£Gß½ÛÐðñã;ŽŽ]R–Lž<ùÁƒÜܺºë×íìzÚÞh4™L¡àñŸKÖÐX²$-JmjºsgôèÎoÁ` Z½:&†ÁÈÍݰÁÔÿwí^ùáÚÜôd²½ýíÛÅÅ/^øø¨¨t–ŠD?þæÍìl:=6ÖÙYI ÙEB@@@@è+þ3gP(ÉÄdäÈI“<=‡ ÓÑQQA¡Øìââìì„„k×ÒÒÊË™L‰<ØÉiÚ4{ûÆÆìì†##''GG™‚‚ ¢¢ÊËMM]\¦N7NN®©)::2òáÃøø¦&‰„BÑÓ³±qs³¶62:T]]IIN ›šjjrr""ž>MMýøñóë¹ADÒÔ´±ññqr²±17WRÂby<:½¶6==))6öÑ£òr.·cƒQR9rüøI“¦N52RS“—A>¿©©®®´499==%ååËÚZ¯?ža³_¼X½: àÅ éÿ‰½™¾2ÙÎîŸÞ¿¿zuæLˆ‰qw·²Ú¸19™ÍîL##£©9|¸¦&WP›ÛÚ* ¥¬¿/Îá`±zzGެZ¥¬üâÅŠW®dgs¹½—?`m½aÃãÇ;9q8••4‡Ó©‹(”œœ¶¶ŽŽ@pýºƒƒ¹ùÑ£(T``lìƒúúC‡Îš•˜Èba0**'nÞ¼m›‹Ë©SññyyNwÎÂü:}訑8iÒ©Sw簾¶µu¥Äh´‚‚‰‰Œ >zÔsé‹Ål6ƒñå÷‚ ¢Ñ(”ôñÜO=‰4tèĉºº|þ‡ …Åâp ( …bñ¯¶qxå‡k_'}U ¬¬®N$ uuuu\nç7··76–”´¶b0ææ**X,´´|zv¬+þáçü'Bì0]Ý V® ž4 …zñ"..5õéS‰DWwÆ w÷•+÷ì‰Ü´éõk@]}èБ#}|MM srrsù|ccw÷#Glj***(((àñ;våʉ³²RRBCkjtt¬¬¬¬ P¨ÊÊ7o22rrš›@YyÜ8—3öî%çÍ ),d³!°X55GÇÇׯŸ:UC£¢âÕ«ˆˆ¬¬ÆFTPÐÖ60PS#‘Ðèòr.W$’®(O™²bž}£G·µ……=~œ”ÇçËÈhjêê99YX¨¨¤¥ÕÖVU ¸ÂbÈdEEé[{ Œ¼¼º:™,ðù ’ÉÆmÞ|èMjjppRÒØ±jjŠŠkÙ ˆÅ b0êêS§nß~àÀ¢Eêê •úôé­[§N…‡±XÝ;ŽÁhiÍ›wöìÖ­¶¶§OÛÚ>xÐÐЇð%:=:Ú×wøðõëSR:…rr®®!!åå'NtÔ…ÂãedˆD…úý×á!H$Êͽ}ûüùC‡²³» I ØØìÚuüøÊ•}W*ÉÀ`ìX}}(/ ©ªê(«¨h` =ù$'çëUQqýúˆ**ÀçGE­_?{ö¶m7n””ü›Öþ½ò÷/xéÅâöv‘Ðh<‹ýT;AÆáP(ŠD¢PˆD4º;þáçüd‚äééããë AÒ0<é¿?åß®§¥5c†ƒƒºzuuLÌÁƒG¾xÑÔ$@FF~¾ŒŒ¾þ¹söö&&**™™ïß P (çæž?ù䉬¬œœÝªª?^ºO&ËÈØÚ9¢¨H&c± |üqáÂÇŸ3 •ŸÁ˜›‡„8:¤ªŠF²Ù"oj:q¢“Ó!tzBÂÊ•/>yR\ü½[²@PFFWW__AÅúøñΛ7ÓÒJK;†#ïÞ¥§#jÚPXQqçÎÞ½'O~øÅÅ¥¥_Jq8ï8¹‚à ìï¿{÷ìÙÇOœ;lX|üÿþglL$âpÒ4 ˆÅÊÈ`0@&[[Ožll\S“‘66[·^»æînm NNžžaaÝ™ØðxTjtôÕ«ÿû_BÂEE}5ìAuu;»I“ÉäÎ;ëH$[[ee,ŠŠþk‚(…µµII±±]=ƒ$‘,[ÖÞÞW$JYyìØ¹s'L ‘ öïö¬¾¾ã´ M$ªª’É@&¤¬œ˜8{öäÉ~~UUzzwï^¸pòä™3iiññ..½}¿aOË×¾@इ 6»¾¾¸¸¥‡sp°±QWÇáââJJ„BŠB15>\]]Úêß ý¹@@@@@@è ¿}ˆ E$ª«’HAUUs3ÉÉÉÉÉÉI? ÛÚ ÈÎN[[Eƒ‘N‚©ÔÚÚöv4H(‹%’¶¶ššæf‘ðøöv±‚ÀÿCú(…¢¥en>qâ°a††ƒ)*’Hrr**ªª [QÇKS¢Ñ ¦¦ÚÚBss^Þ‡••?î¤!ˆÏ///)ii‘•7ÎÙÙÇ'/ïÁƒÈÈÜ\­­í×Üôg„ššGN:}úû¡QÒi;¢P‚ŽÎ´iGŽÀéÓÎÎ×ÖÊÊš›K$AI‡dE¢ÊÊ7V¬°³{ôˆÉ,)).njâóQ(uõôô¸¸¤¤³g—/wpPU ˆ¨«ƒ·„ÅjjÚÙMžljª®>`À°aûöýSÄhhØÚ’Éh´ŒÌÊ•'N9ââò=͉ššž=;tèøñððÊÊŽ¡7ƒÏœ¹té‚cÇv¬1˜´´¾µÞþû[?K `± ÞÙžÿ6xü A‹ïÚ5~¼XµjUhhyyçe ˆÁàp 0™=züx\\i)› ååÇ=úáÃÊ•'NLœ8t(‘A£±Xý«üðí ^z.·°ðöíÈÈÆÆ… 7m:zôÈëöí¢"mí™3wï=€ÊJO(üº½»â~Îob‡Ba±D¢Œ ÊÈ88,\¸c‡ƒÃש¸\£ó²`âóY,.·ó´ ‰ÅííÒÐŽo £¥5zô’%gθ¹)*~ü˜’’žþêUn.• ::ššÃ‡[Z‚ H'H(G¡àñÄá0|þÏW€E¢²²øøóçÿúK"qs[¼ØÛ{ãF<žÁÈÍÍÈHH¸|ùÉ“´´¼¼OÏ• | Ùl‚'NÜ»wÃ.7<|ÉŸ¢"¡†G£AP,ærÙìÎ!ŸßÐPZš“ÓÐЙ“XÜÚš••žN£àìÙƒ€Ã@]¼Ûì H(d2ëêjjh4¡ðG“<ƒ‘žKÁ–­®®ºú{gÎÄb:½­íË!¢DB§'%mÞìéùã»ÿ (™¬¤D¡àpdòðáÒ3HLfWl¤wÏ }î+ôôæÏß»wÓ&]Ý7o¶n5ëÅ‹ææOËAb±P(APS•ÚÔÔyS¡DÂfÓhuu\®ŒÌ€JJ22 ¿î>»®”®}AÀµG.÷õë;æÍ[¸ÇÛ´ÉßßÇgÞ<#£ÂÂÄÄãÇ<Ð×ÿë/ƒ†&¹Á¡¯øíCì$’övχ >ÿÅ‹sçöìùûo*õÛAL H"+=³ ‰ÅŸ[¾WNWwÞ¼)Stu BCؽ;+K:hA¡TU '§Ïÿ‚ÚÛÙl¡2‡ëÚ{&"þúõ³gׯ¿~‡Ã©© 4|ø¢E>>‡Ë˳Xóæ]º”M§#;J?¦½N//g0@pÜ8yùÔÔÙ³ƒ‚²³¥gÃdeee•• £ºº¹ù[—hÞ’$ÕiHOwNëˆDuu))gÏ8’òã”dòرººK–xx¨ªÞ»wøðñãÐép¾  GÇ3¦MSWï´ÁÊJ:½ûo…ØáñêêÆÆP[{ïÞÑ£§NÅÆ65ue‚Ô7gðxCùs/]:tÈÄäõëÍ›]\nܨ¨ør/³XuuL¦D"½äëS6 ‰DÒ]ì_+Ï®”¾}Á·GârËʶo_±",¬ã·ÊÔ©-^Ìå–––•Iwûú‚ß>ÄN"ári´¢"6[FÆÆfÈ%%ŽJ¥Ñ~{ÞÕ¡b±rrêê22<^AAssçš>’H&&¦¦ PPQÑñ"Q[[~~]]{û¼yÆÆFFDG×ÖVWwý, …õõTjzúÕ«/_Ž9nœ““žžŠ “M§:¬A e̘}ûÞ´ÉØ¸¡áæÍµkï߇óm¿‚±ñÆ/nÙ2f ¼~ý×_þþ.|üØyÞøüªª””‚±xÎ.7**=½¥E:h–‘10pr26F£‹‹+/ÿñ^ %/offg§®õõTjCCÿ?Ï #£¥5fÌôéÎÎFFÃG,VSSª¥ÿ)×…QW··1BM­©)%%44<üùóׯ»v7`oŸAAYYKË;îÞݶÍÐðÉ“µkíìnܨ©ùÖ¼½½¹9'§ €Ç0`Ø0==YYÌÏçó!ƒQS358‡knÎ̬­ýZ?ûÊÞᔾ}õŽ=ÊÊêæfi ‚ÙÙ[·«¥»â~Îàšo¡°¦æáÃääÚÚ©S]\-Ú¸‘Ç‹ŽŽ¯­deÕÔôõ‡ ‹ß¾½r%- ~<áñ>~|þ<5µ¶vÝ:W×ýû}|$’«Wß¼©«‹ttŒŒ@ðÇ›7ÓÓëë…BÀã--½¼.œ2…ÁÈÎNL¤R8<^SsÒ$uõööúú„„o­˜^^óç;99:2§OoÙÒ½k~Ðh%%—Ñ£œ€Ç;yòë 5‰¤µõÅ‹sçž? CC·o?p`ñb &)IAaêÔ={deãâ||RS;‡›={NZ¿žDzû6>þÝ»ÆFÁÆfΜ={F‹“’V¬HIé››çz¢ÓÓÒöìY¸ðÇ!vBaiiHH`àŠdr~þï9x”‘14œ?éÒ!Cšš¢¢víÊÉéÍkÓႲ²cÇ;vñ↠FFõõááQQºº>>kÖøûKS´·WW'$\½N¥r8Äå¾ýúóçÎãÇýuúô¦MXlxxSÓ!K—nÝj`P[{ãÆÖ­¹¹_ר/ìnùáÛÜô(”’Ò¸qþþ«W[Z¶¶64àpææ>>«Wûø@lìŒßÛ)ìŠ@@@@@@ø9ÿ‰wD¢ÊÊ/.\ذA$š6ÍÏÏÎnúôÍ›‰Db±Z[kk32‰‚Äb:½ªª¨(+‹É”¾°!‘0™4Zqñ»wh´ôÕ‰„Í®¯§Rß½ Y,‘¨½½®.4ôÚµðpEÅY³Æ_·nþ|ª«+*JI9tèÆ’’éÓGŒàp>}‰Ï¯ªŠ‰Y·îÂ.×ßÒ$;»+||ðx€Á Ñ22^¼ÈÌüô}Êʬ¬ÂB.w̘‘#ýýíìÉdâpªªJJ?Þ¾=**;»µõË]/,V]}ذáÕ• ;;((2²¸¸?\.³Ù……II))hte%Ÿÿ³ §®§‹ÛÚ>|xñâÍÈÏomýÖðP"ijzòdûö3¶o <|xݺݻ§L€ººää;–,Y»6:ºµµó[„Bíõëœ`íÚiÓÖ¯wwWV–‘ápÊË>ܺÕ×wëÖÛ·i´ß+ Q(4%‰Dz‘J$b±Ô ZZÞ¾}úôþ}4îñB¡ …@@¡ÄâööÞ¼ò ·õ‹50X´hÏž5küðaçΓ'?|èÊÝuŸ¸=ŒŒŒŒ -‘´´ô¼¦h4 Å`äç§§§§ËÈhhŒ=nܧO^óxÙÙyy·nI'A Fbâþý³goß¾{÷ÁƒK–lÙrô(O§üxãÆ† Ó¦íÙó­õ•½Ã-?\û‚›‚Äb±˜D²°ðööòš;WEf0 ccW­ru Šÿ^ q×üÂO¹råܹãÇ¥ç‹Øl&“Ng±ŒÖV«­­¥…Élkknf2éô¦¦ææúúêêææººªª¦&­²²±±¶¶¢¢¡¡¦¦¼¼¡¡ºº´´¾¾ªŠJ•æI§75ÕÕiÀi‘®#/?uêÕ«--túíÛs樫#«¥¿3dòر'O640™wî̘¡ ïoÏ«¯¯©9~ÜÁLF£õôž<áp8*Uú“ÉŒ‹›5KS³CKp8“;_¼ø4 ‡Ãáddœ=;jÐ?¥„ÁèêΛ@§çåÅÇ „ÇÿL6Ç_¸PX˜“ÓÔÔÐðþ}mm]]n®´¾¯_¯^­«û»¼–ƒØ;¯á?±ƒôg‚Ū¨ (½}{ýú•+±±õõÈjéï Ÿ_\|çκuDbV¼€1.73sß¾±c!¨¦†Ë‹¹ÜK—¼½ut""de‰D4Z hi©«km•î’…EEÁÁÞÞ&&wïÊɉ8ðùMMµµý5ðN$ª¨ óñ5*5•Ç+*ª¬üÙ ‡““³w¯››—×åËŠŒ Å¢PíítzMM~~aa}ýÏ.ë@ìáÏâ·Ÿ =üç4Ø„ ëÖ­[ÐÞ^Rrîܲe“'ÿ›å‘®Ä#†ÔÛœ?Èá{8:ÖÖ.[†ÈH$ÉÀ‘BïòÛO:' ÿÈá¿Äìê_„îƒLþd‚ô[ƒÃéê.]zûvddròíÛsçàpˆT~_0MÍI“æÏ߸qíZ772¹ãrDþˆ|~ ؉@><885µ¥%-mÁ==Ì7Î`‘HNN¡¡oÞF$öçúH$b1ohhnnmm`€Ã‰Å?{cák°°8r¤ àÓ«®©Ôìì]»ŒŒ¾u…4Üôp!“ííCBjjÞ½ ur"‘~_Éâpšš#F¸¹¹ºš™))uíRj,VOÏÓsíÚÀÀüülmåäP¿ØGõuûþ›ÉNNgÏÖÖÖÔœ>=~<™Ü3ùw§}ûºü}Mÿ–Oïȸ¿úŸßSžÿeþ]{ìš>tøóœœçÏçÎUUí»þÑÏÿØI$b2ù|<^QQMMNƒÁbœ8qæL_ßéÓŒää0ee55"Q hld³û÷ó "‹U[ÛÚ AD§×Õµµý^Ï™öøü‚‚¿ÿž8qÜ8SSKËE‹ÎŸ¯®ƒÁo­ÃMÄbq8<‡C¡~ßõi”•5jýú›7/^œ?ßÈHF¦+ÕÞ^QyæÌ¾}»w‡„¼{Çdþê)ß·ï¿Ù&(‹ÇãpÌ· ]—÷Ú·¯Ëß×ôoùô–”û£ÿù}åùßåß´Ç®êƒÇãp8\_NZýü/ò‡½ƒ$3™4“ AŠªªœ§ªjg·wïáÃÇ«ªÞºUP˜xíšššœ04‹Õß'BaKK]ƒA§@[Ûïñ¢Kÿ‚„B:½¦¦¦†NÇã :](„ ÞK‘¨¦&6öÚµC‡bc}@äè'Â?l‚$‘°Ù mm"‰¤¤$'G (*êê’ÉB!‘ÉZZÊÊ‚¬¬š™,·¶64p¹ëƒX¬ŠŠƒÃ²eÿûßô馦@ssVVTÔ•+ÿ}ñbffccçd ‡30ððØ·oÕ*29$$00!AGÇßÍÿÉ“õõq¸ÒÒ»wW­ZµêþýÒR¡@L64ôòÚ±cíZ??;;EE&óÍ›ÈÈ  +WŒéÓW®4(&fçÎ 22˜ÌO‡kííµµÉÉññOž@]Pø½šËÈhi¹¸¬^°dÉĉƒ++£PlvMM^^fæÃ‡W®Ü¼þáC÷ÖëÑheå‘#gÌX¶ÌËËÁaÄmm%%,–Ç«©ÉÎŽ?sfÿþÔÔææž}âÄÅ‹¯_·µu¯½ú–îÊ…’•¾±QZ*;»E‹V¯öð6LK niÉÊŠˆ¸p!0ðòå÷ï[[»£X¬¶ö”)»woßnm—wäÈáÃwu,T€ œœ¥å† zx…ÿüó÷ß§NÁ}¸£ÞpÊBÉË[X,Z´{÷ªU^^VVrr­­¯_‡…gdHWz¿¬kWåßÝöíëòî?ì_òùýŒŒ¡¡¿ÿßÏ™#]¸pèЕ+ÅÅRûE£ÕԜ׬ٱcøð¬¬ýû÷ïù²¡º#OøvÜ?û÷C$ZY­_¿eËÔ©TjLLUÕ„ Ë—{yÉÊ&&nݺ}ûû÷#GîÞ½qã¬YêêW¯nØpà@h(•*­/|{ì;}†k_Ÿþ-¯¡1yòÆ7._î쬯ÇÓh¯^]¸°k×™3–—KÿýOÏ^¤R…ëßà¶W_Ž'ûÜ% b1ƒÑÐÀb¡PŠŠŠ¼¼’’––H”Ÿÿ 0p ’’¼¼š‘ÈáÐh †ÔEÖÖ»v…†>}ºoŸ•UKK||DDHH||këˆûö…†ÆÅíÚeföéi%,VUÕÖÖÛ{Á‚Y³Ö­»u+,ìÌ™‰‚ÔÔ»wÃÂÂÂ’“kk;&_ H¡8:‡†^¹ò¿ÿµµeffd«¨ÌŸöèÑ®]kÖ,Z4a‚ðuÀC{{iéµkÛ¶­XqíZeå·'Hx¼¹ùŽ!!÷ïoØ0p`aaXصk'O^º›•%™˜xy¹»ëêvK76öôœ:uØ04º¢">þæÍ«Wƒƒÿù'-M,vuý믰°cÇF¢Pº®Ç-]úäIJÊáà jhTU={—–F£ÉÉYX */ßyž ~{õ-Ý‘ÊÈØÛ~,)ÉÏ߻רøgF7}WäC&}÷ns3•J§ÇÆzxhjvÔ…0ÀÓóÚµ–+"ÂÏOúIßêg÷Û•”<=ïÝc0jj¶·ïªÞ‘ÉÇŽÑhlöƒ~~ŸÖ§YÙ nÝúðÁˆwwï´ ÅÙ9<üãǺº[·ä䤿%--OŸ®¨()y÷nÝ:=½Î on¾o_b"ƒñꕯog ·} „‘#ÏœÉÈàpÞ¿_¾Üаã{û Þ¼a±ÒÓ¿W€W~4ZSÓË+)‰ÅÊÍ}øÐÓSE¥C:h´ºº¯ïÓ§……NsóùóNNß>TýsùÃkß_]þ¾ö‡ÿ®|úÞ?÷µÿ‘æßЕuãÆØ±ŸO;† Ùº5>žÁÈÎ^¹rðàÏ=RwýÉÏø}ûw”—÷ðˆ§R9œ²²ÀÀ#ˆD2yòäÈÈ‚§£M „Ñ£/_~û–ÁxölÊxõ…o¿JŸ»n_ÁÁeeT*‡SP°u«µugJ9¹É“/\hllm½vÍÅ…Bù7ú»Ÿûxö׿Ám¯o<ùoðÇí ‰D FC“ d²¶¶žžž™ÜÔ”››ÝÔD&èꪫËÉ “Y[Ë`ˆÅ8œ††¥¥™‰T_ŸšúæMKKçF£XÜÔôæMFFm-™ld4|¸¦f§ruÐÒrçÎQQååßÞÝÁáÔÕMM °ØÊʧOSS;7¶%:=%åöí·o»·îܱXyyIIUUòònnë×oÚ4c†±±Š ×»pÑh%¥aÜW¯Þ·oïÞþ¹qãäÉS§-Ò×Çb YY¡{Ç8q8uõQ£¬¬ääh´èè§O ¢ÔÓöê;àÊ‚>|¸};%¥®®£IssZZll~>ikÛÚˆÃõµ~ö}û‡ÍÎÎŽŒÌʉÌÍ'N43ëè˜ ruµ¶Á·o#"rsY,i©† ±´TVæp ËÊ$%%55UU5555 …Ï/.®¯‡ --SSMÍîNày¼BBž=kh04œ6ÍÙyà@ CCww''9¹¼¼ÐÐÄÄššËF¡TT\]ˆ‹KM}ø05õóŸwîœ9ãꪤ$•&ÜòãñZXèêBPqñƒii--û€bqCC\Ü­[yy¿Òßö¿òÿ*Ø7òù¯ùŸ›þØ¿ÃñmUR’‘A¥òx$òx"‘X\[›—G£  r¹"¡P(¯© §¾píñ×é3|ªª"#£¢òò:ÃîÚÛ››kk JV–BÁã?•iÿéïúÒ¿Áo¯þå?ûš?ì ˆÅ,Vcck«XL&kiéé ˆBÕÔ¼xQ[‹F jjC‡êëËÉI$ F}=‹%£Ñjjòò$ðx­­<Þçq³b1—Ë`ðx@$**’HÒ՘ΫÄâššŒŒŽØÖoBrrD"ñxÍÍÎç1›"ƒÑÔÄb‰ÅŠŠÝ¯³P˜›´`Á¬YííÛ·ž;÷øñ¦MdrCCzzHÈÅ‹»víÜyûö«WŸ:KxŒ¡¡¿ÿ¥KIIji¥¤\¸‘¶¶ÆÆ“&yx€ ô>ø Ñ$’²2™ ALf]ÝÏ®Í@£I¤î·WßÐùH$B!ÞÔÔè&-?›ÝÒÂbAŒŒ¼¼Œ Õ³úþ\?û¾}»ÓÐé11998ÜÚµÎ΃ËÈ$'³Ùöö£GËÊgfvDò£PD"…B$‚ ™ìîšàîþuŽtz}=Ûýòs¹9966zyy{Oœ¨¦våJJÊ„ ÎÎ**Tê¥K±±4Z§ÞBWZš’rÿ~hhqñ—ƒ.‘ˆF+-åñ:ΦÀ+? %##'G @‡ÓÜÌfª= ‡ÓÔÔÖÆçÿºK'àÊÿW”¿¯ýa_Êç¿à~$ ê×ÞÙ×þ³;ý{×ýƒtÏ@"ápÛÚ‚»€ ‘ˆÇ¾îÙàÖ®=þÛÄâ––ÒÒÖÖÏe"‘H$$½¯£<ý­¿ƒk/pü[wÚ«?ùÏ¾æ› I§Huul6?j”‰‰†FKKbbcc}=²X Î΃ËÊr8%%L¦X,=g³y<Àãåä>_c '“ñx˜L>ÿË#i$ …"Ñ÷;t‰„Çc±x<$UUÉäÏ<¢ÑdrW:–Ÿ#Ðh±±Äƺºöö»w_º´gOTÔ•+ÍÍ&&3gÆÄ46Â=VG&[ZnÝú×_VV™™Ë–9:ΙÞÜ,‘H·ì)ÿžÔ“Hx¼¶6.H$"ñÇ“šžµW_Ð=ù PX¬tU €ÍîîËË“H (TV I_ëgß·o÷l¸±13óÁƒÒR_ß1c4554ZZÆÓÔ,/MM•^ÌС=L&— A,VX˜‹‹½ýÂ…ÉÉݹ&áÇp¹EE·oGF65-\8gŽ£ãðá²²'jjR©ÄÆVU}:­‡ 6»°ðéÓË— »¢ýpÊO" l¶@‚êê Ò2GeAPFF^^VÁ––_ÓRýµü}çûV>ÿ%ÿóåЃ‘—×Ô”“û•/ÈôÇþ½«þ¥$‰‚ÏKAô­RÁ­/áñpìñWùÛîµµH$õ¾½ü àØKWý[KK÷Ú«¿øÏ¾æ ±“¾…$ÝVÕ×9RMÍ®¨hjjh¨¨`2•”,-Œ(Kz×…4ZNNI Ÿ¯¦6bÄСŸ> ˆBÉË›˜XYihðùeeïßÓhð÷"‚ÚÚòóù|==7·)S´µ;b™AB1ÂËËÆFzkRo: ¯¢"%åÎ={N*(ÀãML¬¬´´º³å ‚22ªªººd2ƒQPPZÊbu ¥¨hg7uê A=ëð‚úúŒŒÜ\>_[{Ò¤1cüÑi™žµAPçŠÒÏËöóôÝ— ef6s¦••¢bGÎ ¨ `k;q¢‘VW¿}[U%öµ~v¿üAb±D‚(ÝÛ/ª´·Óh/^DG××ë踸888:º¹éêÖ×GG§¦ÖÔ|ºÆÛÚZXøî]S“¬¬­­££ŽœsbpôÏÏË ml6Ìß?0pÅ =½²²;wž?¯¨èþ%ÜòóùUU>”—ƒ ¡á´i¶¶GïQ(…‘#gÎ42ê–èZûößò÷?ìkùü:ûí+ÿAB!‡#áñJJrr¾œ@Ð×wuutü^¬Dßø“ÿJÿþíéPÏë ×ûZŸûZú_×]{éšëöêÿÙ?øwD"‹Fc0ôô ¨¦¦©I €F ‰Ä‘#Éd6»¡Az‡µµefž:ÖÖ}ìXPÐÖ­ò¯XqôèˆtzXØüù©©Ÿ^öÚu˜ÌÌÌàà«W««¸s'*ÊÈ(**/OVÖÎÎÝÝÖV,îªóû$Ò¸qgÏž=ëëK£EG‡‡''—•±X²²ÆÆsçúû"\ºT[Û³NÄfS©iiµµêê~~[¶Ì›’rölI‰¢¢‹ËÊ•»w[Z‚`OƒØ˜Ì´´cÇBB¨Ô¤¤ ÂÃ/^‰öì -*‰´´† ³µE£ccøç*•ÏïI{Iu£­ ÔÔFŽtttrrp “™L‰„Nÿøñõk*•ÁøtÛ¸+é»'‰@pÔ¨={BCƒ‚45ïÜ©¨ÐÒòñÙ¹sÂ*!aÃ†ØØº:±‚$’¾ÔÏž´¯@P__YÉ`P(cÆøùÍž=z´DRR‚Ū¨àpEE11 4šP(½ÇÜ|âD77ÉÐpÐ  UTÆŒñöž=["¡R³²>|ò¤°°óâP¡°´4&&%¥­mõjÿM›„B/..(¨²òs=æróòΟ?w® `ѢݻÏ;žÁ8z44ôÃ.WAaèPkëöö‡wï¾x±¤„Ïï¾>ðùDDÔÕ-\¸f¶vYY`à“'ÕÕ=Ó~¸å¯«{ñâܹ„„íÛ¯\¹|ùܹ  }û<¨¬ÔÕ1cݺ‘#APª]tOþ]mß¾/_ûÃþ%Ÿ_c¿}çP¨ššôt*>ztË–€??ÌÊ’“ss[³fñb€úúžøxòùýû÷¾¬¯XÌd³ǾÕç¾×‡¾ïïàÁçõxþM"Û^}9žìo ÝÜ\]'O¶°°²²µ‹ÅâïŸðøñ§Rå’þ·¤¤¸¸¨ÈØØÄÄÌìܹ .]êzX,Kz¼ºï\„XŒÃé뛘 …99„†>ž›ËdffJJ¯^=zš }YH ¨¬|ù21‘JURrpX¸pÅ /¯qãÔÔêëïß?xÐÏoÇŽ/>]_B£Édmmss==.7))""%¥ªêûêÒÞ^S“œüôiF›­ªjf6l˜®.PZ¾}ûÙ³|¾³ó¬YŠŠ §Oß¿Ÿ“ÿ&}‰„ÇãñFŒ˜>}æÌÅ‹ýýçÌññ™2eȱ8=ýòåU«V¯¾??¿{oHˆD--oÞ¤¥µ´ äá±pa@€Ÿß¸qºº ‘‘ë×~üH"ÉË×ÖÆÅ=~üñc÷âRÛÛi´ŒŒ‡_¿Œ]]gÍZ¼xÁ—1c 1˜ŠŠÄÄøøçÏóó¥ë=ðÛ«S7ø|­¦‹57wuõðX¼Ø××ÍÍÅÅÄ„Åzú4,ìÍ›¦¦Ïƒ¥~žžÏ‡'“3443#“¶l9q‚JupX¸põêÙ³MLD¢ÄÄóç/^¹òÞ½ü|.WÚ^}«ŸÝoßöö††ÂÂêj99KKOÏ%KæÌ™;wút[[-­––ä䈈”©4Ñh55GÇÅ‹·nõõµ³35ÕЉjk««™L ÅÐÐÈÈØXA¡¦&>þÙ³ââO íí Fk+…baaj*/_YâÄ¥K©©_¶¬XÜÜœ™—šÊdê꺸,Xàã³páìÙcÇÚØhhˆÅTêË— /^t®vOD"6›Ï73óñ™?ŸH Û°áðáW¯zöþÜòC‡SP÷æ ›m`àèèííé9fŒ¾~sóÇëÖýõ×ë×8œ’R[[bâÇ™™õõ"Q÷åßµöíëòÕ'\Ø¿äÓ×þ¹¯ý±Ù%%ïÞµ¶êêN™âé¹`‡‡¢b^ÞÕ«kמ?_W§¨ˆÁ<~Û=yÂhÿ®ý;£¤4tèСÊÊee/_>z”‘A§“H††C‡jk75¥¤DF&%55ápººÆÆúú\îëב‘ÏŸ———”Ài/¸öØ·úü©\»¢(™¬«kf6p —ž_VÖ1-C¡ÈdMM3³Aƒ„´´ÈÈääŠ 6»¹¹oû;¸ãU¸ö׿Ám¯¾Oö/@é•Üóç/^¼r¥P(ðxÑ«ÿ•þ[zxǦÁ(AÑÑOžDEÍœéé9gމ‰……µu× D£Ñh4Úï.ÖÞ‚B™2åÒ¥²²»wedüütu}}?nkCä‚€ÐÁá ·oóæÉoïû÷§M³µÝ¿¿¸ø¿°’†€€ÐÛ ý;Bæ<ƒÔÿAAYYY™Lþ4º‹ÕÔœ>}ÅŠ‘#ed¨Ô´´ÂÂÏ_…F@@èOàñ..ÞÞúú4ZxøƒÈÔáOéß~OþÀ3Hý,VOoùò»w_¿^³/,,(hl--33UÕòò³g§M»w¯´´¯¯£F@@è.8œ‡‡››¾~UUtôƒT*üxs„ÿHÿŽ€ð{‚LúBaAÁ‘#^^vvÉÉÖÖffºº x¿ àï¿'N7ÎÔÔÒrÑ¢óç««‡Ã`~Þv$CB¡P(”X,‘üú§»kpý[ÿ÷‡D¢µõªUóæ©©%&^¹òôiCÔþ^úžø“¿é‰>÷üAƒ!‰D‰$+kóæÉ“ÝÝG=ZúÓÍÍÍíÈ‘‚‚ŽÇf{â¯Ðh557·mÛ<<Ã×/×Ó£PŒ55ÝÝ##kjºóè±t2}ú©SΛ'‘\½:}úС66ƒ”—7|øºu'NÌ«©‰ùÿ÷`0K—™½fͨQ66˜›oÛöñã¸q;w^½ºt©ŽNo,¥ PŠŠÎÎÇŽMžüêÕŽëÖ=xÐÐнzöTŸ»rIB?F$ª©‰½víСØXD¿JEÅÅeÓ¦éÓ)”ôô]»,Ø¿ÿùóêêŽnýǘ˜ŠŠ_W éôššš:'èt¡°ëÓ±X è(y{»Hôû¿uÿûjÕ˜16xx…·n¹º¾yÃ`ü¨-à¦ï*ÿ~ÿÒ3}î ùƒ '#ƒÅWWWP››•Åf÷~)p8%%CCUUª¨¸~=?¿¥E$jo‹ëêZ[»›'‘8dÈŒ#GâpoÞ¬]{ýúË—••mmIeehè¡C11«VEFº»›™Q(—.ÕÔ´´ Ñjj'úøèë<¸bÅõë>´µ‰DÌë×ÏŸ—–¢ÑGŽx{£¡qî\HHee÷§3x¼±±¯ïÎÎUUÚÚ¦¦¶¶öÖÎQ_éó;AÂbUT–- øßÿ¦O750𛳲¢¢®\ùûï‹33;UAúÆÉ¾}«V‘É!! ::þþkÖøûOž¬¯Ã•–Þ½»jÕªU÷ï—– …‚d²¡¡—׎k×úùÙÙ)*2™oÞDF]¹Â`LŸ¾rå A11;w^¸‘Ádv݉VVë×oÙ2u*•SU5aÂòå^^²²‰‰[·nßþþýÈ‘»woÜ8k–ºzEÅÕ«68*}^}Q(yy ‹E‹vï^µÊËËÊJN®µõõë°°ààŒ éJÈ—k]h´‚‚Ý¢E«W{x ¦¥…F·´deED\¸xùòû÷­­?^û>h´²òÈ‘3f,[æååà0b„‰‰¶¶’ËãÕÔdgÇÇŸ9³HHjjs³X 8œ¶¶—W`à’%**7o–•99-_¾|ù¤Izz8öêÕ… »v9óðayyÇUÌðë øú@ ¯]{ìØÒ¥AO|~ié?ÿlÛvî\ZZ[[§Î ÑòòcÇZYYZ**b022"‘ݤIŽŽrr|>ˆÅLfIIZZzzu5‡¿ó')22ZZ..«W,Y2qâàÁÊÊ(›]S“——™ùðá•+7o†‡øÐõ¸õýÜEkhLž¼qãÆË—;;ëëãñßÖ‡¾ÕçN+“•qââÅׯÛÚ~$4ZYyìØeËvïöôÁÈÈÀÀ‹_¾lj‹áȧ?Ú#¼‡¡¡³³…femÞœ˜X[Û•!< ?}÷€ ±X(ìœ ý:)~›®Ø#\{—êNWÓs¹²²––7îÛçäTTtî\\œ¼üâÅ«VÍ›gk++ÛÜüêÕ½{{÷þýwTTa!›ý¥ï$“íìþùçýû«Wg΀˜ww+«““6˜F£ut<=ýýíí©Ô«W7nÌËûñ£]KßUý«7nÓÖž2e÷îíÛ­­óòŽ9|øÎ²²ŽÝ[”“³´Ü°áàA¡ðŸþþûÔ©¬,.ž¾±Q,†£ÏðúÓ?2ÄŽ@°¶Þµ+4ôéÓ}û¬¬ZZâã#"BBâã[[GŒØ·/44.n×.3³OcL±XUU[[oï fÍZ·îÖ­°°3g&NRSïÞ KN®­íPE¤PƒƒCC¯\ùßÿŒŒÚÚ2332Š‹UTæÏ {ôh×®5k-š0ÁÀ€@€·… ‚8œžž³³·÷æÍçÎ/X€ÅVUAÐäÉýýìÙ±cÎÎlvq1›mm=wîáÃ[¶XXHpë‹F«ªÎšuõê­['O.\¨­]W—žž‘Q^®£ãïzð ­í—åÆã‡ݸ1$$.îÈ‘Q£x¼ÄÄÈÈ›7ãâ˜L‡  ÐÐ ´´0ÝžŒãñÆÆžžŽ §X€IDATS§†FWTÄÇß¼yõjpð?ÿ¤¥‰Å®®ývìØ¨QŠ´TŒ¢¢—×ܹ»wߺuçΉmm/_>z”šÚØ8lØòå7o^¿îé©«+-üú£{ú ‘ðù ••ÕÕµµdjêééë;a‚¡!‘øåV½ŒŒžÞœ9»víØ±g¯¯žž´½عóÈ‘#Gvî›ÍdÒé,ƒÑÚÊbµµµ´0™mmÍÍL&ÞÔÔÜ\__]ÝÜ\WWUÕÔD£UV66ÖÖVT44ÔÔ”—74TW—–Ö×WUQ©Ò<éô¦¦º: ˜ô½‰ÉÉ}ëVCCQQbââÅnÖÖ^²$"‚ɬ¯?}ÚÉIV¶ãiÔ¨C‡ª«9*µ¹ùÉ//=½O óS%TPprŠŒli)*zùrñâÎXOJAÁÕ5$$+‹Ãáp""æÎ0^=ÊË{xÄÇS©NYY`àˆD"™|èé©¢ÒQF4Z]Ý×÷éÓÂB§¹ùüy''é¡C"ÑÒòô銊’’wïÖ­ÓÓëTh<ÞÜ|ß¾ÄDãÕ+_ßÎhïu±ZZ‹?zÔÖÖQwiy,,‚ƒËʨT§ `ëVkë΃«rr“'_¸ÐØØÚzíš‹ …Òú£çú@&;8;F£±Ùøù}Ú~_~“’’§ç½{ FMÍáÃöö}üÿÛòA%%/¯„„¢¢ÚÚË—mmûª]­/<}è{}&“G¾{·¹™J¥Ócc=<45;Z…0ÀÓóÚµ–+"Âϯó8òiìØk×Þ¿çpòò6m²´üñÐ…RU??)©¨¨¼üäIKK EW×ÃãÞ½ªªì츸5kŒI¤O»Y¸òé_ö¿c74ô÷÷ŽÉLLÜ·ÏÜüçÇÆáö/Ýé:%nh¸cÇÇ%%ùù{÷ÿü\Ž¢¢§çóçT*‡óüùÔ©JJ¿þÄ\{ì®ëZzjÀ€™39*•F»qÃÑQQ±SãôôV¬xøÍniùçWׯ§H8œ––›ÛêÕÿûß¶m«WOž¬«ûíQÁç}ø¤I'OVTíÙ3bÄÏkñ³ô=õ'ý©éš>#Gž9“‘ÁἿ|¹¡a‡"ìí/\xó†ÅJOÿžîŠü±Ø!C6oŽ‹ãp8œÂÂììÈÈ  ‹##X,'''2rölUU©œzæ¯:l¡¨(9Ù×÷[–tŽJJRRV¬ÐÖþÙøH´²:s¦²’JýðaûvCÔ^ÆóìYQ‡C¥îÚecC ªªº»¿|ÙÖöêUp°­­œÜ!6¿¸¸¾‚üüLM55ñx¨¨èn ­¤4lؤIsçzxŒin>p ¢¢¢¢¾>K de_º—ªªÈȨ¨¼¼Î0«ööææÚZ…²° Pðx 8N}áë|}èŸtUþÄbåå%%UUÉˬ_¿iSLÌÞ½gÏFG65ýŠøòïÑ}@£Éä_£ÏôáÃíÛ))uu)‘47§¥ÅÆæçCÐÆ¶¶âpׯ×Öòxpäé«ee%'G£EG?}ZXøuˆÉ÷[ØÁ!(èѣŋuuoÜX²dòäÓ§ > ›oïÛì±;í$KÃ\º2<€Û¿¤¤@Oú#øué ± ¥5ëÏö(µ‹_Q ==4ô͛εm±¸¶öåË„„ÒR,ÖÝÝÒRC‹Žnkëìù…ššGN:}úÑ£®Y˜šš›ÛÆ /Κõþýç!À=Iןü¾ðx>„„<{Öа`Á´iÎÎþóOI fhèîîä$'——wòdbâ·.9èšz±¸¦&#ãÓ³ ßR99"‚x¼æfçsU‰Œ¦&ëóo… ¯´4%åþýÐÐBC?ÿùäÉó祥<^§zJ$Ncc[›@Ðñ;‰x<àë®n}Q(99‚8œæf6ûÓòK$NSS[ŸßYŠH¤PˆD$“ÝÝCCJKKKÓÓ¥?³².\°±ÁbA‡û|»ž“04ô÷¿r%'çÅ‹ ìíÑ芊””èèØØGÒÓ!H:xù<±¸¥¥´´µõs™H$RCAé?pëÛÇWúpå/ææ-X0kVppK‹‹Ë¹sWT´´¤¦ÆÇŸ;çë;rä¿qénWõ¡ïõYú½B!ÞÔôyg!³Ù--,ÉÈÈËw¼COþh4‰¤¬L&C“YWÇbuu‡F+)¹»¯^=¾¼|lìæÍG޼}ûõ¥î˧Ø#|­a³ét6H$UÕσkz£éYÔ½ko‰Äb±X$‰~ÍÔ£'öøëJÃá440™Ÿ[‹ÔÙl (”¯—ààÇìé¹f©iNÎñã¡¡?žêÂIÇŸüþp¹9966x{Oœ¨¦F"éëO˜à쬢B¥††ÆÆÒh_û½®Ê‚øü††ÒÒœœ¢¢¦¦o#·¶fe¥§Óh ¨©9xð€8ܯ?P(D"p¹Ÿç/?47³ÙŸ{ .÷õë;æÍ[¸ðüyÍÔÔÇgÞ<77•ÌÌãÇô½>wX++K¡àñ Ç¿Q("Q^žDA ²R HàË_"áñÚÚ¸\ ‘TT:";ë 75ݹ³gÏ?ÿlÛvíÚÉ“II£G/]úù`¾|:wÄûƒ=Â׫ªª¤„Å¢PLMMLÑè´´ÚÚï-iÀõ· t¿?‚—›‘±}»Ÿß´iPXøãý‹þ`¿ é ÷—ž–Ú#ðù=•?‰4|øêÕÞÞÊ“'6ÄÄÔ×ÿ87xé»îOþp¹EE·oGF65-\8gŽ£ãðá²²'jjR©ÄÆ~ë”\ùË7AP‡'B¡¤ø¾?ðù,‚’RljšÎñ‰$/ÿõÄ‚¸Ü²²°°íÛW¬ ëø-…2uê£G‹s¹¥¥eeÍÍRµ·Óéåå Ž'/Ÿš:{vPPv¶Tƒdeee•• £ºº¹¹'´··´Óédò°aêêR-ýtÑÿsÄâÆÆÌÌJK|}ÇŒÑÔÔÐhi7NS³¼<665Uz1C÷€×Ÿþq;HB!–“SRÂç«©1tè§I¡Pòò&&VV|~YÙû÷4|•jk?|ÈÏçóõôÜܦLÑÖîˆA eÄ//iìgOùöt¨çõåó«ª>|(/ACÃiÓlm;~£P #GΜidôéü_,nm-,|÷®©IVÖÖÖÑQG§wß›AUU]]2™Á(((-e±:Ô…RT´³›:uРžL/àÖ·¿êƒT#Äb‰Q(4º·Ö_{Cþ WQ‘’rçΞ=§Nàñ&&VVZZ={°oêÛ×úü‰ëE™™ÍœieÕyælm'N42Áêê·o«ª„Bøòêë32rsù|míI“ÆŒ8ðgç":%Êåœ<9gÎæÍIIãÆ9±u«…Å§Ï öµ|zb (/ogwà@XØOž„…mÙ2fÌ·ÖÃË¥RŸ<ÉÈ,,–-ss2äG5†ëo{Öu†¾€`WvÐh eРÁƒµ´tuÖÑQPø}ž“†kïðÒƒ 0|øô鯯'EÐèF?^_¿½½¼<;ûkùÆÆ7Þ¼yýzTÔ͛˗››Û—£PªªãÇoÜ8}:‡sãÆ©SïÞý8@nú®û“_éoáÛ#}æóóòBCcc‡ ó÷ \±BO¯¬ìÎçÏ¿ÞêŽ<¿–¯¼¼™™º:Ô×S© Baß„B-7·´´½]Ggòd{{eåN‹%‘,,ÜÜ,-‰Ä®|ƒ¬ìСnn–– ˜]\ܱ¨ÅçWU¥¤ˆÅ|þë×QQééa‚22NNÆÆhtqqffyyW^~ú‘_OJúøQ$22š0ÁÀàgWδ·Óh/^DG××ë踸888:º¹éêÖ×GG§¦ÖÔtª·?ýãv ¨­-3óÔ©°°¶¶èècÇ‚‚¶n€wïÀÜ|ÅŠ£GGŒ ÓÃÂæÏOMýürÀ®Âdff_½Z]pàÀ;QQFFQQyy²²vvîî¶¶bqW'7ÿF}Åb&óÅ‹sç¶o¿råòåsç‚‚öí{ð ²RWwÆŒuëFŽÁϣ¹ܼ¼óçÏ+(X´h÷îsçΟg0Ž ýðËUP:ÔÆÆÚº½ýáÃÝ»/^,)kdÄfS©iiµµêê~~[¶Ì›’rölI‰¢¢‹ËÊ•»w[Z‚`WÖÇ¿‡X\W¯¾}¯(…bn>q¢››‚‰dh8h‰‚**cÆx{Ïž-‘P©YY>yRXøé­ZA}}e%ƒA¡Œãç7{öèÑII «¢‚ÃÅÄ$$Ðhp»ÈîÈŸD7îìÙ³g}}i´èèððää²2KVÖØxî\ÿ!C„‚‚K—jk|µíÏé‹úöµ>w ‘޵gOhhP¦æ;ZZ>>;wN˜€B%$lØ'C WþLfZÚ±c!!TjRÒ† áá/ŠD{ö„†‰DZZÆÙڢѱ±üó•úuùÅâúúgÏþ÷¿Y³ŒŒž?ÿçŸK—¨T7· îÞ¥ÑÚÛûV>=±GÄã54ìí]]íímm€L¾sGºV = ¡ÓŸ?ß¿ÿڵ””õëccÃÃ)”nÜxÿ¾µUVvðàÑ£‡­®Þ¶íáÃÊJxþ‚ ûý‘HÄbÑhmm ¦6r¤££““ƒ™ÌdJ$túǯ_S© Ƨk­x¼¶öœ9‡<¸lܾ=n\LLvvssïïöpí½+é;v (”Ù³ ik»x1*ªµÕÄÄßÏKK:=,ÌÏ/%åkù£ÑJJ66..£G;9wòä·&œŒ¾¾··¿ÿðá……W®þØ+ÁMÇŸüÊþ¾=ÂÓg>¿ àÁƒˆˆºº… ׬ÑÖ.+ |ò¤ºúËÑ\y66{öœ:µ~=‰ôöm|ü»w‚Íœ9{öŒ-'%­X‘’"}V¶¯ÇÒñÛ™30™?~éÒ©SÊ­[?**Nš´n§§¬ì—ÒD¡””Æó÷_½ÚÒ²µµ°°¡‡37÷ñY½ÚÇbcg̈mjê(“DÒÚúâŹsÏŸ …¡¡Û·8°x1“”¤ 0uêž=²²qq>>©©Ò]–îÃbed\¿þêw指‡•™üömJÊ÷/  KKcbRRÚÚV¯ö÷ß´I(äñââ‚‚*+¿7ÀÓgxã´››«ëäÉVV¶¶ÒÈäïw]?úôS¥/))..*266113;wîÂ…K—àˆ‘Åêéñ«Ÿ;ÚÊÊ—/©T%%‡… W¬ðññò7NM­¾þþýƒýüvìxñâÓõ"4šLÖÖ67×Óãr“’""RRªª¾?¼ko¯©IN~ú4#ƒÍVU536LW—@(- ß¾ýìY>ßÙyÖ,EÅ„„Ó§ïßÏÉór£¤4tèСÊÊee/_>z”‘A§“H††C‡jk75¥¤DF&%55ápººÆÆúú\îëב‘ÏŸ———”t½¾ÄáÄŽyÃf8:z{{zŽ£¯ßÜüðáºuýõú5§¤ÔÖ–˜øðaff}½H$77gfÆÅ¥¦2™ºº.. øø,\8{öر66b1•úòeB‹óõ®#µ´¼y“–ÖÒ2h‡ÇÂ…~~ãÆéê64DF®_øñ#‰$/_[÷øñÇ--D&ëêš™ Èã¥§ÇÆÆÇ—•u ÓP(2YSÓÌlÐ ¡0--229¹¢‚Çc³áÕn àê ¥¦æè¸xñÖ­¾¾vv¦¦"Qmmu5“I¡+(ÔÔÄÇ?{öùµÃíí ……ÕÕrr––žžK–Ì™3wîôé¶¶ZZ--ÉÉ))MMðKWþb±DÂãñx #FLŸ>sæâÅþþsæøøL™2dˆXœž~ùòªU«Wß¿ŸŸßÓ73ºV_ ž>ðù}«Ïh´œœ¡¡™™œ°eˉTªƒÃÂ…«WÏžmb"%&ž?¿xñÊ•÷îåçs¹ÔùK×ß22>|ýZ 06vu5kñâ \\ÆŒ14Ä`**ããŸ?ÏÏ—–‹UV:ÔÈH^¾¸8!!*êíÛÖV¯®îíÛgÏJK54ÜÜfÏ61imML|õŠJåpD"8ò+ÿžØ#«¨8tè°aÚÚ"QyùÇ11ááÒ6íYÑÞ^W—™™”ÔÖ¦¡áààìÁí_à÷G=.ŸO£ÕÔ`±ææ®®‹ûúº¹¹¸˜˜°XOŸ†…½yó¹Åw´ÅàÁDbeeFÆÃ‡:ó«€oÝõo]I/“ÉÆÆ XY¥¤¬XqøpUÕäÉK–,_îê:p`cãÇGúúnÜû­ý©-6h U^þþýãÇ‘‘_ê$‘hf¶uëåË>>ÍÍ»wïÞ}ãFqñônz¸þDzUÁ¯é_àÚ#\}‰Øl>ßÌÌÇgþ|"1,lÆÇ_½úü=8¸ò”ŽcedttÆŽussqñððð˜4ÉÁA[»µõéÓ#G6o^¹òêÕ¢¢ŽÞ þx©k¶ðéxµ¼üÅ‹ÔÔº:uõQ£¼¼æÌ™4ÉÊ ~õjÿþƒ««Gš6MQñÅ‹Îñ$¯­=vìòåë×Ïëí=mš´âãwï^¸pÿþÈÈÊÊOu‚¸Ü’’´´´4kèйsæÎ9sØ0LO?|xãÆÕ«oß.+û~@\WáókjÊËåäæÏß²eî\':úîݬ¬ï?œÐÞÎ`´¶R(¦¦òò••ññ'N\º”šú¥'„§ÏB!œþô¼æûß„B™2åÒ¥––¶¶›7§M“—ÿo×Ñ„þJÇ5ß FFÆéÓ#FôN¸ó§ùS(ÆÆS§Îš5j”–Öσ]á¦ÿ³Áá ·oÿð¡¨èãÇ¿þ<øë íÿ¶<‰Ä#öﯨ`0ºólÌ¿ÊÊŽ¹m[VVEÅÕ« èè`úuÛùPlß+ ¬¬¬L&ºáŽÅjjNŸ¾bÅÈ‘22TjZÚ¿}DÑ„¾B"a0 ž< OO¯©éJ¨¼ô2x¼‹‹··¾>þàAEÅ×Q=ˆ<ûÄb½zu옇Ǯ]\îÚµW¯ŒI¡ôשÝwéW€Åêé-_~÷îë×kÖàñ…… ¥effb¢ªZ^~öì´i÷î•–öäVD~'8‡JíŸe³µ}ñ"'gÑ"¤•~?¶lÉÌÌÏß²åÏ•À¥KeeÅÅp޳t‰D20èi.BaYÙÍ›––7oöo©"¤>@(,(8rÄËËÎ.9ÙÚÚÌLWWAçñNœÈÊzùòõ뜜ž]™ˆ€èÂïFï °z,VIÉÌÌÆFK‹ÃÉÉÉÉ)+ûòµ„þ­¤db2l˜¡¡HD¥¾ySTôù…$(™=ujsóÑ£îî'¨¡1zô¤Iû÷·¶Î˜qúôþýnnÒ{åùü‚‚¿ÿž8qÜ8SSKËE‹ÎŸ¯®ƒAd5ö¿ƒXL£=x°{w@À«WãÆ]¼xôè¸q};I"­­W­š7OM-1ñÊ•§O¥os÷^úŸƒF«©¹¹mÛæá¡¨¾|¹ž…bl¬©éîYSÿQÙþG{{eeX˜——µõ”)ÖÖÖÖ6¼} ðöm`à¸q¿_¾üÆÊÊþ\c”•5jýú›7/^œ?ßÈHF¦kõ¯¨ˆŒþÊ•mÛÔÔôõ==‡ Ããñx ‡ëþþ­ `g·téΡ¡OŸFD$'ÇÇ_ºtòäòåVVŠŠŸ‡Ç ÑÊÊ#GΚµ}û‰'O>z™šš˜xûöÝ»'Nøù­¬üù_àpAAÁÁ ˜šÊËki¹ºnÙräHTÔ‹OŸ^¾ìé9hô$ §­íåuð```@€Í A..Ò” ááOŸ†„lØàî®§÷e°`×ÊO$ZY­_¸k×ôé#Føù:uíZlìµk XX¨«›™-_~áÂÏŸ?zèãc` -üú Prrææ3gîßãÆÍ›/_&%Ý»÷äÉíÛ{ö¬Xag'/ÿy[ÉÈhi¹¸lÞ|èPdd||ddrrBÂÍ›¡¡§NÌžmañýP#‘¨ºúéÓ³gß¼QS›?Á‚!Czûuu@£ut<=ýýíí©Ô«W¯\ÉËûú‰»ž¤ÿ H èéÙÛëì‡ÇºqcHH\Ü‘#£Fñx‰‰‘‘7oÆÅ1™AA!!¡¡ hiužwÀã==§N6 ®¨ˆ¿yóêÕààþIK‹]]ÿú+,ìØ±Q£(”Îa±ªª¶¶ÞÞ ÌšµnÝ­[aagÎLœ(¤¦Þ½–œ\[ËåJƒi0EE;;/¯¹swï¾uëÎ'ÚÚ^¾|ô(5µ±qذåËoÞ¼~ÝÓSW·£D]-?âpzzÎÎÞÞ›7Ÿ;¼`[UA“'ÿõWtô³gÇŽ9;³ÙÅÅl¶µõܹ‡oÙbaA"u§¾x¼‘ÑÒ¥Ož¤¤>¼p¡†FUÕ³gqqii4šœœ…ÅСòòŸÊÓÜ|ÇŽû÷7l8°°0,ìÚµ“'/]ŠÍʉLL¼¼ÜÝuu¿¢$‘´µed~,)ÉÏ߻רø[ƒl"ÑÒòô銊’’wïÖ­ÓÓë\ãñææûö%&2¯^ùúvNH¾_Z-­Å‹=jkËÍݰÁÔ´s—‡D5êСêj‡Jmn~òÄËKOï{«ëD¢…EppY•ÊálÝjmÝY+9¹É“/\hllm½vÍÅ…BW~,V^ÞÃ#>žJåpÊÊGŒ ÉäÉ“## 8œŽ2£G_¾üö-ƒñìÙ”) ðëK"{íÚû÷N^Þ¦M––D⤂JJ^^ EEµµ—/ÛÚvoHM&;8?^SS[{êÔ¸qdroi ÊËOštòdEEQÑž=#Fü¬tpÓãC7ŠŠ’“}}UU¿·«GßääF¾u«¡¡¨(1qñb ÎÝ4Z[{É’ˆ&³¾þôi''9¹ÞÕŸ® +ëâ]TÄdFG;:ÊÉ})m•Ù³ïÝkm-)Ù¹ÓÆFCcÒ¤ÈÈ<ÈÉ¡Ñ""üüôôÞ²%;;''>~öl%%„kïÝõ ¨¤äéyïƒQSsø°½}W5Lvp8vŒFc³<ðóû´=zÛ_! üWøãº<‹!P(4$±‚P(,î Ðh…!C,-••9œÂ²2‰DIIMMUUú)Ÿ_\\_A~~¦¦ššx<TTtì ÑJJÆMš4w®‡ÇÈ‘ææ****èëc±BVð­ákKË;DE•—ÿü”LUUddTT^‡Óñ›ööææÚZ…²° Pðx &“»^þ¨¨©–”ddP©<™›óx"‘X\[›—G£ @$r¹"¡P(TÇÅÔÕúâpêê£FYYÉÉÑhÑÑOŸr¹?na+//)©ªJ^> `ýúM›bböî={6:º°°©©«çÇÄb.·µ•Ç“‘2„Dê­«¤—"lÜèàÐÐpñâ¬Yïßw¶Eo¤ï{~¦o8œ††¥¥™‰T_ÿøñ›7--IˆÅMMoÞddÔÖ’É'®©‰ÃwWúÆ;p8……tºœœ®®ººšZ}½‚BsóÛ·ii4fŒºú€jj ƒ‘›[^Îå¢Pð콺Z^¾{þ¡o辿B@@@@@øïò‡M$6»¥…Ë2YQ‹­«+,ll”“sp°µUWÇbÓÒØl":½;߀B‰ ‘‚d²»{hhB‚»ûשèôúz,¶cJ†Ãúû_º””tð –VJÊ… ¡¡11ÑÑ`kkl‚47‡„xx89Í™óìÙ—Ö‰>¬‚ ȧ‰JE×^™L hjâó!ˆJUW—¯ôµ©³HÄdFFîÛ·lYdäd²¡¡“Ó¤IÛ·Ÿ?¿cGDÄÅ‹õõ'>|X[û)éÂ0‰¤­m`@£±XÙÙµµ]1Q§R–/÷ñ¡Óïß_½úáÃêê/'\F[þÛØÏ×ôM& ¹\‚ˆDEE"ñõ7 †H¤ÑˆD‰8¡PÞ"túÓ½ÈdNIIN‡£¤diiiÙ£‡LV\V\ÜÒÒÒ¢§geeiI¥²Ù ‡#“ÉdX,{ÇbÑú‡înïU~~»,vA^^LÌóç<ž™Ù¬YcÆÈdÿüãééädgçé¹ví¢E'zzôï¿jÕ­[ÿ= Ò¶âò©çK¥¹¹¯^ÕÕ)(ØÛ»º|ù¾&‘44 i46;'§°°¹¹uŒÁ¨¨8:ŽÓ³ç·Ì!…¶þïK¦=å`˜LF×^‘¨º:55+K(Ô×9rðà=Ðæ2“É‚’’„„7vì8~<'‡H´°°±ÑÓûü5¿$’™Ùˆ&&IFFJJq±PØI3Ãhh ¶f͸q<ÞÕ«Ç¿zÕÜÜ•åÄb&33³ @(ÔÒ0 OŸ÷³b0JJ66::BaQÑë×Lf[àù}¡O!2™oÞTW+)ÙÛ;8¨«77VWWTäæ²ÙjjÚÚªªÖÔdfVT…èí¥£ö%—T*“Á0ƒÅÊ×{¿Ÿ½ð+óžAb±’“ÿúëøñüüääÝ»ƒ‚nÜPR:qâúõ—/9EÅ>}|}7m20¸tiÆ  ÒÒOZH$ÍÍLfSii èêêææâB£q82‹õömJ ƒÁfóùÙÙgΜ>“3wîöí§OŸ9Ãf>œ‘Áç++÷écggkÛÒrçÎöíçÎ…\.ƒ‘”TY©­={öúõÓ§'$œ:UP ¢âá±dÉöíÖÖ0üõõ’®¤ýõ?¾®½üÑ·—ÃIJ:r$(ˆÁˆ_½:4ôÜ9‰dÇŽàà¼<‰DOÏÊÊÞ‹ŒÜ»÷Ÿ ¡‚¨Ô¡CO:ujæL&óÁƒÐÐgÏŠŠš›ÌͧO÷÷ïÝ[,ÎÉ9¾²òsëƒ4Zß¾~~£GãpOŸ.]úæMgïÉÁáŒ}|üýrs/^\¶,7÷ËçÅЖÿ±ì«©)-íøñ¦¦Ž9p`à zõ ‚úõ[¼øðáX¬?¿ÄĦ&>üGkTÊbåä´´y{«ª¾y³SSM ‡Ãb©ªÚÙ $‡„66Ê·¢µw´åÛj&UW—–²ÙtúàÁ³gO™âì,“àñêêB^ÞÇ11L¦X A ޯ߈^^vvÊÊTª©iÏžT* ««ìã3eŠLÆ`¼ysçÎýû¹¹NÇëÀ¯Êo™—H(|ûvÿþéÓ‡¯¯_½zóæ¹s-:|xæLŽÍ..~ýúæÍíÛ9œOO‘Éêë>ܽûܹ öí›:õÔ©ë×gÍ sr®\™4ÉË‹Á`³¥R±877 `öl‘hݺ͛gÏÞ¸ñüù?þJY¬ÒÒœœÇOœàó[Ÿ/ææ<8}úöíZZóçŸ|XSó©-kX¬ÁÔ©+WŽÏf×ÔÔ¹µ ÅÂbáÂÅ‹µ´bbV­zô¨¢â˧¨Ð–ï _Ò˵_ß„É_³fÆŒ¹s››7mZµj×®ýû,@ººôôë×W­=z×®”6[&£RÑëOçzC"©¯õ*11&‚ZCœ‰ŠŠÿù󨨜.†étSÓ‘#'O;ÖØøã©~aáÓ§))Ô§ÏðáS¦ôéóásRSŸ>ÍΦP\\<<¦Nýðoee"Qbb\\f&›ö=odäã³sçÍ›'ON™¢£“˜XZ*c± ÃOnÑ–ÿ™ŒÏóæìك׭‹åñ¾^CmÔ(SÓ‰œ¾‡þÃ0G¡P($’LöæÍºuîî;w&'·ÖAD¢ºº¢¢¶‹h»´ö‚¾½èÊc0jjãÆ?¾oߌ2Ù¥KãÆõésáBv¶¦¦·÷Õ«®Yó÷ßÓ§ß¿ïêzî\w^¢ €ß𤤍¨;wêê˜Ì²²®ú”?“Ū««ªÒA 葟 NOoñâ””ììçÏ/ÖÓk}ßÃéë/Y’œÌ`ðxÉÉ~~méÙsùò‡Ù쬬ի--‰Ä®­K£ÑéDâ‡o½±Xùó“’Œºº7œi´/?C[{„Gêë_¼øçŸ¡C¿\º=É66{ö<}ÊåæænÚdkûñ 6dȱc55Î&(+£k1Þ³ç€....Ÿþtv¶µÕÓk]yúÔ3””f̘9sÊ *µãïèi4W×ãÇOžÜµküxcc*•Jíß?  ¨¨ àÅ‹åË{ôøx¥mù÷¿éì|ófMÍÛ·7n¸ºR©í¯á¨Q·ogeUU]¹âèØ¹¾E¯ÿŒ–Öôéaa\nmíÉ“®®×­oi/hÛ‹¶<æätýzmm~~l¬¯¯ºz[­¨ÔaÃÓÓY¬ÈHwwUU°Š€îâ—YAÂ`¨T ‹GŽôö¶²20PWÇ`¸Üüüôô˜˜Ë—“’Š‹9™ŒHìÕËÍmìX'§ÚÚôôš3377WW)'çìÙˆˆâbKK1c†UT¬«{ð <üÎèèº:™ŒN72²³óò²µ53ëÓG[[UUQ‹‹ëê**23ÃÂ=JL|û–Ë}ÿ]; S©ººvv¾¾nnvvýú©ªâñ‹UY™œy÷nqqÛÑyNUuàÀaÃFŽ3ÆÌLKKI †…ººªªÂÂgÏ’“ž>­¬~¼3"$’®®ƒƒ®®@““•ÕØ(‘@£¦6jÔš5›6õïAÄf[YõèA"•–r¹TjŸ>#F …©©%%"ƒÇ0,‘ˆÅRéçÛH£9:þóÏë×—.MœAŽoc³fͳg\îû¥¤R.—Íþøä Ã0‹Á@LÖÒòåUÎÀ`òä¹sd±îÝssKKûðЂÇMštèÐÒ¥jj±±‹_¼˜žÎçw]ɶ¶«Wß»wïž›WZÊdòxm-Ä`õõ D¢+W\\úõ;|ƒÙ¹32òömcã;ûô™<9.®¹‡SW1bݺ=<ŽŽ ËÎæñ:r6ŠË]¾|Ù²ØXùS(r-èªòÿµ} eäÈãÇoÞLLljjO±Xee  †ïÞýöúÃx<…‚ÇCPK‹PøýÏ}¡³´í… 4åËÊÈd55mm E$ªªªªâóÛ~¹¥¥¶¶  ±‡ë×ÏÄD]‡ ††÷ÏŽµÏ?ð5~‰ ‡34>|É’€€‘#1˜ØØ¨¨ÄÄGd2Cà Æ_²dljdß¾µkSRD"mí>}ôõuuµ´ÌÍÍÌÌÊ ÍÍÇ?t¨Gºº¼¼œœœ G!C–,1âÍ›„„ààŠ  ¦´ôÅ‹ÔÔÌÌúzRS:ÔÃc„]»(”ÚÚ3‚‚rs¹\ <^KËÕõàÁU«ÆŒÑÑ))yþ<,ìÍ›ÚZVVÖ×71ÑÒ¢R±Øâb>_"‘¯¨Œ½xñîÝÎÎMM!!÷îÅÇGE …$’®®¡¡™™›[ÿþêêII••ee"Ñ'}%%mmM,ÎÉ e2¦Ñ¬¬Ö­Û¿ßÎ.11 >~ÈeË´´TTäoˆñxùÉEÅ™3#"JJ®\0@]‚„ÂüüˆˆU«¦LÙ¸ñêÕ‚‚ÿ¶‡£ÑTT"‚¨ÔöŸ: *ÕÄdÈcc*. *+ûü&ÁÐpêÔyóz÷®¬¼ukݺ¬¬Î38œžÞŒ§NmØ`oŸ“sℽýíÛ55Ý‘(B&c±<˜9ÓÁaÕª„„¶I¡¢¢§gPPqñßËÿ†1"‘D¢PÈd æç IVÖõëgÎìߟžÞž­id²Ý¶mG.Yòíõ‚`'“q8Æá´µÇŒÙ´iïÞ¹sµµe2ãÑ£k׎ ÍËknþ¾É>g/èÛ‹®¼TÚÒ"‘@K$âñïk' c±ƒÁP©t:…‚Å~ª7:êhã=½ \\´µËË>Ü·ïðáØØº:‰‚RSß½#‘ŒOŸvr²°PWOK“çÖÃ``X*ÍÊ:s&<üþ}EEGǽ{54Þ¾=>"":šF#‘ìíRQ¡Ñðx‰Þ¾ ;{öíÛƒy÷‡ë×/(ÈÕµgO ,67—Ë•HˆDKË#ÜÜz÷f±bb–,9wîþýüüÏeÉ‚aÉÐÐØXY¹¹ùíÛ7“’ [§#¯^%'ÿÈÒ‡aL&[Oнzùûoß>eJIÉÑ£#FDFZYEGÿñ‡¹9…B À0 …ІA4ZÏžjjqqS¦Œ5{vY™‘Ѳe7ož={ìØÉ“IIÑÑaaæw‹KJnÜØµëرŒ ÊÏ/,l_î1 FMmÈéÓ‡§Rsröìyü¸ºús§ˆÄ^½¼¼fÌ01a2CBnÞl닎"0\ºôÇ11W¯æåuW Ã$’¶¶£ãÈ‘®®4Z[Î:*ÕÞ^M ‡ ¼¼_ÍÁ0Abqeejj||dd{Ï Éd ¶´t>@B¯ÿò‰DÂá ˆF³µ5Êܼ¢"5‚ìì6l¸|yüx[[rsóö ©­ý>?o/hÛ Ã„¦<‚p¹ÕÕùù ‚‹‹¶6UP c0tº¥¥ƒƒ¶¶¼×?µU´£þ€ùé$ †BÑÖ65¥RE¢²²úzQTTTTT”ÿU,®­mjBGG}}uu®5ù8‚ÔÖ2••--Ò³§X,•ÊdMMõõ ‰--R)‚ÀÿGþ †N×Óë×oÄ++SÓž=UT¨TEEuu /)!å%±XeeKK}}2¹¾>;;#£´ô˃4‚…ÅÅ C‡º»ûúfgß¾ž•Åd65}iÃÙ‚ ‚À0C&Œ{èвetâ„»û½{•• ýúÉd‚ 2™¼%0ŒÃ8q8·o>|ôhTTa!— AÅÅG>œ‘±dÉßѧ…Æd67·ý–X\Qq÷îñã'N ÙE$öì9oÞ¶mÆI¥K—)<š2eìXCÃòò‡ÃÃŒÎM±ðx]]GÇQ£,-µµ55­¬vïvvþŒ)âttìíi4,–DZ²äï¿òðøÜoK$uuïßôhhhiik[`˜LîÕkâÄ fÍ2¤mjÃijêé}ê}ûÏoýx<™ŒÇËd,V«~ýèúAIiéÕ«‹;:Þ½Ëáäç×Õ …Œ¶vrrTT|ü©S‹¹¸hh„††…UU}ûu¤/Û úö¢+Ïççæ^¿^[;gÎÚµ‡:ÔÜ|ýz^ž¾þĉ۷;;c±TZ*ˆÅÿíïŽù>æðx …D‚aÉÅeΜ͛]\þ[ŠÏg³Û’#ˆPØÜÌç·íþG©´¥E¾µãBÂéé9;ÏŸò¤——ŠÊÛ· ÉÉÏŸge1d` «ëà`m Ã$0N'„Çc³…¯¿–HŠŠ¢£ÏœÙ²E&óòš7ÏÇgÍ__"‘ÍÎÊJM‰¹páþý¤¤ìì÷Ï•ü( ˆXÌå ¢¢2bÄ®]«Wóù¡¡óçûúæå‰Åäà€Å°TÊçs¹ò) ‚H¥b±D‚ uu F]][¦6™ŒËe2«ªø|ISSU•D‚aêx>;yßùùíÚµv­¡á‹6Lž[_ÿ99‰ãÇO˜ §WUõðáãÇ]=B±˜Ã©ªª¨`2Åâ/)D"'ßÊà LfUUyùçΜI¥,VSÓÇSD™ŒÅŠ_·ÎÛûË[ì~0MU•N'h4ù$§=6ÒugÐë?APXSSX˜™YSó~Ÿ66¾y“œÌdÂð”)½zijTUõ­²ÙµÏ^жA ­|øü””Í›g̘3G X»Ößß×wÆ 3³Üܸ¸£Goß66Þ²ÅĤ¦†ÃìÐ]üô’LÖÒ"…"ÆÆž>½cÇ_1ŸÞÄÃTê!ò3 ‰TúþTJþ^ôSß" gÌ=ÚÐ0''8xïÞíÛß¼‘OÚ1 2ÙÍíÃï!HK —+C™L£í»KF"a±RR?¾r%%%*Š@ÐÒêÙÓÁaî\_ßI“TRjnž1ãüùôtëG[Qjia±Š‹Ùl:TI)1qÊ”ÒÓåg±ÔÔÈd6»¼¼¾^ I¥ÍÍUUŽL&?ªþßS8‚H$òU¼ÎÔŒH45>ýüùýû-,RRÖ­óð¸zµ¤äóÓ*<¾G¡CÇ76njŠ‹»s§ àý«U;†DRU•pêÔÞ½ _.I£ bh8þ¤I·n S©––šš†@ISÓ»wUU--ææffššh77!ˆX\]Í`$'_ºôô)“‰Çkk©«ÿ÷ÂL¦ÓÞ³çܹ{÷ÂÂvíòöÖ×ÿÖ[©„²²„„œ©T(LI‰ˆHNnhOóH$77ss,6??-­¸Xþ.¼¥¥¾>33'G ÐÔ´²22RPhâpZZ––=zõõ••ÿ}wN&››¯YxåJDD`à¢Eýú}ê ZùFÖÖ›7ß¼¹q£©éýûëÖÍŸõjEÅ—¦¨X¬¦æàÁ£G›™ …éé·ogeu><úÖHzzƒçî>a„ ­ŸcÇô±–þüàpÚÚNNhiÕÕ%$‡†>yûõÏøø´´êê¯,Ý£ÿŸuÅ%¥¾}µµ!¨ºšÁ¨©ùïËî²w4ö‚¶½]%…>}¼¼¬­a8=ýÁƒüüO%Ni¯àËüIÄ⊊;wž=«¬3ÆÃcîÜ5k‚¢£++E"--cãÞ½¥Ò—//^LJzÿ•L*mjÊȈ}ñBY‚Þ½klüÔô‹Å`Øìwï’“““I$gç¡Cß¿‚X HOÏξvM>á“ÿ ¢¢¥ÕÐ’rëÖ;iiuuß'XWà  Ã2™L&OdÃ2™T*·‚††—/=ú÷_,‹m]¿Ã`Èd:LÆ`¤Ò––®Ly •r¹¹¹ññ Xli©PøµMp_+Ç›˜Ì»cÇŠ=zddlÝzìØ§µå nG"‘HX¬LÖÐÐù–¢Õ±˜ÉLIÉ̉þüsìØU«ÆWS#‘x¼ââ;w6l˜9sÆë×™Ìÿ¾é.{Gk/hÛ‹Þ?H¥R)•Ú¿¿ÏÔ©Ó§««c±lvnndäÒ¥žžDGn£qûü_%))*êκ:&³¬¬«>åÏd±êꪪtPz¤ý()séRC‹uýú´iÚÚàméÏ 6dȱc55Î&(+£û®«ëéÓÕÕGº¸ÐhX¬‘Ѳe÷ïóx<ƒ!ÿäp¢¢&OÖÕmÕÁÂbëÖØØ÷Ëðx<^jê©Sƒý¨[“p8CÃéÓcbX¬ììèèeËzö$¿&‡³gss33ëêjj^¿®¬¬ªÊÊ’·7%eùrCßå¶`ï|~‰¤ß<^]½G‰äåË+W.^ŒŒ¬®oKf„Âüü7V®\¶ŒByó݆1>?-m÷î!C\]¤¢‚Ï—Jùüóç}| ÂÂ(,V$jh¨ªjl”¯’B‰Åyy>>7o**R( …uu••%%µµ?êÆ;‰¤¤$$Ä×wРÄD /¯´ôkk(<^fæ®]^^S§^¸@§“HD"Á´´°XïÞåævÕY$`ïü*üôÒ“'¿O‡ ¾råÊ•A--§O/\8jÔ÷¬üM<0¤®æÌ Àçpu­¬\¸È‚¨T*ÕÄÈ]ËO µ €ï˜ ~%~±Ô¿Ðq@€ÿHÀ/ ‰tº––¶¶²2•ÚùÎ0"QQQEE[[OO[[[[E…DyÔü8tÕüç· 0MM/¯¨¨ººää'ü01æævêTuucã>>šš˜ß0€Ä`44|}££ss?NÝúÉ妥ùû›šÀ4°XMÍ1cöí{û¶±ñÕ«ÂBãÅ‹ÚÚääùóML:–Î74\¾<11/¯±±ª*-ÁÈËKH`0Ê˳²X¬ÜÜ‹7lpqQVnuBdrÿþ‡åä|¨3ééÛ¶™™}-%÷ «;`€——§gß¾ªª] ~Ý¾šš¢£'LÐÒú½OçÀãŒV¬HIÉÏonNIé¸Î¿O«>gf>y2}º†Fû{­þt¾u­EôêµhÑóçÅÅ—/Oª¥õµ:¢-ÿ%ù|[ûýüÇtõüç·‚±XH$ðøÖK2[a —ÿõwu`2YCCdäâÅ&8;;;/ÿ2dâÄãÇ_¼‹!¨´ôÙ³7ojj~ŽôÈ¿—fkiyymÜ8i’ŠJhè¢EFFtº¹¹®îøñááÿ½z´=À0K"ÑhT]}þ¼¦&Ö»·††™Ù´i[¶dg[[oÝzóæ–-C†Ðé0 ABaNÎ_1t¨¥¥µõܹgΔ—C€ÃÁðÇöö#à ƒ­ZxŸ™‰Ôµ‹bc·m9²ÍÊ䟃/^üôi}ý×.Ô| ‚H¥‚Åb0 #¿¹ózA8‘H  ÐêOwê[×@¡ØÚ.]:c†–V\ÜÅ‹ÕÔ|9Ñ<ÚòŸøà{ØïÏáÞ§ëç?à$ÀJY,#'‡Å’ÿ7‘hdäï¿oß‚}ûfd<8xðÖ­iiNç'€®…@PU55ÕÐ@’’+WÞ½khHZZ¤ÒªªÆÆÎ?]" ‰A¤R¡°¼üÅ‹3gÖ¯?{vÖ¬ôô9sÆëÝ›DŠMKX¬ŠŠŠ ‹H$“Y,±hʧåÙÐPT”‘ñæMV— äÑH¥"Që@ØÒ"‘Íë0uõÁƒW¯ž4I,¾vÍÓóÅ 6ûK²E[þó ˆX ü ð-í÷çñïÓõó µ,VMmàÀ .œ:ÕÅeÀ }}UU<^ ¨¨HOŽ>yrÏž  ÄÄúz©†­­×¬Ù½ÛÍ-/ïôé¨(%¥yó–.1ÃÞ^A¡¾þùó[·víú믈ˆÜ\.AЖÇãõõGÞ¾}Ó&[ÛììC‡¼q£¨¨u-Gþ´Õ«÷í›4I,þ矿þ:~í¥£ïÃ4ÚÀÛ¶={ð …E|üüù\¼˜ÝñkD;Z,VYÙÑqîÜeË–/Ÿ4ÉÊJO‹mhxó&,ììÙ;/\xýº±±õýšþj5,“I“vï^º”F Ú¹3&ÆÀÀßÅ ÿQ£Œ „›7—.]ºôß Åb‚ IOÏÃcùòeËæÏ1¢W/55 †Ë­¨ÈÎNK»sçâÅÀÀÐÐŒ §£«x¼ºº‹ËÂ…Ë–ýñǸq––ššT_ÿæMDÄÅ‹ýuî\ZZm­|"Ãd²‘Ñ Affêꦦ½z)*b±tº™™£ãèÑîîMM--NAARRrry9וn±¥¥¡¡¬¬¡A&£RÕÔ¨ÔŽm C×_‚¾þÔ©;wΟ¯®XTäæ¶hÑ¢E#GLæóçgÏnÛvòä;ÅÅm—ȶ_°X%¥þý‡ ±±13³¶VQÁáH$‰ÄÑqäHWWEE¡‚¤Òî’çÇP(66«V­_?f ƒñðaYÙðá‹Mª ·aæM¯_¸}ûš5“'kk—”\º´zõÞ½ÁÁ †TŠVÿåC–¢b¿~ãǯ[·zõøñNN††D"WQ‘“óàÁ‰ÿ}î\JJSS«>£ÕÿöË¿cý+A¤R±¸-@êê«t‰DQ£Ö¬Y³fÑ"wwcc"ñ¿õA«? šò|¾‚šñâÃúÓhŽŽÿüóúõ¥K'BÐÇãÇÛØ¬YóìÙ×Âs,ÖÀÀÛÛßßɉÁ¸tiÍšìì/_ÏüùòhÇ;àOÚÛæöÔøtþ¤;ÆëŽÌ7`˜F35:uóæ?ÿœ=ÛÑQE…Ãyñ"<üÀ‹Ùìqã–,éÙóáí[ÏžMMýÔ‹k´ö‹^ûºÊ?tdŽŠ~þÓ~ùÿ¶»Üa˜@ÐÐ07ï×ÏÞÞÞ¾ù§™™’÷ñ°hnîí=fŒ•[RxéR@À?ÿ$%I¥žž[¶„„92h|ƒ‘¼»<=çÎ?ÿðá»wÏžõ÷WW/,LL|ù’ËíßÅŠ#G¢¢ŽurRRêHù–«¡AUÕÓsΜ ¦N50xÿ$‚‚½ýܹkÖÌœii)56vÆ °XMM/¯={nÝúóOeåðð+þúëî]&³s“ŽŽÔŸHìÓgÍš  ¨¨C‡ ââÂã¢8—‚‚‚ƒgÍÒÓkë54ýÕêÞ44ìí}|fÍš¿Õ9‰ýúmÞôï¿«W÷è‘›rùò±cçÏGF¾y#‘XXL:~¼¡aÇ·Pɶ¶Û¶?z´{·MCCttXXPPttc〻wGEmÛÖ·/…"/骲|ùƇíÝ;ož‹ AFFÓ¦ýùç‡mݺoßò媫ãºüu‘¨£Ó§ŽËf——75ulºþÂáTT§N>}ûök×nÜøûo—¦¦§OïÞML¬­µ²Z´(0ðÊooCÃÖö¢ÓÉÈhÚ´mÛ6oÞ±cæL##y,[¶wïÖ­‡u¥}<ºí3,lúô¯%iÀbõôæÍ»{·©)+kõjKK"ñÃç3™W¯ººª¨´>‹52Z¼øÎ.·¡áŸ<=•”`my¹‚ xòdj*÷úõ¢E¦¦­Ã™ìätöì‹ÍÍÉÉ3gvÜàåP(ƒ_¹’žþ¾dØìôôƒ§LéÑ£3ÏFW ÅÚúĉ’’‚‚W¯V®42jÔ‰Ä~ývc³Ÿ?oO{?Õ_r¨ÔAƒöï//çñŒúúû÷§N52ú\ VU:5&&/¯²òÂ{{*µk5TQÑÙùÚµšš¼¼¸¸yóttÚÎ=`±úúó燅q8ÕÕ'N¸¹)(ü·Ïú÷(*ÊË{ölæL4Ê?гçºuéé FiéÅ‹îî={YZº¸Lœxð`bbNWP°}»ƒÃ%A$ššnÞüömAÁ»w»v™›£ ?Ý_­md0x¼œœ lmÛ~WQqÔ¨³gkk/_öð Ó;£?0¬ªêí}ë›]Qqð “SWõ3£¡áçÿ9ÏSP“`mM¡À°’Ò¤IÑÑ WT´sç€ 6jTxxN×*2ÙÙùÂ…—/ÙìÇGVVF¯ÿTê!—/¿~Íãeg¯]kmýþPÞyýG+´ýûaÝTT¼½Ÿ}SXˆÇY[ëè¼ÿ¯ý傌Œ  ÇkjLMÇŽuw—‡+d²©éøñnnŠŠÙÙÁÁqq=”ß ŸŸ˜¸`ƒƒªªšš••±±£ãêÕ!! '?¾g££¢bGŸŒ¦þX¬²rïÞÖÖjj<^nnQ‘L¦ªª¥¥¡¡¥¥¥E§ …ùùÕÕ¢§gi©«ûaN#´ý%§¡áƽ{#"Š‹å[éþ ‚47ggÇÇ—•))yy­Zµví„ ææêêBW&tt¬­ûö¥R««_¼hhh[±“Jëê^¼HM­¬¤ÑÌÌtu;Ÿ£ jj>>'N¤¥½}š¹m›‡—âï?nÜ¡C/^ðxy:úþ*+ ˆÈÎnûÝ––úúÊJ6ƒQP Ó‰D ¦ãúÓÝ Hsó¿ÿΘ¡©Ùæ¨T*ÕÔÔÜ|åÊ7Æ"HAAj*ƒ! ˆX,H$Rieev6“)AXÌçK$‚Á`0m×Û+OA[{Ð EE&óÁƒGrs¿¼%þwFþíéßëÖ¶ÅN"‹¥Ò®Ü‰¾>Ý Úñ‚ H,®¨¸{÷øñ'öí;~üñã’’Ïy¹ÖÞÓÒòòZ³ÆÅ¥¦æÜ¹ÀÀׯ¿lãhÊw¤þÀŸt}ÒUöÛÙñúkó A[ÛÒÒÄ/-}ô(1±m£žLÆb%$\¿þòåç÷ ¡µ_ôÚ×}þáÛð5ùƒD²í2SSÿ‹33ccW¯vrÂbKJ<ˆŒ¼{79¹¶Aänä}ƒ–Jy¼šçà E*år¸\"“éô÷]4ºò|~ffXØ;µµ&&>>#FhiQ©ÆÆÃ‡»»««3ÁÁ‘‘Lfç—Qe²–±X(¸ÜššÌÌÇÏž ¯­UP°±qpÐ×ïøÐþúc0 N¡À06~|ppLLaaaar²üóÍ›³gíìðx~?'aGú«UÞ©©_Û‹,ge80kÖäÉ §Oß»WRÒИ}úôÌ™v<‰+K¥*)Q©$46 nh”Jù|6[ € EE¥kî7j/RQqü¸——ªª|*O£YYYZ޽}ûµk99|~ǧ¢ë/©´¡¡°°±ñÃ\Š2™Aš›CB<<œœæÌyöìKï¤:Ö_­…ü ô×'û"“¹oß²e‘‘Ɇ†NN“&mß~þüŽ/Ö×[XLœøðam-ºIšL&r¹‰ŠŠ¿ÓÂ`ˆDH„ ‘èC}øÝìK.+‰äk‰œÑëÏ‚H$"чZ‰ òé–S©èä)“ MM|>Q©êêŠÜ}mèj¯þ74 •Û†œöôïýJjê¦M³g A¹¹]û~²#õé.ÐŽè¡R–/÷ñ¡Óïß_½úáÃêê/? ]ùî«ÿïåOÐÔG¾eø“®•gÆë¯Ï7d2 ¹Y €a ECƒF“?¿-ö¹¥hí÷Çò߆¯Ë¬ }&‘44 i46;'§°°¹¹µ[1GÇ1czöü”zÂ0™ìà0nœ¹9ÖúoX¬¦¦³ó°aÆÆ--ÅÅééLf›Û@[‚„ÂììààÈÈÚZ++ÿ;/62**ºqãÉ“î‰Ìa˜BéÙÓÊJS‚ËË?~ƒ–öÕ_*mlÌÍ}õª®NAÁÞÞÕÕÀàËûÎ;Ú_s’AIIBÂ;v?ž“C$ZXØØèéud…M,f233 „B-­úôQTls¹Œ’’……ŽŽPXTôúõ‡úð#‚ Òö†î{ôZýù°îR©Là ûm×>]›öY)™ŒNž"QuujjV–P¨¯?räàÁ=z ½úKúßqùw,–NïÙ³W/==CÃ^½ Ú®/þ>=†FЕG?^@üxôš5W®DD.Zԯ߇¥·y aÃÖ¬7ŽÇ»zõøñW¯š›¿T´å;ZÿßËŸÀ°’’£ãÞ½!!W¯Þ¿²~ýàÁŸËêh}€?iOÛ¿.ÿî¯E¢ÊÊŒŒwï„B##/¯Ñ£õõ[¥ Ãtú€S§ÚÙý׆ÑÛ#:ºß?ü(€¤¯:.—ÁHJª¬ÔÖž={ýúéÓN*(PQñðX²dûvkkyn¹ÿ~‚èô)SŽ jj:w."¢±ÑÂÂßÇkk+$döì„„¦& tåÛ srnß «ªš3gÅ }ý¢¢;ïß//ïì´™L¶³Û±ãر•+Éä´´Ç_¿nlTP°µ4iÓ&wwáåËuëbc;{Æ©½õçó³³Ïœ9}:'gîÜíÛOŸ>s†Í>|888#ƒÏWVîÓÇÎÎÖ¶¥åÎíÛÏ+( ;Ö_h R‡=uêÔ©™3™ÌBCŸ=+*jnVP07Ÿ>Ýß¿wo±8'çüùÊÊŽäD¦¦´´ãÇCBšš<8räÀ  ((èÕ+ê×oñâÇ `±BBüü?Ö‡‰¤¹™Élj‚ -­]]ÝÜ\\h4G&c±Þ¾MIa0Øìîî/´úÓöM‘¨ºº´”ͦÓž={Êgg™¬ WW'òò>Œ‰a2¿|†ãKÀ0fi9nܬZÕ¿ÿûºÒÒR^séRXX}ý·ðWNRÒ‘#AA F|üêÕ¡¡çÎI$;vçåI$zzVVööXldäÞ½ÿüÃ`…hõ_&ë¨üÑC$êëO›vðà¾} BÐõëC‡>|˜ž^_ÿ}Þð£ÕŸö”oõ¹/äçHìì<<œÝÜ H 8vìSÁglìããïïà›{ñâ²e¹¹_Ör´å;^ÿßËŸÀ0‘¨£ãääééädoA4ÚD¢|‚Þ&™ö×çüùº:àOÐxè¯Ë¿ûÇk'-- àÒ¥òò˜˜½{o܈ˆ03‹ˆÈÎVPpt?ÞÞ^*ý8Øíˆ=¢á[ø‡…ß.@B‘¨¦&--&æùóòrëÃe>©´¡!++&æÉEE&S¾GW(ÌÍ=xpúôíÛµ´æÏ?yòÊ).Ž œ7ÏÏ/9yáÂY³X,6ûý RiCChè9ÒÐàç·dɦM}úàp%%ÁÁ[¶ÌŸ¿n]R’Ü\Zß7´·ü‡…ÅÅÄÇ75­Xáèxï^DDqqçWÄb&3%%+K,þóO/¯µk'NTW'“y¼²²¨¨íÛçÌÙ°áܹÒÒ®X½h_ýÅâÜÜ€€Ù³=q‚Ïo•~GúK*e±òòââbbš›«ª¾f¾BaNNhè³gÍÍK—úøüõ×ìÙzzJJÒÔ”—ðà„ 7>|XSÓ±%dápâã׬™1cîÜææM›V­Úµkÿþ ¤®.=ýúõU«FÞµ+%åS«I¥\nnn||B‚DÂdvÍ…Š2Ÿ_\œ””˜˜ŸÏå¢i•LV_ÿðáîÝçÎM˜°oßÔ©§N]¿>k–P˜“såʤI^^ ›¾¿>ßF©´¹¹°0!!&†[í­þ´Áã½|yòäÊ•§OëèlܸaÃáÃ×®!›•¸jÕãÇ11LfGúW,®¬LKKL|þÜÊÊØØÕÕÝÝØøýAzzvöµk¡¡ÕÕ55/_&$<}Z]ÍáH¥ò7¨oß&%ÅÆ‰ò›>¤Ò¦¦œœ””˜>¿®®¥E @¯ÿ<ÞË—GŽ5v,‡ó×_7N™ràÀùóTª@Àdææ>zÞV­þ£“ÿ—tøÓýû_ýOMMH€ ‚‚}rÇèx}ÐêO{Ê·H/¤Ò¦¦ŒŒØØ/”•!èÝ»¶»ãÚ P,,.\¼XK+&fÕªG¾ö" mùÎÔÿ÷ò'ms•—/[Z (+ëS:ßþú ˆDüIûí·}òïÈxf¾ <^Jʶm>>ãÆÕÔ¬Xáïïæfjª©™èçwõªMpð¿ÿšš¶>½cöØ~¾èz_ýa¹vËÿwKóÝÝ´¦1e³SSOœ0àÓ[:^þCSÓM›22òò޾ݲ¥W¯o›‡«óüìõ€oGçÆ‹ö<ŸN773fòäAƒôô¾¾9 }ùî­?ðû@§}þ|CCSS`àØ±JJèíñGó?`‹ÝO ‘hbâááãclÌd††Þ¾]RÒµ÷#ƒúÀïƒLÆfçäÜ¿Ú=å:`˜LVSSUÅbY¬úz.W¾6†ÇëꎷxñÀ$ƒqò¤<%LÖÒÒöø»ù ý´&&“&yy—•=xpû6ƒñóììüê~uäøþ˜u³·ÍÌœ;÷g•íÏ^àGaíÚôô¦¦µkÑ~O~ÿßçR#“56ÆÇÿñÇèÑ……<^vö×ÖDЖoC*­®_»vøðãÝ»Ÿmõåg¯?øÕùñ&x¼ªjß¾vvzz<^ffffQºs þÀÏ ‰ªªææØÚöíkh¨¬L$ Læ›7OŸ¦¤dfÖ×ÿèùlZÉËÏ õêeiicÓUÍÏÏÊzýºOkë,,ú÷·µmÿw™L&³#GŸ ³€{àÿ€ þºÍÉ)(¨¢âÕ«à`77*HøYIºÆã "‡Ã`ä÷.€Ÿ°‚ÿç7 H$ ‹¥Kwï>qbùrss2‡ÓÐ=zûö.\øë¯1c ðx¡W¯¹s·mûûï¥K{÷n½é‹UVvt\°`ëÖààGž=‹Ž>þرE‹llTT°ØO £ Ð«×ôéœ=ófhh@€¯¯­-Ž¡)ðÃñ›MÓ„@ÐÓ:tæÌiÓlmÕÕÉd==OO?¿I“|}çÏ÷ð01!‘¨Ô~ý||||ÜÝõôp8 "±OŸ5k‚‚¢¢4H ˆ‹  ŒŠâp\\ ž5KO÷ÁvE&‘œœöí;ujÕª=ÊË’“kk çÌÙµëѣ˗njÑÖþtX¾¿Ù$±¸¢âÍ&S*<ÙÈHCCA¡¶VW—ÇËÌ,*¢P45õõÕÔÔÕ5554¤Ò²²7oª«E" ¥OŸÅ‹/îÝ» `çΑ#- (.ni Ðд4EE;»„„ \]õôKJä¿ÃD >ƒQVîÝÛÚZMÇËÍ-*’ÉTUµ´44´´´´èt¡0?¿ºAôô,-uu‰Ä+#ãúõ„„ªªÖH&«¯OJŠŒ|÷Aôõíí{ô € ?¿];¡°¼<+«¢ƒ±±éÕËÔÔȈH¬¨HM}õJ&3føð=ôôTU)”ššÀÀŠ ‘ƒ¡Ñèt †i´ñッcbÆÿïSY¬êj<þýŒu2™XÌbÕÕñù2YÛ¿J¥\nCCs3‚HJJ$8‰üHüv’LÆá””ääp8JJ––––=zÈdÅÅaaÅÅ----zzVV––T*›]PÀ`p82™L†År8|>‚47‡„xx89Í™óìŸÿù_ Ñ ‚0<^AN'a‚¸\‘ÿ+…¢¤D¥Â°HTZ*½<€ïÍo¸‚!2™oÞTW+)ÙÛ;8¨«77VWWTäæ²ÙjjÚÚªªÖÔdfVT…$•66ææ¾zUW§ `oïêj`@"µS´˜¾}'N´±QQi]'‚aee{û#ÌÌ`¸¼üå˲2±¨ ðãð^+•²X99--FFÞÞªªoÞìßßÔTSÃá°Xªªvvƒ‰Å!!……ò³C|~vö™3§OçäÌ»}ûéÓgΰهgdðùÊÊ}úØÙÙÚ¶´Ü¹³}û¹sB¡üWd2‚áAƒvì>p@W÷Æ’==_ß­[‡Ç`bbV¯ŽŒl;~~à ‚D¢¢¢=Š‹ÓÔ$bbÊÊÄb>Ÿ@xúôáÄjn~ø°´´5Ô ±877 `öl‘hݺ͛gÏÞ¸ñüù?þJY¬ÒÒœœÇOœàó[ƒ©´©)#ãÉ“û÷““O á Ö¬Y»vüx•ÆÆÇðòZ¹òþ}&„GÀœ”uçN¯^––66]õÐüü¬¬×¯ûô±¶0À¢[Ûö—Éd2™LÐ1àÛ²¨Àÿü Àÿü ßÚè0$’’†ë¶’X¬‚‚‘Q¿~ÆÆ ª S(ýûÛÙ™š*)áñ _ è7Mó è>02YEEMMI ‚8œššÆF¡P&ûyêÅÒhêêêê  ‹USÃb‰D][*ÕÑqÛ¶ôôLL¶m³°˜6-0°«S¾½zÍŸìXtô˜1 âèxøpzº@ÐV70˜??8øÖ­?ÿLOŸ5«ÿeËRS[ZägÒ6"ÑÐpÚ´õë§O·¶¦Ñ>~a³_¼ :tèß»êÒæŸ_ÿ)UU%% ¦¹¹¦¦¾^ ø’n¢m/ÚòÝoü°‚èÈdÿ[·ëëËË““Œòò¬¬üü[·fÌ03#“?õNEÅÊjÁ‚sçîÝ«­åñòò’’–.Õ×ïÜÊ £¡áë›Ëãñx Æ?¹Ü´4SS¡õ;‚Áرgμz••USSR’˜È`TTdg—•=|¸h‘ úÉ÷çPP°·Ÿ;wäHuu§¾^SsÔ¨ üüüü&Onïç„ ææ4#o-nn>fŒ¯ïûe<=ûö­­}ù’É41Y°àÌ™;ýüfÎl{Îüù[¶ìÛ·u«•—ûòeY™¡áøñ3f´=Á×wøð¾}étL§üÚþE¯x¼žž—×Ì™3nœ¡aûWÁcã‰çÌY¶ÌÓSG§M¾­þ·µ[GgÖ¬‡33y¼ÆÆ+W<<¿¥íâpZZÇ/_þï¿oßffÖÕ•—''”–ff2™OŸ®^í쬤ô±& m/ºòßÎø` Ðy%™˜,XpàÀÀéé+V ´iÓÍ›\îˆÉÉ{ö\º´`ABÂ!Ç—–¶´@odäã³sçÍ›'ON™¢£“˜XZ*c± ÛüÈd ‘‘‹O˜à쬠€ÅÊÿ‹ÕÐpu=|øæÍåËÕÕŸ={󦦦¥‚ ƒQS7îøñ}ûfÌÉ.]7®OŸ ²³55½½¯^}øpÍš¿ÿž>ýþ}W×sç**$’Ž× ‹ÕÖvs[·nÂ:½¶¶ @MmäH_ßÉ“[¥¨ªjnîàл7PXøâEFFk ?D,ÎËãóŸ?ŠÊÉára˜N759ròä±c?žê>}š’A}ú >eJŸ>>'5õéÓìl ÅÅÅÃcêÔÿVV&%&ÆÅef²Ùhߨ£íßÎêƒLÆç¿ysöìÁƒëÖÅÆòx_¯!6j”©éĉNNßCÿ߆i´-Ú¾}Èy˜€Çc¾ék+ FEÅÍmåJOO.<|Æaî^MMml455ëÆÛ·/>rdæÌÐPgçÖú£m/ºòßÎø,ò‹bëê˜Ì²²®ú”?“Ū««ªÒA 葟 NOoñâ””ììçÏ/ÖÓk}ßÃéë/Y’œÌ`ðxÉÉ~~­¡Ñ\]?yr×®ñã©T*µÿ€€¢¢‚‚/–/ïÑ£«ÏÉFFþþef64ÄÅ-\hañþkÍÉéúõÚÚüüØX__uõ¶é)•:lX``z:‹éڹÀL¶±Ù³çéS.77wÓ&[[ åÿÓhC†;VSÃáܸ1a‚²2šgc±tzÏž¸¸88¸¸|úÓÙÙÖVO¯uåéSÏPRrp˜1cæÌ)S,,¨ÔŽ·mÿv\h4gç›7kjÞ¾½qÃÕ•Jm Gº};+«ªêÊGGíÛêx¼¾þ¢EqqYYUU™™¯^ñx\îõëcÆ|Û$,–F£Ó‰Ä5‹ÕÑ™??)‰Á¨«»qÃÙ¹UJhÛ‹¶ü·²G>Ï/³‚„ÁP©Žéímee` ®ŽÁp¹ùùéé11—/'%s82‘Ø«—›ÛرNNµµéé55ffnn®®$RNÎÙ³ÅÅ––cÆ ª¨XW÷àAxø;ÑÑuu2nddgçåekkfÖ§¶¶ªª¢"+×ÕUTdf†…=z”˜øö-—ûþ»v¦Ruuíì|}ÝÜììúõSUÅ㫲299>>2òîÝâb>¿õ̧ª:pà°a#GŽcf¦¥¥¤ÃBa]]UUaá³gÉÉ OŸVV ?ÞIW×ÁAWW ÈÉÉÊjl”Hä«2£F­Y³iSÿþAl¶•U$RPPi)—Ë寯._¾lYl¬ü мÔסÑÿùçõëK—&N„ ‡Ç·±Y³æÙ3.÷Óåa˜F8pÛ¶³g´°ˆŸ?À€‹³³ÛNãÀ0™¬¦¦­M¡ˆDUUUU|~[¶´ÔÖ46âpýú™˜¨«ãñÔÐБ³*x¼‘ѤI‡-]ª¦»xñÅ‹éé|~×õ™lk»zõ½{÷î¹¹ñx¥¥L&×Ö FQQ_ßÀ@$ºrÅÅ¥_¿Ã‡1˜;##oß66Þ¹³OŸÉ“ãâš›q8uõ#Ö­Û¸ÑÃãøñèè°°ìl¯#g£ÐöoÇõ¡µ}ÊÈ‘Çß¼™˜ØÔÔžc±ÊÊ$ ß½ûíõ¿Uóètgç?þذÁÜüõëÝ»7o† }ûþþ»uÍóÛ!•r¹löÇrƒaÆb1’ÉZZÚ´ m{!Mù²²ÎØ#ZÿÀ§ù%$ÎÐpøð%KFŽÄ`bc£¢=’É 'L?~É’;$’}ûÖ®MI‰´µûô8Ð××ÕÕÒ27733+K(47?þС=êêòòrrrr‚=† Y²dĈ7o‚ƒ+* llllLL0˜ÒÒ/RS33ëë!HMmèP ví¢PjkgÌ ÊÍår‚ðx--W׃W­3FG§¤äùó°°7ojkaXYY_ßÄDK‹JÅb‹‹ù|‰‚p¸ž=G^¼x÷ng禦{÷â㣢„BIW×ÐÐÌÌÍ­uõ¤¤Êʲ2‘èÇ“¾’’¶6&çä…2 ÓhVVëÖíßog—˜?dȲeZZ**]‘µ ‡£ÑTT"‚¨Ô/­5a±šš^^{öܺõçŸÊÊáá~~ýu÷îÓ!H¥-- a±D"ÿþ[iÆb  ƒ¡Rét ¥cSWNOoÆŒS§6l°·ÏÉ9qÂÞþöíšš®MÊ G&c±<˜9ÓÁaÕª„„¶I¡¢¢§gPPqñß·¶ ƒ!I$ …LÆ`~þ÷ð"‘de]¿~æÌþýééBá׿A&ÛÙmÛvôè’%ßKÿñxCÃÙ³÷îõôäñ.^ôñ ¯¬\µjß>úöÒ§¡RML† 16† ââ  ²²V¹¢o/ºò³Çöû>Ï/ zz&¸¸hk——?|¸oßáñ±uu ¥¦¾{G"Ÿ>íäda¡®ž–öú5AÃRiVÖ™3áá÷ï+((*::îÝ«¡ñöíùóÑÑ4‰doèŠ †ÇCHôömXØÙ³oß~øËÌ»w8\¿~AA®®={jh`±¹¹\®DB$ZZŽáæÖ»7‹³dɹs÷ïççnå†I$CCcceåææ·ooÜ LJ*,l޼z•œü#K† 2™Hl=)B ôêåï¿}û”)%%GŽieýÇææ /ÓñU0±¸¤äÆ]»ŽËÈ€ üüÂÂϯ牽{?t¨ª*ÑhS¦={6qâ¶máá Œ·iSHHY™D‚ Bauu~~Càâbg§­M DEˆÅ niéà ­-):~2D `0<¸té?bb®^ÍËë® †I$mmGÇ‘#]]i´¶U2*ÕÞ^M ‡ ¼¼_ÍÁ0Abqeejj||dd{Ï Éd ¶´t>@êˆþCŠŠ›ÛŸ®Yclœ’²zõĉïÞñùVV?ŽT15µ!C¦O>œJÍÉÙ³çñãêjùi´í…aBSA¸ÜŽÛ#ÿÀçùé$ †BÑÖ65¥RE¢²²úzQTTTlÝÃ/×Ö65!ˆ££¾¾º:' AjkŒÊÊ–éÙS,–Je²¦¦ŠŠúz‰‚ˆÄ–©Aàÿ#ÿC§ëéõë7b„••©iÏž**Tª¢¢ºº†‡Ç—”‰ò’X¬²²¥¥¾>™\_Ÿ‘QZúåAA„Âââ‚‚†…¡CÝÝ}}³³oßÏÊb2›š¤Ò=ñ2‚ ‚À0C&Œ{èвetâ„»û½{•• ýúÉd‚ 2Yç["WTܽ{üø‰_ßÅç'&.Xàà ªºx1@§›˜¸¹íÙsçΑ#ÇïÙñèÑÌ™‰‰ŸŸ›{ýzxxmíœ9k×>|èPsóõëyyúú'nßîìŒÅBPi©@ w¤þx¼®®£ã¨Q––ÚÚššVV»w;;Æq::öö4K"-Yò÷߇yx|Ns$’ººÇ÷ï?z44´´´õ : “ɽzMœ¸`Á¬YC†´­Qápššzz?ÊÊD×Z?O&ãñ2‹Õúõ-ôŸH41Y¸pïÞ‘#Ïœ™81"¢ºZ*íŠLz]‘سç¼yÛ¶ &•FD,]\\Ü– ½½£+ß{Dãø<¿@€„ÇS($ “H..sælÞìâòßR|>›Ý¶ÁA„Âæf>¿íÖ‘J[Zä[;>!$œžž³óüù'Ozy©¨¼}›œüüyVƒAººÖÖ0 Aò ƒ!èt"Ax<6[(üúf*‰¤¨(:úÌ™-[d2/¯yó||Ö¬ñõ%Ù쬬ÔÔ˜˜ îßOJÊÎ~ÿ\É‚ˆÅ\®@€ **#FìÚµz5Ÿ:¾¯o^žX AX, K¥|>—Û±£ãÈd--b±P(ÿÌÌ|üøìÙððõë}}ÝÝôõ‰ÄÄÄìl‘ˆÏOIÙ¼yÆŒ9s‚µkýý}}gÌ03ËÍ‹;zôömcã-[LLjj8œŽdÌB±˜Ã©ªª¨`2Åâ/)D"'?—à LfUUyùçΜI¥,VSÓÇò”ÉX¬øøuë¼½¿¼ÅîWƒ¡ÑTUétFspŸAâpÚc#]w ­þ+( ´téòå½z•”\¾œ™©¤doïââà@¥ZZ*+ãp0ŒÇ[X dgWRòâÅ›7YY ݱó³ÎÈÈÏo×®µk _¼Ø°aò䨨úú6™¢m/‚@ZÿÐö@{øé$™¬C„x=IDAT¥E  D(Œ=}zÇŽ¿þb0>½‰ †©Ô!Cäg$©ôý©”ü½è§¾E Θ1z´¡aNNpðÞ½Û·¿yÓÜŒ òwÈd7·¿‡ --\®X Ad2F ´ok–DÂb¥¤<~|åJJJT ¥Õ³§ƒÃܹ¾¾“&<¨¤ÔÜEQqôèË—ËËCC „éÓŒ¦O¿ŸÃù¯w½Ã°‚‚µõæÍ7onÜhjzÿþŸ::^½ZQñ) Aoï]ãÚcñ´ñ $i‹+*îÜyö¬²r̹s׬<ˆŽ®¬‰´´Œ{÷–J_¾¼x1)©¹íÓD$ª®ÎÌljRRrw1ÂÙ9#ãÙ³êjEE ‹áÃçÌÑׇ úpz"¼}ûäIbbeåÊ•žž{öøúÊd—.½xQU%•*+˜™ÁpFF``rruµX AD¢µõÔ©sæŒÍf§§ÇÅ155<‘¨«;r¤‹‹¶vKKuuĻޘ’É&&S§úù¹¹¹º²Ù'N¬__[û-7ä@Éd±±§O?y"oÚ´wï¼y8\|¼²ò˜1;v,[¦ å뛘øþFŽ‚ÅªªÚÙyx8;»¹A@pìØ§6­‘Évv;v;¶r%™œ–öøñë× ¶¶“&mÚäîN ¼|¹n]llÛ%“ŒªêСþþË—[[76ææÖÔýúùú._îë A‘‘&´weâû‚ ,VRÒŽsæ|y‹X\X´sçâÅ4Ú»w?çä‘D25õó[° wﺺˆˆmÛ23¿Wû-õ¿;솆 9räܹիÍ̪«CC#" }}W¬¯mAPKKyyLÌ¥K¡¡ ‡¾½hËwÜÛçø¿Dšo‰¤´46öìÙÕ«%’±cgÏvt7nÝ: Aš›++SSãâD"™ A¤R«¬,/ïÍG~ÆLÆá0™ùù¯^a±ò[_d2.·ºšÁxõJ,nn–HZZªª‚ƒ/_ UQ™åÏd±êꪪtPz¤ý()séRC‹uýú´iÚÚàméÏ 6dȱc55Î&(+£û®«ëéÓÕÕGº¸ÐhX¬‘Ѳe÷ïóx<ƒ!ÿäp¢¢&OÖÕmÕÁÂbëÖØØ÷Ëðx<^jê©Sƒ‘É?¦”p8CÃéÓcbX¬ììèèeËzö$¿&‡³gss33ëêjj^¿®¬¬ªÊÊ’·7%eùrCßå¶`ï|~‰¤ß<^]½G‰äåË+W.^ŒŒ¬®oKf„Âüü7V®\¶ŒByó݆1>?-m÷î!C\]¤¢‚Ï—Jùüóç}| ÂÂ(,V$jh¨ªjl”¯’B‰Åyy>>7o**R( …uu••%%µµ?êÆ;‰¤¤$$Ä×wРÄD /¯´ôkk(<^fæ®]^^S§^¸@§“HD"Á´´°XïÞåæVWïä!ÀÞø±øé¤'O~Ÿ>|åÊ•+!‚ZZ NŸ^¸pÔ¨ïYù›x`H]Í™3@€ÏáêZY¹p!Q©Tª‰ º–Ÿ>@j ß0AüJüb© ã€ þ ,–BQRÒÖÖÑQQ¡Ñp_ÙtˆÃéêŽéç·fÍŸzyYXÐh­i’àçø7~Û †i´Þ½çΕgƒª«{ù’Á((HK«©©«{üøüùiÓzôøtú`<ÞÈÈÛûÏ?wîÜ»wöl{{EEÌG2¤Ñœœ‚‚**^½ vs£R%¹Ñhnn§NUVVTœ81l ¨=2ûuõá{@&÷ïèPNÎû©ÉŒôômÛÌ̾–òûç® «;`€——§gß¾ªª_Oò¶<µÇ¿¾ £¡áë™™›{øpÿþ?jÂü®§}úÖj/™™OžLŸ®¡ôë{ù‡íùí̯:^¾»ëó3è:~CçÊŠC†<~üˆ=zèè8;¹gOcã„ 'NìÙã奩ù_çÝÒRR~òäîÝÛ·½zÅáü÷HÆã "‘@À`~­÷¯0ŒÁàñD"€Ã­ýRûUõá{ æäüõ׈C‡ZZZ[Ï{æLy98 é~«úÀ°‚ A«Vž;ççgfF"umy9íño€¯Å‘ˆÇü´Wß`‚p8"‘@ ÀM^ßÏ?ühÏGS0¿êXùî®ÏÏ¡?høíîAÂ`ÔÕ‡ Y·nÚ4:=>~É’5kN*(03›5kÕ*''uu/33?ƒ™8qÄSS"1$¤¦æý;a$’ŠŠÈÈË—÷ïŒüÝd|D,f±****X,"‘Lf±Äbõé€à7\A¢Pz÷6ÌÊ ‡ËɹyóåKƒ½{££/^ܸÑÅEKËØØÝÝÛÛÊŠH$©T¡-j&“ÍÍÿüóôé£G/_¾|ùèÑË—ÏœYºÔÉIIéóï00…^½¦O?pàìÙèèøø›7CC|}mméôãqÁÄdÒ¤fͲ´TRÒÓóô\¿þСˆˆØØ°°G.\ðöîÙ“@hû«¬ìè¸`ÁÖ­ÁÁ……={}þü±c‹Ùب¨|øf‹US8pòäM›þþûر»w££ÃÃãâ®_¿yóï¿gÏvvVSûðŒ’Rÿþóçœ?/¯ù­[Lœha¡ Ð¹7 x¼¾þèÑ{öœ9³yó´iÆÆxüû…aEEkë5kNÚ³gùrkk ¥#í… "‘ôô<<Ö­Û¿?<<::<üÙ³˜˜ÀÀààãÇ—-›2¥ÿï±u¨=úÐQù´ùÖ®=vlÍšqãz÷î×oæÌƒÏ‹Šzú4888ø¯¿¼¼ÌÌþ{ò­üñxuu—¥Kwî yü8,,>þñãsçþþ{éR ¶“~­ZÐÖ¿»i}°X%¥þý]]‡ >ÜÚZE‡#‘tuGŽtuuwwwwu9ÒÉI_ŸJ•Ëmy´þ@Ðן:uß¾;—-³³ëÙÓÃCî©bbBC= Z½züx#£7Â0fjêã³oß©S=}zãFHÈÁƒÞÞ¶¶½{¹sç±c‹ ¨ˆ¶—)›U«vîܶmܸfÏ>~üòåÈÈË—gÍêß_[»oßE‹Îž½zõÉ“»wwîôõ51ió ßC°X5µ!C/>qâäÉ%K† SWÇb;&ÏöÚ‰da±téîÝ'N,_nnN&ãp£Goß~àÀ… ý5fŒO ôê5wî¶mÿ½tiïÞè7vLßä‰::£F­YsðàÝ»_no{û«{ýgÇä‰nüE«‘÷õo{ýw§ßÂÞ»~…~>†®½Ý7ßû‘õ§]:ýV`0Tj4›]TT]m`0aÂøñ**))þ9eÊŠ³gûúþõ×Ë—rgúþ7e2¡°¦¦´´¼¼²A,-½½gÎ>ÜÔ”Bù´Á0‰ää´oß©S«VõèQ^žœ\[kh8gή]]¾‡“Ÿ¿y³››OppSSyùþýƒÉû)*þ臓™yㆫ많Òh..GŽ0™\îíÛ³gëè|ÓhÎÎ7oÖ×3,Vdä¤Iºº­%0MMoïË—š›ÃÂfÏnû •:hÐþýåå<ƒQ_ÿþÔ©FFï;ö÷¡P¬­Oœ())(xõjåJ#£¶wdDb¿~»wÇűÙÏŸÏœÙ6À|^zzóæÝ½ÛÔ”•µzµ¥%‘AX¬®îÔ©ññÍÍYYwîx{««·N°Xmí™3=ÊÍåñêëÏœqsëè¡=2yàÀ“'SSy¼×¯-25mm™ìätöì‹ÍÍÉÉmõGÛ^VU:5&&/¯²òÂ{ûï}Œ½> “:0M͉ãâx<ƒÉ¼zÕÕUE¥­‡Œ/¾s‡ËmhøçOOyH‚VþŠŠÎÎ×®ÕÔäåÅÅÍ›÷¾}`±úúó燅q8ÕÕ'N¸¹)(t¤>¦¦›7¿}[PðîÝ®]ææŸ z»Î^Ú3Tv_}`XUÕÛûÖ-6»¢âàA'§¯é5ÚòíõoJÿþEE —“³aƒ­mÛ“G:{¶¶¶±ñòe:‚`XYÙÍ-<¼¡!/ïéÓyótu[[…Á(+{z½yÃãñxaaÓ§êÌç—[¨¤4iRt4ƒÁãíÜ9`…B£ž“Ããµú42ÙÙùÂ…—/ÙìÇGVVîn}À`44üüâãóòŠ‹³¶¦Ó 'Mºu«¬,==*jÅ sóß•¢“':û‚auõ)SnÝjl,(غÕÎNGgäÈððŒŒÛ·33™Ì°°Ù³ŒzõZ¿>==33:zÊUÕŽO…Ú«ohÛ‹¾¿ºÏv­¾¬LIÉËkÕªµk'L07WW'¾ïÎöëùt‘(998øÅ‹ÆÆ¶®¬|ú4&¦°72²¶ÖÑÁãÑÊŸ@Ðѱ¶îÛ—J­®NL|ñ¢¡¡µµ$•ÖÕ½x‘šZYI£™™98è꾿¦}õA?HuÔ^º‡­>¡¬,<<"";›Çký—––úúÊJ6ƒQP Ó‰D †@ÐÖ¶´41ÁãKK=JL¬­mÕZ™ŒÅJH¸~ýåKôë ÿµ­‚‚ÔTC @±X H¤ÒÊÊìl&S$‚ ±˜Ï—HƒÁ`p8•o%,VUÕÅåÀ»w·m34¼zuÁ‚)SNœÈÉáñ>½NÓ>y¢±/ŽÇ+)ÉÍe± µµµ´ ”•ëë_¾LJª­¥ÑLL´µ55MMét6;+«¸˜Ïÿ–§çÚÓÞŽØK÷ùOé¸<Û7þ¢•Ïæ:îÿ»g<ývþ¶{æWhË£mï·˜ïý˜úÓ>~³$ 2—ÛÐÀçC¦¢‚ÇWUåæÖÖ**º¸ØÛkkãñII\®²2…‚ÅB‹Õ¹_‹Y¬ºº¶qò.ærš›„DRR"‘>vpRiEEjjqñç§  …B§S(0L£3~üK±XÕÕx|k@@ ˜šúûŸ?¿oŸž^BÂÙ³ÁÁ>xš Aööææ#GNšÃòM… ‰¤¨H&#W_Ïå¾_{™ŒÇ««kj ;;Œòù™™aawîÔÖNêã3b„–ÖÅ‹ Ç»»««3çÏGF2™òá Gß^±8+ëÀY³&OniÙ´içÎÓ§ïÝ[»–F«©IN :wnÛ¶­[¯_þü}ãë~ÍC£í—OG‘Jy¼šççÈëÃåB™L§“É ÓÒ‚FþX,•ª¤D¥B@ÐØ(|(a©”Ïg³¢PTT¨Ô6;ko}ж³#öÒühõéŒ5466¶´|¨ç2‚ÈóÉý ™¬¨H¡ ˆ@P_Ïã}˜O"a³ëêš›¥R•ÎØW[ÛÔ$µú%‘H‘èúÉåO&ùc±ªªãÇ/_îç×ÐêáqèÐË—MMŸÏ Ø>y¢µ/¡°¼<+«¢ƒ±±éÕËÔÔȈH¬¨HM}õJ&3føð=ôôTU)”ššÀÀŠŠÎ‡ª]¯?±—îóŸ‘'šñ­|~4Ðûú¯•¶ÇæÛ7ž~ Ûó+ôåѵ÷ÛÌ÷~<ýi/¿Y€„ |~YƒÁbÑhýú×Ôœ:uüøóç¾¾¾zõüùŠb±’’šZYYDÄ©S FÇ —¿åaârå*†ÁP(JJT* ‹D¥¥"ÑÇÃ%‚H¥b±Dòy…”ɇÏGææ'§9sž=ãó?_ÍÚzÆ-[llÒÒ.tu6-4´¾^&“/YÒéþþï×AD".W$‚ammeeù „ÖT¿0L")))(‰0ÜÐйžàóóò®_¯«›3gÚ4WW…#tuŒÛ·##ËÊÚÞ3£m¯‘ˆÉŒŒÜ·oÙ²ÈÈÈdCC'§I“¶o?~ÇŽˆˆ‹ëë-,&N|ø°¶öÛ¤1F«í•OÇëC&«ª¶º˜6÷$¯ …ŽP(“¡•?‘(r¹‰ŠŠ¿ãÄ`ˆDH„ ‘Hþ|´õAÛÎŽêOwñ£Õ§sm‘HäÓµ/··¹Y €a ECƒF“ëCë°‡ÅÒhm]ǽºD"}è5A>U3™L(ü6ò—JëênÜØ±ãŸLL6n¼|ùرøxgç >?9oŸ<ÑÙ—LÆá””ääp8JJ––––=zÈdÅÅaaÅÅ----zzVV––T*›]PÀ`|ë”îíÕŸŽôWwùOôòD7þ¢•Ïç:æÿÑÒÞñ´ûým÷ίЖGÛ^*õÛÌ÷~4ýi·žýLÆ×yy11ÏŸóxff³f#“ýó§§““§çÚµ‹Mœèéi`пÿªU·nunŠÁôí;q¢MÛ™ VV¶·1ÂÌ †ËË_¾,+ûô6º/!•66ææ¾zUW§ `oïêj`ðåd0L"ihÒhlvNNaass«Ra0**ŽŽcÆôìùþôD(,+ËÈ(.†aSÓ±cíí[ÊÏ 8q¢™Y×¼¹ ³³ƒƒ##kk­¬üýwî\¼ØÈ¨¨èÆ'OJJÚÞ  mï§N ()IH¸qcÇŽãÇsrˆD =½ÿ.©Ã0>xðž=çÎÝ»¶k—··¾~We´B«í“OGa2ÙÁaÜ8só¶ÅX¬¦¦³ó°aÆÆ--ÅÅééLfK Zù‹ÅLfffAP¨¥5`@Ÿ>ïg Ä`””,,lltt„¢¢×¯™Ì¶v´·>þ‚ HÛÕ®°—ÎÑõA‘Je2Æ`°Ø¯¿?F[¾{‰*+32Þ½ Œ¼¼FÖ×oÝV Ãtú€S§ÚÙuÅUªŸ‡¾¯> ŸŸ“sìØ´iëÖÅÇzèPX؆ ýûw&'#zû ™Ì7oª«•”ìíÔÕ›› ««+*rsÙl5µmmUUkj23+*„ÂÎö@×ë[Çû«»ü':y¢4ù£}~Gý?zÚ7žv·½w÷ü my´íývó½MÚÇow‚°XÉÉýuüx~~ròîÝAA7n()8qýúË—Ž¢bŸ>¾¾›6\º´aCPPi©X A ޯ߈^^vvÊÊTª©iÏžT* ««ìã3eŠLÆ`¼ysçÎýû¹¹Žüwd2‚áAƒvì>p@W÷Æ’==_ß­[‡Ç`bbV¯ŽŒlÛ=‹>?;û̙ӧsræÎݾýôé3gØìǃƒ32ø|eå>}ììlm[ZîÜÙ¾ýܹ‚¡Ëe0’’*+µµgÏ^¿~úô„„S§ TT<<–,Ù¾ÝÚ†ß_¤”J«ªbcOŸŽ‰Ù´éâÅ NŸ>p`÷îÛ·KK 'LX¹rà@–·®ó…99·o‡…UUÍ™³b…¾~QÑÎ÷ï——¨öhÛ ATêС§N:5s&“ùàAhè³gEEÍÍ ææÓ§ûû÷î-çäœ?_YùßõA2ÙÄdêT??77WW6ûĉõëkk»f^Gô¡}òé¨@>eÊ‘#AAMMçÎED46ZXøûïØamÍb…„ÌžÐÔ„ „ èäßÔ”–vüxHHSÓƒGŽ8°a½zAýú-^|øð€,VHˆŸ_b¢üùèêó>Is3“ÙÔAZZººº¹¹¸ÐhŽLÆb½}›’Â`°Ùèõ§ãto}D¢êêÒR6›N}öìùóíÿnssssss÷6Z"©©IN~ø06¶®NKkèPoïI“fÌðö2ÄÊJUµ©)5õÎGKKå»/±X--W×yó6l˜9ÓÑÑÒRGG"©¬,/çpètSS33sse劊èèÇóó9VT45íÛ—F‹‰Y¿þï¿ —9s–/Ÿ2ÅÂB"‰‹;sfÞ¼%KnÝz÷®í'K£éë÷ëgdÄçÇLJ…%$”•}~{ŸTZ_Ÿ–•˜ÈázxÌšåë;gΔ)C†ØÙéèH¥ ÆÓ§11±±99ÍÍ2™DÒÐðâERRCCÏž“&Í™³lÙìÙC‡ÖÔ„‡¯ZµsçÛ·Tª’ReeTÔ½{oß64´´ðx99QQ/^p¹&&®®>>ÞÞƒ××ß¹³rå–-))‚ªjSS\Ü;iiÕÕYe“H¸\¡°o___?? %$dõꃟ?¯¯ÿxç)šöÊWŒe寛8qÞ<ÿiÓ|}GîÝ[*MN¾paéÒåËÿý÷Ý»Kãñ=zxxlÛ¶zµ‹Keå¾}69’’ÒÙ'X,z}@'4À0fn>kÖ²e66 ‹--55¹¹å劊ÖÖÞÞóçO›6}ú¸qöözz Ïž……%$ÔÕ½oí-οAfhØ·oArrddttQQë´ƒ¡ÑtuûöíÙS,NJ ö¬¤D(‹+*ž={ô(5•ËÕÐèÛ×ÊÊÐL., Ý´éÔ)¡ÐÝ}òd•˜˜'þý73ós) >§ªÚ§OŸ>jjEEOŸÞ½›šÊbQ©¦¦}úèë×Õ%$„‡ÇÇ×Õ††ææÆÆ|~JJxø“'ååLfwꯦ֧™™’R~~LLDÄË—AUÕË—êèxyM™baÑØ÷ü9ƒ!P(è䉯¾ä“I©ïÑ£o_•òòû÷o܈Šzó¦©IQÑÜÜ܇ËÈ ½ÿÝ»Ï  ¥}ú†Á ÕŸŽÛo×ûOôòD;þ"ZùtÔ?tOÿ¢óÿßb<í^ÿßÝó+±í| ]{ä[Í÷~ ýAÉï•æðcA ˜šnÚ”‘‘—÷öí–-½z}ß¼]JJcÆ\ºÔÐÀb]¿>mÚû÷Tý:òiM«Íf§¦ž81`@Wloú•êø–Ðé£GŸ?ßÐÐÔ8v¬’ +ù±ÆðsñÛAü8‰&&>>ÆÆLfhèíÛ%%ß2‹ÒÇàñêê=zH$/_^¹rútdduõ·Ëq÷3Èè0L&«©©©Ñhï¿rÀãuuÇ[¼xà@‰ÁHJÊÍmKg tà?@gøíÎ ¡…Çãñ ‡ÏA¥R©&&ù&`b2i’——±qYÙƒ·o3ÙÝyZZ NŸ^¸pÔ¨C²?š|€ŽÇ-ZtófJÊŠDbnnNNm-ééõíka¡¡Q\|êÔØ±·n~“-€ßà?@ç€åÛázõ²´´±éª‡æçge½~ݧµõ€ýûÛÚ¶ÿ»L&“Éd‚ŽùõÁbUU-,¬¬LM%ãÅ‹¼<6û{¯ÙüòÁãUUûöµ³ÓÓãñ2333‹Š:wòàW« ëa"QUÕÜ|À[Û¾} ••‰D€É|óæéÓ””ÌÌúzº0¾€Î$ø?à üŸß>@ÂátuGŽôó[³æÏ?½¼,,:s‰  &ét--mmee*õûçƒýý =üöodäíýçŸ;wîÝ;{¶½ýû7÷~  «;`€——§gß¾ªª?⤟@èÕkÑ¢çÏ‹‹/_ž:UKëkuD[þë`±ššcÆìÛ÷ömcã«W…… Æ‹µµÉÉó盘àñÀà¾æäTQñêUp°›•úãèÿï™Ü¿ÿ¡C99 †…bc³jÕÎÛ¶7`ÀìÙÇ_¾yùò¬Yýûkk÷í»hÑÙ³W¯>yr÷îξ¾&&ïÿB{ ‘,,–.ݽûĉåËÍÍÉdNCcôèíÛ¸p᯿ƌ10Àã „^½æÎݶíï¿—.íÝ›Ln•¸²²£ã‚[·?zöìYtôùóÇŽ-Zdc£¢òéíRŒ‚B¯^Ó§8pöltt|üÍ›¡¡¾¾¶¶tzgßW·_ÿ }ý©S÷íÛ¹sÙ2;»ž==<ä=úèQPÐêÕãÇunóz}h¯{ùúÓ}î>}—US8pòäM›þþûر»w££ÃÃãâ®_¿yóï¿gÏvvVSûðŒ’Rÿþóçœ?/¯ù­[Lœha¡ VŽàWä·uî2™PXSSZZ^^Y‰ ––ÞÞ3gnjJ¡|<à‘HFFÓ¦mÛ¶yóŽ3gA™lk»lÙÞ½[·:tèÐÖ­ûö-_>p º:î;­Ç‘Éææ ,Y¢¯ÿìÙ‘#”•}y3Úò_‡SU2dùòÚ»wÞ< ‚ŒŒ¦MûóÏ>-<^CÃÞÞÇg֬ɓW®¼v-$ääÉ#D¢ÄÄ›7CBBBž=«¬äó[7ëɶ¶Û¶?z´{·MCCttXXPPttc〻wGEmÛÖ·/…‘‘»»Ïºu§OÌš…Ç—•!ȨQ[¶—kk;}úÁƒë×÷ïîL‚zzC‡Îœ9mš­­º:™¬§çééç7i’¯ïüù&&$•Ú¯Ÿ»»ž‡ D$öé³fMPPTÔ¡Cƒ qqááQQŽ‹ËAAÁÁ³féé}¨=0L"99íÛwêÔªU=z”—'$$'×ÖΙ³k×£G—/£­Ý™S(í×NEÅÑqêÔéÓ·o¿víÆ¿ÿvqijzúôîÝÄÄÚZ+«E‹¯\ñö64ì¸þ£Ó4ò”‡ïžžsçΟøðÝ»gÏúû««&&¾|Éåöï¿bÅ‘#QQG~yjÿyZZX¬†UUOÏ9s6l˜:ÕÀàýi»‚‚½ýܹkÖÌœii)56vä5zÿÓ^{ù6þ³#úÜ}ú /onîí=fŒ•[RxéR@À?ÿ$%I¥žž[¶„„92h.×,VCcòäK—®];vlÎ}ýªªääÔÔâbÿàà}ûìíÉd˜~9ä÷ ÕÕ1™ee]õ)&‹UWWU¥ƒ’o/ÍÅåÈ&“˽}{ölÏM;aXUÕÛûÖ-6»¢âàA'§ã¸1 +)yìXII^ÞŽ|­VhË£ƒBéß?  ¨(/ïÙ³™354>÷v•J4hÿþòrÁ¨¯¿êT#£Ï­æ(*:;_»VS“—7oÞûýƒÅêëÏŸÆáTWŸ8áæ¦¨¨¤4iRt4ƒÁãíÜ9`…B£ž“Ããee­^miI$’ÉÎÎ.¼|Éf?~sfk€A£9;ß¼Y_Ï`°X‘‘“&éê¶¶ƒÑÔôö¾|¹¡¡¹9,löì¶¿t§þ·ö)ƒÁãåälØ`kÛ¦3ŠŠ£F=[[ÛØxù²‡ÞÑ: ÑtòÄ`45'NŒ‹ãñ &óêUWW•V­ÄbŒ/¾s‡ËmhøçOÏÿ†HD¢©éæÍoß¼{·k—¹ù§ÏýÉž<™šÊã½~½h‘©ikÈd'§³g_¼hnNNnëߎ[zûüOûíEAá[øÏŽès÷é×ÀbõôæÍ»{·©©ÕW@««;uj||ssVÖ;ÞÞêêmÚ£­=sæ£G¹¹<^}ý™3nn Iü:€í?5ò¤kÖ¸¸ÔÔœ;øú5ו廟††7öîˆ(.‹?õwAGÇÚºo_*µº:1ñÅ‹††¶DRi]Ý‹©©••4š™™ƒƒ®në$ A RS AÄb@"‘J++³³™L‘‚Äb>_"A ƒAwðAx¼’’Ü\KQÑÐP[[KËÀ@Y¹¾þåˤ¤ÚZÍÄD[[SÓÔ”Ng³³²Š‹ù| FY¹wokk55/7·¨H&SUÕÒÒÐÐÒÒÒ¢Ó…ÂüüêjÑÓ³´ÔÕýp›‚dd\¿žPUÕÚb™¬¾>))2òÝ;Ñ×··ïÑíÁÎQV‘ݦ3--õõ••l6£ @§‰ßnô5}Àb;*O‘(998øÅ‹ÆÆÖ•©´²òéÓ˜˜ÂB<ÞÈÈÚZG§cy‚ŒŒ  ÇkjLMÇŽuwïчƒ 2ÙÔtüx77EÅììàุo“¤½|˼’ÓçîÓ,VUÕÊÊÝ}ùòÝ»wíú矫W;~|î\cc<žLVP “1"{ôèßßÐAòóoßNJjhhÓžšš¨¨kײ³Á8¿¿}’†Ÿ"±W/oï+,-33˜9³¤¤¥¥+Ëw?RiEEjjqñç·a±Tª’• AAc£@ðaž=©”Ïg³¢PTT¨Tù]&ãñjk›šD¢ÖÃõ"‘"QçÛ+–—geUT`066½z™š‰©©¯^ÉdcÆ Þ£‡žžª*…RSXQ!a04N¡À06~|ppLÌøñÿ}*‹U]Ç¿ªÉdb1‹UW×¶‘HÞ^.·¡¡¹AH$%%é[žJ ?”¡L&“!ˆ<ŸWç7}]0 ¥#ò”Jy¼šçà E.O.‚Èd:]>%î|~ffXØ;µµS§úøŒ¡¥uñbBÂðáîîêê Æùó‘‘Læ·ÉáˆÎ^ä+6ß tLŸ»GSSÿóçãã÷íÓÓKH8{68øáÃRS!ÈÞÞÜ|äÈI“`‚`‚0IQ‘LF¯¾žË}¿ö2WW×Ô$‚$𫤟*ÕÁaùr:ýþýÕ«>¬®þr‚f´å¿"•ŠÅÉç'2™PÈå D$**~¼FÁ‰4‘A"‡#Ê[„ ‰HôáSAºb#“q8%%99Ž’’¥¥¥e2YqqXXqqKKK‹žž••¥%•Êf0ŽL&“a±Ÿ ÍÍ!!NNsæ<{Æçþäu0<^¾*ÃÄåÊëŽÁP(JJT* ‹D¥¥"Ñ·íA™L"‘‡CßS4òÄ`ä[Ñ02YUõã+‹±X¹Bo/ß‚Žés×ëÑhÖÖ6lÙbc“–¶p¡«ë´i¡¡õõ2™| "îïÿ~-D$ârE"ÖÖVV–Ÿ°jMeÃ$’’’‚‘à ?îHô€-víAD*•É`ƒÁbÛ󾆕”÷î ¹zõþýõëîØQðÿtFCcذ5kÆãñ®^=~üÕ«ææ®,ÿã 3™™™B¡–Ö€}ú¼%£¤daac££#½~Íd¶½ ïšpèS…Læ›7ÕÕJJööêêÍÍ……ÕÕ¹¹l¶šÚÀ¶¶ªª55™™B!I¥¹¹¯^ÕÕ)(ØÛ»º´÷þ ¦o߉mlÚÎÌÀ°²²½ýˆff0\^þòeYÙ§·ýÊtTž0L&;8ŒgnÞvR‹ÕÔtv6ÌØ¸¥¥¸8=ý}ýiÓ¢¶²¯éEvvppddm­••¿ÿ΋ݸñäI׬ԶÏÿtÔ^ºŸîÑg´úÃ$’††¡!Æfçä67·†CŒŠŠ£ã˜1={¾D …eeÅÅ0lj:v¬½}kêÂ`”•œ8ÑÌ ¤h€_ßr ƒ¡Óûõ1ÂËËÎNY™J55íÙ“J…auõÁƒ}|¦L‘ÉŒ7oîܹ?7÷ý‹E¢êêÒR6›N}æ ›}øpppFŸ¯¬Ü§­mKË;Û·Ÿ;WP ÊE&ƒ 4hÇŽààtuoÜ()ÑÓóõݺuøp &&fõêÈȶÓÝ©ÿ?šF “g«¦#ÑéS¦9ÔÔtî\DDc£……¿ÿŽÖÖ,VHÈìÙ MM[¥DÒÜÌd65A–ÖÀ®®nn..4‡#“±Xoߦ¤0lv[…99·o‡…UUÍ™³b…¾~QÑÎ÷ï——wUÒ>ÿƒÎ^¾•þtŸ>£µ/.—ÁHJª¬ÔÖž={ýúéÓN*(PQñðX²dûvkk~Ó¡TZU{útL̦M/^¸púô»wß¾]Zjh8aÂÊ•°¼uø•øM$%% ‹aÃ||¦M34Äã!H(LKKN./××ww÷òš:5?¿¹96öáÃ$ïåË“'W®<}ZGgãÆ ¾v AØì¬¬ÀÀU«?މa2ßÿ‰jjÒÒbb^¾li ¬,&³í\LG¡P,,.\¼XK+&fÕªG¾vømùÎ •r¹¹¹ññ  “ùù 6¥R+//..&¦¹¹ªêËá‚p8ññkÖ̘1wnsó¦M«VíÚµÿ‚RW—ž~ýúªU£GïÚ•’ÂfËdTjMÍË— OŸVWs8R©ü óÛ·II±±D¢8\IIpð–-óç¯[—”ô©pA&«¯øp÷îsç&LØ·oêÔS§®_Ÿ5K(ÌɹreÒ$/¯$ ‹‹<ˆojZ±ÂÑñÞ½ˆˆââ®[¥iŸÿi¿½t´·Ðêz}îN} ssœ>}ûv-­€€ùóOž¼rAŠ‹ccçÍóóKN^¸pÖ,«µg¥Òššÿ;wÎ-­€€Í›,øóÏ%Kƒ‚æÏ÷õ}òdöì%K(”Ö"ø€å)¹{õ²´´±éª‡æçge½~ݧµõ€ýûÛÚ¶ÿ»L&“ùa˜x †N77÷ð1BY9==""9¹¢âK´å€_Ë^45'NŒÍÏ_¿>3säÈ¡Cÿø#5U èž_#LM7mzñâþ}Ÿÿ;ÖÞ~ÏžüüŽ_ à{’4üdÈdlvNÎýû¡¡ÝSt "ÑÄÄÃÃÇÇØ˜É ½}»¤„FüŒ€ øàñx<ã÷l»½}llfæÜ¹ßâ·Ö¯OK{÷nýz q¿T*•jbä?; @~#~¿ ¯ªÚ·¯ž—™™™YTôám6]«ªjaaeej*‘0/^äå}x> ÀÏÀ/LKKCCfæóçÝ}STÚÐý글Ÿpð­C"))Ñh¸n{=Ã_¾§ †q8‡7¸| XAt) ™¬¢¢¦¦¤ANMMc£Pn y*ÕÑqÛ¶ôôLL¶m³°˜6-0°ã)»?‹ÕÓóñ9qâñcÿÌLoow÷3gÞ½kK9.¿sÇŽ»w:ôÎ_ß#Ža0D¢Ö°ªõjÔŸ"ÑÐpÚ´õë§O·¶¦ÑІ{Âf¿xtèпÿvÕ¥»?»þc±ŠŠŠªª’ÓÜ\SS_/|I7Ѷmy,–FSWWWWPHX¬šK$þÝ XAt d²‰‰¿ÿ­[‰‰õõååÉÉ FyyVV~þ­[3f˜™‘Ém% cãU«ÒÒ ä þûÉ妥ùû›š«§¢beµ`Á¹s÷îÕÖòxyyIIK—êëÿwåFQÑÝýÒ¥úúO×§ àØ1 ¥+䤠`o?wîÈ‘êêN}½¦æ¨Q&øùùùMžÜÞÏ <<ÌÍÿ×Þy†5•| üÞôFè½#Ò XP° +VDŲkguUÄÞ;b/(º((‚ RD¥÷ =BM!!$¹ï‡¼,)ii¹qÃÎŽDúžúH¤¬¬¾¾±ñûúom=cFPPZZW…RZz옭-™ü}œBIiÑ¢„„§O> ™=ÛÖVWWYY_úô­[óòØl %7÷Ãü‹[^ñÒ# óçÇÅ•”0™yy[¶¸¸hkËȨ¨ØÚ®Zõôi{{eåË—(x÷ Ì·v`† ¥¡±vmNNié߯];8pA¡45×­ËΦPØììì%K´µÿ׉TU3')©½=/ïʕɓ‡3h%‘œÏœ9w.4ÔËKOH$ÍÍOž|÷®ºúónBEeÑ¢èh«­íÜ9gçá˜?oeµoß‹,VEÅöíãÆ}¼"E"Mštú4Æ`ܽ;gެìP¾ ‚²²îî.47·¶>xpà€««’C"éê::š›ËÉÚÚ³f]»V]M¡°Ùåå;vŒO" !%ejº~ýƒ¹¹LfCÕ+66ÚÚ¦¦¦¦ C_‰ù‹›þý7ÿyiøúÅêê$%wt¤¥­^mbòé Ì·‰$‘¤¥±Ø§H5µ•+³²(:ýî]GÇ)‰[^qÓ“Hwî´µUU¥¦úú¾?MB$N™rëVAAWWbâÌ™òòð* Ì·â§™…C ˆD{ûéÓ½½-,´µ«ªª àùóë׳²jk ¡‹=ÚÅeÖ,‡¶¶‚ÍÈÈÅÅÙ‡+/¯­55usóð˜<™L¦ÓbbbcSRèt¡PZZW×ÚÚÓsÜ8#£1cTUååÉd$’Ç£Ó›šŠ‹££“’23‹Š><>‰Duukk__kk33yy4šÃéêjnÎÎNOOLŒ‹«­ííˆö@¡äåíí§L™>ÝÃÃÈHEEF¹\:½¥¥¦æåËì쌌/š›9œ/:‡SW·µUWçpÊËKJ:;ù|Ñ,ðŒ›7oßnnÐÓca¡¥…ÃEDÔ׳XŸQC”¶öüù+VØÛwu=zäâòêÕçR‰dgwåÊÛ·×®Í OžxyYYmÞüò凩Y¬ÔÔ  ÀÀÔTÑÿ Q.¾¢Ñ ýý\nÿÈËÖÕ7ïèÑõëRS×®½zµ  ·wøß… ®®””?þ°±14d2©Tƒ@pp8r$*êÑ#—˜{û3gœ…B¡ðÙ³Ó§ããããåäÒÒ<<\\Œ7¼½Ç?~üõk›S§ŠŠ®^%“wì7nÙ²ë×$‹ŒWþâ¦ÿ´íÓ§Ÿ9sï^ffw÷PòŒDÊÊš˜àp ÷Oê?’Höö»v…‡9bb’ž¾råøñW¯––r8ß³ ,Ö§G’ƒ "‘…ýýƒ–MÜò€8éðxUU¡¯¯¥¥¥¥·wð/÷÷·µUWwv¢PffúúŠŠh4tt¼;64ûó5~  …ÒÑ™:uݺ“'§OG RS““33“’„B9s¼¼Ö­ áóܲ%'§¯OUuÌ{{__ggSÓŠŠââ’.רØËëèQ--:½²²¼¼¼œÃÑÒš4iݺiÓòó32"#›š´µ­¬¬¬ôõˆúú¼¼ÜÜââövPP˜<ÙÍmΜÐP¡­mñâˆˆŠ  ‚VQqv>rdãF5µºº¿ÿŽŽÎÏokAYYMM}}"‰¬­ííåó…5ÊÕuíÚ½{»»£¢=JOONærq8uu##ssEŬ¬ææ††¾¾Oú22ªª$W^Îå … H"YXlÝzèµufæÉ“éé“&ª¨ÈÉ}iƒÑÑñññ÷74lnþ믭[KJ¾ì< P$’œƒÅ‘8ܵ ˆFãñ(¢PªªÛ·ïß¿b…ªªPH¡$%ݾ}æÌƒ••L¦dÁá(”†ÆâÅçÏÛØ”—Ÿ=kcóð!6r7äðxÝÝT*‡DªªÎ»wï;|~xøôé×®•—÷õ55¥¦;vêÔ«Wsç;æá¡§wåʦMãÇ'$ÔÔˆÜîÄă÷ì),LJÚ·ïàAgçÇ—,Müèí‚øü’’;w.\8t¨ `ð@Š/ƒÇ[[ïÚuâĺuÿœþ#‘ÊÊžžûöýõ×ï¿ËÊÆÄ,Yrà@\ÜÈ×1\ˆD}ýI“ôô ¶6"¢¡a@®â—W¼ôA?ŸH$‹F¿¿J‚H$ƒ@ D¢´4ð¹­ ßÂ>ÀÀÀÀÀü÷ø $ FCcÎ''UÕÆÆ'O>%…DÂállŽ•“#‘Ðhèë+*ŠŽ/*úð/#ee(”™YD„³ó¨QJJHdE‹Åçc±¦¦Ó¦¹¸vu=¾nÝÅ‹WU}é”,Äáttôôde™Ì¢¢»woÝÊʪ©޼y“ý#K1<‹AÑPƒ=: `÷î êêNœ˜6-1ÑÂ"%å×_  F”æÃ,vôhOÏÅ‹õõ©Ô¨¨{÷Ëþ)<^]ÝÝ»¡¡§O@UUMÍHœ=‚h4‡B‰4nÜŒÆÆMM¹¹`m|ýº—׸qàââíÕÖ&Éð•áP®]ûõ×çÏoÞ¬¬i'‰TVvuݵ+))"Âî__¸ðÄ ËÛûÌ™7ÆSVVS33swwpPSjkC"ííׯŽ~õjóf@ ˆD '‘H$,…€;6n´²ÊÌüãׯ¿ïz†¸u‡@×Üœ››žž˜˜šÊfý-I(\½º¿ø’äúÅzyMž,/$Ò‚/_λkWL̪U³goßÕÐÀçÿ3RE &MZ´hêT"±¼|ß¾§O[[Ey·¼ ⤇ «µµªª£ƒqr²¶VUÅ`’“««y<BZÚÔÔÖVUUT럋 ü6öæ¿Ç¿ÞAB UU"±¯¯¡¡½‚Èd2™Lý–Çkkëî† ;;MMEEJä ‰‰Jss?Åã BawwSS{;ŸXl¿@Aàÿ#z–ÖÐ03›6ÍÂÂÀ`Ô(99"‘LVTTRB¡Ðèº:,V”‰”•55ÕÔÄãÛÛKK ëëÿw' A\nmmuuG‡”ÔäÉ3gúú––>|SRB¥vw ?ú‘ËA‚¯­=kÖÑ£pöìÌ™57KI™™ …ô¥Ã£±ØÑ£,˜5KG§±ñÉ“˜ åI‹ÇkjŠ‹;sæìÙáo„ϯ¯¿ysíZ;»¸8£ººªŠNçrUÕììääôôóç׬qrRRzð :º¥E¼4Z]ÝÎnÆ SSUUee ‹½{¿ÐQjj66$‰Ã­[wêÔÑ£nn_’ŸO§?}zèÐÙ³yyŽŽG¦¦†…9:BP_ôövv²X\.ƒQ__P“Ãã lvffIIpð¶mÅÅ—.ýñGxx^^{;‡ÓÛËáp8¢{{9ÊÜ<8øðáåËmlÔÔ°Ø×¯kj~¼uËÖFãñh´PØÕõON.©þ÷öff®Zek+/¿v-#-­¯ïâ²o_lìñãgÎìÛŸ”´tif&ƒñýK„ÅŽåï¿k×”)A|üúõ‘‘µµƒ®šøå/}ooEÅ;11mm~~[¶;vô(“yçNe¥¦æÜ¹»w;:"‘P_ÏáðxŸÖ÷·±00000ÿ=~ &p8Ä᜜üüvìprú4UooOÏàâr™ÌÞÞÁhúûE[;>#$”††£ãÊ•çÎyzÊÉeddgÿýwI …ÚÚêê¶¶–– " À`¤¥±Xb³{z¸Ü¯¯9ðùïÞ¥¤\¸ðçŸB¡§§¿ÿ/¿lÞìë‹Åöô””äæ>~ùòãÇYY¥¥lö·Ý ‚x<‹Ã 9¹iÓBC7mêí}ð`åJ_ßÊJlm‘Hz{Y¬O‡4X¬¶¶—ל9--Ož<}Z]=” R#_.—F«©).¦Ñ*tvæçggS© ¸`ÁèÑÊÊ ´´ˆ—CâñŒ––¦&Ñ6¸/§ÄbQ(ÑÖBìè R[Z¿s&tuuwóxŸßßßÕõà¿ÿ²e¥¥ëÖݽ ÐßßКzõêÅ‹x¼¡¡Ÿß‰¡¡¢£/ }ý+öï ]¾üs_¦Ócc×­[µjѢ¢6Äiû$’¼¼´4C"ÙÚŠbŒ¡´‘‘‹AŽþ …ýý<—+z?}³m›¯ïÌ™¶¶ššXlffié÷uNQ(]Ý%KBC·lÑÑÉË ž??5µ½}P¦â–‚@\ùôöæäìØ±x±Ÿ‡³eK@€¯ïâÅFFii'N<|¨§÷çŸúú4ƒñO­¯ÁÀÀÀÀüüüë$¡°¿ŸÃár!ˆËMM 9p@tíå§€ ‘8i’(fÏÞJ‰æE?÷££³x±««ŽNyydäþý»wçç3™$: wqùð=êïg±x<ÀãI$ fhÇCóù]]99OŸÞ¸‘““œŒÁ¨¨Œek»b…¯ï¼yGŽÈÈ0™‹_ºTPÐÕõ£­(õ÷wuÕÖöô€àäÉ22™™ >\P ŠÅ’’’’RPÀã{zÛÛûû?|ÖÒš<ÙËKO¯»;--6¶ºúÇÚÌ%š×i@HrjŸßÒ’‘qþüþýÿ;%‰4i’ŽÎÊ•óæ))ýõב#'N<|ØÕõõ¿µsç¶m (/ïã3¸e ‰ÄQ£,Ø¿ÿôé V­20Àá «ëÑ£ÐÐ;ÍÉt%@76^½úèÑK—<<êëmkû¸®~D°XUUcc55hnþë¯cÇΜILZÌÔHÆ I®ÿŸÚ2§§‡ÃŽDÂáˆï-OƒE‹.]:tÈÄ$'gëV7·›7ëê>vCÄ/¯øò ÞÞw¶o_»6*jà§ÒÒqqþþ½½55ïÞ‰Vûa`````¾ÿú‹b…ÂÞ^*µ²’ÅÂጠåå‡v½âPÝ D£ÉdUUŽÃ©¯ooœÓA"ÑÄÄÔTYùà ŸßÝ]VÖÒÒ߯¤dlld¤¬,î½2Äãµ¶R(ÙÙ×®½xA¥¢ÑªªººŠŠŸr‚ÒÒ'îÛwñâ£GÑÑ¡¡ÞÞššÃ½ÅF\¸Ü††ŒŒòr€ËÍɉÏÎîè Rq8}}cc$²ªêÕ«ÚÚ×#Heå‰]]Œ¸Ü‚‚‡KJ¾îáñÆÆ›7ߺuãF|ü­[kÖ˜™}»‘™±cíìTU µ•B¡Ñþ=ñ (”†Æ‚»v…„XXäæ®ZeffoïàðÇ¥¥ŽŽûöíÞíçg`ÀfWU••µµÉÉÍšµyó±c³g77ïÜéá±m[LLKËrTÀÿ*£ªªƒÃøñ**tzFFdäƒÏž%&&&¦¦~ý™žþêUkëÈ8’êÿ§m™@5ÊÂBY:;;;?Íß·jï (%ei¹cǽ{üa`ðøñÖ­+WÞ¼ÙÔô9 ‰[Þ‘’”Ô˜1žž–– XPPUõ¹ƒ\¾§}€ù™ù iàñššbc_¾lnöðps[±bóf'!!%¥¹¹¯OJJEEOÏÐP xýúêÕ¬,&SܯCP__kkqqw·ŒÌ̙Ӧ9:¾|ÙÚJ&›˜Lêç§© ðáp’Ã)*zö,3³¹yÃw÷}û|}…Âk×òòZZYYmm##,,¼u+;»µ•Ç,ÖÒÒÇÇÏÏÕµ§§  -B¡ÑØl,V]}út''UÕþþÖÖçÏ?7cŠÇëëûø,YâââìÜÓsöì¶m’#0„ÂÎÎÔÔ°°gÏx¼ÈÈíÛ÷ï÷÷G¡ÒÓee=¿±ñÆ ??SÓ7„ÂèŽ3gV­?žB Ž‹»w/%¥¶öôiƒim½woùr{ûýûcc¿1÷£€Ã,Y²j•¡!¿kWqñH›þ}ô_¤o§Oo؀ǿzõôéÛ·RRãÆÍ›·}ûÌ™Ìë×[·¦¦65}Ÿö‚RR“&?~ñâ¦MFF­­ÄÇëèøúþö[@€(Ecãóç×®=x@¡°Ùâ—WÜô„¼üäÉAA––4cfæëäë ‰‰sæ|i¥ðÛØ˜ÿ?Å1ß|~}}jjxø¦M|þ¬YË—ÛÙÍž½u+ALfggssnnZZ_ŸPAAWWCCee~>ƒ!ºaC(d0¨Ôªª7oH6[ ¡Åjm¥PÞ¼áñ˜L>¿¿¿¥%2òúõääæÏŸ2eÆ%K ¨¥¥²2#ãС›7««gÏ?žÍ~ÿ$.·¡áÉ“ ÂÃ{{¦O·³[»Ö׋íëëé¡RssSS_½zÿ~úúüüŠŠÞÞ‰ííììääH$b³ª«=Ú¾=>¾  ³ócVUµ°°µUP€‚‚Çcbªªþ‰pz¡Nüxûö9s¶oß³çÈ‘ vïvu€––—/wìX¹ò÷ß:;?Ð`0rr**99ýûê>”ž@ÐÝ]X˜šš—'+ eeC{‹Åª¨HOÏÈ@"ëë¹Ü‡V<•š“S\Ü×÷ûï³fmÜè奠€Ã±Ùµµ±±ÁÁK—ß¹C¥þÛ6ô@P("‘‚¦¦¹¹Ýôé³f¹¹-Xàëëæ¦£SW÷òåýû¹¹8Üôé>>ó燆ž:%hh\»}ÿ~rrYÖ×72Û9¿&qÓ£Ñúú+V„„üö›–VaáΧOåìº÷Ì ‡ÃáH¡°£cø‡;ˆ«ÿ"}+)áñ~ÿÝÓsË–¹sñx6»¡!9y÷n?¿àà‹ëë?]½ùVí‰D zzÊʲ³³³q855GÇɓ߿²›Ã)((-½}[ä ‰_^qÓC@ ‰ææ¿üâã³h‘¢"ÙÓSQ‘˜¸~½»ûáÃ))_Úh,™}€ù„¬¬ääØX:Jmh©§è›]]tzK‹š˜À52tdd<<®]ëèèêºsgáBUUx¶ôß ‰4iÒéÓ4ƒq÷îœ9²²â½-ŠAJM-+++Û»×ÚzÒ¤ƒãã©T6›Ba2ëë?Ž Z´ÈÑQCƒHÜŠF+(˜˜Ì›·uë¡CII¥¥¥¥l6“ùôéãÆýx”P(E‹ž?ïê*-MI 5 ‹ýš\mmÃÃ+*Š‹étííÛææ––’6›Í¦Prr‚‚ttþ-·åÀíæûðS¬ ý7A£µ´øüׯoܸz51±µž-ý7ÃåVUݽ»aC` Ÿ/î†1b±òòŽÛµk×.­¦æõk*uóæ)SΞml¤P¨TçKÚÑßßÞ^Z}äHpptô‘#;vÉZZZZ8öãbÇç×ÕEEùúN˜™ÉáTVÖ×m …Í.. õôôñ¹|YZ‡ÃbÑh¢¿¿««©©¬¬¢b¤b‘àöó³ð¯wž=;yòäÉÿN…MºaÆ ýýÕÕaa«WϘñOæG47¤‘æÂX0_ÂÙ¹¹yõjX@$‰úú°`````F–½ƒ4è0ÀüÀ˜Ÿ‰ý1ß000000000000#ì ÁÀÀÀÀÀÀÀÀÀÀÀü?°ƒóB©«OŸ¾dÉæÍ¿ÿîéibB" ,Xþ00°>à D¡H$%%55%%))4z¤µ±Xii%% uuyyiäÿ ÌÐù9Hx¼­íÉ“™™YYË–éê¢>ƒE$º¸DFæåUTœh´®®·÷ï¿ïÙ³ÿòå66d2â_ÓÆDy~‰äârþ|ssSÓÙ³S¦H?¢üñxsó£GËË)Ñ*¢gAÁ®]FF_;–ç·ÖgÉÁ!"¢©éÍ›ÈH"–ÿ £¥åë{úôÝ»eeíí4Z}}vvuumm~~wwcãýû‡{x(+£†ÏŽD*(L˜°kWRRnng'•š]YYU•›K£uwçæ&'ïÞme%%5ܱÉß¿ÀühüÇ$>ŸÁhkãr±X992…B£µ´¦M›;wéÒÙ³ŒÈd ‡SPPQ!úúÚÚX¬ïw=(JIM˜°qã­[/.Ybd„ÃÌw‘H4ƒ%%ggWWÁN…RS›‘(/O&ãñrr::$A$’††‚/%¥¢B" 4Zo¯P(Z¶·Ÿ3gõj'§ñãML45ååÑh§©©  %åܹ}û""23ÛÛÀ`45}|öìY¹RQ1:úÖ­wï\\Ö¬Y³fút]] †Jýûïðð]»Î‹­­íë$RFÆÜ|Ò$++##KK99 ‡ãóíì¦Owv&“¹\‘[W]••ÝØÈfKÒ9|>ÞÓ£©éâbk+'wófmm_Ÿ‰‰‡‡¦f[[w7()I*SÁÐpÕª}ûV¬ÐÖ~ùòÔ©={bc[ZúûPP˜2%004tÖ¬ŽŽsçþüóβ2q¯@ “Í̼¼¶nÝ´ÉËËÁAG‹e³›šÊËΞ=uêâÅœœîn¡‡308p`áB>?<üС«W«ªDæ‰TQ™9ó·ßvì°µÍÏß·oß¾/h4Ñu›8œ††›[PP`àʕӦ­ €@°XMM¥¥¯^ÅÆ^½zëÖƒ…… †P(Y}¡ÑŠŠNN«WþúëìÙ¦¦ÊÊÐÞžŸõê/¾zÕÖÆçVV7nÛæáA¡>RRiiÁÁÛ·¿}ko¿{÷æÍó竪ÖÕ]»¶iÓþý‘‘ x¼±ñï¿?¾j•¹¹h%—[SsåÊ„…eeuwj JIÙÛoÙ²}ûêÕÆÆŸÛ¤Âå–—ß¹³mÛÑ£oÞ0¢7‘HYY;»+ƒ‚æÍ³°ÐÐ@";:òó££ÃÃ÷ì¹|ùíÛÎNÉ..ý–ò”T§só+vï^¿ÞÇÇÊŠLîìÌɉŠ:y27W´rôqY‡.CÕ7"“--7oÞ»×Å¥²2,,9YFÆßýúÅ‹ml¤¤ÚÛÿþû¯¿BCˆ¯¨`±$8ŠcßÐhMMW×Ý»·o7®´ôèÑ#GîÞ}÷nàª]$“--7m:xpÞ<ïÊ•ΜÿÒcÀ`ôõçÍÛ»wýz)"bÏžçϵµ~û- `Æ == ¦¦æÞ½õëׯ¿¿¦f m]?ųçß$RIiâÄíÛCB&Onh8yòС›7««Ee4ZKËÍ-$dÛ¶Ñ£ÓÒöì9{6%¥­ ÄÍ¿øòGŸ%•'!%5zô¢E‡¯^½|¹ŒLOÏÛ·ññ†„Ü»÷æMOä«UßÎ^‰Û¿‹#,VRû/ny‡Þß}Y8œÁôé6622LfQQI .‰Åz{ÛÛÙl”’RV–’B£ZÀðë÷{Œ¯`~Vþs‡4==4“‰@HK+*ÊÈÈËkhðùeeoÞôôÈÊjiÉËËȨ¨l6•ÚÓ#jðX¬±±··‡‡…YW—’rëÖµk'O^¹’•%¸»ÿùgTÔñã&HK‹–€Q(99;;ŸE‹vï¾}ûîÝS§œœº»_¼ˆ‹ËÌlk³°X³æÖ­7¼½utD»vq8]Ý… wíÚ±#$déR]]ÀãÇ Ü¿çΣGݹóàÁ  {{EEÉwùB“YZ_[«§çåeaA"‰&&S§ÖÖ>{VZÊåJ.ÑÞÞ††×¯Ùl› NœX·ÎÖV›Ã®[wêÔúõNNlvaa]¤®`±FF«V=~œ‘q䈟ŸšZCÃÓ§ÑÑÉÉYYT*™ln>fŒŒÌ€tP(eå)S-š3gâDUÕ÷e†@HK››Ïœ¹téœ9ÆÆÒÒ[ ±X3³;""îßß´IK«¢"*êúõÓ§/]JLÌÏçóML||¼¼tt–äů/<~ܸ]»"#“’öîµ²êèHI‰ŽŽˆHIéì?~ïÞÈÈää]»ÆŽ%@ƒÑÕ9ó—_¶n ;yrÙ24º¡‚fÌøóÏ„„§OŸ9“Ūªb±Æ[´èÈ‘mÛÌÍöð …\.V_ߨØÜ A¦¦ÞÞK—Nj`@ |ºL(d³éôÖÖ¦¦¦¦––gk+˜™Í›7{öüùÖÖƒÒ,v̘͛#"’“0ÃIK‹‰¹u+9™Ápr:|8""2rÙ2 IµóÛÉS²ü ‘JJóç_»vûöéÓ~~šš--ÙÙ¹¹µµÚÚ‘‘ÚØàñŸnöGþâèâñººîî+V¬\yìX\\xx@€¢bMMfæë×,–¹ùo¿?žœ|℃ƒd\ĵoýý]]òòîî~~ÁÁ>>ÚÚÌà—¤¤llV¬Ø¼yéRSÓ¾¾ÎNÑQ|Ðh%%›_~Y¶lþü nߎŠ:wnÚ´¾¾ÌÌ{÷¢¢¢¢^¾lnM^I¢ŸâÙóoݱÙl¶ŠŠ»ûÒ¥AAjj¢¢H§Lñ÷ twWRb±ØlÑOüü‹'OñõY|y‚ çàpðàùó7ji56fddg·µéèøù…†&%]¿îᡪ*é–ïok¯Äí߇.B2û/¾þ‹Óß}v؈“›$äÑ£¤¤_õö~ð ½½ºúÙ3ooIi@ ää¦L¹~½±±¤äéÓeË44TTfϾp¡¹¹¾þäIWW9¹á„ö‰“&]¿þö-›]Zºe‹¥åÿú’HŽŽ÷îÑhùù7oNšô~Z4ÚÐ088%¥§§ `ݺѣEµ ‚òò>>ÏŸWV67_¾lc3T¹µ¾ÈdGÇÛ·i´ÊÊ´45µÁn‰ÔÔ\¹2:šÁhm={ÖÅ…L–‘™7/%…Ba³ß½Û³güxDš1#&¦¼œÍÐ1<ÞÑñòåׯ{zž>uu••ý´üNNÇS©,ÖÇ˗¿ÿ÷¾ ¥£³rå;íí÷î­Y3jÔà0@°´<{¶®®ºúÍ› tuƒÅš™íÝ›–ÖÓó÷ßK—†««#%O))ñsDª«ûø¤§3™%%±±ÞÞŠŠš‹Dªª.]š”TQÁf··_¸àâò¹C¾.ñô PVž;7-ͦP¨Ô›7Û©«»vml,‹ÕÑq劻û§.k`°cGQQuuYYh¨±±xûî?oß··?w.7—Í~ûv̓ÀãÂÃóò˜Ìììáé‘8a¡Cl6…ÒÞþø±®î—lñÈéç—Ê;RòüRRS§Þ¾]XØÓ“’â奬xPTÔÒrû¶“™,i}‰'Ï‘°'ÿ+?"ûÜÞN¡tu%&Λ§®>ðEBYÙÛûúõŽ&3:zùòÁ߈#ÿom¯$íß¿.Nû/ny%íï{QmmŸGèt ¥¶öúuW×§!%…RRš9óàÁ˜:ͦPZ[33\¹òéºáÔï·_Áüìüç|f>¿§‡Fc0€DÒÔÔÕÕÕ%‘èô’’‚ fÆŒ9sttTUÉdd0š›{zÞ_”F"åå-,¦O_´hÞ<{{33--9999}}==4ÏÏÇã?vbbâãKKÙìŸô÷··77÷ô ææÒÒX¬èïÆÝßßÔ”––›ËçŸ;çí½l›-¤¦utXY}˜PTtwß»÷Î?þ01ùØáp  JHèèå](ìì|ù2$$$¤¸øÕ«;÷ì9uŠÃ±°() õô|ö¬³Sò2b0ªª&XY‘ÉTjBBRRE…ä+QŸC´º–žÞÐ #¸qã–-Ož„†ž?ŸPQA§w¿;£¦fi9v,‘ØÚúèQ^^GÇ N tz^^nns3‰4mš­­º:SU%ÊSuun.…Âá@™‡Ãç ÍÍ¥¥Tj_½½|>!Ä@ ²ä¹D¡´´æÎ=þàA+«ââÝ»ÝÜ®]«©Ø4…DÊÊZZ*(°ÙïÞ …òò**2¹ÜªªÖVZ¾ÜÔT]‹€ººoµ'ž<ÑèçÏ+*Ê2°X--ssªªºv-+k@Ã@  Ñ’“oß.-këï¯o}}ÙÙ‘‘yyƒmI hn~ñâùóš4ÚËËÒRM NHèîþÚö”Ï3tûÆáFD<}J£-[6kÖÌ™ZZW®TWS©^^..driééÓiiMM#¡ wïîß_[ûùRI®ŸâÛóo‹UP“ŸÏç_¸0mÚØ±$Rl,Æçåî>n¾~½qcI “)i}‰#OÉ7?TXxçNFFKË@  ÛÛ³²ËÊ hóf-- æÆæfGœ\|?{%^ÿ.Ž|†nÿQ(99ñÊËf§¿ÃãÇÛ¸qÃggãÎ3‚‚ž>mi~KçóÛÚÿøÃÛ[_ÿÎW×øóÏÓ§ÓÓÆóöž;70ðÉ“övø±ú#˜Ÿ›ÿà;&³­­³S ‘44tuµ´ˆ¦&­¹¹¾¾¯OEeÌ==ii¡°§§µ•É™n ÆÀ àêÕââÔÔM›ȺºŒŒ„„Äĸ¸ìì¶6 S?œ¿::jj:;?ž …B!‰ÎÃúÞgðp¹UU/^äç+)Íž½l™‚B~þ‹ Ÿv”ÄáÔÔddÜ¿ùðadä‡ÏÇŸ=«©áp>6¤A}}TÔùóOŸ’H“&Íš¥¨˜•uøpTÔpJH$‘¨ @"AƒÑÒ2¼c3Þw)áñJJ^¶lþü“';:ÜÜÂÂ=ª«ëèÈÌLI [ºÔÞ^òCA‘H"QF†H§³“Ãùpß»@ÐÛÛÓÃá 'G$t¨lv[[ww_߀Œ!ˆÏçpúúÄêJMmáÂsçvîtp(/?~< àòå‡N -M € ‰äåùüyMMMMv¶è™ŸnmFƒ ó}n¬Ožâ×ÑÉx<±Ùíí,Ö‡ÛŽØl:½»›ËžÓ,‰¾ l6Æ`|¨ý‹ÕÑÁb/--é^|ûÖÛ[\ÛÖ¦¯ÿË/Ó¦©¨‰zzS§Îœ©¨H¡DF&&R©#10ššrsb9>__âë§döüÛA]]¹¹Ožc0––3gŽÃa0ZZŽŽRR••¼z5 8¼ü]žßG@(äñººèô7ö‰ô™É„ NF‡_Ÿ¿Ÿ½zÿ.®|ıÿ/ny%ïï0 gçÉ“ååëë##ïÝ{ýšÉÙ˜ §§¤$!a÷î9s<=—,‰‹“’ZºôرåËÇŒÁá~¼þæçæ?¸ëR `2[ZX,,vÂ5µŽŽ´´¶¶ÖVd2eegÎ=ZJŠÍ®®f0Dƒ/ÉÒ28øÏ?­¬^½Z½ÚÙyáÂÚÛE‡7hjJK|iuD(äóEæòÇ‚Øì¢¢3gvï¾p¡¦†Ë/)áp”•?MÇbUT$%]¾\Q1ô¯#‘**®®K—N™Âf¿~ýæ ëà°n««’Rzúýûmm’< …Nwwo/‰ŠŠ‚ÈtÅUøØB¡ddÔÕÉäÏÿ¾>*51ñàÁÀÀÄÄÇñx‡yóvï¾t)$$>þêÕöv“¹sŸ«¯UUeeE¡Ê ˆÃÉÈHIa± ØÑ1¼r UßÚÛJ†ÇËËìò!‘‚È]är%+¯¤ö­··²òΘ:ÝÏoáBgg[[)©iÓÔÕ)”‡FfÞ‚ïÖ0\ý”ÜžË>©­íÕ«‡kjde—.8Q]]M­£còduõÚÚÄÄÌÌ÷­çpòÿuy~/ýA Ðh))ii,`àxB¤Ï Ø×W_ß×'~M|O{5´þ]|ùˆcÿ…B.W’òJÖßñù--÷ï¯[·lYrrmí»wÉ]J›HI¹y3/¯¯oöl## ËÊ~¬þæçæ?·‚$º I´ ®§go¯¢ÂbÕÕÑé4Z]ƒ!/oiid$-ÍdŠÎº Š””ttH¤žžòòš&sÀ` rrvv£FÌýAAP‚ùmÖ—„B&óÍ›K—Ž ½u«ºúÓu ÉA))+«ààýûíìJKCB¶lY½úèQ*uêÔÖ¯·³Îýë}}­­¹¹%%\®¦æôé'jiýïÝóÄã±Ù|>+/O&¦ÅãõôÜÝåä¾.%§®.#ãîÝ3gÊ˱X++ c†V_<•Z\\]Í媨Œ?fÌû-"22&&VVjj\î»woßR©ƒnßH»C‚Dªªº¹{VW7Ò+_F\ýž=ÿº<%¥¿ŸJMMMHhmÕÖvssrrvöôÔÑimMHÈÌlj”ç÷ë†jù%Í1vìܹVVƒ1u (+kc3mš‘66¾~ýéËÿûÙ«o+Ÿ¡Úÿ‘(ïÐú;@ H$uucãQ£45G64”•Œÿ‘‚L603FQñã~Àãee¥¤Ðh>ŸÃm+”¼¼ßc|ó³ñ\Aâó™L*µ§@W‚ššèô¾¾¾> Ry<ÁÞžDb±h4ÑvÄbQ(YYÍͪªË—oÛ¶hQFÆùóÕÕrrnnëÖíÞmi):Ûi$rÖ××ÚZ_ßÓ#-=qâòå 8: …ÕÕh´¢"SYùäÉóçTêHï ÐèÑ£W¯Þµkùr$2.ÎÝýáÃÆÆª*,öÔ©'Oþø#,ìøñÕ«oÝš8ñĉCdŃÁÈÊ:~<"‚BIOß´éÁƒ‹ùüÈÈÊJ>_CÃÂÂÆ‰LLÜ¿ÿÊ …Ëår›š²³)$òرmÛ—/Áü|2ÙÓó·ßüýE‡´¶¾ÿ}"qòäóçÏŸ_º”JMHxðàåËwï˜L))cãE‹ y¼òòK—š›?^]Z}uw¿zuæLTTwwBÂñã‡@DÄ›7`f¶ví±cãÇwuEE-Y’™ÙÝ AS§Š/BZÚÌlÚ4OOkkYY"ÑÀ`Ô("'Nüå— „B %??6öñ㊠‚¤¤&MÚ¿?$ÄÝ@¨¬¼x‘˵±YºtõjÑ÷x¼ææ¬¬¨¨„„ººÞÞÞÞÒÒ ÂÂÊËW¬Ø½;,ìÂ…žžcÇ"# {{eeÇŒ±¶7®¿?6v÷î‹««‡3§ø-ä)n‚––ÔÔ°°çÏ·o¿zõò尰Ç÷î}ø°¾^GgΜ ìíAðã¨Añä/J¢oÒÒ ?ÑÝ}ñb||g§‰I@@Hˆ¥eWWTÔò埖Wd뺻@EÅÞÞÙÙÅÅɉDb0„®®¢¢œ ¥§GrûÆå–—?|ÝÒâç÷ÛoššïÞíÙóøqcã÷sÄÕÏáØó¡ÈSÒ•r¯¦æÉ“ŒŒîî  €€-[x<'9ùðáúúõàÛ÷Gâé³dù 'L ‰Œ<|X]ýîݺ: _ß;§NE ž?ß´)1q0:Iù?{5¾}}‰_^Iû;Ñù°{ö\¸°y³®nròÊ•½xÑÚ:þÔ)ÿ ââjjb?%­ßo1¾‚ù¹ù? D®Apœ ÒIEND®B`‚twittering-mode-3.0.0/doc/web/images/screen-user.png0000644000000000000000000032131512141747407022336 0ustar rootroot00000000000000‰PNG  IHDR0h–6Š| pHYs  ÒÝ~ü vpAg ÂaÜl€IDATxÚìw|ÅÛÀw÷z/¹äîÒ+©$ÔÐ[èMŠˆJQAÀ‚Š6Ĉ€‚Š ((J!ô  ½÷är½ìîÝ÷ÞQM$ óý|²{{»3³Ï”gžgžAõúººª*@ @þó`° @ Àf†aX@ ÂF @  ªG@ `3 T‘ @ AÀ‚DQzý•+>œ•e2QÔWp8ju·ncÆ . ¨û¼ÓY^¾{÷;ï¬\iµ¾ôÒ’%Ï=Åå¶Žâ`‡£¨èðá={Ο¯©q:ïR`l•ªcÇ¡C‡‹“J±;‚\àøµk_}5þÁƒ=z,YòÖ[;ŠÅ­ñÅS”Å’ŸäÈîÝœ?_Td±ðxþþIIƒ;th‡¾¾¬MÇ鬭=uê÷ß-.Æq†A c³ù|©T­ŽŽîرK—ÄDûGáQÆá(.þãï¾[·nß¾‚«]»çž›;wÚ´¶mÆC‡n??}zr²BÁb=Þeššº}û–-UU$ùwWr8M÷îcÇÆç{Úœæx¯­³Õr:ëêΜ9xðÆ  !Cúõ ñNÃ8……G;¦Óµk7xp—.*›ý8ç@ ‡Á?¶ ¹\UU|ùåçŸ95dH·n~~·v½<AÄÅY­kÖL˜ðÎ; óÙg[·ÎœêpTT\»võªÁ`±Ðtk AQË•+k×.Z´fX<|øÀ!!<ž÷ŽÝN’4 sçŒ$ †›7/\ÈÊjÓÆfËÏ_³fòdOÞÛ´ár]®††ÌÌÓ§ss5š^½ºwW«7di.H²¼ü÷ßßxc„ŋóòÚ·Ÿ0aâÄž=£¢l¶k×¶m{ñÅ¡C·oŸ:uÆロ5+1Q$jì0óÞù"É‚‚µkŸyæí·½ËáßY¡H² `Û¶e˾ùÆ`2dܸŽe2—Ël¾rå?¾þzÁ‚ ÂÃçÎýé§uëž>"âVÙú;l¶óç?þxêÔO?%ˆÙ³¿újúôÐP/ A.^¼Ûy±ÃäñÂRV–——››ŸO‚ 4m±Ü¼ùÇGŽTT$$ 6hPh¨»y<§3!$„ašV¶M·ÎV‹$‹Š¶o_±âÇìÙ³OŸà`¥ÒSciÚdºxñûï¿ú*#ãÍ7ûõKNV©§.·ÖüB ò0øÇ$ð+K.ïÚõ¥—Þ{oÉ’‚»]étFD¬]ûí·¢Pp8·ØÀçÖÓù‚”ðx&¼ýöûï"“ÝïÊûçpBB&NôÎ;‚8õõ.^¼lYnî;ïtëÖ½ûíŠeKârUWïÞýÎ;K—^¿>hÐêÕ{÷¾ûnçÎnKØSO=p`XØÔ©ãÆÍŸ¿n]ß¾{ö¼þzBBc†š.×½óÅåß^ÿÖáÈ›­Ñôïÿ⋯¼2mZp0(šÖëzå•þý?þxÆkמzjÑ¢Îï^gî^êê22®]#É„„·ß<¸S§ÄD‘AœÎââ5kî<)}œ˜:õ½÷>úÈS¥¥ëÖ]»væÌÑ£&¼õÖâÅC‡*wSã›7ï­³Õºª$Í­¹•†@ ¤eÁäÖGÀý®ápÄb??__±¨G÷úIVU?þå—sæLš4|øèÑ“'¿öÚÚµgÎÔ×;’–£¿Ï‚д͖›»k×¼ôÒóÏOž]W\óAØlOÞÆb¹råûï¿øbÇŽüüššS§V­Z¸ð7.üá‡ÌL›­åsçrUU9²eKvvDĬYÓ§·o/•b˜÷5\nTÔÓO¿öÚàÁvûÛ·çä8$YX¸cÇ×_ïÞ}ùò‘#_=gÎøñãÇO›¶`Áöí996Mÿ}¾î& C’ÕÕ'N¬ZõÆÏ??jÔ¸qS§Î›÷ý÷çÎy¿qŠÒéΜY»výúãÇoÞüé§gÎ|ï½M›.]Òé\®‡/E·ža±ø|.—Íf³ù|6E)Ê`8þÛo-Ú¾½¨Ø=A(Êh¼tiݺ%K~ù¥°$)J§»paÇŽmÛNž¬­µÙŠŠöîýþûµkwí:sæèÑíÛo?ÿÛo996Ã4®NÑ´ÉtéÒš5_|ñûï¹¹yy¿ÿ¾páôéo¼±iSq1pjk=¥Ú”–§1ÒÕ´+ï|bk–·{ÛØ–öö_Ý¿pO|Á#<Â#<Â#<>þǼøMÛlùù‡ïܹeKn®Çm Ã$’¸¸ Š‹khX¿þ©§Þ~›¦—-Û¶íå—CC=0ó6[fæ²eÓ§/]Z_?uêÊ•?þøÎ;±oßÂ…óæÍœÉå®[·eË”)·ú×·îÒp:««OžÜ¹sûö†¡Ðý-ŠòùÁÁ))#Ftíêç‡ãiiŸ|2kÖ† 3{ö§Ÿ¾ù¦OFÆÚµ}tñ¢É¤Ñ<ù$Iæç¯YóÄî¼Ï˜>hШQ½z8ž^T4bijÏN™«Ps¹-¿#ŽWVffÖÖ*•:ÄÅÉåv·g áá=zX­›6åç›L8®Õ¦¥mÙ²lÙÏ?wêô¿ÿ-XðÉ' TV~÷Ýo¼òʧŸ†„lßþæ›÷ËAäå­]ë-QQNgFÆçŸO›¶hQUÕ¤IË–}õÕ+¯Ä¡C‹½óÎ /X­_½sçk¯ÅÆb˜Ñ˜•õûïß}·sçž=]»Ž7kÖÓOzóæ·ß~úéË/÷]TÔþý¯¿Íf×ÔìÝ;þâÅׯºfͺuÆ …¹¹»woÚtî\V–ÁЮ]ß¾u1úçTц†Ë—÷îݱC P*iÚl®¨¸víèÑ£G«« zë­yóâãy<Šª«+,êR½³Œom?n•a†±Ù']<^c¯ΊÞOu¹ª«[ƒ¼1 px>vlÛ¶M›êê¼biÚl¾r¥¦Æå’HÜ-mã¤Â»œÁ/I²¦æþíÀ®]‹wéÒ:×\B Ò°û9Ã8CiiAANNnn^žçXRR[K ‹u¹œN§“¢î5ü·Z¯^ýùçýû‚ fÍ800P(‹#"Fš1£_?“iïÞÔÔŠŠ»…Lh)hÚn¯¬ÌÏ÷ÎQ^^vvaaM °YØíYY»wŸ?ááB!ж¦Rm,—®¦Êá­ï¸õ” M“¤ÁPWWSS]]]í}¬¯7ÁŠÉæhiïßܼ ;Tü;x ‚0 ‹%—''¿øâ›o~ôÑÝ× ‘d~¾Ç`uë|¯{&Öl./¯¨0‹ŠnÞœ3çùç÷îõŽñ%«ÕC†$X(ܲ6÷ýy¼ððgžyë­ î¾‰¢êëkkëê¸Ü‘EAÚP”Ç“ËÅb6Ûs·ÛóîÎÅ­ÿ{(/›-—ŠDfsII}=A0LDÄŠ™ÓÙÐPPÐЀa*•F#³X ƒ¢b±V$•²X Å&•†……†²Ù{÷ÖÕÙl4x¯|Ý^N§ÑXZZ[ËãEF††7?p ›­REGÒô‰åå6Eµk"Á)‘‘áá‰ûZ ãrù|6›¦ Âé¤i†a±´Ú'žX¹rÑ¢ªª>X´h̘ädŠJHxòÉY³Þ|ó7FŽŒˆp+®--AŽZ’2eʬY/¾è^ƒ„ $Y\¼yó³Ï>ýôܹ?þûóÏ#FxÿÎ#Þev»ÜÜyõç›Z§A‚¨¨aÃÚ·—ËÝÒŒ Ò:JõΖÇûó­5Èåj¬t‘¤VÛX9LJº½Œ[“¼q¹!!cǾòʼy#Fxi ¨ººíÛ³².^ÌÌdŠú'-­·ôý];ð0[3@Zö£O†ñùr¹D"•&&>ÿü?þðÃàÁ>>sÈõOÒÌåJ$Aèt ˜qåóåÀfÃq÷Œmë‚Ç ëׯkW {ûí;32Ìæ.]zôJ½Ëš$KJÚ³§¶6*êÅD"),D— ("ž+].«Õ`p¹ø|±øÞö¨»Áb  …@€ãõõ&XçÂç#ˆ¥× 4-Ëå\nSƒas¹þþýû¿úêúõýûÏœY_éÒæÍóæ½öÚË/öYPÐï¿üqûö‹ÐÜp¹jullX·aC^žNçra‹… 4MÓ4íXR”ÅR_o³Ý-x~ó×)ðÅ0‡Ã¹Û5­»Tÿ¹t±Ù*‡WÉ4E*îRýþí@kn³!i<˜g®úŸÁmþÉo=¿”JÛµ92..?íÚuëÒÒ Šbšv8òò¶m{ã… ª«‹ž,µ=Ò4AètåwPQQ]ÝЀãBattß¾þþYY[¶¤¦VV: cµfemÞüý÷ 4Á½raŠ„Ùlµ:.AG¶‡‘/¡°]»Ù³gÎŒŒ^ @Q†±ÙÃäòèèÐÐk×,=zõê’‹…ËíÜùÕW¿ÿ~Ô(†Åb±œÎ{å«}ûÛe€ÅÒjGŒøüó rrfÍš6mРõë›\XØSO}öÙ—_öëçãƒa ãtb˜P¨R©T$Éf'(.W&óõU( CQ†AQ‡Çs8ΜùøãaÃV­²Ù„B.×éD¨¨çŸ_¹²G©ôŸJ{Sê—«T* 7NŸ>fÌÆ(Š¢l6§P·kׯßâÅ?ýôâ‹ýú)•(Š¢RéË/¿ûnròìÙ3fôèѵ+‡óÄo¼1sfJJ]]n.°ÍÝê¤è=¾U±ñœoJb±•J£ññáñ€”zç§5”êíuP,V«5__`µ½ýé—.i¼ÞÞjµŽ’Á0.W.×hT*>ß»v¸ßŠŠD*•¯¯\Îá h㥂¢nÏ/pu½;ð°%@ –­©)++,l]‰¢(’ÄqŠa‘[ß"ð;ÓK6A°XB¡PÈf·n÷ÀÛ¡i§Ç]. »{iÛlçÏ¿õÖ“OîÚ5vì®]Ë—wêÄá‚p8<‹Õye—‹ HE¹Üæ¹'¸#ŽS›-ðx­_†‡:õx–jã¥ëŸËáã*oM‘Š–o i-°[㜆q8|>ö×M­FÃx<¡¬5xüæPQ”ÍæóÝÛ·Þ™v6[£éÑcôèÞ½Õj6¼÷Ö±ÍóvP”Åâr›÷žl6âð8¾‘Ö[§ÇRm¼t=ˆ>žòÖ©hùv@ ÖZ]]ZZP @ @þ G @ @þñ>H@ òoƒ]X˜}í,@ A].— lt @ @ ÿmØ‹Á ÓÁ‚€@ @  @  ‚@ @ $@ ù ¨ A @ È_@ @ @þ*H@ òì‡ù°3gΞ=wÿÙÞ~ûÍ7çÍ{\ ÷ñÊ/EQE]¿~ãÆÍ›õõ:N‡ ãùEï÷kï+=çn=Ë0BÓ Ã0Zíç—Çb±X,Vóæ‚$OŸÞ·EÞ°Ç«®¾t E›ïžüP‚„VÛ¹3à 4u*—Û«×ȑ͕£†½^¯·Z­V«µ1×ã8Ž“$ŸÏçs¹ʽ~åççëëë+ÁãßÐAAÒÒ._¾|988((0P«U«5š¦Þáúõìì7ÒÒ._NOñÅÉ“Ÿ{–êÿB?þÛo¿ÿ¾wïÓOO˜0i’P( …w^ZæÒÒÒÒÒÒìì7nÜ Œˆ‡rÒ\\¹’™™™yåJffFèß›÷þ ¿îÐ!)©]»’’’’`™C@Aúì³Ï?_¾¼ñ¿ÊÏÏÏÏÏ'‚Àñ?þ8xðСaÆ<¸õîã•_ÐôTUUWWW?õÔÓOO˜ÐrÏúõ×íÛ·n‰‰Žn^‰ ‚ (êÀï¾Óh&Mzé%^~E9AX,.AX,EQÃEQAh𦄦].¡(’D§“ ÆåÂq!I»aÂfsÆq‹…aÂjåñÌf‹¥¡áÀï¾c˜ääAƒîÕ¡6Ї……‡GD$A$Š‚TcØÝÔÕªªªªªªÐÐÐÐÆ?¥¤¤¸¸¤ÄÇG¥òñù«Q`³X,VUUUUeeHHppp0l(†aF¯×ét:“É`ÐëCC##£¢0 ðÇÀo6[,fsFFVÖµkEE%%EE&ŒÿÌ3 $ÿïq:N§3#ãÚµ¬,.—ËårËË++«ª‚‚üý[:ý—/_½zåJzzFFFƃÜÇß_£ÑjGŽ:tèÐÖù¦êêêêêë ‹‹‹‹ïuMDDXXX˜ŸŸŸŸ¯ïÃOá§·Ù¬V› ´‡‚¢îö—¢hš¢@Ðëõz½þÉ'Ÿzê©§vïÞµk×.0ñèÔ$Ð^Þðúõ›7³³ËËËË++AF©T(Š.]’“;uâóy<ä¬1÷,))---½óÛÐÐÆÜ§©ÕhÞ¼7Þxë­–+±åË¿øbéR¨ A¼a?ª;‡ÝÎå‚a«§JJHÓ4MÓåú §“Íæp8œ!C†9òÀöî>|èÐ!C—‚nýù5ŒF£Q$‹¥R6›Íf³AJ<rw÷àùÛFrÔ 7ÿhÚå¢i±X*‹ÁSÀÕj???¿æÊ…Õj³Ùl¾¾:]FMWT\º„ l6‡ƒ Æf#H¿{P Þƒ;åÂ0Þj’ÓÉ0åQ™\.’Ÿ|v¹HEN‚‹uºŒŒúz›Ífk. àr9.I’$A°X,›íp8ǽ®w:I’$ï<Ô'ï3àí œçñ$‰6ŽÞ5´¡¡¾¾¾üÃX,Ëét¹\.ËmнîQ‘—WPPPЧOÏž½{×Õétuuyy…………mÚ„‡‡‡»ëïýÊUïÞ½zõé#‰D"QVVVVfæÃQ€jôÖ[óç¿ûîƒÜgéÒeË/n oÄl6›M¦ŠŠŠŠòrïóz½Á`6''''''Ióþ–¢\.Šºr%=ýòeN§«­½½FI¥R©LöprñoíÇ9.—ÃêèËPÔÛOœAQµXÌf‹Å­&7nÜï¿ÿþûo¿k##š”·ÔÔ£GOœ 7nüø§Ÿ}S]]]]]ÝéÓ§N<Ù³g·nÉÉÀSà^ê xÇŸ8qòdPPiéxû‡ ®i ë™·Õ¨¬¬²²¤û Êê™:tUÜîyç ¼W÷Ÿ¯¯Zݶ)ÈãÎ#S}úô©S••••••}úôîÝ«×ÃL?PHU*¥233#ãÊ•êêêꪪ=zôèÙL >>>Jå¢E}´`R©T¶äûAA ÎÍÍËËÏ/.....`…B¡P(‚$N³Ùl¶X …B.ùôV´Ú½{“’ÊÊvì@Áƒ;v´Z×­KOÏr8T*­–ÍnÉÉA7 m‘‘‘‘ÑÑøäþ»%éÎþÎuÒˆ7LA6??µúV/j’t:Á ÷‡ÃáÀq໼gÏž=¿ÿn³Ùlv{RRRRR’H$ …GŽ;vüø€))ýú=œôOÜ'Nž<}ú^×dddf^»Öúó  “Éd2™T*•J¥ºÝÜìf» Óà3˜WŠ’·Ú#MÆÓÓ?x xâƒ[Eî'eN§{¾/-mófõ÷G©T­v_Ó¡ÃØ±’šºbÅí E!H—.“&5KîëÆÊJ†9~üë¯o½òaѸ¡¹·jt¯ç].—‹¢8àPÒR˜Íf³ÕZ____[+‰D ˜ÝðŸ:täHTTddDDDDDDXØÞ½ûöíÞ& …bq\\QѲeÉÉ“'§¤TU¥§gg·D:½U#à$ŠDnÕ\:⺺êjà²xg(·Åáp¹<žD"•Êd@-yTí-Žë&A8N'I :´oß¡Ã÷ßoÜøý÷ññññññbñí9êêt:Îå¢(†ñ÷×jýýtºÚZÐ>€i“‡Ÿ `wéÒ¥K—.,°;Òí ’ÇÂÔü!ZšWê„aüüT*•*-íâÅK—ó+pý£àÝ«_²¦Óét:]YYYYYÈå Aƒ ì^ÓRRRRâpØíÇ–-[·þòËÈ‘#F ¦Rùøøø<ÌÉ0y§ÓÕ×ëtŽã¸·íË{Ðí=ýlòÑÑÑÑÑÑ@ :N'IJ¥R©DÒ®]»v‰‰.œ?Ÿ–¦ív‡ÃnW*¤¹$wÛÕР׃¿>_ àóF“ÉdV_š¦é¸8Ðöúúúù©Õ`<#—Ëå2¸·jÔ®]YÙŽbñŒnÕH,îØ±cG«5===X«0ìaXÔ,äåûg÷áóù|>?!!>®8‚Ü›G  Qp^BÑé€g?ø—¤óx|>Ÿß csf¾¾~~~~111111 ¢oÚØØØØØØ;wìøå—‡© åääååçÏ™óÆóæQŽ Tî[f4êõ:¸ž¦)ЦëëuºúzàG.‹Å"‘Óétº\8Žã8ºùûç×ßßß_«MM=tèÏ?›+¿î5-(Ša`ùµÝn·Ûí Û*(Þƒ@ð¦Üyªˆ§±öXÀ9÷ÛOOO³‰Íý–ÀJ!0<¢iŠb˜Ó§×­CÑAƒæÏG‡ÏGÑÀÀ¤$ HLd˜’’‹Äå"ñ÷OH@ÑààÜw#I›¦·n}ùe†).NK£( €=\éï¸S5òÜç:÷÷à­Ñ´»®µtÚÀlx"PÌÀüXXXXHPJKËÊJJÀõr¹\®Pp87¶oß»÷Œ3fTU¥§§§WW§§§§GDŒÛ¼åæV€” …"‘Hä.=Ï0M&óñq´ðüúöišaÀê1³Ùh4»Ýn÷ñiN‡ÒÆ#“I$R©Õj±X,`Uˆ¯¯ZзoïÞ}úœ:uúô©SÇ”iÎÆ|f±rröíCêêìlwœ4P!KJΞÕ(Hr¹L&—{߇ÇãñÄ[=ø|À=+,-À@ïïïïмyÎu )Ýíë+@H÷0Ñm/ò¶'yÔ$ï3žæçvƒ6x x"xzK(H CQ$‰¢ $‹aÊ˯^EË—·oGÑnÝžÞÝìví:y2Ã…Çét80¬W¯3¼ïFÓ{÷~ðÃdfîÝûðk húï6`º3×·–º›;£ÛyVL1LóƼwÚ<«@C‡ˆˆððoÕXjÔ±ãíªQZZyù°aÍ•*oÕÈår:ù|¡Ð£¹×Vüý°ÆÛ¡”¢Ü¶S6›Ãa³N’Äq®®®¶V¥òóS«¦šÔ¶mBB|üÙÙÙÙ;ƒ!ŽÅb2EG·i›–––váBEEUUuu@€V«Ñ•”””‡†J$b±X\QQ^^\ æÈÓÓ3333SRzöìÙótZÿB ’÷@íNÕèÎÜ£ÚÝ«öŠ‚‚¸¸¸¸¸80ÍwéRfæÍ› òapp@€VK’N§ÓY^^]][Ô»wŸ>}úäççååæäçÙ{˜› x«F‡q÷$˜.ôv"g³ÙlK*•ɤRàßátº\N'°²â8Ž„ÛÍëîÑG›ïÐ4Móx<œ’’’’’rðàÁƒ†††……‡Û]jjjjjª^ßÐÐÐðò˳fÍše0X,6ÛŸzš ïŽÃ»¡r»Ðy;Þ¹ÿõ^‘ä^£¾OñóóóS«kjªªÊËÚœºq¸\$ ¢Ž¹Ã3+Pjêòå¦T£htt¿~ÀéÆ ñõ„£`˜›7f˜cǾúªõWi0kÛZSçŽåþmAeeUUUAà8ADFFEEFr¹?þx7Õ(===½cG™ìõ×§Nm®4y,Z.—·äºkñ½sÂ0`´`îz,ŠîÕ­¿"I‚Àq³Ùd2™d2¹üÖé’–#::22*êúõ7nÜÐëõzƒA¡`š E"‰$%%%eÀ€£G;rdܸQ£ÆŒIOÏȸzu„gž™4 ¸Õñù|¾@““›ëë«T*À êtZl‹Ã¹|ùòåË—ïŒfå^@ï™SîÙ³gÏ[Ûÿï¾Û¸qÆ{ÝÿQ„¿])r8‚p¹YËf³Û«ªD"±X&+--+sGÆjuó¿³Ñêtº†<X.^Ì̼qÃl¶Xl¶ääŽÛ·w¹hšaÂét¹„B‰D&ËË+((,´Ûm6»½G.]:tAÀº¬àà    –žPCgï~ ôÑÀÖíé}ú<˜šzäȰaC† b6z}PP``p°P(…GžùäèÑ£G?²N‹Íf³ÙÝ»÷èѽ»;†Û†Äb7âŽkçqÁñ¾ÃýÃ…?üPàwÚ‹€jù w.,,(¸5æXsqg?ú:`;jÛ6!!!ô ¥¥ÕÕ:$%µm‹ã4a tŽÓ‰ (êtbÃÈå*•Z}ñbFÆ•+Ý»wîÜ®Z­Vk4ÅÅ……ùù-aå“#@ÆÁÀ»Ô˜ÊÊÊʪ*Çsý½Õ#ﵸw(׃»R²Z ‚ ÜOñáh®½Ô@½P* ¥2)©mÛøxàŠÂ0$'wéÒ¥ þiDEÅÅÅÅíÙ³cÇŽ]»ÖÔ¤¦Žo6ÿ½jÔ»7PÀ†ïÀùÿáìç­"Ÿ=û쳓'''ÏŸÿæ›11±±Ngfæµk6[ÇŽ:€+…›7³³{öœ8q„œœÚ·?rd̘±cG>yòĉÇ1ÜäaòH\ìÜ3, £×74 à Çãq¹îÙ«U§ ¾xqãFj„ (*H¥4m0˜L¦T±ÙII£F¹\W®üú+M×××Õa˜B!“1ŒÓ‰ã(ZQ‘‘açÏoØ@QM\\ó9ÝyªèŒÍfƒA¯ß³gƵkÁy¡Ðn7›ÿøcëÖ~pþ?$ šO0ó©Pøúj4:…†J$"QRRãT¸ŽIòìÙæІ†ƒ9º‡/eeEE-£ Ñ´NWRÂ0Vk}=PŠþ•XZš÷ž ¦\K§œÃápø|0s ΄„„„„…‹b]]]]YÙ½T£ÒÒÁƒGŒh×.>>!Áßßßì½ãvs}@×l¹‰T*—[,&“Ѿ–mï½\<í—g`ë=³é±hxÚ ïOîA–ÍfµZ­ÓŽO]ºtêÔ±cjê±cÇŽ :pà A`h›×¶í¥KW¯¦§‡……‡GFêõõõÕÕ M>uêÌ™3gLIIIAJþY,6›Åºx1-íâÅ[w?ñЫW¯^½zy«IÞßÞ¸‘•ÕšBßÏeØ=òu«´ÝYÑ#w`*­åR|g?ÍËÆ&ΡP(4™pܽ갾Þbq8ŒF»$I’¦ÄlÖëqüرóçÓÓ_}uêÔ ÔjF«½|ùâÅ´4 Æ´„‚tüøÉ“gΨÕMp0EQоûî»ï~ôÑÒ¥Ÿþé§çÎ;wá‚{ŬÇt«Cäë=N¹ Ïwxë­·ÞZ¸ÐjµÛQ´  °°ªª¦¦¦¦¬¬ÿ~ýz÷~ð¼€wÖ6‡……………Ù¾t)=ýÊ¿®  ?(œZmYYaaAAQщ'N|þy¯^÷VöíCÑîÝss=V£‡¯yçóúõmÛ¶oW«Á.SjµFƒã«W¯^}ãFQQQQzz÷îÉÉ ftž™ ,™ÑÑýúõí[]råÊ?þøcÇŽS¦L™‚@ ÷à‘¹Ø‡X,‘Ü­‹KK‹KJNœ{µ ¨O` ‹Õ«‚\¿þçŸ(Êá¦ÕÆÄ¸?«T*‹•0dEåçŸ>Í0õõ¥¥nkRLÌÀ4ݩӄ ÍÓ=¸”††ÚÚÚÚ’’S§vïž>JeóÞlwø0RÏ0½zõêÕ¥‹[þqÇûí·ßvíš2eÊ”)S6nܸAÓÓ×­ª‘@ðÚks挟˜˜”d³ÙlN§gN÷Ö]bþ@ª¹\ "ŠÅîÉb1›F`Eñ¾Ò=GŒa´¹ÝíÀôEÁœ{)ïá¬G¶Àrp÷ÉxXƒŒÈÈððˆ°»ÑÉ“§OŸ:5pà€äääççäŒ?nÜøñÀ¦_SSMMíÒ¥sçN@ä´GÜi±Y,6¨@î•FžnÝÉc[ò¾ÃÕ«W¯^½Úz9ܺRóîò ,xÞ~àÏ{8¾S(”ÊænîäÎ~œË%I0Éâvt²m6Ûlv;IêtV«Ñèr±Xf³ÃážÚí,E±Xl6°°z6˜¶§Óc¯in,‹Åá3fìØ®]Íf³™ Ìf‹ÅlîÑ£gÏž=t:½XæÙl Q,–{S`Ö'wŒH’$¼Àq»Ýnw8üýýý»uëÖÍ=*“ÉdBáÖ­[¶ää4wípÛ‘ ‡Íæp@L\àt§Rùø(;wêÔ±#§qýú… AAŸ}æptêôöÛëÖmÞì­­_õª@pýº¿¿JõÒKÏ=7dÈ£TÜu¡¼\$âó‡ ûüóÏ?'Éë×oܸ~½    ¶6(( `Ò¤7ß|ûmP³}ùå™3Q4//77.nذ¡C–,Y¼øÄ‰³gOêÔ Z ÷­Mwžji;Ê‹†½^¯§i—‹¢Àî ¹‹óóOœðþØLµµà3‡Ó¿ÿk¯Ãüü¢¢X¬¸¸AƒX¬øøÁƒiºªêæM÷õžfE OŸFæQý¥—Þzë¹çdáÂôôÍ›·o¿qC&;v,3ÓáHH(*:{¶  6666(hæÌ3~{åMCƒÙl6K$¾¾~~NgÏžJåÕ«'N=:qâ‚ r8\.— ¤kРuëÖ¯ÿé§O>ùðÃØØ=zôËiš¦ëëM&“ ºØAîÏ#p±sÛ(ЦÁÎÓ·$ˆÍår¹‰Ñ˜—"(*Ëd"ùù1ŒÅRW‡a¡¡Ï=Çf‡†víÊ0\®@Àåöë÷Ê+.WIÉ… •›{âŠÊåAAb³ÕÕ1ŒÝn2!HEEFFóåÂx€¢\®††ÒR‘Èå²XÜ;ï°Ù\.M;AÓ.IzÖ*€ÆtcžU<îóà°$,õv¹€O:†¡¨ÝÎ0VkCCYŽóù-¡ Þ~ûwÞ~»®®¶Ö{ðêæÈ‘#G޽ÿ 04É·âç§Vûù}öÙ’%Ÿ}öðe„dÀ°‘#?üðÖ·¹mÛìÙ “™éViºº:;Ã^~ù÷ßÁð+š.+»r…ars´U׃îÁ.d«î{$•Ê×W¡°Ùìv³yêÔ©S§N-)),œ;AD"‰ŒŒŽCø¤$÷n œ‰g­[ËHÈýÔ$0$ª‘÷Òdï@ N'ŸÏçƒ`Ça·Ûl‡ã¶Æ‚àùîVËæ`³åçdg¿ó΂ nç4éårU*ŸÈÈo¾Yµjûö_ݶ D«CcÇNœ(/Ÿ1cÖ¬êjq“¦iZ.ïØ±C‡˜˜E‹>ùD*MHˆoéôwéÒ©Sçξ:”ÿùóçÏŸ?ßúBß=´7°Më± ÝÙƒXs~~jµZ——››—öîKLŒŽ ++;>+Ën7™ôz‰D.)¤(½¾¶¶ªŠÍ¶Û †””nÝ:t5¢  °0?ßÏÏÏÏÏø.´T‹Ä0 žœ/....)±Ûív› Ød<¦{öùójpo„îù×èßét:AŒVïÝ].Šr:[º5Ò©‹DB¡H&Î;þÂ¥ÒÇÇ×w̘'Ÿ7î‹/V¬X±ââÅÜÜœœ#nÞ‹££Åbà…Ú·‰©¬ÌÍÍÍ­ªúöÛ5kŽÕétº^½^ýÕW¥ÒG³iw½p;,ƒÛãγÞÀs7ø°õßZ‹ »ó\ìÀ< Àb1›Íf’$IЈ€}œN6Ûl®®êPT&ÓhX¬èè~ýPT­Ž‰AQ6[ @¡P.w‹7›Íãó,VbâÈ‘V[›“CQ¹¹Ç3ŒÕj2¡¨Ñè^ùÐ<ÕA¬V›Íb¡i®¨H(”Ë]. ¹¿·ÙjkÆjU©\.‡Ã{ ƒÓÉb¡(E±X4ÝЀ 4M’ ÉE«ÌcÑ4påsÛÊØl.×h´Z ÂdBÑÄÄ–‹ÜÜ›7óò¼Ó{¯®(++++-ýðÃ?üàƒ;ûá‡~øÑGõõuu`«Í[]ïÊÊJK=AZG a»Á®G6iÒºuÂã¹CŠ3Ìõëüá­¹ÏgfîÙ¾EÑ„„aÃÀ¯À(êãÛ¶u¯kOA‡£%ór{Gú0›æËƒg@,Hv»Í†ã›7oÚ´uk}}}}}=°Ì«‘X,ÉdV«ÅâpUÄ[Åj9î¯&Ð+wþŠåþ 0 ܽ+—ç)c–$ÒÒFŽ=:..222²}ûtÏc†åçggggWT¼òÊœ9rùüù¯¿NÓ—.]º}éÒ•+qq£Få¨ë~wõõééãÆßµë‘#‡ ͽý€7íÚµmÛ¶-8Þë›`¸y3''+˳©u‡¿=Ì÷­u½uZîìÇAHk¹\&“É.^¼xñÒ¥ .\¸p¡K—ää.]ÀdçåË99%%ÅÅùù×®›KLLhh@@§NÉÉqqmÛFE…†nݺeË–-8îpX­‰‰ññ±±-g¯’àr9$éîŸ].§Óf{†Y­ x:° Q·öÖó¸š{ohá]J8îpH¥ ãr¹Ã±€Ø—î(x-ÛŽÀß@Í;~üĉ“'ù|@$5j̘±c¿ÿ~ýúï¾Óéêëkk'MzñÅ)S²²NŸ>sF(LM=zT °Ùl¶>}’“““ÓÓ¯\¹r¥ªê矷lIM-+++ëÒåwÞz+ .®%ßÑ9R*%‰Äh¬¬¬¨ÉL&³9>Þl¶ÙŽ;÷7 Z¹rÕ*P“š={öì¸8­ÖßE+*ÊËF§“ |}år…ªGûóH\ì@\Az}ïÆW*õ÷çpŒÆòr†1™jj\®7ŽŰÚÚü| Ój££Än7 EIÒá`—Ëá ¨k×öí£i®¬ XÀ „aär`ÜoÀܯÁPSSQ¡Tº\:[ÝAQ‚@Šr8hº¡¡¦†¦96›År¹ôz £i0GåŽêæ©øž% ( V]á8ppo±Ê0Ne¥ÉätZ­À ¯¥øí·={vï¾ÿ5O=5~üÓOßy>>>...nß¾ýû÷í{´Â Bz0 Ø×hܸåËD¥ uo ÞÃÎóçßû-ïÜ9>ŠÆÄx¬a*Uh¨ûnÛ¶Íž ž‚ -­ Ý®"5¿©åí vQ"—«Tr¹@ ñù2™R)“õH X‚\.•Êdà3¨EÓ`'¨‡'?·«I·.‹¿ß€ Àâl‘H$‰Ìf£‘$݃p†AÓòÎÍKAÁҥ˖µi!õíÛ·ïñãkÖ¬YC’6›Í†¢l6›=bÄÈ‘#GæçïÚµk›]RRZŠa7nÞܡÇ~øajê¦M›6Ùl¥¥¥¥ŸÏçGGÇÄÄÄÄÅEEµi“ŸÿÑGŸ|’˜¸~½;8MkàÁC·d=¾—CÝÝ¿’f2FãýgëÝÃLJ³éö~œµ8&&&&:úâÅ‹ÓÒ@ùwìØ¡C§NIIÑÑáá·çÀèdëÖmÛ¶n]¹råÊ•+³³³³³³Ÿ{nÒ¤‰—-[ºtÉ’–ÒJœ$=αf³Éd6ƒ=Ù ƒA¯ð§€{çç—•eeÕÖ¢hff‡FY-?Dyª—Ëã ÞªQUUeeeå˜1£F=ñ°‚€MçÎ …"ÑÍ›üñ‡DÂáp8={öèÑ£¨SõõgÏž;wöìܹóç·o¿pá‚QQÝ»wëöpÔ¤³Ùj--0aÒ¤¤¤Aƒ JNî×/%åêÕôôK—¶lYºtÉл'VúõKIq¹¾úê믋‹;v,"bΜW_}8åy|y.v`¨ãmnbê½Ã6AøúÆÅq8&Sy9°ÿ ˆÓI(Ö©M—”\¾L’ÅÅ—.±Ù:<ù¤ÓyåÊ®]î»H$~~ SPpö,ˆø…  Y l×®ùr (j2UVËåNgCM›LEQaµ"ˆËe·s86›ÅÂ0á^xêŽ]ò F@ÂqÏyïpÙ,‹EÓÂã°Ú:PítÚl-ùŽãb|ï¨w­ÁÅE¹œaÌæÚZ›mÛ¶Ù³JÓ”{TWß¼‰ ³fÝÛ<AÄí_Þ2µ¦e-H-­xœ>}úôñãN§Ýîtæåýúë•+ CQ æîAl«Vî$Iâ88â8A¸\ CÓÌœùðv§ñ´L@Mb±$±ÌüÑý † B ·rœ“„B>ŸÏoé!ECÃѣLJ…ÅÇÇÇŸ9óÍ7ß|Ó«×Å‹çÎñù~~~~øùùû{‚ö£hŸ>³g¿òÊùók×~ÿ=A\¹rå AÔÔÔÔ¤¤Ü¼™•RzêTÇŽÉɽzõíÛ·ï§Nyö¦k-yîÇåfdìÙ³o_×®†amÚhµZma!ŸÏãáx~~AI.[¶b…LöÅË—k4-¿R±mÛçž›<ùøñï¿ß°A£ÉÈÈÈP«iš¦;v|þùçžëÜ9<<<ÜÝÞVWWW;_~¹reMÍõëYYµµ†¢£G?ÿü /<Œ- 3@A‰Äb‘ÈÛ<íV¼‡QQ}û"HAÁ¡Cîf_&S«‹ÓyôèªU¦ÑÄÄ`X``b"Eݼyø0M×Ôää€(vàzÅÎÝd5÷v±(êr••¥§ …z}^0Ÿ3 èvy<`7b±0 tÆÀÁævEQ§Ax<6Û³Ï{£Jð™Å»wã¸ÍÆç‡‡w놢:]vv˽£ë×33³²näæ™çnŒ‹]UUUUU•w|;ðïÃq±^Æ(*€Ív[ð_sKæÊûÍmAj©8Q€^½zõê×|^±b×®?tï-ï 8Ÿÿ|» ˜ßŽ+qqmÛÆÆ>üV ´MÿlÏ"`ðì BÓÆb¥ÄîÅß-—rϦÛ(Êbq¹\®Ëe±X­V«Ùl±ðxB¡PÔQO.—Ë Âé$I°* X¸\¡P(´XòóóóÅâÀÀÀ@·õ̽tËË~SyðPà-Sƒ=ê±çíд\.—+•î>‘¦iÇ ¢¡Á[úŒF`ArŸ¹õÎJ¥Réãã^ñ0¤{õã g <8úûúû—–—”:tøð¡CV«Õêžë—@Xj{­gÏ=ºwß¼yóæÍ›§OŸ>}úôõëׯwGm^5Én·Ù¬Ö´´´´³gA˜0=#—Ëd ›Ífƒ§x¶G¿³%þûúêÈW®äæÆÄää,^œ-æç[­6›ÉÔÜõ¦iúèÑcÇŽçrù|`ÈaÆßÕ„ h×.))1l"ì•ÎÚlÝþÄ#Gž?ïtº\™™þyèZÍår¹BaJJ¿~8žž~åŠÍVUU]]__YYUõp$PŸ““ûmçÎ žxb̘ààÚÚÚÚÀÀçž›4I.Çq°¥ÃèõF£ÁPQqìØÑ£ èFÿþ©©©©`Dê_kk» ­‡‡ª †oÙ²¥KÿÎz 1ŒÃ1l›írG;ŠÊÌÜ·샄¢>>MWWçä7*šÖét:ÉÌÜ·ìƒäv®‹2„¦ccn®¼e ¾þæM©”Í&Išær…BáJÙlËíú§ÓUVº+$‹:0àýïYöi·ß}Ša„$ÃÌf†¹xÑb©¨%Ùrojÿþ?þ8pàþ×ÜßÅîÏ?ÿüóÏ?¾@ƒ2­­ £¢‚ƒQT*e±bb hS:xC à‰î7ÚüܹölKÜé¿ ­Åßßß_«=xðÀ_~©ªªªª®–Ë;wþ§Šë?¬_ÿå—àž£FÙ’ÎÀÍ÷îÀz÷DQ‰D&‹ÎÞS2YRRR’ÉT___ß¶m›6mÚœ9“’2p p–‹OJJJª®®­­­U( 0€Çãr¹\•jøðáÃkj.]º|9!!666öÚµ^xñE’´Ûm¶¤¤¸¸øx»]§ÓéD¢èèèèÖVæ ¼¥Q*•J•ª    7÷ÎoE"šÈݦ¡(XjÎxÛ‘nÝÉómË¥¼ñý¸{å)[â¶ ;n÷<A‚p8³Ùh4žxâ‰'FŒ9¹ªÑjÒÊ•_|±|ùƒç¥ªªºº²òÏ?>z¬ŽˆˆˆˆŒÌÌÌ̼z¤÷Aʼ0’”””Ô¾}AAAA~>8“˜Ø¶mLLó¾°R LLúÌ3'z Öâ%$$$ÄÇ'&¶mÛ¶-p«óž¦¹5^hhh(M3jÔùó`åÔ±c'Nhµ§OŸ=ËãÙl6›Ñعs§NB¡V«V7o^‡ãVÇuoK«Têç§VxîÜ™3W®lذaÃÑ£§OŸ<©×Ûl@ýFQ±X" ž0áÙgG~õÕ9sÀúP÷ê¯Ûû=ðDP&­¿g´4@AjüàE ûöe˜Ã‡/[¾2 p´ãpÀì@y¹ËÓëõååîó f˜¯ l׎¦»u›:µù¶ˆE!ƒ¡¶Ap¼¤¤¶Ç1Œ¦ÙlŠBQ ìÜDÓ hŠr8ºlpn ¨7è¼Áš#·ÅÆ{Ù'EÑ4—‹¢•]U… ={Ô»wddTTTTó½OИÐÛÀ¢mÛ¶mîu Øšíá 4°‡TV&&ît¦¥ýþ{` ËUR¨7/ÀjTQÁf‡†êt:Ðüôz½¾¡Á[AjhÐé¼Õïh „vï–õ{ìÃ`%^ëÉESûñ;÷ÉóÞרî@EÓ Å›;÷õ×_{ \s§šÔ\ ØtìÈÇår¹<ÞÌ™3g¾úêòåË—/Yb±X,&Óƒð ¢D"‘ÈdàÎ_}õÕW+V$Ø1©ù·üC»Ýn·Û½ÏôѼÿ>ŸÏçs¹Ý»wí:r$½{µBwªI óä“cÇ^¹Âçóù55W®\½Ê0íÛ'%uì8nÜ“OÊdÍ¿ò­¾^§Óé¼S¨Vûújµw^9pàüùo¿ý ÏS*à‰`Vkk= vkNpŠ£éAƒÞ}ÃΟ߰lù ì0 c2ÕÕ1ŒÁàÃà^k~ ¬FݺMÚüÎuÒ®]§NÉÉ¿þzü¸ÙLÀZ¼•ÿÏ5•‹ŸŸV Õ¢(†æÄûzð¼ 8`@Jʾ}{öüö˜E»Õ«ý^y¸×Bca˜›7oÜÈʺuŸqï=©P„Þäp4hÀ€æz/b1ØO«oß1c²³ÃÃ;v<Þh4™ZbÇ Ð¤Êår¹L žÞ¼OÎ3Þg²³oÞ¼yÓ[‚¼g8ÝÁ>n=s+ÞÛû‚kZÏÐöß„;&'Ç •òxÀ±ŽÃápØ©íõóëС}{›í³Ï/¾råóÏ—/w:/]ºt ¬¢âp’’ýüÖ¬Y½Z©  rÏž Abâž=»wçå}ðÁGåæž={ö,ÃA`˜Jåã#ÍŸ?w®JÕ­[—.ÀEçÑ–vs…o¹ùc·‚¶ö|æry<†ª¨—,›íp<ÈŽÞø\ß?=à[ ®DG·iƒ wªIƒ4p`s¥­S§ŽÛ·¿~ýÆ›7M&“Él>sæÌ™'V¯þæ›Û·P6oþùç x<AüüT*_ß„„æßÝ]’Æb½ýö›oΛ‚˜»(=ÐÚƒVèþö1ðFd2™L*ˆçóŸ|r̃!%¥_?PëüýµZ©T"iŽÑÈ„……„„†.[¶bÅgŸµDS œGF††¶Ž}Þ ­Ô`¨¯¯®~’j³54`Xvö¡Cî-_+*22@ðnw„ºÀÀvíÜjp¨kN«‘7ÀÅ(*`§ê–/ÏÐW*•H$ï=X#EsKï”(0wèíèòàw¹üY­6›ÍÖê´D@U`ÿ6+ E®Í5(Û/ ƒÑÜSNMƒx…B¡Ë½{ M««îåø@k`¼Ç?UN/@ êÜêîÿ[àf¾Amm^i‡Òâý¹ñòoÝìHiCCCCCCQQqqIICCCƒ^¯V«Õ¾¾ÉÉ;wîüàOqoÝŽ ¢Óét:]EEEEeeK¸ƒ7 R©T*8ÿÏV6Þ¿žF£Áú0 ¦óÀÈ¡©}®wßJ¶Àf³½Ãˆ7¯4‡7`Õñ~S-H¿¯¯J¥RA;È_uöñQ @ ¤eÁ`@ @ *H@ òPA‚@ @ ¿€ @ üT @ ä/ ‚@ @ Á¾~ýòå³gaA@ @ ZUUVVX˜••‘qõj]]]]mí?Û«l:æç§Vk4mÛ&%µo6ÛŠOJêØ±ñ÷©ªªªªª‚/@ <|ØW¯¦§_¾Þ¿ÿС£FyöW¾uooŠr¹\.ïsžïÜ»,ß¼™•uåJFÆ•+—.uëÖ£GïÞ°ˆ!@ Èã¦×74èt±± íÚ¡(Š"MÓ4EÑ4E£ËEQår‘$Aà8Iâ¸ÃŽápØíápØlN'IâxxxDDTTCƒN§ÓÁÂ…@ @ p¨Ã0 {À€ Ã0ÀúôÏœô @ äÑ£ØA @ È_4RAb†Ñéjk++Áÿ`ÁA @ « 1 Ãäåݸ‘‘QX˜““•UT”›{ãø@ ù7q‰a&7÷Æ«WM&½^§ÓhCB,³Ù`(*ÊË»y\ @ ü;¸§‚”—wãÆÕ«‹Éd4ÆÇwèÐ¥KHHDDll||ûö]»Úí6›ÅRRRP“ @ ü;`ßë ¹ÜÇÇÏÏß?$$<\ ‰$§“ ‚Íf³9œ˜˜¶m;v4›F½"@ ùwpOÉÏO« Dašvo ûÿ?c³ÙŽBáããëëÞ*@ @o`˜o@ ù ¨ A @ È_Üâb‡¢†a(êv˜sÿ‹¢ Ã0\.Çç{¾Ÿ¼ìÆá°Ù,X¬@ äqä/ióæï¿ÿö[X@ ä¿ Ûår¹œÎI“¦N9EQÔcòÞãˆa†¢(ÊågïþÇ0V«É¤×8°ÿÞ½°p!@ ÈãÅ_$EQ%I‚p8ÜNsžÁg’$wŸ¿í(@ y|A @ ä/ ‚@ @ Ánm š1#=}Çøbîźu;ŽË@ i Z‚hŒšzàÀæÍõõõõM3 Ô••••—k4ZMÓEÓz½Ñh±¸\N'ŽGD„‡ûú>ýôäÉo½õhs÷ÆsæÌš¥PH$(ªRùø(•(Š¢ f±X­6Û›o¾÷ÞŠÞ¿‚ª#@ ÒÒ´Ré^lÞ¼~ýçŸ;4¢'Nœ8qáÇçóx§OŸ9sáŸÏç£hppPPhhYYyyI‰T* …8Žã‡Õjµ¶ióå—K—¾ñ†É¤Ó•—øá²e¿þÚÒi~â‰áà 0F£Q­öóS«-“©¶– l6†±X¬V½ž¢H’$Íf»A:wîСmÛ¯¿^±báÂW^™;÷“O ˜B @ ‡ÇFA:{65uÛ¶ê꺺††êêÒÒšš¬¬›7ss}} /11.Îß_£Ñh¤Ò’’ÒÒúz.ÃPT.W*¥ÒÈÈÈȶm].’4õz£±¦&!!1±S§Í›×¯ïÜyòäéÓß|³yS»sç¶mk×VWWUUV^¼xùòÕ«¾¾ …Zݾ}‡ÉÉJ¥R©Pà8AŸÏãñxgÏž;—––™™™yõ*M;†q8Á»ïΟ?uêâÅË–mØ…@ iiéúõ+W6™ŠŠJKkjüýýü„¶mcbäòêêš£Ç Ã.]ºr¥¬Ìf³XL&A§¤¤¸¸ºÜG.—Ë5Ï—Ë ‹Šêëß}÷ƒ–/o‰4÷ì³ÿûßç/ŽŠŠÍ̼~=?_*‰¸ÜÐÐÐЀµZ­V«ƒ‚üýsrrsKKqÇI²]»¤¤¨¨ æÎ7®¾Š+@ Ò²´ê(v©©üô“Ãa·ÛíÙÙùùeer¹TJ’<žÓYQáï¯Õ f³Íf·ççVUá¸Ãa6‹D‰L¦VkµþþàH’%èõ&Ž×Öêt‹Ng08?G@%“H¤R™Ìl¶ÙHòÚµë׳³)Š¢ìö¾}ûöíÖM£Ñh4•J"q¹\.—K,f³q +@ ÒÒ´Ú _ýÑG ‚Øí¥¥¥¥‹ÓI’6›Ëårétuuât¦§_½Z]ípX­N§\.—+b±X,—oذyóÎp‡Ÿïeùi^¾øbåÊÕ«Áç™3gÌxñÅ›7³³ËËû÷ïÛW¥JJj×.1133#ãÚ5§“¢X,›Íå‚¢ @ ´<­TA‰0Œ Äb.W&C6[¯7ÊÊêêêêH²®®¾ÞáÐéÌf™L¡ðõ•É ­vÍšuë~ø¡1÷¶)™L&“H.—Ï/))+«¬üæ›/¾øè#»Ýn7›Y,G ˜;÷­·>ýÔû·½{÷èÑ©Sddxxh¨Jåë+—hµÿ, ‚wšÃÂBCe²  ÀÀˆ¥Ò×W£±ÛM¦ÚÚªªš†a?f5 @ ÇV:è U«¤´´¬Ìn¯¬¬­ÕëM&£Q§#I³Ùᨩ©ªª­åó©T¡P©V¯^³fýúÆÜ7™ŒF“éúõë×33ËËËÊtº3gΟ¿|Y,‹e²††úúÚÚþýSRzöqóV®üê«ï¿—Éär‰„Åb³¹\N¯7sssrrrüýCBž~Ò¤±cU*…B._±â믛V¢\.>_$‹¥Rp¦ºº®N¯OHHHˆˆ€Nv@ HKÓJ$K,–ÉärK¥*/¯®®­5Ìf1™Â}¯¯¯¯ZÝ4Õè§Ÿ._¾|ùìÙ3gNŸNOÏÏ/,¬®f±X,5M&«µ¡ÁhÌËãñ¸\‡Í>uêÂ…“'OºpÜÁj5Á_m-Ø­Ç ‚$¯^ÍÊÊËóñQ*e²û÷ïÓçã.|ã÷ßÿä“/¾h|®ýýýýÁN~~>>2E„Bäï/ççCq…@ @Z–V¤A$‹µZ.W ÊÊ**ªªP”¦IR&“Ëe2™L©ÔhV¯^·nË–ÆÜíÀ;¾þú÷ßÿ}ïÞüqÿþ‹¯\ÉÍJNCƒÉd±X­v»ÛFÃf³XVVVYYS“—WTT^ÞÐ`0˜LmÛ¶i¨VGEEFFE)•2™TÊb±X,P±~ýu÷îÒÒΟ¿pìeÔø\óx‡#—+2Ø»©¢¢ªÊ`¨©©©1›¡°B wmÄ0>_.‹[Î •Å’H““ÃÃ…B½Û5(*†„$%uê%—s8ð½@ ò¸ÒJ-HµµŽ_¼xåʵkׯge]¿Þ¾}‡:¨T>>¾¾ƒÉt÷AÊí€`çÎ¥¥¥¥;vüøÅ‹@)r¹\.Šr)ЦR„ \.‡C$étr8<‡# …|¾ŸŸB!—‡…ûû8N’|¾ÓIÓbqh¨¿¿^o2™Íl6›Íb{^¹’™™yäȾ}ëÖ 0räŒ÷O­\®PÈåf³Ùl±”—WT”•úû+Ÿã ×ÿ&(•*•\Ž fsm­^ã4}ïëY,±Ø×××W"q¹ †ÚZƒ îwýãHÔµëûïgd8ùþûññÏ>»iSUE5ç3¸Ü6m¦M[µ*5uĈúôéÚuùòŒ ï8˜NHÈ´i[·nß>gNFÆóÏ'%Íž–æt2Ì£-K(T*}|är ³Xjku:‡ãÞeÃã…†>ûì[oMœØ¾½Xܸ6ÖØL—.mÞ¼lÙ¯¿–•‘$”ÿ¦–Óó ÛiZ©I,Æ0Š’Éär…¢mÛøø6mØl‹Í–Ë¥R‰¤1wؾ}óæ¥KÏž={öܹ 6m:pXxüüT*…X~â⢣ÃÂz÷îÖ-!|Öjýü||ºuëÔ)&fúô§ŸîßêÔ§ŸNI‰Š ñ÷w8pœ¢4©T&CQÂaœÎ¨¨ÀÀàà€ÜÙå¢(ŠÚ¿ÿ?ŽÛºuǎÇ?øàÝwÿ.>I’$Iþüó–-»w F£ÝNQÅb±Ù&@aý/!DF¾ôÒöígÎètååçΔ—_¿ž—·}û¤I11·K—2räš5ééׯ×Ö–”œ9SPPQqãFYÙüï:4}°{?ØlÿçŸÿã¬,›M¯ÿñÇaÃÜkæšçú¦ ‘tîÜߟËýwËÿß¿§¦—Óòûx—<´ÚÈh,–Ù¬PÈd‰NÇã!†1 Ž B¡P¨R©T÷V“V¯^µjÑ¢#GŽ»t)==##'G.—ÉÄ⸸µ:11"Âß?22(H­–Éd2.W©T«E"»Ýl¦(w8pœËn'Iýí·ß¿v­¤¤¼¼¦†aÆéÄq‚ ˆ¾}“’Ú´iß>:Z­ÎÍ-)1™¸\@*5›Q”$ÓÓ/^¼yóúõ7nÞDQ† ûä“yó¦N]¸pùò[C8€5K'Ož>}þ_}UZêtb˜JõÄ_}µdɤI4½aÃOÄÅ­_ã†ZýÔS?ýôÇóæ­\9qâþý))ß}WQñ ãQT,îÒåÿûàƒ>}À0ŒÃ¹ß°¿©×7­Ðjû÷óÍ1cd²ººü|•jР Æs—¢Ollrrt4—[XxéRffm­Óyç]H27×n?þðáìl«Ee²¨¨AƒÆ92<üö¡~aáñã. H\Ü€ãÇÇÅÝzŸ´´ãÇoÜ {õ6ìé§oý®¬Œ Μ9q"+ËdjêŒ=‡öÌ3}ôË/ß|3~¼¿ÿgΔ–’$‹Åå²X(zëàÔÊþý_}øp6{÷î·ßî×ï§ŸÒÒôú¨¨çŸß¶í·ßfÎ\±â¹çvîìÙÈÏÏ£i»ýêÕµk?ÿüÍ7³Ùþ>…bñàÁQQcÇöèño—ÿ¿§éåß´ü>îå@ ­TA²ÛÍfƒ¢œN-+++3ŒFƒÁd¢iåóÃÂBBBBîüÕ›o¾ñÆ´iÇŽ9rüxAAAAQQ—.ññ))]»FGGE‹DàJ‚¨¯§i³ÙáÀñ’’²2ƒáÆÒR½¾{÷µÚ鬭Åq½AÜÎ}û&'‡„ÔÔÔÖZ,^¸pó¦B!• …@5âóy<K­V(¤R§“aœÎö탂|}ûô‰ˆèÓ'#£°°®îêÕ’’ššœœââòòÙ³ÿ÷¿É“µÚÀÀÐÐŒŒôô+WêêêëëëËËKKKKE"±˜Ïw:].Œ S((Š¢šÇaòTI¶F3pà„ ááÙÙK–Ìœùã™™F£ËÅf_¸päHa!‹µlÙ3Ïôîíïÿí·›7—–òùÑÑcÆtëÆå^º4gÎ??^Zj4ÒtiéÖ­Ÿ}ödzfíÞ=ztÛ¶2Ùºu âôÅáNš´hÑØ±AQ‘É„ aaÍy}S’’fÍzíµÞ½ëë7nìÓ'%eñâôt»Ýý½XܧϪU……ûöùù}ðÁ˜1Ï>ûÛoÃßß·¬lïÞ×_Ÿ2åÆN}|îea»½ª*#ãêÕŠ «õN¥‡Å’Ë““Ÿ}ö‰'BC¯^ݵë×_ËÊþÙð“Ç ëÞ]*=thÚ´Aƒ–.MM•H>ý4+«Gž=:¦öì™0á‰'¶m3™<Tee?ÿüÝw3f,YÒ­[Pw/ ÊÿƒÐÔòoj~äñ.yžÏGÑ={'ùošVþMËoi)‚´Îö@þ]´RI§ÓëM¦.]:ub±ŒF³Y&óññõU©$‘ˆÇËʺ~=3³¢¢¢¢¡A§«¯7KJJJŠ‹ £Ñj3ç¹çÆŒéܹmÛÀ@µXpÜnw:-‡ƒ ôz›ÍåÊÍ--­«Ïr«FÑÑáᥥ îA$M‡†úù‰Dr9ŸÏåv;I††j4|~h¨F‚ã‡ËUUU_o2¨TB!ŽÓ4Iæç×ÕÕÔ ‚h4ÑÑ<žJ"—WW;QVVUe4F£Á Ñh4 Ççs¹AAþþEF£¿¿Fƒ F£^o4•”˜L>>M(Ø¡¡¼üò—_„aÇŽ>|æÌŸÒthè˜1£G¿üò‡º\K–ÌŸáAhµqqݺM˜’’““•uý:ŽÇÆŽ½lYpp}}nnvvv¶ÃܧÏË/xõêéÓ[·VT„„tèСCd$†•–^º”––•¥Ó!ˆJÕ·ï°acÆ|ü±PXW7iÒæÍ99V+à ‡£Ñ¤¤|þùoŒáï_Rrþü®]W¯ÖÕ¡¨B©ÑˆD,Vq±Ýîr!›1dÈÌ™Ÿ|Ò³§Ñ¸cǾ}'O>Œã|~@@hhLLÿþII¾¾gÏVV–•yÂÆ·š*ɖ˵Z±˜$³³qœ¦QT,n×îÍ7?û¬S§3g¾üòäÉ>}fÏÖh”J°ö„¢œN— AX,Ãñv·BQ‹ËÅ0 ‰d2¡ðnª ›-+•\.‡ "ѽWp8¡¡/¼°hÑðá6Û?<óÌîÝ••o¼±d ‚Ü]áiêõM)ŸÀÀI“V¯~ûíγ³¿þºsçß~«­mÞ  š6xî¹ää7Þ8}Ú3(”J‡ß¼¹¸xåJw9cÇç …†µÖÕ"QddŸ>ááR\¼ysYÙ½÷Uc—ëúõ-[Ö¬ù쳌ŒÆì¿&têôþû_|ñòË›ü?úòoj~¤5¶òo£•*H¯½öÞ{lÙòí·2™FãçÑ»w÷îÑÑ àµÑh0¸—¡‚­Zy<>ŸÇk×®]»¸¸Ž —ËbÑ铉$’$’¤(†!I'…B¡JAŸ˜­V£AQŠ¢(‚ IK&“J‚š‚0™ŒÆ’‚èÖ-&F£áóQ Ä8.W*Űêj— ÉF£Q«}}Æé¤¨šƒÁb)+Óé@:#"‚‚¤Ò°0>Ãjky<Š àóù|6Ûf³X,EFµZ£Aw8âÊ•ÌLƒ2~XeÏåŽÓ«—V[^þÇK–,_~ìX}½Ë… ii7oòùááß~Û£G|¼¯ïÅ‹W® ‚`ŠRÔõëkÖìÞ½¿D"•víºh‘ŸßµkëÖíÝ›š*óù;/[¦TŠÅ‚ĵk»v­]{íÚ­Oư›7ÙìÄÄÍ›SR""üüX¬œ«Õåâñìß?:Ú`8zôå—¿ûnÿþ¼¼{Í£(Ÿ®PX,×®mÛ¶iÓÙ³……îáHzú¹s­¹B¢(—+ðxî•%\n›6/½ôÁãÇ—”|ñÅÀ¶k—šúÊ+±±B!—‹¢ cµÖÔäå54p¹½zuê¤Õr¹‡çç“$†Éd ÉÉZ-ÂßmåI–”lÛöñÇ«Vef"H^^aáÝJE•ÊþýçÌ™7/<üÂ…¹sÇŽ½yÓno×îÞyhÚõMÅá((8p`ÆW^9zô§Ÿrs[JÉEQ>_«íÚuР”±Ø³N$êÜY¥âp$7÷ñhæ1L¥êÓgâÄD¢ììO?=t¨¦æîî~(ŠaB’••ii'O<ØØ5H4=c†Óùà ÒÕÿG_þMÍ/Š"Hkk äßH« Ò€ RRRQa±ðùAv6h¾ÃÃÃÂ>ŸÏ×h4µA€Òƒã4Ý¿R’¿?‚8Á0 AQ·zÙ;v;Ž F#Ž#—ËbÉå"WZªÓUU‹{ 6§íÝ»}ûÄD‡ÇIÒ×W& )Êáp¹HAØl…ÃØl­V­>zôÒ¥ìl“ Ç ",,0P©T((ŠÇ«¯·Ûù|¥Ò``˜€­6 @­6™l6 “HØl??>¿¬¬¸Ød’Jy<),,.6›+*ªªŒF†AQÇ×W©t;éµ4&jµQQ"A”•ét #•J¥î¨c$YWg42L×®AA¾¾l6P„aêê *+N†‰ˆ IŠ¢i£±¢B§s¹„Çs:)Šaп¿À0™,001qàÀví¢¢""”J‘H*õõõóc³9œ’\Éb) AANwãFffiéý;i†Áñââüü†‰¤oß¡C'L¸qã·ßvï¾~½ªÊh¤¨ÖîcÏ0 Ã0(ŠaAHÈȑ˖͞ _=tè¾}••Ib"M3 ÃÐ4ȉݞ“³eËîÝuuS¦ÌŸ¿|ù²eË–-¹¹AAcÇ~ðAÏž,‚”–:$ygÎI²¢bÏž¯¾úúë{»Fñx‘‘3f,Z4h^¿fÍØ±{÷ÖÔPÔ½#•5õú¦Áátí:xpB‚V«V·k÷É'w[‡ƒ v^çÎb1‹Åç¿üòʕ˖ v/Éq¹êëúì³/¾Ø¹³´Ô­: ¨@Ð¦ÍØ±Ó§?ÿ|Ÿ>›­V>Z{DSàñ""^|ñý÷ûõ£¨½{gÍÚºµ¸øîê†q8‡CÓƒ[¾þÍòßÊ¿©ù¿h=íü;iÕ Ò‚‹ïÛ÷õ×Ë—OJÓ8^[k±X,&—Ëd|¾¿¿V‹¢›-––ØíMHˆÝ^Sc·3 IÒ4Ž»‘ËEQ6›Ãát f3Ž#IR”L&“ …|¾XÌç $)ö葜ܭ[ZÚ… .°X‹ËÕ¡C·n:!HEÅÍ› U†al6PÀ$>ŸÃ ÕhäòNœ¨«KHhÛ61Q­ T«M¦ÊÊü|£ÑjµXª«¹\  ¢C‡à`ÿ23³³++KKI’Ïçóùü†£‘ jkkkM& ãp¸\__•J«Ý°aóæ;g̘3güø–.s ãp„B>Eùü^½¦LY° W¯;¯²ÛM&6Ûí®Á08n±Øíž]_†¢œNàÚq¡cöì9mÚ7ߌ¥T^»vúô¹sçÏ_¿^P€ !!ÉÉíÛ£(‚€ûc—+“ñx c³™L8þ÷ÎT.WQQjêš5ï½GÓ£F½øâ3ÏÌ›7ag2]¿ž–vôèúõû÷Ÿ={ã†÷º’ÖäÕêp0ŒR9pàÇÏk·ïÜ9mÚ„ ¹¹$‰ ÉÉ,ŠR”Ýnµº‡4vû… Lš4eŠÃ1þK/M˜0iRLLNΉ_|ñÛoááï½Y[k6ÿ“I÷î³f½új›6%%7feÉå;÷ꕜ,%$(l6Šr8ññÝ»wêTRréÒÕ«¥¥‰‰M¹þúõ††¦¸Ç1 IšÍÕÕUU$y?%…Çc³»,Š64TUUW——ßkÍE FãíCDš6Nž|óͧžº¿‹]«nàÙaa“'üñüù¡¡—.½ýö¸qÇŽétw—{ ‹}|d2.W,NNkÌæÆÔ‘æ[ƒÔÚ俥˿©ùeù7•´VZµ‚xå•yó6lX¸ðw&LJ·+Ž;‡ŸŸJåçGQþþ"‘Ý^Sc±P”ÕÊ0,‹åÛ ®¯¯7™w:ÝV«P ðpÛ¶AA~~|¾LÆç³Ù;'';8n4â¸N§ÓÉd,Ö­k PÞæñ¬/š0aôèY,‰D©¬¬¬¨(.f’d‡Ãl¶ÛF6›Ë­ªâ󯰰ÐP…B«U(d²K—nÜ()A±Ùx<>ŸÏ—Ëe2¹\(”Je²õë7nܹóa–6M;Ž3 Ž;öí·~¸xqAÁݘPT$êÓ¬YÛíz¾ó¢wû—:iÒ!¡¡ÙÙ[·.ZôÁW¯Z, ƒ æç'ôïëïÆé´ZIA±˜Ëmœ«ŒËe0\¸pèÐ?^¸pø0—«ÑDD$'O:a“O~þ¹\n±Lš´n]F†ÁÐÚ,JN§ÁP\l2¡hß¾rù™3ãÇ/]š‘ÖbI$‰J%˜Låå:Ç6Ê0v{QÑŽï¾;sæŽî³2Ùˆ{ö¼ø¢Ý^XXT¬yMEÁVÉ$IAA/½´nÝúõ/½ä–·Ûç{ïmÙ²zu§N/¼0dÈÿþ‡ ¿~ðàñã÷í3ÿ\®êêÓ§W¯^´èôéû_)÷é:mÚ“Oúùmßþùç_|Ѹ(vÞ¹BBRRÆŒ9R«õÔ CµšËmí.v<^TÔĉëÖ}öY|ü… o¾9lØO?•”Ü[ x<­66ÖßA*+·o_¾ü«¯¬¯oŒ‚ÔœkZ“ü?Œòoz~ÿ-å@ ­™Ç@A|òÉ’%[·Îš5cÆÄ‰r¹DB(Š ÀY®¬,&& &E Âng³9›º‚ß«‘ÃápA€¨?\.Š ‰@Àã!à(‹Åá0L}}I µ€¢âr 8N’"‘B¶yè\. #6X9$E¸8??‘èüù¼¼âb‚0› ‚Ï—Hd2‡Ãb1™L&†A¹œ$Äd2Q´gϘ˜6mjjŒF°ÞˆaD"‰D©\¿~ÆŸ~TåLÓv{UUn®ÕÊçwêíãÃåTUýïyc‡¸(ÊáH¥Z-Ÿïpdgëtž9}‰âãÔj C 4"‚¸\FãÍ›ÕÕNç¤I±±11jõ••åå·;0 IÖÔœ;·aÃñãݺõíÛ¿X˜¯/›‘a0x»`¢¨LÖ»÷'Ÿ|þùüù±±µµ›6Í™óÑG¿þÚ”§=(8^Vvútv6E=û¬Ý¾wï¹s `ÊçGFöïËbåå­XQ\|ÿåóI\ܨQíÛ£hFÆÛoçåÝ-Ê›@;oÞwß½õVïÞráÂ{ï½ôÒÚµ×®¹ÝLF¯ß·oÆŒÐP•êÖ_J¥C†lÜX^¾s'—;qbXØÄ‰û÷›Í໦^ßzáó{÷~≡Ccb<ÃG' HikE%’öí,øå—wÞ‰ŠÚ¿Μ®]ú©¢â~A½Ùl­¶G.]4šúúÓ§·nݹóÈ‘ °ùÖ =\ùo©úÞ”òoz~[Oû@ ÿ^ °zõºu[¶LŸ>uê¤I&“ÁàŽ#—s¹† Àv„ã.‚à8A8`G åñ¸\¹\¡Jù|‹ÍæñX,š&O—¨Pðù&ðùb1—‹¢Æf;N'MßÏ¥G­V(8œ…B&3Íæº:£Ñb±Ûù|Ë5õúº:ÇÝ3ÑÁÁ Ÿß¦Z]ZJ’η߮YóÝwºŒI²¢â÷ßOª¬1bذ©SçÍs8HM­¬$‰D£ ަ¨Ë—øáìY‹¥©wg‚¨©ÉÊ2åò¡CìÙ33óÔ©š©4>~À€)S‚‚ijÿÀá¸víÈ‘3g*+_}øðO?0¦7l¸t©ºš¢Š˜ÍÌÜ´éܹš’D¯}û§Ÿž2eÈ“)#ãĉ‚‚ÚZ›Ç 4¨W/­Ö鬩9zôn3¦AdäÓOOžÜ¿JŠÉôõ×o½UW÷ðT#MëõÇŽ}ûí‘#$¹uë»ï.Zôâ‹löÉ“ ň~8{¶Drøð„ gÎxu0Ìǧoß—^zõÕöíõúœœÚZ.71q„W_0A3æ^–ËǧS§aÃzöìßAŽU«Ÿ•5-à gÏ~øá”)÷w±#ÉÂÂÍ›?úhæL±øæÍG=xDQ‰¤OŸ+¾ûnîܘ˜šš;÷î 0áµ×€-AœÎòò£G7lع³ Àf|~TÔäÉÓ§GG××ïÝûþûYYÍ6½µÊKÔ÷¦–Óó Ûiy3 àmc™6müø#ø|!I‚ (°çÃÕ„d0Šâr…B S*Åb©lêÊçs8 *Ms8BÓÂb€éÖYb’¤(‹ HÒn—HÀ²s™ŒÃAQ.E9’Dðp??>?'§¢‚aÊÊl6³™ÃÁq÷}t:«Õl¦(‚p8l6…B(‰ÄâÚÚ¢¢ÂÂÖR¾.Wié±ck×Îërù ]»>ñÄ›o … c±èõ••ii'NM3 E ee¹¹W¯šÍ`‡ š6›«ªòòÒÓY,°ë M[­55éé$i±¸\NguõÖ­7îÜ©TŽׯßë¯OžÌ0ÕÕ¹¹§OöÙO?åç?ñD—.6›÷.H8^Vöǯ¿¾v­ÝþÒKƒuí:sæ„ <A˜LUUiiÇŽ]¼è½¿GiéÕ«99v{ïÞݺ½ôR×®J¥XÌ06[YY~þ¾}ï¾»woF†^»Õ‹ÃÑjÛµKNV©$#céÒÝ»óòEpš®¯ß¿ÿÝwÇŒy÷Ý>úüó×_ÿàƒ!C¤ºúÔ© ¦M›3çÀ½Þ{EQ”H””ôÌ3O?=q¢¯/‹e2åä<8kÖðáK—¦¦ÞË‘¢ŒÆÌÌcÇ.]R(äæM½¾±ÃC—K§ËÊ:zôȧ¾¾1ëšv}k´ (JÓ4  (MS¨ —/ÿù篿²XW\ d2Ã@ Ó|®œeµæäœßß¿gϾ}ýý=ß;7nüü3 #‡9uꇾöZppfæÂ…«Vef6mß56›ÏçóY,šnhxðœ>,ùo©úÞÔòoj~‡ö@wÐ~øöÛ/¾˜<ùÅ_~™$ Âáp¯ñü >»Œûüíç3ðùÀýû÷î;ö©§ž}6>>)©cÇÆ'hĈ}ûV®\·®cÇÆ$X´è•W&LˆŽöó Á, ¶¶ºZ§ª8¯TúùÉå11~~\.Ã$I2̽=콤êj³Ùá – ƒÁdB’d˜¤¤°0¥R­ rÇys:qœa¼p!?ÿÒ¥¢¢ª*•J¥R«Á·Àê®ãñ0ŒÃQ*år¥’ P”Ëݼyûöݻ3ÒÓwìh|É@šŠ\>bĆ ……›7óx³gÇÅ=÷ܶmÕÕpHðx"÷é³jUaá¾}~~ÿû_HȳÏ6~ ’Xœ’òí·›6áøSOÅÄÌŸ_Qñ {ö\¿¾tiL ¸†¢Îž}ûíØØ¡Cw¤(.7>~áÂ?ÿ¼xñí·ƒƒ=÷jhøñÇûö5ëܹÖçšÄf‡†NœxèÐÕ«ï¾KÓ >ñĈß|SXxoEA,NN^»öòå~xòI…Âé$Išærår©”ÏÏÊzçzõúê«’’û¹óÁú@ ÖÍciA,X0wî¤Ij5Ÿa NÃÁ0T#ƒÁju8€Í‡Ï—H ‰ÅŽËE’$y« ”%†¡iwi6SÃØl8N’×®UU …@Àã…‡k4 …ÝŽãUWg³DvvvviiÇŽ!!þþ‰PÈátèŠ \®X î&ðù,Vi©D¢TR”Ó‰ãN§Ë…ã(*Èå›7?ÊuGAÇ×78Øåº|ùÇøáàÁš8TzœÁñ¼¼mÛ^}öl¡ðêÕ¦9ŒÙí/~òIŸ>)) SQa·S”ݾnÝ3Ï„„ìÚ%‘…,A44TWëõÀJ ZÜÜ/¿|æ™øø_~‘J…B.Ap¼¾¾²²¤¤®®µ®Úp¹JJvì˜0¡{÷3gŽÜÜÒÒ¿³¡ØlYYÃØåÎl¶ÛAØo’¡ÀIÒår»Õñx,‡£ÕJ¥ŸÏçs¹uuv»Ó©×Ûl6ŽSäËE’2™X,„„h4þþR©T*—›Íf3¢$I’4 Ö2g 8NÓ¹¹¥¥%%ÙÙ55µµjµVÅ@ i<Æ$oV¯^³fýz@*•H€mA8 ãñ0ŒÅâñ(ŠÍ®®6³™$=˪ì€ät¢(—‹aAÓ.ŸÏbq8w>Åáp8ƒÁhÔëë¿¿¯¯H‚Œ›LŽKTNŽ^ãÇgdäå;—““ŸîÀbq8n«@ im<ÖAnç‹/V¯Þ´éÅGŒèÙœ!š¦(¹\$‰ŒF³Çe2‘ˆÏçó9ĬA.Ÿ/|>‡ ááZ­B‘‘QTT[Ëå²X·® Ê’Ñh4šLÞçqÜá  J¡Je2ð™Ç ¥Rïœ @ Hkã_bAº? CÓN'ØÚ´¾Þj%£ÇNŠòl, Üí¸\a±˜ÏG‰Ä×ECCµZÇiÃÄb‰„ÅâóªDÓÁãq8,ÄÛ*…¢ÆáøùI¥BaRRp°¿×®1111,†AÛ@ ÒºùWY8N$é^ƒÄby¶‚u:ÇNš®©1™L ¹œÏçrAàoqAx<÷oÔj•ŠÃ©ªª«£iÎdjAðxl¶Pˆ "Øi‰$A¬¼¢¢††úz¯©¡iw8  ™L*•˃‚`t2@ ¤uó/TnË Ã‚$) ¬L¢iÇ0»¦QT&c³ù|G$ârA,;‹aØl.—ËÅ0†!I†!›$ýýýü”JƒÁbq8jk »ØšÀU\.Š2Lh¨F#GD„„øøØl$IÓÇ_½š›‹ã(ÊbURPà @ Ö̿҂DÓÀjär .Mƒ Þ<v›C!Ãp8\®Ë… Ãf³Ù"AŠ2L}½ÛîDÓN'à ‚°X …D"€£Ããv;E¹\|>Aà8A€3`ãY¹ÜÏO£iÓ& Àá(-5ŒF(j@ Hëç_¨ íÚuôèåËÞ¡AÓ‚¢4Í0<I"ˆÁ`0X­f³ÃA’¡¡Z­Här™Ív»PÈåbù åtòù†¢ŽcP†L&«Õl.)©®®­mhÕ²Ù ÃçóùTZSc044X­‹X,ËåPÔ @ ÖÏ¿ÖÅÇy<@ p¹\.§(’Dd2 CQpÉd6Ûí`Ÿ$¥R.bcÛ´ #½ÞbÁq»ÝbqߦqAD(ÌÉ©ªª©ÉÎ.)©®.-­¨¨¬÷x</(( @©¬©AÚZ__?¿ 6oÞ¹Š@ Òúù×F±Û²e×®ÔT½Þår:Ý·I’¢@,;÷D°£(’d±€3‚ Œa|>g·“$Ms¹l6' l¶Z-“)2‹Åb%%EF†‡ܳg—.QQZ­P(‘H$þþAAÁÁ>>¾¾p[X@ äñá_¤aëÖΜ™8qàÀäd†( IJCÇmG"— A‚¢¦²²¼\¯—Ë56[$R«ƒƒD&#$IÒår8l¶à`•J¥ÒëCBìv¹\ àóüü”ʃ¯\!O(”É Õ@ yù×G±CÁq.—Ë5¸\šÆ0Š²Û¹\šæpx<.—ÅÂq‚ (“Élv8\.‘ÈjµÛkj¸\¥2$D«  Óhl6“Éfãó«ªX,°l\› îïï¦ÑÔÔèõ‡ËÅá@Á‚@ @GþÅîÚuàÀ™3B¡D¢ÕZ­&šÍEàH4MQ55ƒÅb³á8†q¹Lf·ÛlNgm­Á€ã"‘L& r¹Pèㆠr¹\^PP]]Ue0fó·ß®YóÝwP° @ Ç‘ÿ„‚øæ›µk7oF@©4„Ç«­Åq†©®Æq‚(.6ŒÆââêêÚZ“ÉhÄñÓ§/^¼pÁ`Ðé¬V`A %•ª¼ÜlÖë³²òòŠ‹/\¸x1-íС?ÿLM…Â@ <îü'\ì¼Y³fݺ~ŸgÍš9sút’$‡ƒËe³& @«---+««£(ŠâpP”Ëår…BK*5 ‚¢Š‹+*ôúÌÌìì¼¼ÚÚêê²2™L¡ðõÄb…Š@ òøòŸS¼Y½zÍšõëïõí¢EŸ~ºp!ø T#…B«U©ª«ÏœIK+--.ÎËS«µÚÀ@™L¡Ðjï7@ ÒúùO+H÷gÁ‚÷Þûäðyժŋß}7<Üé 3M&£‘Ïçóy<¥ÒÇÇÇç›oÖ®u[¥ @ ÈãËh ÒƒðÚkï¾»xqAAqq]]xxDDX˜¿PPHˆ{]@ ù7ÐJ-H3f¤§ïØÑÚR•íùŒ¢$&Θ1{öøñPŒ @ ­NAZ·®cG¨r@ @ Gt±ƒ@ @ ¿€ @Z%(ÊãÉd~~>>b1‡ƒ¢-÷F«U(D" –<äq…ÅT*ÆÏO"a³[¦Æ47ÆãI¥J¥V¨ÕjµJ%Ÿßê!Ÿ9|øk¯ÍŸ?eÊO„†r8PÂþ;üç$ S«G:|¸¾þܹ¯¿îÖM ðþV,îßõêš½~Û¶gžQ«±P>ARÒ²eÙÙ6›Íæ>fd¼ÿ~L EΗХ˨QÇ·mëãóèÃÖ–žÈseeEÅ×_÷ë'C™{åG èÚuÕª³g½Ûï£Ñ˜š:fŒFƒýkZsK¥êÞýý÷ÿü3-M¯¯ª:w.77//-­¶ÖhLK;|øƒ:tHšcàÇb©Õ#F,Yríš^Ÿž^XXPpéR]ݹsÓ¦EFÞ>ú÷µ;ÍÛ¾5îýºû÷¬¬#G&NôókµŽÍöó8ðƒ~ü17×hÌÊ*-ÍÏ?s¦¸¸¦&'§¢bÏž§ž f³A™õè±ysUUAA~þW_uêä]jÉ AëÖÕÔTVºËÓ=^Òë32¶níß_$ò~ªPØ­Û§ŸÔ×ÿóñ‡úê«gÎäæêõÕÕ/äæž>]PP^~ýºÁ“óÃo¿Ý«—Bñ¨êŸŸ0iÒâÅ~8þsÏEE=º1\Ë´?@**ÒÓï|¿ÿ¤‰Åâry<.÷ÎÙHÅ0|ûOdz³/8°oß„„öí§N]³¦¼A¸\6E¹œ‡ŠJ$Ý»¿ñƦMß}7yrL ŸÓÓüyÂ0‡ÇãrÙìÏðù¿'Ï(Êáp¹RX¸~ý¸q}úŒݳgÏžîcïÞ3g?®ÓÑô¿£e²þýW¬X½ú­·bc/^|õÕ^½ºw÷÷ êÓ§wï 6lÈÍ‹år>ÿÁ[SK£5êwž|R©Ü¹óÿ “ÉbcFÞ½»¢Âåú··¿¬4_ûÖØ÷‹¢Âfóx\î?#4/\nLÌœ9?ü°{÷üùÇŽÍš5n\LL@@‡aamÛŽ;uêwßݼi±¸Ûwkâï?nÜ„ ÉÉRéýËÓ=^âr1ìÖ:‡¢(Êfóx2^BQ‹Ï‹¤¦fݺgžQ«Åâèh?¿˜˜gŸ}ï½7Ú·_¸ð—_Þ{¯O™ìQŒŸpüÆmÛÞÿÓO¿øâçŸ âQÉzKµ?@x¼;ß/îƒÔì0 I ' $É0°\ ȃÀ06[eåׯ—•Ý:|ÿ÷Àãõë×µ«X\X¸nݪU›7_¹RWG’‚ éé{ö¬]›ž¾gOó<‹Ëõñ‰Šòóc˜’’¼y³¡Áår:)ªºZ¯‡òy‹Ûµ{ã×^‹‰ÉËûøã¡CçÌÙ´É3Œ7¯];t¨¨èî¿•É xé¥^½äòãÇ0mN\.w8\.†¡(//¿tiÍš·ÞZ»öùç32¦Lyâ‰èh>ÿر‹އ™*ÏÏß»wÅŠ%K ¬ý÷€³Ê„ÅR(ºv>}á­[ÿüs×®S§RS×­[µêÿëÐA©üç3I(*•¶o?þªUóæ=ñDttbâsÏ}þùwß>|üøÖ­[·.^^"iËŸ8lØ›o~öÙîÝ©©»wŸ:uôè¦M[·~õÕìÙãÇ'%I¥îçðùQQ/½ôÅï¿ÿâ‹mÚxË‹¥Ñ úÆ_ýÁýú©Õ,VÓåóŸÖ—ÆËgSå¿åå§é4½þ6µ~µT{ˆ e·ët6ŠJ$jµDÒ8ŸÿÆ¿_ÂÂzôèÓgèÐÁƒ““Û´‘JY,™,&¦k×!Cî|_My¿|~|ü¬YŸ|òõׯ¾+°Ù~~C†|ðÁÒ¥ë×/^l6÷êµtéæÍ[·>ÿ|` ›ýÏÒ!„… >uê´iË—ïÙ³víK/ùúž9sù²Õš”ôÚk+V>üÅ=zÈåÿ¤ü³ûs8~~;?óÌóÏ÷úë?ÿ¼cÇ7ß HgÎüòËŽ;vœ:UYi·»MöAÇŽï¿¿uëŸ~òI‡ ©©»vmÞœšª×wéòÉ'[·>üþûmÛº+ Ÿöì³ï¿¿`Á‡>÷\XøýìÙ‹-\¸lÙ²e .Yòê«ÝºùúºK´éåÏãÅÄLŸ¾ÿéÓŸ>eŠ¿YÙ¡C»v>|ölU•Tš”çyËMOOÓ;±ØØ§ž1¢];«¤$5uÓ¦ ¾üòûïÏž¥¨áÃß{oÇŽ+ºww;°ÙJe×®O?=qâüüó¶m+Wöêe4?¾gÏ™3uuíÚýï›6ýøãSO…†‚ô°X~~ãÆmØðóÏ«VM™T]}î\ZZqqHÈK/mݺdIçÎÁƒ5<^bâ‚›7ÿúëܹÁÁ99;vlܸjÕºu^½êrÅÇ?ýôèÑ¡¡n“?›­V÷ë7qâ˜1½{kµÞe†a2YRÒСÏ=7fLl¬L¤¦Éç?‘ç¦ÉgSå¿ååÇS—…B&&&!!&&!Á}ŒŽnÓF«½õ7­þ6µ~µd{ˆ NgYÙž=7ff*•/¼ðé§}4jTp°PxonÚûe³}|úôyõÕwÞY¶lÑ¢_ìÕK,F°°gŸ3géÒ;ßWSÞ/Ãp¹}û>÷ܳÏvìèë+>yò“ON˜0mÚ°a‘‘|¾H”˜øÌ3Ï<3th` ›Í0MmZþýþ·Ú·ZY¬„„·ÞZ¿~Õª¾}M¦'î•þ–-.W£iÓÆÏ JK³²ª«)J(Ôj#"âã½[‰øøðpæörª­MMݲ%##>~âÄÁƒ5šÖ·ªŽÇó÷‹ó÷g±L¦òr£Ñm5oÉñ €¦ B§+//++)©©úôyúéqãú÷¸sÂæqŸ€¾…ÏïÑcÉ’Õ«ßx#8¸¼üôésçêêBC§ü{geòð7¶{É]ÅB±ëÄÖ3O±;Ïö¬³ÏÖóì:EÅNÄ"Qé’^X`»ãÝ÷÷Çþø g±(ê|?Ÿ[¹ÝÙÙyŸyæ™y&ž™°nÝ;ÇÀç£( ‰HdmÝ¿ÿ„ K—ºº¾é†2™þþ'.Z4~¼¯¯N'ÿWÛ¿ Gîßÿ×_z½N§Õ*•r¹D¢PÈdb±B!•ŠDr¹TZY)—K$••eeEE••¥¥……AAAyyII~¾PX\œ—'åæ–•æä˜ó”H**JK,¤®ŸAìí‡}øðýÇ«_/]3Æ|èFkÙrÏžüüìì/æÏww¯n dr³fë×?|(“=y2~|µA|³!xy­XñêUvvZÚºu>>ïî}³<Áɓݻ[YUϸ»Ï˜qõªR)ýóOÿþµq‘j—?Þ¡ÃæÍEE*UNNeåÍ›îîo6„7a±:u:}Z(ÌÌ|øpÒ$‡j3‹¢ÎΓ'_º$——•íÙÀd¾Ý$­­‡?^&+.ÞºµcÇ´\þtz׮ǿ|©R¥¦.^\ÓyŒš–çË¢NN“&]»&•¦¤,\èëkž›¢Ñš7ß¹óõ뜕*=}éÒV­ªKÂbõî}ð`y¹X|üx¿~l6¡¨£c`à£G EJÊիÇWÏ¢(Ÿ?~ü;*Ueåµ;Ä ÃÖÖ‘‘™™%%GŽøûJ. F§NçÎ … 'Ovíú¶ÛѨÑÒ¥2YbâÌ™æÕ%KõÓr}®~Z¢ÿu¯?Tjûöû÷ÇÇ¿ßReg§§ïÜù¶–[R~KÛ×çØÃšC ØÙõí»iÓåË*UNNYYtô¦M“'·nmv¬?ßþ¼ÙÖ23??þãîkR¿0lk;bÄùóbqvöÊ•­[;8ôêuùrRÒ•+ÉÉÁ¥KAAîî .Y’˜˜œ1b„µõÇ,úûíC]×ïfß,ï,)]ËßÊjèгge²ÂÂM›:t Ó©Ô¶mwî|ôH©|ÛJÄÆîØÑº5…ReŸ++sr? jذoßààè臧Msr²²êÓçøq‰¤¢¢JžÕö6-íâÅž=ß–q•ÊåÕã%K!‘4øý÷ÄÄœœ‚‚£GûömÒ¤Aww_ß·ݺ5::=]¥ÊÎ^½ºM›j9ñI5\nŸ>ááJåû$ðíOªõA" 6ÌѱJBbo?|øñã"‘BqéRPPÕ'Tjûö{÷ÆÅ©T/_NŸîåUõÄTjÇŽÆÇ+±±uaOþ ~Ø$ “Jƒƒ{ölÚ”N§Ó==ͯ<ÞàÁ÷ï¿é÷¢(—Û¨QË–66*UFÆë×&“µ5ggÇãñxl¶V›•UV†ãNN¾¾ŽŽŸßD§‹ ‰‹«f>0¬¤äÁƒÈÈÜ\"ÑݽeK‡Ï 1Y»üE¢³g7l¸~=/Ï| à]óæàвeÓ¦tzYYtt|¼H„aÕ2®¨ˆ‹+)a0¼½Û´yßì˧°\þ$Ÿß¡ƒŸ‹%ܺuçNF†Z]4E­­[´èÛwΜõë×­û矓'wíÚ½{âD"‘Je2©Ôw/……—/_¿žšªRU½c0TV–”ÈdÂd²Ùd2‚É..Í›»¹áxVÖ•+11"Quí …áá§O§¦~^¹q\¡HM}ô¨°Ã4hÁ‚Å‹‡ ññ±µ%‘¾ì–1Kõ³fé?W??¥ÿ_õjÍ6»Ê^Ñétº——Ïüù ï×òO•ßÒöõµì¡ÑX^¶lÙðážžmÛÎ{èXÜ­Û®]ݸ±wo¿~U›¶êÚþXZC*U~~F†DÂb¹¹ñù<ž«+—[YùüyLLy9ƒáéÉçÛÛ{y±Ù2YJJ^žZ]}:ÕrûPõûãÙ·ÚS“ò×µüqÜ,AQ† &.nþü®] :ÝÓ“Åòö^½:)©ºM¼É$“ÅÆ9Ëãõë÷éi ºÄÆfäÈ={ž={õ*""..,lÕª~ý”ÊÐÐiÓܶ->¾ZÎ5×0>©¹&%%9UZZ%!“©²2&&,,- Çýý]\ÌÚ¡Ñ$%ß½+zyýüsß¾æøˆTª—×àÁ,VjjHÈÇÿróm‚4|¡ÑØl †ŒÁƒCB"#~7•DRVöy7t`˜J%Êåo+†)•"‘R AT*›ýþ.².óǰâ⸸¼¼/•¢(ÎáÐé¤ÑˆÅÍÛ¦ÃÔj™L£ Íʪê~ƒ¡.å¢tº ƒãryi©Bñß7SÉËkڴÇ=Ú´ÉÉ)*êàÁÛ·oÝŠ‹ƒ Ÿ^½† 3o{[v"Qn®Xü¶´L&“ ÇÍñ†`‚„Ba±¨TW©*+•Ê7#™™L*UE…TªÕ~^½>%eË–_ýåƒaùòµk÷ï¿qcñbC(Œ >thÕª•+ÏœyòäÍÎçCµ‰ ïåh©~Ö4=ŠBPíõóÓú_¿ùtù-m__ËV?L–’rëÖêÕC†ÄÇ›;æààíÛƒ‚öï¿ûöœœºµ?–¢Õ¥¤#ˆŸ_Æ^^îîdrqq\Ü‹&Ó€=z¸¸89Y[ÓhBá©SÅÅæz©}¨›úýí[m5³få¯[ù r¹X¬ÕÒhvvïø48®P<ÆdnÞèå%™õøkËÇ‹‹wï<¸yóeËRSköû`|ò¥0™ôz‰¤¢¢zc¢Y>J¥H¤Pà8…ÂáP(Uý¯Zœ|éÒÕ«åå#GöìÉã=Õ£Gß¾¶¶99‡‡… ßG!à }Rq4¹\­Æq…"4´_¿Ž'LxüøËûüB¥Z[ÿûŠB¥ÑÌÍ[«•˵ÚÚò­]þ8Žaz½ÑøáÈdÒj•J‚Èd‹L~ÛÅB2™Á “!H§«]ù-—?™¬ÑH¥j5Ñé¶¶4ZÝŠ>ƒÑ²åÒ¥üáç÷ìÙÔ©Ý»uñ¢9$3Š:;³ÙÓ¦}H*&“Ñhîn? ŽëtJ¥NÃ|>—K£!Éåæa˜Báp˜L2†ÍÝ^íÑé‚°°M›fÏ Û²…JusëØqذի^³æúõ£G++›4:ôöíòòêïüÛ"8GGëýGV-ÓÏš¦7™ ¨öúùiý¯ßÔ¤ýZÖ¾PôëØÃwÁ°òòˆˆ“'ããuºýýÍ¡8²²êÖþXn¯äòüüôt¹œÃñõõõuq1™òò.]ÊË3 '§-|}ét™,;;'ÇÜNkoê¢~TûV»ºþtùëZþz}qqJŠ@@$ŽÕ±£»;™|ëVb¢e:juzú‰W¯¢èõëãÇ7jD"AP|ü›u`vùPôÝ Z1¿kNSíŸÔ!Í«ž0 AJ¥Y¢bîOaX§+(Ðéªå£Vgfž9sùrEÅ„ £FuïÞ¦ “Ù³§£cNΕ+aaßOŒÕO¬H\¸rêÔ… gÏ_»vùò… ×®]¹rñâõëW¯^ºô}ˆàã`˜Xœ‘ñâEE“éïß½»««%ñçqÇ«g”>–†©Ô6môñ©Þ㊢öö:ýô“‡‡Á——˜(Ô¾ÕUþz½@œœ­ÕòxmÛ6n\ÍÌ{¨I??­öõë—/ßÎÇqÃL&6Ù÷ÏŸY.®¬,..%E«uvîÕ«K—ª…ášÔÕ§Ëc¹Ü);;77C&KOÏÍ­¾A¬¬Úµ0 AƒÏ9«Õ&%ååÁ°—×Ï?ûûWåF.·}û¡C½½¿tô4“I£ÉÏŠ:{v͚ݻÓÓÉä&MüüœœÌ[p\¯W©ŒF2ÙښŪ–=•êáÑ¿÷îVV_B?kš¾öúi)u£?õ;}ž=¬ Âbyy5nlkûïv‹ T*—Ëd‰F£F£V8^ÿêW«ÊÊ8ÿ6mlmŠÜܲ²â⌠™ÌƦ}ûV­¬­…Âääâb­¶îíC]××÷cßê¦ýÖµüõú¨¨;w‡Q£¦NmÕª6·étéé§O_»&‘xzr8o®õ™LZ­L&“éõD¢£cÆVVÕ«TÂdºººº²X&“I$_cÂrùÔ­}øÖÇ'oZצM‡õó«>Ó Ã\®¿ÏžÞÞ0\Tôüyaá›ÛµÚÔÔ°°òò-¦M[»vÆ w÷ׯϞ½w/?ÿ¿v÷¾ŸXA>|ôèñãÍ•cä`þûM¾Q|µ:5õÀýûÓÓ'N\½zÿþd²íÛCB’’Ôj.·qãÖ­[µ2®^]½úСìì·—†F…B J!ˆÇkß¾{÷€€Î ¹Üd’H^½zú4'G¡¨Rb³GŒØ±#8X*=tèúu±¸I“iÓÖ¬iÙR" ŠŠ’Jk/íºÊÇ¥ÒgÏvï •JoÝÚ±cË–¥K!(8øÅ jÖlÆŒíÛÛ¶•HBCÇ‹Žþwþ:]YYALÆfwé4bD§N&Sv6‘hkK"efÞ¾)èõ–Ë_.‰Ù±#88'çÑ£… /^JeNNLLI Ÿ´dɘ1QQûöeg[Yõë7sæêÕ-[ÂðçÌaXiéýûû÷GF._~ôè‘#û÷oÙ²~ý•+nnC†ÌŸß¾= CÐçu\tz·nûöíÛ7~¼@pëÖÅ‹¿~­P0™>>cÆL›Ö¨‘^Ÿž~øpI‰yÞ†‹‹ccsrPtûö%KfÏ ‚á„kР¹s'Mâr!‚ÊÊj¯Ÿvv–¤Çqª­~ZJ]èOý³oŸckÔ%lm>yòÂ…Q£²²BB¾~=%¥¼œFóõ Z·Îß_­¾woîÜçÏ óŒúU¿&‘¤§gg îîÇ[['$lÞ,• …r¹Dbmݺu‡z}hhn®XŒauo>¯ÿú1ì[ݶߺn/ZmzúÞ½«VEFN˜pìØ¡C7nýµoßýû,V›6ýú™]Ô'O>–‹^Ÿ›{ãÆ±cÉÉóæmÚäéYý‰R™’òè‘V{üølÙ²~½Züì™Áàí´q£ŸŸVûèÑüù Je}³mŸ7>©«ú­Oã“*L&‚áÖ¬ Ù²ÅÑñìÙü|'§Ñ£W®ìÑA"#. «>T­yW®\ºTZ:aÂܹÎί_¯]{ófQÑ÷ãA:hPÿþ½{7oîççïaöᥱjVFó¿ÙÙYY™™>>Mš4mºÿÁƒ‡×¼@ …BQå4Ô D¢•UãÆÍšq899·nݽûìYeeUÅŽ»{óæ..Éýû/>~œŸ¯ÕbXeå³gááÑÑr¹›[¿~¿þ:zô„ #FtíÚºµƒ†åä>ýûÿòˤI¿þÚ¯_—.^^B~þÇ÷î½y»¸%å± £Q$Љ‰46l„ٳƒ‚ºuss /_^°`íÚW¯èt§¤$<üÆW¯D"g0ÜÜš6uqÑhbcÃÂ""^¿®2“Â`8:6mÚ ^sùòãÇùùR™ž¯Tzzvï>räðá]ºxxTV^½:þ<}J"Y[K¥^½úìYY™åO`2i4 —Û¶íÀC‡Nš4mÚ¨Q£G÷éÓ¨†ÅÆ92kÖœ9.¤¥©T8n2eg¿x!»¹õé3|ø¯¿Öºµ•Ujê±cóæ8PZjeE ¤§ß¸–•¥PÐh–ègmôÙrý´LÿëVÌ3µîî{x¨ÕññW®Ü½›—g–õͺEå·´}ÕÞÖ “ËÓÓ_¼¨¬´·ïÔ©OŸQ£ÆŽ4èçŸÛµ³µ ¯_ÿûïI“æÏ¿v-7·êìImí¹=}¨­Õ¾~M& #]\š6µ²**ºyóìÙðð„©”Åòñññ!’’BC/^¼y3-M©4™,µV×õû£Ù7Ëê÷c:ó¾òÎø¡fà¸B‘–yíZz:‰ÔºõàÁÇؽ»¿¿½½TuöìñãGŽÜ¸‘’RZj00™^^-Z8:ŠÅÞ¾]U~“I©,,‰lm}}ŒüüÛ·/_~ö¬¬L¯W©22ÂÃãâ¤RGÇöí‡7nèСC»tqt”HîÞ=p`úô9s.^ÌÈx3äˆ%# ÅÁ¡IOO)99"âæÍÄD™ìã§Y¿Îø¤ *ÕÓsܸ z÷ÖéΟ?r$4ôõë7ÇbßöøEY,/¯¦MŒÈÈ%Kþþ;'§sç æÌ1¢I£ñáÃ&Mš9óüù´´wë×hT*µÚ¦MG7ŽF ]¸pëÖ'OªÇÓßómþôC¯ßb˜ïúFUM™,.nÏž¶m©Ôo+àkê'Ðg|-¬¬úö W(RRÎ ¨ûë?¾H$/¯åË“’23_½úㆠ?/f}l±Þ‚Læñ¼¼ìíD¡ø÷šÎ.OÏ~ýFŽôð.^¼r%?ÿ;¸ö_€(v€©aéS7múûï‘#5òòòóóöæóÓÒœ4)-M£2KÉÓsذAƒ<< oݺr%'§þ¯ý|>á ™£Ø}èÓŸ4hèP *ŸƒÉ$?zôÛo}úäæªT©©_Ú¯ëü€¯©Ÿ@ŸPW`˜D’œüðah¨Vûø±D²n]ffllllFFEÅ÷èÔVJee—//^Ü£GhhNNZÚ÷Ùƒ-vÿ9ƒH”œüäI]ÝäP×ù_S?> nÀ°ŠŠ'OnÜ8qâã‘ÿ~t)‰D©©/^|ßý0*Ì ¢P<=û÷Ÿ;wñâ ts#¿dî‚£c¯^ãÆ-Z4oÞ AMš0_ö‚¯ºÎx&“Ùl;;''GGkkƒH¬}3ÿÇçs¹túç\5 |9€½€à AŠ¯ïØ±7®Y³xñøñ^^_6T!‘èî>|ø¼yk×nØäïÿæMÎßBþu ‰äèØ¶í Aýû7mjmý¡A0•Ú¼ù¶mééÉÉ÷îcg÷ß?•ڮݮ]11*•J•“óî«T1d÷íÔħ@Q›V­ºs'.N,bc33³²ââ„B©4..<|õj??&óK QÔÞ~À€M›^½‹_¼ÈÍÍɉ//<ÙÓóßS5ÓŸïW?Œ€€}ûJJŠ‹÷ìùé'ãkØŸ·©_ö–HtwŸ;÷éÓ¬,…âéÓ÷µÔÅÒjSSÏž]µêÏ?##sssr¾ìa3ƒ!?ÿòå½{ׯÏÌ”É^¼Ë¿l˜ÈºÎ¿î€a&³C‡ NÚ¹³  _¿F~ÿ=&F¥z7d2‰D"Õ—A0 ‰$åæ9òË/'ÞºUVV}9†)ÅÅ••ßG@Pf³vìØ·oÉŸ˜˜9s:w^·îâÅü|"ÑÓ³sçŸ êԉáP`‚ŠÏ9•ˆ¢<Þ AË– feuñâôéîî“&=z¤×ÛÚ2™ZíÛ—àÕT~D¾Wý„a!Éd Ã>×1©þÔ/{‹ã†ã(Š ‚ãf23Áðe¤Õfg_¿¾cǦMu‘»ÑX\vüøæÍaaßbþ€ƒã*UIIjjbbJJaaíop¯ßÉÎÎ?ýÔ®ƒ‘›{øð®]ÁÁ/_–—›£ù¼xqíÚÁƒ/^\»öe~‹D²¶öò²³Ãñüü'ÒÒD"£Ñ`À°ÒR±èÐÏÿžúfo1L§«ªYƒÁh|~X‰Löð Ú°aÖ¬®]­­a‚p\©|ölûö x7h!‘hkÛ¹óÔ©³gÿöÛÀ¾¾ööTY™pýúÑ£7:ôìYyù›C*ÕÇgÞ¼;¦LiÞœJ… ÒjssÿùgÙ²ýûcb¤ÒꎌDrv \»vòd[ÛK—Nzý: `úôéÓ{õrw'‘‚'O\µjïÞ«WóòªKU·ùÃ0ƒáå¸bżyAAíÚYYÉåññ—/oÙrô¨L6pàÌ™ ܾ½råÁƒqqr¹e2Šr8Í›wíêççíݲ¥•@¡íÚõêÕ½;‹¥ÕB†ÉåÙÙ11±±EEoÏè’ɽ{/Z´hÑôé}ûzxÉ’Šr¹íÚMœ8{öœ9Ƶháä„¢"QBÂ¥K®]{äÈË—bqõœz]c¾3`ýúY³Œààµk##]]§M›;wÚ´Þ½=î´æí†©Tw÷Ú´ñö¶µõòjØÅBQ6ÛÛ»]»>}úö•J †7õAj®?nn3g®X1}:І„üþûþý"Q×®+V,\8l™õ矫W‡‡“ÉãÆ-]:s&•zþü²eûöåäÐéíÛ2uj``çÎmÛ6iâìlmM$j4Åʼn‰{÷þùgppttee•Dë¾~ëšš×…âå5mÚÆ£FnÞ|ôhVVÕ3ñx}ûλbE›6 þù矅(j¹ý1×ñĉ«WÏšèçÇb‰ÅOŸ††îÜg^9z[÷mlj^_–Ú³u«¹½µTžµ³ÿfpÃôújékj |ßü°gL&®²²¨¨°0?¿¬ŒJíÚ50ð—_ßÝÅM¥¶jµjUHÈ;ë×ûù‰D—.GDˆÅmÛ®_¾jUÓ¦4ÚÛùkµBaAAQQI Žûú>~|^^4Ú¿·†VVíÚŽ³zõéÓgÏþýwçÎRéƒ×®EG——·h1}ú©S'N îæF |üa˜ÍîÞ}çΣGûÍÛ[*}ö,..+ËÖvܸÐÐk×V­š;wâÄ=<=©ÔÚœ:¡PÜÝGZµjÅŠ5kÆww7Ëwöì V®Ü¶mÛ¶•+7mš3§}{[[Â[î;Šúú.YräÈ®]ݺÉd~X>drãÆ‹‡‡oÛÖ¡ƒFóðáå˧N…‡Ëå;oÙòë¯NN„Ïž€aÇóööõõööõ­zmÔ¨aC>ÿmÙ‰vvþþ#Gþúë/¿ÌŸúthèÞ½={êtÑÑçÎ…†††>~\R¢VWmÖ±´üuû¼CaáµkÇ'%YYýùçÚµƒ¹¸Ðh®{ËÚ `mݵëœ9Ë–mÛ¶aäI;3äî>jÔ¼y[¶¼«–莓HNNݺ?jT«V¶¶Tª“SÿþãÆ 6zôäÉýúyzR(tz³f#GŽÙ·¯“€ãD&ûø >`@‹(šŸqêÔ±c;wþóOL †õïÿÇ¡¡;vtèÀfWK në·®õÓÒú²·ÿé§1c† é҅ϳ”Âf7oÞ·ïøñC†øø°Ùæ ±–Úµ³ûå—cÇNŸÞµkÂgçÒÒØØ¸¸¼x0i’£cU·Œ \nÿþÁÁ *•JuéÒ˜1ööŸs†­­‡?^&+.ÞºµcÇêR}ž|h´–-÷ìÉÏÏÎ~ñbþ|w÷j‡—LnÖlýú‡e²'OÆ߀£fP©íÛïßÿþCðÙÙéé;w¶lù¦ÃL§wè°ysQ‘J•“SYyóf` »;‰ô¡çµ¬üuÿ¼A‚]ß¾›6]¾\Q¡Rå䔕EGoÚ4yrëÖUá/Ñ^ªê:3óñãñã?£&úö¶#Fœ?/gg¯\ÙºµƒC¯^—/'%]¹’œ,\ºäîÞ°á’%‰‰ÉÉ#F˜×’?Š:9MštíšTš’²p¡¯ou8—º¬ßºÖOKë‹ÁèÔéÜ9¡0!áäÉ®]ßÔr"±Q£¥K#"d²ÄÄ™364KÀ²ö‹¢ŽŽ)))W¯nk[¥(ÊççNF†JUYyà@@À§‚4|¸¾,±?–Ú[Kåù9ö†­¬†¿w/'G¥ºwoÀ€ë/jˆb÷ H$‡–-›6¥ÓËÊ¢£ããE¢7;WTÄÇÇÅ•”0ÞÞmÚ¼oõÉ /_¾~=5µz[™ÁPYYR"“!“Éf“ÉŸw0¹&ù“H|¾¯¯§'‘XPpçNttõÆA“I"‰Š:sæùóÿêÎäš”E¹ÜFZ¶´±Q©22^¿6™¬­y<;;Çc³µÚ¬¬²2wròõutüÜx…8þêÕš5>>l¶§'N§›_½¼||æÏOHP«ß÷‘èìÙ ®_ÏË{ÿ&5KËÿµž×h,/ [¶løpO϶mçÎ=tH,îÖm×®GnÜØ»·_?ó@ðk¶—šÔJ•ŸŸ‘!‘°Xnn|>çêÊåVV>S^Î`xzòùöö^^l¶L–’’—§VWÏÀ£¨µu‹}ûΙ³~ýºuÿüsòä®]»wOœèáA$R©L&•ú¾Öø¥ë·®õ³¾Ù72ÙÅ¥ys77Ïʺr%&F$ªZwÃ0¡0<üôéÔÔ÷ç^»úªOý…åöÿÍ-vF£^a` ¾ HÃ'@Q:áÓ!H£‹5š·wyc˜Z-“i4D£YYUÝ×b0Ôæ—0L$ÊÍ‹ßþ¶ÉdŽLÃòy³ƒ5ËA¨T‹FÃq¦²R¥z;F“Ñ(“UT(feõµk¢¦å§ÑØl †ŒÁƒCB"#~7/‰¤¬¬®nðùø3ÇŽ{– KËÿµŸÃd²””[·V¯2$>>))8øîÝààíÛƒ‚öï¿ûöœœ¯Õ^j†V[T”’R\Œ ~~ zy¹»“ÉÅÅqq/^˜LôèáââädmM£ …§N›ë…Dòòš6íðáG6mrrŠŠ:x0$äöí[·ââ ÈßßǧW¯aÃ`Ø_±®ë·>Ú·ƒ Ãï/wMÛ/…ÂbQ©8®RUV*•oÚ“I¥ª¨JµÚ·Ý€Ú×W}’gíì¿Éd0†ad4~q3 >¤O`2iµJ¥FAd2‹õï9<!“ 2‚t:¹\«ý¼Êd2ë2PkMò7™4…B£aÍÎŽÁxûH4Š25(ý·å—ËÕjW(BCûõëØq„Çß¿šóõ©šñýð3XZ~ý¯žÃÊË#"NžŒ×éô÷÷öf0`8+ëëµ—šéŒ\žŸŸž.—s8¾¾¾¾..&S^Þ¥KyyƒÁàäÔ¢…¯/.“egçä˜C63-[.]úÇ~~ÏžMÚ½û¨Q/šCb£¨³3›=mÚ‡Kýåë·>Û·»B‡ãèÈb}È:Ô¤ýâ¸N§Têt0Ìçs¹æ>U¡´a˜Báp˜L2†E¢ªo|N}Õ/yÖÆþ«ÕqqË—ýü3ed€ ÷ð¥[ì>^/$'ggkµ<^Û¶¿y1 ‚p8Mšøù98hµ¯_¿|)Ôå\ø×A§+)IJJKÓjÝÝ êÓÇÙ¹ê, ³ÙmÛ¶nmŽâô¹à¸ùæFýÜõ±*0L,ÎÈxñ¢¢‚Éô÷ïÞÝÕ•Bù–äoiùëþy„ÅòòjÜØÖöß§j„Jår™L"ÑhÔhÔj£Ç¿^{©©þhµABBY‡ãïߦ­­B‘›[VV\œ‘!“ÙØ´oߪ•µµP˜œ\\¬Õšávvnn †L–žž›«PT bÄʪ]»4øœéú¦Ÿ–׎ëõ*•ÑH&[[³XÕ:A¥zxôïß½ûç­-kµ……IIyy0ìåõóÏþþÕ¡0„Ëmß~èPoï7kºöõU7öçëö(Êf7hа¡““›[Æ®®\.¸.¾ `éà¸TúìÙîÝ¡¡Ré­[;vlÙ²t)¿xA͚͘±}{Û¶Ihè¸qÑÑUÁ^„ÍnÖ¬gÏAƒZ·ærét/¯ èt¶µíÒeäÈ#L¦œœ„„«WoÞÌÈË-/SÝæ/—?{¶sç±cEE‘‘6œ={ýº·÷õë©©Lf»vƒûûcŽ™U.®¬¬ @&c³»t 1¢S'“);›H´µ%‘23oߎŒ>Nú]ÔêÔÔöïOOŸ8qõêýûɶo IJR«¹ÜÆ[·nÕÊ`¸zuõêC‡²³µÚú¦q––¿®Ÿ—@°µ<øäÉ FÊÊ 9|øúõ””òrÍ×7(hÝ:µúÞ½¹sŸ?W( ÇM&KÛKÝê†I$ééÙÙƒ»ûðáÖÖ ›7K¥B¡\.‘X[·nÝ¡ƒ^š›k«ãJeNNLLI Ÿ´dɘ1QQûöeg[Yõë7sæêÕ-[Âðçm ¬_úi¹}CââØØœݾ}É’Ù³ƒ‚`8!Å4hîÜI“¸\‚ ²²Ú–ÃJKïßß¿?2rùò£GÙ¿Ë–õë¯\)(ps2dþüöía‚ªW^>§¾jj,³·–Êós¦›ÈdgçQ£¶nÝ´iêT:s¦[·Û·++ëËŠ9|»é“à¸\þèÑ¢EcÇNœ¨P,_¾`Áºu›7O™‚㉉gÎ,XЧϺuOŸÊdUÃ=óLáO?9j”›‘AZí³g±±EEÎÎ}û˜•¥PÜ¿ûvF†\ŽaJeFÆ£GQQF£@ ×¿9hÄ0…"77**2†ÎüŠÖeþ8®R=}ºjÕÈ‘ …sçN›àåeoŸšzêÔ¸q'Oúù…„\¸àåõùN’JõüùÞ½óçïßïà°lÙÒ¥Û·Ÿ>ã2YJÊ©S ܽ)@åòÑë32vî ê×O§ûý÷+‚‚–-;|ø·ß0L")(HO¿{wϵºöw†`˜Tš–öäɽ{:@P“b&‘df>|©P”–~Êé³´üuû¼z}~þ?ÿL›¶q#—»xñȑӧÿùçðá,–ÁP^žœ|ኽ{¯Y&Vý‚¥íåM9}¸®k«?¤Ó½~}ëÖ;ÚÛ“H‘‘……z½ZM"=xpûvT)·oT¹"ZmFÆÖ­cƬ^ÍãíÜ9yòÞ½'Nàx^Þýû§NMš4n\lìÔ©¿þ*‘Èdo¿¯Ëú­[ý´Ô¾aXiéùó³g¯[סÃÞ½S¦¬\¹}{çÎYY·o=:rä¬Y>>¿ýÖ½{aaUXsKÛ/† ….Lœ8a·sçŠS¦Ì›7s¦Htèðá£F5iÒ¼y«V5/@ ˜»¥¯‡•Uß¾ááÛ¶‰Åƒ·m;rdd$ØÍý>Øì>}~ýúÜ9 %(ÈÍmüø7¤R À÷8ƒ‘É<ž——½=‚(eeÕ{Ø\`˜Jµ±±±a0ÞÜÑN$::8cFûöJNNL 8 øþø!·Ø‘H NºiÓßÙ¨‘——ŸŸ·7ŸŸ–vðà¤IiiÍ®D¢»ûôéçÎ=}:w.™œ‘‘ž^^ANNM›6ibg——·oßÏ?Ÿ?Ÿ›ûí‡¤Þæ‡t0L"IN~ø04T«}üX"Y·.336666#£¢Âò ßz}zú¶míÚ=~ܪUÓ¦nn\.™¬ÑüýwBƒOŸ&'WVçð=òƒ:HOžÜ¸qâÄ“'@ÞŽët"QZÚãÇááii‰~ À$ø?ÀAÞ “Él6Ççs¹tú—¿~±®óÿv¡P<=û÷Ÿ;wñâ 4‡UþrŽŽ½z·hѼyƒ5iÂ`|™ B«j•@`0llìììì˜L"ñKæôíÛA¨T++;;>ßÊŠBA¾x‹¢ †­­¹^Édä‡éÏ>€ºæt¨ÔæÍ·mKOON¾woÌ;»šw*$’£cÛ¶ƒõïß´©µõ§²¥é¿>$RÆӧ?y’—wüx` ÷©2ZšþÛEíí Ø´éÕ+±øÅ‹ÜÜœœøøòòØØÉ“==¿ÄP½®ó¯ßÔD(_ß±c7n\³fñâñã½¼Èä/Y"ÑÝ}øðyó֮ݰ!(ÈߟÅúÜA%‰äâ2zô®]gϦ¥UVfd…±±ÙÙyy RiQÑ… [¶ `oOøO¶3ÿØúöetÖÃcÁ‚gϲ³U*•*'çÝW¥òÙ³iÓ¼¼H¤êoQ©žžÓ¦?]YYT›“ST”’’•uþüرÞÞï¿–@°²jÑbÊ”C‡nÜ(/W©23cbfÍrv~WsH$Wן>pàÅ‹”¡0??::'§¸85µ°ðöíéÓýü¾¬ÛoYûýœô@Ÿë£cÇààââ/BBèt àCü€ C@&“H$’%†™Ì,8uêСqã¼½)”/›þëC£µj5kÖØ±<ÞÇGÞ¹S}Õç—Iÿí¢<Þ AË– feuñâôéîîl¶£ãàÁ—/õ=ÿúMÍôG«MM={vÕª?ÿüë¯Ó§srtº/Yƒ!?ÿòå½{ׯ_½:8øÅ ¹üsÃú“H|~›6nnÁ©S3gŽÓºµ·w»v 4k6jÔÂ…QQîî³g=ºjU@‡óµ×“~l}ûRS\ `˜H$‘Èd AêË 7Pù!ƒ4 Alm»tY¸pØ0½þôéþýãã«nvÿ2é¿MH$kk//;;ÏÏ?q"-M$2  +-‹¿…ü¿}Ój³³¯_ß±cÓ¦º(‡ÑX\vüøæÍaa_&G¥2.nÞ¼AƒââþýIeepð¾}¬\9p ¯¯··µ5ŠÞ½[=þöõùGÇõúŠŠ¬¬´´ŠŠêwQ”Ï2dÓ¦-Tªk×~ù%:º¢Âìj<^Ïž£G{x¤§oÚ4cƉIIR©ÑH <}zï^n.ŠnÛ6rd—.û÷d²»{‡,ÖÝ»“'÷êµeKD“ùçŸÉÉ;vêônyh´F† ißžDŠŸ7ïĉ ¤R“©  $dóæÛ·gͺ|yðà¦MÙìÇ‹‹E¢/c¥ëGô|=~ð3Hd²ƒCïÞ‹mÝzíZdäÅ‹wî/\8x°»{õÆåpš7ïÞý§ŸzôhÙÒÊŠ@ PÛµëÕ«{÷¾}ûöíÞ½W¯ŽétólŒeéa˜ÅjÙrñâ]»-8°Q£fÍÆßºõСððBBBB6n4ÈÛûC[&Œvíþù'++-M,ÎÊÚ¾½K£&Ï¢®®Ã‡O›Ö±cNαcG¦¦~|žþCé)”&MfÍZ¿~Ïž9s||¨TÁήOŸÕ«·l9rdãÆ\]‰D©aÉW­úûïY³š7oݺ.Ó7jôþÍ+†©Tw÷Ž»víÛ·wï6m6d±P”Íöön×®OŸwë× …âäÔ¯ßï¿oÞ|ùrDÄåËGFž:²{÷ìÙ#F4o^½u«vù[ ‘hkÛ¹ó¬Yk׆†Þ½{éÒ£Gwï:ô÷ß³fµicg÷ïÙdÉÓsذ-[vîüõW__ÇÉ©ÿ%K¶m»~ýþýK—îÜ9rdøð ª· Á0ƒáå5rä¦MûöݹóàÁÙ³¡¡[·ÞªU£F½z­]»k׌mÛ²Xz‚Oë™ìá´}ûŽÇ?þ×_Ç;¶nÝŒ¿‹eÏ ATªÏ¼yû÷ÿõWUþ̚ձ㻫:$’³s`à¦Mk×Ξݺuƒýú™%ó!ûða(/¯^½üý9…";;%¥¢¢Ê5²Tþ„¢\n»vS¦¬\rçÎ¥KGD>¼k×ôé~~VVo®„×NßjžmÊ_—Ï[»ü?ÁÕõ—_&Nlß^"¹qãàÁgÏ”ÊêZwtlÓÆÑQ£IOOI‹FóªOïÞ‹-_Þ¼9A›[‹..U{ ”Êû÷çÌ™={Õª«W_¿V©>æH˜/ñæói4®´´´T­®^5Ê˳³ÅbÏ÷ô´µýr[ξTQj£Ï–ëCÍì æç·`ÁÚµ«V ضmPÐîÝLJ…?þë¯Í›óùM›NŸ~ðàÉ“÷î]»¶víèÑžž–jœ¥ýiugY{ùÿàa263fË–ƒ#"=:wîâÅ;GnÕŠÍþqN³æ^ABQ_ß%KŽÙµ+#ãêÕ®]‹ŽnÙrÊ”Y³N:qB(lÖ, àôéü|2ÙÝ}Ô¨U«V¬4ÈÓÓÕ‚¨TgçÙ³7lppP©L&ÒéRS6ìÙ³¢"•ŠD²$}a!•êîÞ¿ÿĉ“'O™Ò»÷СOž\½z÷îóçžžsçîØnc#5k6mZt´Túv÷I 0VV$™ AtzͺD*ÕÇgÊ”™3?^¶ìÖ­ÂÂÏi8=Ž“HNNݺß­[fæ¶mǧ¥õï?nܰa£G³XLæ¹s›6ÅÄp¹#GŽÙ·ï‹7ož?Au—þÒ¥¥K-nkë®]çÌY¶lÑ"__6ÛÁÁ€ 2yÔ¨yó¶léÝÃÞ®_ƒLnÖlÅŠàà ¦N--ݵë?ŽñB.g0<<Ú¶íÒ%0pð`7·›7“’^½R«-ÏßÒ' R[µZµ*$äÎY³´ÚS§6n<{6<‚š64iýúðp{û!C:tXµ*9Y­† "íìüýGŽüõ×&Mll¼¼¦MëÞB¹ÿÀsçBC++5š’’ª¡ ³ÙÝ»ïÜrôè¨Qrùûöݸ‘“cg7n\hèµkVVÖÖŽŽBaVÖÆ‡ÅÅÉåÿàÕDßL&®²²¨¨°0?ß`ðöþõ×9súôa2ϞݺõÀ´´7X–?/™LZ­PXPPTTRÒ¨Qß¾óæïîþèÑúõÆÄH¥Õ›+«víÇŒ;vȾ}%’œœk×>lÞ×vÄʪ[·Å‹Ož\¸ÏOHX½zêÔ˜¹¼êsKäAdrãÆ‹‡‡/[†¢.lÞ|úô©SÖ²åÌ™[¶‡„èõ½{pìXq±ÑX}¶$ËË_·Ïkiþ4š»ûÀ£Gwéâäô¡¬^_Zž]¥AÕHnn“&5jTRrþüï¿§¤¼™†@àpø|C¯OO×jM&f0Z´øý÷Í›[·ŽŽÞ¹óÑ£®]gÏæñ¬¬j· à £‚P”L~; £(‰„ B§³Ù4Ú—:!úåú‹Z Qja?-Ó·šÚ“Õ«‹ŠÜÝûö9ò÷ß}|zöŒ¿q#"B£éÝû?nÝjÕ*/ïÅ‹ððG”ÊV­&LغuÉ’›7¯]›2%>^¥ªÙ³ZÚŸšû;ËÛ Á0…Ò±ã¦Mûö¹º¾|yóæµk±±zýÀ3f¬[w玫«RÙ¬Ùðáׯ—–~oÛè 8ztÿþ¿þÒëu:­V©”Ë%…B&‹ ©T$’Ë¥ÒÊJ¹\"©¨¨¬,++*ª¬,--,¬¨ ÊËKJòó…Âââ¼<¡°¨(7·¬¬°0'Çœ§DRQQZê`!uÿÄ4Zóæ;w¾~“£R¥§/]ÚªUõAE«wïƒËËÅâãÇûõc³ßü [[~þ¼LV\¼ukÇŽŸ:ÞX³ôbo?tèÇ*UNŽ@pòd÷îVVU³7(êî>cÆÕ«J¥HôÏ?ýû¿o¶ÛÉiР9s~ûmÙ²9sz÷vsûÔœ s8½zíÚ•ŸŸ™¹fMÛ¶Ÿ~Š¥‡a[Û#Ο‹³³W®lÝÚÁ¡W¯Ë—“’®\IN.] rwoØpÉ’ÄÄä䈈#llììê2½µõçí©®ÒÌÌÇǶ¶ ŒŒÌÌ,)9rÄßß’c®5ÉßRX¬NNŸ 33>œ4ÉÁ¡zX„¢ÎΓ'_º$——•íÙÀdV}B§wè°ysQ‘J•“SYyóf` »ûû5†¹Ü€€Ë—E¢ÌÌ&Mª>Û€ \nÿþÁÁ *•JuéÒ˜1ööï>¥úAÄåöé®T¦¥]¼Ø³ç¿×Dkó¼oÂ`tî¼c‡@ T^¹ôæ÷?Ï>TA$ººÞ¸QQ‘““—wüxŸ>|þ¿‡Â5—?Ñh-[îÙ“ŸŸýâÅüùîîÕ“ dr³fë×?|(“=y2~¼›Û»îšè[mò·¤ü_ãy-ÓçÎÿþûîÝ«W££££ßÿz÷îÚµ=zp¹ï³&d²¯ïÂ…©©JåÇkÖøú¾ý;0lg7xðƒRé“';wúû³X-\xíZ~þÆyyuì¸~}~¾Lvñâ¨Qvvï·VUµ–?gŽ‹ËÛÓ^4šŸßÞ½99IIË—W‡†@;»Ñ£ïÞÍÌT©rrV­jÝÚòÕôºî/¾Tßý)ûi‰¾ÕÜž°Xΰa99*Õë×k×¶mK£1½{_¾œž®R¥¤,\èëK&S©:9òü¹Lv÷nŸ>\®eÒ¶¬?µ¶†aKÛ ƒÑ©Ó¹s••99IXذaŽŽUOŒ ööÇ?.)—.Uü˜üÐg /_¾~=5µz~Ç`¨¬,)‘ɤys6»*lêçã®:]llHH|¼X\õ{VRòàAddn.‘8xpË–Dâ­[R©^_õ½¾¸øÚµÝ»÷ì¹v­&¿a>äºhQçÎBá¡C¿üòòåÇç¶>•ÇUªüüŒ ‰„Årsãóy¼²2.·²òùó˜ïÒÅÓ“Ï··çñØl™,%%/O¥R*a¸îÒ«Õu. ÇŠÔÔG 9œÙ³,X¼øöíuëöí»u+#£¢B¯ÿº'³H$‡–-›6¥ÓËÊn܈‰ªgü0¬¢">>.®¤„ÁèÙ³MGG"122#ãÍ5*‘èìÙ ®_Ï˫֪·óçó}}==‰Ä‚‚3g¢£ËË«æ M&‰$*êÌ™çÏuº¡C­¬¾„¾ÕýóÖµ} R[µZ°`þüîÝåò3gz÷ž3çîÝÒÒÏ Jþ(Êå6jÔ²¥J•‘ñúµÉdmÍãÙÙ™?Õj³²ÊÊp<(È××Ñ‘L† ÷¯h}¬…^þŸ*ÿ×~ÞOåãITÔ¼y½{GEÕF'Èä† GŒøùg7·¢¢Û·/_ÎÉù÷ïà8Žã8 #•êêúóÏÛ¶Íž A{öôí{ãFI “Ù¬™É„ã8n2ÕÎR¨ÕgÎ\¾\^>aÂâÅÛ·oÛ¦Pœ9“™éì|î\_ßää-[ÆÏÏÿøÐ±&éµÚ¢¢””âbñókØÐËËÝL..Ž‹{ñÂd0 G''kkM(­–Ù“ª •ª¼\*­Ö 75îóŸ×ÒþAŒÚ´“I¯—H**ÞÜ[5ÞP(pœBápêâÞ.à[â‡^A2™ŒÆÚÎã}i„Jµ¶þ÷•w(J£™Í·V+—kµŸ³–E§·i3gÎÈ‘löÍ› Þ¾]VöñÜj–Þd’ËóóÓÓårÇ××××ÅÅdÊË»t)/Ï`0œœZ´ðõ¥Óe²ì윹Üd2™ ¨.Ó­úÒé‚°°M›fÏ Û²…JusëØqذի^³æúõ£G++›4:ôöíòòº-“ɤÕ*• ‘É,Ö¿¯ŠD2™Á “!H§{Ÿþà8†éõFã‡Û€É¤Ñ( Óhvv †9ÿªaŠ2ÕŽÈçéÛ×xÞº¶Fcié… 3gþúkxx^Þë×ÿ>ÿ›šÉ_.W«q\¡ íׯcÇ ?~÷\LíŸñsòÿtù¿îó~:±³0àúõׯ·nõ÷ÿpNIIS§zx ~æŒPX¥ED¢‹K·nƒ{xH¥^½šý¾¹uƒA"ÉË“É`¸[7':zĈ-[•J‡ &“É´±¡Re²¢¢ÊÊÚ§q\­~ý:4tùò3BC«Þe³ ¸vmÒ$µ:7÷õëÊÊÏsꦿøºÔDß,·'8n4êtoçj^7üíÑÒþE-k/æ-ËB$2™l6™ ÃdÖNóô‡C§Ã°NWP Óý÷5ü—€‚ƒã8Ža& #Š~z}ɲô0L¥¶i3p Oõ™ µ·ïÔé§Ÿ<< †¼¼ÄDàß]*•êã³hÑ©S'N\¿~êÔôéÍš½ß9‚ØÙýôÓ¢EªT'OîÞýâ…BñQµ° ½V+$$”•q8þþmÚØÚ*¹¹eeÅÅ2™Mûö­ZY[ …ÉÉÅÅæáb]§S¦N»v6„†ž> 8;7lب—ûùqÄ0L,ÎÈxñ¢¢‚Éô÷ïÞÝÕõËÞ§V×ù×·ò˜Låå7oèâÒ¦«««ëû_]\‚‚.^|{rEíí»téÓÇÛ[«ML¼r%%åý[´Ú¨¨ôt ÓjŸ>½~=6V$2çC¡xzøø hVÖ³gyyŸrŸ-ƒÉlÜxР–-a81ñÖ­¬¬Ïq¢ë²¿¨_ÔÖž|wèýúcIWûö‚ M›êçW}憹\ÿž=½½a¸¨èùóšm›¾WÀ=H Ó••Èdlv—.AA#Ftêd2eg‰¶¶$RfæíÛ‘‘Á›&¥&é«ãÁA›=bÄŽÁÁRé¡Cׯ‹ÅMšL›¶fMË–IhhPPTÔ¿#ØAŠZ[·nݯ_§N¤ÑìÚõ¾¹|ÁÃcäÈiÓÚ´ÉÈ8ztö쌌>ËÒc˜D’žžm0¸»nm°y³T*Ê創uëÖ:èõ¡¡¹¹bqÕºC]§¯†Éd‡Žû÷ïØÑß‚Œ³gÍ3f5Ýþ~èônÝöíÛ·oüxàÖ­‹?~ýZ¡`2}|ÆŒ™6­Q#½>=ýðá’’ÏÝðW“òã¸TúìÙîÝ¡¡Ré­[;vlÙ²t)¿xA͚͘±}{Û¶Ihè¸qïF@¬rù³g;w;VT¹aÃٳׯ{{_¿žšÊd¶k7x°¿?†ý{°`©¾YBmžAØìfÍzö4¨uk.—N÷òjЀN‡a[Û.]FŽ1ÂdÊÉIH¸zõæÍŒŒêHsµ0¦{ûŸ~Z»öÀE‹ÜÝÃÃ'O¾qãÁƒ²²ÏsÓÔêÔÔöïOOŸ8qõêýûɶo IJR«¹ÜÆ[·nÕÊ`¸zuõêC‡ÞÝòõßç_ßʃãz½\.Yvs ³X­[ܸ1¥¤¬Z•˜øn´F3&“X|ÿþþý÷îéõ!!Ë—oØ0iðè—;`Àš5³g3™áá£GGGWVÖv~A¬­»u›6mΜ–-Å⌠¡DjÖlôè9sF† °°!Cªneª×eQ¿°ÔžôèQ×%²´?­]{1™ †;tX³&$dËGdzgóóœF^¹²G‰Œ\¸0, D°üèü€†)•EEÁÛûÀ1L¡ÈÍŠŠŒ„aàíýç¤R=¾wïüùû÷;8,[¶téöí§Oã¸L–’rêÔ‚wïFF –¦¯r0L$ºxñ·ßvì‰Æ›9sùòÆ „üü?þ˜<ù÷ßcbÞ7¼Å0©4)éþýøx.‚ÒÒÞu ˆFkÒdêÔ3x¼ÈÈ îÜùÔã–¦‡ îõë[·îÜyøÐÞžDŠŒ,,ÔëÕjéÁƒÛ·£¢ H¡¸}»  z(S×é«ÀqN(|ö,2òùsƒ‚RRÞ­ÓšëF5ZmzúÅ‹+³f¹qcP“‡ƒãRifæ£G[·²lÙíÛÕ[s,Íß²òã¸\þèÑ¢EcÇNœ¨P,_¾`Áºu›7O™‚㉉gÎ,XЧϺuOŸ¾yQ#†I$™™FF*¥¥Îà¸JõôéªU#G(Î;mZ@€——½}jê©SãÆ<éçrá‚—WUî–ëeXþ¼æ™àŸ~9rÔ(77"‚´ÚgÏbc‹Šœûö4(00+K¡¸ÿöíŒ ¹¼ööÁdR«‹Šbc>Œý:!á}­ÑrùC^Ÿ‘±sgPP¿~:Ý￯X´lÙáÿý†aIAAzúÝ»{ö¨Õïû­šé›åù[Vþº^KËc9$’•'=}zþüÕ«ÏžUT|xðh2UTܼ¹|ù!Ë—¯]»uëüù«W÷éA¥¥¯X1yò¼y·nU‡âùX­¡hAÁû7ÆbÞ¼ùÈ‘cÆØÚ¢¨L–‘6kVÿþ[¶DDH$µŸªûþ¢núîÚê[Íí‰ÉD§ …ÏŸGE=xPV&—c˜yçÕ«˜˜û÷Éds{Ç0©4=ýéÓÈHµº¢Â`°¼&,íï,k/æ1ý{7oÆÆîÛ ÃS¦,Z´xñàÁVVbñÝ»[¶ 4þÍ›p?|ïGíÓ~dØì>}‰¤ÒS§~þ™Ãù2úceÕ·ox¸B‘’rî\@À—  > è/À Øb÷c2Édéé7o^¼X7éß?0L¥ÚØX[£¨DRY©Tšg‰DGÇgÌhßžBÉÉÙ»7#C¥‚ “É`ø<ý!“yÃd²µµOÛ¶­Z5mêæÆå’É@ðàÁÓ§ÉÉŸ²‚PÔÖ¶}û~ýú÷÷òB‰¤°033666Ö|ñ.>€¯ Øb÷Ÿc0ˆDÉÉOžˆD@€ú Žët"QZÚãÇááiiÙÜ1¬¢âÉ“7NœxòÈÀ ¸ þpàÿ þpàÿ þpàÿ þpàÿ þpàÿ þpàÿ þpàÿ þpàÿ þpàÿ þáÛ-zDÄ­[ÁÁ‰É„ã8^XXXXTÄãñxöö&†™Lb±TªPƒVÛ ‡‡­m`à¸qK–ü·%_°`Þ¼Y³¸\&†ml¬­­¬`†ÍÏ€ …R©RýþûìØøš|cRpð‘#[· & ?|øðáÓ§d2…B&GEEG?}J¡P(0ìââììæVXXT”ŸÏbÑh4šV«Õj4J¥RÙ°áÎ[¶,X “UV­Y³mÛ… u]æû÷ïÑC*•J¥R{{;;{{…B& u:• Ç ¥R,Æ0½^¯—ËÕjò÷÷ókÚtÏž;V®üí·… ׯj |¾)&&"âìÙÒÒòr‘¨´´  ¬,99--3ÓÖ–Ë%“›5kÜØÁÇãñX¬üü‚‚Š  A`˜Ã±²b±<===›65õz©T,–JËÊ|}›5kÝ:8øÈÿqã¦Lùý÷/[Ú‹Ïž=x°´T ()yöìùó„[[.×Þ¾eK?¿6m¬¬¬¬¸\­V§Óé(2™Lމ‰‹KJJJJH0™ AˆD*uùòÅ‹'NܸqÛ¶cÇ€²uÍ7à ¥¤¼|.“‰D"Ñë×eevv4ZÓ¦ÞÞNiiY™TªÕêtÿòea¡J¥PÈdADb~~^^i©9‡ÃáñÈd …ÃÉÍ}ýº¢bùòÕ«·o¯‹2ÿò˨QÓ§¿ûþÆ^^>>II))ÙÙ,N"¹¹¹¹9:ÚÛÛÛÛÛ;;;::8dddfhµZ­^ߢEóæ^^+V,\øË/6ìØqñ"PY î¨×A""nÝ:yR£Q«ÕêôôììÂB‡ÅÒëÉdƒ¡¸ØÁϧRår•J­ÎÎÎÍ´ZF.§Ó™L6ÛÞžÏwp0¿êõF¥ŠÅ2™V+VV*••‰FóõŸÈì’1™,›-—«Tzý«W))éé†aju·nݺµoÏãñx<žµµ “i4F#ƒA hµ@Y€º¦ž® >¼gÏÚµL&©Õ …Á ×«TF£ÑXYY^AË ¥¥Ri0p8—Ë`0αcÁÁ–¬´˜·Ã™ÿþÐÊϗ寿þþ{ß>óß3fL:iRZZzzQQ@@·n66Í›·hѬYRRbâ«W†¡¨Je4BÐÌ™'öêµÿ±cáá@q€ºà-‰D"“)ÇqóÿWý A8Žã‘H"™ß}ÿ8®TÊdbñç‹NGŽÁ°¶&‘Øl"Äb‰¤°°¼¼¼\¯//¯¨Ðh*+E"¹œÍærmmÙl.—Ï?pàðá£Gk’¿ymŠÍf³™L*•D¢Pòó KJöîý믵kÕjµZ.GQ"‘J]¸pÉ’?ÿ|ó»]ºtìØºµ§§‡‡››­-‡ãììèÈç×. Â›evwwsc³œ4°²²µåñÔj™L(ÊÊpœÏçñ8 ²@Ýñ)8øèÑýûëO±ÜÜìí!¨  °P­.) Åb™L*­¬Ôëår¦¬L  )*•Åârml÷í;pàÈ‘šäl.“I¥2YJJJJRRQQaaeetô“'ÏŸ3 ›-UT…Ý»wêdŽ›÷÷ß»wÿó›Íá0™(J H••b±Tš™™‘‘‘áààääêúë¯cÇjcÃår8;vìÙcyX 3):Á`±Ìï”––—‹Å¾¾¾¾ Hd2‰T¨;ÞÞžž úúúù}©L³²RR^¾¬Ýwظqúte0ØlEmlŠŠJK…B‰D.‡ ™L§«Jikkkkoo™ktòäóçÏŸÇÄDGGE½x‘›[ZŠ¢( ÃR©L¦TŠDRiV™L"‰ÂãÇOŸ>zôøñÓ§æ”J©ÔüŸPh¾­H«Õéôú„„ää¬,kk++6»gÏ€€®]×­[¹rÁ‚U«Ö¯ÿ믚?»ƒƒ““ƒƒù';;kk6Ãt:.×ÙÙÁÁP«5½¨,PwÔ» yzr8t:ƒÁç“HT*•ZXX\,À°É¤×³Ù›Íf[Yñxûö>|æLMò¼u+4tÏž«W¯^½~ýøñ'nÞ|öìåËÌL³“#Éd …R©VWB PA KJÊʲ²^¿.*‰$™¬iÓ† ==œìí½¼<=½¼¬¬Øl EQEÍ.Ö… —/ߺ÷äÉӧ滌jþìd2‘H$r8\.›m¾»©¸X HÊÊÊÊär½^§¡€wŒB¡p8 ¡ÎNT¢(“éîÞ¬Y›64 ¿/ Óh®®Í›·níåÅበ^øV©wArr‚’“‰JõðxöìåËW¯RR’“SRZ¶ôóóó³±±¶¶µ•Hd²÷Rþ9ØCll\\\Üýû<{fvŠŒF£ê^1Ìd2;ED"‰:^o0‰d2‘È`ÐhŠ—Ëḻ»¸88H¥Z­^O¡ &ƒáææà Ëdr9@  ¨9Ï—/“’ÒÓ5jÔÈÓóÞ½7îÑã矧Nýxi9.—ÑËår…¢¨¨¸¸°ÐÉÉÁË¥R)­Ç!ˆB* ø/A*ÕÊÊÆ†Ã ¹\(‹µZ“é¿,ޮݪU‰‰·nyz®ZդɨQ§N ö%ƒDjØpòä]»"" ¸u«k×ví¶oOL|3&‘èê:yrHÈùóóæ%&þúkóæ³gÇÅ Õç8¿Èd7·Q£–,3¦eK£f6¶—Éâッ·m»p¡°ðˬv£(feemÍá ˆB!VVj4Ÿª[N·µµµ¥ÑŒF™L,–HÔê/«uW~KÛ—¥éQ”Á°µµµe2F‰D(”Htºÿ¶ý@ý¤Þ­ UT”—K¥ ‚`›Íáp¹M›6iÒ°!€¢‡Ãb1™5Éçüùàà-[bbbbbc;uêÖ-ó —k^ùiܸQ#w÷.]Ú·÷õ5ÿÍçÛÙY[·oߺµ·÷”)'vïîååêêà ÑhµÆã±Xl6 ‰¢Óá¸ÁàååêêääââèÈã™s61 ÃnÞ¼}ûþýÐÐððÕ«—/ÿT|<½^¯×ëOŸ>sæòe‰D*U«1 ÃP”@@*†!¬ ýHVV-ZL™rèÐåå*UffL̬YÎÎZ)±4½%P©žžÓ¦?]YYT›“ST”’’•uþüرÞÞTêÛ©Y¬¾}«¬T©rrTª¿fgïÚåçG£} 1™þþ'öêek+—WVÚÛ÷î=dȸqãÆýòKM_‡ é×ÏLJÁ@‚ a³}| =úÍ4ýû7mZ^þü¹@àé9eÊk׎7~|u>“'ÿñǦM+W¶h¡T>^Xèæ6xðرÕ9ŒÝ£GÓ¦l6‚Ôo} œ úí· ts«ù*‰äá1tè„ ³g÷ïïàð¹'% ¯G9s.\xõ*9¹¢¢¨(66;»  9Y xð`áÂN8œw%I&{zŽ»cGb¢H”””ŸŸ“óäIqqEEbâ#FØÙ!_­¯«Mù-k_–¦'‘\]þùÀ/RR„Âüüè蜜ââÔÔÂÂÛ·§O÷ó³Ü€ïz·‚Ä`Ðh&¡¨\Îå²ÙLfe%™ A‚ãZ-•J£Ñh6666v“öíÛµkÆ{÷îßñ"11#ƒÃa³ŒÆ]]íí›5kÐÀÁÁÓÓÙÙÞžÍf³I$++{{:]­–Ë1L«Õh´Zó;T*•Š¢jµ^ÃW®\½úêU~~QQYŽã¸Á Õêt:]·nÍ›7lزe£Föö™™ùù2‰D¥²Xr9 ëõ/^<{–––’’šš–Ã8îî¾~ý¢E'®\¹}ûÛ!Ìg–=ŠŠzòÄ|&ÊÙÙÉÉÁ†q\£¡Ó™L29//?ß|.àû†Htw9ríÚsçöî1ÂÁ!55:º @¯GQ EaøßƒKÓ[l$žžS¦ìܹeKûö‰‰sçvè°|ù¹sJeÏž§NÅÆþùç±cS¦DEuíº{wAÁA0L Ðh4…b2%$üþ{ß¾k×ÆÆªTæÜp\§«¨xýúó}åó~ÿ}È6»¼<;ÛÆ¦W¯Ñ£ù¥ªÔÖÖ>>mÚ4jD"忯Ç'% …û¹èõ™™jõ“'ááééJ% ³Ù^^½zýòËÏ?{xü{¨Ÿ›ûàÁÓ§Ô¸q#F4nüv>qq¤¦Òh;÷ëøög……:]tôÇÉÉ2™¥3ö_[L&µ:!áàÁ­[ÿýþýªzû¸ÕîÝÛËkèÐŽ?_ûÄÊ* `þüþý „Ë——.ýé§“'ãâÄb/¯_={öÊ•3vì?þâÅNªô ‚7·áÃÿùgÏžž=ËÊþüsüø!CŽMMU«­­=<<<ŒF…âk­åY^~KÛ—eéÄÆfàÀÝ»7m;Öd:vlàÀÆIMµ·>üäÉÛ·-úûï1cnÞìÞýСâb£Ø_€ zè %%R©Zݰ¡D‚a J$R©D"“™L0L¡¸»»ººº¾ûÝß_°`òäû÷ïÝ{ð '''çõë¶m›4iР{÷ví5òòrq¡ÓÍ)uºŠ “I.×h´ÚüüÂB‰$5µ @,îÐÁÕÕÞÞ` µZ±‚ª6CtëÖ¦«kY™P¨P„…=}š–Æå²X4šÙ5¢PÈdµ·çrY,ƒÇ †–-mm»vmРk×ÄÄÜÜòò„„üü²²ŒŒ¼¼¢¢Ù³§O7ŽÏwrrsKL|ñâåËòòŠŠŠŠ¢¢‚‚‚:Á P £Q«õôtwçr1 ÃôúÊJ‰l†ø “ÝÝ;t`±îÞ<¹W¯-[""˜Ì?ÿLNîØ±S§/‘ÞBAàñzö=ÚÃ#=}Ó¦3NœHJ’JFáéÓ{÷rsQtÛ¶‘#»tqpØ¿?8¸ Àh„a‰B!!H£)-MOOLLIIHP*¿¬”¨ÔæÍgÍš;·K—ŠŠãÇ»víÞ}ãÆ/ÔêªÏŒ®]wíÊͽqÃÎnõê!CFºrE"ùt¾……ׯϟ?aBjjëÖÍšY[h=ÇÕj 11!¡¸X©|·e¢(‡Ó¦Í¨Qº¹%$\ºtáBaa톟õKê“I$ºvmôèÏž•ɪ7€ž>}èPbâÔ©›6µoïìL&W; ®®ŽݲeIÉÉ“;îÞ›—gç#'$…õ¹ü–¶/²,=…Ò¨Ñ!íÛ“Hññóæ8ñàAATj2„„lÞ|ûö¬Y—/Ü´)›}øpq±Hômm €º¢žAÊÏW*›5«¬,,„a‰ÅruuwoÔ(==#ãÖ-MIÉÈJ¥RµÚìuîÜ¡CÛ¶ÏŸ¿|ùâŽ{ÑÑeeee"QPP``ß¾þþ66(ª×c˜^¯RéõJ¥Z­Ó•– ™™B¡L–žžŸ_ZJ¡à¸^ß¶­ƒƒ••Ba2U¹F0Œ (*•jµƒ»;Ÿok;dH·nmÚ¤§ …B¡N§TšL>{VP Óa˜NggÇ`°XƒJAîî<ƒáïïæVu‘ÙMÂq“ÉdÊÈHMMHŠ‹ òò<=4psS*Õj½ÞdÒëu:++ÎÏÏËS©áë…ùF:½I“öí{õ>¼E WW[[Q*³²##‰ÉË“ËM&2¹aÀ€Ÿîر¼<1Q(ôöèÞBIO?xðúõ¼<_ß~ý èÖŪ¨¸uëòå«W#"**L&6ÛݽuëAƒZµòönܘϷ¶f±PT¯¯¨(.NN¾téÎèèW¯ÞvÂ0îèØºõèÑæ¡+‘¨ÑH$%%±±……]»–—§VWuuûö?ýÔ«×€ÞÞ<‡ÃZmEEiinîãDZ±QQ””h4õq8 TÞ¿?gÎìÙ÷ï›ÿŸFkÞüK¦¯†Áh×îŸ^¾¦Ó•–––ªÕÕ¿l0”—gg‹ÅB³fžž¶¶D"‰Dož«‰}€ï“zç ]º–”Ô¥KÇŽNNmÛ¶n¢R©\Îf[[ÛÚÚØ0™t:™œœœ’’”T\\\,UVVTH¥ùùùùyy‰TªTΛ7~ü!þþM›:9Á°B!iµjµÁ Ph4:X¬R™™ååæ_¬r5òð((‰ªZ:^o2¹¹ÙÙÑé…B"I¥jµ^ïæÆãQ(nn<ž««V«ÑAE…LæèhcC£iµ&“^Ÿ]^^VAÄã5jD&ÛØx{»ºr8¥¥NWX(H¥R©T*‘ðx<G&S($’““³³ƒ†étR©ƒAR©X,•¾~Ÿ/“™c÷}¥ ¸¹õè1sæÎ½z!ÈýûááÑÑwî˜LnnC† vlppF†R‰ãD$òxÝ»oݺ`Á€ùùOž\º”P^Ã\®³³§'G§£h^žZm4BРAŸ>3f¬_ß©“TzãÆ£GááZ-…âèèææíм¹­mLLIIaauØøÔ ++‰L† :ý}§N‡Ïg0ôúôt­Öd‚a£E‹ßß¼¹uëèè;=êÚuölÏʪêl ‰T*ß?`Àòå6LœÈç›L99wîœ>½{÷Å‹™™ EíÖC '§±c÷í[ºÔß?=}Ïÿ+W„º8„o2I$·nߦ͂QQÕƒB«ÿà༼¿ÿ®z^!“)JEoÿ4Ž))gÎ8°ysbbM¶BR©­[¯Zõ×_3gÖ]©ètOÏ®]=< (//8¸°°ª\D¢••§§ùä‹5~üõëùù'N´mkk AZmVÖõë Œ±lÙÉ“ÙÙÿekÿPù-o_–¥Ç0ƒÁh„ %“‰Ä7µ†Q”DB¡ÓÙl Ekcàû¤Þ9HfæÎýã[·ÎœÙ¿ŸÍæñìì4èÒ¥C‡F̯¥R‰¤êªùªV2™B!“[´hÑ¢qãV­|}¹\£Q¡¨¬Ôhd2½^£Ñëu:ó\¢^¯Õêt\.—Ëb™£øx{óù< c†étz=вÙ,•ZV¦ÓÉdRi~¾N×¾½·7G¡À°y F$’H,‚”–æ!9Žóxöö¶¶8n0`XY™D¢PVVŠDær6hàìÌb¹»S("’ÉæîîææèH¡P(‚J¥P(D" K¥öö<iµN÷òeR’DbdL&S©lvÝËžDrr2¤sg>¿¨èöíM›¶o¿¿¢Âh„ ¸¸´4 ÅÃcÿþŽ›4±µ}öÌ|Û‚À0†¥¤8pùòÍ›L&‹Õ®Ý† vv¯^>|ýzDƒA¡øûoÛfeÅ`‰¤Ó½zuéÒÁƒ¯^½ýË’–F 4kܽ{ƒvv(š‘¡Td²¯oÏžI$‘‘3g:tófVÖ‡¢dÁ0…âææáÁå*¯^={êTLLnnÕpäÅ‹ØXÐì«ÐëóóÏž]·n×®¤$ÊÊÊÍý·Ta˜D¢RÉ䪓+$RÆӦ­^=bD~þ_õìÖ¢EDÄo¿ùøÐh$’9 ‰ A F«V½{ûøÇÅAPëÖK—?>xp«V0|xhhyym&'çÖ­cÇ~û-2òäÉÌ̺öÂ0…Âç·k׫W÷î FuÌ::Ýß߯†H„ ÌÌïM#`A H¯/)‰‹{ô(,¬¦gL¦©S †ºrÄÆ¦k×1czô ÓÓÓÿüóîݲ²ªíŠ(J£ÙÙ1Ä`4h`cóðሽ{º»Ïž}îÜÁƒ»víÝѯߥK_:¾áç–ßÒöÃdIzW*Ëʲ²D"©sçÖ­ù|)<<;[¯G6Û×·M>ß\ëï bñiûß+õÔA2“Ÿ_\¬PP(TjzºÙ|{x¸»S© …Âãñxöödvz´Z“)  ys2t:×é H§Ã°·fk4jµV+‘H¥Z-‘H(ÊáÐédrAAe¥T*(U!óå´]º´lÙ¬™F£Õêõ¶¶l6†aѨ×CÀå"ààÀçÛÛGFÆÇ§§ËdZ­NçîîädeÅåb™\Q¡VS(VV Ž;:òùŽŽöö2™J… L&`ggmM¡æåÉd,™ A¹¹yyryq±@ •â8 ‰¶¶VV·=Z×2GÏ÷ò¢ÓuºÂÂÊJg±X,Ëü©^_^.•âx»vÎζ¶BÕuÀ8^^ž“SRb0àxƒz=†™LRiqqe¥ÑAd²Á€a8ÿó7„ÍvrjÖ¬gÏ-¼¼4°²¢ÓY,[[;;HÌÏ'“Í)Q”Ëõõuv¦R++SS“’ >ÞIã¸V›——-1™Ýºõí;ztjê•+—/§¤Ré×ßpSŸÑë‹‹¯]Û½{ÏžoÂqÇqF*ÕÕõ矷m›=‚öìéÛ÷Æ’&³Y3“ ÇqÜdª’¬ÑXPpòäŒíÚ]»&—gggeUThµÂçÇÆ†‡?z´oßôé;ÛÙ]¼xéRi©eëHD¢£c»v½{ûúòùöö-Z¬_ÿ¡s5‚ƒƒ¿?ƒ¢ÊÌ™ÿ½m[¿~Ò£±¢âîÝÍ›ÿúëâÅ‚‚ª¡7 S© :eʯ¿víZ=°&ìíœÞ7ßþ­ƒ D"•J$šLIu}þ×É Lš´jÕO?aØõë³f…„äåUŸæ‚aD" H.¿reûö¿þ ÏÍU*!(/ﯿ¶oOJš9óï¿{ölܘF»tI P(êWù-o_–¥W«32Μ¹|¹¼|„ŋ·oß¶M¡8s&3ÓÙyèÐÕ«;uBQ*(Ðhôúwë»&ö¾O굃´bÅÆ7nìÙ³}ûĉ&“V+* ‚p8l6…âàÀçÃ0‘H Ðh99j5çêjm­V—•©Õ8®×›LZ­yÝÈhÄ0•J£1$¹\«… ½ÃØl6›F£P …JÕëi´ŽÛ´iß>.îéÓ§OQT¡0ýüÚ·oÝ‚Š‹ÓÒÌ¥B!Ì“I¡‰nn<‡sëÖÇåå¾¾M›6kfoïädo/“•”dgK¥J¥BQZJ"Á°‡¦Óùù¹¸88ܺ•””ž^RRP ×S( …"I¥:P(Êdæ]ô¶¶66|þ±cÁÁ/~™#‘H£Q(0L¡tî½{÷ĉ§OÃÃI$¯Aƒ6m&N=zذ­[9…bìØÃ‡%°¢ôq ‰$/O&ƒánÝ8œèè#¶lIL4Ÿ c2™L*U&+*ª¬|_í·kÇÍ:bÞÒS›Ó:FciiTÔ¾}6DE}<%ƒÑµ«›ÛäÉÆÙÙ?¿uë_Õ,ŠÝ›úM¥ººvï>dÈÏ?óùÕm€Jõó3»wß×;2™Ï÷ñqp€ ’’óç·oß½;,¬¢¢&RÝœA"“½¼ÆŒ9|xóæ&Mž>ýý÷~ýNžÌÏÿ÷0ៈ@€IDATÊÒR¹Üd2‡y÷” €ãF£yûëʳ&å·¼}YÞq\­~ý:4tùò3BC«Þe³ ¸vmÒ$µ:7÷õkój?Ì|’™õë7m ™5kêÔ1c8&S§3_œ*‘H¥……ÞÞŽŽÞÞ0¬Ó©Õ‚9ÀpõZƒyÕH£Ñht:Îõ‡D‚a*•ɤRÉdÂqFQ"Ç+*òóÍ¡`‚ŒF*U«Õëét.×|Í£9ш :`^å`2a‚7¶³£ÓŸ<ÉÊÊËÓéärŽBa2ÙlF¡Éd2‡ G¯‡ ™L*…áN¼½6,+“JÍçpœNg2­¬Ž9vìôéÿJÎ&“Z-df*•JëÖY[“H99Á§öž×tèÃD"‹ÅçS(Mzzeeõœ> ÓéMšøúÚÛ#™F‚ £Q*MK+-5ÆŽõññö¶·¿u«¤¤¨¨æg p\¯/+Ëɉ=vìÁƒöí»u pw·µ%%’7‡õ0Ìfwé²~ýÖ­‹ûø…§NÍ›·ví… –üÚ·•êã³hÑ¡CK–téAOŸþñÇ´i¾zU}Þ‚´Ú¨¨ôt 5J­¾~=6V$2š)OÏ€ÍÊÚ±#/ïãkAÂá4mÚ®ŸAee99Baý?Ï@¡89ué2p`ß¾ÞÞÕÃG"ÑÑѬ¥ßUW@àó;vlÛ–Ç«¨ˆŠ ¹xñÞ½§OkðKŸA‚a&³eË+Î[¶ÌËëæÍyóÚµ;y²¸ø}.¸ÁPY™œœž®ÑØÛ·háîÎdÂpZšV‹ãçëëâB"UV>{VRò®~ÖU{·¤ü–·¯/Ó™ÌÆ jÙ†—.ÍÊz_M×Ä>À÷É7ã ™Ù·ïðá3g¦L™8qìX™L"©ŠçíÍḸHT*‚˜C2˜×Ž´Z£‚´ZÎ`0ßHÃd2‰Äáp¹,…‚¢™Œ¢&“NWÝ%r¹ ‚P© ƒA"Á0‚ƒÁ`2}lK½=—K$ººr¹l¶T*———K¥ …ZM¡É$’T*——“ÉZmÕL´‹ —K¡4lhmmo_P ×‰û÷8pèÐ-c½¾¸øêÕÇKJ è×oâÄE‹4š[·""JJt:&“ÇóðhÔÞ??z4&Æòýü8®Ó••%'K¥Nß¾={vê””ôøqY‹Õ¤I&8;CPõýSf4šW¯îÝ‹Ž.)™?¿ÿ?ÿ=Úd:v,>¾´ø\WWooNJ:u*6¶¬L¯‡ 2¹eËÀÀ úô‘É>ÌÉ U*2ÙѱW¯Îù|ƒ¡¬,2ò}3¦Tª§g`à¸qÝ»Ëd{ö,YR»0ß (jmݺu¿~:@F³k×»n2‰Å÷ïïßïž^²|ù† “&q¹¬Y3{6“>ztttõÆ!*µuë5kvï^°€Nþ<"âÅ‹òr*µuëQ£Ö¬éÔ Ã=š1#*ªn"Ï}Ip\"‰‰Y³f„o±Óëssƒƒ×®1ƒÁHKû6З׏qS¦4jTQqýúªUÉÉ_2lº%À0“ٵ뎇-\èí]Vvñâõënn£GÏ;mš9…ÁPTyìØÅ‹99*Ž«Õ/_ž8qïžJuãÆìÙ³x1‘xñbEE£FS¦,]êéYRròäÒ¥))ï>Q]´wKËoyû²4=‚X[wë6mÚœ9-[ŠÅB!‰Ô¬ÙèÑsæŒ AaaC†|h¥°&ö¾O¾1ÉÌ›k,“'1`…Az½N‡aæ;pÜì™C2H¥ †‘H4‚XY1,–ùRWóe–f0˜LD"™L„¢æ›ÌkLoÏëõ†¢:^¯V3™æ;‰Øl"†I$&õzòð°³£P22Š‹q¼°P¥’ˉD­¶*‘¨²R©”Ë1L§ÓhT*.—F£Ó ¡ðõëÜÜú"_£± àþýƒ.4þ9(¨]»ÿFÃq…B,.)‰‹{øP§3™pÃ$’ÂÂÌÌ„¹Ü|ÆÉ$— YY/^ ¨ùÖ“I©,+ËÉyñB¯W(ŒFƒ¡´4$äøñ‹­¬~ùå§ŸæÏ7ÇKK33£¢6o>y2;{àÀ¶mUª7oAÒj oßž?ÿàAµzÚ´^½Úµ›1côh2Y§“É‚¸¸û÷Ÿ={ó~‚‚„„Œ µºK—öí§Mk×ÎÊŠÁÀq•ª°0;ûÆå˯_OL‹ÿ½êE$òù-Z´iccA‰‰[¶\¾œ•U€c˜R™‘ñèQTŠhµŸÚôTóô&•&%Ý¿ÏåBPZšXü¾á¡ÉTQqóæòåC†,_¾víÖ­óç¯^ݧ•–>~¼bÅäÉóæÝº%WÿŠ^/<}šœ¬ÓÍ›÷óÏ  lcC¡¨TyyW¯.]:~üÒ¥gÎßÖ†³U€a“Éd22€a“ ÃÌ­@$zþüÎ P´z+.‚P©l6•Š f óå¶w}i} =='N\³fî\—¤¤•+wíJJªIìº7º…B¡ ¨É$}þ“¢(‚Èdii±±±±ŠƒC§Nݺ98T®Ñ$&¦¦ž>mv0 Çe²‡ÿüsĈåËW¯Þ´iòä%K¶o'“%’W¯Nž\¸ðçŸ×¬yßÕU{·´ü–¶/KÓã8†aÞ¼ùÈ‘cÆØÚ¢¨L–‘6kVÿþ[¶DD|h£qÍì|À11ááW¯6lèëëç÷¥2ÍÊJIyù²qã–-Û¶mÒ¤yóV­jþ]@ jž~Æß~=ºQ#;;ÍüŽ9X€PXZZYivÌï[YÙÙq8ÞÞŽŽvv$Žëõz}Õ™ˆ÷ñ¦ƒTZ*—k4æË‰D"“A^ãÍ›»»[YÙÛ;;WÅy3´Z {ú4;;>þõkÀÆÆÆÆÞÞü©yÕËœŽLF"Ñʊñ²Òé`˜D >þòe ”ÿ΀ÇŽåæ“ɳg7n<~üÙ³¥¥`HðmÂ`tíºkWnîvvÓ§»ºŽUó3H F÷îû÷çäœ:¥Õîí½xqqqPеk))[¶x{›Ó`XLÌÒ¥>>}û^¼XR‚a$R“&+WÞ¹óìÙÒ¥..Õy‰D'NôìÙ­Û¬Y±±õou‰@ps3æîÝ„„åËM¦•+0`ïÞÜÜ; F›6>~ôè°a\®Á ×›L$‡ÃbQ(ÉÉË–õèѹóîÝùùŸ:‘Ú;ê/ßä ’™+.;ÖÞžBAsœ:ÇÄìI$J¥Fc^ó¡P˜L*Õì1D¢Ñ¨×ëõo»@fg ÇM¦ªR.Ç0W©´Z½þÕ+@*år©T2ÙÃÇãrÕj­ÃÊËU*.===½  U+WW&“F#ýü5rsƒ ‰Á0çF¥R((ZPÀdZYa˜Á Õ F£V ÃT*‡ü_ž;@‰¶¶..Fãóç'N=VV†Jß2ZmVÖÙ³óçÏžM£%$X¶aL­~ölýú®]»wÇñâbµÃÔêÇGŽtu½t‰É¤ÑPT§‰JKÅbó*©Ù‚dfîÜ9rd“&çαX4‰AZmEEII~~yy}Ýxg4æç‡†ŽÝ¡Ct´F“™YPð©5•*9yݺAƒa³)2™HDƒA").NKËÈ(+«ÿ®hïø8ß°ƒAj5†i4æ(j2=}š“SP ‘ÈdÉd0`˜••­-—Û¸1›mmm^5‚ C E«]# 3™ÌÎ’^ d4 d2étL¦Réõ‰D"‘ðù,–ƒCZZ~~Y™»»µ5›ÍçÛÛÛÙQ(0Œ ÙÙ"‘RéåAdgG£‰½zùøØÚšE©ÔéŒÆ?þعsÿþú,Ó{÷vîܹóÇi=zÌŸ?>AÁ½ÿÔ©½{ÿ—åQ©Tªœ`˜¾4>D÷î%%S§9@N§{z9À7é -Z4v쀊Ѩ×gfæçK¥b±V«ÓI¥r¹9œÁ@&Ã0‘Ã8n0H$2™Z­×óù,‰AU®‚‰‰AF£Ri4æ aI¤ê“T*ŠÂpãÆ®®U»È#"ž=ËÊòòâñØìŸ~jÓA5âóml ˆD¢Ñ ¨zþÔ|c‰D¡À0‘Èá˜O-ÕoªÀ ü·|áj32òó‹Šòòd2†B±²âñ`˜LF‡L&‘¸\ E)&‘püM·Å ŠBV«Õêõ …^¯Ó‰D …NgömÒ€ d2…bNÍbQ©$›Í`°ÙƒuëÖª•96Ý“'ÅÅåår¹Fcÿm~5çl~U*µZÊË UªE‹&O6 ¨P?ù&W¶o?}úæÍ7ß™5kÆŒ)S\\ø| “ËËÊJJ(!üÿéärµÚö[¯7‡×ëÆªmud2Љ|>‹E$R( ‰T^®V b±J¥Riµ†ãz½Ñ¨×³Ù •êêÊã98°X,‡#—Ëåæ@0¬×ëõ&“ù,“ù·$­ÖdÊÌ,(ÈÏOO/+ ííù|WW v@ýä;¹ìp߾ޡRY,&Ó¼¶AD"‚É‚¢d2†¥¥R©F#—ëõÕǪqÜ|’ÁÃ$‚èt&“ÑH¡ (‘øî¯h4F#‘H¥b±y냃­-n2.“i4Z­y%*#C,ÖjT*™L&;;;:ZY••APhmmkkgwìXpðÅ‹@Õ€úÏwÅîÌ™K—""Äb£Ñ`¨ ¼­×c˜9–]Õ«9‚†éõ(jÞŒAD&»ºº¸ …B&«Õz½ÉD"d2ƒA¥ööl6—Ëf£(Š6oîééáÑ»w§NmÛzy5hÀçÓhL&“éààììâbmmk ®…¾¾ó !!·nEGÓ³g›68N¥b˜9–‰UëH:ÑA:†áxIIQ‘XÌáðxnoïâAl¶NG&ëõz½Ñ¨Ñ¨T..6666b±««ZÍáP©Š££•UXØË—:™L£±Ù`Õøùî£ØAiµ$‰$‘H&‚`˜ZM"™LD"™L"¡¨V«Óa˜L&—k4F#®TªÕee$’••«+ŸïââîÎã©T2™JE¡(j¾F¶qcÁÍÍœ¿ƒƒ»»»;WV&k4F#‘ øù!.нtéÖ­èhÉäó•J¡Ñär Óé̯:É„aee‰B¡RiµB"ñxl¶Z­R B¡D¢ÕÒél6N¥r84šµµ³³‹‹££»»»;q8NNNi©@ ‘H¥rùþý: øù!$3{÷< ATª••T Ad²P¨Õâxi©V«ÓååI$Ri^^i©P(“I¥ZmTÔ³gOŸJ$••J¥y‰Fc2mlŠŠär±899++/ïéÓgÏââîÞ½s'"(ð­óCl±{“>zÔü÷¬Y3fL™¢×ët ‰D ร££#Ÿ_PPXX^ŽaF$Â0‰D"Ñh(ÊbI¥:†åå‹ÅIIééYYBaiia!›ÍåÚÚR© — T øvùá¤7Ù·ïÀ#G>ôé† þ¹r¥ùo³kÄåòù66¥¥ÑÑqqyyYYöö|¾“›ÍåòùÏ Ô~héã¬XñÇë×›ÿÞµkãÆåË=< ww©T&“J) …L¶²²¶¶¶Þ»÷àÁªU)ðíòAúæÎ]¾|ãÆœœ¼¼òr ÜÝœ]]«Î5€ïà YÀüù‹¯X¡Õ 0ìæÖ  ð=¶ØYÌ›[ïÀ÷XA€ÿ¤oÉÍmÊ”3g._~üøÌ™1c<=I$ À· àèØ«×¸q‹Í›7hP“&  ©ùùàkòƒ9HTj›6;wFG‹D11¿þêîNxÏC:= $$>>#cçÎ-h´úü<&†‘É^^ÍšµjåéI"a˜É”ÚRhÞ|Û¶ôôœ•J¥ªzML\µÊÛ›Lþüô–Â`tì\\üâEHH@þíJ–DrtlÛvРþý›6µ¶FÑš|‡Htw>|Þ¼µk7l ò÷g±¯l£êº~ÿKŒ€€}ûJJŠ‹÷ìùé'ãóä_›ú­ëò×5õ[>_FÆõÕþ|›òüžùoÛcÍô¡Êž''ß»7fŒ]Ýõ'@?¿?~0Éh”ËË˵Z2ÙÊŠÇc±"ÑÅ¥gÏ¡CÇ8ÐÛ›Å"(FÓéÊË•J£±~?BQR"ã8ŽK$¥¥Riý.o}D«MO߸±gÏnÝ|}[¶œ8ñÀ¢""‘~ßì°¥é-†‰D‰L&‘äÛŸ†a&³C‡ N:thÜ8oo ¥&ß2òó/_Þ»wýúÕ«ƒƒ_¼Ë¿¶Ë_÷õû_Ö ‚‰d2‰D ¼ Psù×®~ëºüuMý–Ï—’r}´?ß®<¿_þËöXS}€a"Èd‰DªK§èç÷ȤÃär@.Çq6ÛÎŽÅ"‘ììÚµ[·nëÖ¿þ²³;}:=ýáÃãÇy< ‚d2@¡¨ï‡^/•–Êd I¥PiKÁq½^")...–HÈd*U"ÑëqüË¥X‚ÑX\vüøæÍaa߆>ùýÀ÷Ææ ™LJ¥P(•tºµ5‹E¥ZY¹¹1z=Ž3NN66T*“Éã1& …juÕü ‘hkÛ¹óÔ©³gÿöÛÀ¾¾ööTY™pýúÑ£7:ôìYyyµ3E"yz¶~ý¬Y FpðÚµ‘‘®®Ó¦Í;mZïÞ$Rnî¹s³fÍšuáBn®^A0Ì`xy®X1o^PP»vVVry|üåË[¶=*“ 8sfƒ·o¯\yð`\œ\þæpÍ`()yü8"âæM*-Õë?ô䊓S¿~sæÌž=yrÏž ÚØ ˆRY\œšúìÙÕ«Gž:uñbRRíæëQÔÆ¦}û!C¦N ìܹmÛ&Mœ­­‰D¦¸811"bïÞ?ÿ ŽŽ®¬Ä°Úׂ°XÍš üûï ܱ£›™¬R§§ßºµgÏß:ôô©TZ»úª[j+a263fË–©Sƒ‚Úµãpd²—/¯_ß´iÍšsç^¼Éªk«.õÓ²ò£(‡Ó¼y×®~~ÞÞ-[ZYŠÑØ®]¯^Ý»³XZ­yš";;&&6¶¨H¥2k3•êã3oÞŽS¦4oN¥Biµ¹¹ÿü³lÙþý11Ri•Σ¨]—.Ë—¯YÓ­[aáΛ7Ÿ<™]¥÷D¢‹K¿~kÖ,YÒ°áÇk×îÙQ^n.—Û®Ýĉ³gÏ™3lX‹NN(*%$\ºtðàÚµG޼|)×F;‰Dgç>}V¯^¾¼U«ÔÔmÛ¶n={öõ몉 f±Z¶\¸pÓ¦aÃôúþÙ¸q÷º6:dIù„ÃiÞ|âÄÕ«gÍ ôóc±Äâ§OCCw3ÏôþûYk*ÿÚÖo]—ßR,µ‡õK>ß²ý¡P¼¼¦MÛ¸qÔ(£ñàÁÍ›ÍÊ2·_åñúö;wÅŠ6mþüóÏ?< !¨6ò´¼×ÏþýãÐh~~ ,Y2`@NÎíÛ……=zLŸÈd>|¸téòå/_¶o¿zõ¢E¿üÂççç;¶pᆠ!!99z½¥Ïky{¬;}¶´}½ù]2ÙÁ¡wïE‹-š>½o_2Y xòäàÁU«öî½z5/O§³¼½Ô®½[b©,k/f©Zjß,­¯ºOÖ'~¸ &“ … ‚°Ù¶¶޵µ““ј–öâ…LÆåº¸X[s8<¦R 2™ÙDP©­Z­ZrçÎúõ~~"QDÄ¥KÁÁbqÛ¶ëׇ„„‡¯ZÕ´é›§•ˆD;;ÿ‘#ýõ—_æÏ?}:4tïÞž=uºèèsçBCCC?.)©r¾`˜ÍîÞ}çΣGûÍÛ[*}ö,..+ËÖvܸÐÐk×V­š;wâÄ=<=©Ôw7< ¹¹Ç/[6cÆñãïwÈäfÍV¬¾paáB—ŒŒÐÐãÇwí:|8,,!ÁhlÒ$0pð`7·Ú/ “É>>ÇТŠæçGDœ:uìØÎÿüƒaýûÿñGhèŽ:°Ùµß®A&{{O™rófTÔÖ­&88Þ½{éRxxLŒ@Àb5oÞ¸1‡S}žÌòúª[j#¦P:vÜ´iß¾ \\ŠŠ¢¢bcËËÝÜ&LX·îÎãÇ àó«6 Ô­~ZZ~ ÅÝ}Ô¨U«V¬X³füxwwsùfÏÞ°aåÊmÛ¶m[¹rÓ¦9sÚ··µ}ó É¤Õ …EE%%8îë;|øøñ=zxyÑhooÝÀ0•J¥âñú÷?~ΜˆÄê®ÓÖö§Ÿ&Mš=»;;¥R¥2›t2¹qãE‹‚ƒÃ÷mëÐA£yøðòåS§ÂÃåòηl  ùõW''B­&‹ ‰D$²¶îß„¥K]]ß “ÂdúûOœ¸hÑøñ¾¾:Xlî€-×KÊ¢vv¿ürìØéÓ»vM˜àì\Z——çê:mZHȦMþþï³#5•mê÷k”ß2yZnë|¾uûC ØÛÿôÓ˜1C†téÂç¿ùTÂf7oÞ·ïøñC†øø°ÙæükgO,¡>÷ï†I$w÷¾}GŽüý÷ýûwîüõW"±°Ç{÷þã[·îÞݱ£o_¥2+K©lÕj̘­[—,iÞœN·ôy-ou«ÏµÕõõ]²äÈ‘]»ºu“É>¼v-:º¼¼E‹éÓO:qbøp7·êöX÷ý]ͱ´½Xnß,­¯ºOÖ+bbÂï^­¨ ¿Ô«9O‰¤¢¢´ÔÁBê~°Ú¸ñܹ¯^Éå+VŒ{çΣG«VmßþäÉÝ»[¶üôÓ€·o——GFþñGãÆ$±X:>-ff>|8i’ƒCõ>Vuvž<ùÒ%¹¼¬lÏž€&³ê:½C‡Í›‹ŠTªœœÊÊ›7ÝÝß_†¹Ü€€Ë—E¢ÌÌ&Mrt¬RDárû÷NHP©TªK—ÆŒ±·¯Í>_¶¶ ŒŒÌÌ,)9rÄßÿë»EQ'§I“®]“JSR.ôõ­íw:½k×ãÇ_¾T©RS/nÙòã®Mmê«Z;¼¼V¬xõ*;;-mÝ:ŸO5rKÓ×D> F§NçÎUVæäH$aaÆ9:V=‚ØÛ~ü¸H¤P\ºdþ¤nõ³öõ ÃÖÖÇŸ?/“oÝÚ±cMõŽÁèÜyÇ@©¼r%(èÍç©‚ÉìÑãôé¤$™,"bðàêVÁf÷í{ñâ«W¥¥§OwîÌb™ß¥ÑZ¶Ü³'??;ûÅ‹ùóÝÝ«*2¹Y³õë>”Éž<?¾ºƒ´´~©Ôöí÷î‹S©^¾œ>ÝË«ê¨ÔŽŒW(bcߟM°¬ü(êèøè‘B‘’rõêðá¶¶UÒAQ>üø;w22TªÊÊÞ¨úÓò·¬~¿vùëÚþ·ò©{û\×öÇœ¿P˜pòd×®o»-]!“%&ΜٰáÛ©¶öäS|»ý; s8ÆEDää¨T¯_¯]Û¶-Æ`ôî}ùrzºJUU§Tj§NGŽ<.“ݽۧ—kÙóZÞ¿–>×¼}5o¾sçë×99*UzúÒ¥­ZU§d±z÷>x°¼\,>~¼_?6û¿èï>mo,k/–Ú7Këë¿Oþüp+HF£L&ÊåÄ`8;»»»»3))‰‰ †§§›ŸÏbÁ°\^R"“a‰äàвeÓ¦tzYYtt|¼HT½Ðˆaññqq%% †·w›6ŽŽÕÊU…Htöì† ×¯çå½u‡Dâó}}==‰Ä‚‚;w¢£«¶M&‰$*êÌ™çÏk7ï\Ž+©©r8ƒ-X°xñ!>>¶¶$Ò—=€‹¢ÖÖ-Zôí;gÎúõëÖýóÏÉ“»víÞ=q¢‡‘H¥2™TjíŽq’H|~‡~~,–@pëÖ;Û¢ô¹õUwX*OJ:s&*ª´´ê L¦Êʘ˜°°´4wvö÷wq!ý¯½ó‹êèø½w{/´¥AéM°£;T¬Ø»F_{¬±Åco±ÇŠbB+¢"ŠR, €´¥ÃÒÙÞËýþØða—E1˜ÌïyÂc–áîÌ™sÎ̹3sßÖúÙöýk8IFFTTzºFãé9`€‡GÓÀÜ¡ÃС;ÃðÓ§—/ge‰ÅúZ³X:ùøK¥¹¹EE:‘‡cjÊáp8 †B‘Ÿ_]¢VVîî––­ àåò/ÂÂîÜ©©qr>|È,‚H$'§‘#ûõ£Ó³³ÃÃãã+*š,ALL†ݶíîÝÄÄ«WßüyéÒo¿ jd¤—¦¡õ'll¼¼ììP4?ÿÊ•¤¤††¦u@­¶¦æîÝ ²³¿¦¿mõÿZþ°mäóoó?ÿ4íq|7Ä?4õUAAj*—+—£¨J%—k4Zmeev6§TBJ%“i4(Š B XZÒ^Cíñëé³á”•EE]¿žÝ¼íN­®¯¯¬ „Fc0„×eÚ~Æ»¶ôo†÷WûòŸmÍì iµbqmmc£VK¥ZYÙÛÛØ HEÅýû••ŒRÉḺ:8Ðé:PX]-kµ ‡ÃdR($—76Êåoî›Õje2¡P.‡ 2™Í¦PôocšS%hµ©©M{[ß‚Ht:™Œ¢ry}½TúæžMF(¬«‹µZ6»õmV©²²vì˜6m̵zݺ-[޹q㇨Ԛšää°°ãÇ7nܰáâÅÇ_w–† 2NNóæ8ñðáöíVV ÇŽ…‡ßºš Aþþ..†„À°>ŸŒá`0б1•Š¢"QUÕ§Òf`0Jëû«mh|t:•ŠÏ¯«kÞ覯¿DÒÐ £(‘Èd‰òyíý´~¶}ÿ¶fàóSSoÝÊÌÄã—.2¤cG"ñÑ#‰¤gÏ^½h´¼¼}ûÒÒšvò#™Ì`É0L¥Ž7rä»Oäó««q¸Ö×_&Ë̼|ùêÕÚÚñã'L0€Ã9u*!¡ÿ!CLL¸Ü'bbx¼f½EQ¹¼°0!᯿ÂÃóóßžti4<^a¡\Þt6Űú#‘H§“H(*•Ö×K$¯kN'•ÖÕ  Å×K:a¨ü¿FýÛÚ¶¥|þ þçcÒ@¯›+²­ýgkÆ÷–ûýšN'•ÖÖ Je“] ¨F#—+•ïŽl†¶×P{ü:þ¶5hµ ……oÊD§ÓéPTŸ¯©>ím¼3Ô^ ño­é¯öä?Ûšÿ\€¤‘ªª$¡G77 ‹††øøÚÚêj‹Y¬!C:v¤Ñ¤Ò‚‘H«Õï=—Här"èô7ß1@‚T*AJ¥H¤P¼}$ EµZ•J£ùð€®ÓÉåb±\Ãd²©)•úæ‘G †JmÉÀòi”J/&fûöE‹bbvì ‘ììzö Ù´éĉ͛¯_?uª¾ÞÍmôè[·jk =VG¥úø¬Yóã¾¾iisçNœY_¯Óé—ìŒyó>ï žN'— 2Q(&&dòǃšÏ믶 uòANÿV †!H"ižî3™ +•¥¥J¥N×ÖúÙöýÛ:®­MK»r¥°Åš:µwoKK ‹††¾}--‹‹cbõ‰š´G$’ÉPT,Žˆ êÙsÆŒGZ“&áãÈdyy/FEÕÕ͘1qb``—.4Ú€––\î•+11ee¯‡õ(*‘äæÞ¾}òdnnK´ßúS(J¥D¢T°¹9‹¥?!ÓtT†‰D&“F#`¸¡áëôT{­Ûùö•Ï¿Éÿ¼=µÃb™LKK:ýkÞ ÓÇ÷–úÖH(ªÑ(•oÖEQô}µ2´½(J b_Ëß¶®¯5}8ôåíåk`ˆ½´Ô¿54´®¿Ú‹ÿlkþs[ìôw!é—Uºwçp$’’’ººšš’‘ÈÈÈÇÇÙ™Á‹õ¹î H¥âñ23  §kWW××/D&ÓÍÍ××ÂB¡(*zþœÇ3|-B©¬¬|ñâÕ+…ÂÞ>8xð`k립Ì0Ì`tí:~¼ŸŸ>kÒ—tryIIBÂ¥K›7<˜“C ¸¹ùúZYµfɆ‰DSS;;*U(ÌÉ),‹› AØìn݆ ëÐáó<¥²º:55+K¡°¶8°wo›–ù¼þBQm~£ôéº}º|ëåƒ £Gûú²ÙMO†aËßÀgg./ú´¬L¥jkýl}ýQEµZ†ƒùÒ7ª¨Õ<ÞýûÑÑÕÕ¶¶AAÁÁvvÕÕÑщ‰¯¿ãmlÌÍ}ö¬®ŽFó÷ ´µ5䜘!ú Pdg‡‡ÇÄÔÖz{Ï›·eË‚ööEE—.Ý»WRÒú5JCë¯P”•½xQ\ ÃNNÇûû7½G«{÷Ñ£¿LO´¬ÛoýÛÆ¶µ|¾žý¶•ÿAQ•J*Õh##:½Ù—“HC‡~h¯DÛø“ËøþþpèóÛk¨=¶µ>·µ>´¿ñ®µöÒ2ÿö%ú«mügûà?¸‚¤ÑˆÅ<žPAdo¢uuJ¥R A<žJE&wïN¥J$55úv(*¤¥<!DGïÙ³cÇš5öìyz.X°{w×®|~DÄ”)‰‰¯'{m9"QZÚ¾}§O——ÇÅmÛvéÒõëÎÎׯggÓhݺéï¯Õ¶Ôù} ¥oßÇž:•Ç‹ŽŽŒ|ô¨¨H,¦Ñ\\&Mš7¯S'•*'çĉÊÊÖœuBQ‰„ËMJª¬47Ÿ>}õêI“.(`³ƒ‚¾ÿ~Ó&þÜMl"QRÒž=aa\îÇ+VDF?®ÑlÞž—§ÑXYy{ûûc011Û¶ýþ;—«P|NéuC € §{÷ÀÀ~ý¨T‘H§ãó_¾LIár…Â×—[R¾uòÑé †{ôؼ9<|ÇKËK—JJ¬¬BC7lèßAââV¬ˆ‰©ªÒjQT§kKýüœþU*««KK…B£wïéÓÇëÕK§+(ÀáLLðø¼¼[·ââx<•JŸÇÓsÀ€à`??‹BqrêÐBa“Þ½'L7N§ãrÓÓ¯^½y37·9q¨JUXxëVB‚@°xñ¼y?ü RÉåwïîØQZú¦ËdÙÙG9’“3sæ¦MGŽ=*îÞþâ…LÆb¹ºúùuî¬V_½ºiÓñã EëõA¡Èɹråò媪3–,±¶.*Ú²åæÍòòÏÓ~Cë_Uuÿþ‘#qqëÖ:uòä‘#;vlÝzåJi©Ý¨QË–uïÃzíj¦uòoiÿ¶}ýÛÚ¶/ù|ûm;ÿƒ ÉÉ\.³{÷êÕ‹MŸÃéétzpð’%³f±XAÕÕŸãO “Ï·?¾·e{µZ‘È0{l[}n{}hûñÎ0 CíÅ0ÿ¦ÓÚ_m9Ÿlo`fÍš2eÂ##SSsó/õІ†ÚÚª*ss+«#GŽ;q¢å+‹ÅúãÕmç"´Z<ÞÁÁÍÍÉI¥Ê̼r%<üÞ½¬,‘ˆDrtôð02ª­}üøÚµðð¸8ýÍBJeiéƒññ\®‘Q@ÀŒ „†Žß·/‡S]ý×_Û·OŸ¾~ýýû¯¿_Â`¨TkkOO{{™ìáÃË—ÊÊ>¬.juEÅ£G·o§¦J$¦¦ÞÞvv$Raadäºu‡+C†ŒÃfÇÅ:ô×_™™†gÒ×éär¹œÅêÚuĈѣgÍš7oâÄÐÐÁƒ;uÒj““Ož\¸pñâ¿þzõªuwHh4 Ož$%54tè2cÆ¢EÓ§÷íkgWSµ|ù–-/_R(LfeåÝ»7n¼|Ùº}©j5—šzõjJŠRéâ2tè˜1³fM›Ô»·“[R{ïÞ«Wú÷=†÷W³n(<^Eçé9thHȬYS§¹¹‰Å·oGD-íîÝÄD‘ÈÎ.(hÚ´ÐÐ3ÆëÓÇÏÏÂB«år<ˆ‹»?'§ù}aëôA£‘H ÐÐ)SÈ䈈+vî|üøóîÿ2´þ(*•æäܽûä‰Dâè8aÂØ±½{;8Ô×_½ºlÙ?¦¤àñFFA|üÕ«iiÕÕMëåß²þmëú*OCýaû’O[ûç¶ö?(*‘<{ÖØhg7xðرӦ…„øù±ÙÙÙ§O/]zôhU›ÅæäܸÓ:y>ÑþVÇw,ÖÈÈÕÕÕÕØ¸¨èÁƒk×RSù| ÅÉÉÕÕÚº®.!!*êáú:<ÞÎÎÅÅÁA&KI‰Šºw¯¸¸ Àþ2ÔÛVŸ_—kKôA¨T;;¹<99&&6¶¨¨),C*ÕÒÒãC•*))*êÑ£’‰¤¾¾mÇ;C竆ڋ¡þÍÐþjÛùdûÖ§äîØÑÝÝ×÷K=4??+ëùsWWŸ®]Ýܼ¼:wnùßòx<÷­‹õKÁ` |âDQщӧÛÙMzã†@ä´Gðx'§uëž<¹ys„¿þ>ÜßÿçŸóóÿ oÒÀ—Œï@{æ?x©ýÃ$’±±±1•úúîVÎÒrĈ ºw'¹Ü¤¤ÜÜ7o…í ÁÑ1(hÂ/2òÊ•’ÿuÀø|›üÏ µ?p8{ûùóÿø#%eÉ!77'§¶‚¬¬<<ÜÜLM‹‹>üÏ? Û:5h-x¼£cHHp°ƒCYYtô•+\®áûÍÀ¿ 0¾ß& @j¨T99»vß­Û£G;{xØÙ±X‚\¾zúƒ))™™õõÀyí­¶º:*ê‡ú÷ˆàr_½«GŒïÀ· Ú(ªT64¼zõèÑÝ»¯^=z$|[hµ ÙÙÏž}­†À·ß€op þH@;‹µ´8pÊ”•+—. vs£R¿ô5™À0‰Í6775e±H¤Ï»ø'ãKû† ƒÃ17g±(”/çS0*ÕÄDÿ\ùä|AH$6ÛÔÔÜœÍ&‘6‹‡¡C·lÙ¹súô.]Œ/õM_ZŸA€0*µ_¿Ã‡+++*úî;*´·­ÁáìíÇŽ]ºtË–mÛ¦O÷÷ýæó·Áã--»v :ÔÃÃÈèß?qkY{I$/¯]»rr23ïÝ›4ÉÔù‡}•Ú³gXXEųgááýúQ(ÿ´ÄÔ44466337w÷n// Øã»À0…âé9wî¾}ÏŸ×Ôdf–—s¹ÉÉõõ99™™G°X_gjÙ¤Ï\®T*•6ýÌÈØ¸ÑÙùSw×ãpööK–¤¤äç‹Å))³g;:âp_»[o†ú·öïñøŽçÏü¸¸øÌ™ñã9œOÕñ}å?ÏŸüóãËçès[ÉŸN2äôéúúæú¼þ³ àÀ__2ùKø+ ÆÌlذíÛ_¾ll|ö¬°Ë}ò¤¶69ùól·µ>üèÑgϲ²jjJJ¹ÜŠŠìì²²[·æÏ÷õ}7l ‘çÍûóÏÄÄúúòòäd.·¼<++?ÿÏ?'Ovvþ’c‚÷í»oßõëk×ÚÙ¥¦ÆÄ<.~ÞÕß­ÓçÕ¶ý9 @û†‡#ðx,öŸžhþ7Ú«V—”DEýöÛÖ­›6……={öúʼnoוFëÑcùòóçŸ2ÅÙ™Hü·÷MËÚ Ã„Åx<ß>&I0ŒÃáñ íã}-ƒÇãñÃíù ò?c0Ìbõï¿yóÍ›ûö (üöÛüù;ÛÛûúÚØ¸¹»zõUU_똽B‘“óË/ôíëîîã3sæÑ£åå„Çc±Ÿî;ÕjQƒAA­V§ûúW9¶Ö õoíß’É;/\8y2‡êÔíÛ55¿PúCå?ÇŸüóãËçèsÛȆ±X2™L&uºôôU« 9²W¯^½ô?ƒƒƒƒwíÊÉiºlösüÃá¯]ÂfGFΟooÏ`¸¸XZŽUQÑšKõȈnß>y²Nwúôˆ®®~~:|÷ÝŽÙÙ]º,[¶ÿ¤I––ØÿÏ?€Å::Ι³oߎÝ»gd,YÒ£‡ŸŸ™™§çÚµ/_öí»aÃéÓsæØÚ~‰W)Âf²gÏŽƒ=~¼~ý²eW®ÔÔ´®Ÿ«Ï-$iÚ1MEELÌ™3¿þ¤|mÄÄ$(è‡FŒ`0’“7nœ6íçŸïÝ+/oÖ_¼¸u«¤äëÕEU*>¿¢¢¢‚Ï'H$>_¥jy˜£Õ*•M5W«5šoÿ®ûoW«z÷^±"$D¥ºpaèÐ'O„Âõ…¡å[Ê??¾|ž>·…üa'q8’Ë«ªrr22²²ÒÓ%’/_ <ÞÈÈÉÉÔEKJΞ}õª¡A£Q«µÚªªÆÆÖ>“LîÔiÔ¨îÝñø'O–.={öÁƒÒR@§+- ÿõ×[·.ŒŠ9ÒÃÁ8q¢¢¢¡ƒáp  upÈÉÙ¾}Á‚³g_¼4,6%åÞ½ÂB f×® z÷¶°8r$,¬´´õá àâ2uê¶mC†”•mßîïŸ˜ØØø¥VŽÚJŸÿ³gb0wî¢Eÿû߈îîffT_Ÿž~ýú©S¿ürüxZZmm³*èï8ÙºuáB*5,lË–¸8[Ûyó–,™7oÐ <¾°ð?.\¸ð¯¿ U*‚a*ÕÉiüøõë—.>½[76[$zò$*jÇŽS§„Â#¾ÿ¾C‡[·6l8v,5U$j¹; “}}—/_½zØ0.÷Ö­²²þýçÏ?žF‹_³fݺçÏ»wß´iåÊ1cÌÍKJNŸ^±bÛ¶ðpý},†µA˜L/¯™37mZ¸püx__:½±1%%"bß¾ÔTý›·ßua0,V·n3g.Z´xqHˆ··•ÓО~ùò±c[¶œ<ùüycãÇß} ÆØ¸{÷Q£æÎ?>  kW77kk##N.¯¨ÈȈýí·Ÿ KL¬¯×j!·¶?~Ë–Ù³ML._>¾¨¨_¿ùóçÏ8ÐÞçñ?>vlãÆß~»zµ¸¸)³áí5 ÃõDrqYºtÏž9sš6=)……¿ÿ¾ví‘#IIA³Î`0L¦—WŸ>¾¾ÎÎ>>l6K$j4ݺ H§+¤ÕŠDIIÉÉååR©áƒaò×C$ZY-^¼hÑìÙtìhlŒ IEEvvZÚÕ«§N?ùâEkÞïÚÞ7]´…Å A+W®\9þ!Âûõ¡mõ¹ÙÊh´Ž'MÚ±cîÜéÓ»uc2…Âçϯ_ß¾}óæ?þxö¬iãAkäAB§{z޹jÕŠ#GöìigG H¥99ÑчíßüxJŠ@ð1ùc0ÆÆ}úÌ»iÓØ±0µeËñãÔÕiµ†È§=Ú£a'§!C¼¼`8=}ÕªøøÊÊ–L ó·†—o(ªÕªTÍÒדâûi‰=jïzÝiiy™ŒFóñY¹rëÖ~ýòò޹{—Éœ5káÂÉ“ýýi´úúÇÿüó§Ÿ~ùåúõÜ\‰ämßI¥vëöûïÏŸŸ>=z4ݺ5r¤¯ïÊ•}j2ÁØÚŽ;o^Ïž\îéÓ+WfgüR€–•o©? ö5¾6o³¶}ú˜1ææiiÛ·_»V^þ>ïƒÁ˜šöî½nÝæÍ}û–•íÛ÷ë¯çÎ4Ý(ˆÃÙØmÞ¼zuÇŽññ[¶:[[«Õ¢Ï†§ÿÉ-v$RçÎ7†‡ß¾½u«¯oCClìåËaa±±]»nÝ~÷îÆ¯ï1ÅáLMýý'L˜6m̘eË.\ˆˆøí·”ÊÄÄ?þˆˆˆˆxô¨²²Ia˜Á Ü·/<üÔ©ÿýÏÙY HKKMÍÏ71™2%"âÚµ—,™9³GGɰ%dÆãíí‡ ™0aÕª#Göí›6 ‡++CÑAƒ~ü1:úÎ={† ‘Hòó%’Î'MÚ¹sõj// ÅÐöb0¦¦cÆœ>}áÂ3fX[WU%'§¦ÛÚΛ¾}»¿ÿÛõ&\]W® »{w×®=äòøø¨¨óçïÞ‰vì Ÿ6ÍÊ Ûê`œ@pq;vØ0oo ¦¤$6öüùÓ§÷íûý÷¤$­vèÐŒˆØ³§GC_+,–ÍîÖmüøI“6mºpáÒ¥ýû‚®]KL¬­õöž?ÿüù³gÇŽµ³Ó×ÈðöFëôA§S(jjJKËË++QÔÝ}ìØ©Sû÷wr"“ß^ª'íí'NܸqýúÍ›§Nµ·×÷÷¢EÛ¶mذk×®]6lß¾xq÷î&&­íÃäA‚§çúõaaýµb…MnnDÄ™3œ8“ž®Ñ¸¹?r¤]k·h´¶½Œ»ûêÕ'O8з¯Pÿ!}h{}Ök‘سçöí‡/_ncS^žœ\[kg7cÆO?ݾ}æÌ°aææM •?ÎÎsæÜ¼™°sçŒeewî\¾|÷nRG§{y¹º2™«? S©>>óç_¾ü×_3gšš¦¥Ý¼™œ¬ •O{³GÃÀ` kk;;2Y(|õ*?¿%!½¡ã‹áãQkÑHú^ÔhTªr©¥öh¨½V^?]:tæÌÙ³wï¾víØ±yóLL Ÿ>•H¼¼–,Ù³çîݽ{{öd2ß§uX,•Êfãñ›M¡´l‰äâ2gÎ÷ß[[?z´gOttYÙÇCß–”7ÄŸ´·ñÅÔj>¿¡ÁÈhèÐ3Ö¬?ÞÖoþ-æï?sæÊ•S§º»+•ï;?%OÆáH$,†±XsóaÃÖ­Û¶í̙ӧ·n]¿~ܸNh´×ed¨¿ÂbŒúôY¼xíÚ]»¶m›5+ €J… {û‰—.ݱã]y¾>X¼ØÍM,~ò$-íÃó­V­Öh ƒÑo™~½]  B¡0d²^°X&ÓÜœJU©„B…B§ƒa*ÕÛ{Õª_õóKLÜ·ïáC‘ˆLæpØìÏé_ÎܼOŸ~ýØìÂÂk×ÒÓ?´v¤ÕJ¥R)‡3tèÔ©‹faÑlSŒ‰ÉwßÍšµhÑС¦¦‰TÚbµ\Ÿ O“’îÞ½zµ®ŽÇ++ûR?õÏäóëꪪ, ¤íMŒNïÕëÂ…šš¼¼øøY³,,šÝcm={öåË"Quõ¡CýúÑhM¿¡Pzôøõ×òr©”Ë­¯¿ysüx{û× óu%d±úõ‹ŠjhÈË{ð`֬潞Âb –ž.•J¥—/OšdffØ>zf2CBbc¹\©´¨hË–®]Éd*uР¨¨œ©4+kÅ wwDêÕëäɧO…Â;wf± k/ci9~üÇbqVÖÕ«cÇš˜4Õƒ17Ÿ:õöíÜ\©´¾þèÑ~ýô‡ÉdŸC‡JJ ž=[¶ÌÞ¾Y¡ OÏ­[ãã…ÂǧNmž€~¹!ÖÊjÖ¬kׂ¦¶ëëãåµo_Q—+•æä¬YÓ¹sóÁU:}РcÇjkÏœ b0ZÓ^Ãø|} Röìáñ$’+W¦O½ÿÞþ&#£±cÿüS(¬¨Ø¹³g϶?þÿ~ùð‘Ñøñqqyy••'Oúû·U=ZÚ^Ãô¡íõ™JíÕë?êë¹\>?&&$ÄÒ²©GÄÌlìØ3gÄâË—§Ooþ!ò‡ ¥OŸ3gž?—J³³øÁÇçãSk152åáü¼ââ|| ;»?ÿ,+Ëȸ{wÉ åõaÖPù´/{4|`wrš7ïÙ3‘(>~ëVOÏO7t|iÍxÔ,q'§õë_¾,(xõê§Ÿ\\>}.‡Í;öÞ=.W*½woØ0#£¯âÌP{l­kYy13=:>^*åry¼sçÙìf³·_°àêU‰¤¡á÷߇}7DÂã­¬‚ƒ/þßÿÖ®]¼xÐ ;»÷Ï ÞÃ=s& àã#Ö¿ÿ… /^…±±#G6ÏŠŒ!C"#_¾¬ªºp! €NÿÐ7µLŸ[6žþç¶Øáñ>>JuõOž444G¡Zm]Ý“'©©••Tê€]ºXZâpqq¹¹¯¿mh¸tiÛ¶ë׋‹›–ýÞ~¾¹¹»»£#WZzñbbbóÆŽÏOH¸xñéS¥rôh6ûu'mb2tèÖ­/®]ëæö¶òÈåÛ·/Z´xñ­[MuEÑ‚‚ÔT.W.GQOO¹\£Ñj++³³y<¥‚Èd™L£AQAÁÒÒö>~ÌbyyÙÙ¡h~þéÓII M‘¾V[Ss÷î… ÙÙäç׬T,V§N>>ÆÆRinnQ‘NgdÄᘚê«PäçWW£èôéîî––•”´v£cdäí=pà¤I!!Ý»{zÚØ°Ùl¶££ƒG"¥§“Ho»—²²¨¨ë׳³›·Y©Õõõ••B!‚xy1‚66†´×p}3\Ú'-•?ŠŠÅÙÙ–•1™‹-_þ÷nýôÓáÃÑѹ¹uu_cù‡h‰>`0Tê×Ñg}ñââÅ„„ªª&‹Ôéêë“’bb^½BÑ•+ýýmlðø³g++årCäÇ››÷èáëK§óxÑÑ·oçæ¾»ÅäÃ=°cǵk³fÙÙ;7{ö A‡åä¼¾mÆp{oþÛö`­é'­V¿Í¥%ÓCÇ—„úœñÈð¶4o±S©ô-kÏö¨·‹¯Q¥299<üÉ“æwÛZmeåƒqq……8ÜÈ‘>>8\t´@Ð<ò«T×®õÞE•JCÚk¸¾®í‹ÖÉ_©äñbb¶o_´(&fÇÉήgÏM›NœØ¼ùúõS§êëÝÜF¾u«¶öëMÒZ¢m¯ÏM–‡ÃÑh ÃÔtüAÈd&“Ba¥²´T©Ôé —¿N'— 2Q(&&M;Í?½ê ÕÖÕ]º´yóï¿;:®]{æÌöê5gΛ“ ÃåÓ¼"ÞìÑp‹ËÊ ÄbÃÝÝÍÍÆ`’’*+?ôJÃP«ÓAPëÇ#ÑÉRS×­›>}øpÊÍýøúE{°Ç¯…þ ÷ÛžƒÑÛ#)Ÿ+ ¥K—Å‹'L`0nÞ\±âÖ­êê?Ͱò-÷'ÿd²¼¼‹£¢êêf̘810°KmÀKK.÷Ê•˜˜÷Ò2TþïóM(Úä‰DÀ·ýüA¡‹år"‘ŒŒšNÔ4Ï(&óÝÀEe²¢¢ˆˆuë,ˆˆhú”Á6ìÚµY³d²Â¢¢úz½ŒÔj>¿¸X(„á¾}™ÌÄÄqãvìÈÈÐkF£“HBayy}ýç\d V74äçóùTª··¹¹^K_éÿ&ZmmmZÚ•+……,ÖÔ©½{[ZZX44ôíkiY\“˜¨OÌÐ: Oÿs+H*—™YP Pp8]»ºº¾~‘‚0™nn¾¾ EQÑóç<žá*¡TVV¾xñê•Bao>0œ‘ŸßôRK¡(+KHÈÉÑjŠ””ëד“›¶ ‰ŽŽýú¹¸`0ùùiiÅÅ-¹ùéc~ýá×/5gçþý?•rF­æñîߎ®®¶µ  ¶³«®ŽŽNL¬¨h}¨fèxúŸ[ABQ -íàÁˆ :zÏž;Ö¬ °°gÏ ÈÓsÁ‚Ý»»våó#"¦LIL|39`K‰ÒÒöí;}º¼<.nÛ¶K—®_wv¾~=;›FëÖmäH­¶¥ÁÍ?Ñ^­V$ºÿÈ‘¸¸uëN:yòÈ‘;¶n½r¥´ÔÎnÔ¨e˺w‡á7w…ËdÙÙG9’“3sæ¦MGŽ=*îÞþâ…LÆb¹ºúùuî¬V_½ºiÓñㆊJ$\nRRe¥¹ùôé«WOš”pøpA›ôý÷›6ùøÀpKÞ­¶ªÊ°ö¶½> ƒáé9`@p°Ÿ‹E¡89uè@¡À°‰IïÞ&Œ§Óq¹ééW¯Þ¼™›ûzV-¥²ºº´T(d0z÷ž>}ܸ^½tº‚ÎÄÏË»u+.ŽÇ3tˆlü)”¾}>|xêT/::2òÑ£¢"±˜Fsq™4iÞ¼NTªœœ'*+?žÚöÓ´E{ÛZŸ›Ðé †{ôؼ9<|ÇKËK—JJ¬¬BC7lèßAââV¬ˆ‰©ªÒjQ‡3Tþ"QRÒž=aa\îÇ+VDF?®ÑlÞž—§ÑXYy{ûûc011Û¶ýþ;—ûnýµÚêê;wþ÷¿1cœïÝ‹ýý÷'¸ÜààiÓþøƒÇS«ÛV>Ÿc0L XXôì9thÏžþþD¥^º¤W AŸ³9„Ï¿wïçŸÏœÉÍMHX¾<&&2’ÁضíܹçÏi´Ž{õru-/ß·oíÚ«WKK ó·( A­4±˜Ç ˆÃéÞ=0°_¿€*U$Òéøü—/SR¸\¡ðõw­‚µõĉ;wnß>w.]¼Ø·ï­[õõ_~…´-0ÔÞ[R¾i¥E!ˆÁ7nÏž°0àøñë×ÝÜæÍÛ¼ÙLJψ˜>=!á]ùc0FF~~AA½zõëArùï 8±X‡ æÍëÒ%7÷Ô©E‹rs?î• -oˆ?ùšã‹áöh˜>+99W®\¾\U5cÆ’%ÖÖEE[¶Ü¼Y^þölÀPy’H~~›7<¸|9…òôilì³gµµ$’Ÿßĉ›7÷ê¥Õ>|¸`AB‚þZÙ¶ž?èço¿ývåŠHtíÚÞ½'N<È`\¸ðò%›=pà²ecÇÒhoKAŒŒúö7oñbŸÆÆÜÜš<ÞÓ34tñâÐPЉ5*&¦®®©N:]cãýûGŽÜ»§R…‡¯[·mÛ¬YXìÇ,Ö°a›7/ZD£Ý½š˜¨_ei=bqjêÙ³ãñ¿ýâëK¥>}šðá¤á*Uaá­[ ÁâÅóæýðƒJ%—ß½»cGiéÛóÃôÙ°ù fÖ¬)S&L022557ÿRެ¡¡¶¶ªÊÄÄÜÜÊêÈ‘cÇNœ0DŒbñç¿ú´£--}ð >žË52 ˜1cÁ‚ÐÐñãûöåpª«ÿúkûöéÓׯ¿ÿõ÷E •jmíéio/“=|xùrBBYÙ‡§wjuEÅ£G·o§¦J$¦¦ÞÞvv$Raadäºu‡+C†ŒÃfÇÅ:ô×_™™†Ü€Å¹ººº=xpíZj*ŸO¡89¹ºZ[×Õ%$DE=|XW‡ÇÛÙ¹¸88Èd))QQ÷î´¼½(*•æäܽûä‰Dâè8aÂØ±½{;8Ô×_½ºlÙ?¦¤àñFFA|üÕ«iiÕÕV[_Ÿ–v÷nb¢Hdg4mZhèŒãÆõéãçga¡Õr¹ÄÅÝ¿Ÿ“Ó¯·¦¡áÉ“¤¤††BBfÌX´húô¾}íìjj¢¢–/ß²ååK …ɬ¬¼{÷Æ—/P”Jµ³ó𰱑˓“cbbc‹Šš¦iB¥ZZzxtè R%%EE=zTR"—K$†µ×ЪÂáΚµfÍԩݺ¹»[Xh4••åå"ƒáääììâÂbUTÄÆÞ¹ófÚaµº¦&7·¼œN÷ñ;vöì‰'M1Âßßʪ¡áѣ˗êê ¯½¡ò×ju:¹\.g±ºv1bôèY³æÍ›814tðàN´Úää“'.\¼ø¯¿^½úÜ;3ZÖ^1LжÕg †Nwròð RãâV¯Þ¿ŸË ˜1cñâqãÜÜ4šøø£GgÍúþû?ÿ|õJ&CÑÖÈ_ÿþ-5õêÕ”¥ÒÅeèÐ1cfÍš6-(¨wo'',¶¤$>>6öÞ½W¯ôõÇáŒ]]™Ìüü¸¸ëן>ml”Ë«ªž>½s§°ÐÂ"8xÜ87·ÆÆøøÇ¹\©T£1D>†Êÿsì‡c³]]½½­­5šââ—/oÝŠŒÔ÷éçjuUUZZTÔÇ…E@À!“&Mš4tè€ÞÞLfCÃãÇ·o_»–”Äã)(jèøbøxÔ<}R(x¼Š ÎÓsèÐY³¦N  rs‹oߎˆxòäM‹oꋎÉäÒÒÔÔ«W›uæka¸=¶Ö¿µ¤¼VK¥º¸L›¶h‘¯oB‚;w–• 4{öüùC‡ÚØÔÖ^½º{÷Ô©+WÆÄ¼oýEoËÞÞ: Hqñóç7nDE½­“d²‡Çš5'O††Ö×oÚ´iÓ¹sùùÓGCËêOô© ¾Îøb¨=ªÏD¢Pxx„†N™B&GD¬X±sçãÇoÞg¨<õá‘hkÛ§OppPPHHHÈÀÖÖ·oïÚµjÕ÷ߟ>—×4z>_j™-¼>_-.¾?1±ªÊܼGñã'N8Ð׃yüøçŸ·o//ïÑcøp6ûþýæù$`mݧÏüùË—Oš4aÂðáú>ŠÝ´iÆŒŸŽŠ*-}]—QT&+(HJJJ‹]]'MZ´hҤѣ½½a89yçΕ+/¾x±¨èÃâZŠBQQQ\L§O™²zõ¤IRitô¤§øâµZ(lld0¼¼ÜÝ™ÌÒÒØØýûOœHL|Û¦Ï*•!ãé0Í÷? ƒ1xð‰ ÁùóÇ3™ÿîÖ€>@{¥)Í·P˜šzèP×®_f»óëÏg0\\† 3¦G+«Oov5´ü<ÞÉiݺ/òò^¾üñÇŽßÝ´ýï–'™ÜµëÏ?—”…­¹6柆i´îÝ×®MO/)9}zÚ4[[l»ÞÅöŸ¼(¶í•€D2666¦R__pÇá,-GŒX° {w"‘ËMJú§È€> ­Ð鄜œ›7##““+*Z²UΰòÿeGÇ   x¼ÈÈ+WJJÞÝÕäÙ¾@Q±øñã={BB6n”É–.=}zÑ¢îÝŒöÚÁúÕžŽÝÝ}}¿ÔCó󳲞?wuõñéÚÕÍÍË«sç–ÿ-Çãñxß¶àñ®®?þxëVJÊ’%BnnNNm-YYyx¸¹™š><|øøñkÖþÔ©Û·õws¹òŸƒáp‚ƒ×® a³##çÏ··g0\\,-GŽŒŠª¨0üRÙö‡Z]Z1~|ç΃wîܹsHÈŠOŸB=}ºeKß¾MŸÏŸî\ii{n1 Óh=z,_~þüñãS¦8;‰-kIITÔo¿mݺiSXسg¾–@ÿ¹ ebbҧϪU'2~ÿýÊ•‡8;O›¶|yÏž&&Riff~>‚Œ=`€“QS#—óù|>@"ñù*ÕçÞ) hŸètÁýû?ÿ|øpIIZÚš5ó绸$&þüsvö—¾AALLz÷^±"$D¥ºpaèÐ'O„Âi•¡å[odäädjŠ¢%%gϾzÕРѨÕZmUUcã¿¥OU* ¤$?_ € ¢Ñ$­V«… Êʼ¼Ü\.W$ú÷j´FSQsæÌ¯¿ÆÄû eüçVÈäN¾ûÎÛ‹ÍÉùã§Omm·m‹=ujíÚ€ÇÁaȱc½½ BÁã[¿~€Á°Xݺ͙³aCxøíÛ—/?z{âÄóçûú²ÙonÁ`Œ»w3fݺýû¸v-66**11>þâÅ?þØ¿úô^½Œßü <ÞÑ1$dÇŽ}û¦Mswg2­¬†]½z×®ë×ïß¿|ùöí“'ÇŽíÐA’·¶?~ûö-[-òóëÐ!(H_2..2òöí°°+FŽ´·{³`ËêO&ûú._¾eËÆ#Ftí:}úÁƒgÎÄÄœ93mš——¹¹‡ÇüùÇŽ;wïÞµk[¶„†::êkdx{!‚„N÷ô=úçŸÏ;þÁƒ‡ÿüóæÍ‹7o^° [7&ó;"­¬‚‚V­úõר¨ØØ¨¨GââΟ?xpÑ¢qã¼¼>¼ÕH£)/¿}ûðá'O8œ)S¦MëÔéKß®AŒ­íرóæõìÉåž>}êTvö»WÜ}NùÃ$’½}Ïž}ú 2hP—.;Òé ƒáìÜ­ÛàÁC†س§µ5…Ò¼>jˆ¾éÁáLL.ܲ%"âÎË—>¼sçøñýû.ìÒÅÔ´i+[ëô§í ÝÜ.ܺõСŋ]\H$,ÖÔtðàM›vì8yò—_† ³µÅáðøŽgÎܸqÿþ… ›uÃ{7¬<Ãdzy~÷]ÿþ>>l6K$ZZvë6p``à!ïï/"‘\\–.=rdïÞ3gΜٻ÷Ì™£G.ìÙ“É|ÿª·¡õàßÌ,@B ÅÆÆÖ–J ‹Šª«mmG9’ÍNIYºtܸ%K¦O ýåýœÖoŸ#\]W® »{w×®=äòøø¨¨óçïÞ‰vì Ÿ6Íʪù¼àâ2vì°aÞÞLIIlìùó§OïÛ÷ûïIIZíС?þ±gO Fsp8SSÿ ¦M3fÙ² ""~ûmÀ¥21ñ?""""=ª¬”Éô›i°X6»[·ñã'MÚ´éÂ…K—öï<¸v-1±¶ÖÛ{þüóçÏž;Öή©F-­? ãñööC†L˜°jÕ‘#ûöM›†Ã••¡è A?þ}çΞ=C†H$ùùIçΓ&íܹzµ—…ÒšöÎÎsæÜ¼™°sçŒeewî\¾|÷nRG§{y¹º2™¯ËÓÓsýú°°¿þZ±ÂÆ&77"âÌ™Nœˆ‰IO×hÜÜÆ9ÒÎîÃ[”t: 5õÚµ’“~ýzô°²ú²§qH$—9s¾ÿÞÚúÑ£={¢£ËÊ>¾µËÐò‹52êÓgñâµkwíÚ¶mÖ¬€*‚ìí'N\ºtÇŽ]»6lؾ}ñâîÝMLš%jˆ¾A‰Ô¹óÆáá·ooÝêëÛÐ{ùrXXllcc×®[·†‡ß½»q£‡™ÜZýi;P·²êÛwêÔ‰;w61!‘¬¬†2%$$4töì  GG"‘Bñôœ0a„!C¬¬°Xm½RžH´·Ÿ8qãÆõë7ož:ÕÞ^/ßE‹¶mÛ°a×®÷÷ét EMMiiyye%Šº»;ujÿþNNdò»/ ­?ÿzô÷ ÕÕñxee_ê§þ™|~]]U•…´mk1{ûE‹nÞ‰òóׯï×o„ðp ¼ü×_{ôÐO½èôþýo߉23/] |{:F 89­_ÿòeAÁ«W?ýäâò¾I6™ìãsèPIIAÁ³gË–ÙÛ7O® OÏ­[ãã…ÂǧNmH>\[+«Y³®]²²V¬pwo^å¡Pzôøõ×òr©”Ë­¯¿ysüx{û½]'“½¼öí+*âr¥Òœœ5k:wnn>hбcµµgÎ1†Õ‡c2CBbc¹\©´¨hË–®]Éd*uР¨¨œ©´©Î$R¯^'O>}*Þ¹3x0‹ex{)”>}Μyþ\*ÍÎþá2ùcRƒa#£ñããâòò*+Ožô÷oÝ”šJ Ø»·¢¢²òàÁ¾}©Ô/¥0Ìdxà@II^ÞæÍ]»~ªv†–7Œ&ÝÈË{ôhêTSÓ­ª¢otz¯^.ÔÔäåÅÇÏšeaѼú€ÁX[Ïž}ù²HT]}èP¿~tú—ÕŸ–@£EGçå‰DÑÑtúÛÒ617îÏ? 6lðó³°80*êÅ‹+W23y¼Ë—§O··ïØqõꌌÌÌØØq㌌`ØP{o­€a#£±cÿüS(¬¨Ø¹³gÏ–j•°g'‘\¹2}úëýñ¥ýÿþsCŠjµ( A‚Á@N§Õ¢(‚àpÌ—I¸€Á°X:ùøK¥¹¹EE:‘‡cjªÿ­B‘Ÿ_]¢Ó§»»[ZTRÒ´€Áy{8iRHH÷îžž66l6›íèèà€Ã‘Héé$Òû¦¯ —.mÛvýzqñ§OÉ”•EE]¿ž-•6}¢V××WV …âåÅ`‚ÁP©-¯ÿõëMR-(HMårårõô”Ë5­¶²2;›ÇS*!ˆL–É4EiJl¢-m/onÞ£‡¯/ÎãEGß¾›+“}¼‡Åâìì‡ËʘÌE‹–/ÿá‡[·~úéðáèèÜܺº–žÓje²ÆF¹œHìÔ‰BùR©ôIV® ¨©9~|̘çÏ›ûâK”o{>¥ox¼……‡…R]}ãÆ“' ͉$´Úºº'ORS++©Ôºt±´Äãóó[«?mã¤Ò’’Ü\>ŸN·³37çpª«Y¬úú§O“’P´woGGss33‡Á ³²Š‹e21ÌÞËË™ÌÖù‡¶¡õþ €/ÿ±I§“Hd2¢RÙl®ª*7·¶–Nð÷77Çá’’$‹LÆ` ˆÏoÍ7 ™Ì`É0L¥Ž7r以øüêj®)$ÃãœæÍ;qâáÃíÛ­¬Ž ¿u+::5‚üý]\ á÷múÓj+*RS‹‹[r"E«mh(,llT«ß”ˆN‡¢ÃÆտùRim­@ T6M[QT£‘Ë•Ê7¿« ÃÚ‹ÁP(ÆÆT*ŠŠDUUbñ§'h*UVÖŽÓ¦£V¯[·eË‘#7nüð•ZS“œvüøÆ6\¼øøñë“÷·aŽDÂb5¹\­þ2Óq¡cDZc—,qwÏÌܱcêÔ’’÷˧µåÛžOëC¡0™ Éårù›Öje2¡P.‡ 2™Ín < ÕŸ¶D¡(/Ïʪ¨@_ߎœìí „ŠŠÔÔgÏtºaÃú÷·±±²22"“kjΟ¯¨P*„J5ÄÞ[ãÚ’öVÚÿ± Ee²²2.—ϧR==jj>xðñãÐÐ;Ÿ={üxÉ•ŠÉ46.+»~ýða.×ð£ð:\.Éd(*GDõì9cÆ£G[ó R}|Ö¬ùñG_ß´´¹s'NŒŒ¬¯×éô[’Œyó>œ˜EµZ•J£iÙ^§ÓhôáЗ©? 3™!!úé¬Rùf-PEßÿMŠaíÕéär@&ƒ ÅÄD¼BЧ¦ÎJ%³}û¢E11;vHvv={†„lÚtâÄæÍׯŸ:U_ïæ6zô­[µµï“. ‰ææ¶¶T*ŸŸ][û%&êJ—.‹O˜À`ܼ¹bÅ­[ÕÕO¸lhù¯c?ŸÒ7N¡Här"ètá͵7!¨T‚”J‘H¡Ð·È0ýi[t:‘¨¤$'G$b2ÝÝÝÝmltºââË—‹‹ÕjµÚÊÊÛÛÝB ¸\‘H§Óé0Cìƒ1Ô?´u{ÛW}hüç²ØÉåyyqqK¥ÎÎÓ¦ ¦ÓýþûС={úù úÃóç=t¨­­—×òåþùîaxEÑæ—÷=_«mlÌÍ}ö¬®ŽFó÷ ´µýø}%0L$ššÚÙQ©BaNNa¡XÜ4 F6»[·aÃ:tøš9¤ ­ÿë’iI9&‘ k¯RY]šš•¥PX[Ø»·¡¹Ìt:¹¼¤$!áҥ͛ÌÉ!ÜÜ|}­¬>|Í/‘èì<`€££FóâEJJq±Bñ™f†˜š~÷ÝÊ•#FH¥çÎ<øì™Xü%Ë·T*/3³ @¡àpºvuu}=[ ‚0™nn¾¾ EQÑóç<^sàùÏ„CïC¡àñÒÓ««™Lÿ.]LLÄâÂÂêꊊÜ\¡Ðظ{÷ÎŒjj23+* Ãí¥µö¥—V«ÓÁ0‚`0úõÞÎÞø7ó<ƒÄç''ÿòËÁƒùùÉÉ[·†…]ºÄd:tñâÓ§"îêºn­íéÓkÖ„…•–¾yÒB£‹y<‚8œîÝûõ  RE"ŽÏù2%…Ë e²ìì£GÉÉ™9sÓ¦#GŽ wïñB&c±\]ýü:wV«¯^Ý´éøñ‚…B"ár“’*+ÍͧO_½zÒ¤„„Ç Øì  ï¿ß´Édž?½^ò%iyýOœ¨«3\þ†·W$JJÚ³',ŒË}øpÅŠÈÈãÇ5šÍ›ÃÃóò4++oo &&fÛ¶ßçr ¢Púö=|øðá©Sy¼èèÈÈGŠŠÄbÍÅeÒ¤yó:uR©rrNœ¨¬üÐú •êá1eÊàÁXìƒ ¦§î=9X¬ƒÃ„ óæué’›{êÔ¢E¹¹?/fhùöe_AZÚÁƒAtôž=;v¬YAaaÏžA§ç‚»wwíÊçGDL™’˜( hÿþí­Z-ŸŸ“SP VÛÛkd”žþë¯AMHÄçùùõè¡RED66ê·jo®™RY]]Z*2½{OŸ>n\¯^:]Agb‚ÇçåݺÇã©T„ †§ç€ÁÁ~~,…âäÔ¡…Ã&&½{O˜0nœNÇ妧_½zófn®HÔúúðoå?™—H¡xùò×_'Mêß¿¾~ÅŠõëgΜ?÷î©S±X¡°¸øùó?þØ´I$zßù®¾þÖ­­[5jûöñã¾xqÚ4…"'çìÙà`.W(ÔjUªÜÜ}û¦O R*W­Z¿~úôµkOœøßÿ´Z>¿´4'çÎC‡d²¦ç+¹¹;wNš´i‡³oßìÙ¿ývö,Šß¿þü¬YS¦$'Ï;mŸ/¾~ÜÏÏË‹‹‹«ª>>}Öj%’Ü܇4ïÍ$Z­X\X˜Ã<^Ó–ÖE5ššš§O<¨®ÖKL«ml|ù2)éþ}A?…Ôj‚œœ””¸8™¬®N­–Ë o¯TúôéÞ½ƒ .ýòËÚµãÆíØqâ…"—óx¹¹·oïÛÕ\Z¡ÈɉŒ|ôH,^¸p„_~™>ÝÊŠÉDQ /ïáÃ;GZ»öÖ­šš÷mYÃ`lmÇ_¶läH¡0<|РøxàóÖ6Èd7·¹s,àpââ–/¿}»¢â㧨 -ÿ9|L7Þ,×r}CQ‘èáÕ+'Ož9S,^·nùòŸ~úõ×9sP´®.#ãâÅåËþé§”¡P§£P ןÏë ¦¾þÙ³Äĸ8j qÞF©,*ŠŽ¾};>ÞÌ ‹++S©d2<þÁƒ[· H,¾u«´´9T0ÌÞ /ÿºüöÛ²eGŽXX¬]»fÍîÝ. ¨P˜•uþüòåwîÄÅñxÔ´R÷Ýw&Lœhg‡ÃAB‘––œ\^nm=dHpðøñùùbñýû·nåæŠD:]këÀ¿XŸ’»cGww_ß/õÐüü¬¬çÏ]]}|ºvusóòêܹåËãñxúaøºàpvvcÇFFÆÇÏžýêÕ„ !!ëÖ¥¤H$Ÿ3%GÃÅ%(hÀ+#ãúõä䊊†–|YÀÍ„ FçÎkמ:5{¶X¼qãœ9›7nh¤G§ srnÞŒŒl›ò€/ >T*•r¹@ÿV( ÅÑQ§ Ÿ=ûé§~ý 2ö ø¸½9àß >˜À~üwøÏ¥ù€$ø À߀ þHð7 @€¿ü ào@€$ø À߀ þHð7 @€¿ü ào@€$ø À߀ þûíV=66::,¬®®®ŽÏ×éPEËÊÊÊÊË9ÇÌL§ÓjuºÆF@,ÖhÔj…¢C“ñã§LY½úŸ­ùòåK—.\ÈbÑh0llldÄfÃ0 ëÛ€ b±D"•®Zõã{ö¾&ßX€vòäÎjµNÃññññ))‘H $$$&¦¤‰D" ÛØX[ÛÙ•••——”Ðéd2™¬P(r¹D"‘tì¸oߎË— …õõåå›7ïÚõ×_m]ç#†íß_ 33SS33±X(¬©Q*¥R‹%’ÆF­V¥R©D"™ ‚üý}}=<Ú³gÆÿýoÅŠ­[š_‡o&@JJнt©ªª¶¶¡¡ªª´´º:3óÕ«¼<‹@ðôtuµ°àp8:½¤¤´´®Gf2Ùl:ÝÑÑÑÑÃC£Q©‚ÆF ºÚÝÝÓÓÏ/,ìäIÿ)SæÌYµêËÖ62òÒ¥cǪªx¼ÊÊ´´§OÓÓMLX,33_ß.]Øl6›ÅR(”J¥’H$„¤¤ääÔÔ/^¼HO×éÔj¹Ap8iݺ~˜9ó—_ví:}(+ÐÖ|RVÖóçwï … EE¥¥ÕÕ¦¦d²‡‡³3“YUU]-(J%‚$£ÑètC$’JUª—/³²rr´Z­V&ëÛ·oßîÝ9‡Ã1226¦Ñ4F£¡R±X…(+ÐÖ´Ó¤'Ú²…Fƒ ™¬´´´T,V«U*©T£Ñhêëkk!H­~ö,=½ªJ.—HÔj&“Éd±¨T*•É<}:,Ì•ýv8ý¿?´òóeÙ»wÿþÇõÿ^°`îÜY³^½ÊÉ)/ïׯo_cc//ooOÏ/22^¾T«µZ F*Õh èûïgÎ8ðȑӧïÞŠ ´í4@¢PD©¤RŒðx‚°ØÆF>¿¬¬¶¶¶V¥ª­­«“ËëëD"ƒÅ21a0X,só£GOœ8uª%ÏׯM1 F"áñDbIIYYeåo¿íÝ»e‹L&“‰D G"­X±zõÏ?¿þ·½{÷ìéççèèà`ggllbÂdZ[[Zš›·.¡Âëu¶··³c0¬­­¬:t`³ML8™L(¬©áñª«QÔÜœÃa2ÊmG; ììÌÌ ¨´´¬L&«¬¬©il ‚úz•J$’Ë««y¼š"‘D¢ÓY,ccKËÇ=y²%OÖ' ¡0+++ëÅ‹òò²²úúÄÄÇŸ>¥R©T£¡¡®®¦¦_¿ÀÀ^½ôyóöï?xð÷ß &“FÃ`°X<¾¾¾±Q ÈËËÍÍ͵°°²²µ6mòäÑ£Y,&sÏžC‡ O« Õj4D"…B¥ÒéúOªªjkÝÝÝÝ;tÀã <¨,Ðv´»éèÑ_~™?ƒ¡R &ƒ16./¯ªª©áóE" •ʦ’&&&&ff†…FçÎ=}úôiRRbbB³g……UU ÃP(‘44ùùÃa±¥¤<|øèQJŠþ ‰@ ÿ¯¦F[‘B¡TªTéé™™ùùFFl6ƒ1`@¿~}úüôÓ† Ë—oܸuëÞ½-o»……••……þ'SS##C«U*Y,kk *U&“ËU* ²@ÛÑî’4têäèÈdR(Tª¹9O"‘Hee< ët*ƒÁd2 ›Íá>|âÄÅ‹-yfttDÄ¡CW¯^½zýú™3gÏÞ¼™–öüy^ž>Èih Åb‰D&kJ„€Åb0RVVYY]Ÿ_TT^ÞÐÀç …;ZZ::ZY™™999::9±Ù ŽÁ`0Œ>Äú믨¨èèÔÔÇSRôwµ¼í‡Ã1™,ƒ¡¿»©¢‚Çãó««««E"•J©©€wœB$2™T*¶Í^÷`04š½½§g—.d2 ¿¯ “ɶ¶^^~~NNL&ú€o•v·‚Äåòx••:‰äà–öüùË—YY™™YY>>¾¾¾¾ÆÆFF&&|¾PøþIÊÛè“=$'§¦¦¦Þ¿ÿàAZš>(Òh4­¶é§V«Óéƒ"Âãq8¥R¥R«q8‡£RÉd"ÑÔ”Åb2ííml,,…B¥"ÕjŽJµ³³°hl E",‹Å`ôÏ|þüÅ‹œœN:urt¼wïÆ'ú÷>|îÜ×–Éd±˜L‘H$‹ËË+*Êʬ¬,,X,‰HT(P‚ˆD ²ÿ-„Db³™L‰jj îF¥PLLLLÈdF(lläóe2­öËÔƒ!“Ùl##&AÄâššúz¹üK=»uP(ݺmܘ‘íè¸q£›ÛĉçÏóx_¶Nx|ÇŽ³g8;lXttŸ>ݺíÞ‘ñzLÎÖvöìðð?ÿ\º4#cÚ4/¯E‹RSÕjý–´@°³›8qõêI“||¨Ô–ùØfPT(|ò$,l×®¿þ*+û2«Ý­Ñÿö„¡öbh{ -ÁP©&&&&4šFÃç×ÔðùJå·$OøZ´»©®®¶V ðôtrÒj &“ÅòðpsëØ‹Å`°X&“N§ÑZòœ?ÿ Û±ãÖ­èèû÷ïÞ‹KKÓnjjlÌbI$‰\®O§Íd2$’@ Êåuuõõµµ¥%›Ý­›··““þ¯JJJJår…B«åpèt£ºZ$ •J™L­vr²µµ²Òj!E@,‰¤R©ôæÍ[·îßD"™lÓ¦uëæÏß²å—_š2潋J¥R©T.\¼¥ßøG"4‹ $’F£Óý©Éÿ$’£ã¼ygÏž?¿wï°a¦¦úO«ªnÞܼyذéÓ/\ÈÍ}SGÇÉ“ù%2òðáà`'§¦õ¹üþý3úõ Žˆ¨­mÍd‹åpú÷ÿþûC‡öî??(¨C‡¦³pIZÚÑ£!!£FíÛ—˜(èt„Ç;8,_ž˜xçÎÖ­nnï›d£hvö®]>>½z?^PðyiÍßæÌMLD¢´43³AƒFš2E£iù´Ú††§OccoßÎÉ‘H ˆÁpq :ÔÍÅÂ`šJa0µµOŸòxŽŽsæ=ºeKMÍÑ£™™r¹>"CB6lðö–H<¸~ÝÎnäÈÉ“­­›¿C ÈÈˆŽ¾?3S(lí„‹e³½½gÌØ¾}ëÖmÛ&OîØ± `Õªþýûô9|¸¼üÝ6Z‚p8+«ààÿýoÆ oï.^¼~½¤D­þtÍðx‡Ñ£CC{ö45‹;pàó$ÃôŸN2äô颢ÈÈÞ½I¤·ŸÅãýþû¸q^^K–<.“µ½íf/­³wÃÊãñ¶¶Ã‡8µsçÔ©ÎÎMë›|þÇ»w1nÜñãÏŸK$ßV8mI» ¨T2Y§ƒ F$b± ­¾ž@€ AQ…‚D"“Édcccã‡I‡8°mÛ½{÷ï?yòìYFFn.“É`P©®®¶¶ffžž:XX8:Z[›™1 Ïf›™Q(2™H¤Õ*r¹B¡ÿ„D"‘0™L¥‚á+W®^}ù²¤¤¼¼ºEQT­V(”J¥²o_/¯Ž}|:u23ËË+) ñx‰N‰`X¥zö,-íÕ«¬¬ììW¯`Eíí·n]¹ræÌ vï~3…ƒþÌÒÇ ëC#kk++ FQ¹œB¡Ñ„ââ’ý¸€¹QbçÌÙ·oÇŽîÝ32–,éÑcݺ?þH 8>9ùçŸOŸž3'!¡OŸƒKKõÓW,ÖÎnìØß?thÀ€ê꟞:uÔ¨S§²³e2##F,níäAØì~ý–-:‹ŠZ³æ»ïÎKMmltrš6íÒ¥+W,سgêÔÈÈ^½ôõQ«+*ÂÂ&O~ð€BAþ/ Óh;wž:µaƒX\Z*Ƽ ÆÜ¼_¿U«Fb0jk Œ 3¦IŠFF..]ºtê„Ç>yòâEMÍû&û*U^žLöøñÝ»99 3NNŽ3|¸ƒÃÛIQ ¾5go?a–-üñÛoãÆYXdg'&––ªT ÁÀðÛA¨¡åßF§“ÉÒÓÛ¹sÕªû÷¥Ò–xíAƒœœFîÙóŸÐÆbÉd2™HÔéÒÓW­2dË–ää¦z£¨RYWWTôµ¶'j/†·×°òbl=b„«ëÉ“ÙÙffcÇž;wëÖÊ•û÷Oštóf`àñãŸk“ðo¡ÝH<^e¥@ “uìÈçkµj5 —•••ñùŸ/êt0L$ÚÛÛÚÚÚ¾û·«V-_>{öýû÷î=xÀår¹EE]»º¹uèØ­[§NNN66о¤RYW§Ó‰Dr¹BQRRVÆçgg—–66öèakkf¦V×Ô(Ô´¢oß.]lm««kjÄ☘””W¯X,:LÖ‡FD"€Á˜™±XtºZ¢jµµµ‰IŸ>:ôé“‘QXX[›ž^RR]›[\\^¾hÑüùS¦˜›[YÙÙed<{öüymm]]]]yyiii)…B¥‰jµF£P8:ÚÛ³XZ­V«RÕ×óù`3ÄÀ$±΀¡¡99Û·/Xpöì‹FƒÅ¦¤Ü»WXˆÁìÚ5aBïÞGŽ„…•–j4X¬­íˆ¡¡>>••çÎõìyð`rrq±>IcczzMÍçÔG§kh¸v-4tĈK—„Âæ 9ee.?ž‘1wîöíÝ»[[ú ŠªTuuùù¯^ÕÕ5?ƒ175jûvoo©ôÚµ1cëê>O›I$/¯… —,éÝ»®îÌ™>}ùåÙ³æ*µOŸ oÜ05Ý´iÔ¨‰¯\áó?ýܲ²ë×—8ƒ¯"FIDAT-›1#;ÛÏÏÓÓÈèC™#QT&ãñ22ÒÓ+*$’wÛ‚Á0™]ºLœ8b„]zúåËýUVÖºé'`oߣ~çÎìÙîØK£ýüsffÏž½z}‰òߺþÃ0O$âp$—WUåäddde¥§K$ÿLý µCÛ A†•';u5ª{w<þÉ“¥KÏž}ð ´T ÐéJKÃÃýõÖ­… £¢FŽôð`0Nœ¨¨hh«HAíò RI‰DâéY__VÃx èÑ£k×§OŸ?öìÞ½ØØÄÄêêêꆆéÓÇ2¤_?cc F¥ÒjU*©T¥’Hd2¥²¼¼ªJ­ÎË«© srJJªªˆDU©ºvµ°`³Åb®)4‚aÁ`…B­¶·77715ªoß.]rrjjjj”J‰D§‹OK+-U*µZ¥ÒÔ”J¥ÓÕj©‚ìí9*Õßßήéþ"}˜„¢:N—››žÎãUT”–––––;:vè`g'‘Èd*•N§R)•ÆÆl6 —”K¥X,ûõÒ|#…âæÖ½ûÀcÇz{ÛÚš˜ ˆD’ŸŸ‘wæLRRq±H¤Ó;öë7|xÏžµµ55ÎÎýú‰99ÇŽ]¿^\ìî4lXß¾tz]]ttTÔÕ«±±uu:ƒaoïçܹ³³³««¹¹‘ŽÁ¨Tuu™™—/ß¾˜øòå›ÓN¦P,-ýüBCûõÓO]q8¹œÏ¯¬LN~ø0&æÚµâb™¬ixÇbŒºwÿ svæp˜LV(êꪪ =JNNHxð ²²i‹T{‚H´´ìÒÅÒR.ÏÉÉÊjlÔh AŒ Z¹rÝ://‚ ¡ÐÛÛÆ†H +-•H(W×ììŠ/RSKJ”JÁáðxÖhT*­öÃm¤R»uûý÷çÏOŸ=‚nÝ9Ò×wåÊGÞœ\jµ‰PøöÉ †aý¹=N­þx°ƒÅÚÚŽ3sf÷î|þýú¥¥}Þô‡³· ÙµkáBcãû÷,8u*#ãKnž"‘:w^±âÆ7úõ“JKKy<©´¹…B§[[ÛÚ*•gÏxzîÞ [¶ÄÄ\¹âà°e‹«ë˜1ññb1kb2`ÀªUk×<{ùrv¶TÚš³QÉýû‹/Ztÿ¾þÿÉd½|©òïÚ>™nÜÚµçμÛZ,–Je³ñx‚(Cr¯Q(ŽŽ}ú88@PqqXXYÙ‡·0áñvvãÇÏšÕ©Se埮Z••õ9Á ke5yòáÃkÖøûçä:äïåJMM[$ŠÐéøüèè©S»tY¾¿é(®þªVH$¼½½½]];wvwg±4±¸¾^. U*¹\¥R*õïÒU*…B©d±X,:]ŸÅÇÙÙÜœÃa­V«U*U* †Á ÓI¤êj¥R(JJ”ÊîÝ9"†õ1§Ó¤ªJ£ÑOÉQ”Ã1331AQµZ«­®æóÅâ²²úú†}=;t°¶¦Óíí‰D©©!´Z{{;;KK"‘HÄb¥R±X,Æá`X 03ãp H¡Ë•ÊçÏ_¼àóõ‰Œ ‰Áh{ÙãñVV£F˜›——ߺµ}ûîÝ÷ï×Õi4”šúê‘èàpäHÏžnn&&iiÏŸC! kµYYGFEݼI£ÑéݺmÛfjúòå‰×¯ÇÆR©D¢¿ÿ®]l6•ŠÃARùòååËÇŽ½|ùæ7#È«WX¬§gXX``‡¦¦Ln®D¢ÑîîôëשŸ÷ý÷Çß¼™Ÿÿ¡Cà0L$ÚÙ98°XbñË——.?Ÿ”TXØ4yö,9¹=$ ãñ$ÐtRïØqÞ¼M›Æ+)Ù»wÀ€˜oïØØÿýÏÅ…LÆãa‚ 2ÙÔ”J… *µCcãøøqã š>½¬ÌÞ~Ñ¢?þ8vìÀß~KJŠ º|ùÍün*UIÉ¥K?ýtàÀ‹”Ÿ_Xز£õblܧϤIýûS(99?ÿ|çNuõ‡¶;OžìèÈãEDüñGs_´¹œËŽ>}úÿ‹‹;w./¯­‚\&ÍÍ»u800Jm>òN¡øûãp”—÷o`A H¥ª¬LM}ø0&¦¥gtº¹sÕêÏ ×}€D$b±D¥vîŠZZš›[Zš™ …R)‚ÐhX¬©©‘‘XVV\,Òé‹D<ž@€¢0ŒÃ™˜°ÙLæÑ£'Nœ:ÕÖ2G2ÙÜÜɉBQ*ËÊêëQ”N§ÓétýoUªÚZE»u³¶61Ábõ¡hm-—[Y©V£h‡*•V«Ó õõ jµV‹¢ðßèÿA ++Oϼ½œ:t`³):ÝÄÄÔ‹ÅáJJ}I †Årw·¶&‘êë³³_¼(-ýø ¢ EqqAACÖ·ï!¡¡ÙÙW®DEeeñxÁÇ6œµPEQ†„D²µ>|×®E‹ èС!Cnܨ¬¤Ñ<=u:EQN߯bñx,‚D¢+WvïÞ»÷îÝÂB‰‚Š‹÷îݽûÅ‹ï¿ß¿ÀWW2ùòeO,nþ.•ª¢âÚµƒ2dkСìY7~÷V{ýúÂ…ááÅÅ Æ>Üή¼üÖ­¨(.÷ó¦X8œ¥e·nƒ¹»›››™y{oÝú¡s5X¬……¿?•ŠÁ‰ß¿ÿ®]AAún¦®îÎ_Ý»72²´´©-0L"uì8zôœ9Ó¦õéÓ<µÆbÍ̬¬Þ÷¾ý[Ap8 ‡Óéøü&ýjïúAMié¹s tëvíšHTPŸ_W§P ˆ¹yròÝ»><~@€©idäåËUU_éãöbx{ +/“åæ^¼U[;cÆ?ìÞ½k—X|ñb^žµõèÑ›6õê…Á@Pi©\®R½Ûß­óðo ]Hë×ÿòˇíÞ=s¦N§PÔÔˆÅb1‚0™ ‘haanÃ8K&—–r¹2‡ckkd$“UWËd(ªRét …~ÝH£Ñj¥R¹\­æóE"…‚T*­–Á`0Èd"‘J%I$•ŠLîÙ³K—îÝSSSRRR0±X£ñõíÞÝÏ‚**^½Ò× A‹Õ`4‘ˆÃÙÙq8Lftt||m­»»‡‡§§™™••™™PXYYP H$bqUÃd²RéëkccaýâENNeei©JE$‰DbCƒ@ TÖÔÔÔ…úS$&&ÆÆææ§O‡…EF~™#G&‰0L$̘±~}@À»¥d2¡°ùZNU(Äb™¬y÷?Šjµjµ~kÇ{”keÕ«×ìÙ¿ýÌf¿|™œüøqV— A¶¶––]ºøøÀ0é$Áã E¥R¡P¡øô;`¦¨(6öèÑÔ邃gÍš0aåÊÐPA(ÌÊJM‹;yòæÍ¤¤ìì×Ï•´PT¥’Häre³ øé§+d²ÈÈÙ³CCóòT*êÒƒa­V&“HôSÕjU*Eëê¸Üººæ:DÂãUUÉdD¢™™‘‘ÃÔú|vú¾³·Ÿ2å§Ÿ~øÁÎîÉ“5kÆŒ¹¿¾þCr$lmGŽ5ÊʪªêÖ­;w >wõEU*‘¨ªª¢‚ÇS©>¤X¬~+ 74ðxUUåå:s¦ÕòùÁÛSDŽÏøpÕª±c?¾Åîß‚P©FF O¥vé¢?ƒ$µÄF¾Ü$Ãõ‚ H¡¨©),ÌÌ|=‰VÛØ˜žžœÌãÁð¸q;š™áñTUõu/Ûþ”½Ú^… Cå#“¥¤¬_?yòŒrù?Ì›:y²³snn|üÞ½W®88üø££cMH2Ø@3í:@Òó¿ÿ­\yúô† k׆†Òé$RÓV…B.—ËMMMMµZ E&«®‹µZ‰E1 ¦)m·¾|]P(—+juÓ@cnÎb‘H„Ã!ˆ‡‡µµ©)‘È`‰X¬¿—.jµB!(õõõõ óæÙ& ‚ÒŸ/ 9rÀ †Fc³+++*Š‹QT¥BQ¹\$’É,çñˆDÀÞÞÎŽÅ27g±Œ'O²³KJ ‚¤RH$™LƒÉ$“étãäÉ3g¾Vh¤G§S«år…EŠû÷Ù¼ù—_¸Ü÷ob‚a ¥Oý™ýu»Í¿Ó¿}ß_áñvv“'lg—“¾mÛ¦MééúI;‚˜š’Hýú½ùw(ªVK$*‘HT*ÿ¾­ ï¢Ñðù))wîœ=›’r÷.ÏátèÐ¥ËÌ™¡¡!!;w2™bñäÉ'NddðùímEI­æó‹‹…BîÛ—ÉLL7nÇŽŒ ýY,F36&‘„Âòòúz}(¤ÕŠÅUU"‘N§?ªþî),E5ý*ÞçÔŒ@prš4éĉ_usKIYµ*(èܹ’’O«p8›¾}GŽtpâã¯^-(øü{¼4šªª„„Ç·mKHøxI*µO;»Ù³CBLMÿüsçν{[–Åîué‘H¶¶£F nnÞl$’¯¯~ºýïÚbG ˜›»¸XX@PeåŸîÞ}ð`LLËr ~É3H†êÿ‡Ñ¯£è{A¾þé°–Ù‹áí5\>(*“ED¬[·`ADDÓ§ ưa׮͚%“éWû çôlݺ}{xøÂ…sçNšÄdÒhJ¥þüŸ/”•9;[Z:;ðR)“a±ú„¯Ík úU#¹\.W*•J}Ö<†I$D" EaƒÁáP´®®¤DŸj†!H£!‘ •ŠBa±  }:A”J,V¿ÊA£Á0¹ºššR(çç+•"‘RI$Òh †\. …B!ŠB“©RAP(Àp¯^ÎÎ;VW úóF(J¡ÐhlöÉ“§O_¸ðOÉY§“Éx¼¼<‰„HôóëÔÉÈçry¼OmŒjéÔ†q8:ÝÜœH”Ësrêë›ßéÃ0…âææînf† ¤!‚4àÕ«ª*µzòdgg3³èèÊÊòò–Ÿ&@Q•ªºšËMN>}úÁƒîÝûöí×ÏÞÞÄ‹ÍÈàó_ŸfÁ0ƒÑ»÷Ö­;wþðƒ‹KMÍùóK—nÙò×_†|Ûç¢P”•%$äähµ'Êdׯ''74è§yD¢£c¿~..L~þž=ÅÅúÐ_§«¯ÏÌÌÉ‘ËÍ̼½ííi4~õJ¡@Q,–Ãqw·±ÁãëëÓÒ*+ß}wN"¹¸¬\yüøêÕ½{CPJÊ?ΛwìØË—o20L£ùø¬_ÿÇk×:9ݼ¹ti·nçÎUT|lŠŠÁ˜™õî=x°³³B‘‘±qcVÖ·wÍ1‘heÕ»÷ˆC†8;7Oq8KK½–þ«†¬¹yÏž]»r8uu áá‘‘÷´,Æ—;ƒd¸þa2=<ºu37‡ êj.·¦æ]ÖVönˆ½ÞÞ/#ÍÕ58ØÇ†32Ö¬ÉÏ_O·Ô?À¿o&@Òsøð‰/Ι3sæäÉB!Ÿß” Îٙɴ±ÁãI$ѧdЯ) )J¥Z­¿‘† <žÉd±èt"ƒÁb  F§S*›‡D‹HD‰H¤RñxF,V­V«uºmé13c±p8[[‹ÁD¢ÚZ@,–ɈDkk …¢éM´ ‹E$vìhddfVZªRápGŽ=züø?-c•ª¢âêÕG*+‡ š9såJ¹<::6¶²R©¤Ñ8‡N´Ú§OOJJzý}öì9~|Å gçêêÈÈë×íìBC—,™7O_B­./‹;}:2’Ë•J›NFÑé~~#GººBPVÖÆ"Ñ·và ŠòùII›7Ϙññ-v*UaaXØ–- P©¯^}›“G"ÑÉiÊ”9s:uª«»~}ãÆÌÌ/™6½mõŸDòóÛ¼ùàÁåË)”§OccŸ=«­%‘üü&Nܼ¹W/­öáà ޗé°-ìÝP{1¼½†–G#£¾}çÍ[¼ØÇ§±17·¦÷ô ]¼84‚bbFúÐJaKüü;ùÆ$=¯¯±Ìž=nܰaD"©TJ¥V«¿óEõ¡‘>%ƒ@ —kµx<™Œ l6•J§ë/uÕ_.¨ÕªÕ:A:a0ú›ôkLo¾%V©´Z F©T©d2M'ƒÃÁ0Ã8œJA¦¦DbnnEŠ–•I¥"§P4=§¡¡¾^"‰´Z¥R.—JY,2™B¡RkjŠŠ Û‹|5šÒÒû÷[±B£>|úônÝFŒXµŠLFQ±¸±±²255>^©ÔéPT«åóËÊòòÒÓE"ý :HÄãåç?{†Áèo}Ñé$’êj.÷Ù3•J,ÖhÔꪪðð3g"#Ùì1c¾ûnÙ²)SP´ª*//!á×_Ï+(1¢kW©ôõ[в²[·–-;vL&›7oàÀnÝ, %”J¡ÇKM½?-íõû=JKÓÓsse²Þ½»wŸ7¯[76›JEQ©´¬¬ àÆuë®_ÏÈhl|{ŽÙ›{{wébl A;vDEåçÿiÀuººº›7×­5jݺ-[vî\¶lÓ¦Áƒ!¨ªêÑ£õëgÏ^º4:º±ñõs Ba|üÏ?·nݦMÛ·Ïž½zõîÝŸÿòå¹s+V ¾yó‹ïËF¦Õ /^Ü¿ÿä ‹A¯^56¾ozˆÁ ˆPøêUrrr2‘haÑ«W߾Ϳ—Ë32²³/\ÐOøôŸáñl6‡ÓÐ’òçŸW¯¦¥ÕÕý3ùþz¯Ã:N§OdÃ:V«·‚††§Ooßþë/ ¦y+.‚H ‰„ zóåÂC­V"ÉÍ}ø0!ƒ)-U(>µ îSåq8GÇ™37o^²ÄÆæÅ‹ x¿¶|dÁ‰D"£Ó54|~K Õ•ŠÇKIÉÌT*—.>|ùò‘#‰D©´¸øêÕ5k¦N]³æâEïÝ×!meï†Ú‹¡í5Ü?hµZ-…âå5aÂøñ“&™˜`0BannLÌÂ…C‡îØû¡Æ-óðoNJº{÷êÕŽÝÝ}}¿ÔCó󳲞?wuõñéÚÕÍÍË«sç–ÿ-Çãñx-/¿mÛÿþÚ©“©)™¬ÿDŸ, ¦¦ªª¾^é?g³MM™LggKKSS<EU*•ªiúûx=@ªª‰ärýe>ŸÏ !H¥BQ//{{6ÛÌÌÚº)Ï›Z­P hLLJJAÁ“'EE<ž±±±±™™þ·úU/}9Ap86›Éd³•JÆãÃÂþü3* (å?“9lØéÓ……aa¢E®®S§^ºTU¦ß&TjŸ>Þ¸aj:¾­íĉ-?ƒD¥9Âåž?¯PŒëìüÃÓ§_»–•µc‡³³¾ŒV›”´f‹Ë!‘‘••Z-ïæ¶aÃíÛiikÖØØ4?«¡áìÙúö]¸09¹ý­.a±vv“&ݹ“ž¾nN·aÈÆýö[aá‡*µK—cÇž>=u*$„ÅR«U*g2ét"13síÚþý,)ùÔ !`ïh¿|“+HzÖ¯_±bòd33"AôyêärE}hÄçK$r¹~͇H¤ÑH$}hD¥âpJ¥R½éƒ%ÕéšH‘H«EQ©T¡P©^¾äñ‹D"8K&S(´ÚÚZ©T©ÌÉÉÉ)-íÜÙÖÖ‚F#“q8_ßNìì §RõO#‘ˆD ¦´”Fc³µZýïBÃ$“öOž;@áp&&66ÍÓ§gÏž:S] ¦Jß2 E~þ¥KË–-ZD&§§¶aL&KKÛºµOŸÀ@­¨É´Z™ìĉ lm/_¦ÑÈd F©lh¨ªjlÔ¯’ê=H^Þ¾}&¸¹ýñN&ãñ¤PÔÕUV–”ÔÖ¶×wMIIDDhh‰‰ry^^ié§ÖP¤ÒÌÌŸ~ ?þäIƒH$p8Q«ùüŠŠW¯rs««Ûhìç H&Ójår}‚ F§KIárKKù|¡P.×éÔj­–Í61a±\] ##ýªiµ‚Çc0Í¡‘V«Óéƒ%• A H£Q«!H§S*år¡P*U©ø|>ŸÏ77§Ó-,^½*)©®¶·72b0ÌÍÍÌLM‰DF‚‚†‰ÄÉ ‚ ÈÔ”LÆátq11Ñ‹D¢Tj4?þ¸oß‘#íY¦÷îíÛ·oßÇú÷_¶lÙ2‚ µº àÈ‘¹s ú'ë#•J¥\.pL_š£G "0°²rî\ ¢P(GG ø&¤•+'O6ŒHÔhTª¼¼’ ±Q¡P*‘HŸN­&`‡ƒaU«ù|¡P&S©ÌÍét<‚šB#Áá°X<‚4‰D£ÑhôÂâñÍ' H$ †]]mm›v‘ÇÆ¦¥åç;9q8 Æwßué‚ :™›CO&CPóûSýIx<‘Ã8“©?µÔ¾iÿ`‚ðÏò §ªÍÍ-))//. år"‘Íæp`˜@@&“@ÀãY,"ƒ!aGÑ×Ã= ) …J%«TJeCƒX¬Tê“}ë“4 @$êKÓé$Ï`P© Fppß¾;ësÓ=~œ›[QQ[+ÉåúôßúŸú'ëJ$ ×ÔH¥+WΞÔhŸ|“+H»w_¸póæëŸ,\¸`Áœ966ææZ­HT]]YI$"öïÖ‰D2™>í·J¥O®Ri4MÛê ‡37§Óq8"‘HÄãkke2µº±Q*•J ­EU*F¥b0¨TÉ֖ñ° Óét&S$‰ô‰ `X¥R©t:ýY&ýwñù …N——WZZR’“S]]Scffnnk ÔhŸüK.;<|øèÑ“'I$:FÓ¯í@‡ ‚`0‚V‹ÅVU r¹H¤R5«FQý Hj5 ãñ¢Têt ‘ˆÁàpï~‹\.—Ëå|¾@ÐØ¨ßzgaabB¡è“Œ …r¹B¡_‰ÊÍmlT(<ÈÈÈÏONÎÍ-(Ð?ƒÁášV¥@{ã›NÒð6{÷>|þü¬YÆõê¥ÿD©Ôé´Z&“B¡P‘H¡`0("‘HÄá}Î:ýJ¥R©Ñ‰$‰D$äà`nÎbedÕÔàñÌ›'ˆôÁ’@ …¯®PÈåJ¥>‹E§3úd2þú N ½ñ/YAú8(ªÓ©Õú«Mëê$¥R P(Ôj­¶ùbYýv;<‚P”J%!ˆF31a;;ssG¡Ðé„J¥Ñ0"Q*étJ%€Ãa0(ªT6­JÁ0‚àp¦¦t:™ìåeccaÑ­›³³³3ƒ `íhßüù«ŒŸ‰¨}IEND®B`‚twittering-mode-3.0.0/doc/web/images/top.jpg0000644000000000000000000000164712141747407020704 0ustar rootroot00000000000000ÿØÿàJFIFddÿìDuckyPÿîAdobedÀÿÛ„      ÿÀ  ÿÄ_R”1A2‚43ÿÚ ?ò>iÁ:¨ß7éø|KÓ—$@+nEzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7b½nÅzÝŠô»èv+ÐìW  د@±^€7"½³áý?•zqäŠK‡4æP Ó?š÷íè0ý¯/±ñT^ë÷‹€.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.¸à €.)Ý>à_âûøý>óNý½@ÿÙtwittering-mode-3.0.0/doc/web/index.text0000644000000000000000000000253712141747407020147 0ustar rootroot00000000000000 Twittering-mode is an Emacs major mode for Twitter. You can check timelines, tweet, mark posts as favorites and so on with Emacs. [![](http://twitter-badges.s3.amazonaws.com/follow_me-a.png)](http://www.twitter.com/twmode) ## Screenshot ![](./images/screen-user.png) and [more](./screenshot.html) ## Download * Latest release (2013/5/7): [twittering-mode-3.0.0](http://sourceforge.net/projects/twmode/files/) * Development version: [GitHub repository](http://github.com/hayamiz/twittering-mode/) See the [history](http://github.com/hayamiz/twittering-mode/commits/master/twittering-mode.el). ## Documentation For the latest release, see [README.markdown](http://github.com/hayamiz/twittering-mode/blob/3.0.x/README.markdown). For the development version, see [README.markdown](http://github.com/hayamiz/twittering-mode/blob/master/README.markdown). ## Getting involved See [how to contribute](./how-to-contribute.html) for detailed information. ### Mailing lists Join [twittering-mode ML](http://sourceforge.net/mail/?group_id=288615). ### Repository You can clone the git repository: git clone git://github.com/hayamiz/twittering-mode.git Or fork on [GitHub](http://github.com/hayamiz/twittering-mode) ## See also * [EmacsWiki: TwitteringMode](http://www.emacswiki.org/emacs/TwitteringMode) twittering-mode-3.0.0/doc/web/ja.po0000644000000000000000000003451212141747407017062 0ustar rootroot00000000000000msgid "" msgstr "" "Project-Id-Version: twittering-mode HEAD\n" "POT-Creation-Date: 2013-05-07 00:26+0900\n" "PO-Revision-Date: 2009-12-29 22:18+0900\n" "Last-Translator: Tadashi Matsuo \n" "Language-Team: Japanese\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: index.html:7(title) how-to-contribute.html:7(title) #: screenshot.html:7(title) msgid "Twittering-mode" msgstr "Twittering-mode" #: index.html:43(p) msgid "" "Twittering-mode is an Emacs major mode for Twitter. You can check timelines, " "tweet, mark posts as favorites and so on with Emacs." msgstr "" "twittering-modeã¯ã€Emacsã§Twitterã‚’ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚¸ãƒ£ãƒ¼ãƒ¢ãƒ¼ãƒ‰ã§ã™ã€‚タイムライン" "ã®ãƒã‚§ãƒƒã‚¯ã€æŠ•稿ã€ãŠæ°—ã«å…¥ã‚Šãªã©æ§˜ã€…ãªTwitterã®æ©Ÿèƒ½ã‚’Emacsã‹ã‚‰ä½¿ã†ã“ã¨ãŒã§ã" "ã¾ã™ã€‚" #: index.html:48(h2) msgid "Screenshot" msgstr "スクリーンショット" #: index.html:52(p) msgid "and more" msgstr "and more" #: index.html:54(h2) msgid "Download" msgstr "ダウンロード" #: index.html:57(li) msgid "" "Latest release (2013/5/7): twittering-mode-3.0.0" msgstr "" "最新ã®ãƒªãƒªãƒ¼ã‚¹ (2013/5/7): twittering-mode-3.0.0" #: index.html:58(li) msgid "" "Development version: GitHub repository" msgstr "" "開発版: GitHubレãƒã‚¸ãƒˆ" "リ" #: index.html:61(p) msgid "" "See the history." msgstr "" "twittering-modeã®æ›´æ–°å±¥æ­´" #: index.html:63(h2) msgid "Documentation" msgstr "ドキュメント" #: index.html:65(p) msgid "" "For the latest release, see README.markdown. For the development " "version, see README.markdown." msgstr "" "最新ã®ãƒªãƒªãƒ¼ã‚¹ã«ã¤ã„ã¦ã¯README.markdownã‚’ã€é–‹ç™ºç‰ˆã«ã¤ã„ã¦ã¯" "README.markdownã‚’å‚ç…§ã—ã¦ãã ã•ã„。" #: index.html:68(h2) msgid "Getting involved" msgstr "twittering-modeã®é–‹ç™ºã«å‚加ã™ã‚‹" #: index.html:70(p) msgid "" "See how to contribute for detailed " "information." msgstr "" "詳ã—ãã¯Twittering-modeã®é–‹ç™ºã¸å‚加" "ã‚’ã”覧ãã ã•ã„。" #: index.html:72(h3) msgid "Mailing lists" msgstr "メーリングリスト" #: index.html:74(p) msgid "" "Join twittering-" "mode ML." msgstr "" "是éžtwittering-mode " "MLを購読ã—ã¦ãã ã•ã„。" #: index.html:76(h3) msgid "Repository" msgstr "レãƒã‚¸ãƒˆãƒª" #: index.html:78(p) msgid "You can clone the git repository:" msgstr "次ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã™ã‚‹ã“ã¨ã§ã€gitレãƒã‚¸ãƒˆãƒªã‚’cloneã§ãã¾ã™:" #: index.html:80(code) how-to-contribute.html:47(code) msgid "git clone git://github.com/hayamiz/twittering-mode.git" msgstr "git clone git://github.com/hayamiz/twittering-mode.git" #: index.html:83(p) msgid "" "Or fork on GitHub" msgstr "" "ã¾ãŸã€GitHubã§fork" "ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚" #: index.html:85(h2) msgid "See also" msgstr "See also" #: index.html:88(a) msgid "EmacsWiki: TwitteringMode" msgstr "EmacsWiki: TwitteringMode" #: index.html:95(a) how-to-contribute.html:100(a) screenshot.html:76(a) msgid "Free CSS Templates" msgstr "Free CSS Templates" #: index.html:95(a) how-to-contribute.html:100(a) screenshot.html:76(a) msgid "Chapter 13 Bankruptcy" msgstr "Chapter 13 Bankruptcy" #: index.html:94(div) how-to-contribute.html:99(div) screenshot.html:75(div) msgid "" "Designed by , Thanks to \n" "
\n" "" msgstr "" "Designed by , Thanks to \n" "
\n" "" #. Piwik #: index.html:102(script) how-to-contribute.html:107(script) #: screenshot.html:83(script) msgid "" "var pkBaseURL = ((\"https:\" == document.location.protocol) ? \"https://" "sourceforge.net/apps/piwik/twmode/\" : \"http://sourceforge.net/apps/piwik/" "twmode/\"); document.write(unescape(\"%3Cscript src='\" + pkBaseURL + " "\"piwik.js' type='text/javascript'%3E%3C/script%3E\"));" msgstr "" #: index.html:105(script) how-to-contribute.html:110(script) #: screenshot.html:86(script) msgid "" "piwik_action_name = ''; piwik_idsite = 1; piwik_url = pkBaseURL + \"piwik.php" "\"; piwik_log(piwik_action_name, piwik_idsite, piwik_url);" msgstr "" #: how-to-contribute.html:39(h1) msgid "How to contribute to twittering-mode" msgstr "twittering-modeã®é–‹ç™ºã«å‚加ã™ã‚‹" #: how-to-contribute.html:41(h2) msgid "Code" msgstr "Code" #: how-to-contribute.html:43(p) msgid "" "Recommended way is to fork on GitHub. Visit there and click 'fork' button." msgstr "" "GitHubã§ãƒ¬ãƒã‚¸ãƒˆãƒª" "ã‚’forkã™ã‚‹ã®ãŒä¸€ç•ªãŠã™ã™ã‚ã®æ–¹æ³•ã§ã™ã€‚GitHub:twittering-modeã‚’é–‹ã„ã¦ã€'fork'ボタンをクリック" "ã—ã¦ãã ã•ã„。" #: how-to-contribute.html:45(p) msgid "Of course you can clone the git repository in the ordinary way:" msgstr "" "ã‚‚ã¡ã‚ã‚“ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’実行ã—ã¦gitã®ãƒ¬ãƒã‚¸ãƒˆãƒªã‚’直接cloneã—ã¦ã‚‚æ§‹ã„ã¾ã›ã‚“。" #: how-to-contribute.html:50(h3) msgid "How to create patches" msgstr "パッãƒã®ä½œã‚Šæ–¹" #: how-to-contribute.html:52(p) msgid "We recommend to follow these steps:" msgstr "次ã®ã‚ˆã†ãªæ‰‹é †ã§ãƒ‘ッãƒã‚’作る慣例ã¨ãªã£ã¦ã„ã¾ã™:" #: how-to-contribute.html:55(li) msgid "" "Pull the master branch(hayamiz/master on GitHub)." msgstr "" "マスターブランãƒ(GitHubレãƒã‚¸ãƒˆãƒªã®hayamiz/master)ã‚’å–å¾—ã™ã‚‹" #: how-to-contribute.html:56(li) msgid "Create a topic branch and make some modifications." msgstr "トピックブランãƒã‚’作æˆã—ã¦ã€ãã“ã«å¤‰æ›´ã‚’加ãˆã‚‹" #: how-to-contribute.html:57(li) msgid "" "Before sending a patch, rebase the topic branch to the " "master." msgstr "" "パッãƒã‚’投稿ã™ã‚‹å‰ã«ã€ãƒˆãƒ”ックブランãƒã‚’マスターブランãƒã«rebaseã™ã‚‹" #: how-to-contribute.html:58(li) msgid "" "Now it's ready to post your patch. Send a pull request on GitHub (if you have forked) and " "write a mail to twittering-mode ML." msgstr "" "以上ã§ãƒ‘ッãƒã‚’投稿ã™ã‚‹æº–å‚™ã¯å®Œäº†ã§ã™ã€‚(GitHubã§forkã—ãŸäººã¯)" "pull requestã‚’é€ã£ã¦ã€" "メーリングリスト" "ã¸æŠ•ç¨¿ã—ã¾ã—ょã†" #: how-to-contribute.html:61(h4) msgid "Topic branch" msgstr "トピックブランãƒ" #: how-to-contribute.html:63(p) how-to-contribute.html:67(p) #: how-to-contribute.html:71(p) msgid "(now writing...)" msgstr "(準備中...)" #: how-to-contribute.html:65(h4) msgid "Rebasing a topic branch" msgstr "トピックブランãƒã‚’rebaseã™ã‚‹" #: how-to-contribute.html:69(h4) msgid "Posting your patch" msgstr "パッãƒã‚’投稿ã™ã‚‹" #: how-to-contribute.html:73(h2) msgid "Communication" msgstr "ãƒã‚°å ±å‘Šã€ãã®ä»–æ„見ãªã©" #: how-to-contribute.html:75(p) msgid "" "All your voices should be sent to twittering-mode ML." msgstr "" "ãƒã‚°å ±å‘Šã‚’å§‹ã‚ã¨ã—ã¦ã€æ©Ÿèƒ½è¿½åŠ ã‚„æ„è¦‹ã€æ„Ÿæƒ³ãªã©ã¯twittering-modeã®ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã¸æŠ•稿ã—ã¦ã" "ã ã•ã„。" #: how-to-contribute.html:77(h3) msgid "Bug reports" msgstr "ãƒã‚°å ±å‘Š" #: how-to-contribute.html:79(p) msgid "" "If you find some bugs in twittering-mode, please send a mail with detailed " "information to twittering-mode ML:" msgstr "" "ã‚‚ã—twittering-modeã«ãƒã‚°ã‚’発見ã—ãŸã‚‰ã€ãƒ¡ãƒ¼ãƒªãƒ³ã‚°ãƒªã‚¹ãƒˆã«æ¬¡ã«ç¤ºã™ã‚ˆã†ãªæƒ…報を添ãˆã¦æŠ•稿" "ã—ã¦ãã ã•ã„:" #: how-to-contribute.html:82(li) msgid "Platform (Windows, Linux, Mac OS X, ...)" msgstr "動作環境(Windows, Linux, Mac OS X, ...)" #: how-to-contribute.html:83(li) msgid "" "Kind of Emacs and its version number (GNU Emacs, XEmacs, Carbon Emacs, ...): " "you can check it by (emacs-version)<C-j> on " "*scratch* buffer." msgstr "" "Emacsã®ç¨®é¡žã¨ãƒãƒ¼ã‚¸ãƒ§ãƒ³ç•ªå· (GNU Emacs, XEmacs, Carbon Emacs, ...): " "*scratch*ãƒãƒƒãƒ•ã‚¡ã§(emacs-version)<C-j>ã¨ã‚¿ã‚¤" "プã™ã‚Œã°ç¢ºèªã§ãã¾ã™ã€‚" #: how-to-contribute.html:84(li) msgid "" "What you wanted to do, what you actually did, and what " "happened." msgstr "" "何ãŒã—ãŸã‹ã£ãŸã®ã‹ã€å®Ÿéš›ã«è¡Œã£ãŸæ“作ã€å®Ÿéš›ã«ç™ºç”Ÿã—ãŸç¾" "象" #: how-to-contribute.html:85(li) msgid "Any other information you think it's important." msgstr "ãã®ä»–é‡è¦ã§ã‚ã‚‹ã¨æ€ã‚れる情報" #: how-to-contribute.html:88(p) msgid "" "If you have enough time, please try to reproduce the bug in a minimal " "environment. You can launch Emacs without loading any scripts by emacs " "-Q. This saves our time so much :)" msgstr "" "ã‚‚ã—å¯èƒ½ã§ã‚れã°ã€æœ€å°ã®ç’°å¢ƒã§ãƒã‚°ã‚’å†ç¾ã—ã¦ã¿ã¦ãã ã•ã„。emacs -Qã§Emacsã‚’èµ·å‹•ã™ã‚Œã°ã€.emacsãªã©ã®èµ·å‹•スクリプトを一切読ã¿è¾¼ã¿ã¾ã›ã‚“。ã“" "ã®ç’°å¢ƒã§ãƒã‚°ãŒå†ç¾ã™ã‚‹ã‹ã©ã†ã‹ã‚’事å‰ã«è©¦ã—ã¦ã‚‚らãˆã‚‹ã¨ã€ãƒã‚°ã®åŽŸå› ã‚’ã¤ãã¨ã‚" "ã‚„ã™ããªã‚Šã¾ã™ã€‚" #: how-to-contribute.html:90(h3) msgid "Feature requests and others" msgstr "機能追加ã®è¦æœ›ã‚„ã€ãã®ä»–ã®æ„見" #: how-to-contribute.html:92(p) msgid "" "Join twittering-" "mode ML and let's talk!" msgstr "" "twittering-mode ã®" "メーリングリストを購読ã—ã¦æŠ•ç¨¿ã—ã¦ãã ã•ã„。" #: how-to-contribute.html:94(a) screenshot.html:70(a) msgid "« Back to top" msgstr "« ãƒˆãƒƒãƒ—ã¸æˆ»ã‚‹" #: screenshot.html:39(h1) msgid "Screenshots" msgstr "スクリーンショット" #: screenshot.html:41(h2) msgid "Timeline" msgstr "タイムライン" #: screenshot.html:43(h3) msgid "Friends timeline" msgstr "フレンズタイムライン" #: screenshot.html:45(h4) msgid "Without icons" msgstr "アイコンéžè¡¨ç¤ºãƒ¢ãƒ¼ãƒ‰" #: screenshot.html:49(h4) msgid "With icons" msgstr "アイコン表示モード" #: screenshot.html:53(h3) screenshot.html:61(li) msgid "User's timeline" msgstr "ユーザータイムライン" #: screenshot.html:57(h3) msgid "Supported timelines" msgstr "表示ã§ãるタイムライン" #: screenshot.html:60(li) msgid "Home timeline" msgstr "ホームタイムライン" #: screenshot.html:62(li) msgid "Mentions" msgstr "Mentions" #: screenshot.html:63(li) msgid "Lists" msgstr "リスト" #: screenshot.html:64(li) msgid "Direct messages" msgstr "ダイレクトメッセージ" #: screenshot.html:65(li) msgid "Search timeline" msgstr "検索タイムライン" #: screenshot.html:66(li) msgid "Favorites" msgstr "ãŠæ°—ã«å…¥ã‚Š" #: screenshot.html:67(li) msgid "Public timeline" msgstr "パブリックタイムライン" #~ msgid "" #~ "Currently there's no stable release, but it does not " #~ "mean twittering-mode is unstable for practical usage." #~ msgstr "" #~ "ç¾åœ¨ã®ã¨ã“ã‚ã€å®‰å®šç‰ˆãƒªãƒªãƒ¼ã‚¹ã¯ã‚りã¾ã›ã‚“ãŒã€é–‹ç™ºç‰ˆã§ã‚‚å分実用的ã«ä½¿ç”¨ã§ã" #~ "ã¾ã™ã€‚" #~ msgid "" #~ "twittering-mode.el (development version)" #~ msgstr "" #~ "twittering-mode.el (開発版)" #, fuzzy #~ msgid "Twittering-mode screenshot" #~ msgstr "twittering-modeスクリーンショット" #~ msgid "twittering-mode.el" #~ msgstr "twittering-mode.el" #~ msgid "Contribute" #~ msgstr "プロジェクトã«å‚加" #~ msgid "" #~ "See Developer's guideline(will be available soon) for " #~ "more information." #~ msgstr "" #~ "詳ã—ã„æƒ…å ±ã«ã¤ã„ã¦ã¯é–‹ç™ºã®æ‰‹å¼•ã(準備中)ã‚’å‚ç…§ã—ã¦ãã ã•" #~ "ã„。" #~ msgid "Japanese" #~ msgstr "日本語" #, fuzzy #~ msgid "" #~ "Languages: " #~ msgstr "" #~ "Other languages: " #~ msgid "Other languages:" #~ msgstr "Other languages:" #~ msgid "English" #~ msgstr "英語" #~ msgid "GitHub" #~ msgstr "GitHub" #~ msgid "Or fork on " #~ msgstr "ã¾ãŸã¯ã§forkã—ã¦ãã ã•ã„。" #~ msgid "translator-credits" #~ msgstr "translator-credits" #~ msgid "GitHub repository" #~ msgstr "GitHubレãƒã‚¸ãƒˆãƒª" twittering-mode-3.0.0/doc/web/publish.rb0000755000000000000000000000733512141747407020131 0ustar rootroot00000000000000#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'optparse' require 'tempfile' require 'erb' #require 'rubygems' require 'bluecloth' $web_dir = File.dirname(__FILE__) $default_header = < html document EOS $default_footer = < EOS def header(options) b = binding eval("include ERB::Util", b) options[:data].each do |data| eval(data, b) end erb = if options[:header] ERB.new(File.open(options[:header]).read) else ERB.new($default_header) end erb.result(b) end def footer(options) b = binding options[:data].each do |data| eval(data, b) end erb = if options[:footer] ERB.new(File.open(options[:footer]).read) else ERB.new($default_footer) end erb.result(b) end def parse_option(argv) opt = OptionParser.new opt.banner = "Usage: #{$0} [options] MARKDOWN-FILE" options = Hash.new options[:po_file] = nil opt.on('-p', '--po-file=FILE', "\n\t\tTranslate with FILE by gettext") do |v| unless File.exist?(v) $stderr.puts("No such po file: #{v}") $stderr.puts() puts opt.help() exit(1) end options[:po_file] = v unless system("which xml2po 1> /dev/null 2>/dev/null") $stderr.puts("'xml2po' command is required.") $stderr.puts() $stderr.puts("If you are using Debian or Ubuntu,\n'xml2po' can be installed by the following command:\n apt-get install gnome-doc-utils") exit(1) end end options[:output] = nil opt.on('-o FILE', '--output=FILE', "\n\t\tPrint resulting text into FILE") do |file| options[:output] = file end options[:header] = nil opt.on('-H', '--header=FILE', "\n\t\tHeader ERB template. Define parameters by --data option") do |file| unless File.exist?(file) $stderr.puts("No such file: #{file}") $stderr.puts() puts opt.help() exit(1) end options[:header] = file end options[:footer] = nil opt.on('-F', '--footer=FILE', "\n\t\tFooter ERB template. Define parameters by --data option") do |file| unless File.exist?(file) $stderr.puts("No such file: #{file}") $stderr.puts() puts opt.help() exit(1) end options[:footer] = file end options[:data] = Array.new opt.on('-d', '--data=NAME=VALUE', "\n\t\tBind VALUE(any ruby expression) to NAME when rendering HTML.") do |data| if data =~ /([^=])=(.+)/ options[:data] << data end end opt.parse!(argv) options end def main(argv) textfile = nil output = nil options = parse_option(argv) argv.each do |arg| next unless File.exist?(arg) textfile = File.open(arg) if options[:output] output = File.open(options[:output], "w") else output = $stdout end break end unless textfile textfile = $stdin output = $stdout end tempfile = Tempfile.new("twmode-publish") html_body = BlueCloth.new(textfile.read).to_html tempfile.puts(header(options) + html_body + footer(options)) tempfile.fsync() translated_str = nil if options[:po_file] translated_str = `xml2po -k -m xhtml -p #{options[:po_file]} -o /dev/stdout #{tempfile.path}` else translated_str = File.open(tempfile.path).read end translated_str = translated_str.gsub(/\A\s*<\?xml\s*version="1\.0"\s*encoding="utf-8"\s*\?>/, '') output.puts(translated_str) true end if __FILE__ == $0 exit(main(ARGV)) end twittering-mode-3.0.0/doc/web/screenshot.text0000644000000000000000000000061512141747407021210 0ustar rootroot00000000000000 # Screenshots ## Timeline ### Friends timeline #### Without icons ![](./images/screen-friends-no-icon.png) #### With icons ![](./images/screen-friends.png) ### User's timeline ![](./images/screen-user.png) ### Supported timelines - Home timeline - User's timeline - Mentions - Lists - Direct messages - Search timeline - Favorites - Public timeline [« Back to top](./index.html) twittering-mode-3.0.0/doc/web/style.css0000644000000000000000000000507012141747407017777 0ustar rootroot00000000000000* { padding: 0; margin: 0; } body { background: #555; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12pt; line-height: 13pt; color: #333333;; } li { margin-left: 20pt; padding: 2pt 3pt 2pt 3pt; } p { margin: 3pt; padding: 3pt; } img { border: none; } a { color: #3E92EA; } a:hover { text-decoration: none; color : #000; } #wrap { margin: 40px auto 0 auto; width: 800px; } #header { padding-bottom:10px; } #header h1 { font-size: 28pt; font-weight: 100; letter-spacing: -1pt; padding: 12px 0 5px 10px; } #header h1 a { color: #fff; text-decoration: none; } #header h1 a:hover { color: #fff; text-decoration: none; } #header h2 { color: #ccc; font-size: 15pt; font-weight: 100; padding: 0 0 0 11px; letter-spacing: -1pt; line-height: 18pt; } #menu { height: 75px; line-height: 75px; background: #222 url(images/menu.png) repeat-y; } #menu ul { padding-left: 10px; list-style-type: none; } #menu ul li { display: block; float: left; padding: 0; marging: 0; } #menu ul li a { color: #eee; padding: 0 10px; text-decoration: none; font-weight: 600; } #menu ul li a:hover { color: #fff; text-decoration: underline; } #content { background: #555 url(images/content.jpg) repeat-y; padding: 10px 30px; } .left { /* width: 568px; */ float: left; text-align: justify; } .left h1 { font-size: 24pt; line-height: 32pt; letter-spacing: -2pt; padding : 10px 0 15px 0; } .left h2 { color: #FF4800; font-size: 22pt; line-height: 22pt; letter-spacing: -2pt; font-weight: 100; padding : 10px 0 15px 0; } .left h3 { text-decoration: underline; line-height: 22pt; margin: 0 0 5pt 0; padding : 10pt 0 15pt 0; } .left h4 { line-height: 20pt; border-left: 10px solid gray; padding-left: 5px; margin: 10pt 0 15pt 0; } .left ul { padding: 10px 0 10px 0; } .left ol { padding: 10px 0 10px 0; } .left pre { margin: 10px; padding: 10px; border: 1px solid gray; border-left: none; border-right: none; background: AliceBlue; } .left code { border: 1px solid lightgray; background: wheat; } .left pre code { border: none; background: none; } .right { width: 150px; float: right; padding: 10px; border-left: 1px solid #bbb; font-size: 12px; } .right ul { list-style-type: none; padding: 5px 10px 10px 10px; } .right h2 { height: 30px; font-size: 12px; color: #666; line-height: 30px; } .right a { text-decoration: none } #top { background: #555 url(images/top.jpg) no-repeat; padding: 5px 0; clear: both; } #bottom { background: #555 url(images/bottom.jpg) no-repeat; padding: 10px 0; } #footer { text-align: center; color: #eee; font-size: 11px; padding: 0 0 10px 0; } .footnote { font-size: 10pt; }twittering-mode-3.0.0/emacs21/.nosearch0000644000000000000000000000000012141747407017625 0ustar rootroot00000000000000twittering-mode-3.0.0/emacs21/hex-util.el0000644000000000000000000000520212141747407020114 0ustar rootroot00000000000000;;; hex-util.el --- Functions to encode/decode hexadecimal string. ;; Copyright (C) 1999, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Shuhei KOBAYASHI ;; Keywords: data ;; This file is part of FLIM (Faithful Library about Internet Message). ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 3, or ;; (at your option) any later version. ;; This program 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;;; Code: (eval-when-compile (defmacro hex-char-to-num (chr) `(let ((chr ,chr)) (cond ((and (<= ?a chr)(<= chr ?f)) (+ (- chr ?a) 10)) ((and (<= ?A chr)(<= chr ?F)) (+ (- chr ?A) 10)) ((and (<= ?0 chr)(<= chr ?9)) (- chr ?0)) (t (error "Invalid hexadecimal digit `%c'" chr))))) (defmacro num-to-hex-char (num) `(aref "0123456789abcdef" ,num))) (defun decode-hex-string (string) "Decode hexadecimal STRING to octet string." (let* ((len (length string)) (dst (make-string (/ len 2) 0)) (idx 0)(pos 0)) (while (< pos len) ;; logior and lsh are not byte-coded. ;; (aset dst idx (logior (lsh (hex-char-to-num (aref string pos)) 4) ;; (hex-char-to-num (aref string (1+ pos))))) (aset dst idx (+ (* (hex-char-to-num (aref string pos)) 16) (hex-char-to-num (aref string (1+ pos))))) (setq idx (1+ idx) pos (+ 2 pos))) dst)) (defun encode-hex-string (string) "Encode octet STRING to hexadecimal string." (let* ((len (length string)) (dst (make-string (* len 2) 0)) (idx 0)(pos 0)) (while (< pos len) ;; logand and lsh are not byte-coded. ;; (aset dst idx (num-to-hex-char (logand (lsh (aref string pos) -4) 15))) (aset dst idx (num-to-hex-char (/ (aref string pos) 16))) (setq idx (1+ idx)) ;; (aset dst idx (num-to-hex-char (logand (aref string pos) 15))) (aset dst idx (num-to-hex-char (% (aref string pos) 16))) (setq idx (1+ idx) pos (1+ pos))) dst)) (provide 'hex-util) ;; arch-tag: fe8aaa79-6c86-400e-813f-5a8cc4cb3859 ;;; hex-util.el ends here twittering-mode-3.0.0/emacs21/sha1.el0000644000000000000000000003717612141747407017230 0ustar rootroot00000000000000;;; sha1.el --- SHA1 Secure Hash Algorithm in Emacs-Lisp ;; Copyright (C) 1999, 2001, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Shuhei KOBAYASHI ;; Keywords: SHA1, FIPS 180-1 ;; This file is part of FLIM (Faithful Library about Internet Message). ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as ;; published by the Free Software Foundation; either version 3, or ;; (at your option) any later version. ;; This program 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; This program is implemented from the definition of SHA-1 in FIPS PUB ;; 180-1 (Federal Information Processing Standards Publication 180-1), ;; "Announcing the Standard for SECURE HASH STANDARD". ;; ;; (EXCEPTION; two optimizations taken from GnuPG/cipher/sha1.c) ;; ;; Test cases from FIPS PUB 180-1. ;; ;; (sha1 "abc") ;; => a9993e364706816aba3e25717850c26c9cd0d89d ;; ;; (sha1 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") ;; => 84983e441c3bd26ebaae4aa1f95129e5e54670f1 ;; ;; (sha1 (make-string 1000000 ?a)) ;; => 34aa973cd4c4daa4f61eeb2bdbad27316534016f ;; ;; BUGS: ;; * It is assumed that length of input string is less than 2^29 bytes. ;; * It is caller's responsibility to make string (or region) unibyte. ;; ;; TODO: ;; * Rewrite from scratch! ;; This version is much faster than Keiichi Suzuki's another sha1.el, ;; but it is too dirty. ;;; Code: (require 'hex-util) ;;; ;;; external SHA1 function. ;;; (defgroup sha1 nil "Elisp interface for SHA1 hash computation." :version "22.1" :group 'extensions) (defcustom sha1-maximum-internal-length 500 "*Maximum length of message to use Lisp version of SHA1 function. If message is longer than this, `sha1-program' is used instead. If this variable is set to 0, use external program only. If this variable is set to nil, use internal function only." :type 'integer :group 'sha1) (defcustom sha1-program '("sha1sum") "*Name of program to compute SHA1. It must be a string \(program name\) or list of strings \(name and its args\)." :type '(repeat string) :group 'sha1) (defcustom sha1-use-external (condition-case () (executable-find (car sha1-program)) (error)) "*Use external SHA1 program. If this variable is set to nil, use internal function only." :type 'boolean :group 'sha1) (defun sha1-string-external (string &optional binary) (let (prog args digest default-enable-multibyte-characters) (if (consp sha1-program) (setq prog (car sha1-program) args (cdr sha1-program)) (setq prog sha1-program args nil)) (with-temp-buffer (insert string) (apply (function call-process-region) (point-min)(point-max) prog t t nil args) ;; SHA1 is 40 bytes long in hexadecimal form. (setq digest (buffer-substring (point-min)(+ (point-min) 40)))) (if binary (decode-hex-string digest) digest))) (defun sha1-region-external (beg end &optional binary) (sha1-string-external (buffer-substring-no-properties beg end) binary)) ;;; ;;; internal SHA1 function. ;;; (eval-when-compile ;; optional second arg of string-to-number is new in v20. (defconst sha1-K0-high 23170) ; (string-to-number "5A82" 16) (defconst sha1-K0-low 31129) ; (string-to-number "7999" 16) (defconst sha1-K1-high 28377) ; (string-to-number "6ED9" 16) (defconst sha1-K1-low 60321) ; (string-to-number "EBA1" 16) (defconst sha1-K2-high 36635) ; (string-to-number "8F1B" 16) (defconst sha1-K2-low 48348) ; (string-to-number "BCDC" 16) (defconst sha1-K3-high 51810) ; (string-to-number "CA62" 16) (defconst sha1-K3-low 49622) ; (string-to-number "C1D6" 16) ;; original definition of sha1-F0. ;; (defmacro sha1-F0 (B C D) ;; (` (logior (logand (, B) (, C)) ;; (logand (lognot (, B)) (, D))))) ;; a little optimization from GnuPG/cipher/sha1.c. (defmacro sha1-F0 (B C D) `(logxor ,D (logand ,B (logxor ,C ,D)))) (defmacro sha1-F1 (B C D) `(logxor ,B ,C ,D)) ;; original definition of sha1-F2. ;; (defmacro sha1-F2 (B C D) ;; (` (logior (logand (, B) (, C)) ;; (logand (, B) (, D)) ;; (logand (, C) (, D))))) ;; a little optimization from GnuPG/cipher/sha1.c. (defmacro sha1-F2 (B C D) `(logior (logand ,B ,C) (logand ,D (logior ,B ,C)))) (defmacro sha1-F3 (B C D) `(logxor ,B ,C ,D)) (defmacro sha1-S1 (W-high W-low) `(let ((W-high ,W-high) (W-low ,W-low)) (setq S1W-high (+ (% (* W-high 2) 65536) (/ W-low ,(/ 65536 2)))) (setq S1W-low (+ (/ W-high ,(/ 65536 2)) (% (* W-low 2) 65536))))) (defmacro sha1-S5 (A-high A-low) `(progn (setq S5A-high (+ (% (* ,A-high 32) 65536) (/ ,A-low ,(/ 65536 32)))) (setq S5A-low (+ (/ ,A-high ,(/ 65536 32)) (% (* ,A-low 32) 65536))))) (defmacro sha1-S30 (B-high B-low) `(progn (setq S30B-high (+ (/ ,B-high 4) (* (% ,B-low 4) ,(/ 65536 4)))) (setq S30B-low (+ (/ ,B-low 4) (* (% ,B-high 4) ,(/ 65536 4)))))) (defmacro sha1-OP (round) `(progn (sha1-S5 sha1-A-high sha1-A-low) (sha1-S30 sha1-B-high sha1-B-low) (setq sha1-A-low (+ (,(intern (format "sha1-F%d" round)) sha1-B-low sha1-C-low sha1-D-low) sha1-E-low ,(symbol-value (intern (format "sha1-K%d-low" round))) (aref block-low idx) (progn (setq sha1-E-low sha1-D-low) (setq sha1-D-low sha1-C-low) (setq sha1-C-low S30B-low) (setq sha1-B-low sha1-A-low) S5A-low))) (setq carry (/ sha1-A-low 65536)) (setq sha1-A-low (% sha1-A-low 65536)) (setq sha1-A-high (% (+ (,(intern (format "sha1-F%d" round)) sha1-B-high sha1-C-high sha1-D-high) sha1-E-high ,(symbol-value (intern (format "sha1-K%d-high" round))) (aref block-high idx) (progn (setq sha1-E-high sha1-D-high) (setq sha1-D-high sha1-C-high) (setq sha1-C-high S30B-high) (setq sha1-B-high sha1-A-high) S5A-high) carry) 65536)))) (defmacro sha1-add-to-H (H X) `(progn (setq ,(intern (format "sha1-%s-low" H)) (+ ,(intern (format "sha1-%s-low" H)) ,(intern (format "sha1-%s-low" X)))) (setq carry (/ ,(intern (format "sha1-%s-low" H)) 65536)) (setq ,(intern (format "sha1-%s-low" H)) (% ,(intern (format "sha1-%s-low" H)) 65536)) (setq ,(intern (format "sha1-%s-high" H)) (% (+ ,(intern (format "sha1-%s-high" H)) ,(intern (format "sha1-%s-high" X)) carry) 65536)))) ) ;;; buffers (H0 H1 H2 H3 H4). (defvar sha1-H0-high) (defvar sha1-H0-low) (defvar sha1-H1-high) (defvar sha1-H1-low) (defvar sha1-H2-high) (defvar sha1-H2-low) (defvar sha1-H3-high) (defvar sha1-H3-low) (defvar sha1-H4-high) (defvar sha1-H4-low) (defun sha1-block (block-high block-low) (let (;; step (c) --- initialize buffers (A B C D E). (sha1-A-high sha1-H0-high) (sha1-A-low sha1-H0-low) (sha1-B-high sha1-H1-high) (sha1-B-low sha1-H1-low) (sha1-C-high sha1-H2-high) (sha1-C-low sha1-H2-low) (sha1-D-high sha1-H3-high) (sha1-D-low sha1-H3-low) (sha1-E-high sha1-H4-high) (sha1-E-low sha1-H4-low) (idx 16)) ;; step (b). (let (;; temporary variables used in sha1-S1 macro. S1W-high S1W-low) (while (< idx 80) (sha1-S1 (logxor (aref block-high (- idx 3)) (aref block-high (- idx 8)) (aref block-high (- idx 14)) (aref block-high (- idx 16))) (logxor (aref block-low (- idx 3)) (aref block-low (- idx 8)) (aref block-low (- idx 14)) (aref block-low (- idx 16)))) (aset block-high idx S1W-high) (aset block-low idx S1W-low) (setq idx (1+ idx)))) ;; step (d). (setq idx 0) (let (;; temporary variables used in sha1-OP macro. S5A-high S5A-low S30B-high S30B-low carry) (while (< idx 20) (sha1-OP 0) (setq idx (1+ idx))) (while (< idx 40) (sha1-OP 1) (setq idx (1+ idx))) (while (< idx 60) (sha1-OP 2) (setq idx (1+ idx))) (while (< idx 80) (sha1-OP 3) (setq idx (1+ idx)))) ;; step (e). (let (;; temporary variables used in sha1-add-to-H macro. carry) (sha1-add-to-H H0 A) (sha1-add-to-H H1 B) (sha1-add-to-H H2 C) (sha1-add-to-H H3 D) (sha1-add-to-H H4 E)))) (defun sha1-binary (string) "Return the SHA1 of STRING in binary form." (let (;; prepare buffers for a block. byte-length of block is 64. ;; input block is split into two vectors. ;; ;; input block: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ... ;; block-high: +-0-+ +-1-+ +-2-+ +-3-+ ;; block-low: +-0-+ +-1-+ +-2-+ +-3-+ ;; ;; length of each vector is 80, and elements of each vector are ;; 16bit integers. elements 0x10-0x4F of each vector are ;; assigned later in `sha1-block'. (block-high (eval-when-compile (make-vector 80 nil))) (block-low (eval-when-compile (make-vector 80 nil)))) (unwind-protect (let* (;; byte-length of input string. (len (length string)) (lim (* (/ len 64) 64)) (rem (% len 4)) (idx 0)(pos 0)) ;; initialize buffers (H0 H1 H2 H3 H4). (setq sha1-H0-high 26437 ; (string-to-number "6745" 16) sha1-H0-low 8961 ; (string-to-number "2301" 16) sha1-H1-high 61389 ; (string-to-number "EFCD" 16) sha1-H1-low 43913 ; (string-to-number "AB89" 16) sha1-H2-high 39098 ; (string-to-number "98BA" 16) sha1-H2-low 56574 ; (string-to-number "DCFE" 16) sha1-H3-high 4146 ; (string-to-number "1032" 16) sha1-H3-low 21622 ; (string-to-number "5476" 16) sha1-H4-high 50130 ; (string-to-number "C3D2" 16) sha1-H4-low 57840) ; (string-to-number "E1F0" 16) ;; loop for each 64 bytes block. (while (< pos lim) ;; step (a). (setq idx 0) (while (< idx 16) (aset block-high idx (+ (* (aref string pos) 256) (aref string (1+ pos)))) (setq pos (+ pos 2)) (aset block-low idx (+ (* (aref string pos) 256) (aref string (1+ pos)))) (setq pos (+ pos 2)) (setq idx (1+ idx))) (sha1-block block-high block-low)) ;; last block. (if (prog1 (< (- len lim) 56) (setq lim (- len rem)) (setq idx 0) (while (< pos lim) (aset block-high idx (+ (* (aref string pos) 256) (aref string (1+ pos)))) (setq pos (+ pos 2)) (aset block-low idx (+ (* (aref string pos) 256) (aref string (1+ pos)))) (setq pos (+ pos 2)) (setq idx (1+ idx))) ;; this is the last (at most) 32bit word. (cond ((= rem 3) (aset block-high idx (+ (* (aref string pos) 256) (aref string (1+ pos)))) (setq pos (+ pos 2)) (aset block-low idx (+ (* (aref string pos) 256) 128))) ((= rem 2) (aset block-high idx (+ (* (aref string pos) 256) (aref string (1+ pos)))) (aset block-low idx 32768)) ((= rem 1) (aset block-high idx (+ (* (aref string pos) 256) 128)) (aset block-low idx 0)) (t ;; (= rem 0) (aset block-high idx 32768) (aset block-low idx 0))) (setq idx (1+ idx)) (while (< idx 16) (aset block-high idx 0) (aset block-low idx 0) (setq idx (1+ idx)))) ;; last block has enough room to write the length of string. (progn ;; write bit length of string to last 4 bytes of the block. (aset block-low 15 (* (% len 8192) 8)) (setq len (/ len 8192)) (aset block-high 15 (% len 65536)) ;; XXX: It is not practical to compute SHA1 of ;; such a huge message on emacs. ;; (setq len (/ len 65536)) ; for 64bit emacs. ;; (aset block-low 14 (% len 65536)) ;; (aset block-high 14 (/ len 65536)) (sha1-block block-high block-low)) ;; need one more block. (sha1-block block-high block-low) (fillarray block-high 0) (fillarray block-low 0) ;; write bit length of string to last 4 bytes of the block. (aset block-low 15 (* (% len 8192) 8)) (setq len (/ len 8192)) (aset block-high 15 (% len 65536)) ;; XXX: It is not practical to compute SHA1 of ;; such a huge message on emacs. ;; (setq len (/ len 65536)) ; for 64bit emacs. ;; (aset block-low 14 (% len 65536)) ;; (aset block-high 14 (/ len 65536)) (sha1-block block-high block-low)) ;; make output string (in binary form). (let ((result (make-string 20 0))) (aset result 0 (/ sha1-H0-high 256)) (aset result 1 (% sha1-H0-high 256)) (aset result 2 (/ sha1-H0-low 256)) (aset result 3 (% sha1-H0-low 256)) (aset result 4 (/ sha1-H1-high 256)) (aset result 5 (% sha1-H1-high 256)) (aset result 6 (/ sha1-H1-low 256)) (aset result 7 (% sha1-H1-low 256)) (aset result 8 (/ sha1-H2-high 256)) (aset result 9 (% sha1-H2-high 256)) (aset result 10 (/ sha1-H2-low 256)) (aset result 11 (% sha1-H2-low 256)) (aset result 12 (/ sha1-H3-high 256)) (aset result 13 (% sha1-H3-high 256)) (aset result 14 (/ sha1-H3-low 256)) (aset result 15 (% sha1-H3-low 256)) (aset result 16 (/ sha1-H4-high 256)) (aset result 17 (% sha1-H4-high 256)) (aset result 18 (/ sha1-H4-low 256)) (aset result 19 (% sha1-H4-low 256)) result)) ;; do not leave a copy of input string. (fillarray block-high nil) (fillarray block-low nil)))) (defun sha1-string-internal (string &optional binary) (if binary (sha1-binary string) (encode-hex-string (sha1-binary string)))) (defun sha1-region-internal (beg end &optional binary) (sha1-string-internal (buffer-substring-no-properties beg end) binary)) ;;; ;;; application interface. ;;; (defun sha1-region (beg end &optional binary) (if (and sha1-use-external sha1-maximum-internal-length (> (abs (- end beg)) sha1-maximum-internal-length)) (sha1-region-external beg end binary) (sha1-region-internal beg end binary))) (defun sha1-string (string &optional binary) (if (and sha1-use-external sha1-maximum-internal-length (> (length string) sha1-maximum-internal-length)) (sha1-string-external string binary) (sha1-string-internal string binary))) ;;;###autoload (defun sha1 (object &optional beg end binary) "Return the SHA1 (Secure Hash Algorithm) of an object. OBJECT is either a string or a buffer. Optional arguments BEG and END denote buffer positions for computing the hash of a portion of OBJECT. If BINARY is non-nil, return a string in binary form." (if (stringp object) (sha1-string object binary) (with-current-buffer object (sha1-region (or beg (point-min)) (or end (point-max)) binary)))) (provide 'sha1) ;; arch-tag: c0f9abd0-ffc1-4557-aac6-ece7f2d4c901 ;;; sha1.el ends here twittering-mode-3.0.0/emacs21/tls.el0000644000000000000000000001647312141747407017173 0ustar rootroot00000000000000;;; tls.el --- TLS/SSL support via wrapper around GnuTLS ;; Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004, ;; 2005, 2006, 2007, 2008 Free Software Foundation, Inc. ;; Author: Simon Josefsson ;; Keywords: comm, tls, gnutls, ssl ;; This file is part of GNU Emacs. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 3, or (at your option) ;; any later version. ;; GNU Emacs 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ;; Boston, MA 02110-1301, USA. ;;; Commentary: ;; This package implements a simple wrapper around "gnutls-cli" to ;; make Emacs support TLS/SSL. ;; ;; Usage is the same as `open-network-stream', i.e.: ;; ;; (setq tmp (open-tls-stream "test" (current-buffer) "news.mozilla.org" 563)) ;; ... ;; # ;; (process-send-string tmp "mode reader\n") ;; 200 secnews.netscape.com Netscape-Collabra/3.52 03615 NNRP ready ... ;; nil ;; (process-send-string tmp "quit\n") ;; 205 ;; nil ;; To use this package as a replacement for ssl.el by William M. Perry ;; , you need to evaluate the following: ;; ;; (defalias 'open-ssl-stream 'open-tls-stream) ;;; Code: (eval-and-compile (autoload 'format-spec "format-spec") (autoload 'format-spec-make "format-spec")) (defgroup tls nil "Transport Layer Security (TLS) parameters." :group 'comm) (defcustom tls-end-of-info (concat "\\(" ;; `openssl s_client' regexp. See ssl/ssl_txt.c lines 219-220. ;; According to apps/s_client.c line 1515 `---' is always the last ;; line that is printed by s_client before the real data. "^ Verify return code: .+\n---\n\\|" ;; `gnutls' regexp. See src/cli.c lines 721-. "^- Simple Client Mode:\n" "\\(\n\\|" ; ignore blank lines ;; According to GnuTLS v2.1.5 src/cli.c lines 640-650 and 705-715 ;; in `main' the handshake will start after this message. If the ;; handshake fails, the programs will abort. "^\\*\\*\\* Starting TLS handshake\n\\)*" "\\)") "Regexp matching end of TLS client informational messages. Client data stream begins after the last character matched by this. The default matches `openssl s_client' (version 0.9.8c) and `gnutls-cli' (version 2.0.1) output." :version "22.2" :type 'regexp :group 'tls) (defcustom tls-program '("gnutls-cli -p %p %h" "gnutls-cli -p %p %h --protocols ssl3" "openssl s_client -connect %h:%p -no_ssl2") "List of strings containing commands to start TLS stream to a host. Each entry in the list is tried until a connection is successful. %h is replaced with server hostname, %p with port to connect to. The program should read input on stdin and write output to stdout. Also see `tls-success' for what the program should output after successful negotiation." :type '(repeat string) :version "22.1" :group 'tls) (defcustom tls-process-connection-type nil "*Value for `process-connection-type' to use when starting TLS process." :version "22.1" :type 'boolean :group 'tls) (defcustom tls-success "- Handshake was completed\\|SSL handshake has read " "*Regular expression indicating completed TLS handshakes. The default is what GNUTLS's \"gnutls-cli\" or OpenSSL's \"openssl s_client\" outputs." :version "22.1" :type 'regexp :group 'tls) (defcustom tls-certtool-program (executable-find "certtool") "Name of GnuTLS certtool. Used by `tls-certificate-information'." :version "22.1" :type 'string :group 'tls) (defun tls-certificate-information (der) "Parse X.509 certificate in DER format into an assoc list." (let ((certificate (concat "-----BEGIN CERTIFICATE-----\n" (base64-encode-string der) "\n-----END CERTIFICATE-----\n")) (exit-code 0)) (with-current-buffer (get-buffer-create " *certtool*") (erase-buffer) (insert certificate) (setq exit-code (condition-case () (call-process-region (point-min) (point-max) tls-certtool-program t (list (current-buffer) nil) t "--certificate-info") (error -1))) (if (/= exit-code 0) nil (let ((vals nil)) (goto-char (point-min)) (while (re-search-forward "^\\([^:]+\\): \\(.*\\)" nil t) (push (cons (match-string 1) (match-string 2)) vals)) (nreverse vals)))))) (defun open-tls-stream (name buffer host port) "Open a TLS connection for a port to a host. Returns a subprocess-object to represent the connection. Input and output work as for subprocesses; `delete-process' closes it. Args are NAME BUFFER HOST PORT. NAME is name for process. It is modified if necessary to make it unique. BUFFER is the buffer (or buffer-name) to associate with the process. Process output goes at end of that buffer, unless you specify an output stream or filter function to handle the output. BUFFER may be also nil, meaning that this process is not associated with any buffer Third arg is name of the host to connect to, or its IP address. Fourth arg PORT is an integer specifying a port to connect to." (let ((cmds tls-program) (use-temp-buffer (null buffer)) process cmd done) (if use-temp-buffer (setq buffer (generate-new-buffer " TLS"))) (with-current-buffer buffer (message "Opening TLS connection to `%s'..." host) (while (and (not done) (setq cmd (pop cmds))) (message "Opening TLS connection with `%s'..." cmd) (let ((process-connection-type tls-process-connection-type) response) (setq process (start-process name buffer shell-file-name shell-command-switch (format-spec cmd (format-spec-make ?h host ?p (if (integerp port) (int-to-string port) port))))) (while (and process (memq (process-status process) '(open run)) (progn (goto-char (point-min)) (not (setq done (re-search-forward tls-success nil t))))) (unless (accept-process-output process 1) (sit-for 1))) (message "Opening TLS connection with `%s'...%s" cmd (if done "done" "failed")) (if (not done) (delete-process process) ;; advance point to after all informational messages that ;; `openssl s_client' and `gnutls' print (let ((start-of-data nil)) (while (not (setq start-of-data ;; the string matching `tls-end-of-info' ;; might come in separate chunks from ;; `accept-process-output', so start the ;; search where `tls-success' ended (save-excursion (if (re-search-forward tls-end-of-info nil t) (match-end 0))))) (accept-process-output process 1)) (if start-of-data ;; move point to start of client data (goto-char start-of-data))) (setq done process)))) (message "Opening TLS connection to `%s'...%s" host (if done "done" "failed"))) (when use-temp-buffer (if done (set-process-buffer process nil)) (kill-buffer buffer)) done)) (provide 'tls) ;;; arch-tag: 5596d1c4-facc-4bc4-94a9-9863b928d7ac ;;; tls.el ends here twittering-mode-3.0.0/howto/.nosearch0000644000000000000000000000000012141747407017532 0ustar rootroot00000000000000twittering-mode-3.0.0/howto/release0000644000000000000000000000127112141747407017305 0ustar rootroot00000000000000 # What to do on a release - Add new version number to `/NEWS` and `/NEWS.ja` and describe updates. - `make release` to update version numbers and create tarballs. - Fix the new version number based on the rule above and update `/VERSION`. - Update version numbers in source code(`/twittering-mode.el`). - Update version numbers on web pages(`/doc/web/index.text`). - Change the version number in `/VERSION` to next (expected) version number. - Make a tag `v` - Upload new source files to souceforge.net - Publish web pages(`cd doc/web; make upload`). - Release announce on MLs. - Release announce on freshmeat.net. - Release announce on Twitter. twittering-mode-3.0.0/http-client.rb0000755000000000000000000000721012141747407017364 0ustar rootroot00000000000000#!/usr/bin/env ruby require 'net/http' require 'net/https' require 'optparse' require 'uri' def verbose_printer(verbosity) if verbosity pid = Process.pid Proc.new do |msg| $stderr.puts "[#{pid}]: #{msg}" end else Proc.new do |a| end end end def parse_option(argv) parser = OptionParser.new opt = Hash.new print_help = Proc.new do |msg, *args| exits = if args.size > 0 args.shift else true end if msg puts msg puts end puts "Usage: #{$0} [OPTIONS] HOSTNAME" puts parser.help if exits exit(1) end end parser.on('-h') do print_help.call(nil) end # TODO: should be rewrite in cURL style option opt[:verbose] = nil parser.on('-v', '--verbose', "\n\t\tverbose") do opt[:verbose] = true end opt[:headers] = Hash.new parser.on('-H', '--header HEADER', "\n\t\tadditional HTTP header field." + "\n\t\tuse like -h \"User-Agent: Ruby\"") do |header| unless header =~ /^([-A-Za-z]+):\s*(.+)$/ print_help.call("Invalid HTTP header format: #{header}") end opt[:headers][$~[1]] = $~[2] end opt[:method] = 'GET' parser.on('-m', '--method METHOD', "\n\t\tHTTP request method"+ " (GET and POST are supported)") do |method| unless method =~ /\A(GET|POST)\Z/ print_help.call("Not such HTTP method: #{method}") end opt[:method] = method end opt[:path] = '/' parser.on('-P', '--path PATH', "\n\t\tHTTP request path (default: \"/\")") do |path| opt[:path] = path end opt[:encode] = nil parser.on('-e', '--encode', "\n\t\tpercent encode HTTP request path (default: no)") do opt[:encode] = true end opt[:ssl] = nil parser.on('-s', '--ssl', "\n\t\tuse SSL (default: no)") do opt[:ssl] = true end opt[:port] = nil parser.on('-p', '--port PORT', "\n\t\tdestination port number" + " (default: 80 on non-SSL, 443 on SSL)") do |port| opt[:port] = port.to_i puts "port: #{opt[:port]}" end opt[:ssl_cert] = nil parser.on('-c', '--cert PATH', "\n\t\tCA certificate file(*.pem)" + " for verifying certificates") do |path| unless File.exist?(path) print_help.call("No such file: #{path}") end opt[:ssl_cert] = path end parser.parse!(argv) if argv.size == 0 print_help.call('HOSTNAME required') end opt[:host] = argv.first if !opt[:port] opt[:port] = if opt[:ssl] 443 else 80 end end opt[:path] = URI.encode(opt[:path]) if opt[:encode] opt end def print_header_string(res) print "HTTP/#{res.http_version} #{res.code} #{res.message}" res.canonical_each do |name,value| print("\r\n#{name}: #{value}") end end def main(argv) Net::HTTP.version_1_2 opt = parse_option(argv) vprint = verbose_printer(opt[:verbose]) http = Net::HTTP.new(opt[:host], opt[:port]) if opt[:ssl] http.use_ssl = true vprint.call("SSL enabled") if opt[:ssl_cert] http.ca_file = opt[:ssl_cert] http.verify_mode = OpenSSL::SSL::VERIFY_PEER http.verify_depth = 5 end end res = nil begin http.start do |client| res = case opt[:method] when /GET/ client.get(opt[:path], opt[:headers]) when /POST/ client.post(opt[:path], opt[:headers]) end end end if res print_header_string(res) print "\r\n\r\n" print res.body $stdout.flush else $stderr.puts "error" end end if __FILE__ == $0 main(ARGV.dup) end twittering-mode-3.0.0/misc/.nosearch0000644000000000000000000000000012141747407017325 0ustar rootroot00000000000000twittering-mode-3.0.0/misc/twitter-icon.svg0000644000000000000000000004623412141747407020716 0ustar rootroot00000000000000 image/svg+xml tw tw twittering-mode-3.0.0/misc/vernum-updater.rb0000755000000000000000000001136012141747407021043 0ustar rootroot00000000000000#!/usr/bin/env ruby require 'optparse' require 'tempfile' require 'pathname' require 'fileutils' def y_or_n_p(msg) answer = nil while answer == nil print "#{msg} [yes or no]: " $stdout.flush ans = $stdin.readline.strip case ans when /yes/ answer = true break when /no/ answer = false break else puts "Please type 'yes' or 'no'." puts end end answer end class FileContext def initialize(lines, cur_line_idx, match_col_start, match_col_end, rplstr) @lines = lines @cur_line_idx = cur_line_idx @match_col_start = match_col_start @match_col_end = match_col_end @rplstr = rplstr end def inspect cur_line = @lines[@cur_line_idx][1].dup len = @match_col_end - @match_col_start rplstr = "\033[1m\033[4m" + cur_line[@match_col_start, len] + "\033[0m" cur_line[@match_col_start, len] = rplstr lines = @lines.dup lines[@cur_line_idx] = [@lines[@cur_line_idx][0], cur_line] lineno_width = lines[lines.size - 1][0].to_s.size lines.map{|line| sprintf("%#{lineno_width}d: %s", line[0], line[1])}.join.rstrip end def line @lines[@cur_line_idx][1] end def lineno @lines[@cur_line_idx][0] end def replaced_line cur_line = @lines[@cur_line_idx][1].dup len = @match_col_end - @match_col_start cur_line[@match_col_start, len] = @rplstr cur_line end end class FileReplacer def initialize(file, opt) @infile = File.open(file, "r") @outfile = Tempfile.new("fileupdater") @opt = opt @lineno = 1 # current line is the first element of after_buffer @before_buffer = [] @after_buffer = [] (@opt[:context] + 1).times do self.fetch_line(true) end end def replace!() while @after_buffer.size > 0 pos = 0 cur_line_str = @after_buffer.first[1] while @opt[:regexp].match(cur_line_str[pos..(cur_line_str.size)]) context = FileContext.new(@before_buffer + @after_buffer, @before_buffer.size, pos + $~.begin(0), pos + $~.end(0), @opt[:replace]) rpl = yield(context) || cur_line_str if rpl != cur_line_str @after_buffer[0][1] = rpl end pos = $~.begin(0) + 1 end @outfile.print(@after_buffer.first[1]) self.fetch_line end @infile.close @outfile.close FileUtils.copy(@outfile.path, @infile.path) end def fetch_line(beginning_of_file = false) eof_reached = false line = nil begin line = @infile.readline rescue EOFError => e eof_reached = true end if line @after_buffer.push([@lineno, line]) @lineno += 1 end if ! beginning_of_file && (eof_reached || @after_buffer.size > @opt[:context] + 1) @before_buffer.push(@after_buffer.shift) @before_buffer.shift if @before_buffer.size > @opt[:context] end @after_buffer.first end end def update(file, opt) base = Pathname.pwd path = Pathname.new(file).realpath.to_s replacer = FileReplacer.new(file, :regexp => Regexp.compile(Regexp.quote(opt[:prev_version])), :replace => opt[:next_version], :context => opt[:context]) replacer.replace! do |context| puts "==== file: #{Pathname.new(path).relative_path_from(base).to_s} ====" puts context.inspect puts puts "\033[34m\033[1mbefore\033[0m: #{context.line}" puts "\033[31m\033[1mafter\033[0m : #{context.replaced_line}" puts if y_or_n_p("Update this line?") context.replaced_line else context.line end end rescue Errno::ENOENT => e nil end def parse_args(argv) parser = OptionParser.new opt = Hash.new print_help = Proc.new do |msg| puts msg puts puts parser.help exit end opt[:context] = 3 parser.on('-C', '--context=NUM', "\n\t\tPrint NUM lines around matching lines."+ " Default value is #{opt[:context]}") do |num| opt[:context] = num.to_i opt[:context] = 3 if opt[:context] < 3 end parser.on('-p', '--prev-version=NUM', "\n\t\tPrevious version number.") do |prev| opt[:prev_version] = prev end parser.on('-n', '--next-version=NUM', "\n\t\tNext version number.") do |next_| opt[:next_version] = next_ end parser.parse!(argv) unless opt[:prev_version] print_help.call("Previous version number must be specified") end unless opt[:next_version] print_help.call("Next version number must be specified") end opt end def main(argv) opt = parse_args(argv) argv.each do |file| update(file, opt) end end if __FILE__ == $0 main(ARGV.dup) end twittering-mode-3.0.0/test.el0000644000000000000000000003661312141747407016113 0ustar rootroot00000000000000;;; test.el --- Unit test framework for Emacs lisp program ;; Copyright (C) 2008 by Wang Liang ;; Author: Wang Liang ;; test.el is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; test.el 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Download ;; Latest version is at http://www.wanglianghome.org/svn/test/test.el ;; You can check out with subversion. ;; $ svn co http://www.wanglianghome.org/svn/test/ ;;; Screenshot ;; http://www.wanglianghome.org/images/test.png ;;; Usage ;; Overview ;; This unit test framework is developed for testing operations on a buffer. ;; But it definitely can be used to test operations unrelated to buffers. ;; ;; For example, I write `my-buffer-substring'. I also have a file and if it ;; is loaded into a buffer and run (my-buffer-substring 10 22) on that buffer, ;; it must return "hello, world". To test it, I can write a test case with ;; this framework, ;; ;; (defun my-buffer-substring-setup () ;; (insert-file-contents "my-file")) ;; ;; (defcase my-buffer-substring-test nil 'my-buffer-substring-setup ;; (test-assert-string-equal (my-buffer-substring 10 22) "hello, world")) ;; ;; And then run it by invoking ;; `M-x test-run-one-case MY-BUFFER-SUBSTRING-TEST'. ;; ;; http://www.wanglianghome.org/svn/test/example.el is an example of usage. ;; To use this framework, add the following lines to your .emacs file ;; (add-to-list 'load-path "/path/to/test/") ;; (require 'test) ;; Write test cases ;; Test case is written with `defcase' macro. For example, ;; ;; (defcase my-code-test nil nil ;; (test-assert-ok (my-fun))) ;; ;; This test case includes one assertion but no tags and no setup code. ;; It checks return value of `my-fun'. If it's `nil', case fails. ;; Otherwise, case passes. You can add more assertions into one case. ;; ;; Besides `test-assert-ok', `test-assert-key' is used to assert that a key ;; is bound to a function in a mode-map. For example, ;; (test-assert-key example-mode-map (kbd "C-c C-c") 'example-function) ;; ;; Assertion for binary comparison or prediction is much more flexible. ;; You can use `test-assert-CMP' if `CMP', either provided by Emacs or ;; written by you, accepts more than two parameters. All those assertions ;; fallback to `test-assert-binary-relation' function so that I do not need ;; to write them as many as possible. Since `test-assert-binary-relation' ;; only considers first two parameters, others are ignored. ;; ;; You can develop your own assertions by using "test-assert-extended-" as ;; function name prefix. For example You develop `test-assert-extended->' ;; to compare many numbers since `test-assert->' only compares two. Inside ;; your own assertion function, you should use `assert' from `cl' package to ;; do real job. ;; ;; Test cases can be grouped with tags so that you can run them with one ;; command. To add tags to the previous test case, ;; ;; (defcase my-code-test (my-lib-suite my-lib-sublib-suite) nil ;; (test-assert-ok (my-fun))) ;; ;; All test cases are run in a temporary buffer. You can setup buffer ;; content by providing `setup' code. For example, ;; ;; (defun my-lib-setup () ;; (insert-file-contents "my-input-filename") ;; (my-mode)) ;; ;; (defcase my-code-test (my-lib my-lib-sublib) 'my-lib-setup ;; (test-assert-ok (my-fun))) ;; ;; You probably want to add a common tag to all your test case for a specific ;; package, and add a common setup code too. So you can write your own macro ;; to make it easy to develop test cases. For example, ;; ;; (defmacro defmylibcase (case-name tags &rest body) ;; `(defcase ,case-name ,(append '(my-lib-suite) tags) 'my-lib-setup ;; ,@body)) ;; ;; And then, ;; ;; (defmylibcase my-code-test-2 (my-lib-sublib-suite) ;; (test-assert-ok (my-fun))) ;; ;; Run test cases ;; `M-x test-run-one-case CASE' runs one test case. ;; `M-x test-run-all-cases' runs all test cases stored in `test-cases'. ;; `M-x test-run-one-tag TAG' runs all test cases grouped by TAG. ;; `(test-run-tags TAGS)' runs all test cases grouped by one of TAGS. ;; ;; Test result, including detail error message and summary, is shown in ;; buffer `*test-result*'. ;; Every test case has a summary line to show how many cases pass and how ;; many cases fail. There are also a summary line to show total number of ;; pass and failure for all commands except `test-run-one-case'. ;; Error message is helpful. If assertion fails, `test-assert-ok' prints ;; evaluated form, `test-assert-binary-relation' prints what is got and why ;; it failed. ;;; Code (require 'cl) (defconst test-version "0.9" "test version") (defun test-version () "Show test version." (interactive) (message "test version %s" test-version)) (defvar test-cases (make-hash-table) "All case in all tags") (defvar test-tags (make-hash-table) "All tags from all test cases") (defvar test-special-assertion-functions '(test-assert-ok test-assert-key) "Assertion functions must not fallback to `test-assert-binary-relation'.") (defun test-completing-read (prompt choices dummy require-match) "Use iswitchb completion functionality." (let ((iswitchb-make-buflist-hook (lambda () (setq iswitchb-temp-buflist choices)))) (iswitchb-read-buffer prompt nil require-match))) (defvar test-completing-read-function (if (fboundp 'iswitchb-read-buffer) 'test-completing-read 'completing-read)) (defvar test-assert-method-prefix "test-assert-" "Prefix of test-assert methods.") (defvar test-assert-extended-prefix "test-assert-extended-" "Prefix of user-extended test-assert methods.") (defun test-assert-p (test) "Return non-nil if TEST is an assertion." (let ((method-name (symbol-name (car test)))) (string-equal test-assert-method-prefix (substring method-name 0 (min (length test-assert-method-prefix) (length method-name)))))) (defun test-special-assert-p (test) "Return non-nil if TEST is `test-assert-ok' or user-extended assertion." (or (memq (car test) test-special-assertion-functions) (let ((method-name (symbol-name (car test)))) (string-equal test-assert-extended-prefix (substring method-name 0 (min (length test-assert-extended-prefix) (length method-name))))))) (defun test-report-error (test error) "Print form TEST and error message from ERROR." (princ "# ") (prin1 test) (princ "\n") (let* ((msg (error-message-string error)) (from-here (string-equal "# " (substring msg 0 5)))) (unless from-here (princ "# ")) (princ msg) (unless from-here) (princ "\n")) (princ "# \n")) (defun test-gensym (&optional prefix) "Generate uninterned symbol. If PREFIX is non-nil, use it as prefix. Otherwise, use \"--test--\"." (gensym (or prefix "--test--"))) (defun test-transform-body (body fail succ err &optional not-toplevel) "This function transforms the BODY, which is a body of defcase, recursively to alternate `test-assert-*' to apropriate expressions" (if (not (listp body)) body (mapcar (lambda (arg) (cond ((not (listp arg)) arg) ((not (test-assert-p arg)) (let ((arg (cond ((listp arg) (test-transform-body arg fail succ err t)) (t arg)))) (if not-toplevel arg `(condition-case ,err ;; do not count as success ,arg (error (incf ,fail) ; but count as failure (test-report-error ',arg ,err)))))) ((test-special-assert-p arg) `(condition-case ,err (progn ,arg (incf ,succ)) (error (incf ,fail) (test-report-error ',arg ,err)))) (t `(condition-case ,err (progn (test-assert-binary-relation ;; function to test binary relation ',(intern (substring (symbol-name (car arg)) (length test-assert-method-prefix))) ;; parameters to above function ,@(cdr arg)) (incf ,succ)) (error (incf ,fail) (test-report-error ',arg ,err)))))) body))) (defmacro defcase (case-name tags setup &rest body) "Define test case which includes one or multiple assertions." (let ((tag (test-gensym)) (tag-cases (test-gensym)) (fail (test-gensym)) (succ (test-gensym)) (err (test-gensym))) `(progn (assert (and (listp ',tags) (or (null ',tags) (every 'symbolp ',tags))) ;; `show-args' can not be `t' since `assert' will ;; evaluate EVERY parameter of `and'. This breaks ;; short-circuit effect of `and'. nil "Tags must be nil or a list of symbols.") ;; Associate case with every tag, and push tags into hash table. (dolist (,tag ',tags) (when ,tag (let ((,tag-cases (gethash ,tag test-tags '()))) (add-to-list ',tag-cases ',case-name) (puthash ,tag ,tag-cases test-tags)))) ;; Push function, which runs test case and returns `(pass-count ;; fail-count)', into hash table. (puthash ',case-name (lambda () (let ((,fail 0) (,succ 0)) (with-temp-buffer (when ,setup (funcall ,setup)) ;; transform `body' of macro during expansion time. ,@(test-transform-body body fail succ err) ;; summarize (princ (format "%s: %d pass, %d fail." (symbol-name ',case-name) ,succ ,fail)) (princ "\n")) ;; return value (list ,succ ,fail))) test-cases)))) (defun test-princ-current-time () "Print start time to run test cases." (princ "# ") (princ (current-time-string)) (princ "\n")) (defmacro test-report (&rest body) "Show test report in buffer `*test-result*'." `(progn (with-output-to-temp-buffer "*test-result*" (test-princ-current-time) ,@body) (with-current-buffer "*test-result*" (test-result-mode)))) (defun test-run (cases) "Run test cases in CASES." (dolist (case-name (test-args-to-list cases)) (funcall (gethash case-name test-cases)))) (defvar test-last-summary nil) (defun test-run-and-summarize (cases) "Run test cases in CASES and print summary." (let ((total-succ 0) (total-fail 0)) (dolist (case-name (test-args-to-list cases)) (let ((summary (funcall (gethash case-name test-cases)))) (incf total-succ (car summary)) (incf total-fail (cadr summary)))) (setq test-last-summary `((succ . ,total-succ) (fail . ,total-fail))) (princ "# ") (princ (format "Total: %d pass, %d fail." total-succ total-fail)))) (defun test-args-to-list (args) "Make sure ARGS is a list." (if (listp args) args (list args))) (defun test-find-all-cases (tags) "Return all test cases grouped by TAGS. This function guarantees that no duplicated cases in return value." (let ((tag-list (test-args-to-list tags)) (cases '())) (dolist (tag tag-list) (dolist (test-case (gethash tag test-tags)) (add-to-list 'cases test-case))) cases)) (defun test-maphashkey (fn hashtable) "Call FN on each key of hash table HASHTABLE and return a list of result." (let ((keys '())) (maphash (lambda (key value) (add-to-list 'keys (funcall fn key))) hashtable) keys)) (defun test-find-all-case-names (&optional tag) "Return all case names, or name of cases grouped by TAG if TAG is non-nil, as a list." (if tag (mapcar 'symbol-name (test-find-all-cases tag)) (test-maphashkey 'symbol-name test-cases))) (defun test-find-all-tag-names () "Return all tag names as a list." (test-maphashkey 'symbol-name test-tags)) (defun test-completing-read-one (prompt choice) "Read a string and return a symbol whose name is the string being read." ;; Better to read a tag symbol directly. (intern (funcall test-completing-read-function prompt choice nil t))) (defun test-completing-read-one-tag () "Read a tag name and return corresponding tag symbol." (test-completing-read-one "Tag: " (test-find-all-tag-names))) (defun test-completing-read-one-case (&optional tag) "Read a case name and return corresponding case symbol. If TAG is non-nil, only cases grouped by it is allowed." (test-completing-read-one "Case name: " (test-find-all-case-names tag))) (defun test-run-one-tag (tag-name) "Run test cases grouped by tag TAG-NAME." (interactive (list (test-completing-read-one-tag))) (test-report (princ "# Tag: ") (princ tag-name) (princ "\n") (test-run-and-summarize (test-find-all-cases tag-name)))) (defun test-run-tags (&rest tags) "Run all test cases grouped by TAGS." (test-report (princ "# Tags: ") (princ (mapconcat 'symbol-name tags " ")) (princ "\n") (test-run-and-summarize (test-find-all-cases tags)))) (defun test-run-one-case (case-name) "Run one test case whose name is CASE-NAME." (interactive (list (test-completing-read-one-case))) (test-report (test-run case-name))) (defun test-run-all-cases () "Run all test cases saved in TEST-CASES." (interactive) (test-report (test-run-and-summarize (test-maphashkey 'identity test-cases)))) (defmacro test-motion-target (&rest body) "Return position after motion." `(progn ,@body (point))) ;;; Special assertions (defun test-assert-ok (form) "Assert that FORM returns non-nil." (assert form nil (with-output-to-string (princ "# not ok: ") (prin1 form)))) (defun test-assert-key (mode-map kbd function) "Assert that KBD is binding to FUNCTION in MODE-MAP." (let ((got (lookup-key mode-map kbd))) (assert (eq got function) t (with-output-to-string (princ "# got: ") (prin1 got) (princ "\n") (princ "# not bound to: ") (prin1 function))))) ;;; Assertion for binary comparison or prediction. (defun test-assert-binary-relation (fn got expected) "Fallback function to assert all binary relation between GOT and EXPECTED with FN." (assert (funcall fn got expected) t (with-output-to-string (princ "# got: ") (prin1 got) (princ "\n") (princ "# not ") (prin1 fn) (princ ": ") (prin1 expected)))) ;;; `test-result-mode' (defvar test-result-font-lock-keywords `(("^\\(# got: \\)\\(.*\\)$" (1 font-lock-preprocessor-face) (2 font-lock-warning-face)) ("^\\(# not ok: \\)\\(.*\\)$" (1 font-lock-preprocessor-face) (2 font-lock-warning-face)) ("^\\(# .*?: \\)\\(.*\\)$" (1 font-lock-preprocessor-face) (2 font-lock-type-face)) ;; be careful about the order ("^# .*$" . font-lock-preprocessor-face) ("^\\(.*\\): \\([0-9]+\\) pass, \\([0-9]+\\) fail.$" (1 font-lock-function-name-face) (2 font-lock-type-face) (3 font-lock-warning-face))) "Font lock for `test-result-mode'.") (defconst test-result-font-lock-defaults '(test-result-font-lock-keywords t nil nil nil (font-lock-multiline . nil))) (define-derived-mode test-result-mode nil "Test-Result" (set (make-local-variable 'font-lock-defaults) test-result-font-lock-defaults)) (provide 'test) twittering-mode-3.0.0/test/.nosearch0000644000000000000000000000000012141747407017351 0ustar rootroot00000000000000twittering-mode-3.0.0/test/el-test-runner.el0000644000000000000000000000402012141747407020762 0ustar rootroot00000000000000 (defvar twittering-test-dir nil) (when load-file-name (setq twittering-test-dir (file-name-directory load-file-name)) (add-to-list 'load-path twittering-test-dir)) (require 'twittering-mode (expand-file-name "../twittering-mode.el" twittering-test-dir)) (require 'test (expand-file-name "../test.el" twittering-test-dir)) (defun get-fixture (name) (when (symbolp name) (setq name (symbol-name name))) (let ((fixture-path (expand-file-name (concat name ".el") (expand-file-name "fixture" twittering-test-dir)))) (if (file-exists-p fixture-path) (with-temp-buffer (insert-file-contents fixture-path) (beginning-of-buffer) (read (current-buffer))) nil))) (defmacro with-network (&rest body) `(when (getenv "NETWORK") ,@body)) (defun twittering-run-test () (interactive) (dolist (file-name (directory-files twittering-test-dir)) (when (string-match "^test-" file-name) (let ((file-name (expand-file-name file-name twittering-test-dir))) (load file-name)))) (test-run-all-cases) (let* ((fail-count (cdr (assoc 'fail test-last-summary))) (exit-status (if (eq 0 fail-count) 0 1))) (save-excursion (set-buffer "*test-result*") (end-of-buffer) (search-backward-regexp "" nil t) (beginning-of-buffer) (while (search-forward-regexp "\\b\\([0-9]+\\) pass\\b" nil t) (replace-match (concat "\033[1m\033[32m" (match-string 0) "\033[0m"))) (beginning-of-buffer) (while (search-forward-regexp "\\b\\([0-9]+\\) fail\\b" nil t) (let ((pass (string-equal "0" (match-string 1)))) (replace-match (concat "\033[1m\033[31m" (match-string 0) "\033[0m")) (beginning-of-line) (when (search-forward-regexp "^\\([^:#]+\\):" nil t) (replace-match (concat (if pass "\033[1m\033[32m" "\033[1m\033[31m") (match-string 1) "\033[0m") nil nil nil 1)) )) (princ (buffer-string))) (terpri) (when noninteractive (kill-emacs exit-status)) )) (twittering-run-test) twittering-mode-3.0.0/test/fixture/timeline-data.el0000644000000000000000000002716512141747407022320 0ustar rootroot00000000000000(((id . "6480639448") (text . "Help protect and support Free Software and the GNU Project by joining the Free Software Foundation! http://www.fsf.org/join?referrer=7019") (source . "web") (created-at 19230 62217) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "GNU project") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "6068719152") (text . "Worg's a collaboratively-edited site about org-mode that uses org-mode and git as the backend. Cool! http://bit.ly/5dfq90 (via @learnemacs)") (source . "Tweetie") (created-at 19213 57955) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5430846002") (text . "Happy 3 years of Planet Emacsen! http://planet.emacsen.org/") (source . "web") (created-at 19185 61918) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5395447473") (text . "@ibread yes, by people letting me know they want to be added to it.") (source . "web") (created-at 19184 23723) (truncated . nil) (in-reply-to-status-id . "5387945498") (in-reply-to-screen-name . "ibread") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5388319142") (text . "Want M-x customize to display real variable names? Set `custom-unlispify-tag-names' and `custom-unlispify-menu-entries' to nil.") (source . "web") (created-at 19184 731) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5386633091") (text . "@ibread done.") (source . "web") (created-at 19183 57365) (truncated . nil) (in-reply-to-status-id . "5382204189") (in-reply-to-screen-name . "ibread") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5376421165") (text . "Use Emacs? 日本語ã§è©±ã›ã¾ã™ã‹ï¼Ÿ Let's make http://twitter.com/emacs/japanese the authoritative list of Japanese-language Emacs users on twitter!") (source . "web") (created-at 19183 27786) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5272344132") (text . "Do you hang out in @freenode's #emacs channel? Let me know and I'll add you to http://twitter.com/emacs/irc") (source . "web") (created-at 19178 8958) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "5082433713") (text . "Want to find all foos in your bar-mode buffers? Use ibuffer! M-x ibuffer RET * M bar-mode RET O foo RET (via @kensanata asking in #emacs)") (source . "web") (created-at 19168 59548) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "4904187220") (text . "@serverhorror no, but I'm all for it.") (source . "Tweetie") (created-at 19159 52264) (truncated . nil) (in-reply-to-status-id . "4848149430") (in-reply-to-screen-name . "serverhorror") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "4297523005") (text . "Collaborative editing in Emacs that works with Gobby: http://rudel.sourceforge.net/ (via @technomancy) Looks great! Can't wait to try it.") (source . "web") (created-at 19129 13348) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "4049776133") (text . "Using Emacs to develop web applications? Try using Luke Gorrie's http://tr.im/http_twiddle to interactively write/edit/test HTTP requests.") (source . "web") (created-at 19121 59554) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "3946747696") (text . "@gabrielsaldana ‘gnus-secondary-select-methods’ is your friend.") (source . "Tweetie") (created-at 19116 22686) (truncated . nil) (in-reply-to-status-id . "3946440115") (in-reply-to-screen-name . "gabrielsaldana") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "2923425504") (text . "GNU Emacs 23.1 has been released! Share and Enjoy!") (source . "Echofon") (created-at 19057 5382) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "2896622068") (text . "Steve Yegge's js2-mode (which is fabulous BTW) now bundled with @emacs: http://bit.ly/4cLzac") (source . "web") (created-at 19055 24997) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "2745124537") (text . "Correction: Emacs 23.1 will be released in nine days, on Wednesday the 29th.") (source . "web") (created-at 19044 54957) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "2743146093") (text . "Barring unforeseen issues, Emacs 23.1 will be released in two days, on Wednesday the 22nd: http://article.gmane.org/gmane.emacs.devel/112846") (source . "web") (created-at 19044 47475) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "2617217996") (text . "@gabrielsaldana: I build from trunk with --with-ns. The various pre-compiled distributions all seem to include weird changes to my defaults.") (source . "web") (created-at 19035 28055) (truncated . nil) (in-reply-to-status-id . "2616864784") (in-reply-to-screen-name . "gabrielsaldana") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil)) ((id . "2473438293") (text . "Edit XHTML5 documents in nxml-mode with on-the-fly validation: http://bit.ly/lYnEg (by @hober)") (source . "web") (created-at 19023 46920) (truncated . nil) (in-reply-to-status-id . "") (in-reply-to-screen-name . "") (user-id . "9492852") (user-name . "emacs") (user-screen-name . "emacs") (user-location . "") (user-description . "Emacs is the extensible self-documenting text editor.") (user-profile-image-url . "http://a1.twimg.com/profile_images/33497412/emacs_normal.gif") (user-url . "http://www.gnu.org/software/emacs/") (user-protected . nil))) twittering-mode-3.0.0/test/run-test.sh0000755000000000000000000000115612141747407017703 0ustar rootroot00000000000000#!/bin/bash emacsen="emacs emacs23 emacs22 emacs21" continue_on_error= if [ $# -gt 0 ]; then continue_on_error="yes" fi exit_status=0 for emacs in $(echo ${emacsen}); do if ! which $emacs 1> /dev/null 2> /dev/null; then echo "No such executable found: ${emacs}: skipped." continue fi $emacs -q --no-site-file --batch --load $(dirname $0)/el-test-runner.el exit_status=$? if [ $exit_status != 0 ]; then echo "Test failed on $(${emacs} --version | head -n 1)" if [ -z "${continue_on_error}" ]; then exit 1 else echo "sleep 5 secs..." sleep 5 fi fi done exit $exit_status twittering-mode-3.0.0/test/server.rb0000755000000000000000000000355312141747407017424 0ustar rootroot00000000000000#!/usr/bin/env ruby require 'optparse' require 'webrick' require 'webrick/httpproxy' require 'singleton' class TwitterAPI include Singleton attr_accessor :res attr_accessor :req def self.call(req, res) uri = req.request_uri format = File.extname(uri.path) format = "xml" if format == "" format = format.gsub(/^\./, '') endpoint = uri.path.gsub(/\.[a-z]+$/, '').gsub(/^\//, '') params = Hash.new (uri.query || "").split("&").each do |param| if param =~ /([^=]+)=(.+)/ params[$~[1]] = $~[2] params[$~[1].to_sym] = $~[2] else raise ArgumentError.new("Invalid query string: #{param}") end end tw = self.instance tw.res = res tw.req = req tw.send(endpoint.gsub(/\//, '_'), format, params) end def statuses_public_timeline(format, params) @res.body = "URI: #{@req.request_uri.to_s}, format: #{format}, params: #{params.inspect}" end end def parse_options(argv) parser = OptionParser.new opt = Hash.new print_help = Proc.new do |msg| $stderr.puts msg puts puts parser.help exit 1 end opt[:port] = 80 parser.on('-p', '--port=PORT', "\n\t\tPort number to be used.") do |port| opt[:port] = port.to_i if opt[:port] == 0 print_help.call("Invalid port number: #{port}") end end opt[:proxy] = false parser.on('-P', '--proxy', "\n\t\tRun as a proxy server if this option is specified.") do opt[:proxy] = true end parser.parse!(argv) opt end def main(argv) opt = parse_options(argv) server = WEBrick::HTTPServer.new({:Port => opt[:port], :BindAddress => "127.0.0.1"}) server.mount_proc("/") do |req, res| TwitterAPI.call(req, res) end Signal.trap('INT') do server.shutdown end server.start end if __FILE__ == $0 main(ARGV.dup) end twittering-mode-3.0.0/test/test-twittering-mode.el0000644000000000000000000007751112141747407022214 0ustar rootroot00000000000000;;; -*- coding: utf-8 -*- (when (and (> 22 emacs-major-version) (require 'url-methods nil t)) ;; `twittering-make-http-request-from-uri', which is called for the format ;; specifier "%i", requires `url-generic-parse-url'. But the function for ;; Emacs 21, which is distributed with twittering-mode, does not work ;; correctly until calling `url-scheme-get-property'. (url-scheme-get-property "http" 'name) (url-scheme-get-property "https" 'name)) (defcase test-version nil nil (test-assert-string-match "^twittering-mode-v\\([0-9]+\\(\\.[0-9]+\\)*\\|HEAD\\)" (twittering-mode-version))) (defcase test-assocref nil nil (test-assert-eq 'bar (assocref 'foo '((baz . qux) (foo . bar)))) (test-assert-eq nil (assocref 'quxx '((baz . qux) (foo . bar))))) (defmacro test-setup-proxy(bindings) `(let ,(append '((process-environment nil) (twittering-proxy-use t) (twittering-proxy-server nil) (twittering-proxy-port nil) (twittering-http-proxy-server nil) (twittering-http-proxy-port nil) (twittering-https-proxy-server nil) (twittering-https-proxy-port nil)) bindings) (twittering-setup-proxy))) (defcase test-proxy nil nil (test-assert-ok (test-setup-proxy ((twittering-proxy-server "proxy.example.com") (twittering-proxy-port 8080)))) (test-assert-ok (test-setup-proxy ((twittering-proxy-server "proxy.example.com") (twittering-proxy-port "8080")))) (test-assert-ok (test-setup-proxy ((twittering-http-proxy-server "proxy.example.com") (twittering-http-proxy-port 8080)))) (test-assert-ok (test-setup-proxy ((twittering-http-proxy-server "proxy.example.com") (twittering-http-proxy-port "8080")))) (test-assert-ok (test-setup-proxy ((twittering-https-proxy-server "proxy.example.com") (twittering-https-proxy-port 8080)))) (test-assert-ok (test-setup-proxy ((twittering-https-proxy-server "proxy.example.com") (twittering-https-proxy-port "8080")))) (test-assert-equal (let ((twittering-proxy-use nil) (process-environment nil) (twittering-https-proxy-server "proxy.example.com") (twittering-https-proxy-port 8080)) (twittering-toggle-proxy) (list twittering-proxy-use (progn (twittering-toggle-proxy) twittering-proxy-use))) '(t nil)) ;; The test of configuration via an environment variable should be ;; performed last because it changes global variables of the url library ;; in an irreversible manner. (test-assert-ok (test-setup-proxy ((process-environment '("http_proxy=http://proxy1.example.com:8080/")))))) (defcase test-user-agent nil nil (test-assert-string-equal (format "Emacs/%d.%d Twittering-mode/%s" emacs-major-version emacs-minor-version twittering-mode-version) (twittering-user-agent)) (setq twittering-user-agent-function (lambda () "foo user agent")) (test-assert-string-equal "foo user agent" (twittering-user-agent)) ) (defcase test-icon-mode nil nil (setq twittering-icon-mode nil) (twittering-icon-mode) (test-assert-ok twittering-icon-mode) (twittering-icon-mode) (test-assert-ok (not twittering-icon-mode)) (twittering-icon-mode nil) (test-assert-ok twittering-icon-mode) (twittering-icon-mode t) (test-assert-ok twittering-icon-mode) (twittering-icon-mode -1) (test-assert-ok (not twittering-icon-mode)) (twittering-icon-mode 1) (test-assert-ok twittering-icon-mode) ) (defcase test-percent-encode nil nil (test-assert-string-equal "Rinko" (twittering-percent-encode "Rinko")) (test-assert-string-equal "%25" (twittering-percent-encode "%")) (test-assert-string-equal "love%20plus" (twittering-percent-encode "love plus")) (test-assert-string-equal "%0A" (twittering-percent-encode "\n"))) (with-network (when (require 'url nil t) (defcase tinyurl nil nil (test-assert-string-equal "http://tinyurl.com/3xsrg5" (twittering-tinyurl-get "http://example.com/example")) ))) (defcase case-string nil nil (test-assert-string-equal "Kobayakawa" (case-string "Rinko" (("Rinko") "Kobayakawa") (t "unknown"))) (test-assert-string-equal "unknown" (case-string "Manaka" (("Rinko") "Kobayakawa") (t "unknown"))) (test-assert-string-equal "Kobayakawa" (case-string "Rinko" (("Manaka") "Takane") (("Rinko") "Kobayakawa") (("Nene") "Anegasaki") (t nil))) (test-assert-string-equal "Amphibian" (case-string "Frog" (("Rabbit") "Mammal") (("Salamandar" "Frog") "Amphibian") (t nil))) ) (defcase format-string nil nil (test-assert-string-equal "" (twittering-format-string "" "" nil)) (test-assert-string-equal "Hello world" (twittering-format-string "Hello world" "" nil)) (test-assert-string-equal "RT: twittering-mode now (via @twmode)" (twittering-format-string "RT: %t (via @%s)" "%" '(("t" . "twittering-mode now") ("s" . "twmode")))) (test-assert-string-equal "RT: %t (via @twmode)" (twittering-format-string "RT: %t (via @%s)" "%" '(("t" . "%t") ("s" . "twmode")))) (test-assert-string-equal "new\nline" (twittering-format-string "new~%line" "~" '(("%" . "\n")))) ) (defun test-restore-timeline-spec(spec-str spec normalized-spec) (let ((spec-from-str (twittering-string-to-timeline-spec spec-str))) (list (equal (twittering-string-to-timeline-spec (twittering-timeline-spec-to-string spec)) normalized-spec) (equal normalized-spec spec-from-str)))) (defun test-exclude-if-function (status) (string-match "test" (cdr (assq 'text status)))) (defcase timeline-spec nil nil (test-assert-equal (test-restore-timeline-spec "(user+(user/mylist+(@))+:exclude-re/WORD/(USER2+:mentions))" '(merge (user "user") (merge (list "user" "mylist") (merge (replies))) (exclude-re "WORD" (merge (user "USER2") (mentions)))) '(merge (user "user") (list "user" "mylist") (replies) (exclude-re "WORD" (merge (user "USER2") (mentions))))) '(t t)) (test-assert-equal (test-restore-timeline-spec "(user-A+~+((user-B))+(:exclude-re/R+/user-C+(:exclude-re/R3\\//USER-D+:public)))" '(merge (user "user-A") (home) (merge (user "user-B") (exclude-re "R+" (user "user-C"))) (exclude-re "R3/" (user "USER-D")) (public)) '(merge (user "user-A") (home) (user "user-B") (exclude-re "R+" (user "user-C")) (exclude-re "R3/" (user "USER-D")) (public))) '(t t)) ;; Duplicates in a merge timeline are removed. (test-assert-equal (test-restore-timeline-spec "(ABC+user/mylist+user/mylist+ABC)" '(merge (user "ABC") (list "user" "mylist")) '(merge (user "ABC") (list "user" "mylist"))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":search/ABC/" '(search "ABC") '(search "ABC")) '(t t)) (test-assert-equal (test-restore-timeline-spec ":search/AB\\\\C\\/aaa\\\\/" '(search "AB\\C/aaa\\") '(search "AB\\C/aaa\\")) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-if/test-exclude-if-function/:home" '(exclude-if test-exclude-if-function (home)) '(exclude-if test-exclude-if-function (home))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-if/(lambda (x) t)/:home" '(exclude-if (lambda (x) t) (home)) '(exclude-if (lambda (x) t) (home))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-if/(lambda (tweet) (string-match \"test\\\\.\" (cdr (assq 'text tweet))))/@" '(exclude-if (lambda (tweet) (string-match "test\\." (cdr (assq 'text tweet)))) (replies)) '(exclude-if (lambda (tweet) (string-match "test\\." (cdr (assq 'text tweet)))) (replies))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-if/(lambda (tweet) (string-match \"\\\\\\\\\" (cdr (assq 'text tweet))))/:exclude-if/(lambda (tw) (assq 'retweeting-id tw))/user/mylist" '(exclude-if (lambda (tweet) (string-match "\\\\" (cdr (assq 'text tweet)))) (exclude-if (lambda (tw) (assq 'retweeting-id tw)) (list "user" "mylist"))) '(exclude-if (lambda (tweet) (string-match "\\\\" (cdr (assq 'text tweet)))) (exclude-if (lambda (tw) (assq 'retweeting-id tw)) (list "user" "mylist")))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-re/ABC/user" '(exclude-re "ABC" (user "user")) '(exclude-re "ABC" (user "user"))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-re/ABC/user/mylist" '(exclude-re "ABC" (list "user" "mylist")) '(exclude-re "ABC" (list "user" "mylist"))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-re/ABC\\\\/user/mylist" '(exclude-re "ABC\\\\" (list "user" "mylist")) '(exclude-re "ABC\\\\" (list "user" "mylist"))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":exclude-re/ABC\\/\\(word\\|123\\)/user" '(exclude-re "ABC/\\(word\\|123\\)" (user "user")) '(exclude-re "ABC/\\(word\\|123\\)" (user "user"))) '(t t)) (test-assert-equal (test-restore-timeline-spec ":retweeted_by_me" '(retweeted_by_me) '(retweeted_by_me)) '(t t)) (test-assert-equal (test-restore-timeline-spec ":retweeted_to_me" '(retweeted_to_me) '(retweeted_to_me)) '(t t)) (test-assert-equal (test-restore-timeline-spec ":retweets_of_me" '(retweets_of_me) '(retweets_of_me)) '(t t)) (test-assert-equal (test-restore-timeline-spec ":favorites" '(favorites) '(favorites)) '(t t)) (test-assert-equal (test-restore-timeline-spec ":favorites/USER" '(favorites "USER") '(favorites "USER")) '(t t)) (test-assert-equal (test-restore-timeline-spec "#tag" '(search "#tag") '(search "#tag")) '(t t)) (test-assert-equal (test-restore-timeline-spec ;; "リスト" consists of U+256A, U+2539 and U+2548. ;; They should be supported by raw Emacs21. "USER/non-ASCIIリスト" '(list "USER" "non-ASCIIリスト") '(list "USER" "non-ASCIIリスト")) '(t t)) (test-assert-equal (test-restore-timeline-spec ;; An example from ;; https://dev.twitter.com/docs/api/1/get/statuses/home_timeline , ;; which is posted by cindy li. ":single/18700887835" '(single "18700887835") '(single "18700887835")) '(t t)) ) (defcase timeline-spec-dependence nil nil ;; Duplicates in a merge timeline are removed. (test-assert-equal (let ((spec (twittering-string-to-timeline-spec "(:home+@+(@+:home))"))) (twittering-get-primary-base-timeline-specs spec)) '((home) (replies))) (test-assert-equal (let ((spec (twittering-string-to-timeline-spec "(:home+@+:exclude-if/(lambda (x) t)/(@+:home+USER))"))) (twittering-get-primary-base-timeline-specs spec)) '((home) (replies) (user "USER"))) ) (defun format-status (status format-str) (twittering-update-status-format format-str) (twittering-format-status status)) (lexical-let ((status (car (get-fixture 'timeline-data)))) (defcase test-format-status nil nil (test-assert-string-equal "hello world" (format-status status "hello world")) (test-assert-string-equal "%" (format-status status "%%")) (test-assert-string-equal "something like emacs" (format-status status "something like %s")) (test-assert-string-equal "We love emacs!" (format-status status "We love %S!")) (test-assert-string-equal "" (let ((twittering-icon-mode nil)) (format-status status "%i"))) (test-assert-string-equal " " (let ((twittering-icon-mode t) (window-system t)) (format-status status "%i"))) (test-assert-string-equal "Emacs is the extensible self-documenting text editor." (format-status status "%d")) (test-assert-string-equal "GNU project" (format-status status "%l")) (test-assert-string-equal " [GNU project]" (format-status status "%L")) (setcdr (assoc 'user-location status) "") (test-assert-string-equal "" (format-status status "%l")) (test-assert-string-equal "" (format-status status "%L")) (setcdr (assoc 'in-reply-to-screen-name status) "hoge") (setcdr (assoc 'in-reply-to-status-id status) "123456") (test-assert-string-equal " in reply to hoge" (format-status status "%r")) (setcdr (assoc 'in-reply-to-screen-name status) "foo") (setcdr (assoc 'in-reply-to-status-id status) "") (test-assert-string-equal "" (format-status status "%r")) (setcdr (assoc 'in-reply-to-screen-name status) "") (setcdr (assoc 'in-reply-to-status-id status) "654321") (test-assert-string-equal "" (format-status status "%r")) (setcdr (assoc 'in-reply-to-screen-name status) "") (setcdr (assoc 'in-reply-to-status-id status) "") (test-assert-string-equal "" (format-status status "%r")) (test-assert-string-equal "http://www.gnu.org/software/emacs/" (format-status status "%u")) (test-assert-string-equal "9492852" (format-status status "%j")) (test-assert-string-equal "" (format-status status "%p")) (setcdr (assoc 'user-protected status) t) (test-assert-string-equal "[x]" (format-status status "%p")) (setcdr (assoc 'user-protected status) nil) (test-assert-string-equal "" (format-status status "%p")) (test-assert-string-equal "created at Wed Dec 09 00:44:57 +0000 2009" (let ((tz (current-time-zone))) (set-time-zone-rule t) (prog1 (format-status status "created at %c") (set-time-zone-rule (cddr tz))))) (test-assert-string-equal "created at 2009/12/09 09:44:57" (let ((tz (current-time-zone))) (set-time-zone-rule "JST-9") (prog1 (format-status status "created at %C{%Y/%m/%d %H:%M:%S}") (set-time-zone-rule (cddr tz))))) ;; (test-assert-string-equal "09:44 åˆå‰ 12月 09, 2009" ;; (format-status status "%@")) (test-assert-string-equal "Help protect and support Free Software and the GNU Project by joining the Free Software Foundation! http://www.fsf.org/join?referrer=7019" (format-status status "%T")) (setcdr (assoc 'truncated status) nil) (test-assert-string-equal "" (format-status status "%'")) (setcdr (assoc 'truncated status) t) (test-assert-string-equal "..." (format-status status "%'")) (setcdr (assoc 'truncated status) nil) (test-assert-string-equal "web" (format-status status "%f")) (test-assert-string-equal "6480639448" (format-status status "%#")) (test-assert-string-equal " emacs, : Help protect and support Free Software and the GNU Project by joining the Free Software Foundation! http://www.fsf.org/join?referrer=7019 // from web" (let ((twittering-icon-mode nil)) (format-status status "%i %s, :\n %T // from %f%L%r"))) (test-assert-string-equal " emacs, : Help protect and support Free Software and the GNU Project by joining the Free Software Foundation! http://www.fsf.org/join?referrer=7019 // from web" (let ((twittering-icon-mode t) (window-system t)) (format-status status "%i %s, :\n %T // from %f%L%r"))) (test-assert-string-equal " Help protect and support Free Software and the GNU Project by joining the Free Software Foundation! http://www.fsf.org/join?referrer=7019 // from web" (let ((twittering-fill-column 80)) (format-status status "\n%FILL[ ]{%T // from %f%L%r}"))) (test-assert-string-equal " Help protect and support Free Software and the GNU Project by joining the Free Software Foundation! http://www.fsf.org/join?referrer=7019 // from web" (let ((twittering-fill-column 80)) (format-status status "\n%FOLD[ ]{%T // from %f%L%r}"))) (test-assert-string-equal " Edit XHTML5 documents in nxml-mode with on-the-fly validation: http://bit.ly/lYnEg (by @hober) // from web" (let ((twittering-fill-column 80) (oldest-status (car (last (get-fixture 'timeline-data))))) (format-status oldest-status "\n%FILL[ ]{%T // from %f%L%r}"))) (test-assert-string-equal (if (> 22 emacs-major-version) ;; `fill-region' on Emacs21 does not keep white spaces and ;; tabs adjacent to hard newlines. " --Edit XHTML5 documents in nxml-mode with on-the-fly validation: --http://bit.ly/lYnEg -- -- (by @hober) // from web" " --Edit XHTML5 documents in nxml-mode with on-the-fly validation: --http://bit.ly/lYnEg -- -- (by @hober) // from web") (let ((twittering-fill-column 80) (oldest-status (car (last (get-fixture 'timeline-data))))) (format-status oldest-status "\n%FOLD[--]{%T // from %f%L%r}"))) )) (defcase test-find-curl-program nil nil (test-assert-string-match "curl" (twittering-find-curl-program)) (with-temp-buffer (when (twittering-find-curl-program) (test-assert-eq 0 (call-process (twittering-find-curl-program) nil (current-buffer) nil "--help"))))) (with-network (defcase test-ensure-ca-cert nil nil (when (twittering-find-curl-program) (test-assert-eq 0 (with-temp-buffer (call-process (twittering-find-curl-program) nil (current-buffer) nil "--cacert" (twittering-ensure-ca-cert) "https://twitter.com/")))))) (defcase test-status-not-blank-p nil nil (test-assert-ok (not (twittering-status-not-blank-p ""))) (test-assert-ok (not (twittering-status-not-blank-p "\n"))) (test-assert-ok (not (twittering-status-not-blank-p "@foo"))) (test-assert-ok (not (twittering-status-not-blank-p "@bar "))) (test-assert-ok (twittering-status-not-blank-p "hello")) (test-assert-ok (twittering-status-not-blank-p "@baz hello")) (test-assert-ok (twittering-status-not-blank-p "@baz\n\nhello")) (test-assert-ok (twittering-status-not-blank-p "\nhello")) (test-assert-ok (twittering-status-not-blank-p "hello\n")) (test-assert-ok (twittering-status-not-blank-p "@foo hello @bar")) (test-assert-ok (twittering-status-not-blank-p "hello @foo")) ) (defcase test-hmac-sha1 nil nil ;; The following tests are copied from RFC 2202. (test-assert-string-equal (let* ((v (make-list 20 ?\x0b)) (key (cond ((fboundp 'unibyte-string) (apply 'unibyte-string v)) (t (concat v)))) (data "Hi There")) (mapconcat (lambda (c) (format "%02x" c)) (twittering-hmac-sha1 key data) "")) "b617318655057264e28bc0b6fb378c8ef146be00") (test-assert-string-equal (let* ((key "Jefe") (data "what do ya want for nothing?")) (mapconcat (lambda (c) (format "%02x" c)) (twittering-hmac-sha1 key data) "")) "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79") (test-assert-string-equal (let* ((key-v (make-list 20 ?\xaa)) (key (cond ((fboundp 'unibyte-string) (apply 'unibyte-string key-v)) (t (concat key-v)))) (data-v (make-list 50 ?\xdd)) (data (cond ((fboundp 'unibyte-string) (apply 'unibyte-string data-v)) (t (concat data-v))))) (mapconcat (lambda (c) (format "%02x" c)) (twittering-hmac-sha1 key data) "")) "125d7342b9ac11cd91a39af48aa17b4f63f175d3") ) (defun verify-hmac-of-long-data(coding-system) (or (not (coding-system-p coding-system)) (let ((coding-system-for-read coding-system) (coding-system-for-write coding-system)) (let* ((key "key") (data (make-string 64 ?a)) (result (mapcar (lambda (pair) (let ((n (car pair)) (expected (cdr pair))) (string= (mapconcat (lambda (c) (format "%02x" c)) (twittering-hmac-sha1 key (make-string n ?a)) "") expected))) '((64 . "804f18b0143cc2677eeda7b5f60f6984fc32d094") (128 . "2ff5eea1596f3a41fbb5e1ff02b17a50a229c177") (256 . "ce7f0d472740f975b137052e05955b4ca7ec9a58") (512 . "9dce54d150cbf817a8d979bd6a371eaf4643ac40") (1024 . "53e18d494844a645cd8ac0757873460696b0c9df") (2048 . "0fabada271421b303434131195e67c006d3fc3d7") (4095 . "ef35e91ef97d811cfecfe83071045c31de4e4e61") (8193 . "cefba76fb9ad5a665887a875ed7bc42ec9f00919") (16383 . "c6ba93118262ab9426760909fa4981558bdc10e5") (32767 . "442813d73d237fb45fca6c05360c43db877744f6"))))) (if (equal result '(t t t t t t t t t t)) t result))))) (defcase test-hmac-sha1-long nil nil (test-assert-eq (verify-hmac-of-long-data 'iso-safe) t) (test-assert-eq (verify-hmac-of-long-data 'iso-safe-unix) t) (test-assert-eq (verify-hmac-of-long-data 'iso-safe-dos) t) (test-assert-eq (verify-hmac-of-long-data 'iso-safe-mac) t) (test-assert-eq (verify-hmac-of-long-data 'utf-8) t) (test-assert-eq (verify-hmac-of-long-data 'utf-8-unix) t) (test-assert-eq (verify-hmac-of-long-data 'utf-8-dos) t) (test-assert-eq (verify-hmac-of-long-data 'utf-8-mac) t) (test-assert-eq (verify-hmac-of-long-data 'utf-16) t) (test-assert-eq (verify-hmac-of-long-data 'utf-16-unix) t) (test-assert-eq (verify-hmac-of-long-data 'utf-16-dos) t) (test-assert-eq (verify-hmac-of-long-data 'utf-16-mac) t) (test-assert-eq (verify-hmac-of-long-data 'iso-latin-1) t) (test-assert-eq (verify-hmac-of-long-data 'iso-latin-1-unix) t) (test-assert-eq (verify-hmac-of-long-data 'iso-latin-1-dos) t) (test-assert-eq (verify-hmac-of-long-data 'iso-latin-1-mac) t) ) (defun verify-hmac-with-short-internal-length (coding-system) (or (not (coding-system-p coding-system)) (not (boundp 'sha1-maximum-internal-length)) (let* ((coding-system-for-read coding-system) (coding-system-for-write coding-system) (max-internal-length-list '(1 10 50 100 500 1000)) (result (mapcar (lambda (n) (let ((sha1-maximum-internal-length n) (key "Jefe") (data "what do ya want for nothing?") (expected "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79")) (string= (mapconcat (lambda (c) (format "%02x" c)) (twittering-hmac-sha1 key data) "") expected))) max-internal-length-list))) (if (equal result (make-list (length max-internal-length-list) t)) t result)))) (defcase test-hmac-sha1-with-short-internal-length nil nil (test-assert-eq (verify-hmac-with-short-internal-length 'iso-safe) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-safe) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-safe-unix) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-safe-dos) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-safe-mac) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-8) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-8-unix) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-8-dos) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-8-mac) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-16) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-16-unix) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-16-dos) t) (test-assert-eq (verify-hmac-with-short-internal-length 'utf-16-mac) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-latin-1) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-latin-1-unix) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-latin-1-dos) t) (test-assert-eq (verify-hmac-with-short-internal-length 'iso-latin-1-mac) t) ) (defcase test-oauth nil nil ;; "Authenticating Requests | dev.twitter.com" ;; http://dev.twitter.com/pages/auth (setq sample-consumer-key "GDdmIQH6jhtmLUypg82g") (setq sample-consumer-secret "MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98") ;; Acquiring a request token ;; http://dev.twitter.com/pages/auth#request-token (test-assert-string-equal (let* ((oauth-params `(("oauth_nonce" . "QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk") ("oauth_callback" . ,(twittering-oauth-url-encode "http://localhost:3005/the_dance/process_callback?service_provider_id=11")) ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . "1272323042") ("oauth_consumer_key" . ,sample-consumer-key) ("oauth_version" . "1.0"))) (url "https://api.twitter.com/oauth/request_token")) (twittering-oauth-auth-str-request-token url nil sample-consumer-key sample-consumer-secret oauth-params)) "OAuth oauth_nonce=\"QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk\",oauth_callback=\"http%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1272323042\",oauth_consumer_key=\"GDdmIQH6jhtmLUypg82g\",oauth_version=\"1.0\",oauth_signature=\"8wUi7m5HFQy76nowoCThusfgB%2BQ%3D\"") ;; response (test-assert-equal (let ((response-str "oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_token_secret=x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA&oauth_callback_confirmed=true")) (twittering-oauth-make-response-alist response-str)) '(("oauth_token" . "8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc") ("oauth_token_secret" . "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA") ("oauth_callback_confirmed" . "true"))) ;; Sending the user to authorization ;; http://dev.twitter.com/pages/auth#authorization ;; response (when using callback) (test-assert-equal (let ((response-str "oauth_token=8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc&oauth_verifier=pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY")) (twittering-oauth-make-response-alist response-str)) '(("oauth_token" . "8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc") ("oauth_verifier" . "pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY"))) ;; Exchanging a request token for an access token ;; http://dev.twitter.com/pages/auth#access-token (test-assert-string-equal (let* ((request-token "8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc") (request-token-secret "x6qpRnlEmW9JbQn4PQVVeVG8ZLPEx6A0TOebgwcuA") (verifier "pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY") (oauth-params `(("oauth_nonce" . "9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8") ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . "1272323047") ("oauth_consumer_key" . ,sample-consumer-key) ("oauth_token" . ,request-token) ("oauth_verifier" . ,verifier) ("oauth_version" . "1.0"))) (url "https://api.twitter.com/oauth/access_token")) (twittering-oauth-auth-str-exchange-token url nil sample-consumer-key sample-consumer-secret request-token request-token-secret verifier oauth-params)) "OAuth oauth_nonce=\"9zWH6qe0qG7Lc1telCn7FhUbLyVdjEaL3MO5uHxn8\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1272323047\",oauth_consumer_key=\"GDdmIQH6jhtmLUypg82g\",oauth_token=\"8ldIZyxQeVrFZXFOZH5tAwj6vzJYuLQpl0WUEYtWc\",oauth_verifier=\"pDNg57prOHapMbhv25RNf75lVRd6JDsni1AJJIDYoTY\",oauth_version=\"1.0\",oauth_signature=\"PUw%2FdHA4fnlJYM6RhXk5IU%2F0fCc%3D\"") ;; response (test-assert-equal (let ((response-str "oauth_token=819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw&oauth_token_secret=J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA&user_id=819797&screen_name=episod")) (twittering-oauth-make-response-alist response-str)) '(("oauth_token" . "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw") ("oauth_token_secret" . "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA") ("user_id" . "819797") ("screen_name" . "episod"))) ;; Making a resource request on a user's behalf ;; http://dev.twitter.com/pages/auth#auth-request (test-assert-string-equal (let* ((access-token "819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw") (access-token-secret "J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA") (oauth-params `(("oauth_nonce" . "oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y") ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . "1272325550") ("oauth_consumer_key" . ,sample-consumer-key) ("oauth_token" . ,access-token) ("oauth_version" . "1.0"))) (url "http://api.twitter.com/1/statuses/update.json") (encoded-query-parameters `((,(twittering-percent-encode "status") . ,(twittering-percent-encode "setting up my twitter ç§ã®ã•ãˆãšã‚Šã‚’設定ã™ã‚‹"))))) (twittering-oauth-auth-str-access "POST" url encoded-query-parameters sample-consumer-key sample-consumer-secret access-token access-token-secret oauth-params)) "OAuth oauth_nonce=\"oElnnMTQIZvqvlfXM56aBLAf5noGD0AQR3Fmi7Q6Y\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1272325550\",oauth_consumer_key=\"GDdmIQH6jhtmLUypg82g\",oauth_token=\"819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw\",oauth_version=\"1.0\",oauth_signature=\"yOahq5m0YjDDjfjxHaXEsW9D%2BX0%3D\"") ) (defun find-least-unsupported-code-point (from to) (let ((n from) (c nil)) (while (and (<= n to) (decode-char 'ucs n)) (setq n (1+ n))) (when (<= n to) n))) (defun encode-char-for-json (code-point) ;; According to RFC4627 http://www.ietf.org/rfc/rfc4627 , ;; characters in the Basic Multilingual Plane (U+0000 ;; through U+FFFF) are escaped as ;; "a six-character sequence: a reverse solidus, followed ;; by the lowercase letter u, followed by four hexadecimal ;; digits that encode the character's code point." ;; "To escape an extended character that is not in the Basic ;; Multilingual Plane, the character is represented as a ;; twelve-character sequence, encoding the UTF-16 surrogate ;; pair." (cond ((< code-point #xFFFF) (format "\\u%04X" code-point)) (t ;; a character not in the Basic Multilingual Plane (let* ((c (decode-char 'ucs unsupported-code-point)) (str (encode-coding-char c 'utf-16be))) (apply 'format "\\u%02X%02X\\u%02X%02X" (string-to-list str)))))) (defun test-read-json-with-unsupported-code-point () (let ((unsupported-code-point (or (find-least-unsupported-code-point #x0000 #xD7FF) (find-least-unsupported-code-point #xE000 #x10FFFF)))) (cond ((null unsupported-code-point) t) (t (let* ((str (encode-char-for-json unsupported-code-point)) (quoted-str (concat "\"" str "\"")) (result (with-temp-buffer (insert quoted-str) (goto-char (point-min)) (condition-case err (twittering-json-read) (error nil))))) (if (and result (stringp result) (string= result (string twittering-unicode-replacement-char))) t (format "failed to decode %s!" quoted-str))))))) (when (require 'json nil t) (defcase test-json-read nil nil (test-assert-eq t (test-read-json-with-unsupported-code-point)))) (defun test-read-xml-with-unsupported-code-point () (let ((unsupported-code-point (or (find-least-unsupported-code-point #x0000 #xD7FF) (find-least-unsupported-code-point #xE000 #x10FFFF)))) (cond ((null unsupported-code-point) t) (t (let* ((xml-template ;; example from http://www.w3.org/TR/xhtml1/#strict " test

%s

") (encoded-str (format "&#%d;" unsupported-code-point)) (xml-str (format xml-template encoded-str)) (replacement-str (string twittering-unicode-replacement-char)) (result (with-temp-buffer (insert xml-str) (condition-case err (let* ((xml (twittering-xml-parse-region (point-min) (point-max))) (str (elt (assq 'p (assq 'body (assq 'html xml))) 2))) (if (< emacs-major-version 22) ;; On Emacs 21, `xml-parse-region' does not resolve ;; numeric character references. (twittering-decode-entities-after-parsing-xml str) str)) (error nil)))) (expected-result replacement-str)) (cond ((null result) (format "failed to decode %s with an error" encoded-str)) ((equal result expected-result) t) (t (format "failed to decode %s without errors" encoded-str)))))))) (when (require 'xml nil t) (defcase test-xml-parse nil nil (test-assert-eq t (test-read-xml-with-unsupported-code-point)))) twittering-mode-3.0.0/twittering-mode.el0000644000000000000000000153351012141747407020255 0ustar rootroot00000000000000;;; twittering-mode.el --- Major mode for Twitter ;; Copyright (C) 2007, 2009, 2010 Yuto Hayamizu. ;; 2008 Tsuyoshi CHO ;; Author: Y. Hayamizu ;; Tsuyoshi CHO ;; Alberto Garcia ;; Created: Sep 4, 2007 ;; Version: HEAD ;; Identity: $Id$ ;; Keywords: twitter web ;; URL: http://twmode.sf.net/ ;; This file is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This file 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; twittering-mode.el is a major mode for Twitter. ;; You can check friends timeline, and update your status on Emacs. ;;; Feature Request: ;; URL : http://twitter.com/d00dle/statuses/577876082 ;; * Status Input from Popup buffer and C-cC-c to POST. ;; URL : http://code.nanigac.com/source/view/419 ;; * update status for region ;;; Code: (eval-when-compile (require 'cl)) (require 'xml) (eval-and-compile ;; On byte-compilation, Emacs21 requires loading the libraries ;; distributed with twittering-mode.el for macros defined in them. (when (> 22 emacs-major-version) (setq load-path (append (mapcar (lambda (dir) (expand-file-name dir (if load-file-name (or (file-name-directory load-file-name) ".") "."))) '("url-emacs21" "emacs21")) load-path)))) (when (> 22 emacs-major-version) (and (require 'un-define nil t) ;; the explicitly require 'unicode to update a workaround with ;; navi2ch. see a comment of `twittering-ucs-to-char' for more ;; details. (require 'unicode nil t)) (defadvice url-scheme-register-proxy (around twittering-fix-process-env (scheme) activate) (let ((process-environment (apply 'append (let ((env-var (concat scheme "_proxy"))) (mapcar (lambda (str) (if (string-match (concat "^\\(" (regexp-opt (list (upcase env-var) (downcase env-var))) "\\)=$") str) nil (list str))) process-environment))))) ad-do-it))) (require 'url) (defconst twittering-mode-version "HEAD") (defconst twittering-mode-identity "$Id$") (defvar twittering-api-host "api.twitter.com") (defvar twittering-api-search-host "search.twitter.com") (defvar twittering-web-host "twitter.com") (defvar twittering-oauth-request-token-url-without-scheme "://api.twitter.com/oauth/request_token") (defvar twittering-oauth-authorization-url-base-without-scheme "://api.twitter.com/oauth/authorize?oauth_token=") (defvar twittering-oauth-access-token-url-without-scheme "://api.twitter.com/oauth/access_token") (defun twittering-mode-version () "Display a message for twittering-mode version." (interactive) (let ((version-string (format "twittering-mode-v%s" twittering-mode-version))) (if (interactive-p) (message "%s" version-string) version-string))) (defvar twittering-auth-method 'oauth "*Authentication method for `twittering-mode'. The symbol `basic' means Basic Authentication. The symbol `oauth' means OAuth Authentication. The symbol `xauth' means xAuth Authentication. OAuth Authentication requires `twittering-oauth-consumer-key' and `twittering-oauth-consumer-secret'. Additionally, it requires an external command `curl' or another command included in `tls-program', which may be `openssl' or `gnutls-cli', for SSL.") (defvar twittering-account-authorization nil "State of account authorization for `twittering-username' and `twittering-password'. The value is one of the following symbols: nil -- The account have not been authorized yet. queried -- The authorization has been queried, but not finished yet. authorized -- The account has been authorized.") (defvar twittering-oauth-use-ssl t "*Whether to use SSL on authentication via OAuth. Twitter requires SSL on authorization via OAuth.") (defvar twittering-oauth-invoke-browser nil "*Whether to invoke a browser on authorization of access key automatically.") (defvar twittering-oauth-consumer-key nil) (defvar twittering-oauth-consumer-secret nil) (defvar twittering-oauth-access-token-alist nil) (defconst twittering-max-number-of-tweets-on-retrieval 200 "The maximum number of `twittering-number-of-tweets-on-retrieval'.") (defvar twittering-number-of-tweets-on-retrieval 20 "*The number of tweets which will be retrieved in one request. The upper limit is `twittering-max-number-of-tweets-on-retrieval'.") (defvar twittering-tinyurl-service 'tinyurl "*The service to shorten URI. This must be one of key symbols of `twittering-tinyurl-services-map'. To use 'bit.ly or 'j.mp, you have to configure `twittering-bitly-login' and `twittering-bitly-api-key'.") (defvar twittering-tinyurl-services-map '((bit.ly twittering-make-http-request-for-bitly (lambda (service reply) (if (string-match "\n\\'" reply) (substring reply 0 (match-beginning 0)) reply))) (goo.gl (lambda (service longurl) (twittering-make-http-request-from-uri "POST" '(("Content-Type" . "application/json")) "https://www.googleapis.com/urlshortener/v1/url" (concat "{\"longUrl\": \"" longurl "\"}"))) (lambda (service reply) (when (string-match "\"id\"[[:space:]]*:[[:space:]]*\"\\([^\"]*\\)\"" reply) (match-string 1 reply)))) (is.gd . "http://is.gd/create.php?format=simple&url=") (j.mp twittering-make-http-request-for-bitly (lambda (service reply) (if (string-match "\n\\'" reply) (substring reply 0 (match-beginning 0)) reply))) (migre.me . "http://migre.me/api.txt?url=") (tinyurl . "http://tinyurl.com/api-create.php?url=") (toly (lambda (service longurl) (twittering-make-http-request-from-uri "POST" nil "http://to.ly/api.php" (concat "longurl=" (twittering-percent-encode longurl)))))) "Alist of URL shortening services. The key is a symbol specifying the service. The value is a string or a list consisting of two elements at most. If the value is a string, `(concat THE-FIRST-ELEMENT longurl)' is used as the URL invoking the service. If the value is a list, it is interpreted as follows. The first element specifies how to make a HTTP request for shortening a URL. If the first element is a string, `(concat THE-FIRST-ELEMENT longurl)' is used as the URL invoking the service. If the first element is a function, it is called as `(funcall THE-FIRST-ELEMENT service-symbol longurl)' to obtain a HTTP request alist for invoking the service, which must be generated by `twittering-make-http-request'. The second element specifies how to post-process a HTTP reply by the HTTP request. If the second element is nil, the reply is directly used as a shortened URL. If the second element is a function, it is called as `(funcall THE-SECOND-ELEMENT service-symbol HTTP-reply-string)' and its result is used as a shortened URL.") (defvar twittering-bitly-login nil "*The login name for URL shortening service bit.ly and j.mp.") (defvar twittering-bitly-api-key nil "*The API key for URL shortening service bit.ly and j.mp.") (defvar twittering-mode-map (make-sparse-keymap)) (defvar twittering-mode-menu-on-uri-map (make-sparse-keymap "Twittering Mode")) (defvar twittering-mode-on-uri-map (make-sparse-keymap)) (defvar twittering-tweet-history nil) (defvar twittering-user-history nil) (defvar twittering-timeline-history nil) (defvar twittering-hashtag-history nil) (defvar twittering-search-history nil) (defvar twittering-current-hashtag nil "A hash tag string currently set. You can set it by calling `twittering-set-current-hashtag'.") (defvar twittering-timer nil "Timer object for timeline refreshing will be stored here. DO NOT SET VALUE MANUALLY.") (defvar twittering-timer-interval 90 "The interval of auto reloading. You should use 60 or more seconds for this variable because the number of API call is limited by the hour.") (defvar twittering-timer-for-redisplaying nil "Timer object for timeline redisplay statuses will be stored here. DO NOT SET VALUE MANUALLY.") (defvar twittering-timer-interval-for-redisplaying 5.0 "The interval of auto redisplaying statuses. Each time Emacs remains idle for the interval, twittering-mode updates parts requiring to be redrawn.") (defvar twittering-username nil "*An username of your Twitter account.") (defvar twittering-password nil "*A password of your Twitter account. Leave it blank is the recommended way because writing a password in .emacs file is so dangerous.") (defvar twittering-initial-timeline-spec-string ":home" "*An initial timeline spec string or a list of timeline spec strings. This specifies one or more initial timeline spec strings, which are automatically visited when invoking `twittering-mode' or `twit'. If it is a string, it specifies a timeline spec string. If it is a list of strings, it specifies multiple timeline spec strings.") (defvar twittering-timeline-spec nil "The timeline spec for the current buffer.") (defvar twittering-timeline-spec-string "" "The timeline spec string for the current buffer.") (defvar twittering-timeline-spec-alias nil "*Alist for aliases of timeline spec. Each element is (NAME . SPEC-STRING), where NAME is a string and SPEC-STRING is a string or a function that returns a timeline spec string. The alias can be referred as \"$NAME\" or \"$NAME(ARG)\" in timeline spec string. If SPEC-STRING is a string, ARG is simply ignored. If SPEC-STRING is a function, it is called with a string argument. For the style \"$NAME\", the function is called with nil. For the style \"$NAME(ARG)\", the function is called with a string ARG. For example, if you specify `((\"FRIENDS\" . \"my-account/friends-list\") (\"related-to\" . ,(lambda (username) (if username (format \":search/to:%s OR from:%s OR @%s/\" username username username) \":home\")))), then you can use \"$FRIENDS\" and \"$related-to(USER)\" as \"my-account/friends-list\" and \":search/to:USER OR from:USER OR @USER/\", respectively.") (defvar twittering-current-timeline-spec-string nil "The current timeline spec string. This variable should not be referred directly. Use `twittering-current-timeline-spec-string' or `twittering-current-timeline-spec'.") (defvar twittering-list-index-retrieved nil) (defvar twittering-process-info-alist nil "Alist of active process and timeline spec retrieved by the process.") (defvar twittering-server-info-alist nil "Alist of server information.") (defvar twittering-api-limit-info-alist '() "Alist of an API identifier and an alist representing rate limit for the API.") (defvar twittering-timeline-spec-to-api-table '() "Alist of a timeline spec and an API identifier for retrieving the timeline.") (defvar twittering-mode-init-hook nil "*Hook run after initializing global variables for `twittering-mode'.") (defvar twittering-mode-hook nil "*Hook run every time a buffer is initialized as a twittering-mode buffer.") (defvar twittering-cookie-alist nil "Alist for stroing cookies for each account. This variable stores an alist. A key of the alist is a string that is a screen name of an account. A value of the alist is a cookie alist which corresponds to a list of a pair of a cookie name and value.") (defvar twittering-new-tweets-count 0 "Number of new tweets when `twittering-new-tweets-hook' is run.") (defvar twittering-new-tweets-spec nil "Timeline spec, which new tweets belong to, when `twittering-new-tweets-hook' is run.") (defvar twittering-new-tweets-statuses nil "New tweet status messages, when `twittering-new-tweets-hook' is run.") (defvar twittering-new-tweets-hook nil "*Hook run when new tweets are received. You can read `twittering-new-tweets-count' or `twittering-new-tweets-spec' to get the number of new tweets received when this hook is run.") (defvar twittering-rendered-new-tweets-spec nil "A timeline spec of newly rendered tweets. This variable is bound when invoking hooks registered with `twittering-new-tweets-rendered-hook'.") (defvar twittering-rendered-new-tweets-spec-string nil "A timeline spec string of newly rendered tweets. This variable is bound when invoking hooks registered with `twittering-new-tweets-rendered-hook'.") (defvar twittering-rendered-new-tweets nil "A list of newly rendered tweets. Hooks registered with `twittering-new-tweets-rendered-hook' can use this variable as a list of rendered tweets. Each tweet is represented as an alist. You can refer to a property of a tweet alist as (cdr (assq PROPERTY-SYMBOL TWEET-ALIST)). Valid symbols are following; id, text, user-name, user-screen-name, user-id, source, source-uri. In the list, tweets are placed in order of time. The car of the list is the latest one, and the last is the oldest one.") (defvar twittering-new-tweets-rendered-hook nil "*Hook run when new tweets are rendered. When the registered functions are called, the current buffer is the buffer that the new tweets are just rendered on. The functions can refer to the timeline spec and timeline spec string as `twittering-rendered-new-tweets-spec' and `twittering-rendered-new-tweets-spec-string', repectively. Hooks can also use the local variable `twittering-rendered-new-tweets' as a list of rendered tweets. For the detail of the representation of tweets, see the variable `twittering-rendered-new-tweets'.") (defvar twittering-active-mode nil "Non-nil if new statuses should be retrieved periodically. Do not modify this variable directly. Use `twittering-activate-buffer', `twittering-deactivate-buffer', `twittering-toggle-activate-buffer' or `twittering-set-active-flag-for-buffer'.") (defvar twittering-jojo-mode nil) (defvar twittering-reverse-mode nil "*Non-nil means tweets are aligned in reverse order of `http://twitter.com/'.") (defvar twittering-display-remaining nil "*If non-nil, display remaining of rate limit on the mode-line.") (defvar twittering-display-connection-method t "*If non-nil, display the current connection method on the mode-line.") (defvar twittering-status-format "%i %s, %@:\n%FILL[ ]{%T // from %f%L%r%R}\n " "Format string for rendering statuses. Ex. \"%i %s, %@:\\n%FILL{ %T // from %f%L%r%R}\n \" Items: %s - screen_name %S - name %i - profile_image %d - description %l - location %L - \" [location]\" %r - \" sent to user\" (use on direct_messages{,_sent}) %r - \" in reply to user\" (use on other standard timeline) %R - \" (retweeted by user)\" %RT{...} - strings rendered only when the tweet is a retweet. The braced strings are rendered with the information of the retweet itself instead of that of the retweeted original tweet. For example, %s for a retweet means who posted the original tweet, but %RT{%s} means who retweeted it. %u - url %j - user.id %p - protected? %c - created_at (raw UTC string) %C{time-format-str} - created_at (formatted with time-format-str) %@ - X seconds ago %T - raw text %t - text filled as one paragraph %' - truncated %FACE[face-name]{...} - strings decorated with the specified face. %FILL[prefix]{...} - strings filled as a paragraph. The prefix is optional. You can use any other specifiers in braces. %FOLD[prefix]{...} - strings folded within the frame width. The prefix is optional. This keeps newlines and does not squeeze a series of white spaces. You can use any other specifiers in braces. %f - source %# - id ") (defvar twittering-retweet-format '(nil _ " RT: %t (via @%s)") "*A format string or a skeleton for retweet. If the value is a string, it means a format string for generating an initial string of a retweet. The format string is converted with the below replacement table. And then, the cursor is placed on the next of the initial string. It is equivalent to the skeleton '(nil STRING _). Note that this string is inserted before the edit skeleton specified by `twittering-edit-skeleton' is performed. If the value is a list, it is treated as a skeleton used with `skeleton-insert'. The strings included in the list are converted with the following replacement table. And then, the list with converted strings is inserted by `skeleton-insert'. Note that this skeleton is performed before the edit skeleton specified by `twittering-edit-skeleton' is performed. Replacement table: %s - The screen-name of the cited tweet. %t - The text of the cited tweet. %u - The URL of the cited tweet. %# - The ID of the cited tweet. %% - % itself.") (defvar twittering-fill-column nil "*The fill-column used for \"%FILL{...}\" in `twittering-status-format'. If nil, the fill-column is automatically calculated.") (defvar twittering-show-replied-tweets t "*The number of replied tweets which will be showed in one tweet. If the value is not a number and is non-nil, show all replied tweets which is already fetched. If the value is nil, doesn't show replied tweets.") (defvar twittering-default-show-replied-tweets nil "*The number of default replied tweets which will be showed in one tweet. This value will be used only when showing new tweets. See `twittering-show-replied-tweets' for more details.") (defvar twittering-disable-overlay-on-too-long-string nil "*If non-nil, disable overlay on too long string on edit buffer. If nil, `twittering-edit-mode' puts an overlay `twittering-warning-overlay' on characters following the 140th character. On some environments, some input methods seem to interfere the update of the overlay. In such case, you may avoid the problems by setting this variable to non-nil.") (defvar twittering-use-show-minibuffer-length t "*Show current length of minibuffer if this variable is non-nil. We suggest that you should set to nil to disable the showing function when it conflict with your input method (such as AquaSKK, etc.)") (defvar twittering-notify-successful-http-get t) (defvar twittering-use-ssl t "Use SSL connection if this variable is non-nil. SSL connections use 'curl' command as a backend.") (defvar twittering-allow-insecure-server-cert nil "*If non-nil, twittering-mode allows insecure server certificates.") (defvar twittering-curl-program nil "Cache a result of `twittering-find-curl-program'. DO NOT SET VALUE MANUALLY.") (defvar twittering-curl-program-https-capability nil "Cache a result of `twittering-start-http-session-curl-https-p'. DO NOT SET VALUE MANUALLY.") (defvar twittering-wget-program nil "Cache a result of `twittering-find-wget-program'. DO NOT SET VALUE MANUALLY.") (defvar twittering-tls-program nil "*List of strings containing commands to start TLS stream to a host. Each entry in the list is tried until a connection is successful. %h is replaced with server hostname, %p with port to connect to. Also see `tls-program'. If nil, this is initialized with a list of valied entries extracted from `tls-program'.") (defvar twittering-connection-type-order '(curl wget urllib-http native urllib-https)) "*A list of connection methods in the preferred order." (defvar twittering-connection-type-table '((native (check . t) (https . twittering-start-http-session-native-tls-p) (send-http-request . twittering-send-http-request-native) (pre-process-buffer . twittering-pre-process-buffer-native)) (curl (check . twittering-start-http-session-curl-p) (https . twittering-start-http-session-curl-https-p) (send-http-request . twittering-send-http-request-curl) (pre-process-buffer . twittering-pre-process-buffer-curl)) (wget (check . twittering-start-http-session-wget-p) (https . t) (send-http-request . twittering-send-http-request-wget) (pre-process-buffer . twittering-pre-process-buffer-wget)) (urllib-http (display-name . "urllib") (check . twittering-start-http-session-urllib-p) (https . nil) (send-http-request . twittering-send-http-request-urllib) (pre-process-buffer . twittering-pre-process-buffer-urllib)) (urllib-https (display-name . "urllib") (check . twittering-start-http-session-urllib-p) (https . twittering-start-http-session-urllib-https-p) (send-http-request . twittering-send-http-request-urllib) (pre-process-buffer . twittering-pre-process-buffer-urllib))) "A list of alist of connection methods.") (defvar twittering-format-status-function-source "" "The status format string that has generated the current `twittering-format-status-function'.") (defvar twittering-format-status-function nil "The formating function generated from `twittering-format-status-function-source'.") (defvar twittering-format-status-function-without-compile nil "The formating function generated from `twittering-format-status-function-source', which is a lambda expression without being compiled.") (defvar twittering-timeline-data-table (make-hash-table :test 'equal)) (defvar twittering-username-face 'twittering-username-face) (defvar twittering-uri-face 'twittering-uri-face) (defvar twittering-use-native-retweet nil "Post retweets using native retweets if this variable is non-nil.") (defvar twittering-update-status-function 'twittering-update-status-from-pop-up-buffer "The function used to posting a tweet. It takes 5 arguments, INIT-STR, REPLY-TO-ID, USERNAME, TWEET-TYPE, CURRENT-SPEC. The first argument INIT-STR is nil or an initial text to be edited. REPLY-TO-ID and USERNAME are an ID and a user-screen-name of a tweet to which you are going to reply. If the tweet is not a reply, they are nil. TWEET-TYPE is a symbol specifying a type of a tweet being edited. It must be one of 'direct-message, 'normal, 'organic-retweet and 'reply. CURRENT-SPEC means on which timeline the function is called. Twittering-mode provides two functions for updating status: * `twittering-update-status-from-minibuffer': edit tweets in minibuffer * `twittering-update-status-from-pop-up-buffer': edit tweets in pop-up buffer") (defvar twittering-request-confirmation-on-posting nil "*If *non-nil*, confirmation will be requested on posting a tweet edited in pop-up buffer.") (defvar twittering-use-master-password nil "*Wheter to store private information encrypted with a master password.") (defvar twittering-private-info-file (expand-file-name "~/.twittering-mode.gpg") "*File for storing encrypted private information when `twittering-use-master-password' is non-nil.") (defvar twittering-private-info-file-loaded nil "Whether the private info file has been loaded or not.") (defvar twittering-variables-stored-with-encryption '(twittering-oauth-access-token-alist)) (defvar twittering-api-prefix "1/") (defvar twittering-search-api-method "search") (defvar twittering-web-path-prefix "") (defvar twittering-service-method 'twitter-api-v1.1 "*Service method for `twittering-mode'. The symbol `twitter' means Twitter Service. The symbol `statusnet' means StatusNet Service.") (defvar twittering-service-method-table '((twitter (status-url . twittering-get-status-url-twitter) (search-url . twittering-get-search-url-twitter)) (twitter-api-v1.1 (status-url . twittering-get-status-url-twitter) (search-url . twittering-get-search-url-twitter)) (statusnet (status-url . twittering-get-status-url-statusnet) (search-url . twittering-get-search-url-statusnet))) "A list of alist of service methods.") (defvar twittering-timeline-header-face 'twittering-timeline-header-face "*Face for the header on `twittering-mode'. The face is used for rendering `twittering-timeline-header'.") (defvar twittering-timeline-footer-face 'twittering-timeline-footer-face "*Face for the footer on `twittering-mode'. The face is used for rendering `twittering-timeline-footer'.") (defvar twittering-timeline-header "-- Press Enter here to update --\n" "*Timeline header string on `twittering-mode'. The string is rendered on the beginning of a `twittering-mode' buffer. Its face is specified by `twittering-timeline-header-face'.") (defvar twittering-timeline-footer "-- Press Enter here to update --" "*Timeline footer string on `twittering-mode'. The string is rendered on the end of a `twittering-mode' buffer. Its face is specified by `twittering-timeline-footer-face'.") (defvar twittering-pop-to-buffer-function 'twittering-pop-to-buffer-in-bottom-largest-window "*Function being invoked by `twittering-pop-to-buffer'. It will receive an argument, the buffer being selected. For example, the following functions can be used; `pop-to-buffer', `twittering-pop-to-buffer-simple', `twittering-pop-to-buffer-in-current-window', `twittering-pop-to-buffer-in-largest-window', and `twittering-pop-to-buffer-in-bottom-largest-window'.") (defvar twittering-relative-retrieval-interval-alist '(("\\`:direct.*\\'" 4) (":home" ":mentions" 1) (t 1)) "*An alist of relative intervals of retrieving timelines. Each element looks like (TIMELINE-SPEC-REGEXP RELATIVE-INTERVAL). TIMELINE-SPEC-REGEXP must be t or a regexp string specifying primary timeline specs. If TIMELINE-SPEC-REGEXP is t, it matches all timelines. RELATIVE-INTERVAL must be zero or a positive integer specifying relative interval of retrieving timelines that match TIMELINE-SPEC-REGEXP. An interval for a timeline is determined as follows; 1. Find the first element where TIMELINE-SPEC-REGEXP matches the timeline or TIMELINE-SPEC-REGEXP is t. If no elements are found, the interval is `twittering-timer-interval'. 2. Check the RELATIVE-INTERVAL of the element. If RELATIVE-INTERVAL is a positive integer, the interval is RELATIVE-INTERVAL times as long as `twittering-timer-interval'. If RELATIVE-INTERVAL is zero, the interval is infinity. The timeline is not retrieved automatically.") (defvar twittering-relative-retrieval-count-alist '() "An alist for counting retrieval of primary timelines.") ;;;; ;;;; Macro and small utility function ;;;; (defun assocref (item alist) (cdr (assoc item alist))) (defmacro list-push (value listvar) `(setq ,listvar (cons ,value ,listvar))) (defmacro case-string (str &rest clauses) `(cond ,@(mapcar (lambda (clause) (let ((keylist (car clause)) (body (cdr clause))) `(,(if (listp keylist) `(or ,@(mapcar (lambda (key) `(string-equal ,str ,key)) keylist)) 't) ,@body))) clauses))) (defmacro twittering-wait-while (timeout interval condition &optional form &rest timeout-forms) "Wait while CONDITION returns non-nil until TIMEOUT seconds passes. The form CONDITION is repeatedly evaluated for every INTERVAL seconds until CONDITION returns nil or TIMEOUT seconds passes unless TIMEOUT is nil. If TIMEOUT is nil, there is no time limit. If CONDITION returns nil, evaluate the form FORM and return its value. If TIMEOUT seconds passes, evaluate the forms TIMEOUT-FORMS and return the value of the last form in TIMEOUT-FORMS." `(lexical-let (,@(when timeout `((timeout ,timeout))) (interval ,interval) (current 0.0)) (while (and ,@(when timeout '((< current timeout))) ,condition) (sit-for interval) (setq current (+ current interval))) ,(when (or form timeout-forms) (if (null timeout) form `(if (< current timeout) ,form ,@timeout-forms))))) (defun twittering-extract-matched-substring-all (regexp str) (let ((pos 0) (result nil)) (while (string-match regexp str pos) (setq result (cons (match-string 1 str) result)) (setq pos (match-end 0))) (reverse result))) (defun twittering-process-alive-p (proc) "Return non-nil if PROC is alive." (not (memq (process-status proc) '(nil closed exit failed signal)))) (defun twittering-start-process-with-sentinel (name buffer program args sentinel) "Start a program in a subprocess with a sentinel. This function is the same as `start-process' except that SENTINEL must be invoked when the process is successfully started." (let ((proc (apply 'start-process name buffer program args))) (when (and proc (functionp sentinel)) (if (twittering-process-alive-p proc) (set-process-sentinel proc sentinel) ;; Ensure that the sentinel is invoked if a subprocess is ;; successfully started. (funcall sentinel proc "finished"))) proc)) (defun twittering-parse-time-string (str &optional round-up) "Parse the time-string STR into (SEC MIN HOUR DAY MON YEAR DOW DST TZ). This function is the same as `parse-time-string' except to complement the lacked parameters with the current time. If ROUND-UP is nil, complement the lacked parameters with the oldest ones. If ROUND-UP is non-nil, complement the lacked parameters with the latest ones. For example, (twittering-parse-time-string \"2012-04-20\") returns (0 0 0 20 4 2012 nil nil 32400). And (twittering-parse-time-string \"2012-04-20\" t) returns (59 59 23 20 4 2012 nil nil 32400). The values are identical to those of `decode-time', but any values that are unknown are returned as nil." (let* ((parsed (parse-time-string str)) (current (decode-time (current-time))) (replacement-alist `((SEC . ,(if round-up 59 0)) (MIN . ,(if round-up 59 0)) (HOUR . ,(if round-up 23 0)) (DAY . nil) (MON . nil) (YEAR . nil) (DOW . nil) (DST . nil) (TZ . nil))) (sym-list (mapcar 'car replacement-alist)) (result nil)) (while (and parsed current sym-list) (let* ((sym (car sym-list)) (v (or (car parsed) (cdr (assq sym replacement-alist)) ;; If `sym' is not 'DOW and it is bound to nil ;; in `replacement-alist', use `current'. (unless (eq sym 'DOW) (car current))))) (setq result (cons v result))) (setq parsed (cdr parsed)) (setq current (cdr current)) (setq sym-list (cdr sym-list))) (reverse result))) ;;;; ;;;; Utility for portability ;;;; (defun twittering-remove-duplicates (list) "Return a copy of LIST with all duplicate elements removed. This is non-destructive version of `delete-dups' which is not defined in Emacs21." (if (fboundp 'delete-dups) (delete-dups (copy-sequence list)) (let ((rest list) (result nil)) (while rest (unless (member (car rest) result) (setq result (cons (car rest) result))) (setq rest (cdr rest))) (nreverse result)))) (defun twittering-completing-read (prompt collection &optional predicate require-match initial-input hist def inherit-input-method) "Read a string in the minibuffer, with completion. This is a modified version of `completing-read' and accepts candidates as a list of a string on Emacs21." ;; completing-read() of Emacs21 does not accepts candidates as ;; a list. Candidates must be given as an alist. (let* ((collection (twittering-remove-duplicates collection)) (collection (if (and (> 22 emacs-major-version) (listp collection) (stringp (car collection))) (mapcar (lambda (x) (cons x nil)) collection) collection))) (completing-read prompt collection predicate require-match initial-input hist def inherit-input-method))) (defun twittering-add-to-history (history-var elt &optional maxelt keep-all) (if (functionp 'add-to-history) (add-to-history history-var elt maxelt keep-all) (let* ((added (cons elt (if (and (not keep-all) (boundp 'history-delete-duplicates) history-delete-duplicates) (delete elt (symbol-value history-var)) (symbol-value history-var)))) (maxelt (or maxelt history-length)) (len (length added))) (set history-var (if (<= len maxelt) added (butlast added (- len maxelt))))))) (if (fboundp 'assoc-string) (defalias 'twittering-assoc-string 'assoc-string) (defun twittering-assoc-string (key list &optional case-fold) "Like `assoc' but specifically for strings (and symbols). This returns the first element of LIST whose car matches the string or symbol KEY, or nil if no match exists. When performing the comparison, symbols are first converted to strings, and unibyte strings to multibyte. If the optional arg CASE-FOLD is non-nil, case is ignored. Unlike `assoc', KEY can also match an entry in LIST consisting of a single string, rather than a cons cell whose car is a string. This is reimplemented version of `assoc-string' which is not defined in Emacs21." (let* ((key (if (stringp key) key (symbol-name key))) (regexp (concat "\\`" key "\\'")) (rest list) (result nil) (case-fold-search case-fold)) (while (not (null rest)) (let* ((current (car rest)) (current-key (if (listp current) (car current) current)) (current-key (if (stringp current-key) current-key (symbol-name current-key)))) (if (string-match key current-key) (setq result current rest nil) (setq rest (cdr rest))))) result))) ;;;; ;;;; Debug mode ;;;; (defvar twittering-debug-mode nil) (defvar twittering-debug-buffer "*debug*") (defun twittering-get-or-generate-buffer (buffer) (if (bufferp buffer) (if (buffer-live-p buffer) buffer (generate-new-buffer (buffer-name buffer))) (if (stringp buffer) (or (get-buffer buffer) (generate-new-buffer buffer))))) (defun twittering-debug-buffer () (twittering-get-or-generate-buffer twittering-debug-buffer)) (defmacro debug-print (obj) (let ((obsym (gensym))) `(let ((,obsym ,obj)) (if twittering-debug-mode (with-current-buffer (twittering-debug-buffer) (insert "[debug] " (prin1-to-string ,obsym)) (newline) ,obsym) ,obsym)))) (defun debug-printf (fmt &rest args) (when twittering-debug-mode (with-current-buffer (twittering-debug-buffer) (insert "[debug] " (apply 'format fmt args)) (newline)))) (defun twittering-debug-mode () (interactive) (setq twittering-debug-mode (not twittering-debug-mode)) (message (if twittering-debug-mode "debug mode:on" "debug mode:off"))) ;;;; ;;;; Proxy setting / functions ;;;; (defvar twittering-proxy-use nil) (defvar twittering-proxy-server nil "*Proxy server for `twittering-mode'. If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS. To use individual proxies for HTTP and HTTPS, both `twittering-proxy-server' and `twittering-proxy-port' must be nil.") (defvar twittering-proxy-port nil "*Port number for `twittering-mode'. If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS. To use individual proxies for HTTP and HTTPS, both `twittering-proxy-server' and `twittering-proxy-port' must be nil.") (defvar twittering-proxy-keep-alive nil) (defvar twittering-proxy-user nil "*Username for `twittering-proxy-server'. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-proxy-password nil "*Password for `twittering-proxy-server'. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-http-proxy-server nil "*HTTP proxy server for `twittering-mode'. If nil, it is initialized on entering `twittering-mode'. The port number is specified by `twittering-http-proxy-port'. For HTTPS connection, the proxy specified by `twittering-https-proxy-server' and `twittering-https-proxy-port' is used. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-http-proxy-port nil "*Port number of a HTTP proxy server for `twittering-mode'. If nil, it is initialized on entering `twittering-mode'. The server is specified by `twittering-http-proxy-server'. For HTTPS connection, the proxy specified by `twittering-https-proxy-server' and `twittering-https-proxy-port' is used. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-http-proxy-keep-alive nil "*If non-nil, the Keep-alive is enabled. This is experimental.") (defvar twittering-http-proxy-user nil "*Username for `twittering-http-proxy-server'. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-http-proxy-password nil "*Password for `twittering-http-proxy-server'. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-https-proxy-server nil "*HTTPS proxy server for `twittering-mode'. If nil, it is initialized on entering `twittering-mode'. The port number is specified by `twittering-https-proxy-port'. For HTTP connection, the proxy specified by `twittering-http-proxy-server' and `twittering-http-proxy-port' is used. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-https-proxy-port nil "*Port number of a HTTPS proxy server for `twittering-mode'. If nil, it is initialized on entering `twittering-mode'. The server is specified by `twittering-https-proxy-server'. For HTTP connection, the proxy specified by `twittering-http-proxy-server' and `twittering-http-proxy-port' is used. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-https-proxy-keep-alive nil "*If non-nil, the Keep-alive is enabled. This is experimental.") (defvar twittering-https-proxy-user nil "*Username for `twittering-https-proxy-server'. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defvar twittering-https-proxy-password nil "*Password for `twittering-https-proxy-server'. NOTE: If both `twittering-proxy-server' and `twittering-proxy-port' are non-nil, the variables `twittering-proxy-*' have priority over other variables `twittering-http-proxy-*' or `twittering-https-proxy-*' regardless of HTTP or HTTPS.") (defun twittering-normalize-proxy-vars () "Normalize the type of `twittering-http-proxy-port' and `twittering-https-proxy-port'." (mapc (lambda (sym) (let ((value (symbol-value sym))) (cond ((null value) nil) ((integerp value) nil) ((stringp value) (set sym (string-to-number value))) (t (set sym nil))))) '(twittering-proxy-port twittering-http-proxy-port twittering-https-proxy-port))) (defun twittering-proxy-info (scheme &optional item) "Return an alist for proxy configuration registered for SCHEME. SCHEME must be a string \"http\", \"https\" or a symbol 'http or 'https. The server name is a string and the port number is an integer." (twittering-normalize-proxy-vars) (let ((scheme (if (symbolp scheme) (symbol-name scheme) scheme)) (info-list `((("http" "https") . ((server . ,twittering-proxy-server) (port . ,twittering-proxy-port) (keep-alive . ,twittering-proxy-keep-alive) (user . ,twittering-proxy-user) (password . ,twittering-proxy-password))) (("http") . ((server . ,twittering-http-proxy-server) (port . ,twittering-http-proxy-port) (keep-alive . ,twittering-http-proxy-keep-alive) (user . ,twittering-http-proxy-user) (password . ,twittering-http-proxy-password))) (("https") . ((server . ,twittering-https-proxy-server) (port . ,twittering-https-proxy-port) (keep-alive . ,twittering-https-proxy-keep-alive) (user . ,twittering-https-proxy-user) (password . ,twittering-https-proxy-password)))))) (let ((info (car (remove nil (mapcar (lambda (entry) (when (member scheme (car entry)) (let ((info (cdr entry))) (when (and (cdr (assq 'server info)) (cdr (assq 'port info))) info)))) info-list))))) (if item (cdr (assq item info)) info)))) (defun twittering-url-proxy-services () "Return the current proxy configuration for `twittering-mode' in the format of `url-proxy-services'." (remove nil (mapcar (lambda (scheme) (let ((server (twittering-proxy-info scheme 'server)) (port (twittering-proxy-info scheme 'port))) (when (and server port) `(,scheme . ,(format "%s:%s" server port))))) '("http" "https")))) (defun twittering-find-proxy (scheme) "Find proxy server and its port from the environmental variables and return a cons pair of them. SCHEME must be \"http\" or \"https\"." (cond ((require 'url-methods nil t) (url-scheme-register-proxy scheme) (let* ((proxy-service (assoc scheme url-proxy-services)) (proxy (if proxy-service (cdr proxy-service) nil))) (if (and proxy (string-match "^\\([^:]+\\):\\([0-9]+\\)$" proxy)) (let ((host (match-string 1 proxy)) (port (string-to-number (match-string 2 proxy)))) (cons host port)) nil))) (t (let* ((env-var (concat scheme "_proxy")) (env-proxy (or (getenv (upcase env-var)) (getenv (downcase env-var)))) (default-port (if (string= "https" scheme) "443" "80"))) (if (and env-proxy (string-match "^\\(https?://\\)?\\([^:/]+\\)\\(:\\([0-9]+\\)\\)?/?$" env-proxy)) (let* ((host (match-string 2 env-proxy)) (port-str (or (match-string 4 env-proxy) default-port)) (port (string-to-number port-str))) (cons host port)) nil))))) (defun twittering-setup-proxy () (when (require 'url-methods nil t) ;; If `url-scheme-registry' is not initialized, ;; `url-proxy-services' will be reset by calling ;; `url-insert-file-contents' or `url-retrieve-synchronously', etc. ;; To avoid it, initialize `url-scheme-registry' by calling ;; `url-scheme-get-property' before calling such functions. (url-scheme-get-property "http" 'name) (url-scheme-get-property "https" 'name)) (unless (and twittering-http-proxy-server twittering-http-proxy-port) (let ((info (twittering-find-proxy "http"))) (setq twittering-http-proxy-server (car-safe info)) (setq twittering-http-proxy-port (cdr-safe info)))) (unless (and twittering-https-proxy-server twittering-https-proxy-port) (let ((info (twittering-find-proxy "https"))) (setq twittering-https-proxy-server (car-safe info)) (setq twittering-https-proxy-port (cdr-safe info)))) (if (and twittering-proxy-use (null (twittering-proxy-info "http")) (null (twittering-proxy-info "https"))) (progn (message "Disabling proxy due to lack of configuration.") (setq twittering-proxy-use nil)) t)) (defun twittering-toggle-proxy () (interactive) (setq twittering-proxy-use (not twittering-proxy-use)) (if (twittering-setup-proxy) (message (if twittering-proxy-use "Use Proxy:on" "Use Proxy:off"))) (twittering-update-mode-line)) ;;;; ;;;; Functions for URL library ;;;; (defvar twittering-url-show-status nil "*Whether to show a running total of bytes transferred.") ;;;; ;;;; CA certificate ;;;; (defvar twittering-cert-file nil "The full-path of the file including the certificates authorizing servers on SSL.") (defconst twittering-ca-cert-list '(;; Equifax Secure Certificate Authority ;; subject= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority ;; SHA1 Fingerprint=D2:32:09:AD:23:D3:14:23:21:74:E4:0D:7F:9D:62:13:97:86:63:3A ;; Retrieved from: https://www.geotrust.com/resources/root-certificates/index.html ;; URL: https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer ;; for www.googleapis.com "-----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- " ;; VeriSign Class 3 Public Primary CA - G2 ;; subject= /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority - G2/OU=(c) 1998 VeriSign, Inc. - For authorized use only/OU=VeriSign Trust Network ;; SHA1 Fingerprint=85:37:1C:A6:E5:50:14:3D:CE:28:03:47:1B:DE:3A:09:E8:F8:77:0F ;; Retrieved from: https://www.verisign.com/support/roots.html ;; URL: https://www.verisign.com/repository/roots/root-certificates/PCA-3G2.pem ;; for api.twitter.com "-----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE----- " ;; GeoTrust Global CA ;; subject= /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA ;; SHA1 Fingerprint=DE:28:F4:A4:FF:E5:B9:2F:A3:C5:03:D1:A3:49:A7:F9:96:2A:82:12 ;; Retrieved from: https://www.geotrust.com/resources/root-certificates/index.html ;; URL: https://www.geotrust.com/resources/root_certificates/certificates/GeoTrust_Global_CA.cer ;; for search.twitter.com "-----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU 1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV 5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- ")) (defun twittering-delete-ca-cert () (when (and twittering-cert-file (file-exists-p twittering-cert-file)) (delete-file twittering-cert-file)) (setq twittering-cert-file nil)) (defun twittering-ensure-ca-cert () "Return a full-path of the file including CA certificates. If it does not exist, create it. The directory includes root certificates in \"hash format\". In detail, see verify(1SSL)." (unless twittering-cert-file (let ((coding-system-for-write 'iso-safe) (file (make-temp-file "twmode-cacert"))) (with-temp-file file (apply 'insert twittering-ca-cert-list)) (setq twittering-cert-file file) (add-hook 'kill-emacs-hook 'twittering-delete-ca-cert))) twittering-cert-file) ;;;; ;;;; User agent ;;;; (defvar twittering-user-agent-function 'twittering-user-agent-default-function) (defun twittering-user-agent-default-function () "Twittering mode default User-Agent function." (format "Emacs/%d.%d Twittering-mode/%s" emacs-major-version emacs-minor-version twittering-mode-version)) (defun twittering-user-agent () "Return User-Agent header string." (funcall twittering-user-agent-function)) ;;;; ;;;; Basic HTTP functions (general) ;;;; (defun twittering-percent-encode (str &optional coding-system) "Encode STR according to Percent-Encoding defined in RFC 3986." (twittering-oauth-url-encode str coding-system)) (defun twittering-lookup-connection-type (use-ssl &optional order table) "Return available entry extracted fron connection type table. TABLE is connection type table, which is an alist of type symbol and its item alist, such as '((native (check . t) (https . twittering-start-http-session-native-tls-p) (start . twittering-start-http-session-native)) (curl (check . twittering-start-http-session-curl-p) (https . twittering-start-http-session-curl-https-p) (start . twittering-start-http-session-curl))) . ORDER means the priority order of type symbols. If USE-SSL is nil, the item `https' is ignored. When the type `curl' has priority and is available for the above table, the function returns '((check . twittering-start-http-session-curl-p) (https . twittering-start-http-session-curl-https-p) (start . twittering-start-http-session-curl)) ." (let ((rest (or order twittering-connection-type-order)) (table (or table twittering-connection-type-table)) (result nil)) (while (and rest (null result)) (let* ((candidate (car rest)) (entry (cons `(symbol . ,candidate) (cdr (assq candidate table)))) (entry (if (assq 'display-name entry) entry (cons `(display-name . ,(symbol-name candidate)) entry))) (validate (lambda (item) (let ((v (cdr (assq item entry)))) (or (null v) (eq t v) (functionp v))))) (confirm (lambda (item) (let ((v (cdr (assq item entry)))) (cond ((null v) nil) ((eq t v) t) ((functionp v) (funcall v))))))) (if (and (funcall validate 'check) (or (not use-ssl) (funcall validate 'https))) (cond ((and (funcall confirm 'check) (or (not use-ssl) (funcall confirm 'https))) (setq rest nil) (setq result entry)) (t (setq rest (cdr rest)))) (message "The configuration for conncetion type `%s' is invalid." candidate) (setq rest nil)))) result)) (defun twittering-get-connection-method-name (use-ssl) "Return a name of the preferred connection method. If USE-SSL is non-nil, return a connection method for HTTPS. If USE-SSL is nil, return a connection method for HTTP." (cdr (assq 'display-name (twittering-lookup-connection-type use-ssl)))) (defun twittering-lookup-http-start-function (&optional order table) "Decide a connection method from currently available methods." (let ((entry (twittering-lookup-connection-type twittering-use-ssl order table))) (cdr (assq 'send-http-request entry)))) (defun twittering-ensure-connection-method (&optional order table) "Ensure a connection method with a compromise. Return nil if no connection methods are available with a compromise." (let* ((use-ssl (or twittering-use-ssl twittering-oauth-use-ssl)) (entry (twittering-lookup-connection-type use-ssl order table))) (cond (entry t) ((and (null entry) use-ssl (yes-or-no-p "HTTPS(SSL) is unavailable. Use HTTP instead? ")) ;; Fall back on connection without SSL. (setq twittering-use-ssl nil) (setq twittering-oauth-use-ssl nil) (twittering-update-mode-line) (twittering-ensure-connection-method order table)) (t (message "No connection methods are available.") nil)))) (defun twittering-make-http-request (method header-list host port path query-parameters post-body use-ssl) "Returns an alist specifying a HTTP request. METHOD specifies HTTP method. It must be \"GET\" or \"POST\". HEADER-LIST is a list of (field-name . field-value) specifying HTTP header fields. The fields \"Host\", \"User-Agent\" and \"Content-Length\" are automatically filled if necessary. HOST specifies the host. PORT specifies the port. This must be an integer. PATH specifies the absolute path in URI (without query string). QUERY-PARAMTERS is a string or an alist. If QUERY-PARAMTERS is a string, it is treated as an encoded query string. If QUERY-PARAMTERS is an alist, it represents a list of cons pairs of string, (query-key . query-value). POST-BODY specifies the post body sent when METHOD equals to \"POST\". If POST-BODY is nil, no body is posted. If USE-SSL is non-nil, the request is performed with SSL. The result alist includes the following keys, where a key is a symbol. method: HTTP method such as \"GET\" or \"POST\". scheme: the scheme name. \"http\" or \"https\". host: the host to which the request is sent. port: the port to which the request is sent (integer). path: the absolute path string. Note that it does not include query string. query-string: the query string. encoded-query-alist: the alist consisting of pairs of encoded query-name and encoded query-value. uri: the URI. It includes the query string. uri-without-query: the URI without the query string. header-list: an alist specifying pairs of a parameter and its value in HTTP header field. post-body: the entity that will be posted." (let* ((scheme (if use-ssl "https" "http")) (default-port (if use-ssl 443 80)) (port (if port port default-port)) (query-string (cond ((stringp query-parameters) query-parameters) ((consp query-parameters) (mapconcat (lambda (pair) (cond ((stringp pair) (twittering-percent-encode pair)) ((consp pair) (format "%s=%s" (twittering-percent-encode (car pair)) (twittering-percent-encode (cdr pair)))) (t nil))) query-parameters "&")) (t nil))) (encoded-query-alist (cond ((stringp query-parameters) ;; Query name and its value must be already encoded. (mapcar (lambda (str) (if (string-match "=" str) (let ((key (substring str 0 (match-beginning 0))) (value (substring str (match-end 0)))) `(,key . ,value)) `(,str . nil))) (split-string query-parameters "&"))) ((consp query-parameters) (mapcar (lambda (pair) (cond ((stringp pair) (cons (twittering-percent-encode pair) nil)) ((consp pair) (cons (twittering-percent-encode (car pair)) (twittering-percent-encode (cdr pair)))) (t nil))) query-parameters)) (t nil))) (uri-without-query (concat scheme "://" host (when (and port (not (= port default-port))) (format ":%d" port)) path)) (uri (if query-string (concat uri-without-query "?" query-string) uri-without-query)) (header-list `(,@(when (and (string= method "POST") (not (assoc "Content-Length" header-list))) `(("Content-Length" . ,(format "%d" (length post-body))))) ,@(unless (assoc "Host" header-list) `(("Host" . ,host))) ,@(unless (assoc "User-Agent" header-list) `(("User-Agent" . ,(twittering-user-agent)))) ,@header-list))) (cond ((not (member method '("POST" "GET"))) (error "Unknown HTTP method: %s" method) nil) ((not (string-match "^/" path)) (error "Invalid HTTP path: %s" path) nil) (t `((method . ,method) (scheme . ,scheme) (host . ,host) (port . ,port) (path . ,path) (query-string . ,query-string) (encoded-query-alist . ,encoded-query-alist) (uri . ,uri) (uri-without-query . ,uri-without-query) (header-list . ,header-list) (post-body . ,post-body)))))) (defun twittering-make-http-request-from-uri (method header-list uri &optional post-body) "Returns an alist specifying a HTTP request. The result alist has the same form as an alist generated by `twittering-make-http-request'. METHOD specifies HTTP method. It must be \"GET\" or \"POST\". HEADER-LIST is a list of (field-name . field-value) specifying HTTP header fields. The fields \"Host\" and \"User-Agent\" are automatically filled if necessary. URI specifies the URI including query string. POST-BODY specifies the post body sent when METHOD equals to \"POST\". If POST-BODY is nil, no body is posted." (let* ((parts-alist (let ((parsed-url (url-generic-parse-url uri))) ;; This is required for the difference of url library ;; distributed with Emacs 22 and 23. (cond ((and (fboundp 'url-p) (url-p parsed-url)) ;; Emacs 23 and later. `((scheme . ,(url-type parsed-url)) (host . ,(url-host parsed-url)) (port . ,(url-portspec parsed-url)) (path . ,(url-filename parsed-url)))) ((vectorp parsed-url) ;; Emacs 22. `((scheme . ,(aref parsed-url 0)) (host . ,(aref parsed-url 3)) (port . ,(aref parsed-url 4)) (path . ,(aref parsed-url 5)))) (t nil)))) (path (let ((path (cdr (assq 'path parts-alist)))) (if (string-match "\\`\\(.*\\)\\?" path) (match-string 1 path) path))) (query-string (let ((path (cdr (assq 'path parts-alist)))) (if (string-match "\\?\\(.*\\)\\'" path) (match-string 1 path) nil)))) (twittering-make-http-request method header-list (cdr (assq 'host parts-alist)) (cdr (assq 'port parts-alist)) path query-string post-body (string= "https" (cdr (assq 'scheme parts-alist)))))) (defun twittering-make-connection-info (request &optional additional order table) "Make an alist specifying the information of connection for REQUEST. REQUEST must be an alist that has the same keys as that generated by `twittering-make-http-request'. ADDITIONAL is appended to the tail of the result alist. Following ADDITIONAL, an entry in TABLE is also appended to the result alist, where `twittering-lookup-connection-type' determines the entry according to the priority order ORDER. If ORDER is nil, `twittering-connection-type-order' is used in place of ORDER. If TABLE is nil, `twittering-connection-type-table' is used in place of TABLE. The parameter symbols are following: use-ssl: whether SSL is enabled or not. allow-insecure-server-cert: non-nil if an insecure server certificate is allowed on SSL. cacert-file-fullpath: the full-path of a file including the certificates authorizing a server certificate on SSL. The file must be in PEM format. use-proxy: non-nil if using a proxy. proxy-server: a proxy server or nil. proxy-port: a port for connecting the proxy (integer) or nil. proxy-user: a username for connecting the proxy or nil. proxy-password: a password for connecting the proxy or nil. request: an alist specifying a HTTP request." (let* ((order (or order twittering-connection-type-order)) (table (or table twittering-connection-type-table)) (scheme (cdr (assq 'scheme request))) (use-ssl (string= "https" scheme)) (entry (twittering-lookup-connection-type use-ssl order table))) `((use-ssl . ,use-ssl) (allow-insecure-server-cert . ,twittering-allow-insecure-server-cert) (cacert-file-fullpath . ,(when use-ssl (twittering-ensure-ca-cert))) (use-proxy . ,twittering-proxy-use) ,@(when twittering-proxy-use `((proxy-server . ,(twittering-proxy-info scheme 'server)) (proxy-port . ,(twittering-proxy-info scheme 'port)) (proxy-user . ,(twittering-proxy-info scheme 'user)) (proxy-password . ,(twittering-proxy-info scheme 'password)))) (request . ,request) ,@additional ,@entry))) (defun twittering-get-response-header (buffer) "Extract HTTP response header from HTTP response. BUFFER may be a buffer or the name of an existing buffer which contains the HTTP response." (with-current-buffer buffer (save-excursion (goto-char (point-min)) (if (search-forward-regexp "\r?\n\r?\n" nil t) (prog1 (buffer-substring (point-min) (match-end 0)) (when twittering-debug-mode (debug-printf "connection-info=%s\n" connection-info) (debug-print "HTTP response header:\n--BEGIN\n") (debug-print (buffer-substring (point-min) (match-end 0))) (debug-print "--END\n"))) nil)))) (defun twittering-make-header-info-alist (header-str) "Make HTTP header alist from HEADER-STR. The alist consists of pairs of field-name and field-value, such as '((\"Content-Type\" . \"application/xml\; charset=utf-8\") (\"Content-Length\" . \"2075\"))." (let* ((lines (split-string header-str "\r?\n")) (status-line (car lines)) (header-lines (cdr lines))) (when (string-match "^\\(HTTP/1\.[01]\\) \\([0-9][0-9][0-9]\\) \\(.*\\)$" status-line) (append `((status-line . ,status-line) (http-version . ,(match-string 1 status-line)) (status-code . ,(match-string 2 status-line)) (reason-phrase . ,(match-string 3 status-line))) (remove nil (mapcar (lambda (line) (when (string-match "^\\([^: ]*\\): *\\(.*\\)$" line) (cons (match-string 1 line) (match-string 2 line)))) header-lines)))))) (defun twittering-get-content-subtype-symbol-from-header-info (header-info) "Return a symbol corresponding to the subtype of content-type." (let* ((content-type ;; According to RFC2616, field name of a HTTP header is ;; case-insensitive. (car (remove nil (mapcar (lambda (entry) (when (and (stringp (car entry)) (let ((case-fold-search t)) (string-match "\\`content-type\\'" (car entry)))) (cdr entry))) header-info)))) (subtype (when (and (stringp content-type) (string-match "\\` *[^/]*/\\([^ ;]*\\)" content-type)) (downcase (match-string 1 content-type)))) (symbol-alist '(("json" . json) ("atom+xml" . atom) ("xml" . xml)))) (cdr (assoc subtype symbol-alist)))) (defun twittering-decode-response-body (header-info) "Decode the current buffer according to the content-type in HEADER-INFO." (let* ((content-type ;; According to RFC2616, field name of a HTTP header is ;; case-insensitive. (car (remove nil (mapcar (lambda (entry) (when (and (stringp (car entry)) (let ((case-fold-search t)) (string-match "\\`content-type\\'" (car entry)))) (cdr entry))) header-info)))) (parameters (when (stringp content-type) (cdr (split-string content-type ";")))) (regexp "^[[:space:]]*charset=utf-8[[:space:]]*$") (encoded-with-utf-8 (let ((case-fold-search t)) (remove nil (mapcar (lambda (entry) (string-match regexp entry)) parameters))))) (when encoded-with-utf-8 (decode-coding-region (point-min) (point-max) 'utf-8)))) (defun twittering-send-http-request-internal (request additional-info sentinel &optional order table) "Open a connection and return a subprocess object for the connection. REQUEST must be an alist that has the same keys as that generated by `twittering-make-http-request'. SENTINEL is called as a function when the process changes state. It gets three arguments: the process, a string describing the change, and the connection-info, which is generated by `twittering-make-connection-info' and also includes an alist ADDITIONAL-INFO. How to perform the request is selected from TABLE according to the priority order ORDER. ORDER and TABLE are directly sent to `twittering-make-connection-info'. If ORDER is nil, `twittering-connection-type-order' is used in place of ORDER. If TABLE is nil, `twittering-connection-type-table' is used in place of TABLE. " (let* ((order (or order twittering-connection-type-order)) (table (or table twittering-connection-type-table)) (connection-info (twittering-make-connection-info request additional-info order table)) (func (cdr (assq 'send-http-request connection-info))) (temp-buffer (generate-new-buffer "*twmode-http-buffer*")) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (cond ((and func (functionp func)) (funcall func "*twmode-generic*" temp-buffer connection-info (when (and sentinel (functionp sentinel)) (lexical-let ((sentinel sentinel) (connection-info connection-info)) (lambda (proc status) (apply sentinel proc status connection-info nil)))))) (t (error "No valid connection method is found") nil)))) (defun twittering-send-http-request (request additional-info func &optional clean-up-func) "Send a HTTP request and return a subprocess object for the connection. REQUEST must be an alist that has the same keys as that generated by `twittering-make-http-request'. FUNC is called when a HTTP response has been received without errors. It is called with the current buffer containing the HTTP response (without HTTP headers). FUNC is called with four arguments: the process, a symbol describing the status of the process, a connection-info generated by `twittering-make-connection-info', and a header-info generated by `twittering-get-response-header' and `twittering-make-header-info-alist'. The connection-info also includes an alist ADDITIONAL-INFO. If FUNC returns non-nil and `twittering-buffer-related-p' is non-nil, the returned value is displayed as a message. And also, if FUNC returns a string and it matches the regular expression \"^\\\\(Failuare\\\\|Response\\\\): \", the returned value is displayed as a message. CLEAN-UP-FUNC is called whenever the sentinel of the subprocess for the connection is called (as `set-process-sentinel'). It is called with three arguments: the process, a symbol describing the status of the proess, and a connection-info generated by `twittering-make-connection-info'. They are the same as arguments for FUNC. When a HTTP response has been received, FUNC is called in advance of CLEAN-UP-FUNC. CLEAN-UP-FUNC can overwrite the message displayed by FUNC. If the subprocess has exited, the buffer bound to it is automatically killed after calling CLEAN-UP-FUNC. The method to perform the request is determined from `twittering-connection-type-table' according to the priority order `twittering-connection-type-order'." (lexical-let ((func func) (clean-up-func clean-up-func)) (twittering-send-http-request-internal request additional-info (lambda (proc status-str connection-info) (let ((status (cond ((string= status-str "urllib-finished") 'exit) ((processp proc) (process-status proc)) (t nil))) (buffer (process-buffer proc)) (exit-status (cond ((string= status-str "urllib-finished") 0) ((processp proc) (process-exit-status proc)) (t 1))) (command (process-command proc)) (pre-process-func (cdr (assq 'pre-process-buffer connection-info))) (mes nil)) (unwind-protect (setq mes (cond ((null status) (format "Failure: process %s does not exist" proc)) ((or (memq status '(run stop open listen connect)) (not (memq status '(exit signal closed failed)))) ;; If the process is running, FUNC is not called. nil) ((and command (not (= 0 exit-status))) ;; If the process abnormally exited, (format "Failure: %s exited abnormally (exit-status=%s)" (car command) exit-status)) ((not (buffer-live-p buffer)) (format "Failure: the buffer for %s is already killed" proc)) (t (when (functionp pre-process-func) ;; Pre-process buffer. (funcall pre-process-func proc buffer connection-info)) (let* ((header (twittering-get-response-header buffer)) (header-info (and header (twittering-make-header-info-alist header)))) (with-current-buffer buffer (goto-char (point-min)) (when (search-forward-regexp "\r?\n\r?\n" nil t) ;; delete HTTP headers. (delete-region (point-min) (match-end 0))) ;; It may be necessary to decode the contents of ;; the buffer by UTF-8 because ;; `twittering-http-application-headers' specifies ;; utf-8 as one of acceptable charset. ;; For the present, only UTF-8 is taken into account. (twittering-decode-response-body header-info) (apply func proc status connection-info header-info nil)))))) ;; unwind-forms (setq mes (cond ((null mes) nil) ((string-match "^\\(Failure\\|Response\\): " mes) (let* ((request (cdr (assq 'request connection-info))) (method (cdr (assq 'method request))) (uri (cdr (assq 'uri request)))) (concat mes " for " method " " uri))) ((twittering-buffer-related-p) mes))) (when mes ;; CLEAN-UP-FUNC can overwrite a message from the return value ;; of FUNC. (message "%s" mes)) (when (functionp clean-up-func) (funcall clean-up-func proc status connection-info)) (when (and (memq status '(exit signal closed failed)) (buffer-live-p buffer) (not twittering-debug-mode)) (kill-buffer buffer)))))))) ;;;; ;;;; Basic HTTP functions with tls and Emacs builtins. ;;;; (eval-when-compile (require 'tls nil t)) (defun twittering-start-http-session-native-tls-p () (when (and (not twittering-proxy-use) (require 'tls nil t)) (unless twittering-tls-program (let ((programs (remove nil (mapcar (lambda (cmd) (when (string-match "\\`\\([^ ]+\\) " cmd) (when (executable-find (match-string 1 cmd)) cmd))) tls-program)))) (setq twittering-tls-program (if twittering-allow-insecure-server-cert (mapcar (lambda (str) (cond ((string-match "^\\([^ ]*/\\)?openssl s_client " str) (concat (match-string 0 str) "-verify 0 " (substring str (match-end 0)))) ((string-match "^\\([^ ]*/\\)?gnutls-cli " str) (concat (match-string 0 str) "--insecure " (substring str (match-end 0)))) (t str))) programs) programs)))) (not (null twittering-tls-program)))) ;; TODO: proxy (defun twittering-send-http-request-native (name buffer connection-info sentinel) (let* ((request (cdr (assq 'request connection-info))) (uri (cdr (assq 'uri connection-info))) (method (cdr (assq 'method request))) (scheme (cdr (assq 'scheme request))) (host (cdr (assq 'host request))) (port (cdr (assq 'port request))) (path (cdr (assq 'path request))) (query-string (cdr (assq 'query-string request))) (post-body (cdr (assq 'post-body request))) (use-proxy (cdr (assq 'use-proxy connection-info))) (proxy-server (cdr (assq 'proxy-server connection-info))) (proxy-port (cdr (assq 'proxy-port connection-info))) (proxy-user (cdr (assq 'proxy-user connection-info))) (proxy-password (cdr (assq 'proxy-password connection-info))) (proxy-credentials (when (and proxy-user proxy-password) (concat "Basic " (base64-encode-string (concat proxy-user ":" proxy-password))))) (header-list (let ((original-header-list (cdr (assq 'header-list request)))) (if proxy-credentials (cons `("Proxy-Authorization" ,proxy-credentials) original-header-list) original-header-list))) (use-ssl (cdr (assq 'use-ssl connection-info))) (allow-insecure-server-cert (cdr (assq 'allow-insecure-server-cert connection-info))) (connect-host (or proxy-server host)) (connect-port (or proxy-port port)) (request-str (format "%s %s HTTP/1.1\r\n%s\r\n\r\n%s\r\n" method (if use-proxy ;; As described in 5.1.2 of RFC2616, the ;; absolute URI is required here if the connection ;; uses a proxy. uri (concat path (when query-string (concat "?" query-string)))) (mapconcat (lambda (pair) (format "%s: %s" (car pair) (cdr pair))) header-list "\r\n") (or post-body ""))) (coding-system-for-read 'binary) (coding-system-for-write 'binary) (tls-program twittering-tls-program) (proc (funcall (if use-ssl 'open-tls-stream 'open-network-stream) "network-connection-process" nil connect-host connect-port))) (when proc (set-process-buffer proc buffer) (when (functionp sentinel) (if (twittering-process-alive-p proc) (set-process-sentinel proc sentinel) (funcall sentinel proc "finished"))) (process-send-string proc request-str) proc))) (defun twittering-pre-process-buffer-native (proc buffer connection-info) (let ((use-ssl (cdr (assq 'use-ssl connection-info))) (args (process-command proc))) (cond ((and use-ssl args (car (remove nil (mapcar (lambda (cmd) (string-match "^\\(.*/\\)?gnutls-cli\\b" cmd)) args)))) (with-current-buffer buffer (save-excursion (goto-char (point-max)) (when (search-backward-regexp "- Peer has closed the GNUTLS connection\r?\n\\'") (let ((beg (match-beginning 0)) (end (match-end 0))) (delete-region beg end)))))) ((and use-ssl args (car (remove nil (mapcar (lambda (cmd) (string-match "^\\(.*/\\)?openssl s_client\\b" cmd)) args)))) (with-current-buffer buffer (save-excursion (goto-char (point-max)) (when (search-backward-regexp "closed\r?\n\\'") (let ((beg (match-beginning 0)) (end (match-end 0))) (delete-region beg end)))))) (t nil)))) ;;;; ;;;; Basic HTTP functions with curl ;;;; (defun twittering-find-curl-program () "Returns an appropriate `curl' program pathname or nil if not found." (or (executable-find "curl") (let ((windows-p (memq system-type '(windows-nt cygwin))) (curl.exe (expand-file-name "curl.exe" (expand-file-name "win-curl" (file-name-directory (symbol-file 'twit)))))) (and windows-p (file-exists-p curl.exe) curl.exe)))) (defun twittering-start-http-session-curl-p () "Return t if curl was installed, otherwise nil." (unless twittering-curl-program (setq twittering-curl-program (twittering-find-curl-program))) (not (null twittering-curl-program))) (defun twittering-start-http-session-curl-https-p () "Return t if curl was installed and the curl support HTTPS, otherwise nil." (when (twittering-start-http-session-curl-p) (unless twittering-curl-program-https-capability (with-temp-buffer (let ((coding-system-for-read 'iso-safe) (coding-system-for-write 'iso-safe) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (call-process twittering-curl-program nil (current-buffer) nil "--version") (goto-char (point-min)) (setq twittering-curl-program-https-capability (if (search-forward-regexp "^Protocols: .*https" nil t) 'capable 'incapable))))) (eq twittering-curl-program-https-capability 'capable))) (defun twittering-send-http-request-curl (name buffer connection-info sentinel) (let* ((request (cdr (assq 'request connection-info))) (method (cdr (assq 'method request))) (uri (cdr (assq 'uri request))) (header-list (cdr (assq 'header-list request))) (post-body (cdr (assq 'post-body request))) (use-proxy (cdr (assq 'use-proxy connection-info))) (proxy-server (cdr (assq 'proxy-server connection-info))) (proxy-port (cdr (assq 'proxy-port connection-info))) (proxy-user (cdr (assq 'proxy-user connection-info))) (proxy-password (cdr (assq 'proxy-password connection-info))) (use-ssl (cdr (assq 'use-ssl connection-info))) (allow-insecure-server-cert (cdr (assq 'allow-insecure-server-cert connection-info))) (cacert-file-fullpath (cdr (assq 'cacert-file-fullpath connection-info))) (cacert-file-base-directory (when cacert-file-fullpath (file-name-directory cacert-file-fullpath))) (cacert-file-body (when cacert-file-fullpath (file-name-nondirectory cacert-file-fullpath))) (header-list `(,@header-list ;; Make `curl' remove the HTTP header field "Expect" for ;; avoiding '417 Expectation Failed' HTTP response error. ;; The header field is automatically added for a HTTP request ;; exceeding 1024 byte. See ;; http://d.hatena.ne.jp/imait/20091228/1262004813 and ;; http://www.escafrace.co.jp/blog/09/10/16/1008 ("Expect" . ""))) (curl-args `("--include" "--silent" "--compressed" ,@(apply 'append (mapcar (lambda (pair) ;; Do not overwrite internal headers `curl' would use. ;; Thanks to William Xu. ;; "cURL - How To Use" ;; http://curl.haxx.se/docs/manpage.html (unless (string= (car pair) "Host") `("-H" ,(format "%s: %s" (car pair) (cdr pair))))) header-list)) ,@(when use-ssl `("--cacert" ,cacert-file-body)) ,@(when (and use-ssl allow-insecure-server-cert) `("--insecure")) ,@(when (and use-proxy proxy-server proxy-port) (append `("-x" ,(format "%s:%s" proxy-server proxy-port)) (when (and proxy-user proxy-password) `("-U" ,(format "%s:%s" proxy-user proxy-password))))) ,@(when (string= "POST" method) `("-d" ,(or post-body ""))) ,uri)) (coding-system-for-read 'binary) (coding-system-for-write 'binary) (default-directory ;; If `use-ssl' is non-nil, the `curl' process ;; is executed at the same directory as the temporary cert file. ;; Without changing directory, `curl' misses the cert file if ;; you use Emacs on Cygwin because the path on Emacs differs ;; from Windows. ;; With changing directory, `curl' on Windows can find the cert ;; file if you use Emacs on Cygwin. (if use-ssl cacert-file-base-directory default-directory))) (twittering-start-process-with-sentinel name buffer twittering-curl-program curl-args sentinel))) (defun twittering-pre-process-buffer-curl (proc buffer connection-info) (let ((use-ssl (cdr (assq 'use-ssl connection-info))) (use-proxy (cdr (assq 'use-proxy connection-info)))) (when (and use-ssl use-proxy) ;; When using SSL via a proxy with CONNECT method, ;; omit a successful HTTP response and headers if they seem to be ;; sent from the proxy. (with-current-buffer buffer (save-excursion (goto-char (point-min)) (let ((first-regexp ;; successful HTTP response "\\`HTTP/1\.[01] 2[0-9][0-9] .*?\r?\n") (next-regexp ;; following HTTP response "^\\(\r?\n\\)HTTP/1\.[01] [0-9][0-9][0-9] .*?\r?\n")) (when (and (search-forward-regexp first-regexp nil t) (search-forward-regexp next-regexp nil t)) (let ((beg (point-min)) (end (match-end 1))) (delete-region beg end))))))))) ;;;; ;;;; Basic HTTP functions with wget ;;;; (defun twittering-find-wget-program () "Returns an appropriate `wget' program pathname or nil if not found." (executable-find "wget")) (defun twittering-start-http-session-wget-p () "Return t if `wget' was installed, otherwise nil." (unless twittering-wget-program (setq twittering-wget-program (twittering-find-wget-program))) (not (null twittering-wget-program))) (defun twittering-send-http-request-wget (name buffer connection-info sentinel) (let* ((request (cdr (assq 'request connection-info))) (method (cdr (assq 'method request))) (scheme (cdr (assq 'scheme request))) (uri (cdr (assq 'uri request))) (header-list (cdr (assq 'header-list request))) (post-body (cdr (assq 'post-body request))) (use-proxy (cdr (assq 'use-proxy connection-info))) (proxy-server (cdr (assq 'proxy-server connection-info))) (proxy-port (cdr (assq 'proxy-port connection-info))) (proxy-user (cdr (assq 'proxy-user connection-info))) (proxy-password (cdr (assq 'proxy-password connection-info))) (use-ssl (cdr (assq 'use-ssl connection-info))) (allow-insecure-server-cert (cdr (assq 'allow-insecure-server-cert connection-info))) (cacert-file-fullpath (cdr (assq 'cacert-file-fullpath connection-info))) (cacert-file-base-directory (when cacert-file-fullpath (file-name-directory cacert-file-fullpath))) (cacert-file-body (when cacert-file-fullpath (file-name-nondirectory cacert-file-fullpath))) (args `("--save-headers" "--quiet" "--output-document=-" ,@(remove nil (mapcar (lambda (pair) (unless (string= (car pair) "Host") (format "--header=%s: %s" (car pair) (cdr pair)))) header-list)) ,@(when use-ssl `(,(format "--ca-certificate=%s" cacert-file-body))) ,@(when (and use-ssl allow-insecure-server-cert) `("--no-check-certificate")) ,@(cond ((not use-proxy) '("--no-proxy")) ((and use-proxy proxy-server proxy-port proxy-user proxy-password) `(,(format "--proxy-user=%s" proxy-user) ,(format "--proxy-password=%s" proxy-password))) (t nil)) ,@(when (string= "POST" method) `(,(concat "--post-data=" (or post-body "")))) ,uri)) (coding-system-for-read 'binary) (coding-system-for-write 'binary) (default-directory ;; If `use-ssl' is non-nil, the `wget' process ;; is executed at the same directory as the temporary cert file. ;; Without changing directory, `wget' misses the cert file if ;; you use Emacs on Cygwin because the path on Emacs differs ;; from Windows. ;; With changing directory, `wget' on Windows can find the cert ;; file if you use Emacs on Cygwin. (if use-ssl cacert-file-base-directory default-directory)) (process-environment `(,@(when (and use-proxy proxy-server proxy-port) `(,(format "%s_proxy=%s://%s:%s/" scheme scheme proxy-server proxy-port))) ,@process-environment))) (twittering-start-process-with-sentinel name buffer twittering-wget-program args sentinel))) (defun twittering-pre-process-buffer-wget (proc buffer connection-info) (with-current-buffer buffer (save-excursion (goto-char (point-min)) (when (search-forward-regexp "\\`[^\n]*?\r\r\n" (point-max) t) ;; When `wget.exe' writes HTTP response in text mode, ;; CRLF may be converted into CRCRLF. (goto-char (point-min)) (while (search-forward "\r\n" nil t) (replace-match "\n" nil t))) (goto-char (point-max)) (when (search-backward-regexp "\nProcess [^\n]* finished\n\\'" (point-min) t) (replace-match "" nil t)) ))) ;;;; ;;;; Basic HTTP functions with url library ;;;; (defun twittering-start-http-session-urllib-p () "Return t if url library is available, otherwise nil." (require 'url nil t)) (defun twittering-start-http-session-urllib-https-p () "Return t if url library can be used for HTTPS, otherwise nil." (and (not twittering-proxy-use) (require 'url nil t) (cond ((<= 22 emacs-major-version) ;; On Emacs22 and later, `url' requires `tls'. (twittering-start-http-session-native-tls-p)) ((require 'ssl nil t) ;; On Emacs21, `url' requires `ssl'. t) ((or (and (fboundp 'open-ssl-stream) ;; Since `url-gw' (required by `url') defines autoload of ;; `open-ssl-stream' from "ssl", ;; (fboundp 'open-ssl-stream) will be non-nil even if ;; "ssl" cannot be loaded and `open-ssl-stream' is ;; unavailable. ;; Here, the availability is confirmed by `documentation'. (documentation 'open-ssl-stream)) ;; On Emacs21, `url' requires `ssl' in order to use ;; `open-ssl-stream', which is included in `ssl.el'. ;; Even if `ssl' cannot be loaded, `open-tls-stream' can be ;; used as an alternative of the function. (and (twittering-start-http-session-native-tls-p) (defalias 'open-ssl-stream 'open-tls-stream))) (provide 'ssl) t) (t nil)))) (defun twittering-send-http-request-urllib (name buffer connection-info sentinel) (let* ((request (cdr (assq 'request connection-info))) (method (cdr (assq 'method request))) (scheme (cdr (assq 'scheme request))) (uri (cdr (assq 'uri request))) (header-list (cdr (assq 'header-list request))) (post-body (cdr (assq 'post-body request))) (use-proxy (cdr (assq 'use-proxy connection-info))) (proxy-server (cdr (assq 'proxy-server connection-info))) (proxy-port (cdr (assq 'proxy-port connection-info))) (proxy-user (cdr (assq 'proxy-user connection-info))) (proxy-password (cdr (assq 'proxy-password connection-info))) (proxy-credentials (when (and proxy-user proxy-password) (concat "Basic " (base64-encode-string (concat proxy-user ":" proxy-password))))) (coding-system-for-read 'binary) (coding-system-for-write 'binary) (url-proxy-services (when use-proxy `((,scheme . ,(format "%s:%s" proxy-server proxy-port))))) (url-request-method method) (url-request-extra-headers ;; Remove some headers that should be configured by url library. ;; They may break redirections by url library because ;; `url-request-extra-headers' overwrites the new headers ;; that are adapted to redirected connection. (apply 'append (mapcar (lambda (pair) (if (member (car pair) '("Host" "Content-Length")) nil `(,pair))) (if proxy-credentials (cons `("Proxy-Authorization" ,proxy-credentials) header-list) header-list)))) (url-request-data post-body) (url-show-status twittering-url-show-status) (url-http-attempt-keepalives nil) (tls-program twittering-tls-program) (coding-system-for-read 'binary) (coding-system-for-write 'binary)) (lexical-let ((sentinel sentinel) (buffer buffer)) (let ((result-buffer (url-retrieve uri (lambda (&rest args) (let ((proc url-http-process) (url-buffer (current-buffer)) (status-str (if (and (< emacs-major-version 22) (boundp 'url-http-end-of-headers) url-http-end-of-headers) "urllib-finished" "finished"))) ;; Callback may be called multiple times. ;; (as filter and sentinel?) (unless (local-variable-if-set-p 'twittering-retrieved) (set (make-local-variable 'twittering-retrieved) 'not-completed) (with-current-buffer buffer (set-buffer-multibyte nil) (insert-buffer-substring url-buffer)) (set-process-buffer proc buffer) (unwind-protect (apply sentinel proc status-str nil) (set-process-buffer proc url-buffer) (if (eq twittering-retrieved 'exited) (url-mark-buffer-as-dead url-buffer) (setq twittering-retrieved 'completed)))) (when (memq (process-status proc) '(nil closed exit failed signal)) ;; Mark `url-buffer' as dead when the process exited ;; and `sentinel' is completed. ;; If this `lambda' is evaluated via a filter, the ;; process may exit before it is finished to evaluate ;; `(apply sentinel ...)'. In the case, `buffer' should ;; not be killed. It should be killed after the ;; evaluation of `sentinel'. (if (eq twittering-retrieved 'completed) (url-mark-buffer-as-dead url-buffer) (setq twittering-retrieved 'exited)))))))) (when (buffer-live-p result-buffer) (with-current-buffer result-buffer (set (make-local-variable 'url-show-status) twittering-url-show-status) ;; Make `url-http-attempt-keepalives' buffer-local ;; in order to send the current value of the variable ;; to the sentinel invoked for HTTP redirection, (make-local-variable 'url-http-attempt-keepalives)) (get-buffer-process result-buffer)))))) (defun twittering-pre-process-buffer-urllib (proc buffer connection-info) (with-current-buffer buffer (save-excursion (goto-char (point-max)) (cond ((search-backward-regexp "- Peer has closed the GNUTLS connection\r?\n\\'" nil t) (let ((beg (match-beginning 0)) (end (match-end 0))) (delete-region beg end))) ((search-backward-regexp "closed\r?\n\\'" nil t) (let ((beg (match-beginning 0)) (end (match-end 0))) (delete-region beg end))) (t nil))))) ;;;; ;;;; HTTP functions for twitter-like serivce ;;;; (defun twittering-http-application-headers (&optional method headers) "Return an assoc list of HTTP headers for twittering-mode." (unless method (setq method "GET")) (let ((headers headers)) (push (cons "User-Agent" (twittering-user-agent)) headers) (when (string= "GET" method) (push (cons "Accept" (concat "text/xml" ",application/xml" ",application/xhtml+xml" ",application/html;q=0.9" ",text/plain;q=0.8" ",image/png,*/*;q=0.5")) headers) (push (cons "Accept-Charset" "utf-8;q=0.7,*;q=0.7") headers)) (when (string= "POST" method) (push (cons "Content-Type" "text/plain") headers)) headers )) (defun twittering-add-application-header-to-http-request (request account-info) "Make a new HTTP request based on REQUEST with the authorization header. The authorization header is generated from ACCOUNT-INFO. ACCOUNT-INFO must be an alist that includes the following keys; \"screen_name\" and \"password\" if `twittering-auth-method' is 'basic, \"screen_name\", \"oauth_token\" and \"oauth_token_secret\" if `twittering-auth-method' is 'oauth or 'xauth." (let* ((method (cdr (assq 'method request))) (auth-str (cond ((eq twittering-auth-method 'basic) (twittering-make-basic-authentication-string account-info)) ((memq twittering-auth-method '(oauth xauth)) (twittering-make-oauth-authentication-string account-info request)) (t nil))) (cookie-str (twittering-make-cookie-string request account-info)) (application-headers `(,@(twittering-http-application-headers method) ("Authorization" . ,auth-str) ,@(when cookie-str `(("Cookie" . ,cookie-str)))))) (mapcar (lambda (entry) (if (eq (car entry) 'header-list) `(header-list . ,(append (cdr entry) application-headers)) entry)) request))) (defun twittering-get-error-message (header-info connection-info &optional buffer) "Return an error message generated from the arguments. HEADER-INFO must be an alist generated by `twittering-get-response-header'. CONNECTION-INFO must be an alist generated by `twittering-make-connection-info'. It may include some additional information which is added by `twittering-send-http-request'. BUFFER must be nil or a HTTP response body, which includes error messages from the server when the HTTP status code equals to 400 or 403. If BUFFER is nil, the current buffer is used instead." (let ((buffer (or buffer (current-buffer))) (status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (format (twittering-get-content-subtype-symbol-from-header-info header-info))) (cond ((and (buffer-live-p buffer) (member status-code '("400" "401" "403" "404"))) ;; Twitter returns an error message as a HTTP response body if ;; HTTP status is "400 Bad Request" or "403 Forbidden". ;; See "HTTP Response Codes and Errors | dev.twitter.com" ;; http://dev.twitter.com/pages/responses_errors . ;; ;; However, Twitter seems to return an error message even when ;; the HTTP status is "401 Unauthorized" or "404 Not Found". (let* ((error-mes (cond ((eq format 'xml) (let ((xmltree (with-current-buffer buffer (twittering-xml-parse-region (point-min) (point-max))))) (car (cddr (assq 'error (or (assq 'errors xmltree) (assq 'hash xmltree))))))) ((eq format 'json) (let ((json-object (with-current-buffer buffer (twittering-json-read)))) (cdr (assq 'error json-object)))) (t ;; ATOM is not supported. nil)))) (if error-mes (format "%s (%s)" status-line error-mes) status-line))) (t status-line)))) (defun twittering-http-get (account-info-alist host method &optional parameters format additional-info sentinel clean-up-sentinel) "Send a HTTP GET request with application headers. ACCOUNT-INFO-ALIST is an alist used by `twittering-add-application-header-to-http-request'. The alist made by `((account-info . ,ACCOUNT-INFO-ALIST) ,@ADDITIONAL-INFO)' is used as the argument `additional-info' of `twittering-send-http-request'. HOST is hostname of remote side, api.twitter.com (or search.twitter.com). METHOD must be one of Twitter API method classes (statuses, users or direct_messages). PARAMETERS is alist of URI parameters. ex) ((\"mode\" . \"view\") (\"page\" . \"6\")) => ?mode=view&page=6 FORMAT is a response data format (\"xml\", \"atom\", \"json\")" (let* ((format (or format "xml")) (sentinel (lexical-let ((sentinel (or sentinel 'twittering-http-get-default-sentinel))) (lambda (proc status connection-info header-info) (twittering-update-server-info connection-info header-info) (apply sentinel proc status connection-info header-info nil)))) (path (concat "/" method "." format)) (headers nil) (port nil) (post-body "") (request (twittering-add-application-header-to-http-request (twittering-make-http-request "GET" headers host port path parameters post-body twittering-use-ssl) account-info-alist)) (additional-info `((account-info . ,account-info-alist) ,@additional-info))) (twittering-send-http-request request additional-info sentinel clean-up-sentinel))) (defun twittering-http-get-default-sentinel (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (format (twittering-get-content-subtype-symbol-from-header-info header-info))) (case-string status-code (("200") (debug-printf "connection-info=%s" connection-info) (let* ((spec (cdr (assq 'timeline-spec connection-info))) (spec-string (cdr (assq 'timeline-spec-string connection-info))) (service-method (cdr (assq 'service-method connection-info))) (statuses (cond ((eq format 'json) (let ((json-array (twittering-json-read))) (cond ((null json-array) nil) ((eq (car spec) 'search) (cond ((memq service-method '(twitter statusnet)) (mapcar 'twittering-json-object-to-a-status-on-search (cdr (assq 'results json-array)))) ((eq service-method 'twitter-api-v1.1) (mapcar 'twittering-json-object-to-a-status (cdr (assq 'statuses json-array)))))) ((twittering-timeline-spec-is-direct-messages-p spec) (mapcar 'twittering-json-object-to-a-status-on-direct-messages json-array)) (t (mapcar 'twittering-json-object-to-a-status json-array))))) ((eq format 'xml) (let ((xmltree (twittering-xml-parse-region (point-min) (point-max)))) (when xmltree (twittering-xmltree-to-status xmltree)))) ((eq format 'atom) (let ((xmltree (twittering-xml-parse-region (point-min) (point-max)))) (when xmltree (twittering-atom-xmltree-to-status xmltree)))) (t nil))) (rendered-tweets nil)) (let ((updated-timeline-info (twittering-add-statuses-to-timeline-data statuses spec)) (buffer (twittering-get-buffer-from-spec spec))) ;; FIXME: We should retrieve un-retrieved statuses until ;; statuses is nil. twitter server returns nil as ;; xmltree with HTTP status-code is "200" when we ;; retrieved all un-retrieved statuses. (if twittering-notify-successful-http-get (if updated-timeline-info (concat (format "Fetching %s. Success. " spec-string) (mapconcat (lambda (info) (let ((spec-string (nth 0 info)) (num (nth 1 info))) (format "%s: +%d" spec-string num))) updated-timeline-info ", ")) (format "Fetching %s. Success. (No new tweets)" spec-string)) nil)))) (("404") ;; The requested resource does not exist. (let ((spec (cdr (assq 'timeline-spec connection-info))) (spec-string (cdr (assq 'timeline-spec-string connection-info)))) ;; Remove specs related to the invalid spec from history. (mapc (lambda (buffer) (let ((other-spec (twittering-get-timeline-spec-for-buffer buffer)) (other-spec-string (twittering-get-timeline-spec-string-for-buffer buffer))) (when (twittering-timeline-spec-depending-on-p other-spec spec) (twittering-remove-timeline-spec-string-from-history other-spec-string)))) (twittering-get-buffer-list))) (format "Response: %s" (twittering-get-error-message header-info connection-info))) (t (format "Response: %s" (twittering-get-error-message header-info connection-info)))))) (defun twittering-retrieve-single-tweet-sentinel (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (format (twittering-get-content-subtype-symbol-from-header-info header-info))) (case-string status-code (("200" "403" "404") (debug-printf "connection-info=%s" connection-info) (let* ((id (cdr (assq 'id connection-info))) (user-screen-name (cdr (assq 'user-screen-name connection-info))) (status (cond ((string= status-code "403") ;; Forbidden. Maybe a protected tweet? (twittering-make-alist-of-forbidden-tweet id user-screen-name)) ((string= status-code "404") ;; The requested resource does not exist. (twittering-make-alist-of-non-existent-tweet id user-screen-name)) ((eq format 'json) (let ((json-object (twittering-json-read))) (twittering-json-object-to-a-status json-object))) ((eq format 'xml) (let ((xmltree (twittering-xml-parse-region (point-min) (point-max)))) (when xmltree (car (twittering-xmltree-to-status `((statuses nil ,@xmltree))))))) (t nil)))) (when status (twittering-add-statuses-to-timeline-data `(,status) '(:single)) (let ((buffer (cdr (assq 'buffer connection-info))) (spec (cdr (assq 'timeline-spec connection-info))) (prop (cdr (assq 'property-to-be-redisplayed connection-info)))) (cond ((null prop) ;; The process has been invoked via `twittering-call-api' with ;; the command `retrieve-timeline', not the command ;; `retrieve-single-tweet' for rendering a replied tweet. ;; No special property that specifies regions being re-rendered ;; is given. (let ((new-statuses `(,status)) (buffer (twittering-get-buffer-from-spec spec))) (when (and new-statuses buffer) (twittering-render-timeline buffer new-statuses t)))) ((and buffer prop (buffer-live-p buffer)) (twittering-redisplay-status-on-each-buffer buffer prop) (with-current-buffer buffer (save-excursion (let ((buffer-read-only nil)) (lexical-let ((prop prop)) (twittering-for-each-property-region prop (lambda (beg end value) ;; Remove the property required no longer. (remove-text-properties beg end `(,prop nil)) (goto-char beg) (twittering-render-replied-statuses))))))))))) (cond ((string= status-code "403") (format "You are not authorized to see this tweet (ID %s)." id)) ((string= status-code "404") (format "The tweet with ID %s does not exist." id)) (twittering-notify-successful-http-get (format "Fetching %s. Success." id)) (t nil)))) (t (format "Response: %s" (twittering-get-error-message header-info connection-info)))))) (defmacro twittering-http-get-list-sentinel-base (what) `(let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (format (twittering-get-content-subtype-symbol-from-header-info header-info)) (indexes nil) (mes nil)) (case-string status-code (("200") (cond ((eq format 'xml) (let ((xmltree (twittering-xml-parse-region (point-min) (point-max)))) (when xmltree (setq indexes (mapcar (lambda (c-node) (caddr (assq ,what c-node))) (remove nil (mapcar (lambda (node) (and (consp node) (eq 'list (car node)) node)) (cdr-safe (assq 'lists (assq 'lists_list xmltree)))) )) )))) ((eq format 'json) (let* ((json-object (twittering-json-read)) (json-list (cond ((arrayp json-object) ;; GET lists/list in the Twitter REST API v1.1 returns ;; an array. json-object) (t ;; GET lists/subscriptions in the Twitter REST API v1.1 ;; returns an alist. (cdr (assq 'lists json-object)))))) (when json-object (setq indexes (mapcar (lambda (entry) (cdr (assq ,what entry))) json-list))))) (t (error "Format \"%s\" is not supported" format) nil))) (t (setq mes (format "Response: %s" (twittering-get-error-message header-info connection-info))))) (setq twittering-list-index-retrieved (or indexes mes "")) ;; set "" explicitly if user does not have a list. mes)) (defun twittering-http-get-list-index-sentinel (proc status connection-info header-info) (twittering-http-get-list-sentinel-base 'slug)) (defun twittering-http-get-list-subscriptions-sentinel (proc status connection-info header-info) (let ((result (twittering-http-get-list-sentinel-base 'full_name))) (when (listp twittering-list-index-retrieved) (setq twittering-list-index-retrieved (mapcar (lambda (str) (and (string-match "\\`@\\(.*\\)\\'" str) (match-string 1 str))) twittering-list-index-retrieved))) result)) (defun twittering-http-post (account-info-alist host method &optional parameters format additional-info sentinel clean-up-sentinel) "Send HTTP POST request to api.twitter.com (or search.twitter.com) ACCOUNT-INFO-ALIST is an alist used by `twittering-add-application-header-to-http-request'. The alist made by `((account-info . ,ACCOUNT-INFO-ALIST) ,@ADDITIONAL-INFO)' is used as the argument `additional-info' of `twittering-send-http-request'. HOST is hostname of remote side, api.twitter.com (or search.twitter.com). METHOD must be one of Twitter API method classes (statuses, users or direct_messages). PARAMETERS is alist of URI parameters. ex) ((\"mode\" . \"view\") (\"page\" . \"6\")) => ?mode=view&page=6 FORMAT is a response data format (\"xml\", \"atom\", \"json\")" (let* ((format (or format "xml")) (sentinel (lexical-let ((sentinel (or sentinel 'twittering-http-post-default-sentinel))) (lambda (proc status connection-info header-info) (twittering-update-server-info connection-info header-info) (apply sentinel proc status connection-info header-info nil)))) (path (concat "/" method "." format)) (headers nil) (port nil) (post-body "") (request (twittering-add-application-header-to-http-request (twittering-make-http-request "POST" headers host port path parameters post-body twittering-use-ssl) account-info-alist)) (additional-info `((account-info . ,account-info-alist) ,@additional-info))) (twittering-send-http-request request additional-info sentinel clean-up-sentinel))) (defun twittering-http-post-default-sentinel (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info)))) (case-string status-code (("200") "Success: Post.") (t (format "Response: %s" (twittering-get-error-message header-info connection-info)))))) (defun twittering-http-post-destroy-status-sentinel (proc status connection-info header-info) "A sentinel for deleting a status invoked via `twittering-call-api'." (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (format (twittering-get-content-subtype-symbol-from-header-info header-info))) (case-string status-code (("200") (let* ((params (cond ((eq format 'xml) (let ((xml (twittering-xml-parse-region (point-min) (point-max)))) `((id . ,(elt (assq 'id (assq 'status xml)) 2)) (text . ,(elt (assq 'text (assq 'status xml)) 2))))) ((eq format 'json) (let ((json-object (twittering-json-read))) `((id . ,(cdr (assq 'id_str json-object))) (text . ,(cdr (assq 'text json-object)))))) (t (error "Format \"%s\" is not supported" format) nil))) (id (cdr (assq 'id params))) (text (cdr (assq 'text params)))) (cond (id (twittering-delete-status-from-data-table id) (format "Deleting \"%s\". Success." text)) (t "Failure: the response for deletion could not be parsed.")))) (t (format "Response: %s" (twittering-get-error-message header-info connection-info)))))) ;;;; ;;;; OAuth ;;;; (defun twittering-oauth-url-encode (str &optional coding-system) "Encode string according to Percent-Encoding defined in RFC 3986." (let ((coding-system (or (when (and coding-system (coding-system-p coding-system)) coding-system) 'utf-8))) (mapconcat (lambda (c) (cond ((or (and (<= ?A c) (<= c ?Z)) (and (<= ?a c) (<= c ?z)) (and (<= ?0 c) (<= c ?9)) (eq ?. c) (eq ?- c) (eq ?_ c) (eq ?~ c)) (char-to-string c)) (t (format "%%%02X" c)))) (encode-coding-string str coding-system) ""))) (defun twittering-oauth-unhex (c) (cond ((and (<= ?0 c) (<= c ?9)) (- c ?0)) ((and (<= ?A c) (<= c ?F)) (+ 10 (- c ?A))) ((and (<= ?a c) (<= c ?f)) (+ 10 (- c ?a))) )) (defun twittering-oauth-url-decode (str &optional coding-system) (let* ((coding-system (or (when (and coding-system (coding-system-p coding-system)) coding-system) 'utf-8)) (substr-list (split-string str "%")) (head (car substr-list)) (tail (cdr substr-list))) (decode-coding-string (concat head (mapconcat (lambda (substr) (if (string-match "\\`\\([0-9a-fA-F]\\)\\([0-9a-fA-F]\\)\\(.*\\)\\'" substr) (let* ((c1 (string-to-char (match-string 1 substr))) (c0 (string-to-char (match-string 2 substr))) (tail (match-string 3 substr)) (ch (+ (* 16 (twittering-oauth-unhex c1)) (twittering-oauth-unhex c0)))) (concat (char-to-string ch) tail)) substr)) tail "")) coding-system))) (defun twittering-oauth-make-signature-base-string (method base-url parameters) ;; "OAuth Core 1.0a" ;; http://oauth.net/core/1.0a/#anchor13 (let* ((sorted-parameters (copy-sequence parameters)) (sorted-parameters (sort sorted-parameters (lambda (entry1 entry2) (string< (car entry1) (car entry2)))))) (concat method "&" (twittering-oauth-url-encode base-url) "&" (mapconcat (lambda (entry) (let ((key (car entry)) (value (cdr entry))) (concat (twittering-oauth-url-encode key) "%3D" (twittering-oauth-url-encode value)))) sorted-parameters "%26")))) (defun twittering-oauth-make-random-string (len) (let* ((table (concat "0123456789" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz")) (n (length table)) (l 0) (result (make-string len ?0))) (while (< l len) (aset result l (aref table (random n))) (setq l (1+ l))) result)) (defun twittering-sha1 (&rest args) "Return the SHA1 (Secure Hash Algorithm) of an object. This is equivalent to the function `sha1' except that `coding-system-for-read' and `coding-system-for-write' are bound to the symbol `binary'. The function `sha1' uses an external program for large object. However, the coding system for transferring data from/to the program is not fixed, at least in the implementation distributed with GNU Emacs 21.4.1, 22.2.1 and 23.2.1. Therefore, the result from the function `sha1' may depend on the current coding system. This function avoid the dependency by binding `coding-system-for-read' and `coding-system-for-write' to the symbol `binary'." (require 'sha1) (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (apply 'sha1 args))) ;;; ;;; The below function is derived from `hmac-sha1' retrieved ;;; from http://www.emacswiki.org/emacs/HmacShaOne. ;;; (defun twittering-hmac-sha1 (key message) "Return an HMAC-SHA1 authentication code for KEY and MESSAGE. KEY and MESSAGE must be unibyte strings. The result is a unibyte string. Use the function `encode-hex-string' or the function `base64-encode-string' to produce human-readable output. See URL: for more information on the HMAC-SHA1 algorithm. The Emacs multibyte representation actually uses a series of 8-bit values under the hood, so we could have allowed multibyte strings as arguments. However, internal 8-bit values don't correspond to any external representation \(at least for major version 22). This makes multibyte strings useless for generating hashes. Instead, callers must explicitly pick and use an encoding for their multibyte data. Most callers will want to use UTF-8 encoding, which we can generate as follows: (let ((unibyte-key (encode-coding-string key 'utf-8 t)) (unibyte-value (encode-coding-string value 'utf-8 t))) (twittering-hmac-sha1 unibyte-key unibyte-value)) For keys and values that are already unibyte, the `encode-coding-string' calls just return the same string." ;;; Return an HMAC-SHA1 authentication code for KEY and MESSAGE. ;;; ;;; KEY and MESSAGE must be unibyte strings. The result is a unibyte ;;; string. Use the function `encode-hex-string' or the function ;;; `base64-encode-string' to produce human-readable output. ;;; ;;; See URL: for more information ;;; on the HMAC-SHA1 algorithm. ;;; ;;; The Emacs multibyte representation actually uses a series of ;;; 8-bit values under the hood, so we could have allowed multibyte ;;; strings as arguments. However, internal 8-bit values don't ;;; correspond to any external representation \(at least for major ;;; version 22). This makes multibyte strings useless for generating ;;; hashes. ;;; ;;; Instead, callers must explicitly pick and use an encoding for ;;; their multibyte data. Most callers will want to use UTF-8 ;;; encoding, which we can generate as follows: ;;; ;;; (let ((unibyte-key (encode-coding-string key 'utf-8 t)) ;;; (unibyte-value (encode-coding-string value 'utf-8 t))) ;;; (hmac-sha1 unibyte-key unibyte-value)) ;;; ;;; For keys and values that are already unibyte, the ;;; `encode-coding-string' calls just return the same string. ;;; ;;; Author: Derek Upham - sand (at) blarg.net ;;; ;;; Copyright: This code is in the public domain. (require 'sha1) (when (multibyte-string-p key) (error "key must be unibyte")) (when (multibyte-string-p message) (error "message must be unibyte")) ;; The key block is always exactly the block size of the hash ;; algorithm. If the key is too small, we pad it with zeroes (or ;; instead, we initialize the key block with zeroes and copy the ;; key onto the nulls). If the key is too large, we run it ;; through the hash algorithm and use the hashed value (strange ;; but true). (let ((+hmac-sha1-block-size-bytes+ 64)) ; SHA-1 uses 512-bit blocks (when (< +hmac-sha1-block-size-bytes+ (length key)) (setq key (twittering-sha1 key nil nil t))) (let ((key-block (make-vector +hmac-sha1-block-size-bytes+ 0))) (dotimes (i (length key)) (aset key-block i (aref key i))) (let ((opad (make-vector +hmac-sha1-block-size-bytes+ #x5c)) (ipad (make-vector +hmac-sha1-block-size-bytes+ #x36))) (dotimes (i +hmac-sha1-block-size-bytes+) (aset ipad i (logxor (aref ipad i) (aref key-block i))) (aset opad i (logxor (aref opad i) (aref key-block i)))) (when (fboundp 'unibyte-string) ;; `concat' of Emacs23 (and later?) generates a multi-byte ;; string from a vector of characters with eight bit. ;; Since `opad' and `ipad' must be unibyte, we have to ;; convert them by using `unibyte-string'. ;; We cannot use `string-as-unibyte' here because it encodes ;; bytes with the manner of UTF-8. (setq opad (apply 'unibyte-string (mapcar 'identity opad))) (setq ipad (apply 'unibyte-string (mapcar 'identity ipad)))) (twittering-sha1 (concat opad (twittering-sha1 (concat ipad message) nil nil t)) nil nil t))))) (defun twittering-oauth-auth-str (method base-url query-parameters oauth-parameters key) "Generate the value for HTTP Authorization header on OAuth. QUERY-PARAMETERS is an alist for query parameters, where name and value must be encoded into the same as they will be sent." (let* ((parameters (append query-parameters oauth-parameters)) (base-string (twittering-oauth-make-signature-base-string method base-url parameters)) (key (if (multibyte-string-p key) (string-make-unibyte key) key)) (base-string (if (multibyte-string-p base-string) (string-make-unibyte base-string) base-string)) (signature (base64-encode-string (twittering-hmac-sha1 key base-string)))) (concat "OAuth " (mapconcat (lambda (entry) (concat (car entry) "=\"" (cdr entry) "\"")) oauth-parameters ",") ",oauth_signature=\"" (twittering-oauth-url-encode signature) "\""))) (defun twittering-oauth-auth-str-request-token (url query-parameters consumer-key consumer-secret &optional oauth-parameters) (let ((key (concat consumer-secret "&")) (oauth-params (or oauth-parameters `(("oauth_nonce" . ,(twittering-oauth-make-random-string 43)) ("oauth_callback" . "oob") ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . ,(format-time-string "%s")) ("oauth_consumer_key" . ,consumer-key) ("oauth_version" . "1.0"))))) (twittering-oauth-auth-str "POST" url query-parameters oauth-params key))) (defun twittering-oauth-auth-str-exchange-token (url query-parameters consumer-key consumer-secret request-token request-token-secret verifier &optional oauth-parameters) (let ((key (concat consumer-secret "&" request-token-secret)) (oauth-params (or oauth-parameters `(("oauth_consumer_key" . ,consumer-key) ("oauth_nonce" . ,(twittering-oauth-make-random-string 43)) ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . ,(format-time-string "%s")) ("oauth_version" . "1.0") ("oauth_token" . ,request-token) ("oauth_verifier" . ,verifier))))) (twittering-oauth-auth-str "POST" url query-parameters oauth-params key))) (defun twittering-oauth-auth-str-access (method url query-parameters consumer-key consumer-secret access-token access-token-secret &optional oauth-parameters) "Generate a string for Authorization in HTTP header on OAuth. METHOD means HTTP method such as \"GET\", \"POST\", etc. URL means a simple URL without port number and query parameters. QUERY-PARAMETERS means an alist of query parameters such as '((\"status\" . \"test%20tweet\") (\"in_reply_to_status_id\" . \"12345678\")), where name and value must be encoded into the same as they will be sent. CONSUMER-KEY and CONSUMER-SECRET specifies the consumer. ACCESS-TOKEN and ACCESS-TOKEN-SECRET must be authorized before calling this function." (let ((key (concat consumer-secret "&" access-token-secret)) (oauth-params (or oauth-parameters `(("oauth_consumer_key" . ,consumer-key) ("oauth_nonce" . ,(twittering-oauth-make-random-string 43)) ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . ,(format-time-string "%s")) ("oauth_version" . "1.0") ("oauth_token" . ,access-token))))) (twittering-oauth-auth-str method url query-parameters oauth-params key))) ;; "Using xAuth | dev.twitter.com" ;; http://dev.twitter.com/pages/xauth (defun twittering-xauth-auth-str-access-token (url query-parameters consumer-key consumer-secret username password &optional oauth-parameters) (let ((key (concat consumer-secret "&")) (oauth-params (or oauth-parameters `(("oauth_nonce" . ,(twittering-oauth-make-random-string 43)) ("oauth_signature_method" . "HMAC-SHA1") ("oauth_timestamp" . ,(format-time-string "%s")) ("oauth_consumer_key" . ,consumer-key) ("oauth_version" . "1.0")))) (query-params (append query-parameters `(("x_auth_mode" . "client_auth") ("x_auth_password" . ,(twittering-oauth-url-encode password)) ("x_auth_username" . ,(twittering-oauth-url-encode username)))))) (twittering-oauth-auth-str "POST" url query-params oauth-params key))) ;; "OAuth Core 1.0a" ;; http://oauth.net/core/1.0a/#response_parameters (defun twittering-oauth-make-response-alist (str) (mapcar (lambda (entry) (let* ((pair (split-string entry "=")) (name-entry (car pair)) (value-entry (cadr pair)) (name (and name-entry (twittering-oauth-url-decode name-entry))) (value (and value-entry (twittering-oauth-url-decode value-entry)))) `(,name . ,value))) (split-string str "&"))) (defun twittering-oauth-get-response-alist (buffer) (with-current-buffer buffer (goto-char (point-min)) (when (search-forward-regexp "\\`\\(\\(HTTP/1\.[01]\\) \\([0-9][0-9][0-9]\\) \\(.*?\\)\\)\r?\n" nil t) (let ((status-line (match-string 1)) (http-version (match-string 2)) (status-code (match-string 3)) (reason-phrase (match-string 4))) (cond ((not (string-match "2[0-9][0-9]" status-code)) (message "Response: %s" status-line) nil) ((search-forward-regexp "\r?\n\r?\n" nil t) (let ((beg (match-end 0)) (end (point-max))) (twittering-oauth-make-response-alist (buffer-substring beg end)))) (t (message "Response: %s" status-line) nil)))))) (defun twittering-oauth-get-token-alist-url (url auth-str post-body) (let* ((url-request-method "POST") (url-request-extra-headers `(("Authorization" . ,auth-str) ("Accept-Charset" . "us-ascii") ("Content-Type" . "application/x-www-form-urlencoded") ("Content-Length" . ,(format "%d" (length post-body))))) (url-request-data post-body) (coding-system-for-read 'utf-8-unix)) (lexical-let ((result 'queried)) (let ((buffer (url-retrieve url (lambda (&rest args) (let* ((status (if (< 21 emacs-major-version) (car args) nil)) (callback-args (if (< 21 emacs-major-version) (cdr args) args)) (response-buffer (current-buffer))) (setq result (twittering-oauth-get-response-alist response-buffer)) ))))) (while (eq result 'queried) (sit-for 0.1)) (unless twittering-debug-mode (kill-buffer buffer)) result)))) (defun twittering-oauth-get-token-alist (url auth-str &optional post-body) (let ((request (twittering-make-http-request-from-uri "POST" `(("Authorization" . ,auth-str) ("Accept-Charset" . "us-ascii") ("Content-Type" . "application/x-www-form-urlencoded")) url post-body))) (lexical-let ((result 'queried)) (let ((proc (twittering-send-http-request request nil (lambda (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info)))) (case-string status-code (("200") (when twittering-debug-mode (let ((buffer (current-buffer))) (with-current-buffer (twittering-debug-buffer) (insert-buffer-substring buffer)))) (setq result (twittering-oauth-make-response-alist (buffer-string))) nil) (t (setq result nil) (format "Response: %s" status-line))))) (lambda (proc status connection-info) (when (and (not (twittering-process-alive-p proc)) (eq result 'queried)) (setq result nil)))))) (twittering-wait-while nil 0.1 (and (eq result 'queried) (twittering-process-alive-p proc))) (when (and (eq result 'queried) (not (twittering-process-alive-p proc))) ;; If the process has been dead, wait a moment because ;; Emacs may be in the middle of evaluating the sentinel. (twittering-wait-while 10 0.1 (eq result 'queried) nil (setq result nil))) result)))) (defun twittering-oauth-get-request-token (url consumer-key consumer-secret) (let ((auth-str (twittering-oauth-auth-str-request-token url nil consumer-key consumer-secret))) (twittering-oauth-get-token-alist url auth-str))) (defun twittering-oauth-exchange-request-token (url consumer-key consumer-secret request-token request-token-secret verifier) (let ((auth-str (twittering-oauth-auth-str-exchange-token url nil consumer-key consumer-secret request-token request-token-secret verifier))) (twittering-oauth-get-token-alist url auth-str))) (defun twittering-oauth-get-access-token (request-token-url authorize-url-func access-token-url consumer-key consumer-secret consumer-name) "Return an alist of authorized access token. The function retrieves a request token from the site specified by REQUEST-TOKEN-URL. Then, The function asks a WWW browser to authorize the token by calling `browse-url'. The URL for authorization is calculated by calling AUTHORIZE-URL-FUNC with the request token as an argument. AUTHORIZE-URL-FUNC is called as `(funcal AUTHORIZE-URL-FUNC request-token)', where the request-token is a string. After calling `browse-url', the function waits for user to input the PIN code that is displayed in the browser. The request token is authorized by the PIN code, and then it is exchanged for the access token on the site specified by ACCESS-TOKEN-URL. CONSUMER-KEY and CONSUMER-SECRET specify the consumer. CONSUMER-NAME is displayed at the guide of authorization. The access token is returned as a list of a cons pair of name and value like following: ((\"oauth_token\" . \"819797-Jxq8aYUDRmykzVKrgoLhXSq67TEa5ruc4GJC2rWimw\") (\"oauth_token_secret\" . \"J6zix3FfA9LofH0awS24M3HcBYXO5nI1iYe8EfBA\") (\"user_id\" . \"819797\") (\"screen_name\" . \"episod\")) ." (let* ((request-token-alist (twittering-oauth-get-request-token request-token-url consumer-key consumer-secret)) (request-token (cdr (assoc "oauth_token" request-token-alist))) (request-token-secret (cdr (assoc "oauth_token_secret" request-token-alist))) (authorize-url (funcall authorize-url-func request-token)) (str (concat (propertize "Authorization via OAuth\n" 'face 'bold) "\n" "1.Allow access by " consumer-name " on the below site.\n" "\n " (propertize authorize-url 'url authorize-url 'face 'bold) "\n" "\n" (when twittering-oauth-invoke-browser (concat " Emacs invokes your browser by the function `browse-url'.\n" " If the site is not opened automatically, you have to open\n" " the site manually.\n" "\n")) "2.After allowing access, the site will display the PIN code." "\n" " Input the PIN code " (propertize "at the below minibuffer." 'face 'bold)))) (cond (request-token-alist (with-temp-buffer (switch-to-buffer (current-buffer)) (let* ((str-height (length (split-string str "\n"))) (height (max 0 (- (/ (- (window-text-height) 1) 2) (/ str-height 2))))) (insert (make-string height ?\n) str) (if twittering-oauth-invoke-browser (browse-url authorize-url) (when (y-or-n-p "Open authorization URL with browser? (using `browse-url')") (browse-url authorize-url))) (let* ((pin (block pin-input-block (while t (let ((pin-input (read-string "Input PIN code: "))) (when (string-match "^\\s-*\\([0-9]+\\)\\s-*$" pin-input) (return-from pin-input-block (match-string 1 pin-input))))))) (verifier pin)) (twittering-oauth-exchange-request-token access-token-url consumer-key consumer-secret request-token request-token-secret verifier))))) (t (error "Failed to retrieve a request token") nil)))) (defun twittering-xauth-get-access-token (access-token-url consumer-key consumer-secret username password) (let ((auth-str (twittering-xauth-auth-str-access-token access-token-url nil consumer-key consumer-secret username password)) (post-body (mapconcat (lambda (pair) (format "%s=%s" (car pair) (twittering-oauth-url-encode (cdr pair)))) `(("x_auth_mode" . "client_auth") ("x_auth_password" . ,password) ("x_auth_username" . ,username)) "&"))) (twittering-oauth-get-token-alist access-token-url auth-str post-body))) ;;;; ;;;; Private storage ;;;; (defun twittering-private-info-loaded-p () twittering-private-info-file-loaded) (defun twittering-load-private-info () (let* ((file twittering-private-info-file) (decrypted-str (twittering-read-from-encrypted-file file)) (loaded-alist (when decrypted-str (condition-case nil (read decrypted-str) (error nil))))) (when loaded-alist (remove nil (mapcar (lambda (pair) (when (consp pair) (let ((sym (car pair)) (value (cdr pair))) (cond ((memq sym twittering-variables-stored-with-encryption) (set sym value) sym) (t nil))))) loaded-alist))))) (defun twittering-load-private-info-with-guide () (let ((str (concat "Loading authorized access token for OAuth from\n" (format "%s.\n" twittering-private-info-file) "\n" (propertize "Please input the master password.\n" 'face 'bold) "\n" "To cancel it, you may need to press C-g multiple times.\n" ))) (with-temp-buffer (switch-to-buffer (current-buffer)) (let* ((str-height (length (split-string str "\n"))) (height (max 0 (- (/ (- (window-text-height) 1) 2) (/ str-height 2))))) (insert (make-string height ?\n) str) (set-buffer-modified-p nil) (twittering-load-private-info))))) (defun twittering-save-private-info () (let* ((obj (mapcar (lambda (sym) `(,sym . ,(symbol-value sym))) twittering-variables-stored-with-encryption)) (str (with-output-to-string (pp obj))) (file twittering-private-info-file)) (when (twittering-write-and-encrypt file str) (set-file-modes file #o600) (setq twittering-private-info-file-loaded t)))) (defun twittering-save-private-info-with-guide () (let ((str (concat "Saving authorized access token for OAuth to " (format "%s.\n" twittering-private-info-file) "\n" (propertize "Please input a master password twice." 'face 'bold)))) (with-temp-buffer (switch-to-buffer (current-buffer)) (let* ((str-height (length (split-string str "\n"))) (height (max 0 (- (/ (- (window-text-height) 1) 2) (/ str-height 2))))) (insert (make-string height ?\n) str) (set-buffer-modified-p nil) (twittering-save-private-info))))) (defun twittering-capable-of-encryption-p () (and (or (require 'epa nil t) (require 'alpaca nil t)) (executable-find "gpg"))) (eval-when-compile (require 'epa nil t) (require 'alpaca nil t)) (defun twittering-read-from-encrypted-file (file) "Decrypt contents from FILE and return them. Read encrypted contents from FILE and return the decrypted contents. This function requires `epa' or `alpaca' library." (cond ((not (file-readable-p file)) (error "Failed to read %s" file) nil) ((require 'epa nil t) (let ((context (epg-make-context epa-protocol)) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (epg-context-set-passphrase-callback context #'epa-passphrase-callback-function) (epg-context-set-progress-callback context (cons #'epa-progress-callback-function (format "Decrypting %s..." (file-name-nondirectory file)))) (message "Decrypting %s..." (file-name-nondirectory file)) (condition-case err (let ((full-path (expand-file-name file))) ;; `epg-decrypt-file' included in EasyPG 1.0.0, which is ;; distributed with Emacs 23.2, requires the expanded full path ;; as the argument CIPHER. This is because CIPHER is directly ;; used as an argument of the command `gpg'. (epg-decrypt-file context full-path nil)) (error (message "%s" (cdr err)) nil)))) ((require 'alpaca nil t) (with-temp-buffer (let ((buffer-file-name (expand-file-name file)) (alpaca-regex-suffix ".*") (coding-system-for-read 'binary) (coding-system-for-write 'binary) (temp-buffer (current-buffer)) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (insert-file-contents-literally file) (set-buffer-modified-p nil) (condition-case nil (progn (alpaca-after-find-file) (if (eq temp-buffer (current-buffer)) (buffer-string) ;; `alpaca-after-find-file' kills the current buffer ;; if the decryption is failed. nil)) (error (when (eq temp-buffer (current-buffer)) (delete-region (point-min) (point-max))) nil))))) (t nil))) (defun twittering-write-and-encrypt (file str) (cond ((require 'epg nil t) (let ((context (epg-make-context epa-protocol)) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (epg-context-set-passphrase-callback context #'epa-passphrase-callback-function) (epg-context-set-progress-callback context (cons #'epa-progress-callback-function "Encrypting...")) (message "Encrypting...") (condition-case err (unwind-protect ;; In order to prevent `epa-file' to encrypt the file double, ;; `epa-file-name-regexp' is temorarily changed into the null ;; regexp that never matches any string. (let ((epa-file-name-regexp "\\`\\'") (coding-system-for-read 'binary) (coding-system-for-write 'binary)) (when (fboundp 'epa-file-name-regexp-update) (epa-file-name-regexp-update)) (with-temp-file file (set-buffer-multibyte nil) (delete-region (point-min) (point-max)) (insert (epg-encrypt-string context str nil)) (message "Encrypting...wrote %s" file) t)) (when (fboundp 'epa-file-name-regexp-update) (epa-file-name-regexp-update))) (error (message "%s" (cdr err)) nil)))) ((require 'alpaca nil t) ;; Create the file. ;; This is required because `alpaca-save-buffer' checks its timestamp. (with-temp-file file) (with-temp-buffer (let ((buffer-file-name file) (coding-system-for-read 'binary) (coding-system-for-write 'binary) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (insert str) (condition-case nil (if (alpaca-save-buffer) t (delete-file file) nil) (error (when (file-exists-p file) (delete-file file)) nil))))) (t nil))) (defun twittering-ensure-private-info () "Ensure that private information is loaded if necessary. Return non-nil if `twittering-use-master-password' is nil or private information has been already loaded. Also, return non-nil if `twittering-use-master-password' is non-nil and this function succeeded in loading private information. Return nil if private information cannot be loaded." (if (or (not twittering-use-master-password) (twittering-private-info-loaded-p)) ;; The private information is unnecessary or already loaded. t (cond ((not (twittering-capable-of-encryption-p)) (message "You need GnuPG and (EasyPG or alpaca.el) for master password!") nil) ((and (memq twittering-auth-method '(oauth xauth)) (file-exists-p twittering-private-info-file)) (cond ((twittering-load-private-info-with-guide) (setq twittering-private-info-file-loaded t) (message "The authorized token is loaded.") t) (t (message "Failed to load an authorized token from \"%s\"." twittering-private-info-file) nil))) (t ;; The file for private infomation does not exist now. t)))) ;;;; ;;;; Asynchronous retrieval ;;;; (defvar twittering-url-data-hash (make-hash-table :test 'equal)) (defvar twittering-url-request-list nil) (defvar twittering-url-request-sentinel-hash (make-hash-table :test 'equal)) (defvar twittering-internal-url-queue nil) (defvar twittering-url-request-resolving-p nil) (defvar twittering-url-request-retry-limit 3) (defvar twittering-url-request-sentinel-delay 1.0 "*Delay from completing retrieval to invoking associated sentinels. Sentinels registered by `twittering-url-retrieve-async' will be invoked after retrieval is completed and Emacs remains idle a certain time, which this variable specifies. The unit is second.") (defun twittering-remove-redundant-queries (queue) (remove nil (mapcar (lambda (url) (let ((current (gethash url twittering-url-data-hash))) (when (or (null current) (and (integerp current) (< current twittering-url-request-retry-limit))) url))) (twittering-remove-duplicates queue)))) (defun twittering-resolve-url-request () "Resolve requests of asynchronous URL retrieval." (when (null twittering-url-request-resolving-p) (setq twittering-url-request-resolving-p t) ;; It is assumed that the following part is not processed ;; in parallel. (setq twittering-internal-url-queue (append twittering-internal-url-queue twittering-url-request-list)) (setq twittering-url-request-list nil) (setq twittering-internal-url-queue (twittering-remove-redundant-queries twittering-internal-url-queue)) (if (null twittering-internal-url-queue) (setq twittering-url-request-resolving-p nil) (let* ((url (car twittering-internal-url-queue)) (request (twittering-make-http-request-from-uri "GET" nil url)) (additional-info `((uri . ,url)))) (twittering-send-http-request request additional-info 'twittering-url-retrieve-async-sentinel 'twittering-url-retrieve-async-clean-up-sentinel))))) (defun twittering-url-retrieve-async-sentinel (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (uri (cdr (assq 'uri (assq 'request connection-info))))) (when (string= status-code "200") (let ((body (string-as-unibyte (buffer-string)))) (puthash uri body twittering-url-data-hash) (setq twittering-internal-url-queue (remove uri twittering-internal-url-queue)) (let ((sentinels (gethash uri twittering-url-request-sentinel-hash))) (when sentinels (remhash uri twittering-url-request-sentinel-hash)) (twittering-run-on-idle twittering-url-request-sentinel-delay (lambda (sentinels uri body) (mapc (lambda (func) (funcall func uri body)) sentinels) ;; Resolve the rest of requests. (setq twittering-url-request-resolving-p nil) (twittering-resolve-url-request)) sentinels uri body) ;; Without the following nil, it seems that the value of ;; `sentinels' is displayed. nil))))) (defun twittering-url-retrieve-async-clean-up-sentinel (proc status connection-info) (when (memq status '(exit signal closed failed)) (let* ((uri (cdr (assq 'uri connection-info))) (current (gethash uri twittering-url-data-hash))) (when (or (null current) (integerp current)) ;; Increment the counter on failure and then retry retrieval. (puthash uri (1+ (or current 0)) twittering-url-data-hash) (setq twittering-url-request-resolving-p nil) (twittering-resolve-url-request))))) (defun twittering-url-retrieve-async (url &optional sentinel) "Retrieve URL asynchronously and call SENTINEL with the retrieved data. The request is placed at the last of queries queue. When the data has been retrieved and Emacs remains idle a certain time specified by `twittering-url-request-sentinel-delay', SENTINEL will be called as (funcall SENTINEL URL url-data). The retrieved data can be referred as (gethash URL twittering-url-data-hash)." (let ((data (gethash url twittering-url-data-hash))) (cond ((or (null data) (integerp data)) (add-to-list 'twittering-url-request-list url t) (when sentinel (let ((current (gethash url twittering-url-request-sentinel-hash))) (unless (member sentinel current) (puthash url (cons sentinel current) twittering-url-request-sentinel-hash)))) (twittering-resolve-url-request) nil) (t ;; URL has been already retrieved. (twittering-run-on-idle twittering-url-request-sentinel-delay sentinel url data) data)))) ;;;; ;;;; XML parser ;;;; (defun twittering-ucs-to-char-internal (code-point) ;; Check (featurep 'unicode) is a workaround with navi2ch to avoid ;; error "error in process sentinel: Cannot open load file: ;; unicode". ;; ;; Details: navi2ch prior to 1.8.3 (which is currently last release ;; version as of 2010-01-18) always define `ucs-to-char' as autoload ;; file "unicode(.el)" (which came from Mule-UCS), hence it breaks ;; `ucs-to-char' under non Mule-UCS environment. The problem is ;; fixed in navi2ch dated 2010-01-16 or later, but not released yet. (if (and (featurep 'unicode) (functionp 'ucs-to-char)) (ucs-to-char code-point) ;; Emacs21 have a partial support for UTF-8 text, so it can decode ;; only parts of a text with Japanese. (decode-char 'ucs code-point))) (defvar twittering-unicode-replacement-char ;; "Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD)" (or (twittering-ucs-to-char-internal #xFFFD) ??) "*Replacement character returned by `twittering-ucs-to-char' when it fails to decode a code.") (defun twittering-ucs-to-char (code-point) "Return a character specified by CODE-POINT in Unicode. If it fails to decode the code, return `twittering-unicode-replacement-char'." (or (twittering-ucs-to-char-internal code-point) twittering-unicode-replacement-char)) (defadvice decode-char (after twittering-add-fail-over-to-decode-char) (when (null ad-return-value) (setq ad-return-value twittering-unicode-replacement-char))) (defun twittering-xml-parse-region (&rest args) "Wrapped `xml-parse-region' in order to avoid decoding errors. After activating the advice `twittering-add-fail-over-to-decode-char', `xml-parse-region' is called. This prevents `xml-parse-region' from exiting abnormally by decoding unknown numeric character reference." (let ((activated (ad-is-active 'decode-char))) (ad-enable-advice 'decode-char 'after 'twittering-add-fail-over-to-decode-char) (ad-activate 'decode-char) (unwind-protect (condition-case err (apply 'xml-parse-region args) (error (message "Failed to parse the retrieved XML.") nil)) (ad-disable-advice 'decode-char 'after 'twittering-add-fail-over-to-decode-char) (if activated (ad-activate 'decode-char) (ad-deactivate 'decode-char))))) ;;;; ;;;; JSON parser with a fallback character ;;;; (defconst twittering-surrogate-pair-regexp (if (<= 23 emacs-major-version) ;; Literal strings such as "\uXXXX" is not allowed in Emacs 21 ;; and earlier. A character of invalid code point such as U+D800 ;; is not allowed in Emacs 22. ;; To avoid errors caused by literal strings invalid in Emacs 22 ;; and earlier, the regexp is generated indirectly. (format "[%c-%c][%c-%c]" (decode-char 'ucs #xd800) (decode-char 'ucs #xdbff) (decode-char 'ucs #xdc00) (decode-char 'ucs #xdfff)) ;; A regexp that never matches any strings. "\\'\\`") "Regexp to match a surrogate pair for CESU-8. In Emacs 22 and earlier, this variable is initialized by a regexp that never matches any string because code points for a surrogate pair, from U+D800 to U+DFFF, are invalid.") (defun twittering-decode-surrogate-pairs-as-cesu-8 (str) "Decode surrogate pairs in STR similarly to CESU-8. If STR includes surrogate pairs represented by code points from U+D800 to U+DFFF, decode them with CESU-8 and return the result. A character not in the Basic Multilingual Plane is represented by a surrogate pair in JSON (RFC4627). This is similar to CESU-8. But the function `json-read' in `json.el' does not correctly decode surrogate pairs. Therefore, `json-read' may return a string including invalid code points from U+D800 to U+DFFF. This function decodes such invalid code points." (let ((str str) (prev 0) (current 0) (result "")) (while (setq current (string-match twittering-surrogate-pair-regexp str prev)) (let* ((next (match-end 0)) (decoded-str (decode-coding-string (mapconcat (lambda (c) (let* ((code-point (encode-char c 'ucs)) (b1 (/ code-point #x100)) (b2 (% code-point #x100))) (unibyte-string b1 b2))) (match-string 0 str) "") 'utf-16))) (setq result (concat result (substring str prev current) decoded-str)) (setq prev next))) (setq result (concat result (substring str prev))) result)) (defadvice json-read-string (after twittering-decode-surrogate-pairs-as-cesu-8) (when (<= 23 emacs-major-version) (setq ad-return-value (twittering-decode-surrogate-pairs-as-cesu-8 ad-return-value)))) (defun twittering-json-read (&rest args) "Wrapped `json-read' in order to avoid decoding errors. `json-read' is called after activating the advice `twittering-add-fail-over-to-decode-char'. This prevents `json-read' from exiting abnormally by decoding an unknown numeric character reference." (let ((activated (ad-is-active 'decode-char)) (json-activated (ad-is-active 'json-read-string))) (ad-enable-advice 'decode-char 'after 'twittering-add-fail-over-to-decode-char) (ad-activate 'decode-char) (ad-enable-advice 'json-read-string 'after 'twittering-decode-surrogate-pairs-as-cesu-8) (ad-activate 'json-read-string) (unwind-protect (condition-case err (apply 'json-read args) (error (message "Failed to parse the retrieved JSON.") nil)) (ad-disable-advice 'decode-char 'after 'twittering-add-fail-over-to-decode-char) (ad-disable-advice 'json-read-string 'after 'twittering-decode-surrogate-pairs-as-cesu-8) (if activated (ad-activate 'decode-char) (ad-deactivate 'decode-char)) (if json-activated (ad-activate 'json-read-string) (ad-deactivate 'json-read-string)) ))) ;;;; ;;;; Window configuration ;;;; (defun twittering-set-window-end (window pos) (let* ((height (window-text-height window)) (n (- (- height 1)))) (while (progn (setq n (1+ n)) (set-window-start window (with-current-buffer (window-buffer window) (save-excursion (goto-char pos) (line-beginning-position n)))) (not (pos-visible-in-window-p pos window)))))) (defun twittering-current-window-config (window-list) "Return window parameters of WINDOW-LIST." (mapcar (lambda (win) (let ((start (window-start win)) (point (window-point win))) `(,win ,start ,point))) window-list)) (defun twittering-restore-window-config-after-modification (config beg end) "Restore window parameters changed by modification on given region. CONFIG is window parameters made by `twittering-current-window-config'. BEG and END mean a region that had been modified." (mapc (lambda (entry) (let ((win (elt entry 0)) (start (elt entry 1)) (point (elt entry 2))) (when (and (< beg start) (< start end)) (set-window-start win start)) (when (and (< beg point) (< point end)) (set-window-point win point)))) config)) (defun twittering-pop-to-buffer (buf) "Select the buffer BUF in some window. The behavior is determined by the function specified by `twittering-pop-to-buffer-function'." (funcall twittering-pop-to-buffer-function buf)) (defun twittering-pop-to-buffer-simple (buf) "Select the buffer BUF by using `pop-to-buffer'." (let ((win (selected-window))) (pop-to-buffer buf) ;; This is required because the new window generated by `pop-to-buffer' ;; may hide the region following the current position. (twittering-ensure-whole-of-status-is-visible win))) (defun twittering-pop-to-buffer-in-current-window (buf &optional win) "Select the buffer BUF in the window WIN by splitting it. If WIN is nil, the selected window is splitted." (let* ((win (or win (selected-window))) (size (let ((rest (- (window-height win) 15))) (if (<= rest 3) ;; To avoid an error due to a too small window. nil rest))) (new-win (split-window win size))) (select-window new-win) (switch-to-buffer buf))) (defun twittering-pop-to-buffer-in-largest-window (buf) "Select the buffer BUF in the largest window by splitting it." (let ((win (lexical-let ((max-area 0) (largest-win nil)) (walk-windows (lambda (win) (let ((area (* (window-height win) (window-width win)))) (when (< max-area area) (setq max-area area) (setq largest-win win))))) largest-win))) (twittering-pop-to-buffer-in-current-window buf win))) (defun twittering-pop-to-buffer-in-bottom-largest-window (buf) "Select the buffer BUF in the window largest on bottom by splitting it." (let* ((bottom-win-list (lexical-let ((win-list '()) (max-bottom 0)) (walk-windows (lambda (win) (let ((bottom (nth 3 (window-edges win)))) (cond ((< max-bottom bottom) (setq max-bottom bottom) (setq win-list `(,win))) ((= max-bottom bottom) (setq win-list (cons win win-list))) (t nil))))) win-list)) (win (lexical-let ((max-area 0) (largest-win nil)) (mapc (lambda (win) (let ((area (* (window-height win) (window-width win)))) (when (< max-area area) (setq largest-win win) (setq max-area area)))) bottom-win-list) largest-win))) (twittering-pop-to-buffer-in-current-window buf win))) ;;;; ;;;; URI shortening ;;;; (defun twittering-tinyurl-get (longurl &optional service) "Shorten LONGURL with the service specified by `twittering-tinyurl-service'." (let* ((service (or service twittering-tinyurl-service)) (api (cdr (assq service twittering-tinyurl-services-map))) (request-generator (when (listp api) (elt api 0))) (post-process (when (listp api) (elt api 1))) (encoded-url (twittering-percent-encode longurl)) (request (cond ((stringp api) (twittering-make-http-request-from-uri "GET" nil (concat api encoded-url))) ((stringp request-generator) (twittering-make-http-request-from-uri "GET" nil (concat request-generator encoded-url))) ((functionp request-generator) (funcall request-generator service longurl)) (t (error "%s is invalid. try one of %s" (symbol-name service) (mapconcat (lambda (x) (symbol-name (car x))) twittering-tinyurl-services-map ", ")) nil))) (additional-info `((longurl . ,longurl)))) (cond ((null request) (error "Failed to generate a HTTP request for shortening %s with %s" longurl (symbol-name service)) nil) (t (lexical-let ((result 'queried)) (let ((proc (twittering-send-http-request request additional-info (lambda (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info)))) (case-string status-code (("200") (setq result (buffer-string)) nil) (t (setq result nil) (format "Response: %s" status-line))))) (lambda (proc status connection-info) (when (and (not (twittering-process-alive-p proc)) (eq result 'queried)) (setq result nil)))))) (twittering-wait-while nil 0.1 (and (eq result 'queried) (twittering-process-alive-p proc))) (when (and (eq result 'queried) (not (twittering-process-alive-p proc))) ;; If the process has been dead, wait a moment because ;; Emacs may be in the middle of evaluating the sentinel. (twittering-wait-while 10 0.1 (eq result 'queried) nil ;; Reset `result' on timeout. (setq result nil)))) (let ((processed-result (if (and result (functionp post-process)) (funcall post-process service result) result))) (if processed-result processed-result (error "Failed to shorten a URL %s with %s" longurl (symbol-name service)) nil))))))) (defun twittering-tinyurl-replace-at-point () "Replace the url at point with a tiny version." (interactive) (let ((url-bounds (bounds-of-thing-at-point 'url))) (when url-bounds (let ((url (twittering-tinyurl-get (thing-at-point 'url)))) (when url (save-restriction (narrow-to-region (car url-bounds) (cdr url-bounds)) (delete-region (point-min) (point-max)) (insert url))))))) (defun twittering-make-http-request-for-bitly (service longurl) "Make a HTTP request for URL shortening service bit.ly or j.mp. Before calling this, you have to configure `twittering-bitly-login' and `twittering-bitly-api-key'." (let* ((query-string (mapconcat (lambda (entry) (concat (car entry) "=" (cdr entry))) `(("login" . ,twittering-bitly-login) ("apiKey" . ,twittering-bitly-api-key) ("format" . "txt") ("longUrl" . ,(twittering-percent-encode longurl))) "&")) (prefix (cdr (assq service '((bit.ly . "http://api.bit.ly/v3/shorten?") (j.mp . "http://api.j.mp/v3/shorten?"))))) (uri (concat prefix query-string))) (twittering-make-http-request-from-uri "GET" nil uri))) ;;;; ;;;; Timeline spec ;;;; ;;; Timeline spec as S-expression ;;; - (user USER): timeline of the user whose name is USER. USER is a string. ;;; - (list USER LIST): ;;; the list LIST of the user USER. LIST and USER are strings. ;;; ;;; - (direct_messages): received direct messages. ;;; - (direct_messages_sent): sent direct messages. ;;; - (favorites): favorites timeline for the current user. ;;; - (favorites USER): favorites timeline for the specified user. ;;; - (friends): friends timeline. ;;; - (home): home timeline. ;;; - (mentions): mentions timeline. ;;; mentions (status containing @username) for the authenticating user. ;;; - (public): public timeline. ;;; - (replies): replies. ;;; - (retweeted_by_me): retweets posted by the authenticating user. ;;; - (retweeted_by_user USER): retweets posted by the user. ;;; - (retweeted_to_me): retweets posted by the authenticating user's friends. ;;; - (retweeted_to_user USER): retweets posted to the user. ;;; - (retweets_of_me): ;;; tweets of the authenticated user that have been retweeted by others. ;;; - (single ID): the single tweet specified by ID. ;;; ;;; - (search STRING): the result of searching with query STRING. ;;; ;;; - (exclude-if FUNC SPEC): ;;; the same timeline as SPEC, except that it does not include tweets ;;; that FUNC returns non-nil for. ;;; - (exclude-re REGEXP-STRING SPEC): ;;; the same timeline as SPEC, except that it does not include tweets ;;; that matches the regular expression specified by REGEXP-STRING. ;;; ;;; - (merge SPEC1 SPEC2 ...): result of merging timelines SPEC1 SPEC2 ... ;;; ;;; Timeline spec string ;;; ;;; SPEC ::= PRIMARY | COMPOSITE ;;; PRIMARY ::= USER | LIST | DIRECT_MESSSAGES | DIRECT_MESSSAGES_SENT ;;; | FRIENDS | HOME | MENTIONS | PUBLIC | REPLIES ;;; | RETWEETED_BY_ME | RETWEETED_BY_USER ;;; | RETWEETED_TO_ME | RETWEETED_TO_USER | RETWEETS_OF_ME ;;; | SEARCH ;;; COMPOSITE ::= EXCLUDE-IF | EXCLUDE-RE | MERGE ;;; ;;; USER ::= /[a-zA-Z0-9_-]+/ ;;; LIST ::= USER "/" LISTNAME ;;; LISTNAME ::= /[a-zA-Z0-9_-]+/ ;;; DIRECT_MESSSAGES ::= ":direct_messages" ;;; DIRECT_MESSSAGES_SENT ::= ":direct_messages_sent" ;;; FAVORITES ::= ":favorites" | ":favorites/" USER ;;; FRIENDS ::= ":friends" ;;; HOME ::= ":home" | "~" ;;; MENTIONS ::= ":mentions" ;;; PUBLIC ::= ":public" ;;; REPLIES ::= ":replies" | "@" ;;; RETWEETED_BY_ME ::= ":retweeted_by_me" ;;; RETWEETED_BY_USER ::= ":retweeted_by_user/" USER ;;; RETWEETED_TO_ME ::= ":retweeted_to_me" ;;; RETWEETED_TO_USER ::= ":retweeted_to_user/" USER ;;; RETWEETS_OF_ME ::= ":retweets_of_me" ;;; SINGLE ::= ":single/" ID ;;; ID ::= /[0-9]+/ ;;; ;;; SEARCH ::= ":search/" QUERY_STRING "/" ;;; QUERY_STRING ::= any string, where "/" is escaped by a backslash. ;;; ;;; EXCLUDE-IF ::= ":exclude-if/" FUNC "/" SPEC ;;; FUNC ::= LAMBDA EXPRESSION | SYMBOL ;;; EXCLUDE-RE ::= ":exclude-re/" REGEXP "/" SPEC ;;; ;;; MERGE ::= "(" MERGED_SPECS ")" ;;; MERGED_SPECS ::= SPEC | SPEC "+" MERGED_SPECS ;;; (defvar twittering-regexp-hash (let ((full-width-number-sign (twittering-ucs-to-char #xff03))) ;; Unicode Character 'FULLWIDTH NUMBER SIGN' (U+FF03) (concat "\\(?:#\\|" (char-to-string full-width-number-sign) "\\)"))) (defvar twittering-regexp-atmark (let ((full-width-commercial-at (twittering-ucs-to-char #xff20))) ;; Unicode Character 'FULLWIDTH COMMERCIAL AT' (U+FF20) (concat "\\(?:@\\|" (char-to-string full-width-commercial-at) "\\)"))) (defun twittering-timeline-spec-to-string (timeline-spec &optional shorten) "Convert TIMELINE-SPEC into a string. If SHORTEN is non-nil, the abbreviated expression will be used." (let ((type (car timeline-spec)) (value (cdr timeline-spec))) (cond ;; user ((eq type 'user) (car value)) ;; list ((eq type 'list) (concat (car value) "/" (cadr value))) ;; simple ((eq type 'direct_messages) ":direct_messages") ((eq type 'direct_messages_sent) ":direct_messages_sent") ((eq type 'favorites) (if value (concat ":favorites/" (car value)) ":favorites")) ((eq type 'friends) ":friends") ((eq type 'home) (if shorten "~" ":home")) ((eq type 'mentions) ":mentions") ((eq type 'public) ":public") ((eq type 'replies) (if shorten "@" ":replies")) ((eq type 'retweeted_by_me) ":retweeted_by_me") ((eq type 'retweeted_by_user) (concat ":retweeted_by_user/" (car value))) ((eq type 'retweeted_to_me) ":retweeted_to_me") ((eq type 'retweeted_to_user) (concat ":retweeted_to_user/" (car value))) ((eq type 'retweets_of_me) ":retweets_of_me") ((eq type 'single) (concat ":single/" (car value))) ((eq type 'search) (let ((query (car value))) (concat ":search/" (replace-regexp-in-string "\\(\\\\\\|/\\)" "\\\\\\1" query) "/"))) ;; composite ((eq type 'exclude-if) (let ((func (car value)) (spec (cadr value)) (print-level nil)) (concat ":exclude-if/" (prin1-to-string func) "/" (twittering-timeline-spec-to-string spec)))) ((eq type 'exclude-re) (let ((regexp-str (car value)) (spec (cadr value)) (print-level nil)) (concat ":exclude-re/" (replace-regexp-in-string "/" "\\\\\/" regexp-str) "/" (twittering-timeline-spec-to-string spec)))) ((eq type 'merge) (concat "(" (mapconcat 'twittering-timeline-spec-to-string value "+") ")")) (t nil)))) (eval-and-compile (defmacro twittering-make-user-timeline-spec-direct (user) `(list 'user ,user)) (defmacro twittering-make-list-timeline-spec-direct (owner listname) `(list 'list ,owner ,listname)) (defmacro twittering-make-hashtag-timeline-spec-direct (tag) `(list 'search (concat "#" ,tag))) (defmacro twittering-make-hashtag-timeline-spec-string-direct (tag) `(concat "#" ,tag))) (defun twittering-extract-timeline-spec (str &optional unresolved-aliases) "Extract one timeline spec from STR. Return cons of the spec and the rest string." (cond ((null str) (error "STR is nil") nil) ((string-match "^\\([a-zA-Z0-9_-]+\\)/\\([[:word:]_-]+\\)" str) (let ((user (match-string 1 str)) (listname (match-string 2 str)) (rest (substring str (match-end 0)))) `(,(twittering-make-list-timeline-spec-direct user listname) . ,rest))) ((string-match "^\\([a-zA-Z0-9_-]+\\)" str) (let ((user (match-string 1 str)) (rest (substring str (match-end 0)))) `(,(twittering-make-user-timeline-spec-direct user) . ,rest))) ((string-match "^~" str) `((home) . ,(substring str (match-end 0)))) ((string-match (concat "^" twittering-regexp-atmark) str) `((mentions) . ,(substring str (match-end 0)))) ((string-match (concat "^" twittering-regexp-hash "\\([[:alpha:]0-9_-]+\\)") str) (let* ((tag (match-string 1 str)) (rest (substring str (match-end 0)))) `(,(twittering-make-hashtag-timeline-spec-direct tag) . ,rest))) ((string-match "^:\\([a-z_-]+\\)" str) (let ((type (match-string 1 str)) (following (substring str (match-end 0))) (alist '(("direct_messages" . direct_messages) ("direct_messages_sent" . direct_messages_sent) ("friends" . friends) ("home" . home) ("mentions" . mentions) ("public" . public) ("replies" . replies) ("retweeted_by_me" . retweeted_by_me) ("retweeted_to_me" . retweeted_to_me) ("retweets_of_me" . retweets_of_me)))) (cond ((assoc type alist) (let ((first-spec (list (cdr (assoc type alist))))) (cons first-spec following))) ((string= type "favorites") (if (string-match "^:favorites/\\([a-zA-Z0-9_-]+\\)" str) (let ((rest (substring str (match-end 0)))) `((favorites ,(match-string 1 str)) . ,rest)) `((favorites) . ,following))) ((string-match "^:retweeted_by_user/\\([a-zA-Z0-9_-]+\\)" str) (let ((user (match-string 1 str)) (rest (substring str (match-end 0)))) `((retweeted_by_user ,user) . ,rest))) ((string-match "^:retweeted_to_user/\\([a-zA-Z0-9_-]+\\)" str) (let ((user (match-string 1 str)) (rest (substring str (match-end 0)))) `((retweeted_to_user ,user) . ,rest))) ((string-match "^:single/\\([0-9]+\\)" str) (let ((id (match-string 1 str)) (rest (substring str (match-end 0)))) `((single ,id) . ,rest))) ((string= type "search") (if (string-match "^:search/\\(\\(.*?[^\\]\\)??\\(\\\\\\\\\\)*\\)??/" str) (let* ((escaped-query (or (match-string 1 str) "")) (query (replace-regexp-in-string "\\\\\\(\\\\\\|/\\)" "\\1" escaped-query)) (rest (substring str (match-end 0)))) (if (not (string= "" escaped-query)) `((search ,query) . ,rest) (error "\"%s\" has no valid regexp" str) nil)))) ((string= type "exclude-if") (let ((result-pair (cond ((string-match "^:exclude-if/\\([^(/]+\\)/" str) `(,(intern (match-string 1 str)) . ,(match-end 1))) ((string-match "^:exclude-if/" str) (condition-case err (read-from-string str (match-end 0)) (error nil)))))) (if result-pair (let ((func (car result-pair)) (pos (cdr result-pair))) (cond ((not (functionp func)) (error "\"%s\" has an invalid function" str) nil) ((<= (length str) (1+ pos)) (error "\"%s\" has no timeline spec" str) nil) ((not (char-equal ?/ (aref str pos))) (error "\"%s\" has no delimiter" str) nil) (t (let* ((pair (twittering-extract-timeline-spec (substring str (1+ pos)) unresolved-aliases)) (spec (car pair)) (rest (cdr pair))) `((exclude-if ,func ,spec) . ,rest))))) (error "\"%s\" has an invalid function" str) nil))) ((string= type "exclude-re") (cond ((string-match "^:exclude-re/\\(\\(.*?[^\\]\\)??\\(\\\\\\\\\\)*\\)??/" str) (let* ((escaped-regexp (or (match-string 1 str) "")) (regexp (replace-regexp-in-string "\\\\/" "/" escaped-regexp nil t)) (following (substring str (match-end 0)))) (cond ((string= "" escaped-regexp) (error "\"%s\" has no valid regexp" str) nil) (t (let* ((pair (twittering-extract-timeline-spec following unresolved-aliases)) (spec (car pair)) (rest (cdr pair))) `((exclude-re ,regexp ,spec) . ,rest)))))) (t (error "\"%s\" has no valid regexp" str) nil))) (t (error "\"%s\" is invalid as a timeline spec" str) nil)))) ((string-match "^\\$\\([a-zA-Z0-9_-]+\\)\\(?:(\\([^)]*\\))\\)?" str) (let* ((name (match-string 1 str)) (rest (substring str (match-end 0))) (value (cdr-safe (assoc name twittering-timeline-spec-alias))) (arg (match-string 2 str))) (if (member name unresolved-aliases) (error "Alias \"%s\" includes a recursive reference" name) (cond ((stringp value) (twittering-extract-timeline-spec (concat value rest) (cons name unresolved-aliases))) ((functionp value) (twittering-extract-timeline-spec (funcall value arg) (cons name unresolved-aliases))) (t (error "Alias \"%s\" is undefined" name)))))) ((string-match "^(" str) (let ((rest (concat "+" (substring str (match-end 0)))) (result '())) (while (and rest (string-match "^\\+" rest)) (let* ((spec-string (substring rest (match-end 0))) (pair (twittering-extract-timeline-spec spec-string unresolved-aliases)) (spec (car pair)) (next-rest (cdr pair))) (setq result (cons spec result)) (setq rest next-rest))) (if (and rest (string-match "^)" rest)) (let ((spec-list (twittering-remove-duplicates (apply 'append (mapcar (lambda (x) (if (eq 'merge (car x)) (cdr x) (list x))) (reverse result)))))) (if (= 1 (length spec-list)) `(,(car spec-list) . ,(substring rest 1)) `((merge ,@spec-list) . ,(substring rest 1)))) (if rest ;; The string following the opening parenthesis `(' ;; can be interpreted without errors, ;; but there is no corresponding closing parenthesis. (error "\"%s\" lacks a closing parenthesis" str)) ;; Does not display additional error messages if an error ;; occurred on interpreting the string following ;; the opening parenthesis `('. nil))) (t (error "\"%s\" is invalid as a timeline spec" str) nil) )) (defun twittering-string-to-timeline-spec (spec-str &optional noerror) "Convert SPEC-STR into a timeline spec. If SPEC-STR is invalid as a timeline spec string, raise an error or return nil if NOERROR is non-nil." (let ((result-pair (condition-case err (twittering-extract-timeline-spec spec-str) (error (if noerror nil (signal (car err) (cdr err)) nil))))) (if (and result-pair (string= "" (cdr result-pair))) (car result-pair) nil))) (defun twittering-timeline-spec-primary-p (spec) "Return non-nil if SPEC is a primary timeline spec. `primary' means that the spec is not a composite timeline spec such as `merge'." (let ((primary-spec-types '(user list direct_messages direct_messages_sent favorites friends home mentions public replies search retweeted_by_me retweeted_by_user retweeted_to_me retweeted_to_user retweets_of_me single)) (type (car spec))) (memq type primary-spec-types))) (defun twittering-timeline-spec-composite-p (spec) "Return non-nil if SPEC is a composite timeline spec. `composite' means that the spec depends on other timelines." (let ((composite-spec-types '(exclude-if exclude-re merge)) (type (car spec))) (memq type composite-spec-types))) (defun twittering-timeline-spec-depending-on-p (spec base-spec) "Return non-nil if SPEC depends on BASE-SPEC." (cond ((twittering-timeline-spec-primary-p spec) (equal spec base-spec)) ((equal spec base-spec) t) (t (remove nil (mapcar (lambda (direct-base-spec) (twittering-timeline-spec-depending-on-p direct-base-spec base-spec)) (twittering-get-base-timeline-specs spec)))))) (defun twittering-timeline-spec-is-user-p (spec) "Return non-nil if SPEC is a user timeline." (and (consp spec) (eq 'user (car spec)))) (defun twittering-timeline-spec-is-direct-messages-p (spec) "Return non-nil if SPEC is a timeline spec which is related of direct_messages." (and spec (memq (car spec) '(direct_messages direct_messages_sent)))) (defun twittering-timeline-spec-is-search-p (spec) "Return non-nil if SPEC is a search timeline spec." (and (consp spec) (eq 'search (car spec)))) (defun twittering-extract-query-string-from-search-timeline-spec (spec) "Return the query string if SPEC is a search timeline spec. If SPEC is not a search timeline spec, return nil." (and (eq 'search (car spec)) (cadr spec))) (defun twittering-equal-string-as-timeline (spec-str1 spec-str2) "Return non-nil if SPEC-STR1 equals SPEC-STR2 as a timeline spec. If either SPEC-STR1 or SPEC-STR2 is invalid as a timeline spec string, return nil." (if (and (stringp spec-str1) (stringp spec-str2)) (let ((spec1 (twittering-string-to-timeline-spec spec-str1 t)) (spec2 (twittering-string-to-timeline-spec spec-str2 t))) (equal spec1 spec2)) nil)) (defun twittering-get-base-timeline-specs (spec) "Return the timeline specs on which the timeline SPEC depends. If SPEC is primary, returns a list consisting of itself. The result timelines may be a composite timeline." (let ((type (car spec))) (cond ((twittering-timeline-spec-primary-p spec) `(,spec)) ((memq type '(exclude-if exclude-re)) `(,(elt spec 2))) ((eq type 'merge) (cdr spec)) (t nil)))) (defun twittering-get-primary-base-timeline-specs (spec) "Return the primary timeline specs on which the timeline SPEC depends. If SPEC is primary, returns a list consisting of itself. The result timelines are primary." (if (twittering-timeline-spec-primary-p spec) `(,spec) (twittering-remove-duplicates (apply 'append (mapcar 'twittering-get-primary-base-timeline-specs (twittering-get-base-timeline-specs spec)))))) (defun twittering-get-dependent-timeline-specs (base-spec) "Return a list of timeline specs that depend on BASE-SPEC. If BASE-SPEC is a primary timeline spec, the return value consists of BASE-SPEC and composite timeline specs that depend on BASE-SPEC and are bound to a live buffer. If BASE-SPEC is a composite timeline spec, the return value consists of composite timeline specs that depend on BASE-SPEC and are bound to a live buffer." (twittering-remove-duplicates `(;; BASE-SPEC may not be bound to a live buffer. ,@(when (twittering-timeline-spec-primary-p base-spec) `(,base-spec)) ,@(remove nil (mapcar (lambda (spec) (when (twittering-timeline-spec-depending-on-p spec base-spec) spec)) (mapcar 'twittering-get-timeline-spec-for-buffer (twittering-get-buffer-list))))))) (defun twittering-generate-composite-timeline (spec base-spec base-statuses) "Generate statuses for the timeline SPEC from BASE-STATUSES. BASE-STATUSES must originate from the BASE-SPEC timeline. If SPEC is a primary timeline and equals BASE-SPEC, just return BASE-STATUSES. If SPEC is a primary timeline and does not equal BASE-SPEC, return nil." (let ((type (car spec))) (cond ((twittering-timeline-spec-primary-p spec) (if (equal spec base-spec) base-statuses nil)) ((eq type 'exclude-if) (let* ((direct-base (car (twittering-get-base-timeline-specs spec))) (direct-base-statuses (twittering-generate-composite-timeline direct-base base-spec base-statuses)) (func (elt spec 1))) (remove nil (mapcar (lambda (status) (unless (funcall func status) status)) direct-base-statuses)))) ((eq type 'exclude-re) (let* ((direct-base (car (twittering-get-base-timeline-specs spec))) (direct-base-statuses (twittering-generate-composite-timeline direct-base base-spec base-statuses)) (regexp (elt spec 1))) (remove nil (mapcar (lambda (status) (unless (string-match regexp (cdr (assq 'text status))) status)) direct-base-statuses)))) ((eq type 'merge) (sort (apply 'append (mapcar (lambda (direct-base-spec) ;; `copy-sequence' is required because `sort' ;; modifies the appended list that may include ;; `base-statuses' as a tail. ;; `base-statuses' may refer to the original list ;; which already retrieved tweets are registered ;; with. It must not be modified. (copy-sequence (twittering-generate-composite-timeline direct-base-spec base-spec base-statuses))) (twittering-get-base-timeline-specs spec))) (lambda (status1 status2) (let ((id1 (cdr (assq 'id status1))) (id2 (cdr (assq 'id status2)))) (twittering-status-id< id2 id1))))) (t nil)))) ;;;; ;;;; Retrieved statuses (timeline data) ;;;; (defun twittering-current-timeline-id-table (&optional spec) (let ((spec (or spec (twittering-current-timeline-spec)))) (if spec (elt (gethash spec twittering-timeline-data-table) 0) nil))) (defun twittering-current-timeline-referring-id-table (&optional spec) "Return the hash from a ID to the ID of the first observed status referring the former ID." (let* ((spec (or spec (twittering-current-timeline-spec))) (type (car spec))) (cond ((null spec) nil) ((memq type '(exclude-if exclude-re merge)) ;; Use the first non-nil table instead of merging the all tables ;; because it may take a long time to merge them. (car (remove nil (mapcar (lambda (base-spec) (elt (gethash base-spec twittering-timeline-data-table) 1)) (twittering-get-primary-base-timeline-specs spec))))) ((eq type 'single) ;; Single tweet timelines are registered in a special way. ;; See `twittering-retrieve-single-tweet-sentinel'. (elt (gethash '(:single) twittering-timeline-data-table) 1)) (t (elt (gethash spec twittering-timeline-data-table) 1))))) (defun twittering-current-timeline-data (&optional spec) (let* ((spec (or spec (twittering-current-timeline-spec))) (type (car spec))) (cond ((null spec) nil) ((eq type 'single) (let* ((id (cadr spec)) (status (twittering-find-status id))) (if status `(,status) nil))) ((memq type '(exclude-if exclude-re merge)) (let ((primary-base-specs (twittering-get-primary-base-timeline-specs spec))) (sort (apply 'append (mapcar (lambda (primary-spec) ;; `copy-sequence' is required to prevent `sort' ;; from modifying lists of statuses in the database ;; `twittering-timeline-data-table'. ;; The result of `twittering-generate-composite-timeline' ;; may include a list in the database. If so, the simply ;; appended list include it as a tail. (copy-sequence (twittering-generate-composite-timeline spec primary-spec (twittering-current-timeline-data primary-spec)))) primary-base-specs)) (lambda (status1 status2) (let ((id1 (cdr (assq 'id status1))) (id2 (cdr (assq 'id status2)))) (twittering-status-id< id2 id1)))))) (t (elt (gethash spec twittering-timeline-data-table) 2))))) (defun twittering-remove-timeline-data (&optional spec) (let ((spec (or spec (twittering-current-timeline-spec)))) (remhash spec twittering-timeline-data-table))) (defun twittering-find-status (id) (let ((result nil)) (maphash (lambda (spec pair) (let* ((id-table (car pair)) (entry (gethash id id-table))) ;; Take the most detailed status. (when (and entry (or (null result) (< (length result) (length entry)))) (setq result entry)))) twittering-timeline-data-table) result)) (defun twittering-delete-status-from-data-table (id) (let ((modified-spec nil)) (maphash (lambda (spec data) (let* ((id-table (elt data 0)) (referring-id-table (elt data 1)) (timeline-data (elt data 2)) (status (gethash id id-table))) (when status (remhash id id-table) ;; Here, `referring-id-table' is not modified. ;; Therefore, the retweet observed secondly will not appear even ;; if the retweet observed first for the same tweet is deleted. (setq modified-spec (cons `(,spec ,id-table ,referring-id-table ,(remove status timeline-data)) modified-spec))))) twittering-timeline-data-table) (mapc (lambda (spec) (let ((buffer (twittering-get-buffer-from-spec spec))) (when (buffer-live-p buffer) (with-current-buffer buffer (save-excursion (twittering-for-each-property-region 'id (lambda (beg end value) (when (twittering-status-id= id value) (let ((buffer-read-only nil) (separator-pos (min (point-max) (1+ end)))) (delete-region beg separator-pos) (goto-char beg)))) buffer)))))) (twittering-remove-duplicates (apply 'append (mapcar (lambda (data) (let ((spec (car data))) ;; Update the entry for `spec' in ;; `twittering-timeline-data-table' with the new ;; timeline-data that does not include `status'. (puthash spec (cdr data) twittering-timeline-data-table) (twittering-get-dependent-timeline-specs spec))) modified-spec)))))) (defun twittering-get-replied-statuses (id &optional count) "Return a list of replied statuses starting from the status specified by ID. Statuses are stored in ascending-order with respect to their IDs." (let ((result nil) (status (twittering-find-status id))) (while (and (if (numberp count) (<= 0 (setq count (1- count))) t) (let ((replied-id (or (cdr (assq 'in-reply-to-status-id status)) ""))) (unless (string= "" replied-id) (let ((replied-status (twittering-find-status replied-id))) (when replied-status (setq result (cons replied-status result)) (setq status replied-status) t)))))) result)) (defun twittering-have-replied-statuses-p (id) (let ((status (twittering-find-status id))) (when status (let ((replied-id (cdr (assq 'in-reply-to-status-id status)))) (and replied-id (not (string= "" replied-id))))))) (defun twittering-add-statuses-to-timeline-data (statuses &optional spec) "Add STATUSES as new statuses for SPEC and update derived timelines. The function returns a list of lists including an updated timeline spec string and the number of new statuses for the timeline." (let* ((spec (or spec (twittering-current-timeline-spec))) (id-table (or (twittering-current-timeline-id-table spec) (make-hash-table :test 'equal))) (referring-id-table (or (twittering-current-timeline-referring-id-table spec) (make-hash-table :test 'equal))) (timeline-data (twittering-current-timeline-data spec))) (let* ((new-statuses (remove nil (mapcar (lambda (status) (let ((id (cdr (assq 'id status))) (retweeted-id (cdr (assq 'retweeted-id status)))) (unless (or (not retweeted-id) (gethash retweeted-id referring-id-table)) ;; Store the id of the first observed tweet ;; that refers `retweeted-id'. (puthash retweeted-id id referring-id-table)) (if (gethash id id-table) nil (puthash id status id-table) (puthash id id referring-id-table) `((source-spec . ,spec) ,@status)))) statuses))) (new-statuses ;; Sort tweets by ID. ;; This is necessary because `twittering-render-timeline' assumes ;; that given tweets are ordered. (sort new-statuses (lambda (status1 status2) (let ((id1 (cdr (assq 'id status1))) (id2 (cdr (assq 'id status2)))) (twittering-status-id< id2 id1)))))) (when new-statuses (let ((new-timeline-data (sort (append new-statuses timeline-data) (lambda (status1 status2) (let ((id1 (cdr (assq 'id status1))) (id2 (cdr (assq 'id status2)))) (twittering-status-id< id2 id1)))))) (puthash spec `(,id-table ,referring-id-table ,new-timeline-data) twittering-timeline-data-table)) (let ((twittering-new-tweets-spec spec) (twittering-new-tweets-statuses new-statuses) (twittering-new-tweets-count (length new-statuses))) (run-hooks 'twittering-new-tweets-hook))) ;; Update timelines derived from SPEC and return the number of ;; new tweets for each updated timeline. (remove nil (mapcar (lambda (buffer) (let ((other-spec (twittering-get-timeline-spec-for-buffer buffer)) (other-spec-string (twittering-get-timeline-spec-string-for-buffer buffer))) (when (twittering-timeline-spec-depending-on-p other-spec spec) (let* ((twittering-new-tweets-spec other-spec) (twittering-new-tweets-statuses (twittering-generate-composite-timeline other-spec spec new-statuses)) (twittering-new-tweets-count (length twittering-new-tweets-statuses)) (rendered-tweets (twittering-render-timeline buffer twittering-new-tweets-statuses t))) (when rendered-tweets (run-hooks 'twittering-new-tweets-hook) `(,other-spec-string ,(length rendered-tweets))))))) (twittering-get-buffer-list)))))) ;;;; ;;;; URIs related to a tweet ;;;; (defun twittering-get-status-url (username &optional id) "Generate a URL of a user or a specific status." (let ((func (cdr (assq 'status-url (assq twittering-service-method twittering-service-method-table))))) (funcall func username id))) (defun twittering-get-status-url-from-alist (status) "Generate a URL of a tweet specified by an alist STATUS." (let ((username (cdr (assq 'user-screen-name status))) (id (cdr (assq 'id status))) (func (cdr (assq 'status-url (assq twittering-service-method twittering-service-method-table))))) (funcall func username id))) (defun twittering-get-list-url (username listname) "Generate a URL of a specific list." (let ((func (cdr (assq 'status-url (assq twittering-service-method twittering-service-method-table)))) (str (concat username "/" listname))) (funcall func str nil))) (defun twittering-get-status-url-twitter (username &optional id) "Generate status URL for Twitter." (if id (format "http://%s/%s/status/%s" twittering-web-host username id) (format "http://%s/%s" twittering-web-host username))) (defun twittering-get-status-url-statusnet (username &optional id) "Generate status URL for StatusNet." (if id (format "http://%s/%s/notice/%s" twittering-web-host twittering-web-path-prefix id) (format "http://%s/%s/%s" twittering-web-host twittering-web-path-prefix username))) (defun twittering-get-search-url (query-string) "Generate a URL for searching QUERY-STRING." (let ((func (cdr (assq 'search-url (assq twittering-service-method twittering-service-method-table))))) (funcall func query-string))) (defun twittering-get-search-url-twitter (query-string) (format "http://%s/search?q=%s" twittering-web-host (twittering-percent-encode query-string))) (defun twittering-get-search-url-statusnet (query-string) (if (string-match "^#\\(.+\\)" query-string) (format "http://%s/%s/tag/%s" twittering-web-host twittering-web-path-prefix (twittering-percent-encode (match-string 1 query-string))) (format "http://%s/search?q=%s" twittering-web-host (twittering-percent-encode query-string)))) (defun twittering-extract-id-from-url (url-string) "Extract the ID from URL-STRING. Return nil if URL-STRING cannot be interpreted as a URL pointing a tweet." (when (string-match "\\`https?://twitter.com/\\(?:#!/\\)?[^/]+/status\\(?:es\\)?/\\([0-9]+\\)/?\\'" url-string) (match-string 1 url-string))) ;;;; ;;;; Utility of status IDs ;;;; (defun twittering-status-id< (id1 id2) (let ((len1 (length id1)) (len2 (length id2))) (cond ((= len1 len2) (string< id1 id2)) ((< len1 len2) t) (t nil)))) (defun twittering-status-id= (id1 id2) (equal id1 id2)) (defun twittering-snowflake-epoch-time () "Return the epoch time of Snowflake." (require 'calc) (let ((epoch-str ;; This corresponds to 2010-11-04 01:42:54+00:00 in RFC3339. ;; The value comes from the following page. ;; https://github.com/twitter/snowflake/blob/6d4634aa490de26e22425538291fe0a03071a170/src/main/scala/com/twitter/service/snowflake/IdWorker.scala#L22 ;; 22 val twepoch = 1288834974657L "1288834974657")) (let ((str (calc-eval `(,(concat "floor(10#" epoch-str "/10#1000)") calc-word-size 64 calc-number-radix 16))) (milisec-str (calc-eval `(,(concat "10#" epoch-str "%10#1000") calc-word-size 64 calc-number-radix 10)))) (mapcar (lambda (s) (string-to-number s 16)) `(,(substring str 3 7) ,(substring str 7) ,milisec-str))))) (defun twittering-id-to-time (id) "Return the time corresonding to ID generated by Snowflake. If ID is a string consisting of 12 or more digits, return the corresponding time in Emacs internal representation the same as `encode-time'. Otherwise, return nil. This is because ID consisting of 11 or less digits may not be generated by Snowflake." (require 'calc) (cond ((not (stringp id)) nil) ((< (length id) 12) ;; The given ID may not be generated by Snowflake. ;; ;; The first tweet in the example response of ;; https://dev.twitter.com/docs/api/1/get/statuses/home_timeline ;; has "18700887835" as the ID. ;; Assuming that it is generated by Snowflake, it corresponds to ;; "2010-11-04 01:42:58+00:00". ;; However, the created_at is "Fri Jul 16 16:58:46 +0000 2010". ;; It can be confirmed at http://twitter.com/cindyli/status/18700887835 . ;; ;; Therefore we can not suppose that an ID is generated by Snowflake ;; if the ID consists of 11-digits. ;; Assuming that an ID reaches 10^11 before Snowflake is turned on at ;; Nov 04 2010, the average number of tweets per day will exceed ;; 533 million. ;; ( 10^11 - 18,700,887,835 > 80,000,000,000 ;; 80 billion / 5 month (from Jul 16 to Nov 4) > 533 million / day ) ;; ;; It is impossible. ;; So, I assume that an ID is generated by Snowflake if the ID consists of ;; 12 or more digits. ;; The first ID with 12-digits, 100,000,000,000 (10^11), corresponds to ;; 2010-11-04 01:43:17+00:00. nil) (t (let* ((epoch (twittering-snowflake-epoch-time)) (str (calc-eval `(,(format "floor(rsh(10#%s,22)/1000)" id) calc-word-size 64 calc-number-radix 16))) (milisec (string-to-number (calc-eval `(,(format "rsh(10#%s,22)%%1000" id) calc-word-size 64 calc-number-radix 10)) 10))) (when (string-match "^16#\\([[:xdigit:]]+\\)" str) (let* ((hex-str (match-string 1 str)) (hex-str (if (< (length hex-str) 4) (concat "0000" hex-str) hex-str))) (time-add epoch `(,(string-to-number (substring hex-str 0 (- (length hex-str) 4)) 16) ,(string-to-number (substring hex-str (- (length hex-str) 4)) 16) ,(* milisec 1000) )))))))) (defun twittering-time-to-id (time) "Return the ID corresponding to TIME by Snowflake. Bits other than timestamp are zero. The least significant 22 bits are zero. TIME must be an Emacs internal representation as a return value of `current-time'." (require 'calc) (let* ((epoch-time (twittering-snowflake-epoch-time)) (dt (if (time-less-p epoch-time time) (time-subtract time epoch-time) nil)) (sec-high (nth 0 dt)) (sec-low (nth 1 dt)) (microsec (or (nth 2 dt) "0"))) (when dt (calc-eval `(,(format "lsh((16#%04x%04x) * 1000 + floor(%d/1000), 22)" sec-high sec-low microsec) calc-word-size 64 calc-number-radix 10))))) ;;;; ;;;; Process info ;;;; (defun twittering-register-process (proc spec &optional str) (let ((str (or str (twittering-timeline-spec-to-string spec)))) (add-to-list 'twittering-process-info-alist `(,proc ,spec ,str)))) (defun twittering-release-process (proc) (let ((pair (assoc proc twittering-process-info-alist))) (when pair (setq twittering-process-info-alist (delq pair twittering-process-info-alist))))) (defun twittering-get-timeline-spec-from-process (proc) (let ((entry (assoc proc twittering-process-info-alist))) (if entry (elt entry 1) nil))) (defun twittering-get-timeline-spec-string-from-process (proc) (let ((entry (assoc proc twittering-process-info-alist))) (if entry (elt entry 2) nil))) (defun twittering-find-processes-for-timeline-spec (spec) (apply 'append (mapcar (lambda (pair) (let ((proc (car pair)) (spec-info (cadr pair))) (if (equal spec-info spec) `(,proc) nil))) twittering-process-info-alist))) (defun twittering-remove-inactive-processes () (let ((inactive-statuses '(nil closed exit failed signal))) (setq twittering-process-info-alist (apply 'append (mapcar (lambda (pair) (let* ((proc (car pair)) (info (cdr pair)) (status (process-status proc))) (if (memq status inactive-statuses) nil `((,proc ,@info))))) twittering-process-info-alist))))) (defun twittering-process-active-p (&optional spec) (twittering-remove-inactive-processes) (if spec (twittering-find-processes-for-timeline-spec spec) twittering-process-info-alist)) ;;;; ;;;; Server info ;;;; (defun twittering-update-api-table (spec api-string) "Register a pair of a timeline spec and an API for retrieving the timeline. SPEC is a timeline spec. API-STRING is an identifier of an API for retrieving the timeline." (let ((current (assoc spec twittering-timeline-spec-to-api-table))) (if (null current) (add-to-list 'twittering-timeline-spec-to-api-table `(,spec . ,api-string)) (setcdr current api-string)))) (defun twittering-make-rate-limit-alist (header-info) "Make a rate-limit information alist from HEADER-INFO. Key symbols of a returned alist are following; limit, remaining, reset-time. Values bound to limit and remaining is a positive integer and one bound to reset-time is an Emacs time (result of `seconds-to-time')." (let ((symbol-table '(("X-Rate-Limit-Limit" . limit) ("X-Rate-Limit-Remaining" . remaining) ("X-Rate-Limit-Reset" . reset-time) ;; For Twitter API v1.0. ("X-RateLimit-Limit" . limit) ("X-RateLimit-Remaining" . remaining) ("X-RateLimit-Reset" . reset-time)))) (remove nil (mapcar (lambda (entry) (let ((sym (cdr (twittering-assoc-string (car entry) symbol-table t)))) (cond ((memq sym '(limit remaining)) `(,sym . ,(string-to-number (cdr entry)))) ((eq sym 'reset-time) `(,sym . ,(seconds-to-time (string-to-number (cdr entry))))) (t nil)))) header-info)))) (defun twittering-update-rate-limit-info (api-string spec header-info) "Register rate-limit information. API-STRING is an identifier of an API. SPEC is a timeline spec that had been retrieved by the API. HEADER-INFO is an alist generated from the HTTP response header of the API." (let* ((api-string (if (eq twittering-service-method 'twitter) ;; The key for Twitter API v1.0 is nil. nil api-string)) (current (assoc api-string twittering-api-limit-info-alist)) (rate-limit-alist (twittering-make-rate-limit-alist header-info))) (twittering-update-api-table spec api-string) (if (null current) (add-to-list 'twittering-api-limit-info-alist `(,api-string . ,rate-limit-alist)) (setcdr current rate-limit-alist)))) (defun twittering-update-server-info (connection-info header-info) (let* ((new-entry-list (mapcar 'car header-info)) (account-info (cdr (assq 'account-info connection-info))) (account (twittering-get-from-account-info "screen_name" account-info)) (spec (cdr (assq 'timeline-spec connection-info))) (api-string (cdr (assq 'uri-without-query (assq 'request connection-info))))) (twittering-update-rate-limit-info api-string spec header-info) (when (remove t (mapcar (lambda (entry) (equal (assoc entry header-info) (assoc entry twittering-server-info-alist))) new-entry-list)) (setq twittering-server-info-alist (append header-info (remove nil (mapcar (lambda (entry) (if (member (car entry) new-entry-list) nil entry)) twittering-server-info-alist)))) (when twittering-display-remaining (mapc (lambda (buffer) (with-current-buffer buffer (twittering-update-mode-line))) (twittering-get-buffer-list)))) ;; cookie (let* ((new-cookies (twittering-extract-cookie connection-info header-info)) (old-cookies (cdr (assoc account twittering-cookie-alist))) (updated-cookies (append new-cookies (remove nil (mapcar (lambda (cookie) (unless (assoc (car cookie) new-cookies) cookie)) old-cookies))))) (setq twittering-cookie-alist (cons (cons account updated-cookies) (remove nil (mapcar (lambda (entry) (unless (equal account (car entry)) entry)) twittering-cookie-alist))))) header-info)) (defun twittering-extract-cookie (connection-info header-info) (remove nil (mapcar (lambda (entry) (let ((header-item (car entry)) (header-value (cdr entry))) (when (and (string= header-item "Set-Cookie") (string-match "\\([^= ]*\\) *= *\\([^; ]*\\) *;? *" header-value)) ;; For ease of implementation, the followings are assumed. ;; 1. Each response header includes only one cookie. ;; 2. `value' of cookie is a token, not a quoted string. ;; 3. Attributes except `domain', `expires' and `path' are ignored. (let* ((name (downcase (match-string 1 header-value))) (value (match-string 2 header-value)) (attributes (mapcar (lambda (str) (when (string-match "\\` *\\([^ ]*\\) *= *\\(.*\\)\\'" str) (let ((attr (downcase (match-string 1 str))) (value (match-string 2 str))) (cond ((string= attr "domain") `(domain . ,value)) ((string= attr "expires") `(expires . ,(apply 'encode-time (parse-time-string (replace-regexp-in-string "-" " " value))))) ((string= attr "path") `(path . ,value)) (t nil))))) (split-string (substring header-value (match-end 0)) " *; *"))) (additional-attributes `(,@(let* ((domain (cdr (assq 'domain attributes))) (request (cdr (assq 'request connection-info))) (host (cdr (assq 'host request))) (prefix (if domain (regexp-quote domain) (concat "\\`" (regexp-quote host))))) `((domain-regexp . ,(concat prefix "\\'"))))))) `(,name (value . ,value) ,@attributes ,@additional-attributes))))) header-info))) (defun twittering-make-cookie-string (request account-info) (let ((account (twittering-get-from-account-info "screen_name" account-info)) (current-time (current-time)) (host (cdr (assq 'host request)))) (when account (mapconcat 'identity (remove nil (mapcar (lambda (entry) (let* ((expires (cdr (assq 'expires entry))) (not-expired (or (null expires) (time-less-p current-time expires))) (domain-regexp (cdr (assq 'domain-regexp entry)))) (when (and not-expired (string-match domain-regexp host)) (format "%s=%s" (car entry) (cdr (assq 'value entry)))))) (cdr (assoc account twittering-cookie-alist)))) ";")))) (defun twittering-get-ratelimit-alist (&optional spec) (let ((api-string (cdr (assoc spec twittering-timeline-spec-to-api-table)))) (cdr (assoc api-string twittering-api-limit-info-alist)))) (defun twittering-get-ratelimit-remaining (&optional spec) (or (cdr (assq 'remaining (twittering-get-ratelimit-alist spec))) 0)) (defun twittering-get-ratelimit-limit (&optional spec) (or (cdr (assq 'limit (twittering-get-ratelimit-alist spec))) 0)) (defun twittering-get-ratelimit-indicator-string (&optional spec) "Make an indicator string of rate-limit information of SPEC." (cond ((eq twittering-service-method 'twitter) ;; Twitter API v1.0. (format "%d/%d" (twittering-get-ratelimit-remaining) (twittering-get-ratelimit-limit))) (t (mapconcat (lambda (api-string) (let* ((alist (cdr (assoc api-string twittering-api-limit-info-alist))) (remaining (cdr (assq 'remaining alist))) (limit (cdr (assq 'limit alist)))) (format "%s/%s" (if remaining (number-to-string remaining) "?") (if limit (number-to-string limit) "?")))) (twittering-remove-duplicates (mapcar (lambda (spec) (cdr (assoc spec twittering-timeline-spec-to-api-table))) (twittering-get-primary-base-timeline-specs spec))) "+")))) ;;;; ;;;; Abstract layer for Twitter API ;;;; (defun twittering-api-path (&rest params) (mapconcat 'identity `(,twittering-api-prefix ,@params) "")) (defun twittering-call-api (command args-alist &optional additional-info) "Call Twitter API and return the process object for the request. Invoke `twittering-call-api-with-account' with the main account specified by `twittering-get-main-account-info'. For details of arguments, see `twittering-call-api-with-account'." (let ((account-info-alist (twittering-get-main-account-info))) (twittering-call-api-with-account account-info-alist command args-alist additional-info))) (defun twittering-call-api-with-account (account-info-alist command args-alist &optional additional-info) "Call Twitter API and return the process object for the request. COMMAND is a symbol specifying API. ARGS-ALIST is an alist specifying arguments for the API corresponding to COMMAND. Each key of ARGS-ALIST is a symbol. ACCOUNT-INFO-ALIST is an alist storing account information, which has the following key; \"screen_name\", \"oauth_token\" and \"oauth_token_secret\" for OAuth/xAuth, \"screen_name\" and \"password\" for basic authentication. ADDITIONAL-INFO is used as an argument ADDITIONAL-INFO of `twittering-send-http-request'. Sentinels associated to the returned process receives it as the fourth argument. See also the function `twittering-send-http-request'. The valid symbols as COMMAND follows: retrieve-timeline -- Retrieve a timeline. Valid key symbols in ARGS-ALIST: timeline-spec -- the timeline spec to be retrieved. timeline-spec-string -- the string representation of the timeline spec. format -- (optional) the symbol specifying the format. number -- (optional) how many tweets are retrieved. It must be an integer. If nil, `twittering-number-of-tweets-on-retrieval' is used instead. The maximum for search timeline is 100, and that for other timelines is `twittering-max-number-of-tweets-on-retrieval'. If the given number exceeds the maximum, the maximum is used instead. max_id -- (optional) the maximum ID of retrieved tweets. since_id -- (optional) the minimum ID of retrieved tweets. sentinel -- (optional) the sentinel that processes the buffer consisting of retrieved data.. This is used as an argument SENTINEL of `twittering-send-http-request' via `twittering-http-get'. If nil, `twittering-http-get-default-sentinel' is used. clean-up-sentinel -- (optional) the clean-up sentinel that post-processes the buffer associated to the process. This is used as an argument CLEAN-UP-SENTINEL of `twittering-send-http-request' via `twittering-http-get'. page -- (optional and valid only for favorites timeline) which page will be retrieved. retrieve-single-tweet -- Retrieve a single tweet. Valid key symbols in ARGS-ALIST: id -- the ID of the tweet to be retrieved. username -- (optional) the screen name of the author of the tweet. format -- (optional) the symbol specifying the format. sentinel -- (optional) the sentinel that processes the buffer consisting of retrieved data.. This is used as an argument SENTINEL of `twittering-send-http-request' via `twittering-http-get'. If nil, `twittering-http-get-default-sentinel' is used. clean-up-sentinel -- (optional) the clean-up sentinel that post-processes the buffer associated to the process. This is used as an argument CLEAN-UP-SENTINEL of `twittering-send-http-request' via `twittering-http-get'. get-list-index -- Retrieve list names owned by a user. Valid key symbols in ARGS-ALIST: username -- the username. sentinel -- the sentinel that processes retrieved strings. This is used as an argument SENTINEL of `twittering-send-http-request' via `twittering-http-get'. clean-up-sentinel -- (optional) the clean-up sentinel that post-processes the buffer associated to the process. This is used as an argument CLEAN-UP-SENTINEL of `twittering-send-http-request' via `twittering-http-get'. get-list-subscriptions -- Retrieve list names followed by a user. Valid key symbols in ARGS-ALIST: username -- the username. sentinel -- the sentinel that processes retrieved strings. This is used as an argument SENTINEL of `twittering-send-http-request' via `twittering-http-get'. clean-up-sentinel -- (optional) the clean-up sentinel that post-processes the buffer associated to the process. This is used as an argument CLEAN-UP-SENTINEL of `twittering-send-http-request' via `twittering-http-get'. create-friendships -- Follow a user. Valid key symbols in ARGS-ALIST: username -- the username which will be followed. destroy-friendships -- Unfollow a user. Valid key symbols in ARGS-ALIST: username -- the username which will be unfollowed. create-favorites -- Mark a tweet as a favorite. Valid key symbols in ARGS-ALIST: id -- the ID of the target tweet. destroy-favorites -- Remove a mark of a tweet as a favorite. Valid key symbols in ARGS-ALIST: id -- the ID of the target tweet. update-status -- Post a tweet. Valid key symbols in ARGS-ALIST: status -- the string to be posted. in-reply-to-status-id -- (optional) the ID of a status that this post is in reply to. destroy-status -- Destroy a tweet posted by the authenticated user itself. Valid key symbols in ARGS-ALIST: id -- the ID of the target tweet. retweet -- Retweet a tweet. Valid key symbols in ARGS-ALIST: id -- the ID of the target tweet. verify-credentials -- Verify the current credentials. Valid key symbols in ARGS-ALIST: sentinel -- the sentinel that processes returned information. This is used as an argument SENTINEL of `twittering-send-http-request' via `twittering-http-get'. clean-up-sentinel -- the clean-up sentinel that post-processes the buffer associated to the process. This is used as an argument CLEAN-UP-SENTINEL of `twittering-send-http-request' via `twittering-http-get'. send-direct-message -- Send a direct message. Valid key symbols in ARGS-ALIST: username -- the username who the message is sent to. status -- the sent message. block -- Block a user. Valid key symbols in ARGS-ALIST: user-id -- the user-id that will be blocked. username -- the username who will be blocked. This command requires either of the above key. If both are given, `user-id' will be used in REST API. block-and-report-as-spammer -- Block a user and report him or her as a spammer. Valid key symbols in ARGS-ALIST: user-id -- the user-id that will be blocked. username -- the username who will be blocked. This command requires either of the above key. If both are given, `user-id' will be used in REST API. get-service-configuration -- Get the configuration of the server. Valid key symbols in ARGS-ALIST: sentinel -- the sentinel that processes retrieved strings. This is used as an argument SENTINEL of `twittering-send-http-request'. clean-up-sentinel -- (optional) the clean-up sentinel that post-processes the buffer associated to the process. This is used as an argument CLEAN-UP-SENTINEL of `twittering-send-http-request'." (let* ((additional-info `(,@additional-info (service-method . ,twittering-service-method)))) (cond ((memq twittering-service-method '(twitter statusnet)) (twittering-call-api-with-account-in-api1.0 account-info-alist command args-alist additional-info)) ((eq twittering-service-method 'twitter-api-v1.1) (cond ((not (require 'json nil t)) (error "`json.el' is required to use the Twitter REST API v1.1") nil) ((not twittering-use-ssl) (error "SSL is required to use the Twitter REST API v1.1") nil) (t (twittering-call-api-with-account-in-api1.1 account-info-alist command args-alist additional-info)))) (t (error "`twittering-service-method' is an invalid service method") )))) (defun twittering-call-api-with-account-in-api1.0 (account-info-alist command args-alist &optional additional-info) "Call the Twitter REST API v1.0 and return the process object for the request." (cond ((eq command 'retrieve-timeline) ;; Retrieve a timeline. (let* ((spec (cdr (assq 'timeline-spec args-alist))) (spec-string (cdr (assq 'timeline-spec-string args-alist))) (spec-type (car-safe spec)) (max-number (if (eq 'search spec-type) 100 ;; FIXME: refer to defconst. twittering-max-number-of-tweets-on-retrieval)) (number (let ((number (or (cdr (assq 'number args-alist)) (let* ((default-number 20) (n twittering-number-of-tweets-on-retrieval)) (cond ((integerp n) n) ((string-match "^[0-9]+$" n) (string-to-number n 10)) (t default-number)))))) (min (max 1 number) max-number))) (number-str (number-to-string number)) (max_id (cdr (assq 'max_id args-alist))) (page (cdr (assq 'page args-alist))) (since_id (cdr (assq 'since_id args-alist))) (word (when (eq 'search spec-type) (cadr spec))) (parameters (cond ((eq spec-type 'favorites) `(("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when page `(("page" . ,page))))) ((eq spec-type 'retweeted_by_user) (let ((username (elt spec 1))) `(("count" . ,number-str) ,@(when max_id `(("max_id" . ,max_id))) ("include_entities" . "true") ("screen_name" . ,username) ,@(when since_id `(("since_id" . ,since_id)))))) ((eq spec-type 'retweeted_to_user) (let ((username (elt spec 1))) `(("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ("screen_name" . ,username) ,@(when since_id `(("since_id" . ,since_id)))))) (t `(,@(when max_id `(("max_id" . ,max_id))) ,@(when since_id `(("since_id" . ,since_id))) ,@(cond ((eq spec-type 'search) `(("include_entities" . "true") ("q" . ,word) ("rpp" . ,number-str) ("with_twitter_user_id". "true"))) ((eq spec-type 'list) (let ((username (elt spec 1)) (list-name (elt spec 2))) `(("include_entities" . "true") ("include_rts" . "true") ("owner_screen_name" . ,username) ("per_page" . ,number-str) ("slug" . ,list-name)))) ((eq spec-type 'user) (let ((username (elt spec 1))) `(("count" . ,number-str) ("include_entities" . "true") ("include_rts" . "true") ("screen_name" . ,username)))) ((memq spec-type '(friends mentions public)) `(("include_entities" . "true") ("count" . ,number-str) ("include_rts" . "true"))) (t ;; direct_messages ;; direct_messages_sent ;; home ;; replies ;; retweeted_by_me ;; retweeted_to_me ;; retweets_of_me `(("include_entities" . "true") ("count" . ,number-str)))))))) (format (let ((format (cdr (assq 'format args-alist)))) (cond ((and format (symbolp format)) format) ((eq spec-type 'search) 'atom) (t 'xml)))) (format-str (symbol-name format)) (simple-spec-list '((direct_messages . "direct_messages") (direct_messages_sent . "direct_messages/sent") (friends . "statuses/friends_timeline") (home . "statuses/home_timeline") (mentions . "statuses/mentions") (public . "statuses/public_timeline") (replies . "statuses/replies") (retweeted_by_me . "statuses/retweeted_by_me") (retweeted_to_me . "statuses/retweeted_to_me") (retweets_of_me . "statuses/retweets_of_me") (user . "statuses/user_timeline"))) (host (cond ((eq spec-type 'search) twittering-api-search-host) (t twittering-api-host))) (method (cond ((eq spec-type 'list) (twittering-api-path "lists/statuses")) ((eq spec-type 'favorites) (let ((user (elt spec 1))) (if user (twittering-api-path "favorites/" user) (twittering-api-path "favorites")))) ((eq spec-type 'retweeted_by_user) (twittering-api-path "statuses/retweeted_by_user")) ((eq spec-type 'retweeted_to_user) (twittering-api-path "statuses/retweeted_to_user")) ((eq spec-type 'search) twittering-search-api-method) ((assq spec-type simple-spec-list) (twittering-api-path (cdr (assq spec-type simple-spec-list)))) (t nil))) (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist))) (additional-info `(,@additional-info (format . ,format)))) (cond ((eq spec-type 'single) (let ((id (cadr spec)) (sentinel (or sentinel 'twittering-retrieve-single-tweet-sentinel))) (if (twittering-find-status id) ;; If the status has already retrieved, do nothing. nil (twittering-call-api 'retrieve-single-tweet `((id . ,id) (format . ,format) (sentinel . ,sentinel) (clean-up-sentinel . ,clean-up-sentinel)) additional-info)))) ((and host method) (twittering-http-get account-info-alist host method parameters format-str additional-info sentinel clean-up-sentinel)) (t (error "Invalid timeline spec"))))) ((eq command 'retrieve-single-tweet) (let* ((id (cdr (assq 'id args-alist))) (user-screen-name (cdr (assq 'username args-alist))) (format (let ((format (cdr (assq 'format args-alist)))) (cond ((and format (symbolp format)) format) (t 'xml)))) (format-str (symbol-name format)) (parameters '(("include_entities" . "true"))) (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist))) (additional-info `(,@additional-info (id . ,id) (user-screen-name . ,user-screen-name) (format . ,format)))) (twittering-http-get account-info-alist twittering-api-host (twittering-api-path "statuses/show/" id) parameters format-str additional-info sentinel clean-up-sentinel))) ((eq command 'get-list-index) ;; Get list names. (let* ((username (cdr (assq 'username args-alist))) (sentinel (cdr (assq 'sentinel args-alist))) (format (if (require 'json nil t) 'json 'xml)) (format-str (symbol-name format)) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist twittering-api-host (twittering-api-path username "/lists") nil format-str additional-info sentinel clean-up-sentinel))) ((eq command 'get-list-subscriptions) (let* ((username (cdr (assq 'username args-alist))) (sentinel (cdr (assq 'sentinel args-alist))) (format (if (require 'json nil t) 'json 'xml)) (format-str (symbol-name format)) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist twittering-api-host (twittering-api-path username "/lists/subscriptions") nil format-str additional-info sentinel clean-up-sentinel))) ((eq command 'create-friendships) ;; Create a friendship. (let ((username (cdr (assq 'username args-alist)))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "friendships/create") `(("screen_name" . ,username)) nil additional-info))) ((eq command 'destroy-friendships) ;; Destroy a friendship (let ((username (cdr (assq 'username args-alist)))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "friendships/destroy") `(("screen_name" . ,username)) nil additional-info))) ((eq command 'create-favorites) ;; Create a favorite. (let ((id (cdr (assq 'id args-alist)))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "favorites/create/" id) nil nil additional-info))) ((eq command 'destroy-favorites) ;; Destroy a favorite. (let ((id (cdr (assq 'id args-alist)))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "favorites/destroy/" id) nil nil additional-info))) ((eq command 'update-status) ;; Post a tweet. (let* ((status (cdr (assq 'status args-alist))) (id (cdr (assq 'in-reply-to-status-id args-alist))) (parameters `(("status" . ,status) ,@(when (eq twittering-auth-method 'basic) '(("source" . "twmode"))) ,@(when id `(("in_reply_to_status_id" . ,id)))))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "statuses/update") parameters nil additional-info))) ((eq command 'destroy-status) ;; Destroy a status. (let* ((id (cdr (assq 'id args-alist))) (format (if (require 'json nil t) 'json 'xml)) (format-str (symbol-name format))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "statuses/destroy/" id) nil format-str additional-info 'twittering-http-post-destroy-status-sentinel))) ((eq command 'retweet) ;; Post a retweet. (let ((id (cdr (assq 'id args-alist)))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "statuses/retweet/" id) nil nil additional-info))) ((eq command 'verify-credentials) ;; Verify the account. (let ((sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist twittering-api-host (twittering-api-path "account/verify_credentials") nil nil additional-info sentinel clean-up-sentinel))) ((eq command 'send-direct-message) ;; Send a direct message. (let ((parameters `(("screen_name" . ,(cdr (assq 'username args-alist))) ("text" . ,(cdr (assq 'status args-alist)))))) (twittering-http-post account-info-alist twittering-api-host (twittering-api-path "direct_messages/new") parameters nil additional-info))) ((eq command 'block) ;; Block a user. (let* ((user-id (cdr (assq 'user-id args-alist))) (username (cdr (assq 'username args-alist))) (parameters (if user-id `(("user_id" . ,user-id)) `(("screen_name" . ,username))))) (twittering-http-post twittering-api-host (twittering-api-path "blocks/create") parameters nil additional-info))) ((eq command 'block-and-report-as-spammer) ;; Report a user as a spammer and block him or her. (let* ((user-id (cdr (assq 'user-id args-alist))) (username (cdr (assq 'username args-alist))) (parameters (if user-id `(("user_id" . ,user-id)) `(("screen_name" . ,username))))) (twittering-http-post twittering-api-host (twittering-api-path "report_spam") parameters nil additional-info))) ((eq command 'get-service-configuration) (let* ((format (if (require 'json nil t) 'json 'xml)) (format-str (symbol-name format)) (request (twittering-make-http-request-from-uri "GET" nil (concat (if twittering-use-ssl "https" "http") "://" twittering-api-host "/" (twittering-api-path "help/configuration." format-str)))) (additional-info nil) (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-send-http-request request additional-info sentinel clean-up-sentinel))) (t nil))) (defun twittering-call-api-with-account-in-api1.1 (account-info-alist command args-alist &optional additional-info) "Call the Twitter REST API v1.1 and return the process object for the request." (cond ((eq command 'retrieve-timeline) ;; Retrieve a timeline. (let* ((args-alist (let* ((spec (cdr (assq 'timeline-spec args-alist))) (spec-type (car-safe spec)) (table '((friends . (home)) (replies . (mentions))))) (cond ((memq spec-type '(friends replies)) (let* ((alternative (cdr (assq spec-type table))) (alternative-str (twittering-timeline-spec-to-string alternative))) (message "Timeline spec %s is not supported in the Twitter REST API v1.1" spec) `((timeline-spec . ,alternative) (timeline-spec-string . ,alternative-str) ,@args-alist))) (t args-alist)))) (spec (cdr (assq 'timeline-spec args-alist))) (spec-string (cdr (assq 'timeline-spec-string args-alist))) (spec-type (car-safe spec)) (max-number (if (eq 'search spec-type) 100 ;; FIXME: refer to defconst. twittering-max-number-of-tweets-on-retrieval)) (number (let ((number (or (cdr (assq 'number args-alist)) (let* ((default-number 20) (n twittering-number-of-tweets-on-retrieval)) (cond ((integerp n) n) ((string-match "^[0-9]+$" n) (string-to-number n 10)) (t default-number)))))) (min (max 1 number) max-number))) (number-str (number-to-string number)) (max_id (cdr (assq 'max_id args-alist))) (since_id (cdr (assq 'since_id args-alist))) (word (when (eq 'search spec-type) (cadr spec))) (parameters (cond ((eq spec-type 'user) (let ((username (elt spec 1))) `("api.twitter.com" "1.1/statuses/user_timeline" ("count" . ,number-str) ("include_entities" . "true") ("include_rts" . "true") ,@(when max_id `(("max_id" . ,max_id))) ("screen_name" . ,username) ,@(when since_id `(("since_id" . ,since_id))) ))) ((eq spec-type 'list) (let ((username (elt spec 1)) (list-name (elt spec 2))) `("api.twitter.com" "1.1/lists/statuses" ("count" . ,number-str) ("include_entities" . "true") ("include_rts" . "true") ,@(when max_id `(("max_id" . ,max_id))) ("owner_screen_name" . ,username) ,@(when since_id `(("since_id" . ,since_id))) ("slug" . ,list-name)))) ((eq spec-type 'direct_messages) `("api.twitter.com" "1.1/direct_messages" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when since_id `(("since_id" . ,since_id))))) ((eq spec-type 'direct_messages_sent) `("api.twitter.com" "1.1/direct_messages/sent" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when since_id `(("since_id" . ,since_id))))) ((eq spec-type 'favorites) (let ((user (elt spec 1))) `("api.twitter.com" "1.1/favorites/list" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when user `(("screen_name" . ,user))) ,@(when since_id `(("since_id" . ,since_id)))))) ((eq spec-type 'home) `("api.twitter.com" "1.1/statuses/home_timeline" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when since_id `(("since_id" . ,since_id))))) ((eq spec-type 'mentions) `("api.twitter.com" "1.1/statuses/mentions_timeline" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when since_id `(("since_id" . ,since_id))))) ((eq spec-type 'public) (error "Timeline spec %s is not supported in the Twitter REST API v1.1" spec) nil) ((memq spec-type '(retweeted_by_me retweeted_by_user retweeted_to_me retweeted_to_user)) (error "Timeline spec %s is not supported in the Twitter REST API v1.1" spec) nil) ((eq spec-type 'retweets_of_me) `("api.twitter.com" "1.1/statuses/retweets_of_me" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ,@(when since_id `(("since_id" . ,since_id))))) ((eq spec-type 'single) (let ((id (elt spec 1))) `("api.twitter.com" "1.1/statuses/show" ("id" . ,id) ("include_entities" . "true")))) ((eq spec-type 'search) (let ((word (elt spec 1))) `("api.twitter.com" "1.1/search/tweets" ("count" . ,number-str) ("include_entities" . "true") ,@(when max_id `(("max_id" . ,max_id))) ("q" . ,word) ("result_type" . "mixed") ,@(when since_id `(("since_id" . ,since_id)))))) (t (error "Timeline spec %s is unknown" spec-string) nil))) (format 'json) (format-str (symbol-name format)) (host (elt parameters 0)) (method (elt parameters 1)) (http-parameters (nthcdr 2 parameters)) (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist))) (additional-info `(,@additional-info (format . ,format))) ;; special treatment for single timeline. (id (cdr (assoc "id" http-parameters))) (sentinel (or sentinel (when (eq spec-type 'single) 'twittering-retrieve-single-tweet-sentinel)))) (cond ((null parameters) nil) ((not (and (string= format-str "json") (require 'json nil t))) (error "The Twitter REST API v1.1 supports only JSON") nil) ((and (eq spec-type 'single) (twittering-find-status id)) ;; If the status has already retrieved, do nothing. nil) ((and host method) (twittering-http-get account-info-alist host method http-parameters format-str additional-info sentinel clean-up-sentinel)) (t (error "Invalid timeline spec") nil)))) ((eq command 'retrieve-single-tweet) (let* ((id (cdr (assq 'id args-alist))) (user-screen-name (cdr (assq 'username args-alist))) (format (let ((format (cdr (assq 'format args-alist)))) (cond ((and format (symbolp format)) format) (t 'json)))) (format-str (symbol-name format)) (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist))) (additional-info `(,@additional-info (id . ,id) (user-screen-name . ,user-screen-name) (format . ,format)))) (twittering-call-api-with-account-in-api1.1 account-info-alist 'retrieve-timeline `((timeline-spec . (single ,id)) (format . ,format) (sentinel . ,sentinel) (clean-up-sentinel . ,clean-up-sentinel)) additional-info))) ((eq command 'get-list-index) ;; Get list names. (let* ((username (cdr (assq 'username args-alist))) (sentinel (cdr (assq 'sentinel args-alist))) (host "api.twitter.com") (method "1.1/lists/list") (http-parameters `(("screen_name" . ,username))) (format-str "json") (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist host method http-parameters format-str additional-info sentinel clean-up-sentinel))) ((eq command 'get-list-subscriptions) (let* ((username (cdr (assq 'username args-alist))) (sentinel (cdr (assq 'sentinel args-alist))) (host "api.twitter.com") (method "1.1/lists/subscriptions") (http-parameters `(("count" . "20") ("screen_name" . ,username))) (format-str "json") (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist host method http-parameters format-str additional-info sentinel clean-up-sentinel))) ((eq command 'create-friendships) ;; Create a friendship. (let* ((username (cdr (assq 'username args-alist))) (host "api.twitter.com") (method "1.1/friendships/create") (http-parameters `(("screen_name" . ,username))) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'destroy-friendships) ;; Destroy a friendship (let* ((username (cdr (assq 'username args-alist))) (host "api.twitter.com") (method "1.1/friendships/destroy") (http-parameters `(("screen_name" . ,username))) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'create-favorites) ;; Create a favorite. (let* ((id (cdr (assq 'id args-alist))) (host "api.twitter.com") (method "1.1/favorites/create") (http-parameters `(("id" . ,id))) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'destroy-favorites) ;; Destroy a favorite. (let* ((id (cdr (assq 'id args-alist))) (host "api.twitter.com") (method "1.1/favorites/destroy") (http-parameters `(("id" . ,id))) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'update-status) ;; Post a tweet. (let* ((status (cdr (assq 'status args-alist))) (id (cdr (assq 'in-reply-to-status-id args-alist))) (host "api.twitter.com") (method "1.1/statuses/update") (http-parameters `(("status" . ,status) ,@(when id `(("in_reply_to_status_id" . ,id))))) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'destroy-status) ;; Destroy a status. (let* ((id (cdr (assq 'id args-alist))) (host "api.twitter.com") (method (format "1.1/statuses/destroy/%s" id)) (http-parameters nil) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info 'twittering-http-post-destroy-status-sentinel))) ((eq command 'retweet) ;; Post a retweet. (let* ((id (cdr (assq 'id args-alist))) (host "api.twitter.com") (method (format "1.1/statuses/retweet/%s" id)) (http-parameters nil) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'verify-credentials) ;; Verify the account. (let* ((host "api.twitter.com") (method "1.1/account/verify_credentials") (http-parameters nil) (format-str "json") (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist host method http-parameters format-str additional-info sentinel clean-up-sentinel))) ((eq command 'send-direct-message) ;; Send a direct message. (let* ((host "api.twitter.com") (method "1.1/direct_messages/new") (http-parameters `(("screen_name" . ,(cdr (assq 'username args-alist))) ("text" . ,(cdr (assq 'status args-alist))))) (format-str "json")) (twittering-http-post account-info-alist host method http-parameters format-str additional-info))) ((eq command 'block) ;; Block a user. (let* ((user-id (cdr (assq 'user-id args-alist))) (username (cdr (assq 'username args-alist))) (host "api.twitter.com") (method "1.1/blocks/create") (http-parameters (if user-id `(("user_id" . ,user-id)) `(("screen_name" . ,username)))) (format-str "json")) (twittering-http-post host method http-parameters format-str additional-info))) ((eq command 'block-and-report-as-spammer) ;; Report a user as a spammer and block him or her. (let* ((user-id (cdr (assq 'user-id args-alist))) (username (cdr (assq 'username args-alist))) (host "api.twitter.com") (method "1.1/users/report_spam") (http-parameters (if user-id `(("user_id" . ,user-id)) `(("screen_name" . ,username)))) (format-str "json")) (twittering-http-post host method http-parameters format-str additional-info))) ((eq command 'get-service-configuration) (let* ((host "api.twitter.com") (method "1.1/help/configuration") (http-parameters nil) (format-str "json") (additional-info nil) (sentinel (cdr (assq 'sentinel args-alist))) (clean-up-sentinel (cdr (assq 'clean-up-sentinel args-alist)))) (twittering-http-get account-info-alist host method http-parameters format-str additional-info sentinel clean-up-sentinel))) (t nil))) ;;;; ;;;; Service configuration ;;;; (defconst twittering-service-configuration-default '((short_url_length . 19) (short_url_length_https . 20)) "Default value of `twittering-service-configuration'.") (defvar twittering-service-configuration nil "Current server configuration.") (defvar twittering-service-configuration-queried nil) (defvar twittering-service-configuration-update-interval 86400 "*Interval of updating `twittering-service-configuration'.") (defun twittering-get-service-configuration (entry) (let ((pair (assq entry twittering-service-configuration))) (if (null pair) (cdr (assq entry twittering-service-configuration-default)) (cdr pair)))) (defun twittering-update-service-configuration (&optional ignore-time) "Update `twittering-service-configuration' if necessary." (when (and (memq twittering-service-method '(twitter twitter-api-v1.1)) (null twittering-service-configuration-queried) (or ignore-time (let ((current (twittering-get-service-configuration 'time)) (interval (seconds-to-time twittering-service-configuration-update-interval))) (if (null current) t ;; If time passed more than `interval', ;; update the configuration. (time-less-p interval (time-since current)))))) (setq twittering-service-configuration-queried t) (twittering-call-api 'get-service-configuration '((sentinel . twittering-update-service-configuration-sentinel) (clean-up-sentinel . twittering-update-service-configuration-clean-up-sentinel))))) (defun twittering-update-service-configuration-sentinel (proc status connection-info header-info) (let ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (format (twittering-get-content-subtype-symbol-from-header-info header-info))) (case-string status-code (("200") (let* ((conf-alist (cond ((eq format 'xml) (let ((xml (twittering-xml-parse-region (point-min) (point-max)))) (mapcar (lambda (entry) `(,(car entry) . ,(elt entry 2))) (cddr (assq 'configuration xml))))) ((eq format 'json) (twittering-json-read)) (t (error "Format \"%s\" is not supported" format) nil))) (entries '(short_url_length short_url_length_https))) (setq twittering-service-configuration `((time . ,(current-time)) ,@(mapcar (lambda (entry) (let ((value (cdr (assq entry conf-alist)))) (cons entry (cond ((stringp value) (string-to-number value)) (t value))))) entries))) (setq twittering-service-configuration-queried nil) nil)) (("400") ;; Rate limit exceeded. (setq twittering-service-configuration-queried nil) (format "Response: %s" (twittering-get-error-message header-info connection-info))) (t (setq twittering-service-configuration-queried nil) (format "Response: %s" (twittering-get-error-message header-info connection-info)))))) (defun twittering-update-service-configuration-clean-up-sentinel (proc status connection-info) (when (not (twittering-process-alive-p proc)) (setq twittering-service-configuration-queried nil))) ;;;; ;;;; Account authorization ;;;; (defun twittering-register-account-info (account-info) (setq twittering-oauth-access-token-alist account-info)) (defun twittering-get-main-account-info () (cond ((eq twittering-auth-method 'basic) `(("screen_name" . ,twittering-username) ("password" . ,twittering-password))) ((memq twittering-auth-method '(oauth xauth)) twittering-oauth-access-token-alist))) (defun twittering-get-from-account-info (param account-info) (cdr (assoc param account-info))) (defun twittering-get-username () (let ((account-info (twittering-get-main-account-info))) (twittering-get-from-account-info "screen_name" account-info))) (defun twittering-get-password () (let ((account-info (twittering-get-main-account-info))) (twittering-get-from-account-info "password" account-info))) (defun twittering-make-basic-authentication-string (account-info) (concat "Basic " (base64-encode-string (concat (cdr (assoc "screen_name" account-info)) ":" (cdr (assoc "password" account-info)))))) (defun twittering-make-oauth-authentication-string (account-info request) (let ((method (cdr (assq 'method request))) (access-token (cdr (assoc "oauth_token" account-info))) (access-token-secret (cdr (assoc "oauth_token_secret" account-info)))) (unless (and (stringp access-token) (stringp access-token-secret)) (error "`account-info' has no valid OAuth token")) (twittering-oauth-auth-str-access method (cdr (assq 'uri-without-query request)) (cdr (assq 'encoded-query-alist request)) twittering-oauth-consumer-key twittering-oauth-consumer-secret access-token access-token-secret))) (defun twittering-account-authorized-p () (eq twittering-account-authorization 'authorized)) (defun twittering-account-authorization-queried-p () (eq twittering-account-authorization 'queried)) (defun twittering-prepare-account-info () "Return a pair of username and password. If `twittering-username' is nil, read it from the minibuffer. If `twittering-password' is nil, read it from the minibuffer." (let* ((username (or twittering-username (read-string "your twitter username: "))) (password (or twittering-password (read-passwd (format "%s's twitter password: " username))))) `(,username . ,password))) (defun twittering-has-oauth-access-token-p () (let* ((required-entries '("oauth_token" "oauth_token_secret" "user_id" "screen_name")) (value-list (mapcar (lambda (key) (cdr (assoc key twittering-oauth-access-token-alist))) required-entries))) (null (remove t (mapcar 'stringp value-list))))) (defun twittering-verify-credentials () "Verify the account. This function is an internal function, which should be called from `twittering-ensure-account-verification'. If the account has been authorized already, return t. Otherwise, this function tries to authorize the account. If the authorization succeeded, return t. If the authorization failed, return nil." (cond ((twittering-account-authorized-p) ;; The account has been authorized already. t) ((not (twittering-account-authorization-queried-p)) ;; This function must be invoked from ;; `twittering-ensure-account-verification', which updates the variable ;; `twittering-account-authorization' into the symbol `queried'. (error "`twittering-verify-credentials' is invoked multiple times.") nil) ((and (memq twittering-auth-method '(oauth xauth)) (or (null twittering-oauth-consumer-key) (null twittering-oauth-consumer-secret))) (message "Consumer for OAuth is not specified.") nil) ((twittering-has-oauth-access-token-p) (let* ((username (cdr (assoc "screen_name" (twittering-get-main-account-info)))) (proc (twittering-call-api-with-account (twittering-get-main-account-info) 'verify-credentials `((sentinel . twittering-http-get-verify-credentials-sentinel) (clean-up-sentinel . twittering-http-get-verify-credentials-clean-up-sentinel))))) (cond ((null proc) (message "Process invocation for authorizing \"%s\" failed." username) ;; Failed to authorize the account. nil) (t ;; wait for verification to finish. (twittering-wait-while nil 0.1 (and (twittering-account-authorization-queried-p) (twittering-process-alive-p proc))) (if (not (twittering-account-authorization-queried-p)) ;; The query is completed. (twittering-account-authorized-p) ;; If the process has been dead, wait a moment because ;; Emacs may be in the middle of evaluating the sentinel. (twittering-wait-while 10 0.1 (twittering-account-authorization-queried-p) ;; Succeeded in authorizing the account. t ;; Display a message. (message "Status of Authorization process is `%s'. Type M-x twit to retry." (process-status proc)) ;; Failed to authorize the account. nil)))))) ((eq twittering-auth-method 'oauth) (let* ((scheme (if twittering-oauth-use-ssl "https" "http")) (request-token-url (concat scheme twittering-oauth-request-token-url-without-scheme)) (access-token-url (concat scheme twittering-oauth-access-token-url-without-scheme)) (token-alist (twittering-oauth-get-access-token request-token-url (lambda (token) (concat scheme twittering-oauth-authorization-url-base-without-scheme token)) access-token-url twittering-oauth-consumer-key twittering-oauth-consumer-secret "twittering-mode"))) (cond ((and (assoc "oauth_token" token-alist) (assoc "oauth_token_secret" token-alist) (assoc "screen_name" token-alist)) (let ((username (cdr (assoc "screen_name" token-alist)))) (twittering-register-account-info token-alist) (message "Authorization for the account \"%s\" succeeded." username) (when (and twittering-use-master-password (twittering-capable-of-encryption-p) (not (file-exists-p twittering-private-info-file))) (twittering-save-private-info-with-guide)) ;; Succeeded in authorizing the account. t)) (t ;; There is no global account info that should be invalidated. ;; Failed to authorize the account. (message "Authorization via OAuth failed. Type M-x twit to retry.") nil)))) ((eq twittering-auth-method 'xauth) (let* ((account-info (twittering-prepare-account-info)) (scheme (if twittering-oauth-use-ssl "https" "http")) (access-token-url (concat scheme twittering-oauth-access-token-url-without-scheme)) (token-alist (twittering-xauth-get-access-token access-token-url twittering-oauth-consumer-key twittering-oauth-consumer-secret (car account-info) (cdr account-info)))) ;; Dispose of password as recommended by Twitter. ;; http://dev.twitter.com/pages/xauth (setcdr account-info nil) (cond ((and token-alist (assoc "oauth_token" token-alist) (assoc "oauth_token_secret" token-alist)) (twittering-register-account-info token-alist) (message "Authorization for the account \"%s\" succeeded." (twittering-get-username)) (when (and twittering-use-master-password (twittering-capable-of-encryption-p) (not (file-exists-p twittering-private-info-file))) (twittering-save-private-info-with-guide)) ;; Succeeded in authorizing the account. t) (t ;; Failed to authorize the account. (message "Authorization via xAuth failed. Type M-x twit to retry.") nil)))) ((eq twittering-auth-method 'basic) (let* ((account-info (let ((pair (twittering-prepare-account-info))) `(("screen_name" . ,(car pair)) ("password" . ,(cdr pair))))) ;; Bind account information locally to ensure that ;; the variables are reset when the verification fails. (twittering-username (car account-info)) (twittering-password (cdr account-info)) (proc (twittering-call-api-with-account account-info 'verify-credentials `((sentinel . twittering-http-get-verify-credentials-sentinel) (clean-up-sentinel . twittering-http-get-verify-credentials-clean-up-sentinel))))) (cond ((null proc) (message "Process invocation for authorizing \"%s\" failed." (twittering-get-from-account-info "screen_name" account-info)) ;; Failed to authorize the account. nil) (t ;; wait for verification to finish. (twittering-wait-while nil 0.1 (and (twittering-account-authorization-queried-p) (twittering-process-alive-p proc))) (if (not (twittering-account-authorization-queried-p)) ;; The query is finished. (twittering-account-authorized-p) ;; If the process has been dead, wait a moment because ;; Emacs may be in the middle of evaluating the sentinel. (twittering-wait-while 10 0.1 (twittering-account-authorization-queried-p) ;; Succeeded in authorizing the account. t ;; Display a message. (message "Status of Authorization process is `%s'. Type M-x twit to retry." (process-status proc)) ;; Failed to authorize the account. nil)))))) (t (message "%s is invalid as an authorization method." twittering-auth-method) nil))) (defun twittering-http-get-verify-credentials-sentinel (proc status connection-info header-info) (let* ((status-line (cdr (assq 'status-line header-info))) (status-code (cdr (assq 'status-code header-info))) (account-info (cdr (assq 'account-info connection-info))) (username (twittering-get-from-account-info "screen_name" account-info)) (password (twittering-get-from-account-info "password" account-info))) (case-string status-code (("200") (twittering-register-account-info account-info) (setq twittering-account-authorization 'authorized) (message "Authorization for the account \"%s\" succeeded." username) nil) (("401") (setq twittering-account-authorization nil) (let ((error-mes (format "Authorization for the account \"%s\" failed. Type M-x twit to retry with correct information." username))) ;; Invalidate the account info. (twittering-register-account-info nil) (message "%s" error-mes) nil)) (t (setq twittering-account-authorization nil) (let ((error-mes (format "Authorization for the account \"%s\" failed due to \"%s\"." username status-line))) (message "%s" error-mes) nil))))) (defun twittering-http-get-verify-credentials-clean-up-sentinel (proc status connection-info) (when (and (memq status '(exit signal closed failed)) (eq twittering-account-authorization 'queried)) (setq twittering-account-authorization nil) (let ((exit-status (cond ((processp proc) (process-exit-status proc)) (t 0))) (command (process-command proc))) (if (= 0 exit-status) (message "Authorization failed. Type M-x twit to retry.") (message "Authorization failed: %s exited abnormally (exit-status=%s)." (car command) exit-status))) (setq twittering-username nil) (setq twittering-password nil))) (defun twittering-ensure-account-verification () "Ensure verification of an account. If an account has been already authorized, return t. If a query of authorization is being processed, return nil. Otherwise, this function tries to authorize an account by calling `twittering-verify-credentials'. If the authorization succeeded, return t. If the authorization failed, return nil." (cond ((twittering-account-authorized-p) ;; The account has been already authorized. t) ((twittering-account-authorization-queried-p) ;; The account has not been authorized yet. nil) (t (setq twittering-account-authorization 'queried) (let ((result nil)) (unwind-protect (setq result (twittering-verify-credentials)) (if result (setq twittering-account-authorization 'authorized) (setq twittering-account-authorization nil))) result)))) ;;;; ;;;; Status retrieval ;;;; (defun twittering-add-timeline-history (spec-string) (when (or (null twittering-timeline-history) (not (string= spec-string (car twittering-timeline-history)))) (twittering-add-to-history 'twittering-timeline-history spec-string)) (let ((spec (twittering-string-to-timeline-spec spec-string))) (when (and (twittering-timeline-spec-is-user-p spec) (or (null twittering-user-history) (not (string= spec-string (car twittering-user-history))))) (twittering-add-to-history 'twittering-user-history (cadr spec))))) (defun twittering-remove-timeline-spec-string-from-history (spec-string) (setq twittering-timeline-history (remove nil (mapcar (lambda (str) (if (twittering-equal-string-as-timeline spec-string str) nil str)) twittering-timeline-history)))) (defun twittering-make-alist-of-forbidden-tweet (id &optional user-screen-name) (let ((created-at (or (twittering-id-to-time id) (apply 'encode-time (parse-time-string "Jan 01 00:00:00 +0000 2012"))))) `((forbidden . t) (id . ,id) (created-at . ,created-at) (user-name . nil) (user-screen-name . ,user-screen-name) (text . "SORRY, YOU ARE NOT AUTHORIZED TO SEE THIS TWEET.") ))) (defun twittering-make-alist-of-non-existent-tweet (id &optional user-screen-name) (let ((created-at (or (twittering-id-to-time id) (apply 'encode-time (parse-time-string "Jan 01 00:00:00 +0000 2012"))))) `((forbidden . t) (id . ,id) (created-at . ,created-at) (user-name . nil) (user-screen-name . ,user-screen-name) (text . ,(format "THE TWEET WITH ID %s DOES NOT EXIST." id)) ))) (defun twittering-atom-xmltree-to-status-datum (atom-xml-entry) (let* ((id-str (car (cddr (assq 'id atom-xml-entry)))) (time-str (car (cddr (assq 'updated atom-xml-entry)))) (author-str (car (cddr (assq 'name (assq 'author atom-xml-entry))))) (formatted-time-str ;; ISO 8601 ;; Twitter -> "2010-05-08T05:59:41Z" ;; StatusNet -> "2010-05-08T08:44:39+00:00" (cond ((string-match "\\(.*\\)T\\(.*\\)\\(Z\\|\\([-+][0-2][0-9]\\):?\\([0-5][0-9]\\)\\)" time-str) ;; time-str is formatted as ;; "Combined date and time in UTC:" in ISO 8601. (let ((timezone (match-string 3 time-str))) (format "%s %s %s" (match-string 1 time-str) (match-string 2 time-str) (if (string= "Z" timezone) "+0000" (concat (match-string 4 time-str) (match-string 5 time-str)))))) (t ;; unknown format? time-str)))) `((created-at . ,(date-to-time formatted-time-str)) (id . ,(progn (string-match ":\\([0-9]+\\)$" id-str) (match-string 1 id-str))) ,@(let ((source (twittering-decode-html-entities (car (cddr (assq 'twitter:source atom-xml-entry)))))) `(,@(if (string-match "\\(.*\\)" source) (let ((uri (match-string-no-properties 1 source)) (caption (match-string-no-properties 2 source))) `((source . ,caption) (source-uri . ,uri))) `((source . ,source) (source-uri . ""))))) (text . ,(twittering-decode-html-entities (car (cddr (assq 'title atom-xml-entry))))) ,@(cond ((and (eq twittering-service-method 'statusnet) (string-match "^\\([^ ]+\\)\\( (\\(.*\\))\\)?$" author-str)) ;; StatusNet `((user-screen-name . ,(match-string 1 author-str)) (user-name . ,(or (match-string 3 author-str) "")))) ((string-match "^\\([^ ]+\\) (\\(.*\\))$" author-str) ;; Twitter (default) `((user-screen-name . ,(match-string 1 author-str)) (user-name . ,(match-string 2 author-str)))) (t '((user-screen-name . "PARSING FAILED!!") (user-name . "")))) (user-profile-image-url . ,(let* ((link-items (mapcar (lambda (item) (when (eq 'link (car-safe item)) (cadr item))) atom-xml-entry)) (image-urls (mapcar (lambda (item) (cond ((and (eq twittering-service-method 'statusnet) (member '(rel . "related") item)) ;; StatusNet (cdr (assq 'href item))) ((member '(rel . "image") item) ;; Twitter (default) (cdr (assq 'href item))) (t nil))) link-items))) (car-safe (remq nil image-urls))))))) (defun twittering-atom-xmltree-to-status (atom-xmltree) (let ((entry-list (apply 'append (mapcar (lambda (x) (if (eq (car-safe x) 'entry) `(,x) nil)) (cdar atom-xmltree))))) (mapcar 'twittering-atom-xmltree-to-status-datum entry-list))) (eval-and-compile (defsubst twittering-make-gap-list (text) "Return a list representing index gaps between TEXT and the encoded text. Indices included in entities in XML response from Twitter mean the positions of characters in the encoded text, where \"<\" and \">\" are encoded as \"<\" and \">\" respectively. Therefore, the indices differ from the positions in the decoded text. This function calculates the gaps from TEXT, which is assumed to be decoded. This function returns a list of pairs representing the gaps. For each pair, the car means the position in the encoded text and the cdr means the gap. The (car pair)-th character in the encoded text corresponds to the (- (car pair) (cdr pair))-th character in the decoded text." (let ((result nil) (pos 0) (gap 0)) (while (string-match "[<>]" text pos) (let ((shift 3)) (setq result (cons `(,(+ gap (match-end 0)) . ,(+ gap shift)) result)) (setq gap (+ shift gap))) (setq pos (match-end 0))) (reverse result))) (defun twittering-get-gap (pos gap-list) "Return the gap at the specific position. GAP-LIST must be generated by `twittering-make-gap-list'." (let ((rest-gaps gap-list) (gap 0)) (while (and rest-gaps (< (caar rest-gaps) pos)) (setq gap (cdar rest-gaps)) (setq rest-gaps (cdr rest-gaps))) gap))) (defun twittering-normalize-raw-status (raw-status &optional ignore-retweet) (let* ((status-data (cddr raw-status)) (raw-retweeted-status (assq 'retweeted_status status-data))) (cond ((and raw-retweeted-status (not ignore-retweet)) (let ((retweeted-status (twittering-normalize-raw-status raw-retweeted-status t)) (retweeting-status (twittering-normalize-raw-status raw-status t)) (items-overwritten-by-retweet '(id))) `(,@(mapcar (lambda (entry) (let ((sym (car entry)) (value (cdr entry))) (if (memq sym items-overwritten-by-retweet) (let ((value-on-retweet (cdr (assq sym retweeting-status)))) ;; Replace the value in `retweeted-status' with ;; that in `retweeting-status'. `(,sym . ,value-on-retweet)) `(,sym . ,value)))) retweeted-status) ,@(mapcar (lambda (entry) (let ((sym (car entry)) (value (cdr entry))) `(,(intern (concat "retweeted-" (symbol-name sym))) . ,value))) retweeted-status) ,@(mapcar (lambda (entry) (let ((sym (car entry)) (value (cdr entry))) `(,(intern (concat "retweeting-" (symbol-name sym))) . ,value))) retweeting-status)))) (t (flet ((assq-get (item seq) (car (cddr (assq item seq))))) `(,@(mapcar (lambda (entry) (let* ((sym (elt entry 0)) (sym-in-data (elt entry 1)) (encoded (elt entry 2)) (data (assq-get sym-in-data status-data))) `(,sym . ,(if encoded (twittering-decode-entities-after-parsing-xml data) data)))) '(;; Raw entries. (id id) (in-reply-to-screen-name in_reply_to_screen_name) (in-reply-to-status-id in_reply_to_status_id) (recipient-screen-name recipient_screen_name) ;; Encoded entries. (text text t) )) ;; created_at (created-at . ,(date-to-time (assq-get 'created_at status-data))) ;; Replace "true" and "false" into t and nil. ,@(mapcar (lambda (sym) `(,sym . ,(string= "true" (assq-get sym status-data)))) '(favorited truncated)) ;; Entities. ,(let* ((entity-data (cddr (assq 'entities status-data))) (encoded-text (assq-get 'text status-data)) (text (twittering-decode-entities-after-parsing-xml encoded-text)) (gap-list (twittering-make-gap-list text))) (list 'entity ;; hashtags (cons 'hashtags (remove nil (mapcar (lambda (entry) (when (and (consp entry) (eq 'hashtag (car entry))) (let* ((data (cdr entry)) (start-str (cdr (assq 'start (car data)))) (end-str (cdr (assq 'end (car data)))) (start (if (stringp start-str) (string-to-number start-str) 0)) (end (if (stringp end-str) (string-to-number end-str) 0)) (gap (twittering-get-gap start gap-list))) `((start . ,(- start gap)) (end . ,(- end gap)) (text . ,(elt (assq 'text data) 2)))))) (assq 'hashtags entity-data)))) ;; mentions (cons 'mentions (remove nil (mapcar (lambda (entry) (when (and (consp entry) (eq 'user_mention (car entry))) (let* ((data (cdr entry)) (start-str (cdr (assq 'start (car data)))) (end-str (cdr (assq 'end (car data)))) (start (if (stringp start-str) (string-to-number start-str) 0)) (end (if (stringp end-str) (string-to-number end-str) 0)) (gap (twittering-get-gap start gap-list))) `((start . ,(- start gap)) (end . ,(- end gap)) (id . ,(elt (assq 'id data) 2)) (screen-name . ,(elt (assq 'screen_name data) 2)) (name . ,(elt (assq 'name data) 2)))))) (assq 'user_mentions entity-data)))) ;; urls (cons 'urls (remove nil (mapcar (lambda (entry) (when (and (consp entry) (eq 'url (car entry))) (let* ((data (cdr entry)) (start-str (cdr (assq 'start (car data)))) (end-str (cdr (assq 'end (car data)))) (start (if (stringp start-str) (string-to-number start-str) 0)) (end (if (stringp end-str) (string-to-number end-str) 0)) (gap (twittering-get-gap start gap-list))) `((start . ,(- start gap)) (end . ,(- end gap)) (url . ,(elt (assq 'url data) 2)) (display-url . ,(elt (assq 'display_url data) 2)) (expanded-url . ,(elt (assq 'expanded_url data) 2)))))) (assq 'urls entity-data)))))) ;; Source. ,@(let ((source (twittering-decode-html-entities (assq-get 'source status-data)))) (if (and source (string-match "\\(.*\\)" source)) (let ((uri (match-string-no-properties 1 source)) (caption (match-string-no-properties 2 source))) `((source . ,caption) (source-uri . ,uri))) `((source . ,source) (source-uri . "")))) ;; Items related to the user that posted the tweet. ,@(let ((user-data (cddr (assq 'user status-data)))) (mapcar (lambda (entry) (let* ((sym (elt entry 0)) (sym-in-user-data (elt entry 1)) (encoded (elt entry 2)) (value (assq-get sym-in-user-data user-data))) `(,sym . ,(if encoded (twittering-decode-html-entities value) value)))) '(;; Raw entries. (user-id id) (user-profile-image-url profile_image_url) (user-url url) ;; Encoded entries. (user-name name t) (user-screen-name screen_name t) (user-location location t) (user-description description t)))) ,@(let ((user-data (cddr (assq 'user status-data)))) (mapcar (lambda (entry) `(,(car entry) . ,(string= "true" (assq-get (cdr entry) user-data)))) '((user-protected . protected)))))))))) (defun twittering-xmltree-to-status (xmltree) (setq xmltree (cond ((eq 'direct-messages (caar xmltree)) `(,@(mapcar (lambda (c-node) `(status nil (created_at nil ,(caddr (assq 'created_at c-node))) (id nil ,(caddr (assq 'id c-node))) (text nil ,(caddr (assq 'text c-node))) (source nil ,(format "%s" (car c-node))) ;; fake (truncated nil "false") (in_reply_to_status_id nil) (in_reply_to_user_id nil ,(caddr (assq 'recipient_id c-node))) (favorited nil "false") (recipient_screen_name nil ,(caddr (assq 'recipient_screen_name c-node))) (user nil ,@(cdddr (assq 'sender c-node))) (entities nil ,@(cdddr (assq 'entities c-node))))) (remove nil (mapcar (lambda (node) (and (consp node) (eq 'direct_message (car node)) node)) (cdr-safe (assq 'direct-messages xmltree)))) ))) ((eq 'statuses (caar xmltree)) (cddr (car xmltree))) (t ;; unknown format? nil))) (mapcar #'twittering-normalize-raw-status ;; quirk to treat difference between xml.el in Emacs21 and Emacs22 ;; On Emacs22, there may be blank strings (remove nil (mapcar (lambda (x) (if (consp x) x)) xmltree)))) (defun twittering-decode-entities-after-parsing-xml (encoded-str) "Decode ENCODED-STR retrieved by parsing XML and return the result. On Emacs 22 and later, `xml-parse-region' resolves numeric character references. It is redundant to resolve numeric character references again. However, in a XML response from Twitter, the two characters, \"<\" and \">\", are doubly escaped as \"&lt;\" and \"&gt;\", respectively. Then, they are represented as \"<\" and \">\" in the result of `xml-parse-region'. This function decodes them. On Emacs 21, `xml-parse-region' does not resolve numeric character references. This function decodes them." (cond ((null encoded-str) "") ((> 22 emacs-major-version) (replace-regexp-in-string "&#\\([0-9]+\\);" (lambda (str) (let ((number-entity (progn (string-match "&#\\([0-9]+\\);" str) (match-string 1 str)))) (char-to-string (twittering-ucs-to-char (string-to-number number-entity))))) encoded-str)) (t (replace-regexp-in-string "&\\(?:\\(gt\\)\\|\\(lt\\)\\);" (lambda (str) (if (match-beginning 1) ">" "<")) encoded-str)))) (defun twittering-decode-html-entities (encoded-str) (if encoded-str (let ((cursor 0) (found-at nil) (result '())) (while (setq found-at (string-match "&\\(#\\([0-9]+\\)\\|\\([a-zA-Z]+\\)\\);" encoded-str cursor)) (when (> found-at cursor) (list-push (substring encoded-str cursor found-at) result)) (let ((number-entity (match-string-no-properties 2 encoded-str)) (letter-entity (match-string-no-properties 3 encoded-str))) (cond (number-entity (list-push (char-to-string (twittering-ucs-to-char (string-to-number number-entity))) result)) (letter-entity (cond ((string= "gt" letter-entity) (list-push ">" result)) ((string= "lt" letter-entity) (list-push "<" result)) ((string= "quot" letter-entity) (list-push "\"" result)) (t (list-push "?" result)))) (t (list-push "?" result))) (setq cursor (match-end 0)))) (list-push (substring encoded-str cursor) result) (apply 'concat (nreverse result))) "")) ;; JSON (defun twittering-extract-common-element-from-json (json-object) "Extract common parameters of a tweet from JSON-OBJECT. Return an alist including text, created_at and entities, which are common to JSON objects from ordinary timeline and search timeline." (let* ((encoded-text (cdr (assq 'text json-object))) (text (twittering-decode-entities-after-parsing-xml encoded-text)) (gap-list (twittering-make-gap-list text)) (entities (cdr (assq 'entities json-object))) (urls (cdr (assq 'urls entities))) (hashtags (cdr (assq 'hashtags entities))) (mentions (cdr (assq 'user_mentions entities)))) `((text . ,text) (created-at . ,(apply 'encode-time (parse-time-string (cdr (assq 'created_at json-object))))) (entity (hashtags . ,(mapcar (lambda (entry) (let* ((indices (cdr (assq 'indices entry))) (start (elt indices 0)) (end (elt indices 1)) (gap (twittering-get-gap start gap-list))) `((start . ,(- start gap)) (end . ,(- end gap)) (text . ,(cdr (assq 'text entry)))))) hashtags)) (mentions . ,(mapcar (lambda (entry) (let* ((indices (cdr (assq 'indices entry))) (start (elt indices 0)) (end (elt indices 1)) (gap (twittering-get-gap start gap-list))) `((start . ,(- start gap)) (end . ,(- end gap)) (id . ,(cdr (assq 'id_str entry))) (name . ,(cdr (assq 'name entry))) (screen-name . ,(cdr (assq 'screen_name entry)))))) mentions)) (urls . ,(mapcar (lambda (entry) (let* ((indices (cdr (assq 'indices entry))) (start (elt indices 0)) (end (elt indices 1)) (gap (twittering-get-gap start gap-list))) `((start . ,(- start gap)) (end . ,(- end gap)) (url . ,(cdr (assq 'url entry))) (display-url . ,(cdr (assq 'display_url entry))) (expanded-url . ,(cdr (assq 'expanded_url entry)))))) urls)))))) (defun twittering-json-object-to-a-status (json-object) "Convert JSON-OBJECT representing a tweet into an alist representation. JSON-OBJECT must originate in an ordinary timeline, not a search timeline. To convert a JSON object from a search timeline, use `twittering-json-object-to-a-status-on-search'." (let* ((raw-retweeted-status (cdr (assq 'retweeted_status json-object)))) (cond (raw-retweeted-status (let ((retweeted-status (twittering-json-object-to-a-status-base raw-retweeted-status)) (retweeting-status (twittering-json-object-to-a-status-base json-object)) (items-overwritten-by-retweet '(id))) `(,@(mapcar (lambda (entry) (let ((sym (car entry)) (value (cdr entry))) (if (memq sym items-overwritten-by-retweet) (let ((value-on-retweet (cdr (assq sym retweeting-status)))) ;; Replace the value in `retweeted-status' with ;; that in `retweeting-status'. `(,sym . ,value-on-retweet)) `(,sym . ,value)))) retweeted-status) ,@(mapcar (lambda (entry) (let ((sym (car entry)) (value (cdr entry))) `(,(intern (concat "retweeted-" (symbol-name sym))) . ,value))) retweeted-status) ,@(mapcar (lambda (entry) (let ((sym (car entry)) (value (cdr entry))) `(,(intern (concat "retweeting-" (symbol-name sym))) . ,value))) retweeting-status)))) (t (twittering-json-object-to-a-status-base json-object))))) (defun twittering-json-object-to-a-status-base (json-object) (let ((user-data (cdr (assq 'user json-object)))) `(,@(twittering-extract-common-element-from-json json-object) ,@(let ((symbol-table '((favorited . favorited) (id_str . id) (in_reply_to_screen_name . in-reply-to-screen-name) (in_reply_to_status_id_str . in-reply-to-status-id) (recipient_screen_name . recipient-screen-name) (truncated . truncated)))) (remove nil (mapcar (lambda (entry) (let* ((sym (car entry)) (value (cdr entry)) (value (if (and (memq sym '(favorited truncated)) (eq value :json-false)) nil value)) (dest (cdr (assq sym symbol-table)))) (when (and dest value) `(,dest . ,value)))) json-object))) ;; source ,@(let ((source (cdr (assq 'source json-object)))) (if (and source (string-match "\\(.*\\)" source)) (let ((uri (match-string-no-properties 1 source)) (caption (match-string-no-properties 2 source))) `((source . ,caption) (source-uri . ,uri))) `((source . ,source) (source-uri . "")))) ;; user data ,@(let ((symbol-table '((id_str . user-id) (profile_image_url . user-profile-image-url) (url . user-url) (protected . user-protected) (name . user-name) (screen_name . user-screen-name) (location . user-location) (description . user-description)))) (remove nil (mapcar (lambda (entry) (let* ((sym (car entry)) (value (cdr entry)) (value (if (and (eq sym 'protected) (eq value :json-false)) nil value))) (when value (let ((dest (cdr (assq sym symbol-table)))) (when dest `(,dest . ,value)))))) user-data)))))) (defun twittering-json-object-to-a-status-on-search (json-object) "Convert JSON-OBJECT representing a tweet into an alist representation. JSON-OBJECT must originate in a search timeline. To convert a JSON object from other timelines, use `twittering-json-object-to-a-status'." `(,@(twittering-extract-common-element-from-json json-object) ,@(let ((symbol-table '((id_str . id) (to_user . in-reply-to-screen-name) (in_reply_to_status_id_str . in-reply-to-status-id) ;; user data (from_user_id_str . user-id) (profile_image_url . user-profile-image-url) (from_user_name . user-name) (from_user . user-screen-name)))) (remove nil (mapcar (lambda (entry) (let* ((sym (car entry)) (value (cdr entry)) (dest (cdr (assq sym symbol-table)))) (when (and dest value) `(,dest . ,value)))) json-object))) ;; source ,@(let ((source (twittering-decode-html-entities (cdr (assq 'source json-object))))) (if (and source (string-match "\\(.*\\)" source)) (let ((uri (match-string-no-properties 1 source)) (caption (match-string-no-properties 2 source))) `((source . ,caption) (source-uri . ,uri))) `((source . ,source) (source-uri . "")))))) (defun twittering-json-object-to-a-status-on-direct-messages (json-object) "Convert JSON-OBJECT representing a tweet into an alist representation. JSON-OBJECT must originate in timelines related to direct messages. To convert a JSON object from other timelines, use `twittering-json-object-to-a-status'." `(,@(twittering-extract-common-element-from-json json-object) ,@(let ((symbol-table '((id_str . id) (recipient_screen_name . recipient-screen-name)))) (remove nil (mapcar (lambda (entry) (let* ((sym (car entry)) (value (cdr entry)) (dest (cdr (assq sym symbol-table)))) (when (and dest value) `(,dest . ,value)))) json-object))) ;; sender ,@(let ((symbol-table '((id_str . user-id) (name . user-name) (profile_image_url . user-profile-image-url) (protected . user-protected) (screen_name . user-screen-name)))) (remove nil (mapcar (lambda (entry) (let* ((sym (car entry)) (value (cdr entry)) (value (cond ((eq sym 'protected) (if (eq value :json-false) nil t)) ((eq value :json-false) nil) (t value)))) (when value (let ((dest (cdr (assq sym symbol-table)))) (when dest `(,dest . ,value)))))) (cdr (assq 'sender json-object))))))) ;;;; ;;;; List info retrieval ;;;; (defun twittering-get-list-index (username) (twittering-call-api 'get-list-index `((username . ,username) (sentinel . twittering-http-get-list-index-sentinel)))) (defun twittering-get-list-subscriptions (username) (twittering-call-api 'get-list-subscriptions `((username . ,username) (sentinel . twittering-http-get-list-subscriptions-sentinel)))) (defun twittering-get-list-sync (username function) (setq twittering-list-index-retrieved nil) (let ((proc (funcall function username))) (when proc (twittering-wait-while nil 0.1 (and (not twittering-list-index-retrieved) (twittering-process-alive-p proc))) (when (and (not twittering-list-index-retrieved) (not (twittering-process-alive-p proc))) ;; If the process has been dead, wait a moment because ;; Emacs may be in the middle of evaluating the sentinel. (twittering-wait-while 10 0.1 (not twittering-list-index-retrieved))))) (cond ((null twittering-list-index-retrieved) (message "Failed to retrieve %s's lists." username) nil) ((stringp twittering-list-index-retrieved) (if (string= "" twittering-list-index-retrieved) (message "%s does not have a list." username) (message "%s" twittering-list-index-retrieved)) nil) ((listp twittering-list-index-retrieved) twittering-list-index-retrieved))) (defun twittering-get-list-index-sync (username) (twittering-get-list-sync username 'twittering-get-list-index)) (defun twittering-get-list-subscriptions-sync (username) (twittering-get-list-sync username 'twittering-get-list-subscriptions)) ;;;; ;;;; Buffer info ;;;; (defvar twittering-buffer-info-list nil "List of buffers managed by `twittering-mode'.") (defun twittering-get-buffer-list () "Return buffers managed by `twittering-mode'." (twittering-unregister-killed-buffer) twittering-buffer-info-list) (defun twittering-get-active-buffer-list () "Return active buffers managed by `twittering-mode', where statuses are retrieved periodically." (twittering-unregister-killed-buffer) (remove nil (mapcar (lambda (buffer) (if (twittering-buffer-active-p buffer) buffer nil)) twittering-buffer-info-list))) (defun twittering-buffer-p (&optional buffer) "Return t if BUFFER is managed by `twittering-mode'. BUFFER defaults to the the current buffer." (let ((buffer (or buffer (current-buffer)))) (and (buffer-live-p buffer) (memq buffer twittering-buffer-info-list)))) (defun twittering-buffer-related-p () "Return t if current buffer relates to `twittering-mode'." (or (twittering-buffer-p) (eq major-mode 'twittering-edit-mode) (string= (buffer-name (current-buffer)) twittering-debug-buffer))) (defun twittering-buffer-active-p (&optional buffer) "Return t if BUFFER is an active buffer managed by `twittering-mode'. BUFFER defaults to the the current buffer." (let ((buffer (or buffer (current-buffer)))) (and (twittering-buffer-p buffer) (with-current-buffer buffer twittering-active-mode)))) (defun twittering-get-buffer-from-spec (spec) "Return the buffer bound to SPEC. If no buffers are bound to SPEC, return nil." (let* ((spec-string (twittering-timeline-spec-to-string spec)) (buffers (remove nil (mapcar (lambda (buffer) (if (twittering-equal-string-as-timeline spec-string (twittering-get-timeline-spec-string-for-buffer buffer)) buffer nil)) (twittering-get-buffer-list))))) (if buffers ;; We assume that the buffer with the same spec is unique. (car buffers) nil))) (defun twittering-get-buffer-from-spec-string (spec-string) "Return the buffer bound to SPEC-STRING. If no buffers are bound to it, return nil." (let ((spec (twittering-string-to-timeline-spec spec-string))) (and spec (twittering-get-buffer-from-spec spec)))) (defun twittering-get-timeline-spec-for-buffer (buffer) "Return the timeline spec bound to BUFFER. If BUFFER is not managed by `twittering-mode', return nil." (when (twittering-buffer-p buffer) (with-current-buffer buffer twittering-timeline-spec))) (defun twittering-get-timeline-spec-string-for-buffer (buffer) "Return the timeline spec string bound to BUFFER. If BUFFER is not managed by `twittering-mode', return nil." (when (twittering-buffer-p buffer) (with-current-buffer buffer twittering-timeline-spec-string))) (defun twittering-current-timeline-spec () "Return the timeline spec bound to the current buffer. If it is not managed by `twittering-mode', return nil." (twittering-get-timeline-spec-for-buffer (current-buffer))) (defun twittering-current-timeline-spec-string () "Return the timeline spec string bound to the current buffer. If it is not managed by `twittering-mode', return nil." (twittering-get-timeline-spec-string-for-buffer (current-buffer))) (defun twittering-unregister-buffer (buffer &optional keep-timer) "Unregister BUFFER from `twittering-buffer-info-list'. If BUFFER is the last managed buffer and KEEP-TIMER is nil, call `twittering-stop' to stop timers." (when (memq buffer twittering-buffer-info-list) (setq twittering-buffer-info-list (delq buffer twittering-buffer-info-list)) (when (and (null twittering-buffer-info-list) (not keep-timer)) (twittering-stop)))) (defun twittering-unregister-killed-buffer () "Unregister buffers which has been killed." (mapc (lambda (buffer) (unless (buffer-live-p buffer) (twittering-unregister-buffer buffer))) twittering-buffer-info-list)) (defun twittering-replace-spec-string-for-buffer (buffer spec-string) "Replace the timeline spec string for BUFFER with SPEC-STRING when BUFFER is managed by `twittering-mode' and SPEC-STRING is equivalent to the current one." (when (twittering-buffer-p buffer) (let ((current (twittering-get-timeline-spec-string-for-buffer buffer))) (when (and (not (string= current spec-string)) (twittering-equal-string-as-timeline current spec-string)) (with-current-buffer buffer (rename-buffer spec-string t) (setq twittering-timeline-spec-string spec-string)))))) (defun twittering-set-active-flag-for-buffer (buffer active) "Set ACTIVE to active-flag for BUFFER." (when (twittering-buffer-p buffer) (let ((current (twittering-buffer-active-p buffer))) (when (or (and active (not current)) (and (not active) current)) (twittering-toggle-activate-buffer buffer))))) (defun twittering-toggle-activate-buffer (&optional buffer) "Toggle whether to retrieve timeline for the current buffer periodically." (interactive) (let ((buffer (or buffer (current-buffer)))) (when (twittering-buffer-p buffer) (with-current-buffer buffer (let* ((new-mode (not twittering-active-mode)) (active-buffer-list (twittering-get-active-buffer-list)) (start-timer (and new-mode (null active-buffer-list)))) (setq twittering-active-mode new-mode) (when start-timer (twittering-start)) (twittering-update-mode-line)))))) (defun twittering-activate-buffer (&optional buffer) "Activate BUFFER to retrieve timeline for it periodically." (interactive) (let ((buffer (or buffer (current-buffer)))) (twittering-set-active-flag-for-buffer buffer t))) (defun twittering-deactivate-buffer (&optional buffer) "Deactivate BUFFER not to retrieve timeline for it periodically." (interactive) (let ((buffer (or buffer (current-buffer)))) (twittering-set-active-flag-for-buffer buffer nil))) (defun twittering-kill-buffer (&optional buffer) "Kill BUFFER managed by `twittering-mode'." (interactive) (let ((buffer (or buffer (current-buffer)))) (when (twittering-buffer-p buffer) (twittering-deactivate-buffer buffer) (kill-buffer buffer) (twittering-unregister-killed-buffer)))) (defun twittering-get-managed-buffer (spec) "Return the buffer bound to SPEC. If no buffers are bound to SPEC, return newly generated buffer. SPEC may be a timeline spec or a timeline spec string." (let* ((original-spec spec) (spec-string (if (stringp spec) spec (twittering-timeline-spec-to-string spec))) ;; `spec-string' without text properties is required because ;; Emacs21 displays `spec-string' with its properties on mode-line. ;; In addition, copying `spec-string' keeps timeline-data from ;; being modified by `minibuf-isearch.el'. (spec-string (copy-sequence spec-string)) (spec (if (stringp spec-string) (twittering-string-to-timeline-spec spec-string) nil))) (when (null spec) (error "\"%s\" is invalid as a timeline spec" (or spec-string original-spec))) (set-text-properties 0 (length spec-string) nil spec-string) (twittering-add-timeline-history spec-string) (let ((buffer (twittering-get-buffer-from-spec spec))) (if buffer (progn (twittering-replace-spec-string-for-buffer buffer spec-string) (twittering-update-mode-line) buffer) (let ((buffer (generate-new-buffer spec-string)) (start-timer (null twittering-buffer-info-list))) (add-to-list 'twittering-buffer-info-list buffer t) (with-current-buffer buffer (twittering-mode-setup spec-string) (twittering-rerender-timeline-all buffer) (when (twittering-account-authorized-p) (when start-timer ;; If `buffer' is the first managed buffer, ;; call `twittering-start' to start timers. (twittering-start)) (unless (and start-timer twittering-active-mode) ;; If `buffer' is active and the first managed buffer, ;; `twittering-start' invokes ;; `twittering-get-and-render-timeline' indirectly. ;; Otherwise, `twittering-get-and-render-timeline' should be ;; invoked here. (twittering-get-and-render-timeline)))) buffer))))) ;;;; ;;;; Icon mode ;;;; (defvar twittering-icon-mode nil "You MUST NOT CHANGE this variable directly. You should change through function `twittering-icon-mode'.") (defun twittering-icon-mode (&optional arg) "Toggle display of icon images on timelines. With a numeric argument, if the argument is positive, turn on icon mode; otherwise, turn off icon mode." (interactive "P") (let ((prev-mode twittering-icon-mode)) (setq twittering-icon-mode (if (null arg) (not twittering-icon-mode) (< 0 (prefix-numeric-value arg)))) (unless (eq prev-mode twittering-icon-mode) (twittering-update-mode-line) (twittering-rerender-timeline-all (current-buffer) t)))) (defvar twittering-icon-prop-hash (make-hash-table :test 'equal) "Hash table for storing display properties of icon. The key is the size of icon and the value is a hash. The key of the child hash is URL and its value is the display property for the icon.") (defvar twittering-convert-program (executable-find "convert")) (defvar twittering-convert-fix-size 48) (defvar twittering-use-convert (not (null twittering-convert-program)) "*This variable makes a sense only if `twittering-convert-fix-size' is non-nil. If this variable is non-nil, icon images are converted by invoking \"convert\". Otherwise, cropped images are displayed.") (defvar twittering-fallback-image-format 'xpm "*Fallback format used for displaying an image without a supproted format. Images which Emacs does not supports are converted into the fallback image format.") (defvar twittering-use-profile-image-api nil "*Whether to use `profile_image' API for retrieving scaled icon images. NOTE: This API is rate limited and is obsolete in the Twitter REST API v1.1.") (defvar twittering-icon-storage-file (expand-file-name "~/.twittering-mode-icons.gz") "*The file to which icon images are stored. `twittering-icon-storage-limit' determines the number icons stored in the file. The file is loaded with `with-auto-compression-mode'.") (defvar twittering-use-icon-storage nil "*Whether to use the persistent icon storage. If this variable is non-nil, icon images are stored to the file specified by `twittering-icon-storage-file'.") (defvar twittering-icon-storage-recent-icons nil "List of recently rendered icons.") (defvar twittering-icon-storage-limit 500 "*How many icons are stored in the persistent storage. If `twittering-use-icon-storage' is nil, this variable is ignored. If a positive integer N, `twittering-save-icon-properties' saves N icons that have been recently rendered. If nil, the function saves all icons.") (defconst twittering-error-icon-data-pair '(xpm . "/* XPM */ static char * yellow3_xpm[] = { \"16 16 2 1\", \" c None\", \". c #FF0000\", \"................\", \". .\", \". . . .\", \". . . .\", \". . . .\", \". . . .\", \". . . .\", \". .. .\", \". .. .\", \". . . .\", \". . . .\", \". . . .\", \". . . .\", \". . . .\", \". .\", \"................\"}; ") "Image used when the valid icon cannot be retrieved.") (defun twittering-update-icon-storage-recent-icons (size image-url spec) (unless (null twittering-icon-storage-limit) (let ((dummy-icon-properties (twittering-make-display-spec-for-icon twittering-error-icon-data-pair))) (unless (equal spec dummy-icon-properties) (let ((history-delete-duplicates t)) (twittering-add-to-history 'twittering-icon-storage-recent-icons (list size image-url) twittering-icon-storage-limit)))))) (defun twittering-get-display-spec-for-icon (image-url) (let ((hash (gethash twittering-convert-fix-size twittering-icon-prop-hash))) (when hash (let ((spec (gethash image-url hash)) (size twittering-convert-fix-size)) (when spec (twittering-update-icon-storage-recent-icons size image-url spec) spec))))) (defun twittering-convert-image-data (image-data dest-type &optional src-type) "Convert IMAGE-DATA into XPM format and return it. If it fails to convert, return nil." (with-temp-buffer (set-buffer-multibyte nil) (buffer-disable-undo) (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary) (require-final-newline nil) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (insert image-data) (let* ((args `(,@(when (<= emacs-major-version 22) ;; Emacs22 and earlier raises "Color allocation error" ;; on decoding a XPM image with opacity. To ignore ;; opacity, the option "+matte" is added. '("+matte")) ,@(unless (fboundp 'create-animated-image) '("-flatten")) ,(if src-type (format "%s:-" src-type) "-") ,@(when (integerp twittering-convert-fix-size) `("-resize" ,(format "%dx%d" twittering-convert-fix-size twittering-convert-fix-size))) ,(format "%s:-" dest-type))) (exit-status (apply 'call-process-region (point-min) (point-max) twittering-convert-program t `(t nil) nil args))) (if (equal 0 exit-status) (buffer-string) ;; failed to convert the image. nil))))) (defun twittering-create-image-pair (image-data) "Return a pair of image type and image data. IMAGE-DATA is converted by `convert' if the image type of IMAGE-DATA is not available and `twittering-use-convert' is non-nil." (let* ((image-type (and image-data (image-type-from-data image-data))) (image-pair `(,image-type . ,image-data)) (converted-size `(,twittering-convert-fix-size . ,twittering-convert-fix-size))) (cond ((null image-data) twittering-error-icon-data-pair) ((and (image-type-available-p image-type) (or (fboundp 'create-animated-image) (not (and twittering-use-convert (eq image-type 'gif)))) (or (not (integerp twittering-convert-fix-size)) (equal (image-size (create-image image-data image-type t) t) converted-size))) image-pair) (twittering-use-convert (let ((converted-data (twittering-convert-image-data image-data twittering-fallback-image-format))) (if converted-data `(,twittering-fallback-image-format . ,converted-data) twittering-error-icon-data-pair))) (t twittering-error-icon-data-pair)))) (defun twittering-register-image-spec (image-url spec size) (let ((hash (gethash size twittering-icon-prop-hash))) (unless hash (setq hash (make-hash-table :test 'equal)) (puthash size hash twittering-icon-prop-hash)) (puthash image-url spec hash))) (defun twittering-register-image-data (image-url image-data &optional size) (let ((image-pair (twittering-create-image-pair image-data)) (size (or size twittering-convert-fix-size))) (when image-pair (let ((spec (twittering-make-display-spec-for-icon image-pair))) (twittering-register-image-spec image-url spec size) spec)))) (defun twittering-make-slice-spec (image-spec) "Return slice property for reducing the image size by cropping it." (let* ((size (image-size image-spec t)) (width (car size)) (height (cdr size)) (fixed-length twittering-convert-fix-size) (half-fixed-length (/ fixed-length 2))) (if (or (< fixed-length width) (< fixed-length height)) `(slice ,(max 0 (- (/ width 2) half-fixed-length)) ,(max 0 (- (/ height 2) half-fixed-length)) ,fixed-length ,fixed-length) `(slice 0 0 ,fixed-length ,fixed-length)))) (defun twittering-make-display-spec-for-icon (image-pair) "Return the specification for `display' text property, which limits the size of an icon image IMAGE-PAIR up to FIXED-LENGTH. If the type of the image is not supported, nil is returned. If the size of the image exceeds FIXED-LENGTH, the center of the image are displayed." (let* ((type (car-safe image-pair)) (data (cdr-safe image-pair)) (raw-image-spec ;; without margins (create-image data type t)) (slice-spec (when (and twittering-convert-fix-size (not twittering-use-convert)) (twittering-make-slice-spec raw-image-spec))) (image-spec (if (fboundp 'create-animated-image) ;; Emacs24 or later (create-animated-image data type t :margin 2 :ascent 'center) (create-image data type t :margin 2 :ascent 'center)))) (if slice-spec `(display (,image-spec ,slice-spec)) `(display ,image-spec)))) (defun twittering-make-icon-string (beg end image-url) (let ((display-spec (twittering-get-display-spec-for-icon image-url)) (image-data (gethash image-url twittering-url-data-hash)) (properties (and beg (text-properties-at beg))) (icon-string (copy-sequence " "))) (when properties (add-text-properties 0 (length icon-string) properties icon-string)) (cond (display-spec (let ((icon-string (apply 'propertize "_" (append properties display-spec)))) ;; Remove the property required no longer. (remove-text-properties 0 (length icon-string) '(need-to-be-updated nil) icon-string) icon-string)) ((and (integerp image-data) (<= twittering-url-request-retry-limit image-data)) ;; Try to retrieve the image no longer. (twittering-register-image-data image-url nil) (twittering-make-icon-string beg end image-url)) ((and image-data (not (integerp image-data))) (twittering-register-image-data image-url image-data) (twittering-make-icon-string beg end image-url)) (t (put-text-property 0 (length icon-string) 'need-to-be-updated `(twittering-make-icon-string ,image-url) icon-string) (twittering-url-retrieve-async image-url 'twittering-register-image-data) icon-string)))) (defun twittering-save-icon-properties (&optional filename) (let ((filename (or filename twittering-icon-storage-file)) (stored-data (cond ((null twittering-icon-storage-limit) (let ((result nil) (dummy-icon-properties (twittering-make-display-spec-for-icon twittering-error-icon-data-pair))) (maphash (lambda (size hash) (maphash (lambda (url properties) (unless (equal properties dummy-icon-properties) (setq result (cons (list size url) result)))) hash)) twittering-icon-prop-hash) result)) (t (reverse twittering-icon-storage-recent-icons)))) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (when (require 'jka-compr nil t) (with-auto-compression-mode (let ((coding-system-for-write 'binary)) (with-temp-file filename (insert "( 2 ") (prin1 (cons 'emacs-version emacs-version) (current-buffer)) (insert "(icon-list ") (mapc (lambda (entry) (let* ((size (elt entry 0)) (url (elt entry 1)) (properties (gethash url (gethash size twittering-icon-prop-hash)))) (insert (if size (format "(%d " size) "(nil ")) (prin1 url (current-buffer)) (insert " ") (prin1 properties (current-buffer)) (insert ")\n"))) stored-data) (insert "))"))))))) (defun twittering-load-icon-properties (&optional filename) (let* ((filename (or filename twittering-icon-storage-file)) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory) (data (with-temp-buffer (condition-case err (cond ((and (require 'jka-compr) (file-exists-p filename)) (with-auto-compression-mode (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary)) (insert-file-contents filename))) (read (current-buffer))) (t nil)) (error (message "Failed to load icon images. %s" (cdr err)) nil))))) (cond ((equal 2 (car data)) (let ((version (cdr (assq 'emacs-version data)))) (cond ((or (equal version emacs-version) (y-or-n-p (format "%s is generated by Emacs %s! Use it?" filename version))) (mapc (lambda (entry) (let ((size (elt entry 0)) (url (elt entry 1)) (properties (elt entry 2))) (twittering-update-icon-storage-recent-icons size url properties) (twittering-register-image-spec url properties size))) (cdr (assq 'icon-list data)))) (t (message "Stopped loading icons"))))) (t (mapc (lambda (entry) (let ((size (car entry)) (prop-alist (cdr entry))) (mapc (lambda (entry) (let ((url (car entry)) (properties (cdr entry))) (twittering-update-icon-storage-recent-icons size url properties) (twittering-register-image-spec url properties size))) prop-alist))) data))))) ;;;; ;;;; Mode-line ;;;; ;;; SSL (defconst twittering-ssl-indicator-image (when (image-type-available-p 'xpm) '(image :type xpm :ascent center :data "/* XPM */ /* * Copyright (C) 2003 Yuuichi Teranishi * Copyright (C) 2003 Kazu Yamamoto * Copyright (C) 2004 Yoshifumi Nishida * Copyright notice is the same as Mew's one. */ static char * yellow3_xpm[] = { \"14 14 7 1\", \" c None\", \". c #B07403\", \"+ c #EFEE38\", \"@ c #603300\", \"# c #D0A607\", \"$ c #FAFC90\", \"% c #241100\", \" .++++@ \", \" .+@...+@ \", \" .+@ .+@ \", \" .+@ .+@ \", \" .+@ .+@ \", \"++########@@@@\", \"+$$++++++++#@@\", \"+$++++%@+++#@@\", \"+$+++%%%@++#@@\", \"+$+++%%%@++#@@\", \"+$++++%@+++#@@\", \"+$++++%@+++#@@\", \"+$+++++++++#@@\", \"++@@@@@@@@@@@@\"}; " ;;; The above image is copied from `mew-lock.xpm' distributed with Mew. ;;; The copyright of the image is below, which is copied from `mew.el'. ;;; Copyright Notice: ;; Copyright (C) 1994-2009 Mew developing team. ;; All rights reserved. ;; Redistribution and use in source and binary forms, with or without ;; modification, are permitted provided that the following conditions ;; are met: ;; ;; 1. Redistributions of source code must retain the above copyright ;; notice, this list of conditions and the following disclaimer. ;; 2. Redistributions in binary form must reproduce the above copyright ;; notice, this list of conditions and the following disclaimer in the ;; documentation and/or other materials provided with the distribution. ;; 3. Neither the name of the team nor the names of its contributors ;; may be used to endorse or promote products derived from this software ;; without specific prior written permission. ;; ;; THIS SOFTWARE IS PROVIDED BY THE TEAM AND CONTRIBUTORS ``AS IS'' AND ;; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ;; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ;; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TEAM OR CONTRIBUTORS BE ;; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ;; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ;; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ;; BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ;; WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE ;; OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN ;; IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. )) "Image for indicator of SSL state.") (defconst twittering-modeline-ssl (if twittering-ssl-indicator-image (propertize "SSL" 'display twittering-ssl-indicator-image 'help-echo "SSL is enabled.") "SSL")) ;;; ACTIVE/INACTIVE (defconst twittering-active-indicator-image (when (image-type-available-p 'xpm) '(image :type xpm :ascent center :data "/* XPM */ static char *plugged[] = { \"32 12 8 1\", \" c None\", \". c #a6caf0\", \"# c #8fa5cf\", \"a c #717171\", \"b c #5d5d97\", \"c c #8488ca\", \"d c #9f9f9f\", \"e c #7f8080\", \" ... \", \" .ccb.... \", \" accb####. \", \" .accb#####.. \", \" eeeeeeeeaccb#####.eeeeeeee \", \" dddddddcaccb#####.dedddddd \", \" dddddddcaccb#####.dedddddd \", \" eeeeeeeeaccb#####.eeeeeeee \", \" aaccb####aaa \", \" accbaaaaa \", \" aaaaaaaa \", \" aaa \" }; ")) "Image for indicator of active state." ;;; The above image is copied from `plugged.xpm' distributed with Wanderlust ;;; by Yuuichi Teranishi . ;;; The copyright of the image is below, which is copied from `COPYING' of ;;; Wanderlust 2.14. ;; Copyright (C) 1998-2001 Yuuichi Teranishi ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This program 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 General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ) (defconst twittering-inactive-indicator-image (when (image-type-available-p 'xpm) '(image :type xpm :ascent center :data "/* XPM */ static char * unplugged_xpm[] = { \"32 12 9 1\", \" s None c None\", \". c tomato\", \"X c #a6caf0\", \"o c #8488ca\", \"O c #5d5d97\", \"+ c #8fa5cf\", \"@ c #717171\", \"# c #7f8080\", \"$ c #9f9f9f\", \" XXX...... \", \" ... ... \", \" ..O ....X \", \" ..oO ...+..XX \", \" ######.ooO ...+++.X##### \", \" $$$$$o.ooO ...@+++.X$#$$$ \", \" $$$$$o.ooO ... @+++.X$#$$$ \", \" ######.ooO... @+++.X##### \", \" ..o... @++..@@ \", \" .... @@..@ \", \" ... ...@ \", \" ...... \" }; ")) "Image for indicator of inactive state." ;;; The above image is copied from `unplugged.xpm' distributed with Wanderlust ;;; by Yuuichi Teranishi . ;;; The copyright of the image is below, which is copied from `COPYING' of ;;; Wanderlust 2.14. ;; Copyright (C) 1998-2001 Yuuichi Teranishi ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This program 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 General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ) (defconst twittering-modeline-properties (when (display-mouse-p) `(local-map ,(purecopy (make-mode-line-mouse-map 'mouse-2 #'twittering-toggle-activate-buffer)) help-echo "mouse-2 toggles activate buffer"))) (defconst twittering-modeline-active (if twittering-active-indicator-image (apply 'propertize " " `(display ,twittering-active-indicator-image ,@twittering-modeline-properties)) " ")) (defconst twittering-modeline-inactive (if twittering-inactive-indicator-image (apply 'propertize "INACTIVE" `(display ,twittering-inactive-indicator-image ,@twittering-modeline-properties)) "INACTIVE")) (defun twittering-mode-line-buffer-identification () (let ((active-mode-indicator (if twittering-active-mode twittering-modeline-active twittering-modeline-inactive)) (enabled-options `(,(if twittering-display-connection-method (concat (when twittering-use-ssl (concat twittering-modeline-ssl ":")) (twittering-get-connection-method-name twittering-use-ssl)) (when twittering-use-ssl twittering-modeline-ssl)) ,@(when twittering-jojo-mode '("jojo")) ,@(when twittering-icon-mode '("icon")) ,@(when twittering-reverse-mode '("reverse")) ,@(when twittering-proxy-use '("proxy"))))) (concat active-mode-indicator (when twittering-display-remaining (let ((spec (twittering-current-timeline-spec))) (twittering-get-ratelimit-indicator-string spec))) (when enabled-options (concat "[" (mapconcat 'identity enabled-options " ") "]"))))) (defun twittering-update-mode-line () "Update mode line." (force-mode-line-update)) ;;;; ;;;; Format of a status ;;;; (eval-and-compile (defsubst twittering-make-common-properties (status) "Generate a property list that tweets should have irrespective of format." (apply 'append (mapcar (lambda (entry) (let ((prop-sym (if (consp entry) (car entry) entry)) (status-sym (if (consp entry) (cdr entry) entry))) (list prop-sym (cdr (assq status-sym status))))) '(id retweeted-id source-spec (username . user-screen-name) text))))) (defun twittering-get-common-properties (pos) "Get a common property list of the tweet rendered at POS. The common property list is added to each rendered tweet irrespective of format. The common properties follows: properites generated by `twittering-make-common-properties', `field' and `rendered-as' generated by `twittering-render-a-field' or `twittering-make-properties-of-popped-ancestors'." (apply 'append (mapcar (lambda (prop) (let ((value (get-text-property pos prop))) (when value `(,prop ,value)))) '(field id rendered-as retweeted-id source-spec text username)))) (defun twittering-format-string (string prefix replacement-table) "Format STRING according to PREFIX and REPLACEMENT-TABLE. PREFIX is a regexp. REPLACEMENT-TABLE is a list of (FROM . TO) pairs, where FROM is a regexp and TO is a string or a 2-parameter function. The pairs in REPLACEMENT-TABLE are stored in order of precedence. First, search PREFIX in STRING from left to right. If PREFIX is found in STRING, try to match the following string with FROM of each pair in the same order of REPLACEMENT-TABLE. If FROM in a pair is matched, replace the prefix and the matched string with a string generated from TO. If TO is a string, the matched string is replaced with TO. If TO is a function, the matched string is replaced with the return value of (funcall TO CONTEXT), where CONTEXT is an alist. Each element of CONTEXT is (KEY . VALUE) and KEY is one of the following symbols; 'following-string --the matched string following the prefix 'match-data --the match-data for the regexp FROM. 'prefix --PREFIX. 'replacement-table --REPLACEMENT-TABLE. 'from --FROM. 'processed-string --the already processed string." (let ((current-pos 0) (result "") (case-fold-search nil)) (while (and (string-match prefix string current-pos) (not (eq (match-end 0) current-pos))) (let ((found nil) (current-table replacement-table) (next-pos (match-end 0)) (matched-string (match-string 0 string)) (skipped-string (substring string current-pos (match-beginning 0)))) (setq result (concat result skipped-string)) (setq current-pos next-pos) (while (and (not (null current-table)) (not found)) (let ((key (caar current-table)) (value (cdar current-table)) (following-string (substring string current-pos)) (case-fold-search nil)) (if (string-match (concat "\\`" key) following-string) (let ((next-pos (+ current-pos (match-end 0))) (output (if (stringp value) value (funcall value `((following-string . ,following-string) (match-data . ,(match-data)) (prefix . ,prefix) (replacement-table . ,replacement-table) (from . ,key) (processed-string . ,result)))))) (setq found t) (setq current-pos next-pos) (setq result (concat result output))) (setq current-table (cdr current-table))))) (if (not found) (setq result (concat result matched-string))))) (let ((skipped-string (substring string current-pos))) (concat result skipped-string)) )) (eval-and-compile (defsubst twittering-make-string-with-user-name-property (str status) (if str (let* ((user-screen-name (cdr (assq 'user-screen-name status))) (uri (twittering-get-status-url user-screen-name)) (spec (twittering-make-user-timeline-spec-direct user-screen-name))) (propertize str 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri uri 'screen-name-in-text user-screen-name 'goto-spec spec 'face 'twittering-username-face 'front-sticky nil 'rear-nonsticky t)) "")) (defsubst twittering-make-string-with-source-property (str status) (if str (let ((uri (cdr (assq 'source-uri status)))) (propertize str 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri uri 'face 'twittering-uri-face 'source str 'front-sticky nil 'rear-nonsticky t)) "")) (defsubst twittering-make-string-with-uri-property (str status) (if str (let ((uri (if (assq 'retweeted-id status) (twittering-get-status-url (cdr (assq 'retweeted-user-screen-name status)) (cdr (assq 'retweeted-id status))) (twittering-get-status-url (cdr (assq 'user-screen-name status)) (cdr (assq 'id status)))))) (propertize str 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri uri 'face 'twittering-uri-face 'front-sticky nil 'rear-nonsticky t)) ""))) (defun twittering-make-fontified-tweet-text (str-expr regexp-hash regexp-atmark) (let ((regexp-str (mapconcat 'identity (list ;; hashtag (concat regexp-hash "\\([[:alpha:]0-9_-]+\\)") ;; @USER/LIST (concat regexp-atmark "\\(\\([a-zA-Z0-9_-]+\\)/\\([a-zA-Z0-9_-]+\\)\\)") ;; @USER (concat regexp-atmark "\\([a-zA-Z0-9_-]+\\)") ;; URI "\\(https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+\\)") "\\|"))) `(let ((pos 0) (str (copy-sequence ,str-expr))) (while (string-match ,regexp-str str pos) (let* ((beg (match-beginning 0)) (end (match-end 0)) (range-and-properties (cond ((get-text-property beg 'face str) ;; The matched substring has been already fontified. ;; The fontification with entities must fontify the ;; head of the matched string. nil) ((match-string 1 str) ;; hashtag (let* ((hashtag (match-string 1 str)) (spec-string (twittering-make-hashtag-timeline-spec-string-direct hashtag)) (url (twittering-get-search-url (concat "#" hashtag)))) (list beg end 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri url 'goto-spec spec-string 'face 'twittering-username-face))) ((match-string 2 str) ;; @USER/LIST (let ((owner (match-string 3 str)) (list-name (match-string 4 str)) ;; Properties are added to the matched part only. ;; The prefixes `twittering-regexp-atmark' will not ;; be highlighted. (beg (match-beginning 2))) (list beg end 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri (twittering-get-list-url owner list-name) 'goto-spec (twittering-make-list-timeline-spec-direct owner list-name) 'face 'twittering-username-face))) ((match-string 5 str) ;; @USER (let ((screen-name (match-string 5 str)) ;; Properties are added to the matched part only. ;; The prefixes `twittering-regexp-atmark' will not ;; be highlighted. (beg (match-beginning 5))) (list beg end 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri (twittering-get-status-url screen-name) 'screen-name-in-text screen-name 'goto-spec (twittering-make-user-timeline-spec-direct screen-name) 'face 'twittering-uri-face))) ((match-string 6 str) ;; URI (let ((uri (match-string 6 str))) (list beg end 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri uri 'uri-origin 'explicit-uri-in-tweet 'face 'twittering-uri-face))))) (beg (if range-and-properties (car range-and-properties) beg)) (end (if range-and-properties (cadr range-and-properties) end)) (properties `(,@(cddr range-and-properties) front-sticky nil rear-nonsticky t))) (when range-and-properties (add-text-properties beg end properties str)) (setq pos end))) str))) (eval-and-compile (defsubst twittering-make-fontified-tweet-text-with-entity (status) (let* ((text (copy-sequence (cdr (assq 'text status)))) (text-length (length text)) (entities (cdr (assq 'entity status)))) ;; hashtags (mapc (lambda (hashtag) (let* ((start (cdr (assq 'start hashtag))) (end (min (cdr (assq 'end hashtag)) text-length)) (tag (cdr (assq 'text hashtag))) (spec-string (twittering-make-hashtag-timeline-spec-string-direct tag))) (set-text-properties start end `(mouse-face highlight keymap ,twittering-mode-on-uri-map uri ,(twittering-get-search-url (concat "#" tag)) goto-spec ,spec-string face twittering-username-face front-sticky nil rear-nonsticky t) text))) (cdr (assq 'hashtags entities))) ;; mentions (mapc (lambda (mention) (let ((start (cdr (assq 'start mention))) (end (min (cdr (assq 'end mention)) text-length)) (screen-name (cdr (assq 'screen-name mention)))) (set-text-properties start end `(mouse-face highlight keymap ,twittering-mode-on-uri-map uri ,(twittering-get-status-url screen-name) screen-name-in-text ,screen-name goto-spec ,(twittering-make-user-timeline-spec-direct screen-name) face twittering-uri-face front-sticky nil rear-nonsticky t) text))) (cdr (assq 'mentions entities))) ;; urls (let ((offset 0)) (mapc (lambda (url-info) (let* ((text-length (length text)) (start (cdr (assq 'start url-info))) (end (cdr (assq 'end url-info))) (url (cdr (assq 'url url-info))) (expanded-url ;; If the `url' is short and not wrapped, ;; `expanded-url' is nil. (or (cdr (assq 'expanded-url url-info)) url)) (replacement (propertize expanded-url 'mouse-face 'highlight 'keymap twittering-mode-on-uri-map 'uri url 'uri-origin 'explicit-uri-in-tweet 'expanded-uri expanded-url 'face 'twittering-uri-face 'front-sticky nil 'rear-nonsticky t))) (setq text (concat (substring text 0 (min (+ offset start) text-length)) replacement (substring text (min (+ offset end) text-length)))) (setq offset (+ offset (- (length expanded-url) (- end start)))))) (cdr (assq 'urls entities)))) text))) (defun twittering-generate-format-table (status-sym prefix-sym) `(("%" . "%") ("}" . "}") ("#" . (cdr (assq 'id ,status-sym))) ("'" . (when (cdr (assq 'truncated ,status-sym)) "...")) ("c" . (let ((system-time-locale "C")) (format-time-string "%a %b %d %H:%M:%S %z %Y" (cdr (assq 'created-at ,status-sym))))) ("d" . (cdr (assq 'user-description ,status-sym))) ("f" . (twittering-make-string-with-source-property (cdr (assq 'source ,status-sym)) ,status-sym)) ("i" . (when (and twittering-icon-mode window-system) (let ((url (cond ((and twittering-use-profile-image-api (eq twittering-service-method 'twitter) (or (null twittering-convert-fix-size) (member twittering-convert-fix-size '(48 73)))) (let ((user (cdr (assq 'user-screen-name ,status-sym))) (size (if (or (null twittering-convert-fix-size) (= 48 twittering-convert-fix-size)) "normal" "bigger"))) (format "http://%s/%s/%s.xml?size=%s" twittering-api-host (twittering-api-path "users/profile_image") user size))) (t (cdr (assq 'user-profile-image-url ,status-sym)))))) (twittering-make-icon-string nil nil url)))) ("j" . (cdr (assq 'user-id ,status-sym))) ("L" . (let ((location (or (cdr (assq 'user-location ,status-sym)) ""))) (unless (string= "" location) (concat " [" location "]")))) ("l" . (cdr (assq 'user-location ,status-sym))) ("p" . (when (cdr (assq 'user-protected ,status-sym)) "[x]")) ("r" . (let ((reply-id (or (cdr (assq 'in-reply-to-status-id ,status-sym)) "")) (reply-name (or (cdr (assq 'in-reply-to-screen-name ,status-sym)) "")) (recipient-screen-name (cdr (assq 'recipient-screen-name ,status-sym)))) (let* ((pair (cond (recipient-screen-name (cons (format "sent to %s" recipient-screen-name) (twittering-get-status-url recipient-screen-name))) ((and (not (string= "" reply-id)) (not (string= "" reply-name))) (cons (format "in reply to %s" reply-name) (twittering-get-status-url reply-name reply-id))) (t nil))) (str (car pair)) (url (cdr pair)) (properties (list 'mouse-face 'highlight 'face 'twittering-uri-face 'keymap twittering-mode-on-uri-map 'uri url 'front-sticky nil 'rear-nonsticky t))) (when (and str url) (concat " " (apply 'propertize str properties)))))) ("R" . (let ((retweeted-by (or (cdr (assq 'retweeting-user-screen-name ,status-sym)) ""))) (unless (string= "" retweeted-by) (concat " (retweeted by " retweeted-by ")")))) ("S" . (twittering-make-string-with-user-name-property (cdr (assq 'user-name ,status-sym)) ,status-sym)) ("s" . (twittering-make-string-with-user-name-property (cdr (assq 'user-screen-name ,status-sym)) ,status-sym)) ("T" . ,(twittering-make-fontified-tweet-text `(twittering-make-fontified-tweet-text-with-entity ,status-sym) twittering-regexp-hash twittering-regexp-atmark)) ("t" . ,(twittering-make-fontified-tweet-text `(twittering-make-fontified-tweet-text-with-entity ,status-sym) twittering-regexp-hash twittering-regexp-atmark)) ("u" . (cdr (assq 'user-url ,status-sym))))) (defun twittering-generate-formater-for-first-spec (format-str status-sym prefix-sym) (cond ((string-match "\\`}" format-str) ;; "}" at the first means the end of the current level. `(nil . ,(substring format-str (match-end 0)))) ((string-match "\\`%" format-str) (let* ((following (substring format-str 1)) (table (twittering-generate-format-table status-sym prefix-sym)) (regexp (concat "\\`\\(" (mapconcat 'car table "\\|") "\\)")) (case-fold-search nil)) (cond ((string-match "\\`@\\({\\([^}]*\\)}\\)?" following) (let ((time-format (or (match-string 2 following) "%I:%M %p %B %d, %Y")) (rest (substring following (match-end 0)))) `((let* ((created-at (cdr (assq 'created-at ,status-sym))) (url (if (assq 'retweeted-id ,status-sym) (twittering-get-status-url (cdr (assq 'retweeted-user-screen-name ,status-sym)) (cdr (assq 'retweeted-id ,status-sym))) (twittering-get-status-url (cdr (assq 'user-screen-name ,status-sym)) (cdr (assq 'id ,status-sym))))) (properties (list 'mouse-face 'highlight 'face 'twittering-uri-face 'keymap twittering-mode-on-uri-map 'uri url 'front-sticky nil 'rear-nonsticky t))) (twittering-make-passed-time-string nil nil created-at ,time-format properties)) . ,rest))) ((string-match "\\`C\\({\\([^}]*\\)}\\)?" following) (let ((time-format (or (match-string 2 following) "%H:%M:%S")) (rest (substring following (match-end 0)))) `((let* ((created-at (cdr (assq 'created-at ,status-sym)))) (twittering-make-string-with-uri-property (format-time-string ,time-format created-at) ,status-sym)) . ,rest))) ((string-match "\\`FACE\\[\\([a-zA-Z0-9:-]+\\)\\]{" following) (let* ((face-name-str (match-string 1 following)) (str-after-brace (substring following (match-end 0))) (face-sym (intern face-name-str)) (pair (twittering-generate-formater-for-current-level str-after-brace status-sym prefix-sym)) (braced-body (car pair)) (rest (cdr pair))) `((propertize (concat ,@braced-body) 'face ',face-sym) . ,rest))) ((string-match "\\`\\(FILL\\|FOLD\\)\\(\\[\\([^]]*\\)\\]\\)?{" following) (let* ((str-after-brace (substring following (match-end 0))) (specifier (match-string 1 following)) (prefix-str (match-string 3 following)) (pair (twittering-generate-formater-for-current-level str-after-brace status-sym prefix-sym)) (filled-body (car pair)) (formater `(lambda (,status-sym ,prefix-sym) (let ((,prefix-sym (concat ,prefix-sym ,prefix-str))) (concat ,@filled-body)))) (keep-newline (string= "FOLD" specifier)) (rest (cdr pair))) `((twittering-update-filled-string nil nil ,formater ,status-sym ,prefix-sym ,prefix-str ,keep-newline) . ,rest))) ((string-match "\\`RT{" following) (let* ((str-after-brace (substring following (match-end 0))) (pair (twittering-generate-formater-for-current-level str-after-brace 'retweeting prefix-sym)) (braced-body (car pair)) (rest (cdr pair))) `((when (assq 'retweeted-id ,status-sym) (let ((retweeting (mapcar (lambda (entry) (let ((key-str (symbol-name (car entry))) (value (cdr entry))) (when (string-match "\\`retweeting-" key-str) (let ((new-key (intern (substring key-str (match-end 0))))) (cons new-key value))))) ,status-sym))) (concat ,@braced-body))) . ,rest))) ((string-match regexp following) (let ((specifier (match-string 1 following)) (rest (substring following (match-end 0)))) `(,(cdr (assoc specifier table)) . ,rest))) (t `("%" . ,following))))) ((string-match "\\(%\\|}\\)" format-str) (let* ((sep (match-beginning 0)) (first (substring format-str 0 sep)) (last (substring format-str sep))) ;; Split before "%" or "}". `(,first . ,last))) (t `(,format-str . nil)))) (defun twittering-generate-formater-for-current-level (format-str status-sym prefix-sym) (let ((result nil) (rest format-str) (continue t)) (while (and continue rest) (let* ((pair (twittering-generate-formater-for-first-spec rest status-sym prefix-sym)) (current-result (car pair))) (if current-result (setq result (append result `(,current-result))) ;; If `result' is nil, it means the end of the current level. (setq continue nil)) (setq rest (cdr pair)))) `(,result . ,rest))) (defun twittering-generate-format-status-function (format-str) (let* ((status-sym 'status) (prefix-sym 'prefix) (pair (twittering-generate-formater-for-current-level format-str status-sym prefix-sym)) (body (car pair)) (rest (cdr pair))) (cond ((null rest) `(lambda (status prefix) (let* ((common-properties (twittering-make-common-properties status)) (str (concat ,@body)) (str (if prefix (replace-regexp-in-string "^" prefix str) str)) (next (next-single-property-change 0 'need-to-be-updated str)) (need-to-be-updated (or (get-text-property 0 'need-to-be-updated str) (and next (< next (length str)))))) (add-text-properties 0 (length str) common-properties str) (when (and prefix need-to-be-updated) ;; With a prefix, redisplay the total status instead of ;; redisplaying partially. (remove-text-properties 0 (length str) '(need-to-be-updated nil) str) (put-text-property 0 (length str) 'need-to-be-updated `(twittering-format-status-for-redisplay ,status ,prefix) str)) str))) (t (message "Failed to generate a status formater for `twittering-mode'.") nil)))) (defun twittering-update-status-format (&optional format-str) "Update the format for rendering a tweet. If FORMAT-STR is nil, `twittering-status-format' is used in place of FORMAT-STR. If FORMAT-STR is valid as a format, `twittering-format-status-function' is replaced by the result of `twittering-generate-format-status-function' for FORMAT-STR. If FORMAT-STR is invalid as a format, an error is signaled and `twittering-format-status-function' is not updated." (let ((format-str (or format-str twittering-status-format))) (unless (string= format-str twittering-format-status-function-source) (let* ((before (get-buffer "*Compile-Log*")) (func (twittering-generate-format-status-function format-str))) (cond ((and func (functionp func)) (setq twittering-format-status-function-source format-str) (setq twittering-format-status-function (byte-compile func)) (setq twittering-format-status-function-without-compile func) (setq twittering-status-format format-str) (let ((current (get-buffer "*Compile-Log*"))) (when (and (null before) current (= 0 (buffer-size current))) (kill-buffer current)))) (t (error "Invalid format: %s" format-str) nil)))))) (defun twittering-format-status (status &optional prefix) "Format a STATUS by using `twittering-format-status-function'. Specification of FORMAT-STR is described in the document for the variable `twittering-status-format'." (funcall twittering-format-status-function status prefix)) (defun twittering-format-status-for-redisplay (beg end status &optional prefix) (twittering-format-status status prefix)) ;;;; ;;;; Rendering ;;;; (defun twittering-field-id< (field1 field2) (string< field1 field2)) (defun twittering-field-id= (field1 field2) (string= field1 field2)) (defun twittering-make-field-id-from-id (id &optional base-id) "Generate a field property for the tweet corresponding to ID. Tweets are rendered in order of the field on `twittering-mode'. If BASE-ID is non-nil, generate a field id for a tweet rendered as a popped ancestor tweet by `twittering-show-replied-statuses'. In the case, BASE-ID means the ID of the descendant." (let ((format-func (lambda (id) (format "%02d-%s" (length id) id)))) (cond (base-id (format "O:%s:5:ancestor:%s" (funcall format-func base-id) (funcall format-func id))) (t (format "O:%s:8" (funcall format-func id)))))) (defun twittering-make-field-id (status &optional base-id) "Generate a field property for STATUS. Tweets are rendered in order of the field on `twittering-mode'. If BASE-ID is non-nil, generate a field id for a tweet rendered as a popped ancestor tweet by `twittering-show-replied-statuses'. In the case, BASE-ID means the ID of the descendant." (let ((id (cdr (assq 'id status)))) (twittering-make-field-id-from-id id base-id))) (defun twittering-make-properties-of-popped-ancestors (base-id) `(rendered-as ((ancestor-of . ,base-id)))) (defun twittering-make-field-id-of-timeline-oldest-end (spec-string) "Return the field ID for the oldest end. This is given to a special field, header or footer, which does not correspond to a tweet. It must be less than IDs made by `twittering-make-field-id' for any other normal fields in the meaning of `twittering-field-id<'." (format "H:%s" spec-string)) (defun twittering-make-field-id-of-timeline-latest-end (spec-string) "Return the field ID for the oldest end. This is given to a special field, header or footer, which does not correspond to a tweet. It must be greater than IDs made by `twittering-make-field-id' for any other normal fields in the meaning of `twittering-field-id<'." (format "U:%s" spec-string)) (defun twittering-field-id-is-timeline-oldest-end (field-id) "Return non-nil if FIELD-ID corresponds to the oldest end field. Return non-nil if FIELD-ID is made by `twittering-make-field-id-of-timeline-oldest-end'." (and (stringp field-id) (string= (substring field-id 0 2) "H:"))) (defun twittering-field-id-is-timeline-latest-end (field-id) "Return non-nil if FIELD-ID corresponds to the latest end field. Return non-nil if FIELD-ID is made by `twittering-make-field-id-of-timeline-latest-end'." (and (stringp field-id) (string= (substring field-id 0 2) "U:"))) (defun twittering-rendered-as-ancestor-status-p (&optional pos) "Return non-nil if the status at POS is rendered as an ancestor. Ancestor statuses are rendered by `twittering-show-replied-statuses'." (let ((pos (or pos (point)))) (assq 'ancestor-of (get-text-property pos 'rendered-as)))) (defun twittering-get-base-id-of-ancestor-at (&optional pos) "Return the base ID of a popped ancestor status rendered at POS. If the status at POS is not a popped ancestor status or no status is rendered at POS, return nil." (let ((pos (or pos (point)))) (cdr (assq 'ancestor-of (get-text-property pos 'rendered-as))))) (eval-and-compile (defsubst twittering-fill-string (str &optional adjustment prefix keep-newline) (when (and (not (boundp 'kinsoku-limit)) enable-kinsoku) ;; `kinsoku-limit' is defined on loading "international/kinsoku.el". ;; Without preloading, "kinsoku.el" will be loaded by auto-loading ;; triggered by `fill-region-as-paragraph'. ;; In that case, the local binding of `kinsoku-limit' conflicts the ;; definition by `defvar' in "kinsoku.el". ;; The below warning is displayed; ;; "Warning: defvar ignored because kinsoku-limit is let-bound". ;; So, we load "kinsoku.el" in advance if necessary. (load "international/kinsoku")) (let* ((kinsoku-limit 1) (adjustment (+ (or adjustment 0) (if enable-kinsoku kinsoku-limit 0))) (min-width (apply 'min (or (mapcar 'window-width (get-buffer-window-list (current-buffer) nil t)) ;; Use `(frame-width)' if no windows display ;; the current buffer. `(,(frame-width))))) (temporary-fill-column (- (or twittering-fill-column (1- min-width)) adjustment))) (with-temp-buffer (let ((fill-column temporary-fill-column) (fill-prefix (or prefix fill-prefix)) (adaptive-fill-regexp "")) (if keep-newline (let* ((hard-newline (propertize "\n" 'hard t)) (str (mapconcat 'identity (split-string str "\n") (concat hard-newline fill-prefix)))) (use-hard-newlines) (insert (concat prefix str)) (fill-region (point-min) (point-max) nil t) (remove-text-properties (point-min) (point-max) '(hard nil))) (insert (concat prefix str)) (fill-region-as-paragraph (point-min) (point-max))) (buffer-substring (point-min) (point-max)))))) (defsubst twittering-update-filled-string (beg end formater status prefix local-prefix &optional keep-newline) (let* ((str (twittering-fill-string (funcall formater status prefix) (length prefix) local-prefix keep-newline)) (next (next-single-property-change 0 'need-to-be-updated str))) (if (or (get-text-property 0 'need-to-be-updated str) (and next (< next (length str)))) (put-text-property 0 (length str) 'need-to-be-updated `(twittering-update-filled-string ,formater ,status ,prefix ,local-prefix ,keep-newline) str) ;; Remove the property required no longer. (remove-text-properties 0 (length str) '(need-to-be-updated nil) str)) str)) (defsubst twittering-make-passed-time-string (beg end encoded-created-at time-format &optional additional-properties) (let* ((now (current-time)) (secs (+ (* (- (car now) (car encoded-created-at)) 65536) (- (cadr now) (cadr encoded-created-at)))) (time-string (cond ((< secs 5) "less than 5 seconds ago") ((< secs 10) "less than 10 seconds ago") ((< secs 20) "less than 20 seconds ago") ((< secs 30) "half a minute ago") ((< secs 60) "less than a minute ago") ((< secs 150) "1 minute ago") ((< secs 2400) (format "%d minutes ago" (/ (+ secs 30) 60))) ((< secs 5400) "about 1 hour ago") ((< secs 84600) (format "about %d hours ago" (/ (+ secs 1800) 3600))) (t (format-time-string time-format encoded-created-at)))) (properties (append additional-properties (and beg (text-properties-at beg)))) (time-string ;; Copy a string and restore properties. (apply 'propertize time-string properties))) (if (< secs 84600) (put-text-property 0 (length time-string) 'need-to-be-updated `(twittering-make-passed-time-string ,encoded-created-at ,time-format) time-string) ;; Remove the property required no longer. (remove-text-properties 0 (length time-string) '(need-to-be-updated nil) time-string)) time-string))) (defmacro twittering-render-a-field (pos field-id generator &optional without-separator) "Render a field on the current buffer managed by `twittering-mode'. Insert a field to the position pointed by FIELD-ID. The position is searched after POS. The string for the field is generated by the GENERATOR expression. This function does not render the status if a status with the same field ID as FIELD-ID is already rendered. Return non-nil if the status is rendered. Otherwise, return nil." `(lexical-let ((pos ,pos) (field-id ,field-id)) (while (let ((buf-field-id (get-text-property pos 'field))) (if (and buf-field-id (if twittering-reverse-mode (twittering-field-id< buf-field-id field-id) (twittering-field-id< field-id buf-field-id))) (let ((next-pos (twittering-get-next-status-head pos))) (setq pos (or next-pos (point-max))) next-pos) nil))) (goto-char pos) (unless (twittering-field-id= field-id (get-text-property pos 'field)) (let ((formatted-status (propertize ,generator 'field ,field-id)) (separator (if ,without-separator "" "\n"))) (if (eq pos (point-max)) ;; Use `insert' only if no statuses are rendered on the below. (insert formatted-status separator) ;; Use `insert-before-markers' in order to keep ;; which status is pointed by each marker. (insert-before-markers formatted-status separator)) t)))) (defun twittering-render-timeline (buffer timeline-data &optional invoke-hook keep-point) "Render statuses for BUFFER and return the list of the rendered statuses. TIMELINE-DATA is a list of statuses being rendered. If INVOKE-HOOK is non-nil and one or more tweets are rendered, run hooks specified by `twittering-new-tweets-rendered-hook'. If KEEP-POINT is nil and BUFFER is empty, this function moves cursor positions to the latest status. This function returns a list of the statuses newly rendered by the invocation." (with-current-buffer buffer (let* ((spec (twittering-get-timeline-spec-for-buffer buffer)) (referring-id-table (twittering-current-timeline-referring-id-table spec)) (timeline-data ;; Collect visible statuses. (let ((prev-id nil)) (remove nil (mapcar (lambda (status) (let ((id (cdr (assq 'id status))) (retweeted-id (cdr (assq 'retweeted-id status)))) (if (twittering-status-id= prev-id id) ;; `status' is equivalent the previous one. nil (setq prev-id id) (cond ((null retweeted-id) ;; `status' is not a retweet. status) ((and retweeted-id (twittering-status-id= id (gethash retweeted-id referring-id-table))) ;; `status' is the first retweet. status) ((null (gethash retweeted-id referring-id-table)) ;; If the first ID referring the retweet is unknown, ;; render it. ;; This is necessary because a referring ID table ;; of a composite timeline may lack information of ;; some component timelines. status) (t ;; Otherwise, do not render it. nil))))) timeline-data)))) (timeline-data (if twittering-reverse-mode (reverse timeline-data) timeline-data)) (rendering-entire (null (twittering-get-first-status-head))) (result-tweets nil) (buffer-read-only nil)) (twittering-update-status-format) (twittering-update-mode-line) (save-excursion (let ((pos (point-min)) (spec-string (twittering-get-timeline-spec-string-for-buffer buffer))) (cond (rendering-entire (let* ((latest-id (twittering-make-field-id-of-timeline-latest-end spec-string)) (oldest-id (twittering-make-field-id-of-timeline-oldest-end spec-string)) (footer-id (if twittering-reverse-mode latest-id oldest-id)) (header-id (if twittering-reverse-mode oldest-id latest-id))) (setq pos (let ((footer ;; To avoid adding a face to newlines. (mapconcat (lambda (substr) (propertize substr 'face twittering-timeline-footer-face)) (split-string (or twittering-timeline-footer "") "\n") "\n")) (header ;; To avoid adding a face to newlines. (mapconcat (lambda (substr) (propertize substr 'face twittering-timeline-header-face)) (split-string (or twittering-timeline-header "") "\n") "\n"))) (twittering-render-a-field (point-min) footer-id footer t) (twittering-render-a-field (point-min) header-id header t) (point))))) (t (setq pos (twittering-get-first-status-head)))) (goto-char pos) (let* ((rendered-tweets (remove nil (mapcar (lambda (status) (when (twittering-render-a-field (point) (twittering-make-field-id status) (twittering-format-status status)) (when twittering-default-show-replied-tweets (twittering-show-replied-statuses twittering-default-show-replied-tweets)) status)) timeline-data))) (twittering-rendered-new-tweets (if twittering-reverse-mode (reverse rendered-tweets) rendered-tweets)) (twittering-rendered-new-tweets-spec spec) (twittering-rendered-new-tweets-spec-string spec-string)) (setq result-tweets rendered-tweets) (when (and invoke-hook twittering-rendered-new-tweets) (run-hooks 'twittering-new-tweets-rendered-hook))))) (debug-print (current-buffer)) (cond ((and (not keep-point) rendering-entire) ;; Go to the latest status of buffer after full insertion. (let ((dest (if twittering-reverse-mode (or (twittering-get-last-normal-field-head) (twittering-get-last-status-head) (point-max)) (or (twittering-get-first-normal-field-head) (twittering-get-first-status-head) (point-min)))) (window-list (get-buffer-window-list (current-buffer) nil t))) (if window-list (mapc (lambda (window) (set-window-point window dest) (if twittering-reverse-mode (twittering-set-window-end window (point-max)) (set-window-start window (point-min)))) window-list) ;; Move the buffer position if the buffer is invisible. (goto-char dest)))) ) result-tweets) )) (defun twittering-rerender-timeline-all (buffer &optional restore-point) "Re-render statuses on BUFFER after clearing BUFFER. If RESTORE-POINT is non-nil, positions on buffers bound to the same timeline will be restored after rendering statuses." (with-current-buffer buffer (let* ((window-list (get-buffer-window-list (current-buffer) nil t)) (point-window-list (mapcar (lambda (window) (cons (window-point window) window)) window-list)) (original-pos (point))) (let ((buffer-read-only nil)) (erase-buffer)) (twittering-render-timeline (current-buffer) (twittering-current-timeline-data) nil restore-point) (when restore-point ;; Restore points. (mapc (lambda (pair) (let* ((point (car pair)) (window (cdr pair)) (dest (max (point-max) point))) (set-window-point window dest))) point-window-list) (goto-char original-pos))))) (defun twittering-retrieve-timeline (spec-string noninteractive api-arguments additional-info) "Retrieve and render a timeline specified by SPEC-STRING. Retrieve a timeline specified by SPEC-STRING, which must be a timeline spec string. Any timeline spec string including that for composite timeline can be used as SPEC-STRING, though the primitive function `twittering-call-api' accepts only a spec of a primary timeline. NONINTERACTIVE is sent to the sentinel as a parameter `noninteractive' via an argument `additional-info' of `twittering-call-api'. API-ARGUMENTS is also sent to `twittering-call-api' as its argument `args-alist'." (let ((spec (twittering-string-to-timeline-spec spec-string))) (cond ((not (twittering-account-authorized-p)) ;; ignore any requests if the account has not been authorized. (message "No account for Twitter has been authorized.") t) ((and noninteractive (twittering-process-active-p spec)) ;; ignore non-interactive request if a process is waiting for responses. t) ((twittering-timeline-spec-primary-p spec) (let* ((args `(,@api-arguments (timeline-spec . ,spec) (timeline-spec-string . ,spec-string) (format . ,(when (require 'json nil t) 'json)) (clean-up-sentinel . ,(lambda (proc status connection-info) (when (memq status '(exit signal closed failed)) (twittering-release-process proc)))))) (additional-info `(,@additional-info (noninteractive . ,noninteractive) (timeline-spec . ,spec) (timeline-spec-string . ,spec-string))) (proc (twittering-call-api 'retrieve-timeline args additional-info))) (when proc (twittering-register-process proc spec spec-string) (twittering-initialize-retrieval-count spec)))) ((twittering-timeline-spec-composite-p spec) (mapc (lambda (spec) (let* ((buffer (twittering-get-buffer-from-spec spec)) (spec-string (if buffer (twittering-get-timeline-spec-string-for-buffer buffer) (twittering-timeline-spec-to-string spec)))) (twittering-retrieve-timeline spec-string noninteractive api-arguments additional-info))) (twittering-get-base-timeline-specs spec))) (t (let ((type (car spec))) (error "%s has not been supported yet" type)))))) (defun twittering-get-and-render-timeline (&optional noninteractive id spec spec-string) (let* ((spec (or spec (twittering-current-timeline-spec))) (spec-string (or spec-string (twittering-current-timeline-spec-string))) (latest-status ;; Assume that a list which was returned by ;; `twittering-current-timeline-data' is sorted. (car (twittering-current-timeline-data spec))) (since_id (cdr-safe (assq 'id latest-status))) (args `(,@(cond (id `((max_id . ,id))) (since_id `((since_id . ,since_id))) (t nil))))) (twittering-retrieve-timeline spec-string noninteractive args nil))) ;;;; ;;;; Map function for statuses on buffer ;;;; (defun twittering-for-each-property-region (prop func &optional buffer interrupt) "Apply FUNC to each region, where property PROP is non-nil, on BUFFER. If INTERRUPT is non-nil, the iteration is stopped if FUNC returns nil." (with-current-buffer (or buffer (current-buffer)) (let ((beg (point-min)) (end-marker (make-marker))) (set-marker-insertion-type end-marker t) (while (let ((value (get-text-property beg prop))) (if value (let* ((end (next-single-property-change beg prop)) (end (or end (point-max))) (end-marker (set-marker end-marker end)) (func-result (funcall func beg end value)) (end (marker-position end-marker))) (when (or (null interrupt) func-result) (if (get-text-property end prop) (setq beg end) (setq beg (next-single-property-change end prop))))) (setq beg (next-single-property-change beg prop))))) (set-marker end-marker nil)))) ;;;; ;;;; Automatic redisplay of statuses on buffer ;;;; (defun twittering-redisplay-status-on-buffer () (mapc (lambda (buffer) (unless (with-current-buffer buffer (or (and (fboundp 'use-region-p) (use-region-p)) (and transient-mark-mode mark-active))) (twittering-redisplay-status-on-each-buffer buffer))) (twittering-get-buffer-list))) (defun twittering-redisplay-status-on-each-buffer (buffer &optional prop) "Redisplay regions with the text property PROP on BUFFER." (let ((prop (or prop 'need-to-be-updated)) (deactivate-mark deactivate-mark) (window-list (get-buffer-window-list buffer nil t)) (marker (with-current-buffer buffer (point-marker))) (result nil)) (with-current-buffer buffer (save-excursion (twittering-for-each-property-region prop (lambda (beg end value) (let* ((func (car value)) (args (cdr value)) (current-str (buffer-substring beg end)) (updated-str (apply func beg end args)) (config (twittering-current-window-config window-list)) (buffer-read-only nil)) ;; Replace `current-str' if it differs to `updated-str' with ;; ignoring properties. This is an ad-hoc solution. ;; `current-str' is a part of the displayed status, but it has ;; properties which are determined by the whole status. ;; (For example, the `id' property.) ;; Therefore, we cannot compare the strings with their ;; properties. (unless (string= current-str updated-str) ;; If the region to be modified includes the current position, ;; the point moves to the beginning of the region. (when (and (< beg marker) (< marker end)) ;; This is required because the point moves to the center if ;; the point becomes outside of the window by the effect of ;; `set-window-start'. (setq result beg)) (let ((common-properties (twittering-get-common-properties beg))) ;; Restore common properties. (delete-region beg end) (goto-char beg) (insert (apply 'propertize updated-str common-properties))) (twittering-restore-window-config-after-modification config beg end)))) buffer)) (set-marker marker nil) (when (and result (eq (window-buffer) buffer)) (let ((win (selected-window))) (when (< result (window-start win)) (set-window-start win result)) (set-window-point win result)))))) ;;;; ;;;; Display replied statuses ;;;; (defun twittering-replied-statuses-visible-p (&optional pos) "Return non-nil if a replied status related to POS is visible. Return non-nil if a replied status has been rendered at POS by `twittering-show-replied-statuses'. Return non-nil if a reply is rendered at POS and the replied statuses has been rendered by `twittering-show-replied-statuses'. Otherwise, return nil." (let* ((pos (twittering-get-current-status-head pos)) (id (twittering-get-id-at pos)) (prev (twittering-get-previous-status-head pos)) (next (twittering-get-next-status-head pos))) (when id ;; If ID is nil, it means that no normal tweets are rendered at POS. (or (twittering-get-base-id-of-ancestor-at pos) (and prev (twittering-status-id= id (twittering-get-base-id-of-ancestor-at prev))) (and next (twittering-status-id= id (twittering-get-base-id-of-ancestor-at next))))))) (defun twittering-get-beginning-of-visible-replied-statuses (&optional pos) "Return the beginning position of visible replied statuses at POS. If POS is nil, the current position is used instead. If `twittering-show-replied-statuses' has rendered a replied status at POS, return the beginning position of the replied statuses with the common base status. If a reply is rendered at POS and its ancestors has been rendered by `twittering-show-replied-statuses', return the beginning position of the replied statuses. Otherwise, return nil." (let* ((pos (or pos (point))) (base-id (twittering-get-base-id-of-ancestor-at pos))) (cond (base-id ;; A replied status is rendered at POS. (while (let* ((prev (twittering-get-previous-status-head pos)) (prev-base-id (when prev (twittering-get-base-id-of-ancestor-at prev)))) (and prev prev-base-id (twittering-status-id= base-id prev-base-id) (setq pos prev)))) (or pos (point-min))) ((twittering-replied-statuses-visible-p pos) ;; A reply is rendered at POS and its replied statuses are visible. (if twittering-reverse-mode (twittering-get-beginning-of-visible-replied-statuses (twittering-get-previous-status-head pos)) (twittering-get-next-status-head pos))) (t nil)))) (defun twittering-get-end-of-visible-replied-statuses (&optional pos) "Return the end position of visible replied statuses at POS. If POS is nil, the current position is used instead. If `twittering-show-replied-statuses' has rendered a replied status at POS, return the end position of the replied statuses with the common base status. If a reply is rendered at POS and its ancestors has been rendered by `twittering-show-replied-statuses', return the beginning position of the replied statuses. Otherwise, return nil." (let* ((pos (or pos (point))) (base-id (twittering-get-base-id-of-ancestor-at pos))) (cond (base-id ;; A replied status is rendered at POS. (while (let ((current-base-id (twittering-get-base-id-of-ancestor-at pos))) (and current-base-id (twittering-status-id= base-id current-base-id) (setq pos (twittering-get-next-status-head pos))))) (or pos (point-max))) ((twittering-replied-statuses-visible-p pos) ;; A reply is rendered at POS and its replied statuses are visible. (if twittering-reverse-mode (twittering-get-current-status-head pos) (twittering-get-end-of-visible-replied-statuses (twittering-get-next-status-head pos)))) (t nil)))) (defun twittering-render-replied-statuses (&optional pos count) "Render replied statuses on the position specified by POS. If POS is nil, the current position is used instead. If COUNT is a positive integer, it specifies the number of rendered statuses. If COUNT is nil, all ancestor statuses that have been already retrieved are rendered. Return non-nil if one or more statuses are rendered. Return nil if no statuses are rendered." (let* ((pos (or pos (point))) (id ;; nil if no normal statuses are rendered at POS. (twittering-get-id-at pos)) (replied-status-are-visible (when id (twittering-replied-statuses-visible-p pos))) (base-id (if replied-status-are-visible (or ;; If a replied status is rendered at POS. (twittering-get-base-id-of-ancestor-at pos) ;; If the base reply is rendered at POS. id) id)) (statuses (when base-id (twittering-get-replied-statuses base-id (if (numberp count) count)))) (statuses (if twittering-reverse-mode statuses (reverse statuses)))) (cond ((null id) ;; No normal statuses are rendered here. nil) (statuses (let ((pos (cond ((twittering-replied-statuses-visible-p pos) ;; Some replied statuses have been already rendered. (twittering-get-beginning-of-visible-replied-statuses pos)) (twittering-reverse-mode (twittering-get-current-status-head pos)) (t (or (twittering-get-next-status-head pos) (point-max))))) (prefix " ") (buffer-read-only nil)) (save-excursion (goto-char pos) (mapc (lambda (status) (twittering-render-a-field (point) (twittering-make-field-id status base-id) (let ((formatted-status (twittering-format-status status prefix)) (field-properties (twittering-make-properties-of-popped-ancestors base-id))) (add-text-properties 0 (length formatted-status) field-properties formatted-status) formatted-status))) statuses) t))) (t nil)))) (defun twittering-render-a-status-with-delay (beg end id prefix) "Render a status with a delay. It is assumed that this function is used as a property value that is processed by the function `twittering-redisplay-status-on-each-buffer'." (let ((status (twittering-find-status id))) (when status (let ((properties (and beg (text-properties-at beg)))) (apply 'propertize (twittering-format-status status prefix) properties))))) (defun twittering-toggle-or-retrieve-replied-statuses () "Show/Hide all of replied statuses or retrieve a replied status. If the cursor points to a reply or one of expanded replied statuses and some of ancestor replied statuses have been already retrieved but they have not been rendered, render them. If the cursor points to a reply or one of expanded replied statuses and all of retrieved ancestor statuses have been already rendered but the oldest one of them is also a reply, retrieve the replied status. If the cursor points to a reply or one of expanded replied statuses and all of ancestor replied statuses have been already rendered, hide them by `twittering-hide-replied-statuses'." (interactive) (let* ((pos (point)) (pos ;; POS points to the head of the direct reply of the status being ;; retrieved. (cond ((twittering-replied-statuses-visible-p pos) ;; If some replied statuses are visible, find the edge. (if twittering-reverse-mode (twittering-get-beginning-of-visible-replied-statuses pos) (twittering-get-previous-status-head (twittering-get-end-of-visible-replied-statuses pos)))) (t (twittering-get-current-status-head pos)))) (id (twittering-get-id-at pos)) (status (twittering-find-status id)) (reply-id (cdr (assq 'in-reply-to-status-id status))) (reply-username (cdr (assq 'in-reply-to-screen-name status))) (base-id (or (twittering-get-base-id-of-ancestor-at pos) id))) (cond ((twittering-find-status reply-id) ;; The status corresponding to REPLY-ID has been already retrieved ;; but it has not been rendered. ;; ;; `twittering-render-replied-statuses' additionally renders all ;; of already retrieved statuses. (twittering-render-replied-statuses)) (reply-id (let* ((pos ;; POS points to the position where the new field will be ;; inserted. (if twittering-reverse-mode pos (or (twittering-get-next-status-head pos) (point-max)))) (field-id (twittering-make-field-id-from-id reply-id base-id)) (prefix " ") (label "[RETRIEVING...]") (symbol-for-redisplay 'waiting-for-retrieval) (properties `(,@(twittering-make-properties-of-popped-ancestors base-id) ,symbol-for-redisplay (twittering-render-a-status-with-delay ,reply-id ,prefix))) (str (apply 'propertize (concat prefix label) properties)) (buffer-read-only nil)) (twittering-call-api 'retrieve-single-tweet `((id . ,reply-id) (username . ,reply-username) (format . ,(when (require 'json nil t) 'json)) (sentinel . twittering-retrieve-single-tweet-sentinel)) `((buffer . ,(current-buffer)) (property-to-be-redisplayed . ,symbol-for-redisplay))) (save-excursion (goto-char pos) (twittering-render-a-field (point) field-id str)) (goto-char pos))) ((twittering-replied-statuses-visible-p) ;; All ancestor replied statuses have been rendered. (twittering-hide-replied-statuses)) (t ;; The pointed status is not a reply. (message "This status is not a reply."))))) (defun twittering-show-replied-statuses (&optional count interactive) (interactive) (cond ((twittering-replied-statuses-visible-p) (when interactive (message "The replied statuses were already showed."))) ((twittering-render-replied-statuses (point) count) t) (t ;; Failed to render replied statuses. (when interactive (let ((base-id (twittering-get-id-at))) (if (twittering-have-replied-statuses-p base-id) (message "The status this replies to has not been fetched yet.") (message "This status is not a reply."))))))) (defun twittering-hide-replied-statuses (&optional interactive) (interactive) (cond ((twittering-replied-statuses-visible-p) (let* ((pos (twittering-get-current-status-head (point))) (base-id (or (twittering-get-base-id-of-ancestor-at pos) (twittering-get-id-at pos))) (pointing-to-base-status (not (twittering-rendered-as-ancestor-status-p pos))) (beg (twittering-get-beginning-of-visible-replied-statuses pos)) (end (twittering-get-end-of-visible-replied-statuses pos)) (buffer-read-only nil)) (unless pointing-to-base-status (goto-char (if twittering-reverse-mode beg (or (twittering-get-previous-status-head beg) (point-min))))) (delete-region beg end))) (interactive (message "The status this replies to was already hidden.")))) (defun twittering-toggle-show-replied-statuses () (interactive) (if (twittering-replied-statuses-visible-p) (twittering-hide-replied-statuses (interactive-p)) (twittering-show-replied-statuses twittering-show-replied-tweets (interactive-p)))) ;;;; ;;;; Unread statuses info ;;;; (defvar twittering-unread-status-info nil "A list of (buffer unread-statuses-counter), where `unread-statuses-counter' means the number of statuses retrieved after the last visiting of the buffer.") (defun twittering-reset-unread-status-info-if-necessary () (when (twittering-buffer-p) (twittering-set-number-of-unread (current-buffer) 0))) (defun twittering-set-number-of-unread (buffer number) (let* ((entry (assq buffer twittering-unread-status-info)) (current (or (cadr entry) 0))) (unless (= number current) (setq twittering-unread-status-info (cons `(,buffer ,number) (if entry (remq entry twittering-unread-status-info) twittering-unread-status-info)))))) (defun twittering-make-unread-status-notifier-string () "Generate a string that displays unread statuses." (setq twittering-unread-status-info (remove nil (mapcar (lambda (entry) (when (buffer-live-p (car entry)) entry)) twittering-unread-status-info))) (let ((sum (apply '+ (mapcar 'cadr twittering-unread-status-info)))) (if (= 0 sum) "" (format "tw(%d)" sum)))) (defun twittering-update-unread-status-info () "Update `twittering-unread-status-info' with new tweets." (let* ((buffer (twittering-get-buffer-from-spec twittering-rendered-new-tweets-spec)) (current (or (cadr (assq buffer twittering-unread-status-info)) 0)) (result (+ current (length twittering-rendered-new-tweets)))) (when buffer (twittering-set-number-of-unread buffer result)))) (defun twittering-enable-unread-status-notifier () "Enable a notifier of unread statuses on `twittering-mode'." (interactive) (setq twittering-unread-status-info (mapcar (lambda (buffer) `(,buffer ,0)) (twittering-get-buffer-list))) (add-hook 'twittering-new-tweets-rendered-hook 'twittering-update-unread-status-info) (add-hook 'post-command-hook 'twittering-reset-unread-status-info-if-necessary) (add-to-list 'global-mode-string '(:eval (twittering-make-unread-status-notifier-string)) t)) (defun twittering-disable-unread-status-notifier () "Disable a notifier of unread statuses on `twittering-mode'." (interactive) (setq twittering-unread-status-info nil) (remove-hook 'twittering-new-tweets-hook 'twittering-update-unread-status-info) (remove-hook 'post-command-hook 'twittering-reset-unread-status-info-if-necessary) (setq global-mode-string (remove '(:eval (twittering-make-unread-status-notifier-string)) global-mode-string))) ;;;; ;;;; Timer ;;;; (defvar twittering-idle-timer-for-redisplay nil) (defun twittering-timer-action (func) (let ((buf (twittering-get-active-buffer-list))) (if (null buf) (twittering-stop) (funcall func) ))) (defun twittering-run-on-idle (idle-interval func &rest args) "Run FUNC the next time Emacs is idle for IDLE-INTERVAL. Even if Emacs has been idle longer than IDLE-INTERVAL, run FUNC immediately. Since immediate invocation requires `current-idle-time', it is available on Emacs 22 and later. FUNC is called as (apply FUNC ARGS)." (let ((sufficiently-idling (and (fboundp 'current-idle-time) (current-idle-time) (time-less-p (seconds-to-time idle-interval) (current-idle-time))))) (if (not sufficiently-idling) (apply 'run-with-idle-timer idle-interval nil func args) (apply func args) nil))) (defun twittering-run-repeatedly-on-idle (check-interval var idle-interval func &rest args) "Run FUNC every time Emacs is idle for IDLE-INTERVAL. Even if Emacs remains idle longer than IDLE-INTERVAL, run FUNC every CHECK-INTERVAL seconds. Since this behavior requires `current-idle-time', invocation on long idle time is available on Emacs 22 and later. VAR is a symbol of a variable to which the idle-timer is bound. FUNC is called as (apply FUNC ARGS)." (apply 'run-at-time "0 sec" check-interval (lambda (var idle-interval func &rest args) (let ((registerd (symbol-value var)) (sufficiently-idling (and (fboundp 'current-idle-time) (current-idle-time) (time-less-p (seconds-to-time idle-interval) (current-idle-time))))) (when (or (not registerd) sufficiently-idling) (when (and registerd sufficiently-idling) (cancel-timer (symbol-value var)) (apply func args)) (set var (apply 'run-with-idle-timer idle-interval nil (lambda (var func &rest args) (set var nil) (apply func args)) var func args))))) var idle-interval func args)) (defun twittering-start (&optional action) (interactive) (unless twittering-timer (let ((action (or action #'twittering-update-active-buffers))) ;; Update all active timelines forcibly. (twittering-update-active-buffers t) (setq twittering-timer (run-at-time (format "%d sec" twittering-timer-interval) twittering-timer-interval #'twittering-timer-action action)))) (unless twittering-timer-for-redisplaying (setq twittering-timer-for-redisplaying (twittering-run-repeatedly-on-idle (* 2 twittering-timer-interval-for-redisplaying) 'twittering-idle-timer-for-redisplay twittering-timer-interval-for-redisplaying #'twittering-redisplay-status-on-buffer)))) (defun twittering-stop () (interactive) (when twittering-timer (cancel-timer twittering-timer) (setq twittering-timer nil)) (when twittering-timer-for-redisplaying (when twittering-idle-timer-for-redisplay (cancel-timer twittering-idle-timer-for-redisplay) (setq twittering-idle-timer-for-redisplay)) (cancel-timer twittering-timer-for-redisplaying) (setq twittering-timer-for-redisplaying nil))) (defun twittering-get-relative-interval (spec) (let* ((spec-string (twittering-timeline-spec-to-string spec)) (normalized-alist (apply 'append (mapcar (lambda (entry) (let ((interval (car (last entry))) (regexp-list (butlast entry 1))) (when (integerp interval) (mapcar (lambda (regexp) `(,regexp . ,interval)) regexp-list)))) twittering-relative-retrieval-interval-alist))) (rest normalized-alist) (current normalized-alist) (result 0)) (while (not (or (and (stringp (car current)) (string-match (car current) spec-string)) (eq t (car current)))) (setq current (car rest)) (setq rest (cdr rest))) (if (integerp (cdr current)) (cdr current) ;; The default relative interval is 1. 1))) (defun twittering-get-retrieval-count (spec) (cdr (assoc spec twittering-relative-retrieval-count-alist))) (defun twittering-set-retrieval-count (spec count) (let ((current (assoc spec twittering-relative-retrieval-count-alist))) (if (null current) (add-to-list 'twittering-relative-retrieval-count-alist `(,spec . ,count)) (setcdr current count)))) (defun twittering-initialize-retrieval-count (spec) (twittering-set-retrieval-count spec (twittering-get-relative-interval spec))) (defun twittering-update-active-buffers (&optional force noninteractive) "Update active buffers managed by `twittering-mode' at a certain interval. If FORCE is nil, each active buffer is updated at a relative interval determined by `twittering-relative-retrieval-interval-alist'. If a relative interval of a timeline is 3, the timeline is updated once by three invocations of this function. If FORCE is non-nil, all active buffers are updated forcibly." (when (twittering-account-authorized-p) (twittering-update-service-configuration) (let* ((buffer-list (twittering-get-active-buffer-list)) (primary-spec-list (twittering-remove-duplicates (apply 'append (mapcar (lambda (buffer) (twittering-get-primary-base-timeline-specs (twittering-get-timeline-spec-for-buffer buffer))) buffer-list))))) (mapc (lambda (spec) (let ((current (if force 1 (twittering-get-retrieval-count spec)))) (cond ((null current) ;; Initialize the count if no entry for the primary timeline ;; exists. (twittering-initialize-retrieval-count spec)) ((and (integerp current) (= 0 current)) ;; Do nothing. ) ((and (integerp current) (= 1 current)) ;; Retrieve the timeline and initialize count. (let ((spec-string (twittering-timeline-spec-to-string spec))) (twittering-get-and-render-timeline noninteractive nil spec spec-string) (twittering-initialize-retrieval-count spec))) ((and (integerp current) (< 1 current)) ;; Decrement count. (twittering-set-retrieval-count spec (1- current))) (t nil)))) primary-spec-list)))) ;;;; ;;;; Keymap ;;;; (if twittering-mode-map (let ((km twittering-mode-map)) (define-key km (kbd "C-c C-f") 'twittering-friends-timeline) (define-key km (kbd "C-c C-r") 'twittering-replies-timeline) (define-key km (kbd "C-c C-u") 'twittering-user-timeline) (define-key km (kbd "C-c C-d") 'twittering-direct-messages-timeline) (define-key km (kbd "C-c C-s") 'twittering-update-status-interactive) (define-key km (kbd "C-c C-e") 'twittering-erase-old-statuses) (define-key km (kbd "C-c C-m") 'twittering-retweet) (define-key km (kbd "C-c C-t") 'twittering-set-current-hashtag) (define-key km (kbd "C-m") 'twittering-enter) (define-key km (kbd "C-c C-l") 'twittering-update-lambda) (define-key km (kbd "") 'twittering-click) (define-key km (kbd "C-") 'mouse-set-point) (define-key km (kbd "C-") 'twittering-push-tweet-onto-kill-ring) (define-key km (kbd "C-c C-v") 'twittering-view-user-page) (define-key km (kbd "C-c D") 'twittering-delete-status) (define-key km (kbd "C-c C-w") 'twittering-delete-status) (define-key km (kbd "a") 'twittering-toggle-activate-buffer) (define-key km (kbd "g") 'twittering-current-timeline) (define-key km (kbd "u") 'twittering-update-status-interactive) (define-key km (kbd "U") 'twittering-push-uri-onto-kill-ring) (define-key km (kbd "d") 'twittering-direct-message) (define-key km (kbd "v") 'twittering-other-user-timeline) (define-key km (kbd "V") 'twittering-visit-timeline) (define-key km (kbd "L") 'twittering-other-user-list-interactive) (define-key km (kbd "f") 'twittering-switch-to-next-timeline) (define-key km (kbd "b") 'twittering-switch-to-previous-timeline) ;; (define-key km (kbd "j") 'next-line) ;; (define-key km (kbd "k") 'previous-line) (define-key km (kbd "j") 'twittering-goto-next-status) (define-key km (kbd "k") 'twittering-goto-previous-status) (define-key km (kbd "l") 'forward-char) (define-key km (kbd "h") 'backward-char) (define-key km (kbd "0") 'beginning-of-line) (define-key km (kbd "^") 'beginning-of-line-text) (define-key km (kbd "$") 'end-of-line) (define-key km (kbd "n") 'twittering-goto-next-status-of-user) (define-key km (kbd "p") 'twittering-goto-previous-status-of-user) (define-key km (kbd "C-i") 'twittering-goto-next-thing) (define-key km (kbd "M-C-i") 'twittering-goto-previous-thing) (define-key km (kbd "") 'twittering-goto-previous-thing) (define-key km (kbd "") 'twittering-scroll-down) (define-key km (kbd "M-v") 'twittering-scroll-down) (define-key km (kbd "SPC") 'twittering-scroll-up) (define-key km (kbd "C-v") 'twittering-scroll-up) (define-key km (kbd "G") 'twittering-goto-last-status) (define-key km (kbd "H") 'twittering-goto-first-status) (define-key km (kbd "i") 'twittering-icon-mode) (define-key km (kbd "r") 'twittering-toggle-show-replied-statuses) (define-key km (kbd "R") 'twittering-toggle-or-retrieve-replied-statuses) (define-key km (kbd "t") 'twittering-toggle-proxy) (define-key km (kbd "C-c C-p") 'twittering-toggle-proxy) (define-key km (kbd "q") 'twittering-kill-buffer) (define-key km (kbd "C-c C-q") 'twittering-search) nil)) (let ((km twittering-mode-menu-on-uri-map)) (when km (define-key km [ct] '("Copy tweet" . twittering-push-tweet-onto-kill-ring)) (define-key km [cl] '("Copy link" . twittering-push-uri-onto-kill-ring)) (define-key km [ll] '("Load link" . twittering-click)) (let ((km-on-uri twittering-mode-on-uri-map)) (when km-on-uri (define-key km-on-uri (kbd "C-") 'mouse-set-point) (define-key km-on-uri (kbd "C-") km))))) (defun twittering-keybind-message () (let ((important-commands '(("Timeline" . twittering-friends-timeline) ("Replies" . twittering-replies-timeline) ("Update status" . twittering-update-status-interactive) ("Next" . twittering-goto-next-status) ("Prev" . twittering-goto-previous-status)))) (mapconcat (lambda (command-spec) (let ((descr (car command-spec)) (command (cdr command-spec))) (format "%s: %s" descr (key-description (where-is-internal command overriding-local-map t))))) important-commands ", "))) ;; (run-with-idle-timer ;; 0.1 t ;; '(lambda () ;; (when (equal (buffer-name (current-buffer)) twittering-buffer) ;; (message (twittering-keybind-message))))) ;;;; ;;;; Initialization ;;;; (defvar twittering-initialized nil) (defvar twittering-mode-syntax-table nil "") (unless twittering-mode-syntax-table (setq twittering-mode-syntax-table (make-syntax-table)) ;; (modify-syntax-entry ? "" twittering-mode-syntax-table) (modify-syntax-entry ?\" "w" twittering-mode-syntax-table) ) (defun twittering-initialize-global-variables-if-necessary () "Initialize global variables for `twittering-mode' if they have not been initialized yet." (unless twittering-initialized (defface twittering-username-face `((t ,(append '(:underline t) (face-attr-construct (if (facep 'font-lock-string-face) 'font-lock-string-face 'bold))))) "" :group 'faces) (defface twittering-uri-face `((t (:underline t))) "" :group 'faces) (defface twittering-timeline-header-face `((t ,(face-attr-construct (if (facep 'font-lock-preprocessor-face) 'font-lock-preprocessor-face 'bold)))) "Timeline header on twittering-mode" :group 'faces) (defface twittering-timeline-footer-face `((t ,(face-attr-construct (if (facep 'font-lock-preprocessor-face) 'font-lock-preprocessor-face 'bold)))) "Timeline footer on twittering-mode" :group 'faces) (twittering-update-status-format) (when twittering-use-convert (if (null twittering-convert-program) (setq twittering-use-convert nil) (with-temp-buffer (let ((coding-system-for-read 'iso-safe) (coding-system-for-write 'iso-safe) ;; Bind `default-directory' to the temporary directory ;; because it is possible that the directory pointed by ;; `default-directory' has been already removed. (default-directory temporary-file-directory)) (call-process twittering-convert-program nil (current-buffer) nil "-version") (goto-char (point-min)) (if (null (search-forward-regexp "\\(Image\\|Graphics\\)Magick" nil t)) (setq twittering-use-convert nil)))))) (twittering-setup-proxy) (when twittering-use-icon-storage (cond ((require 'jka-compr nil t) (twittering-load-icon-properties) (add-hook 'kill-emacs-hook 'twittering-save-icon-properties)) (t (setq twittering-use-icon-storage nil) (error "Disabled icon-storage because it failed to load jka-compr.")))) (cond ((and (boundp 'twittering-sign-simple-string) twittering-sign-simple-string (or (not (boundp 'twittering-sign-string-function)) (null twittering-sign-string-function)) (eq twittering-edit-skeleton 'none) (or (null twittering-edit-skeleton-footer) (string= twittering-edit-skeleton-footer ""))) ;; Configure `twittering-edit-skeleton' as an alternative of ;; `twittering-sign-simple-string'. (twittering-edit-skeleton-change-footer (format " [%s]" twittering-sign-simple-string)) (setq twittering-edit-skeleton 'footer) (message "Warning: `twittering-sign-simple-string' is obsolete. Use `twittering-edit-skeleton-footer' instead.")) ((or (boundp 'twittering-sign-simple-string) (boundp 'twittering-sign-string-function)) (message "Warning: `twittering-sign-simple-string' and `twittering-sign-string-function' are obsolete. Use the new feature `twittering-edit-skeleton'.") )) (add-hook 'twittering-new-tweets-rendered-hook 'twittering-jojo-mode-hook-function) (run-hooks 'twittering-mode-init-hook) (setq twittering-initialized t))) (defun twittering-mode-setup (spec-string) "Set up the current buffer for `twittering-mode'." (kill-all-local-variables) (setq major-mode 'twittering-mode) (setq buffer-read-only t) (buffer-disable-undo) (setq mode-name "twittering-mode") (setq mode-line-buffer-identification `(,(default-value 'mode-line-buffer-identification) (:eval (twittering-mode-line-buffer-identification)))) ;; Prevent `global-font-lock-mode' enabling `font-lock-mode'. ;; This technique is derived from `lisp/bs.el' distributed with Emacs 22.2. (make-local-variable 'font-lock-global-modes) (setq font-lock-global-modes '(not twittering-mode)) ;; Prevent the field property attached to tweets from interfering ;; the cursor motion based on logical lines. (make-local-variable 'inhibit-field-text-motion) (setq inhibit-field-text-motion t) (make-local-variable 'twittering-timeline-spec) (make-local-variable 'twittering-timeline-spec-string) (make-local-variable 'twittering-active-mode) (make-local-variable 'twittering-icon-mode) (make-local-variable 'twittering-jojo-mode) (make-local-variable 'twittering-reverse-mode) (setq twittering-timeline-spec-string spec-string) (setq twittering-timeline-spec (twittering-string-to-timeline-spec spec-string)) (setq twittering-active-mode t) (use-local-map twittering-mode-map) (twittering-update-mode-line) (set-syntax-table twittering-mode-syntax-table) (when (and (boundp 'font-lock-mode) font-lock-mode) (font-lock-mode -1)) (add-to-list 'twittering-buffer-info-list (current-buffer) t) (run-hooks 'twittering-mode-hook)) (defun twittering-mode () "Major mode for Twitter \\{twittering-mode-map}" (interactive) (let ((timeline-spec-list (if (listp twittering-initial-timeline-spec-string) twittering-initial-timeline-spec-string (cons twittering-initial-timeline-spec-string nil)))) (twittering-visit-timeline (car timeline-spec-list)) (when (twittering-account-authorized-p) (mapc 'twittering-visit-timeline (cdr timeline-spec-list))))) ;;;; ;;;; Preparation for invoking APIs ;;;; (defun twittering-api-invocation-is-ready-p () "Return non-nil if the preparation for invoking APIs has been completed." (and ;; The global variables are initialized. twittering-initialized ;; A connection method is prepared. (let ((use-ssl (or twittering-use-ssl twittering-oauth-use-ssl))) (twittering-lookup-connection-type use-ssl)) ;; The account has been already authorized. (twittering-account-authorized-p))) (defun twittering-ensure-preparation-for-api-invocation () "Ensure prerequisites for invoking APIs. Return non-nil in success. If prerequisites has been already satisifed, just return non-nil. If prerequisites are not satisfied, this function try to satisfy them. Then, return non-nil if they has been satisfied and return nil otherwise." (twittering-initialize-global-variables-if-necessary) (and (twittering-ensure-connection-method) (twittering-ensure-private-info) (twittering-ensure-account-verification))) ;;;; ;;;; Edit mode skeleton ;;;; (defvar twittering-edit-skeleton-footer "") (defvar twittering-edit-skeleton-footer-history nil) (defvar twittering-edit-skeleton-alist '((none . nil) (footer . ((nil _ twittering-edit-skeleton-footer))) (footer-only-normal . ((nil _ twittering-edit-skeleton-footer) . normal)) (inherit-hashtags . [(twittering-edit-skeleton-inherit-hashtags . normal) (twittering-edit-skeleton-inherit-hashtags . reply)]) (inherit-mentions . (twittering-edit-skeleton-inherit-mentions . reply)) (inherit-any . [(twittering-edit-skeleton-inherit-mentions . reply) (twittering-edit-skeleton-inherit-hashtags . normal) (twittering-edit-skeleton-inherit-hashtags . reply)])) "*Alist of skeletons performed on `twittering-update-status-interactive'. A key of the alist is a symbol and each value is nil, (SKELETON . PRED), (FUNC . PRED) or a vector of them. When invoking `twittering-update-status-interactive', the value corresponding to the key specified `twittering-edit-skeleton' are performed. The value like (SKELETON . PRED) or (FUNC . PRED) is performed when the current context matches with PRED. PRED is nil, a symbol or a function. If PRED is nil, the value is unconditionally performed. If PRED is a symbol, the value is performed only when it equals to the type of the tweet being edited. The type is one of 'direct-message, 'normal, 'organic-retweet and 'reply. If PRED is a function, the value is performed only when the predicate function PRED returns non-nil. PRED is invoked with three arguments TWEET-TYPE, IN-REPLY-TO-ID and CURRENT-SPEC. TWEET-TYPE is a symbol, which is one of 'direct-message, 'normal, 'organic-retweet and 'reply, specifying which type of tweet will be edited. If the tweet will be edited as a reply or an organic retweet, IN-REPLY-TO-ID is a string specifying the replied tweet. Otherwise, IN-REPLY-TO-ID is nil. CURRENT-SPEC specifies where the action of posting a tweet is performed. If the action is performed on a twittering-mode buffer, CURRENT-SPEC is a timeline spec string of the buffer. If the action is performed on other buffers, CURRENT-SPEC is nil. If the option IGNORE-CURRENT-SPEC for `twittering-update-status' is non-nil, CURRENT-SPEC is also nil. If PRED matches the current context, the value is performed as follows. The value like (SKELETON . PRED) is performed by directly using SKELETON as an argument of `skeleton-insert'. The value like (FUNC . PRED) is performed by invoking FUNC with three arguments, TWEET-TYPE, IN-REPLY-TO-ID and CURRENT-SPEC as same as PRED. If the value is a vector, each element is performed in order of elements in the vector. Note that the effective skeleton is invoked after inserting a recipient.") (defvar twittering-edit-skeleton 'none "*A symbol specifying an effective skeleton. It must be one of a symbol in `twittering-edit-skeleton-alist'. When entering `twittering-edit-mode', the skeletons in the specified entry in `twittering-edit-skeleton-alist' are performed.") (defun twittering-switch-edit-skeleton () (interactive) (let ((skeleton-keys (mapcar (lambda (entry) (symbol-name (car entry))) twittering-edit-skeleton-alist)) (current (symbol-name (or twittering-edit-skeleton 'none)))) (let ((selected (twittering-completing-read (format "Skeleton (%s): " current) skeleton-keys nil t nil nil current))) (when selected (setq twittering-edit-skeleton (intern selected))))) (when (null twittering-edit-skeleton) (setq twittering-edit-skeleton 'none)) (message "Current skeleton: %s" twittering-edit-skeleton)) (defun twittering-edit-skeleton-change-footer (&optional footer-str) (interactive) (let ((footer-str (or footer-str (read-from-minibuffer "Footer: " twittering-edit-skeleton-footer nil nil 'twittering-edit-skeleton-footer-history)))) (when footer-str (setq twittering-edit-skeleton-footer footer-str))) (message "Current footer: [%s]" twittering-edit-skeleton-footer)) (defun twittering-edit-skeleton-insert-base (&optional tweet-type in-reply-to-id current-spec) (let ((entry (cdr (assq twittering-edit-skeleton twittering-edit-skeleton-alist)))) (when entry (require 'skeleton) (let ((skeletons (if (vectorp entry) entry (list entry)))) (mapcar (lambda (def) (let ((skeleton-or-func (car def)) (pred (cdr def))) (when (or (null pred) (and (functionp pred) (funcall pred tweet-type in-reply-to-id)) (and (symbolp pred) (eq pred tweet-type))) (cond ((functionp skeleton-or-func) (funcall skeleton-or-func tweet-type in-reply-to-id current-spec)) (t (skeleton-insert skeleton-or-func)))))) skeletons))))) (defun twittering-edit-skeleton-insert (&optional tweet-type in-reply-to-id current-spec) (if (> 22 emacs-major-version) ;; This prevents Emacs21 from inserting skeletons before the cursor. (let ((current (point)) (pair (with-temp-buffer (twittering-edit-skeleton-insert-base tweet-type in-reply-to-id current-spec) `(,(buffer-string) . ,(point))))) (insert (car pair)) (goto-char (+ -1 current (cdr pair)))) (twittering-edit-skeleton-insert-base tweet-type in-reply-to-id current-spec))) (defun twittering-edit-skeleton-inherit-hashtags (tweet-type in-reply-to-id current-spec) (cond (in-reply-to-id (let* ((status (twittering-find-status in-reply-to-id)) (text (cdr (assq 'text status))) (hashtags (twittering-extract-matched-substring-all (concat twittering-regexp-hash "\\([[:alpha:]0-9_-]+\\)") text)) (footer (mapconcat (lambda (tag) (concat "#" tag)) hashtags " "))) (when hashtags (skeleton-insert `(nil _ " " ,footer))))) ((twittering-timeline-spec-is-search-p current-spec) (let* ((query-string (twittering-extract-query-string-from-search-timeline-spec current-spec)) (hashtag-list (twittering-extract-matched-substring-all (concat "\\(" twittering-regexp-hash "[[:alpha:]0-9_-]+\\)") query-string))) (when hashtag-list (let ((footer (mapconcat 'identity hashtag-list " "))) (skeleton-insert `(nil _ " " ,footer)))))))) (defun twittering-edit-skeleton-inherit-mentions (tweet-type in-reply-to-id current-spec) (when in-reply-to-id (let* ((status (twittering-find-status in-reply-to-id)) (text (cdr (assq 'text status))) (recipient (cdr (assq 'user-screen-name status))) (mentions (twittering-extract-matched-substring-all (concat twittering-regexp-atmark "\\([a-zA-Z0-9_-]+\\)") text)) (reduced-mentions (remove nil (mapcar (lambda (mention) (unless (or (string= mention recipient) (string= mention (twittering-get-username))) mention)) mentions)))) (when reduced-mentions (let ((header (mapconcat (lambda (user) (concat "@" user)) reduced-mentions " "))) (skeleton-insert `(nil ,header " " _))))))) ;;;; ;;;; Edit mode ;;;; (defvar twittering-edit-buffer "*twittering-edit*") (defvar twittering-pre-edit-window-configuration nil) (defvar twittering-edit-history nil) (defvar twittering-edit-local-history nil) (defvar twittering-edit-local-history-idx nil) (defvar twittering-warning-overlay nil) (define-derived-mode twittering-edit-mode nil "twmode-status-edit" (use-local-map twittering-edit-mode-map) ;; Prevent `global-font-lock-mode' enabling `font-lock-mode'. ;; This technique is derived from `lisp/bs.el' distributed with Emacs 22.2. (make-local-variable 'font-lock-global-modes) (setq font-lock-global-modes '(not twittering-edit-mode)) (make-local-variable 'twittering-warning-overlay) (setq twittering-warning-overlay (make-overlay 1 1 nil nil nil)) (overlay-put twittering-warning-overlay 'face 'font-lock-warning-face) (make-local-variable 'twittering-edit-local-history) (setq twittering-edit-local-history (cons (buffer-string) twittering-edit-history)) (make-local-variable 'twittering-edit-local-history-idx) (setq twittering-edit-local-history-idx 0) (make-local-variable 'after-change-functions) (add-to-list 'after-change-functions 'twittering-edit-length-check) ) (when twittering-edit-mode-map (let ((km twittering-edit-mode-map)) (define-key km (kbd "C-c C-c") 'twittering-edit-post-status) (define-key km (kbd "C-c C-k") 'twittering-edit-cancel-status) (define-key km (kbd "C-c C-r") 'twittering-edit-toggle-reply) (define-key km (kbd "M-n") 'twittering-edit-next-history) (define-key km (kbd "M-p") 'twittering-edit-previous-history) (define-key km (kbd "") 'twittering-edit-replace-at-point))) (defun twittering-effective-length (str &optional short-length-http short-length-https) "Return the effective length of STR with taking account of shortening URIs. The returned length is calculated with taking account of shortening URIs if `twittering-service-method' is the symbol `twitter' or `twitter-api-v1.1'. It is assumed that a URI via HTTP will be converted into a URI consisting of SHORT-LENGTH-HTTP characters. It is assumed that a URI via HTTPS will be converted into a URI consisting of SHORT-LENGTH-HTTPS characters. If SHORT-LENGTH-HTTP is nil, the value of (twittering-get-service-configuration 'short_url_length) is used instead. If SHORT-LENGTH-HTTPS is nil, the value of (twittering-get-service-configuration 'short_url_length_https) is used instead." (cond ((memq twittering-service-method '(twitter twitter-api-v1.1)) (let ((regexp "\\(?:^\\|[[:space:]]\\)\\(http\\(s\\)?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+\\)") (short-length-http (or short-length-http (twittering-get-service-configuration 'short_url_length))) (short-length-https (or short-length-https (twittering-get-service-configuration 'short_url_length_https))) (rest str) (pos 0) (len 0)) (save-match-data (while (string-match regexp str pos) (let ((beg (match-beginning 1)) (end (match-end 1)) (short-len (if (match-beginning 2) short-length-https short-length-http))) (let ((additional-length ;; Ignore the original length to follow the change ;; of t.co URL wrapper. ;; ;; https://dev.twitter.com/docs/tco-url-wrapper ;; As of October 10, 2011 the t.co URL wrapper ;; automatically wraps all links submitted to ;; Twitter, regardless of length. This includes ;; so-called URLs without protocols. (+ (- beg pos) short-len))) (setq len (+ len additional-length)) (setq pos end))))) (+ len (- (length str) pos)))) (t (length str)))) (defun twittering-edit-length-check (&optional beg end len) (let* ((status (twittering-edit-extract-status)) (maxlen 140) (length (twittering-effective-length status))) (setq mode-name (format "twmode-status-edit[%d/%d]" length maxlen)) (force-mode-line-update) (unless twittering-disable-overlay-on-too-long-string (if (< maxlen length) (move-overlay twittering-warning-overlay (- (point-max) (- length maxlen)) (point-max)) (move-overlay twittering-warning-overlay 1 1))))) (defun twittering-edit-get-help-end () "Return the end position of the help on `twittering-edit-mode'." (when (eq major-mode 'twittering-edit-mode) (next-single-property-change (point-min) 'read-only nil (point-max)))) (defun twittering-edit-extract-status () "Return the text of the status being edited on `twittering-edit-mode'." (if (eq major-mode 'twittering-edit-mode) (buffer-substring-no-properties (twittering-edit-get-help-end) (point-max)) "")) (defun twittering-edit-reset-status (str) "Reset the contents of the current `twittering-edit-mode' buffer with STR." (when (eq major-mode 'twittering-edit-mode) (let ((help-end (twittering-edit-get-help-end))) (delete-region help-end (point-max)) (goto-char help-end) (insert str) (goto-char help-end)))) (defun twittering-edit-set-help-string (str) "Render STR as a help for `twittering-edit-mode' to the current buffer." (let* ((help-str (propertize str 'read-only t)) (len (length help-str))) (add-text-properties 0 1 '(front-sticky (read-only)) help-str) (add-text-properties (1- len) len '(rear-nonsticky t) help-str) (save-excursion (let ((inhibit-read-only t) (inhibit-modification-hooks t) (help-end (twittering-edit-get-help-end))) (goto-char help-end) (if (= (point-min) help-end) ;; When no helps are rendered, the all markers should be ;; placed after the new help. (insert help-str) ;; Use `insert-before-markers' because the marker of the current ;; position should follow the new help. ;; Delete the old help after inserting the new help to make ;; the new help visible if possible. (insert-before-markers help-str) (delete-region (point-min) help-end)))))) (defun twittering-edit-setup-help () (let* ((direct-message-recipient (cdr (assq 'direct-message-recipient twittering-edit-mode-info))) (tweet-type (cdr (assq 'tweet-type twittering-edit-mode-info))) (cited-id (cdr (assq 'cited-id twittering-edit-mode-info))) (item (cond ((eq tweet-type 'direct-message) (format "a direct message to %s" direct-message-recipient)) ((eq tweet-type 'reply) "a reply") (t "a tweet"))) (status-format (cond ((eq tweet-type 'direct-message) (format "%%FILL{DIRECT MESSAGE to %s}\n" direct-message-recipient)) ((eq tweet-type 'reply) "%FILL{REPLY to the tweet by %s at %C{%y/%m/%d %H:%M:%S};}\n%FILL{%FACE[font-lock-doc-face]{\"%T\"}}\n") (t nil))) (func (when status-format (twittering-generate-format-status-function status-format))) (help-str (apply 'concat `(,@(when func `(,(funcall func (twittering-find-status cited-id) nil))) ,(propertize (format (substitute-command-keys "Keymap: \\[twittering-edit-post-status]: send %s \\[twittering-edit-cancel-status]: cancel %s \\[twittering-edit-toggle-reply]: toggle a normal tweet and a reply. \\[twittering-edit-next-history]: next history element \\[twittering-edit-previous-history]: previous history element \\[twittering-edit-replace-at-point]: shorten URL at point ---- text above this line is ignored ---- ") item item) 'face 'font-lock-comment-face))))) (twittering-edit-set-help-string help-str))) (defun twittering-edit-close () (kill-buffer (current-buffer)) (when twittering-pre-edit-window-configuration (set-window-configuration twittering-pre-edit-window-configuration) (setq twittering-pre-edit-window-configuration nil))) (defvar twittering-edit-mode-info nil "Alist of a tweet being edited. Pairs of a key symbol and an associated value are following: direct-message-recipient -- the recipient when the edited message is sent as a direct message. cited-id -- the id of the tweet that the edited message refers to. tweet-type -- the type of the edited message, which is one of the following symbol; normal, reply or direct-message.") (defun twittering-ensure-whole-of-status-is-visible (&optional window) "Ensure that the whole of the tweet on the current point is visible." (interactive) (let* ((window (or window (selected-window))) (buffer (window-buffer window))) (when (twittering-buffer-p buffer) (with-current-buffer buffer (save-excursion (let* ((next-head (or (twittering-get-next-status-head) (point-max))) (current-tail (max (1- next-head) (point-min)))) (when (< (window-end window t) current-tail) (twittering-set-window-end window current-tail)))))))) (defun twittering-update-status-from-pop-up-buffer (&optional init-string-or-skeleton reply-to-id username tweet-type current-spec) (interactive) (let ((buf (generate-new-buffer twittering-edit-buffer))) (setq twittering-pre-edit-window-configuration (current-window-configuration)) (twittering-pop-to-buffer buf) (twittering-edit-mode) (make-local-variable 'twittering-edit-mode-info) (setq twittering-edit-mode-info `((cited-id . ,reply-to-id) (tweet-type . ,(cdr (assq tweet-type '((direct-message . direct-message) (normal . normal) (organic-retweet . normal) (reply . reply))))) (direct-message-recipient . ,username))) (twittering-edit-setup-help) (setq buffer-undo-list nil) (goto-char (twittering-edit-get-help-end)) (if (eq tweet-type 'direct-message) (message "C-c C-c to send, C-c C-k to cancel") (and (null init-string-or-skeleton) twittering-current-hashtag (setq init-string-or-skeleton (format " #%s " twittering-current-hashtag))) (message "C-c C-c to post, C-c C-k to cancel")) (when init-string-or-skeleton (require 'skeleton) (cond ((stringp init-string-or-skeleton) (insert init-string-or-skeleton)) ((listp init-string-or-skeleton) (skeleton-insert init-string-or-skeleton)))) (twittering-edit-skeleton-insert tweet-type reply-to-id current-spec) (set-buffer-modified-p nil))) (defun twittering-edit-post-status () (interactive) (let* ((status (twittering-edit-extract-status)) (cited-id (cdr (assq 'cited-id twittering-edit-mode-info))) (cited-tweet (twittering-find-status cited-id)) (cited-username (cdr (assq 'user-screen-name cited-tweet))) (direct-message-recipient (cdr (assq 'direct-message-recipient twittering-edit-mode-info))) (tweet-type (cdr (assq 'tweet-type twittering-edit-mode-info)))) (cond ((string-match "\\` *\\'" status) (message "Empty tweet!")) ((< 140 (twittering-effective-length status)) (message "Tweet is too long!")) ((cond ((and (eq tweet-type 'reply) (not (string-match (concat "@" cited-username "\\(?:[\n\r \t]+\\)*") status))) (y-or-n-p "Send this tweet without mentions as a normal tweet (not a reply)? ")) (twittering-request-confirmation-on-posting (y-or-n-p "Send this tweet? ")) (t t)) (setq twittering-edit-history (cons status twittering-edit-history)) (cond ((eq tweet-type 'direct-message) (if direct-message-recipient (twittering-call-api 'send-direct-message `((username . ,direct-message-recipient) (status . ,status))) (message "No username specified"))) ((eq tweet-type 'reply) (twittering-call-api 'update-status `((status . ,status) (in-reply-to-status-id . ,cited-id)))) (t (twittering-call-api 'update-status `((status . ,status))))) (twittering-edit-close)) (t nil)))) (defun twittering-edit-cancel-status () (interactive) (when (or (not (buffer-modified-p)) (prog1 (if (y-or-n-p "Cancel this tweet? ") (message "Request canceled") (message nil)))) (twittering-edit-close))) (defun twittering-edit-next-history () (interactive) (if (>= 0 twittering-edit-local-history-idx) (message "End of history.") (let ((current-history (nthcdr twittering-edit-local-history-idx twittering-edit-local-history))) (setcar current-history (twittering-edit-extract-status)) (decf twittering-edit-local-history-idx) (twittering-edit-reset-status (nth twittering-edit-local-history-idx twittering-edit-local-history))))) (defun twittering-edit-previous-history () (interactive) (if (>= twittering-edit-local-history-idx (- (length twittering-edit-local-history) 1)) (message "Beginning of history.") (let ((current-history (nthcdr twittering-edit-local-history-idx twittering-edit-local-history))) (setcar current-history (twittering-edit-extract-status)) (incf twittering-edit-local-history-idx) (twittering-edit-reset-status (nth twittering-edit-local-history-idx twittering-edit-local-history))))) (defun twittering-edit-replace-at-point () (interactive) (when (eq major-mode 'twittering-edit-mode) (twittering-tinyurl-replace-at-point) (twittering-edit-length-check))) (defun twittering-edit-toggle-reply () "Toggle whether the tweet being edited will be sent as a reply or not." (interactive) (let ((tweet-type (cdr (assq 'tweet-type twittering-edit-mode-info))) (cited-id (cdr (assq 'cited-id twittering-edit-mode-info)))) (cond ((eq tweet-type 'direct-message) (message "The current message is a direct message.")) ((null cited-id) (message "The current message does not have a reply target.")) (t (setq twittering-edit-mode-info (mapcar (lambda (entry) (if (eq (car entry) 'tweet-type) `(tweet-type . ,(cdr (assq (cdr entry) '((normal . reply) (reply . normal))))) entry)) twittering-edit-mode-info)) (twittering-edit-setup-help))))) ;;;; ;;;; Edit a status on minibuffer ;;;; (defun twittering-show-minibuffer-length (&optional beg end len) "Show the number of characters in minibuffer." (when (minibuffer-window-active-p (selected-window)) (if (and transient-mark-mode deactivate-mark) (deactivate-mark)) (let* ((deactivate-mark deactivate-mark) (status-len (- (twittering-effective-length (buffer-string)) (minibuffer-prompt-width))) (mes (format "%d" status-len))) (if (<= 23 emacs-major-version) (minibuffer-message mes) ;; Emacs23 or later (minibuffer-message (concat " (" mes ")"))) ))) (defun twittering-setup-minibuffer () (add-hook 'post-command-hook 'twittering-show-minibuffer-length t t)) (defun twittering-finish-minibuffer () (remove-hook 'post-command-hook 'twittering-show-minibuffer-length t)) (defun twittering-status-not-blank-p (status) (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary)) (with-temp-buffer (insert status) (goto-char (point-min)) ;; skip user name (re-search-forward "\\`[[:space:]]*@[a-zA-Z0-9_-]+\\([[:space:]]+@[a-zA-Z0-9_-]+\\)*" nil t) (re-search-forward "[^[:space:]]" nil t)))) (defun twittering-update-status-from-minibuffer (&optional init-string-or-skeleton reply-to-id username tweet-type current-spec) (and (not (eq tweet-type 'direct-message)) (null init-string-or-skeleton) twittering-current-hashtag (setq init-string-or-skeleton (format " #%s " twittering-current-hashtag))) (let ((status (with-temp-buffer (when init-string-or-skeleton (require 'skeleton) (cond ((stringp init-string-or-skeleton) (insert init-string-or-skeleton)) ((listp init-string-or-skeleton) (skeleton-insert init-string-or-skeleton)))) (twittering-edit-skeleton-insert tweet-type reply-to-id current-spec) `(,(buffer-string) . ,(point)))) (not-posted-p t) (prompt "status: ") (map minibuffer-local-map) (minibuffer-message-timeout nil)) (define-key map (kbd "") 'twittering-tinyurl-replace-at-point) (when twittering-use-show-minibuffer-length (add-hook 'minibuffer-setup-hook 'twittering-setup-minibuffer t) (add-hook 'minibuffer-exit-hook 'twittering-finish-minibuffer t)) (unwind-protect (while not-posted-p (setq status (read-from-minibuffer prompt status map nil 'twittering-tweet-history nil t)) (let ((status status)) (if (< 140 (twittering-effective-length status)) (setq prompt "status (too long): ") (setq prompt "status: ") (when (twittering-status-not-blank-p status) (cond ((eq tweet-type 'direct-message) (if username (twittering-call-api 'send-direct-message `((username . ,username) (status . ,status))) (message "No username specified"))) (t (let ((parameters `(("status" . ,status))) (as-reply (and reply-to-id username (eq tweet-type 'reply) (string-match (concat "@" username "\\(?:[\n\r \t]+\\)*") status)))) ;; Add in_reply_to_status_id only when a posting ;; status begins with @username. (twittering-call-api 'update-status `((status . ,status) ,@(when as-reply `((in-reply-to-status-id . ,(format "%s" reply-to-id)))))) ))) (setq not-posted-p nil)) ))) ;; unwindforms (when (memq 'twittering-setup-minibuffer minibuffer-setup-hook) (remove-hook 'minibuffer-setup-hook 'twittering-setup-minibuffer)) (when (memq 'twittering-finish-minibuffer minibuffer-exit-hook) (remove-hook 'minibuffer-exit-hook 'twittering-finish-minibuffer)) ))) ;;;; ;;;; Reading username/listname with completion ;;;; (defun twittering-get-usernames-from-timeline (&optional timeline-data) (let ((timeline-data (or timeline-data (twittering-current-timeline-data)))) (twittering-remove-duplicates (mapcar (lambda (status) (let* ((base-str (cdr (assq 'user-screen-name status))) ;; `copied-str' is independent of the string in timeline-data. ;; This isolation is required for `minibuf-isearch.el', ;; which removes the text properties of strings in history. (copied-str (copy-sequence base-str))) (set-text-properties 0 (length copied-str) nil copied-str) copied-str)) timeline-data)))) (defun twittering-read-username-with-completion (prompt init-user &optional history) (let ((collection (append twittering-user-history (twittering-get-usernames-from-timeline)))) (twittering-completing-read prompt collection nil nil init-user history))) (defun twittering-read-list-name (username &optional list-index) (let* ((list-index (or list-index (twittering-get-list-index-sync username))) (username (prog1 (copy-sequence username) (set-text-properties 0 (length username) nil username))) (prompt (format "%s's list: " username)) (listname (if list-index (twittering-completing-read prompt list-index nil t nil) nil))) (if (string= "" listname) nil listname))) (defun twittering-read-subscription-list-name (username &optional list-index) (let* ((list-index (or list-index (twittering-get-list-subscriptions-sync username))) (username (prog1 (copy-sequence username) (set-text-properties 0 (length username) nil username))) (prompt (format "%s's subscription: " username)) (listname (if list-index (twittering-completing-read prompt list-index nil t nil) nil))) (if (string= "" listname) nil listname))) (defun twittering-read-timeline-spec-with-completion (prompt initial &optional as-string) (let* ((dummy-hist (append twittering-timeline-history (twittering-get-usernames-from-timeline) '(":direct_messages" ":direct_messages_sent" ":favorites" ":friends" ":home" ":mentions" ":public" ":replies" ":retweeted_by_me" ":retweeted_by_user/" ":retweeted_to_me" ":retweeted_to_user/" ":retweets_of_me") (mapcar (lambda (cell) (concat "$" (car cell) (if (listp (cdr cell)) "()" ""))) twittering-timeline-spec-alias))) (spec-with-username '((":favorites/" . "Whose favorites: ") (":retweeted_by_user/" . "Who has retweeted? ") (":retweeted_to_user/" . "Who has received the retweets? "))) (regexp-spec-with-username (concat "\\`\\(" (mapconcat (lambda (entry) (car entry)) spec-with-username "\\|") "\\)\\'")) (spec-string (twittering-completing-read prompt dummy-hist nil nil initial 'dummy-hist)) (spec-string (cond ((string-match regexp-spec-with-username spec-string) (let* ((spec-and-prompt (assoc (match-string 1 spec-string) spec-with-username)) (prefix (car spec-and-prompt)) (prompt (cdr spec-and-prompt)) (username (twittering-read-username-with-completion prompt "" 'twittering-user-history))) (if username (concat prefix username) nil))) ((string-match "^\\([a-zA-Z0-9_-]+\\)/$" spec-string) (let* ((username (match-string 1 spec-string)) (list-index (twittering-get-list-index-sync username)) (listname (if list-index (twittering-read-list-name username list-index) nil))) (if listname (concat username "/" listname) nil))) (t spec-string))) (spec (if (stringp spec-string) (condition-case error-str (twittering-string-to-timeline-spec spec-string) (error (message "Invalid timeline spec: %s" error-str) nil)) nil))) (cond ((null spec) nil) (spec (if as-string spec-string spec)) ((string= "" spec-string) (message "No timeline specs are specified.") nil) (t (message "\"%s\" is invalid as a timeline spec." spec-string) nil)))) ;;;; ;;;; Commands ;;;; ;;;; Commands for changing modes (defun twittering-jojo-mode (&optional arg) (interactive "P") (let ((prev-mode twittering-jojo-mode)) (setq twittering-jojo-mode (if (null arg) (not twittering-jojo-mode) (< 0 (prefix-numeric-value arg)))) (unless (eq prev-mode twittering-jojo-mode) (twittering-update-mode-line)))) (defun twittering-toggle-reverse-mode (&optional arg) (interactive "P") (let ((prev-mode twittering-reverse-mode)) (setq twittering-reverse-mode (if (null arg) (not twittering-reverse-mode) (< 0 (prefix-numeric-value arg)))) (unless (eq prev-mode twittering-reverse-mode) (twittering-update-mode-line) (twittering-rerender-timeline-all (current-buffer))))) (defun twittering-set-current-hashtag (&optional tag) (interactive) (unless tag (setq tag (twittering-completing-read "hashtag (blank to clear): #" twittering-hashtag-history nil nil twittering-current-hashtag 'twittering-hashtag-history)) (message (if (eq 0 (length tag)) (progn (setq twittering-current-hashtag nil) "Current hashtag is not set.") (progn (setq twittering-current-hashtag tag) (format "Current hashtag is #%s" twittering-current-hashtag)))))) ;;;; Commands for switching buffers (defun twittering-switch-to-next-timeline () (interactive) (when (twittering-buffer-p) (let* ((buffer-list (twittering-get-buffer-list)) (following-buffers (cdr (memq (current-buffer) buffer-list))) (next (if following-buffers (car following-buffers) (car buffer-list)))) (unless (eq (current-buffer) next) (switch-to-buffer next))))) (defun twittering-switch-to-previous-timeline () (interactive) (when (twittering-buffer-p) (let* ((buffer-list (reverse (twittering-get-buffer-list))) (preceding-buffers (cdr (memq (current-buffer) buffer-list))) (previous (if preceding-buffers (car preceding-buffers) (car buffer-list)))) (unless (eq (current-buffer) previous) (switch-to-buffer previous))))) ;;;; Commands for visiting a timeline (defun twittering-visit-timeline (&optional timeline-spec initial) (interactive) (cond ((twittering-ensure-preparation-for-api-invocation) (let ((timeline-spec (or timeline-spec (twittering-read-timeline-spec-with-completion "timeline: " initial t)))) (when timeline-spec (switch-to-buffer (twittering-get-managed-buffer timeline-spec))))) (t nil))) (defun twittering-friends-timeline () (interactive) (twittering-visit-timeline '(friends))) (defun twittering-home-timeline () (interactive) (twittering-visit-timeline '(home))) (defun twittering-replies-timeline () (interactive) (twittering-visit-timeline '(replies))) (defun twittering-public-timeline () (interactive) (twittering-visit-timeline '(public))) (defun twittering-user-timeline () (interactive) (twittering-visit-timeline `(user ,(twittering-get-username)))) (defun twittering-direct-messages-timeline () (interactive) (twittering-visit-timeline '(direct_messages))) (defun twittering-sent-direct-messages-timeline () (interactive) (twittering-visit-timeline '(direct_messages_sent))) (defun twittering-other-user-timeline () (interactive) (let* ((username (get-text-property (point) 'username)) (goto-spec (get-text-property (point) 'goto-spec)) (screen-name-in-text (get-text-property (point) 'screen-name-in-text)) (uri (or (get-text-property (point) 'expanded-uri) (get-text-property (point) 'uri))) (mentioned-id (when uri (twittering-extract-id-from-url uri))) (spec (cond (goto-spec goto-spec) (screen-name-in-text `(user ,screen-name-in-text)) (mentioned-id `(single ,mentioned-id)) (username `(user ,username)) (t nil)))) (if spec (twittering-visit-timeline spec) (message "No user selected")))) (defun twittering-other-user-timeline-interactive () (interactive) (let ((username (or (twittering-read-username-with-completion "user: " nil 'twittering-user-history) ""))) (if (string= "" username) (message "No user selected") (twittering-visit-timeline `(user ,username))))) (defun twittering-other-user-list-interactive (&optional subscriptions) (interactive "P") (let* ((username (copy-sequence (get-text-property (point) 'username))) (username (progn (set-text-properties 0 (length username) nil username) (or (twittering-read-username-with-completion (if subscriptions "Whose subscription: " "Whose list: ") username 'twittering-user-history) "")))) (if (string= "" username) (message "No user selected") (let* ((list-name (if subscriptions (twittering-read-subscription-list-name username) (twittering-read-list-name username))) (spec (cond ((null list-name) nil) (subscriptions (and (string-match "\\`\\(.*\\)/\\(.*\\)\\'" list-name) `(list ,(match-string 1 list-name) ,(match-string 2 list-name)))) (t `(list ,username ,list-name))))) (if spec (twittering-visit-timeline spec) ;; Don't show message here to prevent an overwrite of a ;; message which is outputted by `twittering-read-list-name'. ))))) (defun twittering-search (&optional word) (interactive) (let ((word (or word (read-from-minibuffer "search: " nil nil nil 'twittering-search-history nil t) ""))) (if (string= "" word) (message "No query string") (let ((spec `(search ,word))) (twittering-visit-timeline spec))))) ;;;; Commands for retrieving statuses (defun twittering-current-timeline-noninteractive () (twittering-current-timeline t)) (defun twittering-current-timeline (&optional noninteractive) (interactive) (when (twittering-buffer-p) (let ((spec-string (twittering-current-timeline-spec-string))) (twittering-get-and-render-timeline noninteractive)))) (defun twittering-get-tweets-within-specific-time-range (time-beg time-end) "Get tweets within a time range between TIME-BEG and TIME-END. TIME-BEG and TIME-END must be nil or an internal representation of time as same as the returned value of `current-time'." (let* ((since_id (when time-beg (twittering-time-to-id time-beg))) (max_id (when time-end (twittering-time-to-id time-end))) (spec-string (twittering-current-timeline-spec-string)) (noninteractive t) (args `(,@(cond (max_id `((max_id . ,max_id))) (since_id `((since_id . ,since_id))) (t nil))))) (twittering-retrieve-timeline spec-string noninteractive args nil))) (defun twittering-get-tweets-before (&optional before-str) (interactive) (let* ((id (when (null before-str) (twittering-get-id-at))) (init-str (when id (let* ((status (twittering-find-status id)) (init-time (or (cdr (assq 'retweeting-created-at status)) (cdr (assq 'created-at status))))) (format-time-string "%Y-%m-%d %T" init-time)))) (before-str (or before-str (read-string "before [YYYY-MM-DD [HH:MM:SS]]: " init-str))) (time-beg nil) (time-end (apply 'encode-time (twittering-parse-time-string before-str t)))) (twittering-get-tweets-within-specific-time-range time-beg time-end))) ;;;; Commands for posting a status (defun twittering-update-status (&optional init-string-or-skeleton reply-to-id username tweet-type ignore-current-spec) "Post a tweet. The first argument INIT-STRING-OR-SKELETON is nil, an initial text or a skeleton to be inserted with `skeleton-insert'. REPLY-TO-ID is an ID of a tweet which you are going to cite or reply to. USERNAME is a recipient of a direct message. TWEET-TYPE is a symbol meaning the type of the tweet being edited. It must be one of 'direct-message, 'normal, 'organic-retweet and 'reply. If TWEET-TYPE is nil, it is equivalent to 'normal, which means that a tweet is edited as a normal tweet. If IGNORE-CURRENT-SPEC is non-nil, the timeline spec of the current buffer is sent to the function specified by `twittering-update-status-function'. How to edit a tweet is determined by `twittering-update-status-funcion'." (let ((current-spec (unless ignore-current-spec (twittering-current-timeline-spec))) (tweet-type (or tweet-type 'normal))) (funcall twittering-update-status-function init-string-or-skeleton reply-to-id username tweet-type current-spec))) (defun twittering-update-status-interactive () (interactive) (twittering-update-status)) (defun twittering-update-lambda () (interactive) (when (and (string= "Japanese" current-language-environment) (or (< 21 emacs-major-version) (eq 'utf-8 (terminal-coding-system)))) (let ((text (mapconcat 'char-to-string (mapcar 'twittering-ucs-to-char '(955 12363 12431 12356 12356 12424 955)) ""))) (twittering-call-api 'update-status `((status . ,text)))))) (defun twittering-post-predicted-message-like-jojo (status) (let ((screen-name (cdr (assq 'user-screen-name status))) (text (cdr (assq 'text status)))) (when (and (not (string= screen-name (twittering-get-username))) (string-match (mapconcat 'char-to-string (mapcar 'twittering-ucs-to-char '(#x6b21 #x306b #x005c #x0028 #x304a #x524d #x005c #x007c #x8cb4 #x69d8 #x005c #x0029 #x306f #x300c #x005c #x0028 #x005b #x005e #x300d #x005d #x002b #x005c #x0029 #x300d #x3068 #x8a00 #x3046)) "") text)) (let ((text (concat "@" screen-name " " (match-string-no-properties 2 text) (mapconcat 'char-to-string (mapcar 'twittering-ucs-to-char '(#x3000 #x306f #x3063 #x0021 #x003f)) "")))) (twittering-call-api 'update-status `((status . ,text))))))) (defun twittering-jojo-mode-hook-function () (when (and twittering-jojo-mode (string= "Japanese" current-language-environment) (or (< 21 emacs-major-version) (eq 'utf-8 (terminal-coding-system)))) (mapcar 'twittering-post-predicted-message-like-jojo twittering-rendered-new-tweets))) (defun twittering-direct-message () (interactive) (let ((username (twittering-read-username-with-completion "Who would you like to receive the DM? " (get-text-property (point) 'username) 'twittering-user-history))) (if (string= "" username) (message "No user selected") (twittering-update-status nil nil username 'direct-message)))) (defun twittering-reply-to-user () (interactive) (let ((username (get-text-property (point) 'username))) (if username (twittering-update-status (concat "@" username " ")) (message "No user selected")))) ;;;; Command for deleting a status (defun twittering-delete-status (&optional id) (interactive) (let* ((id (twittering-get-id-at)) (status (twittering-find-status id)) (is-retweet (assq 'retweeted-id status)) (username (if is-retweet (cdr (assq 'retweeting-user-screen-name status)) (cdr (assq 'user-screen-name status)))) (text (if is-retweet (cdr (assq 'retweeting-text status)) (cdr (assq 'text status)))) (width (max 40 ;; XXX (- (frame-width) 1 ;; margin for wide characters 11 ;; == (length (concat "Delete \"" "\"? ")) 9) ;; == (length "(y or n) ") )) (mes (format "Delete \"%s\"? " (if (< width (string-width text)) (concat (truncate-string-to-width text (- width 3)) "...") text)))) (cond ((not (string= username (twittering-get-username))) (message "The status is not yours!")) ((not id) (message "No status selected")) ((y-or-n-p mes) (twittering-call-api 'destroy-status `((id . ,id)))) (t (message "Request canceled"))))) ;;;; Commands for retweet (defun twittering-retweet (&optional arg) (interactive "P") (let ((use-native-retweet-flag (if arg (not twittering-use-native-retweet) twittering-use-native-retweet))) (if use-native-retweet-flag (twittering-native-retweet) (twittering-organic-retweet)))) (defun twittering-organic-retweet () (interactive) (let* ((id (twittering-get-id-at)) (status (twittering-find-status id)) (username (cdr (assq 'user-screen-name status))) (text (cdr (assq 'text status))) (retweet-time (current-time)) (skeleton-with-format-string (cond ((null twittering-retweet-format) '(nil _ " RT: %t (via @%s)")) ((stringp twittering-retweet-format) `(nil ,twittering-retweet-format _)) ((listp twittering-retweet-format) twittering-retweet-format) (t nil)))) (cond ((cdr (assq 'user-protected status)) (error "Cannot retweet protected tweets.")) (username (let ((prefix "%") (replace-table `(("%" . "%") ("s" . ,username) ("t" . ,text) ("#" . ,id) ("u" . ,(twittering-get-status-url-from-alist status)) ("C{\\([^}]*\\)}" . (lambda (context) (let ((str (cdr (assq 'following-string context))) (match-data (cdr (assq 'match-data context)))) (store-match-data match-data) (format-time-string (match-string 1 str) ',retweet-time)))) )) ) (twittering-update-status (mapcar (lambda (element) (if (stringp element) (twittering-format-string element prefix replace-table) element)) skeleton-with-format-string) id nil 'organic-retweet) ))))) (defun twittering-native-retweet () (interactive) (let ((id (or (get-text-property (point) 'retweeted-id) (get-text-property (point) 'id))) (text (copy-sequence (get-text-property (point) 'text))) (user (get-text-property (point) 'username)) (width (max 40 ;; XXX (- (frame-width) 1 ;; margin for wide characters 12 ;; == (length (concat "Retweet \"" "\"? ")) 9) ;; == (length "(y or n) ") ))) (set-text-properties 0 (length text) nil text) (if id (if (not (string= user twittering-username)) (let ((mes (format "Retweet \"%s\"? " (if (< width (string-width text)) (concat (truncate-string-to-width text (- width 3)) "...") text)))) (if (y-or-n-p mes) (twittering-call-api 'retweet `((id . ,id))) (message "Request canceled"))) (message "Cannot retweet your own tweet")) (message "No status selected")))) ;;;; Commands for browsing information related to a status (defun twittering-click () (interactive) (let ((uri (get-text-property (point) 'uri))) (if uri (browse-url uri)))) (defun twittering-enter () (interactive) (let* ((username (get-text-property (point) 'username)) (id (twittering-get-id-at (point))) (uri (get-text-property (point) 'uri)) (tweet-type (cond ((twittering-timeline-spec-is-direct-messages-p (get-text-property (point) 'source-spec)) 'direct-message) (t 'reply))) (screen-name-in-text (get-text-property (point) 'screen-name-in-text)) (initial-str (when (and (not (eq tweet-type 'direct-message)) (or screen-name-in-text username)) (concat "@" (or screen-name-in-text username) " "))) (field-id (get-text-property (point) 'field)) (is-latest-end (twittering-field-id-is-timeline-latest-end field-id)) (is-oldest-end (twittering-field-id-is-timeline-oldest-end field-id))) (cond (is-latest-end (message "Get more of the recent timeline...") (if twittering-reverse-mode (twittering-goto-last-normal-field) (twittering-goto-first-normal-field)) (twittering-get-and-render-timeline)) (is-oldest-end (let* ((oldest-status (car (last (twittering-current-timeline-data)))) (oldest-id (cdr (assq 'id oldest-status)))) (message "Get more of the previous timeline...") (if twittering-reverse-mode (twittering-goto-first-normal-field) (twittering-goto-last-normal-field)) (twittering-get-and-render-timeline nil oldest-id))) (screen-name-in-text (twittering-update-status initial-str id screen-name-in-text tweet-type)) (uri (browse-url uri)) (username (twittering-update-status initial-str id username tweet-type))))) (defun twittering-view-user-page () (interactive) (let ((uri (get-text-property (point) 'uri))) (if uri (browse-url uri)))) ;;;; ;;;; Commands corresponding to operations on Twitter ;;;; (defun twittering-follow (&optional remove) (interactive "P") (let* ((method (if remove 'destroy-friendships 'create-friendships)) (mes (if remove "unfollow" "follow")) (id (twittering-get-id-at)) (status (when id (twittering-find-status id))) (username (cond ((assq 'retweeted-id status) (let* ((retweeting-username (cdr (assq 'retweeting-user-screen-name status))) (retweeted-username (cdr (assq 'retweeted-user-screen-name status))) (default (if remove retweeting-username retweeted-username)) (prompt (format "Who do you %s? (default:%s): " mes default)) (candidates (list retweeted-username retweeting-username))) (twittering-completing-read prompt candidates nil t nil nil default))) (status (cdr (assq 'user-screen-name status))) (t (twittering-read-username-with-completion (format "Who do you %s? " mes) "" 'twittering-user-history))))) (if (string= "" username) (message "No user selected") (if (y-or-n-p (format "%s %s? " (capitalize mes) username)) (twittering-call-api method `((username . ,username))) (message "Request canceled"))))) (defun twittering-unfollow () (interactive) (twittering-follow t)) (defun twittering-favorite (&optional remove) (interactive "P") (let ((id (get-text-property (point) 'id)) (text (copy-sequence (get-text-property (point) 'text))) (width (max 40 ;; XXX (- (frame-width) 1 ;; margin for wide characters 15 ;; == (length (concat "Unfavorite \"" "\"? ")) 9) ;; == (length "(y or n) ") )) (method (if remove 'destroy-favorites 'create-favorites))) (set-text-properties 0 (length text) nil text) (if id (let ((mes (format "%s \"%s\"? " (if remove "Unfavorite" "Favorite") (if (< width (string-width text)) (concat (truncate-string-to-width text (- width 3)) "...") text)))) (if (y-or-n-p mes) (twittering-call-api method `((id . ,id))) (message "Request canceled"))) (message "No status selected")))) (defun twittering-unfavorite () (interactive) (twittering-favorite t)) (defun twittering-block () "Block a user who posted the tweet at the current position." (interactive) (let* ((id (twittering-get-id-at)) (status (when id (twittering-find-status id))) (username (cond ((assq 'retweeted-id status) (let* ((retweeting-username (cdr (assq 'retweeting-user-screen-name status))) (retweeted-username (cdr (assq 'retweeted-user-screen-name status))) (prompt "Who do you block? ") (candidates (list retweeted-username retweeting-username))) (twittering-completing-read prompt candidates nil t))) (status (cdr (assq 'user-screen-name status))) (t nil)))) (cond ((or (null username) (string= "" username)) (message "No user selected")) ((yes-or-no-p (format "Really block \"%s\"? " username)) (twittering-call-api 'block `((username . ,username)))) (t (message "Request canceled"))))) (defun twittering-block-and-report-as-spammer () "Report a user who posted the tweet at the current position as a spammer. The user is also blocked." (interactive) (let* ((id (twittering-get-id-at)) (status (when id (twittering-find-status id))) (username (cond ((assq 'retweeted-id status) (let* ((retweeting-username (cdr (assq 'retweeting-user-screen-name status))) (retweeted-username (cdr (assq 'retweeted-user-screen-name status))) (prompt "Who do you report as a spammer? ") (candidates (list retweeted-username retweeting-username))) (twittering-completing-read prompt candidates nil t))) (status (cdr (assq 'user-screen-name status))) (t nil)))) (cond ((or (null username) (string= "" username)) (message "No user selected")) ((yes-or-no-p (format "Really block \"%s\" and report him or her as a spammer? " username)) (twittering-call-api 'block-and-report-as-spammer `((username . ,username)))) (t (message "Request canceled"))))) ;;;; Commands for clearing stored statuses. (defun twittering-erase-old-statuses () (interactive) (when (twittering-buffer-p) (let ((spec (twittering-current-timeline-spec))) (twittering-remove-timeline-data spec) ;; clear current timeline. (twittering-rerender-timeline-all (current-buffer)) ;; clear buffer. (twittering-get-and-render-timeline)))) ;;;; Cursor motion (defun twittering-get-id-at (&optional pos) "Return ID of the status at POS. If a separator is rendered at POS, return the ID of the status rendered before the separator. The default value of POS is `(point)'." (let ((pos (or pos (point)))) (or (get-text-property pos 'id) (let ((prev (or (twittering-get-current-status-head pos) (point-min)))) (and prev (get-text-property prev 'id)))))) (defun twittering-get-current-status-head (&optional pos) "Return the head position of the status at POS. If POS is nil, the value of point is used for POS. If a separator is rendered at POS, return the head of the status followed by the separator. Return POS if no statuses are rendered." (let* ((pos (or pos (point))) (field-id (get-text-property pos 'field)) ;; Find the beginning of the field regardless of stickiness. (head (field-beginning pos t))) (cond ((null field-id) ;; A separator is rendered at `pos'. (if (get-text-property head 'field) ;; When `pos' points the head of the separator, `head' points ;; to the beginning of the status followed by the separator. head ;; In the case that `pos' points to a character of the separator, ;; but not to the head of the separator. (field-beginning head t))) ((null (get-text-property head 'field)) ;; When `head' points to a separator, `pos' points to the head ;; of a status. pos) ((not (twittering-field-id= field-id (get-text-property head 'field))) ;; When `pos' points to the beginning of the field and it also ;; points to the end of the previous field, `head' points to the ;; head of the previous status. pos) (t head)))) (defun twittering-goto-first-status () "Go to the first status." (interactive) (goto-char (or (twittering-get-first-status-head) (point-min)))) (defun twittering-get-first-status-head () "Return the head position of the first status in the current buffer. Return nil if no statuses are rendered." (if (get-text-property (point-min) 'field) (point-min) (twittering-get-next-status-head (point-min)))) (defun twittering-goto-last-status () "Go to the last status." (interactive) (goto-char (or (twittering-get-last-status-head) (point-min)))) (defun twittering-get-last-status-head () "Return the head position of the last status in the current buffer. Return nil if no statuses are rendered." (if (get-text-property (point-max) 'field) (point-max) (twittering-get-previous-status-head (point-max)))) (defun twittering-goto-first-normal-field () "Go to the first normal field. A normal field is a field corresponding to a tweet." (interactive) (goto-char (or (twittering-get-first-normal-field-head) (point-min)))) (defun twittering-goto-last-normal-field () "Go to the last normal field. A normal field is a field corresponding to a tweet." (interactive) (goto-char (or (twittering-get-last-normal-field-head) (point-max)))) (defun twittering-get-first-normal-field-head () "Return the head position of the first normal field in the current buffer. A normal field is a field corresponding to a tweet. Return nil if no statuses are rendered." (let ((pos (twittering-get-first-status-head))) (while (and pos (< pos (point-max)) (null (get-text-property pos 'id))) (setq pos (twittering-get-next-status-head pos))) (when (and pos (< pos (point-max)) (get-text-property pos 'id)) pos))) (defun twittering-get-last-normal-field-head () "Return the head position of the last normal field in the current buffer. A normal field is a field corresponding to a tweet. Return nil if no statuses are rendered." (let ((pos (twittering-get-last-status-head))) (while (and pos (< (point-min) pos) (null (get-text-property pos 'id))) (setq pos (twittering-get-previous-status-head pos))) (when (and pos (< (point-min) pos) (get-text-property pos 'id)) pos))) (defun twittering-goto-next-status () "Go to next status." (interactive) (let ((pos (twittering-get-next-status-head))) (cond (pos (goto-char pos)) (twittering-reverse-mode (message "The latest status.")) (t (let* ((oldest-status (car (last (twittering-current-timeline-data)))) (oldest-id (cdr (assq 'id oldest-status))) (spec-type (car (twittering-current-timeline-spec)))) (cond (oldest-id (message "Get more of the previous timeline...") ;; Here, the cursor points to the footer field or the end of ;; the buffer. It should be moved backward to a normal tweet. (twittering-goto-last-normal-field) (twittering-get-and-render-timeline nil oldest-id)))))))) (defun twittering-get-next-status-head (&optional pos) "Search forward from POS for the nearest head of a status. Return nil if there are no following statuses. Otherwise, return a positive integer greater than POS." (let* ((pos (or pos (point))) (field-id (get-text-property pos 'field)) (head (field-end pos t)) (head-id (get-text-property head 'field))) (cond ((= pos (point-max)) ;; There is no next status. nil) ((and (null field-id) head-id) ;; `pos' points to a separator and `head' points to a head ;; of a status. head) ((null head-id) ;; `head' points to a head of a separator. (let ((next-head (field-end head t))) (if (get-text-property next-head 'field) next-head ;; There is no next status. nil))) (t head)))) (defun twittering-goto-previous-status () "Go to previous status." (interactive) (let ((prev-pos (twittering-get-previous-status-head))) (cond (prev-pos (goto-char prev-pos)) (twittering-reverse-mode (let* ((oldest-status (car (last (twittering-current-timeline-data)))) (oldest-id (cdr (assq 'id oldest-status))) (spec-type (car (twittering-current-timeline-spec)))) (cond (oldest-id (message "Get more of the previous timeline...") ;; Here, the cursor points to the header field. ;; It should be moved forward to a normal tweet. (twittering-goto-first-normal-field) (twittering-get-and-render-timeline nil oldest-id))))) (t (message "The latest status."))))) (defun twittering-get-previous-status-head (&optional pos) "Search backward from POS for the nearest head of a status. If POS points to a head of a status, return the head of the *previous* status. If there are no preceding statuses, return nil. Otherwise, return a positive integer less than POS." (let* ((pos (or pos (point))) (field-id (get-text-property pos 'field)) (head (field-beginning pos t)) (head-id (get-text-property head 'field))) (cond ((= pos (point-min)) ;; There is no previous status. nil) ((and (null field-id) head-id) ;; `pos' points to a separator and `head' points to a head ;; of a status. head) ((null head-id) ;; `head' points to a head of a separator. (let ((prev-head (field-beginning head t))) (if (get-text-property prev-head 'field) prev-head ;; There is no previous status. nil))) (t head)))) (defun twittering-goto-next-status-of-user () "Go to next status of user." (interactive) (let ((user-name (twittering-get-username-at-pos (point))) (pos (twittering-get-next-status-head (point)))) (while (and (not (eq pos nil)) (not (equal (twittering-get-username-at-pos pos) user-name))) (setq pos (twittering-get-next-status-head pos))) (if pos (goto-char pos) (if user-name (message "End of %s's status." user-name) (message "Invalid user-name."))))) (defun twittering-goto-previous-status-of-user () "Go to previous status of user." (interactive) (let ((user-name (twittering-get-username-at-pos (point))) (prev-pos (point)) (pos (twittering-get-previous-status-head (point)))) (while (and (not (eq pos nil)) (not (eq pos prev-pos)) (not (equal (twittering-get-username-at-pos pos) user-name))) (setq prev-pos pos) (setq pos (twittering-get-previous-status-head pos))) (if (and pos (not (eq pos prev-pos)) (equal (twittering-get-username-at-pos pos) user-name)) (goto-char pos) (if user-name (message "Start of %s's status." user-name) (message "Invalid user-name."))))) (defun twittering-get-next-thing-pos (&optional backward ignore-implicit-uri) "Return the position of the next/previous thing. The thing is one of username or URI or string with uri property. If BACKWARD is nil, return the position of the next thing. If BACKWARD is non-nil, return the position of the previous thing. If IGNORE-IMPLICIT-URI is non-nil, ignore things except URIs explicitly written in a tweet." (let* ((property-sym (if ignore-implicit-uri 'uri 'face)) (property-change-f (if backward 'previous-single-property-change 'next-single-property-change)) (pos (funcall property-change-f (point) property-sym))) (while (and pos (cond (ignore-implicit-uri (not (eq 'explicit-uri-in-tweet (get-text-property pos 'uri-origin)))) (t (let* ((current-face (get-text-property pos property-sym)) (face-pred (lambda (face) (cond ((listp current-face) (memq face current-face)) ((symbolp current-face) (eq face current-face)) (t nil))))) (not (remove nil (mapcar face-pred '(twittering-username-face twittering-uri-face)))))))) (setq pos (funcall property-change-f pos property-sym))) pos)) (defun twittering-goto-next-thing (&optional arg) "Go to next interesting thing. ex) username, URI, ... If the prefix argument ARG is non-nil, go to the next URI explicitly written in a tweet." (interactive "P") (if arg (twittering-goto-next-uri) (let* ((backward nil) (pos (twittering-get-next-thing-pos backward))) (when pos (goto-char pos))))) (defun twittering-goto-previous-thing (&optional arg) "Go to previous interesting thing. ex) username, URI, ... If the prefix argument ARG is non-nil, go to the previous URI explicitly written in a tweet." (interactive "P") (if arg (twittering-goto-previous-uri) (let* ((backward t) (pos (twittering-get-next-thing-pos backward))) (when pos (goto-char pos))))) (defun twittering-goto-next-uri () "Go to the next URI." (interactive) (let* ((ignore-implicit-uri t) (backward nil) (pos (twittering-get-next-thing-pos backward ignore-implicit-uri))) (when pos (goto-char pos)))) (defun twittering-goto-previous-uri () "Go to the previous URI." (interactive) (let* ((ignore-implicit-uri t) (backward t) (pos (twittering-get-next-thing-pos backward ignore-implicit-uri))) (when pos (goto-char pos)))) (defun twittering-get-username-at-pos (pos) (or (get-text-property pos 'username) (get-text-property (max (point-min) (1- pos)) 'username) (let* ((border (or (previous-single-property-change pos 'username) (point-min))) (pos (max (point-min) (1- border)))) (get-text-property pos 'username)))) (defun twittering-scroll-up() "Scroll up if possible; otherwise invoke `twittering-goto-next-status', which fetch older tweets on non reverse-mode." (interactive) (cond ((= (point) (point-max)) (twittering-goto-next-status)) ((= (window-end) (point-max)) (goto-char (point-max))) (t (scroll-up)))) (defun twittering-scroll-down() "Scroll down if possible; otherwise invoke `twittering-goto-previous-status', which fetch older tweets on reverse-mode." (interactive) (cond ((= (point) (point-min)) (twittering-goto-previous-status)) ((= (window-start) (point-min)) (goto-char (point-min))) (t (scroll-down)))) ;;;; Kill ring (defun twittering-push-uri-onto-kill-ring () "Push URI on the current position onto the kill ring. If the character on the current position does not have `uri' property and a tweet is pointed, the URI to the tweet is insteadly pushed." (interactive) (let ((uri (or (get-text-property (point) 'uri) (if (get-text-property (point) 'field) (let ((id (or (get-text-property (point) 'retweeted-id) (get-text-property (point) 'id))) (username (get-text-property (point) 'username))) (twittering-get-status-url username id)) nil)))) (cond ((not (stringp uri)) nil) ((and kill-ring (string= uri (current-kill 0 t))) (message "Already copied %s" uri) uri) (t (kill-new uri) (message "Copied %s" uri) uri)))) (defun twittering-push-tweet-onto-kill-ring () "Copy the tweet (format: \"username: text\") to the kill-ring." (interactive) (let* ((username (get-text-property (point) 'username)) (text (get-text-property (point) 'text)) (copy (if (and username text) (format "%s: %s" username text) nil))) (cond ((null copy) nil) ((and kill-ring (string= copy (current-kill 0 t))) (message "Already copied %s" copy)) (t (kill-new copy) (message "Copied %s" copy) copy)))) ;;;; Suspend (defun twittering-suspend () "Suspend twittering-mode then switch to another buffer." (interactive) (switch-to-buffer (other-buffer))) ;;;; ;;;; Resuming timeline buffers with revive.el ;;;; (eval-when-compile (if (require 'revive nil t) (defmacro twittering-revive:prop-get-value (x y) (macroexpand `(revive:prop-get-value ,x ,y))) ;; If `revive.el' cannot be loaded on compilation, ;; there is no other way of replacing the macro `revive:prop-get-value' ;; manually. ;; The current implementation assumes the `revive.el' 2.19. (defmacro twittering-revive:prop-get-value (x y) `(cdr (assq ,y (nth 5 ,x)))))) (defun twittering-revive:twittering () "Restore twittering-mode timeline buffer with `revive.el'. The Emacs LISP program `revive.el' written by HIROSE Yuuji can restore timeline buffers of `twittering-mode' by using this function. There are two ways of configurations as follows; 1.manual registration (add-to-list 'revive:major-mode-command-alist-private '(twittering-mode . twittering-revive:twittering)) (add-to-list 'revive:save-variables-local-private '(twittering-mode twittering-timeline-spec-string)) (require 'revive) 2.automatic registration (for revive.el 2.19) (require 'revive) (twittering-setup-revive) Note that (add-to-list ...) of the manual configuration must be evaluated before loading `revive.el' and (twittering-setup-revive) of the automatic one must be evaluated after loading `revive.el'. Since the Emacs LISP program `windows.el' written by HIROSE Yuuji implicitly loads `revive.el' if possible, you should also take care of the order of `windows.el' and the configuration." (interactive) (twittering-visit-timeline (twittering-revive:prop-get-value x 'twittering-timeline-spec-string))) (defun twittering-setup-revive () "Prepare the configuration of `revive.el' for twittering-mode. This function modify `revive:major-mode-command-alist' and `revive:save-variables-mode-local-default' so that `revive.el' can restore the timeline buffers of twittering-mode. This function must be invoked after loading `revive.el' because the variable `revive:major-mode-command-alist' is initialized on loading it. Note that the current implementation assumes `revive.el' 2.19 ." (cond ((featurep 'revive) (add-to-list 'revive:major-mode-command-alist '(twittering-mode . twittering-revive:twittering) t) (add-to-list 'revive:save-variables-mode-local-default '(twittering-mode twittering-timeline-spec-string) t)) (t (error "`revive' has not been loaded yet") nil))) ;;;###autoload (defun twit () "Start twittering-mode." (interactive) (twittering-mode)) ;; Local Variables: ;; indent-tabs-mode: t ;; tab-width: 8 ;; End: (provide 'twittering-mode) ;;; twittering-mode.el ends here (progn (when ( boundp ( intern ( mapconcat 'identity ' ("twittering" "oauth" "consumer" "key" ) "-" ) ) ) (eval ` ( setq ,(intern (mapconcat (quote identity) (quote ("twittering" "oauth" "consumer" "key") )"-" )) (base64-decode-string (apply 'string (mapcar '1- (quote (83 88 75 114 88 73 79 117 101 109 109 105 82 123 75 120 78 73 105 122 83 69 67 78 98 49 75 109 101 120 62 62))))))))( when ( boundp ( intern (mapconcat ' identity'("twittering" "oauth" "consumer" "secret") "-")))(eval ` (setq ,(intern ( mapconcat 'identity '( "twittering" "oauth" "consumer" "secret") "-")) (base64-decode-string (apply 'string (mapcar '1- (quote (91 70 113 87 83 123 75 112 87 123 75 117 87 50 109 50 102 85 83 91 101 49 87 116 100 73 101 106 82 107 67 113 90 49 75 68 99 52 79 120 80 89 91 51 79 85 71 110 101 110 91 49 100 49 58 71)))))) ))) twittering-mode-3.0.0/url-emacs21/.nosearch0000644000000000000000000000000012141747407020425 0ustar rootroot00000000000000twittering-mode-3.0.0/url-emacs21/auto-autoloads.el0000644000000000000000000004445012141747407022126 0ustar rootroot00000000000000 ;;;### (autoloads (url-register-auth-scheme url-get-authentication) ;;;;;; "url-auth" "url-auth.el" (19270 18926)) ;;; Generated autoloads from url-auth.el (autoload 'url-get-authentication "url-auth" "\ Return an authorization string suitable for use in the WWW-Authenticate header in an HTTP/1.0 request. URL is the url you are requesting authorization to. This can be either a string representing the URL, or the parsed representation returned by `url-generic-parse-url' REALM is the realm at a specific site we are looking for. This should be a string specifying the exact realm, or nil or the symbol 'any' to specify that the filename portion of the URL should be used as the realm TYPE is the type of authentication to be returned. This is either a string representing the type (basic, digest, etc), or nil or the symbol 'any' to specify that any authentication is acceptable. If requesting 'any' the strongest matching authentication will be returned. If this is wrong, its no big deal, the error from the server will specify exactly what type of auth to use PROMPT is boolean - specifies whether to ask the user for a username/password if one cannot be found in the cache \(fn URL REALM TYPE PROMPT &optional ARGS)" nil nil) (autoload 'url-register-auth-scheme "url-auth" "\ Register an HTTP authentication method. TYPE is a string or symbol specifying the name of the method. This should be the same thing you expect to get returned in an Authenticate header in HTTP/1.0 - it will be downcased. FUNCTION is the function to call to get the authorization information. This defaults to `url-?-auth', where ? is TYPE RATING a rating between 1 and 10 of the strength of the authentication. This is used when asking for the best authentication for a specific URL. The item with the highest rating is returned. \(fn TYPE &optional FUNCTION RATING)" nil nil) ;;;*** ;;;### (autoloads (url-cache-expired url-cache-extract url-is-cached ;;;;;; url-store-in-cache) "url-cache" "url-cache.el" (15437 42793)) ;;; Generated autoloads from url-cache.el (autoload 'url-store-in-cache "url-cache" "\ Store buffer BUFF in the cache. \(fn &optional BUFF)" nil nil) (autoload 'url-is-cached "url-cache" "\ Return non-nil if the URL is cached. \(fn URL)" nil nil) (autoload 'url-cache-extract "url-cache" "\ Extract FNAM from the local disk cache \(fn FNAM)" nil nil) (autoload 'url-cache-expired "url-cache" "\ Return t iff a cached file has expired. \(fn URL MOD)" nil nil) ;;;*** ;;;### (autoloads (url-cid) "url-cid" "url-cid.el" (15092 11246)) ;;; Generated autoloads from url-cid.el (autoload 'url-cid "url-cid" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-cookie-setup-save-timer url-cookie-handle-set-cookie ;;;;;; url-cookie-retrieve url-cookie-write-file url-cookie-parse-file) ;;;;;; "url-cookie" "url-cookie.el" (15806 40683)) ;;; Generated autoloads from url-cookie.el (autoload 'url-cookie-parse-file "url-cookie" "\ Not documented \(fn &optional FNAME)" nil nil) (autoload 'url-cookie-write-file "url-cookie" "\ Not documented \(fn &optional FNAME)" nil nil) (autoload 'url-cookie-retrieve "url-cookie" "\ Retrieves all the netscape-style cookies for a specified HOST and PATH \(fn HOST PATH &optional SECURE)" nil nil) (autoload 'url-cookie-handle-set-cookie "url-cookie" "\ Not documented \(fn STR)" nil nil) (autoload 'url-cookie-setup-save-timer "url-cookie" "\ Reset the cookie saver timer. \(fn)" t nil) ;;;*** ;;;### (autoloads (url-dav-vc-registered url-dav-file-name-completion ;;;;;; url-dav-file-name-all-completions url-dav-rename-file url-dav-make-directory ;;;;;; url-dav-file-directory-p url-dav-directory-files url-dav-delete-file ;;;;;; url-dav-delete-directory url-dav-save-resource url-dav-file-attributes ;;;;;; url-dav-unlock-resource url-dav-active-locks url-dav-lock-resource ;;;;;; url-dav-get-properties url-dav-supported-p) "url-dav" "url-dav.el" ;;;;;; (15450 54377)) ;;; Generated autoloads from url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ Not documented \(fn URL)" nil nil) (autoload 'url-dav-get-properties "url-dav" "\ Return properties for URL, up to DEPTH levels deep. Returns an assoc list, where the key is the filename (possibly a full URI), and the value is a standard property list of DAV property names (ie: DAV:resourcetype). \(fn URL &optional ATTRIBUTES DEPTH NAMESPACES)" nil nil) (autoload 'url-dav-lock-resource "url-dav" "\ Request a lock on URL. If EXCLUSIVE is non-nil, get an exclusive lock. Optional 3rd argument DEPTH says how deep the lock should go, default is 0 \(lock only the resource and none of its children). Returns a cons-cell of (SUCCESSFUL-RESULTS . FAILURE-RESULTS). SUCCESSFUL-RESULTS is a list of (URL STATUS locktoken). FAILURE-RESULTS is a list of (URL STATUS). \(fn URL EXCLUSIVE &optional DEPTH)" nil nil) (autoload 'url-dav-active-locks "url-dav" "\ Return an assoc list of all active locks on URL. \(fn URL &optional DEPTH)" nil nil) (autoload 'url-dav-unlock-resource "url-dav" "\ Release the lock on URL represented by LOCK-TOKEN. Returns `t' iff the lock was successfully released. \(fn URL LOCK-TOKEN)" nil nil) (autoload 'url-dav-file-attributes "url-dav" "\ Not documented \(fn URL)" nil nil) (autoload 'url-dav-save-resource "url-dav" "\ Save OBJ as URL using WebDAV. URL must be a fully qualified URL. OBJ may be a buffer or a string. \(fn URL OBJ &optional CONTENT-TYPE LOCK-TOKEN)" nil nil) (autoload 'url-dav-delete-directory "url-dav" "\ Delete the WebDAV collection URL. If optional second argument RECURSIVE is non-nil, then delete all files in the collection as well. \(fn URL &optional RECURSIVE LOCK-TOKEN)" nil nil) (autoload 'url-dav-delete-file "url-dav" "\ Delete file named URL. \(fn URL &optional LOCK-TOKEN)" nil nil) (autoload 'url-dav-directory-files "url-dav" "\ Return a list of names of files in DIRECTORY. There are three optional arguments: If FULL is non-nil, return absolute file names. Otherwise return names that are relative to the specified directory. If MATCH is non-nil, mention only file names that match the regexp MATCH. If NOSORT is non-nil, the list is not sorted--its order is unpredictable. NOSORT is useful if you plan to sort the result yourself. \(fn URL &optional FULL MATCH NOSORT FILES-ONLY)" nil nil) (autoload 'url-dav-file-directory-p "url-dav" "\ Return t if URL names an existing DAV collection. \(fn URL)" nil nil) (autoload 'url-dav-make-directory "url-dav" "\ Create the directory DIR and any nonexistent parent dirs. \(fn URL &optional PARENTS)" nil nil) (autoload 'url-dav-rename-file "url-dav" "\ Not documented \(fn OLDNAME NEWNAME &optional OVERWRITE)" nil nil) (autoload 'url-dav-file-name-all-completions "url-dav" "\ Return a list of all completions of file name FILE in directory DIRECTORY. These are all file names in directory DIRECTORY which begin with FILE. \(fn FILE URL)" nil nil) (autoload 'url-dav-file-name-completion "url-dav" "\ Complete file name FILE in directory DIRECTORY. Returns the longest string common to all file names in DIRECTORY that start with FILE. If there is only one and FILE matches it exactly, returns t. Returns nil if DIR contains no name starting with FILE. \(fn FILE URL)" nil nil) (autoload 'url-dav-vc-registered "url-dav" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-file) "url-file" "url-file.el" (15555 54384)) ;;; Generated autoloads from url-file.el (autoload 'url-file "url-file" "\ Handle file: and ftp: URLs. \(fn URL CALLBACK CBARGS)" nil nil) ;;;*** ;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw" ;;;;;; "url-gw.el" (15555 55126)) ;;; Generated autoloads from url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ Attempt to resolve the given HOST using nslookup if possible. \(fn HOST)" t nil) (autoload 'url-open-stream "url-gw" "\ Open a stream to HOST, possibly via a gateway. Args per `open-network-stream'. Will not make a connexion if `url-gateway-unplugged' is non-nil. \(fn NAME BUFFER HOST SERVICE)" nil nil) ;;;*** ;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file ;;;;;; url-setup-file-name-handlers) "url-handlers" "url-handlers.el" ;;;;;; (16123 16217)) ;;; Generated autoloads from url-handlers.el (autoload 'url-setup-file-name-handlers "url-handlers" "\ Setup file-name handlers. \(fn)" nil nil) (autoload 'url-copy-file "url-handlers" "\ Copy URL to NEWNAME. Both args must be strings. Signals a `file-already-exists' error if file NEWNAME already exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. A number as third arg means request confirmation if NEWNAME already exists. This is what happens in interactive use with M-x. Fourth arg KEEP-TIME non-nil means give the new file the same last-modified time as the old one. (This works on only some systems.) A prefix arg makes KEEP-TIME non-nil. \(fn URL NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-TIME)" nil nil) (autoload 'url-file-local-copy "url-handlers" "\ Copy URL into a temporary file on this machine. Returns the name of the local copy, or nil, if FILE is directly accessible. \(fn URL &rest IGNORED)" nil nil) (autoload 'url-insert-file-contents "url-handlers" "\ Not documented \(fn URL &optional VISIT BEG END REPLACE)" nil nil) ;;;*** ;;;### (autoloads (url-history-save-history url-history-parse-history ;;;;;; url-history-setup-save-timer) "url-history" "url-history.el" ;;;;;; (15092 12080)) ;;; Generated autoloads from url-history.el (autoload 'url-history-setup-save-timer "url-history" "\ Reset the history list timer. \(fn)" t nil) (autoload 'url-history-parse-history "url-history" "\ Parse a history file stored in FNAME. \(fn &optional FNAME)" nil nil) (autoload 'url-history-save-history "url-history" "\ Write the global history file into `url-history-file'. The type of data written is determined by what is in the file to begin with. If the type of storage cannot be determined, then prompt the user for what type to save as. \(fn &optional FNAME)" t nil) ;;;*** ;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p ;;;;;; url-http) "url-http" "url-http.el" (19270 18926)) ;;; Generated autoloads from url-http.el (autoload 'url-http "url-http" "\ Retrieve URL via HTTP asynchronously. URL must be a parsed URL. See `url-generic-parse-url' for details. When retrieval is completed, the function CALLBACK is executed with CBARGS as the arguments. \(fn URL CALLBACK CBARGS)" nil nil) (autoload 'url-http-file-exists-p "url-http" "\ Not documented \(fn URL)" nil nil) (defalias 'url-http-file-readable-p 'url-http-file-exists-p) (autoload 'url-http-file-attributes "url-http" "\ Not documented \(fn URL)" nil nil) (autoload 'url-http-options "url-http" "\ Returns a property list describing options available for URL. This list is retrieved using the `OPTIONS' HTTP method. Property list members: methods A list of symbols specifying what HTTP methods the resource supports. dav A list of numbers specifying what DAV protocol/schema versions are supported. dasl A list of supported DASL search types supported (string form) ranges A list of the units available for use in partial document fetches. p3p The `Platform For Privacy Protection' description for the resource. Currently this is just the raw header contents. This is likely to change once P3P is formally supported by the URL package or Emacs/W3. \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-irc) "url-irc" "url-irc.el" (14435 25453)) ;;; Generated autoloads from url-irc.el (autoload 'url-irc "url-irc" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-ldap) "url-ldap" "url-ldap.el" (14398 30982)) ;;; Generated autoloads from url-ldap.el (autoload 'url-ldap "url-ldap" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-mailto url-mail) "url-mailto" "url-mailto.el" ;;;;;; (15293 59398)) ;;; Generated autoloads from url-mailto.el (autoload 'url-mail "url-mailto" "\ Not documented \(fn &rest ARGS)" t nil) (autoload 'url-mailto "url-mailto" "\ Handle the mailto: URL syntax. \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-data url-generic-emulator-loader url-info ;;;;;; url-man) "url-misc" "url-misc.el" (15556 36223)) ;;; Generated autoloads from url-misc.el (autoload 'url-man "url-misc" "\ Fetch a Unix manual page URL. \(fn URL)" nil nil) (autoload 'url-info "url-misc" "\ Fetch a GNU Info URL. \(fn URL)" nil nil) (autoload 'url-generic-emulator-loader "url-misc" "\ Not documented \(fn URL)" nil nil) (defalias 'url-rlogin 'url-generic-emulator-loader) (defalias 'url-telnet 'url-generic-emulator-loader) (defalias 'url-tn3270 'url-generic-emulator-loader) (autoload 'url-data "url-misc" "\ Fetch a data URL (RFC 2397). \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-snews url-news) "url-news" "url-news.el" (15114 ;;;;;; 36876)) ;;; Generated autoloads from url-news.el (autoload 'url-news "url-news" "\ Not documented \(fn URL)" nil nil) (autoload 'url-snews "url-news" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable ;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url-ns.el" ;;;;;; (14913 8114)) ;;; Generated autoloads from url-ns.el (autoload 'isPlainHostName "url-ns" "\ Not documented \(fn HOST)" nil nil) (autoload 'dnsDomainIs "url-ns" "\ Not documented \(fn HOST DOM)" nil nil) (autoload 'dnsResolve "url-ns" "\ Not documented \(fn HOST)" nil nil) (autoload 'isResolvable "url-ns" "\ Not documented \(fn HOST)" nil nil) (autoload 'isInNet "url-ns" "\ Not documented \(fn IP NET MASK)" nil nil) (autoload 'url-ns-prefs "url-ns" "\ Not documented \(fn &optional FILE)" nil nil) (autoload 'url-ns-user-pref "url-ns" "\ Not documented \(fn KEY &optional DEFAULT)" nil nil) ;;;*** ;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse" ;;;;;; "url-parse.el" (15288 22758)) ;;; Generated autoloads from url-parse.el (autoload 'url-recreate-url "url-parse" "\ Not documented \(fn URLOBJ)" nil nil) (autoload 'url-generic-parse-url "url-parse" "\ Return a vector of the parts of URL. Format is: \[proto username password hostname portnumber file reference attributes fullp] \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url-privacy.el" ;;;;;; (15293 59778)) ;;; Generated autoloads from url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ Not documented \(fn)" t nil) ;;;*** ;;;### (autoloads (url-view-url url-truncate-url-for-viewing url-file-extension ;;;;;; url-hexify-string url-unhex-string url-parse-query-string ;;;;;; url-basepath url-percentage url-display-percentage url-pretty-length ;;;;;; url-strip-leading-spaces url-eat-trailing-space url-get-normalized-date ;;;;;; url-lazy-message url-normalize-url url-insert-entities-in-string ;;;;;; url-parse-args url-debug url-debug) "url-util" "url-util.el" ;;;;;; (19270 18926)) ;;; Generated autoloads from url-util.el (defvar url-debug nil "\ *What types of debug messages from the URL library to show. Debug messages are logged to the *URL-DEBUG* buffer. If t, all messages will be logged. If a number, all messages will be logged, as well shown via `message'. If a list, it is a list of the types of messages to be logged.") (custom-autoload 'url-debug "url-util" t) (autoload 'url-debug "url-util" "\ Not documented \(fn TAG &rest ARGS)" nil nil) (autoload 'url-parse-args "url-util" "\ Not documented \(fn STR &optional NODOWNCASE)" nil nil) (autoload 'url-insert-entities-in-string "url-util" "\ Convert HTML markup-start characters to entity references in STRING. Also replaces the \" character, so that the result may be safely used as an attribute value in a tag. Returns a new string with the result of the conversion. Replaces these characters as follows: & ==> & < ==> < > ==> > \" ==> " \(fn STRING)" nil nil) (autoload 'url-normalize-url "url-util" "\ Return a 'normalized' version of URL. Strips out default port numbers, etc. \(fn URL)" nil nil) (autoload 'url-lazy-message "url-util" "\ Just like `message', but is a no-op if called more than once a second. Will not do anything if url-show-status is nil. \(fn &rest ARGS)" nil nil) (autoload 'url-get-normalized-date "url-util" "\ Return a 'real' date string that most HTTP servers can understand. \(fn &optional SPECIFIED-TIME)" nil nil) (autoload 'url-eat-trailing-space "url-util" "\ Remove spaces/tabs at the end of a string. \(fn X)" nil nil) (autoload 'url-strip-leading-spaces "url-util" "\ Remove spaces at the front of a string. \(fn X)" nil nil) (autoload 'url-pretty-length "url-util" "\ Not documented \(fn N)" nil nil) (autoload 'url-display-percentage "url-util" "\ Not documented \(fn FMT PERC &rest ARGS)" nil nil) (autoload 'url-percentage "url-util" "\ Not documented \(fn X Y)" nil nil) (autoload 'url-basepath "url-util" "\ Return the base pathname of FILE, or the actual filename if X is true. \(fn FILE &optional X)" nil nil) (autoload 'url-parse-query-string "url-util" "\ Not documented \(fn QUERY &optional DOWNCASE)" nil nil) (autoload 'url-unhex-string "url-util" "\ Remove %XXX embedded spaces, etc in a url. If optional second argument ALLOW-NEWLINES is non-nil, then allow the decoding of carriage returns and line feeds in the string, which is normally forbidden in URL encoding. \(fn STR &optional ALLOW-NEWLINES)" nil nil) (autoload 'url-hexify-string "url-util" "\ Escape characters in a string. \(fn STR)" nil nil) (autoload 'url-file-extension "url-util" "\ Return the filename extension of FNAME. If optional variable X is t, then return the basename of the file with the extension stripped off. \(fn FNAME &optional X)" nil nil) (autoload 'url-truncate-url-for-viewing "url-util" "\ Return a shortened version of URL that is WIDTH characters or less wide. WIDTH defaults to the current frame width. \(fn URL &optional WIDTH)" nil nil) (autoload 'url-view-url "url-util" "\ View the current document's URL. Optional argument NO-SHOW means just return the URL, don't show it in the minibuffer. This uses `url-current-object', set locally to the buffer. \(fn &optional NO-SHOW)" t nil) ;;;*** ;;;### (autoloads nil "url" "url.el" (19270 18926)) ;;; Generated autoloads from url.el (defvar url-configuration-directory "~/.url") ;;;*** (provide 'url-autoloads) twittering-mode-3.0.0/url-emacs21/custom-load.el0000644000000000000000000000340712141747407021411 0ustar rootroot00000000000000;;; cus-load.el --- automatically extracted custom dependencies ;; ;;; Code: (put 'url-history 'custom-loads '(url-history)) (put 'url 'custom-loads '(url-vars url-cookie url-gw url-history url-irc url-news)) (put 'url-cache 'custom-loads '(url-vars url-cache)) (put 'url-gateway 'custom-loads '(url-gw)) (put 'url-mime 'custom-loads '(url-vars)) (put 'url-hairy 'custom-loads '(url-vars url-util)) (put 'i18n 'custom-loads '(url-vars)) (put 'url-cookie 'custom-loads '(url-cookie)) (put 'hypermedia 'custom-loads '(url-vars)) (put 'url-file 'custom-loads '(url-cache url-cookie url-vars)) ;; These are for handling :version. We need to have a minimum of ;; information so `customize-changed-options' could do its job. ;; For groups we set `custom-version', `group-documentation' and ;; `custom-tag' (which are shown in the customize buffer), so we ;; don't have to load the file containing the group. ;; `custom-versions-load-alist' is an alist that has as car a version ;; number and as elts the files that have variables or faces that ;; contain that version. These files should be loaded before showing ;; the customization buffer that `customize-changed-options' ;; generates. ;; This macro is used so we don't modify the information about ;; variables and groups if it's already set. (We don't know when ;; cus-load.el is going to be loaded and at that time some of the ;; files might be loaded and some others might not). (defmacro custom-put-if-not (symbol propname value) `(unless (get ,symbol ,propname) (put ,symbol ,propname ,value))) (defvar custom-versions-load-alist nil "For internal use by custom.") (provide 'cus-load) ;; Local Variables: ;; version-control: never ;; no-byte-compile: t ;; no-update-autoloads: t ;; coding: utf-8 ;; End: ;;; cus-load.el ends here twittering-mode-3.0.0/url-emacs21/docomp.el0000644000000000000000000000570012141747407020441 0ustar rootroot00000000000000(setq debug-on-error t) (setq fancy-splash-image "") (require 'cl) (setq srcdir (or (getenv "URLSRCDIR") ".")) (push srcdir load-path) (push (or (getenv "GNUSDIR") (expand-file-name "../../gnus/lisp" srcdir)) load-path) (setq max-specpdl-size (* 10 max-specpdl-size) max-lisp-eval-depth (* 10 max-lisp-eval-depth)) ;; If we are building url in a different directory than the source ;; directory, we must read *.el from source directory and write *.elc ;; into the building directory. For that, we define this function ;; before loading bytecomp. Bytecomp doesn't overwrite this function. (defun byte-compile-dest-file (filename) "Convert an Emacs Lisp source file name to a compiled file name. In addition, remove directory name part from FILENAME." (setq filename (byte-compiler-base-file-name filename)) (setq filename (file-name-sans-versions filename)) (setq filename (file-name-nondirectory filename)) (if (memq system-type '(win32 w32 mswindows windows-nt)) (setq filename (downcase filename))) (cond ((eq system-type 'vax-vms) (concat (substring filename 0 (string-match ";" filename)) "c")) ((string-match emacs-lisp-file-regexp filename) (concat (substring filename 0 (match-beginning 0)) ".elc")) (t (concat filename ".elc")))) (require 'bytecomp) ;; Emacs 19 byte compiler complains about too much stuff by default. ;; Turn off most of the warnings here. (setq byte-compile-warnings nil byte-optimize t) (defun compile-it () (let ((files (directory-files "." t ".*.[eE][lL]$" nil))) (while files (if (and (not (file-directory-p (car files))) (not (string-match "w3-sysdp.el$" (car files)))) (byte-compile-file (car files))) (setq files (cdr files))))) (defun emacs-build-autoloads (dir autofile) (require 'autoload) (let ((files (directory-files dir t ".*.[eE][lL]$" nil))) (save-excursion (find-file autofile) (erase-buffer) (mapcar 'generate-file-autoloads files) (goto-char (point-max)) (setq buffer-read-only nil) (insert "\n(provide 'url-autoloads)\n") (save-buffer) (kill-buffer (current-buffer)))) ;; Now we need to munge that file to deal with (find-file "url-auto.el") (erase-buffer) (insert-file-contents autofile) (goto-char (point-min)) (while (re-search-forward "url-autoloads" nil t) (replace-match "url-auto")) (save-buffer) (kill-buffer (current-buffer)) (kill-emacs)) (defun emacs-batch-build-autoloads () (emacs-build-autoloads (nth 0 command-line-args-left) (nth 1 command-line-args-left))) (defun emacs-build-custom-load (dir) (let ((foundit t)) (save-excursion (condition-case () (load-library "cus-dep") (error (setq foundit nil))) (if foundit (let ((command-line-args-left (list dir))) (custom-make-dependencies)) (write-region "\n" nil "cus-load.el"))))) (defun emacs-batch-build-custom-load () (emacs-build-custom-load (car command-line-args-left))) (provide 'url-auto) twittering-mode-3.0.0/url-emacs21/url-about.el0000644000000000000000000000702412141747407021073 0ustar rootroot00000000000000;;; url-about.el --- Show internal URLs ;; Author: $Author: wmperry $ ;; Created: $Date: 2001/11/24 22:30:21 $ ;; Version: $Revision: 1.1 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 2001 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'url-util) (require 'url-parse) (defun url-probe-protocols () "Returns a list of all potential URL schemes." (or (get 'url-extension-protocols 'probed) (mapc (lambda (s) (url-scheme-get-property s 'name)) (or (get 'url-extension-protocols 'schemes) (let ((schemes '("info" "man" "rlogin" "telnet" "tn3270" "data" "snews"))) (mapc (lambda (d) (mapc (lambda (f) (if (string-match "url-\\(.*\\).el$" f) (push (match-string 1 f) schemes))) (directory-files d nil "^url-.*\\.el$"))) load-path) (put 'url-extension-protocols 'schemes schemes) schemes))))) (defun url-about-protocols (url) (url-probe-protocols) (insert "\n" " \n" " Supported Protocols\n" " \n" " \n" "

Supported Protocols - URL v" url-version "

\n" " \n" " \n" " \n") (mapc (lambda (k) (if (string= k "proxy") ;; Ignore the proxy setting... its magic! nil (insert " \n") ;; The name of the protocol (insert "
Protocol\n" " Properties\n" " Description\n" "
" (or (url-scheme-get-property k 'name) k) "\n") ;; Now the properties. Currently just asynchronous ;; status, default port number, and proxy status. (insert " " (if (url-scheme-get-property k 'asynchronous-p) "As" "S") "ynchronous
\n" (if (url-scheme-get-property k 'default-port) (format "Default Port: %d
\n" (url-scheme-get-property k 'default-port)) "") (if (assoc k url-proxy-services) (format "Proxy: %s
\n" (assoc k url-proxy-services)) "")) ;; Now the description... (insert "
" (or (url-scheme-get-property k 'description) "N/A")))) (sort (let (x) (maphash (lambda (k v) (push k x)) url-scheme-registry) x) 'string-lessp)) (insert "
\n" " \n" "\n")) (defun url-about (url) "Show internal URLs." (let* ((item (downcase (url-filename url))) (func (intern (format "url-about-%s" item)))) (if (fboundp func) (progn (set-buffer (generate-new-buffer " *about-data*")) (insert "Content-type: text/html\n\n") (funcall func url) (current-buffer)) (error "URL does not know about `%s'" item)))) (provide 'url-about) twittering-mode-3.0.0/url-emacs21/url-auth.el0000644000000000000000000003116112141747407020721 0ustar rootroot00000000000000;;; url-auth.el --- Uniform Resource Locator authorization modules ;; Author: $Author: wmperry $ ;; Created: $Date: 2001/12/05 19:05:51 $ ;; Version: $Revision: 1.4 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-vars) (require 'url-parse) (autoload 'url-warn "url") (defsubst url-auth-user-prompt (url realm) "String to usefully prompt for a username." (concat "Username [for " (or realm (url-truncate-url-for-viewing (url-recreate-url url) (- (window-width) 10 20))) "]: ")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Basic authorization code ;;; ------------------------ ;;; This implements the BASIC authorization type. See the online ;;; documentation at ;;; http://www.w3.org/hypertext/WWW/AccessAuthorization/Basic.html ;;; for the complete documentation on this type. ;;; ;;; This is very insecure, but it works as a proof-of-concept ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar url-basic-auth-storage 'url-http-real-basic-auth-storage "Where usernames and passwords are stored. Must be a symbol pointing to another variable that will actually store the information. The value of this variable is an assoc list of assoc lists. The first assoc list is keyed by the server name. The cdr of this is an assoc list based on the 'directory' specified by the url we are looking up.") (defun url-basic-auth (url &optional prompt overwrite realm args) "Get the username/password for the specified URL. If optional argument PROMPT is non-nil, ask for the username/password to use for the url and its descendants. If optional third argument OVERWRITE is non-nil, overwrite the old username/password pair if it is found in the assoc list. If REALM is specified, use that as the realm instead of the pathname inheritance method." (let* ((href (if (stringp url) (url-generic-parse-url url) url)) (server (url-host href)) (port (url-port href)) (path (url-filename href)) user pass byserv retval data) (setq server (format "%s:%d" server port) path (cond (realm realm) ((string-match "/$" path) path) (t (url-basepath path))) byserv (cdr-safe (assoc server (symbol-value url-basic-auth-storage)))) (cond ((and prompt (not byserv)) (setq user (read-string (url-auth-user-prompt url realm) (user-real-login-name)) pass (funcall url-passwd-entry-func "Password: ")) (set url-basic-auth-storage (cons (list server (cons path (setq retval (base64-encode-string (format "%s:%s" user pass))))) (symbol-value url-basic-auth-storage)))) (byserv (setq retval (cdr-safe (assoc path byserv))) (if (and (not retval) (string-match "/" path)) (while (and byserv (not retval)) (setq data (car (car byserv))) (if (or (not (string-match "/" data)) ; Its a realm - take it! (and (>= (length path) (length data)) (string= data (substring path 0 (length data))))) (setq retval (cdr (car byserv)))) (setq byserv (cdr byserv)))) (if (or (and (not retval) prompt) overwrite) (progn (setq user (read-string (url-auth-user-prompt url realm) (user-real-login-name)) pass (funcall url-passwd-entry-func "Password: ") retval (base64-encode-string (format "%s:%s" user pass)) byserv (assoc server (symbol-value url-basic-auth-storage))) (setcdr byserv (cons (cons path retval) (cdr byserv)))))) (t (setq retval nil))) (if retval (setq retval (concat "Basic " retval))) retval)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Digest authorization code ;;; ------------------------ ;;; This implements the DIGEST authorization type. See the internet draft ;;; ftp://ds.internic.net/internet-drafts/draft-ietf-http-digest-aa-01.txt ;;; for the complete documentation on this type. ;;; ;;; This is very secure ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar url-digest-auth-storage nil "Where usernames and passwords are stored. Its value is an assoc list of assoc lists. The first assoc list is keyed by the server name. The cdr of this is an assoc list based on the 'directory' specified by the url we are looking up.") (defun url-digest-auth-create-key (username password realm method uri) "Create a key for digest authentication method" (let* ((info (if (stringp uri) (url-generic-parse-url uri) uri)) (a1 (md5 (concat username ":" realm ":" password))) (a2 (md5 (concat method ":" (url-filename info))))) (list a1 a2))) (defun url-digest-auth (url &optional prompt overwrite realm args) "Get the username/password for the specified URL. If optional argument PROMPT is non-nil, ask for the username/password to use for the url and its descendants. If optional third argument OVERWRITE is non-nil, overwrite the old username/password pair if it is found in the assoc list. If REALM is specified, use that as the realm instead of hostname:portnum." (if args (let* ((href (if (stringp url) (url-generic-parse-url url) url)) (server (url-host href)) (port (url-port href)) (path (url-filename href)) user pass byserv retval data) (setq path (cond (realm realm) ((string-match "/$" path) path) (t (url-basepath path))) server (format "%s:%d" server port) byserv (cdr-safe (assoc server url-digest-auth-storage))) (cond ((and prompt (not byserv)) (setq user (read-string (url-auth-user-prompt url realm) (user-real-login-name)) pass (funcall url-passwd-entry-func "Password: ") url-digest-auth-storage (cons (list server (cons path (setq retval (cons user (url-digest-auth-create-key user pass realm (or url-request-method "GET") url))))) url-digest-auth-storage))) (byserv (setq retval (cdr-safe (assoc path byserv))) (if (and (not retval) ; no exact match, check directories (string-match "/" path)) ; not looking for a realm (while (and byserv (not retval)) (setq data (car (car byserv))) (if (or (not (string-match "/" data)) (and (>= (length path) (length data)) (string= data (substring path 0 (length data))))) (setq retval (cdr (car byserv)))) (setq byserv (cdr byserv)))) (if (or (and (not retval) prompt) overwrite) (progn (setq user (read-string (url-auth-user-prompt url realm) (user-real-login-name)) pass (funcall url-passwd-entry-func "Password: ") retval (setq retval (cons user (url-digest-auth-create-key user pass realm (or url-request-method "GET") url))) byserv (assoc server url-digest-auth-storage)) (setcdr byserv (cons (cons path retval) (cdr byserv)))))) (t (setq retval nil))) (if retval (let ((nonce (or (cdr-safe (assoc "nonce" args)) "nonegiven")) (opaque (or (cdr-safe (assoc "opaque" args)) "nonegiven"))) (format (concat "Digest username=\"%s\", realm=\"%s\"," "nonce=\"%s\", uri=\"%s\"," "response=\"%s\", opaque=\"%s\"") (nth 0 retval) realm nonce (url-filename href) (md5 (concat (nth 1 retval) ":" nonce ":" (nth 2 retval))) opaque)))))) (defvar url-registered-auth-schemes nil "A list of the registered authorization schemes and various and sundry information associated with them.") ;;;###autoload (defun url-get-authentication (url realm type prompt &optional args) "Return an authorization string suitable for use in the WWW-Authenticate header in an HTTP/1.0 request. URL is the url you are requesting authorization to. This can be either a string representing the URL, or the parsed representation returned by `url-generic-parse-url' REALM is the realm at a specific site we are looking for. This should be a string specifying the exact realm, or nil or the symbol 'any' to specify that the filename portion of the URL should be used as the realm TYPE is the type of authentication to be returned. This is either a string representing the type (basic, digest, etc), or nil or the symbol 'any' to specify that any authentication is acceptable. If requesting 'any' the strongest matching authentication will be returned. If this is wrong, its no big deal, the error from the server will specify exactly what type of auth to use PROMPT is boolean - specifies whether to ask the user for a username/password if one cannot be found in the cache" (if (not realm) (setq realm (cdr-safe (assoc "realm" args)))) (if (stringp url) (setq url (url-generic-parse-url url))) (if (or (null type) (eq type 'any)) ;; Whooo doogies! ;; Go through and get _all_ the authorization strings that could apply ;; to this URL, store them along with the 'rating' we have in the list ;; of schemes, then sort them so that the 'best' is at the front of the ;; list, then get the car, then get the cdr. ;; Zooom zooom zoooooom (cdr-safe (car-safe (sort (mapcar (function (lambda (scheme) (if (fboundp (car (cdr scheme))) (cons (cdr (cdr scheme)) (funcall (car (cdr scheme)) url nil nil realm)) (cons 0 nil)))) url-registered-auth-schemes) (function (lambda (x y) (cond ((null (cdr x)) nil) ((and (cdr x) (null (cdr y))) t) ((and (cdr x) (cdr y)) (>= (car x) (car y))) (t nil))))))) (if (symbolp type) (setq type (symbol-name type))) (let* ((scheme (car-safe (cdr-safe (assoc (downcase type) url-registered-auth-schemes))))) ;; on some systems, we have to wait in order to avoid drawing a blank page (and url-slow-proxy-requires-waiting-for (sleep-for url-slow-proxy-requires-waiting-for)) (if (and scheme (fboundp scheme)) (funcall scheme url prompt ;;;(and prompt ;;; (funcall scheme url nil nil realm args)) ;; specify `nil' instead, otherwise authentication ;; gets repeated over and over again ... nil realm args))))) ;;;###autoload (defun url-register-auth-scheme (type &optional function rating) "Register an HTTP authentication method. TYPE is a string or symbol specifying the name of the method. This should be the same thing you expect to get returned in an Authenticate header in HTTP/1.0 - it will be downcased. FUNCTION is the function to call to get the authorization information. This defaults to `url-?-auth', where ? is TYPE RATING a rating between 1 and 10 of the strength of the authentication. This is used when asking for the best authentication for a specific URL. The item with the highest rating is returned." (let* ((type (cond ((stringp type) (downcase type)) ((symbolp type) (downcase (symbol-name type))) (t (error "Bad call to `url-register-auth-scheme'")))) (function (or function (intern (concat "url-" type "-auth")))) (rating (cond ((null rating) 2) ((stringp rating) (string-to-int rating)) (t rating))) (node (assoc type url-registered-auth-schemes))) (if (not (fboundp function)) (url-warn 'security (format (eval-when-compile "Tried to register `%s' as an auth scheme" ", but it is not a function!") function))) (if node (setcdr node (cons function rating)) (setq url-registered-auth-schemes (cons (cons type (cons function rating)) url-registered-auth-schemes))))) (defun url-auth-registered (scheme) ;; Return non-nil iff SCHEME is registered as an auth type (assoc scheme url-registered-auth-schemes)) (provide 'url-auth) twittering-mode-3.0.0/url-emacs21/url-auto.el0000644000000000000000000004443212141747407020735 0ustar rootroot00000000000000 ;;;### (autoloads (url-register-auth-scheme url-get-authentication) ;;;;;; "url-auth" "url-auth.el" (19270 18926)) ;;; Generated autoloads from url-auth.el (autoload 'url-get-authentication "url-auth" "\ Return an authorization string suitable for use in the WWW-Authenticate header in an HTTP/1.0 request. URL is the url you are requesting authorization to. This can be either a string representing the URL, or the parsed representation returned by `url-generic-parse-url' REALM is the realm at a specific site we are looking for. This should be a string specifying the exact realm, or nil or the symbol 'any' to specify that the filename portion of the URL should be used as the realm TYPE is the type of authentication to be returned. This is either a string representing the type (basic, digest, etc), or nil or the symbol 'any' to specify that any authentication is acceptable. If requesting 'any' the strongest matching authentication will be returned. If this is wrong, its no big deal, the error from the server will specify exactly what type of auth to use PROMPT is boolean - specifies whether to ask the user for a username/password if one cannot be found in the cache \(fn URL REALM TYPE PROMPT &optional ARGS)" nil nil) (autoload 'url-register-auth-scheme "url-auth" "\ Register an HTTP authentication method. TYPE is a string or symbol specifying the name of the method. This should be the same thing you expect to get returned in an Authenticate header in HTTP/1.0 - it will be downcased. FUNCTION is the function to call to get the authorization information. This defaults to `url-?-auth', where ? is TYPE RATING a rating between 1 and 10 of the strength of the authentication. This is used when asking for the best authentication for a specific URL. The item with the highest rating is returned. \(fn TYPE &optional FUNCTION RATING)" nil nil) ;;;*** ;;;### (autoloads (url-cache-expired url-cache-extract url-is-cached ;;;;;; url-store-in-cache) "url-cache" "url-cache.el" (15437 42793)) ;;; Generated autoloads from url-cache.el (autoload 'url-store-in-cache "url-cache" "\ Store buffer BUFF in the cache. \(fn &optional BUFF)" nil nil) (autoload 'url-is-cached "url-cache" "\ Return non-nil if the URL is cached. \(fn URL)" nil nil) (autoload 'url-cache-extract "url-cache" "\ Extract FNAM from the local disk cache \(fn FNAM)" nil nil) (autoload 'url-cache-expired "url-cache" "\ Return t iff a cached file has expired. \(fn URL MOD)" nil nil) ;;;*** ;;;### (autoloads (url-cid) "url-cid" "url-cid.el" (15092 11246)) ;;; Generated autoloads from url-cid.el (autoload 'url-cid "url-cid" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-cookie-setup-save-timer url-cookie-handle-set-cookie ;;;;;; url-cookie-retrieve url-cookie-write-file url-cookie-parse-file) ;;;;;; "url-cookie" "url-cookie.el" (15806 40683)) ;;; Generated autoloads from url-cookie.el (autoload 'url-cookie-parse-file "url-cookie" "\ Not documented \(fn &optional FNAME)" nil nil) (autoload 'url-cookie-write-file "url-cookie" "\ Not documented \(fn &optional FNAME)" nil nil) (autoload 'url-cookie-retrieve "url-cookie" "\ Retrieves all the netscape-style cookies for a specified HOST and PATH \(fn HOST PATH &optional SECURE)" nil nil) (autoload 'url-cookie-handle-set-cookie "url-cookie" "\ Not documented \(fn STR)" nil nil) (autoload 'url-cookie-setup-save-timer "url-cookie" "\ Reset the cookie saver timer. \(fn)" t nil) ;;;*** ;;;### (autoloads (url-dav-vc-registered url-dav-file-name-completion ;;;;;; url-dav-file-name-all-completions url-dav-rename-file url-dav-make-directory ;;;;;; url-dav-file-directory-p url-dav-directory-files url-dav-delete-file ;;;;;; url-dav-delete-directory url-dav-save-resource url-dav-file-attributes ;;;;;; url-dav-unlock-resource url-dav-active-locks url-dav-lock-resource ;;;;;; url-dav-get-properties url-dav-supported-p) "url-dav" "url-dav.el" ;;;;;; (15450 54377)) ;;; Generated autoloads from url-dav.el (autoload 'url-dav-supported-p "url-dav" "\ Not documented \(fn URL)" nil nil) (autoload 'url-dav-get-properties "url-dav" "\ Return properties for URL, up to DEPTH levels deep. Returns an assoc list, where the key is the filename (possibly a full URI), and the value is a standard property list of DAV property names (ie: DAV:resourcetype). \(fn URL &optional ATTRIBUTES DEPTH NAMESPACES)" nil nil) (autoload 'url-dav-lock-resource "url-dav" "\ Request a lock on URL. If EXCLUSIVE is non-nil, get an exclusive lock. Optional 3rd argument DEPTH says how deep the lock should go, default is 0 \(lock only the resource and none of its children). Returns a cons-cell of (SUCCESSFUL-RESULTS . FAILURE-RESULTS). SUCCESSFUL-RESULTS is a list of (URL STATUS locktoken). FAILURE-RESULTS is a list of (URL STATUS). \(fn URL EXCLUSIVE &optional DEPTH)" nil nil) (autoload 'url-dav-active-locks "url-dav" "\ Return an assoc list of all active locks on URL. \(fn URL &optional DEPTH)" nil nil) (autoload 'url-dav-unlock-resource "url-dav" "\ Release the lock on URL represented by LOCK-TOKEN. Returns `t' iff the lock was successfully released. \(fn URL LOCK-TOKEN)" nil nil) (autoload 'url-dav-file-attributes "url-dav" "\ Not documented \(fn URL)" nil nil) (autoload 'url-dav-save-resource "url-dav" "\ Save OBJ as URL using WebDAV. URL must be a fully qualified URL. OBJ may be a buffer or a string. \(fn URL OBJ &optional CONTENT-TYPE LOCK-TOKEN)" nil nil) (autoload 'url-dav-delete-directory "url-dav" "\ Delete the WebDAV collection URL. If optional second argument RECURSIVE is non-nil, then delete all files in the collection as well. \(fn URL &optional RECURSIVE LOCK-TOKEN)" nil nil) (autoload 'url-dav-delete-file "url-dav" "\ Delete file named URL. \(fn URL &optional LOCK-TOKEN)" nil nil) (autoload 'url-dav-directory-files "url-dav" "\ Return a list of names of files in DIRECTORY. There are three optional arguments: If FULL is non-nil, return absolute file names. Otherwise return names that are relative to the specified directory. If MATCH is non-nil, mention only file names that match the regexp MATCH. If NOSORT is non-nil, the list is not sorted--its order is unpredictable. NOSORT is useful if you plan to sort the result yourself. \(fn URL &optional FULL MATCH NOSORT FILES-ONLY)" nil nil) (autoload 'url-dav-file-directory-p "url-dav" "\ Return t if URL names an existing DAV collection. \(fn URL)" nil nil) (autoload 'url-dav-make-directory "url-dav" "\ Create the directory DIR and any nonexistent parent dirs. \(fn URL &optional PARENTS)" nil nil) (autoload 'url-dav-rename-file "url-dav" "\ Not documented \(fn OLDNAME NEWNAME &optional OVERWRITE)" nil nil) (autoload 'url-dav-file-name-all-completions "url-dav" "\ Return a list of all completions of file name FILE in directory DIRECTORY. These are all file names in directory DIRECTORY which begin with FILE. \(fn FILE URL)" nil nil) (autoload 'url-dav-file-name-completion "url-dav" "\ Complete file name FILE in directory DIRECTORY. Returns the longest string common to all file names in DIRECTORY that start with FILE. If there is only one and FILE matches it exactly, returns t. Returns nil if DIR contains no name starting with FILE. \(fn FILE URL)" nil nil) (autoload 'url-dav-vc-registered "url-dav" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-file) "url-file" "url-file.el" (15555 54384)) ;;; Generated autoloads from url-file.el (autoload 'url-file "url-file" "\ Handle file: and ftp: URLs. \(fn URL CALLBACK CBARGS)" nil nil) ;;;*** ;;;### (autoloads (url-open-stream url-gateway-nslookup-host) "url-gw" ;;;;;; "url-gw.el" (15555 55126)) ;;; Generated autoloads from url-gw.el (autoload 'url-gateway-nslookup-host "url-gw" "\ Attempt to resolve the given HOST using nslookup if possible. \(fn HOST)" t nil) (autoload 'url-open-stream "url-gw" "\ Open a stream to HOST, possibly via a gateway. Args per `open-network-stream'. Will not make a connexion if `url-gateway-unplugged' is non-nil. \(fn NAME BUFFER HOST SERVICE)" nil nil) ;;;*** ;;;### (autoloads (url-insert-file-contents url-file-local-copy url-copy-file ;;;;;; url-setup-file-name-handlers) "url-handlers" "url-handlers.el" ;;;;;; (16123 16217)) ;;; Generated autoloads from url-handlers.el (autoload 'url-setup-file-name-handlers "url-handlers" "\ Setup file-name handlers. \(fn)" nil nil) (autoload 'url-copy-file "url-handlers" "\ Copy URL to NEWNAME. Both args must be strings. Signals a `file-already-exists' error if file NEWNAME already exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. A number as third arg means request confirmation if NEWNAME already exists. This is what happens in interactive use with M-x. Fourth arg KEEP-TIME non-nil means give the new file the same last-modified time as the old one. (This works on only some systems.) A prefix arg makes KEEP-TIME non-nil. \(fn URL NEWNAME &optional OK-IF-ALREADY-EXISTS KEEP-TIME)" nil nil) (autoload 'url-file-local-copy "url-handlers" "\ Copy URL into a temporary file on this machine. Returns the name of the local copy, or nil, if FILE is directly accessible. \(fn URL &rest IGNORED)" nil nil) (autoload 'url-insert-file-contents "url-handlers" "\ Not documented \(fn URL &optional VISIT BEG END REPLACE)" nil nil) ;;;*** ;;;### (autoloads (url-history-save-history url-history-parse-history ;;;;;; url-history-setup-save-timer) "url-history" "url-history.el" ;;;;;; (15092 12080)) ;;; Generated autoloads from url-history.el (autoload 'url-history-setup-save-timer "url-history" "\ Reset the history list timer. \(fn)" t nil) (autoload 'url-history-parse-history "url-history" "\ Parse a history file stored in FNAME. \(fn &optional FNAME)" nil nil) (autoload 'url-history-save-history "url-history" "\ Write the global history file into `url-history-file'. The type of data written is determined by what is in the file to begin with. If the type of storage cannot be determined, then prompt the user for what type to save as. \(fn &optional FNAME)" t nil) ;;;*** ;;;### (autoloads (url-http-options url-http-file-attributes url-http-file-exists-p ;;;;;; url-http) "url-http" "url-http.el" (19270 18926)) ;;; Generated autoloads from url-http.el (autoload 'url-http "url-http" "\ Retrieve URL via HTTP asynchronously. URL must be a parsed URL. See `url-generic-parse-url' for details. When retrieval is completed, the function CALLBACK is executed with CBARGS as the arguments. \(fn URL CALLBACK CBARGS)" nil nil) (autoload 'url-http-file-exists-p "url-http" "\ Not documented \(fn URL)" nil nil) (defalias 'url-http-file-readable-p 'url-http-file-exists-p) (autoload 'url-http-file-attributes "url-http" "\ Not documented \(fn URL)" nil nil) (autoload 'url-http-options "url-http" "\ Returns a property list describing options available for URL. This list is retrieved using the `OPTIONS' HTTP method. Property list members: methods A list of symbols specifying what HTTP methods the resource supports. dav A list of numbers specifying what DAV protocol/schema versions are supported. dasl A list of supported DASL search types supported (string form) ranges A list of the units available for use in partial document fetches. p3p The `Platform For Privacy Protection' description for the resource. Currently this is just the raw header contents. This is likely to change once P3P is formally supported by the URL package or Emacs/W3. \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-irc) "url-irc" "url-irc.el" (14435 25453)) ;;; Generated autoloads from url-irc.el (autoload 'url-irc "url-irc" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-ldap) "url-ldap" "url-ldap.el" (14398 30982)) ;;; Generated autoloads from url-ldap.el (autoload 'url-ldap "url-ldap" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-mailto url-mail) "url-mailto" "url-mailto.el" ;;;;;; (15293 59398)) ;;; Generated autoloads from url-mailto.el (autoload 'url-mail "url-mailto" "\ Not documented \(fn &rest ARGS)" t nil) (autoload 'url-mailto "url-mailto" "\ Handle the mailto: URL syntax. \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-data url-generic-emulator-loader url-info ;;;;;; url-man) "url-misc" "url-misc.el" (15556 36223)) ;;; Generated autoloads from url-misc.el (autoload 'url-man "url-misc" "\ Fetch a Unix manual page URL. \(fn URL)" nil nil) (autoload 'url-info "url-misc" "\ Fetch a GNU Info URL. \(fn URL)" nil nil) (autoload 'url-generic-emulator-loader "url-misc" "\ Not documented \(fn URL)" nil nil) (defalias 'url-rlogin 'url-generic-emulator-loader) (defalias 'url-telnet 'url-generic-emulator-loader) (defalias 'url-tn3270 'url-generic-emulator-loader) (autoload 'url-data "url-misc" "\ Fetch a data URL (RFC 2397). \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-snews url-news) "url-news" "url-news.el" (15114 ;;;;;; 36876)) ;;; Generated autoloads from url-news.el (autoload 'url-news "url-news" "\ Not documented \(fn URL)" nil nil) (autoload 'url-snews "url-news" "\ Not documented \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-ns-user-pref url-ns-prefs isInNet isResolvable ;;;;;; dnsResolve dnsDomainIs isPlainHostName) "url-ns" "url-ns.el" ;;;;;; (14913 8114)) ;;; Generated autoloads from url-ns.el (autoload 'isPlainHostName "url-ns" "\ Not documented \(fn HOST)" nil nil) (autoload 'dnsDomainIs "url-ns" "\ Not documented \(fn HOST DOM)" nil nil) (autoload 'dnsResolve "url-ns" "\ Not documented \(fn HOST)" nil nil) (autoload 'isResolvable "url-ns" "\ Not documented \(fn HOST)" nil nil) (autoload 'isInNet "url-ns" "\ Not documented \(fn IP NET MASK)" nil nil) (autoload 'url-ns-prefs "url-ns" "\ Not documented \(fn &optional FILE)" nil nil) (autoload 'url-ns-user-pref "url-ns" "\ Not documented \(fn KEY &optional DEFAULT)" nil nil) ;;;*** ;;;### (autoloads (url-generic-parse-url url-recreate-url) "url-parse" ;;;;;; "url-parse.el" (15288 22758)) ;;; Generated autoloads from url-parse.el (autoload 'url-recreate-url "url-parse" "\ Not documented \(fn URLOBJ)" nil nil) (autoload 'url-generic-parse-url "url-parse" "\ Return a vector of the parts of URL. Format is: \[proto username password hostname portnumber file reference attributes fullp] \(fn URL)" nil nil) ;;;*** ;;;### (autoloads (url-setup-privacy-info) "url-privacy" "url-privacy.el" ;;;;;; (15293 59778)) ;;; Generated autoloads from url-privacy.el (autoload 'url-setup-privacy-info "url-privacy" "\ Not documented \(fn)" t nil) ;;;*** ;;;### (autoloads (url-view-url url-truncate-url-for-viewing url-file-extension ;;;;;; url-hexify-string url-unhex-string url-parse-query-string ;;;;;; url-basepath url-percentage url-display-percentage url-pretty-length ;;;;;; url-strip-leading-spaces url-eat-trailing-space url-get-normalized-date ;;;;;; url-lazy-message url-normalize-url url-insert-entities-in-string ;;;;;; url-parse-args url-debug url-debug) "url-util" "url-util.el" ;;;;;; (19270 18926)) ;;; Generated autoloads from url-util.el (defvar url-debug nil "\ *What types of debug messages from the URL library to show. Debug messages are logged to the *URL-DEBUG* buffer. If t, all messages will be logged. If a number, all messages will be logged, as well shown via `message'. If a list, it is a list of the types of messages to be logged.") (autoload 'url-debug "url-util") (autoload 'url-debug "url-util" "\ Not documented \(fn TAG &rest ARGS)" nil nil) (autoload 'url-parse-args "url-util" "\ Not documented \(fn STR &optional NODOWNCASE)" nil nil) (autoload 'url-insert-entities-in-string "url-util" "\ Convert HTML markup-start characters to entity references in STRING. Also replaces the \" character, so that the result may be safely used as an attribute value in a tag. Returns a new string with the result of the conversion. Replaces these characters as follows: & ==> & < ==> < > ==> > \" ==> " \(fn STRING)" nil nil) (autoload 'url-normalize-url "url-util" "\ Return a 'normalized' version of URL. Strips out default port numbers, etc. \(fn URL)" nil nil) (autoload 'url-lazy-message "url-util" "\ Just like `message', but is a no-op if called more than once a second. Will not do anything if url-show-status is nil. \(fn &rest ARGS)" nil nil) (autoload 'url-get-normalized-date "url-util" "\ Return a 'real' date string that most HTTP servers can understand. \(fn &optional SPECIFIED-TIME)" nil nil) (autoload 'url-eat-trailing-space "url-util" "\ Remove spaces/tabs at the end of a string. \(fn X)" nil nil) (autoload 'url-strip-leading-spaces "url-util" "\ Remove spaces at the front of a string. \(fn X)" nil nil) (autoload 'url-pretty-length "url-util" "\ Not documented \(fn N)" nil nil) (autoload 'url-display-percentage "url-util" "\ Not documented \(fn FMT PERC &rest ARGS)" nil nil) (autoload 'url-percentage "url-util" "\ Not documented \(fn X Y)" nil nil) (autoload 'url-basepath "url-util" "\ Return the base pathname of FILE, or the actual filename if X is true. \(fn FILE &optional X)" nil nil) (autoload 'url-parse-query-string "url-util" "\ Not documented \(fn QUERY &optional DOWNCASE)" nil nil) (autoload 'url-unhex-string "url-util" "\ Remove %XXX embedded spaces, etc in a url. If optional second argument ALLOW-NEWLINES is non-nil, then allow the decoding of carriage returns and line feeds in the string, which is normally forbidden in URL encoding. \(fn STR &optional ALLOW-NEWLINES)" nil nil) (autoload 'url-hexify-string "url-util" "\ Escape characters in a string. \(fn STR)" nil nil) (autoload 'url-file-extension "url-util" "\ Return the filename extension of FNAME. If optional variable X is t, then return the basename of the file with the extension stripped off. \(fn FNAME &optional X)" nil nil) (autoload 'url-truncate-url-for-viewing "url-util" "\ Return a shortened version of URL that is WIDTH characters or less wide. WIDTH defaults to the current frame width. \(fn URL &optional WIDTH)" nil nil) (autoload 'url-view-url "url-util" "\ View the current document's URL. Optional argument NO-SHOW means just return the URL, don't show it in the minibuffer. This uses `url-current-object', set locally to the buffer. \(fn &optional NO-SHOW)" t nil) ;;;*** ;;;### (autoloads nil "url" "url.el" (19270 18926)) ;;; Generated autoloads from url.el (defvar url-configuration-directory "~/.url") ;;;*** (provide 'url-auto) twittering-mode-3.0.0/url-emacs21/url-buffer.el0000644000000000000000000000301712141747407021230 0ustar rootroot00000000000000;;; url-buffer.el --- URLs for Emacs buffers ;; Created: 5 Feb 2003 ;; Version: 0.9 ;; Keywords: data, buffers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 2001 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'url-util) (require 'url-parse) (defun url-buffer (url) "Handle buffer: URLs that refer to Emacs buffers." (let* ((buffer (get-buffer (url-filename url)))) (if buffer (progn (set-buffer (generate-new-buffer " *buffer-data*")) (insert "Content-type: text/html\n\n") (insert-buffer-substring buffer) (current-buffer)) (error "No buffer named `%s'" item)))) (provide 'url-buffer) twittering-mode-3.0.0/url-emacs21/url-cache.el0000644000000000000000000001540512141747407021026 0ustar rootroot00000000000000;;; url-cache.el --- Uniform Resource Locator retrieval tool ;; Author: $Author: fx $ ;; Created: $Date: 2002/01/22 17:53:45 $ ;; Version: $Revision: 1.4 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-parse) (defcustom url-cache-directory (expand-file-name "cache" url-configuration-directory) "*The directory where cache files should be stored." :type 'directory :group 'url-file) ;; Cache manager (defun url-cache-file-writable-p (file) "Follows the documentation of `file-writable-p', unlike `file-writable-p'." (and (file-writable-p file) (if (file-exists-p file) (not (file-directory-p file)) (file-directory-p (file-name-directory file))))) (defun url-cache-prepare (file) "Makes it possible to cache data in FILE. Creates any necessary parent directories, deleting any non-directory files that would stop this. Returns nil if parent directories can not be created. If FILE already exists as a non-directory, it changes permissions of FILE or deletes FILE to make it possible to write a new version of FILE. Returns nil if this can not be done. Returns nil if FILE already exists as a directory. Otherwise, returns t, indicating that FILE can be created or overwritten." (cond ((url-cache-file-writable-p file) t) ((file-directory-p file) nil) (t (condition-case () (or (make-directory (file-name-directory file) t) t) (error nil))))) ;;;###autoload (defun url-store-in-cache (&optional buff) "Store buffer BUFF in the cache." (if (not (and buff (get-buffer buff))) nil (save-excursion (and buff (set-buffer buff)) (let* ((fname (url-cache-create-filename (url-view-url t)))) (if (url-cache-prepare fname) (let ((coding-system-for-write 'binary)) (write-region (point-min) (point-max) fname nil 5))))))) ;;;###autoload (defun url-is-cached (url) "Return non-nil if the URL is cached." (let* ((fname (url-cache-create-filename url)) (attribs (file-attributes fname))) (and fname ; got a filename (file-exists-p fname) ; file exists (not (eq (nth 0 attribs) t)) ; Its not a directory (nth 5 attribs)))) ; Can get last mod-time (defun url-cache-create-filename-human-readable (url) "Return a filename in the local cache for URL" (if url (let* ((url (if (vectorp url) (url-recreate-url url) url)) (urlobj (url-generic-parse-url url)) (protocol (url-type urlobj)) (hostname (url-host urlobj)) (host-components (cons (user-real-login-name) (cons (or protocol "file") (reverse (split-string (or hostname "localhost") (eval-when-compile (regexp-quote "."))))))) (fname (url-filename urlobj))) (if (and fname (/= (length fname) 0) (= (aref fname 0) ?/)) (setq fname (substring fname 1 nil))) (if fname (let ((slash nil)) (setq fname (mapconcat (function (lambda (x) (cond ((and (= ?/ x) slash) (setq slash nil) "%2F") ((= ?/ x) (setq slash t) "/") (t (setq slash nil) (char-to-string x))))) fname "")))) (setq fname (and fname (mapconcat (function (lambda (x) (if (= x ?~) "" (char-to-string x)))) fname "")) fname (cond ((null fname) nil) ((or (string= "" fname) (string= "/" fname)) url-directory-index-file) ((= (string-to-char fname) ?/) (if (string= (substring fname -1 nil) "/") (concat fname url-directory-index-file) (substring fname 1 nil))) (t (if (string= (substring fname -1 nil) "/") (concat fname url-directory-index-file) fname)))) (and fname (expand-file-name fname (expand-file-name (mapconcat 'identity host-components "/") url-cache-directory)))))) (defun url-cache-create-filename-using-md5 (url) "Create a cached filename using MD5. Very fast if you are in XEmacs, suitably fast otherwise." (require 'md5) (if url (let* ((url (if (vectorp url) (url-recreate-url url) url)) (checksum (md5 url)) (urlobj (url-generic-parse-url url)) (protocol (url-type urlobj)) (hostname (url-host urlobj)) (host-components (cons (user-real-login-name) (cons (or protocol "file") (nreverse (delq nil (split-string (or hostname "localhost") (eval-when-compile (regexp-quote ".")))))))) (fname (url-filename urlobj))) (and fname (expand-file-name checksum (expand-file-name (mapconcat 'identity host-components "/") url-cache-directory)))))) (defcustom url-cache-creation-function 'url-cache-create-filename-using-md5 "*What function to use to create a cached filename." :type '(choice (const :tag "MD5 of filename (low collision rate)" :value url-cache-create-filename-using-md5) (const :tag "Human readable filenames (higher collision rate)" :value url-cache-create-filename-human-readable) (function :tag "Other")) :group 'url-cache) (defun url-cache-create-filename (url) (funcall url-cache-creation-function url)) ;;;###autoload (defun url-cache-extract (fnam) "Extract FNAM from the local disk cache" (erase-buffer) (insert-file-contents-literally fnam)) ;;;###autoload (defun url-cache-expired (url mod) "Return t iff a cached file has expired." (let* ((urlobj (if (vectorp url) url (url-generic-parse-url url))) (type (url-type urlobj))) (cond (url-standalone-mode (not (file-exists-p (url-cache-create-filename url)))) ((string= type "http") t) ((member type '("file" "ftp")) (if (or (equal mod '(0 0)) (not mod)) t (or (> (nth 0 mod) (nth 0 (current-time))) (> (nth 1 mod) (nth 1 (current-time)))))) (t nil)))) (provide 'url-cache) twittering-mode-3.0.0/url-emacs21/url-cid.el0000644000000000000000000000441412141747407020520 0ustar rootroot00000000000000;;; url-cid.el --- Content-ID URL loader ;; Author: $Author: fx $ ;; Created: $Date: 2001/05/05 16:35:58 $ ;; Version: $Revision: 1.3 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1998 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-vars) (require 'url-parse) (require 'mm-decode) (defun url-cid-gnus (cid) (let ((content-type nil) (encoding nil) (part nil) (data nil)) (setq part (mm-get-content-id cid)) (if (not part) (message "Unknown CID encountered: %s" cid) (setq data (save-excursion (set-buffer (mm-handle-buffer part)) (buffer-string)) content-type (mm-handle-type part) encoding (symbol-name (mm-handle-encoding part))) (if (= 0 (length content-type)) (setq content-type "text/plain")) (if (= 0 (length encoding)) (setq encoding "8bit")) (if (listp content-type) (setq content-type (car content-type))) (insert (format "Content-type: %d\r\n" (length data)) "Content-type: " content-type "\r\n" "Content-transfer-encoding: " encoding "\r\n" "\r\n" (or data ""))))) ;;;###autoload (defun url-cid (url) (cond ((fboundp 'mm-get-content-id) ;; Using Pterodactyl Gnus or later (save-excursion (set-buffer (generate-new-buffer " *url-cid*")) (url-cid-gnus (url-filename url)))) (t (message "Unable to handle CID URL: %s" url)))) twittering-mode-3.0.0/url-emacs21/url-cookie.el0000644000000000000000000004027712141747407021241 0ustar rootroot00000000000000;;; url-cookie.el --- Netscape Cookie support ;; Author: $Author: wmperry $ ;; Created: $Date: 2002/10/29 14:44:59 $ ;; Version: $Revision: 1.7 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'timezone) (require 'url-util) (require 'url-parse) (eval-when-compile (require 'cl)) ;; See http://home.netscape.com/newsref/std/cookie_spec.html for the ;; 'open standard' defining this crap. ;; ;; A cookie is stored internally as a vector of 7 slots ;; [ 'cookie name value expires path domain secure ] (defsubst url-cookie-name (cookie) (aref cookie 1)) (defsubst url-cookie-value (cookie) (aref cookie 2)) (defsubst url-cookie-expires (cookie) (aref cookie 3)) (defsubst url-cookie-path (cookie) (aref cookie 4)) (defsubst url-cookie-domain (cookie) (aref cookie 5)) (defsubst url-cookie-secure (cookie) (aref cookie 6)) (defsubst url-cookie-set-name (cookie val) (aset cookie 1 val)) (defsubst url-cookie-set-value (cookie val) (aset cookie 2 val)) (defsubst url-cookie-set-expires (cookie val) (aset cookie 3 val)) (defsubst url-cookie-set-path (cookie val) (aset cookie 4 val)) (defsubst url-cookie-set-domain (cookie val) (aset cookie 5 val)) (defsubst url-cookie-set-secure (cookie val) (aset cookie 6 val)) (defsubst url-cookie-retrieve-arg (key args) (nth 1 (memq key args))) (defsubst url-cookie-create (&rest args) (let ((retval (make-vector 7 nil))) (aset retval 0 'cookie) (url-cookie-set-name retval (url-cookie-retrieve-arg :name args)) (url-cookie-set-value retval (url-cookie-retrieve-arg :value args)) (url-cookie-set-expires retval (url-cookie-retrieve-arg :expires args)) (url-cookie-set-path retval (url-cookie-retrieve-arg :path args)) (url-cookie-set-domain retval (url-cookie-retrieve-arg :domain args)) (url-cookie-set-secure retval (url-cookie-retrieve-arg :secure args)) retval)) (defun url-cookie-p (obj) (and (vectorp obj) (= (length obj) 7) (eq (aref obj 0) 'cookie))) (defgroup url-cookie nil "URL cookies" :prefix "url-" :prefix "url-cookie-" :group 'url) (defvar url-cookie-storage nil "Where cookies are stored.") (defvar url-cookie-secure-storage nil "Where secure cookies are stored.") (defcustom url-cookie-file nil "*Where cookies are stored on disk." :type '(choice (const :tag "Default" :value nil) file) :group 'url-file :group 'url-cookie) (defcustom url-cookie-confirmation nil "*If non-nil, confirmation by the user is required to accept HTTP cookies." :type 'boolean :group 'url-cookie) (defcustom url-cookie-multiple-line nil "*If nil, HTTP requests put all cookies for the server on one line. Some web servers, such as http://www.hotmail.com/, only accept cookies when they are on one line. This is broken behaviour, but just try telling Microsoft that.") (defvar url-cookies-changed-since-last-save nil "Whether the cookies list has changed since the last save operation.") ;;;###autoload (defun url-cookie-parse-file (&optional fname) (setq fname (or fname url-cookie-file)) (condition-case () (load fname nil t) (error (message "Could not load cookie file %s" fname)))) (defun url-cookie-clean-up (&optional secure) (let* ( (var (if secure 'url-cookie-secure-storage 'url-cookie-storage)) (val (symbol-value var)) (cur nil) (new nil) (cookies nil) (cur-cookie nil) (new-cookies nil) ) (while val (setq cur (car val) val (cdr val) new-cookies nil cookies (cdr cur)) (while cookies (setq cur-cookie (car cookies) cookies (cdr cookies)) (if (or (not (url-cookie-p cur-cookie)) (url-cookie-expired-p cur-cookie) (null (url-cookie-expires cur-cookie))) nil (setq new-cookies (cons cur-cookie new-cookies)))) (if (not new-cookies) nil (setcdr cur new-cookies) (setq new (cons cur new)))) (set var new))) ;;;###autoload (defun url-cookie-write-file (&optional fname) (setq fname (or fname url-cookie-file)) (cond ((not url-cookies-changed-since-last-save) nil) ((not (file-writable-p fname)) (message "Cookies file %s (see variable `url-cookie-file') is unwritable." fname)) (t (url-cookie-clean-up) (url-cookie-clean-up t) (save-excursion (set-buffer (get-buffer-create " *cookies*")) (erase-buffer) (fundamental-mode) (insert ";; Emacs-W3 HTTP cookies file\n" ";; Automatically generated file!!! DO NOT EDIT!!!\n\n" "(setq url-cookie-storage\n '") (pp url-cookie-storage (current-buffer)) (insert ")\n(setq url-cookie-secure-storage\n '") (pp url-cookie-secure-storage (current-buffer)) (insert ")\n") (write-file fname) (kill-buffer (current-buffer)))))) (defun url-cookie-store (name value &optional expires domain path secure) "Stores a netscape-style cookie" (let* ((storage (if secure url-cookie-secure-storage url-cookie-storage)) (tmp storage) (cur nil) (found-domain nil)) ;; First, look for a matching domain (setq found-domain (assoc domain storage)) (if found-domain ;; Need to either stick the new cookie in existing domain storage ;; or possibly replace an existing cookie if the names match. (progn (setq storage (cdr found-domain) tmp nil) (while storage (setq cur (car storage) storage (cdr storage)) (if (and (equal path (url-cookie-path cur)) (equal name (url-cookie-name cur))) (progn (url-cookie-set-expires cur expires) (url-cookie-set-value cur value) (setq tmp t)))) (if (not tmp) ;; New cookie (setcdr found-domain (cons (url-cookie-create :name name :value value :expires expires :domain domain :path path :secure secure) (cdr found-domain))))) ;; Need to add a new top-level domain (setq tmp (url-cookie-create :name name :value value :expires expires :domain domain :path path :secure secure)) (cond (storage (setcdr storage (cons (list domain tmp) (cdr storage)))) (secure (setq url-cookie-secure-storage (list (list domain tmp)))) (t (setq url-cookie-storage (list (list domain tmp)))))))) (defun url-cookie-expired-p (cookie) (let* ( (exp (url-cookie-expires cookie)) (cur-date (and exp (timezone-parse-date (current-time-string)))) (exp-date (and exp (timezone-parse-date exp))) (cur-greg (and cur-date (timezone-absolute-from-gregorian (string-to-int (aref cur-date 1)) (string-to-int (aref cur-date 2)) (string-to-int (aref cur-date 0))))) (exp-greg (and exp (timezone-absolute-from-gregorian (string-to-int (aref exp-date 1)) (string-to-int (aref exp-date 2)) (string-to-int (aref exp-date 0))))) (diff-in-days (and exp (- cur-greg exp-greg))) ) (cond ((not exp) nil) ; No expiry == expires at browser quit ((< diff-in-days 0) nil) ; Expires sometime after today ((> diff-in-days 0) t) ; Expired before today (t ; Expires sometime today, check times (let* ((cur-time (timezone-parse-time (aref cur-date 3))) (exp-time (timezone-parse-time (aref exp-date 3))) (cur-norm (+ (* 360 (string-to-int (aref cur-time 2))) (* 60 (string-to-int (aref cur-time 1))) (* 1 (string-to-int (aref cur-time 0))))) (exp-norm (+ (* 360 (string-to-int (aref exp-time 2))) (* 60 (string-to-int (aref exp-time 1))) (* 1 (string-to-int (aref exp-time 0)))))) (> (- cur-norm exp-norm) 1)))))) ;;;###autoload (defun url-cookie-retrieve (host path &optional secure) "Retrieves all the netscape-style cookies for a specified HOST and PATH" (let ((storage (if secure (append url-cookie-secure-storage url-cookie-storage) url-cookie-storage)) (case-fold-search t) (cookies nil) (cur nil) (retval nil) (path-regexp nil)) (while storage (setq cur (car storage) storage (cdr storage) cookies (cdr cur)) (if (and (car cur) (string-match (concat "^.*" (regexp-quote (car cur)) "$") host)) ;; The domains match - a possible hit! (while cookies (setq cur (car cookies) cookies (cdr cookies) path-regexp (concat "^" (regexp-quote (url-cookie-path cur)))) (if (and (string-match path-regexp path) (not (url-cookie-expired-p cur))) (setq retval (cons cur retval)))))) retval)) ;;;###autolaod (defun url-cookie-generate-header-lines (host path secure) (let* ((cookies (url-cookie-retrieve host path secure)) (retval nil) (cur nil) (chunk nil)) ;; Have to sort this for sending most specific cookies first (setq cookies (and cookies (sort cookies (function (lambda (x y) (> (length (url-cookie-path x)) (length (url-cookie-path y)))))))) (while cookies (setq cur (car cookies) cookies (cdr cookies) chunk (format "%s=%s" (url-cookie-name cur) (url-cookie-value cur)) retval (if (and url-cookie-multiple-line (< 80 (+ (length retval) (length chunk) 4))) (concat retval "\r\nCookie: " chunk) (if retval (concat retval "; " chunk) (concat "Cookie: " chunk))))) (if retval (concat retval "\r\n") ""))) (defvar url-cookie-two-dot-domains (concat "\\.\\(" (mapconcat 'identity (list "com" "edu" "net" "org" "gov" "mil" "int") "\\|") "\\)$") "A regular expression of top-level domains that only require two matching '.'s in the domain name in order to set a cookie.") (defcustom url-cookie-trusted-urls nil "*A list of regular expressions matching URLs to always accept cookies from." :type '(repeat regexp) :group 'url-cookie) (defcustom url-cookie-untrusted-urls nil "*A list of regular expressions matching URLs to never accept cookies from." :type '(repeat regexp) :group 'url-cookie) (defun url-cookie-host-can-set-p (host domain) (let ((numdots 0) (tmp domain) (last nil) (case-fold-search t) (mindots 3)) (while (setq last (string-match "\\." domain last)) (setq numdots (1+ numdots) last (1+ last))) (if (string-match url-cookie-two-dot-domains domain) (setq mindots 2)) (cond ((string= host domain) ; Apparently netscape lets you do this t) ((>= numdots mindots) ; We have enough dots in domain name ;; Need to check and make sure the host is actually _in_ the ;; domain it wants to set a cookie for though. (string-match (concat (regexp-quote domain) "$") host)) (t nil)))) ;;;###autoload (defun url-cookie-handle-set-cookie (str) (setq url-cookies-changed-since-last-save t) (let* ((args (url-parse-args str t)) (case-fold-search t) (secure (and (assoc-ignore-case "secure" args) t)) (domain (or (cdr-safe (assoc-ignore-case "domain" args)) (url-host url-current-object))) (current-url (url-view-url t)) (trusted url-cookie-trusted-urls) (untrusted url-cookie-untrusted-urls) (expires (cdr-safe (assoc-ignore-case "expires" args))) (path (or (cdr-safe (assoc-ignore-case "path" args)) (file-name-directory (url-filename url-current-object)))) (rest nil)) (while args (if (not (member (downcase (car (car args))) '("secure" "domain" "expires" "path"))) (setq rest (cons (car args) rest))) (setq args (cdr args))) ;; Sometimes we get dates that the timezone package cannot handle very ;; gracefully - take care of this here, instead of in url-cookie-expired-p ;; to speed things up. (if (and expires (string-match (concat "^[^,]+, +\\(..\\)-\\(...\\)-\\(..\\) +" "\\(..:..:..\\) +\\[*\\([^\]]+\\)\\]*$") expires)) (setq expires (concat (match-string 1 expires) " " (match-string 2 expires) " " (match-string 3 expires) " " (match-string 4 expires) " [" (match-string 5 expires) "]"))) ;; This one is for older Emacs/XEmacs variants that don't ;; understand this format without tenths of a second in it. ;; Wednesday, 30-Dec-2037 16:00:00 GMT ;; - vs - ;; Wednesday, 30-Dec-2037 16:00:00.00 GMT (if (and expires (string-match "\\([0-9]+\\)-\\([A-Za-z]+\\)-\\([0-9]+\\)[ \t]+\\([0-9]+:[0-9]+:[0-9]+\\)\\(\\.[0-9]+\\)*[ \t]+\\([-+a-zA-Z0-9]+\\)" expires)) (setq expires (concat (match-string 1 expires) "-" ; day (match-string 2 expires) "-" ; month (match-string 3 expires) " " ; year (match-string 4 expires) ".00 " ; hour:minutes:seconds (match-string 6 expires)))) ":" ; timezone (while (consp trusted) (if (string-match (car trusted) current-url) (setq trusted (- (match-end 0) (match-beginning 0))) (pop trusted))) (while (consp untrusted) (if (string-match (car untrusted) current-url) (setq untrusted (- (match-end 0) (match-beginning 0))) (pop untrusted))) (if (and trusted untrusted) ;; Choose the more specific match (if (> trusted untrusted) (setq untrusted nil) (setq trusted nil))) (cond (untrusted ;; The site was explicity marked as untrusted by the user nil) ((or (eq url-privacy-level 'paranoid) (and (listp url-privacy-level) (memq 'cookies url-privacy-level))) ;; user never wants cookies nil) ((and url-cookie-confirmation (not trusted) (save-window-excursion (with-output-to-temp-buffer "*Cookie Warning*" (mapcar (function (lambda (x) (princ (format "%s - %s" (car x) (cdr x))))) rest)) (prog1 (not (funcall url-confirmation-func (format "Allow %s to set these cookies? " (url-host url-current-object)))) (if (get-buffer "*Cookie Warning*") (kill-buffer "*Cookie Warning*"))))) ;; user wants to be asked, and declined. nil) ((url-cookie-host-can-set-p (url-host url-current-object) domain) ;; Cookie is accepted by the user, and passes our security checks (let ((cur nil)) (while rest (setq cur (pop rest)) (url-cookie-store (car cur) (cdr cur) expires domain path secure)))) (t (message "%s tried to set a cookie for domain %s - rejected." (url-host url-current-object) domain))))) (defvar url-cookie-timer nil) (defcustom url-cookie-save-interval 3600 "*The number of seconds between automatic saves of cookies. Default is 1 hour. Note that if you change this variable outside of the `customize' interface after `url-do-setup' has been run, you need to run the `url-cookie-setup-save-timer' function manually." :set (function (lambda (var val) (set-default var val) (and (featurep 'url) (fboundp 'url-cookie-setup-save-timer) (url-cookie-setup-save-timer)))) :type 'integer :group 'url) ;;;###autoload (defun url-cookie-setup-save-timer () "Reset the cookie saver timer." (interactive) (cond ((featurep 'itimer) (ignore-errors (delete-itimer url-cookie-timer)) (setq url-cookie-timer nil) (if url-cookie-save-interval (setq url-cookie-timer (start-itimer "url-cookie-saver" 'url-cookie-write-file url-cookie-save-interval url-cookie-save-interval)))) ((fboundp 'run-at-time) (ignore-errors (cancel-timer url-cookie-timer)) (setq url-cookie-timer nil) (if url-cookie-save-interval (setq url-cookie-timer (run-at-time url-cookie-save-interval url-cookie-save-interval 'url-cookie-write-file)))) (t nil))) (provide 'url-cookie) twittering-mode-3.0.0/url-emacs21/url-dav.el0000644000000000000000000007634112141747407020543 0ustar rootroot00000000000000;;; url-dav.el --- WebDAV support ;; Copyright (C) 2001 Free Software Foundation, Inc. ;; Author: Bill Perry ;; Maintainer: Bill Perry ;; Version: $Revision: 1.6 $ ;; Keywords: url, vc ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. (eval-when-compile (require 'cl)) (require 'xml) (require 'url-util) (require 'url-handlers) (defvar url-dav-supported-protocols '(1 2) "List of supported DAV versions.") ;;;###autoload (defun url-dav-supported-p (url) (and (featurep 'xml) (fboundp 'xml-expand-namespace) (intersection url-dav-supported-protocols (plist-get (url-http-options url) 'dav)))) (defun url-dav-node-text (node) "Return the text data from the XML node NODE." (mapconcat (lambda (txt) (if (stringp txt) txt "")) (xml-node-children node) " ")) ;;; Parsing routines for the actual node contents. ;;; ;;; I am not incredibly happy with how this code looks/works right ;;; now, but it DOES work, and if we get the API right, our callers ;;; won't have to worry about the internal representation. (defconst url-dav-datatype-attribute 'urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/dt) (defun url-dav-process-integer-property (node) (truncate (string-to-number (url-dav-node-text node)))) (defun url-dav-process-number-property (node) (string-to-number (url-dav-node-text node))) (defconst url-dav-iso8601-regexp (let* ((dash "-?") (colon ":?") (4digit "\\([0-9][0-9][0-9][0-9]\\)") (2digit "\\([0-9][0-9]\\)") (date-fullyear 4digit) (date-month 2digit) (date-mday 2digit) (time-hour 2digit) (time-minute 2digit) (time-second 2digit) (time-secfrac "\\(\\.[0-9]+\\)?") (time-numoffset (concat "[-+]\\(" time-hour "\\):" time-minute)) (time-offset (concat "Z" time-numoffset)) (partial-time (concat time-hour colon time-minute colon time-second time-secfrac)) (full-date (concat date-fullyear dash date-month dash date-mday)) (full-time (concat partial-time time-offset)) (date-time (concat full-date "T" full-time))) (list (concat "^" full-date) (concat "T" partial-time) (concat "Z" time-numoffset))) "List of regular expressions matching iso8601 dates. 1st regular expression matches the date. 2nd regular expression matches the time. 3rd regular expression matches the (optional) timezone specification. ") (defun url-dav-process-date-property (node) (require 'parse-time) (let* ((date-re (nth 0 url-dav-iso8601-regexp)) (time-re (nth 1 url-dav-iso8601-regexp)) (tz-re (nth 2 url-dav-iso8601-regexp)) (date-string (url-dav-node-text node)) re-start time seconds minute hour fractional-seconds day month year day-of-week dst tz) ;; We need to populate 'time' with ;; (SEC MIN HOUR DAY MON YEAR DOW DST TZ) ;; Nobody else handles iso8601 correctly, lets do it ourselves. (when (string-match date-re date-string re-start) (setq year (string-to-int (match-string 1 date-string)) month (string-to-int (match-string 2 date-string)) day (string-to-int (match-string 3 date-string)) re-start (match-end 0)) (when (string-match time-re date-string re-start) (setq hour (string-to-int (match-string 1 date-string)) minute (string-to-int (match-string 2 date-string)) seconds (string-to-int (match-string 3 date-string)) fractional-seconds (string-to-int (or (match-string 4 date-string) "0")) re-start (match-end 0)) (when (string-match tz-re date-string re-start) (setq tz (match-string 1 date-string))) (url-debug 'dav "Parsed iso8601%s date" (if tz "tz" "")) (setq time (list seconds minute hour day month year day-of-week dst tz)))) ;; Fall back to having Gnus do fancy things for us. (when (not time) (setq time (parse-time-string date-string))) (if time (setq time (apply 'encode-time time)) (url-debug 'dav "Unable to decode date (%S) (%s)" (xml-node-name node) date-string)) time)) (defun url-dav-process-boolean-property (node) (/= 0 (string-to-int (url-dav-node-text node)))) (defun url-dav-process-uri-property (node) ;; Returns a parsed representation of the URL... (url-generic-parse-url (url-dav-node-text node))) (defun url-dav-find-parser (node) "Find a function to parse the XML node NODE." (or (get (xml-node-name node) 'dav-parser) (let ((fn (intern (format "url-dav-process-%s" (xml-node-name node))))) (if (not (fboundp fn)) (setq fn 'url-dav-node-text) (put (xml-node-name node) 'dav-parser fn)) fn))) (defmacro url-dav-dispatch-node (node) `(funcall (url-dav-find-parser ,node) ,node)) (defun url-dav-process-DAV:prop (node) ;; A prop node has content model of ANY ;; ;; Some predefined nodes have special meanings though. ;; ;; DAV:supportedlock - list of DAV:lockentry ;; DAV:source ;; DAV:iscollection - boolean ;; DAV:getcontentlength - integer ;; DAV:ishidden - boolean ;; DAV:getcontenttype - string ;; DAV:resourcetype - node who's name is the resource type ;; DAV:getlastmodified - date ;; DAV:creationdate - date ;; DAV:displayname - string ;; DAV:getetag - unknown (let ((children (xml-node-children node)) (node-type nil) (props nil) (value nil) (handler-func nil)) (when (not children) (error "No child nodes in DAV:prop")) (while children (setq node (car children) node-type (intern (or (cdr-safe (assq url-dav-datatype-attribute (xml-node-attributes node))) "unknown")) value nil) (case node-type ((dateTime.iso8601tz dateTime.iso8601 dateTime.tz dateTime.rfc1123 dateTime date) ; date is our 'special' one... ;; Some type of date/time string. (setq value (url-dav-process-date-property node))) (int ;; Integer type... (setq value (url-dav-process-integer-property node))) ((number float) (setq value (url-dav-process-number-property node))) (boolean (setq value (url-dav-process-boolean-property node))) (uri (setq value (url-dav-process-uri-property node))) (otherwise (if (not (eq node-type 'unknown)) (url-debug 'dav "Unknown data type in url-dav-process-prop: %s" node-type)) (setq value (url-dav-dispatch-node node)))) (setq props (plist-put props (xml-node-name node) value) children (cdr children))) props)) (defun url-dav-process-DAV:supportedlock (node) ;; DAV:supportedlock is a list of DAV:lockentry items. ;; DAV:lockentry in turn contains a DAV:lockscope and DAV:locktype. ;; The DAV:lockscope must have a single node beneath it, ditto for ;; DAV:locktype. (let ((children (xml-node-children node)) (results nil) scope type) (while children (when (and (not (stringp (car children))) (eq (xml-node-name (car children)) 'DAV:lockentry)) (setq scope (assq 'DAV:lockscope (xml-node-children (car children))) type (assq 'DAV:locktype (xml-node-children (car children)))) (when (and scope type) (setq scope (xml-node-name (car (xml-node-children scope))) type (xml-node-name (car (xml-node-children type)))) (push (cons type scope) results))) (setq children (cdr children))) results)) (defun url-dav-process-subnode-property (node) ;; Returns a list of child node names. (delq nil (mapcar 'car-safe (xml-node-children node)))) (defalias 'url-dav-process-DAV:depth 'url-dav-process-integer-property) (defalias 'url-dav-process-DAV:resourcetype 'url-dav-process-subnode-property) (defalias 'url-dav-process-DAV:locktype 'url-dav-process-subnode-property) (defalias 'url-dav-process-DAV:lockscope 'url-dav-process-subnode-property) (defalias 'url-dav-process-DAV:getcontentlength 'url-dav-process-integer-property) (defalias 'url-dav-process-DAV:getlastmodified 'url-dav-process-date-property) (defalias 'url-dav-process-DAV:creationdate 'url-dav-process-date-property) (defalias 'url-dav-process-DAV:iscollection 'url-dav-process-boolean-property) (defalias 'url-dav-process-DAV:ishidden 'url-dav-process-boolean-property) (defun url-dav-process-DAV:locktoken (node) ;; DAV:locktoken can have one or more DAV:href children. (delq nil (mapcar (lambda (n) (if (stringp n) n (url-dav-dispatch-node n))) (xml-node-children node)))) (defun url-dav-process-DAV:owner (node) ;; DAV:owner can contain anything. (delq nil (mapcar (lambda (n) (if (stringp n) n (url-dav-dispatch-node n))) (xml-node-children node)))) (defun url-dav-process-DAV:activelock (node) ;; DAV:activelock can contain: ;; DAV:lockscope ;; DAV:locktype ;; DAV:depth ;; DAV:owner (optional) ;; DAV:timeout (optional) ;; DAV:locktoken (optional) (let ((children (xml-node-children node)) (results nil)) (while children (if (listp (car children)) (push (cons (xml-node-name (car children)) (url-dav-dispatch-node (car children))) results)) (setq children (cdr children))) results)) (defun url-dav-process-DAV:lockdiscovery (node) ;; Can only contain a list of DAV:activelock objects. (let ((children (xml-node-children node)) (results nil)) (while children (cond ((stringp (car children)) ;; text node? why? nil) ((eq (xml-node-name (car children)) 'DAV:activelock) (push (url-dav-dispatch-node (car children)) results)) (t ;; Ignore unknown nodes... nil)) (setq children (cdr children))) results)) (defun url-dav-process-DAV:status (node) ;; The node contains a standard HTTP/1.1 response line... we really ;; only care about the numeric status code. (let ((status (url-dav-node-text node))) (if (string-match "\\`[ \r\t\n]*HTTP/[0-9.]+ \\([0-9]+\\)" status) (string-to-int (match-string 1 status)) 500))) (defun url-dav-process-DAV:propstat (node) ;; A propstate node can have the following children... ;; ;; DAV:prop - a list of properties and values ;; DAV:status - An HTTP/1.1 status line (let ((children (xml-node-children node)) (props nil) (status nil)) (when (not children) (error "No child nodes in DAV:propstat")) (setq props (url-dav-dispatch-node (assq 'DAV:prop children)) status (url-dav-dispatch-node (assq 'DAV:status children))) ;; Need to parse out the HTTP status (setq props (plist-put props 'DAV:status status)) props)) (defun url-dav-process-DAV:response (node) (let ((children (xml-node-children node)) (propstat nil) (href)) (when (not children) (error "No child nodes in DAV:response")) ;; A response node can have the following children... ;; ;; DAV:href - URL the response is for. ;; DAV:propstat - see url-dav-process-propstat ;; DAV:responsedescription - text description of the response (setq propstat (assq 'DAV:propstat children) href (assq 'DAV:href children)) (when (not href) (error "No href in DAV:response")) (when (not propstat) (error "No propstat in DAV:response")) (setq propstat (url-dav-dispatch-node propstat) href (url-dav-dispatch-node href)) (cons href propstat))) (defun url-dav-process-DAV:multistatus (node) (let ((children (xml-node-children node)) (results nil)) (while children (push (url-dav-dispatch-node (car children)) results) (setq children (cdr children))) results)) ;;; DAV request/response generation/processing (defun url-dav-process-response (buffer url) "Parses a WebDAV response from BUFFER, interpreting it relative to URL. The buffer must have been retrieved by HTTP or HTTPS and contain an XML document. " (declare (special url-http-content-type url-http-response-status url-http-end-of-headers)) (let ((tree nil) (overall-status nil)) (when buffer (unwind-protect (save-excursion (set-buffer buffer) (goto-char url-http-end-of-headers) (setq overall-status url-http-response-status) ;; XML documents can be transferred as either text/xml or ;; application/xml, and we are required to accept both of ;; them. (if (and url-http-content-type (or (string-match "^text/xml" url-http-content-type) (string-match "^application/xml" url-http-content-type))) (setq tree (xml-parse-region (point) (point-max))))) ;; Clean up after ourselves. '(kill-buffer buffer))) ;; We should now be (if (eq (xml-node-name (car tree)) 'DAV:multistatus) (url-dav-dispatch-node (car tree)) (url-debug 'dav "Got back singleton response for URL(%S)" url) (let ((properties (url-dav-dispatch-node (car tree)))) ;; We need to make sure we have a DAV:status node in there for ;; higher-level code; (setq properties (plist-put properties 'DAV:status overall-status)) ;; Make this look like a DAV:multistatus parse tree so that ;; nobody but us needs to know the difference. (list (cons url properties)))))) (defun url-dav-request (url method tag body &optional depth headers namespaces) "Performs WebDAV operation METHOD on URL. Returns the parsed responses. Automatically creates an XML request body if TAG is non-nil. BODY is the XML document fragment to be enclosed by . DEPTH is how deep the request should propogate. Default is 0, meaning it should apply only to URL. A negative number means to use `Infinity' for the depth. Not all WebDAV servers support this depth though. HEADERS is an assoc list of extra headers to send in the request. NAMESPACES is an assoc list of (NAMESPACE . EXPANSION), and these are added to the element. The DAV=DAV: namespace is automatically added to this list, so most requests can just pass in nil. " ;; Take care of the default value for depth... (setq depth (or depth 0)) ;; Now lets translate it into something webdav can understand. (if (< depth 0) (setq depth "Infinity") (setq depth (int-to-string depth))) (if (not (assoc "DAV" namespaces)) (setq namespaces (cons '("DAV" . "DAV:") namespaces))) (let* ((url-request-extra-headers `(("Depth" . ,depth) ("Content-type" . "text/xml") ,@headers)) (url-request-method method) (url-request-data (if tag (concat "\n" "<" (symbol-name tag) " " ;; add in the appropriate namespaces... (mapconcat (lambda (ns) (concat "xmlns:" (car ns) "='" (cdr ns) "'")) namespaces "\n ") ">\n" body "\n")))) (url-dav-process-response (url-retrieve-synchronously url) url))) ;;;###autoload (defun url-dav-get-properties (url &optional attributes depth namespaces) "Return properties for URL, up to DEPTH levels deep. Returns an assoc list, where the key is the filename (possibly a full URI), and the value is a standard property list of DAV property names (ie: DAV:resourcetype). " (url-dav-request url "PROPFIND" 'DAV:propfind (if attributes (mapconcat (lambda (attr) (concat "<" (symbol-name attr) "/>")) attributes "\n ") " ") depth nil namespaces)) (defmacro url-dav-http-success-p (status) "Return whether PROPERTIES was the result of a successful DAV request." `(= (/ (or ,status 500) 100) 2)) ;;; Locking support (defvar url-dav-lock-identifier (concat "mailto:" user-mail-address) "*URL used as contact information when creating locks in DAV. This will be used as the contents of the DAV:owner/DAV:href tag to identify the owner of a LOCK when requesting it. This will be shown to other users when the DAV:lockdiscovery property is requested, so make sure you are comfortable with it leaking to the outside world. ") ;;;###autoload (defun url-dav-lock-resource (url exclusive &optional depth) "Request a lock on URL. If EXCLUSIVE is non-nil, get an exclusive lock. Optional 3rd argument DEPTH says how deep the lock should go, default is 0 \(lock only the resource and none of its children\). Returns a cons-cell of (SUCCESSFUL-RESULTS . FAILURE-RESULTS). SUCCESSFUL-RESULTS is a list of (URL STATUS locktoken). FAILURE-RESULTS is a list of (URL STATUS). " (setq exclusive (if exclusive "" "")) (let* ((body (concat " " exclusive "\n" " \n" " \n" " " url-dav-lock-identifier "\n" " \n")) (response nil) ; Responses to the LOCK request (result nil) ; For walking thru the response list (child-url nil) (child-status nil) (failures nil) ; List of failure cases (URL . STATUS) (successes nil)) ; List of success cases (URL . STATUS) (setq response (url-dav-request url "LOCK" 'DAV:lockinfo body depth '(("Timeout" . "Infinite")))) ;; Get the parent URL ready for expand-file-name (if (not (vectorp url)) (setq url (url-generic-parse-url url))) ;; Walk thru the response list, fully expand the URL, and grab the ;; status code. (while response (setq result (pop response) child-url (url-expand-file-name (pop result) url) child-status (or (plist-get result 'DAV:status) 500)) (if (url-dav-http-success-p child-status) (push (list url child-status "huh") successes) (push (list url child-status) failures))) (cons successes failures))) ;;;###autoload (defun url-dav-active-locks (url &optional depth) "Return an assoc list of all active locks on URL." (let ((response (url-dav-get-properties url '(DAV:lockdiscovery) depth)) (properties nil) (child nil) (child-url nil) (child-results nil) (results nil)) (if (not (vectorp url)) (setq url (url-generic-parse-url url))) (while response (setq child (pop response) child-url (pop child) child-results nil) (when (and (url-dav-http-success-p (plist-get child 'DAV:status)) (setq child (plist-get child 'DAV:lockdiscovery))) ;; After our parser has had its way with it, The ;; DAV:lockdiscovery property is a list of DAV:activelock ;; objects, which are comprised of DAV:activelocks, which ;; assoc lists of properties and values. (while child (if (assq 'DAV:locktoken (car child)) (let ((tokens (cdr (assq 'DAV:locktoken (car child)))) (owners (cdr (assq 'DAV:owner (car child))))) (dolist (token tokens) (dolist (owner owners) (push (cons token owner) child-results))))) (pop child))) (if child-results (push (cons (url-expand-file-name child-url url) child-results) results))) results)) ;;;###autoload (defun url-dav-unlock-resource (url lock-token) "Release the lock on URL represented by LOCK-TOKEN. Returns `t' iff the lock was successfully released. " (declare (special url-http-response-status)) (let* ((url-request-extra-headers (list (cons "Lock-Token" (concat "<" lock-token ">")))) (url-request-method "UNLOCK") (url-request-data nil) (buffer (url-retrieve-synchronously url)) (result nil)) (when buffer (unwind-protect (save-excursion (set-buffer buffer) (setq result (url-dav-http-success-p url-http-response-status))) (kill-buffer buffer))) result)) ;;; file-name-handler stuff (defun url-dav-file-attributes-mode-string (properties) (let ((modes (make-string 10 ?-)) (supported-locks (plist-get properties 'DAV:supportedlock)) (executable-p (equal (plist-get properties 'http://apache.org/dav/props/executable) "T")) (directory-p (memq 'DAV:collection (plist-get properties 'DAV:resourcetype))) (readable t) (lock nil)) ;; Assume we can read this, otherwise the PROPFIND would have ;; failed. (when readable (aset modes 1 ?r) (aset modes 4 ?r) (aset modes 7 ?r)) (when directory-p (aset modes 0 ?d)) (when executable-p (aset modes 3 ?x) (aset modes 6 ?x) (aset modes 9 ?x)) (while supported-locks (setq lock (car supported-locks) supported-locks (cdr supported-locks)) (case (car lock) (DAV:write (case (cdr lock) (DAV:shared ; group permissions (possibly world) (aset modes 5 ?w)) (DAV:exclusive (aset modes 2 ?w)) ; owner permissions? (otherwise (url-debug 'dav "Unrecognized DAV:lockscope (%S)" (cdr lock))))) (otherwise (url-debug 'dav "Unrecognized DAV:locktype (%S)" (car lock))))) modes)) ;;;###autoload (defun url-dav-file-attributes (url) (let ((properties (cdar (url-dav-get-properties url))) (attributes nil)) (if (and properties (url-dav-http-success-p (plist-get properties 'DAV:status))) ;; We got a good DAV response back.. (setq attributes (list ;; t for directory, string for symbolic link, or nil ;; Need to support DAV Bindings to figure out the ;; symbolic link issues. (if (memq 'DAV:collection (plist-get properties 'DAV:resourcetype)) t nil) ;; Number of links to file... Needs DAV Bindings. 1 ;; File uid - no way to figure out? 0 ;; File gid - no way to figure out? 0 ;; Last access time - ??? nil ;; Last modification time (plist-get properties 'DAV:getlastmodified) ;; Last status change time... just reuse last-modified ;; for now. (plist-get properties 'DAV:getlastmodified) ;; size in bytes (or (plist-get properties 'DAV:getcontentlength) 0) ;; file modes as a string like `ls -l' ;; ;; Should be able to build this up from the ;; DAV:supportedlock attribute pretty easily. Getting ;; the group info could be impossible though. (url-dav-file-attributes-mode-string properties) ;; t iff file's gid would change if it were deleted & ;; recreated. No way for us to know that thru DAV. nil ;; inode number - meaningless nil ;; device number - meaningless nil)) ;; Fall back to just the normal http way of doing things. (setq attributes (url-http-head-file-attributes url))) attributes)) ;;;###autoload (defun url-dav-save-resource (url obj &optional content-type lock-token) "Save OBJ as URL using WebDAV. URL must be a fully qualified URL. OBJ may be a buffer or a string." (let ((buffer nil) (result nil) (url-request-extra-headers nil) (url-request-method "PUT") (url-request-data (cond ((bufferp obj) (save-excursion (set-buffer obj) (buffer-string))) ((stringp obj) obj) (t (error "Invalid object to url-dav-save-resource"))))) (if lock-token (push (cons "If" (concat "(<" lock-token ">)")) url-request-extra-headers)) ;; Everything must always have a content-type when we submit it. (push (cons "Content-type" (or content-type "application/octet-stream")) url-request-extra-headers) ;; Do the save... (setq buffer (url-retrieve-synchronously url)) ;; Sanity checking (when buffer (unwind-protect (save-excursion (set-buffer buffer) (setq result (url-dav-http-success-p url-http-response-status))) (kill-buffer buffer))) result)) (eval-when-compile (defmacro url-dav-delete-something (url lock-token &rest error-checking) "Delete URL completely, with no sanity checking whatsoever. DO NOT USE. This is defined as a macro that will not be visible from compiled files. Use with care, and even then think three times. " `(progn ,@error-checking (url-dav-request ,url "DELETE" nil nil -1 (if ,lock-token (list (cons "If" (concat "(<" ,lock-token ">)")))))))) ;;;###autoload (defun url-dav-delete-directory (url &optional recursive lock-token) "Delete the WebDAV collection URL. If optional second argument RECURSIVE is non-nil, then delete all files in the collection as well. " (let ((status nil) (props nil) (props nil)) (setq props (url-dav-delete-something url lock-token (setq props (url-dav-get-properties url '(DAV:getcontenttype) 1)) (if (and (not recursive) (/= (length props) 1)) (signal 'file-error (list "Removing directory" "directory not empty" url))))) (mapc (lambda (result) (setq status (plist-get (cdr result) 'DAV:status)) (if (not (url-dav-http-success-p status)) (signal 'file-error (list "Removing directory" "Errror removing" (car result) status)))) props)) nil) ;;;###autoload (defun url-dav-delete-file (url &optional lock-token) "Delete file named URL." (let ((props nil) (status nil)) (setq props (url-dav-delete-something url lock-token (setq props (url-dav-get-properties url)) (if (eq (plist-get (cdar props) 'DAV:resourcetype) 'DAV:collection) (signal 'file-error (list "Removing old name" "is a collection" url))))) (mapc (lambda (result) (setq status (plist-get (cdr result) 'DAV:status)) (if (not (url-dav-http-success-p status)) (signal 'file-error (list "Removing old name" "Errror removing" (car result) status)))) props)) nil) ;;;###autoload (defun url-dav-directory-files (url &optional full match nosort files-only) "Return a list of names of files in DIRECTORY. There are three optional arguments: If FULL is non-nil, return absolute file names. Otherwise return names that are relative to the specified directory. If MATCH is non-nil, mention only file names that match the regexp MATCH. If NOSORT is non-nil, the list is not sorted--its order is unpredictable. NOSORT is useful if you plan to sort the result yourself. " (let ((properties (url-dav-get-properties url '(DAV:resourcetype) 1)) (child-url nil) (child-props nil) (files nil) (parsed-url (url-generic-parse-url url))) (if (= (length properties) 1) (signal 'file-error (list "Opening directory" "not a directory" url))) (while properties (setq child-props (pop properties) child-url (pop child-props)) (if (and (eq (plist-get child-props 'DAV:resourcetype) 'DAV:collection) files-only) ;; It is a directory, and we were told to return just files. nil ;; Fully expand the URL and then rip off the beginning if we ;; are not supposed to return fully-qualified names. (setq child-url (url-expand-file-name child-url parsed-url)) (if (not full) (setq child-url (substring child-url (length url)))) ;; We don't want '/' as the last character in filenames... (if (string-match "/$" child-url) (setq child-url (substring child-url 0 -1))) ;; If we have a match criteria, then apply it. (if (or (and match (not (string-match match child-url))) (string= child-url "") (string= child-url url)) nil (push child-url files)))) (if nosort files (sort files 'string-lessp)))) ;;;###autoload (defun url-dav-file-directory-p (url) "Return t if URL names an existing DAV collection." (let ((properties (cdar (url-dav-get-properties url '(DAV:resourcetype))))) (eq (plist-get properties 'DAV:resourcetype) 'DAV:collection))) ;;;###autoload (defun url-dav-make-directory (url &optional parents) "Create the directory DIR and any nonexistent parent dirs." (declare (special url-http-response-status)) (let* ((url-request-extra-headers nil) (url-request-method "MKCOL") (url-request-data nil) (buffer (url-retrieve-synchronously url)) (result nil)) (when buffer (unwind-protect (save-excursion (set-buffer buffer) (case url-http-response-status (201 ; Collection created in its entirety (setq result t)) (403 ; Forbidden nil) (405 ; Method not allowed nil) (409 ; Conflict nil) (415 ; Unsupported media type (WTF?) nil) (507 ; Insufficient storage nil) (otherwise nil))) (kill-buffer buffer))) result)) ;;;###autoload (defun url-dav-rename-file (oldname newname &optional overwrite) (if (not (and (string-match url-handler-regexp oldname) (string-match url-handler-regexp newname))) (signal 'file-error "Cannot rename between different URL backends" oldname newname)) (let* ((headers nil) (props nil) (status nil) (directory-p (url-dav-file-directory-p oldname)) (exists-p (url-http-file-exists-p newname))) (if (and exists-p (or (null overwrite) (and (numberp overwrite) (not (yes-or-no-p (format "File %s already exists; rename to it anyway? " newname)))))) (signal 'file-already-exists (list "File already exists" newname))) ;; Honor the overwrite flag... (if overwrite (push '("Overwrite" . "T") headers)) ;; Have to tell them where to copy it to! (push (cons "Destination" newname) headers) ;; Always send a depth of -1 in case we are moving a collection. (setq props (url-dav-request oldname "MOVE" nil nil (if directory-p -1 0) headers)) (mapc (lambda (result) (setq status (plist-get (cdr result) 'DAV:status)) (if (not (url-dav-http-success-p status)) (signal 'file-error (list "Renaming" oldname newname status)))) props) t)) ;;;###autoload (defun url-dav-file-name-all-completions (file url) "Return a list of all completions of file name FILE in directory DIRECTORY. These are all file names in directory DIRECTORY which begin with FILE. " (url-dav-directory-files url nil (concat "^" file ".*"))) ;;;###autoload (defun url-dav-file-name-completion (file url) "Complete file name FILE in directory DIRECTORY. Returns the longest string common to all file names in DIRECTORY that start with FILE. If there is only one and FILE matches it exactly, returns t. Returns nil if DIR contains no name starting with FILE. " (let ((matches (url-dav-file-name-all-completions file url)) (result nil)) (cond ((null matches) ;; No matches nil) ((and (= (length matches) 1) (string= file (car matches))) ;; Only one file and FILE matches it exactly... t) (t ;; Need to figure out the longest string that they have in commmon (setq matches (sort matches (lambda (a b) (> (length a) (length b))))) (let ((n (length file)) (searching t) (regexp nil) (failed nil)) (while (and searching (< n (length (car matches)))) (setq regexp (concat "^" (substring (car matches) 0 (1+ n))) failed nil) (dolist (potential matches) (if (not (string-match regexp potential)) (setq failed t))) (if failed (setq searching nil) (incf n))) (substring (car matches) 0 n)))))) (defun url-dav-register-handler (op) (put op 'url-file-handlers (intern-soft (format "url-dav-%s" op)))) (mapcar 'url-dav-register-handler '(file-name-all-completions file-name-completion rename-file make-directory file-directory-p directory-files delete-file delete-directory file-attributes)) ;;; Version Control backend cruft ;(put 'vc-registered 'url-file-handlers 'url-dav-vc-registered) ;;;###autoload (defun url-dav-vc-registered (url) (if (and (string-match "\\`https?" url) (plist-get (url-http-options url) 'dav)) (progn (vc-file-setprop url 'vc-backend 'dav) t))) ;;; Miscellaneous stuff. (provide 'url-dav) twittering-mode-3.0.0/url-emacs21/url-dired.el0000644000000000000000000001006012141747407021042 0ustar rootroot00000000000000;;; url-dired.el --- URL Dired minor mode ;; Author: $Author: fx $ ;; Created: $Date: 2001/05/05 16:44:20 $ ;; Version: $Revision: 1.3 $ ;; Keywords: comm, files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (autoload 'w3-fetch "w3") (autoload 'w3-open-local "w3") (autoload 'dired-get-filename "dired") (defvar url-dired-minor-mode-map (let ((map (make-sparse-keymap))) (define-key map "\C-m" 'url-dired-find-file) (if (featurep 'xemacs) (define-key map [button2] 'url-dired-find-file-mouse) (define-key map [mouse-2] 'url-dired-find-file-mouse)) map) "Keymap used when browsing directories.") (defvar url-dired-minor-mode nil "Whether we are in url-dired-minor-mode") (make-variable-buffer-local 'url-dired-minor-mode) (defun url-dired-find-file () "In dired, visit the file or directory named on this line, using Emacs-W3." (interactive) (let ((filename (dired-get-filename))) (cond ((string-match "/\\(.*@.*\\):\\(/.*\\)" filename) (w3-fetch (concat "file://" (match-string 1 filename) (match-string 2 filename)))) (t (w3-open-local filename))))) (defun url-dired-find-file-mouse (event) "In dired, visit the file or directory name you click on, using Emacs-W3." (interactive "@e") (mouse-set-point event) (url-dired-find-file)) (defun url-dired-minor-mode (&optional arg) "Minor mode for directory browsing with Emacs-W3." (interactive "P") (cond ((null arg) (setq url-dired-minor-mode (not url-dired-minor-mode))) ((equal 0 arg) (setq url-dired-minor-mode nil)) (t (setq url-dired-minor-mode t)))) (if (not (fboundp 'add-minor-mode)) (defun add-minor-mode (toggle name &optional keymap after toggle-fun) "Add a minor mode to `minor-mode-alist' and `minor-mode-map-alist'. TOGGLE is a symbol which is used as the variable which toggle the minor mode, NAME is the name that should appear in the modeline (it should be a string beginning with a space), KEYMAP is a keymap to make active when the minor mode is active, and AFTER is the toggling symbol used for another minor mode. If AFTER is non-nil, then it is used to position the new mode in the minor-mode alists. TOGGLE-FUN specifies an interactive function that is called to toggle the mode on and off; this affects what appens when button2 is pressed on the mode, and when button3 is pressed somewhere in the list of modes. If TOGGLE-FUN is nil and TOGGLE names an interactive function, TOGGLE is used as the toggle function. Example: (add-minor-mode 'view-minor-mode \" View\" view-mode-map)" (if (not (assq toggle minor-mode-alist)) (setq minor-mode-alist (cons (list toggle name) minor-mode-alist))) (if (and keymap (not (assq toggle minor-mode-map-alist))) (setq minor-mode-map-alist (cons (cons toggle keymap) minor-mode-map-alist))))) (add-minor-mode 'url-dired-minor-mode " URL" url-dired-minor-mode-map) (defun url-find-file-dired (dir) "\"Edit\" directory DIR, but with additional URL-friendly bindings." (interactive "DURL Dired (directory): ") (find-file dir) (url-dired-minor-mode t)) (provide 'url-dired) twittering-mode-3.0.0/url-emacs21/url-expand.el0000644000000000000000000001271512141747407021243 0ustar rootroot00000000000000;;; url-expand.el --- expand-file-name for URLs ;; Author: $Author: wmperry $ ;; Created: $Date: 1999/12/05 08:09:15 $ ;; Version: $Revision: 1.3 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-methods) (require 'url-util) (require 'url-parse) (defun url-expander-remove-relative-links (name) ;; Strip . and .. from pathnames (let ((new (if (not (string-match "^/" name)) (concat "/" name) name))) ;; If it ends with a '/.' or '/..', tack on a trailing '/' sot hat ;; the tests that follow are not too complicated in terms of ;; looking for '..' or '../', etc. (if (string-match "/\\.+$" new) (setq new (concat new "/"))) ;; Remove '/./' first (while (string-match "/\\(\\./\\)" new) (setq new (concat (substring new 0 (match-beginning 1)) (substring new (match-end 1))))) ;; Then remove '/../' (while (string-match "/\\([^/]*/\\.\\./\\)" new) (setq new (concat (substring new 0 (match-beginning 1)) (substring new (match-end 1))))) ;; Remove cruft at the beginning of the string, so people that put ;; in extraneous '..' because they are morons won't lose. (while (string-match "^/\\.\\.\\(/\\)" new) (setq new (substring new (match-beginning 1) nil))) new)) (defun url-expand-file-name (url &optional default) "Convert URL to a fully specified URL, and canonicalize it. Second arg DEFAULT is a URL to start with if URL is relative. If DEFAULT is nil or missing, the current buffer's URL is used. Path components that are `.' are removed, and path components followed by `..' are removed, along with the `..' itself." (if (and url (not (string-match "^#" url))) ;; Need to nuke newlines and spaces in the URL, or we open ;; ourselves up to potential security holes. (setq url (mapconcat (function (lambda (x) (if (memq x '(? ?\n ?\r)) "" (char-to-string x)))) url ""))) ;; Need to figure out how/where to expand the fragment relative to (setq default (cond ((vectorp default) ;; Default URL has already been parsed default) (default ;; They gave us a default URL in non-parsed format (url-generic-parse-url default)) (url-current-object ;; We are in a URL-based buffer, use the pre-parsed object url-current-object) ((string-match url-nonrelative-link url) ;; The URL they gave us is absolute, go for it. nil) (t ;; Hmmm - this shouldn't ever happen. (error "url-expand-file-name confused - no default?")))) (cond ((= (length url) 0) ; nil or empty string (url-recreate-url default)) ((string-match "^#" url) ; Offset link, use it raw url) ((string-match url-nonrelative-link url) ; Fully-qualified URL, return it immediately url) (t (let* ((urlobj (url-generic-parse-url url)) (inhibit-file-name-handlers t) (expander (url-scheme-get-property (url-type default) 'expand-file-name))) (if (string-match "^//" url) (setq urlobj (url-generic-parse-url (concat (url-type default) ":" url)))) (funcall expander urlobj default) (url-recreate-url urlobj))))) (defun url-identity-expander (urlobj defobj) (url-set-type urlobj (or (url-type urlobj) (url-type defobj)))) (defun url-default-expander (urlobj defobj) ;; The default expansion routine - urlobj is modified by side effect! (if (url-type urlobj) ;; Well, they told us the scheme, let's just go with it. nil (url-set-type urlobj (or (url-type urlobj) (url-type defobj))) (url-set-port urlobj (or (url-port urlobj) (and (string= (url-type urlobj) (url-type defobj)) (url-port defobj)))) (if (not (string= "file" (url-type urlobj))) (url-set-host urlobj (or (url-host urlobj) (url-host defobj)))) (if (string= "ftp" (url-type urlobj)) (url-set-user urlobj (or (url-user urlobj) (url-user defobj)))) (if (string= (url-filename urlobj) "") (url-set-filename urlobj "/")) (if (string-match "^/" (url-filename urlobj)) nil (let ((query nil) (file nil) (sepchar nil)) (if (string-match "[?#]" (url-filename urlobj)) (setq query (substring (url-filename urlobj) (match-end 0)) file (substring (url-filename urlobj) 0 (match-beginning 0)) sepchar (substring (url-filename urlobj) (match-beginning 0) (match-end 0))) (setq file (url-filename urlobj))) (setq file (url-expander-remove-relative-links (concat (url-basepath (url-filename defobj)) file))) (url-set-filename urlobj (if query (concat file sepchar query) file)))))) (provide 'url-expand) twittering-mode-3.0.0/url-emacs21/url-file.el0000644000000000000000000002101212141747407020671 0ustar rootroot00000000000000;;; url-file.el --- File retrieval code ;; Author: $Author: fx $ ;; Created: $Date: 2002/04/22 09:14:24 $ ;; Version: $Revision: 1.11 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'mailcap) (require 'url-vars) (require 'url-parse) (require 'url-dired) (defconst url-file-default-port 21 "Default FTP port.") (defconst url-file-asynchronous-p t "FTP transfers are asynchronous.") (defalias 'url-file-expand-file-name 'url-default-expander) (defun url-file-find-possibly-compressed-file (fname &rest args) "Find the exact file referenced by `fname'. This tries the common compression extensions, because things like ange-ftp and efs are not quite smart enough to realize when a server can do automatic decompression for them, and won't find 'foo' if 'foo.gz' exists, even though the ftp server would happily serve it up to them." (let ((scratch nil) (compressed-extensions '("" ".gz" ".z" ".Z" ".bz2")) (found nil)) (while (and compressed-extensions (not found)) (if (file-exists-p (setq scratch (concat fname (pop compressed-extensions)))) (setq found scratch))) found)) (defun url-file-host-is-local-p (host) "Return t iff HOST references our local machine." (let ((case-fold-search t)) (or (null host) (string= "" host) (equal (downcase host) (downcase (system-name))) (and (string-match "^localhost$" host) t) (and (not (string-match (regexp-quote ".") host)) (equal (downcase host) (if (string-match (regexp-quote ".") (system-name)) (substring (system-name) 0 (match-beginning 0)) (system-name))))))) (defun url-file-asynch-callback (x y name buff func args &optional efs) (if (not (featurep 'ange-ftp)) ;; EFS passes us an extra argument (setq name buff buff func func args args efs)) (let ((size (nth 7 (file-attributes name)))) (save-excursion (set-buffer buff) (goto-char (point-max)) (if (/= -1 size) (insert (format "Content-length: %d\n" size))) (insert "\n") (insert-file-contents-literally name) (if (not (url-file-host-is-local-p (url-host url-current-object))) (condition-case () (delete-file name) (error nil))) (apply func args)))) (defun url-file-build-filename (url) (if (not (vectorp url)) (setq url (url-generic-parse-url url))) (let* ((user (url-user url)) (pass (url-password url)) (port (url-port url)) (host (url-host url)) (site (if (and port (/= port 21)) (if (featurep 'ange-ftp) (format "%s %d" host port) ;; This works in Emacs 21's ange-ftp too. (format "%s#%d" host port)) host)) (file (url-unhex-string (url-filename url))) (filename (if (or user (not (url-file-host-is-local-p host))) (concat "/" (or user "anonymous") "@" site ":" file) (if (and (memq system-type '(emx ms-dos windows-nt ms-windows)) (string-match "^/[a-zA-Z]:/" file)) (substring file 1) file))) pos-index) (and user pass (cond ((featurep 'ange-ftp) (ange-ftp-set-passwd host user pass)) ((or (featurep 'efs) (featurep 'efs-auto)) (efs-set-passwd host user pass)) (t nil))) ;; This makes sure that directories have a trailing directory ;; separator on them so URL expansion works right. ;; ;; FIXME? What happens if the remote system doesn't use our local ;; directory-sep-char as its separator? Would it be safer to just ;; use '/' unconditionally and rely on the FTP server to ;; straighten it out for us? (if (and (file-directory-p filename) (not (string-match (format "%c$" directory-sep-char) filename))) (url-set-filename url (format "%s%c" filename directory-sep-char))) ;; If it is a directory, look for an index file first. (if (and (file-directory-p filename) url-directory-index-file (setq pos-index (expand-file-name url-directory-index-file filename)) (file-exists-p pos-index) (file-readable-p pos-index)) (setq filename pos-index)) ;; Find the (possibly compressed) file (setq filename (url-file-find-possibly-compressed-file filename)) filename)) ;;;###autoload (defun url-file (url callback cbargs) "Handle file: and ftp: URLs." (let* ((buffer nil) (uncompressed-filename nil) (content-type nil) (content-encoding nil) (coding-system-for-read 'binary)) (setq filename (url-file-build-filename url)) (if (not filename) (error "File does not exist: %s" (url-recreate-url url))) ;; Need to figure out the content-type from the real extension, ;; not the compressed one. (setq uncompressed-filename (if (string-match "\\.\\(gz\\|Z\\|z\\)$" filename) (substring filename 0 (match-beginning 0)) filename)) (setq content-type (mailcap-extension-to-mime (url-file-extension uncompressed-filename)) content-encoding (case (intern (url-file-extension filename)) ((\.z \.gz) "gzip") (\.Z "compress") (\.uue "x-uuencoded") (\.hqx "x-hqx") (\.bz2 "x-bzip2") (otherwise nil))) (if (file-directory-p filename) ;; A directory is done the same whether we are local or remote (url-find-file-dired filename) (save-excursion (setq buffer (generate-new-buffer " *url-file*")) (set-buffer buffer) (mm-disable-multibyte) (setq url-current-object url) (insert "Content-type: " (or content-type "application/octet-stream") "\n") (if content-encoding (insert "Content-transfer-encoding: " content-encoding "\n")) (if (url-file-host-is-local-p (url-host url)) ;; Local files are handled slightly oddly (if (featurep 'ange-ftp) (url-file-asynch-callback nil nil filename (current-buffer) callback cbargs) (url-file-asynch-callback nil nil nil filename (current-buffer) callback cbargs)) ;; FTP handling (let* ((extension (url-file-extension filename)) (new (url-generate-unique-filename (and (> (length extension) 0) (concat "%s." extension))))) (if (featurep 'ange-ftp) (ange-ftp-copy-file-internal filename (expand-file-name new) t nil t (list 'url-file-asynch-callback new (current-buffer) callback cbargs) t) (autoload 'efs-copy-file-internal "efs") (efs-copy-file-internal filename (efs-ftp-path filename) new (efs-ftp-path new) t nil 0 (list 'url-file-asynch-callback new (current-buffer) callback cbargs) 0 nil)))))) buffer)) (defmacro url-file-create-wrapper (method args) (` (defalias (quote (, (intern (format "url-ftp-%s" method)))) (defun (, (intern (format "url-file-%s" method))) (, args) (, (format "FTP/FILE URL wrapper around `%s' call." method)) (setq url (url-file-build-filename url)) (and url ((, method) (,@ (remove '&rest (remove '&optional args))))))))) (url-file-create-wrapper file-exists-p (url)) (url-file-create-wrapper file-attributes (url)) (url-file-create-wrapper file-symlink-p (url)) (url-file-create-wrapper file-readable-p (url)) (url-file-create-wrapper file-writable-p (url)) (url-file-create-wrapper file-executable-p (url)) (if (featurep 'xemacs) (progn (url-file-create-wrapper directory-files (url &optional full match nosort files-only)) (url-file-create-wrapper file-truename (url &optional default))) (url-file-create-wrapper directory-files (url &optional full match nosort)) (url-file-create-wrapper file-truename (url &optional counter prev-dirs))) (provide 'url-file) twittering-mode-3.0.0/url-emacs21/url-ftp.el0000644000000000000000000000336312141747407020554 0ustar rootroot00000000000000;;; url-ftp.el --- FTP wrapper ;; Author: $Author: wmperry $ ;; Created: $Date: 1999/11/30 12:47:21 $ ;; Version: $Revision: 1.1 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; We knew not what we did when we overloaded 'file' to mean 'file' ;; and 'ftp' back in the dark ages of the web. ;; ;; This stub file is just here to please the auto-scheme-loading code ;; in url-methods.el and just maps everything onto the code in ;; url-file. (require 'url-parse) (require 'url-file) (defconst url-ftp-default-port 21 "Default FTP port.") (defconst url-ftp-asynchronous-p t "FTP transfers are asynchronous.") (defalias 'url-ftp-expand-file-name 'url-default-expander) (defalias 'url-ftp 'url-file) (provide 'url-ftp) twittering-mode-3.0.0/url-emacs21/url-gw.el0000644000000000000000000002153112141747407020375 0ustar rootroot00000000000000;;; url-gw.el --- Gateway munging for URL loading ;; Author: Bill Perry ;; Created: $Date: 2002/04/22 09:26:46 $ ;; $Revision: 1.8 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1997, 1998 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'url-vars) ;; Fixme: support SSH explicitly or via a url-gateway-rlogin-program? (autoload 'socks-open-network-stream "socks") (autoload 'open-ssl-stream "ssl") (defgroup url-gateway nil "URL gateway variables" :group 'url) (defcustom url-gateway-local-host-regexp nil "*A regular expression specifying local hostnames/machines." :type '(choice (const nil) regexp) :group 'url-gateway) (defcustom url-gateway-prompt-pattern "^[^#$%>;]*[#$%>;] *" ;; "bash\\|\$ *\r?$\\|> *\r?" "*A regular expression matching a shell prompt." :type 'regexp :group 'url-gateway) (defcustom url-gateway-rlogin-host nil "*What hostname to actually rlog into before doing a telnet." :type '(choice (const nil) string) :group 'url-gateway) (defcustom url-gateway-rlogin-user-name nil "*Username to log into the remote machine with when using rlogin." :type '(choice (const nil) string) :group 'url-gateway) (defcustom url-gateway-rlogin-parameters '("telnet" "-8") "*Parameters to `url-open-rlogin'. This list will be used as the parameter list given to rsh." :type '(repeat string) :group 'url-gateway) (defcustom url-gateway-telnet-host nil "*What hostname to actually login to before doing a telnet." :type '(choice (const nil) string) :group 'url-gateway) (defcustom url-gateway-telnet-parameters '("exec" "telnet" "-8") "*Parameters to `url-open-telnet'. This list will be executed as a command after logging in via telnet." :type '(repeat string) :group 'url-gateway) (defcustom url-gateway-telnet-login-prompt "^\r*.?login:" "*Prompt that tells us we should send our username when loggin in w/telnet." :type 'regexp :group 'url-gateway) (defcustom url-gateway-telnet-password-prompt "^\r*.?password:" "*Prompt that tells us we should send our password when loggin in w/telnet." :type 'regexp :group 'url-gateway) (defcustom url-gateway-telnet-user-name nil "User name to log in via telnet with." :type '(choice (const nil) string) :group 'url-gateway) (defcustom url-gateway-telnet-password nil "Password to use to log in via telnet with." :type '(choice (const nil) string) :group 'url-gateway) (defcustom url-gateway-broken-resolution nil "*Whether to use nslookup to resolve hostnames. This should be used when your version of Emacs cannot correctly use DNS, but your machine can. This usually happens if you are running a statically linked Emacs under SunOS 4.x" :type 'boolean :group 'url-gateway) (defcustom url-gateway-nslookup-program "nslookup" "*If non-NIL then a string naming nslookup program." :type '(choice (const :tag "None" :value nil) string) :group 'url-gateway) ;; Stolen from ange-ftp ;;;###autoload (defun url-gateway-nslookup-host (host) "Attempt to resolve the given HOST using nslookup if possible." (interactive "sHost: ") (if url-gateway-nslookup-program (let ((proc (start-process " *nslookup*" " *nslookup*" url-gateway-nslookup-program host)) (res host)) (process-kill-without-query proc) (save-excursion (set-buffer (process-buffer proc)) (while (memq (process-status proc) '(run open)) (accept-process-output proc)) (goto-char (point-min)) (if (re-search-forward "Name:.*\nAddress: *\\(.*\\)$" nil t) (setq res (buffer-substring (match-beginning 1) (match-end 1)))) (kill-buffer (current-buffer))) res) host)) ;; Stolen from red gnus nntp.el (defun url-wait-for-string (regexp proc) "Wait until string matching REGEXP arrives in process PROC's buffer." (let ((buf (current-buffer))) (goto-char (point-min)) (while (not (re-search-forward regexp nil t)) (accept-process-output proc) (set-buffer buf) (goto-char (point-min))))) ;; Stolen from red gnus nntp.el (defun url-open-rlogin (name buffer host service) "Open a connection using rsh." (if (not (stringp service)) (setq service (int-to-string service))) (let ((proc (if url-gateway-rlogin-user-name (start-process name buffer "rsh" url-gateway-rlogin-host "-l" url-gateway-rlogin-user-name (mapconcat 'identity (append url-gateway-rlogin-parameters (list host service)) " ")) (start-process name buffer "rsh" url-gateway-rlogin-host (mapconcat 'identity (append url-gateway-rlogin-parameters (list host service)) " "))))) (set-buffer buffer) (url-wait-for-string "^\r*200" proc) (beginning-of-line) (delete-region (point-min) (point)) proc)) ;; Stolen from red gnus nntp.el (defun url-open-telnet (name buffer host service) (if (not (stringp service)) (setq service (int-to-string service))) (save-excursion (set-buffer (get-buffer-create buffer)) (erase-buffer) (let ((proc (start-process name buffer "telnet" "-8")) (case-fold-search t)) (when (memq (process-status proc) '(open run)) (process-send-string proc "set escape \^X\n") (process-send-string proc (concat "open " url-gateway-telnet-host "\n")) (url-wait-for-string url-gateway-telnet-login-prompt proc) (process-send-string proc (concat (or url-gateway-telnet-user-name (setq url-gateway-telnet-user-name (read-string "login: "))) "\n")) (url-wait-for-string url-gateway-telnet-password-prompt proc) (process-send-string proc (concat (or url-gateway-telnet-password (setq url-gateway-telnet-password (funcall url-passwd-entry-func "Password: "))) "\n")) (erase-buffer) (url-wait-for-string url-gateway-prompt-pattern proc) (process-send-string proc (concat (mapconcat 'identity (append url-gateway-telnet-parameters (list host service)) " ") "\n")) (url-wait-for-string "^\r*Escape character.*\r*\n+" proc) (delete-region (point-min) (match-end 0)) (process-send-string proc "\^]\n") (url-wait-for-string "^telnet" proc) (process-send-string proc "mode character\n") (accept-process-output proc 1) (sit-for 1) (goto-char (point-min)) (forward-line 1) (delete-region (point) (point-max))) proc))) ;;;###autoload (defun url-open-stream (name buffer host service) "Open a stream to HOST, possibly via a gateway. Args per `open-network-stream'. Will not make a connexion if `url-gateway-unplugged' is non-nil." (unless url-gateway-unplugged (let ((gw-method (if (and url-gateway-local-host-regexp (not (eq 'ssl url-gateway-method)) (string-match url-gateway-local-host-regexp host)) 'native url-gateway-method)) ;;; ;; This hack is for OS/2 Emacs so that it will not do bogus CRLF ;;; ;; conversions while trying to be 'helpful' ;;; (tcp-binary-process-output-services (if (stringp service) ;;; (list service) ;;; (list service ;;; (int-to-string service)))) ;; An attempt to deal with denied connections, and attempt ;; to reconnect (cur-retries 0) (retry t) (errobj nil) (conn nil)) ;; If the user told us to do DNS for them, do it. (if url-gateway-broken-resolution (setq host (url-gateway-nslookup-host host))) (condition-case errobj ;; This is a clean way to ensure the new process inherits the ;; right coding systems in both Emacs and XEmacs. (let ((coding-system-for-read 'binary) (coding-system-for-write 'binary)) (setq conn (case gw-method (ssl (open-ssl-stream name buffer host service)) ((native) (open-network-stream name buffer host service)) (socks (socks-open-network-stream name buffer host service)) (telnet (url-open-telnet name buffer host service)) (rlogin (url-open-rlogin name buffer host service)) (otherwise (error "Bad setting of url-gateway-method: %s" url-gateway-method))))) (error (setq conn nil))) conn))) (provide 'url-gw) twittering-mode-3.0.0/url-emacs21/url-handlers.el0000644000000000000000000002204712141747407021563 0ustar rootroot00000000000000;;; url-handlers.el --- file-name-handler stuff for URL loading ;; Author: $Author: sds $ ;; Created: $Date: 2003/06/26 18:45:45 $ ;; Version: $Revision: 1.10 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url) (require 'url-parse) (require 'url-util) (require 'mm-decode) (require 'mailcap) (eval-when-compile (require 'cl)) ;; Implementation status ;; --------------------- ;; Function Status ;; ------------------------------------------------------------ ;; add-name-to-file Needs DAV Bindings ;; copy-file Broken (assumes 1st item is URL) ;; delete-directory Finished (DAV) ;; delete-file Finished (DAV) ;; diff-latest-backup-file ;; directory-file-name unnecessary (what about VMS)? ;; directory-files Finished (DAV) ;; dired-call-process ;; dired-compress-file ;; dired-uncache ;; expand-file-name Finished ;; file-accessible-directory-p ;; file-attributes Finished, better with DAV ;; file-directory-p Needs DAV, finished ;; file-executable-p Finished ;; file-exists-p Finished ;; file-local-copy ;; file-modes ;; file-name-all-completions Finished (DAV) ;; file-name-as-directory ;; file-name-completion Finished (DAV) ;; file-name-directory ;; file-name-nondirectory ;; file-name-sans-versions why? ;; file-newer-than-file-p ;; file-ownership-preserved-p No way to know ;; file-readable-p Finished ;; file-regular-p !directory_p ;; file-symlink-p Needs DAV bindings ;; file-truename Needs DAV bindings ;; file-writable-p Check for LOCK? ;; find-backup-file-name why? ;; get-file-buffer why? ;; insert-directory Use DAV ;; insert-file-contents Finished ;; load ;; make-directory Finished (DAV) ;; make-symbolic-link Needs DAV bindings ;; rename-file Finished (DAV) ;; set-file-modes Use mod_dav specific executable flag? ;; set-visited-file-modtime Impossible? ;; shell-command Impossible? ;; unhandled-file-name-directory ;; vc-registered Finished (DAV) ;; verify-visited-file-modtime ;; write-region (defvar url-handler-regexp "\\`\\(https?\\|ftp\\|file\\|nfs\\)://" "*A regular expression for matching URLs handled by file-name-handler-alist. Some valid URL protocols just do not make sense to visit interactively \(about, data, info, irc, mailto, etc\). This regular expression avoids conflicts with local files that look like URLs \(Gnus is particularly bad at this\).") ;;;###autoload (defun url-setup-file-name-handlers () "Setup file-name handlers." (cond ((not (boundp 'file-name-handler-alist)) nil) ; Don't load if no alist ((rassq 'url-file-handler file-name-handler-alist) nil) ; Don't load twice (t (push (cons url-handler-regexp 'url-file-handler) file-name-handler-alist)))) (defun url-run-real-handler (operation args) (let ((inhibit-file-name-handlers (cons 'url-file-handler (if (eq operation inhibit-file-name-operation) inhibit-file-name-handlers))) (inhibit-file-name-operation operation)) (apply operation args))) (defun url-file-handler (operation &rest args) "Function called from the `file-name-handler-alist' routines. OPERATION is what needs to be done (`file-exists-p', etc). ARGS are the arguments that would have been passed to OPERATION." (let ((fn (or (get operation 'url-file-handlers) (intern-soft (format "url-%s" operation)))) (val nil) (hooked nil)) (if (and fn (fboundp fn)) (setq hooked t val (apply fn args)) (setq hooked nil val (url-run-real-handler operation args))) (url-debug 'handlers "%s %S%S => %S" (if hooked "Hooked" "Real") operation args val) val)) (defun url-file-handler-identity (&rest args) ;; Identity function (car args)) ;; These are operations that we can fully support (put 'file-readable-p 'url-file-handlers 'url-file-exists-p) (put 'substitute-in-file-name 'url-file-handlers 'url-file-handler-identity) (put 'file-name-absolute-p 'url-file-handlers (lambda (&rest ignored) t)) (put 'expand-file-name 'url-file-handlers 'url-handler-expand-file-name) ;; These are operations that we do not support yet (DAV!!!) (put 'file-writable-p 'url-file-handlers 'ignore) (put 'file-symlink-p 'url-file-handlers 'ignore) (defun url-handler-expand-file-name (file &optional base) (if (file-name-absolute-p file) (expand-file-name file "/") (url-expand-file-name file base))) ;; The actual implementation ;;;###autoload (defun url-copy-file (url newname &optional ok-if-already-exists keep-time) "Copy URL to NEWNAME. Both args must be strings. Signals a `file-already-exists' error if file NEWNAME already exists, unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil. A number as third arg means request confirmation if NEWNAME already exists. This is what happens in interactive use with M-x. Fourth arg KEEP-TIME non-nil means give the new file the same last-modified time as the old one. (This works on only some systems.) A prefix arg makes KEEP-TIME non-nil." (if (and (file-exists-p newname) (not ok-if-already-exists)) (error "Opening output file: File already exists, %s" newname)) (let ((buffer (url-retrieve-synchronously url)) (handle nil)) (if (not buffer) (error "Opening input file: No such file or directory, %s" url)) (save-excursion (set-buffer buffer) (setq handle (mm-dissect-buffer t))) (mm-save-part-to-file handle newname) (kill-buffer buffer) (mm-destroy-parts handle))) ;;;###autoload (defun url-file-local-copy (url &rest ignored) "Copy URL into a temporary file on this machine. Returns the name of the local copy, or nil, if FILE is directly accessible." (let ((filename (make-temp-name "url"))) (url-copy-file url filename) filename)) ;;;###autoload (defun url-insert-file-contents (url &optional visit beg end replace) (let ((buffer (url-retrieve-synchronously url)) (handle nil) (data nil)) (if (not buffer) (error "Opening input file: No such file or directory, %s" url)) (if visit (setq buffer-file-name url)) (save-excursion (set-buffer buffer) (setq handle (mm-dissect-buffer t)) (set-buffer (mm-handle-buffer handle)) (if beg (setq data (buffer-substring beg end)) (setq data (buffer-string)))) (kill-buffer buffer) (mm-destroy-parts handle) (if replace (delete-region (point-min) (point-max))) (save-excursion (insert data)) (list url (length data)))) (defun url-file-name-completion (url directory) (error "Unimplemented")) (defun url-file-name-all-completions (file directory) (error "Unimplemented")) ;; All other handlers map onto their respective backends. (defmacro url-handlers-create-wrapper (method args) `(defun ,(intern (format "url-%s" method)) ,args ,(format "URL file-name-handler wrapper for `%s' call.\n---\n%s" method (or (documentation method t) "No original documentation.")) (setq url (url-generic-parse-url url)) (when (url-type url) (funcall (url-scheme-get-property (url-type url) (quote ,method)) ,@(remove '&rest (remove '&optional args)))))) (url-handlers-create-wrapper file-exists-p (url)) (url-handlers-create-wrapper file-attributes (url)) (url-handlers-create-wrapper file-symlink-p (url)) (url-handlers-create-wrapper file-writable-p (url)) (url-handlers-create-wrapper file-directory-p (url)) (url-handlers-create-wrapper file-executable-p (url)) (if (featurep 'xemacs) (progn ;; XEmacs specific prototypes (url-handlers-create-wrapper directory-files (url &optional full match nosort files-only)) (url-handlers-create-wrapper file-truename (url &optional default))) ;; Emacs specific prototypes (url-handlers-create-wrapper directory-files (url &optional full match nosort)) (url-handlers-create-wrapper file-truename (url &optional counter prev-dirs))) (add-hook 'find-file-hooks 'url-handlers-set-buffer-mode) (defun url-handlers-set-buffer-mode () "Set correct modes for the current buffer if visiting a remote file." (and (stringp buffer-file-name) (string-match url-handler-regexp buffer-file-name) (auto-save-mode 0))) (provide 'url-handlers) twittering-mode-3.0.0/url-emacs21/url-history.el0000644000000000000000000001550112141747407021461 0ustar rootroot00000000000000;;; url-history.el --- Global history tracking for URL package ;; Author: $Author: fx $ ;; Created: $Date: 2001/05/05 16:49:52 $ ;; Version: $Revision: 1.6 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This can get a recursive require. ;;(require 'url) (eval-when-compile (require 'cl)) (require 'url-parse) (autoload 'url-do-setup "url") (defgroup url-history nil "History variables in the URL package" :prefix "url-history" :group 'url) (defcustom url-history-track nil "*Controls whether to keep a list of all the URLS being visited. If non-nil, url will keep track of all the URLS visited. If eq to `t', then the list is saved to disk at the end of each emacs session." :type 'boolean :group 'url-history) (defcustom url-history-file nil "*The global history file for the URL package. This file contains a list of all the URLs you have visited. This file is parsed at startup and used to provide URL completion." :type '(choice (const :tag "Default" :value nil) file) :group 'url-history) (defcustom url-history-save-interval 3600 "*The number of seconds between automatic saves of the history list. Default is 1 hour. Note that if you change this variable outside of the `customize' interface after `url-do-setup' has been run, you need to run the `url-history-setup-save-timer' function manually." :set (function (lambda (var val) (set-default var val) (and (featurep 'url) (fboundp 'url-history-setup-save-timer) (let ((def (symbol-function 'url-history-setup-save-timer))) (not (and (listp def) (eq 'autoload (car def))))) (url-history-setup-save-timer)))) :type 'integer :group 'url-history) (defvar url-history-timer nil) (defvar url-history-list nil "List of urls visited this session.") (defvar url-history-changed-since-last-save nil "Whether the history list has changed since the last save operation.") (defvar url-history-hash-table nil "Hash table for global history completion.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;###autoload (defun url-history-setup-save-timer () "Reset the history list timer." (interactive) (cond ((featurep 'itimer) (ignore-errors (delete-itimer url-history-timer)) (setq url-history-timer nil) (if url-history-save-interval (setq url-history-timer (start-itimer "url-history-saver" 'url-history-save-history url-history-save-interval url-history-save-interval)))) ((fboundp 'run-at-time) (ignore-errors (cancel-timer url-history-timer)) (setq url-history-timer nil) (if url-history-save-interval (setq url-history-timer (run-at-time url-history-save-interval url-history-save-interval 'url-history-save-history)))) (t nil))) ;;;###autoload (defun url-history-parse-history (&optional fname) "Parse a history file stored in FNAME." ;; Parse out the mosaic global history file for completions, etc. (or fname (setq fname (expand-file-name url-history-file))) (cond ((not (file-exists-p fname)) (message "%s does not exist." fname)) ((not (file-readable-p fname)) (message "%s is unreadable." fname)) (t (condition-case nil (load fname nil t) (error (message "Could not load %s" fname))))) (if (not url-history-hash-table) (setq url-history-hash-table (make-hash-table :size 31 :test 'equal)))) (defun url-history-update-url (url time) (setq url-history-changed-since-last-save t) (puthash (if (vectorp url) (url-recreate-url url) url) time url-history-hash-table)) ;;;###autoload (defun url-history-save-history (&optional fname) "Write the global history file into `url-history-file'. The type of data written is determined by what is in the file to begin with. If the type of storage cannot be determined, then prompt the user for what type to save as." (interactive) (or fname (setq fname (expand-file-name url-history-file))) (cond ((not url-history-changed-since-last-save) nil) ((not (file-writable-p fname)) (message "%s is unwritable." fname)) (t (let ((make-backup-files nil) (version-control nil) (require-final-newline t)) (save-excursion (set-buffer (get-buffer-create " *url-tmp*")) (erase-buffer) (let ((count 0)) (maphash (function (lambda (key value) (while (string-match "[\r\n]+" key) (setq key (concat (substring key 0 (match-beginning 0)) (substring key (match-end 0) nil)))) (setq count (1+ count)) (insert "(puthash \"" key "\"" (if (not (stringp value)) " '" "") (prin1-to-string value) " url-history-hash-table)\n"))) url-history-hash-table) (goto-char (point-min)) (insert (format "(setq url-history-hash-table (make-hash-table :size %d :test 'equal))\n" (/ count 4))) (goto-char (point-max)) (insert "\n") (write-file fname)) (kill-buffer (current-buffer)))))) (setq url-history-changed-since-last-save nil)) (defun url-have-visited-url (url) (url-do-setup) (gethash url url-history-hash-table nil)) (defun url-completion-function (string predicate function) (url-do-setup) (cond ((eq function nil) (let ((list nil)) (maphash (function (lambda (key val) (setq list (cons (cons key val) list)))) url-history-hash-table) (try-completion string (nreverse list) predicate))) ((eq function t) (let ((stub (concat "^" (regexp-quote string))) (retval nil)) (maphash (function (lambda (url time) (if (string-match stub url) (setq retval (cons url retval))))) url-history-hash-table) retval)) ((eq function 'lambda) (and url-history-hash-table (gethash string url-history-hash-table) t)) (t (error "url-completion-function very confused.")))) (provide 'url-history) twittering-mode-3.0.0/url-emacs21/url-http.el0000644000000000000000000013124712141747407020745 0ustar rootroot00000000000000;;; url-http.el --- HTTP retrieval routines ;; Author: Bill Perry ;; Version: $Revision: 1.39 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1999, 2001 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl) (defvar url-http-extra-headers)) (require 'url-gw) (require 'url-util) (require 'url-parse) (require 'url-cookie) (require 'mail-parse) (require 'url-auth) (autoload 'url-retrieve-synchronously "url") (autoload 'url-retrieve "url") (autoload 'url-cache-create-filename "url-cache") (autoload 'url-mark-buffer-as-dead "url") (defconst url-http-default-port 80 "Default HTTP port.") (defconst url-http-asynchronous-p t "HTTP retrievals are asynchronous.") (defalias 'url-http-expand-file-name 'url-default-expander) (defvar url-http-real-basic-auth-storage nil) (defvar url-http-proxy-basic-auth-storage nil) (defvar url-http-open-connections (make-hash-table :test 'equal :size 17) "A hash table of all open network connections.") (defvar url-http-version "1.1" "What version of HTTP we advertise, as a string. Valid values are 1.1 and 1.0. This is only useful when debugging the HTTP subsystem. Setting this to 1.0 will tell servers not to send chunked encoding, and other HTTP/1.1 specific features. ") (defvar url-http-attempt-keepalives t "Whether to use a single TCP connection multiple times in HTTP. This is only useful when debugging the HTTP subsystem. Setting to `nil' will explicitly close the connection to the server after every request. ") ;(eval-when-compile ;; These are all macros so that they are hidden from external sight ;; when the file is byte-compiled. ;; ;; This allows us to expose just the entry points we want. ;; These routines will allow us to implement persistent HTTP ;; connections. (defsubst url-http-debug (&rest args) (if quit-flag (let ((proc (get-buffer-process (current-buffer)))) ;; The user hit C-g, honor it! Some things can get in an ;; incredibly tight loop (chunked encoding) (if proc (progn (set-process-sentinel proc nil) (set-process-filter proc nil))) (error "Transfer interrupted!"))) (apply 'url-debug 'http args)) (defun url-http-mark-connection-as-busy (host port proc) (url-http-debug "Marking connection as busy: %s:%d %S" host port proc) (puthash (cons host port) (delq proc (gethash (cons host port) url-http-open-connections)) url-http-open-connections) proc) (defun url-http-mark-connection-as-free (host port proc) (url-http-debug "Marking connection as free: %s:%d %S" host port proc) (set-process-buffer proc nil) (set-process-sentinel proc 'url-http-idle-sentinel) (puthash (cons host port) (cons proc (gethash (cons host port) url-http-open-connections)) url-http-open-connections) nil) (defun url-http-find-free-connection (host port) (let ((conns (gethash (cons host port) url-http-open-connections)) (found nil)) (while (and conns (not found)) (if (not (memq (process-status (car conns)) '(run open))) (progn (url-http-debug "Cleaning up dead process: %s:%d %S" host port (car conns)) (url-http-idle-sentinel (car conns) nil)) (setq found (car conns)) (url-http-debug "Found existing connection: %s:%d %S" host port found)) (pop conns)) (if found (url-http-debug "Reusing existing connection: %s:%d" host port) (url-http-debug "Contacting host: %s:%d" host port)) (url-lazy-message "Contacting host: %s:%d" host port) (url-http-mark-connection-as-busy host port (or found (url-open-stream host nil host port))))) ;; Building an HTTP request (defun url-http-user-agent-string () (if (or (eq url-privacy-level 'paranoid) (and (listp url-privacy-level) (memq 'agent url-privacy-level))) "" (format "User-Agent: %sURL/%s%s\r\n" (if url-package-name (concat url-package-name "/" url-package-version " ") "") url-version (cond ((and url-os-type url-system-type) (concat " (" url-os-type "; " url-system-type ")")) ((or url-os-type url-system-type) (concat " (" (or url-system-type url-os-type) ")")) (t ""))))) (defun url-http-create-request (url &optional ref-url) "Create an HTTP request for URL, referred to by REF-URL." (declare (special proxy-object proxy-info)) (let* ((extra-headers) (request nil) (no-cache (cdr-safe (assoc "Pragma" url-request-extra-headers))) (proxy-obj (and (boundp 'proxy-object) proxy-object)) (proxy-auth (if (or (cdr-safe (assoc "Proxy-Authorization" url-request-extra-headers)) (not proxy-obj)) nil (let ((url-basic-auth-storage 'url-http-proxy-basic-auth-storage)) (url-get-authentication url nil 'any nil)))) (real-fname (if proxy-obj (url-recreate-url proxy-obj) (url-filename url))) (host (url-host (or proxy-obj url))) (auth (if (cdr-safe (assoc "Authorization" url-request-extra-headers)) nil (url-get-authentication (or (and (boundp 'proxy-info) proxy-info) url) nil 'any nil)))) (if (equal "" real-fname) (setq real-fname "/")) (setq no-cache (and no-cache (string-match "no-cache" no-cache))) (if auth (setq auth (concat "Authorization: " auth "\r\n"))) (if proxy-auth (setq proxy-auth (concat "Proxy-Authorization: " proxy-auth "\r\n"))) ;; Protection against stupid values in the referer (if (and ref-url (stringp ref-url) (or (string= ref-url "file:nil") (string= ref-url ""))) (setq ref-url nil)) ;; We do not want to expose the referer if the user is paranoid. (if (or (memq url-privacy-level '(low high paranoid)) (and (listp url-privacy-level) (memq 'lastloc url-privacy-level))) (setq ref-url nil)) ;; url-request-extra-headers contains an assoc-list of ;; header/value pairs that we need to put into the request. (setq extra-headers (mapconcat (lambda (x) (concat (car x) ": " (cdr x))) url-request-extra-headers "\r\n")) (if (not (equal extra-headers "")) (setq extra-headers (concat extra-headers "\r\n"))) ;; This was done with a call to `format'. Concatting parts has ;; the advantage of keeping the parts of each header togther and ;; allows us to elide null lines directly, at the cost of making ;; the layout less clear. (setq request (concat ;; The request (or url-request-method "GET") " " real-fname " HTTP/" url-http-version "\r\n" ;; Version of MIME we speak "MIME-Version: 1.0\r\n" ;; (maybe) Try to keep the connection open "Connection: " (if (or proxy-obj (not url-http-attempt-keepalives)) "close" "keep-alive") "\r\n" ;; HTTP extensions we support (if url-extensions-header (format "Extension: %s\r\n" url-extensions-header)) ;; Who we want to talk to (if (/= (url-port (or proxy-obj url)) (url-scheme-get-property (url-type (or proxy-obj url)) 'default-port)) (format "Host: %s:%d\r\n" host (url-port (or proxy-obj url))) (format "Host: %s\r\n" host)) ;; Who its from (if url-personal-mail-address (concat "From: " url-personal-mail-address "\r\n")) ;; Encodings we understand (if url-mime-encoding-string (concat "Accept-encoding: " url-mime-encoding-string "\r\n")) (if url-mime-charset-string (concat "Accept-charset: " url-mime-charset-string "\r\n")) ;; Languages we understand (if url-mime-language-string (concat "Accept-language: " url-mime-language-string "\r\n")) ;; Types we understand "Accept: " (or url-mime-accept-string "*/*") "\r\n" ;; User agent (url-http-user-agent-string) ;; Proxy Authorization proxy-auth ;; Authorization auth ;; Cookies (url-cookie-generate-header-lines host real-fname (equal "https" (url-type url))) ;; If-modified-since (if (and (not no-cache) (member url-request-method '("GET" nil))) (let ((tm (url-is-cached (or proxy-obj url)))) (if tm (concat "If-modified-since: " (url-get-normalized-date tm) "\r\n")))) ;; Whence we came (if ref-url (concat "Referer: " ref-url "\r\n")) extra-headers ;; Any data (if url-request-data (concat "Content-length: " (number-to-string (length url-request-data)) "\r\n\r\n" url-request-data)) ;; End request "\r\n")) (url-http-debug "Request is: \n%s" request) request)) ;; Parsing routines (defun url-http-clean-headers () "Remove trailing \r from header lines. This allows us to use `mail-fetch-field', etc." (declare (special url-http-end-of-headers)) (goto-char (point-min)) (while (re-search-forward "\r$" url-http-end-of-headers t) (replace-match ""))) (defun url-http-handle-authentication (proxy) (declare (special status success url-http-method url-http-data url-callback-function url-callback-arguments)) (url-http-debug "Handling %s authentication" (if proxy "proxy" "normal")) (let ((auth (or (mail-fetch-field (if proxy "proxy-authenticate" "www-authenticate")) "basic")) (type nil) ;; in case there is a proxy, `url-current-object' points at this proxy ;; => retrieve URL from `url-callback-arguments' (url (car url-callback-arguments)) (url-basic-auth-storage 'url-http-real-basic-auth-storage) ) ;; Cheating, but who cares? :) (if proxy (setq url-basic-auth-storage 'url-http-proxy-basic-auth-storage)) (setq auth (url-eat-trailing-space (url-strip-leading-spaces auth))) (if (string-match "[ \t]" auth) (setq type (downcase (substring auth 0 (match-beginning 0)))) (setq type (downcase auth))) (if (not (url-auth-registered type)) (progn (widen) (goto-char (point-max)) (insert "
Sorry, but I do not know how to handle " type " authentication. If you'd like to write it," " send it to " url-bug-address ".
") (setq status t)) (let* ((args auth) (ctr (1- (length args))) auth) (while (/= 0 ctr) (if (char-equal ?, (aref args ctr)) (aset args ctr ?\;)) (setq ctr (1- ctr))) (setq args (url-parse-args args) auth (url-get-authentication url (cdr-safe (assoc "realm" args)) type t args)) (if (not auth) (setq success t) (push (cons (if proxy "Proxy-Authorization" "Authorization") auth) url-http-extra-headers) (let ((url-request-method url-http-method) (url-request-data url-http-data) (url-request-extra-headers url-http-extra-headers)) (url-retrieve url url-callback-function url-callback-arguments)))) (kill-buffer (current-buffer))))) (defun url-http-parse-response () "Parse just the response code." (declare (special url-http-end-of-headers url-http-response-status)) (if (not url-http-end-of-headers) (error "Trying to parse HTTP response code in odd buffer: %s" (buffer-name))) (url-http-debug "url-http-parse-response called in (%s)" (buffer-name)) (goto-char (point-min)) (while (and (not (looking-at "^HTTP")) (not (forward-line 1)))) (skip-chars-forward " \t\n") ; Skip any blank crap (skip-chars-forward "HTTP/") ; Skip HTTP Version (read (current-buffer)) (setq url-http-response-status (read (current-buffer)))) (defun url-http-handle-cookies () "Handle all set-cookie / set-cookie2 headers in an HTTP response. The buffer must already be narrowed to the headers, so mail-fetch-field will work correctly." (let ((cookies (mail-fetch-field "Set-Cookie" nil nil t)) (cookies2 (mail-fetch-field "Set-Cookie2" nil nil t))) (and cookies (url-http-debug "Found %d Set-Cookie headers" (length cookies))) (and cookies2 (url-http-debug "Found %d Set-Cookie2 headers" (length cookies2))) (while cookies (url-cookie-handle-set-cookie (pop cookies))) ;;; (while cookies2 ;;; (url-cookie-handle-set-cookie2 (pop cookies))) ) ) (defun url-http-parse-headers () "Parse and handle HTTP specific headers. Return t if and only if the current buffer is still active and should be shown to the user." ;; The comments after each status code handled are taken from RFC ;; 2616 (HTTP/1.1) (declare (special url-http-end-of-headers url-http-response-status url-http-method url-http-data url-http-process url-callback-function url-callback-arguments)) (url-http-mark-connection-as-free (url-host url-current-object) (url-port url-current-object) url-http-process) (if (or (not (boundp 'url-http-end-of-headers)) (not url-http-end-of-headers)) (error "Trying to parse headers in odd buffer: %s" (buffer-name))) (goto-char (point-min)) (url-http-debug "url-http-parse-headers called in (%s)" (buffer-name)) (url-http-parse-response) (mail-narrow-to-head) ;;(narrow-to-region (point-min) url-http-end-of-headers) (let ((parse-buffer (current-buffer)) (version nil) (class nil) (success nil)) (setq class (/ url-http-response-status 100)) (url-http-debug "Parsed HTTP headers: class=%d status=%d" class url-http-response-status) (url-http-handle-cookies) (case class ;; Classes of response codes ;; ;; 5xx = Server Error ;; 4xx = Client Error ;; 3xx = Redirection ;; 2xx = Successful ;; 1xx = Informational (1 ; Information messages ;; 100 = Continue with request ;; 101 = Switching protocols ;; 102 = Processing (Added by DAV) (url-mark-buffer-as-dead parse-buffer) (error "HTTP responses in class 1xx not supported (%d)" url-http-response-status)) (2 ; Success ;; 200 Ok ;; 201 Created ;; 202 Accepted ;; 203 Non-authoritative information ;; 204 No content ;; 205 Reset content ;; 206 Partial content ;; 207 Multi-status (Added by DAV) (case url-http-response-status ((204 205) ;; No new data, just stay at the same document (url-mark-buffer-as-dead parse-buffer) (setq success t)) (otherwise ;; Generic success for all others. Store in the cache, and ;; mark it as successful. (widen) (if (equal url-http-method "GET") (url-store-in-cache parse-buffer)) (setq success t)))) (3 ; Redirection ;; 300 Multiple choices ;; 301 Moved permanently ;; 302 Found ;; 303 See other ;; 304 Not modified ;; 305 Use proxy ;; 307 Temporary redirect (let ((redirect-uri (or (mail-fetch-field "Location") (mail-fetch-field "URI")))) (case url-http-response-status (300 ;; Quoth the spec (section 10.3.1) ;; ------------------------------- ;; The requested resource corresponds to any one of a set of ;; representations, each with its own specific location and ;; agent-driven negotiation information is being provided so ;; that the user can select a preferred representation and ;; redirect its request to that location. ;; [...] ;; If the server has a preferred choice of representation, it ;; SHOULD include the specific URI for that representation in ;; the Location field; user agents MAY use the Location field ;; value for automatic redirection. ;; ------------------------------- ;; We do not support agent-driven negotiation, so we just ;; redirect to the preferred URI if one is provided. nil) ((301 302 307) ;; If the 301|302 status code is received in response to a ;; request other than GET or HEAD, the user agent MUST NOT ;; automatically redirect the request unless it can be ;; confirmed by the user, since this might change the ;; conditions under which the request was issued. (if (member url-http-method '("HEAD" "GET")) ;; Automatic redirection is ok nil ;; It is just too big of a pain in the ass to get this ;; prompt all the time. We will just silently lose our ;; data and convert to a GET method. (url-http-debug "Converting `%s' request to `GET' because of REDIRECT(%d)" url-http-method url-http-response-status) (setq url-http-method "GET" url-request-data nil))) (303 ;; The response to the request can be found under a different ;; URI and SHOULD be retrieved using a GET method on that ;; resource. (setq url-http-method "GET" url-http-data nil)) (304 ;; The 304 response MUST NOT contain a message-body. (url-http-debug "Extracting document from cache... (%s)" (url-cache-create-filename (url-view-url t))) (url-cache-extract (url-cache-create-filename (url-view-url t))) (setq redirect-uri nil success t)) (305 ;; The requested resource MUST be accessed through the ;; proxy given by the Location field. The Location field ;; gives the URI of the proxy. The recipient is expected ;; to repeat this single request via the proxy. 305 ;; responses MUST only be generated by origin servers. (error "Redirection thru a proxy server not supported: %s" redirect-uri)) (otherwise ;; Treat everything like '300' nil)) (when redirect-uri ;; Clean off any whitespace and/or <...> cruft. (if (string-match "\\([^ \t]+\\)[ \t]" redirect-uri) (setq redirect-uri (match-string 1 redirect-uri))) (if (string-match "^<\\(.*\\)>$" redirect-uri) (setq redirect-uri (match-string 1 redirect-uri))) ;; Some stupid sites (like sourceforge) send a ;; non-fully-qualified URL (ie: /), which royally confuses ;; the URL library. (if (not (string-match url-nonrelative-link redirect-uri)) (setq redirect-uri (url-expand-file-name redirect-uri))) (let ((url-request-method url-http-method) (url-request-data url-http-data) (url-request-extra-headers url-http-extra-headers)) ;; on some systems, we have to wait in order to avoid drawing a blank page (and url-slow-proxy-requires-waiting-for (sleep-for url-slow-proxy-requires-waiting-for)) (url-retrieve redirect-uri url-callback-function (cons redirect-uri (and url-callback-arguments (cdr url-callback-arguments)))) (url-mark-buffer-as-dead parse-buffer))))) (4 ; Client error ;; 400 Bad Request ;; 401 Unauthorized ;; 402 Payment required ;; 403 Forbidden ;; 404 Not found ;; 405 Method not allowed ;; 406 Not acceptable ;; 407 Proxy authentication required ;; 408 Request time-out ;; 409 Conflict ;; 410 Gone ;; 411 Length required ;; 412 Precondition failed ;; 413 Request entity too large ;; 414 Request-URI too large ;; 415 Unsupported media type ;; 416 Requested range not satisfiable ;; 417 Expectation failed ;; 422 Unprocessable Entity (Added by DAV) ;; 423 Locked ;; 424 Failed Dependency (case url-http-response-status (401 ;; The request requires user authentication. The response ;; MUST include a WWW-Authenticate header field containing a ;; challenge applicable to the requested resource. The ;; client MAY repeat the request with a suitable ;; Authorization header field. (url-http-handle-authentication nil)) (402 ;; This code is reserved for future use (url-mark-buffer-as-dead parse-buffer) (error "Somebody wants you to give them money")) (403 ;; The server understood the request, but is refusing to ;; fulfill it. Authorization will not help and the request ;; SHOULD NOT be repeated. (setq success t)) (404 ;; Not found (setq success t)) (405 ;; The method specified in the Request-Line is not allowed ;; for the resource identified by the Request-URI. The ;; response MUST include an Allow header containing a list of ;; valid methods for the requested resource. (setq success t)) (406 ;; The resource identified by the request is only capable of ;; generating response entities which have content ;; characteristics nota cceptable according to the accept ;; headers sent in the request. (setq success t)) (407 ;; This code is similar to 401 (Unauthorized), but indicates ;; that the client must first authenticate itself with the ;; proxy. The proxy MUST return a Proxy-Authenticate header ;; field containing a challenge applicable to the proxy for ;; the requested resource. (url-http-handle-authentication t)) (408 ;; The client did not produce a request within the time that ;; the server was prepared to wait. The client MAY repeat ;; the request without modifications at any later time. (setq success t)) (409 ;; The request could not be completed due to a conflict with ;; the current state of the resource. This code is only ;; allowed in situations where it is expected that the user ;; mioght be able to resolve the conflict and resubmit the ;; request. The response body SHOULD include enough ;; information for the user to recognize the source of the ;; conflict. (setq success t)) (410 ;; The requested resource is no longer available at the ;; server and no forwarding address is known. (setq success t)) (411 ;; The server refuses to accept the request without a defined ;; Content-Length. The client MAY repeat the request if it ;; adds a valid Content-Length header field containing the ;; length of the message-body in the request message. ;; ;; NOTE - this will never happen because ;; `url-http-create-request' automatically calculates the ;; content-length. (setq success t)) (412 ;; The precondition given in one or more of the ;; request-header fields evaluated to false when it was ;; tested on the server. (setq success t)) ((413 414) ;; The server is refusing to process a request because the ;; request entity|URI is larger than the server is willing or ;; able to process. (setq success t)) (415 ;; The server is refusing to service the request because the ;; entity of the request is in a format not supported by the ;; requested resource for the requested method. (setq success t)) (416 ;; A server SHOULD return a response with this status code if ;; a request included a Range request-header field, and none ;; of the range-specifier values in this field overlap the ;; current extent of the selected resource, and the request ;; did not include an If-Range request-header field. (setq success t)) (417 ;; The expectation given in an Expect request-header field ;; could not be met by this server, or, if the server is a ;; proxy, the server has unambiguous evidence that the ;; request could not be met by the next-hop server. (setq success t)) (otherwise ;; The request could not be understood by the server due to ;; malformed syntax. The client SHOULD NOT repeat the ;; request without modifications. (setq success t)))) (5 ;; 500 Internal server error ;; 501 Not implemented ;; 502 Bad gateway ;; 503 Service unavailable ;; 504 Gateway time-out ;; 505 HTTP version not supported ;; 507 Insufficient storage (setq success t) (case url-http-response-status (501 ;; The server does not support the functionality required to ;; fulfill the request. nil) (502 ;; The server, while acting as a gateway or proxy, received ;; an invalid response from the upstream server it accessed ;; in attempting to fulfill the request. nil) (503 ;; The server is currently unable to handle the request due ;; to a temporary overloading or maintenance of the server. ;; The implication is that this is a temporary condition ;; which will be alleviated after some delay. If known, the ;; length of the delay MAY be indicated in a Retry-After ;; header. If no Retry-After is given, the client SHOULD ;; handle the response as it would for a 500 response. nil) (504 ;; The server, while acting as a gateway or proxy, did not ;; receive a timely response from the upstream server ;; specified by the URI (e.g. HTTP, FTP, LDAP) or some other ;; auxiliary server (e.g. DNS) it needed to access in ;; attempting to complete the request. nil) (505 ;; The server does not support, or refuses to support, the ;; HTTP protocol version that was used in the request ;; message. nil) (507 ; DAV ;; The method could not be performed on the resource ;; because the server is unable to store the representation ;; needed to successfully complete the request. This ;; condition is considered to be temporary. If the request ;; which received this status code was the result of a user ;; action, the request MUST NOT be repeated until it is ;; requested by a separate user action. nil))) (otherwise (error "Unknown class of HTTP response code: %d (%d)" class url-http-response-status))) (if (not success) (url-mark-buffer-as-dead parse-buffer)) (url-http-debug "Finished parsing HTTP headers: %S" success) (widen) success)) ;; Miscellaneous (defun url-http-activate-callback () "Activate callback specified when this buffer was created." (declare (special url-http-process url-callback-function url-callback-arguments)) (url-http-mark-connection-as-free (url-host url-current-object) (url-port url-current-object) url-http-process) (url-http-debug "Activating callback in buffer (%s)" (buffer-name)) (apply url-callback-function url-callback-arguments)) ;; ) ;; These unfortunately cannot be macros... please ignore them! (defun url-http-idle-sentinel (proc why) "Remove this (now defunct) process PROC from the list of open connections." (maphash (lambda (key val) (if (memq proc val) (puthash key (delq proc val) url-http-open-connections))) url-http-open-connections)) (defun url-http-end-of-document-sentinel (proc why) ;; Sentinel used for old HTTP/0.9 or connections we know are going ;; to die as the 'end of document' notifier. (url-http-debug "url-http-end-of-document-sentinel in buffer (%s)" (process-buffer proc)) (url-http-idle-sentinel proc why) (save-excursion (set-buffer (process-buffer proc)) (goto-char (point-min)) (if (not (looking-at "HTTP/")) ;; HTTP/0.9 just gets passed back no matter what (url-http-activate-callback) (if (url-http-parse-headers) (url-http-activate-callback))))) (defun url-http-simple-after-change-function (st nd length) ;; Function used when we do NOT know how long the document is going to be ;; Just _very_ simple 'downloaded %d' type of info. (declare (special url-http-end-of-headers)) (url-lazy-message "Reading %s..." (url-pretty-length nd))) (defun url-http-content-length-after-change-function (st nd length) "Function used when we DO know how long the document is going to be. More sophisticated percentage downloaded, etc. Also does minimal parsing of HTTP headers and will actually cause the callback to be triggered." (declare (special url-current-object url-http-end-of-headers url-http-content-length url-http-content-type url-http-process)) (if url-http-content-type (url-display-percentage "Reading [%s]... %s of %s (%d%%)" (url-percentage (- nd url-http-end-of-headers) url-http-content-length) url-http-content-type (url-pretty-length (- nd url-http-end-of-headers)) (url-pretty-length url-http-content-length) (url-percentage (- nd url-http-end-of-headers) url-http-content-length)) (url-display-percentage "Reading... %s of %s (%d%%)" (url-percentage (- nd url-http-end-of-headers) url-http-content-length) (url-pretty-length (- nd url-http-end-of-headers)) (url-pretty-length url-http-content-length) (url-percentage (- nd url-http-end-of-headers) url-http-content-length))) (if (> (- nd url-http-end-of-headers) url-http-content-length) (progn ;; Found the end of the document! Wheee! (url-display-percentage nil nil) (message "Reading... done.") (if (url-http-parse-headers) (url-http-activate-callback))))) (defun url-http-chunked-encoding-after-change-function (st nd length) "Function used when dealing with 'chunked' encoding. Cannot give a sophisticated percentage, but we need a different function to look for the special 0-length chunk that signifies the end of the document." (declare (special url-current-object url-http-end-of-headers url-http-content-type url-http-chunked-length url-http-chunked-counter url-http-process url-http-chunked-start)) (save-excursion (goto-char st) (let ((read-next-chunk t) (case-fold-search t) (regexp nil) (no-initial-crlf nil)) ;; We need to loop thru looking for more chunks even within ;; one after-change-function call. (while read-next-chunk (setq no-initial-crlf (= 0 url-http-chunked-counter)) (if url-http-content-type (url-display-percentage nil "Reading [%s]... chunk #%d" url-http-content-type url-http-chunked-counter) (url-display-percentage nil "Reading... chunk #%d" url-http-chunked-counter)) (url-http-debug "Reading chunk %d (%d %d %d)" url-http-chunked-counter st nd length) (setq regexp (if no-initial-crlf "\\([0-9a-z]+\\).*\r?\n" "\r?\n\\([0-9a-z]+\\).*\r?\n")) (if url-http-chunked-start ;; We know how long the chunk is supposed to be, skip over ;; leading crap if possible. (if (> nd (+ url-http-chunked-start url-http-chunked-length)) (progn (url-http-debug "Got to the end of chunk #%d!" url-http-chunked-counter) (goto-char (+ url-http-chunked-start url-http-chunked-length))) (url-http-debug "Still need %d bytes to hit end of chunk" (- (+ url-http-chunked-start url-http-chunked-length) nd)) (setq read-next-chunk nil))) (if (not read-next-chunk) (url-http-debug "Still spinning for next chunk...") (if no-initial-crlf (skip-chars-forward "\r\n")) (if (not (looking-at regexp)) (progn ;; Must not have received the entirety of the chunk header, ;; need to spin some more. (url-http-debug "Did not see start of chunk @ %d!" (point)) (setq read-next-chunk nil)) (add-text-properties (match-beginning 0) (match-end 0) (list 'start-open t 'end-open t 'chunked-encoding t 'face (if (featurep 'xemacs) 'text-cursor 'cursor) 'invisible t)) (setq url-http-chunked-length (string-to-int (buffer-substring (match-beginning 1) (match-end 1)) 16) url-http-chunked-counter (1+ url-http-chunked-counter) url-http-chunked-start (set-marker (or url-http-chunked-start (make-marker)) (match-end 0))) ; (if (not url-http-debug) (delete-region (match-beginning 0) (match-end 0));) (url-http-debug "Saw start of chunk %d (length=%d, start=%d" url-http-chunked-counter url-http-chunked-length (marker-position url-http-chunked-start)) (if (= 0 url-http-chunked-length) (progn ;; Found the end of the document! Wheee! (url-http-debug "Saw end of stream chunk!") (setq read-next-chunk nil) (url-display-percentage nil nil) (goto-char (match-end 1)) (if (re-search-forward "^\r*$" nil t) (message "Saw end of trailers...")) (if (url-http-parse-headers) (url-http-activate-callback)))))))))) (defun url-http-wait-for-headers-change-function (st nd length) ;; This will wait for the headers to arrive and then splice in the ;; next appropriate after-change-function, etc. (declare (special url-current-object url-http-end-of-headers url-http-content-type url-http-content-length url-http-transfer-encoding url-callback-function url-callback-arguments url-http-process url-http-method url-http-after-change-function url-http-response-status)) (url-http-debug "url-http-wait-for-headers-change-function (%s)" (buffer-name)) (if (not (bobp)) (let ((end-of-headers nil) (old-http nil) (content-length nil)) (goto-char (point-min)) (if (not (looking-at "^HTTP/[1-9]\\.[0-9]")) ;; Not HTTP/x.y data, must be 0.9 ;; God, I wish this could die. (setq end-of-headers t url-http-end-of-headers 0 old-http t) (if (re-search-forward "^\r*$" nil t) ;; Saw the end of the headers (progn (url-http-debug "Saw end of headers... (%s)" (buffer-name)) (setq url-http-end-of-headers (set-marker (make-marker) (point)) end-of-headers t) (url-http-clean-headers)))) (if (not end-of-headers) ;; Haven't seen the end of the headers yet, need to wait ;; for more data to arrive. nil (if old-http (message "HTTP/0.9 How I hate thee!") (progn (url-http-parse-response) (mail-narrow-to-head) ;;(narrow-to-region (point-min) url-http-end-of-headers) (setq url-http-transfer-encoding (mail-fetch-field "transfer-encoding") url-http-content-type (mail-fetch-field "content-type")) (if (mail-fetch-field "content-length") (setq url-http-content-length (string-to-int (mail-fetch-field "content-length")))) (widen))) (if url-http-transfer-encoding (setq url-http-transfer-encoding (downcase url-http-transfer-encoding))) (cond ((or (= url-http-response-status 204) (= url-http-response-status 205)) (url-http-debug "%d response must have headers only (%s)." url-http-response-status (buffer-name)) (if (url-http-parse-headers) (url-http-activate-callback))) ((string= "HEAD" url-http-method) ;; A HEAD request is _ALWAYS_ terminated by the header ;; information, regardless of any entity headers, ;; according to section 4.4 of the HTTP/1.1 draft. (url-http-debug "HEAD request must have headers only (%s)." (buffer-name)) (if (url-http-parse-headers) (url-http-activate-callback))) ((string= "CONNECT" url-http-method) ;; A CONNECT request is finished, but we cannot stick this ;; back on the free connectin list (url-http-debug "CONNECT request must have headers only.") (if (url-http-parse-headers) (url-http-activate-callback))) ((equal url-http-response-status 304) ;; Only allowed to have a header section. We have to handle ;; this here instead of in url-http-parse-headers because if ;; you have a cached copy of something without a known ;; content-length, and try to retrieve it from the cache, we'd ;; fall into the 'being dumb' section and wait for the ;; connection to terminate, which means we'd wait for 10 ;; seconds for the keep-alives to time out on some servers. (if (url-http-parse-headers) (url-http-activate-callback))) (old-http ;; HTTP/0.9 always signaled end-of-connection by closing the ;; connection. (url-http-debug "Saw HTTP/0.9 response, connection closed means end of document.") (setq url-http-after-change-function 'url-http-simple-after-change-function)) ((equal url-http-transfer-encoding "chunked") (url-http-debug "Saw chunked encoding.") (setq url-http-after-change-function 'url-http-chunked-encoding-after-change-function) (if (> nd url-http-end-of-headers) (progn (url-http-debug "Calling initial chunked-encoding for extra data at end of headers") (url-http-chunked-encoding-after-change-function (marker-position url-http-end-of-headers) nd (- nd url-http-end-of-headers))))) ((integerp url-http-content-length) (url-http-debug "Got a content-length, being smart about document end.") (setq url-http-after-change-function 'url-http-content-length-after-change-function) (cond ((= 0 url-http-content-length) ;; We got a NULL body! Activate the callback ;; immediately! (url-http-debug "Got 0-length content-length, activating callback immediately.") (if (url-http-parse-headers) (url-http-activate-callback))) ((> nd url-http-end-of-headers) ;; Have some leftover data (url-http-debug "Calling initial content-length for extra data at end of headers") (url-http-content-length-after-change-function (marker-position url-http-end-of-headers) nd (- nd url-http-end-of-headers))) (t nil))) (t (url-http-debug "No content-length, being dumb.") (setq url-http-after-change-function 'url-http-simple-after-change-function))))) ;; We are still at the beginning of the buffer... must just be ;; waiting for a response. (url-http-debug "Spinning waiting for headers...")) (goto-char (point-max))) ;;;###autoload (defun url-http (url callback cbargs) "Retrieve URL via HTTP asynchronously. URL must be a parsed URL. See `url-generic-parse-url' for details. When retrieval is completed, the function CALLBACK is executed with CBARGS as the arguments." (check-type url vector "Need a pre-parsed URL.") (declare (special url-current-object url-http-end-of-headers url-http-content-type url-http-content-length url-http-transfer-encoding url-http-after-change-function url-callback-function url-callback-arguments url-http-method url-http-extra-headers url-http-data url-http-chunked-length url-http-chunked-start url-http-chunked-counter url-http-process)) (let ((connection (url-http-find-free-connection (url-host url) (url-port url))) (buffer (generate-new-buffer (format " *http %s:%d*" (url-host url) (url-port url))))) (if (not connection) ;; Failed to open the connection for some reason (progn (kill-buffer buffer) (setq buffer nil) (error "Could not create connection to %s:%d" (url-host url) (url-port url))) (save-excursion (set-buffer buffer) (mm-disable-multibyte) (setq url-current-object url mode-line-format "%b [%s]") (dolist (var '(url-http-end-of-headers url-http-content-type url-http-content-length url-http-transfer-encoding url-http-after-change-function url-http-response-status url-http-chunked-length url-http-chunked-counter url-http-chunked-start url-callback-function url-callback-arguments url-http-process url-http-method url-http-extra-headers url-http-data)) (set (make-local-variable var) nil)) (setq url-http-method (or url-request-method "GET") url-http-extra-headers url-request-extra-headers url-http-data url-request-data url-http-process connection url-http-chunked-length nil url-http-chunked-start nil url-http-chunked-counter 0 url-callback-function callback url-callback-arguments cbargs url-http-after-change-function 'url-http-wait-for-headers-change-function) (set-process-buffer connection buffer) (set-process-sentinel connection 'url-http-end-of-document-sentinel) (set-process-filter connection 'url-http-generic-filter) (process-send-string connection (url-http-create-request url)))) buffer)) ;; Since Emacs 19/20 does not allow you to change the ;; `after-change-functions' hook in the midst of running them, we fake ;; an after change by hooking into the process filter and inserting ;; the data ourselves. This is slightly less efficient, but there ;; were tons of weird ways the after-change code was biting us in the ;; shorts. (defun url-http-generic-filter (proc data) ;; Sometimes we get a zero-length data chunk after the process has ;; been changed to 'free', which means it has no buffer associated ;; with it. Do nothing if there is no buffer, or 0 length data. (declare (special url-http-after-change-function)) (and (process-buffer proc) (/= (length data) 0) (save-excursion (set-buffer (process-buffer proc)) (url-http-debug "Calling after change function `%s' for `%S'" url-http-after-change-function proc) (funcall url-http-after-change-function (point-max) (progn (goto-char (point-max)) (insert data) (point-max)) (length data))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; file-name-handler stuff from here on out ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (not (fboundp 'symbol-value-in-buffer)) (defun url-http-symbol-value-in-buffer (symbol buffer &optional unbound-value) "Return the value of SYMBOL in BUFFER, or UNBOUND-VALUE if it is unbound." (save-excursion (set-buffer buffer) (if (not (boundp symbol)) unbound-value (symbol-value symbol)))) (defalias 'url-http-symbol-value-in-buffer 'symbol-value-in-buffer)) (defun url-http-head (url) (let ((url-request-method "HEAD") (url-request-data nil)) (url-retrieve-synchronously url))) ;;;###autoload (defun url-http-file-exists-p (url) (let ((version nil) (status nil) (exists nil) (buffer (url-http-head url))) (if (not buffer) (setq exists nil) (setq status (url-http-symbol-value-in-buffer 'url-http-response-status buffer 500) exists (and (>= status 200) (< status 300))) (kill-buffer buffer)) exists)) ;;;###autoload (defalias 'url-http-file-readable-p 'url-http-file-exists-p) (defun url-http-head-file-attributes (url) (let ((buffer (url-http-head url)) (attributes nil)) (when buffer (setq attributes (make-list 11 nil)) (setf (nth 1 attributes) 1) ; Number of links to file (setf (nth 2 attributes) 0) ; file uid (setf (nth 3 attributes) 0) ; file gid (setf (nth 7 attributes) ; file size (url-http-symbol-value-in-buffer 'url-http-content-length buffer -1)) (setf (nth 8 attributes) (eval-when-compile (make-string 10 ?-))) (kill-buffer buffer)) attributes)) ;;;###autoload (defun url-http-file-attributes (url) (if (url-dav-supported-p url) (url-dav-file-attributes url) (url-http-head-file-attributes url))) ;;;###autoload (defun url-http-options (url) "Returns a property list describing options available for URL. This list is retrieved using the `OPTIONS' HTTP method. Property list members: methods A list of symbols specifying what HTTP methods the resource supports. dav A list of numbers specifying what DAV protocol/schema versions are supported. dasl A list of supported DASL search types supported (string form) ranges A list of the units available for use in partial document fetches. p3p The `Platform For Privacy Protection' description for the resource. Currently this is just the raw header contents. This is likely to change once P3P is formally supported by the URL package or Emacs/W3. " (let* ((url-request-method "OPTIONS") (url-request-data nil) (buffer (url-retrieve-synchronously url)) (header nil) (options nil)) (when (and buffer (= 2 (/ (url-http-symbol-value-in-buffer 'url-http-response-status buffer 0) 100))) ;; Only parse the options if we got a 2xx response code! (save-excursion (save-restriction (save-match-data (set-buffer buffer) (mail-narrow-to-head) ;; Figure out what methods are supported. (when (setq header (mail-fetch-field "allow")) (setq options (plist-put options 'methods (mapcar 'intern (split-string header "[ ,]+"))))) ;; Check for DAV (when (setq header (mail-fetch-field "dav")) (setq options (plist-put options 'dav (delq 0 (mapcar 'string-to-number (split-string header "[, ]+")))))) ;; Now for DASL (when (setq header (mail-fetch-field "dasl")) (setq options (plist-put options 'dasl (split-string header "[, ]+")))) ;; P3P - should get more detailed here. FIXME (when (setq header (mail-fetch-field "p3p")) (setq options (plist-put options 'p3p header))) ;; Check for whether they accept byte-range requests. (when (setq header (mail-fetch-field "accept-ranges")) (setq options (plist-put options 'ranges (delq 'none (mapcar 'intern (split-string header "[, ]+")))))) )))) (if buffer (kill-buffer buffer)) options)) (provide 'url-http) ;;; url-http.el ends here twittering-mode-3.0.0/url-emacs21/url-https.el0000644000000000000000000000425112141747407021122 0ustar rootroot00000000000000;;; url-https.el --- HTTP over SSL routines ;; Author: $Author: wmperry $ ;; Created: $Date: 2001/11/22 14:32:13 $ ;; Version: $Revision: 1.3 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-gw) (require 'url-util) (require 'url-parse) (require 'url-cookie) (require 'url-http) (defconst url-https-default-port 443 "Default HTTPS port.") (defconst url-https-asynchronous-p t "HTTPS retrievals are asynchronous.") (defalias 'url-https-expand-file-name 'url-http-expand-file-name) (defmacro url-https-create-secure-wrapper (method args) (` (defun (, (intern (format (if method "url-https-%s" "url-https") method))) (, args) (, (format "HTTPS wrapper around `%s' call." (or method "url-http"))) (condition-case () (require 'ssl) (error (error "HTTPS support could not find `ssl' library."))) (let ((url-gateway-method 'ssl)) ((, (intern (format (if method "url-http-%s" "url-http") method))) (,@ (remove '&rest (remove '&optional args)))))))) (url-https-create-secure-wrapper nil (url callback cbargs)) (url-https-create-secure-wrapper file-exists-p (url)) (url-https-create-secure-wrapper file-readable-p (url)) (url-https-create-secure-wrapper file-attributes (url)) (provide 'url-https) twittering-mode-3.0.0/url-emacs21/url-imap.el0000644000000000000000000000577312141747407020720 0ustar rootroot00000000000000;;; url-imap.el --- IMAP retrieval routines ;; Author: Simon Josefsson ;; Created: $Date: 2002/01/22 17:52:16 $ ;; Version: $Revision: 1.4 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Anyway, here's a teaser. It's quite broken in lots of regards, but at ; least it seem to work. At least a little. At least when called ; manually like this (I've no idea how it's supposed to be called): ; (url-imap (url-generic-parse-url "imap://cyrus.andrew.cmu.edu/archive.c-client;UID=1021")) (eval-when-compile (require 'cl)) (require 'url-util) (require 'url-parse) (require 'nnimap) (require 'mm-util) (defconst url-imap-default-port 143 "Default IMAP port") (defun url-imap-open-host (host port user pass) ;; xxx use user and password (if (fboundp 'nnheader-init-server-buffer) (nnheader-init-server-buffer)) (let ((imap-username user) (imap-password pass) (authenticator (if user 'login 'anonymous))) (if (stringp port) (setq port (string-to-int port))) (nnimap-open-server host `((nnimap-server-port ,port) (nnimap-stream 'network) (nnimap-authenticator ,authenticator))))) (defun url-imap (url) (check-type url vector "Need a pre-parsed URL.") (save-excursion (set-buffer (generate-new-buffer " *url-imap*")) (mm-disable-multibyte) (let* ((host (url-host url)) (port (url-port url)) ;; xxx decode mailbox (see rfc2192) (mailbox (url-filename url)) (coding-system-for-read 'binary)) (and (eq (string-to-char mailbox) ?/) (setq mailbox (substring mailbox 1))) (url-imap-open-host host port (url-user url) (url-password url)) (cond ((assoc "TYPE" (url-attributes url)) ;; xxx list mailboxes (start gnus?) ) ((assoc "UID" (url-attributes url)) ;; fetch message part ;; xxx handle partial fetches (insert "Content-type: message/rfc822\n\n") (nnimap-request-article (cdr (assoc "UID" (url-attributes url))) mailbox host (current-buffer))) (t ;; xxx list messages in mailbox (start gnus?) ))) (current-buffer))) twittering-mode-3.0.0/url-emacs21/url-irc.el0000644000000000000000000000534412141747407020541 0ustar rootroot00000000000000;;; url-irc.el --- IRC URL interface ;; Author: $Author: wmperry $ ;; Created: $Date: 1999/12/24 12:13:33 $ ;; Version: $Revision: 1.2 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; IRC URLs are defined in http://www.w3.org/Addressing/draft-mirashi-url-irc-01.txt (require 'url-vars) (require 'url-parse) (defconst url-irc-default-port 6667 "Default port for IRC connections") (defcustom url-irc-function 'url-irc-zenirc "*Function to actually open an IRC connection. Should be a function that takes several argument: HOST - the hostname of the IRC server to contact PORT - the port number of the IRC server to contact CHANNEL - What channel on the server to visit right away (can be nil) USER - What username to use PASSWORD - What password to use" :type '(choice (const :tag "ZEN IRC" :value 'url-irc-zenirc) (function :tag "Other")) :group 'url) (defun url-irc-zenirc (host port channel user password) (let ((zenirc-buffer-name (if (and user host port) (format "%s@%s:%d" user host port) (format "%s:%d" host port))) (zenirc-server-alist (list (list host port password nil user)))) (zenirc) (goto-char (point-max)) (if (not channel) nil (insert "/join " channel) (zenirc-send-line)))) ;;;###autoload (defun url-irc (url) (let* ((host (url-host url)) (port (string-to-int (url-port url))) (pass (url-password url)) (user (url-user url)) (chan (url-filename url))) (if (url-target url) (setq chan (concat chan "#" (url-target url)))) (if (string-match "^/" chan) (setq chan (substring chan 1 nil))) (if (= (length chan) 0) (setq chan nil)) (funcall url-irc-function host port chan user pass) nil)) (provide 'url-irc) twittering-mode-3.0.0/url-emacs21/url-ldap.el0000644000000000000000000002005512141747407020700 0ustar rootroot00000000000000;;; url-ldap.el --- LDAP Uniform Resource Locator retrieval code ;; Author: $Author: wmperry $ ;; Created: $Date: 1999/11/26 12:11:50 $ ;; Version: $Revision: 1.1.1.1 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1998 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-vars) (require 'url-parse) (require 'url-util) ;; This has been implemented from RFC2255 'The LDAP URL Format' (Dec 1997) ;; ;; basic format is: ldap://host:port/dn?attributes?scope?filter?extensions ;; ;; Test URLs: ;; ldap://ldap.itd.umich.edu/cn%3Dumbflabmanager%2C%20ou%3DUser%20Groups%2C%20ou%3DGroups%2C%20o%3DUniversity%20of%20Michigan%2C%20c%3DUS ;; ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US ;; ;; For simple queries, I have verified compatibility with Netscape ;; Communicator v4.5 under linux. ;; ;; For anything _useful_ though, like specifying the attributes, ;; scope, filter, or extensions, netscape claims the URL format is ;; unrecognized. So I don't think it supports anything other than the ;; defaults (scope=base,attributes=*,filter=(objectClass=*) (defconst url-ldap-default-port 389 "Default LDAP port.") (defalias 'url-ldap-expand-file-name 'url-default-expander) (defvar url-ldap-pretty-names '(("l" . "City") ("objectclass" . "Object Class") ("o" . "Organization") ("ou" . "Organizational Unit") ("cn" . "Name") ("sn" . "Last Name") ("givenname" . "First Name") ("mail" . "Email") ("title" . "Title") ("c" . "Country") ("postalcode" . "ZIP Code") ("telephonenumber" . "Phone Number") ("facsimiletelephonenumber" . "Fax") ("postaladdress" . "Mailing Address") ("description" . "Notes")) "*An assoc list mapping LDAP attribute names to pretty descriptions of them.") (defvar url-ldap-attribute-formatters '(("mail" . (lambda (x) (format "%s" x x))) ("owner" . url-ldap-dn-formatter) ("creatorsname" . url-ldap-dn-formatter) ("jpegphoto" . url-ldap-image-formatter) ("usercertificate" . url-ldap-certificate-formatter) ("modifiersname" . url-ldap-dn-formatter) ("namingcontexts" . url-ldap-dn-formatter) ("defaultnamingcontext" . url-ldap-dn-formatter) ("member" . url-ldap-dn-formatter)) "*An assoc list mapping LDAP attribute names to pretty formatters for them.") (defsubst url-ldap-attribute-pretty-name (n) (or (cdr-safe (assoc (downcase n) url-ldap-pretty-names)) n)) (defsubst url-ldap-attribute-pretty-desc (n v) (if (string-match "^\\([^;]+\\);" n) (setq n (match-string 1 n))) (funcall (or (cdr-safe (assoc (downcase n) url-ldap-attribute-formatters)) 'identity) v)) (defun url-ldap-dn-formatter (dn) (concat "" dn "")) (defun url-ldap-certificate-formatter (data) (condition-case () (require 'ssl) (error nil)) (let ((vals (and (fboundp 'ssl-certificate-information) (ssl-certificate-information data)))) (if (not vals) "Unable to parse certificate" (concat "\n" (mapconcat (lambda (ava) (format "\n" (car ava) (cdr ava))) vals "\n") "
%s%s
\n")))) (defun url-ldap-image-formatter (data) (format "JPEG Photo" (url-hexify-string (base64-encode-string data)))) ;;;###autoload (defun url-ldap (url) (save-excursion (set-buffer (generate-new-buffer " *url-ldap*")) (setq url-current-object url) (insert "Content-type: text/html\r\n\r\n") (if (not (fboundp 'ldap-search-internal)) (insert "\n" " \n" " LDAP Not Supported\n" " \n" " \n" " \n" "

LDAP Not Supported

\n" "

\n" " This version of Emacs does not support LDAP.\n" "

\n" " \n" "\n") (let* ((binddn nil) (data (url-filename url)) (host (url-host url)) (port (url-port url)) (base-object nil) (attributes nil) (scope nil) (filter nil) (extensions nil) (connection nil) (results nil) (extract-dn (and (fboundp 'function-max-args) (= (function-max-args 'ldap-search-internal) 7)))) ;; Get rid of leading / (if (string-match "^/" data) (setq data (substring data 1))) (setq data (mapcar (lambda (x) (if (/= (length x) 0) x nil)) (split-string data "\\?")) base-object (nth 0 data) attributes (nth 1 data) scope (nth 2 data) filter (nth 3 data) extensions (nth 4 data)) ;; fill in the defaults (setq base-object (url-unhex-string (or base-object "")) scope (intern (url-unhex-string (or scope "base"))) filter (url-unhex-string (or filter "(objectClass=*)"))) (if (not (memq scope '(base one tree))) (error "Malformed LDAP URL: Unknown scope: %S" scope)) ;; Convert to the internal LDAP support scoping names. (setq scope (cdr (assq scope '((base . base) (one . onelevel) (sub . subtree))))) (if attributes (setq attributes (mapcar 'url-unhex-string (split-string attributes ",")))) ;; Parse out the exentions (if extensions (setq extensions (mapcar (lambda (ext) (if (string-match "\\([^=]*\\)=\\(.*\\)" ext) (cons (match-string 1 ext) (match-string 2 ext)) (cons ext ext))) (split-string extensions ",")) extensions (mapcar (lambda (ext) (cons (url-unhex-string (car ext)) (url-unhex-string (cdr ext)))) extensions))) (setq binddn (cdr-safe (or (assoc "bindname" extensions) (assoc "!bindname" extensions)))) ;; Now, let's actually do something with it. (setq connection (ldap-open host (if binddn (list 'binddn binddn))) results (if extract-dn (ldap-search-internal connection filter base-object scope attributes nil t) (ldap-search-internal connection filter base-object scope attributes nil))) (ldap-close connection) (insert "\n" " \n" " LDAP Search Results\n" " \n" " \n" " \n" "

" (int-to-string (length results)) " matches

\n") (mapc (lambda (obj) (insert "
\n" " \n") (if extract-dn (insert " \n")) (mapc (lambda (attr) (if (= (length (cdr attr)) 1) ;; single match, easy (insert " \n") ;; Multiple matches, slightly uglier (insert " \n" (format " " " \n"))) (if extract-dn (cdr obj) obj)) (insert "
" (car obj) "
" (url-ldap-attribute-pretty-name (car attr)) "" (url-ldap-attribute-pretty-desc (car attr) (car (cdr attr))) "
" (length (cdr attr))) (url-ldap-attribute-pretty-name (car attr)) "" (mapconcat (lambda (x) (url-ldap-attribute-pretty-desc (car attr) x)) (cdr attr) "
\n") "
\n")) results) (insert "
\n" " \n" "\n"))) (current-buffer))) (provide 'url-ldap) twittering-mode-3.0.0/url-emacs21/url-mailto.el0000644000000000000000000001077312141747407021253 0ustar rootroot00000000000000;;; url-mail.el --- Mail Uniform Resource Locator retrieval code ;; Author: $Author: fx $ ;; Created: $Date: 2001/10/05 17:04:06 $ ;; Version: $Revision: 1.4 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'url-vars) (require 'url-parse) (require 'url-util) ;;;###autoload (defun url-mail (&rest args) (interactive "P") (if (fboundp 'message-mail) (apply 'message-mail args) (or (apply 'mail args) (error "Mail aborted")))) (defun url-mail-goto-field (field) (if (not field) (goto-char (point-max)) (let ((dest nil) (lim nil) (case-fold-search t)) (save-excursion (goto-char (point-min)) (if (re-search-forward (regexp-quote mail-header-separator) nil t) (setq lim (match-beginning 0))) (goto-char (point-min)) (if (re-search-forward (concat "^" (regexp-quote field) ":") lim t) (setq dest (match-beginning 0)))) (if dest (progn (goto-char dest) (end-of-line)) (goto-char lim) (insert (capitalize field) ": ") (save-excursion (insert "\n")))))) ;;;###autoload (defun url-mailto (url) "Handle the mailto: URL syntax." (if (url-user url) ;; malformed mailto URL (mailto://wmperry@gnu.org instead of ;; mailto:wmperry@gnu.org (url-set-filename url (concat (url-user url) "@" (url-filename url)))) (setq url (url-filename url)) (let (to args source-url subject func headers-start) (if (string-match (regexp-quote "?") url) (setq headers-start (match-end 0) to (url-unhex-string (substring url 0 (match-beginning 0))) args (url-parse-query-string (substring url headers-start nil) t)) (setq to (url-unhex-string url))) (setq source-url (url-view-url t)) (if (and url-request-data (not (assoc "subject" args))) (setq args (cons (list "subject" (concat "Automatic submission from " url-package-name "/" url-package-version)) args))) (if (and source-url (not (assoc "x-url-from" args))) (setq args (cons (list "x-url-from" source-url) args))) (if (assoc "to" args) (push to (cdr (assoc "to" args))) (setq args (cons (list "to" to) args))) (setq subject (cdr-safe (assoc "subject" args))) (if (fboundp url-mail-command) (funcall url-mail-command) (mail)) (while args (if (string= (caar args) "body") (progn (goto-char (point-max)) (insert (mapconcat 'identity (cdar args) "\n"))) (url-mail-goto-field (caar args)) (setq func (intern-soft (concat "mail-" (caar args)))) (insert (mapconcat 'identity (cdar args) ", "))) (setq args (cdr args))) ;; (url-mail-goto-field "User-Agent") ;; (insert url-package-name "/" url-package-version " URL/" url-version) (if (not url-request-data) (progn (set-buffer-modified-p nil) (if subject (url-mail-goto-field nil) (url-mail-goto-field "subject"))) (if url-request-extra-headers (mapconcat (lambda (x) (url-mail-goto-field (car x)) (insert (cdr x))) url-request-extra-headers "")) (goto-char (point-max)) (insert url-request-data) ;; It seems Microsoft-ish to send without warning. ;; Fixme: presumably this should depend on a privacy setting. (if (y-or-n-p "Send this auto-generated mail? ") (cond ((eq url-mail-command 'compose-mail) (funcall (get mail-user-agent 'sendfunc) nil)) ;; otherwise, we can't be sure ((fboundp 'message-mail) (message-send-and-exit)) (t (mail-send-and-exit nil))))) nil)) (provide 'url-mailto) twittering-mode-3.0.0/url-emacs21/url-methods.el0000644000000000000000000001257212141747407021430 0ustar rootroot00000000000000;;; url-methods.el --- Load URL schemes as needed ;; Author: $Author: wmperry $ ;; Created: $Date: 2002/11/04 14:40:32 $ ;; Version: $Revision: 1.14 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) ;; This loads up some of the small, silly URLs that I really don't ;; want to bother putting in their own separate files. (require 'url-auto) (require 'url-parse) (defvar url-scheme-registry (make-hash-table :size 7 :test 'equal)) (defconst url-scheme-methods '((default-port . variable) (asynchronous-p . variable) (expand-file-name . function) (file-exists-p . function) (file-attributes . function) (parse-url . function) (file-symlink-p . function) (file-writable-p . function) (file-directory-p . function) (file-executable-p . function) (directory-files . function) (file-truename . function)) "Assoc-list of methods that each URL loader can provide.") (defconst url-scheme-default-properties (list 'name "unknown" 'loader 'url-scheme-default-loader 'default-port 0 'expand-file-name 'url-identity-expander 'parse-url 'url-generic-parse-url 'asynchronous-p nil 'file-directory-p 'ignore 'file-truename (lambda (&rest args) (url-recreate-url (car args))) 'file-exists-p 'ignore 'file-attributes 'ignore)) (defun url-scheme-default-loader (url &optional callback cbargs) "Signal an error for an unknown URL scheme." (error "Unkown URL scheme: %s" (url-type url))) (defun url-scheme-register-proxy (scheme) "Automatically find a proxy for SCHEME and put it in `url-proxy-services'." (let* ((env-var (concat scheme "_proxy")) (env-proxy (or (getenv (upcase env-var)) (getenv (downcase env-var)))) (cur-proxy (assoc scheme url-proxy-services)) (urlobj nil)) ;; Store any proxying information - this will not overwrite an old ;; entry, so that people can still set this information in their ;; .emacs file (cond (cur-proxy nil) ; Keep their old settings ((null env-proxy) nil) ; No proxy setup ;; First check if its something like hostname:port ((string-match "^\\([^:]+\\):\\([0-9]+\\)$" env-proxy) (setq urlobj (url-generic-parse-url nil)) ; Get a blank object (url-set-type urlobj "http") (url-set-host urlobj (match-string 1 env-proxy)) (url-set-port urlobj (string-to-number (match-string 2 env-proxy)))) ;; Then check if its a fully specified URL ((string-match url-nonrelative-link env-proxy) (setq urlobj (url-generic-parse-url env-proxy)) (url-set-type urlobj "http") (url-set-target urlobj nil)) ;; Finally, fall back on the assumption that its just a hostname (t (setq urlobj (url-generic-parse-url nil)) ; Get a blank object (url-set-type urlobj "http") (url-set-host urlobj env-proxy))) (if (and (not cur-proxy) urlobj) (progn (setq url-proxy-services (cons (cons scheme (format "%s:%d" (url-host urlobj) (url-port urlobj))) url-proxy-services)) (message "Using a proxy for %s..." scheme))))) (defun url-scheme-get-property (scheme property) "Get property of a URL SCHEME. Will automatically try to load a backend from url-SCHEME.el if it has not already been loaded." (setq scheme (downcase scheme)) (let ((desc (gethash scheme url-scheme-registry))) (if (not desc) (let* ((stub (concat "url-" scheme)) (loader (intern stub))) (condition-case () (require loader) (error nil)) (if (fboundp loader) (progn ;; Found the module to handle URLs (url-scheme-register-proxy scheme) (setq desc (list 'name scheme 'loader loader)) (dolist (cell url-scheme-methods) (let ((symbol (intern-soft (format "%s-%s" stub (car cell)))) (type (cdr cell))) (if symbol (case type (function ;; Store the symbol name of a function (if (fboundp symbol) (setq desc (plist-put desc (car cell) symbol)))) (variable ;; Store the VALUE of a variable (if (boundp symbol) (setq desc (plist-put desc (car cell) (symbol-value symbol))))) (otherwise (error "Malformed url-scheme-methods entry: %S" cell)))))) (puthash scheme desc url-scheme-registry))))) (or (plist-get desc property) (plist-get url-scheme-default-properties property)))) (provide 'url-methods) twittering-mode-3.0.0/url-emacs21/url-misc.el0000644000000000000000000000752312141747407020720 0ustar rootroot00000000000000;;; url-misc.el --- Misc Uniform Resource Locator retrieval code ;; Author: $Author: fx $ ;; Created: $Date: 2002/04/22 22:23:59 $ ;; Version: $Revision: 1.5 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996, 97, 98, 99, 2002 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-vars) (require 'url-parse) (autoload 'Info-goto-node "info" "" t) (autoload 'man "man" nil t) ;;;###autoload (defun url-man (url) "Fetch a Unix manual page URL." (man (url-filename url)) nil) ;;;###autoload (defun url-info (url) "Fetch a GNU Info URL." ;; Fetch an info node (let* ((fname (url-filename url)) (node (url-unhex-string (or (url-target url) "Top")))) (if (and fname node) (Info-goto-node (concat "(" fname ")" node)) (error "Malformed url: %s" (url-recreate-url url))) nil)) (defun url-do-terminal-emulator (type server port user) (terminal-emulator (generate-new-buffer (format "%s%s" (if user (concat user "@") "") server)) (case type (rlogin "rlogin") (telnet "telnet") (tn3270 "tn3270") (otherwise (error "Unknown terminal emulator required: %s" type))) (case type (rlogin (if user (list server "-l" user) (list server))) (telnet (if user (message "Please log in as user: %s" user)) (if port (list server port) (list server))) (tn3270 (if user (message "Please log in as user: %s" user)) (list server))))) ;;;###autoload (defun url-generic-emulator-loader (url) (let* ((type (intern (downcase (url-type url)))) (server (url-host url)) (name (url-user url)) (port (url-port url))) (url-do-terminal-emulator type server port name)) nil) ;;;###autoload (defalias 'url-rlogin 'url-generic-emulator-loader) ;;;###autoload (defalias 'url-telnet 'url-generic-emulator-loader) ;;;###autoload (defalias 'url-tn3270 'url-generic-emulator-loader) ;; RFC 2397 ;;;###autoload (defun url-data (url) "Fetch a data URL (RFC 2397)." (let ((mediatype nil) ;; The mediatype may need to be hex-encoded too -- see the RFC. (desc (url-unhex-string (url-filename url))) (encoding "8bit") (data nil)) (save-excursion (if (not (string-match "\\([^,]*\\)?," desc)) (error "Malformed data URL: %s" desc) (setq mediatype (match-string 1 desc)) (if (and mediatype (string-match ";base64\\'" mediatype)) (setq mediatype (substring mediatype 0 (match-beginning 0)) encoding "base64")) (if (or (null mediatype) (eq ?\; (aref mediatype 0))) (setq mediatype (concat "text/plain" mediatype))) (setq data (url-unhex-string (substring desc (match-end 0))))) (set-buffer (generate-new-buffer " *url-data*")) (mm-disable-multibyte) (insert (format "Content-Length: %d\n" (length data)) "Content-Type: " mediatype "\n" "Content-Encoding: " encoding "\n" "\n") (if data (insert data)) (current-buffer)))) (provide 'url-misc) twittering-mode-3.0.0/url-emacs21/url-news.el0000644000000000000000000001070612141747407020736 0ustar rootroot00000000000000;;; url-news.el --- News Uniform Resource Locator retrieval code ;; Author: $Author: fx $ ;; Created: $Date: 2001/05/22 16:13:00 $ ;; Version: $Revision: 1.3 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-vars) (require 'url-util) (require 'url-parse) (require 'nntp) (autoload 'url-warn "url") (autoload 'gnus-group-read-ephemeral-group "gnus-group") (eval-when-compile (require 'cl)) (defgroup url-news nil "News related options" :group 'url) (defun url-news-open-host (host port user pass) (if (fboundp 'nnheader-init-server-buffer) (nnheader-init-server-buffer)) (nntp-open-server host (list (string-to-int port))) (if (and user pass) (progn (nntp-send-command "^.*\r?\n" "AUTHINFO USER" user) (nntp-send-command "^.*\r?\n" "AUTHINFO PASS" pass) (if (not (nntp-server-opened host)) (url-warn 'url (format "NNTP authentication to `%s' as `%s' failed" host user)))))) (defun url-news-fetch-message-id (host message-id) (let ((buf (generate-new-buffer " *url-news*"))) (if (eq ?> (aref message-id (1- (length message-id)))) nil (setq message-id (concat "<" message-id ">"))) (if (cdr-safe (nntp-request-article message-id nil host buf)) ;; Successfully retrieved the article nil (save-excursion (set-buffer buf) (insert "Content-type: text/html\n\n" "\n" " \n" " Error\n" " \n" " \n" "
\n" "

Error requesting article...

\n" "

\n" " The status message returned by the NNTP server was:" "


\n" " \n" (nntp-status-message) " \n" "

\n" "

\n" " If you If you feel this is an error, send me mail\n" "

\n" "
\n" " \n" "\n" "\n" ))) buf)) (defun url-news-fetch-newsgroup (newsgroup host) (declare (special gnus-group-buffer)) (if (string-match "^/+" newsgroup) (setq newsgroup (substring newsgroup (match-end 0)))) (if (string-match "/+$" newsgroup) (setq newsgroup (substring newsgroup 0 (match-beginning 0)))) ;; This saves us from checking new news if GNUS is already running ;; FIXME - is it relatively safe to use gnus-alive-p here? FIXME (if (or (not (get-buffer gnus-group-buffer)) (save-excursion (set-buffer gnus-group-buffer) (not (eq major-mode 'gnus-group-mode)))) (gnus)) (set-buffer gnus-group-buffer) (goto-char (point-min)) (gnus-group-read-ephemeral-group newsgroup (list 'nntp host 'nntp-open-connection-function nntp-open-connection-function) nil (cons (current-buffer) 'browse))) ;;;###autoload (defun url-news (url) ;; Find a news reference (let* ((host (or (url-host url) url-news-server)) (port (url-port url)) (article-brackets nil) (buf nil) (article (url-filename url))) (url-news-open-host host port (url-user url) (url-password url)) (setq article (url-unhex-string article)) (cond ((string-match "@" article) ; Its a specific article (setq buf (url-news-fetch-message-id host article))) ((string= article "") ; List all newsgroups (gnus)) (t ; Whole newsgroup (url-news-fetch-newsgroup article host))) buf)) ;;;###autoload (defun url-snews (url) (let ((nntp-open-connection-function 'nntp-open-ssl-stream)) (url-news url))) (provide 'url-news) twittering-mode-3.0.0/url-emacs21/url-nfs.el0000644000000000000000000000705112141747407020547 0ustar rootroot00000000000000;;; url-nfs.el --- NFS URL interface ;; Author: $Author: fx $ ;; Created: $Date: 2001/05/22 16:10:50 $ ;; Version: $Revision: 1.3 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'url-parse) (require 'url-file) (defvar url-nfs-automounter-directory-spec "file:/net/%h%f" "*How to invoke the NFS automounter. Certain % sequences are recognized. %h -- the hostname of the NFS server %n -- the port # of the NFS server %u -- the username to use to authenticate %p -- the password to use to authenticate %f -- the filename on the remote server %% -- a literal % Each can be used any number of times.") (defun url-nfs-unescape (format host port user pass file) (save-excursion (set-buffer (get-buffer-create " *nfs-parse*")) (erase-buffer) (insert format) (goto-char (point-min)) (while (re-search-forward "%\\(.\\)" nil t) (let ((escape (aref (match-string 1) 0))) (replace-match "" t t) (case escape (?% (insert "%")) (?h (insert host)) (?n (insert (or port ""))) (?u (insert (or user ""))) (?p (insert (or pass ""))) (?f (insert (or file "/")))))) (buffer-string))) (defun url-nfs-build-filename (url) (let* ((host (url-host url)) (port (string-to-int (url-port url))) (pass (url-password url)) (user (url-user url)) (file (url-filename url))) (url-generic-parse-url (url-nfs-unescape url-nfs-automounter-directory-spec host port user pass file)))) (defun url-nfs (url callback cbargs) (url-file (url-nfs-build-filename url) callback cbargs)) (defmacro url-nfs-create-wrapper (method args) (` (defun (, (intern (format "url-nfs-%s" method))) (, args) (, (format "NFS URL wrapper around `%s' call." method)) (setq url (url-nfs-build-filename url)) (and url ((, (intern (format "url-file-%s" method))) (,@ (remove '&rest (remove '&optional args)))))))) (url-nfs-create-wrapper file-exists-p (url)) (url-nfs-create-wrapper file-attributes (url)) (url-nfs-create-wrapper file-symlink-p (url)) (url-nfs-create-wrapper file-readable-p (url)) (url-nfs-create-wrapper file-writable-p (url)) (url-nfs-create-wrapper file-executable-p (url)) (if (featurep 'xemacs) (progn (url-nfs-create-wrapper directory-files (url &optional full match nosort files-only)) (url-nfs-create-wrapper file-truename (url &optional default))) (url-nfs-create-wrapper directory-files (url &optional full match nosort)) (url-nfs-create-wrapper file-truename (url &optional counter prev-dirs))) (provide 'url-nfs) twittering-mode-3.0.0/url-emacs21/url-ns.el0000644000000000000000000000662412141747407020406 0ustar rootroot00000000000000;;; url-ns.el --- Various netscape-ish functions for proxy definitions ;; Author: $Author: fx $ ;; Created: $Date: 2000/12/20 21:08:02 $ ;; Version: $Revision: 1.2 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1997 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-gw) ;;;###autoload (defun isPlainHostName (host) (not (string-match "\\." host))) ;;;###autoload (defun dnsDomainIs (host dom) (string-match (concat (regexp-quote dom) "$") host)) ;;;###autoload (defun dnsResolve (host) (url-gateway-nslookup-host host)) ;;;###autoload (defun isResolvable (host) (if (string-match "^[0-9.]+$" host) t (not (string= host (url-gateway-nslookup-host host))))) ;;;###autoload (defun isInNet (ip net mask) (let ((netc (split-string ip "\\.")) (ipc (split-string net "\\.")) (maskc (split-string mask "\\."))) (if (or (/= (length netc) (length ipc)) (/= (length ipc) (length maskc))) nil (setq netc (mapcar 'string-to-int netc) ipc (mapcar 'string-to-int ipc) maskc (mapcar 'string-to-int maskc)) (and (= (logand (nth 0 netc) (nth 0 maskc)) (logand (nth 0 ipc) (nth 0 maskc))) (= (logand (nth 1 netc) (nth 1 maskc)) (logand (nth 1 ipc) (nth 1 maskc))) (= (logand (nth 2 netc) (nth 2 maskc)) (logand (nth 2 ipc) (nth 2 maskc))) (= (logand (nth 3 netc) (nth 3 maskc)) (logand (nth 3 ipc) (nth 3 maskc))))))) ;; Netscape configuration file parsing (defvar url-ns-user-prefs nil "Internal, do not use.") ;;;###autoload (defun url-ns-prefs (&optional file) (if (not file) (setq file (expand-file-name "~/.netscape/preferences.js"))) (if (not (and (file-exists-p file) (file-readable-p file))) (message "Could not open %s for reading" file) (save-excursion (let ((false nil) (true t)) (setq url-ns-user-prefs (make-hash-table :size 13 :test 'equal)) (set-buffer (get-buffer-create " *ns-parse*")) (erase-buffer) (insert-file-contents file) (goto-char (point-min)) (while (re-search-forward "^//" nil t) (replace-match ";;")) (goto-char (point-min)) (while (re-search-forward "^user_pref(" nil t) (replace-match "(url-ns-set-user-pref ")) (goto-char (point-min)) (while (re-search-forward "\"," nil t) (replace-match "\"")) (goto-char (point-min)) (eval-buffer))))) (defun url-ns-set-user-pref (key val) (puthash key val url-ns-user-prefs)) ;;;###autoload (defun url-ns-user-pref (key &optional default) (gethash key url-ns-user-prefs default)) (provide 'url-ns) twittering-mode-3.0.0/url-emacs21/url-parse.el0000644000000000000000000001365312141747407021100 0ustar rootroot00000000000000;;; url-parse.el --- Uniform Resource Locator parser ;; Author: $Author: fx $ ;; Created: $Date: 2001/10/01 11:52:06 $ ;; Version: $Revision: 1.4 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-auto) (require 'url-vars) (autoload 'url-scheme-get-property "url-methods") (defmacro url-type (urlobj) `(aref ,urlobj 0)) (defmacro url-user (urlobj) `(aref ,urlobj 1)) (defmacro url-password (urlobj) `(aref ,urlobj 2)) (defmacro url-host (urlobj) `(aref ,urlobj 3)) (defmacro url-port (urlobj) `(or (aref ,urlobj 4) (if (url-fullness ,urlobj) (url-scheme-get-property (url-type ,urlobj) 'default-port)))) (defmacro url-filename (urlobj) `(aref ,urlobj 5)) (defmacro url-target (urlobj) `(aref ,urlobj 6)) (defmacro url-attributes (urlobj) `(aref ,urlobj 7)) (defmacro url-fullness (urlobj) `(aref ,urlobj 8)) (defmacro url-set-type (urlobj type) `(aset ,urlobj 0 ,type)) (defmacro url-set-user (urlobj user) `(aset ,urlobj 1 ,user)) (defmacro url-set-password (urlobj pass) `(aset ,urlobj 2 ,pass)) (defmacro url-set-host (urlobj host) `(aset ,urlobj 3 ,host)) (defmacro url-set-port (urlobj port) `(aset ,urlobj 4 ,port)) (defmacro url-set-filename (urlobj file) `(aset ,urlobj 5 ,file)) (defmacro url-set-target (urlobj targ) `(aset ,urlobj 6 ,targ)) (defmacro url-set-attributes (urlobj targ) `(aset ,urlobj 7 ,targ)) (defmacro url-set-full (urlobj val) `(aset ,urlobj 8 ,val)) ;;;###autoload (defun url-recreate-url (urlobj) (concat (url-type urlobj) ":" (if (url-host urlobj) "//" "") (if (url-user urlobj) (concat (url-user urlobj) (if (url-password urlobj) (concat ":" (url-password urlobj))) "@")) (url-host urlobj) (if (and (url-port urlobj) (not (equal (url-port urlobj) (url-scheme-get-property (url-type urlobj) 'default-port)))) (format ":%d" (url-port urlobj))) (or (url-filename urlobj) "/") (if (url-target urlobj) (concat "#" (url-target urlobj))) (if (url-attributes urlobj) (concat ";" (mapconcat (function (lambda (x) (if (cdr x) (concat (car x) "=" (cdr x)) (car x)))) (url-attributes urlobj) ";"))))) ;;;###autoload (defun url-generic-parse-url (url) "Return a vector of the parts of URL. Format is: \[proto username password hostname portnumber file reference attributes fullp\]" (cond ((null url) (make-vector 9 nil)) ((or (not (string-match url-nonrelative-link url)) (= ?/ (string-to-char url))) (let ((retval (make-vector 9 nil))) (url-set-filename retval url) (url-set-full retval nil) retval)) (t (save-excursion (set-buffer (get-buffer-create " *urlparse*")) (set-syntax-table url-parse-syntax-table) (let ((save-pos nil) (prot nil) (user nil) (pass nil) (host nil) (port nil) (file nil) (refs nil) (attr nil) (full nil) (inhibit-read-only t)) (erase-buffer) (insert url) (goto-char (point-min)) (setq save-pos (point)) (if (not (looking-at "//")) (progn (skip-chars-forward "a-zA-Z+.\\-") (downcase-region save-pos (point)) (setq prot (buffer-substring save-pos (point))) (skip-chars-forward ":") (setq save-pos (point)))) ;; We are doing a fully specified URL, with hostname and all (if (looking-at "//") (progn (setq full t) (forward-char 2) (setq save-pos (point)) (skip-chars-forward "^/") (setq host (buffer-substring save-pos (point))) (if (string-match "^\\([^@]+\\)@" host) (setq user (match-string 1 host) host (substring host (match-end 0) nil))) (if (and user (string-match "\\([^:]+\\):\\(.*\\)" user)) (setq pass (match-string 2 user) user (match-string 1 user))) (if (string-match ":\\([0-9+]+\\)" host) (setq port (string-to-int (match-string 1 host)) host (substring host 0 (match-beginning 0)))) (if (string-match ":$" host) (setq host (substring host 0 (match-beginning 0)))) (setq host (downcase host) save-pos (point)))) (if (not port) (setq port (url-scheme-get-property prot 'default-port))) ;; Gross hack to preserve ';' in data URLs (setq save-pos (point)) (if (string= "data" prot) (goto-char (point-max)) ;; Now check for references (skip-chars-forward "^#") (if (eobp) nil (delete-region (point) (progn (skip-chars-forward "#") (setq refs (buffer-substring (point) (point-max))) (point-max)))) (goto-char save-pos) (skip-chars-forward "^;") (if (not (eobp)) (setq attr (url-parse-args (buffer-substring (point) (point-max)) t) attr (nreverse attr)))) (setq file (buffer-substring save-pos (point))) (if (and host (string-match "%[0-9][0-9]" host)) (setq host (url-unhex-string host))) (vector prot user pass host port file refs attr full)))))) (provide 'url-parse) twittering-mode-3.0.0/url-emacs21/url-privacy.el0000644000000000000000000000546012141747407021440 0ustar rootroot00000000000000;;; url-privacy.el --- Global history tracking for URL package ;; Author: $Author: fx $ ;; Created: $Date: 2001/10/05 17:10:26 $ ;; Version: $Revision: 1.4 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996 - 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (eval-when-compile (require 'cl)) (require 'url-vars) (if (fboundp 'device-type) (defalias 'url-device-type 'device-type) (defun url-device-type (&optional device) (or window-system 'tty))) ;;;###autoload (defun url-setup-privacy-info () (interactive) (setq url-system-type (cond ((or (eq url-privacy-level 'paranoid) (and (listp url-privacy-level) (memq 'os url-privacy-level))) nil) ;; First, we handle the inseparable OS/Windowing system ;; combinations ((eq system-type 'Apple-Macintosh) "Macintosh") ((eq system-type 'next-mach) "NeXT") ((eq system-type 'windows-nt) "Windows-NT; 32bit") ((eq system-type 'ms-windows) "Windows; 16bit") ((eq system-type 'ms-dos) "MS-DOS; 32bit") ((memq (url-device-type) '(win32 w32)) "Windows; 32bit") ((eq (url-device-type) 'pm) "OS/2; 32bit") (t (case (url-device-type) (x "X11") (ns "OpenStep") (tty "TTY") (otherwise nil))))) (setq url-personal-mail-address (or url-personal-mail-address user-mail-address (format "%s@%s" (user-real-login-name) (system-name)))) (if (or (memq url-privacy-level '(paranoid high)) (and (listp url-privacy-level) (memq 'email url-privacy-level))) (setq url-personal-mail-address nil)) (setq url-os-type (cond ((or (eq url-privacy-level 'paranoid) (and (listp url-privacy-level) (memq 'os url-privacy-level))) nil) ((boundp 'system-configuration) system-configuration) ((boundp 'system-type) (symbol-name system-type)) (t nil)))) (provide 'url-privacy) twittering-mode-3.0.0/url-emacs21/url-proxy.el0000644000000000000000000000542612141747407021146 0ustar rootroot00000000000000;;; url-proxy.el --- Proxy server support ;; Author: $Author: fx $ ;; Created: $Date: 2001/10/11 21:09:35 $ ;; Version: $Revision: 1.5 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1999 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-parse) (autoload 'url-warn "url") (defun url-default-find-proxy-for-url (urlobj host) (cond ((or (and (assoc "no_proxy" url-proxy-services) (string-match (cdr (assoc "no_proxy" url-proxy-services)) host)) (equal "www" (url-type urlobj))) "DIRECT") ((cdr (assoc (url-type urlobj) url-proxy-services)) (concat "PROXY " (cdr (assoc (url-type urlobj) url-proxy-services)))) ;; ;; Should check for socks ;; (t "DIRECT"))) (defvar url-proxy-locator 'url-default-find-proxy-for-url) (defun url-find-proxy-for-url (url host) (let ((proxies (split-string (funcall url-proxy-locator url host) " *; *")) (proxy nil) (case-fold-search t)) ;; Not sure how I should handle gracefully degrading from one proxy to ;; another, so for now just deal with the first one ;; (while proxies (if (listp proxies) (setq proxy (car proxies)) (setq proxy proxies)) (cond ((string-match "^direct" proxy) nil) ((string-match "^proxy +" proxy) (concat "http://" (substring proxy (match-end 0)) "/")) ((string-match "^socks +" proxy) (concat "socks://" (substring proxy (match-end 0)))) (t (url-warn 'url (format "Unknown proxy directive: %s" proxy) 'critical) nil)))) (defun url-proxy (url callback &optional cbargs) ;; Retrieve URL from a proxy. ;; Expects `url-using-proxy' to be bound to the specific proxy to use." (setq url-using-proxy (url-generic-parse-url url-using-proxy)) (let ((proxy-object (copy-sequence url))) (url-set-target proxy-object nil) (url-http url-using-proxy callback cbargs))) (provide 'url-proxy) twittering-mode-3.0.0/url-emacs21/url-util.el0000644000000000000000000003700012141747407020733 0ustar rootroot00000000000000;;; url-util.el --- Miscellaneous helper routines for URL library ;; Author: Bill Perry ;; Created: $Date: 2002/04/22 09:16:11 $ ;; Version: $Revision: 1.14 $ ;; Keywords: comm, data, processes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996, 97, 98, 99, 2001 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'url-parse) (autoload 'timezone-parse-date "timezone") (autoload 'timezone-make-date-arpa-standard "timezone") (defvar url-parse-args-syntax-table (copy-syntax-table emacs-lisp-mode-syntax-table) "A syntax table for parsing sgml attributes.") (modify-syntax-entry ?' "\"" url-parse-args-syntax-table) (modify-syntax-entry ?` "\"" url-parse-args-syntax-table) (modify-syntax-entry ?{ "(" url-parse-args-syntax-table) (modify-syntax-entry ?} ")" url-parse-args-syntax-table) ;;;###autoload (defcustom url-debug nil "*What types of debug messages from the URL library to show. Debug messages are logged to the *URL-DEBUG* buffer. If t, all messages will be logged. If a number, all messages will be logged, as well shown via `message'. If a list, it is a list of the types of messages to be logged." :type '(choice (const :tag "none" nil) (const :tag "all" t) (checklist :tag "custom" (const :tag "HTTP" :value http) (const :tag "DAV" :value dav) (const :tag "General" :value retrieval) (const :tag "Filename handlers" :value handlers) (symbol :tag "Other"))) :group 'url-hairy) ;;;###autoload (defun url-debug (tag &rest args) (if quit-flag (error "Interrupted!")) (if (or (eq url-debug t) (numberp url-debug) (and (listp url-debug) (memq tag url-debug))) (save-excursion (set-buffer (get-buffer-create "*URL-DEBUG*")) (goto-char (point-max)) (insert (symbol-name tag) " -> " (apply 'format args) "\n") (if (numberp url-debug) (apply 'message args))))) ;;;###autoload (defun url-parse-args (str &optional nodowncase) ;; Return an assoc list of attribute/value pairs from an RFC822-type string (let ( name ; From name= value ; its value results ; Assoc list of results name-pos ; Start of XXXX= position val-pos ; Start of value position st nd ) (save-excursion (save-restriction (set-buffer (get-buffer-create " *urlparse-temp*")) (set-syntax-table url-parse-args-syntax-table) (erase-buffer) (insert str) (setq st (point-min) nd (point-max)) (set-syntax-table url-parse-args-syntax-table) (narrow-to-region st nd) (goto-char (point-min)) (while (not (eobp)) (skip-chars-forward "; \n\t") (setq name-pos (point)) (skip-chars-forward "^ \n\t=;") (if (not nodowncase) (downcase-region name-pos (point))) (setq name (buffer-substring name-pos (point))) (skip-chars-forward " \t\n") (if (/= (or (char-after (point)) 0) ?=) ; There is no value (setq value nil) (skip-chars-forward " \t\n=") (setq val-pos (point) value (cond ((or (= (or (char-after val-pos) 0) ?\") (= (or (char-after val-pos) 0) ?')) (buffer-substring (1+ val-pos) (condition-case () (prog2 (forward-sexp 1) (1- (point)) (skip-chars-forward "\"")) (error (skip-chars-forward "^ \t\n") (point))))) (t (buffer-substring val-pos (progn (skip-chars-forward "^;") (skip-chars-backward " \t") (point))))))) (setq results (cons (cons name value) results)) (skip-chars-forward "; \n\t")) results)))) ;;;###autoload (defun url-insert-entities-in-string (string) "Convert HTML markup-start characters to entity references in STRING. Also replaces the \" character, so that the result may be safely used as an attribute value in a tag. Returns a new string with the result of the conversion. Replaces these characters as follows: & ==> & < ==> < > ==> > \" ==> "" (if (string-match "[&<>\"]" string) (save-excursion (set-buffer (get-buffer-create " *entity*")) (erase-buffer) (buffer-disable-undo (current-buffer)) (insert string) (goto-char (point-min)) (while (progn (skip-chars-forward "^&<>\"") (not (eobp))) (insert (cdr (assq (char-after (point)) '((?\" . """) (?& . "&") (?< . "<") (?> . ">"))))) (delete-char 1)) (buffer-string)) string)) ;;;###autoload (defun url-normalize-url (url) "Return a 'normalized' version of URL. Strips out default port numbers, etc." (let (type data grok retval) (setq data (url-generic-parse-url url) type (url-type data)) (if (member type '("www" "about" "mailto" "info")) (setq retval url) (url-set-target data nil) (setq retval (url-recreate-url data))) retval)) ;;;###autoload (defun url-lazy-message (&rest args) "Just like `message', but is a no-op if called more than once a second. Will not do anything if url-show-status is nil." (if (or (null url-show-status) (active-minibuffer-window) (= url-lazy-message-time (setq url-lazy-message-time (nth 1 (current-time))))) nil (apply 'message args))) ;;;###autoload (defun url-get-normalized-date (&optional specified-time) "Return a 'real' date string that most HTTP servers can understand." (require 'timezone) (let* ((raw (if specified-time (current-time-string specified-time) (current-time-string))) (gmt (timezone-make-date-arpa-standard raw (nth 1 (current-time-zone)) "GMT")) (parsed (timezone-parse-date gmt)) (day (cdr-safe (assoc (substring raw 0 3) weekday-alist))) (year nil) (month (car (rassoc (string-to-int (aref parsed 1)) monthabbrev-alist))) ) (setq day (or (car-safe (rassoc day weekday-alist)) (substring raw 0 3)) year (aref parsed 0)) ;; This is needed for plexus servers, or the server will hang trying to ;; parse the if-modified-since header. Hopefully, I can take this out ;; soon. (if (and year (> (length year) 2)) (setq year (substring year -2 nil))) (concat day ", " (aref parsed 2) "-" month "-" year " " (aref parsed 3) " " (or (aref parsed 4) (concat "[" (nth 1 (current-time-zone)) "]"))))) ;;;###autoload (defun url-eat-trailing-space (x) "Remove spaces/tabs at the end of a string." (let ((y (1- (length x))) (skip-chars (list ? ?\t ?\n))) (while (and (>= y 0) (memq (aref x y) skip-chars)) (setq y (1- y))) (substring x 0 (1+ y)))) ;;;###autoload (defun url-strip-leading-spaces (x) "Remove spaces at the front of a string." (let ((y (1- (length x))) (z 0) (skip-chars (list ? ?\t ?\n))) (while (and (<= z y) (memq (aref x z) skip-chars)) (setq z (1+ z))) (substring x z nil))) ;;;###autoload (defun url-pretty-length (n) (cond ((< n 1024) (format "%d bytes" n)) ((< n (* 1024 1024)) (format "%dk" (/ n 1024.0))) (t (format "%2.2fM" (/ n (* 1024 1024.0)))))) ;;;###autoload (defun url-display-percentage (fmt perc &rest args) (if (null fmt) (if (fboundp 'clear-progress-display) (clear-progress-display)) (if (and (fboundp 'progress-display) perc) (apply 'progress-display fmt perc args) (apply 'message fmt args)))) ;;;###autoload (defun url-percentage (x y) (if (fboundp 'float) (round (* 100 (/ x (float y)))) (/ (* x 100) y))) ;;;###autoload (defun url-basepath (file &optional x) "Return the base pathname of FILE, or the actual filename if X is true." (cond ((null file) "") ((string-match (eval-when-compile (regexp-quote "?")) file) (if x (file-name-nondirectory (substring file 0 (match-beginning 0))) (file-name-directory (substring file 0 (match-beginning 0))))) (x (file-name-nondirectory file)) (t (file-name-directory file)))) ;;;###autoload (defun url-parse-query-string (query &optional downcase) (let (retval pairs cur key val) (setq pairs (split-string query "&")) (while pairs (setq cur (car pairs) pairs (cdr pairs)) (if (not (string-match "=" cur)) nil ; Grace (setq key (url-unhex-string (substring cur 0 (match-beginning 0))) val (url-unhex-string (substring cur (match-end 0) nil))) (if downcase (setq key (downcase key))) (setq cur (assoc key retval)) (if cur (setcdr cur (cons val (cdr cur))) (setq retval (cons (list key val) retval))))) retval)) (defun url-unhex (x) (if (> x ?9) (if (>= x ?a) (+ 10 (- x ?a)) (+ 10 (- x ?A))) (- x ?0))) ;;;###autoload (defun url-unhex-string (str &optional allow-newlines) "Remove %XXX embedded spaces, etc in a url. If optional second argument ALLOW-NEWLINES is non-nil, then allow the decoding of carriage returns and line feeds in the string, which is normally forbidden in URL encoding." (setq str (or str "")) (let ((tmp "") (case-fold-search t)) (while (string-match "%[0-9a-f][0-9a-f]" str) (let* ((start (match-beginning 0)) (ch1 (url-unhex (elt str (+ start 1)))) (code (+ (* 16 ch1) (url-unhex (elt str (+ start 2)))))) (setq tmp (concat tmp (substring str 0 start) (cond (allow-newlines (char-to-string code)) ((or (= code ?\n) (= code ?\r)) " ") (t (char-to-string code)))) str (substring str (match-end 0))))) (setq tmp (concat tmp str)) tmp)) (defconst url-unreserved-chars '( ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?A ?B ?C ?D ?E ?F ?G ?H ?I ?J ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T ?U ?V ?W ?X ?Y ?Z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?- ?_ ?. ?! ?~ ?* ?' ?\( ?\)) "A list of characters that are _NOT_ reserved in the URL spec. This is taken from RFC 2396.") ;;;###autoload (defun url-hexify-string (str) "Escape characters in a string." (mapconcat (lambda (char) ;; Fixme: use a char table instead. (if (not (memq char url-unreserved-chars)) (if (< char 16) (format "%%0%X" char) (format "%%%X" char)) (char-to-string char))) str "")) ;;;###autoload (defun url-file-extension (fname &optional x) "Return the filename extension of FNAME. If optional variable X is t, then return the basename of the file with the extension stripped off." (if (and fname (setq fname (url-basepath fname t)) (string-match "\\.[^./]+$" fname)) (if x (substring fname 0 (match-beginning 0)) (substring fname (match-beginning 0) nil)) ;; ;; If fname has no extension, and x then return fname itself instead of ;; nothing. When caching it allows the correct .hdr file to be produced ;; for filenames without extension. ;; (if x fname ""))) ;;;###autoload (defun url-truncate-url-for-viewing (url &optional width) "Return a shortened version of URL that is WIDTH characters or less wide. WIDTH defaults to the current frame width." (let* ((fr-width (or width (frame-width))) (str-width (length url)) (tail (file-name-nondirectory url)) (fname nil) (modified 0) (urlobj nil)) ;; The first thing that can go are the search strings (if (and (>= str-width fr-width) (string-match "?" url)) (setq url (concat (substring url 0 (match-beginning 0)) "?...") str-width (length url) tail (file-name-nondirectory url))) (if (< str-width fr-width) nil ; Hey, we are done! (setq urlobj (url-generic-parse-url url) fname (url-filename urlobj) fr-width (- fr-width 4)) (while (and (>= str-width fr-width) (string-match "/" fname)) (setq fname (substring fname (match-end 0) nil) modified (1+ modified)) (url-set-filename urlobj fname) (setq url (url-recreate-url urlobj) str-width (length url))) (if (> modified 1) (setq fname (concat "/.../" fname)) (setq fname (concat "/" fname))) (url-set-filename urlobj fname) (setq url (url-recreate-url urlobj))) url)) ;;;###autoload (defun url-view-url (&optional no-show) "View the current document's URL. Optional argument NO-SHOW means just return the URL, don't show it in the minibuffer. This uses `url-current-object', set locally to the buffer." (interactive) (if (not url-current-object) nil (if no-show (url-recreate-url url-current-object) (message "%s" (url-recreate-url url-current-object))))) (eval-and-compile (defvar url-get-url-filename-chars "-%.?@a-zA-Z0-9()_/:~=&" "Valid characters in a URL") ) (defun url-get-url-at-point (&optional pt) "Get the URL closest to point, but don't change position. Has a preference for looking backward when not directly on a symbol." ;; Not at all perfect - point must be right in the name. (save-excursion (if pt (goto-char pt)) (let (start url) (save-excursion ;; first see if you're just past a filename (if (not (eobp)) (if (looking-at "[] \t\n[{}()]") ; whitespace or some parens (progn (skip-chars-backward " \n\t\r({[]})") (if (not (bobp)) (backward-char 1))))) (if (and (char-after (point)) (string-match (eval-when-compile (concat "[" url-get-url-filename-chars "]")) (char-to-string (char-after (point))))) (progn (skip-chars-backward url-get-url-filename-chars) (setq start (point)) (skip-chars-forward url-get-url-filename-chars)) (setq start (point))) (setq url (buffer-substring-no-properties start (point)))) (if (and url (string-match "^(.*)\\.?$" url)) (setq url (match-string 1 url))) (if (and url (string-match "^URL:" url)) (setq url (substring url 4 nil))) (if (and url (string-match "\\.$" url)) (setq url (substring url 0 -1))) (if (and url (string-match "^www\\." url)) (setq url (concat "http://" url))) (if (and url (not (string-match url-nonrelative-link url))) (setq url nil)) url))) (defun url-generate-unique-filename (&optional fmt) "Generate a unique filename in `url-temporary-directory'." (if (not fmt) (let ((base (format "url-tmp.%d" (user-real-uid))) (fname "") (x 0)) (setq fname (format "%s%d" base x)) (while (file-exists-p (expand-file-name fname url-temporary-directory)) (setq x (1+ x) fname (concat base (int-to-string x)))) (expand-file-name fname url-temporary-directory)) (let ((base (concat "url" (int-to-string (user-real-uid)))) (fname "") (x 0)) (setq fname (format fmt (concat base (int-to-string x)))) (while (file-exists-p (expand-file-name fname url-temporary-directory)) (setq x (1+ x) fname (format fmt (concat base (int-to-string x))))) (expand-file-name fname url-temporary-directory)))) (defun url-extract-mime-headers () "Set `url-current-mime-headers' in current buffer." (save-excursion (goto-char (point-min)) (unless url-current-mime-headers (set (make-local-variable 'url-current-mime-headers) (mail-header-extract))))) (provide 'url-util) twittering-mode-3.0.0/url-emacs21/url-vars.el0000644000000000000000000003632112141747407020736 0ustar rootroot00000000000000;;; url-vars.el --- Variables for Uniform Resource Locator tool ;; Author: $Author: fx $ ;; Created: $Date: 2002/04/22 09:25:02 $ ;; Version: $Revision: 1.14 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996, 97, 98, 99, 2001 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'mm-util) (eval-when-compile (require 'cl)) (defconst url-version (let ((x "$State: Exp $")) (if (string-match "State: \\([^ \t\n]+\\)" x) (substring x (match-beginning 1) (match-end 1)) x)) "Version number of URL package.") (defgroup url nil "Uniform Resource Locator tool" :group 'hypermedia) (defgroup url-file nil "URL storage" :prefix "url-" :group 'url) (defgroup url-cache nil "URL cache" :prefix "url-" :prefix "url-cache-" :group 'url) (defgroup url-mime nil "MIME options of URL" :prefix "url-" :group 'url) (defgroup url-hairy nil "Hairy options of URL" :prefix "url-" :group 'url) (defvar url-current-object nil "A parsed representation of the current url.") (defvar url-current-mime-headers nil "A parsed representation of the MIME headers for the current url.") (mapcar 'make-variable-buffer-local '( url-current-object url-current-referer url-current-mime-headers )) (defcustom url-honor-refresh-requests t "*Whether to do automatic page reloads. These are done at the request of the document author or the server via the `Refresh' header in an HTTP response. If nil, no refresh requests will be honored. If t, all refresh requests will be honored. If non-nil and not t, the user will be asked for each refresh request." :type '(choice (const :tag "off" nil) (const :tag "on" t) (const :tag "ask" 'ask)) :group 'url-hairy) (defcustom url-automatic-caching nil "*If non-nil, all documents will be automatically cached to the local disk." :type 'boolean :group 'url-cache) ;; Fixme: sanitize this. (defcustom url-cache-expired (lambda (t1 t2) (>= (- (car t2) (car t1)) 5)) "*A function determining if a cached item has expired. It takes two times (numbers) as its arguments, and returns non-nil if the second time is 'too old' when compared to the first time." :type 'function :group 'url-cache) (defvar url-bug-address "w3-bugs@xemacs.org" "Where to send bug reports.") (defcustom url-personal-mail-address nil "*Your full email address. This is what is sent to HTTP servers as the FROM field in an HTTP request." :type '(choice (const :tag "Unspecified" nil) string) :group 'url) (defcustom url-directory-index-file "index.html" "*The filename to look for when indexing a directory. If this file exists, and is readable, then it will be viewed instead of using `dired' to view the directory." :type 'string :group 'url-file) ;; Fixme: this should have a setter which calls url-setup-privacy-info. (defcustom url-privacy-level '(email) "*How private you want your requests to be. HTTP has header fields for various information about the user, including operating system information, email addresses, the last page you visited, etc. This variable controls how much of this information is sent. This should a symbol or a list. Valid values if a symbol are: none -- Send all information low -- Don't send the last location high -- Don't send the email address or last location paranoid -- Don't send anything If a list, this should be a list of symbols of what NOT to send. Valid symbols are: email -- the email address os -- the operating system info lastloc -- the last location agent -- Do not send the User-Agent string cookie -- never accept HTTP cookies Samples: (setq url-privacy-level 'high) (setq url-privacy-level '(email lastloc)) ;; equivalent to 'high (setq url-privacy-level '(os)) ::NOTE:: This variable controls several other variables and is _NOT_ automatically updated. Call the function `url-setup-privacy-info' after modifying this variable." :type '(radio (const :tag "None (you believe in the basic goodness of humanity)" :value none) (const :tag "Low (do not reveal last location)" :value low) (const :tag "High (no email address or last location)" :value high) (const :tag "Paranoid (reveal nothing!)" :value paranoid) (checklist :tag "Custom" (const :tag "Email address" :value email) (const :tag "Operating system" :value os) (const :tag "Last location" :value lastloc) (const :tag "Browser identification" :value agent) (const :tag "No cookies" :value cookie))) :group 'url) (defvar url-inhibit-uncompression nil "Do not do decompression if non-nil.") (defcustom url-uncompressor-alist '((".z" . "x-gzip") (".gz" . "x-gzip") (".uue" . "x-uuencoded") (".hqx" . "x-hqx") (".Z" . "x-compress") (".bz2" . "x-bzip2")) "*An alist of file extensions and appropriate content-transfer-encodings." :type '(repeat (cons :format "%v" (string :tag "Extension") (string :tag "Encoding"))) :group 'url-mime) (defcustom url-mail-command (if (fboundp 'compose-mail) 'compose-mail 'url-mail) "*This function will be called whenever url needs to send mail. It should enter a mail-mode-like buffer in the current window. The commands `mail-to' and `mail-subject' should still work in this buffer, and it should use `mail-header-separator' if possible." :type 'function :group 'url) (defcustom url-proxy-services nil "*An alist of schemes and proxy servers that gateway them. Looks like ((\"http\" . \"hostname:portnumber\") ...). This is set up from the ACCESS_proxy environment variables." :type '(repeat (cons :format "%v" (string :tag "Protocol") (string :tag "Proxy"))) :group 'url) (defcustom url-passwd-entry-func nil "*Symbol indicating which function to call to read in a password. It will be set up depending on whether you are running EFS or ange-ftp at startup if it is nil. This function should accept the prompt string as its first argument, and the default value as its second argument." :type '(choice (const :tag "Guess" :value nil) (const :tag "Use Ange-FTP" :value ange-ftp-read-passwd) (const :tag "Use EFS" :value efs-read-passwd) (const :tag "Use Password Package" :value read-passwd) (function :tag "Other")) :group 'url-hairy) (defcustom url-standalone-mode nil "*Rely solely on the cache?" :type 'boolean :group 'url-cache) (defvar url-mime-separator-chars (mapcar 'identity (concat "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789'()+_,-./=?")) "Characters allowable in a MIME multipart separator.") (defcustom url-bad-port-list '("25" "119" "19") "*List of ports to warn the user about connecting to. Defaults to just the mail, chargen, and NNTP ports so you cannot be tricked into sending fake mail or forging messages by a malicious HTML document." :type '(repeat (string :tag "Port")) :group 'url-hairy) (defvar url-mime-content-type-charset-regexp ";[ \t]*charset=\"?\\([^\"]+\\)\"?" "Regexp used in parsing `Content-Type' for a charset indication.") (defvar url-request-data nil "Any data to send with the next request.") (defvar url-request-extra-headers nil "A list of extra headers to send with the next request. Should be an assoc list of headers/contents.") (defvar url-request-method nil "The method to use for the next request.") ;; FIXME!! (RFC 2616 gives examples like `compress, gzip'.) (defvar url-mime-encoding-string nil "*String to send in the Accept-encoding: field in HTTP requests.") ;; `mm-mime-mule-charset-alist' in Gnus 5.8/9 contains elements whose ;; cars aren't valid MIME charsets/coding systems, at least in Emacs. ;; This gets it correct by construction in Emacs. Fixme: DTRT for ;; XEmacs -- its `coding-system-list' doesn't have the BASE-ONLY arg. (when (and (not (featurep 'xemacs)) (fboundp 'coding-system-list)) (setq mm-mime-mule-charset-alist (apply 'nconc (mapcar (lambda (cs) (when (and (coding-system-get cs 'mime-charset) (not (eq t (coding-system-get cs 'safe-charsets)))) (list (cons (coding-system-get cs 'mime-charset) (delq 'ascii (coding-system-get cs 'safe-charsets)))))) (coding-system-list 'base-only))))) ;; Perhaps the first few should actually be given decreasing `q's and ;; the list should be trimmed significantly. ;; Fixme: do something sane if we don't have `sort-coding-systems' ;; (Emacs 20, XEmacs). (defun url-mime-charset-string () "Generate a list of preferred MIME charsets for HTTP requests. Generated according to current coding system priorities." (if (fboundp 'sort-coding-systems) (let ((ordered (sort-coding-systems (let (accum) (dolist (elt mm-mime-mule-charset-alist) (if (mm-coding-system-p (car elt)) (push (car elt) accum))) (nreverse accum))))) (concat (format "%s;q=1, " (pop ordered)) (mapconcat 'symbol-name ordered ";q=0.5, ") ";q=0.5")))) (defvar url-mime-charset-string (url-mime-charset-string) "*String to send in the Accept-charset: field in HTTP requests. The MIME charset corresponding to the most preferred coding system is given priority 1 and the rest are given priority 0.5.") (defun url-set-mime-charset-string () (setq url-mime-charset-string (url-mime-charset-string))) ;; Regenerate if the language environment changes. (add-hook 'set-language-environment-hook 'url-set-mime-charset-string) ;; Fixme: set from the locale. (defcustom url-mime-language-string nil "*String to send in the Accept-language: field in HTTP requests. Specifies the preferred language when servers can serve documents in several languages. Use RFC 1766 abbreviations, e.g.@: `en' for English, `de' for German. A comma-separated specifies descending order of preference. The ordering can be made explicit using `q' factors defined by HTTP, e.g. `de,en-gb;q=0.8,en;q=0.7'. `*' means get the first available language (as opposed to the default)." :type '(radio (const :tag "None (get default language version)" :value nil) (const :tag "Any (get first available language version)" :value "*") (string :tag "Other")) :group 'url-mime :group 'i18n) (defvar url-mime-accept-string nil "String to send to the server in the Accept: field in HTTP requests.") (defvar url-package-version nil "Version number of package using URL.") (defvar url-package-name nil "Version number of package using URL.") (defvar url-system-type nil "What type of system we are on.") (defvar url-os-type nil "What OS we are on.") (defcustom url-max-password-attempts 5 "*Maximum number of times a password will be prompted for. Applies when a protected document is denied by the server." :type 'integer :group 'url) (defcustom url-temporary-directory (or (getenv "TMPDIR") "/tmp") "*Where temporary files go." :type 'directory :group 'url-file) (defcustom url-show-status t "*Whether to show a running total of bytes transferred. Can cause a large hit if using a remote X display over a slow link, or a terminal with a slow modem." :type 'boolean :group 'url) (defvar url-using-proxy nil "Either nil or the fully qualified proxy URL in use, e.g. http://www.domain.com/") (defvar url-slow-proxy-requires-waiting-for nil "Either nil or a number of seconds to wait before authentication or redirection") (defcustom url-news-server nil "*The default news server from which to get newsgroups/articles. Applies if no server is specified in the URL. Defaults to the environment variable NNTPSERVER or \"news\" if NNTPSERVER is undefined." :type '(choice (const :tag "None" :value nil) string) :group 'url) (defvar url-nonrelative-link "\\`\\([-a-zA-Z0-9+.]+:\\)" "A regular expression that will match an absolute URL.") (defcustom url-confirmation-func 'y-or-n-p "*What function to use for asking yes or no functions. Possible values are `yes-or-no-p' or `y-or-n-p', or any function that takes a single argument (the prompt), and returns t only if a positive answer is given." :type '(choice (const :tag "Short (y or n)" :value y-or-n-p) (const :tag "Long (yes or no)" :value yes-or-no-p) (function :tag "Other")) :group 'url-hairy) (defcustom url-gateway-method 'native "*The type of gateway support to use. Should be a symbol specifying how to get a connection from the local machine. Currently supported methods: `telnet': Run telnet in a subprocess to connect; `rlogin': Rlogin to another machine to connect; `socks': Connect through a socks server; `ssl': Connect with SSL; `native': Connect directy." :type '(radio (const :tag "Telnet to gateway host" :value telnet) (const :tag "Rlogin to gateway host" :value rlogin) (const :tag "Use SOCKS proxy" :value socks) (const :tag "Use SSL for all connections" :value ssl) (const :tag "Direct connection" :value native)) :group 'url-hairy) (defvar url-setup-done nil "Has setup configuration been done?") (defconst weekday-alist '(("Sunday" . 0) ("Monday" . 1) ("Tuesday" . 2) ("Wednesday" . 3) ("Thursday" . 4) ("Friday" . 5) ("Saturday" . 6) ("Tues" . 2) ("Thurs" . 4) ("Sun" . 0) ("Mon" . 1) ("Tue" . 2) ("Wed" . 3) ("Thu" . 4) ("Fri" . 5) ("Sat" . 6))) (defconst monthabbrev-alist '(("Jan" . 1) ("Feb" . 2) ("Mar" . 3) ("Apr" . 4) ("May" . 5) ("Jun" . 6) ("Jul" . 7) ("Aug" . 8) ("Sep" . 9) ("Oct" . 10) ("Nov" . 11) ("Dec" . 12))) (defvar url-lazy-message-time 0) ;; Fixme: We may not be able to run SSL. (defvar url-extensions-header "Security/Digest Security/SSL") (defvar url-parse-syntax-table (copy-syntax-table emacs-lisp-mode-syntax-table) "*A syntax table for parsing URLs.") (modify-syntax-entry ?' "\"" url-parse-syntax-table) (modify-syntax-entry ?` "\"" url-parse-syntax-table) (modify-syntax-entry ?< "(>" url-parse-syntax-table) (modify-syntax-entry ?> ")<" url-parse-syntax-table) (modify-syntax-entry ?/ " " url-parse-syntax-table) (defvar url-load-hook nil "*Hooks to be run after initalizing the URL library.") ;;; Make OS/2 happy - yeeks ;; (defvar tcp-binary-process-input-services nil ;; "*Make OS/2 happy with our CRLF pairs...") (defconst url-working-buffer " *url-work") (defvar url-gateway-unplugged nil "Non-nil means don't open new network connexions. This should be set, e.g. by mail user agents rendering HTML to avoid `bugs' which call home.") (defun url-vars-unload-hook () (remove-hook 'set-language-environment-hook 'url-set-mime-charset-string)) (provide 'url-vars) ;;; url-vars.el ends here twittering-mode-3.0.0/url-emacs21/url.el0000644000000000000000000002334512141747407017767 0ustar rootroot00000000000000;;; url.el --- Uniform Resource Locator retrieval tool ;; Author: Bill Perry ;; Version: $Revision: 1.15 $ ;; Keywords: comm, data, processes, hypermedia ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Copyright (c) 1993 - 1996 by William M. Perry ;;; Copyright (c) 1996, 97, 98, 99, 2001 Free Software Foundation, Inc. ;;; ;;; This file is part of GNU Emacs. ;;; ;;; GNU Emacs is free software; you can redistribute it and/or modify ;;; it under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 2, or (at your option) ;;; any later version. ;;; ;;; GNU Emacs 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 General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Emacs; see the file COPYING. If not, write to the ;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;;; Boston, MA 02111-1307, USA. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Registered URI schemes: http://www.iana.org/assignments/uri-schemes (eval-when-compile (require 'cl)) ;; Don't require CL at runtime if we can avoid it (Emacs 21). ;; Otherwise we need it for hashing functions. `puthash' was never ;; defined in the Emacs 20 cl.el for some reason. (if (fboundp 'puthash) nil ; internal or CL is loaded (defalias 'puthash 'cl-puthash) (autoload 'cl-puthash "cl") (autoload 'gethash "cl") (autoload 'maphash "cl") (autoload 'make-hash-table "cl")) (eval-when-compile (require 'mm-decode) (require 'mm-view)) (require 'mailcap) (require 'url-vars) (require 'url-cookie) (require 'url-history) (require 'url-expand) (require 'url-privacy) (require 'url-methods) (require 'url-proxy) (require 'url-parse) (require 'url-util) ;; Fixme: customize? convert-standard-filename? ;;;###autoload (defvar url-configuration-directory "~/.url") (defun url-do-setup () "Setup the url package. This is to avoid conflict with user settings if URL is dumped with Emacs." (unless url-setup-done ;; Make OS/2 happy ;;(push '("http" "80") tcp-binary-process-input-services) (mailcap-parse-mailcaps) (mailcap-parse-mimetypes) ;; Register all the authentication schemes we can handle (url-register-auth-scheme "basic" nil 4) (url-register-auth-scheme "digest" nil 7) (setq url-cookie-file (or url-cookie-file (expand-file-name "cookies" url-configuration-directory))) (setq url-history-file (or url-history-file (expand-file-name "history" url-configuration-directory))) ;; Parse the global history file if it exists, so that it can be used ;; for URL completion, etc. (url-history-parse-history) (url-history-setup-save-timer) ;; Ditto for cookies (url-cookie-setup-save-timer) (url-cookie-parse-file url-cookie-file) ;; Read in proxy gateways (let ((noproxy (and (not (assoc "no_proxy" url-proxy-services)) (or (getenv "NO_PROXY") (getenv "no_PROXY") (getenv "no_proxy"))))) (if noproxy (setq url-proxy-services (cons (cons "no_proxy" (concat "\\(" (mapconcat (lambda (x) (cond ((= x ?,) "\\|") ((= x ? ) "") ((= x ?.) (regexp-quote ".")) ((= x ?*) ".*") ((= x ??) ".") (t (char-to-string x)))) noproxy "") "\\)")) url-proxy-services)))) ;; Set the password entry funtion based on user defaults or guess ;; based on which remote-file-access package they are using. (cond (url-passwd-entry-func nil) ; Already been set ((fboundp 'read-passwd) ; Use secure password if available (setq url-passwd-entry-func 'read-passwd)) ((or (featurep 'efs) ; Using EFS (featurep 'efs-auto)) ; or autoloading efs (if (not (fboundp 'read-passwd)) (autoload 'read-passwd "passwd" "Read in a password" nil)) (setq url-passwd-entry-func 'read-passwd)) ((or (featurep 'ange-ftp) ; Using ange-ftp (and (boundp 'file-name-handler-alist) (not (featurep 'xemacs)))) ; ?? (setq url-passwd-entry-func 'ange-ftp-read-passwd)) (t (url-warn 'security "(url-setup): Can't determine how to read passwords, winging it."))) (url-setup-privacy-info) (run-hooks 'url-load-hook) (setq url-setup-done t))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Retrieval functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun url-retrieve (url callback &optional cbargs) "Retrieve URL asynchronously and call CALLBACK with CBARGS when finished. The callback is called when the object has been completely retrieved, with the current buffer containing the object, and any MIME headers associated with it. URL is either a string or a parsed URL. Return the buffer URL will load into, or nil if the process has already completed." (url-do-setup) (url-gc-dead-buffers) (if (stringp url) (set-text-properties 0 (length url) nil url)) (if (not (vectorp url)) (setq url (url-generic-parse-url url))) (if (not (functionp callback)) (error "Must provide a callback function to url-retrieve")) (unless (url-type url) (error "Bad url: %s" (url-recreate-url url))) (let ((loader (url-scheme-get-property (url-type url) 'loader)) (url-using-proxy (if (url-host url) (url-find-proxy-for-url url (url-host url)))) (buffer nil) (asynch (url-scheme-get-property (url-type url) 'asynchronous-p))) (if url-using-proxy (setq asynch t loader 'url-proxy)) (if asynch (setq buffer (funcall loader url callback cbargs)) (setq buffer (funcall loader url)) (if buffer (save-excursion (set-buffer buffer) (apply callback cbargs)))) (url-history-update-url url (current-time)) buffer)) (defun url-retrieve-synchronously (url) "Retrieve URL synchronously. Return the buffer containing the data, or nil if there are no data associated with it (the case for dired, info, or mailto URLs that need no further processing). URL is either a string or a parsed URL." (url-do-setup) (lexical-let ((retrieval-done nil) (asynch-buffer nil)) (setq asynch-buffer (url-retrieve url (lambda (&rest ignored) (url-debug 'retrieval "Synchronous fetching done (%S)" (current-buffer)) (setq retrieval-done t asynch-buffer (current-buffer))))) (let ((proc (and asynch-buffer (get-buffer-process asynch-buffer)))) (if (null proc) ;; We do not need to do anything, it was a mailto or something ;; similar that takes processing completely outside of the URL ;; package. nil (while (not retrieval-done) (if (memq (process-status proc) '(closed exit signal failed)) ;; FIXME: It's not clear whether url-retrieve's callback is ;; guaranteed to be called or not. It seems that url-http ;; decides sometimes consciously not to call it, so it's not ;; clear that it's a bug, but even if we need to decide how ;; url-http can then warn us that the download has completed. ;; In the mean time, we use this here workaround. (setq retrieval-done t) ;; We used to use `sit-for' here, but in some cases it wouldn't ;; work because apparently pending keyboard input would always ;; interrupt it before it got a chance to handle process input. ;; `sleep-for' was tried but it lead to other forms of ;; hanging. --Stef (unless (accept-process-output proc) ;; accept-process-output returned nil, maybe because the process ;; exited (and may have been replaced with another). (setq proc (get-buffer-process asynch-buffer)))))) asynch-buffer))) (defun url-mm-callback (&rest ignored) (let ((handle (mm-dissect-buffer t))) (save-excursion (url-mark-buffer-as-dead (current-buffer)) (set-buffer (generate-new-buffer (url-recreate-url url-current-object))) (if (eq (mm-display-part handle) 'external) (progn (set-process-sentinel ;; Fixme: this shouldn't have to know the form of the ;; undisplayer produced by `mm-display-part'. (get-buffer-process (cdr (mm-handle-undisplayer handle))) `(lambda (proc event) (mm-destroy-parts (quote ,handle)))) (message "Viewing externally") (kill-buffer (current-buffer))) (display-buffer (current-buffer)) (mm-destroy-parts handle))))) (defun url-mm-url (url) "Retrieve URL and pass to the appropriate viewing application." (require 'mm-decode) (require 'mm-view) (url-retrieve url 'url-mm-callback nil)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Miscellaneous ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar url-dead-buffer-list nil) (defun url-mark-buffer-as-dead (buff) (push buff url-dead-buffer-list)) (defun url-gc-dead-buffers () (let ((buff)) (while (setq buff (pop url-dead-buffer-list)) (if (buffer-live-p buff) (kill-buffer buff))))) (cond ((fboundp 'display-warning) (defalias 'url-warn 'display-warning)) ((fboundp 'warn) (defun url-warn (class message &optional level) (warn "(%s/%s) %s" class (or level 'warning) message))) (t (defun url-warn (class message &optional level) (save-excursion (set-buffer (get-buffer-create "*URL-WARNINGS*")) (goto-char (point-max)) (save-excursion (insert (format "(%s/%s) %s\n" class (or level 'warning) message))) (display-buffer (current-buffer)))))) (provide 'url) ;;; url.el ends here twittering-mode-3.0.0/url-emacs21/vc-dav.el0000644000000000000000000001352612141747407020345 0ustar rootroot00000000000000;;; vc-dav.el --- vc.el support for WebDAV ;; Copyright (C) 2001 Free Software Foundation, Inc. ;; Author: Bill Perry ;; Maintainer: Bill Perry ;; Version: $Revision: 1.3 $ ;; Keywords: url, vc ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs 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 General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. (require 'url) (require 'url-dav) ;;; Required functions for a vc backend (defun vc-dav-registered (url) "Return t iff URL is registered with a DAV aware server." (url-dav-vc-registered url)) (defun vc-dav-state (url) "Return the current version control state of URL. For a list of possible values, see `vc-state'." ;; Things we can support for WebDAV ;; ;; up-to-date - use lockdiscovery ;; edited - check for an active lock by us ;; USER - use lockdiscovery + owner ;; ;; These don't make sense for WebDAV ;; needs-patch ;; needs-merge ;; unlocked-changes (let ((locks (url-dav-active-locks url))) (cond ((null locks) 'up-to-date) ((assoc url locks) ;; SOMEBODY has a lock... let's find out who. (setq locks (cdr (assoc url locks))) (if (rassoc url-dav-lock-identifier locks) ;; _WE_ have a lock 'edited (cdr (car locks))))))) (defun vc-dav-checkout-model (url) "Indicate whether URL needs to be \"checked out\" before it can be edited. See `vc-checkout-model' for a list of possible values." ;; The only thing we can support with webdav is 'locking 'locking) ;; This should figure out the version # of the file somehow. What is ;; the most appropriate property in WebDAV to look at for this? (defun vc-dav-workfile-version (url) "Return the current workfile version of URL." "Unknown") (defun vc-dav-register (url &optional rev comment) "Register URL in the DAV backend." ;; Do we need to do anything here? FIXME? ) (defun vc-dav-checkin (url rev comment) "Commit changes in URL to WebDAV. If REV is non-nil, that should become the new revision number. COMMENT is used as a check-in comment." ;; This should PUT the resource and release any locks that we hold. ) (defun vc-dav-checkout (url &optional editable rev destfile) "Check out revision REV of URL into the working area. If EDITABLE is non-nil URL should be writable by the user and if locking is used for URL, a lock should also be set. If REV is non-nil, that is the revision to check out. If REV is the empty string, that means to check ou tht ehead of the trunk. If optional arg DESTFILE is given, it is an alternate filename to write the contents to. " ;; This should LOCK the resource. ) (defun vc-dav-revert (url &optional contents-done) "Revert URL back to the current workfile version. If optional arg CONTENTS-DONE is non-nil, then the contents of FILE have already been reverted from a version backup, and this function only needs to update the status of URL within the backend. " ;; Should do a GET if !contents_done ;; Should UNLOCK the file. ) (defun vc-dav-print-log (url) "Insert the revision log of URL into the *vc* buffer." ) (defun vc-dav-diff (url &optional rev1 rev2) "Insert the diff for URL into the *vc-diff* buffer. If REV1 and REV2 are non-nil report differences from REV1 to REV2. If REV1 is nil, use the current workfile version as the older version. If REV2 is nil, use the current workfile contents as the nwer version. It should return a status of either 0 (no differences found), or 1 (either non-empty diff or the diff is run asynchronously). " ;; We should do this asynchronously... ;; How would we do it at all, that is the question! ) ;;; Optional functions ;; Should be faster than vc-dav-state - but how? (defun vc-dav-state-heuristic (url) "Estimate the version control state of URL at visiting time." (vc-dav-state url)) ;; This should use url-dav-get-properties with a depth of `1' to get ;; all the properties. (defun vc-dav-dir-state (url) "find the version control state of all files in DIR in a fast way." ) (defun vc-dav-workfile-unchanged-p (url) "Return non-nil if URL is unchanged from its current workfile version." ;; Probably impossible with webdav ) (defun vc-dav-responsible-p (url) "Return non-nil if DAV considers itself `responsible' for URL." ;; Check for DAV support on the web server. t) (defun vc-dav-could-register (url) "Return non-nil if URL could be registered under this backend." ;; Check for DAV support on the web server. t) ;;; Unimplemented functions ;; ;; vc-dav-latest-on-branch-p(URL) ;; Return non-nil if the current workfile version of FILE is the ;; latest on its branch. There are no branches in webdav yet. ;; ;; vc-dav-mode-line-string(url) ;; Return a dav-specific mode line string for URL. Are there any ;; specific states that we want exposed? ;; ;; vc-dav-dired-state-info(url) ;; Translate the `vc-state' property of URL into a string that can ;; be used in a vc-dired buffer. Are there any extra states that ;; we want exposed? ;; ;; vc-dav-receive-file(url rev) ;; Let this backend `receive' a file that is already registered ;; under another backend. The default just calls `register', which ;; should be sufficient for WebDAV. ;; ;; vc-dav-unregister(url) ;; Unregister URL. Not possible with WebDAV, other than by ;; deleting the resource. (provide 'vc-dav) twittering-mode-3.0.0/win-curl/.nosearch0000644000000000000000000000000012141747407020132 0ustar rootroot00000000000000twittering-mode-3.0.0/win-curl/README_j.txt0000644000000000000000000000415112141747407020351 0ustar rootroot00000000000000cURL + OpenSSL for Windows ƒ}ƒjƒ…ƒAƒ‹ Since: 27-Feb-2002 Version: 1.1 Author: MURAOKA Taro (KoRoN) Last Change: 04-Nov-2003. à–¾ cURL‚̓Rƒ}ƒ“ƒhƒ‰ƒCƒ“‚Å URI/URL ‚ðŽw’肵‚ÄAƒtƒ@ƒCƒ‹‚ðƒ_ƒEƒ“ƒ[ƒh‚·‚éƒ\ƒtƒg ƒEƒFƒA‚Å‚·BƒA[ƒJƒCƒu‚ÉŽû˜^‚³‚ê‚Ä‚¢‚éŽÀsƒtƒ@ƒCƒ‹(curl.exe)‚ÍAƒ\[ƒXƒR[ƒh ‚©‚ç SSL ‚ð—LŒø‚É‚µ‚Ä Visual C++ 6.0 ‚ð—p‚¢‚ăRƒ“ƒpƒCƒ‹‚µ‚½‚à‚̂ł·B SSL ‚Í OpenSSL‚Ì‚à‚Ì‚ðVC6‚ÆNASM 0.98‚ð—p‚¢‚ÄDLL‚Æ‚µ‚ăRƒ“ƒpƒCƒ‹‚µ‚Ü‚µ‚½B Žg‚¢•ûA‹y‚у‰ƒCƒZƒ“ƒX‚ɂ‚¢‚Ä‚ÌÚׂ͈ȉº‚ÌURI‚Æ”z•zƒA[ƒJƒCƒu“à‚Ìdocs/*‚ð ŽQÆ‚µ‚Ä‚­‚¾‚³‚¢B - cURL (7.10.8) http://curl.haxx.se/ - OpenSSL (0.9.7c) http://www.openssl.org/ –{ƒA[ƒJƒCƒu‚͈ȉº‚ÌURI‚ɂĔz•z‚³‚ê‚Ü‚µ‚½B - ‚艮 http://www.kaoriya.net/ - ”z•zŽÒƒ[ƒ‹ƒAƒhƒŒƒX koron@tka.att.ne.jp ‹Œ”Å‚ð‚¨Žg‚¢‚Ì•û‚Ö ¡”Å‚æ‚èDLL‚ðŽg—p‚¹‚¸’P‘Ì‚ÌEXE‚Æ‚µ‚ărƒ‹ƒh‚·‚邿‚¤‚É‚µ‚Ü‚µ‚½B‚»‚Ì‚½‚ß‹Œ”Å‚É ŠÜ‚Ü‚ê‚Ä‚¢‚½ libcurl.dll, libeay32.dll, ssleay32.dll‚Ì3‚‚̃tƒ@ƒCƒ‹‚Í•s—v‚É ‚È‚è‚Ü‚µ‚½B‚±‚ê‚ç‚̃tƒ@ƒCƒ‹‚Í‘¶Ý‚µ‚Ä‚¢‚Ä‚à‰½‚ÌŠQ‚É‚à‚È‚è‚Ü‚¹‚ñ‚ª“¾‚É‚à‚È‚ç ‚¸A‚Ü‚½–³‚­‚Ä‚àcURL‚Ì“®ì‚ÉŽxá‚ð‚«‚½‚·Ž–‚Í‚ ‚è‚Ü‚¹‚ñB‚æ‚Á‚ÄŠeŽ©‚Ì”»’f‚ÅÁ ‚µ‚Ä‚¢‚½‚¾‚¢‚Ä\‚¢‚Ü‚¹‚ñB XV—š—ð 04-Nov-2003 curl‚ð7.10.8‚ɃAƒbƒvƒf[ƒg OpenSSH‚ð0.9.7c‚ɃAƒbƒvƒf[ƒg CA‚ð”z•z•¨‚ɒljÁ 08-Apr-2003 curl‚ð7.10.4‚ɃAƒbƒvƒf[ƒg OpenSSH‚ð0.9.6i‚ɃAƒbƒvƒf[ƒg 23-Jan-2003 curl‚ð7.10.3‚ɃAƒbƒvƒf[ƒg OpenSSH‚ð0.9.6h‚ɃAƒbƒvƒf[ƒg DLL‚ł͂Ȃ­’P‘Ì‚ÌEXE‚Æ‚µ‚ÄƒŠƒrƒ‹ƒh ”z•zƒA[ƒJƒCƒu“à‚Édocs/FAQ‚ð’ljÁ 05-Oct-2002 curl‚ð7.10‚ɃAƒbƒvƒf[ƒg OpenSSH‚ð0.9.6g‚É•ÏX 06-Aug-2002 OpenSSH‚ð0.9.6e‚É•ÏX ------------------------------------------------------------------------------ ¶‚«‚鎖‚Ö‚Ì‹­‚¢ˆÓŽu‚ª“¯Žž‚ÉŽ©•ª‚ƈقȂ鶖½‚ð‚à‘¸‚ÔS‚ƂȂé MURAOKA Taro/KoRoN vim:set ts=8 sts=2 sw=2 tw=78 et ft=memo: twittering-mode-3.0.0/win-curl/curl-ca-bundle.crt0000644000000000000000000072316312141747407021664 0ustar rootroot00000000000000## ## $Id: ca-bundle.crt,v 1.2 2003/03/24 11:06:57 bagder Exp $ ## ## ca-bundle.crt -- Bundle of CA Root Certificates ## Last Modified: Thu Mar 2 09:32:46 CET 2000 ## ## This is a bundle of X.509 certificates of public ## Certificate Authorities (CA). These were automatically ## extracted from Netscape Communicator 4.72's certificate database ## (the file `cert7.db'). It contains the certificates in both ## plain text and PEM format and therefore can be directly used ## with an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## ## (SKIPME) ## ABAecom (sub., Am. Bankers Assn.) Root CA ========================================= MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92 PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24 4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5 0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5 m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr wo3CbezcE9NGxXl8 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Validity Not Before: Jul 14 16:14:18 1999 GMT Not After : Jul 11 16:14:18 2009 GMT Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c: 8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97: 61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3: ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c: d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2: 29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5: 6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25: 7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e: db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18: a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6: 1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c: db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0: 42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28: bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8: e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b: 0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6: ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c: ee:71 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 X509v3 Subject Key Identifier: 08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 Signature Algorithm: sha1WithRSAEncryption 5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b: 9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec: d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48: b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c: 18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30: 82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94: 90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2: 52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60: e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97: 16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22: 5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af: 60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed: 5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3: 9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3: 46:c5:79:7c ANX Network CA by DST ===================== MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D PEM Data: -----BEGIN CERTIFICATE----- MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04 JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913220207 (0x366ea26f) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Validity Not Before: Dec 9 15:46:48 1998 GMT Not After : Dec 9 16:16:48 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b4:48:11:80:58:a0:d5:a5:99:0f:f6:37:2c:44: b6:6e:d1:7c:f3:2a:6b:9e:11:b6:88:23:04:5c:71: 25:9e:6a:12:77:11:6e:bf:68:39:65:a8:f6:b2:f6: a2:18:b2:89:15:a0:67:b7:7a:8c:22:48:6b:f6:84: 34:1f:b6:ca:f7:1b:72:cb:f2:5b:48:d3:87:1e:22: 76:13:04:b4:ac:6c:96:7f:e7:0e:08:c9:32:51:30: 2d:d5:80:e8:21:67:ba:f3:5e:08:24:2c:07:59:9d: 90:1a:ee:46:c9:b5:a4:1e:96:b4:41:91:d4:7f:d2: 8d:38:26:b0:6f:43:6e:09:7d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 15:46:48 1998 GMT, Not After: Dec 9 15:46:48 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Subject Key Identifier: 8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 49:25:c9:60:b1:0c:5f:a9:39:10:d3:c5:34:55:7d:cf:79:c3: 29:eb:de:f9:c2:40:f9:e8:56:c5:f0:2f:ec:f4:d9:ec:48:51: b8:63:38:5e:93:6e:18:96:85:b9:ca:50:9c:a4:b8:ea:66:26: 68:93:85:6f:6f:4c:71:d0:be:7a:0b:3c:31:b9:f7:be:69:9e: 10:d7:d1:40:e8:ac:16:71:ab:ae:ab:38:e1:70:b1:ca:92:16: e0:5d:85:a6:18:80:06:00:9c:e1:a6:18:42:51:a7:68:68:59: ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32: a3:5d American Express CA =================== MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0 PEM Data: -----BEGIN CERTIFICATE----- MIICkDCCAfkCAgCNMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYDVQQGEwJVUzEnMCUG A1UEChMeQW1lcmljYW4gRXhwcmVzcyBDb21wYW55LCBJbmMuMSYwJAYDVQQLEx1B bWVyaWNhbiBFeHByZXNzIFRlY2hub2xvZ2llczEvMC0GA1UEAxMmQW1lcmljYW4g RXhwcmVzcyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgwODE0MjIwMTAwWhcN MDYwODE0MjM1OTAwWjCBjzELMAkGA1UEBhMCVVMxJzAlBgNVBAoTHkFtZXJpY2Fu IEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1lcmljYW4gRXhwcmVz cyBUZWNobm9sb2dpZXMxLzAtBgNVBAMTJkFtZXJpY2FuIEV4cHJlc3MgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ8kmS hcr9FSm1BrZE7PyIo/KGzv8UTyQckvnCI8HOQ99dNMi4FOzVKnCRSZXXVs2U8amT 0Ggi3E19oApyKkfqJfCFAF82VGHPC/k3Wmed6R/pZD9wlWGn0DAC3iYopGYDBOkw +48zB/lvYYeictvzaHhjZlmpybdm4RWySDYs+QIDAQABMA0GCSqGSIb3DQEBBAUA A4GBAGgXYrhzi0xs60qlPqvlnS7SzYoHV/PGWZd2Fxf4Uo4nk9hY2Chs9KIEeorC diSxArTfKPL386infiNIYYj0EWiuJl32oUtTJWrYKhQCDuCHIG6eGVxzkAsj4jGX Iz/VIqLTBnvaN/XXtUFEF3pFAtmFRWbWjsfwegyZYiJpW+3S -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 141 (0x8d) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Validity Not Before: Aug 14 22:01:00 1998 GMT Not After : Aug 14 23:59:00 2006 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:f2:49:92:85:ca:fd:15:29:b5:06:b6:44:ec: fc:88:a3:f2:86:ce:ff:14:4f:24:1c:92:f9:c2:23: c1:ce:43:df:5d:34:c8:b8:14:ec:d5:2a:70:91:49: 95:d7:56:cd:94:f1:a9:93:d0:68:22:dc:4d:7d:a0: 0a:72:2a:47:ea:25:f0:85:00:5f:36:54:61:cf:0b: f9:37:5a:67:9d:e9:1f:e9:64:3f:70:95:61:a7:d0: 30:02:de:26:28:a4:66:03:04:e9:30:fb:8f:33:07: f9:6f:61:87:a2:72:db:f3:68:78:63:66:59:a9:c9: b7:66:e1:15:b2:48:36:2c:f9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:17:62:b8:73:8b:4c:6c:eb:4a:a5:3e:ab:e5:9d:2e:d2:cd: 8a:07:57:f3:c6:59:97:76:17:17:f8:52:8e:27:93:d8:58:d8: 28:6c:f4:a2:04:7a:8a:c2:76:24:b1:02:b4:df:28:f2:f7:f3: a8:a7:7e:23:48:61:88:f4:11:68:ae:26:5d:f6:a1:4b:53:25: 6a:d8:2a:14:02:0e:e0:87:20:6e:9e:19:5c:73:90:0b:23:e2: 31:97:23:3f:d5:22:a2:d3:06:7b:da:37:f5:d7:b5:41:44:17: 7a:45:02:d9:85:45:66:d6:8e:c7:f0:7a:0c:99:62:22:69:5b: ed:d2 American Express Global CA ========================== MD5 Fingerprint: 63:1B:66:93:8C:F3:66:CB:3C:79:57:DC:05:49:EA:DB PEM Data: -----BEGIN CERTIFICATE----- MIIEBDCCAuygAwIBAgICAIUwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVT MScwJQYDVQQKEx5BbWVyaWNhbiBFeHByZXNzIENvbXBhbnksIEluYy4xJjAkBgNV BAsTHUFtZXJpY2FuIEV4cHJlc3MgVGVjaG5vbG9naWVzMTYwNAYDVQQDEy1BbWVy aWNhbiBFeHByZXNzIEdsb2JhbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgw ODE0MTkwNjAwWhcNMTMwODE0MjM1OTAwWjCBljELMAkGA1UEBhMCVVMxJzAlBgNV BAoTHkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1l cmljYW4gRXhwcmVzcyBUZWNobm9sb2dpZXMxNjA0BgNVBAMTLUFtZXJpY2FuIEV4 cHJlc3MgR2xvYmFsIENlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAPAkJmYu++tKc3FTiUfLJjxTkpRMysKFtQ34w1e9 Lyofahi3V68MABb6oLaQpvcaoS5mJsdoo4qTaWa1RlYtHYLqkAwKIsKJUI0F89Sr c0HwzxKsKLRvFJSWWUuekHWG3+JH6+HpT0N+h8onGGaetcFAZX38YW+tm3LPqV7Y 8/nabpEQ+ky16n4g3qk5L/WI5IpvNcYgnCuGRjMK/DFVpWusFkDpzTVZbzIEw3u1 D3t3cPNIuypSgs6vKW3xEW9t5gcAAe+a8yYNpnkTZ6/4qxx1rJG1a75AsN6cDLFp hRlxkRNFyt/R/eayypaDedvFuKpbepALeFY+xteflEgR9a0CAwEAAaNaMFgwEgYD VR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAQYwFwYDVR0gBBAwDjAMBgoq hkiG+Q8KAQUBMBkGA1UdDgQSBBBXRzV7NicRqAj8L0Yl6yRpMA0GCSqGSIb3DQEB BQUAA4IBAQDHYUWoinG5vjTpIXshzVYTmNUwY+kYqkuSFb8LHbvskmnFLsNhi+gw RcsQRsFzOFyLGdIr80DrfHKzLh4n43WVihybLsSVBYZy0FX0oZJSeVzb9Pjc5dcS sUDHPIbkMWVKyjfG3nZXGWlMRmn8Kq0WN3qTrPchSy3766lQy8HRQAjaA2mHpzde VcHF7cTjjgwml5tcV0ty4/IDBdACOyYDQJCevgtbSQx48dVMVSng9v1MA6lUAjLR V1qFrEPtWzsWX6C/NdtLnnvo/+cNPDuom0lBRvVzTv+SZSGDE1Vx60k8f4gawhIo JaFGS0E3l3/sjvHUoZbCILZerakcHhGg -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 133 (0x85) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Validity Not Before: Aug 14 19:06:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:f0:24:26:66:2e:fb:eb:4a:73:71:53:89:47:cb: 26:3c:53:92:94:4c:ca:c2:85:b5:0d:f8:c3:57:bd: 2f:2a:1f:6a:18:b7:57:af:0c:00:16:fa:a0:b6:90: a6:f7:1a:a1:2e:66:26:c7:68:a3:8a:93:69:66:b5: 46:56:2d:1d:82:ea:90:0c:0a:22:c2:89:50:8d:05: f3:d4:ab:73:41:f0:cf:12:ac:28:b4:6f:14:94:96: 59:4b:9e:90:75:86:df:e2:47:eb:e1:e9:4f:43:7e: 87:ca:27:18:66:9e:b5:c1:40:65:7d:fc:61:6f:ad: 9b:72:cf:a9:5e:d8:f3:f9:da:6e:91:10:fa:4c:b5: ea:7e:20:de:a9:39:2f:f5:88:e4:8a:6f:35:c6:20: 9c:2b:86:46:33:0a:fc:31:55:a5:6b:ac:16:40:e9: cd:35:59:6f:32:04:c3:7b:b5:0f:7b:77:70:f3:48: bb:2a:52:82:ce:af:29:6d:f1:11:6f:6d:e6:07:00: 01:ef:9a:f3:26:0d:a6:79:13:67:af:f8:ab:1c:75: ac:91:b5:6b:be:40:b0:de:9c:0c:b1:69:85:19:71: 91:13:45:ca:df:d1:fd:e6:b2:ca:96:83:79:db:c5: b8:aa:5b:7a:90:0b:78:56:3e:c6:d7:9f:94:48:11: f5:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113807.10.1.5.1 X509v3 Subject Key Identifier: 57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69 Signature Algorithm: sha1WithRSAEncryption c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5: 30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3: 61:8b:e8:30:45:cb:10:46:c1:73:38:5c:8b:19:d2:2b:f3:40: eb:7c:72:b3:2e:1e:27:e3:75:95:8a:1c:9b:2e:c4:95:05:86: 72:d0:55:f4:a1:92:52:79:5c:db:f4:f8:dc:e5:d7:12:b1:40: c7:3c:86:e4:31:65:4a:ca:37:c6:de:76:57:19:69:4c:46:69: fc:2a:ad:16:37:7a:93:ac:f7:21:4b:2d:fb:eb:a9:50:cb:c1: d1:40:08:da:03:69:87:a7:37:5e:55:c1:c5:ed:c4:e3:8e:0c: 26:97:9b:5c:57:4b:72:e3:f2:03:05:d0:02:3b:26:03:40:90: 9e:be:0b:5b:49:0c:78:f1:d5:4c:55:29:e0:f6:fd:4c:03:a9: 54:02:32:d1:57:5a:85:ac:43:ed:5b:3b:16:5f:a0:bf:35:db: 4b:9e:7b:e8:ff:e7:0d:3c:3b:a8:9b:49:41:46:f5:73:4e:ff: 92:65:21:83:13:55:71:eb:49:3c:7f:88:1a:c2:12:28:25:a1: 46:4b:41:37:97:7f:ec:8e:f1:d4:a1:96:c2:20:b6:5e:ad:a9: 1c:1e:11:a0 BelSign Object Publishing CA ============================ MD5 Fingerprint: 8A:02:F8:DF:B8:E1:84:9F:5A:C2:60:24:65:D1:73:FB PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBuzELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQL Ey9CZWxTaWduIE9iamVjdCBQdWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0 eTElMCMGA1UEAxMcQmVsU2lnbiBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqG SIb3DQEJARYUd2VibWFzdGVyQGJlbHNpZ24uYmUwHhcNOTcwOTE5MjIwMzAwWhcN MDcwOTE5MjIwMzAwWjCBuzELMAkGA1UEBhMCQkUxETAPBgNVBAcTCEJydXNzZWxz MRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQLEy9CZWxTaWduIE9iamVjdCBQ dWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0eTElMCMGA1UEAxMcQmVsU2ln biBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVy QGJlbHNpZ24uYmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQuH7a/7oJA 3fm3LkHVngWxWtAmfGJVA5v8y2HeS+/+6Jn+h7mIz5DaDwk8dt8Xl7bLPyVF/bS8 WAC+sFq2FIeP7mdkrR2Ig7tnn2VhAFgIgFCfgMkx9iqQHC33SmwQ9iNDXTgJYIhX As0WbBj8zfuSKnfQnpOjXYhk0Mj4XVRRAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE AwIABzANBgkqhkiG9w0BAQQFAAOBgQBjdhd8lvBTpV0BHFPOKcJ+daxMDaIIc7Rq Mf0CBhSZ3FQEpL/IloafMUMyJVf2hfYluze+oXkjyVcGJXFrRU/49AJAFoIir1Tq Mij2De6ZuksIUQ9uhiMhTC0liIHELg7xEyw4ipUCJMM6lWPkk45IuwhHcl+u5jpa R9Zxxp6aUg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Validity Not Before: Sep 19 22:03:00 1997 GMT Not After : Sep 19 22:03:00 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c4:2e:1f:b6:bf:ee:82:40:dd:f9:b7:2e:41:d5: 9e:05:b1:5a:d0:26:7c:62:55:03:9b:fc:cb:61:de: 4b:ef:fe:e8:99:fe:87:b9:88:cf:90:da:0f:09:3c: 76:df:17:97:b6:cb:3f:25:45:fd:b4:bc:58:00:be: b0:5a:b6:14:87:8f:ee:67:64:ad:1d:88:83:bb:67: 9f:65:61:00:58:08:80:50:9f:80:c9:31:f6:2a:90: 1c:2d:f7:4a:6c:10:f6:23:43:5d:38:09:60:88:57: 02:cd:16:6c:18:fc:cd:fb:92:2a:77:d0:9e:93:a3: 5d:88:64:d0:c8:f8:5d:54:51 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac: 4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf: c8:96:86:9f:31:43:32:25:57:f6:85:f6:25:bb:37:be:a1:79: 23:c9:57:06:25:71:6b:45:4f:f8:f4:02:40:16:82:22:af:54: ea:32:28:f6:0d:ee:99:ba:4b:08:51:0f:6e:86:23:21:4c:2d: 25:88:81:c4:2e:0e:f1:13:2c:38:8a:95:02:24:c3:3a:95:63: e4:93:8e:48:bb:08:47:72:5f:ae:e6:3a:5a:47:d6:71:c6:9e: 9a:52 BelSign Secure Server CA ======================== MD5 Fingerprint: 3D:5E:82:C6:D9:AD:D9:8B:93:6B:0C:10:B9:49:0A:B1 PEM Data: -----BEGIN CERTIFICATE----- MIIC8zCCAlygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBszELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTQwMgYDVQQL EytCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSEw HwYDVQQDExhCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ0ExIzAhBgkqhkiG9w0BCQEW FHdlYm1hc3RlckBiZWxzaWduLmJlMB4XDTk3MDcxNjIyMDA1NFoXDTA3MDcxNjIy MDA1NFowgbMxCzAJBgNVBAYTAkJFMREwDwYDVQQHEwhCcnVzc2VsczETMBEGA1UE ChMKQmVsU2lnbiBOVjE0MDIGA1UECxMrQmVsU2lnbiBTZWN1cmUgU2VydmVyIENl cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQmVsU2lnbiBTZWN1cmUgU2Vy dmVyIENBMSMwIQYJKoZIhvcNAQkBFhR3ZWJtYXN0ZXJAYmVsc2lnbi5iZTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gESeJL4BEJ/yccig/x8R3AwK0kLPjZA kCjaIXODU/LE0RZAwFP/rqbGJLMnbaWzPTl3XagG9ubpvGMRTgZlcAqdk/miQIt/ SoQOjRax1swIZBIM4ChLyKWEkBf7EUYu1qeFGMsYrmOasFgG9ADP+MQJGjUMofnu Sv1t3v4mpTsCAwEAAaMVMBMwEQYJYIZIAYb4QgEBBAQDAgCgMA0GCSqGSIb3DQEB BAUAA4GBAGw9mcMF4h3K5S2qaIWLQDEgZhNo5lg6idCNdbLFYth9go/32TKBd/Y1 W4UpzmeyubwrGXjP84f9RvGVdbIJVwMwwXrNckdxgMp9ncllPEcRIn36BwsoeKGT 6AVFSOIyMko96FMcELfHc4wHUOH5yStTQfWDjeUJOUqOA2KqQGOL -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be Validity Not Before: Jul 16 22:00:54 1997 GMT Not After : Jul 16 22:00:54 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d6:01:12:78:92:f8:04:42:7f:c9:c7:22:83:fc: 7c:47:70:30:2b:49:0b:3e:36:40:90:28:da:21:73: 83:53:f2:c4:d1:16:40:c0:53:ff:ae:a6:c6:24:b3: 27:6d:a5:b3:3d:39:77:5d:a8:06:f6:e6:e9:bc:63: 11:4e:06:65:70:0a:9d:93:f9:a2:40:8b:7f:4a:84: 0e:8d:16:b1:d6:cc:08:64:12:0c:e0:28:4b:c8:a5: 84:90:17:fb:11:46:2e:d6:a7:85:18:cb:18:ae:63: 9a:b0:58:06:f4:00:cf:f8:c4:09:1a:35:0c:a1:f9: ee:4a:fd:6d:de:fe:26:a5:3b Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL Client, S/MIME Signature Algorithm: md5WithRSAEncryption 6c:3d:99:c3:05:e2:1d:ca:e5:2d:aa:68:85:8b:40:31:20:66: 13:68:e6:58:3a:89:d0:8d:75:b2:c5:62:d8:7d:82:8f:f7:d9: 32:81:77:f6:35:5b:85:29:ce:67:b2:b9:bc:2b:19:78:cf:f3: 87:fd:46:f1:95:75:b2:09:57:03:30:c1:7a:cd:72:47:71:80: ca:7d:9d:c9:65:3c:47:11:22:7d:fa:07:0b:28:78:a1:93:e8: 05:45:48:e2:32:32:4a:3d:e8:53:1c:10:b7:c7:73:8c:07:50: e1:f9:c9:2b:53:41:f5:83:8d:e5:09:39:4a:8e:03:62:aa:40: 63:8b Deutsche Telekom AG Root CA =========================== MD5 Fingerprint: 77:DE:04:94:77:D0:0C:5F:A7:B1:F4:30:18:87:FB:55 PEM Data: -----BEGIN CERTIFICATE----- MIICjjCCAfegAwIBAgIBBjANBgkqhkiG9w0BAQQFADBtMQswCQYDVQQGEwJERTEc MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEdMBsGA1UECxMUVGVsZVNlYyBU cnVzdCBDZW50ZXIxITAfBgNVBAMTGERldXRzY2hlIFRlbGVrb20gUm9vdCBDQTAe Fw05ODEyMDkwOTExMDBaFw0wNDEyMDkyMzU5MDBaMG0xCzAJBgNVBAYTAkRFMRww GgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR0wGwYDVQQLExRUZWxlU2VjIFRy dXN0IENlbnRlcjEhMB8GA1UEAxMYRGV1dHNjaGUgVGVsZWtvbSBSb290IENBMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBSz5BbO5EtdpcffqVjAIVxRDe7sa nG0vV2HX4vVEa+42QZb2ZM7hwbK5pBQEmFDocPiONZp9ScFhHVmu2gYYlX2tzuyp vtEYD0CRdiqj5f3+iRX0V/fgVdp1rQD0LME1zLRDJlViRC4BJZyKW/DB0AA1eP41 3pRAZHiDocw5iQIDAQABoz4wPDAPBgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQE AwIBBjAZBgNVHQ4EEgQQLIdZH4sTgLL5hp0+En5YljANBgkqhkiG9w0BAQQFAAOB gQAP/nO1B4hvoAuJ6spQH5TelCsLJ15P9RyVJtqMllStGZE3Q12ryYuzzW+YOT3t 3TXjcbftE5OD6IblKTMTE7w1e/0oL3BZ1dO0jSgTWTvI1XT5RcIHYKq4GFT5pWj/ 1wXVj7YFMS5BSvQQH2BHGguLGU2SVyDS71AZ6M3QcLy8Ng== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 6 (0x6) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA Validity Not Before: Dec 9 09:11:00 1998 GMT Not After : Dec 9 23:59:00 2004 GMT Subject: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:dd:05:2c:f9:05:b3:b9:12:d7:69:71:f7:ea:56: 30:08:57:14:43:7b:bb:1a:9c:6d:2f:57:61:d7:e2: f5:44:6b:ee:36:41:96:f6:64:ce:e1:c1:b2:b9:a4: 14:04:98:50:e8:70:f8:8e:35:9a:7d:49:c1:61:1d: 59:ae:da:06:18:95:7d:ad:ce:ec:a9:be:d1:18:0f: 40:91:76:2a:a3:e5:fd:fe:89:15:f4:57:f7:e0:55: da:75:ad:00:f4:2c:c1:35:cc:b4:43:26:55:62:44: 2e:01:25:9c:8a:5b:f0:c1:d0:00:35:78:fe:35:de: 94:40:64:78:83:a1:cc:39:89 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 2C:87:59:1F:8B:13:80:B2:F9:86:9D:3E:12:7E:58:96 Signature Algorithm: md5WithRSAEncryption 0f:fe:73:b5:07:88:6f:a0:0b:89:ea:ca:50:1f:94:de:94:2b: 0b:27:5e:4f:f5:1c:95:26:da:8c:96:54:ad:19:91:37:43:5d: ab:c9:8b:b3:cd:6f:98:39:3d:ed:dd:35:e3:71:b7:ed:13:93: 83:e8:86:e5:29:33:13:13:bc:35:7b:fd:28:2f:70:59:d5:d3: b4:8d:28:13:59:3b:c8:d5:74:f9:45:c2:07:60:aa:b8:18:54: f9:a5:68:ff:d7:05:d5:8f:b6:05:31:2e:41:4a:f4:10:1f:60: 47:1a:0b:8b:19:4d:92:57:20:d2:ef:50:19:e8:cd:d0:70:bc: bc:36 Digital Signature Trust Co. Global CA 1 ======================================= MD5 Fingerprint: 25:7A:BA:83:2E:B6:A2:0B:DA:FE:F5:02:0F:08:D7:AD PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i +DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913315222 (0x36701596) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Validity Not Before: Dec 10 18:10:23 1998 GMT Not After : Dec 10 18:40:23 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de: 83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c: a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5: 62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb: 43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8: bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00: cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3: be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d: 13:74:76:36:b5:7a:b4:2d:71 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Subject Key Identifier: 6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f: e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42: c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b: 31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c: a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97: 8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c: e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3: 8a:65 Digital Signature Trust Co. Global CA 2 ======================================= MD5 Fingerprint: 6C:C9:A7:6E:47:F1:0C:E3:53:3B:78:4C:4D:C2:6A:C5 PEM Data: -----BEGIN CERTIFICATE----- MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F 5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:02:7c:00:00:00:02:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com Validity Not Before: Dec 1 18:18:55 1998 GMT Not After : Nov 28 18:18:55 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d2:c6:26:b6:e7:a5:3d:c1:c4:68:d5:50:6f:53: c5:6f:49:13:09:b8:af:2c:48:8d:14:6a:a3:17:5f: 5a:f9:d3:2e:75:2f:d8:28:62:d1:93:2f:fc:4d:d4: ab:87:e5:08:c7:99:e7:92:3f:75:bd:eb:25:b4:15: c1:9b:19:3d:d2:44:8d:d7:74:20:6d:37:02:8f:69: 93:5b:8a:c4:19:9d:f4:b2:0e:fc:16:6c:b9:b1:05: 92:83:d1:85:2c:60:94:3e:45:55:a0:d9:ab:08:21: e6:60:e8:3b:74:f2:99:50:51:68:d0:03:2d:b1:80: be:a3:d8:52:b0:44:cd:43:4a:70:8e:58:85:95:e1: 4e:2c:d6:2d:41:6f:d6:84:e7:c8:98:44:ca:47:db: 2c:24:a5:69:26:cf:6b:b8:27:62:c3:f4:c9:7a:92: 23:ed:13:67:82:ae:45:2e:45:e5:7e:72:3f:85:9d: 94:62:10:e6:3c:91:a1:ad:77:00:e0:15:ec:f3:84: 80:72:7a:8e:6e:60:97:c7:24:59:10:34:83:5b:e1: a5:a4:69:b6:57:35:1c:78:59:c6:d3:2f:3a:73:67: ee:94:ca:04:13:05:62:06:70:23:b3:f4:7c:ee:45: d9:64:0b:5b:49:aa:a4:43:ce:26:c4:44:12:6c:b8: dd:79 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption a2:37:b2:3f:69:fb:d7:86:79:54:49:31:95:33:2b:f3:d1:09: 14:49:62:60:86:a5:b0:11:e2:50:c2:1d:06:57:3e:2d:e8:33: 64:be:9b:aa:ad:5f:1b:4d:d4:99:95:a2:8b:9a:c9:62:72:b5: 69:ea:d9:58:ab:35:ed:15:a2:43:d6:b6:bc:07:79:65:64:73: 7d:d7:79:ca:7b:d5:5a:51:c6:e1:53:04:96:8d:38:cf:a3:17: ac:39:71:6b:01:c3:8b:53:3c:63:e9:ee:79:c0:e4:be:92:32: 64:7a:b3:1f:97:94:62:bd:ea:b2:20:15:95:fb:97:f2:78:2f: 63:36:40:38:e3:46:0f:1d:dd:ac:95:ca:e7:4b:90:7b:b1:4b: a9:d4:c5:eb:9a:da:aa:d5:a3:94:14:46:8d:2d:1f:f3:3a:d6: 93:3a:f6:3e:79:fc:e8:e6:b0:75:ed:ee:3d:c9:70:c7:5d:aa: 81:4b:46:25:1c:c7:6c:15:e3:95:4e:0f:aa:32:37:94:0a:17: 24:92:13:84:58:d2:63:6f:2b:f7:e6:5b:62:0b:13:17:b0:0d: 52:4c:fe:fe:6f:5c:e2:91:6e:1d:fd:a4:62:d7:68:fa:8e:7a: 4f:d2:08:da:93:dc:f0:92:11:7a:d0:dc:72:93:0c:73:93:62: 85:68:d0:f4 Digital Signature Trust Co. Global CA 3 ======================================= MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913232846 (0x366ed3ce) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Validity Not Before: Dec 9 19:17:26 1998 GMT Not After : Dec 9 19:47:26 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16: bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03: b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8: 63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce: 1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f: ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef: de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6: 17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da: 0c:9d:e7:91:5b:80:cd:94:9d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 19:17:26 1998 GMT, Not After: Dec 9 19:17:26 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Subject Key Identifier: 1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38: 72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5: d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e: a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec: b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83: 73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0: 78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3: a2:03 Digital Signature Trust Co. Global CA 4 ======================================= MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA PEM Data: -----BEGIN CERTIFICATE----- MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl 5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi 3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ 2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL 553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q 10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com Validity Not Before: Nov 30 22:46:16 1998 GMT Not After : Nov 27 22:46:16 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4: e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5: a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a: 50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb: 26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92: dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39: fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd: 82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd: 91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd: 33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0: 26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae: 85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1: 62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32: 17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf: cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af: 6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48: da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb: 09:db Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28: a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90: d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07: eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1: cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45: e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be: e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83: 7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79: 28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40: d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a: d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f: 56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec: b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba: c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad: 7f:c2:78:b6 Entrust Worldwide by DST ======================== MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75 PEM Data: -----BEGIN CERTIFICATE----- MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe 3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU /Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn 3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J 1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr 3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913163544 (0x366dc518) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA Validity Not Before: Dec 9 00:02:24 1998 GMT Not After : Dec 9 00:32:24 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32: 0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de: de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4: fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4: fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69: fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12: bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38: c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3: c6:ec:3f:be:35:9c:3d:22:ef Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST-Entrust GTI CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 00:02:24 1998 GMT, Not After: Dec 9 00:02:24 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE X509v3 Subject Key Identifier: 93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87: b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c: 03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4: cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1: 2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1: 76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b: 1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1: 4e:4c Entrust.net Premium 2048 Secure Server CA ========================================= MD5 Fingerprint: BA:21:EA:20:D6:DD:DB:8F:C1:57:8B:40:AD:A1:FC:FC PEM Data: -----BEGIN CERTIFICATE----- MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy vUxFnmG6v4SBkgPR0ml8xQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 946059622 (0x3863b966) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Validity Not Before: Dec 24 17:50:51 1999 GMT Not After : Dec 24 18:20:51 2019 GMT Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64: 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7: 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76: 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf: e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1: 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29: b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64: ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c: e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89: a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90: 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2: cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a: fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55: 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86: 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26: 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e: 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0: 07:e1 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Authority Key Identifier: keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 X509v3 Subject Key Identifier: 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 1.2.840.113533.7.65.0: 0...V5.0:4.0.... Signature Algorithm: sha1WithRSAEncryption 59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c: 4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61: 7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73: ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5: da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4: 03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4: 15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68: c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c: 7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33: db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18: b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2: de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c: e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e: c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1: d2:69:7c:c5 Entrust.net Secure Personal CA ============================== MD5 Fingerprint: 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4 PEM Data: -----BEGIN CERTIFICATE----- MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo 6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux 5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a EkP/TOYGJqibGapEPHayXOw= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 939758062 (0x380391ee) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority Validity Not Before: Oct 12 19:24:30 1999 GMT Not After : Oct 12 19:54:30 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c8:3a:99:5e:31:17:df:ac:27:6f:90:7b:e4:19: ff:45:a3:34:c2:db:c1:a8:4f:f0:68:ea:84:fd:9f: 75:79:cf:c1:8a:51:94:af:c7:57:03:47:64:9e:ad: 82:1b:5a:da:7f:37:78:47:bb:37:98:12:96:ce:c6: 13:7d:ef:d2:0c:30:51:a9:39:9e:55:f8:fb:b1:e7: 30:de:83:b2:ba:3e:f1:d5:89:3b:3b:85:ba:aa:74: 2c:fe:3f:31:6e:af:91:95:6e:06:d4:07:4d:4b:2c: 56:47:18:04:52:da:0e:10:93:bf:63:90:9b:e1:df: 8c:e6:02:a4:e6:4f:5e:f7:8b Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Entrust.net/OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab./OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Client Certification Authority/CN=CRL1 URI:http://www.entrust.net/CRL/Client1.crl X509v3 Private Key Usage Period: Not Before: Oct 12 19:24:30 1999 GMT, Not After: Oct 12 19:24:30 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C X509v3 Subject Key Identifier: C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: md5WithRSAEncryption 3f:ae:8a:f1:d7:66:03:05:9e:3e:fa:ea:1c:46:bb:a4:5b:8f: 78:9a:12:48:99:f9:f4:35:de:0c:36:07:02:6b:10:3a:89:14: 81:9c:31:a6:7c:b2:41:b2:6a:e7:07:01:a1:4b:f9:9f:25:3b: 96:ca:99:c3:3e:a1:51:1c:f3:c3:2e:44:f7:b0:67:46:aa:92: e5:3b:da:1c:19:14:38:30:d5:e2:a2:31:25:2e:f1:ec:45:38: ed:f8:06:58:03:73:62:b0:10:31:8f:40:bf:64:e0:5c:3e:c5: 4f:1f:da:12:43:ff:4c:e6:06:26:a8:9b:19:aa:44:3c:76:b2: 5c:ec Entrust.net Secure Server CA ============================ MD5 Fingerprint: DF:F2:80:73:CC:F1:E6:61:73:FC:F5:42:E9:C5:7C:EE PEM Data: -----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 927650371 (0x374ad243) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Validity Not Before: May 25 16:09:40 1999 GMT Not After : May 25 16:39:40 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff: af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1: 0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81: 26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71: d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24: da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29: 92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8: ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81: b1:16:19:61:b9:54:b6:e6:43 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1 URI:http://www.entrust.net/CRL/net1.crl X509v3 Private Key Usage Period: Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Subject Key Identifier: F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb: 47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d: f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31: c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb: a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58: 0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54: 73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06: f9:b2 Equifax Premium CA ================== MD5 Fingerprint: A9:E9:A8:9D:0E:73:E3:B1:2F:37:0D:E8:48:3F:86:ED PEM Data: -----BEGIN CERTIFICATE----- MIIDIzCCAoygAwIBAgIENeHvHjANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEuMCwGA1UECxMlRXF1aWZheCBQcmVtaXVtIENl cnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjQyMjU0MjNaFw0xODA4MjQyMjU0 MjNaME8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVF cXVpZmF4IFByZW1pdW0gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3 DQEBAQUAA4GNADCBiQKBgQDOoQaOBswIC8GGqN4g1Q0O0Q3En+pq2bPCMkdAb4qI pAm9OCwd5svmpPM269rrvPxkswf2Lbyqzp8ZSGhK/PWiRX4JEPWPs0lcIwY56hOL uAvNkR12X9k3oUT7X5DyZ7PNGJlDH3YSawLylYM4Q8L2YjTKyXhdX9LYupr/vhBg WwIDAQABo4IBCjCCAQYwcQYDVR0fBGowaDBmoGSgYqRgMF4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVFcXVpZmF4IFByZW1pdW0gQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIw MTgwODI0MjI1NDIzWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUFe6yKFmrbuX4 z4uB9CThrj91G5gwHQYDVR0OBBYEFBXusihZq27l+M+LgfQk4a4/dRuYMAwGA1Ud EwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEB BQUAA4GBAL0LnCepA9so3JipS9DRjqeoGlqR4Jzx9xh8LiKeNh/JqLXNRkpu+jUH G4YI65/iqPmdQS06rlxctl80BOv8KmCw+3TkhellOJbuFcfGd2MSvYpoH6tsfdrK XBPO6snrCVzFc+cSAdXZUwee4A+W8Iu0u0VIn4bFGVWgy5bFA/xI -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 903999262 (0x35e1ef1e) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Premium Certificate Authority Validity Not Before: Aug 24 22:54:23 1998 GMT Not After : Aug 24 22:54:23 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Premium Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ce:a1:06:8e:06:cc:08:0b:c1:86:a8:de:20:d5: 0d:0e:d1:0d:c4:9f:ea:6a:d9:b3:c2:32:47:40:6f: 8a:88:a4:09:bd:38:2c:1d:e6:cb:e6:a4:f3:36:eb: da:eb:bc:fc:64:b3:07:f6:2d:bc:aa:ce:9f:19:48: 68:4a:fc:f5:a2:45:7e:09:10:f5:8f:b3:49:5c:23: 06:39:ea:13:8b:b8:0b:cd:91:1d:76:5f:d9:37:a1: 44:fb:5f:90:f2:67:b3:cd:18:99:43:1f:76:12:6b: 02:f2:95:83:38:43:c2:f6:62:34:ca:c9:78:5d:5f: d2:d8:ba:9a:ff:be:10:60:5b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: DirName:/C=US/O=Equifax/OU=Equifax Premium Certificate Authority/CN=CRL1 X509v3 Private Key Usage Period: Not After: Aug 24 22:54:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 X509v3 Subject Key Identifier: 15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption bd:0b:9c:27:a9:03:db:28:dc:98:a9:4b:d0:d1:8e:a7:a8:1a: 5a:91:e0:9c:f1:f7:18:7c:2e:22:9e:36:1f:c9:a8:b5:cd:46: 4a:6e:fa:35:07:1b:86:08:eb:9f:e2:a8:f9:9d:41:2d:3a:ae: 5c:5c:b6:5f:34:04:eb:fc:2a:60:b0:fb:74:e4:85:e9:65:38: 96:ee:15:c7:c6:77:63:12:bd:8a:68:1f:ab:6c:7d:da:ca:5c: 13:ce:ea:c9:eb:09:5c:c5:73:e7:12:01:d5:d9:53:07:9e:e0: 0f:96:f0:8b:b4:bb:45:48:9f:86:c5:19:55:a0:cb:96:c5:03: fc:48 Equifax Secure CA ================= MD5 Fingerprint: 67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4 PEM Data: -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 903804111 (0x35def4cf) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Validity Not Before: Aug 22 16:41:51 1998 GMT Not After : Aug 22 16:41:51 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: 3a:88:e7:bf:14:fd:e0:c7:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1 X509v3 Private Key Usage Period: Not After: Aug 22 16:41:51 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Subject Key Identifier: 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: 77:38 GTE CyberTrust Global Root ========================== MD5 Fingerprint: CA:3D:D3:68:F1:03:5C:D0:32:FA:B8:2B:59:E8:5A:DB PEM Data: -----BEGIN CERTIFICATE----- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 421 (0x1a5) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Validity Not Before: Aug 13 00:29:00 1998 GMT Not After : Aug 13 23:59:00 2018 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17: 0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06: c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28: 73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af: 8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c: 72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac: 8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87: 45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15: c7:79:b4:1f:05:2f:3b:62:99 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3: a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33: 81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55: 7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95: 4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7: a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c: 85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b: 7a:7f GTE CyberTrust Japan Root CA ============================ MD5 Fingerprint: DE:AB:FF:43:2A:65:37:06:9B:28:B5:7A:E8:84:D3:8E PEM Data: -----BEGIN CERTIFICATE----- MIICETCCAXoCAU4wDQYJKoZIhvcNAQEEBQAwUTELMAkGA1UEBhMCSlAxHzAdBgNV BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xITAfBgNVBAMTGEN5YmVyVHJ1c3Qg SkFQQU4gUm9vdCBDQTAeFw05ODA4MDQwNzU3MDBaFw0wMzA4MDQyMzU5MDBaMFEx CzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFuLCBJbmMuMSEw HwYDVQQDExhDeWJlclRydXN0IEpBUEFOIFJvb3QgQ0EwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBALet/MpHEHaJ/Wes5HMGfIFLHda1fA5Hr+ymVHWoxP1lr+fI sbFsNDWN97lkVygLIVredP7ceC6GRhJMfxEf3JO9X75mmIa4t+xtSdOQ2eF5AFZo uq1sHyw7H8ksjEOwBELqgXOmzjN1RQ2KRXIvqldV5AfDQ+J1Og+8PNCEzrrvAgMB AAEwDQYJKoZIhvcNAQEEBQADgYEAt6ZkowyAPBzE2O5BO+WGpJ5gXdYBMqhqZC0g cEC6ck5m+gdlTgOOC/1W4K07IKcy+rISHoDfHuN6GMxX2+bJNGDvdesQFtCkLnDY JCO4pXdzQvkHOt0BbAiTBzUmECVgKf8J5WSfabkWSfNc3SRjRpMNsFM2dbxIILsZ to/QIv0= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 78 (0x4e) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA Validity Not Before: Aug 4 07:57:00 1998 GMT Not After : Aug 4 23:59:00 2003 GMT Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b7:ad:fc:ca:47:10:76:89:fd:67:ac:e4:73:06: 7c:81:4b:1d:d6:b5:7c:0e:47:af:ec:a6:54:75:a8: c4:fd:65:af:e7:c8:b1:b1:6c:34:35:8d:f7:b9:64: 57:28:0b:21:5a:de:74:fe:dc:78:2e:86:46:12:4c: 7f:11:1f:dc:93:bd:5f:be:66:98:86:b8:b7:ec:6d: 49:d3:90:d9:e1:79:00:56:68:ba:ad:6c:1f:2c:3b: 1f:c9:2c:8c:43:b0:04:42:ea:81:73:a6:ce:33:75: 45:0d:8a:45:72:2f:aa:57:55:e4:07:c3:43:e2:75: 3a:0f:bc:3c:d0:84:ce:ba:ef Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption b7:a6:64:a3:0c:80:3c:1c:c4:d8:ee:41:3b:e5:86:a4:9e:60: 5d:d6:01:32:a8:6a:64:2d:20:70:40:ba:72:4e:66:fa:07:65: 4e:03:8e:0b:fd:56:e0:ad:3b:20:a7:32:fa:b2:12:1e:80:df: 1e:e3:7a:18:cc:57:db:e6:c9:34:60:ef:75:eb:10:16:d0:a4: 2e:70:d8:24:23:b8:a5:77:73:42:f9:07:3a:dd:01:6c:08:93: 07:35:26:10:25:60:29:ff:09:e5:64:9f:69:b9:16:49:f3:5c: dd:24:63:46:93:0d:b0:53:36:75:bc:48:20:bb:19:b6:8f:d0: 22:fd GTE CyberTrust Japan Secure Server CA ===================================== MD5 Fingerprint: DD:0D:0D:B4:78:4B:7D:CE:30:0A:A6:35:C6:AB:4C:88 PEM Data: -----BEGIN CERTIFICATE----- MIICIzCCAYwCAU8wDQYJKoZIhvcNAQEEBQAwWjELMAkGA1UEBhMCSlAxHzAdBgNV BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xKjAoBgNVBAMTIUN5YmVyVHJ1c3Qg SkFQQU4gU2VjdXJlIFNlcnZlciBDQTAeFw05ODA4MDQwODA2MzJaFw0wMzA4MDQy MzU5MDBaMFoxCzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFu LCBJbmMuMSowKAYDVQQDEyFDeWJlclRydXN0IEpBUEFOIFNlY3VyZSBTZXJ2ZXIg Q0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKwmo6G4b2rALBL52zEFkuf9 +tSBtLjVKtWQ+vBDZfwSFcrs27lh3jNjN0+vADx/kjcbGHPlnzyI8RoTRP558sMm lQ8L8J4UByFsV8Jdw+JRsM2LX81fhjj4eZc57Oi/Ui6xXqqprozt7tfIty4xi7Q5 kjt8gScHGgFEL0lzILbJAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAaB17Eu5aeSkx ygGsi1CpJ5ksAPw4Ghz/wtXwE/4bpzn1gBTrUfrAjXuEG1musTVRbqE+1xvsoJ7f 4KWCluOxP9io8ct5gI738ESZfhT1I6MR42hLBTZuiOOrhqo4UwNCO9O5+eC/BenT X8NKp7b9t12QSfiasq1mpoIAk65g/yA= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 79 (0x4f) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA Validity Not Before: Aug 4 08:06:32 1998 GMT Not After : Aug 4 23:59:00 2003 GMT Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ac:26:a3:a1:b8:6f:6a:c0:2c:12:f9:db:31:05: 92:e7:fd:fa:d4:81:b4:b8:d5:2a:d5:90:fa:f0:43: 65:fc:12:15:ca:ec:db:b9:61:de:33:63:37:4f:af: 00:3c:7f:92:37:1b:18:73:e5:9f:3c:88:f1:1a:13: 44:fe:79:f2:c3:26:95:0f:0b:f0:9e:14:07:21:6c: 57:c2:5d:c3:e2:51:b0:cd:8b:5f:cd:5f:86:38:f8: 79:97:39:ec:e8:bf:52:2e:b1:5e:aa:a9:ae:8c:ed: ee:d7:c8:b7:2e:31:8b:b4:39:92:3b:7c:81:27:07: 1a:01:44:2f:49:73:20:b6:c9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:1d:7b:12:ee:5a:79:29:31:ca:01:ac:8b:50:a9:27:99:2c: 00:fc:38:1a:1c:ff:c2:d5:f0:13:fe:1b:a7:39:f5:80:14:eb: 51:fa:c0:8d:7b:84:1b:59:ae:b1:35:51:6e:a1:3e:d7:1b:ec: a0:9e:df:e0:a5:82:96:e3:b1:3f:d8:a8:f1:cb:79:80:8e:f7: f0:44:99:7e:14:f5:23:a3:11:e3:68:4b:05:36:6e:88:e3:ab: 86:aa:38:53:03:42:3b:d3:b9:f9:e0:bf:05:e9:d3:5f:c3:4a: a7:b6:fd:b7:5d:90:49:f8:9a:b2:ad:66:a6:82:00:93:ae:60: ff:20 GTE CyberTrust Root 2 ===================== MD5 Fingerprint: BA:ED:17:57:9A:4B:FF:7C:F9:C9:1F:A2:CD:1A:D6:87 PEM Data: -----BEGIN CERTIFICATE----- MIICUDCCAbkCAgGbMA0GCSqGSIb3DQEBBAUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAyMB4X DTk4MDgxMTExMzUwN1oXDTA4MDgxMTExMjIxNlowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANksTE4vaRoj41a6886EwAnAefFE XzMfFZF/iogouCRFzI8YzR900bWPcUzWMfZzloSUQMWpg2Akfa9vNLdLTMIJgDtF BJ7EPMQndXsADKFkR7UUXYJLUTpYu0RMPdPlBjjoYVyYeLuAs5zacoJioN+cX+v5 T3fCzGAYAGs0giWzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAo2SRbxDt526iQkCU eM74FAjR+kOF60bNkhTQ7y4tNjkY2brJJ4gp6UgXb/jBqshhbS39QC11QzCXOfgU ZL1v72OoK0LfsloNJex7N9jOkSmCFvnoYqLhdsQCfd0li5jh9g1gjPZZkEBRRNHC +xkkHhc5a3QhFTPWVdeCHnAsJ6g= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 411 (0x19b) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 Validity Not Before: Aug 11 11:35:07 1998 GMT Not After : Aug 11 11:22:16 2008 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d9:2c:4c:4e:2f:69:1a:23:e3:56:ba:f3:ce:84: c0:09:c0:79:f1:44:5f:33:1f:15:91:7f:8a:88:28: b8:24:45:cc:8f:18:cd:1f:74:d1:b5:8f:71:4c:d6: 31:f6:73:96:84:94:40:c5:a9:83:60:24:7d:af:6f: 34:b7:4b:4c:c2:09:80:3b:45:04:9e:c4:3c:c4:27: 75:7b:00:0c:a1:64:47:b5:14:5d:82:4b:51:3a:58: bb:44:4c:3d:d3:e5:06:38:e8:61:5c:98:78:bb:80: b3:9c:da:72:82:62:a0:df:9c:5f:eb:f9:4f:77:c2: cc:60:18:00:6b:34:82:25:b3 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption a3:64:91:6f:10:ed:e7:6e:a2:42:40:94:78:ce:f8:14:08:d1: fa:43:85:eb:46:cd:92:14:d0:ef:2e:2d:36:39:18:d9:ba:c9: 27:88:29:e9:48:17:6f:f8:c1:aa:c8:61:6d:2d:fd:40:2d:75: 43:30:97:39:f8:14:64:bd:6f:ef:63:a8:2b:42:df:b2:5a:0d: 25:ec:7b:37:d8:ce:91:29:82:16:f9:e8:62:a2:e1:76:c4:02: 7d:dd:25:8b:98:e1:f6:0d:60:8c:f6:59:90:40:51:44:d1:c2: fb:19:24:1e:17:39:6b:74:21:15:33:d6:55:d7:82:1e:70:2c: 27:a8 GTE CyberTrust Root 3 ===================== MD5 Fingerprint: DB:81:96:57:AE:64:61:EF:77:A7:83:C4:51:24:3C:87 PEM Data: -----BEGIN CERTIFICATE----- MIICUDCCAbkCAgGXMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAzMB4X DTk4MDgxMDE5NTkwOFoXDTA4MDgxMDE5MzYzOVowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDMw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHzsSsLztwU2TSXYlASVmOETFP6 wIXP+sHdD955E39T+6oOYN3iYr/G7k6ZNKpoQzWZ+KP982O9AVRqnrI6lix7eCjG WrWNGhUY/eOMLqJQCVtx1g21GB8ZjgQpk5N4q18U53NC8gMMV6IbUDsLu1ngoDoD 7icbWky5sAjKuRqJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAheutlCAG6bKiazvy ZuvjS7gSJgXl9JGo3IfcmPSUwfRhvdWcbFFzlV7QvdfmRdw8z0aE1ee57ORnY24A KHdxXUoF6bl8hszCRLveKUja6t29F58dUQGo6BResVf3/9qPzpX+Le0yEnf/fGph la4xcgYI8PnzDY7i76hTXZEDg94= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 407 (0x197) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 Validity Not Before: Aug 10 19:59:08 1998 GMT Not After : Aug 10 19:36:39 2008 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e1:f3:b1:2b:0b:ce:dc:14:d9:34:97:62:50:12: 56:63:84:4c:53:fa:c0:85:cf:fa:c1:dd:0f:de:79: 13:7f:53:fb:aa:0e:60:dd:e2:62:bf:c6:ee:4e:99: 34:aa:68:43:35:99:f8:a3:fd:f3:63:bd:01:54:6a: 9e:b2:3a:96:2c:7b:78:28:c6:5a:b5:8d:1a:15:18: fd:e3:8c:2e:a2:50:09:5b:71:d6:0d:b5:18:1f:19: 8e:04:29:93:93:78:ab:5f:14:e7:73:42:f2:03:0c: 57:a2:1b:50:3b:0b:bb:59:e0:a0:3a:03:ee:27:1b: 5a:4c:b9:b0:08:ca:b9:1a:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 85:eb:ad:94:20:06:e9:b2:a2:6b:3b:f2:66:eb:e3:4b:b8:12: 26:05:e5:f4:91:a8:dc:87:dc:98:f4:94:c1:f4:61:bd:d5:9c: 6c:51:73:95:5e:d0:bd:d7:e6:45:dc:3c:cf:46:84:d5:e7:b9: ec:e4:67:63:6e:00:28:77:71:5d:4a:05:e9:b9:7c:86:cc:c2: 44:bb:de:29:48:da:ea:dd:bd:17:9f:1d:51:01:a8:e8:14:5e: b1:57:f7:ff:da:8f:ce:95:fe:2d:ed:32:12:77:ff:7c:6a:61: 95:ae:31:72:06:08:f0:f9:f3:0d:8e:e2:ef:a8:53:5d:91:03: 83:de GTE CyberTrust Root 4 ===================== MD5 Fingerprint: 33:43:02:B1:B9:E0:73:B1:B1:20:CA:CB:C7:84:03:50 PEM Data: -----BEGIN CERTIFICATE----- MIIDVTCCAj0CAgGoMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCA0MB4X DTk4MDgxMzEzNTEwMFoXDTEzMDgxMzIzNTkwMFowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDQw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6nSJuf9pmPDlCsaMqb9P3 vK6sMVrXEZBHuZ0ZLvnzGyKgw+GnusT8XgqUS5haSybkH/Tc8/6OiNxsLXx3hyZQ wF5OqCih6hdpT03GAQ7amg0GViYVtqRdejWvje14Uob5OKuzAdPaBZaxtlCrwKGu F1P6QzkgcWUj223Etu2YRYPX0vbiqWv7+XXM78WrcZY16N+OkZuoEHUft84Tjmuz lneXGpEvxyxpmfAPKmgAmHZEG4wo0uuO9IO0f6QlXmw72cZo1WG41F4xB7VbkDVS V3sXIO0tuB6OiDk+Usvf8FyxZbulErSQY79xnTLB2r9QSpW+BjrEK+vNmHZETQvl AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAEOvHIfJSbpliTRJPOoHO0eiedSgO5Bs 3n+oVMPoTEAyvMjsHOXZrEC6/Iw/wnOc9GTq36ntTlvIAWDuOW1DJ/N/qgjS/k5v FDJNfeQ0gKU1xNZGULQ7oC1lH09lfjQoLcCndn0xyQ0zFvYgGSARULsDzHBtlrfv TKfaNhXPu03UltyITWyY7blz/ihXoO1k+AqBKXP29pcyhzm0ge/ZTRoHNPe6QjXe V9xc1vfF6wonDIGmwtBoTv2SW0iD9haKjzZb7TFsP0F6cfeSPzGkCkBM84biYcE8 SYEtpbjvupcPvCsdm4ny0o4eTYbywqv2LZnAGyoNobZP+SxYTT19Nwo= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 424 (0x1a8) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 Validity Not Before: Aug 13 13:51:00 1998 GMT Not After : Aug 13 23:59:00 2013 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ba:9d:22:6e:7f:da:66:3c:39:42:b1:a3:2a:6f: d3:f7:bc:ae:ac:31:5a:d7:11:90:47:b9:9d:19:2e: f9:f3:1b:22:a0:c3:e1:a7:ba:c4:fc:5e:0a:94:4b: 98:5a:4b:26:e4:1f:f4:dc:f3:fe:8e:88:dc:6c:2d: 7c:77:87:26:50:c0:5e:4e:a8:28:a1:ea:17:69:4f: 4d:c6:01:0e:da:9a:0d:06:56:26:15:b6:a4:5d:7a: 35:af:8d:ed:78:52:86:f9:38:ab:b3:01:d3:da:05: 96:b1:b6:50:ab:c0:a1:ae:17:53:fa:43:39:20:71: 65:23:db:6d:c4:b6:ed:98:45:83:d7:d2:f6:e2:a9: 6b:fb:f9:75:cc:ef:c5:ab:71:96:35:e8:df:8e:91: 9b:a8:10:75:1f:b7:ce:13:8e:6b:b3:96:77:97:1a: 91:2f:c7:2c:69:99:f0:0f:2a:68:00:98:76:44:1b: 8c:28:d2:eb:8e:f4:83:b4:7f:a4:25:5e:6c:3b:d9: c6:68:d5:61:b8:d4:5e:31:07:b5:5b:90:35:52:57: 7b:17:20:ed:2d:b8:1e:8e:88:39:3e:52:cb:df:f0: 5c:b1:65:bb:a5:12:b4:90:63:bf:71:9d:32:c1:da: bf:50:4a:95:be:06:3a:c4:2b:eb:cd:98:76:44:4d: 0b:e5 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 43:af:1c:87:c9:49:ba:65:89:34:49:3c:ea:07:3b:47:a2:79: d4:a0:3b:90:6c:de:7f:a8:54:c3:e8:4c:40:32:bc:c8:ec:1c: e5:d9:ac:40:ba:fc:8c:3f:c2:73:9c:f4:64:ea:df:a9:ed:4e: 5b:c8:01:60:ee:39:6d:43:27:f3:7f:aa:08:d2:fe:4e:6f:14: 32:4d:7d:e4:34:80:a5:35:c4:d6:46:50:b4:3b:a0:2d:65:1f: 4f:65:7e:34:28:2d:c0:a7:76:7d:31:c9:0d:33:16:f6:20:19: 20:11:50:bb:03:cc:70:6d:96:b7:ef:4c:a7:da:36:15:cf:bb: 4d:d4:96:dc:88:4d:6c:98:ed:b9:73:fe:28:57:a0:ed:64:f8: 0a:81:29:73:f6:f6:97:32:87:39:b4:81:ef:d9:4d:1a:07:34: f7:ba:42:35:de:57:dc:5c:d6:f7:c5:eb:0a:27:0c:81:a6:c2: d0:68:4e:fd:92:5b:48:83:f6:16:8a:8f:36:5b:ed:31:6c:3f: 41:7a:71:f7:92:3f:31:a4:0a:40:4c:f3:86:e2:61:c1:3c:49: 81:2d:a5:b8:ef:ba:97:0f:bc:2b:1d:9b:89:f2:d2:8e:1e:4d: 86:f2:c2:ab:f6:2d:99:c0:1b:2a:0d:a1:b6:4f:f9:2c:58:4d: 3d:7d:37:0a GTE CyberTrust Root 5 ===================== MD5 Fingerprint: 7D:6C:86:E4:FC:4D:D1:0B:00:BA:22:BB:4E:7C:6A:8E PEM Data: -----BEGIN CERTIFICATE----- MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH 9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk 6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 438 (0x1b6) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 Validity Not Before: Aug 14 14:50:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:bc:12:6e:3f:8a:7c:7a:97:01:ec:1e:bb:39:5a: 02:f4:78:44:a2:48:1b:8e:7b:49:52:7a:b8:7b:47: b3:af:94:9b:6f:bb:96:fa:2b:6a:65:5c:b8:1c:94: 73:be:bf:89:0a:22:80:ee:57:fc:8c:05:bb:70:9f: 97:39:04:da:a3:87:5c:a8:e5:ca:af:c0:33:9a:d5: 37:5c:4b:ac:e4:80:d0:a6:23:60:fb:fd:72:2e:94: 9d:c7:ce:c2:04:32:ef:78:60:5d:ed:ad:87:0f:45: 65:1e:3c:9a:0a:9a:be:5d:1d:99:ec:e7:f2:d1:c6: 7a:17:d9:ad:9b:54:96:7f:c4:7c:60:bf:85:aa:15: 35:1d:40:da:11:bc:ec:54:21:28:2d:23:a1:a8:f0: cf:2d:cd:dd:fc:7e:0f:5e:e1:65:07:56:cb:07:b4: d2:56:e8:5e:31:cc:18:63:c4:86:d2:2d:85:cf:93: 92:ab:6d:fe:68:39:fb:de:73:bd:86:f8:e4:46:7a: ea:9f:0c:cb:f4:19:fe:63:bc:d1:2c:7b:88:33:36: f6:e4:e1:9c:0c:53:81:60:1c:da:2e:ab:96:a9:16: 88:13:50:99:b2:bd:55:df:15:30:7e:e8:e5:98:fb: 70:7e:6c:b5:07:fc:fc:46:b7:d0:ed:37:96:7e:32: fe:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113763.1.2.1.3 X509v3 Subject Key Identifier: 76:0A:49:21:38:4C:9F:DE:F8:C4:49:C7:71:71:91:9D Signature Algorithm: sha1WithRSAEncryption 41:3a:d4:18:5b:da:b8:de:21:1c:e1:8e:09:e5:f1:68:34:ff: de:96:f4:07:f5:a7:3c:f3:ac:4a:b1:9b:fa:92:fa:9b:ed:e6: 32:21:aa:4a:76:c5:dc:4f:38:e5:df:d5:86:e4:d5:c8:76:7d: 98:d7:b1:cd:8f:4d:b5:91:23:6c:8b:8a:eb:ea:7c:ef:14:94: c4:c6:f0:1f:4a:2d:32:71:63:2b:63:91:26:02:09:b6:80:1d: ed:e2:cc:b8:7f:db:87:63:c8:e1:d0:6c:26:b1:35:1d:40:66: 10:1b:cd:95:54:18:33:61:ec:13:4f:da:13:f7:99:af:3e:d0: cf:8e:a6:72:a2:b3:c3:05:9a:c9:27:7d:92:cc:7e:52:8d:b3: ab:70:6d:9e:89:9f:4d:eb:1a:75:c2:98:aa:d5:02:16:d7:0c: 8a:bf:25:e4:eb:2d:bc:98:e9:58:38:19:7c:b9:37:fe:db:e2: 99:08:73:06:c7:97:83:6a:7d:10:01:2f:32:b9:17:05:4a:65: e6:2f:ce:be:5e:53:a6:82:e9:9a:53:0a:84:74:2d:83:ca:c8: 94:16:76:5f:94:61:28:f0:85:a7:39:bb:d7:8b:d9:a8:b2:13: 1d:54:09:34:24:7d:20:81:7d:66:7e:a2:90:74:5c:10:c6:bd: ec:ab:1b:c2 GTE CyberTrust Root CA ====================== MD5 Fingerprint: C4:D7:F0:B2:A3:C5:7D:61:67:F0:04:CD:43:D3:BA:58 PEM Data: -----BEGIN CERTIFICATE----- MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5 1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 419 (0x1a3) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Validity Not Before: Feb 23 23:01:00 1996 GMT Not After : Feb 23 23:59:00 2006 GMT Subject: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b8:e6:4f:ba:db:98:7c:71:7c:af:44:b7:d3:0f: 46:d9:64:e5:93:c1:42:8e:c7:ba:49:8d:35:2d:7a: e7:8b:bd:e5:05:31:59:c6:b1:2f:0a:0c:fb:9f:a7: 3f:a2:09:66:84:56:1e:37:29:1b:87:e9:7e:0c:ca: 9a:9f:a5:7f:f5:15:94:a3:d5:a2:46:82:d8:68:4c: d1:37:15:06:68:af:bd:f8:b0:b3:f0:29:f5:95:5a: 09:16:61:77:0a:22:25:d4:4f:45:aa:c7:bd:e5:96: df:f9:d4:a8:8e:42:cc:24:c0:1e:91:27:4a:b5:6d: 06:80:63:39:c4:a2:5e:38:03 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 12:b3:75:c6:5f:1d:e1:61:55:80:00:d4:81:4b:7b:31:0f:23: 63:e7:3d:f3:03:f9:f4:36:a8:bb:d9:e3:a5:97:4d:ea:2b:29: e0:d6:6a:73:81:e6:c0:89:a3:d3:f1:e0:a5:a5:22:37:9a:63: c2:48:20:b4:db:72:e3:c8:f6:d9:7c:be:b1:af:53:da:14:b4: 21:b8:d6:d5:96:e3:fe:4e:0c:59:62:b6:9a:4a:f9:42:dd:8c: 6f:81:a9:71:ff:f4:0a:72:6d:6d:44:0e:9d:f3:74:74:a8:d5: 34:49:e9:5e:9e:e9:b4:7a:e1:e5:5a:1f:84:30:9c:d3:9f:a5: 25:d8 GlobalSign Partners CA ====================== MD5 Fingerprint: 3C:75:CD:4C:BD:A9:D0:8A:79:4F:50:16:37:84:F4:2B PEM Data: -----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgILAgAAAAAA1ni50a8wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xv YmFsU2lnbiBQYXJ0bmVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANIs+DKsShJ6N8gpkaWujG4eDsA0M4jlM3EWHHiEaMMYNFAuFj6xlIJPsZqf APjGETXGaXuYAq0ABohs50wzKACIJ0Yfh7NxdWO8MruI3mYYDlAGk7T2vBQ3MD0i 3z3/dX7ZChrFn7P80KyzCHqJ0wHoAFznSgs9TXsmordiBovaRt2TFz8/WwJLC7aI IBGSAK27xy7U40Wu9YlafI2krYVkMsAnjMbyioCShiRWWY10aKKDQrOePVBBhm8g bvb9ztMZ4zLMj+2aXm0fKPVSrG4YXvg90ZLlumwBiEsK8i3eZTMFQqBMqjF2vv2/ gXj5cRxGXi0VlS0wWY5MQdFiqz0CAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgAGMB0G A1UdDgQWBBRDJI1wFQhiVZxPDEAXXYZeD6JM+zAfBgNVHSMEGDAWgBRge2YaRQ2X yolQL30EzTSo//z9SzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IB AQBm7bSIaRGZgiGDrKFti5uErQ8tyB6Mynt+rarUjt4H1p5Fx6W4nAc5YCVVGsBP GeXPFylJiRg1ZuXrKEBOV8mvs+S4IAWjO5VQkUmUKX0s5YhBpUWIXp2CJ/fS71u1 T5++/jVlLFVkn+FR2iJhd7pYTo/GeVlZbjCAok+QbiELrdBoOZAQm+0iZW8eETjm f4zS8zltR9Uh6Op1OkHRrfYWnV0LIb3zH2MGJR3BHzVxLOsgGdXBsOw95W/tAgc/ E3tmktZEwZj3X1CLelvCb22w0fjldKBAN6MlD+Q9ymQxk5BcMHu5OTGaXkzNuUFP UOQ9OK7IZtnHO11RR6ybq/Kt -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b9:d1:af Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Partners CA, CN=GlobalSign Partners CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d2:2c:f8:32:ac:4a:12:7a:37:c8:29:91:a5:ae: 8c:6e:1e:0e:c0:34:33:88:e5:33:71:16:1c:78:84: 68:c3:18:34:50:2e:16:3e:b1:94:82:4f:b1:9a:9f: 00:f8:c6:11:35:c6:69:7b:98:02:ad:00:06:88:6c: e7:4c:33:28:00:88:27:46:1f:87:b3:71:75:63:bc: 32:bb:88:de:66:18:0e:50:06:93:b4:f6:bc:14:37: 30:3d:22:df:3d:ff:75:7e:d9:0a:1a:c5:9f:b3:fc: d0:ac:b3:08:7a:89:d3:01:e8:00:5c:e7:4a:0b:3d: 4d:7b:26:a2:b7:62:06:8b:da:46:dd:93:17:3f:3f: 5b:02:4b:0b:b6:88:20:11:92:00:ad:bb:c7:2e:d4: e3:45:ae:f5:89:5a:7c:8d:a4:ad:85:64:32:c0:27: 8c:c6:f2:8a:80:92:86:24:56:59:8d:74:68:a2:83: 42:b3:9e:3d:50:41:86:6f:20:6e:f6:fd:ce:d3:19: e3:32:cc:8f:ed:9a:5e:6d:1f:28:f5:52:ac:6e:18: 5e:f8:3d:d1:92:e5:ba:6c:01:88:4b:0a:f2:2d:de: 65:33:05:42:a0:4c:aa:31:76:be:fd:bf:81:78:f9: 71:1c:46:5e:2d:15:95:2d:30:59:8e:4c:41:d1:62: ab:3d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 43:24:8D:70:15:08:62:55:9C:4F:0C:40:17:5D:86:5E:0F:A2:4C:FB X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 66:ed:b4:88:69:11:99:82:21:83:ac:a1:6d:8b:9b:84:ad:0f: 2d:c8:1e:8c:ca:7b:7e:ad:aa:d4:8e:de:07:d6:9e:45:c7:a5: b8:9c:07:39:60:25:55:1a:c0:4f:19:e5:cf:17:29:49:89:18: 35:66:e5:eb:28:40:4e:57:c9:af:b3:e4:b8:20:05:a3:3b:95: 50:91:49:94:29:7d:2c:e5:88:41:a5:45:88:5e:9d:82:27:f7: d2:ef:5b:b5:4f:9f:be:fe:35:65:2c:55:64:9f:e1:51:da:22: 61:77:ba:58:4e:8f:c6:79:59:59:6e:30:80:a2:4f:90:6e:21: 0b:ad:d0:68:39:90:10:9b:ed:22:65:6f:1e:11:38:e6:7f:8c: d2:f3:39:6d:47:d5:21:e8:ea:75:3a:41:d1:ad:f6:16:9d:5d: 0b:21:bd:f3:1f:63:06:25:1d:c1:1f:35:71:2c:eb:20:19:d5: c1:b0:ec:3d:e5:6f:ed:02:07:3f:13:7b:66:92:d6:44:c1:98: f7:5f:50:8b:7a:5b:c2:6f:6d:b0:d1:f8:e5:74:a0:40:37:a3: 25:0f:e4:3d:ca:64:31:93:90:5c:30:7b:b9:39:31:9a:5e:4c: cd:b9:41:4f:50:e4:3d:38:ae:c8:66:d9:c7:3b:5d:51:47:ac: 9b:ab:f2:ad GlobalSign Primary Class 1 CA ============================= MD5 Fingerprint: 5C:AC:59:01:A4:86:53:CB:10:66:B5:D6:D6:71:FF:01 PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4N88wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MTUxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAvSA1R9Eo1gijEjkjRw29cCFSDlcxlaY0V2vsfkN5 wwZSSM28taGZvdgfMrzP125ybS53IpCCTkuPmgwBQprZcFm2nR/mY9EMrR1O+IWB +a7vn6ZSYUR5GnVF4GFWRW1CjD1yy6akErea9dZg0GBQs46mpuy09BLNf6jO77Ph hTD+csTm53eznlhB1lGDiAfGtmlPNt7RC0g/vdafIXRkbycGPkv9Dqabv6RIV4yQ 7okYCwKBGL5n/lNgiCe6o3M0S1pWtN5zBe2Yll3sSudA/EsJYuvQ4zFPhdF6q1ln K/uID+uqg701/WEn7GYOQlf3acIM7/xqwm5J2o9BOK5IqQIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFPzgZvZaNZnrQB7SuB5DvJiOH4rDMB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAJujCETO8pCdcfMyswVqterPKZjeVT6gFn0GekTWr9L6 E1iM+BzHqx20G+9paJhcCDmP4Pf7SMwh57gz2wWqNCRsSuXpe2Deg7MfCr5BdfzM MEi3wSYdBDOqtnjtKsu6VpcybvcxlS5G8hTuJ8f3Yom5XFrTOIpk9Te08bM0ctXV IT1L13iT1zFmNR6j2EdJbxyt4YB/+JgkbHOsDsIadwKjJge3x2tdvILVKkgdY89Q Mqb7HBhHFQpbDFw4JJoEmKgISF98NIdjqy2NTAB3lBt2uvUWGKMVry+U9ikAdsEV F9PpN0121MtLKVkkrNpKoOpj3l9Usfrz0UXLxWS0cyE= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:37:cf Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 15 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 1 CA, CN=GlobalSign Primary Class 1 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:bd:20:35:47:d1:28:d6:08:a3:12:39:23:47:0d: bd:70:21:52:0e:57:31:95:a6:34:57:6b:ec:7e:43: 79:c3:06:52:48:cd:bc:b5:a1:99:bd:d8:1f:32:bc: cf:d7:6e:72:6d:2e:77:22:90:82:4e:4b:8f:9a:0c: 01:42:9a:d9:70:59:b6:9d:1f:e6:63:d1:0c:ad:1d: 4e:f8:85:81:f9:ae:ef:9f:a6:52:61:44:79:1a:75: 45:e0:61:56:45:6d:42:8c:3d:72:cb:a6:a4:12:b7: 9a:f5:d6:60:d0:60:50:b3:8e:a6:a6:ec:b4:f4:12: cd:7f:a8:ce:ef:b3:e1:85:30:fe:72:c4:e6:e7:77: b3:9e:58:41:d6:51:83:88:07:c6:b6:69:4f:36:de: d1:0b:48:3f:bd:d6:9f:21:74:64:6f:27:06:3e:4b: fd:0e:a6:9b:bf:a4:48:57:8c:90:ee:89:18:0b:02: 81:18:be:67:fe:53:60:88:27:ba:a3:73:34:4b:5a: 56:b4:de:73:05:ed:98:96:5d:ec:4a:e7:40:fc:4b: 09:62:eb:d0:e3:31:4f:85:d1:7a:ab:59:67:2b:fb: 88:0f:eb:aa:83:bd:35:fd:61:27:ec:66:0e:42:57: f7:69:c2:0c:ef:fc:6a:c2:6e:49:da:8f:41:38:ae: 48:a9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: FC:E0:66:F6:5A:35:99:EB:40:1E:D2:B8:1E:43:BC:98:8E:1F:8A:C3 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 9b:a3:08:44:ce:f2:90:9d:71:f3:32:b3:05:6a:b5:ea:cf:29: 98:de:55:3e:a0:16:7d:06:7a:44:d6:af:d2:fa:13:58:8c:f8: 1c:c7:ab:1d:b4:1b:ef:69:68:98:5c:08:39:8f:e0:f7:fb:48: cc:21:e7:b8:33:db:05:aa:34:24:6c:4a:e5:e9:7b:60:de:83: b3:1f:0a:be:41:75:fc:cc:30:48:b7:c1:26:1d:04:33:aa:b6: 78:ed:2a:cb:ba:56:97:32:6e:f7:31:95:2e:46:f2:14:ee:27: c7:f7:62:89:b9:5c:5a:d3:38:8a:64:f5:37:b4:f1:b3:34:72: d5:d5:21:3d:4b:d7:78:93:d7:31:66:35:1e:a3:d8:47:49:6f: 1c:ad:e1:80:7f:f8:98:24:6c:73:ac:0e:c2:1a:77:02:a3:26: 07:b7:c7:6b:5d:bc:82:d5:2a:48:1d:63:cf:50:32:a6:fb:1c: 18:47:15:0a:5b:0c:5c:38:24:9a:04:98:a8:08:48:5f:7c:34: 87:63:ab:2d:8d:4c:00:77:94:1b:76:ba:f5:16:18:a3:15:af: 2f:94:f6:29:00:76:c1:15:17:d3:e9:37:4d:76:d4:cb:4b:29: 59:24:ac:da:4a:a0:ea:63:de:5f:54:b1:fa:f3:d1:45:cb:c5: 64:b4:73:21 GlobalSign Primary Class 2 CA ============================= MD5 Fingerprint: A9:A9:42:59:7E:BE:5A:94:E4:2C:C6:8B:1C:2A:44:B6 PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4jY0wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAkoz+7/RFjhdBbvzYvyFvqwadUsEsAJ0/joW4f0qP vaBjKspJJ65agvR04lWS/8LRqnmitvrVnYIET8ayxl5jpzq62O7rim+ftrsoQcAi +05IGgaS17/Xz7nZvThPOw1EblVB/vwJ29i/844h8egStfYTpdPGTJMisAL/7h0M xKhrT3VoVujcKBJQ96gknS4kOfsJBd7lo2RJIdBofnEwkbFg4Dn0UPh6TZgAa3x5 uk7OSuK6Nh23xTYVlZxkQupfxLr1QAW+4TpZvYSnGbjeTVNQzgfR0lHT7w2BbObn bctdfD98zOxPgycl/3BQ9oNZdYQGZlgs3omNAKZJ+aVDdwIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFHznsrEs3rGna+l2DOGj/U5sx7n2MB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAGPdWc6KeaqYnU7FiWQ3foqTZy8Q6m8nw413bfJcVpQZ GmlgMEZdj/JtRTyONZd8L7hR4uiJvYjPJxwINFyIwWgk25GF5M/7+0ON6CUBG8QO 9wBCSIYfJAhYWoyN8mtHLGiRsWlC/Q2NySbmkoamZG6Sxc4+PH1x4yOkq8fVqKnf gqc76IbVw08Y40TQ4NzzxWgu/qUvBYTIfkdCU2uHSv4y/14+cIy3qBXMF8L/RuzQ 7C20bhIoqflA6evUZpdTqWlVwKmqsi7N0Wn0vvi7fGnuVKbbnvtapj7+mu+UUUt1 7tjU4ZrxAlYTiQ6nQouWi4UMG4W+Jq6rppm8IvFz30I= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:8d:8d Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 2 CA, CN=GlobalSign Primary Class 2 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:92:8c:fe:ef:f4:45:8e:17:41:6e:fc:d8:bf:21: 6f:ab:06:9d:52:c1:2c:00:9d:3f:8e:85:b8:7f:4a: 8f:bd:a0:63:2a:ca:49:27:ae:5a:82:f4:74:e2:55: 92:ff:c2:d1:aa:79:a2:b6:fa:d5:9d:82:04:4f:c6: b2:c6:5e:63:a7:3a:ba:d8:ee:eb:8a:6f:9f:b6:bb: 28:41:c0:22:fb:4e:48:1a:06:92:d7:bf:d7:cf:b9: d9:bd:38:4f:3b:0d:44:6e:55:41:fe:fc:09:db:d8: bf:f3:8e:21:f1:e8:12:b5:f6:13:a5:d3:c6:4c:93: 22:b0:02:ff:ee:1d:0c:c4:a8:6b:4f:75:68:56:e8: dc:28:12:50:f7:a8:24:9d:2e:24:39:fb:09:05:de: e5:a3:64:49:21:d0:68:7e:71:30:91:b1:60:e0:39: f4:50:f8:7a:4d:98:00:6b:7c:79:ba:4e:ce:4a:e2: ba:36:1d:b7:c5:36:15:95:9c:64:42:ea:5f:c4:ba: f5:40:05:be:e1:3a:59:bd:84:a7:19:b8:de:4d:53: 50:ce:07:d1:d2:51:d3:ef:0d:81:6c:e6:e7:6d:cb: 5d:7c:3f:7c:cc:ec:4f:83:27:25:ff:70:50:f6:83: 59:75:84:06:66:58:2c:de:89:8d:00:a6:49:f9:a5: 43:77 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7C:E7:B2:B1:2C:DE:B1:A7:6B:E9:76:0C:E1:A3:FD:4E:6C:C7:B9:F6 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 63:dd:59:ce:8a:79:aa:98:9d:4e:c5:89:64:37:7e:8a:93:67: 2f:10:ea:6f:27:c3:8d:77:6d:f2:5c:56:94:19:1a:69:60:30: 46:5d:8f:f2:6d:45:3c:8e:35:97:7c:2f:b8:51:e2:e8:89:bd: 88:cf:27:1c:08:34:5c:88:c1:68:24:db:91:85:e4:cf:fb:fb: 43:8d:e8:25:01:1b:c4:0e:f7:00:42:48:86:1f:24:08:58:5a: 8c:8d:f2:6b:47:2c:68:91:b1:69:42:fd:0d:8d:c9:26:e6:92: 86:a6:64:6e:92:c5:ce:3e:3c:7d:71:e3:23:a4:ab:c7:d5:a8: a9:df:82:a7:3b:e8:86:d5:c3:4f:18:e3:44:d0:e0:dc:f3:c5: 68:2e:fe:a5:2f:05:84:c8:7e:47:42:53:6b:87:4a:fe:32:ff: 5e:3e:70:8c:b7:a8:15:cc:17:c2:ff:46:ec:d0:ec:2d:b4:6e: 12:28:a9:f9:40:e9:eb:d4:66:97:53:a9:69:55:c0:a9:aa:b2: 2e:cd:d1:69:f4:be:f8:bb:7c:69:ee:54:a6:db:9e:fb:5a:a6: 3e:fe:9a:ef:94:51:4b:75:ee:d8:d4:e1:9a:f1:02:56:13:89: 0e:a7:42:8b:96:8b:85:0c:1b:85:be:26:ae:ab:a6:99:bc:22: f1:73:df:42 GlobalSign Primary Class 3 CA ============================= MD5 Fingerprint: 98:12:A3:4B:95:A9:96:64:94:E7:50:8C:3E:E1:83:5A PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni41sMwDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAkV5WZdbAwAScv0fEXHt6MQH5WJaZ4xyEL9xWj631 WYHVQ2ZdWpOMdcqp5xHBURAUYMks1HuvxneGq3onrm+VuQvKtkb7fhr0DRRt0slO sq7wVPZcQEw2SHToVIxlZhCnvSu3II0FSa14fdIkI1Dj8LR5mwE5/6870y3u4UmN jS88akFFL5vjPeES5JF1ns+gPjySgW+KLhjc4PKMjP2H2Qf0QJTJTk9D32dWb70D UHyZZ6S5PJFsAm6E1vxG98xvGD4X8O8LZBZX5qyG8UiqQ8HJJ3hzREXihX26/7Ph +xsFpEs7mRIlAVAUaq9d6sgM7uTa7EuLXGgTldzDtTA61wIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFMw2zBe0RZEv7c87MEh3+7UUmb7jMB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAFeyVMy9lRdkYIm2U5EMRZLDPahsw8yyGPV4QXTYfaMn r3cNWT6UHWn6idMMvRoB9D/o4Hcagiha5mLXt+M2yQ6feuPC08xZiQzvFovwNnci yqS2t8FCZwFAY8znOGSHWxSWZnstFO69SW3/d9DiTlvTgMJND8q4nYGXpzRux+Oc SOW0qkX19mVMSPISwtKTjMIVJPMrUv/jCK64btYsEs85yxIq56l7X5g9o+HMpmOJ XH0xdfnV1l3y0NQ9355xqA7c5CCXeOZ/U6QNUU+OOwOuow1aTcN55zVYcELJXqFe tNkio0RTNaTQz3OAxc+fVph2+RRMd4eCydx+XTTVNnU= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:d6:c3 Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 3 CA, CN=GlobalSign Primary Class 3 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:91:5e:56:65:d6:c0:c0:04:9c:bf:47:c4:5c:7b: 7a:31:01:f9:58:96:99:e3:1c:84:2f:dc:56:8f:ad: f5:59:81:d5:43:66:5d:5a:93:8c:75:ca:a9:e7:11: c1:51:10:14:60:c9:2c:d4:7b:af:c6:77:86:ab:7a: 27:ae:6f:95:b9:0b:ca:b6:46:fb:7e:1a:f4:0d:14: 6d:d2:c9:4e:b2:ae:f0:54:f6:5c:40:4c:36:48:74: e8:54:8c:65:66:10:a7:bd:2b:b7:20:8d:05:49:ad: 78:7d:d2:24:23:50:e3:f0:b4:79:9b:01:39:ff:af: 3b:d3:2d:ee:e1:49:8d:8d:2f:3c:6a:41:45:2f:9b: e3:3d:e1:12:e4:91:75:9e:cf:a0:3e:3c:92:81:6f: 8a:2e:18:dc:e0:f2:8c:8c:fd:87:d9:07:f4:40:94: c9:4e:4f:43:df:67:56:6f:bd:03:50:7c:99:67:a4: b9:3c:91:6c:02:6e:84:d6:fc:46:f7:cc:6f:18:3e: 17:f0:ef:0b:64:16:57:e6:ac:86:f1:48:aa:43:c1: c9:27:78:73:44:45:e2:85:7d:ba:ff:b3:e1:fb:1b: 05:a4:4b:3b:99:12:25:01:50:14:6a:af:5d:ea:c8: 0c:ee:e4:da:ec:4b:8b:5c:68:13:95:dc:c3:b5:30: 3a:d7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CC:36:CC:17:B4:45:91:2F:ED:CF:3B:30:48:77:FB:B5:14:99:BE:E3 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 57:b2:54:cc:bd:95:17:64:60:89:b6:53:91:0c:45:92:c3:3d: a8:6c:c3:cc:b2:18:f5:78:41:74:d8:7d:a3:27:af:77:0d:59: 3e:94:1d:69:fa:89:d3:0c:bd:1a:01:f4:3f:e8:e0:77:1a:82: 28:5a:e6:62:d7:b7:e3:36:c9:0e:9f:7a:e3:c2:d3:cc:59:89: 0c:ef:16:8b:f0:36:77:22:ca:a4:b6:b7:c1:42:67:01:40:63: cc:e7:38:64:87:5b:14:96:66:7b:2d:14:ee:bd:49:6d:ff:77: d0:e2:4e:5b:d3:80:c2:4d:0f:ca:b8:9d:81:97:a7:34:6e:c7: e3:9c:48:e5:b4:aa:45:f5:f6:65:4c:48:f2:12:c2:d2:93:8c: c2:15:24:f3:2b:52:ff:e3:08:ae:b8:6e:d6:2c:12:cf:39:cb: 12:2a:e7:a9:7b:5f:98:3d:a3:e1:cc:a6:63:89:5c:7d:31:75: f9:d5:d6:5d:f2:d0:d4:3d:df:9e:71:a8:0e:dc:e4:20:97:78: e6:7f:53:a4:0d:51:4f:8e:3b:03:ae:a3:0d:5a:4d:c3:79:e7: 35:58:70:42:c9:5e:a1:5e:b4:d9:22:a3:44:53:35:a4:d0:cf: 73:80:c5:cf:9f:56:98:76:f9:14:4c:77:87:82:c9:dc:7e:5d: 34:d5:36:75 GlobalSign Root CA ================== MD5 Fingerprint: AB:BF:EA:E3:6B:29:A6:CC:A6:78:35:99:EF:AD:2B:80 PEM Data: -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b7:94:05 Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 1 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2014 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b: 83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0: 63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89: 8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c: 70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50: 15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0: 6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2: 89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7: 54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c: 92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2: 75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9: c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b: bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91: ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51: 63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa: 48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a: 07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93: 90:cf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption ae:aa:9f:fc:b7:d2:cb:1f:5f:39:29:28:18:9e:34:c9:6c:4f: 6f:1a:f0:64:a2:70:4a:4f:13:86:9b:60:28:9e:e8:81:49:98: 7d:0a:bb:e5:b0:9d:3d:36:db:8f:05:51:ff:09:31:2a:1f:dd: 89:77:9e:0f:2e:6c:95:04:ed:86:cb:b4:00:3f:84:02:4d:80: 6a:2a:2d:78:0b:ae:6f:2b:a2:83:44:83:1f:cd:50:82:4c:24: af:bd:f7:a5:b4:c8:5a:0f:f4:e7:47:5e:49:8e:37:96:fe:9a: 88:05:3a:d9:c0:db:29:87:e6:19:96:47:a7:3a:a6:8c:8b:3c: 77:fe:46:63:a7:53:da:21:d1:ac:7e:49:a2:4b:e6:c3:67:59: 2f:b3:8a:0e:bb:2c:bd:a9:aa:42:7c:35:c1:d8:7f:d5:a7:31: 3a:4e:63:43:39:af:08:b0:61:34:8c:d3:98:a9:43:34:f6:0f: 87:29:3b:9d:c2:56:58:98:77:c3:f7:1b:ac:f6:9d:f8:3e:aa: a7:54:45:f0:f5:f9:d5:31:65:fe:6b:58:9c:71:b3:1e:d7:52: ea:32:17:fc:40:60:1d:c9:79:24:b2:f6:6c:fd:a8:66:0e:82: dd:98:cb:da:c2:44:4f:2e:a0:7b:f2:f7:6b:2c:76:11:84:46: 8a:78:a3:e3 National Retail Federation by DST ================================= MD5 Fingerprint: AD:8E:0F:9E:01:6B:A0:C5:74:D5:0C:D3:68:65:4F:1E PEM Data: -----BEGIN CERTIFICATE----- MIIEAjCCAuoCEQDQHkCKAAACfAAAAAMAAAABMA0GCSqGSIb3DQEBBQUAMIG+MQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UE CxMaTmF0aW9uYWwgUmV0YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJG KSBSb290Q0ExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05 ODEyMTExNjE0MTZaFw0wODEyMDgxNjE0MTZaMIG+MQswCQYDVQQGEwJ1czENMAsG A1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UECxMaTmF0aW9uYWwgUmV0 YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJGKSBSb290Q0ExITAfBgkq hkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBANmsm3f6UNPM3LlArLlyagCHI/wPliHQJq/k4rVf+tOmfSEw LswXgo+YdPxnpKbfiJeiQin1p9sRk/teIzDCqrwi50Eb5e0l3sg/295XRXhARoOy 1Ro93w9FbdVjAnXYL8Zuq5WRdDcNy00JXNHUWzra3Q7Ia5nY1TnM34VVxJJTAqPh 94DJcKPa3DPEf6JHCBw1lh+hAxwwg/TEzP+Yw7BGRKLAv63b0oH2TJgsp14k84bK Y9W6ffCawErQG1ju7Klnz2kCbCLAYCws0cgg6sgt+92cu8tRTNznVwQ7VJsRpTJ0 7HQB85AVWy98LJNluWZntIGINeWekRh/gahByMsCAwEAATANBgkqhkiG9w0BAQUF AAOCAQEAhF4LO+ygjRyb0DwdcWnkGn9kvoFlYcWMatd8AHTgemJV7SR84GHj8t0U 5hFugw7h6qmegK2aIL/gV37V0LWEYy3ZGOS9GzUsXq5hdqpnhTs44TGBHzF/5tf4 W9K7Y3mGxIzF3gqu19H8AXT/trYNYoFnHLsm+CSA4Fxe2KSKOo99y/+So/18qTJp B1hYYUKZUgOxOD3GcW9s8uh9BqrBfFPLGi2IT8mpp6xpb/ekH9h0gfVKv7FVt9N3 OKdvwkrI4nOJ01dy4UMvcjz2H7f4BEpuwemUF+SXF/QOE4ZvjavoXy20/2zWorQf 7LmUaqoSTxrd9Xe1JYzyigrx/FJbWA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8a:00:00:02:7c:00:00:00:03:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com Validity Not Before: Dec 11 16:14:16 1998 GMT Not After : Dec 8 16:14:16 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d9:ac:9b:77:fa:50:d3:cc:dc:b9:40:ac:b9:72: 6a:00:87:23:fc:0f:96:21:d0:26:af:e4:e2:b5:5f: fa:d3:a6:7d:21:30:2e:cc:17:82:8f:98:74:fc:67: a4:a6:df:88:97:a2:42:29:f5:a7:db:11:93:fb:5e: 23:30:c2:aa:bc:22:e7:41:1b:e5:ed:25:de:c8:3f: db:de:57:45:78:40:46:83:b2:d5:1a:3d:df:0f:45: 6d:d5:63:02:75:d8:2f:c6:6e:ab:95:91:74:37:0d: cb:4d:09:5c:d1:d4:5b:3a:da:dd:0e:c8:6b:99:d8: d5:39:cc:df:85:55:c4:92:53:02:a3:e1:f7:80:c9: 70:a3:da:dc:33:c4:7f:a2:47:08:1c:35:96:1f:a1: 03:1c:30:83:f4:c4:cc:ff:98:c3:b0:46:44:a2:c0: bf:ad:db:d2:81:f6:4c:98:2c:a7:5e:24:f3:86:ca: 63:d5:ba:7d:f0:9a:c0:4a:d0:1b:58:ee:ec:a9:67: cf:69:02:6c:22:c0:60:2c:2c:d1:c8:20:ea:c8:2d: fb:dd:9c:bb:cb:51:4c:dc:e7:57:04:3b:54:9b:11: a5:32:74:ec:74:01:f3:90:15:5b:2f:7c:2c:93:65: b9:66:67:b4:81:88:35:e5:9e:91:18:7f:81:a8:41: c8:cb Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 84:5e:0b:3b:ec:a0:8d:1c:9b:d0:3c:1d:71:69:e4:1a:7f:64: be:81:65:61:c5:8c:6a:d7:7c:00:74:e0:7a:62:55:ed:24:7c: e0:61:e3:f2:dd:14:e6:11:6e:83:0e:e1:ea:a9:9e:80:ad:9a: 20:bf:e0:57:7e:d5:d0:b5:84:63:2d:d9:18:e4:bd:1b:35:2c: 5e:ae:61:76:aa:67:85:3b:38:e1:31:81:1f:31:7f:e6:d7:f8: 5b:d2:bb:63:79:86:c4:8c:c5:de:0a:ae:d7:d1:fc:01:74:ff: b6:b6:0d:62:81:67:1c:bb:26:f8:24:80:e0:5c:5e:d8:a4:8a: 3a:8f:7d:cb:ff:92:a3:fd:7c:a9:32:69:07:58:58:61:42:99: 52:03:b1:38:3d:c6:71:6f:6c:f2:e8:7d:06:aa:c1:7c:53:cb: 1a:2d:88:4f:c9:a9:a7:ac:69:6f:f7:a4:1f:d8:74:81:f5:4a: bf:b1:55:b7:d3:77:38:a7:6f:c2:4a:c8:e2:73:89:d3:57:72: e1:43:2f:72:3c:f6:1f:b7:f8:04:4a:6e:c1:e9:94:17:e4:97: 17:f4:0e:13:86:6f:8d:ab:e8:5f:2d:b4:ff:6c:d6:a2:b4:1f: ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1: fc:52:5b:58 TC TrustCenter, Germany, Class 1 CA =================================== MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1 PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0 L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:56:33 1998 GMT Not After : Dec 31 13:56:33 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b0:29:eb:b4:76:b3:ae:d7:b6:5b:b4:5e:e7:bd: e3:b1:9c:49:04:57:5b:a1:ab:d9:7f:13:1b:fd:ba: 61:ab:d8:e7:71:df:2d:00:94:5d:51:48:7d:23:ef: 75:62:84:90:3c:0a:1f:59:11:74:2f:8e:80:a5:fd: 30:02:3d:29:52:cd:72:1a:49:21:9c:bc:cb:52:8e: 48:a1:63:96:c8:10:85:30:69:57:74:45:c0:5a:86: c6:d5:3d:e0:68:57:7d:31:6a:24:8d:45:97:3e:31: 7e:68:66:32:6e:24:6d:ec:32:36:c9:41:ca:f0:31: 44:c8:a3:61:ca:1b:a0:36:1f Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 1 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 05:42:52:26:a4:0c:27:01:44:ac:5c:25:28:c2:44:42:54:08: b9:1d:c5:3e:6c:59:66:c4:b3:4e:50:a7:f8:f8:96:75:a1:96: 75:e8:16:38:a0:cd:5d:6e:fa:79:a7:1b:7b:1d:1e:c3:00:b9: 66:be:5a:d6:62:0f:e7:f2:7b:b8:ef:4c:e0:c0:3f:59:ae:39: b7:84:09:9e:ab:f1:a9:2e:6b:69:e2:ad:cc:f2:ea:78:09:05: 20:38:42:71:18:7e:c7:b2:97:e6:d5:02:05:06:56:a3:5f:f1: aa:c2:c4:4f:fe:f7:ef:16:0f:9d:ec:aa:85:cf:3d:29:24:f1: 04:cd TC TrustCenter, Germany, Class 2 CA =================================== MD5 Fingerprint: E1:E9:96:53:77:E1:F0:38:A0:02:AB:94:C6:95:7B:FC PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+ +Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 3 (0x3) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:57:44 1998 GMT Not After : Dec 31 13:57:44 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:da:38:e8:ed:32:00:29:71:83:01:0d:bf:8c:01: dc:da:c6:ad:39:a4:a9:8a:2f:d5:8b:5c:68:5f:50: c6:62:f5:66:bd:ca:91:22:ec:aa:1d:51:d7:3d:b3: 51:b2:83:4e:5d:cb:49:b0:f0:4c:55:e5:6b:2d:c7: 85:0b:30:1c:92:4e:82:d4:ca:02:ed:f7:6f:be:dc: e0:e3:14:b8:05:53:f2:9a:f4:56:8b:5a:9e:85:93: d1:b4:82:56:ae:4d:bb:a8:4b:57:16:bc:fe:f8:58: 9e:f8:29:8d:b0:7b:cd:78:c9:4f:ac:8b:67:0c:f1: 9c:fb:fc:57:9b:57:5c:4f:0d Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 2 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 89:1b:f4:ef:e9:38:e2:6c:0c:f6:cd:6f:49:ce:29:cc:fb:a6: 0f:f9:8d:3e:95:46:d6:fc:47:32:89:b2:c8:06:61:7a:d2:e7: 0d:13:02:94:0b:d9:8b:56:47:f4:bb:e7:c5:5f:7b:f4:63:4c: ae:7c:34:ea:0d:a2:a9:b3:2c:85:f3:e3:fe:27:54:10:92:b0: 8f:92:c1:98:42:18:70:48:db:4e:2c:eb:0d:24:68:e4:d1:f7: be:09:a9:29:87:bb:e8:da:dc:3e:a3:88:42:31:f5:d1:e3:7f: ae:d8:8e:00:5a:74:98:b0:4f:c6:ff:23:7b:5c:73:00:78:c9: db:4e TC TrustCenter, Germany, Class 3 CA =================================== MD5 Fingerprint: 62:AB:B6:15:4A:B4:B0:16:77:FF:AE:CF:16:16:2B:8C PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO 1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn 4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt 7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5 lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:58:49 1998 GMT Not After : Dec 31 13:58:49 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:b4:c1:35:05:2e:0d:8d:ec:a0:40:6a:1c:0e: 27:a6:50:92:6b:50:1b:07:de:2e:e7:76:cc:e0:da: fc:84:a8:5e:8c:63:6a:2b:4d:d9:4e:02:76:11:c1: 0b:f2:8d:79:ca:00:b6:f1:b0:0e:d7:fb:a4:17:3d: af:ab:69:7a:96:27:bf:af:33:a1:9a:2a:59:aa:c4: b5:37:08:f2:12:a5:31:b6:43:f5:32:96:71:28:28: ab:8d:28:86:df:bb:ee:e3:0c:7d:30:d6:c3:52:ab: 8f:5d:27:9c:6b:c0:a3:e7:05:6b:57:49:44:b3:6e: ea:64:cf:d2:8e:7a:50:77:77 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 3 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 84:86:50:62:79:a0:27:e1:25:ba:09:b1:34:0f:13:09:ed:2d: ca:a3:e6:95:f9:30:ac:cd:17:a5:ce:3d:97:9d:ec:7c:8f:26: 7f:c0:61:ca:22:f7:91:dd:3c:36:59:9a:9b:75:f7:bc:e4:c8: ed:ec:02:b6:22:a7:f3:2c:f1:c8:92:78:6d:b6:ee:c5:28:ec: 80:20:4f:b9:6b:08:e7:2f:a7:86:1e:7d:b1:08:9f:54:b9:00: 37:3c:a0:d8:1a:c8:96:1c:f4:32:14:9c:39:95:b7:ee:f0:43: 49:c2:5e:e8:cb:79:6f:53:bf:fb:49:8a:2c:d8:4b:d9:55:f2: 12:70 TC TrustCenter, Germany, Class 4 CA =================================== MD5 Fingerprint: BF:AF:EC:C4:DA:F9:30:F9:CA:35:CA:25:E4:3F:8D:89 PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7 sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13 su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0 IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK 85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 5 (0x5) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 14:00:20 1998 GMT Not After : Dec 31 14:00:20 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:2f:63:d6:36:7b:b2:0d:d3:55:f5:64:6c:e6: 25:5d:c6:b4:c8:14:ba:25:38:83:eb:56:62:a5:55: a9:65:a3:f4:23:99:c2:4b:b9:d0:cd:54:67:a6:a3: a0:a3:a9:33:2b:76:e4:bd:ad:77:b2:ed:5c:12:74: c3:c5:b6:0f:52:9a:72:93:43:90:62:66:15:0f:45: a5:dd:e0:dd:b8:6f:40:6e:57:c1:79:72:a3:60:aa: ba:76:1d:12:89:53:5a:fc:02:be:e1:09:13:c5:4a: 2f:dc:3d:8b:19:ad:d7:8b:24:45:fb:4c:f4:cd:5c: 35:1d:29:4c:51:f3:f2:6c:55 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 4 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 94:68:14:1b:25:9e:29:99:b1:b2:23:d2:44:b3:95:9f:d1:9e: 55:04:dd:e3:2f:82:33:55:96:77:19:9d:2b:9e:65:1c:fa:8a: e3:c7:8f:25:fc:b1:1e:55:46:0f:8f:ff:4f:37:2f:a4:76:59: a6:64:eb:d5:16:70:bd:dd:95:33:0c:a4:0d:24:eb:64:50:b4: 43:11:f2:43:be:0d:71:98:22:ec:01:af:ec:f7:c7:5c:71:c3: 75:91:58:19:e8:dd:a0:f4:b4:f1:bc:10:4a:f3:93:b4:06:49: bb:1f:66:d2:bd:74:47:e1:9a:f9:eb:d7:ab:6d:1f:ba:e1:1d: 2c:da Thawte Personal Basic CA ======================== MD5 Fingerprint: E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B:78:EB:02:41 PEM Data: -----BEGIN CERTIFICATE----- MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P 9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bc:bc:93:53:6d:c0:50:4f:82:15:e6:48:94:35: a6:5a:be:6f:42:fa:0f:47:ee:77:75:72:dd:8d:49: 9b:96:57:a0:78:d4:ca:3f:51:b3:69:0b:91:76:17: 22:07:97:6a:c4:51:93:4b:e0:8d:ef:37:95:a1:0c: 4d:da:34:90:1d:17:89:97:e0:35:38:57:4a:c0:f4: 08:70:e9:3c:44:7b:50:7e:61:9a:90:e3:23:d3:88: 11:46:27:f5:0b:07:0e:bb:dd:d1:7f:20:0a:88:b9: 56:0b:2e:1c:80:da:f1:e3:9e:29:ef:14:bd:0a:44: fb:1b:5b:18:d1:bf:23:93:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 2d:e2:99:6b:b0:3d:7a:89:d7:59:a2:94:01:1f:2b:dd:12:4b: 53:c2:ad:7f:aa:a7:00:5c:91:40:57:25:4a:38:aa:84:70:b9: d9:80:0f:a5:7b:5c:fb:73:c6:bd:d7:8a:61:5c:03:e3:2d:27: a8:17:e0:84:85:42:dc:5e:9b:c6:b7:b2:6d:bb:74:af:e4:3f: cb:a7:b7:b0:e0:5d:be:78:83:25:94:d2:db:81:0f:79:07:6d: 4f:f4:39:15:5a:52:01:7b:de:32:d6:4d:38:f6:12:5c:06:50: df:05:5b:bd:14:4b:a1:df:29:ba:3b:41:8d:f7:63:56:a1:df: 22:b1 Thawte Personal Freemail CA =========================== MD5 Fingerprint: 1E:74:C3:86:3C:0C:35:C5:3E:C2:7F:EF:3C:AA:3C:D9 PEM Data: -----BEGIN CERTIFICATE----- MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa /RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei gQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d4:69:d7:d4:b0:94:64:5b:71:e9:47:d8:0c:51: b6:ea:72:91:b0:84:5e:7d:2d:0d:8f:7b:12:df:85: 25:75:28:74:3a:42:2c:63:27:9f:95:7b:4b:ef:7e: 19:87:1d:86:ea:a3:dd:b9:ce:96:64:1a:c2:14:6e: 44:ac:7c:e6:8f:e8:4d:0f:71:1f:40:38:a6:00:a3: 87:78:f6:f9:94:86:5e:ad:ea:c0:5e:76:eb:d9:14: a3:5d:6e:7a:7c:0c:a5:4b:55:7f:06:19:29:7f:9e: 9a:26:d5:6a:bb:38:24:08:6a:98:c7:b1:da:a3:98: 91:fd:79:db:e5:5a:c4:1c:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption c7:ec:92:7e:4e:f8:f5:96:a5:67:62:2a:a4:f0:4d:11:60:d0: 6f:8d:60:58:61:ac:26:bb:52:35:5c:08:cf:30:fb:a8:4a:96: 8a:1f:62:42:23:8c:17:0f:f4:ba:64:9c:17:ac:47:29:df:9d: 98:5e:d2:6c:60:71:5c:a2:ac:dc:79:e3:e7:6e:00:47:1f:b5: 0d:28:e8:02:9d:e4:9a:fd:13:f4:a6:d9:7c:b1:f8:dc:5f:23: 26:09:91:80:73:d0:14:1b:de:43:a9:83:25:f2:e6:9c:2f:15: ca:fe:a6:ab:8a:07:75:8b:0c:dd:51:84:6b:e4:f8:d1:ce:77: a2:81 Thawte Personal Premium CA ========================== MD5 Fingerprint: 3A:B2:DE:22:9A:20:93:49:F9:ED:C8:D2:8A:E7:68:0D PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:66:d9:f8:07:44:cf:b9:8c:2e:f0:a1:ef:13: 45:6c:05:df:de:27:16:51:36:41:11:6c:6c:3b:ed: fe:10:7d:12:9e:e5:9b:42:9a:fe:60:31:c3:66:b7: 73:3a:48:ae:4e:d0:32:37:94:88:b5:0d:b6:d9:f3: f2:44:d9:d5:88:12:dd:76:4d:f2:1a:fc:6f:23:1e: 7a:f1:d8:98:45:4e:07:10:ef:16:42:d0:43:75:6d: 4a:de:e2:aa:c9:31:ff:1f:00:70:7c:66:cf:10:25: 08:ba:fa:ee:00:e9:46:03:66:27:11:15:3b:aa:5b: f2:98:dd:36:42:b2:da:88:75 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 69:36:89:f7:34:2a:33:72:2f:6d:3b:d4:22:b2:b8:6f:9a:c5: 36:66:0e:1b:3c:a1:b1:75:5a:e6:fd:35:d3:f8:a8:f2:07:6f: 85:67:8e:de:2b:b9:e2:17:b0:3a:a0:f0:0e:a2:00:9a:df:f3: 14:15:6e:bb:c8:85:5a:98:80:f9:ff:be:74:1d:3d:f3:fe:30: 25:d1:37:34:67:fa:a5:71:79:30:61:29:72:c0:e0:2c:4c:fb: 56:e4:3a:a8:6f:e5:32:59:52:db:75:28:50:59:0c:f8:0b:19: e4:ac:d9:af:96:8d:2f:50:db:07:c3:ea:1f:ab:33:e0:f5:2b: 31:89 Thawte Premium Server CA ======================== MD5 Fingerprint: 06:9F:69:79:16:66:90:02:1B:8C:8C:A2:C3:07:6F:3A PEM Data: -----BEGIN CERTIFICATE----- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f: 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18: 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af: 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2: 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93: cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44: 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73: b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07: 8d:f4:42:4d:e7:40:9d:1c:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7: c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5: 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb: c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59: 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9: a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92: 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07: 14:42 Thawte Server CA ================ MD5 Fingerprint: C5:70:C4:A2:ED:53:78:0C:C8:10:53:81:64:CB:D0:1D PEM Data: -----BEGIN CERTIFICATE----- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ qdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c: 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da: 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06: 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2: 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b: 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90: 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f: 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36: 3a:c2:b5:66:22:12:d6:87:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9: a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48: 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88: 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9: 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5: e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9: b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e: 70:47 Thawte Universal CA Root ======================== MD5 Fingerprint: 17:AF:71:16:52:7B:73:65:22:05:29:28:84:71:9D:13 PEM Data: -----BEGIN CERTIFICATE----- MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0 ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2 MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/ ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7 32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft +aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7 Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3 uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI VS3T+9gbUZm+JRs6usB9G+3O0km5z/PFfYmQgdhpSCAQo/jvklEYMosRGMA/G4VW zlfJ8oJkxt8CCS5KES+xJ203UvDwFmHxZ43fh3Kvh9rP+1CUbtSUheuKLOoh9ZZK RNXgzmp0RE3QBdOHFe020KSLZlVwk+5HBsF+LqUYeWfzKIXxcPcOg6R+VJ5adjLL ZRu4zfvIKAPSVJHRp8WFQwgXdqXmL2cI2KGigi0M+MGvY9RQd21rRkpBhdWQX3kt xOzXEYdAiuFo4mT4VTL7b5Ms2nfZIcEX5TYsTn6Qf6yUKzJnvjhQdriuQbnXIcUJ TGDIo1HENJtXN9/LyTNXi+v7dp8ZTcVqHypFrivtL42npQDLBPolYi50SBvKKoy6 27Z+9rsCfKnD21h4ob/w/hoQVRHO6GlOlmXGFwPWB2iMVIKuHCJVP/H0CZcowEb3 TgslHfcH1wkdOhhXODvoMwbnj3hGHlv1BrbsuKYN8boTS9YYIN1pM0ozFa64yJiK JyyTvC377jO/ZuZNurabBlVgl0u8RM1+9KHYqi/AAighFmJ42whU8vz0NOPGjxxD V86QGkvcLjsokYk/eto1HY4s7kns9DOtyVOojJ8EUz4kHFLJEvliV6O87izrQHwg I3ArlflzF4rRwRxpprc4mmf3cB16WgxAz2IPhTzCAk5+tfbFKimEsx83KuGqckLE 7Wsaj5IcXb7R8lvyq6qp0vW4pEErK5FuEkjKmNg3jcjtADC1tgROfpzahOzA+nvl HYikU0awlORcG6ElLA9IUneXCWzsWxgzgwLlgn7NhSEwEf0nT8/kHuw/pVds6Sow GSqI5cNpOKtvOXF/hOFBw+HMKokgUi6DD2w5P0stFqwt8CSsAHP0m7MGPwW4FIUf q55cPJ5inQ5tO4AJ/ALqopd0ysf541bhw8qlpprAkOAkElPSwovavu0CQ15n4YmY ee7LqsrDG9znpUalfGsWh7ZaKNfbJzxepb22Ud0fQ887Jsg6jSVhwUn0PBvJROqv HMIrlAEqDjDRW4srR+XD0QQDmw45LNYn1OZwWtl1zyrYyQAF5BOI7MM5+4dhMDZD A8ienKIGwi/F/PCAY7FUBKBMqS7G9XZ62NDk1JQR5RW1eAbcuICPmakgMz0QhUxl Cco+WF5gk5qqYl3AUQYcXWCgDZxLQ/anFiGkh6rywS7ukjC4nt/fEAGLhglw2Gyo t1AeFpa092f9NTohkCoyxwB7TQcQCbkvc9gYfmeZBE8G/FDHhZudQJ2zljf6pdyy ck7vTgks/ZH9Tfe7pqE+q3uiA0CmqVUn4vr5Gc6HdarxdTbz87iR+JHDi3UTjkxl mhY5auU06HqWWX81sAD9W2n8Qyb69Shu/ofZfiT7tKCCblSi/66/YrT0cgHCy5hH mOFMtReAgM6PpijuHkVq+9/xHfxaO9bq9GwdYklXO4qPhurwUwTOnBZo/7q5/IgP R/cCRHJAuMo7LVOd3DxWjFl7aBosjXG7bADHGs5vQJKxoy8P2UTyo3Aunu4OrjLQ Oz6LB+rmebNcKeJ9a6he+Vox6AiWoowDmEbxuH2QVCbtdmL+numabl7JScdcNFMp VNns5EbhgDt12d/7edWH8bqe6xnOTFJz5luHriVPOXnMxrj5EHvs8JtxpAWg0ynT Tn8f9C0oeMxVlXsekS/MVhhzi7LbvGkH5tDYT+2i/1iFo23gSlO3Z32NDFxbe3co AjVEegTTKEPIazAXXTK4KTW6dto7FEp2GFik+JI8nk0zb0ZrCNkxSGjd9PskVjSy z2lmvkjSimYizfJpzcJTE0UpQSLWXZgftqSyo8LuAi9RG9yDpOxwJajUCGEyb+Sh gS58Y3L6KWW8cETPXQIDAQABMA0GCSqGSIb3DQEBBQUAA4IIAQBVmjRqIgZpCUUz x66pXMcJTpuGvEGQ1JRS9s0jKZRLIs3ovf6dzVLyve2rh8mrq0YEtL2iPyIwR1DA S4x2DwP1ktKxLcR6NZzJc4frpp/eD3ON03+Z2LqPb8Tzvhqui6KUNpDi5euNBfT8 Zd+V8cSUTRdW1588j1A853e/lYYmZPtq/8ba6YyuQrtp5TPG2OkNxlUhScEMtKP5 m0tc3oNPQQPOKnloOH3wVEkg9bYQ/wjcM2aWm/8G3gCe185WQ5pR/HDN9vBRo7fN tFyFYs1xt8YrIyvdw25AQvo3/zcc9npXlIeFI9fUycdfwU0vyQ3XXOycJe6eMIKR lnK4dR34CWhXl7ItS+4l7HokKe5y1JwT26vcAwrYShTJCFdEXaG1U4A08hSXz1Le og6KEOkU79BgvmGh8SVd1RhzP5MQypbus0DS26NVz1dapQ5PdUff6veQmm31cC4d FBw3ZARZULDccoZvnDc9XSivc1Xv0u4kdHQT79zbMUn7P2P10wg+M6XnnQreUyxR jmfbm0FlQVC91KSWbIe8EuCUx9PA5MtzWACD4awnhdadU51cvQo+A0OcDJH1bXv4 QHJ1qxF2kSvhxqofcGl2cBUJ/pPQ1i23FWqbZ1y0aZ8lpn2K+30iqXHyzk6MuCEt 3v5BcQ3/nexzprsHT4gOWEcufqnCx3jdunqeTuAwTmNvhdQgQen6/kNF5/uverLO pAUdIppYht/kzkyp/tgWpW/72M5We/XWIO/kR81jJP+5vvFIo8EBcua9wK3tJg3K NJ/8Ai0gTwUgriE9DMIgPD/wBITcz4n9uSWRjtBD5rMgq1wt1UCeoEvY9LLMffFY Co6H7YisNpbkVqARivKa0LNXozS7Gas44XRrIsQxzgHVGzbjHjhMM5PfQONZV06s bnseWj3FHVusyBCCNQIisvx16BCRjcR9eJNHnhydrGtiAliM1hwj1q94woCcpKok VBS1FJjG+CsaJMtxMgrimw5pa91+jGTRLmPvDn+xPohMnVXlyW4XBLdB/72KQcsl MW9Edz9HsfyBiAeOBUkgtxHZaQMqA525M4Sa399640Zzo9iijFMZiFVMdLj2RIQr 0RQtTjkukmj/afyFYhvrVU/vJYRiRZnW2E5vP1MIfR0GlYGAf09OdDaYteKHcJjc 1/XcUhXmxtZ5ljl/j5XPq4BTrRsLRUAO1Bi9LN6Kd3b98kRHxiHQ5HTw2BgFyHww csff8bv8AjCp9EImWQ2TBYKhc+005ThdzVCQ/pT8E7y9/KiiiKdzxLKo0V2IxAKi evEEyf6MdMnvHWRBn6welmdkrKsoQced98CYG24HwmR9WoNmVig2nOf7HHcOKKDE 92t5OQQghMdXk7wboOq860LlqBH+/KxlzP34KIj0pZrlc1HgqJsNA3dO5eCYs4ja febGnnwUZsEuU0qSBzegfuk9CeQVfM/9uEGl755mncReBx2H+EGt6ucv0kFjGDf5 FONN0OX3Q/0V4/k2cwYm3wFPqcNO3iBGd5i0eiQrO3UrTliNm12kxxagvDKIP6GD 8wDI+NhY6WNdTCu18HJB2Kt3N9ZydK62NpzIpoNJS+DJVgspvgAwy93WyEKKANns FdE0cfJbZIf2J9K364awkL8p2yGeNozjIC+VI1FsG8Kk1ebYAkNnoP6bUANEf7vk ctXR5NqPkhRk+10UEBJKlQbJZQgpyiGjJjgRySffcGcE/cpIMn9jskV0MVBPh9kg cNIhcLHWEJ0zXXiDkW1Vguza5GJjx4FG1xllcipDGZC41yNNTBzgRKlmZ6zucXkn Jnhtcg71XUsjtXx8ZekXxjoLDd1eHlHDhrjsf8cnSqVG6GotGcGHo8uZk4dkolUU TLdDpZPX59JOeUDKZZlGPT96gHqIaswe5WszRvRQwNUfCbjNii6hJ+tdc6foawrl V4IqsPziVFJW8KupEsYjlgcknOC8RqW0IATaCZNj5dQuwn7FMe21FXSGF7mz8yaK HQJq2ho/6LrxBG2UUVTiWrRZgx1g0C1zzAe1Joz518aIke+Az10PoWDLRdRCItGx cB390LcwkDrGSG1n5TLaj9vjqOMdICWiHOFMuaT2xj9cWA27xrJ3ARaRnxcGDbdA PsyPjpxL4J1+mx4Fq4gi+tMoG1cUZEo+JCw4TSFpAHMu0FUtdPIV6JRDPkAqxsa5 alveoswYUFRdTiqFbPaSiykZfufqSuAiKyW892bPd5pBdPI8FA10afVQg83NLyHb IkaK0PdRGpVX8gWLGhntO0XoNsJufvtXIgAfBlOprpPGj3EqMUWS545t5pkiwIP8 79xXZndPojYx+6ETjeXKo5V9AQxkcDtTQmiAx7udqAA1aZgMqGfYQ+Wqz5XgUZWk Fz9CnbgEztN5ecjTihYykuDXou7XN0wvrLh7vkX28RgznHs3piTZvECrAOnDN4ur 2LbzXoFOsBRrBz4f7ML2RCKVu7Pmb9b5cGW6CoNlqg4TL4MTI1OLQBb6zi/8TQT4 69isxTbCFVdIOOxVs7Qeuq3SQgYXDXPIV6a+lk2p8sD7eiEc9clwqYKQtfEM1HkQ voGm6VxhnHd5mqTDNyZXN8lSLPoI/9BfxmHA9Ha+/N5Oz6tRmXHH33701s8GVhkT UwttdFlIGZtTBS2dMlTT5SxTi2Q+1GR744AJFMz+FkZja3Fp+PnLJ/aIVLxFs84C yJTuQFv5QgLC/7DYLOsof17JJgGZpw== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root Validity Not Before: Dec 5 13:56:05 1999 GMT Not After : Apr 3 13:56:05 2037 GMT Subject: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (16384 bit) Modulus (16384 bit): 00:e2:89:05:6d:c3:7f:ad:a6:89:3a:ff:bb:c7:cd: 9d:37:b1:e1:d2:21:1e:9b:61:2a:15:e7:7b:57:4f: 55:3c:d0:bb:f9:d9:3d:3e:a6:bc:ec:b4:ad:53:9a: 16:02:eb:0b:72:fd:8a:f2:8f:44:05:c5:eb:d3:e5: bd:b6:44:39:e6:fb:47:bf:6a:9e:0a:95:18:e2:68: e2:d6:96:d6:21:ad:88:fd:f5:17:f5:d3:da:42:a5: 90:ed:29:95:96:75:3a:da:87:a1:d4:f5:d3:87:de: 05:62:a6:e3:66:74:92:cf:a5:bc:bb:df:68:ff:71: 75:56:41:59:35:eb:33:5a:66:51:f2:d2:a3:0a:c1: 8c:ce:73:5c:11:6f:2d:8c:95:8c:91:b1:fd:cf:e5: ad:56:95:cc:85:92:83:90:55:41:c9:c2:77:ed:f9: a3:74:42:0a:68:08:f3:d0:d1:65:fd:67:2c:34:ff: 24:7f:e7:79:c8:07:3b:25:57:dd:a4:0c:98:3d:be: e0:cc:19:65:db:f2:54:a2:af:42:d4:9d:e2:ae:84: 23:25:09:33:12:b5:6a:1e:76:c4:8b:d9:49:00:6c: 5e:ba:1f:f2:1b:da:67:ca:27:aa:a3:44:23:1b:83: 82:ce:f2:ab:33:ed:54:a4:dc:c9:ab:59:65:d1:38: 0e:c1:3e:1b:67:8f:d6:75:01:e0:55:22:dd:76:77: ec:8e:dd:f4:cf:79:22:6d:b9:57:03:f5:99:08:a7: 3c:3e:34:fb:c4:17:ae:23:58:cd:24:f3:23:ca:6a: 02:28:94:01:81:34:b4:6c:6b:ae:8b:1a:c3:a3:d2: 09:3c:16:54:f5:36:5f:24:e3:9f:4a:a1:e2:64:c6: 16:c3:a6:81:7a:24:36:47:8e:c1:5e:0e:fb:f9:15: 78:04:d6:0e:59:d9:9d:58:66:62:d2:94:29:32:32: c8:78:b9:66:f6:b5:56:e1:6c:c6:14:4b:96:52:59: 91:02:24:6a:55:47:d7:3f:b6:23:1a:60:77:97:2e: e2:40:af:9e:04:57:9e:ad:11:c5:c9:43:70:ef:48: b4:5e:ac:1c:69:2e:2e:82:d5:5b:8b:be:82:be:19: 14:5e:e7:0d:22:c7:51:1b:ff:1e:9b:f1:30:8f:71: 31:06:b3:34:27:8f:5f:7a:66:82:4f:8a:2d:13:ab: 42:cf:21:56:9e:97:8e:66:36:0f:96:9b:e5:2b:f4: 02:a9:2a:6a:8c:2c:c4:c3:b8:70:2c:2d:29:1e:3f: 50:77:1e:6d:2a:54:e4:55:0a:91:38:a1:c5:b5:66: a2:76:5a:ee:0f:bf:b4:67:e1:28:6e:0f:e1:36:a1: 82:d1:bf:d4:77:e1:c4:67:32:93:78:c8:e7:54:53: fe:23:79:e6:68:cc:26:90:f6:10:63:5d:2a:6f:91: 2d:a4:73:32:51:21:f2:bb:15:df:aa:24:08:48:06: de:a1:9e:26:bf:ba:83:bf:7c:a4:c8:a0:8c:bd:d2: ff:bc:84:69:27:13:24:18:c4:45:18:23:26:5e:18: 14:ca:2e:88:87:62:a3:53:e6:21:b7:b8:85:7b:9a: 85:bb:15:26:72:f8:b9:f7:6a:74:0f:49:3f:92:be: a9:05:b7:99:27:bf:bf:09:17:4b:99:4c:ad:11:10: 7c:df:74:31:f6:8f:26:5f:aa:88:ae:38:57:c8:55: 2d:d3:fb:d8:1b:51:99:be:25:1b:3a:ba:c0:7d:1b: ed:ce:d2:49:b9:cf:f3:c5:7d:89:90:81:d8:69:48: 20:10:a3:f8:ef:92:51:18:32:8b:11:18:c0:3f:1b: 85:56:ce:57:c9:f2:82:64:c6:df:02:09:2e:4a:11: 2f:b1:27:6d:37:52:f0:f0:16:61:f1:67:8d:df:87: 72:af:87:da:cf:fb:50:94:6e:d4:94:85:eb:8a:2c: ea:21:f5:96:4a:44:d5:e0:ce:6a:74:44:4d:d0:05: d3:87:15:ed:36:d0:a4:8b:66:55:70:93:ee:47:06: c1:7e:2e:a5:18:79:67:f3:28:85:f1:70:f7:0e:83: a4:7e:54:9e:5a:76:32:cb:65:1b:b8:cd:fb:c8:28: 03:d2:54:91:d1:a7:c5:85:43:08:17:76:a5:e6:2f: 67:08:d8:a1:a2:82:2d:0c:f8:c1:af:63:d4:50:77: 6d:6b:46:4a:41:85:d5:90:5f:79:2d:c4:ec:d7:11: 87:40:8a:e1:68:e2:64:f8:55:32:fb:6f:93:2c:da: 77:d9:21:c1:17:e5:36:2c:4e:7e:90:7f:ac:94:2b: 32:67:be:38:50:76:b8:ae:41:b9:d7:21:c5:09:4c: 60:c8:a3:51:c4:34:9b:57:37:df:cb:c9:33:57:8b: eb:fb:76:9f:19:4d:c5:6a:1f:2a:45:ae:2b:ed:2f: 8d:a7:a5:00:cb:04:fa:25:62:2e:74:48:1b:ca:2a: 8c:ba:db:b6:7e:f6:bb:02:7c:a9:c3:db:58:78:a1: bf:f0:fe:1a:10:55:11:ce:e8:69:4e:96:65:c6:17: 03:d6:07:68:8c:54:82:ae:1c:22:55:3f:f1:f4:09: 97:28:c0:46:f7:4e:0b:25:1d:f7:07:d7:09:1d:3a: 18:57:38:3b:e8:33:06:e7:8f:78:46:1e:5b:f5:06: b6:ec:b8:a6:0d:f1:ba:13:4b:d6:18:20:dd:69:33: 4a:33:15:ae:b8:c8:98:8a:27:2c:93:bc:2d:fb:ee: 33:bf:66:e6:4d:ba:b6:9b:06:55:60:97:4b:bc:44: cd:7e:f4:a1:d8:aa:2f:c0:02:28:21:16:62:78:db: 08:54:f2:fc:f4:34:e3:c6:8f:1c:43:57:ce:90:1a: 4b:dc:2e:3b:28:91:89:3f:7a:da:35:1d:8e:2c:ee: 49:ec:f4:33:ad:c9:53:a8:8c:9f:04:53:3e:24:1c: 52:c9:12:f9:62:57:a3:bc:ee:2c:eb:40:7c:20:23: 70:2b:95:f9:73:17:8a:d1:c1:1c:69:a6:b7:38:9a: 67:f7:70:1d:7a:5a:0c:40:cf:62:0f:85:3c:c2:02: 4e:7e:b5:f6:c5:2a:29:84:b3:1f:37:2a:e1:aa:72: 42:c4:ed:6b:1a:8f:92:1c:5d:be:d1:f2:5b:f2:ab: aa:a9:d2:f5:b8:a4:41:2b:2b:91:6e:12:48:ca:98: d8:37:8d:c8:ed:00:30:b5:b6:04:4e:7e:9c:da:84: ec:c0:fa:7b:e5:1d:88:a4:53:46:b0:94:e4:5c:1b: a1:25:2c:0f:48:52:77:97:09:6c:ec:5b:18:33:83: 02:e5:82:7e:cd:85:21:30:11:fd:27:4f:cf:e4:1e: ec:3f:a5:57:6c:e9:2a:30:19:2a:88:e5:c3:69:38: ab:6f:39:71:7f:84:e1:41:c3:e1:cc:2a:89:20:52: 2e:83:0f:6c:39:3f:4b:2d:16:ac:2d:f0:24:ac:00: 73:f4:9b:b3:06:3f:05:b8:14:85:1f:ab:9e:5c:3c: 9e:62:9d:0e:6d:3b:80:09:fc:02:ea:a2:97:74:ca: c7:f9:e3:56:e1:c3:ca:a5:a6:9a:c0:90:e0:24:12: 53:d2:c2:8b:da:be:ed:02:43:5e:67:e1:89:98:79: ee:cb:aa:ca:c3:1b:dc:e7:a5:46:a5:7c:6b:16:87: b6:5a:28:d7:db:27:3c:5e:a5:bd:b6:51:dd:1f:43: cf:3b:26:c8:3a:8d:25:61:c1:49:f4:3c:1b:c9:44: ea:af:1c:c2:2b:94:01:2a:0e:30:d1:5b:8b:2b:47: e5:c3:d1:04:03:9b:0e:39:2c:d6:27:d4:e6:70:5a: d9:75:cf:2a:d8:c9:00:05:e4:13:88:ec:c3:39:fb: 87:61:30:36:43:03:c8:9e:9c:a2:06:c2:2f:c5:fc: f0:80:63:b1:54:04:a0:4c:a9:2e:c6:f5:76:7a:d8: d0:e4:d4:94:11:e5:15:b5:78:06:dc:b8:80:8f:99: a9:20:33:3d:10:85:4c:65:09:ca:3e:58:5e:60:93: 9a:aa:62:5d:c0:51:06:1c:5d:60:a0:0d:9c:4b:43: f6:a7:16:21:a4:87:aa:f2:c1:2e:ee:92:30:b8:9e: df:df:10:01:8b:86:09:70:d8:6c:a8:b7:50:1e:16: 96:b4:f7:67:fd:35:3a:21:90:2a:32:c7:00:7b:4d: 07:10:09:b9:2f:73:d8:18:7e:67:99:04:4f:06:fc: 50:c7:85:9b:9d:40:9d:b3:96:37:fa:a5:dc:b2:72: 4e:ef:4e:09:2c:fd:91:fd:4d:f7:bb:a6:a1:3e:ab: 7b:a2:03:40:a6:a9:55:27:e2:fa:f9:19:ce:87:75: aa:f1:75:36:f3:f3:b8:91:f8:91:c3:8b:75:13:8e: 4c:65:9a:16:39:6a:e5:34:e8:7a:96:59:7f:35:b0: 00:fd:5b:69:fc:43:26:fa:f5:28:6e:fe:87:d9:7e: 24:fb:b4:a0:82:6e:54:a2:ff:ae:bf:62:b4:f4:72: 01:c2:cb:98:47:98:e1:4c:b5:17:80:80:ce:8f:a6: 28:ee:1e:45:6a:fb:df:f1:1d:fc:5a:3b:d6:ea:f4: 6c:1d:62:49:57:3b:8a:8f:86:ea:f0:53:04:ce:9c: 16:68:ff:ba:b9:fc:88:0f:47:f7:02:44:72:40:b8: ca:3b:2d:53:9d:dc:3c:56:8c:59:7b:68:1a:2c:8d: 71:bb:6c:00:c7:1a:ce:6f:40:92:b1:a3:2f:0f:d9: 44:f2:a3:70:2e:9e:ee:0e:ae:32:d0:3b:3e:8b:07: ea:e6:79:b3:5c:29:e2:7d:6b:a8:5e:f9:5a:31:e8: 08:96:a2:8c:03:98:46:f1:b8:7d:90:54:26:ed:76: 62:fe:9e:e9:9a:6e:5e:c9:49:c7:5c:34:53:29:54: d9:ec:e4:46:e1:80:3b:75:d9:df:fb:79:d5:87:f1: ba:9e:eb:19:ce:4c:52:73:e6:5b:87:ae:25:4f:39: 79:cc:c6:b8:f9:10:7b:ec:f0:9b:71:a4:05:a0:d3: 29:d3:4e:7f:1f:f4:2d:28:78:cc:55:95:7b:1e:91: 2f:cc:56:18:73:8b:b2:db:bc:69:07:e6:d0:d8:4f: ed:a2:ff:58:85:a3:6d:e0:4a:53:b7:67:7d:8d:0c: 5c:5b:7b:77:28:02:35:44:7a:04:d3:28:43:c8:6b: 30:17:5d:32:b8:29:35:ba:76:da:3b:14:4a:76:18: 58:a4:f8:92:3c:9e:4d:33:6f:46:6b:08:d9:31:48: 68:dd:f4:fb:24:56:34:b2:cf:69:66:be:48:d2:8a: 66:22:cd:f2:69:cd:c2:53:13:45:29:41:22:d6:5d: 98:1f:b6:a4:b2:a3:c2:ee:02:2f:51:1b:dc:83:a4: ec:70:25:a8:d4:08:61:32:6f:e4:a1:81:2e:7c:63: 72:fa:29:65:bc:70:44:cf:5d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 55:9a:34:6a:22:06:69:09:45:33:c7:ae:a9:5c:c7:09:4e:9b: 86:bc:41:90:d4:94:52:f6:cd:23:29:94:4b:22:cd:e8:bd:fe: 9d:cd:52:f2:bd:ed:ab:87:c9:ab:ab:46:04:b4:bd:a2:3f:22: 30:47:50:c0:4b:8c:76:0f:03:f5:92:d2:b1:2d:c4:7a:35:9c: c9:73:87:eb:a6:9f:de:0f:73:8d:d3:7f:99:d8:ba:8f:6f:c4: f3:be:1a:ae:8b:a2:94:36:90:e2:e5:eb:8d:05:f4:fc:65:df: 95:f1:c4:94:4d:17:56:d7:9f:3c:8f:50:3c:e7:77:bf:95:86: 26:64:fb:6a:ff:c6:da:e9:8c:ae:42:bb:69:e5:33:c6:d8:e9: 0d:c6:55:21:49:c1:0c:b4:a3:f9:9b:4b:5c:de:83:4f:41:03: ce:2a:79:68:38:7d:f0:54:49:20:f5:b6:10:ff:08:dc:33:66: 96:9b:ff:06:de:00:9e:d7:ce:56:43:9a:51:fc:70:cd:f6:f0: 51:a3:b7:cd:b4:5c:85:62:cd:71:b7:c6:2b:23:2b:dd:c3:6e: 40:42:fa:37:ff:37:1c:f6:7a:57:94:87:85:23:d7:d4:c9:c7: 5f:c1:4d:2f:c9:0d:d7:5c:ec:9c:25:ee:9e:30:82:91:96:72: b8:75:1d:f8:09:68:57:97:b2:2d:4b:ee:25:ec:7a:24:29:ee: 72:d4:9c:13:db:ab:dc:03:0a:d8:4a:14:c9:08:57:44:5d:a1: b5:53:80:34:f2:14:97:cf:52:de:a2:0e:8a:10:e9:14:ef:d0: 60:be:61:a1:f1:25:5d:d5:18:73:3f:93:10:ca:96:ee:b3:40: d2:db:a3:55:cf:57:5a:a5:0e:4f:75:47:df:ea:f7:90:9a:6d: f5:70:2e:1d:14:1c:37:64:04:59:50:b0:dc:72:86:6f:9c:37: 3d:5d:28:af:73:55:ef:d2:ee:24:74:74:13:ef:dc:db:31:49: fb:3f:63:f5:d3:08:3e:33:a5:e7:9d:0a:de:53:2c:51:8e:67: db:9b:41:65:41:50:bd:d4:a4:96:6c:87:bc:12:e0:94:c7:d3: c0:e4:cb:73:58:00:83:e1:ac:27:85:d6:9d:53:9d:5c:bd:0a: 3e:03:43:9c:0c:91:f5:6d:7b:f8:40:72:75:ab:11:76:91:2b: e1:c6:aa:1f:70:69:76:70:15:09:fe:93:d0:d6:2d:b7:15:6a: 9b:67:5c:b4:69:9f:25:a6:7d:8a:fb:7d:22:a9:71:f2:ce:4e: 8c:b8:21:2d:de:fe:41:71:0d:ff:9d:ec:73:a6:bb:07:4f:88: 0e:58:47:2e:7e:a9:c2:c7:78:dd:ba:7a:9e:4e:e0:30:4e:63: 6f:85:d4:20:41:e9:fa:fe:43:45:e7:fb:af:7a:b2:ce:a4:05: 1d:22:9a:58:86:df:e4:ce:4c:a9:fe:d8:16:a5:6f:fb:d8:ce: 56:7b:f5:d6:20:ef:e4:47:cd:63:24:ff:b9:be:f1:48:a3:c1: 01:72:e6:bd:c0:ad:ed:26:0d:ca:34:9f:fc:02:2d:20:4f:05: 20:ae:21:3d:0c:c2:20:3c:3f:f0:04:84:dc:cf:89:fd:b9:25: 91:8e:d0:43:e6:b3:20:ab:5c:2d:d5:40:9e:a0:4b:d8:f4:b2: cc:7d:f1:58:0a:8e:87:ed:88:ac:36:96:e4:56:a0:11:8a:f2: 9a:d0:b3:57:a3:34:bb:19:ab:38:e1:74:6b:22:c4:31:ce:01: d5:1b:36:e3:1e:38:4c:33:93:df:40:e3:59:57:4e:ac:6e:7b: 1e:5a:3d:c5:1d:5b:ac:c8:10:82:35:02:22:b2:fc:75:e8:10: 91:8d:c4:7d:78:93:47:9e:1c:9d:ac:6b:62:02:58:8c:d6:1c: 23:d6:af:78:c2:80:9c:a4:aa:24:54:14:b5:14:98:c6:f8:2b: 1a:24:cb:71:32:0a:e2:9b:0e:69:6b:dd:7e:8c:64:d1:2e:63: ef:0e:7f:b1:3e:88:4c:9d:55:e5:c9:6e:17:04:b7:41:ff:bd: 8a:41:cb:25:31:6f:44:77:3f:47:b1:fc:81:88:07:8e:05:49: 20:b7:11:d9:69:03:2a:03:9d:b9:33:84:9a:df:df:7a:e3:46: 73:a3:d8:a2:8c:53:19:88:55:4c:74:b8:f6:44:84:2b:d1:14: 2d:4e:39:2e:92:68:ff:69:fc:85:62:1b:eb:55:4f:ef:25:84: 62:45:99:d6:d8:4e:6f:3f:53:08:7d:1d:06:95:81:80:7f:4f: 4e:74:36:98:b5:e2:87:70:98:dc:d7:f5:dc:52:15:e6:c6:d6: 79:96:39:7f:8f:95:cf:ab:80:53:ad:1b:0b:45:40:0e:d4:18: bd:2c:de:8a:77:76:fd:f2:44:47:c6:21:d0:e4:74:f0:d8:18: 05:c8:7c:30:72:c7:df:f1:bb:fc:02:30:a9:f4:42:26:59:0d: 93:05:82:a1:73:ed:34:e5:38:5d:cd:50:90:fe:94:fc:13:bc: bd:fc:a8:a2:88:a7:73:c4:b2:a8:d1:5d:88:c4:02:a2:7a:f1: 04:c9:fe:8c:74:c9:ef:1d:64:41:9f:ac:1e:96:67:64:ac:ab: 28:41:c7:9d:f7:c0:98:1b:6e:07:c2:64:7d:5a:83:66:56:28: 36:9c:e7:fb:1c:77:0e:28:a0:c4:f7:6b:79:39:04:20:84:c7: 57:93:bc:1b:a0:ea:bc:eb:42:e5:a8:11:fe:fc:ac:65:cc:fd: f8:28:88:f4:a5:9a:e5:73:51:e0:a8:9b:0d:03:77:4e:e5:e0: 98:b3:88:da:7d:e6:c6:9e:7c:14:66:c1:2e:53:4a:92:07:37: a0:7e:e9:3d:09:e4:15:7c:cf:fd:b8:41:a5:ef:9e:66:9d:c4: 5e:07:1d:87:f8:41:ad:ea:e7:2f:d2:41:63:18:37:f9:14:e3: 4d:d0:e5:f7:43:fd:15:e3:f9:36:73:06:26:df:01:4f:a9:c3: 4e:de:20:46:77:98:b4:7a:24:2b:3b:75:2b:4e:58:8d:9b:5d: a4:c7:16:a0:bc:32:88:3f:a1:83:f3:00:c8:f8:d8:58:e9:63: 5d:4c:2b:b5:f0:72:41:d8:ab:77:37:d6:72:74:ae:b6:36:9c: c8:a6:83:49:4b:e0:c9:56:0b:29:be:00:30:cb:dd:d6:c8:42: 8a:00:d9:ec:15:d1:34:71:f2:5b:64:87:f6:27:d2:b7:eb:86: b0:90:bf:29:db:21:9e:36:8c:e3:20:2f:95:23:51:6c:1b:c2: a4:d5:e6:d8:02:43:67:a0:fe:9b:50:03:44:7f:bb:e4:72:d5: d1:e4:da:8f:92:14:64:fb:5d:14:10:12:4a:95:06:c9:65:08: 29:ca:21:a3:26:38:11:c9:27:df:70:67:04:fd:ca:48:32:7f: 63:b2:45:74:31:50:4f:87:d9:20:70:d2:21:70:b1:d6:10:9d: 33:5d:78:83:91:6d:55:82:ec:da:e4:62:63:c7:81:46:d7:19: 65:72:2a:43:19:90:b8:d7:23:4d:4c:1c:e0:44:a9:66:67:ac: ee:71:79:27:26:78:6d:72:0e:f5:5d:4b:23:b5:7c:7c:65:e9: 17:c6:3a:0b:0d:dd:5e:1e:51:c3:86:b8:ec:7f:c7:27:4a:a5: 46:e8:6a:2d:19:c1:87:a3:cb:99:93:87:64:a2:55:14:4c:b7: 43:a5:93:d7:e7:d2:4e:79:40:ca:65:99:46:3d:3f:7a:80:7a: 88:6a:cc:1e:e5:6b:33:46:f4:50:c0:d5:1f:09:b8:cd:8a:2e: a1:27:eb:5d:73:a7:e8:6b:0a:e5:57:82:2a:b0:fc:e2:54:52: 56:f0:ab:a9:12:c6:23:96:07:24:9c:e0:bc:46:a5:b4:20:04: da:09:93:63:e5:d4:2e:c2:7e:c5:31:ed:b5:15:74:86:17:b9: b3:f3:26:8a:1d:02:6a:da:1a:3f:e8:ba:f1:04:6d:94:51:54: e2:5a:b4:59:83:1d:60:d0:2d:73:cc:07:b5:26:8c:f9:d7:c6: 88:91:ef:80:cf:5d:0f:a1:60:cb:45:d4:42:22:d1:b1:70:1d: fd:d0:b7:30:90:3a:c6:48:6d:67:e5:32:da:8f:db:e3:a8:e3: 1d:20:25:a2:1c:e1:4c:b9:a4:f6:c6:3f:5c:58:0d:bb:c6:b2: 77:01:16:91:9f:17:06:0d:b7:40:3e:cc:8f:8e:9c:4b:e0:9d: 7e:9b:1e:05:ab:88:22:fa:d3:28:1b:57:14:64:4a:3e:24:2c: 38:4d:21:69:00:73:2e:d0:55:2d:74:f2:15:e8:94:43:3e:40: 2a:c6:c6:b9:6a:5b:de:a2:cc:18:50:54:5d:4e:2a:85:6c:f6: 92:8b:29:19:7e:e7:ea:4a:e0:22:2b:25:bc:f7:66:cf:77:9a: 41:74:f2:3c:14:0d:74:69:f5:50:83:cd:cd:2f:21:db:22:46: 8a:d0:f7:51:1a:95:57:f2:05:8b:1a:19:ed:3b:45:e8:36:c2: 6e:7e:fb:57:22:00:1f:06:53:a9:ae:93:c6:8f:71:2a:31:45: 92:e7:8e:6d:e6:99:22:c0:83:fc:ef:dc:57:66:77:4f:a2:36: 31:fb:a1:13:8d:e5:ca:a3:95:7d:01:0c:64:70:3b:53:42:68: 80:c7:bb:9d:a8:00:35:69:98:0c:a8:67:d8:43:e5:aa:cf:95: e0:51:95:a4:17:3f:42:9d:b8:04:ce:d3:79:79:c8:d3:8a:16: 32:92:e0:d7:a2:ee:d7:37:4c:2f:ac:b8:7b:be:45:f6:f1:18: 33:9c:7b:37:a6:24:d9:bc:40:ab:00:e9:c3:37:8b:ab:d8:b6: f3:5e:81:4e:b0:14:6b:07:3e:1f:ec:c2:f6:44:22:95:bb:b3: e6:6f:d6:f9:70:65:ba:0a:83:65:aa:0e:13:2f:83:13:23:53: 8b:40:16:fa:ce:2f:fc:4d:04:f8:eb:d8:ac:c5:36:c2:15:57: 48:38:ec:55:b3:b4:1e:ba:ad:d2:42:06:17:0d:73:c8:57:a6: be:96:4d:a9:f2:c0:fb:7a:21:1c:f5:c9:70:a9:82:90:b5:f1: 0c:d4:79:10:be:81:a6:e9:5c:61:9c:77:79:9a:a4:c3:37:26: 57:37:c9:52:2c:fa:08:ff:d0:5f:c6:61:c0:f4:76:be:fc:de: 4e:cf:ab:51:99:71:c7:df:7e:f4:d6:cf:06:56:19:13:53:0b: 6d:74:59:48:19:9b:53:05:2d:9d:32:54:d3:e5:2c:53:8b:64: 3e:d4:64:7b:e3:80:09:14:cc:fe:16:46:63:6b:71:69:f8:f9: cb:27:f6:88:54:bc:45:b3:ce:02:c8:94:ee:40:5b:f9:42:02: c2:ff:b0:d8:2c:eb:28:7f:5e:c9:26:01:99:a7 UPS Document Exchange by DST ============================ MD5 Fingerprint: 78:A5:FB:10:4B:E4:63:2E:D2:6B:FB:F2:B6:C2:4B:8E PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuACEQDQHkCLAAACfAAAAAcAAAABMA0GCSqGSIb3DQEBBQUAMIG5MQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEeMBwGA1UE CxMVVW5pdGVkIFBhcmNlbCBTZXJ2aWNlMRkwFwYDVQQDExBEU1QgKFVQUykgUm9v dENBMSEwHwYJKoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wHhcNOTgxMjEw MDAyNTQ2WhcNMDgxMjA3MDAyNTQ2WjCBuTELMAkGA1UEBhMCdXMxDTALBgNVBAgT BFV0YWgxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MSQwIgYDVQQKExtEaWdpdGFs IFNpZ25hdHVyZSBUcnVzdCBDby4xHjAcBgNVBAsTFVVuaXRlZCBQYXJjZWwgU2Vy dmljZTEZMBcGA1UEAxMQRFNUIChVUFMpIFJvb3RDQTEhMB8GCSqGSIb3DQEJARYS Y2FAZGlnc2lndHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA7xfsrynm2SsnwNt7JJ9m9ASjwq0KyrDNhCuqN/OAoWDvQo/lXXdfV0JU3Svb YbJxXpN7b1/rJCvnpPLr8XOzC431Wdcy36yQjk4xuiVNtgym8eWvDOHlb1IDFcHf vn5KpqYYRnA/76dNqNz1dNlhekA8oZQo6sKUiMs3FQUZPJViuhwt+yiM0ciekjxb EVQ7eNlHO5stSuY+e2vf9PYFzyj2upg2AJ48N4UKnN63pIXFY/23YhRtFx7MioCF QjIRsCHinXfJgBZBnuvlFIl/t8O8T8Gfh5uW7GP2+ZBWDpWjIwqMZNqbuxx3sExd 5sjo9X15LVckP8zjPSyYzxKfFwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQC7OI4E IiZYDiFEVsy9WXwpaMtcD8iGVD+BeKetj8xG9xxUuHktW3IFaugh0OwdHf6kNFG+ 7u3OzJwWaOJddXMIQzGRahArEMJLafjJrZio/bjv9qvwXyHvy4VrCe0vSGa1YHLA 6KDHmNsO9xtzjTQICnvFd2KqMCObsB6LgJhU3AWHs6liWfyLtxWarETszzUa9w8u XZJLAch77qA37eQdgg2ZQUMXrdTVyuP5fReiAdAwD0C53LkEgmmDtvkP+gaS96j0 1hcc8F5/xCnI5uHi/zZoIVGu/6m6hJKtinsz2JDSwXltMzM5dKwbOHGfLAeQ6h3g 04lfy+8UjSdUpb1G -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:02:7c:00:00:00:07:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com Validity Not Before: Dec 10 00:25:46 1998 GMT Not After : Dec 7 00:25:46 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ef:17:ec:af:29:e6:d9:2b:27:c0:db:7b:24:9f: 66:f4:04:a3:c2:ad:0a:ca:b0:cd:84:2b:aa:37:f3: 80:a1:60:ef:42:8f:e5:5d:77:5f:57:42:54:dd:2b: db:61:b2:71:5e:93:7b:6f:5f:eb:24:2b:e7:a4:f2: eb:f1:73:b3:0b:8d:f5:59:d7:32:df:ac:90:8e:4e: 31:ba:25:4d:b6:0c:a6:f1:e5:af:0c:e1:e5:6f:52: 03:15:c1:df:be:7e:4a:a6:a6:18:46:70:3f:ef:a7: 4d:a8:dc:f5:74:d9:61:7a:40:3c:a1:94:28:ea:c2: 94:88:cb:37:15:05:19:3c:95:62:ba:1c:2d:fb:28: 8c:d1:c8:9e:92:3c:5b:11:54:3b:78:d9:47:3b:9b: 2d:4a:e6:3e:7b:6b:df:f4:f6:05:cf:28:f6:ba:98: 36:00:9e:3c:37:85:0a:9c:de:b7:a4:85:c5:63:fd: b7:62:14:6d:17:1e:cc:8a:80:85:42:32:11:b0:21: e2:9d:77:c9:80:16:41:9e:eb:e5:14:89:7f:b7:c3: bc:4f:c1:9f:87:9b:96:ec:63:f6:f9:90:56:0e:95: a3:23:0a:8c:64:da:9b:bb:1c:77:b0:4c:5d:e6:c8: e8:f5:7d:79:2d:57:24:3f:cc:e3:3d:2c:98:cf:12: 9f:17 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption bb:38:8e:04:22:26:58:0e:21:44:56:cc:bd:59:7c:29:68:cb: 5c:0f:c8:86:54:3f:81:78:a7:ad:8f:cc:46:f7:1c:54:b8:79: 2d:5b:72:05:6a:e8:21:d0:ec:1d:1d:fe:a4:34:51:be:ee:ed: ce:cc:9c:16:68:e2:5d:75:73:08:43:31:91:6a:10:2b:10:c2: 4b:69:f8:c9:ad:98:a8:fd:b8:ef:f6:ab:f0:5f:21:ef:cb:85: 6b:09:ed:2f:48:66:b5:60:72:c0:e8:a0:c7:98:db:0e:f7:1b: 73:8d:34:08:0a:7b:c5:77:62:aa:30:23:9b:b0:1e:8b:80:98: 54:dc:05:87:b3:a9:62:59:fc:8b:b7:15:9a:ac:44:ec:cf:35: 1a:f7:0f:2e:5d:92:4b:01:c8:7b:ee:a0:37:ed:e4:1d:82:0d: 99:41:43:17:ad:d4:d5:ca:e3:f9:7d:17:a2:01:d0:30:0f:40: b9:dc:b9:04:82:69:83:b6:f9:0f:fa:06:92:f7:a8:f4:d6:17: 1c:f0:5e:7f:c4:29:c8:e6:e1:e2:ff:36:68:21:51:ae:ff:a9: ba:84:92:ad:8a:7b:33:d8:90:d2:c1:79:6d:33:33:39:74:ac: 1b:38:71:9f:2c:07:90:ea:1d:e0:d3:89:5f:cb:ef:14:8d:27: 54:a5:bd:46 ValiCert Class 1 VA =================== MD5 Fingerprint: 65:58:AB:15:AD:57:6C:1E:A8:A7:B5:69:AC:BF:FF:EB PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 25 22:23:48 1999 GMT Not After : Jun 25 22:23:48 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e: a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3: 4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03: 12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a: 26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8: 58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0: 3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e: e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76: 72:a0:1d:9d:1d:c0:dd:3f:71 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f: 71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2: 07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23: cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9: fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee: e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5: ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d: 72:c8 ValiCert Class 2 VA =================== MD5 Fingerprint: A9:23:75:9B:BA:49:36:6E:31:C2:DB:F2:E7:66:BA:87 PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 26 00:19:54 1999 GMT Not After : Jun 26 00:19:54 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74: 0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb: 98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed: 25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4: d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f: b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91: 1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64: 73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1: b3:43:bb:ef:7b:6e:2e:69:f7 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e: a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d: bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21: 81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99: 6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32: 3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72: 0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f: 43:dd ValiCert Class 3 VA =================== MD5 Fingerprint: A2:6F:53:B7:EE:40:DB:4A:68:E7:FA:18:D9:10:4B:72 PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs 2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 26 00:22:33 1999 GMT Not After : Jun 26 00:22:33 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72: 75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35: 44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7: ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92: 97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30: 5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b: 9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04: 5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7: 43:62:61:f3:d3:e2:d0:55:3f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d: f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42: d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f: 45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f: 89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67: c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d: 82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c: 15:ee VeriSign Class 4 Primary CA =========================== MD5 Fingerprint: 1B:D1:AD:17:8B:7F:22:13:24:F5:26:E2:5D:4E:B9:10 PEM Data: -----BEGIN CERTIFICATE----- MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1 9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:a6:00:00:01 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Dec 31 23:59:59 1999 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d0:b2:75:f6:78:d0:ae:5a:50:f4:e9:50:a9:9f: 8c:d7:ef:91:94:70:e8:d2:24:90:76:89:85:d6:df: ac:e6:01:17:32:80:f0:9d:93:47:bc:9a:65:9d:1f: 97:ae:bf:e9:86:75:63:20:89:bd:80:58:9d:04:0c: 9d:a8:c1:24:e9:0b:e5:31:78:bd:fc:2d:0c:37:6a: 9e:78:80:e9:46:75:f9:ed:a3:fb:13:7b:c8:c1:4c: d2:a3:ef:f5:3c:b0:62:8f:4a:5d:3b:dd:95:67:8f: 13:b9:c1:3c:d6:a7:26:9b:ec:c3:3b:7a:d9:4d:bc: 6d:9b:e8:15:01:e3:f0:47:a9 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 53:dd:d3:f0:9c:24:7e:40:aa:e2:fc:00:1a:d7:da:0c:fc:32: 61:b8:15:0d:96:f3:fa:57:1b:7f:33:7c:af:e9:98:9a:61:c8: 7a:b3:b7:ff:b1:dc:99:83:dc:ac:12:fc:70:c9:1f:38:42:ed: 44:f6:80:2e:5b:6b:33:69:ac:9c:d3:5c:e7:5f:5a:18:c7:b1: 2d:79:04:96:41:91:99:41:b1:3c:0d:ba:84:39:c6:3b:97:f0: 26:c9:8e:ee:bd:cc:42:95:ff:1e:c7:02:3f:54:0c:78:f5:bc: aa:60:7c:02:69:e8:dc:ac:e2:02:76:61:c4:3e:03:ea:d2:8a: 24:d1 Verisign Class 1 Public Primary Certification Authority ======================================================= MD5 Fingerprint: 97:60:E8:57:5F:D3:50:47:E5:43:0C:94:36:8A:B0:62 PEM Data: -----BEGIN CERTIFICATE----- MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR 4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx lA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: cd:ba:7f:56:f0:df:e4:bc:54:fe:22:ac:b3:72:aa:55 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de: b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46: 88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c: b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58: 39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31: ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e: 45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9: 63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba: 2a:2f:31:aa:ee:a3:67:da:db Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 4c:3f:b8:8b:c6:68:df:ee:43:33:0e:5d:e9:a6:cb:07:84:4d: 7a:33:ff:92:1b:f4:36:ad:d8:95:22:36:68:11:6c:7c:42:cc: f3:9c:2e:c4:07:3f:14:b0:0f:4f:ff:90:92:76:f9:e2:bc:4a: e9:8f:cd:a0:80:0a:f7:c5:29:f1:82:22:5d:b8:b1:dd:81:23: a3:7b:25:15:46:30:79:16:f8:ea:05:4b:94:7f:1d:c2:1c:c8: e3:b7:f4:10:40:3c:13:c3:5f:1f:53:e8:48:e4:86:b4:7b:a1: 35:b0:7b:25:ba:b8:d3:8e:ab:3f:38:9d:00:34:00:98:f3:d1: 71:94 Verisign Class 1 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: F2:7D:E9:54:E4:A3:22:0D:76:9F:E7:0B:BB:B3:24:2B PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEDnKVIn+UCIy/jLZ2/sbhBkwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTE4MDUxODIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID AQABMA0GCSqGSIb3DQEBBQUAA4GBAIv3GhDOdlwHq4OZ3BeAbzQ5XZg+a3Is4cei e0ApuXiIukzFo2penm574/ICQQxmvq37rqIUzpLzojSLtLK2JPLl1eDI5WJthHvL vrsDi3xXyvA3qZCviu4Dvh0onNkmdqDNxJ1O8K4HFtW+r1cIatCgQkJCHvQgzKV4 gpUmOIpH -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 39:ca:54:89:fe:50:22:32:fe:32:d9:db:fb:1b:84:19 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : May 18 23:59:59 2018 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76: 31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52: 36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e: 8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35: eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5: e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d: 8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b: 51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea: 09:40:be:73:92:3d:6b:e7:75 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8b:f7:1a:10:ce:76:5c:07:ab:83:99:dc:17:80:6f:34:39:5d: 98:3e:6b:72:2c:e1:c7:a2:7b:40:29:b9:78:88:ba:4c:c5:a3: 6a:5e:9e:6e:7b:e3:f2:02:41:0c:66:be:ad:fb:ae:a2:14:ce: 92:f3:a2:34:8b:b4:b2:b6:24:f2:e5:d5:e0:c8:e5:62:6d:84: 7b:cb:be:bb:03:8b:7c:57:ca:f0:37:a9:90:af:8a:ee:03:be: 1d:28:9c:d9:26:76:a0:cd:c4:9d:4e:f0:ae:07:16:d5:be:af: 57:08:6a:d0:a0:42:42:42:1e:f4:20:cc:a5:78:82:95:26:38: 8a:47 Verisign Class 1 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73 PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO 8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d: dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d: ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8: de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e: f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6: 6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10: 78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3: 55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca: 14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff: c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e: 54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27: a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb: 30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29: bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12: 5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81: 15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7: a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76: d1:3d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a: aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9: fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c: b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7: b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0: 97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f: 04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54: 73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8: 1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec: a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38: dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f: b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50: ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef: 86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f: a4:ef:3f:ee Verisign Class 2 Public Primary Certification Authority ======================================================= MD5 Fingerprint: B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E PEM Data: -----BEGIN CERTIFICATE----- MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 2d:1b:fc:4a:17:8d:a3:91:eb:e7:ff:f5:8b:45:be:0b Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:5a:8b:a3:0d:6a:23:83:80:6b:cf:39:87:f4: 21:13:33:06:4c:25:a2:ed:55:12:97:c5:a7:80:b9: fa:83:c1:20:a0:fa:2f:15:0d:7c:a1:60:6b:7e:79: 2c:fa:06:0f:3a:ae:f6:1b:6f:b1:d2:ff:2f:28:52: 5f:83:7d:4b:c4:7a:b7:f8:66:1f:80:54:fc:b7:c2: 8e:59:4a:14:57:46:d1:9a:93:be:41:91:03:bb:15: 80:93:5c:eb:e7:cc:08:6c:3f:3e:b3:4a:fc:ff:4b: 6c:23:d5:50:82:26:44:19:8e:23:c3:71:ea:19:24: 47:04:9e:75:bf:c8:a6:00:1f Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 8a:1b:2b:fa:39:c1:74:d7:5e:d8:19:64:a2:58:4a:2d:37:e0: 33:47:0f:ac:ed:f7:aa:db:1e:e4:8b:06:5c:60:27:ca:45:52: ce:16:ef:3f:06:64:e7:94:68:7c:60:33:15:11:69:af:9d:62: 8d:a3:03:54:6b:a6:be:e5:ee:05:18:60:04:bf:42:80:fd:d0: a8:a8:1e:01:3b:f7:a3:5c:af:a3:dc:e6:26:80:23:3c:b8:44: 74:f7:0a:ae:49:8b:61:78:cc:24:bf:88:8a:a7:0e:ea:73:19: 41:fd:4d:03:f0:88:d1:e5:78:8d:a5:2a:4f:f6:97:0d:17:77: ca:d8 Verisign Class 2 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1 PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn jBJ7xUS0rg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c: 0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be: 5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99: 1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08: 2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4: 42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f: 99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9: 86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff: 0d:6c:f5:2d:0e:6d:ce:7f:77 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8: 68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4: ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0: d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30: 17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a: 54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4: 12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44: b4:ae Verisign Class 2 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6 PEM Data: -----BEGIN CERTIFICATE----- MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u 7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd: a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd: 3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1: a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10: ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02: 37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7: 3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56: 69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3: 48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32: dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7: 20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2: ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8: 16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5: 1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb: 1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2: ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11: 60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8: 3e:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7: de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5: fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4: e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33: 3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55: a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4: 1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63: 63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf: 7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64: 48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46: 23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45: aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43: e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33: 5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf: 4b:4b:df:2a Verisign Class 3 Public Primary Certification Authority ======================================================= MD5 Fingerprint: 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67 PEM Data: -----BEGIN CERTIFICATE----- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40: db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9: 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03: 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2: 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f: 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23: 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85: e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2: 71:64:4c:65:2e:81:68:45:a7 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84: 8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f: 6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57: 81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c: 9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45: 4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6: 62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64: 0d:64 Verisign Class 3 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9 PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99: 1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20: 84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9: 25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b: 33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8: 6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43: 91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97: 37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69: 61:f8:9b:1d:1c:89:4f:5c:67 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67: 70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b: 64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27: 3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01: ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69: 92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59: 57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69: 91:fd Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: CD:68:B6:A7:C7:C4:CE:75:E0:1D:4F:57:44:61:92:09 PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd: f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5: 17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20: c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad: 2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04: 58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0: 58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32: 6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88: e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96: 55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79: 65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8: 46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46: b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c: 1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76: ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63: d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e: 1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9: 57:97 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de: db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f: 37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09: 5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5: 23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f: d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8: ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38: 62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe: 7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69: 17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00: cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2: c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af: 0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e: 81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b: f1:7d:dd:11 Verisign Class 4 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60 PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP T8qAkbYp -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 32:88:8e:9a:d2:f5:eb:13:47:f8:7f:c4:20:37:25:f8 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ba:f0:e4:cf:f9:c4:ae:85:54:b9:07:57:f9:8f: c5:7f:68:11:f8:c4:17:b0:44:dc:e3:30:73:d5:2a: 62:2a:b8:d0:cc:1c:ed:28:5b:7e:bd:6a:dc:b3:91: 24:ca:41:62:3c:fc:02:01:bf:1c:16:31:94:05:97: 76:6e:a2:ad:bd:61:17:6c:4e:30:86:f0:51:37:2a: 50:c7:a8:62:81:dc:5b:4a:aa:c1:a0:b4:6e:eb:2f: e5:57:c5:b1:2b:40:70:db:5a:4d:a1:8e:1f:bd:03: 1f:d8:03:d4:8f:4c:99:71:bc:e2:82:cc:58:e8:98: 3a:86:d3:86:38:f3:00:29:1f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 85:8c:12:c1:a7:b9:50:15:7a:cb:3e:ac:b8:43:8a:dc:aa:dd: 14:ba:89:81:7e:01:3c:23:71:21:88:2f:82:dc:63:fa:02:45: ac:45:59:d7:2a:58:44:5b:b7:9f:81:3b:92:68:3d:e2:37:24: f5:7b:6c:8f:76:35:96:09:a8:59:9d:b9:ce:23:ab:74:d6:83: fd:32:73:27:d8:69:3e:43:74:f6:ae:c5:89:9a:e7:53:7c:e9: 7b:f6:4b:f3:c1:65:83:de:8d:8a:9c:3c:88:8d:39:59:fc:aa: 3f:22:8d:a1:c1:66:50:81:72:4c:ed:22:64:4f:4f:ca:80:91: b6:29 Verisign Class 4 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56: ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59: de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4: e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09: fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2: 9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86: 52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e: d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46: 33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1: 89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88: 02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d: a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea: c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0: ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2: 3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7: 45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34: 66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97: ef:03 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5: 0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be: 3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3: 05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02: 00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1: 32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b: 00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52: e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14: 5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc: d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83: 46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0: a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0: 21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01: a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3: 35:60:91:ce Verisign/RSA Commercial CA ========================== MD5 Fingerprint: 5A:0B:DD:42:9E:B2:B4:62:97:32:7F:7F:0A:AA:9A:39 PEM Data: -----BEGIN CERTIFICATE----- MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05 OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o 975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/ touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE 7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j 9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI 0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:41:00:00:16 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority Validity Not Before: Nov 4 18:58:34 1994 GMT Not After : Nov 3 18:58:34 1999 GMT Subject: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1000 bit) Modulus (1000 bit): 00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e: c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96: 3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d: 03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6: 8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2: 2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c: d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82: a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9: fd:bd:3b:69:d9:eb Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49: bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a: 83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48: d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79: 35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50: bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b: 53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5 Verisign/RSA Secure Server CA ============================= MD5 Fingerprint: 74:7B:82:03:43:F0:00:9E:6B:B3:EC:47:BF:85:A5:93 PEM Data: -----BEGIN CERTIFICATE----- MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII 0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc 1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:ad:66:7e:4e:45:fe:5e:57:6f:3c:98:19:5e:dd:c0 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Validity Not Before: Nov 9 00:00:00 1994 GMT Not After : Jan 7 23:59:59 2010 GMT Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1000 bit) Modulus (1000 bit): 00:92:ce:7a:c1:ae:83:3e:5a:aa:89:83:57:ac:25: 01:76:0c:ad:ae:8e:2c:37:ce:eb:35:78:64:54:03: e5:84:40:51:c9:bf:8f:08:e2:8a:82:08:d2:16:86: 37:55:e9:b1:21:02:ad:76:68:81:9a:05:a2:4b:c9: 4b:25:66:22:56:6c:88:07:8f:f7:81:59:6d:84:07: 65:70:13:71:76:3e:9b:77:4c:e3:50:89:56:98:48: b9:1d:a7:29:1a:13:2e:4a:11:59:9c:1e:15:d5:49: 54:2c:73:3a:69:82:b1:97:39:9c:6d:70:67:48:e5: dd:2d:d6:c8:1e:7b Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 65:dd:7e:e1:b2:ec:b0:e2:3a:e0:ec:71:46:9a:19:11:b8:d3: c7:a0:b4:03:40:26:02:3e:09:9c:e1:12:b3:d1:5a:f6:37:a5: b7:61:03:b6:5b:16:69:3b:c6:44:08:0c:88:53:0c:6b:97:49: c7:3e:35:dc:6c:b9:bb:aa:df:5c:bb:3a:2f:93:60:b6:a9:4b: 4d:f2:20:f7:cd:5f:7f:64:7b:8e:dc:00:5c:d7:fa:77:ca:39: 16:59:6f:0e:ea:d3:b5:83:7f:4d:4d:42:56:76:b4:c9:5f:04: f8:38:f8:eb:d2:5f:75:5f:cd:7b:fc:e5:8e:80:7c:fc:50 Root 5 - Equifax Secure Global eBusiness CA-1 ============================================= MD5 Fingerprint: 8F:5D:77:06:27:C4:98:3C:5B:93:78:E7:D7:7D:9B:CC PEM Data: -----BEGIN CERTIFICATE----- MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc 58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv 8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV -----END CERTIFICATE----- twittering-mode-3.0.0/win-curl/curl.exe0000755000000000000000000240000012141747407020010 0ustar rootroot00000000000000MZÿÿ¸@ິ Í!¸LÍ!This program cannot be run in DOS mode. $'¥ icÄg:cÄg:cÄg:Øk:rÄg:àØi:fÄg: Ûm:hÄg: Ûc:aÄg:cÄg:fÄg:Ût:jÄg:cÄf:òÄg:eçm:"Åg:RichcÄg:PELz™§?à ð ÏA@ ÄTx@.textréð `.rdataR]`@@.data\·` `@À¡”FV‹5FƒÀ PhPÇHÿÖ‹ ”FƒÁ Qh|ÅHÿÖ‹”FƒÂ Rh„ÃHÿÖ¡”FƒÀ PhÐÁHÿÖ‹ ”FƒÁ QhÀHÿÖ‹”FƒÂ Rh¾HÿÖ¡”FƒÀ Ph,¼HÿÖ‹ ”FƒÁ QhXºHÿÖ‹”FƒÄ@ƒÂ Rhh¸HÿÖ¡”FƒÀ Ph ¶HÿÖ‹ ”FƒÁ Qhä´HÿÖ‹”FƒÂ Rh ³HÿÖ¡”FƒÀ PhH±HÿÖ‹ ”FƒÁ Qh|¯HÿÖ‹”FƒÂ RhÀ­HÿÖ¡”FƒÀ PhÜ«HÿÖ‹ ”FƒÄ@ƒÁ Qhè©HÿÖ‹”FƒÂ Rh¨HÿÖ¡”FƒÀ Ph(¦HÿÖ‹ ”FƒÁ Qh8¤HÿÖ‹”FƒÂ Rhh¢HÿÖ¡”FƒÀ Ph˜ HÿÖ‹ ”FƒÁ QhÀžHÿÖ‹”FƒÂ RhØœHÿÖ¡”FƒÄ@ƒÀ Ph ›HÿÖ‹ ”FƒÁ Qh ™HÿÖ‹”FƒÂ RhL—HÿÖ¡”FƒÀ PhX•HÿÖ‹ ”FƒÁ Qhh“HÿÖ‹”FƒÂ Rhˆ‘HÿÖ¡”FƒÀ PhœHÿÖ‹ ”FƒÁ Qh°HÿÖ‹”FƒÄ@ƒÂ Rh¸‹HÿÖ¡”FƒÀ Phð‰HÿÖ‹ ”FƒÁ QhˆHÿÖ‹”FƒÂ Rh,†HÿÖ¡”FƒÀ PhT„HÿÖ‹ ”FƒÁ Qh˜‚HÿÖ‹”FƒÂ Rhä€HÿÖ¡”FƒÀ PhHÿÖ‹ ”FƒÄ@ƒÁ QhD}HÿÖ‹”FƒÂ Rh{HÿÖ¡”FƒÀ Ph yHÿÖ‹ ”FƒÁ QhÈwHÿÖ‹”FƒÂ RhvHÿÖ¡”FƒÀ Ph4tHÿÖ‹ ”FƒÁ QhtrHÿÖ‹”FƒÂ Rh€pHÿÖ¡”FƒÄ@ƒÀ Ph”nHÿÖ‹ ”FƒÁ QhÌlHÿÖ‹”FƒÂ RhüjHÿÖ¡”FƒÀ Ph8iHÿÖ‹ ”FƒÁ QhLgHÿÖ‹”FƒÂ Rh„eHÿÖ¡”FƒÀ Ph˜cHÿÖ‹ ”FƒÁ Qh¨aHÿÖ‹”FƒÄ@ƒÂ RhÈ_HÿÖ¡”FƒÀ Phü]HÿÖ‹ ”FƒÁ Qh,\HÿÖ‹”FƒÂ RhXZHÿÖ¡”FƒÀ Ph¤XHÿÖ‹ ”FƒÁ QhÈVHÿÖ‹”FƒÂ RhàTHÿÖ¡”FƒÀ PhøRHÿÖ‹ ”FƒÄ@ƒÁ QhQHÿÖ‹”FƒÂ Rh8OHÿÖ¡”FƒÀ PhDMHÿÖ‹ ”FƒÁ Qh\KHÿÖ‹”FƒÂ RhŒIHÿÖ¡”FƒÀ PhÌGHÿÖ‹ ”FƒÁ QhFHÿÖ‹”FƒÂ Rh0DHÿÖ¡”FƒÄ@ƒÀ PhlBHÿÖ‹ ”FƒÁ Qh¨@HÿÖ‹”FƒÂ RhÔ>HÿÖ¡”FƒÀ Ph =HÿÖ‹ ”FƒÁ Qh<;HÿÖ‹”FƒÂ Rh€9HÿÖ¡”FƒÀ Ph˜7HÿÖ‹ ”FƒÁ Qh¨5HÿÖ‹”FƒÄ@ƒÂ Rh´3HÿÖ¡”FƒÀ Phð1HÿÖ‹ ”FƒÁ Qh0HÿÖ‹”FƒÂ Rh`.HÿÖ¡”FƒÀ Pht,HÿÖ‹ ”FƒÁ Qh *HÿÖ‹”FƒÂ RhÀ(HÿÖ¡”FƒÀ Phà&HÿÖ‹ ”FƒÄ@ƒÁ Qh %HÿÖ‹”FƒÂ Rh\#HÿÖ¡”FƒÀ PhŒ!HÿÖ‹ ”FƒÁ Qh¤HÿÖ‹”FƒÂ RhäHÿÖ¡”FƒÀ PhHÿÖ‹ ”FƒÁ QhPHÿÖ‹”FƒÂ Rh˜HÿÖ¡”FƒÄ@ƒÀ Ph¤HÿÖ‹ ”FƒÁ Qh´HÿÖ‹”FƒÂ RhøHÿÖ¡”FƒÀ Ph$HÿÖ‹ ”FƒÁ Qh4HÿÖ‹”FƒÂ Rhx HÿÖ¡”FƒÀ Ph´ HÿÖ‹ ”FƒÁ QhØ HÿÖ‹”FƒÄ@ƒÂ RhüHÿÖ¡”FƒÀ PhHÿÖ‹ ”FƒÁ Qh`HÿÖ‹”FƒÂ Rh HÿÖ¡”FƒÀ Ph¸HÿÖ‹ ”FƒÁ QhàþGÿÖ‹”FƒÂ Rh ýGÿÖ¡”FƒÀ PhTûGÿÖ‹ ”FƒÄ@ƒÁ QhtùGÿÖ‹”FƒÂ Rh”÷GÿÖ¡”FƒÀ Ph¸õGÿÖ‹ ”FƒÁ QhÜóGÿÖ‹”FƒÂ RhäñGÿÖ¡”FƒÀ PhüïGÿÖ‹ ”FƒÁ Qh,îGÿÖ‹”FƒÂ Rh<ìGÿÖ¡”FƒÄ@ƒÀ PhdêGÿÖ‹ ”FƒÁ QhœèGÿÖ‹”FƒÂ RhÌæGÿÖ¡”FƒÀ Ph åGÿÖ‹ ”FƒÁ QhPãGÿÖ‹”FƒÂ Rh„áGÿÖ¡”FƒÀ PhßGÿÖ‹ ”FƒÁ QhÀÝGÿÖ‹”FƒÄ@ƒÂ RhèÛGÿÖ¡”FƒÀ Ph ÚGÿÖ‹ ”FƒÁ Qh0ØGÿÖ‹”FƒÂ Rh<ÖGÿÖ¡”FƒÀ PhtÔGÿÖ‹ ”FƒÁ QhÀÒGÿÖ‹”FƒÂ RhÑGÿÖ¡”FƒÀ Ph,ÏGÿÖ‹ ”FƒÄ@ƒÁ Qh`ÍGÿÖ‹”FƒÂ RhœËGÿÖ¡”FƒÀ Ph¬ÉGÿÖ‹ ”FƒÁ QhÀÇGÿÖ‹”FƒÂ RhüÅGÿÖ¡”FƒÀ Ph(ÄGÿÖ‹ ”FƒÁ QhPÂGÿÖ‹”FƒÂ RhÀGÿÖ¡”FƒÄ@ƒÀ PhܾGÿÖ‹ ”FƒÁ Qhø¼GÿÖ‹”FƒÂ RhL»GÿÖ¡”FƒÀ Phd¹GÿÖ‹ ”FƒÁ Qh|·GÿÖ‹”FƒÂ Rh˜µGÿÖ¡”FƒÀ Ph´³GÿÖ‹ ”FƒÁ QhرGÿÖ‹”FƒÄ@ƒÂ Rh°GÿÖ¡”FƒÀ Phl®GÿÖ‹ ”FƒÁ Qh¤¬GÿÖ‹”FƒÂ Rh°ªGÿÖ¡”FƒÀ Ph̨GÿÖ‹ ”FƒÁ Qh$§GÿÖ‹”FƒÂ RhL¥GÿÖ¡”FƒÀ PhŒ£GÿÖ‹ ”FƒÄ@ƒÁ QhÄ¡GÿÖ‹”FƒÂ Rh GÿÖ¡”FƒÀ PhžGÿÖ‹ ”FƒÁ Qh0œGÿÖ‹”FƒÂ RhdšGÿÖ¡”FƒÀ Php˜GÿÖ‹ ”FƒÁ Qh|–GÿÖ‹”FƒÂ Rhˆ”GÿÖ¡”FƒÄ@ƒÀ Ph”’GÿÖ‹ ”FƒÁ Qh¼GÿÖ‹”FƒÂ RhGÿÖ¡”FƒÀ Ph\GÿÖ‹ ”FƒÁ Qh„‹GÿÖ‹”FƒÂ Rh°‰GÿÖ¡”FƒÀ Phè‡GÿÖ‹ ”FƒÁ Qh,†GÿÖ‹”FƒÄ@ƒÂ Rh\„GÿÖ¡”FƒÀ Ph˜‚GÿÖ‹ ”FƒÁ Qh €GÿÖ‹”FƒÂ Rh´~GÿÖ¡”FƒÀ PhÜ|GÿÖ‹ ”FƒÁ QhèzGÿÖ‹”FƒÂ Rh0yGÿÖ¡”FƒÀ Ph`wGÿÖ‹ ”FƒÄ@ƒÁ QhxuGÿÖ‹”FƒÂ Rh¬sGÿÖ¡”FƒÀ PhàqGÿÖ‹ ”FƒÁ QhpGÿÖ‹”FƒÂ Rh,nGÿÖ¡”FƒÀ PhHlGÿÖ‹ ”FƒÁ QhtjGÿÖ‹”FƒÂ RhˆhGÿÖ¡”FƒÄ@ƒÀ Ph¨fGÿÖ‹ ”FƒÁ QhÀdGÿÖ‹”FƒÂ RhÐbGÿÖ¡”FƒÀ Phä`GÿÖ‹ ”FƒÁ Qh`GÿÖƒÄ(^ÃU‹ìƒäøƒì¡”FSV‹u X WЉ\$„À„nŠ<%…èŠF<%uSj%ÿœFƒÄƒÆé@<{…ªj}Vÿ˜FƒÄ‰D$…À„’ŠÆ¡8ÉHƒÆ3ÛˆL$…À„a¸8ÉH‹ø‹RVè»sƒÄ…Àu#‹OƒÇC‹Ç…Éuã‹D$ŠL$‹\$pˆéË‹Ý<ÉHCÿƒø ‡ÿ$…Ì"@‹MD$PhQèDsƒÄ …À…ï‹D$…À„ãéÏ‹MD$Ph QèsƒÄ …À…À‹T$‹D$RhœÊHPèÆp‹D$(ŠL$‹\$ƒÄ pˆé7‹UL$Qh RèÊrƒÄ …À…u‹D$‹L$Ph˜ÊHQè{p‹D$(ŠL$‹\$ƒÄ pˆéì‹ET$Rh PèrƒÄ …À…*‹L$‹T$Qh˜ÊHRè0p‹D$(ŠL$‹\$ƒÄ pˆé¡‹MD$ Ph0Qè4rƒÄ …À…ß‹T$$‹D$ ‹L$RPhÊHQèào‹D$,ŠL$‹\$ ƒÄpˆéQ‹ET$ Rh0PèäqƒÄ …À…‹L$$‹T$ ‹D$QRhÊHPèo‹D$,ŠL$‹\$ ƒÄpˆé‹UL$ Qh0Rè”qƒÄ …À…?‹D$$‹L$ ‹T$PQhÊHRè@o‹D$,ŠL$‹\$ ƒÄpˆé±‹MD$ Ph0QèDqƒÄ …À…ï‹T$$‹D$ ‹L$RPhÊHQèðn‹D$,ŠL$‹\$ ƒÄpˆéa‹ET$ Rh0PèôpƒÄ …À…Ÿ‹L$$‹T$ ‹D$QRhÊHPè n‹D$,ŠL$‹\$ ƒÄpˆé‹UL$ Qh0Rè¤pƒÄ …À…O‹D$$‹L$ ‹T$PQhˆÊHRèPn‹D$,ŠL$‹\$ ƒÄpˆéÁ‹MD$ Ph0QèTpƒÄ …À…ÿ‹T$$‹D$ ‹L$RPhˆÊHQèn‹D$,ŠL$‹\$ ƒÄpˆéq‹ET$ Rh 0PèpƒÄ …À…¯‹L$$‹T$ ‹D$QRhÊHPè°m‹D$,ŠL$‹\$ ƒÄpˆé!‹UL$ Qh 0Rè´oƒÄ …Àuc‹D$$‹L$ ‹T$PQhÊHRèdm‹D$,ŠL$‹\$ ƒÄpˆéÕ‹MD$PhQèhoƒÄ …Àu‹D$…Àt‹T$RPÿFƒÄ‹D$ŠL$‹\$pˆ鎋=œFSj%ÿ×¾VSRÿ׃ăÆës<\u`¾FƒèntFƒèt0ƒèSt‹=œFj\ÿ×¾FSPÿ׃ăÆëAj ÿœFƒÄƒÆë1Sj ÿœFƒÄƒÆë Sj ÿœFƒÄƒÆë¾ÈSQÿœFƒÄF€>…’úÿÿ_^[‹å]Ëÿ@i@¹@ @Y @ù @© @I!@™!@8@ƒ@Î@ @å!@S‹\$ UVW‹ûƒÉÿ3Àò®‹5¤F÷ÑQÿÖ‹èƒÄ…íuhÀÊHjPhJèªiƒÄ ¸_^][ÃhìÿÖ‹ðƒÄ…öu%Uÿ FhÀÊHjPhJèuiƒÄ¸_^][ËûƒÉÿ3ÀdžÜò®ˆ†èD$÷ÑPjISV‰Žà‰®äèrƒÄ…Àu‹L$‹T$‹D$_‰‰0^]3À[Ë= FUÿ×Vÿ׋L$$‹D$(ƒÄ…ÀÇtŠ J„ÉthJjh¤ÊHPèkƒÄ_^]¸[ËD$S‹\$U‹l$V‹t$‹“äÇWŠÇD$„Àt@<{t<<[t8<}t[<]tW<\u ŠN€ù{t€ù[t €ù}t€ù]u ŠFFE„Àt3ˆŠFBFE„ÀuÀÆ‹ƒÜ‹‹ä™+ÂQ‹øÑÿÿŒFƒÄ‰»…Àu _^]¸[Ë“ÜB‰“ÜŠ<[t<{uF‹T$ ERFUVSèKƒÄ‹ðë‹D$ EPFUVSèUƒÄ‰D$‹ð…öt‹ »Qÿ FƒÄ‹Æ_^][Ët$‹Æ_^][ÃSU‹l$ VW‹…Ü‹ä™+ÂÑøƒÀ€t…3ÀPÇf‰Ff‰F ÿ¤F‹|$‰F‹…܃Ä@‰…ܾƒø}w|3ÉŠˆÜ&@ÿ$Ä&@Æ‹N¿V•PQÿ¨FƒÄ‰F…Àtv‹•äRÿŒF¿N‹VƒÄ‰ŠfÿF€?}tq‹D$‹äG@‰D$둊C„À„“‹D$G@‰D$Šˆ‹D$CG@‰D$éhÿÿÿ‹L$QhËHës‹T$RhìÊHëghÀÊHjPhJèžfƒÄ ¸_^][ËL$D$APGQWUè¾ýÿÿƒÄƒø¸t‹D$¿V¯Ð‹D$ _^]‰3À[ËL$Që‹T$RhÐÊHjPhJè‹û‹ ¸Fƒ9~¾jPGÿ´FƒÄë¡°F¾‹ŠQƒàG…ÀtfÿF ëÈ‹|$‹Uj]S‰Vÿ˜FƒÄ…ÀtC‹t$ @‹ÐL$+ÓQÖRP‹D$$PèèúÿÿƒÄƒøu‰D$‹‹U+Ê‹T$$A_¯L$ ^]‰ 3À[YÃh ËHjPhJèpcƒÄ ¸_^][YËD$ PhdËHë ‹L$ Qh0ËHjPhJè@cƒÄ¸_^][YÃSU‹l$ V‹ÜKxVW‹ÃöÙu +ÂÑø‹D…Pë5+ÂÑøL€ ƒ|u/€¿t•0|•Nx‹G,‹ °Qÿ FƒÄNyí‹W,Rÿ FƒÄKy¬_‹…ä‹5 FPÿÖUÿÖƒÄ^][ÃSUVW‹|$Š‡è‹¯ä„Àu\Ƈ苇Ü3Û…ÀŽx‹Ëá€yIƒÉþA‹Ã™…Ï+ƒÉÿÑø‹‡3À‹úò®÷Ñ+ù‹Á‹÷‹ýÁéó¥‹Èƒáó¤‹ú鋇ܾ™+ÂÑøH €L8…À|w‹Qð3öJt0JtJuP‹‹YøB;Ó‰~7‹Qô‰ë+ŠQöŠYõþÂ:ÓˆQö~!ŠQôˆQöëfÿAúf‹Qúf;Qøu fÇAú¾Hƒé…öu£é1ÿÿÿ‹AðPhüËHèÄcƒÄjÿ¼F…ö„ÿÿÿ_^]3À[Ã+ÂÑøƒÀ €‹Ht.Ht"H…¿J ‹BPQhôËHUè)cƒÄ‹ýë:ŠRˆUEëA¿B ‹J‹<ƒÉÿ3Àò®÷Ñ+ù‹Á‹÷‹ýÁéó¥‹Èƒáó¤¿J ‹R‹<ŠƒÉÿ3Àò®‹|$÷ÑI鋇ÜC;ØŒˆþÿÿÆE‹äQÿŒFƒÄ_^][ËPhüËHèóbƒÄjÿ¼Fƒì8SUVW‹|$LƒÉÿ3ÀÇD$ò®÷ÑIQ‰L$ ÿ¤FƒÄ‰D$…Àu_^][ƒÄ8ËL$LŠ„À„w‹\$L<#…þ¡¸Fƒ8~¾IjQÿ´F‹L$TƒÄë¡°F¾Q‹ŠPƒà…À„ÅT$Lj ARQÿÀFƒÄ Hÿ…À„¶‹t$P‹†Ü™+ÂÑø;ÈŸD‰ ¹|$44†ó¥‹L$4‹ÁHtXHt>H…í¿T$@‹L$DD$ QRhôËHPèaL$0|$0‰L$$ƒÉÿ3ÀƒÄò®÷ÑI‹ÙëCŠT$:D$ ˆT$ ÆD$!‰D$ë'¿L$>‹T$83À‹<ŠƒÉÿ‰|$ò®÷ÑI‹Ùë‰L$A‰L$L»‹D$,‹D$;è|‹t$D-PV‰D$$ÿ¨FƒÄ…Àtl‰D$‹T$‹D$‹t$‹Ë<‹ÑÁéó¥‹Ê‰l$ƒáó¤‹L$LŠ„À…þÿÿ‹D$‹L$_^]Æ[ƒÄ8ÃQhüËHèa‹D$Pÿ FƒÄ 3À_^][ƒÄ8ÃVÿ FƒÄ3À_^][ƒÄ8Ãjè9aƒÄÃéËa‹L$‹T$‹…Àt ;Ât¡”Fh(ÌHƒÀ@Pè»`ƒÄ¸É3ÀËD$V‹p|…öt?S‹ FW‹F‹>…ÀtPÿӃċF…ÀtPÿӃċF …ÀtPÿÓƒÄVÿӃċ÷…ÿuË_[^Ãjÿ¤F‹T$ƒÄ…À‹Š€t,VW‹ø3ö…ɉ7‰w‰w‰w ‰w_^t ‰‰‚€Ã‰B|‰‚€ÃV‹t$W‹~…öt%‹F…Àu‹hPÌHPÿÐFƒÄ‰F…Àu_ƒÈÿ^ˇS…Àth‹ÌFUjÿÓ‹—$‹·‹È‹î+Ê‹T$¯T$ ¯éƒÄ;Õ]v-’3Ò€€Áà÷ö‹Ð‰€€Áà+ÐRèLjÿӃċt$‰‡$‹N‹T$‹D$Q‹L$RPQÿÈF‹ØŠ‡ÍƒÄ„Àt ‹VRÿÄFƒÄ‹Ã[_^ËD$Pÿ\FËD$V‹p‹†…À„S‹ÌFUWjÿÓ‹–‹¾‹È‹ï+Ê‹– ¯éƒÄ;Õv-’3Ò€€Áà÷÷‹Ð‰€€Áà+ÐRè…ÿÿÿjÿӃċL$‰†‹D$‹ù¯ø‹–;ú_][v‹Â¹‹Ñ¯Ð‰– ë‹D$‹L$ ‹T$‹RP‹D$QPÿÔFƒÄ^ÃU‹ìƒäøìDSV‹uWÛF‹@ÙÀÜE ‰ÜEÝ\$ÜEÜE$Ý\$ÝHFÜ\$ßàöÄ@tPÝFèY™ÝD$âÿ‹øÁÿ èB™âÿÂÁø ;Ç޼+Ç‹ø‹FhlÌHPèº]ƒÄOuìéŸÝD$Üt$‹^ƒë‰\$ÙÀÜ @FÝ\$ ÛD$ØÉèè3ɉD$…ÀÝØ~‹È¸####‹Ñ|$PÁéó«‹Êƒáóª‹ÊSD$,hXÌHPÆD \èÊ\‹L$0‹T$,QD$`RL$-udVhèÐHè˜\ƒÄ…ÀtÆD$ëm‹Œ$„I;Ù}‹T$ ‹ë3ÀL$UQPV觃ĉD$…À…¤ŠD$„Àt3‹L$ CƒÁƒÇ‰L$ ë"‹T$WURPhàÐHèlƒÄ‰D$…À…y‹T$ ‹„$„CƒÂƒÇ;؉T$ ŒMÿÿÿ3ÿ‹E|;Ç„]9x„T9} …†èrPhÈÐH”$h€Rè3W„$ ƒÄ‰E ë_‹L$Aÿƒøw5ÿ$…H@Vh°ÐHëVh˜ÐHëVhpÐHëVhPÐHëVhÐHè&ƒÄUè}øÿÿƒÄ¸_^][ÄlÃÆD$+‹…˜˜;ÇuE9½œu=Š…Ð„Àu3h ÐHèùp‹ðƒÄ;÷tVSèVèžƒÄ ëhøÏHUè3BƒÄ‹E,;Ç‹= F„‚ŠÏ„ÉtSPÿŒF‹M,‹ðQ‰t$4ÿ×ÇE,‹Ex%•÷ØÀR÷Ø@Pè÷ÿÿƒÄ…Àt;Vÿ׃ĸ_^][ÄlÃQjèT÷ÿÿƒÄ…Àt_^]¸[ÄlÃèHY‹ð…öuUèl÷ÿÿƒÄ¸_^][ÄlËU|‰T$ ‹UH…ÒtP¿ôÏH‹ÂŠŠË:u„ÉtŠXŠË:_uƒÀƒÇ„Éuà3ÀëÀƒØÿ…Àt‰T$t3Àë¡”FƒÀ ‰D$@‰D$x‰l$|‹D$ …À„Y‹D$…À…M‹\$ ‹{…ÿ‰|$pu‹C…Àt Pÿ FƒÄ‹;Sé‹ ”F‰l$`ƒÁ ‰L$\‹C…ÀtPÿŒFƒÄ‹Øë3Û‹T$ ‰\$4‹B ‰D$DŠ…Î„ÀuM‹D$D…ÀtEŠEd„Àt‹…Ü…Àu ‹ ”FA@ë3ÀP‹D$H”$”L$TRPQè¼êÿÿƒÄ‰D$…À…ÀÇD$<‹D$<…Àu‹D$D…Àt6‹D$P…ÀtPè·ñÿÿë‹D$<…À…ß ‹T$DRÿŒFƒÄ‰D$$…À„Ï Š…ÎÇD$dÿÿÿÿ„ÀuCŠEd„Àt‹…Ü…Àu ¡”FƒÀ@ë3À‹T$pL$LPQD$@RPèêÿÿƒÄ‰D$…À…| ëÇD$L…ÛthôÏHSècXƒÄ…Àt‹D$LÇD$hƒøÇD$hÇD$H‹D$8…ÀtPèíðÿÿë‹D$H…À…” WÿŒF‹øƒÄ…ÿ‰|$„Ï …Ût‹L$4QÿŒFƒÄ‹Øë3Û‹T$ ‰\$öBu…Û„&ShôÏHèÎWƒÄ…À……Ûua‹|$hðÏHWÿäFƒÄ…ÀtƒÀë‹Çj/PÿàFƒÄ…À„ ŠH@„É„ú PÿŒF‹ØƒÄ…Û‰\$„â €;„Ù ë-‹D$8…Àt!PS‹ûèíñÿÿ‹ØW‰\$(ÿ FƒÄ …Û„Ì ‹|$Š…Ñ„ÀtSè±?ƒÄƒøÿ„Ñ ŠE%„Àt)„$´PSÿ FƒÄ…Àu ‹Œ$ȉM(ëÇE(‹E(…ÀthìÏHSÿÐFƒÄ‰D$\…À„q ë‰\$XÇD$\ë‹|$‹D$$ÆD$…À„—‹ÐhôÏHRè‘VƒÄ…À…QhðÏHWÿäFƒÄ…ÀtƒÀë‹Çj/PÿàFƒÄ‰D$0…Àt@ƒÉÿ‰D$0‹ø3Àò®÷ÑI…¹‹\$$j/SÿàF‹øƒÄ…ÿu‹Ãj\PÿàFƒÄ…Àtxë …ÿtGë‹ûjWèCj‹ØƒÄ…Ûtr‹ûƒÉÿ3Àò®‹|$÷ÑI‹ÑƒÉÿò®÷ÑID Pÿ¤F‹øƒÄ…ÿ„² ‹D$0S…Àt ‹L$QhäÏHë ‹T$RhÜÏHWèÓRƒÄS蚘‹D$Pÿ FƒÄ‰|$‹|$$hØÏHWÿÐFƒÄ‰D$0…À„5 Œ$ØQWÿ FƒÄ…À… ‹”$ì‹\$‹|$ÆD$‰T$dë ‹D$$hôÏHPè&UƒÄ…Àt ‹ ”F‰L$0ŠE%„ÀtÇE(ÿÿÿÿ‹D$\…ÀtPÿ´FPÿ¸FƒÄ…Àt ‹Ex€Ì‰Ex‹L$Lƒù~Q÷ExuH…Û‹Ãu¸ÌÏH‹T$HP¡”FWBQRƒÀ@h´ÏHPèXR‹„$€ƒÄ…ÀtWh¨ÏHh ÏHè RƒÄ ‹D$,…À„ÇhðÏHWÿäFƒÄÆD$?…ÀtƒÀë‹Çj/PÿàF‹ØƒÄ…Ûtj?Sÿ˜FƒÄ…ÀtÆD$&‹|$,ƒÉÿ3Àò®‹|$÷ÑI‹ÑƒÉÿò®÷ÑID Pÿ¤F‹øƒÄ…ÿ„ë ‹L$,…ÛQt¾T$‹D$RPh˜ÏHWèQƒÄë‹T$RhÏHWèýPƒÄ‹D$Pÿ F‹\$ ƒÄ‰|$‹…Ü…Àu‹ ”FƒÁ@‰Ü…Ûu+÷Exu"‹”Fh€ƒÂ Rÿ´FƒÄPÿXFƒÄ‹…¬Phi'VèjRjjZVè`RL$pQh'VèPRh0/@h+NVè@R‹T$`„$°Ph'V‰”$¼‰¬$ÀèRh 0@h,NVè R‹…ƒÄH…Àt PjbVèõQƒÄ ‹L$dQjVèåQWh'VèÙQ‹UpRh'VèÊQ‹Ex%Pj*Vè¹Q‹MxáQj+Vè§Q‹UxâRj,Vè•Q‹ExƒÄH%Pj-VèQ‹T$03É…Ò•ÁQj.VèmQ‹UxâRj0Vè[Q‹Ex%Pj2VèJQ‹ExƒÄ0© tjë ©@tjëjj3Vè$Q‹MxƒÄ á€Qj4VèQ‹Uxâ@RjiVèýP‹Ex%Pj5VèìP‹MxáQj7VèÚP‹UhRh'VèËP‹ElPh'Vè¼P‹MXƒÄHQh'VèªP”$ˆRh'Vè—P‹E8Pj Vè‹P‹M,Qh'Vè|P‹U0RjOƒÄ ‹…œ…ÀtPhq'Vè%OƒÄ jj@VèOƒÄ Š…Ð„Àtjj@VèOjjQVè÷NƒÄ‹ExöÄu€}tjhU'VèÙNƒÄ ‹E@…ÀtPëj2jDVèÂN¾•°ƒÄ RjVè¯N‹…äPh,'VèN‹èQh7'Vè‹N‹UH„$˜÷ÚÒ#ÐRh-'VèoN‹MQh/'Vè`N‹EƒÄ<…ÀtPhb'VèJNƒÄ ¾URj`Vè:N‹…ðPj Vè+N‹øQj!VèN‹•üRj"Vè N‹…´Ph4'VèûM‹ÜQh5'VèéM¾UuƒÄHRj=VèÙM‹EPPhN'VèÊM‹¸QhO'Vè¸MŠ…ÌƒÄ$<u=÷Exu4”$”URèÄ2hð0@hXNVè„M„$¨PhI'VèqMƒÄ ‹ QhV'Vè\M‹URh\'VèMM‹EPh]'Vè>M‹MhÑHèÖ-‹ õIƒÄ‹q ‹…ÀtPhŒÑHè¹-‹FƒÆƒÄ…ÀuèhõIÿՃċ õI‹B…À„Ôh€ÑHÇD$0xÑHÇD$4ÇD$8´ÕHÇD$<ÇD$@tÑHÇD$DÇD$HlÑHÇD$LÇD$PdÑHÇD$TÇD$XTÑHÇD$\ ÇD$`LÑHÇD$d@ÇD$h@ÑHÇD$l€ÇD$p8ÑHÇD$tè÷,ƒÄt$,¿ ‹ õI‹F…At‹RhŒÑHèÐ,ƒÄƒÆOuÜhõIÿÕƒÄ_^]¸[ÄÀÃ_^]¸[ÄÀÃ_^]3À[ÄÀø_^][ÄÀÃþW@TU@ X@X@(X@7X@FX@UX@pX@½X@ÛX@äY@'Z@~[@´[@À[@ð[@D\@k\@æ`@Â\@Î\@V]@q]@ä]@ó]@^@·^@û`@n_@¯_@dX@‚X@ÉX@"Y@öY@r[@¨[@Á`@Û[@ç[@8\@_\@“\@\@h]@b`@Ò]@ì]@ü]@”^@Ú^@ã^@\_@ƒ_@Û_@pb@8888888888888888888888 888888888 !"#$%&'()*+,-./01234567lU@~U@U@ªU@¿U@”W@ÈU@ÝU@ùU@pV@yV@…V@‘V@V@©V@”W@µV@ÁV@ÍV@ÖV@âV@îV@ZW@lW@W@‹W@4V@\V@HV@_V@?Z@TZ@iZ@~Z@“Z@®Z@ÃZ@숸|íHÇD$DíH‰D$ÇD$íHÇD$ ÈìHÇD$„ìHÇD$4ìHÇD$øëHÇD$ÌëHÇD$ „ëHÇD$$PëHÇD$((ëHÇD$,ôêHÇD$0ÀêHÇD$4€êHÇD$8DêHÇD$<êHÇD$@ÌéHÇD$D”éHÇD$HXéHÇD$L4éHÇD$PìèHÇD$T¨èHÇD$XxèHÇD$\8èHÇD$`üçHÇD$dÌçHÇD$hŒçHÇD$lDçHÇD$pçHÇD$tìæHÇD$x¤æHÇD$|`æHÇ„$€ æHÇ„$„ìåHÇ„$ˆ¨åHÇ„$ŒhåHÇ„$(åHÇ„$”àäHÇ„$˜¤äHÇ„$œ€äHÇ„$ HäHÇ„$¤äHÇ„$¨ØãHÇ„$¬ãHÇ„$°PãHÇ„$´ ãHÇ„$¸ÀâHÇ„$¼ˆâHÇ„$ÀLâHÇ„$ÄâHÇ„$ÈàáHÇ„$̘áHÇ„$ÐláHÇ„$Ô,áHÇ„$ØìàHÇ„$ܬàHÇ„$à€àHÇ„$ä@àHÇ„$èàHÇ„$ìÌßHÇ„$ðßHÇ„$ôPßHÇ„$ø ßHÇ„$üÄÞHÇ„$„ÞHÇ„$@ÞHÇ„$üÝHÇ„$ ´ÝHÇ„$lÝHÇ„$(ÝHÇ„$äÜHÇ„$¬ÜHÇ„$ \ÜHÇ„$$ÜHÇ„$(ìÛHÇ„$,¨ÛHÇ„$0dÛHÇ„$4$ÛHÇ„$8èÚHÇ„$<¨ÚH‹ÈÇ„$@pÚH…ÉÇ„$D0ÚHÇ„$HøÙHÇ„$LÄÙHÇ„$PˆÙHÇ„$TPÙHÇ„$XÙHÇ„$\ÌØHÇ„$`|ØHÇ„$d@ØHÇ„$hØHÇ„$lô×HÇ„$pÐ×HÇ„$t¬×HÇ„$xx×HÇ„$|D×HÇ„$€×HÇ„$„tVW‹=èFt$Pÿ׋FƒÆƒÄ…Àuð_^ĈÃì‹„$UV3í3ö…À‰t$„âPD$hPÿðFƒÄ …À„»SWë‹t$‹=˜FL$j Qÿ׃Ä…ÀtÆT$j Rÿ׃Ä…ÀtÆ|$ƒÉÿ3Àò®÷ÑI…í‹ÙtD3PUÿ¨FƒÄë KQÿ¤FƒÄ‹è|$ƒÉÿ3Àò®÷Ñ+ù.‹Á‹÷‹úT$Áéó¥‹È‹D$ƒáÃ󤋌$‰D$QhRÿðFƒÄ …À…Kÿÿÿ_[‹Å^]ÄÃ^3À]ÄÃì‹„$UW3í3ÿ…À‰|$„ŸSVPhD$jPÿÔF‹ØƒÄ…Ûtk…ít QUÿ¨FƒÄ…ÀtUë Sÿ¤FƒÄ‹Ë‹è‹Ñt$ý‹D$Áéó¥‹ÊÃá‰D$‹„$ó¤PhL$jQÿÔF‹|$ ‹ØƒÄ…Ûu•‹”$^[‹Å‰:_]ÄÃ_3À]ÄÃìSUV‹´$$W‹þƒÉÿ3Àò®÷ÑIQÿ¤F‹ø„$(WPhHîHV‰|$(Æÿ¬FƒÄƒøŒðŠ<@…,‹-˜Fw3À‰t$‰D$ ‰D$j;V3ÛÿÕj,V‹øÿՃąÀt;Çs‹ø…ÿÇD$„ €?,u3öëw…öÆ„ï€>,„â‹ ¸Fƒ9~¾jRÿ´FƒÄë‹ °F¾‹ŠBƒà…ÀtFëÌjVh@îHè5&ƒÄ …ÀtY„$¤L$$PƒÆQh,îHV‰t$,ÿ¬FƒÄƒø…¿|$$ƒÉÿ3Àò®÷ÑI¼$¤‹ÑƒÉÿò®÷ÑIòD1Æpë7j Vh îHèÈ%ƒÄ …Àt-^ j;SÿÕ‹ðƒÄ…öuj,SÿÕ‹ðƒÄ…ötÆF…ö…ÿÿÿë…öu3öëj,VÿÕ‹ðƒÄ…ötÆF‹T$D$ L$P‹D$QSRP蠃ąÀtR…ö‰t$„‚€>t}é‚þÿÿ‹ ”FhôíHƒÁ@Qè¿"‹T$Rÿ F‹D$PèƒÄ¸_^][ÄË ”FhØíHƒÁ@Qèƒ"‹T$Rÿ F‹D$Pèރĸ_^][ÄËD$…À„ø3ÿ‹@G…Àuø ýQÿ¤F‹ðƒÄ…öu<‹”FhØíHƒÂ@Rè"‹D$Pÿ F‹L$QèuƒÄ¸_^][ÄËD$…ÿv‹Î‹×‹‰‹X‰Y‹@ƒÁJuíÇþ‹T$Rè2‹Œ$4‹”$0jV„$0jPjQRè*ƒÄ …Àt6¡”FhÀíHƒÀ@Pè„!V‹5 FÿÖ‹L$ Qÿփĸ_^][ÄÃVÿ FƒÄ‹|$Wÿ FƒÄ3À_^][ÄÃ<„À‹ît5‹ ¸Fƒ9~ ¾ÐjRÿÓƒÄë‹ °F¾À‹ŠBƒà…ÀuŠFF„ÀuËÆ‹„$,‹T$L$PQURè Õÿÿ‹øŠEƒÄ„ÀtŠD$„Àu¿ë…ÿ„ª‹Œ$(¾ôÏHŠŠÐ:u„ÒtŠAŠÐ:FuƒÁƒÆ„Òuà3ÉëɃÙÿ…Éu Ç„$((ïHƒÿtaGÿƒøw*ÿ$…¤u@¸ïHë!¸ ïHë¸øîHë¸äîHë ¸¼îH븘îH‹L$‹T$P‹„$,Q‹ ”FRPƒÁ@h|îHQ豃ĊD$„Àt Uÿ FƒÄ‹T$Rÿ F‹t$$ƒÄVètƒÄ‰D$…À…eýÿÿ;5”Ft VÿÜFƒÄ_^]3À[ÄËÿwr@r@Ts@Fs@Js@Bs@Ns@Ps@7t@0t@>t@Et@St@St@Lt@S‹\$ V‹t$ W¹3À‹þó«ŠC$„Àt‹C(‰FhLïHèc1‹øƒÄ…ÿt WÿôFW‰Fèz^‹‹ÜƒÄ‰N_^[ÃÇFO‹“܉V_^[ÃV‹t$W‹†À‹¾Ü…ÀuK‹†¼PhôÏHè)ƒÄ…Àt‹ ”FƒÁ ‰ŽÀë"‹–¼h@ÒHRÿÐFƒÄ‰†ÀƆÄ‹†À…Àt‹ø‹D$ƒøwTÿ$…w@‹D$Ph”ïHWèsƒÄ 3À_^ø„ïHë¸tïHë ¸dïHë¸TïHŠŽÅ‹T$Q‹L$RQWPè)ƒÄ_3À^ív@Óv@Åv@Úv@Ìv@QŠD$ÇD$„ÀtÇD$@‹D$S‹\$U‹l$WUUPh¸ïHSèÚƒÄ3ÿ…í†0VWh°ïHSèÀŠD$4ƒÄ „ÀuF‹D$3ö…Àv< >;Ís‹L$ >3ÀŠ Ph¨ïHSèŒƒÄ ëSh¤ïHÿFƒÄ‹D$F;ðrÄ‹D$3ö…À†©>;ÕƒžŠD$(„ÀtD>;Ås‹L$ €<0 u€|0 tb‹T$ ,Š.< r <€s%ÿë¸.Ph ïHSèŠD$4ƒÄ „Àt‹L$$D>;Ás€|. u€|. t‹D$‹l$$F;ð‚qÿÿÿë+t$|7ë‹D$‹l$$+ð|7Sj ÿœF‹L$ƒÄù;ý‚Òþÿÿ^SÿÄFƒÄ_][YÃQ¡ õIVö@tZhÇD$ÿ¤F‹ðƒÄ…öt>‹T$L$QVhjRjÆÿXF…Àv‹D$ V˜PèvÏÿÿƒÄVÿ FƒÄ^YøèvÈ‹„$SUVWPL$hQ3ÛÿðFƒÄ …À„¬‹-˜F…ÛuT$RÿŒFƒÄ‹ØëX‹ûƒÉÿ3Àò®÷ÑI|$‹ÑƒÉÿò®÷ÑID PSÿ¨F‹ØƒÄ…Ûta|$ƒÉÿ3Àò®÷Ñ+ù‹÷‹Ñ‹ûƒÉÿò®‹ÊOÁéó¥‹Êƒáó¤j SÿÕ‹ðƒÄ…öu'‹„$L$PhQÿðFƒÄ …À…aÿÿÿ…ötÆ_^‹Ã][ÄÃQSVW‹|$WÇD$ÿŒF‹ØƒÉÿ3À‰\$ò®÷ÑIQÿ¤F‹ðƒÄ…öu_^ƒÈÿ[YÃUh8ïHSÆÿF‹ØƒÄ…Û„ h8ïHjÿF‹èƒÄ…턆‹þƒÉÿ3Àò®÷ÑItSh8ïHVh0ïHVè ƒÄë=‹D$jh8ïHPÿüFƒÄ …ÀSth°ðHVèàƒÄ ëh8ïHhäÏHVè˃ÄjVÿ¨FƒÄƒøÿuVÿ¬FƒÄƒøÿ‰D$t …í‹Ý…VÿÿÿëtÿøF‹ƒÀóƒøwM3ÉŠˆÀ{@ÿ$¬{@‹”FVƒÂ@h„ðHRë;Vh`ðHë*‹ ”FVƒÁ@h8ðHQë!‹”FVƒÂ@hðïHRëVhÐïH¡”FƒÀ@Pè§ƒÄ V‹5 FÿÖ‹L$QÿÖ‹D$ƒÄ]_^[YÃI7{@c{@Q{@I{@u{@ƒì ‹D$‹L$‹T$‰D$‹D$‰L$RPL$hÀŒ@QÇD$è,‹L$ƒÄ…Ét;L$u ‹T$ÆBÿƒÄ ËL$ÆƒÄ ÃìT‹„$dUV‹´$hWŒ$`P”$dQRVÇD$$u ‹L$F_‹Ã‰1^[Ã_^3À[Ãƒì ‹D$SU‹l$V‰D$ŠW3ÿ3Ʉ҉L$„}Š@€ù%‰D$ …`€8%u @‰D$ éQT$ 3ÛGRP‰|$,è:ÿÿÿ‹ðƒÄ…öu‹÷;t$~‰t$‹D$ 3ÿ‰|$‰|$ŠQèσĄÀ„B‹D$ ¾8ƒï @ƒÿQ‰D$ ‡3ÒŠ—P‹@ÿ$•‹@ƒËéüƒËéô€çþƒËééƒËéኀπ€ù*uE‹|$$ËL$ @GQP‰D$(‰|$,è‘þÿÿƒÄ…Àt‰D$ë ‹T$$‰T$‹Â;D$Ž“éŠL$ j QP€Ï€ÿìFƒÄ ‰D$ëtƒËësöà tƒË@ëiƒË ëd€Ë€ë_öÃu€Ï€Ï T$ j HRPÿìFƒÄ ‰D$ë8‹|$$L$ €Ï@GQP‰|$,èþýÿÿƒÄ…Àt‰D$ë ‹T$$‰T$‹Â;D$~‰D$‹D$ ŠP葃ĄÀ…Âþÿÿ‹|$‹L$ ¾ƒÀ»ƒø3‡23ÒŠÜ‹@ÿ$•¤‹@ƒËDvýDÅÇéLvýDÍÇéTvýDÕÇéõDvýDÅÇéâLvý€ÏDÍÇéÌTvý€ÏDÕÇé¶Dvý€ÏDÅÇé Lvý€ÏDÍÇéŠTvýËDÕÇëtDvýDÅÇëdLvý3ÒDÍÇ‹L$ €9E•ÂJâÊ Úë9Tvý3ÉDÕÇ‹T$ €:G•ÁIáÉ ÙëDvýDÅÇ‹T$H ‰X‰xöÇ@‰t"Oÿ3ö‰H IDÍÇ H ‰p‰p‰1ë3ö÷ÃtBÿ‰@DÕÇ ‰p‰p‰p ‹D$ ‹L$(‹|$$ƒÁP‰L$(‰Qü€8…‡üÿÿ‹L$3ö…É~s‹D$,PøHüE‹|$F;÷}ƒx u ‹yƒÁƒÂ‰x‹xðƒÿ w.ÿ$½Œ@ŠXô‹yƒÁƒÂ‰8ëÝBŠXôƒÁƒÂÝëÇ@ð‹|$ƒÀ;÷|¤‹Ç_^][ƒÄ Ã_^]‹Á[ƒÄ ÃI£‡@¾‡@kˆ@«‡@³‡@Ƈ@Hˆ@Pˆ@Cˆ@§ˆ@/ˆ@4ˆ@9ˆ@§ˆ@      ‹ÿ­‰@؉@àˆ@q‰@‡‰@‰@‰@öˆ@E‰@ ‰@ãˆ@/‰@[‰@Š@       ÒŠ@ÒŠ@ÒŠ@ÏŠ@ÒŠ@öŠ@öŠ@ߊ@öŠ@ïŠ@¾D$ƒÀàƒøQw3ÉŠˆlŒ@ÿ$dŒ@°Ã2ÀËÿ\Œ@_Œ@‹L$‹A‹Q;Âs‹‹D$ˆ‹B‰‹QB‰QÃÈÿËL$ ‹T$D$P‹D$QRPè×îÿÿƒÄÃƒì ‹L$D$PQT$h @RÇD$ÇD$ÇD$èüîÿÿƒÄƒøÿ‹D$u…Àt‹D$Pÿ FƒÄ3ÀƒÄ Ã…Àt‹L$‹T$Æ ‹D$ƒÄ ÃhõIÿŒFƒÄƒÄ ÃV‹t$ ‹…Àu&j ÿ¤FƒÄ‰…ÀuƒÈÿ^ÃÇF ÇFë+‹V‹NB;Ñr ÉQPÿ¨FƒÄ…ÀuƒÈÿ^ËV‰Ñâ‰V‹N‹‹D$ˆ‹NA‰N^Ãƒì ‹D$‹L$PQT$h @RÇD$ÇD$ÇD$èìíÿÿƒÄƒøÿ‹D$u…Àt‹D$Pÿ FƒÄ3ÀƒÄ Ã…Àt‹L$‹T$Æ ‹D$ƒÄ ÃhõIÿŒFƒÄƒÄ ËL$D$ PQT$ hàŽ@Rèwíÿÿ‹L$ƒÄÆËL$‹D$‹ˆ‹B‰ËL$‹œFD$P¡”FQƒÀ RPè!íÿÿƒÄËL$‹œFD$ P‹D$QRPèõìÿÿƒÄËD$ ‹L$‹œFP‹D$QRPèÕìÿÿƒÄáõIS…Àu3‹\$öÃtèH.öÃtè.…Àt¸[ÃÇõI‰õI3À[ÃìD$Pjÿ,F…Àu f‹D$<u3ÉŠÌ„Éu 3ÀÄÃÿ F¸ÄáõI…Àt5èâ@öõItèÄ-öõItèÇõIÇõIÃÿ% FQ¡õI…Àu jèÿþÿÿƒÄD$Pè‚H‹L$÷ØÀ÷Ð#ÁƒÄËL$ ‹D$‹T$QPRèÜIƒÄ ÃV‹t$‹F…Àt‹H…ÉuMІpW„Àt‹>è@;øt…ÿt WèM¡ƒÄè@‰‹_…ÀuhÔ@j耞ƒÄ‰…Àu¸^ÃVèJšƒÄ^ÃV‹t$‹F…Àt‹H…ÉuІp„Àu ‹Pèë ƒÄVèbFƒÄ^ËD$ ‹L$‹T$PQRè|¡ƒÄ ËD$‹L$PQÿ¤FƒÄ÷ØÀ@ËD$ ‹L$‹T$PQRÿœFƒÄ ÷ØÀ@ÃVWjÿ¤F‹ðƒÄ…öt9‹D$ÇFPÿŒFƒÄ‰…Àt‹|$ …ÿtWè$ƒÄ‰p‹Ç_^ËÆ_^Ã_3À^ËD$…ÀuËH…Ét ‹Á‹H…Éu÷ÃV‹t$…öt%S‹ FW‹‹~…ÀtPÿÓƒÄVÿӃċ÷…ÿuå_[^ÃìV‹´$ …ötJІh„Àt@‹Œ$„$WPQT$hRè4éÿÿ|$ƒÉÿ3Àò®÷ÑID$QPjVèhƒÄ _^ÄÃU‹l$V‹E…Àt|ŠÌ‚„Éur‹T$L$QRhPèÔèÿÿŠ…hƒÄ„ÀÆ…Ì‚tI‹USW‹úƒÉÿ3Àò®÷ÑI2Û‹ñþÿ}Æ2 ‹EF³Æ‹MVQjUèØƒÄ„Û_[t‹UÆDÿ^]Ãì‹T$U‹l$L$QR‹E‰D$ è’úÿÿ‹ÐƒÄ…Ò‰T$u ¸]ƒÄÃSVW‹úƒÉÿ3ÀÇD$ ò®÷ÑID$ ‹ñ‹L$PVRQU‹úèn‹ØƒÄ…ÛuF‹D$Šˆh„Ét‹T$ RWjPè9ƒÄ‹D$ ;Æt‹L$+ðøD$ PVWQUè(‹ØƒÄ…Ûtº‹T$Rÿ FƒÄ‹Ã_^[]ƒÄÃìxV‹´$€Š†¼„À„Ä‹„$Œ‹Œ$ˆ‹–ÄPQRè»ÅƒÄ …À™P‹†ÄPèóÏHÿƒÄƒùwfÿ$l•@‹Œ$3À^ǃÄxÃèh°‹Ph ñHRèþÿÿƒÄ ¸7^ƒÄxÃè¨DL$QPèI‹PhñHRèïýÿÿƒÄ¸7^ƒÄxÃP‹hèðHPèÔýÿÿƒÄ ¸7^ƒÄxËðë5‹Œ$Œ‹”$ˆ‹„$„jQRPÿèF‹ðƒþÿuèׯ=3'u3ö‹Œ$‹Æ@÷ØÀ‰1$É^ƒÀ7ƒÄxÃÓ”@Ÿ”@Ÿ”@þ”@³”@SU‹l$VW‹|$ …ÿu‹ýƒÉÿ3Àò®÷ÑI‹ùŠ\$‹t$öÃt*‹FPWjUÿVlƒÄ;ÇthdñHVèýÿÿƒÄ¸_^][ÃöÃt>‹Fp…Àu‹N$…Ét0…Àu‹Fl‹N$QWjUÿЃÄ;ÇthLñHVèÕüÿÿƒÄ¸_^][Ã_^]3À[ÃìxS‹œ$VW‹¼$ˆÇЇ¼„Àt}‹„$”‹Œ$‹—ÄPQRè ËðƒÄ …ö‘‹‡ÄVPè΃ăøwÿ$… —@èòB‹ðè‹®L$ PQVè_G‹ƒÄPhxñHRè.üÿÿƒÄ¸8_^[ƒÄxË„$”‹Œ$‹”$ŒjPQRÿäF‹ðƒþÿuè3®=3'u _^ƒÈÿ[ƒÄxÉ3_^3À[ƒÄxÃIþ–@‰–@ô–@ô–@‰–@‰–@þ–@V‹t$‹F|…Àt‹N ‹T$Q‹L$R‹T$QRVÿЃÄ^ËD$ …À|4ƒø/‹N‹… FW‹=ÈFQjjRÿ׋F‹L$(‹T$$PjQRÿ×ƒÄ _3À^ËL$‹T$D$ PQRè ƒÄ ÃƒìSUV3íj,‰l$‰l$‰l$2Ûÿ¤F‹ðƒÄ;õ‰t$„ÜW¹ 3À‹þó«‹|$,º‹D$…À…–„Ût‹L$‹‹iƒÁƒø‰L$u2Ûë׋ƒÇƒø„<Hƒø‡%ÿ$…Øœ@„Ût ÇD$몋ƒÇ…À‰D$t³뙉T$ë“‹F ‰Fƒ>t ÇD$éyÿÿÿ„Ût‹Å닃DžÀtωéaÿÿÿ‹F…Àt ÇD$éMÿÿÿ„Ût ‹Å‰Fé?ÿÿÿ‹ƒÇ‰Fé2ÿÿÿ‹F ‰F‹F…Àt ÇD$éÿÿÿ„Ût‹Å닃DžÀ„hÿÿÿ‰Féùþÿÿ‹F …Àt ÇD$éåþÿÿ„Ût ‹Å‰F é×þÿÿ‹ƒÇ‰F éÊþÿÿ‹F…Àt ÇD$é¶þÿÿ„Ût‹Å닃DžÀ„ÿÿÿPÿŒF‰F‹FƒÄ ‰Fé‚þÿÿ„Ût‹Å닃NjN…Ét%öF„ãþÿÿ…À„ÈþÿÿVjPÿŒFƒÄPé…ÀtPÿŒF‰F‹FƒÄ º‰Fé+þÿÿ‹F‰T$ ‰Féþÿÿ„Ût‹Å닃NjN…ÉtöFë‘…ÀtPÿŒF‰F‹FƒÄ º‰FéÝýÿÿ‹F‰T$ ‰FéÌýÿÿ‹N‹FƒÉ …À‰Nt ÇD$é¯ýÿÿ„Ût‹Å닃DžÀ„þÿÿ‰Fé’ýÿÿ‹F…Àt ÇD$é~ýÿÿ„Ût ‹Å‰Fépýÿÿ‹ƒÇ‰Fécýÿÿ„Ût‹Å닃NjN…Ét?öF„¿ýÿÿ…À„¤ýÿÿVPÿŒFƒÄPjèö‹ðƒÄ …ö…ýÿÿÇD$é ýÿÿ…À„oýÿÿPÿŒFƒÄ‰Féñüÿÿ„Ût‹Å닃NjN$…Ét ÇD$éÕüÿÿ‰F$éÍüÿÿ„Ût‹Å닃NjN …Ét ÇD$é¬üÿÿPÿŒFƒÄ‰F é•üÿÿÇD$éüÿÿ‹t$‹l$(‹\$$3ÿƒ>t‹F…Àu…ÿ„‹F …Àt öF…ô‹F‹Èƒát¨…â‹V…Òu ¨t¨ …Ϩt¨…Ã…Éu¨t"‹F…Àu‹D$‹NPQè8PÿŒFƒÄ ‰FöFu;t$u‹VRV赃ąÀuröF+u‹F NPQ蛃ąÀuX‹V ‹F$‹NUSWR‹VP‹FQ‹NR‹V P‹FQ‹NR‹PQR赋øƒÄ4…ÿuÇD$‹F…Àt‰D$‹v(…ö…óþÿÿëÇD$ëÇD$‹t$‹= F‹Æ‹v(Pÿ׃Ä…öuñ‹D$_^][ƒÄÃ^]¸[ƒÄÃy˜@q˜@£˜@Ú˜@Ò˜@ ™@:™@L˜@j›@}™@ê™@8š@rš@¡š@›@7›@j0ÿ¤F‹ÐƒÄ…Ò„W¹ 3À‹úó«‹|$…ÿ‰zt‹L$ …Éu ƒÉÿò®÷ÑIë3É‹D$‰J‹L$‰B ‹D$‰J‹L$‰B‹D$ ‰J‹L$(‰B‹D$,‰J ‹L$$‰B,‹D$0‰J(…À_t ‹H$‰J$‰P$‹ÂËL$4‹…Àu‹D$0‰‰‹ÂÃ3ÀÃj,ÿ¤F‹ÐƒÄ…Òt>W¹ 3À‹úó«‹D$_…Àt‰B‹D$…Àt‰B‹D$ ÇB…Àt ‹H(‰J(‰P(‹ÂÃ3ÀÃQ‹D$ …À‰D$uÇD$òHS‹\$ UVWÇD$¾¸ñH‹ƒÉÿ‹ú3Àò®÷ÑI‹û‹éƒÉÿò®÷ÑI;Ír(‹úƒÉÿò®÷ÑRI‹Ó‹û+уÉÿò®÷ÑIÑRèçòÿÿƒÄ…Àu‹T$ƒÆBþàñH‰T$r¦‹D$_^][YËD$_^]‹żñH[YËD$S‹\$ U3íV‹0W…Ûu‹þƒÉÿ3À½ò®÷ÑI‹Ù +Qÿ¤F‹T$ƒÄ…À‰u _^]¸[Ëˋø‹ÁÁéó¥‹Èƒá…íó¤t ‹L$‹Æ_^]3À[ÃSj)ÿ¤F‹ØƒÄ…Ûu[ÃVWjÿÌF‹ õIÁAP‰ õIÿ F¹¾LòH‹û3À󥤋ûƒÉÿƒÄò®÷ÑI‹ñƒþ(}#‹=Fÿ×%€yHƒÈð@Š€àñHˆFƒþ(|ã_ÆC(‹Ã^[ÃS‹ FV‹t$ W‹F‹>PÿÓVÿӃċ÷…ÿuì_^[ÃV‹t$…öthUW‹= F‹F$‹.…Àt PèàÿÿÿƒÄöF(u ‹F…ÀtPÿ׃ÄöF(u ‹F …ÀtPÿ׃Ä‹F…ÀtPÿ׃Ä‹F,…ÀtPÿ׃ÄVÿ׃Ä‹õ…íu¢_]^Ãì‹„$S‹œ$UVW3ÿ;߉|$‰|$‰8u _^]3À[ÄÃè†þÿÿ‹ðL$VhXóHQ‰t$ è@‹T$ƒÄ ‰T$…ÿtD$hTóHPè"ƒÄøVL$hLóHQè jT$ h$óHRøèz‹Kø‹CT$(PQRèføjD$8h óHPèSø‹C$ƒÄ0…ÀtèòýÿÿPL$hðòHQ‰D$$è®ƒÄ ø‹ë‹C$…Àt$‹E,…Àu‹E ‹T$PRD$h¸òHPèƒÄë#öC(t‹C,…Àu‹C PL$h¨òHQè\ƒÄ ø‹E…ÀtPT$h”òHRè@ƒÄ ø‹u …öt‹L$PhŒòHQè"‹vƒÄ ø…öuâjT$h„òHRè…ø‹C(ƒÄ ¨u)¨t ‹C‹KPë‹C‹K PT$QRèZƒÄ øé‘‹E PhôÏHè2ïÿÿƒÄ…Àt‹5”Fë‹M hØÏHQÿÐFƒÄ‹ð…ö„×VhT$(jRÿÔFƒÄ…Àt,PD$$L$PQèíVhT$4jRøÿÔFƒÄ…ÀuÔ;5”Ft VÿÜFƒÄ‹m$…í…þÿÿ‹C$…Àt ‹t$D$VhxòHPèVøÿ FƒÄ‹‹t$…Û…ÊýÿÿVL$hlòHQèï‹”$8ÇV‰ÿ F‹Œ$4‹D$,ƒÄ‰3À_^][ÄËT$Rèvüÿÿ‹D$Pÿ F‹Œ$,ƒÄ¸_^]Ç[ÄÃSUV‹5¤FWj ÿÖ‹\$ ‹èƒÄ…ÛÇEu‹|$ƒÉÿ3Àò®÷ÑI‹ÙCPÿÖ‹t$‹Ë‹Ñ‹øÁé‰EƒÄó¥‹Êƒáó¤‹E‹L$‰]Æ‹…Àt‰(_‰)^‹Ã][øè†‹Œ$„$ PT$QRÿF‹Œ$D$ jPQèGÿÿÿÄËL$…Éu¸ËD$‰Ç@3ÀËT$S‹\$ U‹ ¯\$3ÀV…ÉWu_^][ËI‹z+Ï;ËI‹2‹z‹N‹v+Ï÷‹|$‹éøÁéó¥‹Íƒáó¤‹ ‹j‹qÇB‹ +õƉ …Ét;‹y‹ó+ð;þ~·‹2‹z‹Ë‹v+È÷‹|$‹éøÁéó¥‹Íƒáó¤‹Ë+È‹BÁ‰B‹Ã_^][ËT$S‹\$ U‹¯\$VW…Àu_^]ƒÈÿ[Ë@‹r+Æ;Ã=‹2‹z‹F‹v+Ç÷‹|$‹È‹éÁéó¥‹Íƒáó¤‹ ÇB…À‹ ‰ u1…Ét-9Y~Ë‹|$‹Ë‹p‹Bð‹ÁÁéó¥‹Èƒáó¤‹BÉB‹Ã_^][ÃQ‹L$ SUV…ÉWu‹|$ƒÉÿ3Àò®÷ÑIqVÿ¤Fnÿ‹øƒÄ3Û‹ÅM…À‹Îty‹T$Š‹Wô‰V(‹Gü‰F,ÇF4‹‰N<é!‹Wô‰V(‹Gü‰F,ë.‹Wì‰V(‹Gô‰F,‹Oü‰N4‹‰V<é÷‹Gì‰F(‹Oô‰N,‹Wü‰V4‹NÇF<A¸…ëQ‰N‹…É}1÷éÁú‹ÂÁèÐR€‹ÁÁâ÷؋ڹd™÷ù+Ó‹\$‰V é›÷éÁú‹ÂÁèÐR€‹ÁÁâ‹Ú¹d™÷ù÷Ú+Ó‹\$‰V éj‹‰V é`‹ƒè<‰F éS‹Oüƒé<‰N éEÇF‹‰Vé4ÇF‹Gü‰Fé"‹Oü‰N‹‰Vé‹Gø‰F0‹‰N$é‹Gð=è|‰F8‹Wø‰V0‹‰F$éå‰F0‹Oø‰N$‹‰V8éÒ‹Gø‰F8‹Oü÷Ù‰N0‹÷Ú‰V$鸋Gø‰F$‹Oü‰N0‹÷Ú‰V8é ‹Gü‰F0‹‰N$é‹Wô‰V0‹Gø‰F$‹‰N8éz‹‰V0‹Gü‰F$éj‹Oü‰N0‹Wø‰V$‹‰F8éT‹NP‹VH‹FD÷Ù÷Ú÷؉NP‹N@‰VH‹VL‰FD‹FT÷Ù÷Ú÷؉N@‰VL‰FTé‹Oü‹FT¯Á‰FTé ‹Wü‹FT¯‰FTéù‹‹NTȉNTéê‹Oü‹FL¯Á‰FLé׋Wü‹FL¯‰FLéÄ‹‹NLȉNL鵋Oü‹F@¯Á‰F@颋Wü‹F@¯‰F@é‹‹N@ȉN@逋Oü‹FD¯Á‰FDém‹Wü‹FD¯‰FDéZ‹‹NDȉNDéK‹Oü‹FH¯Á‰FHé8‹Wü‹FH¯‰FHé%‹‹NHȉNHé‹Oü‹FP¯Á‰FPé‹Wü‹FP¯‰FPéð‹‹NPȉNPéá‹F…Àt‹N …Ét‹N…Éu ‹‰N8éÂ?'~P‹V ¹dB‹\$‰V ‹™÷ù¸…ëQ‰V$‹÷é‹Â¹dÁø‹ÐÁê™÷ù¸­‹Ûh‰V0‹÷éÁú ‹ÂÁèЉV8ëj@‰F‹ƒùd}‰N(ÇF,ÇF4ÇF<ëE¸…ëQ‹\$÷éÁú‹ÊÁéѹd‰V(‹™÷ùÇF4ÇF<‰V,ëÇD$4닉T$4‹Å ­º÷Ø+Ñ‹L$(C‹D$4ú‰¿MtõHf‹ ¿U$÷H¿éÅx ƒø3f9 EÌ÷Hu¿Ed÷H‰D$é|øÿÿ¿U”öH‰D$ékøÿÿh4Ièm‹D$4ƒÄ…Àt‹T$‹5 FRÿÖ‹D$$PÿÖƒÄ_^]¸[ÄàËD$0…Àt‹L$‹5 FQÿÖ‹T$$RÿÖƒÄ_^]3À[ÄàËD$0…Àt‹D$‹5 FPÿÖ‹L$$QÿÖƒÄ_^]¸[Äàûª@׫@ß«@ç«@ï«@M°@÷«@¬@,¬@:¬@V¬@ã¬@í¬@ú¬@­@­@+­@;­@K­@{­@•­@­­@½­@Ó­@ã­@ù­@M°@.®@A®@T®@c®@v®@‰®@˜®@«®@¾®@Í®@à®@ó®@¯@¯@(¯@7¯@J¯@]¯@l¯@=°@G°@‹T$ ‹D$…Ò~‹L$V+È2Šˆ@Nu÷^Ã3ÀÃìSU‹-´FV‹t$(W¡¸Fƒ8~‹3ÒjŠRÿÕƒÄë‹‹°F3ÉŠ‹ŠHƒà…ÀtÿëÊ‹Šˆ\$,‹D$,%ÿPЃú vh€û-tq€û+t^‹ ¸Fƒ9~ hPÿÕƒÄë‹°F‹ f‹A%…Àua€û(…Ú3Ò‹Š@„ɉ„Ù€ù(uBë€ù)uJ…ÒßéIÿÿÿ€û-t €û+…¾€ë-öÛÛƒãKA‰¾ƒê0ƒú †£éÿÿÿ|$‹Š@‰¡¸Fˆ\$,ƒ8~‹L$,háÿQÿÕƒÄë¡°F‹T$,âÿ‹f‹Q%…Àu€û.u T$#;ús©ˆG뤋L$(Æ‹>D$OPQ‰>衃Ä_^][ƒÄË_¾A‰^][ƒÄÃ_^]3À[ƒÄÃ3Û‹|$(Ç‹ŠˆD$,‹L$,áÿB‰AЃø w(‹’DQЉ‹Š ˆL$,‹L$,áÿB‰AЃø vØJ…Û‰}‹÷Ù‰‹Ã_÷ØÀ^][ƒÄÃS‹\$ U‹-´FŠV„ÀW‹ótF‹=F¡¸Fƒ8~3ÉjŠQÿÕƒÄë¡°F3ÒŠ‹ŠQƒà…Àt ¾Rÿ׃ĈŠFF„ÀuÀ¾pI‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„!¾hI‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„é¾dI‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„¾\I‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„e‹ûƒÉÿ3Àò®÷ÑIƒùu½ë$‹ûƒÉÿ3Àò®÷ÑIƒùu€{.u ½ÆCë3í¡8øH¿8øH…Àth‹üF…ít‹‹L$jPQÿÓƒÄ …À„éë7‹7‹D$ŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„~‹G ƒÇ …Àu¢‹\$‹5àúH¿àúH…öt=‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„`‹w ƒÇ …öuþXI‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àu _^]¸[Ë5hùH¿hùH…öt=‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„Ö‹w ƒÇ …öuËûƒÉÿ3Àò®÷ÑI‹éM€<+suPÆ+‹5hùH…ö¿hùHt9‹ÃŠŠÑ:u„ÒtŠHŠÑ:NuƒÀƒÆ„Òuà3ÀëÀƒØÿ…ÀtC‹w ƒÇ …öuÇÆ+s‹5ðùH¿ðùH…ötN‹ÃŠŠÊ:u-„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3Àë‹D$‹W‰‹G_^][ÃÀƒØÿ…À„‹w ƒÇ …öu²ŠC„À……‹¸Fƒ:~3ÀhŠPÿ´FƒÄë‹°F3ÉŠ ‹f‹H%…ÀtL‹5HýH¿HýH…öt=‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À„„‹w ƒÇ …öuÊ 3ö„ɋËÓtŠ€ù.tˆ BëFŠH@„Éuë…öÆtH‹5àúH¿àúH…öt9‹ÃŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àt‹w ƒÇ …öuÇ_^]¸[ËL$‹G‰‹G_^][ËT$_^]Ǹ[ËD$_^]Ǹ[Ã줋„$¨SU‰D$ ‹„$´3íV;ÅWt‹‰L$ëUÿÌFƒÄ‰D$T$Rÿ FƒÄ;ń̋HÁl‰L$L‹PB‰T$D‹H ‰L$8‹P‰T$<‹H‰L$@‹‰T$H‹@ L$‰„$ŒQÇD$T‰l$h‰l$`‰l$\‰l$X‰l$d‰l$l‰l$$‰l$(‰l$,‰l$0‰l$4èêîÿÿƒÄ…À…I‹L$,¸;È89D$0.9D$ $9D$$‹T$LRèv‹L$lƒÄ””øÿÿ‹D$D‹L$`‰”$€Tÿ‹D$8‹L$T‰T$|ȉL$x‹L$,;Íu9l$(t 9l$ u9l$$t3ö3Ò3Àë&‹T$P‹D$tF;õ|òëÆ>;õuÆD/ÿ‹Ç_^][á4öI…ÀuÇ4öIè8«éªá4öI…ÀtèÒè­$Ç4öIÃV‹t$І¼„ÀtcjèJ ‹†ÄƒÄ…Àt+Pègœ‹†ÄPè+§‹ŽÄQè?—ƒÄ džÄ‹†À…ÀtPè’£ƒÄdžÀƆ¼^ÃS‹\$UV‹ƒÀ‚…Àt^]3À[Ël$‹õÁæVÿ¤F‹ÐƒÄ…Òu ^]¸[ËÎW3À‹úÁéó«‹Îƒáóª_‰«(^‰“À‚ǃĂ]3À[ÃV‹t$‹†À‚…ÀtG‹†(W3ÿ…À~%S3Û‹–À‚‹ÃÂPè1‹†(ƒÄGƒÃ@;ø|ß[‹ŽÀ‚Qÿ FƒÄ3À_^Ã3À^ÃV‹t$‹F…Àt3PèþµFÇFPÇFè·L‹Qÿ FƒÄ Ç3À^ø^Ãì”SU‹¬$ V3ö3ÛÆ…¼ 8öIW‹}„À‰\$‰t$t9·u9· tWèÊƒÄÆ8öI‹‡HtHtHtè¼ëè5áë ènÉëègÈPèÁžƒÄ;Ɖ…Àuh\IWè™ÒÿÿƒÄ¸_^][Ä”ÃVhÿj P舚‹‡´ƒÄ;Æt3‹À‹—¼Q‹¸RQPUèσąÀu_^]¸:[Ä”ˇ$;Æt2‹•ÀPR衜ƒÄ…Àuh@IWèÒÿÿƒÄ¸;_^][Ä”ˇ;Æu 9·„ã‹‹•ÀQPR袦ƒÄ …Àu~9· t>‹‡;Æu¸8I‹;Îu¹8IPQhðIWè˜ÑÿÿƒÄ¸<_^][Ä”Ãh°IWè Ñÿÿ‹‡ƒÄ;Æu¸8IPh IWèìÐÿÿ‹‡ƒÄ ;Æu=ë6hpIWèÒÐÿÿ‹‡ƒÄ;Æu¸8IPh IWè´Ðÿÿ‹‡ƒÄ ;Æu¸8IPh`IWè–ÐÿÿƒÄ ‹— ‹À3À;Ö•Àh0Ê@PQè¡‹‡,ƒÄ ;Æt9‹—0‹ÀRQWÿÐ‹ØƒÄ ;Þ‰\$th<IWè®ÐÿÿƒÄ‹Ã_^][Ĕ˕ÀRèRP‰…Ä裊…ýƒÄ„À‰µÈu1D$PUèøƒÄ…Àu‹L$‹•ÄQRè ³h IWèÕÏÿÿƒÄ‹…°‹ÄPQ蟔ƒÄ‹‡Œ…Àu‹‡…Àu¾à“ëV‹—‹‡RPèn‰RP臉‰D$(‹‡ŒÛD$(ƒÄ…Àt;‡‹‡€€4€Áæèu~+ðˆ3‹Ä3ÀQ‰D$(‰„$,è‚•ƒÄƒø„Š‹•ÄPRè)¡ƒÄƒøuQ‹”$(3À…Òv‹°Œ$,9t@ƒÁ;Ârô‹\$;Âulƒú@sg‹°‰Œ„,‹„$(@‰„$(ëIƒø…½‹T$$3À…Òv‹°L$(9t@ƒÁ;Ârô‹\$;Âuƒú@s‹•°‰T„(‹D$$@‰D$$¸ÓMb÷îÁú‹ÂÁèЉT$’€ €Áá+ñL$$¶€€D$ÁâP‹…°‰T$$j”$0Q@RPÿàF…À^þÿÿu|hIWè}ÎÿÿƒÄ¸_^][Ä”Ãè=†àt4=† t-Œ$,QPèiPhIWè=ÎÿÿƒÄ¸#_^][Ä”ÃhÈIWèÎÿÿƒÄ¸<_^][Ĕ˕ÄRè°¡Pè*ÃPh¬IWè~Íÿÿ‹D$(ƒÄ…Àu UèƒÄ‹…ÄPèþ’ƒÄ‰…È…ÀuhˆIWè¶ÍÿÿƒÄ¸3_^][Ä”ÃhpIWè(Íÿÿ‹ÈƒÄjjQèŃÄPè<)‹ðƒÄ …öu*hPIWèhÍÿÿ‹•ÈRèŒ(ƒÄ ¸#_^][Ä”ÃVh@IWèÍÌÿÿVè÷&‹…È‹‹Q‹Ph0IUè.‹È‹‹B‹HQh IU苇ƒÄ(…ÀtUèq‹ØƒÄ…Û… ‹…ÈjjPèƒÄPè‹(‹ðƒÄ …öuhüIWè·ÌÿÿƒÄ»#ëiVhìIWè1ÌÿÿVè[&‹ÄQ衃ĉ‡…Àt0‹ P…ÉthÈIWèlÌÿÿƒÄ »3ëhIWèçËÿÿƒÄ ëhtIWè×ËÿÿƒÄ‹•ÈRèh'ƒÄ‹Ã_^][Ä”ÃS‹\$VW‹ƒ»¬…Àth@Pè+‹ðVèfƒÄ „ÀuLèú2h@W¾dÆè÷+ŠƒÄ„Àth@WèÓ*‹ðƒÆdVè(ƒÄ „Àuh|ISè6ËÿÿƒÄ‹Æ_^[Ãè6…À•ÀÃS‹\$ UV‹t$W…Û‹.‰l$„Ç‹…Ä…Àt!P‹†ÀPèo›‹ŽÀhPÉ@QèN›ƒÄ‹|$Wè!ƒÄHt_Ht0ƒè(tWhÔIUèËÿÿƒÄ 3À_^][Ãh¤IUèËÿÿƒÄ3À_^][Ë–ÀjSRèI ƒÄ ƒøt?hpIUèÖÊÿÿƒÄ3À_^][ˆÀSPèÿ ƒÄƒøthpIUè¬ÊÿÿƒÄ3À_^][Ël$$U舋ȃÄIt:ItCƒé(t‹L$hDIQèyÊÿÿƒÄ3À_^][ËT$hIRè`ÊÿÿƒÄ3À_^][Ë|$ …ÿu‹ûë‹|$ P‹†ÀWPè8 ƒÄ ƒøt&…í‹Åu¸I‹L$PWhàIQèÊÿÿƒÄ3À_^][Ë–ÀR辉‹øWèfƒÄ…ÀtPèyW‹ØèqPSè 5SèÔ8ƒÄWè{Œ‹†ÀPè/ƒÄ…Àu‹L$h¨IQè©ÉÿÿƒÄ3À_^][Ã_^]¸[ËD$ W…Àt!‹D$‹ ”FPƒÁ@hIQÿ,FƒÄ 3À_ËT$ƒÉÿ‹ú3Àò®‹D$ ÷ÑI;Á~ä‹úƒÉÿ3ÀVò®‹D$ ÷Ñ+ù‹Ñ‹÷‹øÁéó¥‹Êƒá󤋸ƒÉÿ3À^ò®÷ÑI_‹ÁÃV‹t$…ötH€>tChIVè—ÇÿÿƒÄ…Àu1h IVè…ÇÿÿƒÄ…Àt¸^ÃhIVèlÇÿÿƒÄ÷ØÀ^ƒà+Hø^ËD$ìPèàCƒÄL$hQPè̓ÄPèD$‹„$Ä ËD$SUVW‹83틇(…À~a3Û‹·À‚ó‹F…ÀtB‹T$‹Q‹‚dPèÖÆÿÿƒÄ…Àt(‹L$f‹‘tf;V uFÁÌPQèî?ƒÄ„Àu"‹‡(EƒÃ@;è|¡‹L$_^]Ǹ[ˇĂ@‰‡Ä‚‹V‹ø‹D$‰~_^‰]3À[ÃQSU‹l$VW‹}‹ÄQ‹·À‚‹F‰D$è닟(¹ƒÄ;Ù‰D$~'‹‡À‚ƒÀ@‹P…Òt‹P;T$}‰T$‹ðAƒÀ@;Ë|â;Ëu VèÔóÿÿƒÄë ‹‡À‚ÁáÈ‹ñ‹T$‰V‹‡Ä‚‰F‹dQÿŒF‰f‹•tf‰V ƒÆÅÌVUè¸?ƒÄ 3À_^][YÃì‹D$ 3ÒSU‹‰T$‰T$ ‰D$Šˆh„Éu]3À[ƒÄËD$‹‹@ƒù } ]¸[ƒÄÀ|ÿZuÇD$Š €ù9®€ù0Œ¥Bƒú |å¾¾P ‰¬Jðýÿÿƒý2}ƒÅd¾H¾P ‰œJðýÿÿƒû ºƒûŒ±¾H¾P ‰V¾p”JðýÿÿW¾H¾x ‰´Nðýÿÿ¾H ‰¼OðýÿÿŠH €ù0|-€ù9(Š@ <0|!<9¾É¾À ‰ŒHðýÿÿë]¸[ƒÄËL$‹D$…À¸4Iu¸õIPQ‹L$(WVR‹T$0ÅlSUQhIRè1ÅÿÿƒÄ(3À_^][ƒÄÃ]¸[ƒÄÃì,SU‹¬$8VD$(W‹l‹}»PQSÆD$‰|$ è,ƒÄ …Àt »ÇD$$‹•ÈjjjURèöU‹ðƒÄ…ö‰t$ „8ƒûu>‹•lƒÉÿ‹ú3Àò®÷ÑIj.R‰L$<ÿ˜FƒÄ‰D$(…Àt‹øƒÉÿ3Àò®÷ÑI‰L$‹|$Vè¼TƒÄ3É…À‰D$0‰L$ޏŠD$„À…¬QVè¤T‹øƒÄ9u‹GPè’‡‹O‹ðQèWO‹ø‹ÃƒÄƒètƒèuZ;|$$uT‹Ï|$,3Òó¦uHëA‹D$4;ÇuP‹…lVPè ÃÿÿƒÄ …Àu$€>*u$‹D$O;Çu‹T$(‹ÈFQVRèèÂÿÿƒÄ …ÀtÆD$‹L$‹D$0‹t$ ‹|$A;ȉL$ŒHÿÿÿVèIHŠD$ƒÄ„Àt‹…lPh,Iéô‹•ÈL$8hQj RèƒÄPè,EƒÄ…À}Nƒ¿~*hôIWè¡Ãÿÿ‹…ÈPèÅƒÄ ¸3_^][Ä,ÃhÌIWèÃÿÿƒÄ3À_^][Ä,ËlT$8QR膃Ä…Àu\‹‡L$8ƒø‹…lPQ~*h„IWè-Ãÿÿ‹•ÈRèQƒÄ¸3_^][Ä,ÃhXIWè“ÂÿÿƒÄ3À_^][Ä,ÃT$8Rh8IWèsÂÿÿƒÄ 3À_^][Ä,ÃSUV‹t$…öW„™‹þƒÉÿ3Àò®÷ÑIƒù‚„‹\$…Ût|‹ûƒÉÿò®÷ÑItpSVè0ÁÿÿƒÄ…Àt _^]¸[Ê~<*uO€?.uJ‹-˜FGj.PÿՃąÀt5WSÿäF‹ðƒÄ…öt$WVèäÀÿÿƒÄ…Àtj.SÿÕƒÄ3É;ð_^”Á]‹Á[Ã_^]3À[áPöI…ÀuhÔ@jh@öIèÖ]ƒÄ ÇPöIø@öIáPöI…Àth@öIèm`ƒÄÇPöIÃì‹D$S‹\$U‹l$VWƒÉÿ‹uÇ‹û3À‰L$‹T$$ò®÷ÑIÇD$‰L$L$QRSè‹øƒÄ …ÿu _^]ƒÈÿ[ƒÄËF…Àt jjVè|ƒÄ ‹D$‹@PWQèq_‰D$‹FƒÄ …Àt jVè|ƒÄWÿ F‹D$ƒÄ…À…Œ‹D$$T$ RPSUèÑ‹øƒÄ…ÿu'‹D$ …ÀtjL$QU襋D$ƒÄ3Ò…À”‰T$ëK‹F…Àt jjVèp{ƒÄ ‹D$$PSWVèЉD$ ‹FƒÄ…Àt jVèŠ{ƒÄ‹D$…Àu WèƒÄ‹L$(‹T$‹D$_^]‰[ƒÄÃS‹\$ VWSèc‹t$@‹>ø‹Ç‰>@Pÿ¤F‹øƒÄ…ÿu_^[ËD$SPhLIWèð»ÿÿ‹ƒÄ;ÁtWÇÿ FƒÄ3À_^[ËÇ_^[ËT$3ɸgfffA÷êÁú‹ÂÁèЃú}é‹ÁËT$ SUVW‹úƒÉÿ3Àò®÷ÑID$‰L$‹L$ PQRèHÿÿÿ‹øƒÄ …ÿtPj ÿ¤FƒÄ…Àu‹T$Rë+‹l$‹\$Ç@‰(‹ P‹D$ @PWQèH\‹ðƒÄ…öuUèùWÿ FƒÄ_^]3À[ÃT$ RÿÌF‹N‹D$$A‰F‰N‹L$$‹“8‹QRPèWÿ FƒÄ‹Æ_^][Ãì‹D$‹L$‰D$‹D$ T$hÔ@RP‰L$è¹]ƒÄËD$‹L$V‹P‹q+Ö‹0;Ö^| ‹A…Àu¸Ã3ÀÃV‹t$‹F…Àt jjVèJyƒÄ ‹D$ ‹HI‰H‹F…Àt jVèmyƒÄ^ËD$Pÿ FYÃV‹t$‹PèãÿÿÿVÿ FƒÄ^ËD$ǸËD$‹L$S‹\$ U‹(VWSÇÿÔF‹ðƒþÿtahœÿ¤FƒÄ…Àu_^][ÃPH‰P h€‰1‹P ‹ø‰ ‹H ÇAHQVfÇ@fÇ@ ‰ÿØFPè#ƒÄ ‹Ç_^][ÃSÿÜF‹ø…ÿuShTIUè½ÿÿƒÄ ‹Ç_^][Ãh(#ÿ¤FT$WR‰D$ è ƒÄ ‹ø_^][ÃQ‹D$‹L$ SUV‹0‹ÞƒÆW3À‰3‹‹úƒÉÿò®÷ÑI‹ùGWRVÿ0F÷‹L$(‹Ö¸ƒâƒÄ +Â3íð‰s‹A…Àt‹Ðƒ:tEƒÂ…Àuó…Àt®t>‹3í…Òt6‹úƒÉÿ3Àò®÷ÑI‹ùGWRVÿ0F‹K‹T$(ƒÄ ‰4©‹B÷E‹¨…Òu΋L$‹SǪf‹Af‰Cf‹Q ‹Æf‰S ƒàº+Ð3Àò‰s ‹Q ‹:…ÿt ‹jƒÂ@…íuõ¿I D†‹÷3Ò‰L$…öt+‹é‹øÁéó¥‹Íƒáó¤‹K ‹t$‰‘‹L$‹v ÁB‹4–…öuÕ‹K ‹|$Ç‘‹+ÁPQÿ¨F‹ð‹ƒÄ;ðt‹Ö+ÐRVèƒÄ‰7‹Æ_^][YËD$V‹t$ W‹8‹Hþ…ɉ8tΉH‹…Òt3ÿփlj‹HÏ‹…Òuî‹H ΉH ‹…Òt3ÿփlj‹P ‹…Òuì_^ËD$VPÿðF‹L$QPÿÐF‹t$PVÿ0FƒÄ ‹Æ^ËD$…ÀtPÿ FYÃV‹t$WVèƒÄƒøÿtVèöƒÄƒøÿuòVè(çÿÿ‹†ŒƒÄ…Àt PèUºÿÿƒÄ‹†¼‚Pè–ÿÿÿ‹ŽÈ‚QèŠÿÿÿІ€‹= FƒÄ„Àt ‹–|Rÿ׃ÄІˆ„Àt ‹†„Pÿ׃ÄІx„Àt ‹ŽtQÿ׃Ä‹–¤Rè3ÿÿÿjjVè9u‹†ÌƒÄ…Àt"P‹†Pè?kƒÄ…ÀthtIVèݹÿÿƒÄ‹F…Àt ‹Ž‹P;Êt‹–RèjjƒÄjVèu‹†œPÿ׋ŽƒQèºþÿÿVèÄx‹FƒÄ…Àt‹PJ‰PVÿ׃Ä3À_^ÃSU‹-¤FVWhƒÿÕ‹ðƒÄ…öu _^]¸[Ã¹Æ 3À‹þhó«ÿՃĉ†¤…ÀuVÿ FƒÄ¸_^][Ãdž¨¡”F‹¾ÐƒÀ ‰F‹ ”F¡ÈF‰N ‹”F‹ ÔF‰FlƒÂ@»ƒÏ¸dž°‚j‰V‰Ntdž˜ÿÿÿÿdž´‚𿉞ðˆžmˆžndž8<ˆžW‰¾Ð‰†(ÇF8dž4‰^8‰^<‰† ÿÕ‹øƒÄ…ÿ‰¾œu‹–¤‹= FRÿ×Vÿ׃ĸ_^][Ã‹Ž 3ÀÁá‹Ñ‰ž Áédžó«‹Êƒáóª‹D$_‰0^]3À[ËD$SV='W“„|ƒÀýƒøo‡ 3ÉŠˆ ç@ÿ$<æ@‹T$‹D$_^‰‚83À[Ë\$…Ûtèìõÿÿ‹L$_^3Àˆ™p[Ët$‹\$;ž }‹û‹–œ‹ºP苆 ƒÄG;ø|ã3ÿ;ßtN‹–œ QRÿ¨F‹ÐƒÄ;×u _^¸[ˆ ;Ã} ‹Ë<‚+È3À󫉖œ‰ž _^3À[ˆœ;Çt Pÿ FƒÄ‰¾œ‰¾ _^3À[ËD$‹L$…À•À_ˆj^3À[ËD$_…À‹D$ ^•ˆk3À[ËD$‹T$…À•Á_^ˆŠh3À[ËD$‹L$…À•À_ˆ[^3À[Ët$‹L$…ö•ÀˆW„À‹Ðt _‰Ð^3À[Ã$ï_‰Ð^3À[ËD$_…À‹D$ ^•ˆ^3À[ËD$‹T$…À•Á_^ˆŠX3À[Ët$‹L$…ö•À„Àˆ`„¶ _^Çð3À[ËD$‹L$…À•À_ˆU^3À[ËT$‹D$_^‰‚”3À[ËD$‹T$…À•Á_^ˆŠT3À[ËD$‹L$…À•À_ˆR^3À[ËT$‹D$_^‰‚d3À[ËD$‹T$…À•Á_^ˆŠY3À[ËD$‹L$…À•À_ˆZ^3À[ËT$‹D$_^‰‚ø3À[ËD$‹T$…À•Á_^ˆŠS3À[ËD$…À„È‹D$_^[Ç€ð3ÀËL$‹T$_^‰‘ä3À[ËD$‹L$_^‰ˆè3À[ËT$‹D$_^‰‚3À[ËL$ŠT$_^ˆ‘Ð3À[ËD$‹L$…À•À_ˆn^3À[ËD$_…À‹D$ ^•ˆm3À[ËD$…À„&‹D$_^[Ç€ðÆ€`3ÀËL$‹T$_^‰‘˜3À[ËD$‹L$_^‰ˆœ3À[ËT$‹D$_^‰‚ 3À[ËL$‹T$_^‰Q03À[ËD$…À„²‹D$_^[Ç€ð3ÀËL$‹T$_^‰Q`3À[ËD$‹L$…À•À_ˆ]^3À[ËD$_…À‹D$ ^•ˆQ3À[ËL$‹T$_^‰Q3À[ËD$‹L$_^‰ˆŒ3À[ËT$‹D$_^‰‚3À[ËL$‹T$_^‰QH3À[ËD$ƒàû„ ‹L$_^[‰A83ÀËD$ƒàû„ð‹T$_^[‰B<3ÀËD$‹L$_^‰ˆ¤3À[ËD$_…À‹D$ ^•ˆÑ3À[ËL$‹T$_^‰‘ 3À[ËD$‹L$_^‰ˆ3À[ËL$‹D$=ÿ?‰< ƒøj_^Ç<3À[ËD$_…À‹D$ ^•ˆo3À[ËL$‹T$_^‰‘43À[ËD$‹L$_^‰ˆL3À[ËT$‹D$_^‰B3À[Ã=}'N„4îØÿÿƒøf‡ï3ÉŠˆ,è@ÿ$|ç@‹T$‹D$_^‰‚$3À[ËL$‹T$_^‰‘3À[ËD$‹L$_^‰ˆ 3À[ËD$_…À‹D$ ^•ˆP3À[ËD$…À„y‹t$P‹ŽŒQèû°ÿÿƒÄ‰†Œ3À_^[Ët$‹T$‰–ÌŠ†Ð‹ŽPQjVèh_ƒÄ‰†3À_^[ËT$‹D$_^‰B$3À[ËL$‹T$_^‰‘¨3À[ËD$‹L$_^‰H3À[ËD$‹L$…À•Â_‰Ad^ˆ‘V3À[ËD$‹L$_^‰ˆ¬3À[ËT$‹D$_^‰‚ô3À[ËD$‹L$…À‰°„–_^Çð3À[ËL$‹T$_^‰Q 3À[Ët$Іx„Àt‹†tPÿ FƒÄƆx‹D$_‰F(‰†tƆy^3À[ËD$‹L$…À‰A\„#_^Çð3À[Ët$Іˆ„Àt‹Ž„Qÿ FƒÄƆˆ‹D$_‰FL‰†„^3À[Ët$І€„ÀtƆ€‹–|Rÿ FƒÄ‹D$_‰F,‰†|^3À[ËD$‹L$_^‰HT3À[ËL$‹D$…À‰AX„€8…v_^ÇAX¤I3À[ËT$‹D$_^‰B43À[ËL$‹T$_^‰‘Ø3À[ËD$‹L$_^‰ˆÜ3À[ËT$‹D$_^‰‚Ô3À[ËL$‹T$_^‰‘€3À[ËD$‹L$_^‰H3À[ËT$‹D$_^‰B@3À[ËL$‹T$_^‰Q 3À[ËD$‹L$…ɉH…‹ ”F_ƒÁ@^‰H3À[ËT$‹D$_^‰‚´3À[ËL$‹T$_^‰‘¸3À[ËD$‹L$_^‰ˆ¼3À[ËT$‹D$_^‰‚À3À[ËL$‹T$_^‰‘Ä3À[Ã_^¸5[ËD$‹L$_^‰Hh3À[ËD$‹L$…À•Â_‰^ˆ‘i3À[ËD$‹L$_^‰ˆ3À[ËT$‹D$_^‰‚3À[ËL$‹T$_^‰‘à3À[Ët$3ÿ9~tIjjVè5i‹FƒÄ ‹H‹;Èu‰>‹V‹Ž‹B;Áu‰¾‹F‹HI‰HjVè‹ìIt‹ˆ¤‹€ Që ‹ˆ¬‹€¨QPRUèGa‹L$ ƒÄ;Á~‰D$‹Þ‹‡ F;ð|¦…Û|‹œ‹™RèÈýÿÿ‹‡œƒÄǘ_^‹Ã][ƒÄ ÃSV‹t$ 3ÛWІ ‹>„Àt_^3À[ÃjWèífЇhƒÄ„Àt‹D$PVè5ƒÄ‹†…Àtèƒ`‰† V‰–¤ÿ–ƒÄ‹Ø_‹Ã^[ËL$‹D$VW‹9…Àt‹ë3À‹Q…Àt‹0ë¾õI‹pPRÿÐFPVhÈIWè?¦ÿÿƒÄ_^ËL$S‹\$VW‹|$D$SPWQÆèQ‹ðƒÄ…öu‹D$…Àu€;u'‹PRè’‹ðƒÄ…öt‹…ÀtPèüÿÿƒÄÇ‹Æ_^[Ãì@ õISUVWˆD$(¹ 3À|$)‹”$`ó«‹Œ$\‹´$Tf«Çƪ‹†tÇD$ …Àu_^]¸[Ä@Ãh ÿ¤F‹èƒÄ…íu‹„$X_^‰(]¸[Ä@ËŒ$X3À‹ýƒËÿ‰)¹ó«‰u‰°‰´‰]‹†|…Àt€8t‹†4…Àu¸ë3Àˆ…ÿÆ…ü‰¸è­^‰…¨‰•¬‹V@…Ò•ˆ•‹F@‹U‰…„‹Ž¤‹…¨‰ˆ‰‚‹¬‰Š‹N4…É•ˆ•‹F…À•Àˆ…‹¾t‹Ë3Àò®÷ÑIù}¹Qÿ¤FƒÄ‰…h…Àu_^]¸[Ä@ËŽt] PShh IQÿ¬FƒÄƒø…œhôHSè £ÿÿƒÄ…À„†‹•h€:/u €z/urƒÉÿ‹þ3Àò®÷ÑQVRÿ8FƒÄ ‹…h€8/t;j/Pÿ˜F‹ÐƒÄ…Òt)ŠB„Àt„øhðÏHVÿäFƒÄ…ÀtƒÀë‹Æj@Pÿ˜F‹ØƒÄ…Û„­Œ$P”$PQRht IVÿ¬FƒÄƒø……‹…˜PèWãÿÿ‹=ŒFŒ$TQÿ׃ĉ…˜…Àu_^]¸[Ä@Ë•œRèãÿÿ„$TPÿ׃ĉ…œ…Àu_^]¸[Ä@ÃCÆ…Sÿ×V‹øÿ FƒÄ‹÷‹„$T‰°|Æ€€Æ…ÿ‹D$…Àt Pÿ FƒÄŠE‹œ$T¨tA‹‹tE QPhl Iè˜ÿÿƒÄ …Àu_^]¸[Ä@Ƀtƃx‹E$þ‰E‹…ˆ3ÿ;Çt>Š„Éu4Phh IT$0j(Rèš—ÿÿD$8PÿŒFƒÄ‰…„Æ…Æ…u h` IVèú›ÿÿƒÄ…ÀtV‹C0;Çt Š‹Í‚„Éu¸P‰…p‹EfÇ…tP ‰EÇ… P¬A‰½Ç…P«AÇ…°ªAééh IVè’›ÿÿƒÄ…Àt/‹C0;Çt Š‹Í‚„Éu¸»‰…p‹EfÇ…t» ë“h IVèQ›ÿÿƒÄ…À„³‹C0;Çt Š‹Í‚„Éu¸F‰…pfÇ…tF‹ ¸Fƒ9~‹•hj¾BPÿ´FƒÄë‹h¡°F¾Q‹ŠQƒà;Çt)‹•hj/BRÿ˜FƒÄ;lj…xu ‹…h‰…x‹EÇ… P¬A ‰½‰EÇ…P«Aéßh IV舚ÿÿƒÄ…À…’hü IVèršÿÿƒÄ…À…|hô IVè\šÿÿƒÄ…ÀtG‹UƒÊ ‰U‹C0;Çt Š‹Í‚„Éu¸‰…pfÇ…tÇ… ÐŒAÇ…ŒAéZhì IVèšÿÿƒÄ…ÀtC‹UƒÊ@‰U‹C0;Çt Š‹Í‚„Éu¸D ‰…pfÇ…tD Ç…  ‰A‰½éhä IVè®™ÿÿƒÄ…ÀtC‹U€Ê€‰U‹C0;Çt Š‹Í‚„Éu¸…‰…pfÇ…t…Ç… `„A‰½é°hX IVèY™ÿÿƒÄ…ÀtH‹]U€ÏÇ… €‚A‰]èi‰ƒÄ;Ç…@WjÿWWjÿjÿUÆ… èø5ƒÄ_^][Ä@ÃVh< ISè^šÿÿƒÄ ¸_^][Ä@Ãhü IVèà˜ÿÿƒÄ…Àt ‹E€Ì‰E‹C0;Çt Š‹Í‚„Éu¸‹u‰…pƒÎfÇ…t‰u‹ƒ|;Ç‹ÎtH€8tCŠƒQ„Àu9öÅth ISè×™ÿÿƒÄ¸_^][Ä@ÃÇ… P¬AÇ…P«Aë2Ç… ðqAÇ…hAÇ… fAÇ… cAÇ…àA‹•x‹5äFBh I‹Â‰•xPÿÖƒÄ;ÇuE`h IPÿÖƒÄ;Çt2¾HQÆÿ4FƒÄ‹µd‹•lFB‹Æj]PÆ…‰µd‰•lÿ˜F‹ðƒÄÆŠFF<:ukë‹dj:QÿàFƒÄ‹ð;÷tQT$~j RWÿÀF‹L$ƒÄ ;Ït5€9u0=ÿÿvPhØISèd˜ÿÿƒÄ ¸_^][Ä@ÃÆf‰…t‹ƒ|…À„“€8„ŠPÿŒF‹ðƒÄ…ö‹þuhÈISè˜ÿÿƒÄ¸_^][Ä@ÃhðÏHVÿäFƒÄ…Àtxj:Wÿ˜FƒÄ…ÀtÆ@PÿôFƒÄë‹C…Àt‰…pWÿŒFV‰…Œÿ FƒÄÆ„$PÆ„$PöE„E‹…dj@Pÿ˜F‹dƒÄ…À„%@‰…l‰…dƒ»d„ Æ…Š”$P<:Rt„$TPh´IQÿ¬FƒÄëh¨IQÿ¬FƒÄ Š„$P„Àt\„$PjP諪ÿÿ‹ÐƒÉÿ‹ú3ÀƒÄò®÷ÑIùs*‹úƒÉÿò®÷Ñ´$P+ù‹Á‰t$‹÷‹|$Áéó¥‹Èƒáó¤Rÿ FƒÄŠ„$P„Àt\Œ$PjQèDªÿÿ‹ÐƒÉÿ‹ú3ÀƒÄò®÷ÑIùs*‹úƒÉÿò®÷Ñ´$P+ù‹Á‰t$‹÷‹|$Áéó¥‹Èƒáó¤Rÿ FƒÄ‹C4…ÀtŒ$P”$PQRhÐ IPÿ¬FƒÄ‹ƒd…ÀtA‹•l„$PŒ$PPQRè[^ƒÄ …Àt‹…lPhlISèr•ÿÿƒÄ ëÆ…öEt$Š…„Àu‹5ŒFh`IÿÖ‰…hHIë‹5ŒFŒ$PQÿÖ”$T‰…Rÿփĉ…”µÌƒVPè ƒÄ„Àu_^]¸[Ä@ʃk„À…ÀL$$QUSèÿƒÄ „À„©‹•h‹…x‹Ý‹­Œ…í‰T$‰D$t Uÿ FƒÄVèd‹l$(Š‹{`3ÀˆƒÉÿò®÷Ñ+ùU`‹Á‹÷‹úÁéó¥‹Èƒáó¤‹5 F‰•l‹‹d‹•h+ËR͉dÿÖ‹D$‹L$‰…h‰xÆ…ýÆ…þÇ…¸ÿÿÿÿ‹“Rè$Ùÿÿ‹ƒ”PèÙÿÿ‹‹˜Qè Ùÿÿ‹“œRèÙÿÿSÿÖ‹„$pƒÄ‹€¤…À‰…ˆtVPhh IL$0j(Qè1ŽÿÿŠ…ƒÄ<u ‹•„RÿÖƒÄD$(PÿŒF‹´$XƒÄ‰…„Æ…Æ…ë5‹´$T‹F@…Àt PÿŒFƒÄ‰…„Æ…Æ…ëÆ…‹Œ$X‰)‹URh IVè “ÿÿƒÄ ëUSèT‹´$\ƒÄ‹Ft‰…ŠE‹N ¨‰t"І`„Àtƒ¾˜ÿu‹Žø¸;Èu3Àˆ…Š…ý„Àt3À‰D$‰E éÀ‹†|…Àt[€8tV‹…p‹ŒT$RPQUèGÑÿÿƒÄƒøu‹”$`ˆé‚‹D$…Àuz‹…ŒPhIVèÇ’ÿÿƒÄ ÇD$ ë[‹•d3Àf‹…tL$QPRU‰…pèèÐÿÿƒÄƒøu ‹„$`Æë%‹D$…Àu‹dQhèIVèj’ÿÿƒÄ ÇD$ ‹”$\‹D$‰‹D$ _^][Ä@ÃSU‹l$ 3ÛVW‹… …ÀŽ€‹|$‹…œ‹4˜…ö„&‹G‹N3ÈöÅ…Šÿ„ÉtJöÄuXІÿ„À„ø‹–Œ‹‡ŒRPèrÿÿƒÄ…À„Ú‹p‹†p;È„ÖéÁöÄuІÿ„À…®V G RPè.ÿÿƒÄ…À„–‹Žd‹—dQRèÿÿƒÄ…Àt|f‹‡tf;†tul‹GöÄtŽÌ—ÌQRè ƒÄ„ÀtJ‹G¨u¨tO‹ƒ¸ä‚uD‹Ž‹—QRè®ÿÿƒÄ…Àt‹†”‹”PQè”ÿÿƒÄ…Àu‹… C;Ø}:é¹þÿÿ‹–°RèAƒÄ„Àt)Shx IUèNÿÿVèøæÿÿ‹…œƒÄǘ_^]2À[ËL$_°‰1^][Ãì ‹„$T$S3ÉRQ‰L$ ‰L$Q‰D$L$@»QP‰\$ ÿàF…Àu 2À[Ä ÊÃ[Ä ÃVW‹|$ 3ö‹‡ …À~‹œƒ9tFƒÁ;ð|ó;ðuWèáçÿÿ‹ðVhœ IWèƒÿÿƒÄƒþÿt‹œ‹D$‰±‰p‹Æ_^ÃV‹t$Wj‹>WèpO‹FƒÄöÄ…¨u‹‡|…Àt/€8t*‹GT…Àt#‹†<Pè;Ôÿÿ‹OTQhà Iè­‰ÿÿƒÄ ‰†<‹GX…Àt#‹–@RèÔÿÿ‹GXPhÈ I胉ÿÿƒÄ ‰†@‹†°dž|ƒøÿdž€u@‹|$L$QWVè{ŠL$ƒÄ „ÉtWVè©çÿÿƒÄ…ÀuTƆ ë8…ÀƆ t-_^ÃjWè“NƆ ЇhƒÄ„Àt‹T$RVèÔçÿÿƒÄè,H‰† ‰–¤3À_^ËD$ SUV‹t$W‹|$L$‹–pž°PQSRWVèµA‹èƒÄ…í…ˆF3ɋЉ~ ‰ ‰J‰J‰J ‹L$‹‰V‹f‹Qf‰f‹†pPÿÌF‹f‰F‹4ƒøu&‹ ‹–œ‹†˜QVRPè;ƒÄ÷Ø_^À]ƒà[Ã…Àthô IQèíÿÿƒÄ¸_^][Ã_‹Å^][ÃìdSUVW‹¼$„jWè@‹´$€ÆD$&ÆD$'‹¬$ˆŠL$„À•À@QˆD$)‹T$)âÿD$(ƒÂÆD$(RPWUèÏŽÿÿƒÄ…À…Á‹L$‹D$áÿƒÁ;Á…¨T$D$RjPWUèxÿÿƒÄ…À…ƒ|$…t€|$t‹MhDIQésŠD$„À„Ù<…‹þƒÉÿ3ÀÆD$ò®‹¼$|÷ÑI‹ÙƒÉÿò®÷ÑI|$‹Á‹Ë‹Ñˆ\$Áéó¥‹ÊƒÃƒáC󤋴$|ˆD‹È|‹ÑØÁéó¥‹ÊD$ƒáP󤋴$ˆL$ SQVUèßÿÿƒÄ…À…Š;\$…€T$D$RjPVUè—ÿÿƒÄ…À…Wƒ|$…L€|$… ŠD$„À…þ‹þ‹…l3Òf‹•tL$QRPUÆD$,ÆD$-ÆD$.ÆD$/èHÊÿÿƒÄƒøÿu_^]¸[ÄdÃøuL$QUè ÍÿÿƒÄ‹T$…Ò„m‹…À„c‹H ‹ …É„VŠ RˆL$$‹H ‹ ŠIˆL$%‹H ‹ ŠIˆL$&‹@ ‹ŠA‹MQˆD$+èÖÌÿÿf‹•tƒÄRÿÌFf‰D$$D$¾ PL$ VQWU詌ÿÿƒÄ…À…Ü9t$…ÒT$D$RVPWUèbŽÿÿƒÄ…À…§9t$…€|$t‹Mh IQé^ŠD$„Àth‹T$‹D$$âÿRPÿôF‹L$'‹T$&%ÿÿáÿP‹D$)Q‹L$,âÿ%ÿR‹UáÿPQhÐ IR蛊ÿÿƒÄ ¸_^][ÄdÃjWèÐ<ƒÄ3À_^][ÄdËEh  IPéÈ‹Mhx IQ麋•l‹ERhL IPè?ŠÿÿƒÄ ¸_^][ÄdËL$‹T$‹EáÿâÿQRh IPèŠÿÿƒÄ¸_^][ÄdËMhè IQëPh¸ IëE<u ‹Eh| IPë:<ÿu€>u ‹MhÐ IQë&h¤ Ië‹Ehh IPë‹Mh< IQë h I‹UR蕉ÿÿƒÄ¸_^][ÄdÃUV‹t$ W‹= FІ‹.„Àt‹†„Pÿ׃ÄƆ‹†\…ÀtPÿ׃Ädž\‹F …Àt ‹PQèŠÊÿÿƒÄ‹†…Àt VÿЃÄ‹øë3ÿVè;HŠ…jƒÄ„Àu&…ÿu Іü„Àu‹VRh|IUèqˆÿÿƒÄ ‹Ç_^]ÃVèßÿÿƒÄ_^]ÃS‹\$V3À‹3W‹Ž ‹>…Ɉ†tuVÿуăø7ujŠŽý„Ét`h˜IWèˆÿÿVƆüèöþÿÿƒÄ …ÀuAD$PSWèÃáÿÿƒÄ …Àu.ŠD$„ÀtjVèÊÿÿƒÄ…ÀuVèՃąÀu Vÿ– ƒÄ_^[ÃV‹t$W‹|$‹;u}‹N‹G;Èus‹V ‹G ;Ðui‹G‹NPQèoƒÄ„ÀtU‹W‹FRPè[ƒÄ„ÀtA‹O‹VQRèGƒÄ„Àt-‹G‹NPQè3ƒÄ„Àt‹W ‹F RPèƒÄ„Àt_°^Ã_2À^ËL$‹D$…Ét…ÀtPQè †ÿÿƒÄÃ…Àu¸Ã3ÀÃSV‹t$W‹|$‹ŒF‹G ‰F ‹O‰N‹‰‹G…ÀtPÿӃĉF…Àu_^2À[ËG…ÀtPÿӃĉF…Àu_^2À[ËG …ÀtPÿӃĉF …Àu_^2À[ËG…ÀtPÿӃĉF…Àu_^2À[Ë…ÿtWÿӃĉF…Àu_^2À[Ã_^°[ÃV‹t$W‹= F‹F…ÀtPÿ׃Ä‹F…ÀtPÿ׃Ä‹F …ÀtPÿ׃Ä‹F…ÀtPÿ׃Ä‹v…ötVÿ׃Ä_^Ãì,SU‹¬$8VW‹=àF‹E‹Ü‹µØ‰D$Š…ðÇD$¨‰\$$t,…öu(‹…$hXöI‰D$‰…´‰•¸‹D$ÇD$…ÀŽ9‹•ÌÆŠ€‹…Ì„ɉ…”„Œ j PÆD$#‰…˜ÿ˜FƒÄ‰…œ…À„ñ ‹…œ‹•”‹\$‹ð‹½˜+òF+Þ@‰…”+Ç‹|$‰\$‹Ø‹…‹¨Ã;Á|]@É™+ÂÑø;Á‰D$,‰L$,‹L$‹T$,‹½ŒR‹¤P+øÿ¨FƒÄ…À„„‹L$‹T$,‰¤lj‘¨‰…Œ‹ù‹…˜‹ŒSPQÿ0F‹•Œ‹Óˋ‰•Œ‰ƒÄ Æ‹•Œ‰•œ‹‡¤‰… ‹…ˆ…Àu!ƒ½~‹¤QWèNƒÄ„À„¾ ‹… Š€ù „0€ù „,‹ˆ…ÉQ‰•ˆ…”‹¬F½¬µ°WL$4VQh|IPÿӃăø…ò‹D$0€‹Ñ≋\$‹‰ƒð‚ŠƒX‹„À‰‹ø‚t ?uƒ> uÆ…ü‹?ïÌt ƒïdtƒïpu3À‰…(‰…¸½¬ „Õ‹• jRhlIè[ÿÿƒÄ …À„·‹… ‹=¬FµlƒÀVhdIPÿ×ƒÄ …À„”‹D$‹ˆL…Ét9ÿ‹ƒì‰(ÛÝ$Pè›CƒÄ éO‹… WhXIPÿÓƒÄ Ç …À…ýþÿÿ‹ ‹\$QSèƒĄÀ„] ÇÈ‹‹ø3Òƒù•ƒ ‰éÇþÿÿ‹=¬F‹• j RhHI耀ÿÿƒÄ …À„ÿ‹µ ƒÆ Š„Àt;‹=´F‹ ¸Fƒ9~ ¾ÐjRÿ׃Äë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuË‹˜Fj VÿÓ‹øƒÄ…ÿuj VÿÓ‹øƒÄ…ÿ„a‹´F¡¸Fƒ8~ ¾jQÿÓƒÄë¡°F¾‹ŠQƒà…Àt;þvOë΋T$+þG‹‚ƒ‹ßPè¨ÅÿÿKQÿ¤F‹T$ƒÄ…À‰‚ƒ„ˆ‹Ë‹ø‹ÁÁéó¥‹Èƒáó¤‹Ê‹‘ƒÆéÒ‹…°» ;Ã…ˆŠ…ÿ„Àt;‹… h<Ih(IPè“ƒÄ „Àt‹L$høIQÆ…üèöÿÿƒÄéz9°u;‹• h<IhìIRèÀ’ƒÄ „Àt‹D$hÄIPÆ…üè³ÿÿƒÄé7‹ h¼IhìIQè…’ƒÄ „Àt Æ…üé‹• h´Ih IRè\’ƒÄ „ÀtUÆ…þèØ«ƒÄéÜ‹… jPhŒIèm~ÿÿƒÄ …À„‹L$‹AX…À„‹µ ƒÆŠ„Àt;‹=´F‹¸Fƒ:~ ¾ÀjPÿ׃Äë‹°F¾È‹ŠHƒà…ÀtŠFF„ÀuËjVh¤Ièü}ÿÿƒÄ …ÀtÇ…ÀéBjVh„IèÙ}ÿÿƒÄ …ÀtÇ…ÀéjVh|Iè¶}ÿÿƒÄ …ÀuNjVhtIè¢}ÿÿƒÄ …Àu:jVhhIèŽ}ÿÿƒÄ …ÀuSVh\Iè{}ÿÿƒÄ …À„ÌÇ…Àé½Ç…À鮋 jQhLIè?}ÿÿƒÄ …ÀtX‹• µ¨VƒÂh@IRÿ×ƒÄ …Àu‹… VƒÀh4IPÿ×ƒÄ …À„X‹ˆ‹;È…HÆ…¤é<‹t$‹†…Àth‹• j Rh(Iè¿|ÿÿƒÄ …ÀtNjjVè®8‹…XƒÄ …Àu‹…d‹x‹• QƒÂ P‹†RjPVè!jVè²8ƒÄ éÊ‹ jQhIèW|ÿÿƒÄ …ÀtV‹†ä…Àu ІP„ÀtBjÿÌF‰D$$‹… T$$ƒÀRP蜣ÿÿ‰…ÄŠŽPƒÄ „É„a‰†ü‚éZ‹ jQhIèç{ÿÿƒÄ …Àt ‹…¬=‘t'‹• jRhðIèÀ{ÿÿƒÄ …Àt+‹…¬=—u‹ QPUè.ƒÄ …À…© éî‹…¬=,ŒÙ=΋• j RhäIè_{ÿÿƒÄ …À„°Š†Y„À„¢‹½ ‹´FƒÇ Š„Àt5‹ ¸Fƒ9~ ¾ÐjRÿÓƒÄë‹ °F¾À‹ŠBƒà…ÀtŠGG„ÀuË‹µœN;÷r0¡¸Fƒ8~ ¾jQÿÓƒÄë¡°F¾‹ŠQƒà…ÀtN;÷sЊ^F;÷tWÆÿŒF‰…\ƒÄˆ‹t$І[¿„Àt¿Іh„Àt‹•‹… RPjVèüÿÿƒÄ‹‹• QRWVè4~ÿÿƒÄ‰D$(…À…[ ‹…‹ŽƒÈ‰Žƒ‹‹…€Á‰…€‹–¤‰•ŒÇ…éf€ù u@‰… ‹… €8 u@‰… ƒ½¬d…„Š…¼Æ…€„ÀÇ…ˆtp‹äµä3ÀÆ…¼…Év‹½0•è9:t@ƒÂ;Árô;Áuƒù@s‹0‰Œ…è‹@‰‹…ð½ì ¹A‰…ðó¥ëÆ…€½¬¡u‹…ðÆ…¼$ý3Û‰…ð‰ìë3Û‹|$¹Ї[„Àt¹‹‡¤‹µ +ðVPQWèÐ|ÿÿƒÄ;ÉD$(…÷ ‹ƒUΉƒ‹…€Ɖ…€è_†Š…€ƒÄ„À„]‹—¤‰‰•Œ‹…”€8„–j P‰…˜ÿ˜FƒÄ‰…œ…À…õÿÿ‹…‹L$‹|$Á‹¨;Á|F@ ™+ÂÑø;Ã~‹Ø‹‡¤‹µŒSP+ðÿ¨FƒÄ…À„ª‰‡¤ƉŸ¨‰…Œ‹L$‹µ”‹½Œ‹ÑÁéó¥‹Êƒáó¤‹D$‹µŒ‹•‹ˆðЅɉµŒ‰•‹Â…ȃøŽ¿‹D$‹ˆ¤QPè¥ ƒÄ„À…£ˆ…€Ç…„鎋D$Æ…€…Àt Ç…„ësÇ…„‰t$ëcÆ…€ëZЇ^„ÀtÆD$ë‹…(ƒøÿt‰…¸9¸uÆD$ëŠD$„Àt!‹ðŠD$ƒáþ‰è„À‰ð…¡‹…”…À„“Š…€„À……‹D$…ÀŽy‹…È3ÿ;Ç…öE„“9½\t)Š…ü„À…«‹t$hÈIVÆ…õèYwÿÿƒÄë‹t$9½ˆtŠ…¤„Àu ƒ¾ð„˜‹†ä;Çt99½„u1‹•Ä;×~'‹Žè;Ï~ƒèt ;ÑŒƒë;Ñžë‹t$‹ÈA‰ÈІh„ÀtQ9½„t2‹•‹†¤RPjVèy{ÿÿ‹…„ƒÄƒøu%‹L$‹•”QRë ‹D$‹”PQjVèI{ÿÿƒÄŠ…þ„Àt;‹D$‹”T$RPQU裃Ä;Ç)ƒøÿu‹…ð‰½è$þ‰…ð‹…¸ƒøÿt0‹d‹T$Ñ;Ð| +Á‰D$y‰|$‹…ð‰½è$þ‰…ð‹D$‹d؃ì‹Ë‰d‰L$(ÛD$(Ý$VèŽ7Š…þƒÄ „À…§‹D$…Àu‹…„…À„‘‹…„…Àt)Š…õ„Àu‹t$‹•R‹†¤PjVè™xÿÿƒÄë‹D$(‹t$ƒ½„}!Šõ„Éu‹L$‹•”QRjVèexÿÿƒÄ…ÀÇ…„…†ë‹…ðÇ…è$þ‰…ðö…ð„„‹D$$3ÿ;ÇtP‹…0Pè‚£…À„e9½du9½hu‹t$jVèþ4ƒÄë‹t$‹T$‹ø¸ Ð;ωT$…é‹Ð‰üŠô„É…šн„Ét‹•`9BX„›h@UèÚƒÄ;ljD$Žk‰…øŠŽÑ„É„ˆ9¾È‚u&h€ÿ¤F‰†È‚‹ŽÈ‚‹D$ƒÄ;Ï„:3Ò3É;Ç~8‹…üŠ< u‹†È‚AÆDÿ ‹†È‚Æ ë ‹žÈ‚ˆ ‹D$BA;Ð|È;Èt‰L$‹–È‚‰•ü‰ø‹ø‹•üD$$P‹…0QRPUèuÿÿƒÄ;Ç…êІh„Àt‹L$$‹•üQRjVèFxÿÿƒÄ‹…ø‹L$$;Át+Á‰…ø‹…üÁ‰…üë0‹…Љ½ø‰…üŠ…ô„Àt‹…ð‰½ì$ý‰…ð‹½hƒìù‹Ï‰½h‰L$(ÛD$(Ý$VèÉ4ƒÄ ës‰|$‹…ð‰½ì$ý‰…ðëYµä½ì¹AÆ…½ÇÆ…¼ó¥‹ð¾ýÿÿÿ#Ήðè‹,‰…´‹D$#Ɖ•¸‰D$‹t$èl,‰…x‹D$…À‰•|„£‹…,…Àt‹d‰‹…4…À„'‹•h‰éh IWè¬rÿÿƒÄ¸_^][Ä,ËT$h IRèŠrÿÿƒÄ¸_^][Ä,Ë…¬PhxISèerÿÿƒÄ ¸_^][Ä,Ãh\IPèGrÿÿƒÄ¸?_^][Ä,Ë…ð‹Œ$D$þ‰½è_‰…ð^]Æ3À[Ä,ÃhIVèþqÿÿƒÄ¸!_^][Ä,ÃhðIVèpqÿÿ‹”$LƒÄ3À_^]Æ[Ä,ÃhÄIVèKqÿÿ‹„$LƒÄ_^Æ]3À[Ä,Ãøuh°IVè‘qÿÿƒÄ¸_^][Ä,ÃPh„IVèrqÿÿƒÄ ¸8_^][Ä,ÃhdIVèTqÿÿƒÄ_^]¸[Ä,Ê…¼„À„–‹…¸‹´‹•|P‹…xQRPè¢*ƒÄ=è~k‹äµä3ÀÆ…¼…Év‹½0•è9:t@ƒÂ;Árô;Áuƒù@s‹0‰Œ…è‹@‰‹…ð½ì¹A ó¥‹t$‰…ðUèw2ƒÄ…Àt_^]¸*[Ä,Ë•|‹…xRPV講ƒÄ …À…7‹†Œ…Àtm‹t‹•p‹…|Q‹xRPQèÆ)‹È¸ÓMb÷éÁú‹ÂƒÄÁèЋ†Œ;Ð|,‹(‹•dQRh,IVèýoÿÿƒÄ¸_^][Ä,Ë…ð…À…¤Š†^„Àu?‹…l…Àt5‹d;Èt+‹•\…Òu!+ÁPhüIVè¦oÿÿƒÄ ¸_^][Ä,Ê…þ„Àt,‹…`‹@@…ÀtPhÈIVèpoÿÿƒÄ ¸_^][Ä,ÃUè71ƒÄ…Àt_^]¸*[Ä,Ë…ð…À‹”$D”Áˆ 3À_^][Ä,Ãƒì ‹D$S‹\$UŠ‹„Ét‹‹üƒÀôƒÁ ‰‹ü‹‹‹“üQPjRÿ“‹èŠƒƒÄ„ÀunŠƒ„ÀtdVWUhŒID$j Pè³hÿÿ‹»ü‹È‹Ñ+øt$ ‰»üÁéó¥‹ÊƒÄƒáèó¤_;è^~‹ƒüf‹ TóHf‰ (ƒÅ‹Å][ƒÄ ÃÆƒô‹Å][ƒÄ ËD$S‹\$ V‹°DW…öt$‹ƒÉÿ‹ú3Àò®÷ÑIQSRèÕlÿÿƒÄ …Àu ‹v…öuÜjSh”IèºlÿÿƒÄ …À_^•À[Ã_^°[ÃSUV‹t$W¹%®d3À‹ýó«è2'‰E ‰U‹E ‹ÊƒËÿ‰E‰MÆE‰]L‹>—¬‡­B‰Uh‰El‹†$‹Ž0;Á‹Á@j‰Ep‹¤W‰M(Æ…‘è-Wè˜jjWè¥.jjWè‹.ІƒÄ$„Àu=ÆE‹†(…À‰D$~ÛD$ƒìÝ$Wè|.ƒÄ І„ÀuЇ^„À…³U|Ç‹†$;Ãt‰…€‹ ‹…ŒA ‰ ‰…Œ…€Ç‹Ž0;ËtSŠl¿„Ét%‹ž`9{Xu‹M ÆEX‰MP‹M‰MTë'„ÉtÆEY‹Ž0‰„‹0‹ŒF ω0‰Œ½„¹A‹ò󥽈¹A‹ðó¥_^]3À[ÃSV‹t$ 3Û9žtu^¸[ˆ(PVèË—ÿÿƒÄ;Ã…ŽW‹¾Œ;û‰^Dˆž¸‚ˆžÌ‚‰žà‚tUjjVè¦&ƒÄ ;ût'ŠŽÐ‹–‹QRPVèH‰†‹ƒÄ;ûuÙjVè°&‹ŽŒQèkÿÿƒÄ ‰žŒVƆ͂èþ Vè˜,ƒÄ3À_^[Ãì SUV‹t$0W‹FH…Àt!9FD|Ph@IVèMkÿÿƒÄ ¸/_^][ƒÄ ËNDІ]‹=ŒFA„ÀƆ¸‚‰NDt3Іˆ„Àt‹†„Pÿ FƒÄ‹ŽtQÿ׃ĉ†„Ɔˆ‹\$8T$D$ RPh0ISÿ¬FƒÄƒø„¤‹Žt‰\$Qÿ׋ðƒÄ…ö‰t$u _^]¸[ƒÄ Ãh,IVÿäF‹øƒÄ…ÿu‰t$‹þëƒÇ‰|$€;/„á‹5àFj?W3íÿփąÀtÆj/WÿփąÀtÆj/Wÿ˜FƒÄ…Àt@‰D$ëÇD$Š °.:Èu+€{/uƒÃ‰\$8u8Cu€{/u ŠKƒÃE:Ètê‰\$‹D$…Àt!‹ÕM…Òt‹|$j/WÿփąÀtEÆ‹ÅM…Àuæ‹t$S跋ЋþƒÉÿ3Àò®÷ÑI‹ÙLQÿ¤F‹èƒÄ…íu'_^]¸[ƒÄ ÃÆëÀj/Wÿ˜FƒÄ…Àt´Æë¯‹Ë‹ý‹Ñ‹D$Áéó¥‹Êƒáó¤€8/t‹L$…Ét€9tÆ+/CP+Pèu‹L$@‹5 FQÿÖ‹T$(RÿÖ‹t$DƒÄ‰l$8‹ÝëEj SƆ͂ÿ˜FƒÄ…Àt.Sèõ@Pÿ¤F‹øƒÄ…ÿtSWèSÿ FƒÄ ‰|$8‹ßІx„Àt‹†tPÿ FƒÄëƆxShIV‰žtè8hÿÿ‹†ð‚ƒÄ =-tC~i=/b‹Žð¸;ÈtS‰†ðІ^„À¸øIu¸ôIPhÔIVèêgÿÿƒÄ ë(‹†ðƒøtƒøuhœIVèÊgÿÿƒÄdžðjVèÕ'Vè'ƒÄ 3À_^][ƒÄ ËL$3À‹ÑSŠ ³„Ét€ù t€ù?u2Û@ŠJB„Éuë[ÄÛtñƒÀëí‹L$‹D$SVв„Û‹ñt/Š€ù t €ù?u2Òˆë„Òt Æ%@Æ2@Æ0ëÆ+ŠN@F„ÉuÑ^Æ[ÃQSUW‹|$3ÛW‰\$3íLJè ûÿÿƒÄ;Ã…¶VjWèü&D$ L$PQWˆŸyè–Àÿÿ‹ðƒÄ;ó…f8\$t/‹T$SRèè¨ÿÿ‹ðƒÄ;ó…H‹D$PèA´‹ðƒÄ;ó…13ÀЇy;ÃtY‹L$Qè^Ýÿÿ‹ðƒÄ;ó…‹—tRÿŒF‹è‹D$PWèGûÿÿ‹ðƒÄ ;ó„Vÿÿÿ‹L$Qÿ FƒÄ;ó…Ñé;ÿÿÿT$RèÅÝÿÿ‹ðƒÄ;󅵋D$‹HöÅt ˆ˜¼‹D$PèÌ‹ð‹D$ƒÄ‹HöÅt Æ€¼‹D$;óu‹ˆ\;ËtQÿŒFƒÄ‹èë/3íë/Æ€ü‹D$‹ˆ´ƒùÿtQÿìF‹D$Ç€´ÿÿÿÿ‹D$PèkÜÿÿƒÄ;óu!;Ëðu;ët%UWècúÿÿ‹ðƒÄ;óu3íéoþÿÿ;ët Uÿ FƒÄWèﲃÄ;óu;Ãt‹ð‹Æ^_][YÃìSU‹l$VWU‹uÆD$ è—÷ÿÿ‹$ƒÈÿƒÄ;Èu 9…0„ËŠ…„ÀuІ^„À…³…à䉅؊D$„À‰Ü…¹Aµè½à‹•Øó¥¹Aµì‹ûD$ó¥‹ÜP‹…ÔjQRPÇD$$ÇD$(ÿàFƒøÿt…ÀtL$QëT$RUè`ÞÿÿƒÄ…Àuë ÿøFƒ8u ŠD$„À„qÿÿÿ3À_^][ƒÄËD$…Àu¸+ËL$‹T$ ‰ˆ$ŠL$‰(‹T$ˆˆ‹L$‰,‹T$‰ˆ0‰43ÀËD$ S‹\$ VW‹|$ Q‰GÇG ‰_ÿ¤FƒÄ‰…ÀtU3ö…Û~hP/Aè-’‹ƒÄ‰²‹ƒ<°t F;ó|á_^3À[ËÎN…Ét‹j‹²Pè.“ƒÄ‹ÎN…Éué‹Rÿ FƒÄ_^¸[ÃV‹t$ W‹= F‹F…ÀtPÿ׃Ä‹‹L$ PÿQVÿ׃Ä_^ÃVjÿ¤F‹ðƒÄ…öt%‹D$ ‹L$PQVèÿÿÿƒÄ …ÀtVÿ FƒÄ3À^ËÆ^ÃS‹\$U‹l$VWSUè‹L$3ÒƒÄ÷q‹‹<‰|$‹7…öt#‹>SU‹O‹WQR衃Ä…ÀuB‹v…öuá‹|$‹t$ VSUèÃƒÄ …Àt:‹WPRWè!‘ƒÄ …Àt(‹D$_‹H A‰H ‹Æ^][ËD$ ‹L$PÿQ‹ƒÄ_^][Ã_^]3À[ËL$‹D$¸;ÊsV‹ðÁæÆ¾13ÆA;Êrï^ËL$‹D$V;ÈWu‹t$ ‹|$ŠŠ:Âu3Òó¦u_¸^Ã_3À^ÃVj ÿ¤F‹ðƒÄ…öt‹D$PÿŒF‹L$‹T$ƒÄ‰F‰N‰‹Æ^ÃS‹\$U‹l$VWSUè=ÿÿÿ‹L$3ÒƒÄ÷q‹‹‹2…öt‹>SU‹O‹WQRèEÿÿÿƒÄ…Àu‹v…öuá_^]3À[Ë_^][ÃV‹t$W3ÿ‹F…À~‹V‹ ¸Q赋FƒÄG;ø|é‹Rÿ FƒÄ_^ÃQS‹\$ 3À‹K‰D$…É~RUVW‹ ‹,‹u…öt4‹‹~‹‹D$RPÿT$(ƒÄ…ÀtSVUè΋C ƒÄ H‰C …ÿ‹÷uЋD$‹K@;Á‰D$|´_^][YÃV‹t$…ötVèAÿÿÿVÿ FƒÄ^ÃV‹t$W3ÿ‰¾ð‰¾ø‰¾‰¾‰¾Ø‰¾‰¾ô‰¾ü‰¾‰¾ ‰¾Ü‰¾‹†ƒ‰¾ð‚;lj¾ø‚džü‚ÿÿÿÿt Pÿ FƒÄ‰¾ƒ‰¾ƒ‰¾ƒ_3À^ËL$V‹ÑWâð3ö3À3ÿút*ú tú0u‹D$…Àu_¸+^ËT$‹ò…Òëì‹T$…Ò‹útäù0M„-ù ±„šù atNét,ƒétƒéu¤‹D$ ‹ˆ@3À‰_^ËT$ ‹‚ƒ‰_3À^ËL$ ‹t…Àu¸õI‰_3À^ËT$ _‹‚ð‚‰3À^Ãé tI…Hÿÿÿ‹L$ _3À‹‘ƒ‰^ËD$ _‹ˆƒ3À‰^ËT$ _‹‚‰3À^Ãòÿßÿƒø ‡ÿÿÿ3ÉŠˆè5Aÿ$Ð5A‹T$ _‹‚ô‚‰3À^ËL$ _3À‹‘ü‚‰^ËD$ _‹HD3À‰^ËT$ _‹‚ ƒ‰3À^ËL$ _3À‹‘ƒ‰^ËL$ _^‹‘؉‹‰Ü‰H3ÀÃÁüÿÏÿƒù‡|þÿÿÿ$ô5A‹L$ _^‹‘ð‰‹‰ô‰H3ÀËL$ _^‹‘ø‰‹‰ü‰H3ÀËL$ _^‹‘‰‹‰‰H3ÀËL$ _^‹‘‰‹‰ ‰H3ÀËL$ _^‹‘¸‰‹‰¼‰H3ÀËL$ _^‹‘°‰‹‰´‰H3ÀËL$ _^‹‘à‰‹‰ä‰H3ÀËL$ _^‹‘艋‰ì‰H3ÀËL$ _^‹‘ ‰‹‰¤‰H3ÀËL$ _^‹‘¨‰‹‰¬‰H3ÀËL$ _^‹‘‰‹‰‰H3ÀÃI>4AO4A-4A]4An4A$3A¯4AÉ4Aã4A5A15AK5Ae5A$3A$3A$3A$3A5A™5Aý4A$3A³5Aì SUVWjÇD$ ÿÌFj,‰D$(ÆD$ÿ¤F‹ØƒÄ…Û‰\$„% ¹ 3À‹ûó«Š„$0 „À„ ‹´$4 ‹=˜Fj;Vÿ׋芃ĉl$„Àt9‹ ¸Fƒ9~¾ÐjRÿ´FƒÄë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuÇj=Vÿ׃Ä…À„·…ít;膫„$$L$$PQhŒIVÆ„$4ÆD$4ÿ¬FƒÄƒøŒ±¼$$ƒÉÿ3Àò®÷ÑI‹ñtF‹¸Fƒ:~¾„4#jPÿ´FƒÄë‹°F¾Œ4#‹ŠHƒà…Àt Æ„4#Nuº´$$‹ ¸Fƒ9~¾jRÿ´FƒÄë‹ °F¾‹ŠBƒà…ÀtFëÌD$$Ph„IèYÿÿƒÄ…ÀtVÿŒFƒÄ‰C éóL$$Qh|IèuYÿÿƒÄ…À„ÚŠ‹Æ€ù.½uF‹=˜Fj.Pÿ׃Ä…Àt@E…Àuî¿`I‹VRèӃĄÀu ƒÇÿ|IråëEƒý}$‹„$( VhLIPÆD$èñYÿÿ‹l$$ƒÄ éd‹„$8 …Àt4‹ÈQVèƒÄ„Àu$‹”$( VhIRÆD$è²Yÿÿ‹l$$ƒÄ é%Š‹Æ€ù.uFPÿŒF‹l$ƒÄ‰CÆCéÿD$$PhDÒHèXÿÿƒÄ…ÀtVÿŒFƒÄ‰C é×L$$QhIèYXÿÿƒÄ…Àt-VÿŒF‰C$ŠƒÄ€ù"u@PÿôF‹L$$ƒÄÁ‰Cé”T$$Rh IèXÿÿƒÄ…Àt$VÿŒF‰CD$$Œ$(PQè“ÿÿƒÄ ‰CëZ‹C…ÀuS‹=ŒFT$$Rÿ×V‰Cÿ׃ĉCë8„$$PhIVÿ¬FƒÄ …ÀtŒ$$QhøIèœWÿÿƒÄ…ÀtÆC(…ít€}tyu…öt<‹=´FŠ„Àt0‹¸Fƒ:~ ¾ÀjPÿ׃Äë‹°F¾È‹ŠHƒà…ÀtFuÊ‹=˜Fj;Vÿ׋èƒÄ…í‰l$…˜üÿÿ€>tUVÿ׋èƒÄ…í‰l$…~üÿÿŠD$„À…Ê‹C…À„¿‹C…Àu‹„$8 …Àt PÿŒFƒÄë3À‰C‹C …ÀuS‹´$< …ötHj/VÿàFƒÄ…Àt8+Æ@‹èMQÿ¤F‹T$ƒÄ…À‰B t‹Í‹ø‹ÁÁéó¥‹Èƒáó¤‹Ê‹Q Æ*‹Œ$, ŠA„À…gŠQ„Ò„\‹T$‹r…ö…QR蘃Ä3À_^][Ä ËC‹5 F…ÀtPÿփċC…ÀtPÿփċC …ÀtPÿփċC…ÀtPÿփċC…ÀtPÿÖƒÄSÿÖƒÄ3À_^][Ä Ë´$4 €>#„å‹=˜Fj Vÿ׃Ä…ÀtÆj Vÿ׃Ä…ÀtÆD$PhôIVèš‹ðƒÄ …ö„¤j:Vÿ׃Ä…À…”‹-ŒF‹þ3Ûƒû‡ ÿ$°?A€?.uGWÿÕ‹L$ƒÄ‰AéíhìIWè@Uÿÿ‹T$ƒÄˆBéÓ‹÷¸ìIŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…ÀtC‹÷¸äIŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…ÀtWÿÕ‹L$ƒÄ‰A ë\hT IÿÕ‹T$ƒÄ»‰B hìIWè™Tÿÿ‹L$ƒÄˆA(ë/WÿôF‹T$ƒÄ‰BëWÿÕ‹L$ƒÄ‰Aë WÿÕ‹T$ƒÄ‰BD$PhôIjèM€ƒÄ ‹øC…ÿ…ÌþÿÿƒûuhõIÿÕ‹L$ƒÄ‰Aéªýÿÿƒû„¡ýÿÿ‹T$RèaƒÄ3À_^][Ä ËT$ˆB)‹)…íÆD$„r‹t$‹M‹FPQèÚSÿÿƒÄ…ÀtW‹E…Àt‹N…ÉtQPè¾SÿÿƒÄ…Àt;ë …Àu5‹F…Àu.‹E …Àt‹N …ÉtQPè•SÿÿƒÄ…Àu#ë …Àu‹F …ÀtÆD$‰l$‹m…í„ô뀊F)ÆD$„ÀuXŠE)„ÀtQ‹|$‹5 F‹G…ÀtPÿփċG …ÀtPÿփċG…ÀtPÿփċG…ÀtPÿÖƒÄWÿÖƒÄ3À_^][Ä ËD$‹U‹ F‰‹E…ÀtPÿӃċE…ÀtPÿӃċE…ÀtPÿӃċE …ÀtPÿӃċE…ÀtPÿӃċE …ÀtPÿӃċE$…ÀtPÿӃċD$¹ ‹ð‹ýó¥PÿӃĉl$‰l$‹m…íuõ‹¼$, ŠG„ÀtBŠD$„À¸ØIu¸ÐI‹t$‹N‹V Q‹NR‹VQ‹NR‹”$8 QPh˜IRèSÿÿƒÄ ë‹t$ŠD$„Àu ‹D$…Àt‰0‹G @‰G ‹Æ_^][Ä É7‹G @‰G ‹Æ_^][Ä ÃSÿ FƒÄ_^]3À[Ä ËÿVÿӃċ÷…ÿu—_UÿÓƒÄ^[]ÃQV‹t$ …öWÆD$ „‹F …À„û‹|$WhôÏHè’MÿÿƒÄ…À„ç¡”FÆD$ ƒÀ ‰D$‹L$QhÈIÿF‹6ƒÄ…ö„SU‹F…À‰D$uÇD$õIŠF(»ìI„Àu»äI‹F …À‹èu½T IŠV¿ìI„Òu¿äI‹F…À‹Èu¹ÀI„Òt…Àt Џ¼I€ú.u¸õI‹T$R‹VR‹VRSUWQP‹D$8h¤IPÿ,F‹6ƒÄ(…ö…gÿÿÿ][ŠD$ „Àu‹L$QÿÜFƒÄ_3À^YÃh@ÒHWÿÐFƒÄ‰D$…À…ÿÿÿ_¸^YÃÿ%èFÌÌÌÌÌÌÌÌÌÌÿ%PF‹T$‹D$L$‰D$Qh~f€RÿFÃ싌$¸ÓMb÷éÁú‹ÂVÁèЋ´$‰T$‰´$’Ç„$‰t$ÇD$ €€Áâ+ÊT$ ‰L$QR€N€Áà‰D$„$PjQÿàFƒøÿu À^ÄÃ…Àu ¸^ÄÃT$ RVèñz÷ØÀ^ƒàÄðÃì,SUV‹t$‰|$ è‰D$$‹D$T‰T$(ÇD$à“Æ‹‡Œ…Àu‹‡…À„ˆ‹‹—QRèÕRPèî‰D$,‹‡ŒÛD$,ƒÄ…Àt‹…Ét ;Á|‰ë …Àu‹‡€€€Áà‰D$èÉú‹L$+ȉL$yh\IWèLÿÿƒÄ¸_^][ƒÄ,ˇ|…Àt ‹†Œ‰D$ë ‹Žl‰L$І¹$I„Àu¹õI„À¸ Iu¸õI‹T$HRQ‹L$ QPhüIWè'Kÿÿ‹T$\ƒÄ‹‹H ƒ9uhäIWè{KÿÿƒÄ¸_^][ƒÄ,ÃÎÿ3Û‰\$ÇD$ë‹|$ ‹T$D‹‹H ƒ<™„ÑjjjÿF‹èƒýÿ„v‹D$@‹‹Jh…ÉtUPèփąÀ…OjUèSýÿÿ‹L$L3À‰D$4ƒÄ‰D$0‰D$4‰D$8‹‹P ‹ š‹‹L$H‰T$0f‹@Qf‰D$0ÿÌFT$,jRUf‰D$:ÿüF‹ðƒþÿuTèéüÿÿƒø t)=2'~=4'~‹L$P‹D$ PQh¸IWè€JÿÿƒÄë!ƒ¿uÇD$‹T$RUèÏüÿÿƒÄ‹ðƒþu ƒ¿tnë…öuUèpýÿÿƒÄ„À…œƒÎÿUÿìFè–‹L$$‹ø‹D$(‹ÚPQSWè¡‹L$ ƒÄ+ȉL$xr‹T$‹L$BA‰\$(‰|$$…ö‰T$‰L$‹Ú…†þÿÿ‹D$P…Àt‹L$D‹‹J ‹™‰‹D$L…Àt‰(3À_^][ƒÄ,Ãh IWè©IÿÿƒÄ¸_^][ƒÄ,ËT$TÆ벋D$‹L$ @Ph€IQè{Iÿÿ‹\$ ‹|$,ƒÄ …ötŽ‹T$LhpIWÇÿÿÿÿèWIÿÿƒÄ¸_^][ƒÄ,Ãì(ƒÉÿ3ÀSUV‹´$8W‹.‹Uh‹úò®÷ÑIùÿƒ‰D$ õIˆD$8¹?3À|$9ó«‹ÔFRf«ªÿÓ‹UhƒÉÿ‹ú3Àò®÷ÑIƒùvOL$QPRVè‡ÿÿƒÄƒøuT$RV舊ÿÿƒÄ‹D$…Àt$‹}hƒÉÿ3ÀT$8ò®÷Ñ+ù‹Á‹÷‹úÁéó¥‹Èƒáó¤ŠD$8„À„†L$8QhlIUèýGÿÿƒÄ T$8RÿӋ؃ûÿ„N‹D$…À„;‹0PU裉ÿÿ3À|$ ‰D$ƒÄ‰D$‰D$j‰D$$‹V ¿N ‹2‹ÁÁéó¥‹Èƒá󤋴$DL$QVfÇD$ ‰\$$fÇD$"ÿF…À|HT$$D$(RPVÇD$0ÿF…À}hTIUèÀGÿÿƒÄ¸-_^][Ä(Ã_^]3À[Ä(Ë5øFÿÖ‹ƒø?t1ƒè t ƒètHuAÿÖ‹Qh$IëvÿÖ‹RhôIëjÿÖ‹PhÜIë^ÿÖ‹Qh¼IëRƒøt0ƒø&t=6't ÿÖ‹Rh°Ië5ÿÖ‹PhxIë)ÿÖ‹Qh`IëÿÖ‹RhLIëD$8PëL$8Qh(IUèúFÿÿƒÄ _^]¸-[Ä(Ãÿ%äFÌÌÌÌÌÌÌÌÌÌVÿÄF‹È¸ÓMb÷áÁê‹t$’‰€€Áà+ȉ€ €¸Áá‰N^ÃìD$jPè±ÿÿÿ‹D$‹T$ ƒÄËL$‹D$+ȸÓMbÁó÷é‹L$ Áú‹ÂÁèЋD$+Á€€ €ÊËD$ËD$ƒètÿøFÇ?'ƒÈÿËD$ ‹L$PQèƒÄÃìSU‹l$V3ÛW¾uE;ó‰\$|$ˆ\$tmVh´Fÿ˜FƒÄ…Àt43ÉŠ ‰Ñáé´FÈùÿwA…Ûˆu+‹D$@ƒø‰D$-»ëƒþ.u!…Ûtƒ|$tG3ÛÆ¾uE…öušƒ|$} _^]3À[ƒÄËD$ ‹L$_^‰]¸[ƒÄËT$‹B…Àu¸ËL$V¾W‹8Óæ…÷t‹pV‹t$VQRÿPƒÄ_3À^ËT$‹B…Àu¸ËL$V¾W‹8Óæ…÷t ‹pVQRÿP ƒÄ _3À^Ã줋„$¨S‹´FV‹´$´W‹8Љ|$ „Àt5‹ ¸Fƒ9~ ¾ÐjRÿÓƒÄë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuËjVhÌIèCÿÿƒÄ …À„tUWƒÆè‹-ŒFƒÄë‹|$Š„Àt5‹ ¸Fƒ9~ ¾ÐjRÿÓƒÄë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuËD$4L$PQh¸IVÿ¬FƒÄƒø…åT$h°IRèeBÿÿƒÄ…ÀtD$4PÿՃĉ‡Ð‚é†L$h¨IQè:BÿÿƒÄ…ÀtT$4RÿՃĉ‡Ô‚ë^D$h IPèBÿÿƒÄ…ÀtL$4QÿՃĉ‡Ø‚ë6T$h”IRèêAÿÿƒÄ…Àt D$4hˆIPèÔAÿÿƒÄ…Àt LJ܂|$ƒÉÿ3Àò®÷ÑI|$4‹ÑƒÉÿò®÷ÑIΊDt<,…ÀþÿÿFéºþÿÿ‹—Ђ3À…Ò]_•À^@[ĤÃ_^3À[ĤÃì|SUVW‹¼$‹7ƒ¾Ü‚u2‹†Ô‚‹ŽÐ‚‹—”P‹†Ø‚Q‹RPQh@Ièª<ÿÿƒÄë"‹—”‹†Ø‚‹RPQh4Iè†<ÿÿƒÄ‹ØT$SRèöqS‹ FÿÓD$PL$PQ辋”$¬‹„$¨RPh,IèD<ÿÿ‹èL$0UQè·qUÿÓT$LD$ƒÄ …À…‹|$$ƒìÇÛƒ˜Ý$Sè§éÿÿ‹Ž´WQjjjÿjÿVèqÃÿÿƒÄ(…À„Þ_^][ƒÄ ʃ^„À…ÈІƒÏÿ„ÀÆD$4‰|$,„1‹†„…À„#T$jRPƒÍÿÿìF‹L$$ƒÄ …É‹øtFŠ„Àt@‹¸Fƒ:~¾ÀjPÿ´F‹L$ ƒÄë¾Ð¡°F‹ŠPƒà…Àu€9-uA‰L$uºT$(jRQÿìF‹L$4‰D$(‹D$$ƒÄ ;Áu ÇD$ÿÿÿÿëƒ|$ÿu…ÿ|Wh€IS‰¾ˆèŒ&ÿÿƒÄ ëL…ÿ}#‹Ç‰¾ˆ÷؋艆¸Uh`ISèe&ÿÿƒÄ ë%‹l$‰¾ˆ+ïEPWh<IS‰†¸è>&ÿÿƒÄ‹L$UQWh ISè)&ÿÿ‹T$$‹|$@ƒÄ‹êÆ‚°ŠƒT„À…²‹… …À„¤ŠƒSPVèlƒÄ…À…K‹ƒÜ…ÀtPVè€ûÿÿƒÄ…À…/‹• L$,QRVèËL$8ƒÄ …Àu+‹“L…Òt;Ê~h\ISèÿ%ÿÿƒÄ¸?_^][ƒÄ Ëù‹–ˆ…Ò„ù…ÀthèISè`%ÿÿƒÄë=…Ò}‹Â÷Ø;È|‹ø+Ï‰Žˆë%;Ê}QRhÀISè¢%ÿÿƒÄ¸$_^][ƒÄ Ã+Ê‹ù…ÿu.WjÿWWjÿjÿVèûÀÿÿhœISè%ÿÿƒÄ$Æ…±3À_^][ƒÄ ˆˆPhpISèÚ$ÿÿ‹ŽˆQhhIVèHƒÄ…À…'T$D$ RVPè]ðÿÿƒÄ …À… |$^t"‹°QhPISèö$ÿÿƒÄ ¸_^][ƒÄ Ë• RhHIVèäƒÄ …ÀtU_^][ƒÄ ÃjVÆD$<èȃąÀ…§‹ƒô…ÀuŠƒT„À¸@Iu¸8IPh°ðHVè“ƒÄ …À…rD$L$ PVQè¨ïÿÿƒÄ …À…W‹D$=–tGƒø}tBŠL$4„Ét=Âu_Æ…±^]3À[ƒÄ Ó°Rh°ðHSè$ÿÿƒÄ ¸_^][ƒÄ ÊD$4ÇD$ÿÿÿÿ„À…—ŠƒS„À…‰ƒÿ€»¬h0IWÿäF‹èƒÄM…Àtm‹Å+ÇH‰D$4tDŠE<(t=‹ ¸Fƒ9~¾ÐjRÿ´FƒÄë‹ °F¾À‹ŠBƒà…Àt*‹D$4MH‰D$4u¼…ítEUÿôFƒÄ‰D$ë ƒÿÿ~‰|$ŠƒV„Àt‹†´PVSèOƒÄ …Àu2‹|$WhISè¸"ÿÿ‹L$0‹–´jjÿQjWRVè¾ÿÿƒÄ(…Àu3À_^][ƒÄ Ãì V‹´$0D$WPjL$,jVQR‰t$<ÇD$8ÇD$ ÇD$$ÿàFƒøÿ„…Àt|D$L$PQVÇD$ÿFT$D$RPVÿ$FV‹øÿìFƒÿÿu‹Œ$,h¬IQëQ‹”$,hˆIRè×!ÿÿ‹„$8jW‰¸´è‚ÔÿÿƒÄ3À_^Ä ËŒ$,h\IQë ‹”$,h4IRè"ÿÿƒÄ¸_^Ä ÃSŠ\$ V‹t$ W¸4ÕH‹>„Ûu¸ìÓHPhøIVèÙ ƒÄ …ÀuPD$L$PVQèòìÿÿƒÄ …Àu9|$Èt-„Û¸ðIu¸èIPhÐIWè‡!ÿÿƒÄ öÛÛ_ƒã ^ƒÃ‹Ã[Ã3À_^[ËD$VW‹|$ PhI‹7WƬèR ƒÄ …Àu>L$ T$QWRèkìÿÿƒÄ …Àu'|$ ÕuƒÆVÿôF‹L$ƒÄ‰_3À^ø _^Ãì S‹\$UV‹ƒ`‹³x3íW‹;UUWÆD$‰|$ ‰D$,ǃ(ÿÿÿÿèâÿÿUUWèîáÿÿUUWèFâÿÿUUWèþáÿÿj/Vÿ˜F‹øƒÄ8…ÿtm‹“x‹Î+Ê…É~ …íÆD$tÆD$‹×+Öt6‹D$%ÿ‹È+Î+ðÏQVè4ÿÿ‹T$(ƒÄ…À‰DªtvEwƒýc’ëwj/Vÿ˜F‹øƒÄ…ÿu“‹|$ ‰· Š„À„jVè³3ÿÿƒÄ‰‡ …À…Wèìôÿÿ‹L$h IQèÝÿÿƒÄ ¸_^][ƒÄ ËD$h IPè¾ÿÿ‹L$(Qè´ôÿÿƒÄ ¸_^][ƒÄ ËT$hIRè•ÿÿ‹D$(Pè‹ôÿÿƒÄ ¸_^][ƒÄ ÃLJ T$RSè–‹ðƒÄ…öutŠD$„Àt SèÿôÿÿƒÄ‹ð…öt‹ƒ´…À|PÿìFǃ´ÿÿÿÿЇ±„ÀtjjÿjjjÿjÿSèºÿÿƒÄ‹ð_^][ƒÄ ÊD$„Àu‹Æ_^ƃ][ƒÄ ÃWèãóÿÿƒÄ‹Æ_^][ƒÄ ÃQS‹\$ UV‹«`W‹;3ö‰l$‹‡Ô…ÀtPSèèóÿÿ‹ðƒÄ…ö…—Šƒý„Àt‹…¤…ÀtPSèð ‹ðƒÄ…ö…o‹ME…Ét(‹è‹PSèÎ ‹ðƒÄ…ö…M‹MƒÅ…É‹ÅuÞ‹l$ЇP„Àu‹‡ä…À„€‹… …ÀtvPSè(‹ðƒÄ…öt ƒþ…‹—ä…ÒtS‹ü‚…É~;‹‡è…À~1ƒêt ;È}6hðIë ;È~+hÄIWèYÿÿƒÄÆ…±3À_^][YÃhèIWè<ÿÿƒÄЇ^„À„9Š[„É„‹ …É„ Æ…±ŠSQSè{ûÿÿƒÄ…À…^‹… T$RPSèîûÿÿƒÄ …Àu,‹L$·¬QhÐIVèÿÿjVjWèÆÿÿƒÄ…À…jhÈISè ƒÄ …À…T$D$RSPè3èÿÿƒÄ …Àu$|$^ujh°IjWèsÿÿƒÄ…À…ÆŠ‡P„ÀtA‹ü‚‡ü‚…É|1PÿFPh„I·¬hÿ?Vÿ<FjVjWè$ÿÿƒÄ$…Àu{_^]3À[YÄÀt‹Æ_Æ…±^][YʇV„Àt,Sè‚‹ðƒÄ…öuEhTIWèÎÿÿ‹L$$ƒÄ‹Æ_^]Æ[YËl$USè‹ðƒÄ…öu€}th,IWè—ÿÿƒÄ‹Æ_^][YËD$ƒìSVW‹|$,Ph| I‹7WƬèÞƒÄ …À…èL$,T$$QWRèóæÿÿ‹ØƒÄ …Û…É‹D$,=Õt>=&t‹h\ IPèÿÿƒÄ‹Ã_^[ƒÄËh@ IQènÿÿƒÄ»‹Ã_^[ƒÄÃT$0D$ RL$PT$QD$$RL$,PQVh$ IRÿ¬FƒÄ ƒøuKjÿÌF‹L$‹T$‰D$$‹D$4P‹D$Q‹L$$R‹T$,PQRh IVèÃÿÿD$DPVè(Aÿÿ‹ƒÄ,‰ü‚‹Ã_^[ƒÄÃì4 õISUVWˆD$D‹¬$H¹?3À|$Eó«‹]3Òf«‰T$ˆT$ª‹Cd…ÀtpPÿÔF‹SdƒÉÿ‹ú3Àò®÷ÑIƒù~#L$QPRUèºXÿÿƒÄƒøuT$RUè'\ÿÿƒÄ‹T$…Òt*‹{dƒÉÿ3Àt$Dò®÷Ñ+ù‰t$‹Á‹÷‹|$Áéó¥‹Èƒáó¤ŠD$D„Àu6‹…°L$T$,QRPÇD$$ÿF…À} hTIé'‹T$ÆD$…ÒtRSè9[ÿÿ‹D$ƒÄ…Àu+ŠD$„Àu#L$DQh(ISè¶ÿÿƒÄ ¸_^][Ä4ÃjjjÿF‹è3Ò;êŒÀ‹„$H‰¨´ŠD$„Àu>‹D$3ɉL$,|$0‰L$0‰L$4‰L$8‹¿H ‹@ ‹0‹ÁÁéó¥‹Èƒáó¤fÇD$,‰T$0L$,jQUf‰T$:ÿF…ÀŒKT$D$RPUÇD$$ÿF…À} hTIé0‹L$QÿôFjU‹ðÿF…À} h饋D$T$,Rj‹H‹PQ‹HR‹PQRWÿT$DƒÄ…ÀtPÿÕPh#IVèä ÿÿƒÄÇD$'éS‹D$,PWÿT$8‹èƒÄ…í‰l$„8ë‹l$‹\$4UWÿÓjhø"I‹ØjV‰\$@è6 ÿÿjSjVè+ ÿÿjhŒÏHjVè ÿÿL$PQUWÿT$|‹ØƒÄD…Û„œSUWÿT$HƒÄ ‰D$0…Àtmƒ8th‹è‹øjhôIjVèÚ ÿÿjSjVèÏ ÿÿjhô"IjVèÀ ÿÿ‹UjRjVè² ÿÿƒÄ@jhŒÏHjVè  ÿÿ‹GƒÇƒÄ‹ï…Àu¨‹l$‹|$@‹D$0PÿT$H‹D$PUWÿT$X‹ØƒÄ…Û…dÿÿÿjhŒÏHjVèY ÿÿS‹\$`ÿÓ‹L$u¾ä$I…ít€}t UÿôFƒÄ‹“°WVh¸$ISRèùÿÿƒÄéËj:W‹=˜Fÿ׃ĉD$…ÀtS@j:P‰D$ÿ׋ðƒÄ…öt+ÆFj:Vÿ׋èƒÄ…ítÆEEj:Uÿ׋øƒÄ…ÿt ÆGë‹|$‹D$…Àt ‹Ð€:uë‹|$‹D$hè$IPèåÿÿƒÄ…öt€>u¾ä$I…ít€}u½¼I…ÿt€?t WÿôFƒÄ‹L$‹“°QUVhŒ$ISRè)ÿÿƒÄ‹ð…öt‹D$h%IPèÿÿƒÄégþÿÿ‹‹°jƒ|jÿPjjÿQéAþÿÿ_^]3À[ƒÄÃV‹t$‹†`‹ˆ¨Qè™ÿÿ‹–`Rÿ FƒÄdž`3À^ÃìHSUV‹t$XWV‹¾°‹.‰|$ŬèƒÄ…À…w‹ž`VèփąÀ…`ÿ(Fjö‰D$ÿtF‰D$‰D$$‹D$j!PW‰D$4ÿøFƒøÿu_^]3À[ƒÄHË|$jÿD$(jPjÿHFƒètzHuç‹T$L$,QRWÿFƒøÿtÑöD$,tND$Phÿ?UWVè„ÿÿ‹L$$QUVè‹”FƒÂ RÿÄF‹ƒÄ$…Àt‹C…ÀuVè"ƒÄÇCöD$, uépÿÿÿ‹L$D$jPhÿUQ‹ýÿLF…Àt\‹D$‹ÐH…Ò‰D$„;ÿÿÿŠG€ùÿˆL$\¸u ˆL$]¸L$ T$\QP‹†°RPVèùÿÿ‹D$$ƒÄ‹ÈH…ɉD$u¼éòþÿÿjjÿjjjÿjÿVèðŸÿÿƒÄ3À_^][ƒÄHÃh¸ÿ¤F‹ÐƒÄ…Òu¸ËD$W¹®‹ú‰`3À󫉂´¸Ь‰‚‰‚‰‚‰‚‰Š¬3À_ÃS‹\$VW‹ƒ`3ö¸ƒ¿ôÿÿu jVSè)ƒÄ ƒ?u jVSèƒÄ FƒÇƒþ(|Ñ_^[ËL$ V‹t$ƒù‹L$ ‹†`‹”ˆ uAƒêt ƒêt@Jun‹”ˆ…ÒucÇ„ˆ^ÃQhýVÇ„ˆ èEƒÄ ^ÃJtJtÆJu1‹”ˆJu'Ç„ˆ^ÃQhþVÇ„ˆ è ƒÄ ^ÃQŠD$S‹\$V‹t$jL$ j‹–°QRÆD$ÿˆ\$ˆD$ÿèF‹D$‹PShh(IQè ƒÄ^[YÃV‹t$Іh„À„ö‹L$ùÿuB‹D$=ìr!;Áw‹…\"I‹L$ PQh¨(IVèúÿÿƒÄ^ËT$ PRhœ(IVèäÿÿƒÄ^Ãùûu¸t&Ië/ùüu¸l&Ië ùýu¸h&Ië3Àùþ•ÀH%`&I‹T$…ÀtMƒú' ‹ •l%Ië úÿu ¹”(I…ÉtQP‹D$Phˆ(IVèhÿÿƒÄ^ËL$ RPQh|(IVèQÿÿƒÄ^ËD$ RQPhp(IVè:ÿÿƒÄ^ËL$ V‹t$ƒù‹L$ ‹†`‹Tˆu>ƒêt ƒêt=Juh‹”ˆ…Òu]Ç„ˆ^ÃQhûVÇDˆèKþÿÿƒÄ ^ÃJtJtÉJu.‹”ˆJu$Ç„ˆ^ÃQhüVÇDˆèþÿÿƒÄ ^Ãì„‹„$ˆSUVŠˆ‹°`W‹8„ɉ|$»tA‹€Œ$”Ph)IhQèÆúþÿ‹†¨”$¤RPè‚ÿþÿƒÄ‰†¨‰ž¤‹¿à…ÿ„ø‹-0F‹Œ$”T$QRh)IPÿ¬FƒÄƒø… L$hü(IQèéþþÿƒÄ…Àt(”$”j†RPÿÕƒÄ Æ†'‰žhé‚L$hô&IQè«þþÿƒÄ…Àt%”$”j†(RPÿÕƒÄ Æ†§‰ž”ëGL$hô(IQèpþþÿƒÄ…ÀtY”$”RÿŒFƒÄ…Àt4P‹†¨Pè‡þþÿƒÄ‰†¨‰ž¤‹…ÿ…ÿÿÿ_^]3À[Ä„Ã_^]¸[ĄˋT$QhØ(IRè^ÿþÿƒÄ ¸0_^][ĄˋL$Ph´(IQè9ÿþÿƒÄ ¸1_^][Ä„ËD$ U‹l$‹ÈVH‹µ`W‹}…É„5‹T$@S‰D$3Ûë‹T$Š BˆL$‹†´ƒø‰T$‡ùÿ$…—A‰ž´ŠD$:ÄàT$jRjWèMÿÿƒÄéÉ€ùÿudž´éµ€ù u dž´D$jPjWèÿÿƒÄé‹L$áÿQhûhD)IWè ûÿÿÇ‹T$$âÿRU蹃ÄéO‹D$%ÿPhühD)IWègûÿÿÇ‹L$$áÿQUèPƒÄé‹T$âÿRhýhD)IWè-ûÿÿÇ‹D$$%ÿPUè·ƒÄéÝ‹L$áÿQhþhD)IWèôúÿÿÇ‹T$$âÿRUè=ƒÄ飀ùÿudž´é•‹–¬†¬;Ѓˆ ‹A‰éu€ùð„$€ùÿ†¬„û‹;Ðs Æÿ‹A‰ŠL$‹;Ðsˆ ‹A‰‹–¬ƒé‰‰Ž°‹D$%ÿPhÿh$)IWè=úÿÿUè'ƒÄdž´‹D$%ÿˆÿÿÿƒùwrÿ$<—Adž´éÔdž´éÅdž´é¶Ç†´é§Ž¬dž´‰Ž¬éŒT$jRjWèùþþÿƒÄërPhÿhD)IWè“ùÿÿƒÄë\‹;ÈsÆÿ‹A‰dž´ëH‹Ž¬†¬;ÈsÆÿ‹A‰‹;ÈsÆð‹A‰‹–¬ƒéU‰Ž°‰è%ƒÄ‰ž´‹D$H‰D$…Úüÿÿ[_^]Ã;”A–Au”A¯”Aè”A!•A”A[•A•A]–A!–A0–A?–AN–Ax–A‹D$V‹t$‹Ž`‹” ƒêtƒêt7Juh‹”ƒêtJuYÇ„ Ç„^ÃÇ„ ^Ë”ƒêt*Ju%Ç„ Ç„PhþVèø÷ÿÿƒÄ ^ÃÇ„ ^ÃW‹¼º;ú_uÐPhýV‰” èÁ÷ÿÿƒÄ ^ËD$V‹t$W‹Ž`‹” JteJt7Juy‹”3ÿ+×tHJuiPhýÇ„ V‰¼èb÷ÿÿƒÄ _^Ë”3ÿ+×tJu5‰¼ ‰¼_^ɼ _^ÃPhþVÇ„ è÷ÿÿƒÄ _^ËD$V‹t$‹Ž`‹Tƒêtsƒêt1Ju_‹”ƒêtJuPÇDÇ„^ÃÇD^Ë”ƒêt'Ju"ÇDÇ„PhüVè”öÿÿƒÄ ^ÃÇD^ÃW‹¼º;ú_uÓPhûV‰TècöÿÿƒÄ ^ËD$V‹t$W‹Ž`‹TJt\Jt4Jum‹”3ÿ+×tBJu]PhûÇDV‰¼èöÿÿƒÄ _^Ë”3ÿ+×tJu,‰|‰¼_^É|_^ÃPhüVÇDèÉõÿÿƒÄ _^Ãì SU‹¬$ VW‹½`‹]‰\$‹‡°‹·¬+ƬƒÀPQjòþÿ‹Ÿ¨ƒÄ…Û¾th‹ƒÉÿ‹ú3Àò®÷Ñ<1ÿú}ID$Œ$”PQhp)IRÿ¬FT$$„$¤Rj¹Pj+Îhd)I”48QRèÐñþÿƒÄ,‹÷‹[…Ûu˜¸hðhÿ+Æh\)IŒ4 PQè ñþÿ‹…°ƒÄƒÆ”$jVRPÿèF‹T$ƒÆþŒ$VQj>Rè ƒÄ_^][Ä ×(ƒÉÿ‹ú3Àò®hðhÿRP÷Ñj#húIhÿhL)I„$4‹ñhPƒÆèñþÿ‹•°ƒÄ(Œ$jVQRÿèFƒÆþ„$VPëm—ƒÉÿ‹ú3Àò®hðhÿ÷ÑRPIjhú‹ñhÿhL)IŒ$4hQƒÆè§ðþÿ‹…°ƒÄ(”$jVRPÿèFƒÆþŒ$VQj>SèƒÄ_^][Ä ÃSUV‹t$3ÛWІh„À„{‹D$‹l$…À„úƒø<¸D)It¸h(IPh*IVèõþÿ‹D$,ƒÄ ƒøŒÆ3Û3ÉŠ\(þŠL(ÿûÿ‹ùu ÿð„¤h*IVè`õþÿƒÄƒû'‹l%IRhŒÑHë%ûìrûÿw‹\"IPhŒÑHëSh*IVèõþÿƒÄ ƒÿ'‹ ½l%IQh°ðHë%ÿìrÿÿw‹½\"IRh°ðHëWh˜ÊHVèÜôþÿƒÄ hô)IVèÎôþÿ‹D$(ƒÄƒè‰D$ ë‹D$ ƒø}hà)IVèªôþÿƒÄ_^][ÊE<'w4<t<#t<'t%ÿ‹…l%IPhÌ)Ië%ÿ‹ …l%IQh°ðHë 3ÒŠ+Rh¼)IVèVôþÿ3ÀƒÄ ŠEƒøw*ÿ$…(ŸAh¸)Iëh°)Ië h¤)Iëhœ)IVè"ôþÿƒÄŠE<„–<#„Ž<'t,‹\$ ¿;ߎ”3ÀŠ/Ph”)IVèæóþÿƒÄ G;û|çëyŠE„ÀurhÈðHVèÊóþÿ‹\$(¿ƒÄ;ß~W3ÀŠ/‹ÈƒétItPh ïHVèŸóþÿƒÄ ëh)Iëh´ IVèˆóþÿƒÄG;û|Æë‹L$ ƒÅUhˆ)IÆD)þVèfóþÿƒÄ ‹D$…ÀthŒÏHVèPóþÿƒÄ_^][Ã.žA5žA<žACžAVW‹|$ ‹7‹†è‚…Àtt¨t džä‚ë:¨t džä‚ë*¨t džä‚ë¨t džä‚ë dž䂋†ä‚…Àt‹†tPÿŒFƒÄ‰‡\džè‚_^ÃSU‹l$V‹t$W3Û‹>ˆ]‹‡à‚…Àu3Іÿ„ÀtІ„Àth—ëІ„Àt@h‘Wèó ƒÄЇ¸‚„Àt3‹‡¼‚…Àt)‹ŽlQPè?ñþÿƒÄ…ÀuЇZ„Àu _ÆE^]3À[Ã¿à‚—…‹‡ä‚ƒøuUjV»dÑHèŠ#ƒÄ …ÀtN_^][ÃøuDІ„Àt:hˆ*IWèƒÄ…Àu(V»€*IèâƒÄ…À…æh‘WÆEè8 ƒÄ‹†˜…Àu¸õIPSh\*IWèyñþÿƒÄ¿à‚‘…£‹‡ä‚ƒøuUjV»dÑHèí"ƒÄ …Àti_^][Ãøu(‹Ð‚…Ét‹T$‹D$RPV»ÌIèÍ®ÿÿƒÄ …ÀuUë3ƒøuLІ„ÀtBhL*IWèJƒÄ…Àu0V»€*I舃Ä…Àu ÆE…Ût‹ŽQSh$*IWèÆðþÿƒÄ3À_^][ÃS‹\$ VW‹ûƒÉÿ3Àò®‹D$÷Ñ‹°¬I…ö‹ùt‹WSQè³ïþÿƒÄ …Àu ‹v…öuè_^3À[Ë_^[ÃSV‹t$ W‹‹Ž˜¬‹†”PQh,ISèxìþÿ‹ûƒÉÿ3ÀT$ ò®÷ÑIRQSè€(ƒÄ…À|;‹†D‹= F…ÀtPÿ׃Ä‹D$Ph *Iè”êþÿ‹L$‰†DQÿ×ƒÄ 3À_^[Ã_^¸[ÃS‹\$VW‹‹‹˜°¬‹ƒœPQh,IVèèëþÿ‹þƒÉÿ3ÀT$ ò®÷ÑIRQVèð'ƒÄ…À|5‹ƒ8Pè4ÿÿ‹L$Qh¼*Ièêþÿ‹T$‰ƒ8Rÿ FƒÄ3À_^[Ã_^¸[ËD$SU‹l$ V=—‹uWu!‹D$žƒx‹†à‚=—t5h—ë%‹L$=‘ž ƒyu¾à‚‘th‘Vè~ƒÄŠ„Àt?‹-´F‹¸Fƒ:~ ¾ÀjPÿÕƒÄë‹°F¾È‹ŠHƒà…ÀtŠGG„ÀuË‹l$jWhdÑHè¹íþÿƒÄ …Àth‹ƒÊ‰‹†ä‚ƒøu9‹D$W=—”ÁQUèÌƒÄ ƒøtn‹–tRÿŒFƒÄ‰…\3À_^][è„‹†è‚_ ‰†è‚^]3À[ÃjWhÌIè=íþÿƒÄ …À„ˆ‹ƒÊ‰‹†ä‚ƒøuO‹†Ð‚…ÀthÜ*IVèÛíþÿƒÄ3À_^][ÃWUèz©ÿÿƒÄƒø…¥‹†tPÿŒFƒÄ‰…\3À_^][è„€WUèB©ÿÿ‹†è‚ƒÄ ‰†è‚_^]3À[ÃjWh€*IèìþÿƒÄ …ÀtM‹ƒÊ‰‹†ä‚ƒøu)|$‘uhÜ*IVdžè‚è5íþÿƒÄ3À_^][èt‹†è‚ ‰†è‚_^]3À[ËT$SUVW‹úƒÉÿ3Àò®‹|$÷ÑI‹ñVRWèìþÿƒÄ …À„˜Š>÷„Àt;‹=´F‹ ¸Fƒ9~ ¾ÐjRÿ׃Äë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuË‹=˜Fj Vÿ׃Ä…Àuj Vÿ׃Ä…ÀuPVÿ׃Ä‹l$+Ƌ؋ýƒÉÿ3Àò®÷ÑI‹ù;ßrWUVèˆëþÿƒÄ …Àu KF;ßsë_^]2À[Ã_^]°[Ãì<‹Œ$L‹”$HSUVW‹¼$PQR3Û‹h ,IP‰\$,‰\$H‰D$$‰\$0èðëþÿƒÄ‹‡\;ÃtPÿ FƒÄ‰Ÿ\‹„$\‹Œ$XPQhLIèYæþÿ‹èƒÄ ;ë„\T$+RUh,IWèûøÿÿ‹ðƒÄ;óum‹D$9XTt‹<ë¹õIЇ„Àt‹‡8ë¸õI‹”$XQ‹Œ$`P‹„$\QRhø+IWPè@ìþÿ‹ðƒÄ;ót‹L$hØ+IQè˜ëþÿƒÄUÿ FƒÄ;ó…Ó‹D$‹”$T¹At$D¼$H¨¬‰T$HÇD$Dó¥‰l$0‰\$$ÆD$ŠD$„À„2‹D$ …À…ª¹A´$H|$DÇD$<ó¥‹|$ÇD$@‹‡Œ…ÀtG‹„$P‹ˆ¤‹ QRèU¤ÿÿRPèn¤ÿÿ‹È¸ÓMb÷鋌ƒÄÁú‹ÂÁèÐ+Ê…ÉŽÚ‹´$TT$„Àt5öFu ЇQ„Àt%‹Žl‹–°3Àf‹†tPQRVèPûÿÿƒÄ…ÀuSöFt Vè­ÿÿƒÄ…Àu@І„Àt4Ї¸‚„Àu*‹‡¼‚…Àt Pÿ FƒÄ‹†lPÿŒFƒÄ‰‡¼‚3À_^ÃUVW‹|$‹/‹·`…ö‹Et‰l$‰‡‹M ‰„‚S‹^\…Ût‹‹- FRÿÕSÿÕ‹l$ƒÄÇF\‹…ðƒøu‹F‹^ɇ|‹QèôþÿƒÄëƒøu‹V‹FЉ—|‹‡€‹NÁ[uhH,IUèíæþÿƒÄ¸4_^]Ã_^3À]ËL$ù‘u ‹D$‹P8ëù—u‹D$‹P<‰ä‚‰ˆà‚Ç€è‚Ãì<SU‹¬$HVWÇD$$‹…x‹]‹d‰D$(‹…`‰\$…À‰L$ÇD$,õIÆD$u8j`ÿ¤F‹ÐƒÄ…Ò‰T$u_^]¸[Ä<ù3À‹ú󫉕`ë‰D$ŠEÆ…ü¨tŠƒ`„Àt ǃð‹ƒô…Àt‹ðë9Šƒ^„Àt¾øIë(‹ƒðƒøtƒøtƒøu¾°/Ië ¾ôI뾨/Ihœ/IS‰t$(èqôÿÿƒÄ…Àt‹…<3ÿ;ÇtPÿ FƒÄ‰½<ë3ÿ‹D$(T$RPVUèIòÿÿƒÄ;Ç…Æ ‹LQèò)ÿÿ‹ƒ„ƒÄ;Çt.h/ISè ôÿÿƒÄ…Àu‹“„Rh€/IèBßþÿƒÄ‰…L뉽L‹…PPè¥)ÿÿ‹ƒ¨ƒÄ;Çt.hx/ISè½óÿÿƒÄ…Àu‹‹¨Qhh/IèõÞþÿƒÄ‰…P뉽PŠ…„ÀuCƒ»ðt0h ISèvóÿÿƒÄ;Çth´Ih IPèÿöÿÿƒÄ „ÀtÆ…Š…„Àt"h ISè<óÿÿƒÄÇD$,H/I…ÀtÇD$,õI‹T$h@/IRèóÿÿ‹´FƒÄ…À„–pŠ@„Àt5‹ ¸Fƒ9~ ¾ÐjRÿÓƒÄë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuËŠ‹þ„À„ƒ¡¸Fƒ8~ ¾jQÿÓƒÄë¡°F¾‹ŠQƒà…Àu €?:tŠGG„ÀuÈ;þtG+þ‹ßSRÿ¤FƒÄ‰…X…Àu_^]¸[Ä<Ëˋø‹ÁÁéó¥‹Èƒáó¤‹XÆ‹t$‹†…ÀtFjjVèÿÿÿ‹…XƒÄ …Àu‹D$‹U‹L$(Áê€âR‹–QPRè2’ÿÿjV‰D$<èžÿÿƒÄŠ…ÿ„ÀtІQ„ÀuöEu ‹†t‰D$(‹†ð‹t$ƒø…‹\$NQ‹“°RVèWðþÿ‹øƒÄ …ÿ„êh /ISèŸâþÿƒÄ‹Ç_^][Ä<Ë…T…Àt Pÿ FƒÄ‹Eƒàt f½t»t…ÀuBfƒ½tPu8Š…¹$I„Àu¹õI„À¸ Iu¸õI‹T$QRPh/IèWÜþÿƒÄë@Š…¹$I„Àu¹õI„À¸ Iu¸õI3Òf‹•tRQ‹L$$QPhü.IèÜþÿƒÄ…À‰…T…}þÿÿ_^]¸[Ä<Ë\$hô.ISè•ðÿÿƒÄ…ÀuÇF à.IhØ.ISè|ðÿÿƒÄ…ÀuÇF”.I‹ƒðƒøtƒøt ƒø…º‹…ˆ…À„¬} Ç…ˆ‹µˆ…ö„’‹\$3ÿ+÷þ@~¾@‹C PVƒ¬jPÿStƒÄø;Æu ‹µˆ;þt!ëËWhìISèáþÿƒÄ ¸_^][Ä<˃˜…À~.+…ˆ…À‰ƒ˜hp.ISèÎàþÿƒÄ¸_^][Ä<Ê…„À„»‹\$¾9³ðuJhh.ISèqïÿÿƒÄ…Àu0‹…H…Àt Pÿ FƒÄ‹„QhT.Iè•ÚþÿƒÄ‰…Hël9³ðtdhLISè'ïÿÿƒÄ…ÀuR‹ˆ‹ƒ˜…Ét!‹•„ÁPHPRh0.IèJÚþÿƒÄ‰…Hë!‹„PQh.Iè-ÚþÿƒÄ ‰…Hë‹\$‹ƒøÇD$< .IƒøtÇD$<.I‹“¬‰T$è…À‰D$u_^]¸[Ä<˃„…Àt‹…L…Àt ‰D$0¿õIë ¿õI‰|$0‹CX…Àt€8t‹…@…À‰D$Du‰|$D‹L$‹A…À‰D$8u‰|$8‹A …À‰D$Hu‰|$H‹…T…À‰D$@u‰|$@‹…P…À‰D$4u‰|$4‹CT…Àt€8t ‹µ<…öu‹÷Š…„Àt ‹•H…Òu‹×‹D…Éu‹ÏŠ…ÿ„Àt ‹…8…Àu‹Ç‹|$,W‹|$4W‹|$LW‹|$DW‹|$XW‹|$TW‹|$LWV‹|$0R‹T$DQ‹L$PP‹D$hPQRhà-IWè;ƒÄ@…À…ø‹t$$…ötw3ÿ‰t$$‹F…Àt;…ÿ…ª‹D$hÔ-IPèƒÄ¸õI‹N‹VQRP‹D$hÌ-IPèäƒÄG‹6…öu¸…ÿt‹L$jhTóHQè5ƒÄ ‹T$$RèŽÿÿ‹|$ƒÄ‹ƒä…Àt^ƒèPÿFPh°-I³¬hÿ?Vÿ<F‹ƒäƒÄƒètHVth˜-I블-Iécÿÿÿh€-IëVhd-IWèLƒÄ ‹D$…À„†‹L$j:‹Rÿ˜F‹ðƒÄ…öt[ŠFF„Àt9‹ ¸Fƒ9~¾ÐjRÿ´FƒÄë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuÇ€>t‹D$‹Qh\-IWèÍƒÄ ‹T$‹B…À‰D$…zÿÿÿ‹D$jjSÇ@è’žÿÿŠD$'ƒÄ „À¸t‹ƒðƒè„H„HtujhTóHWèÜ‹•°‹ƒQURWè‹ðƒÄ…öth@-ISè“ÜþÿƒÄéð‹T$‹B…ÀtJë3É…Àt‹…°ëƒÈÿQƒÂP‹…°RjjÿP鮋ƒ˜…À~Š„ÉuPhÐIWèäƒÄ hTóHWèÖÛƒ˜Ý$Sè·ÿÿ‹•°‹ƒQURWèr‹ðƒÄ…öth$-ISèîÛþÿƒÄéK‹L$‹…°QƒÁRPQjjÿPé#‹D$p‹PVè)íþÿƒÄ…Àth-ISè§ÛþÿƒÄ¸"_^][Ä<ËL$Ç…p¤@‰µÇAXŠ…„Àu‹Ñ‹BPhÐIWèƒÄ h-ISè0êÿÿƒÄ…Àuhè,IWèîƒÄƃlhHISè êÿÿƒÄ…ÀuGVjL$ThQèPíþÿƒÄƒøÿuhÀ,ISèýÚþÿƒÄ¸"_^][Ä<ÃT$LPRWèþƒÄ jhTóHWèî‹D$ ƒÄÛ@Ý$Sè[œÿÿ‹•°‹ƒQURWè‹ðƒÄ…öth$-ISè’ÚþÿƒÄë#‹L$‹…°QƒÁRPQjjÿPUèïuÿÿƒÄ‹ð…ö„Ø‹D$‹QèFçþÿƒÄ‹Æ_^][Ä<Ës`…öu‹{\…ÿtƒÉÿ3Àò®÷ÑI‹ñë3öŠ…„Àu%hlISèóèÿÿƒÄ…Àu‹T$VhÐIRè¬ƒÄ hHISèÎèÿÿƒÄ…Àu‹D$hŒ,IP舃ċL$jhTóHQèä‹C\ƒÄ …À„’þsRŠV„Éu‹T$PR踋|$ ƒÄ 醋|$hŒIWè-‹C\VPWè’jh„,IWè…‹|$8ƒÄ$ëV‹|$ƒì‰w‹K\‰OÇGXÇ…pºA‰­ÛGÝ$SèÉšÿÿƒÄ ëÛƒ˜ƒìÝ$S貚ÿÿ‹|$ ƒÄ G‰‹…°‹L$“ƒRUPQè]‹ðƒÄ…öth`,ISèÙØþÿƒÄë9‹G…ÀtOë3É…Àt‹…°ëƒÈÿ‹•°QƒÇPWjjÿRUè tÿÿƒÄ‹ð…öt ‹Æ_^][Ä<Ã3À_^][Ä<ËD$SU‹l$¯D$‹•`3ÛVW9Zu_^]3À[ÃzX”Áˆ‹J;ÈQ‹r‹|$‹ÁÁéó¥‹Èƒáó¤‹JT‹B;Ët*‹rP‰J‹JH‰r‰‹JL‰‹JX_A^‰ZT]‰JX[Ã_^‰Z][Ër‹|$‹È‹ÙÁéó¥‹Ëƒáó¤‹r‹Jð_‰r+È^]‰J[Ãj ÿ¤FƒÄ…Àt ‹Ð3ɉ ‰J‰JÃ3ÀÃìSU‹l$V‹t$WŠE‹`‹‹~¨‰T$$‰|$tCÿ@¸@‹Ç‹}‹È‹ò‹ÑÇ­BÁéó¥‹Êƒáó¤‹M‹t$‹|$Á­B‰L$$‹Ñë‹ÇL$QPR‹T$,RUèpØþÿƒÄ‰D$…À…‰‹EŠˆh„Ét‹L$‹T$$QRjPè2ÛþÿƒÄ‹D$(‹L$‹Ñ;ωtN‹+ùÁ‹‰KH‹•‹K‰SL‹S‰KP‰STÇ…pºA‰­‰{‰s\_^‰CÇCX]3À[ƒÄÃÇCX‹‹= F…ÀtPÿ׃ÄVÿ׋D$ ƒÄ_^][ƒÄËL$SUD$VPQè~Ñþÿ‹\$‹- F‹ðƒÄ…öt(W‹þƒÉÿ3Àò®÷ÑIQVSè6V‹øÿՃąÿ_u^]3À[Ë…ÀtPÿÕƒÄSÿՃĸ^][ÃS‹\$U‹l$‹V…Àt ‹K‹SÍJ;Êv3‹sõÑæ…ÀVt Pÿ¨FƒÄë ÿ¤FƒÄ…Àu ^]¸[ɉs‹‹t$W‹{‹Íø‹ÁÁéó¥‹Èƒáó¤‹C_Å^‰C]3À[ÃSUV‹t$W‹|$…ÿu‹>Š‹\$‹-˜F„Àt¾ÀPSÿՃąÀtŠGG„Àuê€?tÎþÿƒÄ …À„”ŠFƒÆ„Àt5‹ ¸Fƒ9~ ¾ÐjRÿ׃Äë‹ °F¾À‹ŠBƒà…ÀtŠFF„ÀuË€>t6D$ PVèԃăø0Ç|7‹L$$‹T$(‰K_‰S^¸[ÄÃ;|_^¸[ÄÃÇ_^¸[ÄÃìDSUVºõIW‹úƒÉÿ3Àò®÷ÑI‹ú‹ñƒÉÿò®‰D$‹„$`÷ÑIÆŠ„$\‹Ù„À‹„$X‰T$(‰\$$t%‹¸˜‹ˆœ¨8‰l$‰L$‰D$ ë'‹¸ˆD‰L$‹ˆ”‹l$‰L$‰D$ …ÿu‹ú‹D$…Àu‰T$‹T$ ‹ƒè„H„çhõIhõI‹Ëj‹ÓjÁùjâÿj QC RQ‹ÈR‹þj‹îÁùj%ÿÁÿQåÿPWUWUjjjjjjjjhœ0I”$ÀhRè­Çþÿ„$ˆL3 P”$ÌQRèsÄ€…ÀŽü‹t$‹PèÿÿŠ„$`ƒÄ„À¸”0Iu¸õI‹L$QPhx0IèqÇþÿ‹T$ ‰Rÿ FƒÄ3À_^][ÄDËE…ÀtPÿ FƒÄÇE‹„$`_^]Æ3À[ÄD˘Fj\WÿӃąÀuj/WÿӃĉD$…Àt‹ð‰|$(+÷@‰D$ë‰|$‹Ç‹øƒÉÿ3À‹T$ ò®‹D$ƒÂ÷ÑI‹éL$ët%h·h`Fjjÿh  Jèº\ƒÄ…ÀÇ^øè&p¡” J…Àu?hh`Fjj èz[¡” JƒÄ…Àu Ç” JFh!h`Fjj èQ[ƒÄ¡” JjÿPƒÄ‰D$…ÀuYÃVhÑh`Fjjè#[‹L$‹T$QRèôehÓh`Fjj‹ðèÿZ‹ ” JD$,PÿQƒÄ,‹Æ^Yøèfo¡” J…Àu?hh`Fjj èºZ¡” JƒÄ…Àu Ç” JFh!h`Fjj è‘ZƒÄ¡” JjÿPƒÄ‰D$…ÀuYÃVhãh`Fjj ècZ‹L$‹T$QRè¤bhåh`Fjj ‹ðè?Z‹ ” JD$,PÿQƒÄ,‹Æ^Yøè¦n¡” J…Àu?hh`Fjj èúY¡” JƒÄ…Àu Ç” JFh!h`Fjj èÑYƒÄ¡” JUjÿPƒÄ‰D$…À„Ähõh`Fjj è¡Y‹L$‹T$QRèRc‹è¡  JƒÄƒøu.¡œ J…Àt%PèfƒÄ…Àu¡œ JPèbaƒÄÇœ Jhþh`Fjj èBY‹” JL$QÿRƒÄ…ít=VWuD¿‹…ÀtöF@tP衃ÄÇÇF@ƒÆOuØUè…ƒÄ_^]YÃVh h`Fjj èÌX¡p3Ih ‹ðh`F@jj £p3Iè¬XƒÄ ‹Æ^á” J…Àu?hh`Fjj è„X¡” JƒÄ…Àu Ç” JFh!h`Fjj è[XƒÄ¡01IV…À¾01It‰¡” JVÿP ‹FƒÆƒÄ…Àuè¡X2I¾X2I…Àt‹ ” JV‰ÿQ ‹FƒÆƒÄ…Àuç¡ø1I¾ø1I…Àt‹” J V‰ÿR ‹FƒÆƒÄ…Àuâ¡t3I…À„‘SUWh(h`Fjj è»W‹0FƒÄ½¿´ûI¾löI‹‰nü…Àu(Uÿ@FƒÄ…Àtj PWÿÓÆGƒÄ ‰>ƒ>uÇÀIƒÆEƒÇ þ\úI~ÀhCh`Fjj Çt3IèFWƒÄ_][¡höI¾höI…Àt V‰¡” JÿP ‹FƒÆƒÄ…Àuã^á” J…Àu?hh`Fjj èôV¡” JƒÄ…Àu Ç” JFh!h`Fjj èËVƒÄ¡01IV…ÀW¾01It‰¡” JVÿP ‹FƒÆƒÄ…Àuè¡X2I¾X2I…Àt‹ ” JV‰ÿQ ‹FƒÆƒÄ…Àuç¡ø1I¾ø1I…Àt‹” J V‰ÿR ‹FƒÆƒÄ…Àuâ¡t3I…À„SUh(h`Fjj è+V‹0FƒÄ½¿´ûI¾löI‹‰nü…Àu(Uÿ@FƒÄ…Àtj PWÿÓÆGƒÄ ‰>ƒ>uÇÀIƒÆEƒÇ þ\úI~ÀhCh`Fjj Çt3Iè¶UƒÄ][¡höI¾höI…Àt V‰¡” JÿP ‹FƒÆƒÄ…Àuã‹t$‹…Àt*‹|$ çÿÁç‹ÏV ȉ‹” JÿR ‹FƒÆƒÄ…Àuã_^á” J…Àu?hh`Fjj è$U¡” JƒÄ…Àu Ç” JFh!h`Fjj èûTƒÄ¡” Jÿ`VWèÉ‹ð‹†D@%€yHƒÈð@‹ŽH‰†D;ÁuAá€yIƒÉðA‰ŽH‹L$‹T$ áÿâÿÁá Áâ Ê‹T$âÿ3ÿ ʉL†‹†D‹L$‰Œ†Ä‹–D‹D$‰„–‹†D‹L†D;Ït-ö„†„t3QèÒ‹ŽDƒÄ‰|ŽD‹–D‰¼–„_^ˆD‰¼†„_^ËŽD‰¼Ž„_^øè†hUVWè΋Ƚ‰L$ 3ÿqD‰~À‹;ÇtöF@tPèY‹L$ƒÄ‰>‰~@‰¾€Ç†ÀÿÿÿÿƒÆMuɉ¹H‰¹D_^]YÃjjjjjjèƒÄËD$‹L$ ‹T$P‹D$QRPjjèSƒÄÃjjjjjjè/ƒÄÃjjjjjjèƒÄÃUVWèØ‹l$‹L$…í‹øtE…ÉtA‹D$…ÀtÇõI‹D$…ÀtÇ‹D$ …ÀtÇõI‹D$$…ÀtÇ_^¸D]ˇH‹·D;Æu_^3À]Ã…Éupæ€yNƒÎðF‹D·…í‰D$t‰·HÇD·‹T$…Òt(‹L$…Ét ‹„·Ä…Àu Ç F‰ë ‰‹”·‰‹L$ …Éu:…ítm‹D·D…Àtö„·„tPèƒÄÇD·D‹D$Ç„·„_^]ËD·D…Àu‹D$$ÇõI…Àt!_Ç‹D$ ^]É‹D$$…Àt ‹Œ·„‰‹D$_^]øÔè6f‹„$ØSUV‹ðW‹è‹ø¡” JçÿÁî Áíæÿ‰|$ …Àu?hh`Fjj ècQ¡” JƒÄ…Àu Ç” JFh!h`Fjj è:QƒÄ‹ ” J‹ÝD$ÁãP‰\$ÿQƒÄ…Àu‰D$ë‹P‰T$¡” J…Àu?hh`Fjj èðP¡” JƒÄ…Àu Ç” JFh!h`Fjj èÇPƒÄ‹” J‹ÆÁà L$ ÃQ‰D$ÿRƒÄ…Àu‰D$ë‹@‰D$¡” J…Àu?hh`Fjj è{P¡” JƒÄ…Àu Ç” JFh!h`Fjj èRPƒÄ¡” Jçÿ‹ÏT$ ËR‰L$ÿPƒÄ…Àu‹” JL$Q‰|$ÿRƒÄ…Àu3ÿë‹x‹\$…ÛuUhÔF„$¬j@Pè€kƒÄ‹l$…íuVhÈFL$lj@QèckƒÄ…ÿ…±‹T$ D$$Rh¼Fj@PèBkƒÄT$$…í‹ÍuL$d…Û‹Ãu„$¤‹¬$ð‹œ$ìRQ‹Œ$ðPQh¤FUSèÿj‹ûƒÉÿ3ÀƒÄò®÷ÑIUÿ;Êu7ƒýv2‹=˜F‹Ã3öj:Pÿ׃Ä…Àt T)û;Âv D(ûÆ:@Fƒþ|Ø_^][ÄÔË×éeÿÿÿV‹t$ …öu¾” J‹D$hVPèBýÿÿƒÄ ‹Æ^ËD$V¾‹‹È‹ÐáðÿÁê 3Ê3ÒÁé 3È‹Á÷ö^R‚3ÁËD$‹ @ˆÃ¸Lè&c¡” J…Àu?hh`Fjj èzN¡” JƒÄ…Àu Ç” JFh!h`Fjj èQNƒÄ‹„$P…ÀuèN‹ ” J‰D$D$PÿQ$ÄPøPè¦b¡” JSU3íV;ÅWu?hh`Fjj èôM¡” JƒÄ;Åu Ç” JFh!h`Fjj èËMƒÄè£M‹ ” J‹ðD$‰t$PÿQ‹øƒÄ;ý…ëhÝh`FhLèž ‹øƒÄ ;ýu_^]¸húI[ÄPÉ7‰¯D‰¯H‡„¹‰hÀ‰(ƒÀIuõ‹” JWÿR ‹ð¡” JW‰t$ÿPƒÄ;ÇtAwD»‹;ÅtöF@t Pè§ ƒÄ‰.‰n@ƒÆKuàWè“ ƒÄ¸húI_^][ÄPÃ;õt5ƒÆD»‹;ÅtöF@t Pèb ƒÄ‰.‰n@ƒÆKuà‹L$QèJ ƒÄ‹Ç_^][ÄPø è&aSUVWhh`FjQ½PèŒ ‹Ø3ÒƒÄ ;Ú„ê‹D$ ˆ;‰T$ŽD$ ‹pƒÀ…ö‰D$ti‹þƒÉÿ3Àò®÷ÑIÑ;Õ‰T$~$jh#h`FEPSè¬ ƒÄ…À„–‹Ø‹þƒÉÿ3Àò®÷Ñ+ù‹÷‹Ñ‹ûƒÉÿò®‹ÊOÁéó¥‹D$‹Ê‹T$ƒáó¤‹L$‹t$ A;ΉL$Œtÿÿÿè¦ýÿÿ‹ø‹·D…öu¾‹D·D…Àtö„·„tPè- ƒÄÇD·D‰\·DÇ„·„_^][ƒÄ ÃSè ƒÄ_^][ƒÄ ø?pÃV‹t$Vj‹PèÐgƒÄPèsƒÄ …Àu^ËVjQèShƒÄPèúrƒÄ ^ÃV‹t$W‹Pè’g‹øVjWè×rƒÄ…Àu_^ËVjQèhƒÄPè¹rƒÄ …Àu_^ËN‹;Ñt:Wh€QèJgƒÄPè‘rƒÄ …Àu_^ËVWh€RèÈgƒÄPèorƒÄ _^ËD$jPètqƒÄËD$jPèdqƒÄÃjè)sjè"sjÿèsƒÄ écu‹D$‹‹D$‹Q‹R‹QRè—ƒÄËD$‹‹D$‹Q‹R‹QRèwƒÄËD$‹‹A ËD$‹‹AËD$‹‹AÃV‹t$WjjÿVèp‹|$jjÿWèbƒÄƒÇ<ƒÆ<¹3Àó¦_^tÀƒØÿøè^SUVW‹|$(‹Pè6?‹l$0‹ð‹MQè'?ƒÄ;ðt"‹Rè?‹ð‹EPè ?ƒÄ+ð‹Æ_^][ƒÄËQèö>ƒÄH‰D$ˆ·‹=´F‹T$(‹t$V‹Pèá>‹L$4‹ØV‰\$(‹RèÎ>‹S‹èƒÄ‰l$ ‹r‹M‹Æ+A…¬ƒþ…‹2‹‹j‹Y…ö‰t$‰D$~;‹ ¸Fƒ9~3ÒjŠURÿ׃Äë‹ °F3ÀŠE‹ŠBƒà…ÀtNE…öɉt$‹D$…À~;¡¸Fƒ8~3ÉjŠ Qÿ׃Äë¡°F3ÒŠ‹ŠQƒà…Àt‹D$HC…À‰D$Å…ö~C‹T$t*ÿ¡¸Fƒ8~3ÉjŠQÿ׃Äë¡°F3ÒŠ‹ŠQƒà…Àt‹D$HN…À‰D$Å‹L$…É~@tÿ‹¸Fƒ:~3ÀjŠPÿ׋L$ƒÄë¡°F3ÒŠ‹ŠPƒà…Àt IN…ɉL$Ä‹D$…ÀŽS‹D$…ÀŽ?3ÉŠMQÿF3Ò‹ðŠRÿFƒÄ;ð…‹D$‹T$ECHJ…À‰D$‰T$Ž‹Â…ÀŽõ¡¸Fƒ8~3ÉjŠMQÿ׃Äë¡°F3ÒŠU‹ŠQƒà…À„«‹¸Fƒ:~3ÀjŠPÿ׃Äë‹°F3ÉŠ ‹ŠHƒà…Àt|‹t$‹ ¸Fƒ9~3ÒjŠURÿ׃Äë‹ °F3ÀŠE‹ŠBƒà…ÀtNE…öɉt$¡¸Fƒ8~3ÉjŠ Qÿ׃Äë¡°F3ÒŠ‹ŠQƒà…Àt‹D$HC…À‰D$Åë‹t$…öÀþÿÿë+ð‹ÆéÀ‹D$…À ‹D$…Àް‹D$‹L$+Áéƒþum‹RèþcƒÄƒø0u]‹D$ ‹L$‹h‹Y‹‹M;Át+Áëm3ö…À~k‹S3ÀŠPÿF‹M3Ò‹øŠ1RÿFƒÄ;øu‹F;ð|Ò‹=´Fë5+ø‹Çë%‹s‹U‹‹:‹Á+Ç…€‹z‹v3Àó¦tÀƒØÿ‹=´F…Àue‹D$‹L$ ‹@‹Q+ÂuS‹D$H‰D$‰Wüÿÿ‹l$,‹|$(‹Rè);‹ðƒÄNx*‹VPè(;‹MVQ‹Øè;‹‹RP腃ąÀuNyÖ3À_^][ƒÄøè¦YV‹t$jVè)v‹vƒÄjèœu‹‹VPD$ jPQRèXs‹D$‹L$‹T$%ÿÁàáÿâÿ Á‹L$Áà ƒÄÁàáÿ^ ÁƒÄËD$…Àt‹…Àt ‹@P蹄ƒÄÃ3ÀËD$S3ÛV…ÀWt‹…Àt‹@P蔄ƒÄ‹ðë3ö‹|$‹‹;Èth{hüFjs飃øtJƒøt7ƒøtthšhüFju郋O ‹F ‹Q‹HRQè{ƒÄ…ÀtIhŽë[h–hüFjrëT‹W ‹N ‹B‹QPRèLƒÄ…Àu.‹G ‹V ‹H‹BQPè2ƒÄ…ÀuV»è€ƒÄ‹Ã_^[Ãh…hüFjth€j èŸîÿÿƒÄVèVƒÄ‹Ã_^[ËD$Pÿ€3IƒÄËD$‹L$PQÿˆ3IƒÄËD$Pÿ”3IƒÄá´ JV‹t$…ÀtjVÿЃÄVÿœ3I¡´ JƒÄ…À^t jjÿЃÄÃS‹\$3É;Ù}3À[ᬠJUV‹t$W‹|$;Á‰ x3ItQVWSQ‰ |3IÿЃÄVWSÿ„3I‹è¡¬ JƒÄ …Àt jVWSUÿЃÄ…ítû~ „JˆE_‹Å^][ÃS‹\$ U‹l$ 3ÉV;éWuo;Ù}_^]3À[ᬠJ‹t$ ‹|$;Á‰ x3ItQVWSQ‰ |3IÿЃÄVWSÿ„3I‹è¡¬ JƒÄ …Àt jVWSUÿЃÄ…ítû~ „JˆE_‹Å^][Ã;Ù}_^]3À[á° J‹t$ ‹|$;Át QVWSQUÿЃÄVWSUÿŒ3I‹ ° JƒÄ…ɉD$tjVWSPUÿÑ‹D$0ƒÄ_^][ÃSU‹l$ 3ÉV;éWuz‹l$;é}_^]3À[ᬠJ‹t$$‹|$ ;Á‰ x3ItQVWUQ‰ |3IÿЃÄVWUÿ„3I‹Ø¡¬ JƒÄ …Àt jVWUSÿЃÄ…Û„©ýŽ „J_ˆ^‹Ã][Ët$;ñ}_^]3À[á° J;Át‹T$$QR‹T$(RVQUÿЃÄ‹D$$‹L$ PQVÿ„3I‹Ø‹D$$ƒÄ …Ût‹È‹õ‹Ñ‹ûÁéó¥‹Êƒáó¤‹t$PUèŒUÿ3I¡° JƒÄ …Àt‹L$$‹T$ jQRVSUÿЃÄ_^‹Ã][á´ JV‹t$…ÀtjVÿЃÄVÿ3I¡´ JƒÄ…À^t jjÿЃÄøàFËD$VW‹0‹D$ Ht}ƒèt6ƒè…™‹F3ÿ;Çt Pè„ÿÿÿƒÄ‹WW‹QRètƒÄ ‰F¸_^ÃFPVj èúÇ‹NPQèQÉ‹V4R訌‹F8PèÿÈ‹vƒÄ…öt;Vè/ÿÿÿƒÄ¸_^ÃN3ÿQVj ‰~ ‰~‰~$ÇF ÿÿÿÿ‰~4‰~8‰~Pè-ÇƒÄ _¸^øX FËD$ ‹L$‹T$hX FPQRè׃ÄËD$‹L$hX FPQèl£ƒÄ ÃhX F覮ƒÄËD$hX FP衵ƒÄËD$SU‹l$V‹t$WhX F‹UVPèa‹øƒÄ…ÿu_^][Ã+ët'UOPVQèÈƒÄ …ÀuhX FWè@µƒÄ3À_^][ËÇ_^][øpèöRSU‹¬$€3ÛVW…í‰\$u8èüÈ‹ø…ÿ‰|$„ÈhÈWècɃÄ…À„²‹G¾È‹ßÆë‹´$Œ‹¼$„3À;øu=;Øt‹KS‰Œ$Œèýÿÿ‹¬$ŒƒÄVh FUÿ0FƒÄ ÆD.ÿ‹Å_^][ƒÄpËNR‰´$‰D$‰D$èp3ƒÄ…ÀŽë‹¼$„‹D$‹PQè_3‹Ø‰\$$‹RèQ[ƒÄ …ÀtPèZ‹ðƒÄ…öu‹L$0PjPQèlÌƒÄ t$0‹þƒÉÿ3Àò®‹C÷Ñ‹‹xI‹é‹Hƒùu~‹Óâ€yJƒÊüBum3Ò3É3À;Ú‰T$(‰T$$‰L$ ~€<8t‹ÈƒáÇDŒ ‹L$ @;Ã|ä‹D$$ È‹D$( Èt¸‰D$,‰D$(‰D$$‰D$ ë-‰T$(‰T$$‰T$ ÇD$,ë¸3Ò‰D$,‰D$(‰D$$‰D$ 3À…Û~"‹Èƒáƒ|Œ tŠ 8B€ù r€ù~vƒÂ@;Ã|Þ‹D$‹L$Õ‹ø…ÉD‰D$t@PQèŠÇƒÄ…À„Õ‹T$‹Bë;„$Œò‹„$ˆÇ‹Í‹ÑÆ/@‹øÅÁéó¥‹Êƒá@ó¤‹L$Æ@ÿ=3ö‹Q…Û‹z~F‹Îƒá‹TŒ …Òt43ÉŠ >ƒù |ƒù~~"‹ÑÆ\@ÁúƒâÆx@Š’°3Iˆ@ƒáЉ°3Iˆ@F;ó|º‹”$„‹t$ÆF‹‰t$Pèb1ƒÄ;ðŒôýÿÿ‹\$‹¬$ˆ…ÛtH‹sSèûÿÿƒÄë<‹|$hÞhø FjAjtj èqæÿÿƒÄ…ÿt WèDƃÄ_^]3À[ƒÄpˬ$ˆ‹õ‹D$…ÀuÆ‹Æ_^][ƒÄpÃU‹ìƒäø¸0è OSV‹uW…öÇD$ u 3À_^[‹å]ÃD$PVÿ FjjL$(j$Q‹øèç ƒÄ…ÿ} 3À_^[‹å]Ë] …Ûu 3À_^[‹å]ÃhØÏHVÿÐFƒÄ‰D$…Àt~ë‹D$…Û~ û‹ó|¾PVT$DjRÿÔF‹øƒÄ…ÿ‰|$~,ÛD$ƒìD$DÝ$VPèf ‹L$ƒÄÏ…Û‰L$ ~§+Þ…Û¡‹L$QÿÜFT$@hRè•…ƒÄ ‹D$ _^[‹å]ÃVW3öèí‹=F…ÀuQh0 Fÿ׋ЃÄ…ÒtA‹úƒÉÿ3Àò®‹D$÷ÑI;Èr_3À^ËúƒÉÿ3Àò®‹D$ ÷Ñ+ù‹Ñ‹÷‹øÁéó¥‹Êƒáó¤‹ð_^Ãè·ì…Àuh<ïHÿ׋ЃÄ…Òuº, F‹Â…À„”‹úƒÉÿ3Àò®‹D$÷уÁ;Ès~ƒÉÿ‹ú3À‹T$ ò®÷Ñ+ùS‹Á‹÷‹úÁéó¥‹È3Àƒáó¤¿T IƒÉÿò®÷Ñ+ù‹÷‹Ù‹úƒÉÿò®‹ËOÁéó¥‹Ëƒáó¤¿$ FƒÉÿò®÷Ñ+ù‹÷‹Ù‹úƒÉÿò®‹ËOÁéó¥‹Ë[ƒáó¤‹ò_‹Æ^ËL$ ‹Æ_^ÆÃU‹ìƒäø¸Èè`MSUV„$ôWPÇD$Ç„$ü”ÿ@F‹5<Fh< FÿÖ‹èh, F‰l$ ÿÖh F‹øÿÖh F‰D$$ÿÖ‹5,F‹Ø…Û„”hü FSÿÖhè FS‹èÿÖ…í‰D$to…ÀtkL$QjjhÄ FjÿÕ…Àu!‹T$h€F@PhØRè4‹D$ ƒÄPÿT$L$Qjjh¨ FjÿÕ…Àu‹T$h1@PjDRè‹D$ ƒÄPÿT$Sÿ0F‹l$…í„äh FUÿÖh€ FU‹ØÿÖhl FU‰D$ÿÖ…Û‰D$„³‹L$…É„§…À„ŸhðjjL$$jQÿÓ…Àt8‹D$”$¸Rj@PÿT$…ÀtjjŒ$Àj@QècƒÄ‹T$jRÿT$jjh< FD$$jPÿÓ…Àt;‹T$Œ$¸Qj@RÿT$…ÀthP@j„$Àj@PèƒÄ‹L$jQÿT$Uÿ0Fè”$˜Rÿ4Fhð?j„$ j PèÔƒÄÿ8Fhð?jL$,jQ‰D$4è´‹l$0ƒÄ…í„·h( FUÿÖh FU‹ØÿÖh FU‰D$$ÿÖ…Û‰D$ tÿÓjjT$TjR‰D$\èiƒÄ‹D$…Àt@ƒ¼$u ƒ¼$ür,L$8ÇD$8QÿÐ…Àt‹T$8h@jD$@RPè!ƒÄ‹D$ …Àt!h¿ÿÐhð?jL$,jQ‰D$4èøƒÄUÿ0F…ÿ„¡hì FWÿÖhÔ FW‹ØÿÖhÈ FW‰D$\ÿÖh¼ FW‰D$ÿÖh¬ FW‰D$ÿÖhœ FW‹èÿÖhŒ FW‰D$4ÿÖh| FW‰D$0ÿÖhl FW‰D$8ÿÖh\ FW‰D$<ÿÖhL FW‰D$(ÿÖh< FW‰D$$ÿÖ…Û‰D$P„‹L$…É„ú‹L$…É„î…í„æ‹L$,…ɄڋL$(…Ʉ΋L$0…Ʉ‹L$4…É„¶‹L$ …É„ª‹L$…É„ž…À„–jjÿÓ‹ðƒþÿ„…T$8ÇD$8RVÿÕ…Àtw½$‹D$8h@jL$@PQ袋T$P‹D$LƒÄL$t‰l$tRPQÿT$ …Àt0»P‹T$th@jD$|RPèiƒÄL$tQÿT$…ÀtK…ÛÕT$8RVÿT$4…ÀuŽ„$ŒÇ„$Œ(PVÿT$0…Àt0‹Œ$Œh"@j”$”QRèƒÄ„$ŒPVÿT$8…ÀuÐL$XÇD$XQVÿT$<…Àt'‹T$Xh@jD$`RPè΃ÄL$XQVÿT$(…ÀuÙ”$´Ç„$´$RVÿT$$…Àt0‹„$´h"@jŒ$¼PQ腃Ĕ$´RVÿT$X…ÀuЋD$TV…ÀtÿÐWÿ0F¸_^][‹å]ÃÿpFWÿ0F_¸^][‹å]ø@è¦GSUVWè-úÿÿjjjhh Fÿ$F‹øWÿF‹5F‹ØjW‰\$ÿÖ‹èj W‰l$ ÿÖjUW‰D$ ÿF‹ðVS‰t$$ÿF‰D$ D$8PjVÿF‹t$Hh¶æÿÿhL F¯t$H¯t$LVè•ïÿÿ‹èƒÄ …ít~‹L$3ÛAð…À‰D$~`‹T$‹D$h ÌSjWjRjjPÿF‹L$UVQÿ Fjè¨ÄPT$,jRVUè™`jjD$DjPè)‹D$<ƒÃƒÄ(;Ø| Uè•ñÿÿ‹\$ƒÄ‹L$ QSÿFPÿF‹5 FSÿÖWÿÖ_^][ƒÄ@ÃU‹ìjÿhp FhàBEd¡Pd‰%ƒì¸è6FSVW‰eè3ö95È3It8›‰uü1‰Eähð?VjEäP范Ä›ë¸Ëeè3ö‰5È3IÇEüÿÿÿÿ95Ä3It&MØQÿdF…Àu‰5Ä3IëVVjUØRèCƒÄ95È3Iu!95Ä3Iuÿ`F‰EàVVjEàPèƒÄ‹Mðd‰ _^[‹å]Ã¡Ø J…Àu6Vè΋ð…ötVè΃Ä£Ø J…Àu9Vè£ÄƒÄè‹Å£Ø J…À^t ‹@ …Àt‹L$‹T$ Q‹L$ R‹T$ QRÿЃÄÉ5Ô JëÒ¡Ø J…Àu6Vè‘Í‹ð…ötVè¥ÍƒÄ£Ø J…Àu/Vè3ăÄèÅ£Ø J…À^t‹@…Àt‹L$‹T$QRÿЃÄÉ5Ô Jë܃ÈÿÃ¡Ø J…Àu6Vè!Í‹ð…ötVè5̓Ä£Ø J…Àu/VèÃÃÄè«Ä£Ø J…À^t‹@…Àt‹L$‹T$QRÿЃÄÉ5Ô Jë܃ÈÿÃ¡Ø J…Àu6Vè±Ì‹ð…ötVèÅ̃Ä£Ø J…Àu!VèSÃÄè;Ä£Ø J…À^t‹@…Àt ÿà‰5Ô Jëê3ÀËL$…Ét&‹ƒøu ‹A PèèуÄÃøtu ‹I Qè¶ÎƒÄÃ3ÀÃS‹\$ V‹t$ ‹W‹;Ètjuh| FjejgjèëÙÿÿƒÄ3À_^[Ãøtu3‹C ‹P …Òt‹P…Òt‹P…Òuj{h| Fjgjgjè³ÙÿÿƒÄ3À_^[Ãùt…‹C ‹H QèUs‹øƒÄ…ÿt\‹V ‹B …Àt PèüpƒÄ‹F ‰x ‹K ‹QRè's‹øƒÄ…ÿt.‹F ‹@…Àt PèÎpƒÄ‹N ‰y‹S ‹BPèùr‹øƒÄ…ÿu_^3À[ËN ‹A…Àt PèšpƒÄ‹V ‰z_^¸[ËD$ƒ8tu‹@ ‹H …Ét‹H…Ét‹H…Éu¸Ã3ÀÃh¸h| Fjè¿êÿÿ3ÒƒÄ ;Âuh»h| FjAjjjè¡ØÿÿƒÄ3Àù‰‰H‰P ‰P‰HÃV‹t$…öu3À^ËN …Ét2‹ƒÀúƒønw(3ÒŠ@Bÿ$•0BQè½ÎëQèõËëQè]ӃċL$ Aúƒønw$3ÒŠÀBÿ$•°B¸ë¸të ¸ë3À‰‹D$‰N3É…À•Á‰F ‹Á^ÃÍÿAÝÿAÕÿAæÿABBBB‹D$ƒÀúƒønw!3ÉŠˆpBÿ$`B¸øtøÃ3ÀÃKBWBQB]BV‹t$…ötzh(h| Fj FjÿPè,ƒÄ…À\‹ƒÀúƒønwI3ÉŠˆxBÿ$hB‹V Règ̃ÄVènêÿÿƒÄ^ËF PèɃÄVèWêÿÿƒÄ^ËN QèéЃÄVè@êÿÿƒÄ^ÃI BNB7BZB¸è¦>SUV‹t$(W3ÿ‹F‰|$;lj|$‰|$u jkhÀ Fjijj è÷ÔÿÿƒÄƒÈÿ_^][ƒÄËF(‰D$$‹FT;Çu>èv;ljFTtT‹NQP腃ąÀtC‹Vj{hÀ FjƒÂjRè—*ƒÄÇFP‹F ;Çt"PèPƒÄ;ljD$uhƒéjxé‹FTPè‹VT‹è‰l$ MÿQRè‹ø‹FHƒÄ ;ʼnD$ Œ/Wè.ßÿÿWWVÿV0ƒÄ…À…‹F …À„ ‹D$3ÛPèÆƒÄ…À~4‹L$SQèÄ‹èUWVÿV0ƒÄ…À…€‹T$CRè–ƒÄ;Ø|Ћl$3À…À‰D$,„¸P‹FTP胃ąÀtS‹L$,h¤hÀ FjƒÁjQè‘)‹T$@‹D$(RPèâ‹VP‹D$<‹|$HƒÄBE;ʼnVP‰l$/ÿÿÿë\‹Å‹l$ëh¡hÀ FjAjj èTÓÿÿƒÄ‹VTRjèöƒÄ‹D$…Àt P赃ċD$…Àt PèéÿÿƒÄ‹D$_^][ƒÄËNTQ輋VTXÿSRè¿‹øWè÷ÝÿÿWWVÿV0ƒÄ…À„¿‹FTPèƒÄƒø…ƒWL$0VQÿV,ƒÄ ‰D$…À~7‹T$,RWèÑÝÿÿƒÄ…Àu!Wè”èÿÿ‹|$0‹FTWSPèuƒÄÇFPëb‹D$ƒøÇF\‰~`‰^Xu ‹L$,QèYèÿÿƒÄVjÿT$,ƒÄ‰D$…À„ÿþÿÿë'‹VTRè%‰D$‹FP‹NTHM‰FPEÿPQèìƒÄ ‹ø‹\$ ;Ý|LWè ÝÿÿWWVÿV0ƒÄ…Àu9WT$0VRÿV,ƒÄ ‰D$…ÀŒGt‹|$,‹FTWP裃ąÀ„E;Ý}´Wè½ÜÿÿWWVÿV0ƒÄ…Àul‹\$…Ût2SWVÿV0ƒÄ …Àt%‹NTSQèaƒÄE‰nP‰^`ÇF\ÇD$ë9nP| ÇF\ëÇF\‰~`MVj‰nXÿT$,ƒÄ‰D$…À„þÿÿ‹F…ÀŽ¿‹FP‹^(3ÿ…Àަ‹VTWRèï‹èŠFƒÄ¨u!‹E$öÄtVjÇF\"‰~X‰n`ÿӃąÀtt‹FWPUè—[ƒÄ …Àu&…ÿt ÇF\ëÇF\Vj‰~X‰n`ÿӃąÀt<ƒÿ~&‹E ƒøÿt@;ø~VjÇF\‰~X‰n`ÿӃąÀt‹FPG;øŒZÿÿÿ¸‰D$‹D$…À„-ýÿÿ‹F…À~V‹NT‹n(Qè‹VT‹øOWRè‹Ø‹FjPSè€ÌƒÄƒøt3ƒø‰~X‰^`u ÇF\ëÇF\VjÿՃĉD$‹D$…À„Äüÿÿ‹NTQjèºVÿV4ƒÄ ‰D$…À„¦üÿÿ‹F$V…ÀtÿЃÄ‰D$éžüÿÿè<ƒÄ‰D$éüÿÿ‹D$,Pè¶åÿÿh÷hÀ FjAjj è±ÏÿÿƒÄ3À_^][ƒÄøè9SUV‹t$W‹FT‹n(Pè2‹NTH‹Ø‰FXSQ‰\$(è.‹øŠFƒÄ ¨t V‰T$ëÇD$WWVÿV0ƒÄ …Àt‹ßë7…ÛVjÇF\‰~`ÿՃċø_^][ƒÄËFTKSP‰\$$‰^Xè΃ċ؋D$…ÀŒg‹L$‰NX‹C …À…½Wè5ßÿÿƒÄ‰D$…ÀuVPÇF\‰~`ÿÕ‹øƒÄ…ÿ„.ë*PSè¦ÎƒÄ…ÀVjÇF\‰^`ÿÕ‹øƒÄ…ÿ„æ‹T$RèIøÿÿ‹ ‹D$P‹Q‹Pè÷ƒÄ …ÀuVPÇF\ ‰^`ÿÕ‹øƒÄ…ÿ„Äë~VjÇF\ ‰^`ÿÕ‹øƒÄ…ÿ„¤ÇC ‹‹L$Q‹B‹HQ蛃Ä…ÀuVPÇF\‰^`ÿÕ‹øƒÄ…ÿtlë}VjÇF\ ‰^`ÿÕ‹øƒÄ…ÿtPVj‰^`ÿÕ‹øƒÄ…ÿt?‹D$H‰D$x/‹Ð‹FTRP‹ûèwƒÄ‹Øé°þÿÿ‹L$Qèc÷ÿÿƒÄ‹Ç_^][ƒÄÿ‹Ç_^][ƒÄø@èö6U‹l$HVW‹}‹M‹Eƒÿu+ƒù |+ƒù&‹ÈƒÀ ‹‰T$‹Q‰T$ f‹If‰L$$L$&ë+ƒù } _^3À]ƒÄ@ËЃÀ ‹ ‰L$‹J‰L$ L$(‹R‰T$$Š€úZt6€ú-t1€ú+t,ˆŠPA@ˆŠPA@€ú.u!ŠP@€ú0|€ú9ŠP@€ú0}òëÆ0AÆ0AŠÆZ€úZÆAu3öëA€ú+t€x-t _^3À]ƒÄ@þH¾p ‰€ú- N¾p¾@ I N ‰´H0‚ÿÿu÷Þ‹D$T‹ÏT$4‰L$…ÀÇD$ ‰T$t‹ëD$PPÿÌF‹L$‹D$TƒÄ‹ÖÁâ+Ö÷ÚT$ …Ò‰D$Pt$ƒùu PD$PèCÎëƒùu L$ PQèQÍë T$ PRèÄÌ‹EƒÄƒøuJ¾D$¾L$€ŒAðýÿÿƒù2}ƒÁd¾D$4€¾D$5„Pðýÿÿƒø2}ƒÀd;È|I~ _^¸]ƒÄ@ÃSt$8D$ ŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À[uƒÈÿ_^]ƒÄ@ËD$UVW…ÀtPè?òÿÿƒÄ…À„Ò‹l$3ÿUèØƒÄ…À~[WUèÚPèdÛÿÿ‹ðƒÄ …öt#VèòÿÿƒÄ…Àt4Vè¸ôÿÿUG衃Ä;ø|Éë"h`hÀ Fjljnj èÓÊÿÿƒÄ3À_^]Ã…öuhmhÀ Fjkjnj è±ÊÿÿƒÄ3À_^]ÃS_ÿ…Û|"SUèYPèãÚÿÿ‹øVWèzðÿÿWèDôÿÿƒÄKyÞ‹D$[…Àt VPè^ðÿÿƒÄVè%ôÿÿƒÄ_^¸]ËD$‹L$‹T$ P‹D$ Q‹L$ RPQjè`¦ƒÄËD$ ‹T$‹L$PƒÂlQRè™§ƒÄ ËD$‹@`ÃV‹t$ W‹|$…ÿu…ö‹þt_Wè¶UƒÄƒøÿuhähÀ FjyëePèZU‹HƒÄƒùÿu%Vè‰UƒÄƒøÿuhîhÀ Fjyë8Pè-UƒÄ‹t$…öu ‹pë‹t$…öt.VèOƃăøÿu hühÀ Fjxh†j èOÉÿÿƒÄ3À_^ËD$ …ÿt ‹H…Éu‰x…öt ‹H…Éu‰p_¸^ËL$ ‹D$V‹t$3Ò‰N‹L$;‰‰V‰N ‰VP‰V‰V ‰VL‰VTÇFH ‰V\‰VX‰V`‰Vdt$‹H‰N‹H‰N‹H ‰N‹H8‰ND‹H$;Êt‰N0ë‰V‰V‰V‰VDÇF0€B;Ât ‹H ;Êt‰N,ëÇF,PãB;Ât ‹H;Êt‰N(ëÇF(pB;Ât ‹H;Êt‰N$ëÇF$€B;Ât ‹H(;Êt‰N4ëÇF4ÐB;Ât ‹H,;Êt‰N8ëÇF8ÀB;Ât ‹H0;Êt‰N<ëÇF<B;Ât ‹@4;Ât‰F@ëÇF@BVlRVj蘤ƒÄ …Àu%Vè[ÜÿÿhphÀ FjAhj èÃÇÿÿƒÄ3À^ø^ËD$ÃV‹t$ W‹|$VWè/[ƒÄ…Àu_¸^ËL$ öAu_3À^ÃQj‰A\‰q`‰ydÿQ(ƒÄ_^øèÆ0SUV‹t$W‹F¨„²¨t‹FTPèÖƒÄH‰D$ë ÇD$‹D$3í…ÀŒ…‹NTUQ‰nXÇD$ 豋ØT$ SRV‰^`ÿV8ƒÄ…ÀuVPÇF\ÿV(ƒÄë"‹D$PV‰FhÿV<‹øƒÄ…ÿt‹D$SPVÿV@ƒÄ ‹ø‹L$ÇFhQèՃąÿt‹D$E;èŽ{ÿÿÿ_^]¸[YÃ_^]3À[YøèÖ/‹L$D$PQè7Ñÿÿ‹T$ƒÄPjRè÷˃Ä…ÀuƒÄËD$‹L$‰¸ƒÄøè†/SUV‹t$WÇD$‹FT‹~XP蚃ÄH;ø}‹NTGWQ藃ċØë2‹VTPR膋ØSSVÿV0ƒÄ…ÀuVPÇF\!ÿV(‹øƒÄ…ÿ„ø‹l$…ÛtTSèàÕÿÿƒÄ‰D$…ÀuVPÇF\ÿV(‹øƒÄ…ÿ„Æë(PUèƒÅƒÄ…ÀVjÇF\ÿV(‹øƒÄ…ÿ„œöFt^ë3Û‹ES‹H Qè¨÷ÿÿƒÄ…ÀuVPÇF\ÿV(‹øƒÄ…ÿtfë~VjÇF\ ÿV(‹øƒÄ…ÿtL‹U‹B…Àt=SPèa÷ÿÿƒÄ…ÀuVPÇF\ÿV(‹øƒÄ…ÿtë}VjÇF\ ÿV(‹øƒÄ…ÿt¿‹D$Pè\îÿÿƒÄ‹Ç_^][Yøè.‹D$PèŒÏÿÿ‹T$‰D$L$‹Q‹HQèd ƒÄ ƒøÿu ¸ƒÄËD$PjÇ@\ÿP(ƒÄƒÄÃV‹t$W‹FD…ÀtVÿЃÄ‹FT…ÀthîAPè;ƒÄÇFT~lWVjè¡3ÀƒÄ ‰‰G_^ËL$‹D$‰A(ËD$UPè¥4‹èƒÄ…íuƒÈÿ]ËD$SVW…Àt;‹8WèT‹ØƒÄ3ö…Û~(VWèR‹UQèIXƒÄ…Àt F;ó|ä_^[ƒÈÿ]Ã…ö}_^[ƒÈÿ]Ë|$‹Rè ƒÄ;Æ~‹VPè ƒÄ…Àu3öë‹p‹L$ Aÿ‹;È‹Á‹T$…Òu_^[‹Á]Ëv‹È‹Ù‹úÁéó¥‹Ëƒáó¤_^[Æ]ËD$…ÀuËPèŸ ƒÄËD$UPèµ3‹èƒÄ…íu¸þÿÿÿ]ËD$SV‹t$…ÀWt5…ö}ƒÎÿ‹8WèW ƒÄ‹ØF;ó}VWèV ‹UQèMWƒÄ…Àt F;ó|ä_^[ƒÈÿ]ËÆ_^[]ÃV‹t$…öt%‹Pè ‹L$ƒÄ;Á~…É|Q‹Qè ƒÄ^Ã3À^ÃSU‹l$ V…íW„¢‹EPèÇ ‹t$ƒÄ;ÆŽŠ…öŒ‚‹}VWè¦ W‰D$ èœ ‹ØƒÄ ;óÇEu ‹D$_^][Ã…ötNÿQWè… ‹hƒÄë‹T$‹jMVWèn ‹HƒÄE;é};ó}VWèX ‹PƒÀƒÄJF‰;ó|è‹D$_^][Ã_^]3À[ø FøX Fø0FÃh0FèÆ…ƒÄËD$h0FPèÁŒƒÄøhFÃhhF膅ƒÄËD$hhFP范ÄËD$…À¸Ãø|‹L$‹€8uŠP„Òu ƒÀ‰¸Ã3Àøè*‹D$SUV‹t$$‹…öW„83ÉŠ‹Ù‹ùƒáƒã çÀƒù‰\$uL@N…ö„Š3ÒöÁ€t%ƒáÁâ Ê@N‹Ñ„öúÿÿÿêŠöÁ€uÛŠƒáÁâ Ê@N„Ñë @N…ö„Å‹T$ nÿ‰ ‹L$$‰93ɃþŒ«Š€ú€u ¿pëVŠÚÇD$ ƒãpö€‹ût-ƒÿw~‹ÕM…Òtw‹ÇO…À~$3Ò‹ÅŠÁá ÊFM…Àt_‹×O…Òèë‹ÏùÿÿÿwL‹|$ ‹\$‹D$‹l$‰‹U‹D$(+ÖÐ;Ê~h„h¸Fh›jrj èK¿ÿÿƒÄ€Ë€‹Ç‰u_^ Ã][YÃhŒh¸Fj{jrj è#¿ÿÿƒÄ¸€_^][YÃS‹T$U‹l$‹ÅV‹t$W÷Ø‹ÀâÀƒà ‹T$ ƒú} €â ЈAëF ‹òˆA3À…Ò~Áþ@…öø‹ðxÿ‰t$‹Ø…À‹÷~ŠÂ$;÷ˆt €ˆÁú‹ÆN…Àæ‹t$Ë‹T$ƒýu…Òu Æ€A‰_^][Ãú‹Ú ˆA‰_^][Ã3À…Ò~Áú@…ÒøŠÐ‹ø€Ê€ˆA‹ÐH…ÿ~ ˆ‹øÁûH…ÿóÊ_‰^][ËT$‹L$ ƒùB| …É~Áù@…Éø…Òu ƒ|$uƒÀ@ƒú~ …Ò~Áú@…ÒøÃS‹\$ UV‹t$‹ WQ‹>VnFRUPVè=ýÿÿƒÄ‰F ¨€tÇF<_^]3À[Ã}tÇF=_^]3À[Ë‹ +úω ‹F…À‹Ùt…Û}ÇF>_^]3À[Ã~ !u‹F$‹‹+ÊˉNÇF_^]¸[ÃSVW‹|$…ÿu_^3À[Ë_hxh¸Fjè+Ïÿÿ‹ðƒÄ …öu!h{h¸FjAh‚j è ½ÿÿƒÄ3À_^[Ãlj^ÇFÇF ‹‹OPQVè=ƒÄ …Àu‹F…Àt PèIÑÿÿƒÄVè@ÑÿÿƒÄ3À_^[ËW ‹Æ‰V _^[ÃSU‹l$V‹t$W…í}…öu_^]3À[ËþƒÉÿ3Àò®÷ÑI‹é‹\$9+|‹{…ÿuK‹s…öuhZEh¸FPèNÎÿÿƒÄ ëh\Mh¸FQVèµÎÿÿƒÄ‹ø‰C…ÿu‰s_^][Ët$…ö‰+t‹Í‹ÑÁéó¥‹Êƒáó¤‹CÆ(_^]¸[Ãhxh¸FjèßÍÿÿƒÄ …Àuh{h¸FjAh‚j èÀ»ÿÿƒÄ3ÀÃÇÇ@Ç@Ç@ Ãhxh¸FjèÍÿÿ3ÉƒÄ ;Áuh{h¸FjAh‚j è^»ÿÿƒÄ3ÀËT$‰‰P‰H‰H ÃV‹t$…öt‹F…Àt PèªÏÿÿƒÄVè¡ÏÿÿƒÄ^ËT$S‹\$ V‹ ‹3‹Á+Æu‹rW‹{3Àó¦_tÀƒØÿ…Àu‹B‹K+Á^[ø èF$‹D$$V‹5FPL$hìFQÿÖ‹T$8D$Rh˜ÊHPÿÖL$T$,QhàFRhÔFjèÒÂÿÿƒÄ,^ƒÄ ËD$‹Ã‹L$‹T$‹A;ÂtÇA‰QÃSU‹l$ Vj|hF‹ujè(Ìÿÿ‹ØƒÄ …Ût{j~hFjèÌÿÿƒÄ ‰C…ÀtZ3À‹KƒÀƒøÇDü|í‰sÇC ÇÇC‹U ‹CjbhFÁâRPèDÌÿÿƒÄ…Àu‹C…Àt Pè0ÎÿÿƒÄSè'ÎÿÿƒÄ^]3À[ÉC‹M‰ ‹M‹uWÁá‹Ñ‹øÁéó¥‹Êƒáó¤‹E_‰C‹M ‰K ‹U^‰S‹Ã][ÃVj|hFjèQËÿÿ‹ðƒÄ …öt!j~hFjè:ËÿÿƒÄ ‰F…Àu VèªÍÿÿƒÄ3À^Ã3À‹NƒÀƒøÇDü|íÇFÇF ÇÇF‹Æ^ÃVj|hFjèÑÊÿÿ‹ðƒÄ …öt!j~hFjèºÊÿÿƒÄ ‰F…Àu Vè*ÍÿÿƒÄ3À^Ã3À‹NƒÀƒøÇDü|í‹T$ÇF ‰VÇÇF‹Æ^ÃV‹t$…öu3À^Ë‹F A;Á/h•Å‹FhFRPè®ÊÿÿƒÄ…Àu^ËN ‰FÑá‰N ‹S‹\$;Ø}<…Û|8‹VW;Ãz| ‡+Ã+×@‹< ‰9ƒéHuõ‹V‹D$_‰š‹@ÇF‰[^ËN‹T$[‰‹@ÇF‰^ÃSV‹t$ 3ÀW‹…É~‹^‹|$‹Ó9:t@ƒÂ;Á|ô_^3À[Ã…ötö…Étò…À|î;Á}ê‹<ƒQÿ;Ât}‹N@;‹‰\ü|ñ‹H‰‹Ç_^[ÃW‹|$…ÿt;‹…Òt5‹L$ …É|-;Ê})‹GVrÿ‹ˆ;Ît}S‹WA;΋Љ\Šü|ñ[‹^I‰_Ã3À_ÃV‹t$…öWu_ƒÈÿ^ËF…Àu#‹…É~‹v‹T$9„Œ@ƒÆ;Á|ð_ƒÈÿ^ËN…Éu‹NP‹jPQÿLFƒÄÇF‹D$…Àu_ƒÈÿ^ËF‹P‹FjRL$PQÿHFƒÄ…Àu_ƒÈÿ^Ã+FÁø‹ø…ÿ~‹FT$RL¸üQÿVƒÄ…À|O…ÿä‹Ç_^ËD$‹T$‹QRPèÎýÿÿƒÄ ËT$…Òt‹ …É~Aÿ…À|;Á} ‹J‹ ‰‹ÁÃ3ÀËT$…Òt‹ …É~ W‹z3Àó«‰_ÃV‹t$…öt@‹W3ÿ…À~S‹\$‹F‹¸…ÀtPÿӃċG;ø|é[‹F_…Àt PèÊÿÿƒÄVè ÊÿÿƒÄ^ÃV‹t$…öt‹F…Àt PèêÉÿÿƒÄVèáÉÿÿƒÄ^ËD$…ÀuƒÈÿËËD$…ÀuË@‹L$‹ˆÃ‹D$…ÀuËH‹T$‹D$ ‰‘ÃV‹t$…öt$‹F…Àu‹F‹‹VPjQRÿLFƒÄÇF^ËD$‹‹Q$Rè‘ÃÄËD$ ‹T$‹L$P‹Q‹H$Qè‡ÃƒÄ ËL$‹D$P‹‹B$PèÜÃÄËD$‹L$ ‹T$P‹D$QR‹‹Q$RèŃÄÃS‹\$ UV‹t$W…ö„d‹|$‹G,ð;èsÿG‹O‹WX‹Æ‰oÁèÈ…Ò‰O„°O‹Â‰L$‹ÊÖƒáÁøƒú@‚&‹T$ƒù‹,‚w-ÿ$ˆ&B‹\$3ÉŠ C‹é3ÉŠ+ éC3ÉŠ Áá éC3ÉŠ Áá éC‰,‚@ƒø}8¹,‚+È3À3ÒŠŠsC ÂC3҃ŊÁâ ÂC3ÒŠÁâ ÂC‰EüIuÖ‹T$jRWèáÅ‹GXƒÄ ÇGXtÀ‹îÁí…í~USWöÃè¼ÅÁåƒÄ Ý+õ…ötf‹Æ‰wXÁèƒæo…Àt-‹ø3À3ÒŠŠsC ÂC3É3҃Ŋ ŠSÁá ÁCÁâ ÂC‰EüOuÕ‹Î3ÀÞItIt IuŠCÿKÁàK3ÉŠ+ Á3ÒŠSÿ ‰E_^]¸[ÉWX<1ƒÿsR‹l$ƒé‹|…tItIt(‰|…_^]¸[Ë\$3ÉŠ CN‹ùt3ÒŠ3 úCN…öt 3ÉŠ Áá ù‰|…_^]¸[ËòƒâÁþ…Ét‹|$‹,‡ƒùw-ÿ$˜&B‹\$3ÉŠ C‹é3ÉŠ+ éC3ÉŠ Áá éC3ÉŠ Áá éC‹|$@;Ɖl‡ü}4+ð<‡‹îÅ3ɃÇŠ C‹ñ3ÉŠ+ ñC3ÉŠ Áá ñC3ÉŠ Áá ñC‰wüMuÕ…Ò„ ÿÿÿ‹Ê3öÚItIt IuK3ÒŠ‹òÁæK3ÉŠ+ ñ3ÒŠSÿ ò‹L$_‰4^]¸[ÃIO$BZ$Ba$Bk$BÞ%Bé%Bð%Bú%BSUV‹t$W½\F‹NX^‹ÁÁøƒáu3ÿë‹<ƒƒùw5ÿ$à'B‹=\F½]Fçÿ3ÉŠm ùE3ÒŠUÁâ úE3ÉŠMÁá ù‰<ƒ@ƒø~ƒø}ǃjSVètÃƒÄ 3Àë}¹<ƒ+È3Àó«‹Vj‰S8‹FSV‰C<èHËD$ ‹ƒÄ ‹Ñˆ@ÁꈋÑ@_Áêˆ@Á鈋N@‹ÑÁêˆ@ˆ‹Ñ@Áêˆ@Á鈋N@‹ÑÁêˆ@ˆ‹Ñ@Áêˆ@Á鈋N @‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈈HÇFX^]¸[Ëÿà&Bñ&Bù&B'B‹D$3ÉÇ#EgÇ@‰«ÍïÇ@þܺ˜Ç@ vT2‰H‰H‰HX¸øèv‹D$ 3É3ÒŠŠp@ Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@‰L$3ÉŠ@3ÒŠ0 Ê@3ÒŠpŠ‹D$Áâ Ñ‹L$‰T$PT$QRèÍÈ‹D$‹L$ ‹Ñˆ@ÁꈋÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈈HƒÄËL$3À3ÒŠ@ƒøŠ’´FˆTÿrëáü J…Àtf‹T$SVW3ÉŠ‹ðæÿ:†´Fu&Aƒùrç¸è3I¹‹ú‹ð3Ûó§tƒÀ=h4I|çë_^ƒÈÿ[Ã_^¸þÿÿÿ[ËD$PRè*ƒÄ3À_^[ËL$‹T$QRèƒÄ3ÀÃSUV‹t$3À3ÉŠŠnF ÁF3Ò3É‹l$ŠŠNÁâ ÂFÁá ÁF3É3ÒŠŠvF ÊF3ÒWŠvŠ‹ðÁâ Êæ‹ÑÁêâ3Ö3ÂÁâ3Ê‹Ðâ3óÿÿ‹ðÁâæÌÌ3Ö‹òÁî3ò‹Ñ3Æâ3óÿÿ‹ñÁâæÌÌ3Ö‹òÁî3ò3΋ð‹ÑæUUUUÑêâUUUU3Ö3ÂÒ3Ê‹ÐÁê‹ñâÿÿæÿÿ3Ö3ÊÁâ3‹ÑÑê‹ðâUUUUæUUUU3Ö3ÂÒ3ʋЋñâðÁî æð ò‹ÑâÿáÿÁîÁâ ò ñ¹h4I%ÿÿÿ‰L$‹‹È…ÒtÁáÁè‹Ö ÁÁâÁîëÁáÑè‹Ö ÁÁâÑî%ÿÿÿ ò‹Ð‹øÑê‹ÊçÀá‹Ú Ï‹øÑéçã Ï‹øçàâ ûæÿÿÿÁï Á鋽´F‹ø‹ ´FçÀ × ËÁê‹ÞƒÅ‹<•´F‹Ðƒâ? Ï〃ŋ<•´F Ï‹þÑï‹×çâ Ó‹Þãà ûÁïÁꋽ´ F‹þ‹•´FÁïƒç? Ó‹½´F‹þƒç? Ó‹½´F‹ù Óçÿÿ‹ÚâÿÿÁã ûÁÏÁé‰}ø ÊÁɉMü‹L$ƒÁù¨4I‰L$Œ¹þÿÿ_^][ÃVW‹|$ …ÿtƒÈÿ+Ç‹ø¡$J…À„Ï¡J…ÀthðhÜ"Fjj ÿСJƒÄ‹ J…É„‰Qè}öÿÿƒÄ;ø}w‹ JWQèyöÿÿ‹ðƒÄ…öt!‹I‹Á‰…À‹ JjWRèvöÿÿƒÄ ë3ö¡J…Àth hÜ"Fjj ÿЃÄ…öt<‹FhhÜ"FPÿ$JVèÕ¿ÿÿƒÄ_^áJ…ÀthôhÜ"Fjj ÿЃÄ_^áJ…Àuÿ%DFÿàS‹\$ …ÛWÉ¡ J…À„ÚVhhÜ"FƒÎÿjj 3ÿ+óèÊÿÿÿ¡ JƒÄ…Àt$PèxõÿÿƒÄ;ð}¡ JVPèuõÿÿ‹øƒÄ…ÿtÿh hÜ"Fjj è‡ÿÿÿƒÄ…ÿ^t)‹…ÿt"‹L$‹T$‹D$ QRWPÿ JSèLþÿÿƒÄ_[Ë ”Fh(#Fh£hÜ"FƒÁ@hð"FQÿ,FƒÄÿ%$F¡J…Àt‹T$‹L$R‹T$QSRÿЃÄ_[áJSUV…ÀWt%‹L$$‹T$ Q‹L$ R‹T$ Q‹L$ RQÿЃÄ‹è_^][Ët$…öÄ¡ J…À„ÒhhÜ"FƒÏÿjj 3Û+þè›þÿÿ¡ JƒÄ…Àt%PèIôÿÿƒÄ;ø}‹ JWRèEôÿÿ‹ØƒÄ…Ûtÿh hÜ"Fjj èWþÿÿƒÄ…Ût%‹[…Ût‹D$$‹L$ PQSj ÿ JVè ýÿÿƒÄëH‹”Fh(#Fh£hÜ"FƒÂ@hð"FRÿ,FƒÄÿ%$F¡J…Àt‹L$$‹T$ QRVj ÿЃÄ‹D$‹L$‹(é…ö‰(Ç¡ J…À„ÕhhÜ"FƒÏÿjj 3Û+þè¦ýÿÿ¡ JƒÄ…Àt$PèTóÿÿƒÄ;ø}¡ JWPèQóÿÿ‹ØƒÄ…Ûtÿh hÜ"Fjj ècýÿÿƒÄ…Ût*‹[…Ût#‹L$$‹T$ QRSj ÿ JVè,üÿÿƒÄ‹Å_^][á”Fh(#Fh£hÜ"FƒÀ@hð"FPÿ,FƒÄÿ%$F¡J…Àt‹L$$‹T$ QRVj ÿЃÄ_‹Å^][ËD$ ‹L$‹T$P¡”FQRƒÀ@hð"FPÿ,FƒÄÿ%$FV‹5(Jh¡h8#Fjj è–üÿÿ‹D$ƒÄƒø‡íÿ$…”1BÇ(JÇ<JéÍ3À£(J£<Jé¼ö(J„¯¡<J…Àt èüÿÿ9@JtRh½h8#Fjj èüÿÿhÃh8#Fjj è üÿÿhÄh8#Fjj èùûÿÿ¡(JƒÄ0$ý£(JèÅûÿÿ£@Jÿ<Jë?ö(Jt6¡<J…Àt-H£<Ju%‹(JhÔh8#FƒÊjj ‰(JèœûÿÿƒÄhÝh8#Fjj è†ûÿÿƒÄ‹Æ^ÃIª0B‘0B81B»0B (JV¨„ùhçh8#Fjjè?ûÿÿ (JƒÄ¨uèûÿÿ9@Ju3öë¾hìh8#Fjjè ûÿÿƒÄ…ö„¦jèHþÿÿhNh8#Fjè÷·ÿÿ‹ðƒÄ…öt{¡4J…Àu2hÀ2Bhà2BèöƒÄ£4J…ÀuVèDºÿÿƒÄjèúýÿÿƒÄ3À^Ãè~úÿÿ‹L$‹T$‰‹D$ ‰F‰N‰V ÇFÇF¡4JVP轃ąÀt‰Fjè¬ýÿÿƒÄ3À^ËD$‹T$V‹‹23À;ΕÀ^ËD$V‹‹ÑÁê‹ÂÁà+ÂÁà+‹ÑÁê4Õ+òIÆ^’Áâ+ÑR’’ QÁøèf (JVW3ÿ¨„èhçh8#Fjjè²ùÿÿ (JƒÄ¨uèùÿÿ9@Ju3öë¾hìh8#Fjjè}ùÿÿƒÄ…ö„•jè»üÿÿ¡4JƒÄ3ö…Àteè8ùÿÿ‹ 4J‰D$D$PQè‹ðƒÄ…ötB‹~…ÿt‹GW@‰G‹4JRèoƒÄ‹NI‹Á‰N…À…ÿÇFtÿOV苸ÿÿƒÄ3Àj…ö•À‹ðè8üÿÿƒÄ‹Æ_^ƒÄËÇ_^ƒÄÃVWjwhx#Fj`èеÿÿ‹ð3ÿƒÄ ;÷t jyhx#Fj@è·µÿÿƒÄ ;ljuVè(¸ÿÿƒÄ_3À^Ã3À‹ƒÀƒø@‰|ü|ò‹D$;Çu¸æBE‰F‹D$ ;Çu¸09B‰F¸‰F ‰~‰F‰~$‰~(‰~,‰~0‰~4‰~8‰~<‰~@‰~D‰~H‰~L‰~P‰~T‰~X‰~\ÇFÇFÇF ‹Æ_^ÃS‹\$…ÛtA‹C W3ÿ…Àv%V‹‹¸…Àt‹pPèj·ÿÿƒÄ‹Æ…öuî‹C G;ørÝ^‹ QèP·ÿÿSèJ·ÿÿƒÄ_[øè6 SUV‹t$3ÒW‹F$‹N Áà÷ñ‹VÇF\;ЇË^‹~(AG‰N ‹NCˉF‹‰~(Lj‹V,ˆ‹ ˜<˜…ɉT$t&‹A3Ò÷t$;Ót‹A‰‹U‰Q‰Mëy‹…ÉuÚ‹F‹N;Ár]‹^‹ÑãhVhx#F QR芴ÿÿ‹Ð3íƒÄ;Õu ‹F\‰n@‰F\ë'‹F;Ãs ‹Ë<‚+È3Àó«‹F‰^‰F‹F,@‰n‰F,‰‹\$L$QSVèL‹øƒÄ ‹…ÉuOhÁhx#Fj è ³ÿÿƒÄ …Àu‹F\_@‰F\^]3À[YÉÇ@‹T$‰P‰‹V@‹N$3ÀBA‰V@‰N$_^][Yˉ‹ND_A‰ND^][YËL$D$V‹t$PQVÇF\èÄ‹ƒÄ …Éu ‹FL@‰FL3À^ËQSW‰‹Q葵ÿÿ‹FH‹~$‹N ƒÄ@O‰FHƒù‰~$‹Ç†¶Áà3Ò÷ñ9F ‚¦‹F‹V‹‹|üDüÇ‹F…ÀuL‹V‹hrhx#FÁâRPè*³ÿÿƒÄ…Àu ‹F\_@‰F\‹Ã[^ËN4‹VA‰‰N4‹NÑéÑê‰NI‰V‰NëH‰F‹N ‹‹F0I‰N ‹N@ ЉF0‹…Àu‰9‹Ã_[^ËH…Ét ‹Á‹H…Éu÷‰x‹Ã_[^ËL$D$V‹t$PQVÇF\褋ƒÄ …Àu ‹FT@‰FT3À^ËNP‹A‰NP^ÃSU‹l$ ‹] Kx&VW‹|$‹E‹˜…Àt‹‹pQÿ׃ċƅöuïKyâ_^][ËD$U‹h Mx0S‹\$VW‹|$‹L$‹‹ª…Àt‹p‹WPÿӃċƅöuîMyÞ_^[]ËD$SUV‹t$WPÿV‹N8ƒÄA‹è‰N8‹L$3Ò‰)÷v;Vs‹Å3Ò÷v‹‹F‰D$‹<‘‘…ÿt3‹NXA‰NX‹G;Åu‹N<‹T$AR‰N<‹PÿT$ƒÄ…Àt G‹Ø‹8…ÿuÍ_^‹Ã][ÃVW‹|$ 3ö…ÿtUŠ„ÀtOSU»¾À Ëî‹Ð‹ÈÁêƒâƒá3ѹ +ÊÃÓí‹Ê‹Ð¯ÐÓæŠG î3êG„À‹õuÄ‹Æ]Áè[3Æ_^Ã_3À^ËD$…Àt‹@$Ã3ÀøèæV‹´$ hD$h˜#Fh#F‰D$ÇD$ÇD$èÂ÷ÿÿŒ$0T$ QVD$RL$$PT$ QD$0RPèk‹D$,‹L$0ƒÄ(…ÀQt,‹”$ PRèÜ‹ð‹D$Pèa²ÿÿƒÄèéøÿÿ‹Æ^ÄË„$ T$RPè]ÜƒÄ ‹ðèÃøÿÿ‹Æ^ÄøLèSUV‹t$pW3ÉŠ3ÿF‰L$$‰L$‰L$‰L$ ÇD$ÿÿÿÿˆ\$‰t$t‹l$x„Ût`‹D$d…Àu ‹D$h‹T$;sLƒÿwBÿ$½HDB€û%u¿ë$‹L$hT$¾ÃP‹D$hQ‹L$hRPQèÆ ‹L$4ƒÄŠFˆ\$‰t$tƒÿuœ‹L$h‹t$_‹J;Ö‹T$lÀ^÷Ø]‰[t‹H‰D$‹L$X‹D$TjT$Q‹L$XRPQèp ‹T$‹D$pJ‰ƒÄ`þÃÀàƒø‡‚3ÒŠ|DBÿ$•dDBŠƒÉF‰L$ ˆ\$‰t$téÿÿÿŠƒÉF‰L$ ˆ\$‰t$téÿÿÿŠƒÉF‰L$ ˆ\$‰t$téëþÿÿŠƒÉF‰L$ ˆ\$‰t$téÔþÿÿŠƒÉF‰L$ ˆ\$‰t$té½þÿÿ¿é³þÿÿ¡¸Fƒ8~‹L$jáÿQÿ´F‹L$(ƒÄë¡°F‹T$âÿ‹ŠPƒà…Àt#‹D$$F‰t$t€¾ÃŠ^ÿTPЈ\$‰T$$éOþÿÿ€û*uŠ‹EƒÅF‰l$x‰D$$ˆ\$‰t$t¿é'þÿÿ€û.…œŠF¿ˆ\$‰t$té þÿÿ‹¸Fƒ:~‹D$j%ÿPÿ´F‹L$(ƒÄë¡°F‹T$âÿ‹ŠPƒà‹T$…Àt$…Ò}3ҾÊ’Fˆ\$TPЉt$t‰T$é ýÿÿ€û*uŠ‹EƒÅF‰l$x‰D$ˆ\$‰t$t¿éxýÿÿ¾ÃƒÀ´ƒø%wP3ÒŠ¤DBÿ$•DBÇD$ë,€>lu ÇD$FëÇD$ëÇD$ëÇD$ŠFˆ\$‰t$t¿éýÿÿ¾ÃxÛƒÿS‡_3ÒŠ—üDBÿ$•ÌDB‹D$Ht#Htƒèt ‹EƒÅ‰l$xë‹E‹UƒÅ‰l$xë ¿EƒÅ‰l$x™Q‹L$Q‹L$,Q‹L$pj R‹T$|PD$(R‹T$|PQRè*ƒÄ(éêƒÉ ‹D$ƒÉ@Ht%Htƒèt‹EƒÅ‰l$x3Òë‹E‹UƒÅ‰l$xëƒÅ3À‰l$xf‹Eü™€ûou¾ë€ëuöÛÛƒãƒÃ ‹óQ‹L$Q‹L$,Q‹L$pVR‹T$|PD$(R‹T$|PQRè ƒÄ(é`ÝE‹|$‹D$ƒÅ3ö‰l$x3í;þ‰|$(‰t$} ¿‰|$(ÜHFÝT$,ßàöÄtÙàÝ\$,ÇD$-ëöÁÝØt ÇD$+ë öÁtÇD$ ÝD$,èg‹Øƒÿ ‰\$~ ¿ ‰|$(ÝÈF…ÿt ‹ÇÜ Ø#FHu÷ÛD$Ül$,ÙÉÞÉÙÀè+‰D$ÛD$ØéÜÐ#FßàöÄÝØuÿD$‹L$ÝÈF…ÿt ‹ÇÜ Ø#FHu÷ÛD$ØÙßàöÄÝØuÝÈFC…ÿt Ü Ø#FOu÷èÍ‹L$+ȋÿ ™÷ÿEŠ‚¸#FˆD,3¸gfff÷ëÁú‹ÂÁèЋÚtƒýrуýu½‹\$(ÆD,4‹Á¿ ™÷ÿ¸gfffFŠ’¸#FˆT4G÷éÁú‹ÂÁèÐ;ó‹Ê|Ôƒþu¾‹|$‹D$$3ÉÆD4H…ÿ•Á+Á+Å+ÃH+Þ‹ø‰\$‰|$$yÇD$…ÿ}3ÿ‰|$$ŠD$ ¨t÷߉|$$¨ti…ÿŽŽ‹D$…Àt*‹T$h‹L$dPD$R‹T$hPQRèƒÄO‰|$$ÇD$…ÿ~X‹\$hÇD$$‹L$d‹T$`j0D$SPQRè߃ÄOuãë-…ÿ~)‹\$hÇD$$‹L$d‹T$`j D$SPQRè°ƒÄOuã‹D$…Àt‹|$h‹\$d‹L$`PD$WPSQ舃Äë‹|$h‹\$d…í~¾T,3M‹L$`RD$WPSQè_ƒÄ…íá‹D$(…ÀöD$ t7‹l$`j.T$WRSUè6ƒÄ…ö~!¾D4GNPL$WQSUèƒÄ…öåë‹l$`‹t$…ö~j0T$WRSUè÷ƒÄNuë‹t$$…ö-‹|$h‹\$d‹l$`÷Þj D$WPSUèȃÄNuëé‹D$ƒÅ‰l$xéõ‹M‹T$hƒÅQ‹L$hD$R‹T$hPQR‰¬$Œè†ƒÄ鯋D$ƒÅ‰l$x‹mü…À}‹D$d…Àt ÇD$ÿÿÿë ‹D$h‹‰T$3ÿ‹Ý…íu»°#FŠ3À„Òt ŠT@„Òu÷‹t$$+ðy3ööÁt÷Þ…ö~*‹l$h;|$} ‹L$d‹T$`j D$UPQRèüƒÄNG…öÚŠ„Àt.‹l$h;|$}$‹L$d‹T$`¾ÀPD$UPQRCèÉŠƒÄG„ÀuÖ…öÿ;|$õ‹D$h‹T$dj L$P‹D$hQRPè’ƒÄFG…ö|ÒéÌ‹T$$‹EƒÉƒÅQ‹L$QR™jR‹T$xP‹„$€L$(P‹D$|QRP‰¬$ èȃÄ(鈋D$ƒøu‹Mf‹T$ƒÅ‰l$xf‰ëkƒøu‹E‹L$ƒÅ‰l$x‰ëTƒøu‹U‹D$ƒÅ‰‰l$xÇBë6‹M‹T$ƒÅ‰l$x‰ë$‹T$dP‹D$lL$P‹D$hQRPèƒÄëF‰t$t‹t$t3À‰D$$‰D$ŠFˆ\$‰t$t3ÿ‰D$ ÇD$ÿÿÿÿ‹Èésöÿÿ‹ÿá:Bo;B B#BBÈ=B¸>BCB1>BLCBRBBDBDB        ¸(èFü‹D$LSU3íV;ÅW‰l$ÇD$õI‰l$}‰l$\ŠD$`‹t$L‹|$P¨@u4;ý|;õs÷ÞýÇD$-÷ßë¨t ÇD$+ë ¨tÇD$ ¨t ‹L$Tƒùu ÇD$ˆÕHë ƒùuÇD$ô#F¨ tÇD$‹D$»à#F…Àu»¸#F3ÀP‹D$XPWVèOýŠ ‹T$T3ÀˆL,PRWVEèÈü‹ú‹ð Çtƒýr»ƒý‰l$Lu ÇD$L‹l$L‹D$\ÆD,‹ð+õ;ʼnt$\|‹è‹|$ƒÉÿ3À‹T$ò®÷Ñ3ÿI;׋T$X•À+Ð+Õ+Ñ;÷‰T$T}‰|$\‹÷;×}‰|$T‹×ŠD$`¨t;ò}‰T$\‰|$T‹×¨t÷Ú‰T$T‹t$H‹\$@‹l$<;׋|$D~)‰T$`ÇD$Tj VWSUèé‹D$tƒÄH‰D$`uç‹T$T‹D$…ÀtPVWSUèÅ‹T$hƒÄ‹L$Š„Àt#¾ÐRVWSUè§‹D$$ƒÄ@‰D$Š„Àuá‹T$T‹D$\…À~!‰D$\j0VWSUèz‹D$pƒÄH‰D$\uç‹T$T‹D$L…À~'‹D$LH‰D$L¾DPVWSUèH‹D$`ƒÄ…ÀÝ‹T$T…Ò}÷Ú‰T$Tj VWSUè$‹D$hƒÄH‰D$Tuç_^][ƒÄ(ÃS‹\$ U‹l$…ÛV„‹t$‹E9‚…Wƒ;uO…ÀuÇE‹Ehãh˜#FPè ¢ÿÿ‰‹ƒÄ …Év‹T$‹ø‹Á‹2Áéó¥‹Èƒáó¤‹t$‹L$Çë hë‰E‹h˜#FPRè>¢ÿÿƒÄ‰‹E‹;Èsƒ_ë‹t$‹‹M;Ás‹L$‹ …Éu‹ ŠT$ ˆ‹@‰^][øèöø‹D$‹L$ ‰D$‹D$T$‰L$ RL$PT$ QD$RPL$ jQè¡ñÿÿ‹D$ƒÄ…Àu ‹D$=ÿÿÿvƒÈÿƒÄø è–ø‹D$$…À|.=Š}'…Àt @‹Í FI…ÒuhëJ@Õ˜FIƒÄ Ë HJ…ÉtE‰D$D$T$PQÇD$‰T$ è‡îÿÿƒÄ…Àt‹@ƒÄ Ãh(hH]Fjejgj蔎ÿÿƒÄ3ÀƒÄ ø èö÷‹D$$…À|.=Š}'…Àt @‹Í FI…Òuh7ëL@‹Õ˜FIƒÄ Ë HJ…ÉtG‰D$D$T$PQÇD$‰T$ èçíÿÿƒÄ…Àt ‹H‹ƒÄ ÃhHhH]FjejhjèòÿÿƒÄ3ÀƒÄ ø èV÷‹D$$…À|.=Š}'…Àt @‹Í FI…ÒuhWëM@‹ÕœFIƒÄ Ë HJ…ÉtH‰D$D$T$PQÇD$‰T$ èGíÿÿƒÄ…Àt ‹H‹AƒÄ ÃhhhH]FjejfjèQÿÿƒÄ3ÀƒÄ øè¶öSUV‹t$ 3íW;õu _^]3À[ƒÄËF;Å…¯¡HJ;Åt(L$‰l$QP‰t$$èÇìÿÿƒÄ;Åt‹P_^]‹B[ƒÄË~ ÇD$i‰|$‹D$‹ÏÅ™+ÂÑø‹… —I… —I+J u‹v‹Ï‹z3Òó¦tÒƒÚÿ‹t$$‹|$‹Ê…É}‰D$ë~h;l$|®_^]3À[ƒÄÃ…Ûu _^]3À[ƒÄË ‹A_^][ƒÄø$èÆõ‹D$,SUV…ÀW…b‹D$8‰D$¡HJ…Àt*T$L$RPÇD$‰L$ èÚëÿÿƒÄ…Àt‹@‹@ëv3ÛÇD$ƒ‹L$‹L$™+‹øÑÿ‹½ˆƒI,½ˆƒI‹2ŠŠÂ:u„ÀtŠAŠÐ:FuƒÁƒÆ„Òuà3ÀëÀƒØÿ…À}‰|$ë~ _;\$| ë…ít‹M‹A…À…ã¡HJ‹T$8…À‰T$ t-T$L$RPÇD$‰L$ è!ëÿÿƒÄ…Àt ‹@‹@é¡3ÛÇD$ƒ‹L$‹L$ ™+‹øÑÿ‹½”I,½”I‹rŠŠÂ:u„ÀtŠAŠÐ:FuƒÁƒÆ„Òuà3ÀëÀƒØÿ…À}‰|$ë~5_;\$|Ÿ‹L$8jÿQjjèm‹øƒÄ…ÿ®èŒÿÿ_^]3À[ƒÄ$Ã…ítЋM‹A…ÀtÆ|2=Š}+…Àt@‹ Õ FI…ÉuhëR@_^]ŘFI[ƒÄ$Ë HJ…ÉtI‰D$$D$T$PQÇD$‰T$ è êÿÿƒÄ…Àt ‹@_^][ƒÄ$Ãh(hH]FjejgjèŠÿÿƒÄ_^]3À[ƒÄ$ÃjWjèÏËÿÿ‹Øh£hH]FSèí›ÿÿ‹ðƒÄ…öu_^][ƒÄ$ÃjjWT$HjR‰t$Pè·Êÿÿ‹D$L‹L$PjÿPWQèlT$`SRj‰t$lè4nV‹øèžÿÿƒÄ4‹Ç_^][ƒÄ$ø\èöò‹D$dS3ÛW;ÃŽ‹|$p;û„9_„þ‹D$tU;ÃV…¢‹w;ó…»¡HJ;Ãt%L$‰\$QP‰|$$èìèÿÿƒÄ;Ãt ‹P‹ré‹w ÇD$i‰t$|‹D$‹ÎÙ+ÂÑø‹… —I,… —I+J u!‹z‹T$x‹Î‹r3Òó¦tÒƒÚÿ‹|$x‹t$|‹Ê…É}‰D$ë ŽX;\$|¦‹o ‹3ö3É…í‰l$|‰|$x~Š7ŠÐƒâ ʨ€tÁáF;õ|ê¸ÍÌÌÌF÷áÁêƒú~º’Áà+ÈQRL$Xhl]FQÿF|$`ƒÉÿ3À‹”$„ò®‹¬$€D$`÷ÑRIPU‹ùè,j‹œ$‹Œ$˜ƒÄ+ßï3À;ñ‰|$t}f‹L$xŠ 1ŠÑƒâ ÂöÁ€uGPD$Thd]FPÿF|$\ƒÉÿ3ÀƒÄ ò®÷ÑI…Û‹ù~L$PSQUèÆiƒÄ ‹D$t+ßÇï‰D$t3À‹L$|ÁàF;ñ|š‹D$t^]_[ƒÄ\Ã…í„âþÿÿ‹E‹p…ö„Ôþÿÿ»|SþŠ}KvÁà‹ˆ FI…ÉuhWël‹¸œFI…ÿ…Ç…ö|wþŠ}ovÁà‹ˆ FI…ÉuWh7錡HJ…ÀtÑT$L$ RP‰\$ ‰L$$‰t$0èÇæÿÿƒÄ…Àt‹@‹xëŸhhhH]FjejfjèÓ†ÿÿƒÄ닸˜FIëL¡HJ…ÀtAT$L$8RP‰\$‰L$‰t$HèræÿÿƒÄ…Àt‹@‹8ëhHhH]Fjejhjè†ÿÿƒÄ3ÿ‹L$t‹T$pQWRèzhƒÉÿ3ÀƒÄ ò®÷Ñ^I]_‹Á[ƒÄ\ËT$hÆ_3À[ƒÄ\ø è¶ï‹D$$S‰D$ ¡HJUV…ÀWt0T$L$RPÇD$‰L$èÖåÿÿƒÄ…Àt‹@_^]‹@[ƒÄ Ã3ÛÇD$4ƒ‹L$4‹L$™+‹øÑÿ‹½ˆƒI,½ˆƒI‹2ŠŠÂ:u„ÀtŠAŠÐ:FuƒÁƒÆ„Òuà3ÀëÀƒØÿ…À}‰|$4ë~_;\$4| _^]3À[ƒÄ Ã…íu _^]3À[ƒÄ ËM_^]‹A[ƒÄ ÃSU‹l$V…íWt;3Û…í~5+™+‹ø‹D$Ñÿ‹÷¯t$ ð‹D$VPÿT$,ƒÄ…À}‹ïë~_;Ý|Ë_^]3À[ËÆ_^][ÃS‹\$ VW‹|$‹ ‹+Áuk¡PJ…Àt-‹7PèŒÏÿÿƒÄ;Æ~¡PJVPè‰Ïÿÿ‹K‹WQRÿPƒÄ_^[Ës‹GŠŠŠÊ:Óu „ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ_^3À[ÃÀƒØÿ_^[áPJV‹t$W…Àt-‹>Pè ÏÿÿƒÄ;Ç~¡PJWPèÏÿÿ‹NQÿƒÄ ‹È‹_3Á^ËVRè;åÿÿƒÄ‹È‹_3Á^øè†íSVW‹|$ 3Û…ÿu _^3À[ƒÄË TJ…Éu=jèÜÿÿh SBh°SBèðßÿÿj£TJèÜÿÿ‹ TJƒÄ3À…É•À…Àu_^[ƒÄËD$$‰|$‹ð€ä‰D$ D$ PQæ€èWãÿÿƒÄ…Àt3‹H…Ét5…öu1Cƒû rÿÿÿ‹H ¡TJT$ ‰L$RPè$ãÿÿƒÄ…ÀuÍ_^3À[ƒÄË@ _^[ƒÄáTJV…Àu8jè_Ûÿÿh SBh°SBè0ßÿÿj£TJèDÛÿÿ‹TJƒÄ3À…Ò•À…Àu^Ãhºht]FjèÝ”ÿÿƒÄ …Àu^ËL$P‰H‹L$‹Ñ€å‰‹L$ H ‰P‹TJRèåßÿÿ‹ðƒÄ…ötG¡PJW…Àt,‹>Pè:ÍÿÿƒÄ;Ç~¡PJWPè7Íÿÿ‹N ‹Q‹NRQÿPƒÄVèà–ÿÿƒÄ_¸^ËTJ‹B\…Àtì3À^áTJW…ÀtkV‹t$ ‰5LJ‹x Ç@ ¡TJh`VBPè!âÿÿƒÄ…ö^}6‹ TJQèíÞÿÿ‹PJhWBRèÌÿÿƒÄ ÇTJÇPJ_áTJ‰x _øè6ë‹D$V…Àt|‹ LJ…É|;un‹ TJ…Étd‹P‹‰T$ T$€äRQ‰D$ è*àÿÿ‹ðƒÄ…öt@¡PJW…Àt,‹>PèÌÿÿƒÄ;Ç~¡PJWPè Ìÿÿ‹N ‹Q‹NRQÿPƒÄV赕ÿÿƒÄ_^ƒÄËD$Pè–•ÿÿYø`è†êV‹t$hVè»óÿÿƒÄ‰D$…Àt‹ XJD$PQèßÉÿÿ‹ÐƒÄƒúÿuYjYh ]FjyjtjèÀÿÿƒÄ…öu‹˜]F œ]F‰T$ˆD$ëVL$jPQèšdƒÄ T$Rh]FjèÖˆÿÿƒÄ 3À^ƒÄ`ÃS‹\$p…Ûu3öë‹t$tƒþÿuW‹û Î3Àò®÷ÑI_‹ñ¡XJRPè Ëÿÿ‹Œ$ˆ‹PQ‹HR‹”$ˆQ‹Œ$RVSQÿP ƒÄ$…À[ujeh ]Fjxjtjè €ÿÿƒÄ3À^ƒÄ`ø^ƒÄ`áXJh ìAPèÊÿÿƒÄÇXJËL$3À‰‰A‰A‰A ÃSV‹t$ W‹|$‹Nƒáý‰N‹N…Ét‹…Àt…ÿ„½‹‹;Ó„±…ÿ„¿…Ét Qè9hƒÄ‹\$…Ût!Sè˜gƒÄ…Àu!h¢h¸]Fh†é‹PèuɃċ؅Ûto‹QSèƒÉƒÄ…Àuh°h¸]Fh†ëk‹ø‰^‹;Çt6…Àt‹HD…Ét ‹V Rèl“ÿÿƒÄ‰>‹D…ÿthÊh¸]FWèÐÿÿƒÄ ‰F ‹VÿPƒÄ_^[ÃÇF뮃>u©hÀh¸]Fh‹h€jè”~ÿÿƒÄ3À_^[ËT$ ‹D$R‹T$ ‹RPÿQƒÄ ÃSV‹t$ W‹ƒx$~hÐ]Fhæh¸]FèMÖÿÿƒÄ ‹T$‹RVÿQ‹Ø‹D$ ƒÄ…Àt‹‹Q‰‹‹@ …ÀtVÿЋFƒÄ ‰F‹‹~ 3À‹ID‹ÑÁéó«‹Êƒáóª_‹Ã^[ÃSU‹l$…턃}„‹E…Àt*PèûeƒÄ…Àuhh¸]Fj&jnjèŸ}ÿÿƒÄ3À][Ë\$ ‹…Àt‹@ …Àt öCuSÿЃÄ‹…Àt!‹HD…Ét‹C …ÀtQPè¿‹C PèÖ‘ÿÿƒÄ ‹C…Àt PèfƒÄ‹Ó3ɋʼn ‰J‰J‰J ‹‹Ë‰‹P‰Q‹P‰Q‹@ ‰A ‹ ‹AD…Àt2VWhh¸]FPèÿŽÿÿ‹‰C ‹u ‹ø‹JDƒÄ ‹ÁÁéó¥‹Èƒáó¤_^‹ ‹A…Àt USÿЃÄ][Ã]¸[Ãhýh¸]Fjojnjè¯|ÿÿƒÄ3À][øèæ3É‹T$(‰L$V‰L$R‹Á ‰L$‰D$‹D$,L$PQè»üÿÿƒÄ …À„¬‹T$‹D$R‹T$L$PQÿRƒÄ …À„‹‹D$ƒx$~hÐ]Fhæh¸]Fè1ÔÿÿƒÄ ‹L$ ‹D$T$QRÿP‹L$ ‹ð‹D$,ƒÄ…Àt‹Q‰‹A …ÀtL$QÿЋD$‹L$ƒÄ ‰D$ ‹IDW‹|$‹Ñ3ÀÁéó«‹Êƒáóª…ö_t¾ë3ö‹D$…ÀtC‹H …ÉtöD$ uD$PÿÑ‹D$ƒÄ…Àt#‹@D…Àt‹L$…ÉtPQèÔ‹L$QèêÿÿƒÄ ‹D$…Àt Pè)dƒÄ‹Æ^ƒÄÃV‹t$‹…Àt‹@ …Àt öFuVÿЃÄ‹…Àt!‹HD…Ét‹F …ÀtQPèg‹F Pè~ÿÿƒÄ ‹F…Àt Pè¾cƒÄ3ɸ‰‰N‰N‰N ^ËD$‹H Qè“ÊÿÿƒÄËD$ ‹T$‹L$P‹B QPèYÆÿÿƒÄ ËD$‹T$‹H QRèÉÿÿƒÄøø]Føh^FËD$hh^FPèáEƒÄø ^Fø_FËD$ ‹L$‹T$h_FPQR臃ÄËD$‹L$h_FPQè3ƒÄ ËD$h_FPèaEƒÄËD$Ph_FèÁXƒÄÃVjthˆ_Fjè‹ÿÿ‹ðƒÄ …ötèÀÿÿ…À‰t èY…À‰Fu8j~hˆ_FjAh«j èLyÿÿƒÄ…öt‹…Àt Pè¹ÃÿÿƒÄVè°ÿÿƒÄ3À^ËL$¸‰F‰1^ÃVW‹|$ …ÿt+‹7…öt%‹FPè×X‹hÐ]BQèÃÿÿVèdÿÿƒÄÇ_^øèFâ‹D$‹L$(‹T$$S‹UVW‰D$‹ð‹D$0Q‹L$0R‹T$,PQhØ^FD$(RL$(3íPQ‰l$0èsƒÄ ;ʼnD$8އ‹\$‹;;ýt%;Ýt!‹WRè=X‹hÐ]BPè€ÂÿÿWèÊŒÿÿƒÄ‰+jthˆ_Fjè7Šÿÿ‹ØƒÄ ;Ýtèɾÿÿ;ʼnt è¾W;ʼnCuYj~hˆ_FjAh«j èxÿÿƒÄ;Ýt‹;Åt PèoÂÿÿƒÄSèfŒÿÿƒÄhÇhˆ_Fj:hžj èËwÿÿƒÄ3À_^][ƒÄÃÇC‹L$‹S+ÎQRèÇWƒÄ…Àt½‹L$‹C+΋x‹ÑÁéó¥‹Êƒáó¤‹D$Pè,ÂÿÿƒÄ…À~`‹L$UQè*Âÿÿ‹ð3ÿVèÂÿÿƒÄ …À~,WVèÂÿÿ‰h‹PRèÁÿÿƒÄ…À„XÿÿÿVGèäÁÿÿƒÄ;ø|ÔVè§Áÿÿ‹D$EPèÌÁÿÿƒÄ;è| ‹L$Qè‹Áÿÿ‹T$ ‹L$$ÇC‹D$‰‰‹D$<ƒÄ_^][ƒÄøèVà‹D$ SUV‹03ÛW9^„ ‰\$‰\$ƒÍÿèQ½ÿÿ;ÉD$„’‹QèMÁÿÿƒÄ…À~W‹SRèMÁÿÿ‹øƒÄ9ot"è½ÿÿ…À‰D$t_P‹D$ Pè+ÀÿÿƒÄ…ÀtM‹o‹L$WQèÀÿÿƒÄ…Àt8‹CRèöÀÿÿƒÄ;Ø|©jÿjÿhØ^FD$(jPè 0‹N‹øWQè>VƒÄ…Àu5‹D$h°bBPè8Àÿÿhøhˆ_FjAhžj èðuÿÿƒÄƒÈÿ_^][ƒÄËVjÿjÿL$‹BhØ^FT$(QR‰D$(è /‹D$0h°bBPèá¿ÿÿƒÄÇF…ÿ‹Ç|$‹v‹T$ …Ò‹t‹v‹:‹È‹ÙÁéó¥‹Ëƒáó¤_^][ƒÄËD$Pèæ¿ÿÿYøèÖÞV‹t$$‹F$öÄu)jqhl`Fjj è)ÊÿÿVèsjshl`Fjj èÊÿÿƒÄ$‹D$(ƒøÿu ¸^ƒÄÃø|ƒøHë#‰D$¡\J…ÀtL$QPèè½ÿÿƒÄƒøÿtƒÀƒøÿuƒÈÿ^ƒÄÃ…À}‹L$,3ÀQVPÿP ƒÄ ^ƒÄÃøs"‹L$,Å+ÐQV•P¡IPÿP ƒÄ ^ƒÄÃÀøP¡\JPèB¿ÿÿ‹L$4ƒÄQVPÿP ƒÄ ^ƒÄËD$…À}3ÀÃøs Å+ÈP¡IË\JƒÀøPRèï¾ÿÿƒÄøè–Ý‹D$ ƒø| ƒøHƒÄÉD$¡\J…ÀuƒÈÿƒÄÃL$QPèä¼ÿÿƒÄƒøÿu ÀƒÄÃÀƒÄÃV‹t$‹F$öÄ…‡S3ÛWFhPbFjrjxjè£gÿÿƒÄ3À^]YËl$öEthEhPbFjijxjè{gÿÿƒÄ3À^]YÃhHµhPbFPè[yÿÿ3ÒƒÄ ;‰D$uhKhPbFjAjxjè9gÿÿƒÄ3À^]YËMW;ÊtTS‹]Áû;Ú~)‹Q‹q‹y ‹)‰(‰P‰p‰x ƒÀƒÁKuá‹t$‹l$3Ò‹}[ƒçOtOt Ou‹y‰x‹y‰x‹ ‰‹M‹D$ <ˆ‹Æ+ÁÁø;Â~‰‰W‰W‰W ‰W‰W‰W‰WƒÇ Huã+uƒæ‹Î~3Àó«‹D$ _^]YÃS‹\$ V‹t$ W;^~$SVè™þÿÿ‹øƒÄ…ÿt‹…Àt PèÔzÿÿƒÄ‰>‰^‹Æ_^[Ã_^3À[ÃVW‹|$ …ÿu_3À^Ãh'hPbFjè xÿÿ‹ðƒÄ …öuh)hPbFjAjqjèfÿÿƒÄ3À_^ÃWVÇFÇFÇF ÇFÇèA‹øƒÄ…ÿu-‹…ÀtöFu Pè6zÿÿƒÄ‹NŠÁ€Í€¨‰Nt VèzÿÿƒÄ‹Ç_^ÃS‹\$U‹l$V;ÝW„Ê‹u‹C;ð‹Ãë:;ð‰\$~.VSèýÿÿ‹øƒÄ…ÿt‹…Àt PèÊyÿÿƒÄ‰;‰sëÇD$‹D$…Àu_^][ËU‹‹MÁú…Ò~/‰T$‹Q‹q‹y ‹)‰P‹T$‰(‰p‰x ƒÀƒÁJ‰T$uÙ‹l$‹UƒâJtJt Ju‹Q‰P‹Q‰P‹ ‰‹E…À‰Cu ‹…ÀtÇ‹U ‰S _^‹Ã][ÃV‹t$‹Fƒør‹Æë:SƒøW‹Þ}-jVè®üÿÿ‹øƒÄ…ÿt‹…Àt PèéxÿÿƒÄ‰>ÇFë3Û‹Ã_[…Àu^Ë‹L$ ÇF ÇF‰‹ƒ:tÇF¸^ÃSUV‹t$W3ÿ;÷uKh'hPbFjèvÿÿƒÄ ;Çuh)hPbFjAjqjèåcÿÿƒÄ3À_^][ÃÇ@‰x‰x ‰x‰8‹ð‹l$3Û;ïu ‰~‹Æ_^][Ãí/‹N™ƒâÂÁø;Á‹ÆëXí‰t$™ƒâ‹ø‹FÁÿG;ø~4WVè£ûÿÿƒÄ‰D$…Àt‹…Ét QèÜwÿÿ‹D$ƒÄ‰‰~ëÇD$‹D$3ÿ;Çu_^]3À[ÃUÿ‰~ ‹Ê‹ÂÁéAƒà;ï‰Nv8‹l$ÁáB‰T$3ÒŠUÁã ÚE‹ÐH…Òu‹ƒé‰3Û¸‹T$J‰T$uÔ‹F;Ç~‹Dü‹ƒè…Òu ‹VJ‹Ê‰V;Ïê‹Æ_^][ÃS‹\$UV‹K…Éu3ÀëU‹‹DˆüÁáƒé ©ÿÿt%©ÿtÁè¾€ aFƒÀë*Áè¾€ aFƒÀëöÄÿtÁè¾€ aFƒÀë¾€ aFÁƒÀ™ƒâ‹ðÁþ‹î‹ÎN…É~;W‹|$‹Æ‹Î™ƒâ‹Áøá€yIƒÉüA‹‚ÁáÓèG‹ÎN…ɈGÿÑ_‹Å^][ËÅ^][ËT$V‹t$ W‹J‹~‹Á+Çu#‹:‹Aÿ…À| ‚+ú‹‹1;òu Hƒé…À}ï3À_^ÃÀ_ƒà^HÃSUVW‹|$…ÿty‹t$…öti‹G ‹N ;Át ÷ØÀ_$þ^]@[Ã…Àu ¸ƒÍÿëƒÈÿ½‹O‹V;ÊF}_‹Å^][ÃQÿ…Ò|‹6‹+Þ –‹4 ‹9;÷w$rÞJƒé…Ò}í_^]3À[Ã_^]ƒÈÿ[ËL$3À…É•À_^][ËL$U‹ÁV™ƒâW‹èÁýá€yIƒÉàA‹t$‰L$9no‹F};ø‹Æë@;øS‰t$~2WVèäøÿÿ‹ØƒÄ…Ût‹…Àt PèuÿÿƒÄ‰‰~ëÇD$‹L$‹D$[…Àu_^]ËF;Ç}‹@;ÇÇD‚ü|ñ‰~‹ºÓâ‹ ¨¨_^] ʉ¸ËL$V…É}3À^Ët$‹Á™ƒâЋFÁú;Â3À^Ãá€yIƒÉàA¸Óà‹‹4‘#Æ^÷ØÀ÷ØÃ‹D$ ‹T$VW‹|$ ‹t‚ü‹L‡ü;ñt À_ƒà^HÃHþ…É|Š+ú‹‹0;òuâIƒè…É}ï_3À^ÃU‹l$W‹|$…ÿ‹Åt&V7Š „JˆŠ „J@ŠÐ€â€ÂÊNˆ „JuÞ^¡„JW%ÿPUÿTFƒÄ …À_]t€„J?ø¨bFøàbFËD$ ‹L$‹T$hàbFPQRè—ƒÄËD$‹L$hàbFPQè,ƒÄ ËD$hàbFPèq*ƒÄøcFø cFËD$‹L$h cFPQèÌƒÄ ËD$h cFPè*ƒÄø@cFËD$ ‹L$‹T$h@cFPQRèǃÄÃh@cFè¶"ƒÄËD$h@cFPè±)ƒÄø`cFÃh`cFèv"ƒÄø€cFø cFødFø`dFøàdFøeFËD$ ‹L$‹T$hàdFPQRè÷ƒÄËD$‹L$hàdFPQèŒƒÄ ÃhàdFèÆ!ƒÄËD$hàdFPèÁ(ƒÄø eFø@eFø`eFø€eFøÀeFø˜gFøhFÃhhFè&!ƒÄËD$hhFPè!(ƒÄøèæÅV‹t$$3À;ð‰D$ut$L$…ÉtˆD$‹L$,T$R‹T$,PP‹D$hLhFj:éc‹D$8‹L$‹T$…ÒtUSjÿÒƒÄ …À„6‹D$8‹L$‹UÇD$‰T$<‹U …ÒŽ5‹D$<‹L$0jPQ貋ðƒÄ …ö„‹T$0VRèÞ±‹L$‹Ø‹D$@ƒÄ…À„÷ƒø‹ù|€9u ŠQ„Ò„‡‹M ‹T$I;ÑuÆD$$ë Š€âˆT$$‹L$L‹T$$QRVPD$$PSè/ƒÄ…À„™ƒøÿuVSèø%‹D$@‹L$ƒÄë‹L$‹D$8+ùljD$8‹T$‹|$<‹u BƒÇ;Ö‰T$‰|$<}^é$ÿÿÿŠT$@ƒÁ„Ò‰L$uhQhLhFhŸé!+ùÆD$@ljD$8ŠT$H„ÒuW…ÀtShuhLhFh”éô‰t$ é÷ŠT$@„Òtσø|€9uŠQ„Òu ƒÁ‰L$ëµhphLhFh‰éµ‹T$‹E ‹|$0;Ð}W‹D$ë‰D$‹ø;t USWèÇ«ƒÄ ‰t$ƒÇë‹|$ ƒû È„rCÿƒø‡Ìÿ$…pB‹T$(D$$RPWè…1ƒÄ …Àt&én9l$(tBhÏhLhFhjlj è+LÿÿƒÄ‹D$Pèîîÿÿ‹D$ƒÄ…ÀtÇ‹D$_^[]ƒÄ ÃÇéƒ|$(th×hLhFjjë­‹T$$3ÉŠ ‰é÷‹D$(L$$PQWèB¨ƒÄ …Àt“éÛ‹Ã-„£ƒè„š‹7;õu$Sèÿÿ‹ðƒÄ;õuhhLhFjAéFÿÿÿ‰7ë‰^‹l$0€}t#‹F…Àt PèÜ_ÿÿƒÄ‹T$$‹D$(‰V‰ÆEëk‹L$(‹T$$QRVè–ŽÿÿƒÄ …ÀuThhLhFjAjlj èKÿÿVèÔÿÿƒÄÇéÞþÿÿ‹D$(L$$PQWè&ƒÄ …À„Ãþÿÿ‹‹Pâ Ó‰P‹D$…Àt ƒûuÇ@_ÇD$‹D$^[]ƒÄ ÃI*ŒBBNŒB€ŒB׋B»‹B¸è´‹L$SŠ\$(U‹VW‹|$(€ã‰D$…ÿˆ\$4uŠÓ„Òu‹T$0_Â^‰]¸[ƒÄËt$0…öŽd‹èƒþ‰l$ |€8u ŠH„Ʉʋ\$<‹D$8jjSPL$$VT$'QD$4RPjL$t&‹N‹n‹F‰L$H‹N ‰l$‰L$‹NщT$éT$HSD$RL$ PT$QR蕇ÿÿƒÄ…ötX‹T$‹L$H‹l$‰V ‹T$‰N‹Ê‰F+ωn¨‰NÆu6Í;Ë~0hŸhLhFh›jhj èÖGÿÿƒÄÆ3À_^][ƒÄ ËT$‹l$¨€t)h§hLhFjfjhj è¥GÿÿƒÄ…ötÆ_^]3À[ƒÄ ËL$<…É|;L$uu‹L$@‹\$H;Ëui…ötƨt ‹L$8+úù‹ï‹t$,…ötŠÈ€áˆ‹L$0…Ét$ ˆ‹D$ …Àt‰(‹D$(…ÀtŠL$Hˆ‹D$$…Àt‹L$‰‹D$4_^]‰¸[ƒÄ ÊD$D„Àt _^]ƒÈÿ[ƒÄ Ã…ötÆh²hLhFh¨jhj èÜFÿÿƒÄ3À_^][ƒÄ ÃSU‹l$V…íWtlƒ}uf‹\$jjÿSD$ jPèy‹øƒÄ…ÿ_^][ÃjYhhhFWè~Xÿÿ‹ðƒÄ …öu_^]ƒÈÿ[ÃjjÿL$$ST$ QR‰t$0è5ƒÄ‹Ç‰u_^][ËD$jjÿPL$ UQèƒÄ_^][øè–¯SUV‹t$3ÛWŠ‹F‹|$„Ét9„ü;Ãt‹P;Ót‹ê‰l$ë‰\$‹ë¾Éƒù‡×ÿ$à•B‹F…ÀtP‹D$ PWè˜ƒÄ _^][YË\$$‹NT$$VRjW‰\$ ‰L$4è‹è‹D$4ƒÄƒøtƒøt ƒøýÇD$ uÇD$ ƒýÿ„fƒûÿu‰D$‹\$…Ût6‹D$ …Àt‹D$(‹L$PQUjSè%†ÿÿƒÄ‹T$$VRPWèS‹ƒÄʼn‹D$ …À„µ‹L$QUjèцÿÿƒÄ _^][YËVD$$VPjW‰T$4è‹è‹D$4ƒÄƒøtƒøt ƒøýÇD$(uÇD$(ƒýÿ„·‹\$‰D$ …Ût/‹L$(…ÉtjPUjSè‚…ÿÿƒÄ‹L$$VQRWè°‹ƒÄʼn‹D$(…Àt‹D$ PUjè2†ÿÿƒÄ _^][YÃ_‹Å^][YÃ…ít VWjÿÕƒÄ …ÀtEVWè霃Ä…À|*;F }%‹V €4ŠVWèýž‹L$$VQPèñƒÄ_^][YÃ…ít VWjÿÕƒÄ 3À_^][YËT$(‹L$$R‹T$ QVRWÿPƒÄ_^][YËt$…öt‹‹VQÿP ƒÄ…ötÅ‹L$$ƒùÿt¼Š_€â ^ ÑŠL$ Ñ]ˆ[YË\$VWD$ SPèï3ɃÄ;Á|‹~ ‹D$_^][YËD$$‰L$ƒøÿu ÇD$$‰L$(;étVWjÿÕƒÄ …À„Qÿÿÿ‹F ‹N3í‰L$ …À~N‹T$ jRWè/ž‹ØƒÄ …Û„'ÿÿÿSWèûSjPèò‹\$,‹T$4ƒÄØ‹F ƒÂE‰\$;è‰T$ |¶‹\$‹l$$‹D$UPjè­„ÿÿƒÄ ‰D$$…Û„Õþÿÿ‹L$(‹T$QURjS諃ÿÿ‹FƒÄ‰D$ ‹F 3í…À~C‹L$ jQWè›‹ØƒÄ …Û„“þÿÿSWèg‹T$$SRPè[‹T$4‹F ƒÄƒÂE‰T$ ;è|½‹D$…ÀtVWjÿÐƒÄ …À„Qþÿÿ‹D$$_^][YËÿU’B€”BÏ“BJ”B-”B(“B¸$è–«SUV‹t$‹ðhhhFS‰t$8è{RÿÿƒÄ‰D$0…ö„…À…º‹D$_^][ƒÄ$ÃU‰t$DèþŠÿÿƒÄ…ÀŽgVUèüŠÿÿ‹\$DƒÄ‰D$‹j…ÀjÿWuHD$$jPèúùÿÿƒÄ…À~CjYhhhFPèRÿÿ‹ðƒÄ …öt-jjÿL$(WT$$QR‰t$4èÅùÿÿƒÄ‰3ëD$$SPè³ùÿÿƒÄ‹t$@UF‰t$DèqŠÿÿƒÄ;ðŒsÿÿÿ‹D$_^][ƒÄ$ÃU‰D$<ÇD$DèHŠÿÿƒÄ…ÀŽã^‹L$@QUè?Šÿÿ‹T$@‰D$4‰D$$D$@ƒÄ‰Sø…Àtz‹D$8…ÀurjjÿWL$(jQè,ùÿÿ‹øƒÄ…ÿ‹|$ëijYhhhFWè0Qÿÿ‹ðƒÄ …öu ‹|$‹t$ ƒÈÿëF‹T$jjÿD$0RL$(PQ‰t$<èÞøÿÿ‰t$L‹t$4‹Ç‹|$,ƒÄëjjÿT$@WD$(RPè·øÿÿƒÄ‹T$@‹L$,B‰Cü‰ U‰T$DƒÃ èi‰ÿÿ‹L$DƒÄ;ÈŒ ÿÿÿh›Bj UèM‰ÿÿƒÄPVÿLF‹T$LUÇD$T‹‰D$Lè*‰ÿÿƒÄ…À~D^‹ ‹sü‹|$8‹ÑÁéó¥‹ÊUƒáƒÃ ó¤‹Cô‹T$<‹t$DÐF‰T$<‰t$DèêˆÿÿƒÄ;ð|Ët$ ‹T$<‹D$‹L$8ƒø‰ u-U3ÿèĈÿÿƒÄ…À~^‹PWUèàˆÿÿUGƒÃ 覈ÿÿƒÄ;ø|åVèiRÿÿ‹L$4Qè_RÿÿƒÄ‹D$_^][ƒÄ$ètsjjÿÿV‹\$@PjSè˜÷ÿÿ‹øƒÄ…ÿu_^][ƒÄ$ËVRWjèkÿÿ‹l$HƒÄ …í‰D$t'‹D$ ‹NPQWjUèj~ÿÿƒÄjjÿÿVPUSèH÷ÿÿƒÄ‹D$_^][ƒÄ$èt#‹VQRÿV‹L$@P‹D$HPQè÷ÿÿƒÄ_^][ƒÄ$ÃjjÿÿV‹T$DP‹D$DRPèûöÿÿƒÄ_^][ƒÄ$ËD$SV‹t$‹P‹^‹Ê;Ó|‹ËW‹>‹03Àó¦_tÀƒØÿ…Àu‹Â+Ã^[ËT$V‹B…Àt‹@…Àt‹L$R‹T$Q‹L$RQÿЃÄ^Ê‹L$„Àuƒzt ƒ9uƒÈÿ^Ã<u ‹‹t$‹@‰ëƒzüu‹ ‹t$‹ƒÁ‰ë‹D$‹ƒø {„¨Hƒøw{ÿ$…œB‹ ‹q‹A ëq3ö3Àëk‹ƒøÿu À^Ã…Àt‹r…ö~ƒÈÿ^Ã…Àu ‹B…ÀuƒÈÿ^Ê t$ˆL$¸ë/‹T$ ‹ ÷ÚÒD$ #ÐRQè…—ƒÄ^Ã-t,ƒèt'‹ ‹q‹W‹|$…ÿt…Àt‹È‹ÑÁéó¥‹Êƒáó¤_^ËD$ T$ ÷ØÀ#ÂP‹PèvŒƒÄ^Ãè›BsœB$œBLœBâ›BØ›B¸è椋D$jL$PQÇD$ è=3Ò…À‹D$ žÂJ#ƒÄËD$‹L$jPQèƒÄ ÃS‹\$ UV‹CW…Àt ‹@…Àt‹øë3ÿ‹t$‹l$…ö‰|$uÇE¾ƒø‡°ÿ$…¬¡B‹C…À„ž‹@…À„“SUÿЃÄ…À„Ï_^]¸[ËC…À„o‹…À„eÿÐ…À‰E„£_^]¸[Ës…ö„MÿV‹öÁ„ç÷Át_ÇE^]¸[ÃÿVŠ¾Êƒù‡ ÿ$Ä¡B‹H…ÉtЋI …ÉtÉPUÿуĸ_^][ËH…ÉtQUèØƒÄ¸_^][ËH…Ét‹I…ÉtPUÿуĸ_^][Ã…À„vÿÿÿ€ú„mÿÿÿƒx…cÿÿÿ‹@_‰E^]¸[ËH…Éu¶…À„Dÿÿÿ€ú„;ÿÿÿƒx…1ÿÿÿ‹H_‰M^]¸[ÃöÅt_ÇE^]¸[ÃöÁtèïÿÿ…À„V_‰E^]¸[ÃáQPUèþÿÿƒÄ …À„K_^]¸[ÃSUè ƒÄëâ…ÿtSUjÿ×ƒÄ …À„\ƒøtÐ…öu:‹Sh•h„hFRèÚJÿÿ‹øƒÄ …ÿ‰}„ô‹K3À‹ÑÁéó«‹Êƒáóª‹|$SjÿUèz‘ƒÄ …ÿt‚SUjÿ×ƒÄ …À„ø_^]¸[Ã…ÿtSUjÿ×ƒÄ …À„Ùƒø„Iÿÿÿ…öuH‹Chªh„hFPèSJÿÿ‹øƒÄ …ÿ‰}„m‹K3À‹ÑSÁéó«‹ÊVƒáUóªè‘SUèa‘ƒÄ‹C ‹{…ÀÇD$ŽQWUèᒃċðÿW‹öÁ„±÷Át ÇéÒÿWŠ¾Êƒù‡Áÿ$Ü¡B‹H…ÉtÖ‹I …ÉtÏPVÿуÄé ‹H…ÉtQVè{ƒÄ銋H…Ét‹I…ÉtŸPVÿуÄës…Àt’€útƒxu‡‹@‰ë]‹H…ÉuÓ…À„qÿÿÿ€ú„hÿÿÿƒx…^ÿÿÿ‹H‰ë4öÅtÇë'öÁt èÆ}ÿÿ…Àt1‰ëáQPVèüÿÿƒÄ …Àt3‹D$‹K ƒÇ@;Á‰D$}?ééþÿÿhh„hFjAh…j èÙ6ÿÿƒÄh¾h„hFjAjyj èÁ6ÿÿƒÄ3À_^][ËD$…À„ŠýÿÿSUjÿÐƒÄ …À…yýÿÿhÅh„hFjdjyj è…6ÿÿSUè>ƒÄ3À_^][ñB˜ŸBŸB…BVB ŸBžBÒBÒBÒBûBžBw B: B: B: B] Bº B‹D$÷u#ÿP¾ƒùwuÿ$¢B‹H…Ét!‹Á÷tÝ‹D$ÇËH…Étî‹I ë‹H…Étë‹H…Ét‹I…ÉtÒ‹T$PRÿуÄÃ…Àt€8t½ƒxu·‹T$‹H‰ ËL$ÇÃI¢B‚¢B‚¢B‚¢B:¢BO¢B‹D$V‹H…Ét‹I…Ét P‹D$ PÿуÄ^Ã…Àt €8t‹HëƒÉÿqƒþ ‡”3ÒŠ–°£Bÿ$•œ£Bjèý¥ÿÿ‹L$ ƒÄ‰¸^Ã…Àt‹P‹D$^‰¸ËL$¸^ÇÿÿÿÿËT$¸^ÇÃh?h„hFjèÆFÿÿƒÄ …Àu^ËL$Ç@Çÿÿÿÿ^‰‹3À…Ò•ÀÃQè yÿÿ‹L$ ƒÄ‰‹3À^…Ò•ÀÃI£B£B8£Bü¢B£B‹D$jL$PQè/ƒÄ ËD$‹L$jPQèƒÄ øè–S‹\$U‹l$ VW‹E…Û„@ŠM„Ét ƒ;„0…Àt‹@…Àt‹ø‰|$(ë ÇD$(‹|$(¾Áƒø‡ÿ$…l§B‹u…ötm‹¨u%‰D$,ÿV‹è‹Eëž‹+3ÿUèC~ÿÿƒÄ…À~,WUèE~ÿÿƒÄ‰D$,jÿVPD$4PèNÿÿÿUGè~ÿÿƒÄ;ø|ÔUèÚ}ÿÿƒÄÇ_^][ƒÄÃUSè2ƒÄ_^][ƒÄÃ…ÿtUSjÿ×ƒÄ ƒø„bUSèÊ‹ƒÄ‹ð…ÿt USjÿ×ƒÄ …öŒ¥;u œ‹U ¶4ŠVSèNjȋƒÄ‰L$¨tf‹ 3ÿQ‰L$(èz}ÿÿƒÄ…À~4‹D$$WPèx}ÿÿƒÄ‰D$jÿVL$PQèþÿÿ‹T$0GRèF}ÿÿƒÄ;ø|Ì‹D$$Pè}ÿÿ‹L$‹|$,ƒÄÇë%PÿV‹T$PRè>þÿÿƒÄ …ÿt USjÿ×ƒÄ ‹D$,…À…ƒém‹m…í„s‹m…í„h‹ QÿÕƒÄ_^][ƒÄËE…À„M‹@…À„BUSÿЃÄ_^][ƒÄÃUjÿSèÙŠƒÄ …À…ÿtUSjÿ×ƒÄ ƒø„ USèA‹‹E ‹MƒÄÇD$€…ÀT‘ì‰T$ޏ‹D$jPS茋øƒÄ …ÿtWSè`Œ‹ð‹ƒÄ‰t$¨tV‹3öSè|ÿÿƒÄ…À~,VSè|ÿÿƒÄ‰D$jÿWL$PQè"ýÿÿSFèë{ÿÿƒÄ;ð|ÔSè®{ÿÿ‹T$ ‹\$(ƒÄÇë%PÿWPVèëüÿÿƒÄ ‹t$‹D$‹M ƒî@‰t$;Á‰D$ŒLÿÿÿ‹|$(…ÿt USjÿ×ƒÄ ‹D$,…Àu‹PèHEÿÿƒÄÇ_^][ƒÄÃIc¤B.¦Bé¤Bã¥B ¦BפBS‹\$ ‹¨tZU‹l$ VW‹}3öWè#{ÿÿƒÄ…À~,VWè%{ÿÿƒÄ‰D$jÿSPD$Pè.üÿÿWFè÷zÿÿƒÄ;ð|ÔWèºzÿÿƒÄÇE_^][Ã%PÿS‹L$ PQè÷ûÿÿƒÄ [ËT$V…Òt‹B…Àt,‹@ …Àt%‹L$RQÿЃÄ^ËD$‹‹q‹I…É„™ë(€:u‹t$ƒÈÿƒ>„‚ë‹B‹t$ƒøtƒ>toƒÀƒø wP3ÉŠˆü¨Bÿ$è¨B‹Rè]ƒÄÇ^Ã…Òt‹B‰^ÃÇÿÿÿÿ^ÃjVèWÿÿÿ‹QèßCÿÿƒÄ Ç^ËRè tÿÿƒÄÇÇ^ÃI±¨Bž¨BݨB‹¨B̨BVhuh hFjj èìƒÿÿ¡£Ihw‹ðh hF@jj ££Iè̃ÿÿƒÄ ‹Æ^áŒJ…Àu]Vhh hFjj ¾螃ÿÿ¡ŒJƒÄ…ÀuhªBhð©B賊ÿÿƒÄ£ŒJ…Àu3öhh hFjj èbƒÿÿƒÄ…ö^t3¡ŒJhªBPèjŽÿÿ‹ ŒJQè>‹ÿÿƒÄ ÇŒJLjJËD$‹Ã‹D$‹L$‹‹+ÂÃV‹t$hWB‹FPè-xÿÿVèwBÿÿƒÄ ^ø èf—¡ŒJSVW…Àu_hh hFjj ¾貂ÿÿ¡ŒJƒÄ…ÀuhªBhð©BèljÿÿƒÄ£ŒJ…Àu3öhh hFjj èv‚ÿÿƒÄ…ö„®‹\$h0h hFjj ‰\$èP‚ÿÿ‹ ŒJD$PQèÿÿ‹ðƒÄ…öuGh4h hFj è5?ÿÿ‹øƒÄ …ÿt-‰‰wèÂsÿÿ…À‰GWu è•AÿÿƒÄ닌JRèDŠÿÿƒÄ‹÷hEh hFjj èÜÿÿƒÄ…öu"hGh hFjAjijèÐ,ÿÿƒÄ_^ƒÈÿ[ƒÄ ÃhSh hFjƒËÿè¯>ÿÿ‹øƒÄ …ÿu"hVh hFjAjhjè‘,ÿÿƒÄƒÈÿ_^[ƒÄ ËD$ ‹L$$‹T$(h^‰‹D$0‰O‹L$4h hFjj ‰W‰G‰O è?ÿÿ‹VRèövÿÿ‹NƒÄ;Á%‹FjPèñuÿÿƒÄ…ÀtI‹NQèÑvÿÿ‹NƒÄ;Á~Û‹^‹FWSSP‰VèãvÿÿƒÄ hkh hFjj èÝ€ÿÿƒÄ‹Ã_^[ƒÄ Ãhch hFjAjhjèÌ+ÿÿWèF@ÿÿƒÄëÁ¸è6•¡ŒJS3ÛUV;ÃW‰\$u_hh hFjj ¾è{€ÿÿ¡ŒJƒÄ;ÃuhªBhð©Bè‡ÿÿƒÄ;ãŒJu3öhh hFjj è?€ÿÿƒÄ;ó„®‹l$$h0h hFjj ‰l$$è€ÿÿ‹ ŒJD$$PQèèŠÿÿ‹øƒÄ;ûuGh4h hFj èþ<ÿÿ‹ðƒÄ ;ót-‰.‰^è‹qÿÿ;ÉFVu è^?ÿÿƒÄ닌JRè ˆÿÿƒÄ‹þhEh hFjj è¥ÿÿƒÄ;ûu"hGh hFjAjijè™*ÿÿƒÄ_^]3À[ƒÄË\$,hh hFjjÇè_ÿÿ‹GPèuÿÿ‹èƒÄ…í~Eh¡ ­h hFQèF<ÿÿƒÄ ‰D$…Àt#3ö…í~‹Ø‹WVRèétÿÿƒÄ‰FƒÃ;õ|é‹\$,h¨h hFjjèõ~ÿÿƒÄ…í~*‹D$…Àu"h«h hFjAjljèá)ÿÿƒÄ3À_^][ƒÄÃ3ö…í~S‹|$‹…ÀtA‹H…Ét:‹…ÀtPèatÿÿƒÄ;ð|3Àë ‹VPè]tÿÿƒÄ‹‹QR‹RVSP‹D$‹Ë‰V+Ï3Àú‹ÑÁéó«‹Êƒáóª‰_‹Ã^[ÃS‹\$UV‹‹t$;ÖW|‹{‹Ê+Î3Àþé‹k;î| ‹{‹Î+Ê3Àë|N¸VUUU÷é‹ÂÁèЋCÁâ…À‹úuh“hjFWèÏ0ÿÿƒÄ ëh•hjFWUPè2ÿÿƒÄ‹Ð…Òu!h˜hjFjAjdjèšÿÿƒÄ3ö‹Æ_^][É{‹;‹Î‰S+Ï3Àú‹ÑÁéó«‹Êƒáóª‰3‹Æ_^][ÃV‹t$…öWu_3À^ËþƒÉÿ3Àh­ò®÷ÑIhjFyWè20ÿÿƒÄ …Àuh°hjFjAjfjèÿÿƒÄ3À_^Ëϋø‹ÑÁéó¥‹Êƒáó¤_^ËD$ ‹T$V3öW‹|$ƒøvŠ„Ét ˆ BGFHƒøwï…ÀtƃÉÿ3Àò®÷ÑI_‹ÁÆ^øè&‡SUVW‹|$83í…ÿ„ˆ‹T$4ƒÿÿu‹úƒÉÿ3Àò®÷ÑI‹ù¾Oƒø0JŒLƒø2C„€ÿÿÿÁà…ÿ‰D$4joh jFhŠé)¾1AO…ÿ‰L$8ŽÇë‹D$4ƒþ.t ƒþ …½3Ò…ÿ~0¾1OAƒþ ‰L$8t"ƒþ.tƒþ0Œ©ƒþ9 ’…ÿTVÐÐ…íuƒø} ƒú(ƒ”Њڸ€ãÁêˆ\$tŠÚ€ãˆ\@ÁêuñŠ\$‹T$,…Òt1(;T$0lH…À~ŠL‹T$,€É€ˆ *EH…Àì‹L$8‹D$,Eˆ\(ÿëè…ÿ;ÿÿÿ_‹Å^][ƒÄÃjyh jFhƒë9h†h jFh‚ë(hh jFh“ëhŸh jFjkë jih jFjzjdj èÿÿƒÄ_^]3À[ƒÄËD$ ‹L$‹T$jPQRèj’ÿÿƒÄøPèV…‹D$X…Àt@‹H…Ét9VjPD$ jPPè7’ÿÿ‹ðƒÄƒþPv¾P‹T$XL$VQRè8ZƒÄ ‹Æ^ƒÄPËD$Tjh˜]FPèZƒÄ ƒÄPøèæ„‹L$V‹t$T$QR‹L$ ‰D$D$ PT$ QRè­ZÿÿƒÄ¨€t¸fë ƒ|$t&¸thÙh jFPh“j è ÿÿƒÄ3À^ƒÄËD$‹T$L$PQRèƒÄ …Àt‹L$‰^ƒÄøèF„‹D$SUVW3ÿ;Çt ‹(;ïtöEuOh h jFjè›,ÿÿƒÄ ;Çu hh jFjAj{j èÿÿƒÄ3À_^][YÉx ‰x‰x‰8‰xÇ@‹è‹D$‹\$ ‹0‹E;ljt$t 9] É;Çt Pèµ.ÿÿƒÄ;ß‹Ãu¸hòh jFPè,ÿÿ‹UƒÄ ƒÊ;ljE‰U…Šhh jFjAh“j èèÿÿƒÄ;ïtc‹D$;Çt9(tWöEt&‹E;Çt PèB.ÿÿƒÄ‹E;Çt Pè2.ÿÿƒÄ‰}‰}öEt‹E;Çt Pè.ÿÿƒÄ‰}‰} öEt Uè.ÿÿƒÄ_^]3À[YË}‹Ë‹Ñ‹D$Áéó¥‹Êƒáó¤‹L$‰] ËÇE…ÀÇEt‰(‹D$_^‰‹Å][YÃV‹t$…öteöFt,‹…Àt Pè•-ÿÿƒÄ‹F…Àt Pè…-ÿÿƒÄÇFÇöFt‹F…Àt Pèb-ÿÿƒÄÇFÇF öFt VèE-ÿÿƒÄ^ËD$‹T$‹H QRèþzƒÄø@jFÃV‹t$¸‹ND…Éu‹N$…Ét VÿуÄ…Àt‹V@‹NDBA‰V@‰ND^ÃV‹t$W¿‹FDH‰FDuM‹F(…ÀtFS‹\$…ÛtjdhˆjFjj è mÿÿƒÄVÿV(ƒÄ‹ø…Û[tjghˆjFjj èëlÿÿƒÄ…ÿu_3À^ÃjVèç{ƒÄ…ÀujuhˆjFjjjkj&èÎÿÿƒÄ3À_^ËÇ_^ÃV‹t$…öuhhˆjFjCjwj&è¢ÿÿƒÄ3À^ÃWh„hˆjFjj èwlÿÿ‹FDƒÄ…À¿u‹F$…Àt VÿЋøƒÄ…ÿt‹N@‹FDA@‰N@‰FDh†hˆjFjj è4lÿÿƒÄ‹Ç_^ÃV‹t$…öWuh‘hˆjFjCjkj&èÿÿƒÄ3À_^Ãh”hˆjFjj èækÿÿ‹FDƒÄH¿‰FDu4‹F(…Àt-jdhˆjFjj è¾kÿÿVÿV(jghˆjFjj ‹øè¨kÿÿƒÄ$…ÿt$jVè©zƒÄ…ÀujuhˆjFjjjkj&èÿÿƒÄ3ÿh–hˆjFjj èhkÿÿƒÄ…ÿuh™hˆjFjjjkj&è\ÿÿƒÄ3À_^ËÇ_^ø £IÃVhhJ耶ÿÿ3öjh¤J‰5¸J‰5¼Jèf¶ÿÿƒÄ‰5ÀJ‰5ÄJ‰5ÈJ‰5ÌJ‰5ÐJ^ø4èV¡ÔJSUV…ÀW„®hØhØjFjjè¢jÿÿè}jÿÿ‹-ØJ3É;èhÚ”ÁhØjF‹ñjj‰t$0èwjÿÿƒÄ …öuhßhØjFjj è]jÿÿƒÄ¡¼J‹ÀJ‹ÄJ¹¾¤J|$0ó¥‹t$L‹èƉT$=ÿ‰\$£¼J| ™¹ÿ÷ù‰ ¸J‰¼Jë!ÇD$ë‹ ¸Jùÿ} ;Á~£¸J‹Æ¹™÷ù3ɸgfff‹|$…ÒŸÁ÷îÁú‹ÂÁèÐÓÑ…ÿ‰ÄJuhÿhØjFjj èŸiÿÿƒÄL$ QèÒ”ÿÿƒÄ…öŽ ‹ÎƒÆ¸ÍÌÌÌ‹\$H÷æÁê‰L$L‰T$ë‹L$Lƒù‹ñ~¾jèÃûÿÿT$$PR訔ÿÿD$‰~‰F‰~ ‰~‰~‰~‰~‰~ ‰~$‰~,‰F0‹Q SVj‰V(èOéÿÿ‹F<ƒÄ ‹@;Çt.VÿЃÄ…Àu$‹F@;Çt PèKõÿÿƒÄSVjèéÿÿVèé ÿÿƒÄ3ö‹Æ_^[ÃV‹t$…ö„Êh¹h€kFjF0jÿPèbÿÿƒÄ…À¨‹N<‹A…ÀtVÿЃÄ‹F@…Àt PèÔôÿÿƒÄV4RVjèéÿÿ‹F ƒÄ …Àt Pè£ÿÿƒÄ‹F…Àt Pèõ¢ÿÿƒÄ‹F…Àt Pèå¢ÿÿƒÄ‹F…Àt PèÕ¢ÿÿƒÄ‹F…Àt PèÅ¢ÿÿƒÄ‹F …Àt Pèµ¢ÿÿƒÄ‹F$…Àt P襢ÿÿƒÄVèüÿÿƒÄ^øèæt‹D$‹HQè ¢ÿÿƒÀj™ƒâÇD$ ÂT$Áø‰D$D$P‰T$ÆD$ ÿè(¬ÿÿÑàjPjèìLÿÿƒÄ(Ãjè ƒÄÃSVWh„hÀkFjTèìÿÿ‹ð3ÿƒÄ ;÷uh‡hÀkFjAjjjèÌ ÿÿƒÄ3À_^[áèJ;Çu èÅw£èJ‹\$‰F;ßt6SèßòÿÿƒÄ…Àu$h‘hÀkFj&jjjèƒ ÿÿVèýÿÿƒÄ3À_^[É^ ëè ˆ‰F ‹F ;Çt=P舃Ä;ljFu-hŸhÀkFj&jjjè; ÿÿ‹F PèóÿÿVè¬ÿÿƒÄ3À_^[ËN^0‰>‰~‰~‰~‰~‰~‰~ ‰~$‰~(‰~,ÇF8‰~@‰~D‰~H‰~P‰~L‹Q$SVj‰V<è‹æÿÿ‹FƒÄ ‹@;Çt.VÿЃÄ…Àu$‹F ;Çt Pè‡òÿÿƒÄSVjèËæÿÿVè%ÿÿƒÄ3ö‹Æ_^[ÃV‹t$…ö„úhÌhÀkFj F8jÿPè\_ÿÿƒÄ…ÀØ‹N‹A …ÀtVÿЃÄ‹F …Àt PèòÿÿƒÄV0RVjèUæÿÿ‹FƒÄ …Àt PèE ÿÿƒÄ‹F…Àt Pè5 ÿÿƒÄ‹F…Àt Pè% ÿÿƒÄ‹F…Àt Pè ÿÿƒÄ‹F …Àt Pè ÿÿƒÄ‹F$…Àt PèõŸÿÿƒÄ‹F(…Àt PèåŸÿÿƒÄ‹F,…Àt PèÕŸÿÿƒÄ‹FP…Àt Pè5‡ƒÄ‹FL…Àt PèUÿÿƒÄVè ÿÿƒÄ^ËD$hñhÀkFj ƒÀ8jPèU^ÿÿƒÄ3ɃøŸÁ‹ÁËD$‹HQèóžÿÿƒÀƒÄ™ƒâÂÁøËD$‹T$R‹T$ ‹HP‹D$P‹D$RPÿQƒÄËD$‹T$R‹T$ ‹HP‹D$P‹D$RPÿQ ƒÄËD$‹T$R‹T$ ‹HP‹D$P‹D$RPÿQƒÄËD$…ÀuË@‹@$øèqSU‹l$3ÛV;ëW‰\$uè?‡‹è;ë„ã‹t$‹FP;Ãt Pè䅃ĉ^PU訇U臃Ä‹øèˆ,ÿÿ…Àu3‹F;Ãt,‹;Ët&‹@SÁàSPQè+ÿÿ‹NQWèÄ…À„ë‹VRWèGƒÄ…Àtn‹FUPWS舋؃ąÛtY‹V@‹F‹NR‹VUPRWWÿQƒÄ…Àt4‹FPSWè„„ƒÄ ‰FP…Àtèu[ÿÿ‹NPÇD$‰A‹V<€âƒÊ‰V‰~‰~‰~ ‰~‰~‰~‰~$‰~(‰~,‰~0‰~4‰~ ÇF8‹QSVj‰VèÚáÿÿ‹FDƒÄ ‹@;Çt.VÿЃÄ…Àu$‹FH;Çt PèÖíÿÿƒÄSVjèâÿÿVètÿÿƒÄ3ö‹Æ_^[ÃV‹t$…ö„Úh²h lFjF8jÿPè¬ZÿÿƒÄ…À¸‹ND‹A…ÀtVÿЃÄ‹FH…Àt PèdíÿÿƒÄVu ‹F…À„­‹D$ S…ö‹X„”‹F…Àt7P3ÿè0MÿÿƒÄ…À~(‹NWQè/MÿÿPè)uÿÿƒÄ ;ÃtU‹VGRèMÿÿƒÄ;ø|Ø‹…ÀtPP3ÿèóLÿÿƒÄ…À~A‹WPèóLÿÿPèítÿÿƒÄ ;Ãt"‹GQèÍLÿÿƒÄ;ø|Ú[_¸^Ã[_¸^Ã[_¸^Ã[_¸^ÃjjÿW舌ÿÿ‹G$ƒÄ öÐ%ÿ_ƒà ^ ÁèËD$V‹pP…ö„¬‹L$SW‹Y„”‹F…Àt7P3ÿèRLÿÿƒÄ…À~(‹VWRèQLÿÿPèKtÿÿƒÄ ;ÃtU‹FGPè*LÿÿƒÄ;ø|Ø‹…ÀtPP3ÿèLÿÿƒÄ…À~A‹WQèLÿÿPètÿÿƒÄ ;Ãt"‹GRèïKÿÿƒÄ;ø|Ú_[¸^Ã_[¸^Ã_[¸^Ã_[¸^ø^ÃV‹t$ jjÿVè‘‹ÿÿ‹F$ƒÄ öÐ%ÿ^ƒà ÁèËD$SVW‹pP…ö„˜‹F‹\$…Àt7P3ÿè[KÿÿƒÄ…À~(‹NWQèZKÿÿPèTsÿÿƒÄ ;ÃtU‹VGRè3KÿÿƒÄ;ø|Ø‹…ÀtPP3ÿèKÿÿƒÄ…À~A‹WPèKÿÿPèsÿÿƒÄ ;Ãt"‹GQèøJÿÿƒÄ;ø|Ú_^¸[Ã_^¸[Ã_^¸[Ã_^¸[ËD$P‹D$‹‹P‹@QRPè·ÿÿPè1ŽƒÄËD$P‹D$‹‹P‹@QRPè÷ P莃ÄËD$‹L$PQè1ÿÿPèkƒÄ ËD$‹L$PQèÁ PèKƒÄ ËD$‹L$ ‹T$P‹D$ QRPèçÿÿPèA“ƒÄøˆlFø$è¦hD$L$,PQè·˜ƒÄ…Àu!jmh°lFh­h¯j èøþþÿƒÄ3ÀƒÄ$Ë@ƒø2|=–}‹T$,‹D$(RPèƒÄƒÄ$ËL$,‹T$(QRè ƒÄƒÄ$ø$è&hSV‹t$0W…öujèCÿÿ‹ðƒÄ…öu_^[ƒÄ$ÃD$ L$8PQ蘋؃ąÛu_^[ƒÄ$Ë~…ÿtƒ>}4hàhälFjèHÿÿ‹øƒÄ …ÿu_^[ƒÄ$ËF…Àt Pè«ÿÿƒÄ‰~‹‹C‹KR‹S P‹CQ‹K@RÁlPQhÈlFWÿFƒÉÿ3ÀƒÄ ò®÷ÑIÇF‰‹Æ_^[ƒÄ$ø$èFgSV‹t$0W…öujè$Bÿÿ‹ðƒÄ…öu_^[ƒÄ$ÃD$ L$8PQè5—‹ØƒÄ…Ûu_^[ƒÄ$Ë~…ÿtƒ>}4hÌhmFjèhÿÿ‹øƒÄ …ÿu_^[ƒÄ$ËF…Àt PèËÿÿƒÄ‰~‹‹C‹KR‹S P‹CQ@RP‹C™¹d÷ùRhülFWÿFƒÉÿ3ÀƒÄ ò®÷ÑIÇF‰‹Æ_^[ƒÄ$ËL$‹A…ÀuƒÈÿË@…Àt‹T$R‹T$R‹T$R‹T$RQÿЃÄøÃVWh¶h0mFjLèÿÿ‹ð3ÿƒÄ ;÷u_3À^ÃhðÛBè£Cÿÿ‰FÇèCÿÿ‰FF‰~‰^‰~ ‰~‹[;ßt VÿӃąÀt/‰n‹EVPè:DÿÿƒÄ…Àt‹Æ_^][ËF;Çt ‹@;ÇtVÿЃÄVèÒÿÿƒÄ3À_^][ø¸è¶c‹„$¼S‹œ$ÄUVW‹8‹ÃH‰\$‹wt HuK‹„$ÔL$ T$0‰L$‰T$ ‰D$8ë‹„$ÔL$tT$L‰L$‰T$t‰D$`L$QVèÐBÿÿƒÄƒøÿu3íëPVè}Dÿÿ‹èƒÄ…í…¡‹”$Ì‹GP‹rèMDÿÿƒÄ;ð}h‹OVQèLDÿÿ‹HƒÄ…Ét(‹I…Ét!‹P…ÒuT$R‹”$ØRSPÿуÄ…À|u(‹GFPèDÿÿƒÄ;ð|³ë‹Œ$Ì_^]‰A[ĸÃl$‹”$Ì…íÇBu _^]3À[ĸË„$Ø‹M‰‹M‰H‹HtHu-hh0mFjjƒÁ ëhh0mFjjƒÁQè»NÿÿƒÄ_^]¸[ĸøè&bVW‹|$ÇD$…ÿu_3À^YÃhKh0mFjè} ÿÿ‹ðƒÄ …öuhNh0mFjAj|j è_øþÿƒÄ3À_^YÃhTh0mFj j lj~è*Mÿÿ‹ƒÄHtHu4‹Fhh0mFjƒÀ jPë‹Nhh0mFjƒÁjQèîMÿÿƒÄ‹T$SUV‹ZSèë@ÿÿ‹øƒÄƒÿÿ„äƒ>tWSè‘BÿÿƒÄé…S‹ïèqBÿÿƒÄ;ø½USèoBÿÿ‹‹øƒÄ‹‹È+ʉL$…ŸHtHu#‹V‹GRPèUÿÿë ‹N‹WQRè&ÿÿƒÄ…Àuvƒ>u$‹F‹OPQè}ÿÿƒÄ…ÀtSEèÿAÿÿƒÄ;è}Oë‹Ç…ÀtG‹HtHu‹VRèŸë ‹FPè ÿÿƒÄVè› ÿÿh]h0mFjej|j è÷þÿƒÄÇD$ë‹L$V‹QRè«@ÿÿƒÄhbh0mFj j èÅKÿÿ‹D$ ƒÄ][_^Yøè6`VW‹|$ÇD$…ÿu_3À^YÃhmh0mFjèÿÿ‹ðƒÄ …öuhph0mFjAj}j èoöþÿƒÄ3À_^YÃhvh0mFj j lj~è:Kÿÿ‹ƒÄHtHu4‹Fhh0mFjƒÀ jPë‹Nhh0mFjƒÁjQèþKÿÿƒÄ‹T$SUV‹ZSèû>ÿÿ‹øƒÄƒÿÿ„äƒ>tWSè¡@ÿÿƒÄé…S‹ïè@ÿÿƒÄ;ø½USè@ÿÿ‹‹øƒÄ‹‹È+ʉL$…ŸHtHu#‹V‹GRPèeÿÿë ‹N‹WQRè6ÿÿƒÄ…Àuvƒ>u$‹F‹OPQèÿÿƒÄ…ÀtSEè@ÿÿƒÄ;è}Oë‹Ç…ÀtG‹HtHu‹VRè¯ë ‹FPè$ ÿÿƒÄVè« ÿÿh~h0mFjej}j èõþÿƒÄÇD$ë‹L$V‹QRè»>ÿÿƒÄhƒh0mFj j èÕIÿÿ‹D$ ƒÄ][_^YøŒèF^SUVW‹¼$¨Wè¥ÿþÿ‹´$¨‹èD$PUjVè^úÿÿƒÄƒø„–ƒøÿuI‹D$HtHu‹L$Qèéë ‹T$Rè] ÿÿƒÄhõh0mFjjjj èUôþÿƒÄƒÈÿ_^][ČÅÀ„2‹D$HtHu(‹D$P蘃ăÈÿ_^][ČËL$Qèý ÿÿƒÄ_^]ƒÈÿ[ČËT$RWVÿV0ƒÄ …Àt‹„$ ‹L$_^‰]¸[ČËD$HtHu‹T$Rè*ë ‹D$Pèž ÿÿƒÄ‹T$H‰T$T$‹AL$ RPÇD$ ‰L$P‰l$<è<ÿÿ‹øƒÄƒÿÿtk‹‹ß‹HQè>ÿÿƒÄ;ø}W‹S‹BPè>ÿÿ‹øƒÄƒ?uA‹OQèBþþÿPUè›þþÿƒÄ …Àu*‹W‹„$¨RPVÿV0ƒÄ …Àu ‹C‹QRèÁ=ÿÿƒÄ;Ø|©_^]3À[ČËŒ$ ‹G‰‹Ht0HuJ‹Whh0mFjƒÂ jRè¿HÿÿƒÄ¸_^][ČËGhh0mFjƒÀjPè’HÿÿƒÄ_^]¸[ČøˆmFËD$V‹0…ö„…‹F…Àt~‹L$Wƒét.IuihÐæBPèâ7ÿÿ‹N‹øQè7=ÿÿ‹VWRèÍ7ÿÿƒÄ¸_^ÃP3ÿèÊ<ÿÿƒÄ…À~‹FWPèÉ<ÿÿ‰x ‹NQGè¬<ÿÿƒÄ ;ø|â‹Vh°æBRè‡7ÿÿƒÄ_¸^ø^øPnFøÈnFËD$ ‹L$‹T$hÈnFPQRè'•ÿÿƒÄËD$hÈnFPè!½ÿÿƒÄËD$‹‹D$‹‹R‹RèI6ÿÿƒÄËD$‹T$‹‹‹I ‹P +Ê‹ÁËD$…ÀuÃPèÑ;ÿÿƒÄËD$UPèåaÿÿ‹èƒÄ…íu¸þÿÿÿ]ÃSVW‹|$…ÿt8‹L$q…ö}3öWè‡;ÿÿ‹ØƒÄ;ó}VWè‡;ÿÿ‹URè~…ÿÿƒÄ…Àt F;ó|ä_^[ƒÈÿ]ËÆ_^[]ÃV‹t$…öt!VèA;ÿÿ‹L$ƒÄ;Á~…É| QVè;;ÿÿƒÄ^Ã3À^ËD$…ÀuËËD$…ÀuËP3É…ÒŸÁ‹ÁËD$‹T$‹‹‹ ‹+Ê‹Áø<è–YV‹t$D‹PèÉbÿÿƒÄ…ÀtaL$‰L$|WhàçBjjT$h¦IR‰D$è|jÿÿƒÄ…Àt‹ë,¡øJ…Àt'L$QPè½8ÿÿƒÄƒøÿt‹øJPRèh:ÿÿƒÄ…Àu3À^ƒÄ<ËN‹Q‰T$D‹P…ÒtÿÒP‹FT$H‹QRjè“ÿÿƒÄ^ƒÄ<Ë T$DQRjÿPƒÄ ^ƒÄ<ø8èÆX‹D$HSU‹l$D3ÛV…íWu&…ÀtÇÿÿÿÿ‹D$T…À„Š_^Çÿÿÿÿ]3À[ƒÄ8Ã…Àt‹0F…ö}3öU‹þè©9ÿÿƒÄ;ð>WUè§9ÿÿ‹ð‹Pèaÿÿ‹L$\ƒÄ ;Áu‹D$X…Àu{…Ûu}‹ÞUGèm9ÿÿƒÄ;ø|È‹D$X…Û„þ‹t$T…öt Sè<þÿÿƒÄ‰‹ QèOaÿÿƒÄ…À„ðT$‰T$TŒâhàçB‰D$jjD$`h¦IPèúhÿÿƒÄ…Àt&‹ëR‰8‹Þë—‹D$T…À„©_^Çþÿÿÿ]3À[ƒÄ8áøJ…À„ŒL$QPè7ÿÿƒÄƒøÿty‹øJPRèÀ8ÿÿƒÄ…Àte‹K‹Q‰T$X‹P…Òt ÿÒP‹CT$\‹QRjèc‘ÿÿƒÄ_^][ƒÄ8Ë T$XQRjÿPƒÄ _^][ƒÄ8ËD$X…ÀtÇÿÿÿÿ‹D$T…ÀtÇÿÿÿÿ_^]3À[ƒÄ8ÃVW‹|$ ‹t$‹L$UÁáSñé@‹Q‹_‹O‹W ‰Ï‹.1×!ß„(x¤j×1×ø‰ßÁÀ‹nØ1Ï!Ç”*V·Çè1Ïú‰ÇÁ ‹nÂ1ß!׌)Ûp $1ßù‰×ÁÁ‹n Ñ1Ç!Ïœ+îνÁ1Çû‰ÏÁËnË1×!ß„(¯|õ1×ø‰ßÁÀ‹nØ1Ï!Ç”**ƇG1Ïú‰ÇÁ ‹nÂ1ß!׌)F0¨1ßù‰×ÁÁ‹nÑ1Ç!Ïœ+•Fý1Çû‰ÏÁËn Ë1×!ß„(ؘ€i1×ø‰ßÁÀ‹n$Ø1Ï!Ç”*¯÷D‹1Ïú‰ÇÁ ‹n(Â1ß!׌)±[ÿÿ1ßù‰×ÁÁ‹n,Ñ1Ç!Ïœ+¾×\‰1Çû‰ÏÁËn0Ë1×!ß„("k1×ø‰ßÁÀ‹n4Ø1Ï!Ç”*“q˜ý1Ïú‰ÇÁ ‹n8Â1ß!׌)ŽCy¦1ßù‰×ÁÁ‹n<Ñ1Ç!Ïœ+!´I1Çû‰ÏÁËnË„(b%ö1ß!׋n1Ïø‰ßÁÀØ”*@³@À1Ç!Ï‹n,1ßú‰ÇÁ ÂŒ)QZ^&1×!ß‹.1Çù‰×ÁÁÑœ+ªÇ¶é1Ï!Ç‹n1×û‰ÏÁÃË„(]/Ö1ß!׋n(1Ïø‰ßÁÀØ”*SD1Ç!Ï‹n<1ßú‰ÇÁ ÂŒ)æ¡Ø1×!ß‹n1Çù‰×ÁÁÑœ+ÈûÓç1Ï!Ç‹n$1×û‰ÏÁÃË„(æÍá!1ß!׋n81Ïø‰ßÁÀØ”*Ö7Ã1Ç!Ï‹n 1ßú‰ÇÁ ÂŒ)‡ Õô1×!ß‹n 1Çù‰×ÁÁÑœ+íZE1Ï!Ç‹n41×û‰ÏÁÃË„(éã©1ß!׋n1Ïø‰ßÁÀØ”*ø£ïü1Ç!Ï‹n1ßú‰ÇÁ ÂŒ)Ùog1×!ß‹n01Çù‰×ÁÁÑœ+ŠL*1Ï!Ç‹n1×û‰ÏÁÃË1×1ß„(B9úÿøÁÀ‹n ‰ß”*öq‡Ø1Ï1Ç‹n,ú‰ÇÁ Â1ß1׌)"amùÁÁ‹n8‰×œ+ 8åýÑ1Ç1Ï‹nû‰ÏÁÃË1×1ß„(D꾤øÁÀ‹n‰ß”*©ÏÞKØ1Ï1Ç‹nú‰ÇÁ Â1ß1׌)`K»öùÁÁ‹n(‰×œ+p¼¿¾Ñ1Ç1Ï‹n4û‰ÏÁÃË1×1ß„(Æ~›(øÁÀ‹.‰ß”*ú'¡êØ1Ï1Ç‹n ú‰ÇÁ Â1ß1׌)…0ïÔùÁÁ‹n‰×œ+ˆÑ1Ç1Ï‹n$û‰ÏÁÃË1×1ß„(9ÐÔÙøÁÀ‹n0‰ß”*å™ÛæØ1Ï1Ç‹n<ú‰ÇÁ Â1ß1׌)ø|¢ùÁÁ‹n‰×œ+eV¬ÄÑ1Ç1Ï‹.û¿ÿÿÿÿÁÃË1× ß„(D")ô1Ï‹nø¿ÿÿÿÿÁÀ1ÏØ Ç”*—ÿ*C1ß‹n8ú¿ÿÿÿÿÁ 1ß ׌)§#”«1Ç‹nù¿ÿÿÿÿÁÁ1ÇÑ Ïœ+9 “ü1׋n0û¿ÿÿÿÿÁÃ1×Ë ß„(ÃY[e1Ï‹n ø¿ÿÿÿÿÁÀ1ÏØ Ç”*’Ì 1ß‹n(ú¿ÿÿÿÿÁ 1ß ׌)}ôïÿ1Ç‹nù¿ÿÿÿÿÁÁ1ÇÑ Ïœ+Ñ]„…1׋n û¿ÿÿÿÿÁÃ1×Ë ß„(O~¨o1Ï‹n<ø¿ÿÿÿÿÁÀ1ÏØ Ç”*àæ,þ1ß‹nú¿ÿÿÿÿÁ 1ß ׌)C£1Ç‹n4ù¿ÿÿÿÿÁÁ1ÇÑ Ïœ+¡N1׋nû¿ÿÿÿÿÁÃ1×Ë ß„(‚~S÷1Ï‹n,ø¿ÿÿÿÿÁÀ1ÏØ Ç”*5ò:½1ß‹nú¿ÿÿÿÿÁ 1ß ׌)»Ò×*1Ç‹n$ù¿ÿÿÿÿÁÁ1ÇÑ Ïœ+‘Ó†ë1׋l$ûÆ@ÁË}Ëø‹}û‹}ù‹} ú‰E‰]‹<$‰M‰U 9÷ƒùÿÿX[]_^ÃÌÌVW‹t$ 1ÉSU‹‹\$‹~ÁÀ‰Æ1ø%ðððð1Æ1ÇÁljø1÷çðÿ1ø1þÁÀ‰Ç1ð%33331Ç1ÆÁƉð1þæüü1ð1÷ÁÀ ‰Æ1ø%ªªªª1Æ1ÇÑÇ-´F‹L$û„‹1Û‹Q1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A1Û‹Q 1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A1Û‹Q1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A1Û‹Q1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A 1Û‹Q$1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A(1Û‹Q,1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A01Û‹Q41ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A81Û‹Q<1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A@1Û‹QD1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹AH1Û‹QL1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹AP1Û‹QT1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹AX1Û‹Q\1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A`1Û‹Qd1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹Ah1Û‹Ql1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹Ap1Û‹Qt1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹Ax1Û‹Q|1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*é‹Ax1Û‹Q|1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹Ap1Û‹Qt1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹Ah1Û‹Ql1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A`1Û‹Qd1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹AX1Û‹Q\1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹AP1Û‹QT1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹AH1Û‹QL1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A@1Û‹QD1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A81Û‹Q<1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A01Û‹Q41ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A(1Û‹Q,1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A 1Û‹Q$1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A1Û‹Q1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A1Û‹Q1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A1Û‹Q 1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹1Û‹Q1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹T$ÑΉø1÷窪ªª1ø1þÁÀ‰Ç1ð%üü1Ç1ÆÁÇ ‰ø1÷ç33331ø1þÁƉ÷1Ææðÿ1÷1ðÁÇ ‰þ1Ççðððð1þ1øÁȉ‰r][_^ÃVW‹D$ 1ÉSU‹0‹\$ÁÆ‹xÁÇ-´F‹L$û„‹1Û‹Q1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A1Û‹Q 1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A1Û‹Q1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A1Û‹Q1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A 1Û‹Q$1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A(1Û‹Q,1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A01Û‹Q41ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A81Û‹Q<1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A@1Û‹QD1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹AH1Û‹QL1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹AP1Û‹QT1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹AX1Û‹Q\1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A`1Û‹Qd1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹Ah1Û‹Ql1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹Ap1Û‹Qt1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹Ax1Û‹Q|1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*é‹Ax1Û‹Q|1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹Ap1Û‹Qt1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹Ah1Û‹Ql1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A`1Û‹Qd1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹AX1Û‹Q\1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹AP1Û‹QT1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹AH1Û‹QL1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A@1Û‹QD1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A81Û‹Q<1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A01Û‹Q41ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A(1Û‹Q,1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A 1Û‹Q$1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A1Û‹Q1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹A1Û‹Q1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*‹A1Û‹Q 1ð1É1ò%üüüüâÏÏÏψÈáÁÊ3<+ˆÓ3¼)ˆñÁè3¼+ˆãÁê3¼)ˆñ%ÿâÿ3¼+3¼)‹L$3¼(3¼*‹1Û‹Q1ø1É1ú%üüüüâÏÏÏψÈáÁÊ34+ˆÓ3´)ˆñÁè3´+ˆãÁê3´)ˆñ%ÿâÿ3´+3´)‹L$3´(3´*ÁÏ‹D$ÁΉ8‰p][_^ÃS‹\$UVW‹;‹sì Áljú1÷çðððð1ú1þÁƉ÷1Öæðÿ1÷1òÁljþ1×ç33331þ1úÁ‰×1òâüü1×1ÖÁÇ ‰ú1÷窪ªª1ú1þÁÊÁΉs‹D$$‰‹|$(‹t$,ÇD$‰D$‰$èñÿÿÇD$‰|$‰$èóðÿÿÇD$‰t$‰$èßðÿÿÄ ‹;‹sÁÆÁljø1÷窪ªª1ø1þÁÀ‰Ç1ð%üü1Ç1ÆÁÇ ‰ø1÷ç33331ø1þÁƉ÷1Ææðÿ1÷1ðÁÇ ‰þ1Ççðððð1þ1øÁȉ‰s_^][ÃS‹\$UVW‹;‹sì Áljú1÷çðððð1ú1þÁƉ÷1Öæðÿ1÷1òÁljþ1×ç33331þ1úÁ‰×1òâüü1×1ÖÁÇ ‰ú1÷窪ªª1ú1þÁÊÁΉs‹t$$‰‹|$(‹D$,ÇD$‰D$‰$èÝïÿÿÇD$‰|$‰$èÉïÿÿÇD$‰t$‰$èµïÿÿÄ ‹;‹sÁÆÁljø1÷窪ªª1ø1þÁÀ‰Ç1ð%üü1Ç1ÆÁÇ ‰ø1÷ç33331ø1þÁƉ÷1Ææðÿ1÷1ðÁÇ ‰þ1Ççðððð1þ1øÁȉ‰s_^][ÃUSVW‹l$‹\$$‹3‹{WVWV‰ã‹t$$‹|$(‹L$8Q‹D$4PSù„·åøÿÿÿ‹D$ ‹\$„;‹‹V1È1Ó‰D$ ‰\$èâßÿÿ‹D$ ‹\$‰‰_ÆÇí…Åÿÿÿ‹l$8å„ èZŠ/‹,©Õ1É1ÒÿåŠvÁâŠvŠV‹é ŠnÁáŠnŠ1È1Ó‰D$ ‰\$ègßÿÿ‹D$ ‹\$‰‰_éÈåøÿÿÿ‹D$‹\$„P‹‹^‰D$ ‰\$è/ßÿÿ‹D$ ‹\$‹L$‹T$1Á1Ú‹‹^‰‰W‰D$‰\$ÆÇí…°ÿÿÿ‹l$8å„T‹‹^‰D$ ‰\$èÏÞÿÿ‹D$ ‹\$‹L$‹T$1Á1Ú‹‹^ÁʈWÁêˆwˆW‰éÁɈOÁáˆnˆé‹L$@ĉ‰Y_^[]Ã.+%USVW‹l$‹\$,‹3‹{WVWV‰ã‹t$$‹|$(‹L$@‹D$8P‹D$8P‹D$8PSù„·åøÿÿÿ‹D$‹\$„;‹‹V1È1Ó‰D$‰\$èZûÿÿ‹D$‹\$‰‰_ÆÇí…Åÿÿÿ‹l$<å„ èZŠ/‹,©Õ1É1ÒÿåŠvÁâŠvŠV‹é ŠnÁáŠnŠ1È1Ó‰D$‰\$èßúÿÿ‹D$‹\$‰‰_éÈåøÿÿÿ‹D$‹\$„P‹‹^‰D$‰\$èÑûÿÿ‹D$‹\$‹L$‹T$1Á1Ú‹‹^‰‰W‰D$‰\$ÆÇí…°ÿÿÿ‹l$<å„T‹‹^‰D$‰\$èqûÿÿ‹D$‹\$‹L$‹T$1Á1Ú‹‹^ÁʈWÁêˆwˆW‰éÁɈOÁáˆnˆé‹L$LÄ ‰‰Y_^[]Ã.+%ÌÌÌÌÌÌÌVWjFhLoFj@è Õþÿ‹ð3ÿƒÄ ;÷ujIhLoFjAjlj èÃþÿƒÄ3À_^ÃS^8U‹l$S¸VW‰.‰~‰~‰~ ‰F‰~‰~‰~‰~ ‰~(‰~$‰F,‰~0‰~4èlŸÿÿ‹EƒÄ ;ÇtVÿЃÄ…ÀuSVWèÀŸÿÿVè×þÿƒÄ3ö][‹Æ_^ÃV‹t$…öu3À^ÃjuhLoFjF,jÿPèOÿÿƒÄ…ÀC‹F…ÀtjjjjjVÿЃÄ…À~-N8QVjèQŸÿÿ‹ƒÄ …Àt‹@ …Àt VÿÐVè˜ÖþÿƒÄ¸^ÃSUV‹t$…öWtn‹…Àth‹H …Éta‹~‹\$‹l$…ÿtjjSUjVÿ׃Ä…À~]‹F …Àuh¢hLoFjxë7‹SUVÿP ƒÄ …À~F0…ÿt2PjSUh‚Vÿ׃Ä_^][Ãh—hLoFjyjoj èqÁþÿƒÄ¸þÿÿÿ_^][ÃSUV‹t$…öWu_^]3À[Ë‹~…Àte‹H…Ét^‹\$‹l$…ÿtjjSUjVÿ׃Ä…À~]‹F …ÀuhÅhLoFjxë7‹SUVÿPƒÄ …À~F4…ÿt2PjSUhƒVÿ׃Ä_^][Ãh»hLoFjyjqj èÊÀþÿƒÄ¸þÿÿÿ_^][ÃSV‹t$ W…ötj‹…Àtd‹H…Ét]‹~‹\$…ÿtjjjSjVÿ׃Ä…À~\‹F …ÀuhæhLoFjxë6‹SVÿPƒÄ…À~F4…ÿt2PjjSh„Vÿ׃Ä_^[ÃhÚhLoFjyjnj è&ÀþÿƒÄ¸þÿÿÿ_^[ÃSUV‹t$…öWtg‹…Àta‹H…ÉtZ‹~‹\$‹l$…ÿtjjSUjVÿ׃Ä…À~V‹F …ÀuhhLoFjxë0‹SUVÿPƒÄ …ÿt2PjSUh…Vÿ׃Ä_^][ÃhûhLoFjyjhj 舿þÿƒÄ¸þÿÿÿ_^][ËD$SUV‹t$W…ö‰D$ u_^]3À[Ë…ÀtW‹H…ÉtP‹~‹\$‹l$…ÿtjSL$(UQjVÿ׃Ä…À~I‹D$ PSUVÿRƒÄ…ÿt5PSL$(UQh†Vÿ׃Ä_^][Ãh:hLoFjyjgj èã¾þÿƒÄ¸þÿÿÿ_^][ÃSUV‹t$…öWu_^]3À[Ë…ÀtW‹H…ÉtP‹~‹\$ ‹l$…ÿt‹D$jUPSjVÿ׃Ä…À~I‹T$‹SURVÿQƒÄ…ÿt5P‹D$UPSh†Vÿ׃Ä_^][Ãh:hLoFjyjgj èK¾þÿƒÄ¸þÿÿÿ_^][ÃSV‹t$ W…öu_^3À[Ë…ÀtS‹H$…ÉtL‹~‹\$…ÿtjjD$ SPjVÿ׃Ä…À~H‹T$‹RSVÿQ$ƒÄ …ÿt5PjD$ SPh†Vÿ׃Ä_^[ÃhUhLoFjyjgj è±½þÿƒÄ¸þÿÿÿ_^[ÃV‹t$…öu‹D$ ^ËN$‹Æ…Ét ‹Á‹H$…Éu÷‹L$ …ɉH$t‰A(‹W…ÀtL‹H…ÉtE‹~…ÿtjjjjjVÿ׃Ä…À~B‹jjjVÿPƒÄ…ÿt/Pjjjh†Vÿ׃Ä‹Æ_^Ãh:hLoFjyjgj è ½þÿƒÄ‹Æ_^ÃV‹t$…öu3À^ËU‹n$W…ÀtI‹H…ÉtB‹~…ÿtjjjjjVÿ׃Ä…À~?‹jjjVÿPƒÄ…ÿt,Pjjjh†Vÿ׃Äëh:hLoFjyjgj 芼þÿƒÄ‹F(…Àt‹N$‰H$‹F$…Àt‹V(‰P(‹Å_ÇF$ÇF(]^ËD$‹@ÃSVW‹|$…ÿts‹_,‹÷G,‹$…öt[juhLoFjjÿPèÿÿƒÄ…ÀC‹F…ÀtjjjjjVÿЃÄ…À~(F8PVjè™ÿÿ‹ƒÄ …Àt‹@ …Àt VÿÐVèNÐþÿƒÄƒû…ÿu_^[ËD$V‹H$‹p‹Qƒâ ò‰p‹I‰H^ÃS‹\$VW‹|$WSÿÐF‹ðƒÄ…öuvjhh„oFÿPFPjjè]»þÿh€oFWh|oFShtoFjè•ÃþÿƒÄ,ÿøFƒ8ujkh„oFh€jmj è"»þÿƒÄ3À_^[Ãjmh„oFjjmj è»þÿƒÄ3À_^[Ãh€¦IèÄ÷ÿÿ‹øƒÄ…ÿu_^[ÃVjjjWè üÿÿƒÄ‹Ç_^[ø€¦IËD$3ɉH ‰H‰H ¸ÃV‹t$…öu3À^ËF…Àt&‹F …Àt‹F …ÀtPÿÜFƒÄÇF ÇF ¸^ÃV‹t$3À‹N …Étb‹L$ …ÉtZ‹F ‹T$PRjQÿÔFƒÄ…ÀuA‹N öA t8h§h„oFÿPFPj jèþ¹þÿh¨h„oFjh‚j èæ¹þÿƒÄ(ƒÈÿ^ËL$VW3ÿ‹A …Àt#‹D$…Àt‹I ‹t$QjVPÿÈFƒÄ…À‹Æu‹Ç_^ËL$S‹\$UVqÿ‹C þ„½‡ü3ÒŠ–H!Cÿ$•!C‹L$jQPÿ€FƒÄ ‹è^][Ëh ^ƒå‹Å][ÃPÿˆFƒÄ‹è^][Ã3ö;Þt9st9s t;Æt PÿÜFƒÄ‰s ‰s ‹D$‹L$‹Ð‰K #Õ‰k ¨‰Sth@Qÿ´FƒÄPÿXFƒÄ‹Å^][Ãh€Qÿ´FƒÄPÿXFƒÄ‹Å^][Ã3ö;Þt9st9s t;Æt PÿÜFƒÄ‰s ‰s ‹D$‹È#ͨ‰Kt%¨tf‹ oFŠ ¢oFf‰T$ˆL$ëRf‹@ÕHëD‹Èƒát¨t*f‹ œoFŠžoFf‰L$ˆT$ë&¨tf‹ @ÒHf‰L$ë;΄Âf‹ÔÒHf‰T$WT$¨¿$ÕHt¿˜ÒHƒÉÿ3Àò®÷Ñ+ù‹÷‹ú‹ÑƒÉÿò®‹ÊOÁéó¥‹ÊD$ƒáPó¤‹t$$VÿÐFƒÄ…À_uVhh„oFÿPFPjj覷þÿL$$h€oFQh|oFVhtoFjèÚ¿þÿhh„oFjjtj èu·þÿƒÄ@3í‹Å^][ÉC ‹Å^ÇC ][Ãhh„oFjejtj èE·þÿƒÄ3í‹Å^][ËL$…Ét‰‹Å^][Ëk^‹Å][ËT$‹Å^‰S][ÃPÿÄFƒÄ‹Å^][ÃÁCØCäCö Cÿ C !C° CôCæ CoC® C    ‹D$‹T$ VW‹|$3öÆ‹H QRWÿðFŠƒÄ „ÀtƒÉÿ3Àò®÷ÑI_‹Á^ËÆ_^ËT$VW‹úƒÉÿ3Àò®‹D$ 3ÿ÷ÑI‹ñ‹H …Ét…Òt‹@ PjVRÿÈFƒÄ…À‹Æu‹Ç_^ËD$PhüJè1ƒÄËL$‹A…Àt‹T$RT$jRQÿЃÄ…Àt‹D$Ãh€h¤oFh“hºj&è_µþÿƒÄ3Àø,èÆSUVW‹|$T3Û3íÇD$öG<@t1‹G‹@,;Ãt'‹L$P‹T$LWQ‹L$PR‹T$PQ‹L$PRQÿЃÄ_^][ƒÄ,ËD$@ƒøru8‹D$H¾$;Æt"jWhÀoFhƒjujèдþÿƒÄ3À_^][ƒÄ,Ë\$DéŸT$$P‰T$èŒ%ÿÿ‹L$ƒÄ‰‹L$‹;ÃujahÀoFjujuj致þÿƒÄ3À_^][ƒÄ,Ã9X ujfhÀoFjtjujèc´þÿƒÄ3À_^][ƒÄ,ÃT$ÇD$‰\$ D$,‰Q‹L$D‹T$H‰D$D$SP‰L$<‰T$4è HƒÄ‹ðWèÅ«ÿÿHõƒÄ;ñ‰D$D~jvhÀoFjpjujèõ³þÿƒÄ3À_^][ƒÄ,Ã|$@rtNjz@hÀoFPèÓÅþÿ‹èƒÄ …íuj}hÀoFjAjuj踳þÿƒÄ3À_^][ƒÄ,ÃT$TD$RP‰l$\èHƒÄ‹Ý‹L$LjWQSVè„«ÿÿƒÄ…À3öë ‹T$P‹t$‰ƒ|$@rt‹D$D@PUè¼SÿÿUèÖÇþÿƒÄ ‹Æ_^][ƒÄ,øè¶SUV‹t$(WVÇD$èЪÿÿ‹\$,ƒÄ;Øt hšhÀoFjwjwjè³þÿƒÄ3À_^][YÃöF<@t+‹F‹@0…Àt!‹L$$‹T$ VSQ‹L$(R‹T$(QRÿЃÄ_^][YÃh¤hÀoFSè´Äþÿ‹èƒÄ …íuh§hÀoFjAjwjè–²þÿƒÄéA‹|$ƒÿru*ƒ|$ $t#h«hÀoFhƒjwjèf²þÿƒÄ3À_^][YËD$$jVUPSè|ªÿÿƒÄ…ÀŽôƒÿru@ƒø$u‹|$¹ ‹õ3Òó§u ÇD$éÌhµhÀoFjhjwjè²þÿƒÄé¯PD$0Pj‰l$8èKF‹ØƒÄ …Û„‹ ‹Rè”$ÿÿƒÄ;Çt9ƒÿuƒøthÓhÀoFjdëOƒÿuíƒøuè¡”FhØoFƒÀ@Pÿ,FƒÄ‹C‹L$ 9u‹x‹t$3Òó¦u ÇD$ëhÚhÀoFjhjwjè]±þÿƒÄSèôEƒÄ‹\$(SUè¦QÿÿUèÀÅþÿ‹D$ƒÄ _^][Yø8pFËD$h8pFPè±|ÿÿƒÄÃV‹t$ D$‹PQhtpFèz‹FT$RPhhpFè†}‹D$(ƒÄ^øè6SUVWh8pFè8uÿÿ‹ðƒÄ…ö‰t$ujhh”pFjAjfj"艰þÿƒÄ3À_^][YËD$ 3ÛPè"ûþÿƒÄ…ÀŽÂ‹L$ SQèûþÿ‹èƒÄ¾tpF‹}‹ÇŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àu‹D$PUè~ƒÄ…À„¤ëI¾hpF‹ÇŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àu7‹D$ƒÀPUèƒÄ…ÀtY‹L$ CQèdúþÿƒÄ;ØŒBÿÿÿ‹t$‹Æ_^][YÃjrh”pFjjjfj"苯þÿ‹U‹E‹MRhŒpFPh„pFQhxpFjè¹·þÿƒÄ0‹T$h8pFRè÷zÿÿƒÄ3À_^][YËD$‹L$PQè!ôþÿƒÄøè–SUV‹t$3íÆD$…ö„‹V…Ò„‹^‹ã…Àu º‰T$ëR3ɉD$Š …Ûuƒù~5½ˆ\$ë*ù€u ¹;Á~€< uA;È|õë ½ÆD$ÿ‹D$ʼnD$‹Ð‹D$…Àu^]‹Â[YÃW‹8…ítŠL$ˆG‹…Éuˆ‹Ê_^‰]‹Â[YÃ…Ûu‹v‹ÙÁéó¥‹Ëƒáó¤‹_Ê^‰]‹Â[YËVtÿŠ\ ÿT ÿ„Ûu ÆŠZÿNJI„ÛtóŠöÓþÈNJI…É~ ŠNöÓˆ^JIuô‹T$‹Ê_^‰]‹Â[YÃ^]3À[YøèFSUVW‹|$…ÿt‹/…íujèòþÿ‹èƒÄ…íu_^][YÃÇE‹D$‹\$ h²h°pF‹0SR ‰L$ès¿þÿƒÄ ‰D$ …Àu8hîh°pFjAh’j èP­þÿƒÄ…ít…ÿt9/t UèûñþÿƒÄ_^]3À[YÃ…Ûu ÇEé•ö€tfÇEŠ<ÿuƒûtFK‹L$ ŠTÿDÿ‹û„Òtÿu…ÿtÆŠPÿNOH„Òtï…ÿu ÆÆCëCŠöÑþÁˆNHO…ÿ~4ŠNöÒˆVHOuôë&ÇEŠ„ÉuƒûtFK‹Ë‹ø‹ÁÁéó¥‹Èƒáó¤‹|$‹E…Àt PèþÀþÿƒÄ‹L$ ‰]…ÿ‰Mt‰/‹D$‹T$_^‰‹Å][YøèÆV‹t$‹ÇFƒøs2‹F…Àt Pè¦ÀþÿƒÄhEh°pFjè¾þÿƒÄ ‰F…Àt3ɉˆH‹F…ÀuhJh°pFjAjvj èå«þÿƒÄ3À^ƒÄËL$…É} ÷ÙÇF3À…Ét ˆLÁù@ƒørï3ÉH…À|S‹VŠ\ˆ AHyò[‰¸^ƒÄËL$U3í3ÀVW…Éu_^]ËQúu½‹1ƒþv_^ƒÈÿ]Ãútí_^ƒÈÿ]Ëy…ÿu_^3À]Ã3É…ö~3ÒŠÁà ÂA;Î|ñ…ít÷Ø_^]ÃS‹\$ VW…Ûujè~ïþÿƒÄ‹ðë‹ó…öuh‰h°pFj:ëb‹|$‹G …Àt ÇFëÇFWè‚AÿÿƒÄ…Àt ™ƒâÂÁø@‹ƒÀ;È}Lh’h°pFP‹FPè$½þÿƒÄ…Àu.h•h°pFjAh‹j è…ªþÿƒÄ;ót Vè8ïþÿƒÄ_^3À[ÉF‹NQWè²GÿÿƒÄ‰…Àu ‹VˆÇ‹Æ_^[ËD$VW‹|$ P‹‹WQRè Fÿÿ‹ðƒÄ …öuh¬h°pFjijwj è ªþÿƒÄ‹Æ_^ÃuÇF ‹Æ_^ËD$ ‹L$‹T$PQRè,íþÿƒÄ ËD$…ÀuFjFh8sFj誻þÿ‹L$ƒÄ ÇÇ@…À‰t¸ÃjKh8sFjAjrj èx©þÿƒÄ3ÀøËD$ ‹L$‹T$hqFPQRè×LÿÿƒÄËD$‹L$hqFPQèlbÿÿƒÄ ÃhqFè¦mÿÿƒÄËD$hqFPè¡tÿÿƒÄËD$…Àuè#›ÿÿ‹L$‰÷ØÀƒàÃøuV‹t$ ‹RèsœÿÿƒÄǸ^øËD$ ‹L$‹T$h¸qFPQRèLÿÿƒÄËD$ ‹L$‹T$h0rFPQRè÷KÿÿƒÄø rFËD$ ‹L$‹T$hsFPQRèÇKÿÿƒÄÃVW‹|$…ÿt‹7…öu(èKÏþÿ‹ð…öujQhPsFjh›j è¨þÿƒÄ3À_^ËD$ P‰FèûÐþÿƒÄƒø‰t2ƒøttjphPsFh£ëC‹D$‹L$PQjèmÿÿÿƒÄ ‰F …ÀuQjjë‹T$‹D$RPjèN;ƒÄ ‰F …Àu2j`hPsFj h›j è§þÿƒÄ…öt…ÿt97t Vè*ÑþÿƒÄ_3À^Ã…ÿt‰7‹Æ_^ËD$‹T$‹H‹‹ËD$ ‹T$‹H‹‹T$È‹‰ËD$ €8uD‹H…Ét=öAt7‹T$‹AV‹2‹T$ Æ^…Òu ǸËI jqhhsFQRPè·üþÿƒÄÃ3ÀËD$…Àt4‹…Ét.‹D$‹@…Àt#ö@t‹@Á…ÀtÇÇ@Ç@ËD$V…ÀtC‹…Ét=‹D$ ‹@…Àt2ö@t,‹pñ…öt#‹…Àt Pè˺þÿƒÄÇÇFÇF^ËD$S…ÀUt ‹…Ét‹D$‹@…Àtö@t ‹XÙ…Ûu]¸[Ë…Àt PèrºþÿƒÄ‹l$h£hhsFUèÛ·þÿƒÄ ‰…Àu][ËÍV‹t$‹ÑW‹;Áéó¥‹Ê¸ƒáó¤_‰k^ÇC][ËD$ …Àtf‹…Ét`‹D$‹@…ÀtUö@tO‹@Á…ÀtF‹H…Éu?‹T$…Òt$‹HSV‹0‹ÙW‹:Áéó¥‹Ëƒáó¤‹H‹2ñ_‰2^[‹L$…Ét‹P‰¸Ã3ÀËD$‹öÅt‹D$ËL$‹@ÃV‹t$ W‹öÄu‹Æ_^ÃÿV‹L$ ‹ø‹G‹Âu ‹G…Àt>_^ËöÅt ‹Rèƒÿÿë‹Pè)ùÿÿ‹w‹W ƒÄ3É…ö~ 9t7AƒÂ;Î|ô‹G…Àu%‹D$…ÀthûhhsFh¤jnj èw¤þÿƒÄ3À_^Ã_^BÃSV‹t$ …öu^3À[Ë…Û~u‹F ¨tƒàëk‹NDÿ€8uKH…Ûõ3ÀŠDÿ¨uM¨t¸ëD¨t¸ë9¨t¸ë.¨t¸ë#¨ t¸ë¨@t¸ë $€öØÀƒàë3À‹L$S…ɉT$ u^‹Â[Ë‹ËU‹éˆ‹vBW‹úÓÁéó¥‹Íƒáó¤_]…Û~€Ëÿ‹ÈŠBÿÒã"ÈBÿ‹D$^[‰‹D$øèö SU‹l$3ÛVƒýW} ‹|$¸˜ëu‹|$…ÿt‹…Ûujè·çþÿ‹ØƒÄ…Ûu_^][ƒÄËD$ ‹K ƒáø‹Õ‹03ÀŠF‰D$ƒà Á‰t$$ Mƒú‰C Žh’h„sFUè÷´þÿƒÄ ‰D$…Àu>¸Ah§h„sFPhj èТþÿƒÄ…Ût…ÿt9t Sè{çþÿƒÄ_^]3À[ƒÄË͋ø‹ÑÁéó¥‹Ê€Êÿƒáó¤‹L$‹|$ÒâŠL(ÿ"ʈL(ÿ‹L$$͉L$$‹ñë ÇD$‹D$‹K‰+…Ét‹ÁPèÚ¶þÿ‹D$ƒÄ…ÿ‰CÇCt‰‹L$ _‹Ã‰1^][ƒÄÃSUV‹t$‹Æƒæ™ƒâ¹Â+΋è¸ÓàW‹|$Áý…ÿ‹Ø‰D$÷Óu‰|$‹Ç‹t$‹V ƒâð…ö‰V u_^]3À[ËM;Ñ|ƒ~uw…ÿ„–‹F…ÀuhÀh„sFQ讳þÿƒÄ ëhÄh„sFQRPè÷´þÿƒÄ‹Ð…Ò‰T$u_^][Ë>‹Å+ÇH…É~ú‹Ñ3ÀÁéó«‹Ê‹T$ƒáóªE‰V‰‹D$‹Né"] ؈]‹…À~‹N‹ŠTÿ„ÒuH…À‰ï_^]¸[ÃV‹t$ ‹Æ‹L$™ƒâWÂÁø…Ét1‹9P;ú|(‹y…ÿt!Šƒæ¹º+Î_Óâ^"ÐöÚÒ÷Ú‹ÂÃ_3À^ËD$‹H…Ét%D$jPè©pÿÿ‹L$ ‹T$‹D$ƒÄ‰‹L$‰AËT$‰‹L$‹D$ ‰AÃS‹\$ UV‹t$W…ö„q‹|$‹Gð;ÐsÿG‹O‹ÆÁèȉW‰O‹O\…É„ºG‹é‰D$‹Á΃àÁýƒù@‚3‹L$ƒø‹©w+ÿ$…L:C‹\$3ÒŠÁâC3ÀŠÁà ÐC3ÀŠ# ÐC3ÀŠ ÐC‰©Eƒý}D¸ ©+ʼnD$3À3ÒŠŠSÁàCƒÁÁâ ÂC3ÒŠ3 ÂC3ÒŠ ÂC‰Aü‹D$H‰D$u΋L$jQWèkŽ‹G\ƒÄ ÇG\tÀ‹îÁí…í~USWöÃèB}ÁåƒÄ Ý+õ…öti‹Æ‰w\Áèƒæo…Àt-‹ø3À3ÒŠŠSÁàC3ÉÁâŠk ÂC ÁC3҃Ŋ ÂC‰EüOuÕ‹Æ3ÉÞHtHtHuŠkÿKK3ÀŠÁà È3ÒŠSÿÁâ ʉM_^]¸[ÉO\<0ƒÿsP‹|$ƒè‹ ¯tHtHt+‰ ¯_^]¸[Ë\$3ÉŠ ÁáCNt3ÒŠÁâ ÊCN…öt3ÀŠ# ȉ ¯_^]¸[ËñƒáÁþ…Àt‹T$‹ªƒøw+ÿ$…\:C‹\$3ÒŠÁâC3ÀŠÁà ÐC3ÀŠ# ÐC3ÀŠ ÐC‹|$E;î‰T¯ü}1+õ<¯î3À3ÒŠŠSÁàCƒÇÁâ ÂC3ÒŠ3 ÂC3ÒŠ ÂC‰GüNuÖ…É„ÿÿÿ‹Ñ3ÀÙJtJtJuŠcÿKK3ÉŠ Áá Á3ÒŠSÿÁâ ‹L$_^‰©]¸[Ã8C8C%8C,8C©9Cµ9C¿9CÆ9CSUV‹t$W½ sF‹N\^‹ÁÁøƒáu3ÿë‹<ƒƒùw5ÿ$Ä;C‹= sF½¡sFçÿÁç3ÉŠMÁá ùE3ÒŠu úE3ÉŠM ù‰<ƒ@ƒø~ƒø}ǃjSVèŒƒÄ 3Àë}¹<ƒ+È3Àó«‹Vj‰S8‹FSV‰C<èÜ‹‹‹D$ ‹ÑƒÄ ÁꈋÑ@ÁꈋÑ@Áêˆ@ˆ‹N‹Ñ@ÁꈋÑ@ÁꈋÑ@Áêˆ@ˆ‹N‹Ñ@ÁꈋÑ@ÁꈋÑ@Áêˆ@ˆ‹N ‹Ñ@ÁꈋÑ@ÁꈋÑ@Áêˆ@ˆ‹N‹Ñ@ÁꈋÑ@ÁꈋÑ@ÁꈈHÇF\_^]¸[à:C´:C¿:CÇ:C‹D$3ÉÇ#EgÇ@‰«ÍïÇ@þܺ˜Ç@ vT2Ç@ðáÒÉH‰H‰H\¸ÃV‹t$…öujrhÌsFjCjlj&èå›þÿƒÄ3À^ËD$ …ÀtjvhÌsFjF@jÿPè²ñþÿƒÄë‹F@H‰F@…À"‹F …ÀtVÿЃÄNHQVj è¹xÿÿVè°þÿƒÄ¸^øèöVW‹|$3öƒ?u_3À^ƒÄÃh hèsFjj è>ðþÿ‹ƒÄ…À„Æ‹L$ T$RP‰L$èþúþÿ‹øƒÄ…ÿ„¦‹GU…ÀtP胂ÿÿƒÄ…Àt‹wé‹G …Àt‹wëu‹GjP½è¨åþÿ‹ðƒÄ…öt\‹FD…À öJu Vè9‚ÿÿƒÄ…Àu‹O‹ÅPQEèuåþÿ‹ðƒÄ…öuÍë'9wt"Vè‚ÿÿƒÄ…Àt‹G…Àt jPè9‚ÿÿƒÄ‰wÇG ]hdhèsFjj èXïþÿƒÄèP›þÿ‹Æ_^ƒÄøè¦Iø8è¶SUVD$W3ÛP‰\$‰\$3ÿÇD$ ‰\$èÐ1ÿÿL$8QèÆ1ÿÿ‹t$\ƒÄ9^ „C9^„:9^„1è¿1ÿÿ‹ø;û„*‹VRè|0ÿÿƒÀ‹l$T™ƒâƒÄÂÁø;èôƒý2ëès‹Ø…Û„î‹N 3Ò;Êt‹F$;Ât‰L$‰V ‰D$‰V$ëD$L$PQSVèØƒÄ…À„²‹D$LT$ RUPè-5ÿÿƒÄ …À„—‹N‹T$‹FSQRL$@PQ誌ƒÄ…ÀtxT$ D$4RPW胈ƒÄ …Àta‹NQWèb7ÿÿƒÄ…À~‹VRWWè@‹ƒÄ ‹F‹L$SPQWWè\ŒƒÄ…Àt*è°ïÿÿ…À‰D$t‹T$‰x‰ë=ÇD$dëÇD$e‹D$hŸhtFPjpj 蓘þÿ‹L$$Qè 0ÿÿWè0ÿÿƒÄ…Ût Sè–ƒÄT$ Rè‰/ÿÿD$8Pè/ÿÿ‹D$ƒÄ…À_^][t Pèj/ÿÿƒÄ‹D$ƒÄ8øè¦SV‹t$$W3Û3ÿ‹F ‰\$ ;ı9^„¨9^„ŸD$UPè¯/ÿÿ‹l$4ƒÄ;ëu 诋è…ítQè´/ÿÿ‹Ø…ÛtF‹NT$QR3ÿè!ƒÄ…Àt/‹D$…Àtƒø…‡‹D$ƒ8u~‹NT$QRèß ƒÄ…ÀuÑhàhtFjjkj ès—þÿƒÄ…ÿt Wè†.ÿÿƒÄ…Ût Sèy.ÿÿƒÄ‹D$0…Àu UèhƒÄ…ÿ]t WèZ.ÿÿƒÄT$RèM.ÿÿ‹D$ƒÄ_^[ƒÄËF,…Àu(öF(t"è“…À‰F,t‹N UQP蛓ƒÄ …À„hÿÿÿ‹F,‹N ‹V‹t$83ÿ‹…Àt Pè-ÿÿƒÄ‰ÇD$éÿÿÿh³htFjejkj èF–þÿƒÄ3À_^[ƒÄø<è¦ÿUV‹t$TƒÍÿ‹F …À„0‹F…À„%‹F…À„SD$ WPè°-ÿÿL$(Qè¦-ÿÿT$@Rèœ-ÿÿƒÄ 褋ø…ÿ„”‹\$X‹‹H…ɄӃùu ‹ƒ9„ËH …É…¸‹VRPè¤3ÿÿƒÄ…À£‹C‹H…É„•ƒùu ‹ƒ9„…‹H …É…z‹VRPèf3ÿÿƒÄ…Àe‹F‹KWPT$,QRèhƒÄ…À„÷‹L$T‹T$PD$PQRèù0ÿÿƒÄ …À„Ø‹FWL$(PT$QD$RPèuˆƒÄ…À„´‹N‹WT$(QRL$0PQèSˆƒÄ…À„’‹F,…Àu$öF(tèÆ…À‰F,t‹V WRPèD‘ƒÄ …Àtg‹F,‹V P‹N‹D$D‹L$HjjPQVSèc¥ƒÄë'‹T$D‹D$HRPVSè£ë‹L$D‹T$HQRVS誢ƒÄ…ÀŽ\D$PVSèÃ-ÿÿƒÄ …À„E‹OT$QRèÚ/ÿÿƒÄ…À|hhLtFh„é‹G@…À……öG<tè©‹è…í„ü‹D$‹OPQUè ŽƒÄ …ÀuUèÓƒÄ騋G@…Àu8h hLtFj j èAæþÿ‹G@ƒÄ…Àu‰o@3íh¦hLtFj j èæþÿƒÄ…ít U肃Ä‹G@‹L$‹WP‹GQ‹OPQD$(L$)ÿÿSèXþÿƒÄ ‹Æ_^][ƒÄ8ÃI„NC«NC»NC”NC¸0è&òSVWD$ƒÏÿP3ö‰|$3ÛèN ÿÿL$,QèD ÿÿƒÄèL…À‰D$„Ö‹|$LU‹WRèÿÿƒÀh™ƒâhLtF‹ðÁþVèDšþÿ‹ØƒÄ…ÛuhhLtFjAér‹D$D;Æ~h hLtFjléY‹T$HL$QPRèá#ÿÿƒÄ …À„J‹GL$PQèø%ÿÿƒÄ…À|hhLtFh„é‹G@…À……öG<tèǃ‹è…í„‹T$‹GRPUè>„ƒÄ …ÀuUèñƒƒÄéÝ‹G@…Àu8h%hLtFj j è_Üþÿ‹G@ƒÄ…Àu‰o@3íh+hLtFj j è=ÜþÿƒÄ…ít Uè ƒƒÄ‹W@‹D$‹OR‹WP‹GRPT$(D$‚ƒÄéÛ‹FD…Àu8hkhLtFj j è¬Úþÿ‹FDƒÄ…Àu‰~D3ÿhqhLtFj j èŠÚþÿƒÄ…ÿt WèíƒÄ‹FH…Àu{莋ø…ÿ„y‹N SQWè ‚ƒÄ …ÀuW較ÄéY‹FH…Àu8hƒhLtFj j è*Úþÿ‹FHƒÄ…Àu‰~H3ÿh‰hLtFj j èÚþÿƒÄ…ÿt WèkƒÄ‹V ‹l$XSRD$0UPjè‚yƒÄ…À„ì‹VH‹F ‹NR‹V(SPRD$8T$LPRÿQƒÄ…À„Ä‹FSPL$0UQjè=yƒÄ…À„§‹FD‹N‹|$T‹VP‹F$SQL$4PQWÿRƒÄ…À„T$€þÿƒÄ_^3À[ÃjIh€tFhÀè’þÿ‹ÐƒÄ …ÒujLh€tFjAjjjè€þÿƒÄ3ÀÃW¹°3À‹úó«Ç‚„‹Â_ÃS‹\$…Ût.VWs¿ VèçÿÿƒÄƒÆOuñŠƒ„_¨^t Sè,”þÿƒÄ[ËD$‹ˆˆƒù } ‹‰”ˆŒÿ€ˆÃV‹t$ƒ¾ˆ ‹ƒù } ‰A‰D†^ˆ¼…Àu"h„h€tFjmjtjè@þÿƒÄdž¼3À^ËD$…ÀtD‹ˆˆ…Éu‹‰ˆŒ‹ˆˆA‰ˆˆ‹ˆˆÇ€¼Iƒù ‰ˆˆ} ‹”ˆŒ‰øèFèSUVW‹|$83ÀW‰D$ ‰D$$èÿÿÿWè(ÿÿÿW‰D$èÿÿÿW‹ðèÿÿÿW‰D$(è ÿÿÿW‹èèÿÿÿW‹Øèüþÿÿ‹ø‹D$TP‰|$8èìþÿÿƒÄ ‰D$$…À‹D$,„x…Àuè0ÿÿ…À‰D$„c‹L$jQè˜ÿÿjWèÿÿ‹T$@RVè•ÿÿƒÄ…À„9‹D$4‹L$PQè{ÿÿƒÄ…À„‹T$ÇB ‹F …Àu‹ÂPVèõÿÿƒÄ…À|‹L$8‹T$QRVVèípƒÄ…À„á‹D$4ÇD$0ÿÿÿÿ‹H…ÉŽ™‹ö„Ž‹L$4QèFÿÿƒÄ=v‹F…À„‹l$ƒøu ‹ƒ:„î3ÛSVè ÿÿƒÄ…Àu^‹EC…À~‹Eöt‹L$4QUUèMmƒÄ …À„QUUèkŸƒÄ…À„?SVèÙÿÿƒÄ…Àt¹…Û~SVVèV¡ƒÄ …À„‹T$3ÛSRè®ÿÿƒÄ…Àue‹GC…À~‹öt‹L$4QWWèÜlƒÄ …À„àWWèúžƒÄ…À„΋T$SRèdÿÿƒÄ…Àt¶…Û~‹D$SPPèÝ ƒÄ …À„¡‹\$SVè‡ÿÿƒÄ…À|(WUUèxlƒÄ …À„|SVVè5mƒÄ …À„ië&UWWèPlƒÄ …À„TVSSè mƒÄ …À„A‹F…À…žþÿÿé—‹F…À„Œƒøu ‹ƒ8„tVè¡ÿÿ‹L$‹øQè•ÿÿƒÄ;Çu/jUè6ÿÿƒÄ…À„ê‹T$VRSènƒÄ …À„ÓéúVèYÿÿ‹ø‹D$PGèLÿÿƒÄ;Ç…¿‹|$$VWèƒÄ…À„š‹L$WQè€ÿÿƒÄ…À}/jUèÁÿÿƒÄ…À„u‹T$VRSèšmƒÄ …À„^é…‹D$WPSè~mƒÄ …À„BVWUè‹jƒÄ …À„/‹L$UQèÿÿƒÄ…À}jUèVÿÿƒÄ…À„ ë4jUèAÿÿƒÄ…À„õVSë‚‹T$8‹D$RVPSUèPoƒÄ…À„Ô‹E‹|$‰t$ƒø‹ó…À‹M9u'‹M …Éu ‹T$‹D$RPWèñiƒÄ …À„•éŃø…‰‹Mƒ9u‹M …Éu‹T$RWèÞ›ƒÄ…À„bë~ƒøu]‹Mƒ9u!‹M …Éu‹T$jRWè0ƒÄ …À„4ëPƒøu/‹D$PWèsÿÿƒÄ…À„‹M‹RWè<¡ƒÄ…À„ë‹D$8‹L$PQUWèÞ—ƒÄ…À„â‹T$RWWè'iƒÄ …À„Ë‹D$‹\$‹L$0‰D$‹F‰|$‹|$÷Ù…À‰L$0…|ýÿÿ‹D$0…À}‹T$4WRWè¿kƒÄ …À„ƒ‹D$ƒxua‹ƒ9uZ‹H …ÉuS‹G …Àu*‹T$4RWèJÿÿƒÄ…À}‹t$WVè˜ÿÿƒÄ…Àt@‰t$ ëO‹D$8‹L$4‹t$PQWVè&lƒÄ…Àt‰t$ ë-hâh˜tFjljnjèäxþÿƒÄ‹D$,…Àu ‹T$RèOÿÿƒÄ‹D$8Pè¢ùÿÿ‹D$$ƒÄ_^][ƒÄËD$‹L$ ‹T$P‹D$QRPjèƒÄø èâ‹L$ÇD$…Éu‹D$QPèËÿÿƒÄ¸ƒÄ ÃAS™ƒâUÂYÿ‹èVÁýã€yKƒËøCK¸ÿÓàh†h°tFU‰D$ è Šþÿ‹ðƒÄ …öu#h‰h°tFjAjrjèxþÿ‹D$ ƒÄ^][ƒÄ ÃL$WQÿÌFjjT$ jRèØ›þÿ‹|$4ƒÄ…ÿUVt@覜þÿƒÄƒøÿ„ÁƒÿuS3ÿ…í~MD$(jP胜þÿŠD$0ƒÄ<€r…ÿ~ŠL7ÿˆ 7ë$èö›þÿƒÄ…ÀŽ‚ë<*sÆ7ëÿÿƒÄ…À|0WVVèhƒÄ …À„–WVèÿÿƒÄ…À|WVVèþgƒÄ …ÀtyWVèÿÿƒÄ…À|IjjÿSVÿՃąÀu¥_^][Ë\$jjÿVSÿՃąÀtDWSèËÿÿƒÄ…À|jjÿVSÿՃąÀuã_^][Ã_^]¸[Ãhìh°tFjsjzjè1uþÿƒÄ_^]3À[ËD$‹L$PQjèþÿÿƒÄ ËD$P‹HDÿQƒÄËD$ ‹T$PR‹HD‹D$ PÿQƒÄ øH§Iø è6ÞSUVW3ÿ3Û‰|$‰|$èqôÿÿ‹t$ ‹è;ï‰l$„Æ‹~…ÿuèc ÿÿ‹ø…ÿ„°ÇD$‹^…ÛuèE ÿÿ‹Ø…Û„’‹F …Àu$öFtèYp…À‰F t‹NUQPè×pƒÄ …Àtg‹D$‹n …Àt&‹F…Àu ‹VRèÅ ÿÿƒÄHjjPWèVûÿÿƒÄ…Àt2‹L$‹V‹FDUQ‹N RWQSVÿP ƒÄ…Àt‹l$‰^‰~ÇD$ë‹l$h–hÜtFjjgjè´sþÿƒÄ…Ût‹F…Àu Sè ÿÿƒÄ…ÿt‹F…Àu Wè ÿÿƒÄUè£óÿÿ‹D$ƒÄ_^][ƒÄ ÃSUVWƒÍÿè4óÿÿ‹ø…ÿ„¬Wè´óÿÿWèÎóÿÿ‹t$$‹ØƒÄ‹F…Àuh¬hÜtFjdjfjè)sþÿƒÄëv‹F …Àu$öFtè"o…À‰F t‹NWQPè oƒÄ …ÀtK‹F ‹N‹VDP‹FWP‹D$$QPSVÿR ƒÄ…Àuh¹hÜtFjjfjèÃrþÿƒÄë‹L$QSèÿÿƒÄ‹èWèˆóÿÿWèÂòÿÿƒÄ‹Å_^][ËD$ ƒxu'‹L$‹T$‹Q‹L$R‹T$‹QRP‹D$P裃ÄËL$‹T$Q‹L$R‹T$QRP‹D$PèP{ƒÄËD$‹HƒÉ‰H¸ËD$‹@ …Àt Pè_nƒÄ¸áôtFPhJè`ÖÿÿƒÄËD$‹@øè6ÛSVD$ WPÇD$ƒËÿèÎñþÿ‹L$,‹RèRäþÿPè ãþÿPè|þÿ‹ðƒÄ…öu#hhøtFh¡h‰j èbqþÿƒÄ鵋D$$‹T$0L$ PQRè†*ÿÿ‹ø‹D$ƒÄ …Àuh•høtFjAh‰j è!qþÿƒÄëwjD$VPè_ñþÿ‹L$WT$ QRèòþÿ‹D$$WPèTÿÿ‹L$,Qèj…þÿ‹D$P‹T$XR‹‹PQD$PSè)PÿÿƒÄ…À„‹K‹T$HÎWQRè=­ÿÿƒÄ …À}‹L$…É„ø…À~ð‹{‹Æ+ÅL$,PT$,QD$8RL$$ýPQ‰|$,èm®þÿƒÄ‰D$$¨€tèpþÿ%ÿ=›…Ûè8pþÿ‹D$$‹T$+×ꨋD$t @‰D$éCÿÿÿ‹|$0…Àt…ÿu‹L$(…ÉuH…À‰D$Ž«éÿÿÿ‹Î+Í;ù~A+þý>RSèNOÿÿƒÄ…ÀtL…ÿ~ ‹C‹L$HÆWPQèb¬ÿÿƒÄ …À~>+øð…ÿà‹|$0‹D$ï…À~WéÉþÿÿh°h4wFjAë$h¶ëhçh4wFjAëhðh4wFhŽjkj ènþÿƒÄSèÜMÿÿƒÄƒÈÿ_^][ƒÄ4ËT$L_‹Å^‰][ƒÄ4øøwFø@xFøØxFÃ|$u‹D$‹‹QRèJ—þÿƒÄ¸ø yFøèyFøHzFÃ|$u‹D$‹‹QRè*ƒþÿƒÄ¸øÐzFø0{Føà{Fø(|Fø˜|FËD$…ÀuèÃaÿÿ‹L$‰÷ØÀƒàÃøuV‹t$ ‹Rè#cÿÿƒÄǸ^øËD$ ‹L$‹T$hèFPQRèÿÿƒÄËD$‹L$hèFPQèœ%ÿÿƒÄ ËD$ ‹L$‹T$hH€FPQRèÇÿÿƒÄËD$PhèFèAKÿÿƒÄøè†Õ‹D$‹T$L$PQRÇD$ è*%ÿÿ‹L$ ƒÄ …Éu3ÀYËT$ jR‹T$ R‹T$ RPQè#ïþÿ‹D$Pè9€þÿƒÄ¸YËD$ ‹L$‹T$h¨€FPQRèÿÿƒÄËD$‹L$h¨€FPQè¬$ÿÿƒÄ ËD$h¨€FPèñ6ÿÿƒÄÃ|$u‹D$‹‹H ‹A…Àt‹‹@RPè} ÿÿƒÄ¸ø8FËD$ ‹L$‹T$h8FPQRèwÿÿƒÄËD$h8FPèq6ÿÿƒÄø`è6ÔSUVW‹|$t3Û3í‰\$‹G ƒ8u‰ëÇ‹H‹Q‰T$t‹@‹0è°‘þÿ…À‰D$ujehxFjAjojèfjþÿƒÄ3À_^][ƒÄ`ËG‰D$‹Qè ÝþÿƒÄƒø„žƒøttohÔhxFjvjojè$jþÿ‹T$,ƒÄ‹…Àu¡˜]FŠ œ]F‰D$ ˆL$$ëPT$$jPRèõMÿÿƒÄ D$ Ph]Fjè1rþÿ‹L$Qè—“þÿƒÄ3À_^][ƒÄ`ËD$t€80…•hðzBh zBVPèL“‹ØƒÄ…Ûu hé´SèC´þÿƒÄƒøt h…éœjSè9´þÿjS‹ðè/´þÿ‹ƒÄƒùu Ç‹Îë‹L$‹Qƒ:uÇ‹Iƒ8t h›éR‹pë0h–éCD$tVPjèû ÿÿ‹ðƒÄ …öu h¡é#‹O‹I…É„ƒ9…‹Q‹B‰D$t‰D$‹AL$‹PQjèQÀÿÿ‹èƒÄ …íu h­éÙjVèv¾ÿÿƒÄ‰E…Àuh²hxFjpé½èvÿÿ…À‰Euh·hxFjAé èIèÿÿ‹ø…ÿ‰|$uh»hxFjA逋U ‹E‹MWR‹UPQRè8mƒÄ…ÀuhÂhxFjqëU‹D$UjtPè¦þÿWè@èÿÿƒÄ…ÛthðzBSè>²þÿ‹D$ƒÄ_^][ƒÄ`ÃVè ÿÿ‹D$ƒÄ_^][ƒÄ`Ãh§hxFjrjojèÕgþÿ‹L$0ƒÄQèèçÿÿhðzBSèí±þÿUèg[ÿÿ‹T$ Rèm‘þÿƒÄ3À_^][ƒÄ`ËD$tL$VQj‰D$ èûúÿÿƒÄ …ÀujohxFjrjojèrgþÿƒÄ3À_^][ƒÄ`ËT$PjRèØŽþÿ‹D$ƒÄ _^][ƒÄ`ÃVW‹|$…ÿt‹7…öu(è[Žþÿ‹ð…öujQhFjhšj ègþÿƒÄ3À_^ËD$ P‰Fè þÿƒÄƒø‰t2ƒøttjphFh£ëC‹D$‹L$PQjè-¾ÿÿƒÄ ‰F …ÀuQjjë‹T$‹D$RPjèúÿÿƒÄ ‰F …Àu2j`hFj hšj èfþÿƒÄ…öt…ÿt97t Vè:þÿƒÄ_3À^Ã…ÿt‰7‹Æ_^ËD$PÿFƒÄ…ÀuÃV‹ð‹D$ W¹ ‹øó¥_^ÃSV‹\$‹t$W‹|$ƒ?tHhõIShÈFVè›ÇþÿƒÄ…À„´‹PVè'—ƒÄ…À„ jhŒÏHVè¤ÿÿƒÄ …À„ˆ‹G…Àt=hõISh¼FVèLÇþÿƒÄ…Àti‹OQVè[šƒÄ…ÀtXjhŒÏHVè7¤ÿÿƒÄ …ÀtD‹G…ÀtChõISh¬FVèÇþÿƒÄ…Àt%‹WRVè7—ƒÄ…ÀtjhŒÏHVèó£ÿÿƒÄ …Àu_^3À[Ã_^¸[ËD$V‹t$hõIPhÔFVè¦ÆþÿƒÄ…Àu^ËL$ QVèÒ–ƒÄ÷ØÀ^÷ØÃ‹D$V‹t$hõIPhÔFVèfÆþÿƒÄ…Àu^ËL$ QVèâHÿÿƒÄ÷ØÀ^÷ØÃé{ÿÿ‹T$…Òt*‹D$SVW‹‹p‹:‹ÙÁéó¥‹Ëƒá󤋋2ñ_‰2‹^[ËT$‹ÃS‹\$UV…ÛWt‹;…ÿuèÿÿ‹ø‹t$‹l$U‹PWèUºÿÿƒÄ …Àu4…ÿt…Ût9;t WèܨþÿƒÄhâhØFjAjfj'èdþÿƒÄ3À_^][ËÍ…Û‰t‰;‹Ç_^][ËD$Pè–¨þÿYËD$V‹t$hõIPhÔFVèFÅþÿƒÄ…À3À^ËL$ jQVè>™ƒÄ 3Ò…ÀŸÂ‹Â^Ãé›ÿÿSUV‹t$W‹|$ hõIWh‚FVèóÄþÿƒÄ…Àޝ‹l$h‚j‹EPVè³™ƒÄ…ÀŽ‹M3ÛQèÝ­þÿƒÄ…À~s?‰T$ ‹ESPèÕ­þÿ‹L$(hõIQhøFV‹øèŽÄþÿƒÄ…À~N‹RVèGÿÿƒÄ…À~>hôFVè,¢ÿÿƒÄ…À~,‹GPVèƒÄ…À~‹MCQèj­þÿƒÄ;Ø|”_^]¸[Ã_^]3À[ø8‚FËD$h8‚FPè!.ÿÿƒÄøp‚FøTèÖË‹D$\SUVW3ÿP‰|$èò¬þÿƒÄ…ÀŽë‹|$‹L$lWQèæ¬þÿ‹T$x‹L$p‹ðR‹FPQè!ƒÄ‰D$p…À„òWP軬þÿ‹‹èRD$ jPPèêEÿÿ‹}ƒÉÿ3Àjuò®÷ÑI|$,‹ÑƒÉÿò®÷ÑIhÀ‚FD Pè¾sþÿ‹ØƒÄ …Û„®ƒÉÿ|$3Àò®÷Ñ+ù‹Ñ‹÷‹ûÁéó¥‹Êƒáó¤¿ôFƒÉÿò®÷Ñ+ù‹÷‹Ñ‹ûƒÉÿò®‹ÊOÁéó¥‹Êƒáó¤‹}ƒÉÿò®÷Ñ+ù‹÷‹Ñ‹ûƒÉÿò®‹ÊOÁéó¥‹Êƒáó¤‹EPè¹uþÿ‹t$‹L$pFQ‰]‰t$èÓ«þÿƒÄ;ðŒãþÿÿ‹D$p…Àuè«§þÿ_^][ƒÄTÃjxhÀ‚FjAhŠj"èî`þÿƒÄ3À_^][ƒÄTøèVÊSUVWèm§þÿ…À‰D$u%hhÀ‚FjAh‹j"è­`þÿƒÄ3À_^][ƒÄËD$0ÇD$Pè>«þÿƒÄ…ÀŽô‹L$‹T$0QRè4«þÿh8‚F‹èèø$ÿÿ‹ØƒÄ …Û„ ‹D$SPèªþÿƒÄ…À„ ‹Mj;Qÿ˜FƒÄ…À„«‹U‹ð+ò@‰D$‹U‰T$ ‹CPèâžþÿ‹T$0‹D$,L$QRPènƒÄ‰C…À„Ðh¤NhÀ‚FQèÝqþÿ‹øƒÄ …ÿtb‹UVRWÿ0FjWÆ7èlÓþÿƒÄ‰…ÀtHWè-tþÿ‹t$‹D$4FP‰t$èJªþÿƒÄ;ðŒ ÿÿÿ‹D$_^][ƒÄÃh›hÀ‚FhëCh¥ë5h¬hÀ‚Fjwh‹j"èS_þÿWhÜ‚Fjè–gþÿWèÀsþÿƒÄ$ëh–hÀ‚FjAh‹j"è#_þÿƒÄ‹L$huCQèA©þÿƒÄ3À_^][ƒÄøƒFøPèfÈVW‹|$`3öW舩þÿƒÄ…À~3VW芩þÿPD$jPPè½BÿÿL$xT$QRjè¼&WFèU©þÿƒÄ$;ð|Í‹D$d_^ƒÄPÃSUVWè'¥þÿ‹è…íuj}h0ƒFjAjgj"èo^þÿƒÄ3À_^][Ë\$3ÿSè ©þÿƒÄ…À~:WSè ©þÿ‹ðƒÄ‹F…Àu‹FjPèäÑþÿƒÄ…ÀtPUèæ§þÿSGèϨþÿƒÄ ;ø|Æ_‹Å^][Ãhð¾BUè6¨þÿh‡h0ƒFjnjgj"èñ]þÿ‹F‹N‹PhŒpFQh„pFRhxpFjè fþÿƒÄ83À_^][øxƒFøÀƒFÃU‹l$ V‹EPè²ÿÿ‹L$‹T$P@PhõIQh„FRè¿þÿ‹E3öPè¨þÿƒÄ …À~cSW‹MVQè¨þÿ‹ø‹Rjè‹(‹L$,‹Ø‹D$0ShõIPhøƒFQ迾þÿSè©qþÿ‹W‹D$DRPèKŽ‹MFQèÁ§þÿƒÄ4;ð|©_[^¸]Ã^¸]øèfÆS‹\$VWSÇD$3ÿè§þÿƒÄ…À~cWSè§þÿ‹p‹@PjèS(ƒÄ…Àt%jÿVPD$PèNƒÄ…Àt+SGè@§þÿƒÄ;ø}$ë¿hh(„Fhƒj}j"èo\þÿƒÄ_^3À[YËD$ _^[YËT$SU3ÛVW…Ò„œ‹D$…À„‹|$…ÿ„„‹l$ ƒýÿu Í3Àò®÷ÑI‹éƒý@~"hÂh(„Fh„j~j"èõ[þÿƒÄ3À_^][Ë2…öu2hÀƒFèk ÿÿ‹ðƒÄ…ö„°‹jPèt¯ÿÿƒÄ…À„›‹L$‰1‹V3ÿRèX¦þÿƒÄ…À~5‹FWPèW¦þÿ‹L$ ‹ØQ‹Rèx þÿƒÄ…À„ž‹FGPè#¦þÿƒÄ;ø|ËhxƒFèòÿÿ‹ØƒÄ…Ût;ƒýÿu‹|$ Í3Àò®÷ÑI‹é‹L$‹SUQRè–žþÿƒÄ …Àt‹FSPèå¤þÿƒÄ…ÀulhØh(„FjAj~j"è [þÿhxƒFSèž&ÿÿhÀƒFVè“&ÿÿ‹L$8ƒÄ$3À_^]Ç[ËC…À„hÿÿÿhËh(„Fh…j~j"è¼ZþÿƒÄ3À_^][ËT$_^‰]¸[Ãh½h(„Fjkj~j"èZþÿƒÄ3À_^][ÃV‹t$ WVèT›‹T$ƒÄ‹J4‹y…ÿt;t‹yƒÁ …ÿuòVRè.%ƒÄ_^ËAPèß;ÿÿƒÄ_^ÃS‹\$ WS3ÿèÒ¤þÿƒÄ…ÀŽžVWSèϤþÿ‹ðƒÄ‹…Àt5ƒ8u‹L$‹PQRjèŸƒÄ ‰D$ëD$Ph¬†Fhœ†Fèâ!ƒÄ ‹F…ÀtL$Qh¬†FhT†FèÄ!ƒÄ ‹F…ÀtT$Rh¬†FhH†Fè¦!ƒÄ SGè<¤þÿƒÄ;øŒkÿÿÿ‹D$^_[ËD$_[øèæÂSUVW3í3ÿèùŸþÿ…À‰D$„É‹D$ 3ÛPèñ£þÿƒÄ…ÀŽš‹L$ SQèë£þÿ‹T$$P‹D$$RPè‹‹øƒÄ…ÿ„¥è ˜þÿ‹è…ítWUè¼¢þÿƒÄ…ÀtqhØ…F3ÿèyÿÿ‹ðƒÄ…öt\‹L$VQè•¢þÿƒÄ…ÀtTþÿƒÄ3À_^][ƒÄø‡Fø`‡FËD$h`‡FPè¡ÿÿƒÄøȇFøˆFøXˆFø ˆFøè&½SUVWè=šþÿ‰D$‹D$4Pè/%‹Ø3ÀS‰\$,‰D$(‰D$ è)žþÿƒÄ…ÀŽ~‹L$QSè#žþÿ‹øƒÄ‹G…À…œ‹o…í„‘¾°‰F‹ÅŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àu ÇD$ éý€}@…¿‹\$0EUSè1‹ðƒÄ…ö‰t$„ h`‡FèfÿÿƒÄ‰D$4…À„7VÇD$èiþÿƒÄ…ÀŽ˜‹D$‹L$PQè_þÿ‹ðƒÄ¿œ‰F‹n‹ÅŠŠÊ:u„ÉtŠPŠÊ:WuƒÀƒÇ„Éuà3ÀëÀƒØÿ…Àu P‹FPè ÆþÿƒÄ…À„Ž‹L$4‰éh˜‰FUè-ƒÄ…Àu‹|$4‹G…ÀuèÁ˜þÿ‰GhˆFè¤ÿÿ‹øƒÄ…ÿ„w‹T$4W‹BPè¹›þÿƒÄ…À„^h¤èÄÂþÿj‰èK–þÿ‹ÐƒÉÿ‰W‹v‹þ3Àò®÷ÑIQVRè•þÿƒÄ…À„$ë~‹NhŒ‰FQèt,ƒÄ…À…‹F€8@…Û@PSèÅ‹øƒÄ…ÿ„׋T$ RWSèWS‹ðèÃąötm‹|$4‹G…Àuèì—þÿ‰G‹GVPèÿšþÿƒÄ…À„¤‹t$‹L$FQ‰t$èÑ›þÿƒÄ;ðŒhþÿÿ‹t$4ƒ>u2hñhp‰Fh‹hƒj"èòPþÿƒÄ‹T$4h`‡FRè€ÿÿƒÄ3ö‹D$PSè0ƒÄ…ö„Mé¤hÄhp‰Fjnë?h×hp‰Fh‰ë.hÝhp‰Fh‡ëhøhp‰FjAë„hêhp‰FhŠhƒj"ègPþÿ‹V‹F‹RhŒpFPh„pFQhxpFjè–XþÿƒÄ0éOÿÿÿjUèæÃþÿ‹ØƒÄ…Ûthh`‡Fè³ÿÿ‹ðƒÄ‰‹L$VQèÑ™þÿ‹\$,ƒÄ‹t$SF‰t$諚þÿƒÄ;ðŒ‚üÿÿh¡CSèšþÿ‹D$$ƒÄ_^][ƒÄÃhhp‰Fh‡ëh§hp‰Fjnëh‘hp‰Fh†h‚j"èœOþÿ‹W‹G‹RhŒpFPh„pFQhxpFjèËWþÿƒÄ0‹T$h„CRè™™þÿƒÄ3À_^][ƒÄø èÆ¸SUVWhˆFèÈÿÿ‹øƒÄ…ÿ‰|$„±h¥èý¿þÿhXˆF‰è¡ÿÿ‹ðƒÄ…ö‰t$„Š‹D$$3ÛP‰w‰\$è™þÿƒÄ…ÀŽÍ‹L$$SQè—™þÿ‹èƒÄ¾È‰F‹}‹ÇŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àu7jè“þÿ‹Ð‹D$ƒÉÿ‰P‹u‹þ3Àò®÷ÑIQVRèÔ‘þÿƒÄ…À„ó鈾ԈF‹ÇŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àuh‹t$‹…Òuh ˆFè¬ÿÿ‹ÐƒÄ…Ò„™‰‹D$(…Àt ‹Ç@ë ‹ ÇA‹uƒÉÿ‹þ3Àò®‹÷ÑIQVRè8‘þÿƒÄ …À„Wé쾸‰F‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À…5‹|$‹7…öuh ˆFèÿÿ‹ðƒÄ…ö„õ‰7‹EPè‹øƒÄ…ÿ„ëWèý—þÿƒÄ…À„Ú‹^W3öèç—þÿƒÄ…À~5VWèé—þÿ‹HQj较ąÀt^PSèЖþÿƒÄ…ÀtfWFè²—þÿƒÄ;ð|˾h¡CWè—þÿƒÄ…ö„û‹\$‹T$$CR‰\$è}—þÿƒÄ;ØŒàýÿÿ‹t$é¤hNhp‰FhŒh…ëhVhp‰FjAh„j"è‹LþÿƒÄhàBSè­–þÿƒÄ3öë€h=hp‰FjAëth%hp‰Fhëh.hp‰FhŠh„j"è‰ÿÿ‹D$$ƒÄ‹@…Àt‹PRhõIUhä‰FVè[«þÿƒÄ‹\$0‹l$‹|$,UG‰|$0èa”þÿƒÄ;øŒŠþÿÿ‹|$‹T$(GR‰|$èC”þÿƒÄ;øŒþÿÿ_^]¸[ƒÄËG‹HCQhõIPh؉FVèðªþÿƒÄ뛸ƒÄÃS‹\$ VWS3öèñ“þÿƒÄ…À~+‹|$U‹l$VSèê“þÿWPUè2S‹øFèÉ“þÿƒÄ;ð|á]ë‹|$…ÿu è¢þÿ_^[ËÇ_^[øèf²‹„$‹ƒù‡éÿ$D‘C„$ PhÄŠFh¸ŠFèÆ‹„$ƒÄ ÄÃŒ$ QhÄŠFh¬ŠFèž‹„$ƒÄ ÄÔ$ RhÄŠFhœŠFèv‹„$ƒÄ ÄËPŒ$ Q‹BPh”ŠFèL‹„$ƒÄ ÄËPŒ$ Q‹BPhŠFè"‹„$ƒÄ ÄËPŒ$ Q‹BPhŒŠFèø‹„$ƒÄ ÄËPL$hQRèD^þÿ„$L$ PQh„ŠF轋„$$ƒÄÄË@‹‹Hƒút(”$ RhxŠFhlŠF舋„$ƒÄ ÄÃ3À3ÒŠAŠQPR3À3ÒŠAŠPRD$h¤!IPÿFŒ$$T$QRhlŠFè9‹„$0ƒÄ$ÄË@L$PhQè+ÿÿ”$D$ RPh\ŠFèþƒÄ‹„$ ÄÃSCËCõC{CIC£CC„C‘CV‹t$ W‹ƒø‡Wÿ$…à’C‹D$ h`‹FPè¨þÿƒÄ¸_^ËL$ hH‹FQèÿ§þÿƒÄ¸_^ËT$ h,‹FRèå§þÿƒÄ¸_^ËF‹T$ ‹HQh ‹FRèħþÿƒÄ ¸_^ËF‹T$ ‹HQh‹FR裧þÿƒÄ ¸_^ËF‹T$ ‹HQh‹FRè‚§þÿƒÄ ¸_^Ë|$ h‹FWèh§þÿ‹Fh‚jPWè7|ƒÄ¸_^Ëv‹‹Fƒùt‹L$ hìŠFQè0§þÿƒÄ¸_^Ã3Ò3ÉŠPŠHRQ3Ò3ÉŠPŠR‹T$QhÔŠFRèÿ¦þÿƒÄ¸_^Ë|$ h\ŠFWèå¦þÿ‹FPWèk)ÿÿƒÄ_¸^È‘CÖ‘C÷‘C¢‘C9’C¼‘C’Cd’C¼’C¸膮SUVWè‹þÿ‹Ø…Ûu hÔh€‹FjAjvj"èâDþÿƒÄ3À_^][YË|$ 3öW‰t$èwþÿƒÄ…ÀŽ„‹l$VWèqþÿ‹øhÔ F‹GPèqƒÄ…À…Ø‹G…À„;x‹FŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…À…—…í„çƒ}„¢‹E…À„ÒjÿjUPè~þÿƒÄ …ÀŒ‚P‹EPè‰þÿƒÄ…À„šPèèSÿÿ‹ðƒÄ…ö„‡V3ÿ裎þÿƒÄ…À~#WV襎þÿPSèžþÿƒÄ…ÀtUVG耎þÿƒÄ;ø|ÝVèCŽþÿƒÄë‹L$WUQè"ƒÄ …Àt]PSèdþÿƒÄ‹t$‹|$ FW‰t$è>ŽþÿƒÄ;ð}OéÊþÿÿhh€‹FjAëhúh€‹Fj~ë hóh€‹Fjj{j"èQCþÿƒÄhðBSèsþÿƒÄ3À_^][YÃ_^‹Ã][Yø覬SUVW轉þÿ‹Ø…Ûu hh€‹FjAjvj"èCþÿƒÄ3À_^][YË|$ 3öW‰t$è—þÿƒÄ…ÀŽý‹l$VWè‘þÿ‹øh”ŠF‹GP葃ąÀuN‹G…ÀtG¾x‹FŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…ÀuPSUè¹ƒÄ …À„—ëo‹Gh”ŠFPè.ƒÄ…Àu=‹G…Àt6¾œ‹FŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àujëš‹D$WUPè~ƒÄ …Àt0PSèÀ‹þÿƒÄ‹t$‹|$ FW‰t$蚌þÿƒÄ;ðŒÿÿÿ_^‹Ã][YÃhðBSèü‹þÿƒÄ3À_^][YËD$SUV‹W3Û3ÿƒùu _^]¸[Ã…À„Ï‹H…Éu‹P …Ò„½…Ét QèLþÿƒÄ‹èë‹@ ‹‹ijÿj0Uè†~þÿ‹ðƒÄ …ö|°VUèæ~þÿPè[Pèúƒþÿ‹Ø‹D$,ƒÄ…Àt VUèþÿƒÄN…ÛtTèéþÿ‹ø…ÿtI‹T$W‰_R3ÛÇèÍŠþÿƒÄ…ÀtVj0U3ÿè~þÿ‹ðƒÄ …ö}•_^]¸[ÃhTh€‹FjAëhMh€‹FjAë h:h€‹Fj}jzj"è·@þÿƒÄWè~þÿSèh…þÿƒÄ3À_^][øèª‹D$ SUV‹h‹p…íu!h‡h€‹Fj|juj"è`@þÿƒÄ3À^][ƒÄÃèþÿ‹Ø…Û‰\$ u!hŒh€‹FjAjuj"è0@þÿƒÄ3À^][ƒÄÃh”ŠFVèéƒÄ…Àuc¾jèv„þÿ‹ÐƒÄ…Ò‰St!W‹ýƒÉÿ3Àò®÷ÑIQURèEƒþÿƒÄ …À_…§h½h€‹FjAjuj"èÄ?þÿƒÄSè‹~þÿƒÄ3À^][ƒÄÃhŒŠFVètƒÄ…Àu¾ë‰hŠFVè[ƒÄ…Àu ¾émÿÿÿh¤‹FVè?ƒÄ…ÀuAPUè³þÿƒÄ…Àu hœh€‹Fjwjuj"èE?þÿUhÜ‚Fég‰C¾‰3^‹Ã][ƒÄÃh”&IVèìƒÄ…À…#D$L$PT$QD$RPh¤!IUÿ¬FƒÄƒø…Ú‹\$…ÛŒÊûÿ¾‹T$…ÒŒ²úÿ¦‹L$…ÉŒšùÿŽ‹D$…ÀŒ‚=ÿ{jˆ\$0ˆT$1ˆL$2ˆD$3èã‚þÿ‹L$ƒÄ…À‰At(T$,jRPè¸þÿƒÄ …Àt‹\$ ¾‹Ã‰3^][ƒÄÃh¯h€‹FjAjuj"è(>þÿ‹\$ ƒÄSèë|þÿƒÄ3À^][ƒÄË\$ h¨h€‹Fjvjuj"èö=þÿUhÜ‚Fëh´h€‹Fjujuj"èÙ=þÿVhÜ FjèFþÿƒÄ Sè“|þÿƒÄ3À^][ƒÄøЋFËD$V‹t$WhõIPhÔFVèŸþÿ‹|$ ƒÄƒ?t0j h ŒFVè |ÿÿ‹QVè3o‹GƒÄ…Àt1jh´ IVèì{ÿÿƒÄ ‹G…Àtj hŒFVèÕ{ÿÿ‹WRVèûnƒÄ_¸^ËD$V‹p4‹F…Àt9W‹|$‹QWèã›ÿÿƒÄ…Àt‹FT$RjPèüƒÄ ‹FƒÆ …ÀuÓ‹D$_^ËD$^ø èF¦SUVWjè+þÿ‹ØƒÄ…Û‰\$ujwhÀFjAjej"èœ<þÿƒÄ3À_^][ƒÄ Ë|$(3öW‰t$è/‡þÿƒÄ…ÀŽÔVWè-‡þÿ‹ð‹D$(ƒÄ‰t$‹h4‹}…ÿ„‰‹^‹M‹óŠŠÐ:u„ÒtŠAŠÐ:FuƒÁƒÆ„Òuà3ÉëɃÙÿ…Ét=‹ó‹ÇŠŠÊ:u„ÉtŠPŠÊ:VuƒÀƒÆ„Éuà3ÀëÀƒØÿ…Àt ‹}ƒÅ …ÿu“ë‹E‹L$jPQè ™ÿÿƒÄ ‹t$‹E…Àt,‹t$‹|$(FW‰t$è_†þÿƒÄ;ðŒ0ÿÿÿ‹\$_^‹Ã][ƒÄ Ãh…hÀFjojej"è;þÿ‹V‹F‹RhŒpFPh„pFQhxpFjè°Cþÿ‹T$@Rè€þÿƒÄ43À_^][ƒÄ ËD$‹‹PQRèPƒÄø(è–¤SVW‹|$@¾øF‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…Àjtbè@þÿ‹ðƒÄ…öujVhÜFjAjpj"èµ:þÿƒÄ3À_^[ƒÄ(ÃD$@PWèNƒÄ‰F…ÀuVèNþÿƒÄ3À_^[ƒÄ(ËL$@‹Æ‰_^[ƒÄ(ÃèÞ~þÿ‹øƒÄ…ÿujphÜFjAjsj"èS:þÿƒÄ3À_^[ƒÄ(ËL$<…É„‚ƒ9u ‹Ç_^[ƒÄ(ËA …Àu ‹Q…Òtf…Àt‹‹Bë‹I‹‹B‹p…öuh€ëGjèW!ÿÿL$P‹T$Q‹NRPQè@½þÿ‹T$$D$(RPWè0}þÿƒÄ$…Àu“h‡hÜFjAjsë jwhÜFjrjrj"è§9þÿƒÄWè^~þÿƒÄ3À_^[ƒÄ(ÃS‹\$ …Ût<‹…Àt6jU@hŽFPèsKþÿƒÄ …Àt!‹ V‹s‹ÑW‹øÁéó¥‹Êƒáó¤‹ _^[ÆÃ3À[ÃS‹\$…ÛVuj`hŽFjkjdj"è$9þÿƒÄ3À^[Ãjè…}þÿ‹ðƒÄ…öt&W‹ûƒÉÿ3Àò®÷ÑIQSVèW|þÿƒÄ …À_u#Vè©}þÿƒÄjnhŽFjAjdj"èÔ8þÿƒÄ3À^[ËÆ^[ËL$‹A‹@…Àt‹T$‹IRQÿЃÄÃ3ÀËT$…Òt‹L$‹A‹@ …Àt ‹IRQÿЃÄËD$ ‹L$‹T$PQRèL|ƒÄ ËD$‹L$PQèÑ{ƒÄËD$ ‹L$‹T$PQRèlzƒÄ ËD$‹L$PQè±yƒÄËD$SUVW3ö3ÿ3í…ÀtPèxÿÿ‹øƒÄ…ÿt^‹D$…ÀtPèaÿÿ‹èƒÄ…ítGjRhŽFj èªIþÿ‹ðƒÄ …öt0‹\$ƒ;u è3~þÿ…À‰tlj~‰n‹VPè8þÿƒÄ…ÀuCjZhŽFjAjij"è_7þÿƒÄ…öt VèÒKþÿƒÄ…ÿt WèÅKþÿƒÄ…ít Uè¸KþÿƒÄ_^]3À[Ã_^]¸[ÃV‹t$…öt8‹F…Àt PèŠKþÿƒÄ‹F…Àt PèzKþÿƒÄ‹…Àt PèkKþÿƒÄVèbKþÿƒÄ^ËD$SUV…ÀW„Ê‹D$3ö3ÿ3Û…ÀtPèLÿÿ‹øƒÄ…ÿtf¸ìI…ÀtPè4ÿÿ‹ØƒÄ…ÛtNjRhŽFj è}Hþÿ‹ðƒÄ …öt7‹l$ƒ}u è}þÿ…À‰Et!lj~‰^‹MVQè€þÿƒÄ…À… jZhŽFjAjij"è+6þÿƒÄ…öt VèžJþÿƒÄ…ÿt Wè‘JþÿƒÄ…Û„ËSè€JþÿƒÄ3À_^][ËD$3ö3ÿ3Û…ÀtPè‚ÿÿ‹øƒÄ…ÿtbºäI…ÒtRèjÿÿ‹ØƒÄ…ÛtJjRhŽFj è³Gþÿ‹ðƒÄ …öt3‹l$ƒ}u è;|þÿ…À‰Etlj~‰^‹EVPè>þÿƒÄ…ÀuCjZhŽFjAjij"èe5þÿƒÄ…öt VèØIþÿƒÄ…ÿt WèËIþÿƒÄ…Ût Sè¾IþÿƒÄ_^]3À[Ã_^]¸[ËD$W3ÿ…Àu_ÃVjPèZv‹ðƒÄ…ötVèky‹øƒÄ…ÿuhˆhŽFjAjyj"èÝ4þÿƒÄVèTÌþÿƒÄ‹Ç^_ËD$W3ÿ…Àu_ÃVjPèjŠÿÿ‹ðƒÄ…ötVè y‹øƒÄ…ÿuh”hŽFjAjxj"è}4þÿƒÄVèôËþÿƒÄ‹Ç^_øèÖVWÇD$è'Ìþÿ‰D$‹D$…Àuh¡hŽFjmjlj"è&4þÿƒÄ3À_^YÀ8-u@¿ë3ÿ€80uŠH€ùxt€ùXuƒÀPD$ Pèîyë L$PQè{ƒÄ…Àuh²hŽFjdjlj"èÅ3þÿƒÄ3À_^YËL$…ÿt‹A…Àt ƒøu ‹ƒ:u3ÿjQèwˆÿÿ‹ð‹D$Pè ËþÿƒÄ …öuh»hŽFjejlj"èo3þÿƒÄ3À_^YÃ…ÿt ‹F€Ì‰F‹Æ_^YËD$SU3í;ÅVu ^]¸[ÃUP‰l$èïˆÿÿ‹ðƒÄ;õtVèwƒÄ;ʼnD$uh”hŽFjAjxj"è3þÿƒÄVèwÊþÿ‹\$ƒÄ;Ýu^]3À[ËD$W3ö3ÿ…ÀtPèsÿÿ‹øƒÄ…ÿtVSèdÿÿ‹èƒÄ…ítGjRhŽFj è­Dþÿ‹ðƒÄ …öt0‹\$ƒ;u è6yþÿ…À‰tlj~‰n‹VPè;|þÿƒÄ…ÀuRjZhŽFjAjij"èb2þÿƒÄ…öt VèÕFþÿƒÄ…ÿt WèÈFþÿƒÄ…ít Uè»FþÿƒÄ‹L$3öQè¬FþÿƒÄ‹Æ_^][ËL$¾Qè“FþÿƒÄ‹Æ_^][ÃSU‹l$ VW‹}…ÿ„ȾìI‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„á¾LŽF‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„¥¾ ÒH‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„i¾üÑH‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„-¾HŽF‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„ñ¾DŽF‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„µ¾äI‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„e¾<ŽF‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„)¾4ÓH‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„í¾TÓH‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…À„±¾8ŽF‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…Àty¾HÓH‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…ÀtAhÞhŽFjhjnj"è/þÿ‹E‹M‹UPhŒpFQh„pFRhxpFjè>7þÿƒÄ03À_^][ËD$_^]Ǹ[ËL$_^]Çÿ¸[ÃV‹t$‹FPjè@úÿÿƒÄ…Àu(‹N‹V‹QhŒpFRh„pFPhxpFjèÈ6þÿƒÄ3À^ËL$ ^‰¸øèÖ—‹D$SUVW3ÛP‰\$èâÿÿ‰D$ ‰D$(‹èŠƒÄÇD$„À‰\$„‹=´F< „&< „‹L$I„¢I…Ó<,…Ë‹L$$ÇD$ÆŠE„À„Å‹÷‹¸Fƒ:~3ÀjŠEPÿÖƒÄë‹°F3ÉŠM‹ŠHƒà…ÀtŠEE„ÀuÇ€}„€‹ýƒÉÿ3Àò®÷ÑIt)ÿ;õtD‹=´F‹ ¸Fƒ9~3ÒjŠRÿ׃Äë‹ °F3ÀŠ‹ŠBƒà…ÀtN;õuÌë;îtÆF€}„…í„‹D$3ö3ÿ3Û…ÀtPè²ÿÿ‹øƒÄ…ÿtYUè£ÿÿ‹ØƒÄ…ÛtJjRhŽFj èì>þÿ‹ðƒÄ …öt3‹D$…Àu èvsþÿ…À‰D$tlj~‰^‹L$VQèwvþÿƒÄ…Àu„ý‹þƒÉÿ3Àò®÷ÑI|1ÿ;þtB‹´F¡¸Fƒ8~3ÉjŠQÿÓƒÄë¡°F3ÒŠ‹ŠQƒà…ÀtO;þuÎë;÷tÆG€>„ž‹Þ…ö‰\$„‹T$$jé_<,…W‹D$$ÆŠE„ÀtE‹5´F‹ ¸Fƒ9~3ÒjŠURÿÖƒÄë‹ °F3ÀŠE‹ŠBƒà…ÀtŠEE„ÀuÇ€}u3Ûë_‹ýƒÉÿ3Àò®÷ÑIt)ÿ;õtB‹=´F¡¸Fƒ8~3ÉjŠQÿ׃Äë¡°F3ÒŠ‹ŠQƒà…ÀtN;õuÎë;îtÆFŠ]öÛÛ#Ý‹T$$‰\$…Ûj„½S3ÿèJ ÿÿ‹ðƒÄ…ötNjRhŽFj è“<þÿ‹øƒÄ …ÿt7‹D$…Àu èqþÿ…À‰D$t"ljwÇG‹D$WPètþÿƒÄ…Àu/jZhŽFjAjij"èA*þÿƒÄ…ÿt Wè´>þÿƒÄ…öt Vè§>þÿƒÄ‹D$$@‰D$$Š„Àt*éñûÿÿh$hŽFjméùhéèhéÞƒ|$…ÁŠE‹õ„Àt=‹=´F‹ ¸Fƒ9~3ÒjŠRÿ׃Äë‹ °F3ÀŠ‹ŠBƒà…ÀtŠFF„ÀuÉ€>t_‹þƒÉÿ3Àò®÷ÑI|1ÿ;þtB‹-´F¡¸Fƒ8~3ÉjŠQÿÕƒÄë¡°F3ÒŠ‹ŠQƒà…ÀtO;þuÎë;÷tÆG€>t…öuh5hŽFjmë"T$RVSëSUèyƒÄ…Àu>h?hŽFjljmj"èý(þÿ‹D$0ƒÄPèp=þÿ‹L$h¡CQèsþÿƒÄ 3À_^][ƒÄÃT$RjPè×ðÿÿ‹D$(ƒÄ Pè:=þÿ‹D$ƒÄ_^][ƒÄÃS‹\$U‹-´F€;t5¡¸Fƒ8~3ÉjŠ QÿÕƒÄë¡°F3ÒŠ‹ŠQƒà…ÀtŠCC„ÀuË€;u]3À[ÃVW‹ûƒÉÿ3Àò®÷ÑItÿ;ótI‹¸Fƒ:~3ÀjŠPÿÕƒÄë‹°F3ÉŠ‹ŠHƒà…ÀtN;óuÌŠ_öØÀ^#Ã][Ã;ÞtÆFŠ_öØÀ^#Ã][ÃS‹\$VW…Ût=‹t$…öt5hkDvhŽFPè¹9þÿ‹øƒÄ …ÿuhlhŽFjAjoj"è›'þÿƒÄ_^3À[Ã…ö‹Ï‹Ó~)3ÀŠÁèAŠ€¸¯IˆAÿŠƒàAABŠ€¸¯INˆAþÆAÿ:u׋Ç_^ÆAÿ[ø èÆSUV‹t$…öWu"h†hŽFjkjqj"è%'þÿƒÄ3À_^][ƒÄ ËþƒÉÿ3Àh‰ò®÷ÑIhŽFÑùQèú8þÿ‹ÐƒÄ …Ò‰T$u"h­hŽFjAjqj"èØ&þÿƒÄ3À_^][ƒÄ ʋʄÀ‹î‰L$„‹=´FŠ]E€û:ˆ\$„ôŠME„ɈL$ „¡¸F‹t$ƒ8~æÿjVÿ׊L$(ƒÄë‹°Fæÿ‹Špƒà…ÀtVÿFŠL$$ƒÄŠØ‹¸F‹t$ ƒ:~æÿjVÿ׊L$(ƒÄë¡°Fæÿ‹Šrƒà…ÀtVÿFƒÄˆD$ ŠÈ€û0r €û9w€ÃÐë€ûa‚„€ûfw€Ã©€ù0r €ù9w€ÁÐë €ùarh€ùfwc€Á©Àã‹T$ Ù‹L$ˆA‰L$€}…ñþÿÿ‹D$$…Àt+ʉ_^]‹Â[ƒÄ Ãh•hŽFjpjqj"èy%þÿ‹D$$Pèï9þÿƒÄ3À_^][ƒÄ ËL$QèØ9þÿh²hŽFjqjqj"èC%þÿƒÄ3À_^][ƒÄ ËT$VW‹úƒÉÿ3Àò®‹|$ ÷ÑI‹ñVRWÿüFƒÄ …ÀuŠ>„Àt <.t_¸^Ã3À_^øXŽFøxŽFÃ諼þÿ‹L$3Ò…À•‰‹ÂÃV‹t$‹…Àt)‹L$ PöAtèµ»þÿƒÄÇ^Ãè¼þÿƒÄÇ^ËD$V‹0…öuƒÈÿ^ÃWVè »þÿ$ƒÄöØÀ@‹ø‹D$…Àt…ÿtÆ@PVè†ÁþÿƒÄVèݺþÿƒÀƒÄ™ƒâÂÁøÇ_^ÃV‹t$ƒ>uèá»þÿ‰‹‹L$ P‹D$PQèÍ¿þÿƒÄ …Àu5‹…Àt+‹T$PöBtèðºþÿƒÄÇ3À^Ãè>»þÿƒÄÇ3À^ø^ø ŽFøÀŽFËD$‹T$‹H¸‰ ËD$‹T$‹H‰ ËD$‹L$U‹(‹A;èuƒÈÿ]ÃSV…íW}ƒËÿ+Ýë‹ÝS胹þÿ‹t$‹Ð€âƒÄöÚÒxBÁÿ…ö‹Êt-…Ét…íÀH%ÿˆFGÿ…À|…íˆ0}ŠÓöÒˆ0ÁëHyì9_^[]ÃU‹l$ƒývhŒë[V‹t$…íWt ö€t¿ë3ÿ3À3É…í~ Áà…ÿt Š1öÒâÿë3ÒŠ1 ÂA;Í|à…ÿ_‹È^tƒÉÿ+È‹D$;Hu"hžhìŽFh€h¦j èN"þÿƒÄ3À]ËT$¸]‰ ËL$ VÁá‹t$ UñS‹l$W‹U ìl‹}‹]‰L$D‹‹NÈɉ$‰L$‹F‹N ÈɉD$‰L$ ‹F‹NÈɉD$‰L$‹F‹NÈɉD$‰L$‹F ‹N$ÈɉD$ ‰L$$‹F(‹N,ÈɉD$(‰L$,‹F0‹N4ÈɉD$0‰L$4‹F8‹N<ÈɉD$8‰L$<‰´$„‹E‹M‰Þ‰Å1ÖÁÅ!ÎýÑÉ‹<$ÑÉ1Ö¬=™y‚Z‰Ïî1߉õ!ÇÁÅÕ‹T$ÑÈ1ßÑȬ™y‚Zï‰Â‰ý1ÊÁÅ!òÝÑ΋\$ÑÎ1ʬ™y‚Z‰óê1ÉÕ!ûÁÅÍ‹L$ ÑÏ1ÃÑϬ ™y‚Zë‰ù‰Ý1ñÁÅ!ÑÅÑÊ‹D$ÑÊ1ñ¬™y‚Z‰Ðé1ø‰Í!ØÁÅõ‹t$ÑË1øÑˬ5™y‚Zè‰Þ‰Å1ÖÁÅ!ÎýÑÉ‹|$ÑÉ1Ö¬=™y‚Z‰Ïî1߉õ!ÇÁÅÕ‹T$ÑÈ1ßÑȬ™y‚Zï‰Â‰ý1ÊÁÅ!òÝÑ΋\$ ÑÎ1ʬ™y‚Z‰óê1ÉÕ!ûÁÅÍ‹L$$ÑÏ1ÃÑϬ ™y‚Zë‰ù‰Ý1ñÁÅ!ÑÅÑÊ‹D$(ÑÊ1ñ¬™y‚Z‰Ðé1ø‰Í!ØÁÅõ‹t$,ÑË1øÑˬ5™y‚Zè‰Þ‰Å1ÖÁÅ!ÎýÑÉ‹|$0ÑÉ1Ö¬=™y‚Z‰Ïî1߉õ!ÇÁÅÕ‹T$4ÑÈ1ßÑȬ™y‚Zï‰Â‰ý1ÊÁÅ!òÝÑ΋\$8ÑÎ1ʬ™y‚Z‰óê1ÉÕ!ûÁÅÍ‹L$<ÑÏ1ÃÑϬ ™y‚Zë‹,$‹L$1é‹l$ 1é‹l$41é‰ýÑÁ1õ‰ $!ÕŒ™y‚Z1õ‰ØéÁÀÑÊÁ‹D$‹l$ 1è‹l$$1è‹l$8ÑÊ1èÑÀ‰Õ1ý‰D$!Ý„0™y‚Z1ý‰ÎÁÆÑËðÑËè‹l$‹t$1î‹l$(1î‹l$<1î‰ÝÑÆ1Õ‰t$!Í´>™y‚Z1Õ‰ÇîÁÇÑÉþ‹|$ ‹l$1ï‹l$,1ï‹,$ÑÉ1ïÑljÍ1݉|$ !ż™y‚Z1݉òÁÂÑÈ×ÑÈï‹T$‹l$1ê‹l$01ê‹l$1ê‰õÑÂ1ʼnT$1Í”¡ëÙn‰ûÁÃÑÎëÑÎÚ‹\$‹l$1ë‹l$41ë‹l$1ë‰ýÑÃ1õ‰\$1Åœ ¡ëÙn‰ÑÁÁÑÏéÑÏË‹L$‹l$ 1é‹l$81é‹l$ 1é‰ÕÑÁ1ý‰L$1õŒ¡ëÙn‰ØÁÀÑÊèÑÊÁ‹D$‹l$$1è‹l$<1è‹l$1è‰ÝÑÀ1Õ‰D$1ý„0¡ëÙn‰ÎÁÆÑËîÑËð‹t$ ‹l$(1î‹,$1î‹l$1î‰ÍÑÆ1݉t$ 1Õ´>¡ëÙn‰ÇÁÇÑÉïÑÉþ‹|$$‹l$,1ï‹l$1ï‹l$1ï‰ÅÑÇ1͉|$$1ݼ¡ëÙn‰òÁÂÑÈêÑÈ׋T$(‹l$01ê‹l$1ê‹l$1ê‰õÑÂ1ʼnT$(1Í”¡ëÙn‰ûÁÃÑÎëÑÎÚ‹\$,‹l$41ë‹l$ 1ë‹l$ 1ë‰ýÑÃ1õ‰\$,1Åœ ¡ëÙn‰ÑÁÁÑÏéÑÏË‹L$0‹l$81é‹l$1é‹l$$1é‰ÕÑÁ1ý‰L$01õŒ¡ëÙn‰ØÁÀÑÊèÑÊÁ‹D$4‹l$<1è‹l$1è‹l$(1è‰ÝÑÀ1Õ‰D$41ý„0¡ëÙn‰ÎÁÆÑËîÑËð‹t$8‹,$1î‹l$1î‹l$,1î‰ÍÑÆ1݉t$81Õ´>¡ëÙn‰ÇÁÇÑÉïÑÉþ‹|$<‹l$1ï‹l$1ï‹l$01ï‰ÅÑÇ1͉|$<1ݼ¡ëÙn‰òÁÂÑÈêÑÈ׋$‹l$1ê‹l$ 1ê‹l$41ê‰õÑÂ1ʼn$1Í”¡ëÙn‰ûÁÃÑÎëÑÎÚ‹\$‹l$ 1ë‹l$$1ë‹l$81ë‰ýÑÃ1õ‰\$1Åœ ¡ëÙn‰ÑÁÁÑÏéÑÏË‹L$‹l$1é‹l$(1é‹l$<1é‰ÕÑÁ1ý‰L$1õŒ¡ëÙn‰ØÁÀÑÊèÑÊÁ‹D$ ‹l$1è‹l$,1è‹,$1è‰ÝÑÀ1Õ‰D$ 1ý„0¡ëÙn‰ÎÁÆÑËîÑËð‹t$‹l$1î‹l$01î‹l$1î‰ÍÑÆ1݉t$1Õ´>¡ëÙn‰ÇÁÇÑÉïÑÉþ‹|$‹l$1ï‹l$41ï‹l$1ï‰ÅÑÇ1͉|$1ݼ¡ëÙn‰òÁÂÑÈêÑÈ׋T$‹l$ 1ê‹l$81ê‹l$ 1ê‰õÑÂ1ʼnT$1Í”¡ëÙn‰ûÁÃÑÎëÑÎÚ‹\$‹l$$1ë‹l$<1ë‹l$1ë‰ýÑÃ1õ‰\$1Åœ ¡ëÙn‰ÑÁÁÑÏéÑÏË‹L$ ‹l$(1é‹,$1é‹l$1é‰ÕÑÁ ý‰L$ !õŒܼ‰ÐÑÊ!ø ʼnØÁÀÅ‹D$$é‹l$,1è‹l$1è‹l$ÑÊ1èÑÀ‰Ý‰D$$ Õ„0ܼ‰Þ!ý!Ö õ‰ÎÁÆÑËõÑËè‹t$(‹l$01î‹l$1î‹l$1î‰ÍÑÆ ݉t$(!Õ´>ܼ‰ÏÑÉ!ß ý‰ÇÁÇý‹|$,î‹l$41ï‹l$ 1ï‹l$ ÑÉ1ïÑljʼn|$, ͼܼ‰Â!Ý!Ê Õ‰òÁÂÑÈÕÑÈï‹T$0‹l$81ê‹l$1ê‹l$$1ê‰õÑ ʼnT$0!Í”ܼ‰óÑÎ!à ݉ûÁÃÝ‹\$4ê‹l$<1ë‹l$1ë‹l$(ÑÎ1ëÑÉý‰\$4 õœ ܼ‰ù!Å!ñ ͉ÑÁÁÑÏÍÑÏë‹L$8‹,$1é‹l$1é‹l$,1é‰ÕÑÁ ý‰L$8!õŒܼ‰ÐÑÊ!ø ʼnØÁÀÅ‹D$<é‹l$1è‹l$1è‹l$0ÑÊ1èÑÀ‰Ý‰D$< Õ„0ܼ‰Þ!ý!Ö õ‰ÎÁÆÑËõÑËè‹4$‹l$1î‹l$ 1î‹l$41î‰ÍÑÆ ݉4$!Õ´>ܼ‰ÏÑÉ!ß ý‰ÇÁÇý‹|$î‹l$ 1ï‹l$$1ï‹l$8ÑÉ1ïÑljʼn|$ ͼܼ‰Â!Ý!Ê Õ‰òÁÂÑÈÕÑÈï‹T$‹l$1ê‹l$(1ê‹l$<1ê‰õÑ ʼnT$!Í”ܼ‰óÑÎ!à ݉ûÁÃÝ‹\$ ê‹l$1ë‹l$,1ë‹,$ÑÎ1ëÑÉý‰\$ õœ ܼ‰ù!Å!ñ ͉ÑÁÁÑÏÍÑÏë‹L$‹l$1é‹l$01é‹l$1é‰ÕÑÁ ý‰L$!õŒܼ‰ÐÑÊ!ø ʼnØÁÀÅ‹D$é‹l$1è‹l$41è‹l$ÑÊ1èÑÀ‰Ý‰D$ Õ„0ܼ‰Þ!ý!Ö õ‰ÎÁÆÑËõÑËè‹t$‹l$ 1î‹l$81î‹l$ 1î‰ÍÑÆ ݉t$!Õ´>ܼ‰ÏÑÉ!ß ý‰ÇÁÇý‹|$î‹l$$1ï‹l$<1ï‹l$ÑÉ1ïÑljʼn|$ ͼܼ‰Â!Ý!Ê Õ‰òÁÂÑÈÕÑÈï‹T$ ‹l$(1ê‹,$1ê‹l$1ê‰õÑ ʼnT$ !Í”ܼ‰óÑÎ!à ݉ûÁÃÝ‹\$$ê‹l$,1ë‹l$1ë‹l$ÑÎ1ëÑÉý‰\$$ õœ ܼ‰ù!Å!ñ ͉ÑÁÁÑÏÍÑÏë‹L$(‹l$01é‹l$1é‹l$1é‰ÕÑÁ ý‰L$(!õŒܼ‰ÐÑÊ!ø ʼnØÁÀÅ‹D$,é‹l$41è‹l$ 1è‹l$ ÑÊ1èÑÀ‰Ý‰D$, Õ„0ܼ‰Þ!ý!Ö õ‰ÎÁÆÑËõÑËè‹t$0‹l$81î‹l$1î‹l$$1î‰ÍÑÆ1݉t$01Õ´>ÖÁbʉÇÁÇÑÉïÑÉþ‹|$4‹l$<1ï‹l$1ï‹l$(1ï‰ÅÑÇ1͉|$41ݼÖÁbʉòÁÂÑÈêÑÈ׋T$8‹,$1ê‹l$1ê‹l$,1ê‰õÑÂ1ʼnT$81Í”ÖÁbʉûÁÃÑÎëÑÎÚ‹\$<‹l$1ë‹l$1ë‹l$01ë‰ýÑÃ1õ‰\$<1Åœ ÖÁbʉÑÁÁÑÏéÑÏË‹ $‹l$1é‹l$ 1é‹l$41é‰ÕÑÁ1ý‰ $1õŒÖÁbʉØÁÀÑÊèÑÊÁ‹D$‹l$ 1è‹l$$1è‹l$81è‰ÝÑÀ1Õ‰D$1ý„0ÖÁbʉÎÁÆÑËîÑËð‹t$‹l$1î‹l$(1î‹l$<1î‰ÍÑÆ1݉t$1Õ´>ÖÁbʉÇÁÇÑÉïÑÉþ‹|$ ‹l$1ï‹l$,1ï‹,$1ï‰ÅÑÇ1͉|$ 1ݼÖÁbʉòÁÂÑÈêÑÈ׋T$‹l$1ê‹l$01ê‹l$1ê‰õÑÂ1ʼnT$1Í”ÖÁbʉûÁÃÑÎëÑÎÚ‹\$‹l$1ë‹l$41ë‹l$1ë‰ýÑÃ1õ‰\$1Åœ ÖÁbʉÑÁÁÑÏéÑÏË‹L$‹l$ 1é‹l$81é‹l$ 1é‰ÕÑÁ1ý‰L$1õŒÖÁbʉØÁÀÑÊèÑÊÁ‹D$‹l$$1è‹l$<1è‹l$1è‰ÝÑÀ1Õ‰D$1ý„0ÖÁbʉÎÁÆÑËîÑËð‹t$ ‹l$(1î‹,$1î‹l$1î‰ÍÑÆ1݉t$ 1Õ´>ÖÁbʉÇÁÇÑÉïÑÉþ‹|$$‹l$,1ï‹l$1ï‹l$1ï‰ÅÑÇ1͉|$$1ݼÖÁbʉòÁÂÑÈêÑÈ׋T$(‹l$01ê‹l$1ê‹l$1ê‰õÑÂ1ʼnT$(1Í”ÖÁbʉûÁÃÑÎëÑÎÚ‹\$,‹l$41ë‹l$ 1ë‹l$ 1ë‰ýÑÃ1õ‰\$,1Åœ ÖÁbʉÑÁÁÑÏéÑÏË‹L$0‹l$81é‹l$1é‹l$$1é‰ÕÑÁ1ý‰L$01õŒÖÁbʉØÁÀÑÊèÑÊÁ‹D$4‹l$<1è‹l$1è‹l$(1è‰ÝÑÀ1Õ‰D$41ý„0ÖÁbʉÎÁÆÑËîÑËð‹t$8‹,$1î‹l$1î‹l$,1î‰ÍÑÆ1݉t$81Õ´>ÖÁbʉÇÁÇÑÉïÑÉþ‹|$<‹l$1ï‹l$1ï‹l$01ï‰ÅÑÇ1͉|$<1ݼÖÁbʉòÁÂꋬ$€ÑÈ×ÑÈ‹U Ê‹Mñ‰Æ‹E‰U ø‹}ß‹]ó‰E‹´$„‰]Æ@‹D$D‰}9ƉMŒ/ïÿÿÄl_[]^ËL$ VÁá‹t$ UñS‹l$W‹U ìl‹}‹]‰L$D‹‹N‰$‰L$‹F‹N ‰D$‰L$ ‹F‹N‰D$‰L$‹F‹N‰D$‰L$‹F ‹N$‰D$ ‰L$$‹F(‹N,‰D$(‰L$,‹F0‹N4‰D$0‰L$4‹F8‹N<‰D$8‰L$<éïÿÿÌSV‹t$W‹|$‹^ ‹G 3ÃtF…Ût‹Æ‹÷‹øWVèz®þÿƒÄ…À}V‹t$WVè7ƒÄ …Àu6_^[ÃWV‹t$Vè ƒÄ …Àu/_^[ÃWV‹t$Vè9ƒÄ …Àu_^[Ã…ÛtÇF _^¸[ÃÇF _^¸[ËD$ SUV‹PW‹|$‹O;Ê} ‹Ï‹ø‰L$‹Á‹o‹t$‹X‹NE;Á‹Æë PVè1©þÿƒÄ…Àu_^][ËT$‰n‹?‹6‹SPWVèž] ƒÄñù…À‹Ót+;Ý}‹BƒÇƒÆH‰Nü;Ès;Õ|é‹D$ǃÆÿ@;÷t;Õ}+ꋃljƒÆMuó‹L$_^]ÇA ¸[øè–x‹D$SU‹l$VW‹]‹x;߉\$ ‰|$}"h¶hFjdjsjèãþÿƒÄ3À_^][ƒÄËt$;^‹Æë SVèB¨þÿƒÄ…Àu_^][ƒÄËL$$‹E‹3ö‹)3É…ÿ~f‰|$$‹Ï‹8‹]ƒÀƒÅ…ö‰\$t;ßöƒËÿ+\$Fûë;ûö÷Þ+û‰:‹|$$ƒÂO‰|$$uÅ‹\$ …öt9\$}‹0AƒÀƒÂ~ÿ‰zü;÷w;Ë|é‹t$;Ðt?‹ùA;û}8‹8‰:‹ùA;û}-‹x‰z‹ùA;û} ‹x‰z‹ùA;û}‹x ƒÀ‰z ƒÂ‹ùA;û|È…Û‰^ÇF ~‹\šü‹ƒë…Àu ‹NI‹Á‰N…Àê_^]¸[ƒÄÃS‹\$ V‹t$‹C W…À‹F t*…Àt‹Ã‹Þ‹ð‹C‹N;Á‹Á‹|$;G4‹Çë:¿ë…ÀtÜ3ÿV‹t$SVèoýÿÿƒÄ …Àu_^[É~ _^¸[ÃPWèÁ¦þÿƒÄ…Àu_^[ÃVSè?«þÿƒÄ…À}#SVWèþÿÿƒÄ …Àu_^[ÃÇG _^¸[ÃVSWèÝýÿÿƒÄ …Àu_^[ÃÇG _^¸[ËD$‹L$V‹t$W‹|$PWQVjèSƒÄ…Àu_^ËF …Àu_¸^ËG …À¸pÊCu¸ÇCWVVÿÐƒÄ _^ÃSUVW‹|$$3íWèÐŒÿÿWèêŒÿÿ‹ðƒÄ…öto‹D$‹L$;ÁWuPVè½iƒÄ …ÀtTëQPVèL*ƒÄ…ÀtC‹\$ WSV‹t$ Vj貃Ä…Àt)‹F …Àt‹C …À¸pÊCu¸ÇCSVVÿÐƒÄ …Àt½WèÌŒÿÿƒÄ‹Å_^][ËD$‹T$ VP‹H<‹D$RPÿQ‹ðƒÄ …öu‹L$^‰ÃT$RVènbÿÿ‹L$ V‰è’bÿÿƒÄ ¸^ËT$‹D$R‹T$‹Hƒøu ‹ƒ8„.‹t$dQVèH©þÿƒÄ…À}:‹D$`…ÀtVPè’¥þÿƒÄ…À„‹D$\…Àt jPèg¦þÿƒÄ_^]¸[ƒÄHËt$lVèM‹ÿÿVèg‹ÿÿV‰D$$è]‹ÿÿ‹øV‰|$,èQ‹ÿÿ‹\$lƒÄ‹è…Û‰l$u Vè:‹ÿÿƒÄ‹Ø…í„……Û„}‹L$‹T$hRÇA è@¡þÿ%€yHƒÈà@¾ +ð‹D$lVPUè-ƒÄ…À„:‹L$dƒÆ VQWÇE ‰t$<è\-ƒÄ …À„ÇG ‹‹mT$D‹÷R‰l$,+õèâ¡þÿ‹D$ µƒÄ‹‰l$HщT$D‹H‹T$A‰L$Lƒý‹ ‹T©ü‰T$ u ÇD$ë‹L©ø‰L$‹‹L$hDºü‹Q ‹K‰D$\‹D$d‹x F3×;Á‰S ‹Ãë PSè)£þÿƒÄ…À„r‹ ‰sE|±ü‹L$;A‹Áë PQèþ¢þÿƒÄ…À„G‹T$D$DRPèt§þÿƒÄ…À|4‹L$T$DQD$HRPè)úÿÿƒÄ …À„Ç‹K‹ÇDŠüëÿK‹K3À;Èu‰C ƒïN;ð‰|$h‰D$$‰t$,Ž„‹L$\‹|$ ‹‹qü;ÇuƒËÿé…3Ò3É ÂR ÎWPQè¨s‹L$‹Ø¯Ç3í+ðUQUSè‚t‰D$4‹D$\3ÿ‹Î‹@ø‰D$< ø3À È;Ñr=w9|$4v5‹D$ Kð;ðr*‹L$‹|$4‹D$<+ù‰|$4‹ÎÕ3ÿ ø3À È;ÑwÓr9|$4wË‹l$(‹T$‹t$SU‹‹PQè¤S‹|$T‹T$XƒÄƒïB‰|$D‰T$H‹‰ªE…À~‹Lüƒ9uHƒé…Àó‰F‹|$HT$DVD$HRPèRúÿÿƒÄ …À„Ë‹t$‹L$H+Ï‹VщV‹D$P…Àt2‹T$‹|$HD$DRL$HPQKè4÷ÿÿƒÄ …À„‹T$H‹F+׉F‹D$h‹L$,‰ƒè‰D$h‹D$\ƒÀü‰D$\‹D$$@;Á‰D$$Œ|þÿÿ‹t$`…öt0‹T$0‹D$‹L$dRPV‹y è¯+‹FƒÄ …Àtƒøu‹ƒ9t‰~ ‹T$lRèˆÿÿƒÄ¸_^][ƒÄHËt$lVèˆÿÿƒÄ3À_^][ƒÄHÃhÁhFjgjkjèþÿƒÄ_^]3À[ƒÄHÃSV‹t$WV3ÛèA‡ÿÿVè[‡ÿÿ‹øƒÄ…ÿtI‹D$‹L$;ÁVuPWè.dƒÄ …Àt.ëQPWè½$ƒÄ…Àt‹D$‹L$VPWQè%ƒÄ…Àt»Vèc‡ÿÿƒÄ‹Ã_^[øèæoSUV‹t$0W3íV‰l$貆ÿÿVè̆ÿÿ‹ðƒÄ;õ„‹D$,PV褠þÿƒÄ…À„‹D$0X‹™‹{ƒâ‰\$ Áø‰D$‰|$„ø;ý„ðl‹F;è‹Æë UVèdŸþÿƒÄ…À„¶‹D$(;h~ UPèIŸþÿƒÄ…À„›‹T$,‹K 3J ‰N ‹‹‰D$‹F;Å<»}‹@;ÅÇDü|ñ‹T$0‹D$‰n‹j@…À~c‰D$,ë‹D$‹ ‹T$¯ÍQPRSè‚N‹ƒÇЃÄ‹ÊƒÃ;ȉWüs&‹@‰u‹G@‰Gu‹OGA‰u ‹HƒÀA‰tõ‹D$,H‰D$,u£‹F…À~‹Dü‹ƒè…Òu ‹VJ‹Ê‰V…Éê‹l$(‹F ‹U‰E ‹‹D$‹v‰T$;ð‰\$}3öë+ð‰uƒî3ÿ…ö~ZJ +Ó‰T$,VÁêC<•‰|$‹h‹xü‹‰l$0‹høƒÀ‰iô‰yø‹|$,ƒÁJ‰\ð‹|$0‰yðuÓ‹l$(‹|$‹T$‹\$ƒÆ;þ}‹Ëº+Ê+÷‹‰ƒÀNuõ‹t$ VUèQ¢þÿƒÄ…À|VUUèõÿÿƒÄ …ÀtÇD$‹D$4Pèù„ÿÿ‹D$ƒÄ_^][ƒÄÉn_^]¸[ƒÄÃVhñh4FjHèÞþÿ‹ðƒÄ …öu^ÃFÇPè„›þÿNQè{›þÿV,Rèr›þÿƒÄ ÇFD‹Æ^ÃV‹t$…öt.FPè›þÿNQè›þÿV,RèüšþÿŠFDƒÄ ¨t VèìþÿƒÄ^ø0èÖlSVD$WPè ›þÿ‹|$D‹\$HSGwP‰D$Lè þÿSÇG$èÓ™þÿƒÀj™ƒâVÂÁøÁà‰èjžþÿƒÄ…À„5j Vè÷¡þÿƒÄ…À„"‹ ‹\$HSD$‹L$,‰T$QT$VRÇD$ ‰D$8ÇD$<ÇD$@ÇD$Dè׃ÿÿƒÄ…À„ÒD$j L$PQè›%ƒÄ …À„¶‹D$…Àt'ƒøu ‹T$ƒ:tD$jPèþ(ƒÄ…À„‰ëL$jÿQè¥þÿƒÄ…ÀttT$(SD$RPL$ jQè·öÿÿƒÄ…ÀtV‹D$…À~‹T$‹ë3À‰G@D$Pè™þÿjVèYþÿƒÄ …Àt(‹ÑáQVèç þÿƒÄ…Àt‹T$@SRVVjèaöÿÿƒÄ…Àu _^3À[ƒÄ0Ã_^¸[ƒÄ0ø0è&k‹„$HS3ÛV‹W‰\$$‰\$0Љ\$(¨‰\$ u$h‰hLFjfjvjèmþÿƒÄ3À_^[Ä0Ë”$HRè˜þÿ‹ð‹„$TPèò—þÿƒÄ;ó‹øu ;ûu‹Œ$@jQ膜þÿƒÄ_^[Ä0Ã;÷‰t$‰|$‹œ$XUSè_ÿÿSèyÿÿ‹èS‰l$ èmÿÿƒÄ ‰D$‹„$`…í„Q‹L$…É„E…Àt‰D$ë+èÌüÿÿ…À‰D$„M‹”$XSRPèAýÿÿƒÄ …À„"þŸ¸½¹~‰D$ ë*þï~‰l$ ëƒþO~‰L$ ë3ÒƒþžÂJƒâB‰T$ ÿŸ&ÿï~‰l$$ëƒÿO~‰L$$ë3ÀƒÿžÀHƒà@‰D$$L$@QèÓ—þÿ‹´$LƒÄÇD$4‹F …Àu‹”$XRVèüþÿƒÄ…À|%‹„$XSPL$HVQjè_ôÿÿƒÄ…À„>t$@‹F…À„ƒøu ‹ƒ:„ ‹|$SWD$HoUVPè øÿÿƒÄ…À„ÿƒ|$ ~~‹D$SL$DWT$HQRPèxøÿÿƒÄ…À„׋L$ ¿I»Óç;û~9t$TVèþ–þÿ‹”$`‹D$‹L$RPVìQRVè2øÿÿƒÄ…À„‘CƒÆ;ß|Ë‹|$‰\$4‹œ$\„$ÀPè³–þÿ‹´$TƒÄÇD$,‹F …Àu‹Œ$XQVèÜœþÿƒÄ…À|+‹”$XSR„$ÈVPjè<óÿÿƒÄ…À„´$À‹F…À„çƒøu ‹ƒ9„×SWU”$ÌVRè~÷ÿÿƒÄ…À„݃|$$Ž…‹T$S„$ÄWŒ$ÈPQRèL÷ÿÿƒÄ…À„«‹D$$¿»HÿÓç;û~<´$ÔVèÍ•þÿ‹Œ$`‹T$‹D$QRNìPQVè÷ÿÿƒÄ…À„`CƒÆ;ß|ˉ\$,‹œ$\‹T$S3öRUÇD$D3ÿ‰t$H‰t$<è”þÿP‹D$(Pè¸öÿÿƒÄ…À„‹L$Aÿ…À‰D$Œ½H‰D$‹L$8‹D$…Éu‹T$SRPPPè{öÿÿƒÄ…À„Ú‹l$…ÿuv‹„$LUPè þÿƒÄ…Àta‹T$ ‹œ$L‹ý+úGWSèìœþÿƒÄ…ÀuGWSèÝœþÿƒÄ…Àtñ‹\$‹ï;݉l$<¿|‹Œ$LSQÑç賜þÿƒÄ…ÀtGK;Ý}ã‹l$…öum‹œ$TUSèœþÿƒÄ…ÀtX‹T$$‹õ+òFVSèyœþÿƒÄ…ÀuFVSèjœþÿƒÄ…Àtñ‹\$‹î;݉l$0¾|#‹”$TSRÑæè@œþÿƒÄ…ÀtFK;Ý}ãë‹l$0‹\$…ÿt?;\$èýÿƒÄ3À[ËT$+ÃUƒèVÆB‹ð‹ÎWÆB‹éƒÈÿ‹úÖÁéó«‹Í‹t$ƒáóª‹ËÆz‹ÑÁéó¥‹Ê¸ƒáó¤_^][ËL$‹T$VA;Ð…Ì‹D$Šp€ú…ºAÿ3É…À~ €>ÿu$FA;È|õ;ÈuuFëÚjqhÄFjfjpjènçýÿƒÄƒÈÿ^Ãù}h€hÄFjgjpjèLçýÿƒÄƒÈÿ^ÃÊÿ+Ñ‹L$ Â;Á~h‡hÄFjmjpjè çýÿƒÄƒÈÿ^ËÈW‹|$ ‹ÑÁéó¥‹Êƒáó¤_^ÃjdhÄFjjjpjèîæýÿƒÄƒÈÿ^ËD$SU‹l$HõV;éW~h—hÄFjnjmjè¸æýÿƒÄ3À_^][ËL$+ŃèyÆ‹ðÆGVWè þÿƒÄ…À_^]3À[Ã3Û…ö~€?ujWèá þÿƒÄ…À~߀?tìGC;Þ|á‹t$‹Í‹ÑÆG¸Áéó¥‹Êƒáó¤_^][ËL$‹T$VA;Ð…®‹D$Šp€ú…œAÿ3É…À~ ŠF„ÒtA;È|ô;ÈuhÌhÄFjqjqjèÜåýÿƒÄƒÈÿ^Ãù}hÒhÄFjgjqjèºåýÿƒÄƒÈÿ^ÃÊÿ+Ñ‹L$ Â;Á~hÙhÄFjmjqjèŽåýÿƒÄƒÈÿ^ËÈW‹|$ ‹ÑÁéó¥‹Êƒáó¤_^Ãh¾hÄFjkjqjèYåýÿƒÄƒÈÿ^øèÆNSVW‹|$,‹Ç™+‹ðÑþƒÿu‹D$(‹L$$‹T$ PQRè 7ƒÄ _^[ƒÄÃÿ} ‹D$(‹L$$‹T$ WPWQR舃Ä_^[ƒÄÃU‹l$(VDµPU‰D$$èé„þÿ‹Ø3À‰D$(‰D$‹D$8VP °Q‰L$,èÊ„þÿ [‹\$LƒÄDƒø‡ªÿ$…öC‹T$VURSèŽ4‹D$$‹L$…À~0U‹ƒÇƒÁ, êÁè‰iü‹Ð‹FC;Ø|ã…Ò]t ‹D$Çÿ@_^¸[ËF‹K@;Á‹Ãë PSèWwþÿƒÄ…Àuš^[ÃS‹\$ V‹C…À„™ƒøu ‹ ƒ9„‰‹t$ ;Þt&;F‹Æë PVèwþÿƒÄ…Àu^[ËS‰V‹C ‰F ‹CU‹.3ÒW‹;Hx L…+ýX‹ƒé‹èÑí ê‰iÁàK‹Ðué‹F_…À]~3‹Dü‹ƒè…Òu$‹VJ‹Ê‰V…Éê^¸[ËD$ jPèjxþÿƒÄ^¸[øèfF‹L$ UV‹t$W‹|$‹G ‰A ‹Æ™ƒâ‹W‹èÁýD*‹Q;‹Áë PQè+vþÿƒÄ…Àu_^]ƒÄÃæ€SyNƒÎàF‹L$‹» ‹‹OÍ+Þ…öÇŠ‹‰T$uOxh /¸w Š‹8ƒè‰9ƒéNuóëMOxJ¸ /G‰D$$DЉ|$‹T$$‹ËƒÀü‹‹úÓï‹H ωH‹ÎÓâ‹L$‰‹T$$ƒêI‰T$$‰L$uÍ‹T$‹Í3À‹ú[ó«‹D$‹H‹D$l)…í‰h~‹Lªü‹ƒé…Òu ‹pN‹Ö‰p…Òê_^¸]ƒÄøè&E‹L$S‹ÁU™ƒâV‹ًðWÁþã€yKƒËàC‹|$¸ +ÉD$‹G;ðå…À„Ý‹l$;ït-‹G ‰E ‹O+ÎA‹M;Á‹Åë PUè¸tþÿƒÄ…Àu_^][YÃ…É„¯‹‹O+β‹U…Û‰MuA…É~R‹0ƒÀ‰2ƒÂIuóëC‹8ƒÀƒù~/I‰L$ ‹÷‹8‹Ë‹ïÓî‹L$ƒÀÓå‹L$ ƒÂ îI‰jü‰L$ uÚ‹l$‹ËÓïƒÂ‰züÇ‹E…À~7‹MDü‹ƒè…Òu'‹UJ‹Ê‰U…Éê_^]¸[YËD$jPè×uþÿƒÄ_^]¸[YÃS‹\$W‹{…ÿu_3À[Ã3ÉO…ÿV|'U‹l$‹U‹4¸VQè,(‹È‹¯ÍƒÄ +ñ‰ºO‹Îyß]‹C…À~‹‹t‚ü…öuH‰C^_‹Á[ÃV‹t$‹F …Àt7‹D$ ÇF PVè‚‹NƒÄ…Étsƒùu‹ƒ9tg‹N 3Ò…É”‰V ^ËF‹N@;Á‹Æë PVè'sþÿƒÄ…Àu^ËT$ W3É;N|‹Âë‹‹ˆ‹>;ЉvºAëß‹F_;È|@‰F¸^ÃV‹t$‹F…Àt~ƒøu‹ƒ9tr‹N …Éukƒø‹D$ u‹‹;Ðs+‰ÇF ¸^ËW3É‹:;øs+øA‰:‹¸‹<ŠŠ;ørê‹‹<ŠŠ+ø‰:‹_ƒ<ˆu ‹FH;Èu‰F¸^ËL$ ÇF QVèÄþÿÿƒÄÇF ^ÃV‹t$W‹N…Ét]‹T$…ÒuRVèôsþÿƒÄ¸_^ËRQPPèÓ#‹øƒÄ…ÿt/‹F‹N@;Á‹Æë PVèßqþÿƒÄ…Àu_^ËF‹‰<‹F@‰F_¸^ø4è¦AV‹t$‹ÐÁê€â€Êøˆ‹ÐÁê€â?A€Ê€ˆ‹ÐÁê €â?A€Ê€ˆ‹ÐÁê€â?A$?€Ê€ €ˆˆA¸Ãú}ƒÈÿÃ…ÉtL‹ÐÁê€â€Êüˆ‹ÐÁê€â?A€Ê€ˆ‹ÐÁê€â?A€Ê€ˆ‹ÐÁê €â?A€Ê€ˆ‹ÐÁê€â?A$?€Ê€ €ˆˆA¸ø@‘Fø°‘Føø‘Føh’Føø’Føˆ“FøГFø0”Fø¸”Fø@•Fø–FøX–FøPèF8SUVW‹|$h…ÿu _^]3À[ƒÄPË‹o3É3ö…À~e‹\$dŠ.<~< }< t< uˆD ëÆD .AƒùP|D$QPSè ÿÿƒÄ …À~ 3É‹F;ð|À…É~QL$QSèï ÿÿƒÄ …À _^]3À[ƒÄPÃ_^]¸[ƒÄPøè¦7‹D$3ÒSU‹‹@ƒù ‰T$‰T$ Œ€|ÿZuÇD$Š €ù9€ù0ŒøBƒú |å¾¾P ‰ J¾P ‰ J¾P ‰¬J°/ÿÿ¾H¾P ‰”Jðýÿÿƒú ²ƒúŒ©¾HVW¾p¾x ‰¾X ´Nðýÿÿ¾H ‰¼Oðýÿÿ¾H ‰œKðýÿÿŠH €ù0|"€ù9Š@ <0|<9¾É¾À ‰ŒHðýÿÿë‹L$‹D$…À¸Ð™Fu¸õIPUQ‹ •°I‹T$(SWVQh´™FRè.þÿƒÄ$3É…À_^ŸÁ]‹Á[ƒÄËT$jh¤™FRè{ ÿÿƒÄ 3À][ƒÄøèF6‹D$U‹l$ VW¾Nj+õjPÇD$ÇD$‰t$ èãýÿ‹øƒÄ ‰|$€?uWèáýÿƒÄ¸_^]ƒÄËl$ GS‰t$(‹ßŠ€ù/u ŠG3ÀjŠE‹ÈƒàÁ銀à™FŠ‘à™FL$0QVˆT$8ˆD$9ÿÓƒÄ …Àt2‹T$(E;èu‹D$(4Wè²×ýÿƒÄ…ö|F…À}_^]ƒÈÿ[ƒÄÃÎÿëÜ‹L$0_^]Á[ƒÄÿöÁt…ÿu¿ëƒÏ‹D$‹MjT$SR‹UPWQR裋L$LƒÄ…É} _^]ƒÈÿ[ƒÄÃÈŠD$„À‰L$0tƒÁ‰L$0…öu _^]‹Á[ƒÄÄÀtjh óHVÿÓƒÄ …Àu _^]ƒÈÿ[ƒÄËD$‹M‹UVSjPWQRè3ŠD$/ƒÄ„Àtjh óHVÿÓƒÄ …Àu _^]ƒÈÿ[ƒÄËD$0_^][ƒÄøè¦+‹D$‹L$ SUV4W;Æ‹ø‰t$ÇD$„E‹l$4ƒå‰l$ë‹D$,;ø•ÃKƒã ƒýwwÿ$­pD3À3ÒŠ3ÉÁàG‰D$ŠÁâ ÂG‰D$3ÒŠ/ ÁG‰D$Š ÂG‰D$ëB3À3ÉŠ'G‰D$Š ÁG‰D$ë,3ÀŠG‰D$ë!‹D$0T$RPWèxíÿÿƒÄ …ÀŒ¦ø‹D$;þu³@öD$4tjPL$$jQèðÿÿ‹èƒÄ 3ö…í~6 \$8‹T$D‹D$@‹L$«ýÿ‹ðƒÄ …öt‹D$VÿPƒÄ…Àu Vè ­ýÿƒÄ3À^ËÆ^ËD$…ÀuÃÇ`µIÇ@X±IÇ@¸ËD$…ÀuÃLjµIÇ@X³IÇ@¸ÃV‹t$…ötVèVè­ýÿƒÄ¸^Ã3À^ËD$…ÀuÃPèуĸËD$VhØÏHPèÀÜþÿ‹ðƒÄ…öuIèšýÿ%ÿ=€uhÅhÜœFjrjdjè!˜ýÿƒÄ3À^ÃhÇhÜœFjjdjè˜ýÿƒÄ3À^ËL$‹T$WQVRèV‹øèeÕþÿƒÄ‹Ç_^ø4èFSUV‹t$D3í3Û‹FW‰\$,‰l$ ‰l$‰D$0èBwþÿ‹ø…ÿ‰|$uhähÜœFjjfj胗ýÿƒÄéÍhèhÜœFj èj©ýÿ3íƒÄ ;ʼnD$u hëéy‹ DoFV‰‹D$‹HoF‰PèX ƒÄ…Àu hòéM‹L$QVè<ƒÄ;ʼnD$(uhúhÜœFjgé-hW‰l$$‰l$,è wþÿƒÄ…À„„ë3í‹T$‹\$‹D$Lhÿ‹rÆóVPè­Öþÿ‹þƒÉÿ3ÀƒÄ Ɔÿò®÷ÑI‹Ñu 9l$$„I3ÿ;͉|$$~ŠDÿ< t< uI;Íï;Õt;Êu ¿‰|$$ë ‹D$,Æ1@‰D$,Ù‰l$ ƒû‰\$|>‹L$‹Q‹L$H‹IDÿ3ÒŠöQ t"ƒû~ 3ÒŠPÿöQ uKÇD$$‰\$é“;ý…‹‹D$‹L$H3ÒÇD$‹p‹I‹ÆŠf‹QöÆ…öÂt@3ÒŠf‹QöÆtíéꊋúçÿf‹yöÀ‰\$…ÏöÇt?@¾úŠ‹ÚãÿöYu"¾Ò;×u ¾P;×u@ŠP@‹ÚãÿöYtÞ¾;×urëoŠ\$öÃ@tL@¾úŠ‹Úãÿf‹YöÃu,¾Ò;×t%öà t @3ÒŠöQu9ŠP@‹Úãÿf‹YöÃtÔ¾;×uëöà t3ÒŠPöQu ƒÀëöÃu@Š‹úçÿf‹yöÀ‰\$„1ÿÿÿÆ‹D$H3ÉŠ‹@f‹ HöÁtöÁuF3ÒŠf‹ PöÁu튋ÑâÿöP…"€ù[…â~3ÉŠf‹ HöÁtöÁuG3ÒŠf‹ PöÁuí‹÷‹Î3ÒŠf‹Pö t3ÒŠQöPtAëåƒÁëà÷ÂtAëÕ3Ò‹ñŠf‹PöÂtöÂuF3ÒŠf‹PöÂu튀ú]t „Ò„ïë D$Æ‹L$HWPjQèíƒÄ…À„+‹T$‹t$HRVèƒÄ‰D$(…À…V‹D$PVèé ƒÄ‰D$(…À„£é7ÇD$‹Î3ÒŠf‹Pö t3ÒŠQöPtAëåƒÁëà÷ÂtAëÕŠ‹Á€ú:uD€y:u>‹|$HA‰t$Æ‹ð‹O3ÒŠf‹Qö t3ÒŠPöQt@ëâƒÀëÝ÷Ât@ëÒ‹|$H‹3ÒŠ‹Èf‹WöÂtöÂuA3ÒŠf‹WöÂuí€9=…øÆA‹L$H3ÒŠ‹è‹If‹QöÃt‹ÓöÂuE3ÒŠUf‹QöÂuìöÃu @3ÒŠöQtõH;Åt3ÒŠöQtH;Åuñh|hÜœFj Æ@è–¤ýÿ‹ØƒÄ …Û‰\$ „Š‹D$…Àu‹D$‰D$‹þƒÉÿ3Àhƒò®÷ÑhÜœFQèZ¤ýÿ‹ÐƒÄ ‰SƒÃ…ÒÇ„M‹þƒÉÿ3ÀUò®÷Ñ+ùS‹Á‹÷‹ú‹T$PÁéó¥‹Èƒáó¤‹L$ QRèƒÄ…À„?‹|$‹t$‹ÇŠŠŠÊ:Óu„ÉtŠPŠ^ŠÊ:ÓuƒÀƒÆ„ÉuÜ3ÀëÀƒØÿ…Àt&‹t$HWVèðƒÄ…ÀuWVèÒ ƒÄ…À„ºë‹D$(‹t$H‹L$ QPVèaƒÄ …À„§ÇD$ ‹T$‹D$ÂRPè‰qþÿƒÄ…À…~úÿÿhhÜœFjë}‹L$Qè&qþÿ‹D$ƒÄ;Åt Pèµ¥ýÿƒÄ_^]¸[ƒÄ4ÃhMhÜœFjdëDhWhÜœFjgë6hnhÜœFjeë(hëhˆëh–hÜœFjgë h¤hÜœFjAjfjèÊýÿƒÄ‹T$Rèpþÿ‹l$$‹t$L‹\$0ƒÄ‹D$…Àt Pè ¥ýÿƒÄ‹D$P…Àt‰SD$8h¨FPÿFL$@QhøœFjèÁ˜ýÿ‹F‹L$HƒÄ;Èt…ÀtPè™ÓÿÿƒÄÇF…ít)‹E…Àt P辤ýÿƒÄ‹E…Àt P认ýÿƒÄU襤ýÿƒÄ_^]3À[ƒÄ4ø è†ùSUV3íW‰l$‰l$è“oþÿ‹Ø;݉\$„u‹t$@ƒÉÿ‹þ3Àò®÷ÑQS‰L$4èëoþÿƒÄ…À„GŠ‹|$4‹Ð‹Oâÿf‹QöÂ@t¾ÀF‰D$@Š‹Ðâÿf‹QöÂuG¾Ø;\$@tQö tŠFF‹ÐâÿöQu:‹\$EF‹KˆD)ÿŠ‹O‹Ðâÿf‹QöÂt½‰l$¾;D$@…wÿÿÿFéqÿÿÿ‹\$‰l$ëãöÆtj¾ÐŠFF‰T$@‹ÐâÿöQu6¾È‹D$@;Èu ¾V;Ðu)F‹CŠˆ (ŠFE‹OF‹ÐâÿöQtΉl$‹D$@ë‰l$¾;Ð…þþÿÿFéøþÿÿö tvŠFFˆD$ F‹T$ âÿöQ…¾3À‹þó«‰.‰^ ÇF ÇFP‰^‰^ÿUP‰F$¹ 3À~4‰^(‰^,‰^0‰žèó«ÇF`‰žô‰ž”‰^d‰^hdž¤‰ž¬‰ž°‰ž´‰ž¸Ç†¼ÿÿÿÿ‰žÀ‰žäè7w;Ɇ¨„óhÀaDhaD‰^l‰^p‰^tèÔýÿƒÄ;ÉF„Íè{þÿ;ÉF „½‹F~hDFPWQ莋?ƒÄ;û„ÐWèKÂýÿƒÄ…ÀŽ¿hœFè‚ýÿƒÄ;Ɇ€uh\h4Fhñé£hFèÛýÿƒÄ;Ɇ„uhah4Fhòë{h„Fè³ýÿƒÄ;Ɇˆuhfh4FhóëSè°½ýÿ;Ɇ˜uhth4FjAë6VxRVjèœSþÿƒÄ ‰žŒè>'‰†‹Æ_^][ÃhVh4Fh¡h©jè¶výÿƒÄ;ót V艃Ä_^]3À[ËD$3É3ÒŠhKŠPIŠHJÁá Ê3ÒŠPHÁá Ê‹ÁËD$‹T$V‹‹2;Ît¸^ËHD‹rD;Ît¸^ÃWpHzH3Àó¦_tÀƒØÿ^ÃV‹t$…ö„Ùh…h4Fj F`jÿPèìËýÿƒÄ…À·‹F…Àt jVèRƒÄNxQVjèóRþÿ‹FƒÄ …Àt Pè³ÒýÿƒÄ‹F …Àt PèÓyþÿƒÄ‹F…Àt Pè#ÀýÿƒÄ‹F…Àt PèÀýÿƒÄ‹†¨…Àt Pè0wƒÄ‹†˜…ÀthP^BP蘿ýÿƒÄ‹†Œ…ÀthîAP耿ýÿƒÄVdž轉ýÿƒÄ^ËL$‹D$‰AlËL$‹D$‰ApËD$‹L$‹T$ ‰ˆ¸‰äÃUV‹t$ W‹®¼‹ED…À„Ä‹†Ü‹L$S‹X ‹û#ùtn‹Nh…ÉugöÇuUPè ƒÄ…ÀtT‹†Ü‹H(…ÉtG‹Ž¼hŒh4FjÁœjQèmÊýÿ‹†¼‹–ÜPVÿR(ƒÄ…Àu‹Ž¼Q詃ÄöÀ[u<‹D$;øu4¨t ‹–Ü‹B<ë ‹†Ü‹@H<ÿujÿÌF‹ŽÜPQè‡ƒÄ _^]ÃSV‹t$ W‹|$ƒËÿ‹N¸;ÏtGU‹n …ít ‹Q3Û;ê”Ë‹/;Õ]u‰~ëVÿQ V‰~ÿWƒÄƒûu ‹O_‰N ^[Ã…Ûu‹W‰V _^[ÃVW‹|$…ÿ~_3À^ÃèzýÿƒÄ‹†´…Àt Pè»®ýÿƒÄhÈVèþÿVè§xýÿƒÄ 3íéÿÿÿSUVW‹|$3í…ÿ„:‹GD…À„/hæhÐFj j èиýÿ‹\$$W‹CPè¢Ãýÿ‹ðƒÄ;÷u‹KWQ½èjÂýÿWS‹ðèQƒÄhîhÐFj j 苸ýÿƒÄ…í„ÅdžŒ‹C,…ÀtVSÿЃÄ…ö„¥hhÐFj–œjÿRèF¹ýÿƒÄ…À€†¸PVjè\@þÿNjQè‘þÿVj0Rè†þÿFHj Pè{þÿ‹†ƒÄ$…Àt PèHfƒÄ‹†”…Àt PèåxýÿƒÄ‹†´…Àt Pèb­ýÿƒÄhÈVè4þÿVèNwýÿƒÄ _‹Å^][Ã_^]3À[ÃV‹t$…ö„¥hhÐFj†œjÿPèy¸ýÿƒÄ…À€Ž¸QVjè?þÿVjRèÄþÿFj0Pè¹þÿNHj Qè®þÿ‹†ƒÄ$…Àt Pè{eƒÄ‹†”…Àt PèxýÿƒÄ‹†´…Àt P蕬ýÿƒÄhÈVègþÿVèvýÿƒÄ ^ÃS‹\$ VW‹|$…Û„g‹‡Ü‹R‹ÿQLƒÄ…Àu4‹ ‹GQÿPLƒÄ…Àu$h)hÐFhðhÃjèaýÿƒÄ3À_^[Ã;Gt.PWèxíÿÿƒÄ…Àu_^[Ë—Ü‹B$…Àu WèºâÿÿƒÄ‰ƒ hChÐFjƒœjPè7·ýÿ‹·¼ƒÄ…ö„¥hhÐFjŽœjÿQè ·ýÿƒÄ…À€–¸RVjè">þÿFjPèWþÿNj0QèLþÿVHj RèAþÿ‹†ƒÄ$…Àt PèdƒÄ‹†”…Àt Pè«výÿƒÄ‹†´…Àt Pè(«ýÿƒÄhÈVèúþÿVèuýÿƒÄ ‰Ÿ¼‹ƒ˜‰‡ä_^¸[Ë·¼…ö„¯hhÐFjŽœjÿQè>¶ýÿƒÄ…À€–¸RVjèT=þÿFjPè‰þÿNj0Qè~þÿVHj Rèsþÿ‹†ƒÄ$…Àt Pè@cƒÄ‹†”…Àt PèÝuýÿƒÄ‹†´…Àt PèZªýÿƒÄhÈVè,þÿVèFtýÿƒÄ LJ¼‹‡Ü‹O‹;Á„'ÿÿÿPWèëÿÿƒÄ…À…ÿÿÿ_^[ø èÉ‹D$‰D$‹@…À‰D$t\‹D$Vh¨hÐFj j ‰D$èG´ýÿ‹D$L$QhyD‹p Ç@ ‹T$$Rè…¿ýÿ‹D$(h­hÐFj j ‰p è ´ýÿƒÄ,^ƒÄ ÃV‹t$W‹|$‹G…Àt‹Ž¤‹– Ê;ÁŽÝ‹WVRè½ýÿ‹VPèvdžŒ‹?ƒÄ‹G,…ÀtVWÿЃÄ…ö„¥hhÐFjŽœjÿQ致ýÿƒÄ…À€–¸RVjè;þÿFjPèÒþýÿNj0QèÇþýÿVHj Rè¼þýÿ‹†ƒÄ$…Àt Pè‰aƒÄ‹†”…Àt Pè&týÿƒÄ‹†´…Àt P裨ýÿƒÄhÈVèuþýÿVèrýÿƒÄ _^ÃV‹t$‹†¼…À„€öF0…vVèíÿÿƒÄöÄ0…dVè{íÿÿƒÄöÄ@…RSU‹®ÜW‹¾¼3Û…ÿ„/‹GD…À„$hæhÐFj j èx²ýÿ‹EWPèN½ýÿ‹ðƒÄ;÷u‹MWQ»è¼ýÿWU‹ðèýƒÄhîhÐFj j è7²ýÿƒÄ…Û„ÅdžŒ‹E,…ÀtVUÿЃÄ…ö„¥hhÐFj–œjÿRèò²ýÿƒÄ…À€†¸PVjè:þÿNjQè=ýýÿVj0Rè2ýýÿFHj Pè'ýýÿ‹†ƒÄ$…Àt Pèô_ƒÄ‹†”…Àt Pè‘rýÿƒÄ‹†´…Àt Pè§ýÿƒÄhÈVèàüýÿVèúpýÿƒÄ _][¸^Ã3À^ËL$V‹±Ä…öt‹À…ÀtuW‹|$ W;òu%w;ÆuÇÇë?‰‹À‰Äë/W;Âu‰2‹Ä‰À뉆À‹‘À‹Ä‰‚ÄÇÄÇÀ_^ø èFÅ‹D$SVW‹¸¬…ÿ„…‹t$(…ötD‹€¨…Àt4‹ DJ…Ét*‰D$ D$ PQ膤ýÿƒÄ…À|‹ DJPQè2¦ýÿƒÄ‰ëÇ‹t$ …ö„-‹\$$…Û„!‹G %ð‡=€w^tL=t8= t=@…¢¸‹… J‰镸‹… J‰é‚3À‹… J‰ëu¸‹… J‰ëe=t?=tH=€uJ‹G=€t=u9¸‹… J‰ë/¸‹… J‰ë¸‹… J‰ëèÅê‰ëÇ‹G %=t=u¸‹…HJ‰ë3À‹…HJ‰ëǃ>tƒ;t _^¸[ƒÄ Ã_^3À[ƒÄ øè–ËD$ S3ÛUV;ÃW‰\$‰\$„j9ìµI„Éhõh¦Fjj èÍ®ýÿ¡ìµIƒÄ;ÄhÜZF‰ìµIè-dýÿhÔYF£ JèdýÿhØ\F£$Jèdýÿh\ZF£(Jèdýÿh ZF£,Jèñcýÿht6F£0Jèâcýÿh´5F£<JèÓcýÿhà\F£@JèÔcýÿhüWF£HJèÅcýÿƒÄ$£LJh÷h¦Fjj è®ýÿƒÄ‹5(J¡$J÷Þö‹ JæÀÿÿ‹4JÆ@÷ØÀ%àÿÿ ð¡LJ÷ÙÉáðÿÿÁ ñ‹ <J÷ÚÒâþÿ ò‹HJ÷ØÀ%ðÿ ð¡0J÷ÙÉá€ÿÁ€ ñ‹ ,J÷ÚÒâøÿ ò‹T$$÷ØÀ%ÿÿ ð÷ÙÉá€ÿÿÁ€ ñÎ(ÿRD‹øh h¦F‰|$$¿ÁàPè1jýÿ‹ÈƒÄ ;ˉL$u%h h¦FjAh¦jè XýÿƒÄ3À_^][ƒÄÃ3í…ÿ~;y‹L$$UÿQH3ɃÄ;Át9t…p u‰Gð‰Oü‰‰OôCƒÇ‹D$E;è|΋L$‹øSÿƒú~A$Jh܉(h‰hüƒÀJuï…Û~5‰L$ÇA‹D$Q‰P ›D‘ìT›ö‰D$ ‘‰H‹T$ÇB h½´h¦FPèQiýÿ‹èƒÄ …íu/‹L$Qè¾kýÿh"h¦FjAh¦jè&WýÿƒÄ3À_^][ƒÄËD$‹Í…Àt‹‰‹@ ƒÁ…Àuò¸žF=žFt…p u‰ƒÁƒÀ(=ø¤F|å‹t$0jhü¥FVÇ»ÿüFƒÄ …Àu,‹|$D$UL$PQWhDFè#ƒÆ‹ØƒÄ€>:uF…Ût-‹þƒÉÿ3Àò®÷ÑIt‹L$T$UD$RPQVèíƒÄ‹Ø‹|$UèÞjýÿƒÄ…ÛuWèÑjýÿƒÄ3À_^][ƒÄÃèßœýÿ‹Ø…ÛuWè³jýÿƒÄ3À_^][ƒÄËt$…öt‹F…Àt ‹RSèΟýÿƒÄ‹v …öuæWè~jýÿ‹|$,ƒÄ…ÿt‹…Àt Pèg ýÿƒÄ‰‹t$,…öt?‹…Àt PèN ýÿƒÄSè…›ýÿƒÄ‰…Àt!…ÿtƒ?thÐ\DPèH›ýÿƒÄ‹Ã_^][ƒÄÃSè ýÿƒÄ_^]3À[ƒÄø èö¾‹D$$SUV‹ðйW„À‰L$‰t$4„z<-uFÇD$‰t$4ëa<+uFÇD$‰t$4ëNt‹L$ëF‰t$4Š„À…†üÿÿ_^]‹Á[ƒÄ ËD$_^][ƒÄ øè6»‹L$(‹T$,SU‹VW‹:…ۋËó‰|$„wë‹t$‹T$‹L$0;„M‹V ‹ÆƒÆ ‰T$‹ƒùÿu;‹J ‹l$ ‹R#Í#T$(…Éu…Ò„‹é#l$;é…ô‹l$$‹Ê#Í;Êtéã;J…Ú‹L$,ƒùuG‹H…É…Æ;Çt,;Ãu‹‹H…Ét‹‰Q ‹…Ét‹P‰Q‰G ‰xÇ‹øÇ@銃ùu9‹H…Ét~;Çtz;Ãu‹‹H…Ét‹‰Q ‹…Ét‹P‰Q‰G ‰xÇ‹øëLƒùu Ç@ë>ƒùu9;Øu‹ë‹H‹‰Q ;øu‹x‹3Ò;ʉPt‹h‰i‹H;Êt‹.‰i ‰‰P…À…³þÿÿ‹D$8‹L$<‰‰9_^][ƒÄËT$8‹D$<‰‰8_^][ƒÄɉ:_^][ƒÄËD$…Àt‹@ø$¦FÃSU‹l$V…íWt.‹|$…ÿt&W膚ýÿ‹ØƒÄ3ö…Û~VW脚ýÿ‹ƒÄ;ÍtF;ó|ë3À_^][áDJáôµI…ÀtdjRh,¦Fjj èg¤ýÿ¡ôµIƒÄ…Àt5VWèU¹‹ð¿PJó¥_ÇdJ`¢DÇœJ‰DÇôµI^j]h,¦Fjj è¤ýÿƒÄ¸PJÃ|$us¡ôµI…ÀtdjRh,¦Fjj èÝ£ýÿ¡ôµIƒÄ…Àt5VWèzT¹‹ð¿PJó¥_ÇdJ`¢DÇœJ‰DÇôµI^j]h,¦Fjj 茣ýÿƒÄ¸PJÃ3ÀáøµI…Àtjh”h<¦Fjj èd£ýÿ¡øµIƒÄ…Àt5VWèqT¹‹ð¿¸Jó¥_ÇÌJ ŠDÇJŠDÇøµI^hŸh<¦Fjj è£ýÿƒÄ¸¸JÃ|$uy¡øµI…Àtjh”h<¦Fjj èÝ¢ýÿ¡øµIƒÄ…Àt5VWèêS¹‹ð¿¸Jó¥_ÇÌJ ŠDÇJŠDÇøµI^hŸh<¦Fjj 艢ýÿƒÄ¸¸JÃ3Àøèö¶SUV3ÛWSÿÌF‰D$SSD$$3ÿjP‰\$$‰|$(èMqýÿƒÄè5NýÿSÿhF‹l$,‹…Ð;Ãu‹Ü‹”;Ãt‹ø‰|$‹EU@‰Eè½ÜÿÿƒÄöÄ0tUè¯ÜÿÿƒÄöÄ@t UèáÅÿÿƒÄ‹E4=S‰D$$_=PÃ=|=}"ƒè„y-ý„у腾éËU<‰]0=‹z‰|$ …‹…¼;Ãt ‹‹M;ÁtSUè»ÝÿÿƒÄ…À„1w _ÆVÆÆCUƒÃè&ÑÿÿƒÄPUè¬ÑÿÿƒÄ ð…À‰t$,„‹ÈˆCÁùˆ ‹•¼ƒÃ‹JD…ɉL$v?ƒù w:‹ÁˆKÁøˆ‹µ¼‹D$,‹ÑƒÆH‹øÁéó¥‹ÊƒÃƒáó¤‹|$ ‹ÊÁ‰D$,‹ðë ÆÆCƒÃ‹ETjÇ@dÆÆC‹MTƒÁhQè…pýÿ‹UT‹ÆƒÂh+÷ƒÆƒÄ‹ 3Û‰‹J‰H‹J‰H‹R ‰P ÇE4‰uDÇEHUèVd‹ðƒÄ;óŽi‰]DÇE4 éèˆàïÿÿƒù!‡W3ÒŠ‘„”Dÿ$•t”D‹M<= ‹y…â‹EDº +ÐÇRPUè×Y‹uD¹ +ÎƒÄ ;Á}6PjmUècƒÄ ‹ð;óŽî‹EhÇED÷ØÀƒàP03Û‰E4é^ÇED Š€ùG…®Š@„Òt¹ë3É‹UT‰Mh3ÉŠ@‰ŠÜ‹U3ÉŠ(ŠHƒÀ;Ê}‰M‹UT3ÉŠ(ŠHƒÀ‰Šà‹UT3ÉŠ(ŠHƒÀ‰Šä‹UT3ÉŠ(ŠH‰ŠØÇE4!‹ET‹ˆä‹àÊ‹Ø\ ûÿ?‡i‹ED‹ó+ðÇVPUèÑXƒÄ ;ÆtPjmUè!bƒÄ ‹ð3Ûéýþÿÿ‹E`…Àt‹Md‹UQUSWjRjÿЃÄ‹Ehw …Àt;‹ET‹ˆà…É…&‹ˆÜ…Ét ö…ø„,‹ˆä…É…;éi‹…¼‹HD…ÉvjUèÀÚÿÿƒÄ…À„3‹ETV‹ˆà‹ÜQRUèíƒÄ…ÀŽ‹ET‹à‹€äò…À„‹¼Á´QPVUèäÎÿÿ‹UT‹øƒÄ²ä…ÿ‰t$,„@hÐ\DWèŽýÿUèÉÍÿÿ‹ðhÐ\DVè|Žýÿ‹…øƒÄ©@t‹ßë‹Þ‹÷S3ÿèl“ýÿƒÄ…À~#WSèn“ýÿPVè§‘ýÿƒÄ…À}SGèI“ýÿƒÄ;ø|ÝSè<“ýÿƒÄ;øÝWSè:“ýÿ‹¼ƒÄ‰¬‹…¼‹ˆ”…É…Ì‹hh<¦Fj‹Jj‹‰”‹…¼‹ˆ”ƒÁQèžýÿ‹t$@ƒÄ‹…¼‹‹J‹”;…‹ET‹ˆØ‰ˆˆ‹ETƒ¸ˆ‡‡‹ˆØ¸Œ‹ÑÁéó¥‹Êƒáó¤éáüÿÿUè{‹ðƒÄ;ó޾‰]DÇE4€é=UèÙ‹ðƒÄ;󎜉]DÇE4`é=†tb ïÿÿƒø ‡~3ÉŠˆ¸”Dÿ$¨”DjUèûRƒÄ…À„‹‹UT‰ZÇE4@éÌUèˆ ëUèð ‹ðƒÄ;óŽ#é¬UèØ‹ðƒÄ;óŽ ‰]DÇE4péŠ=@t =P…ö;û‰]$t jjUÿ×ƒÄ ‹u<ÇE;óÇE‰t$uèK&þÿ‹ð;ó‰t$„èhÿ?Vè²&þÿƒÄ…À„É‹…܉u<‰]DÇE4‹H4‰\$A‰H4ÇE  ŠD‹|$;û„hùÿÿ‹u4‹D$$;ð„YùÿÿjhU‰E4ÿ×ƒÄ ‰u4éAùÿÿSUèØPƒÄƒÎÿé-hQh<¦FhµjejèFýÿƒÄéŠHÿ„Ét*SUèŸPhvh<¦FhÔjmjè×EýÿƒÄƒÎÿéÜhzh<¦FhÈjmjè´EýÿƒÄƒÎÿé¹h‘h<¦FhWjmjè‘EýÿƒÄé”h¡h<¦FhØjmjèqEýÿƒÄëwh©h<¦FhÙjmjèTEýÿƒÄëZh¯h<¦FhÚjmjè7EýÿƒÄë=jUèÚOƒÄë0jUèÍOƒÄë#jUèÀOhÕh<¦Fh¸jmjèøDýÿƒÄƒÎÿ3Û‹U‹D$J;ÉUt Pè»$þÿƒÄ‹D$;Ãt VhUÿÐƒÄ ‹Æ_^][ƒÄÃjUèbOhäh<¦FjAë£jUèLOh h<¦Fh¹ëŠjUè3Ohh<¦FjDéqÿÿÿjUèOh"h<¦FjDéXÿÿÿjUèOh*h<¦FhZé<ÿÿÿ‹E<;Ãt Pè$þÿƒÄ‰]ƒû0vjWèMh¢éNSQè¯fýÿƒÄ…ÀjWèàLƒÄƒÈÿ_^][ƒÄˆ¬ö@t<ÇD$;\$}BjWè°Lh¶h<¦Fh‹jfjèèAýÿƒÄƒÈÿ_^][ƒÄÃö@t ÇD$뼉\$‹L$‹|$+كƋˋӋÁˆ]ÁúÁéˆUƒÅó¥‹È3Àƒáó¤‹L$0‹|$ûÇD$ÿÿÿÿ‹QT‹r …ö‹t$•À@‰D$ ‹†…À„¾‹H‹…À„±Pè¢QýÿƒÄ‰D$…À„œƒ8th`h<¦FhÑë0‹T$ ‹@ R‹T$PL3WQRèä8þÿƒÄ‰D$…À}hgh<¦Fjh¼jèñ@ýÿƒÄ‹D$Pè¤jýÿ‹D$ƒÄ…ÀR‹L$0jQè}KhÄh<¦FhÐjfjèµ@ýÿƒÄƒÈÿ_^][ƒÄÃh[h<¦FhÀh¼jèŒ@ýÿƒÄ뮋L$0÷øtþG÷øtþD3‹ÐˆEÁúˆUø‹FƒÅ‹Ð‰|$ÁúƒøˆUˆEv+jQèåJhÓh<¦FjDjfjè @ýÿƒÄƒÈÿ_^][ƒÄËȃÆ‹ÑÁéó¥‹Ê‹T$ƒáó¤‹t$$‹L$0+Æ‹ùÂÇA41‰ADÇAHWèÆXƒÄ_^][ƒÄËD$Vx4@uk‹H<‹QÆ‹pT‹Žˆƒùv hìh<¦FjDhîjèƒ?ýÿƒÄƒÈÿ^ÃWz‹ÑÆŒÁéó¥‹Êƒáó¤‹HTÇ@4A_‹‘ˆÇ@HB‰PDPè1XƒÄ^ø 覨SUV‹t$0W½‹F<‹x‹F4=P…­‹FD¹"+ÈÇQPVèÁM‹NDº+ÑƒÄ ;Â}PjdVèWƒÄ _^][ƒÄ ÃÁ‹N`…ɉFDt‹VdRVP‹WjPjÿуÄ€t+jVèOIhh<¦FjfjdjèŠ>ýÿƒÄƒÈÿ_^][ƒÄ ˆ”…Àt‹ƒ8t‹H…Ét ÇF4Rë‰n4‹^D‹F4ƒë;Å…拆Ü3É3Ò‰L$‰T$‹@t3í…Àt0L$T$QRVÿЋèƒÄ …í}ÇF_^]ƒÈÿ[ƒÄ ËL$‹T$ƒýÇFuP…Ò„ÿ…É„QVÇF4Rè’4ƒÄ…Àt‹D$PVè6ƒÄ…Àu3í‹L$QèSýÿ‹T$RècgýÿƒÄ…íu;ÇF4Q‰|$4Æ‹D$4@‰D$4Æ‹D$4Æ@‹D$4ƒÀÇFH‰D$4ÇFD‹F4=Q„Y=R…NL$ ‰|$4Qèj½ýÿ‹–ÜjL$(‹‚€PQèq½ýÿ‹FT‹œ RPD$8P臾ýÿGSL$@PQèx¾ýÿ‹†¼T$\R‹ˆ‹Q‹PèœRýÿPL$TWQ‰D$LèL¾ýÿW‰|$p‰T$TÆ‹D$p@‰D$pÆ‹\$p‹Ž”C‰\$pD$T‹P‹PèTRýÿ‹L$x‰D$TÁ舋T$xŠD$T»ˆB‹T$x‹Ž”Ó‰T$xƒÄD‹L$‹B‹T$PQD$(RPè eÿÿL$0QèÁýÿ‹T$$‹D$HÁꈋL$HŠT$$ƒÄˆQ‹D$‹T$‹l$4Âë‰D$+ljl$4ÇF4S‰FDÇFHVèäTƒÄ_^][ƒÄ Ã…ÉtQèÏQýÿ‹T$ƒÄ…Òt RèŽeýÿƒÄhNh<¦Fjjjdjè¶;ýÿƒÄéþÿÿS‹\$UV‹C =`Ý =o=}{=„U ;ÄK;Æ…¿é@ =…¯‹UjjSRèÞuþÿƒÄ…À~(‹Ejjj PÇEèÁuþÿƒÄ…ÀŽ¥ÇE‹MX‹‘P‰U4é• ‰M0‹M<=‹Q‰T$H…’‹…¼…Àt‹‹U;Êu ‹ˆŒ…ÉtjUèÅÿÿƒÄ…À„E‹uXjÆ€ÿÌF‹Ð‹ÈÁêˆFÁ鈋ÐFjÁêˆFˆFVèÒXýÿ‹D$T‹MÁùXƒÄ ‰\$,ˆ ŠUC¹ˆ‹uX‹ECÆ€‹û‰…ƒÃ ó¥‹E(…Àt3Àë ‹¼‹ADˆC…Àt&ƒø ‡: ‹µ¼‹È‹ÑƒÆH‹ûÁéó¥‹ÊƒáØó¤CPUèL¸ÿÿƒÄPUèÒ¸ÿÿƒÄ …À„ ‹ÈˆCÁùˆ ‹•Üt‹‚…Àu3Ûë Pèß}ýÿƒÄ‹ØŠÃ3ÿþÀˆF…Û~ ‹ÜW‹‘RèÊ}ýÿŠƒÄˆFG;û|à‹D$,ÆF‹Î+È‹D$H‹ÑÁêÆˆP‹ÑˆHÁê+ðˆPÇE4‰uDÇEHjUè|h‹ðƒÄ…öŽÑ‹E‹M;ÁÇE4 ÇED„º QPèìtþÿƒÄ‰Eé¨ àîÿÿƒø1‡f3ÉŠˆŒµDÿ$xµDT$4Rh,jh!h Uèxm‹L$LƒÄ…ɉD$(u%…À‹ðŽQ‹Mh÷ÙÉá Á0‰M4é4 ‹E‹]@‹È3ÒŠ‰\$,Áù;Ñ…3 8C…* ‹}XƒÃƒÇ`¹‹óƒÃ ó¥3ÉŠ Cƒù ‰L$H‡Ï …ÉtC‹…¼;HDu8xH‹ó3Òó¦u-‹˜‹Ph;Ê…t pl½œ3Àó¦…a ÇEhëM‹¼ÇEh‹AD…ÀvjUè¶ÂÿÿƒÄ…À„e ‹•¼‹L$H‹ó‰JD‹½¼‹ÁƒÇHÁéó¥‹Èƒáó¤‹t$H‹MÞSÿQ8‹ðƒÄ…ö„; ‹UjjÿRD$hÑhÐUèÅ^‹ðƒÄ …öŽÊ‹Eh÷ØÀ%ÉE4é²=P…z‹D$‰M$;Át jjUÿÐƒÄ 3É‹Uâÿú…_‹E<‰u;Áu4èìþÿ‹ð…ö‰t$$„]h@VèSþÿƒÄ…À„G‰u<ÇD$$UèWfƒÄ…À„+jU蔵ÿÿƒÄ…À„Uè³V‹…ÜÇE4ƒÄÿ@4ÇED‹EX‹ˆT…ÉuT‹D$ …ÀuL‹…à…Àt‹Mjjj QèÛgþÿ‹ðƒÄ…öŽÀ‹L$…Ét‹u4‹D$@;ðtjhU‰E4ÿÑƒÄ ‰u43ɾ‰L$ »¿ ºéAñÿÿh1hL¦FjDhƒéXh<hL¦Fhµhƒé?h”hL¦Fhh’j¾/è &ýÿƒÄVjUè~yƒÄ é¾PVjUèhyƒÄ éÿh¯hL¦Fhøh’j¾/èÀ%ýÿƒÄVjUè4yƒÄ éËhºhL¦Fhh’j¾/èŒ%ýÿƒÄVjUèyƒÄ é—hÉhL¦FhÅh’j¾/èX%ýÿƒÄVjUèÌxƒÄ échÚhL¦Fhh’j¾/è$%ýÿƒÄVjUè˜xƒÄ é/hæhL¦Fjsh’éhˆhL¦FhYh’j¾/èÚ$ýÿƒÄVjUèNxƒÄ éåhvhL¦Fh h’jè«$ýÿƒÄ3ÒŠS¾FŠuVjU‰UèxƒÄ é¦hUhL¦FjDh‚é†hqhL¦Fhªé†hwhL¦Fh¥ëuhhL¦Fh©ëdh‡hL¦Fh£ëShŒhL¦Fh¤ëBh’hL¦Fh¢ë1h hL¦Fh§ë h¬hL¦Fh¦ëh³hL¦Fhúh‚jèË#ýÿƒÄj(jUè>wƒÄ éÕj2jUè,wh„hL¦FhŸh‘jè‘#ýÿƒÄ é¨Uè£Q‹E<3ÿƒÄ;Çt PèQþÿƒÄ‰}<‹EXöu Uè­²ÿÿƒÄjU‰}D‰}(è\®ÿÿ‹EhƒÄ;Çt ‹…Üÿ@X‹…ÜÇE `¢D¾‹H~‹D$H‹ËÁùˆXˆƒÃ‹VL$j0Q‹BT‹–¼ƒÂRVÿP ‹Ž¼T$$j0R‰Aè’¶ýÿƒÄé-h°hL¦FjDh˜jèýÿƒÄƒÈÿ_^][ƒÄ4è„W‹†¼‹ˆ‹y8…ÿ„%Wh°iEhÐiEèuôýÿ‹ØƒÄ …Û‰\$Huhrë-Sè» þÿƒÄ…Àuhwë‹WSRUè² þÿ‹øƒÄ …ÿ&h‚hL¦Fjh˜jèýÿƒÄƒÈÿ_^][ƒÄ4Ë–¼‹FWƒÂ‹HTURVÿQ ‹Ž¼‰A‹Ï‹Ñ3À‹ýÁéó«‹Êƒáóª‹CPèç«ýÿƒÀ‹|$\™ƒâƒÅÂU‹ØÁû‹Ëˆ]ÿÁùˆMþ‹WRè]²ýÿWƒÃè$þÿ‹|$0ƒÄ ÆG‹Ã‹ËÁøÁùˆ_ƒÃˆˆOÇF4‰^DÇFHjVè‹JƒÄ_^][ƒÄ4Ãj(jVè6hhkhL¦Fhîëj(jVèhh›hL¦FjDh˜jèƒýÿƒÄ _^]ƒÈÿ[ƒÄ4ø(èæ}SVW‹|$8ÇD$ 4…‹G<‹”‹p‹G‹‹HT‹GX‹ZT$ ,RPWÿQ‹ƒÄ ƒøuf‹OD$P‹QT‹OXÁQWÿR‹S D$RNPQT$(j$Rjrè“^þÿƒÄ$…ÀhÍhL¦Fj鵋D$ ÁèˆFŠL$ ˆN‹T$ BëSƒøt…†‹C L$8PVQ‹KRD$,jPQè«ÿÿƒÄ…ÀuhÝhL¦Fj ë`‹T$8ÁúˆVŠD$8ˆF‹L$8AÆF‹Ð‹ÈÁêÁéˆFƒÀˆˆNÇG4‘‰GDÇGHjWèìHƒÄ_^[ƒÄ(ÃhæhL¦FjDh™jè ýÿƒÄƒÈÿ_^[ƒÄ(øèf|UV‹t$3íW‰l$‹F4‰l$ =pu%‹†”;Åt‹9(t9ht ÇF4rëÇF4q~4q…ü‹†Ü3ÿ‹@t;Åt'L$ T$QRVÿЋøƒÄ ;ý}ÇF_^ƒÈÿ]ƒÄÃÿÇFuV9l$ t3‹D$;Åt+PVÇF4qèûƒÄ…Àt‹D$ PVèy ƒÄ…Àu!3ÿëhhL¦Fjjh—j3ÿèýÿƒÄ‹D$;Åt Pèã'ýÿƒÄ‹D$ ;Åt Pè¢;ýÿƒÄ;ýu7>u"‹NXj)jV‰©Xè@eƒÄ ¸_^]ƒÄËVXÇ‚XÇF4r~4ru1‹FXÇF4sƒ¸Xu3Àë ‹Ž”‹‹PVèŒIƒÄ‰FD‰nHjVèGƒÄ_^]ƒÄá¶I…ÀtdjZh\¦Fjj è'fýÿ¡¶IƒÄ…Àt5VWèf¹‹ð¿ˆJó¥_ÇœJ€ÇDÇÔJPÇDǶI^jeh\¦Fjj èÖeýÿƒÄ¸ˆJËD$ƒøué2Âÿÿ=uéæÙÿÿ=uéÁÿÿ3ÀøèzSUV3ÛWS‰\$ÿÌF‰D$SSD$$3ÿjP‰|$$èm4ýÿƒÄèUýÿSÿhF‹l$,‹…Ð;Ãu‹Ü‹”;Ãt‰D$‹ø‹EU@‰EèÝŸÿÿƒÄöÄ0tUèÏŸÿÿƒÄöÄ@t Uè‰ÿÿƒÄ‹E4=!‰D$,ò= =„ì=…éÜ=Œð=å‹U<‰]0=‹r‰t$ …T‹EXj €Pèv4ýÿƒÆƒÄ‰t$$Æ‹…ø~ F©uÆFÆFÇ…ë8©uÆFÆFÇ…ë©…=ÆFÆFÇ…WUè”ÿÿƒÄPUè‹”ÿÿƒÄ ;Äë‹ÈˆFÁùˆƒÆø¹ÆÆF‹øƒÆ€ã‰|$öÛÛ3ÀƒãðƒÃ ‹Óˆ^Áúˆ‹}XÇ€Só«‹EX+àPè“3ýÿ‹uX‹T$$‹Ë+ó‹ÁÆ ‹úÁéó¥‹È‹D$(+؃áó¤\þ‹ËˆXÁù€É€Sˆ‹D$0SPUÇE4‰UDÇEHèk>‹|$$ƒÄ3ÛUèle‹ðƒÄƒþ|$‹E`;Ãt‹MdVþQ‹MþÿƒÄ‹Å][á¶I…À}Ohh˜¦Fj j èVýÿƒÄ¡¶I…À}jjjh€¦Fjè¦6ýÿƒÄ£¶Ih•h˜¦Fj j èËUýÿƒÄ¡¶IÃhžh˜¦FjLè¿ýÿ‹ÐƒÄ …Òuh¡h˜¦FjAh¢jèžýÿƒÄ3ÀÃW¹3À‹úó«B ÇBH‰‹Â_ÃSVWh±h˜¦FjLè\ýÿ‹ØƒÄ …Ûu!h´h˜¦FjAhÝjè;ýÿƒÄ3À_^[ù3À‹ûó«‹|$‹+ǃè ÁøLà ‰ ‹W‰S‹G‰C‹O ‰K ‹G…ÀtPèt÷ýÿ‹WƒÄ‰S‹G‰C‹G…À„ÛPh°iEhÐiEèjÞýÿƒÄ ‰C…ÀuhÒh˜¦FjëK‹O‹A…ÀtPèb™ýÿƒÄ…ÀuhÚë&‹S‰B‹G‹@…À„Pè:™ýÿƒÄ…Àunhäh˜¦FjhÝjè[ÿüÿ‹CƒÄ…Àt Pè»õýÿƒÄ‹C…Àt Pè[úýÿƒÄs$¿‹Fü…Àt PèýÿƒÄ‹…Àt PèÔ(ýÿƒÄƒÆOuÛ_^3À[ËK‰A‹W3ö‰S‹D÷ …Àthó‰Dó h˜¦FjƒÀjPèÄTýÿƒÄ‹D÷$…ÀtHhú‰Dó$h˜¦Fj ƒÀjPèžTýÿƒÄƒþwÿ$µ´ÙDhh˜¦FhhÝjè„þüÿƒÄFƒþ|„_ÇCH‹Ã^[ËÿŸÙDŸÙDŸÙDŸÙDŸÙDS‹\$…Ûtxh=h˜¦Fj CHjÿPè TýÿƒÄ…ÀZ‹C…Àt PèŒôýÿƒÄ‹C…Àt Pè,ùýÿƒÄVWs$¿‹Fü…Àt PèâýÿƒÄ‹…Àt Pè£'ýÿƒÄƒÆOuÛSèTýÿƒÄ_^[ÃV‹t$…öuhmh˜¦FjCëiƒ>uwhžh˜¦FjLè“ýÿ‹ÐƒÄ …Òuh¡h˜¦FjAh¢jèrýüÿƒÄ3ÒëW¹3À‹úó«B ÇBH‰_…Ò‰uhth˜¦FjAhÞjè4ýüÿƒÄ3À^ø^Ãh€h˜¦Fj@èýÿ‹ÐƒÄ …Òuhƒh˜¦FjAhájèîüüÿƒÄ3ÀÃW¹3À‹úó«B ÇB<‰B‹Â_ÃW‹|$…ÿt|h•h˜¦FjGKýÿƒÄ VèUüÿÿƒÄ…À _^3À]ƒÄ ËL$ƒy vhTÊFjhh¸ÊFè KýÿƒÄ ‹|$ ‹–¼‹FTS‹ß÷ÛÛƒÂ#ÝR‹T$$Œ ‹D$QjRPè„c‹Ž¼‹VT÷ßÿƒÁ÷×#ýQ‹L$8„ ‹T$0PjQRè†c‹FTƒÄ(Œ ‰H\‹vT¸”3 [‰V`_^]ƒÄ ËD$…À‹D$t‹ˆˆ‹@T‹PHë ‹H|‹@T‹P@…Ét V‹1ƒ~u ƒÂÁêÁâ‹@XRPPQÿVƒÄ^øè†[‹D$SUV‹t$ W…À‹NTt‹Ô‹y`‹YL‹iTë‹Ð‹y\‹YD‹iP‹È‹ÐÁéÁêˆL$$ˆT$%‹ÈT$ÁéRˆL$*ˆD$+èÚqýÿ‹†€jL$PQèçqýÿ‹V|L$ ‹BXPWQèsýÿST$0URèùrýÿD$LjL$‹E…Àu7UÿU ƒÄ…ÀŒu&h­hÈÊFhåjjè ëüÿƒÄƒÈÿ_^][ƒÄ Ë…Ô…ÀtUèböÿÿ‹…ԃąÀt _^]ƒÈÿ[ƒÄ ÃjÿhF‹D$(ÇE…ÀŽ•‹MT‹YÇA+É\$‹ð‰t$‹}T‹D$$Ét$(‹O ‰D$…ÉtVPUèfƒÄ é"‹G…Àt ÇD$ ë ‹Œ‹Q‰T$ …ÀtþÿvÇD$(ÿ3ۉ酋E|‹T$ ‹‹Y 2ùÿ?v0‹G…Àu)ùÿv¹ÿ‹Á3Ò÷ó‹D$ Ç+Ê+È3Û‰L$(ë>ƒûw‹G…Àu Ç3Ûë(‹Á3Ò÷ó…Òu3Ûë+Ú‹G…ÀtÇë 3À…Û•À‰‹MT‹T$(‹t$ ‰QH‹ET‰X<‹ET‹H4ƒÁ‰HX‹ET‹H4L1‹t$‰HT‹ET‹Ê‹xT‹ÁÁéó¥‹Èƒá…Ûó¤t‹uT‹Ë3À‹~T‹ñúÁéó«‹Îƒáóª‹ET‹H…Éu1 j‰HL‹UT‹BXPUèº÷ÿÿ‹ET‹L$,Ùj‹pHUó‰pHèQ÷ÿÿƒÄ‹ET‹PH‰P ‹MTƒ9‹AXt:‹IHƒèÁé€á?ˆ‹UT‹r…öt€É@ˆ‹MTŠQHˆP‹MTŠQ<ˆP‹MT‹Q ƒÂë ‹IHƒèÁé€É€ˆ‹UTŠJHˆH‹MT‹Q ƒÂ‰Q ‹UT‹t$(‰B8‹ET‹˜ÔC‰˜Ô‹MT‹D$‰A‹UT‹L$P‰J‹UTQU‰r$‹UTÇBèG‹\$$‹t$ƒÄ …À~;Æt(ö…üu+ð؉t$‰\$é”ýÿÿ‹MT_^]‰Y[ƒÄ ÃÃ_^][ƒÄ ÃU‹T$V‹t$ W‹FT‹H;Ê£‹P‹D$;Ðt ö†ü„‹‹=hFjÿ׋N…Ét"‹FTÇF‹P ‹hR‹P8ÕRQèñ&þÿƒÄ ë!hðhÈÊFhhÔjè1èüÿƒÄƒÈÿ‹NT;A t…À~I‹iè‰i‹NT)A ë–‹FT_Ç@ ‹NTÇF^‹A$]ÃhàhÈÊFjhÔjèÜçüÿƒÄƒÈÿ_^]ËD$ …ÀŒ”V‹t$W‹NDÈ‹Á‰NDƒø|{‹F<‹x€?up3ÉŠoŠOAÿƒøw#ÿ$…ôðD¸Ëë¸Êë¸Éë ¸Ìë¸ý‹T$h¤hÈÊFPRjèUçüÿ‹NDƒÄƒÁý‰ND‹ñ…ö~GVPWÿ8FƒÄ _3À^ÃI“ðDšðD¯ðD¡ðD¯ðD¨ðDV‹t$‹N<‹FDP‹Q‹NHÑRVèûÿÿ‹NDƒÄ ;Áu,‹F`…Àt‹VdR‹VHÑ‹N÷Dg÷DÉ÷D»÷DPøD™÷D™÷D™÷D™÷D™÷D™÷DaøD‹D$‹ˆ¨‹D$ƒètHt3ÀËT$ ¸‰QËD$ ‰A¸ø,è†HD$‰D$¡$ÌI…Àtoh°hlÎFjj èÒ3ýÿ¡$ÌIƒÄ…Àt:¹ J¸ÄI‰ƒÀ(ƒÁ=ˆËIrñhÐ\Djj0h JÿLFƒÄÇ$ÌIh¾hlÎFjj èy3ýÿƒÄ‹D$03É3ÒhÐ\DŠŠPÉjÁáj0D$ Êh JP‰L$ èòXýÿƒÄ…Àt‹ƒ8u3ÀƒÄ,ËL$…Ét$‹D$‹@‹Ðâÿút3ÀËЈAÁúˆ¸ÃV‹t$‹F,…Àuh~4@t_‹F0¨uj jV‰F0èE1ƒÄ ë-‹NX‹‘H…Òt Vè½1ƒÄë¨ujjjjVèf"ƒÄƒ~0u ‹VX‹‚H…Àt 3À^ÃÇF0¸^ÃVjÿhF‹t$‹FX‹ˆP…ÉtO‹ˆ´…ÉuE‹ˆÄ…Éu;VèÜlÿÿƒÄöÄ0u-‹FXÇF40Ç€P‹FX‹XB‰X‹FXÿ€T‹FXötv‹N‹V;Êul‹H…Éu‹T$‹D$ RPjVè܃ąÀ~a‹NX‰A‹Vjjj RÇFèÙþÿƒÄ…À~>VÇFèåkÿÿ‹FXƒÄ‹ƒáû‰‹vX‹FÇF^ËD$‹L$ PQjVèwƒÄ^ÃSVWjÿhF‹t$‹FX‹ˆP…ÉtO‹ˆ´…ÉuE‹ˆÄ…Éu;VèÚkÿÿƒÄöÄ0u-‹FXÇF40Ç€P‹FX‹XB‰X‹FXÿ€T‹|$‹\$‹NXjWSjVÇ\è¤ ƒÄƒøÿu-‹VXƒº\u!‹FjWS@jV‰Fè} ‹NƒÄI‰N_^[ËNX_^[Ç\ÃSVWjÿhF‹t$‹FX‹ˆP…ÉtO‹ˆ´…ÉuE‹ˆÄ…Éu;VèújÿÿƒÄöÄ0u-‹FXÇF40Ç€P‹FX‹XB‰X‹FXÿ€T‹|$‹\$‹NXjWSjVÇ\èăăøÿu-‹VXƒº\u!‹FjWS@jV‰Fè‹NƒÄI‰N_^[ËNX_^[Ç\ËD$‹H …Ét‹@Xöt3ÀÃÇ€P¸ÃV‹t$W3ÿ‹FX9¸PtV9¸´uN9¸ÄuFVè÷iÿÿƒÄöÄ0u8‹FXÇF40‰¸P‹FX_‹ˆXA‰ˆX‹vX‹†T@‰†T¸^ËÇ_^ødèvCS‹\$lUV‹CXW3ö‹ˆH‹x‹¨|‹€€‹y‰t$ƒç;Ɖ|$0‰T$u‰t$xë‹@‰D$xöD$|„ä9s|t ÇD$ë"hÚh„ÎFhŒè€ëüÿƒÄ ;ƉC|„<‹ƒ„‹s|…À‰t$‰«€tPèÅEƒÄǃ„‹D$x…ÀtePèZEƒÄ‰ƒ„…Àuhéh„ÎFhŽé-‹KX‹Ü…Àu hîh„ÎFh@èøêüÿ‹SXƒÄ ‰‚Ü‹CX‹ˆÜ…É„¥‹SX3Ƀ‰ ‰J‹CXƒÀ‰D$$éµ9³ˆt`ÇD$‹ƒˆ‰«Œ‰D$‹ƒ;ÆtPèÿDƒÄ‰³‹D$x;ÆtYPè˜DƒÄ;ƉƒuFhh„ÎFhŽékhùh„ÎFhŒèCêüÿƒÄ ;Ɖƒˆu‡hUh„ÎFjAé9‹SX3ɃÂ4‹t$‰ ‰J‹CXƒÀ<‰D$$‹D$…Àt VèÜMƒÄVè3E‹D$‹SX‹uƒÄ‹h‹Št…ÿ‰l$xtV‹ªH‹}ƒçt¸ë‹E %ð‡-÷ØÀƒÀ9D$x}‹l$xë!…ÿt½ë‹m åð‡í÷ÝíƒÅ‹D$‹@ ‰D$x‹D$|ƒøt:ƒø!t5‰D$ Du<‰|$‹|$xýÇȉL$‹L$xÁJ`‰L$(Š€ë+6‰L$ <hȉ|$‰L$‹L$xHŠ€‰L$(J`‰L$,‹Šp;Á~%h0h„ÎFjDhjèàÖüÿƒÄ3À_^][ƒÄdÃT$4RèùVýÿ‹|$(‹Î‹t$$‹ÁÁéó¥‹È‹D$4ƒÄƒá…À󤄴jè+\ýÿL$8PQèàVýÿ‹T$UD$DRPèXýÿ‹t$@j L$PVQèïWýÿ‹|$Pj T$\WRèÞWýÿ„$„jL$hPQèêWýÿ‹„$´ƒÄ<…Àl$T~NjèÁ[ýÿT$8PRèvVýÿj D$DVPè™Wýÿj L$PWQèŒWýÿT$hjD$\RPè›WýÿL$tƒÄ0‰L$ë‹l$‹D$|‹“¼‹L$ƒàP‹D$PÇB‹T$$UjQRèCD$lj PèvýÿL$djQèvýÿT$\Rè\ZýÿƒÄ,¸_^][ƒÄdødèö>SU‹l$pV3öW‹EX9°pt _^]¸[ƒÄdÃL$(T$Q‹¼D$RPQèiyÿÿƒÄ…Àuhhh„ÎFhŠé¡‹UX‹D$‰‚x‹MX‹T$‰‘|‹EX‹L$(‰ˆ€‹D$‹T$‹X ‹H‹BÙØ‹EXÑ㋈t;Ît(‹€pPQè&uýÿ‹MX‹‘tRè7éüÿ‹EXƒÄ ‰°t‹MXhuh„ÎFS‰±pè’æüÿ‹øƒÄ ;þu%h“h„ÎFjAhjèqÔüÿƒÄ3À_^][ƒÄdËUXL$@QÆD$|A‰šp‹EX‰¸tèsTýÿT$4RèiTýÿƒÄÇD$$…ÛŽ~¸‰|$+lj\$‰D$,Fƒþ‰t$ ‡÷…ö~&ŠD$x‹ÎŠÐ|$PŠò‹ÂÁàf‹ÂÁéó«‹Îƒáóª‹|$ŠD$xjþÀˆD$|è*»ýÿPD$8PèTýÿL$\VT$@QRè/Uýÿ‹…¼T$H‹HƒÀQPRèUýÿ‹EXj ƒÀ`L$XPQèUýÿ‹UXj €D$dRPèîTýÿŒ$œjT$pQRèúTýÿƒÄHjèàXýÿPD$HPè•Sýÿ‹…¼T$L‹HƒÀQPRè­TýÿD$xjL$\PQèœTýÿ‹T$PƒÄ$×;Ój~2D$dL$DPQèžTýÿ‹L$t$l‹ÑƒÄ Áéó¥‹Êƒáó¤‹t$ ‹|$ëD$DWPèpTýÿƒÄ ‹D$$‹L$ƒÀƒéƒÇ;ÉD$$‰L$‰|$Œ•þÿÿL$`jQèürýÿT$HRèRWýÿD$RSUPQèƒÄ(Æ_^][ø<è¶8VD$ WPèZOýÿ‹L$PT$QRè;Qýÿ‹D$ƒÄ ‹H¸0™÷ù‹ð‹D$P¯ñ…Àt‹L$TT$QPRèlPýÿƒÄ ‹|$HT$‹‡¼‹HƒÀQPRèMPýÿVD$ h(ÌIPè=PýÿL$ T$8QD$,RPèIPýÿ‹L$4jT$8QRèèNýÿ‹‡¼T$@‹HƒÀQPRèPýÿVD$PhXÌIPèðOýÿ‹L$PƒÄHT$ D$QRPèÙOýÿ‹T$dL$QD$ RPèåOýÿL$(QèûRýÿ‹D$(ƒÄ_^ƒÄ<øè–7‹D$$‹L$SUVW…À‹AXt‹©Œ°àP<ƒÀ4‰T$‰D$ë‹©€°ÈPƒÀ‰T$‰D$‹M¸03Ò‰L$4÷ñ‹ØD$P¯ÙèÞMýÿjL$ UQèñMýÿ‹T$D‹D$ RL$,PQè OýÿST$8h(ÌIRèýNýÿ‹D$‹F…Àu7VÿV ƒÄ…ÀŒu&hh¤ÎFhåhžjè¿üÿƒÄƒÈÿ_^][Ël$ ‹\$+ïý@¸@w‹ÅjP‹D$$ QSVèGƒÄ…À~;Åt"ƒûu ö†üu+èøëÀ‹VX‰º_^][ËNXÇǤ_^][øè†(S‹\$U3í‹CXVW‰l$9¨Ät ‹D$0‹L$,‹T$(PQRS舃Ä_^][ƒÄÃ9¨HtSèσÄ;ÅŽO‹|$0;ýu9l$4u _^]3À[ƒÄËSX‚¸²à‰D$‹ƒ¼;ʼnt$$t9«ˆt ‹ƒŒ;Åu ‰l$醋H‹D$4;ʼnL$uw9ª¤uo9ª t]ƒ|$(uV‹T$,jURjSèÿÿÿƒÄ;ʼnD$ŽÑ‹SXH9‚¼s#hqh¤ÎFjDjhjèö½üÿƒÄƒÈÿ_^][ƒÄË|$0Ç‚¤‹D$‹T$‹(‹D$(êˆE‰‹ EÁùˆMŠEˆU‹T$,E‰~‰l$ƒÅ‰n ‰V‹ƒ…ÀtX‹{XÇà‹O‹WQ‹O RhDQPè*ƒÄ…À| ‹W ‰G‰WëFh”h¤ÎFhjhjèM½üÿƒÄ_^]ƒÈÿ[ƒÄËϋò‹Á‹ýÁéó¥‹È‹D$$ƒáó¤‹H ‹ð‰H‹|$…ÿt#‹N‹SÍj‹BTQSÿP‹FƒÄ ljn‰F‰n ‹SjS‹BTÿ‹N‹D$$Á鈊V‹L$0ˆP‹V‹D$<ƒÂƒÄ‰‰V…À‹òt ‹Æ_^][ƒÄËD$ð‹D$‰p Ç@‹SX‹D$0P‰‚ ‹sX‹T$0‰–‹sXRQ‰Ž‹sXS‰†èƒÄ_^][ƒÄÃU‹T$V‹t$ W‹FX‹ˆ ;ÊÓ‹‹L$;Ñt ö†ü„¸‹€‹L$;Á…¦‹=hFjÿ׋N…Ét+‹FXÇF‹Ä‹¨¸R‹ÀÕRQèpúýÿƒÄ ë!hêh¤ÎFh€hŸjè°»üÿƒÄƒÈÿ‹NX;Ät…À~X‹©À艩À‹NX)Äë‹FX_ǀċNXÇF^‹]ÃhÚh¤ÎFjhŸjèI»üÿƒÄƒÈÿ_^]øHè¦$SU‹l$TVWÇD$‹EX‹ˆ¨…ÉuUèCúÿÿƒÄ…À„Ù ‹|$`…ÿt ƒÿtƒÿu ‹D$l…Àt+ƒÿt&h#h¤ÎFjDh”jèÁºüÿƒÄƒÈÿ_^][ƒÄHÃÿuy‹MX‹…Àvl‹t$hÁ3ÿ…ö~-‹D$d‹UX‹š…ÛvŠAˆ‹UXN‹šKG…ö‰š׋UX3ö‹‚…ÀvŠAˆ„2‹UXF;²rê‹Ç_^][ƒÄHËE…Àu)UèØIÿÿƒÄöÄ0tUÿU ƒÄ…ÀŒõ u hEé ‹EXÇE‹ˆÌ˜È…Ét }8ñ…„‹µø‹¬æÿ3Éƒæ ‰L$‰L$‰L$‹¼êHÁæ ;ò‰L$ ‰t$\…të‹t$\}8ñu ƒ}Pƒ›‹EXj‹ˆ¬QjUè_ ƒÄ…ÀŽH ‹uL3ÒÇE8ñ3ÀŠF‰3ÉŠŠNF3ÒFŠð3À‹ùŠF úŠ&‰C‹……Àt Ç…ë‹E¿Ï;È…çÿÿÿfÿ…-‹T$\‹CÂH;‡A‹t$\‹MP‹Cƒé;ÁvjPPUèÁ ƒÄ…ÀŽª ‹ELÇE8ð‹KÆHƒÀ;ΉC‡‰C ‹UjU‹BTÿƒÄ…À„k ÇD$‹D$ …Àt‹E|…Àt ‹…€…Àu ÇD$ë|‹L$…Éut‹x‹L$\‹C”D;ÂvÇD$;Çr‹s +Çð‰C‰t$ë‹t$ÇD$ÇC‹ET$4jR‹HTUÿQƒÄ …ö„x‹Ï‹|$t$43Àó¦…d‹D$…À…X‹…„3ÿ;ÇtI‹L$\‹SÁD;чM‹uXÆÈ‹V‹N R‹VQh@RPè†$ƒÄ;ÇŒ8‰F‹F‰F ‹L$\‹CÁ@;Á‡-‰{‰}P9{„Äýÿÿ‹|$`‹EX‹ˆ<…Ét ƒ;…³öE0…Ò‹ ;ù„àƒùuº°‰T$ëƒùumº°ø‰T$ü‹8‹Ê+Ï‹{;ùs‹Ï‹ùI…ÿv5A‰L$\‹S ‹K‹8Š ˆ7‹A‰‹{‹S‹L$\GJI‰{‰S‰L$\uÔ‹T$‹‹|$`;Ê‚žüÿÿ‹M$…É… ‹EXƒ¸‚ùŠ„Ò…ë‹•¼…Ò„Ý‹²¬…ö„ωˆ‹EXŠˆ„É…ÁŠˆ„É…³Šˆ„É…¥‹M`…Ét‹UdRUjP‹EjPjÿуÄUè´EÿÿƒÄƒø…óûÿÿ‹EXö…çûÿÿ‹ˆP…É…ÙûÿÿUè8ÛÿÿUèbÛÿÿƒÄ…À„ÂûÿÿUÿU ƒÄ…ÀŒœ„ûö…ü… ûÿÿ‹MX‹´…À„çéŠûÿÿ‹EX¾9°ü‚›3Û3ÒŠ˜øŠùÇ€ü‹E`…À‹òt‹Md‹UXQ‹MUÂøjRjQjÿЃÄ‹…Ð…Àu‹•Ü‹‚”…Àt‰D$‹D$…Àt‹ÃÁà ÆPh@UÿT$ ƒÄ ƒû…¨‹MX…ö‰±@„…éÛúÿÿöE0…‹ƒú…ÿƒ{… ‹C…À…‹K €9… ÇC‹E`…Àt‹UdRUjQ‹MjQjÿЃÄ‹UXÇ‚<‹u4‹EXæ ÷Þ‹ˆtöƒæƒÆ…Éu'‹¼‹HU‰‘¬‹E‹HTÿQƒÄ…À„‹UVU‹BTÿPƒÄ…À„þ‹E4öÄt‹M‹AT‹P(‹p,ë ‹U‹BT‹P ‹p$‹MX™ôSVR‘,ÁRQUÿP‹MXƒÄ‰<éÇùÿÿƒ¸rkƒ}ue‹U4âÿƒúuöu÷ÙÉÇE(áÁ‰M4UÿU ƒÄ…ÀŒe„ö…ü…iùÿÿ‹EX‹ˆ´…É„ éSùÿÿƒú|ƒúŽ|ƒú„}…yÇCé#ùÿÿhÿh¤ÎFjDhjè³üÿƒÄƒÈÿ_^][ƒÄHÃhh¤ÎFh hjèç²üÿ¿ÏƒÄ‰M¾Fé·h)h¤ÎFh hjè¹²üÿƒÄƒÈÿ_^][ƒÄHÃh0h¤ÎF¾hÆëihXh¤ÎF¾h–ëSh¨h¤ÎF¾hUë=h²h¤ÎF¾hŒë'h¸h¤ÎF¾jkëhÀh¤ÎF¾h’hjè ²üÿƒÄ‹UV‹BTÿP0‹Ø‹EƒÄ=u ƒûFu»(ë…یы…¼…Àt‹ÜPQèÉMÿÿƒÄ‹UXÇ‚H‹EXÆ€L‹MXˆ™M‹UX‹‚Ä…À…†U诃ăÈÿ_^][ƒÄHÃh`h¤ÎFh‘h”jèv±üÿƒÄƒÈÿ_^][ƒÄHÃÇC_ÇE^]3À[ƒÄHÃUèú@ÿÿƒÄöÄ0t"ƒÿu‹E|…Àuhvh¤ÎF¾ jdéy‹D$h…ÀŽø‹K;Áv‹Á‹s ‹{‹È÷‹|$d‹ÑÁéó¥‹Êƒáó¤‹L$l…É…Ç‹{‹s+øð‹Ï‰{…ɉs…­ÇE8ð‰{_^][ƒÄHÃhÝé7UÇEèÀ/ÿÿ‹HƒÄƒáùƒÉ _^‰H]ƒÈÿ[ƒÄHÃhËh¤ÎFjih”jèn°üÿƒÄƒÈÿ_^][ƒÄHËE0_ ^‰E0]3À[ƒÄHÃûuw‹UXh†èh¤ÎFPh”ÇEj‰²Dè°üÿVh˜ÊHL$@jQèŠ ýÿT$HRh´ÎFSèJ¸üÿ‹}0‹…¼‹Ü ûPQ‰}0èÏKÿÿƒÄ83À_^][ƒÄHÃh&h¤ÎF¾/höé_ÇE^ÇC]3À[ƒÄHÃh<h¤ÎFjgh”j良üÿƒÄƒÈÿ_^][ƒÄHÃhah¤ÎFhåh”jè`¯üÿƒÄƒÈÿ_^][ƒÄHÃUÇEèe.ÿÿ‹PƒÄƒâùƒÊ _^‰P]ƒÈÿ[ƒÄHËMX‹\…ÀtD‹T…Àt:‹E4öÄt=|= ~öÄ t= !=!|‰±\_^]ƒÈÿ[ƒÄHþ hªëhh¤ÎF¾ jDë¾ h„h¤ÎFhõh”jè›®üÿ‹EƒÄ‹HTVÿQ0‹Ø‹EƒÄ=u ƒûFu»(ë…Û|P‹…¼…Àt‹•ÜPRèHJÿÿƒÄ‹EXÇ€H‹MXÆL‹UXˆšM‹EX‹ˆÄ…Éu Uè2ƒÄƒÈÿ_^][ƒÄHËD$S3ÉUV‹t$;ÁWu(‹FX9ˆ´u‰ˆ°‹FX‹°‹¸¨׉NP‰VL‹FX‹\$‹¸´;û|.‹VP_Ó‰VP‹ˆ´+ˉˆ´‹vX‹†°Ɇ°^‹Ã][Ã9N\u‰\$‹nP‹ˆ¬‹T$+Í;Ñ~‰L$;\$~#h«h¤ÎFjDh•jèY­üÿƒÄƒÈÿ_^][ËNL‹€¨;Èt/RQPÿ8F‹FXƒÄ ‹ˆ¨‰NL;û}ojÿhF‹F …Àt1‹T$‹NX+×ÇFR‹‘¨×ÕRPèñêýÿƒÄ …À~)ø;û}1ëÀhÈh¤ÎFhÓh•jèǬüÿƒÄƒÈÿ‹NX‰¹´_^][ËVXë+û‰ª°‹FX‰¸´‹FPÃÇF‰FP_^‹Ã][ËT$ SV‹t$ R‹F‹HTÿQ0‹Ø‹ƒÄ=u ƒûFu»(ë…Û|Zƒ|$u‹†¼…ÀtP‹†ÜPè HÿÿƒÄ‹NXŠD$ÇH‹VXˆ‚L‹NXˆ™M‹VX‹‚Ä…Àu VèƒÄ^[ÃV‹t$Wj‹FXjÇ€H‹NXÁLQjVè·ìÿÿ‹øƒÄ…ÿ‹VX_^Ç‚HËFX€¸Lu‹Njjj QèÃìýÿƒÄ‹F`…Àt‹Vd‹NXR‹VÁLjQjRjÿЃÄ‹ŽÐ…Éu‹†Ü‹ˆ”…Ét‹FX3ÒŠ°LŠMRh@VÿÑƒÄ ‹Ç_^ø,ø ÌIÃVèŠÄÿÿ‹ðè#±ÿÿÆ^ÃèkÄÿÿ‹L$;Ès QèmÄÿÿƒÄÃ+ÈQè±ÿÿƒÄÃVè:Äÿÿ‹t$Vè ËÿÿƒÄ…Àu Vè³²ÿÿƒÄ^ËL$…Ét‹D$‹@‹ÐˆAÁúˆ‹ÐÁúˆQ¸ÃVjÿhF‹t$Vèý9ÿÿƒÄöÄ0tI‹F…ÀuBVÿV ƒÄ…À|Cu h´hÏFhåjxjèªüÿƒÄƒÈÿ^ËD$‹L$ PQVèa+ÿÿƒÄ ^ÃVèæ7ÿÿƒÄƒÈÿ^ÃVjÿhF‹t$Vè}9ÿÿƒÄöÄ0tL‹F…ÀuEVÿV ƒÄ…À|Fu#hËhÏFhåhíjè–©üÿƒÄƒÈÿ^ËD$‹L$ PQVè>+ÿÿƒÄ ^ÃVèc7ÿÿƒÄƒÈÿ^ÃVjÿhF‹t$Vèý8ÿÿƒÄöÄ0tI‹F…ÀuBVÿV ƒÄ…À|Cu hâhÏFhåjyjè©üÿƒÄƒÈÿ^ËD$‹L$ PQVè+ÿÿƒÄ ^ÃVèæ6ÿÿƒÄƒÈÿ^ÃSUV‹t$W‹F<‹^H‹~D‹V‹hWÇF +QRèWçýÿƒÄ …À~+;ÇÇFt+‹NØ+øÇF+WPQè,çýÿƒÄ …ÀÕ‰~D‰^H_^][Ã_^Ã][ÃSV‹t$ W‹|$‹FP;ÇsZ‹^L‹V ‹ÏÇF+ÈÃQPRèCæýÿƒÄ …À~:‹VPÇFЋ‰VP;Çs%‹V ‹Ï+ÈÃQPRÇFèæýÿƒÄ …ÀÌ_^[ËÇ_^[øøèfS‹œ$UV‹CXW3ö‹ˆH‹x‹¨|‹¸€‹IŠ„$ƒá‰t$¨‰L$‰T$$„ß9s|t ÇD$ë"hhLÏFhŒèz¹üÿƒÄ ;ƉC|„ ‹ƒ„‹s|…À‰t$ ‰«€tP迃Äǃ„…ÿtd‹GPèUƒÄ‰ƒ„…ÀuhhLÏFhŽéJ‹KX‹Ü…Àu hhLÏFhHèó¸üÿ‹SXƒÄ ‰‚Ü‹CX‹ˆÜ…Étx‹SX3Ƀ‰ ‰J‹CXƒÀ‰D$éß9³ˆt ÇD$ë!h&hLÏFhŒè˜¸üÿƒÄ ;Ɖƒˆt)9³ˆu2h*hLÏFhŒèo¸üÿƒÄ ;Ɖƒˆuh«hLÏFjA釋ƒˆ‰«Œ‰D$ ‹ƒ;ÆtP衃ĉ³;þt*‹OQè;ƒÄ;Ɖƒuh8hLÏFhŽé0‹CX3ÒƒÀ4‹t$ ‰‰P‹CXƒÀ<‰D$‹D$…Àt V豃ÄVè‹|$(‹KX‹u‹T$‹o‹tƒÄ‰l$…ÒtX‹‰H‹iƒåtºë‹Q âð‡ê÷ÚÒƒÂ9T$}‹l$ë!…ít½ë‹i åð‡í÷ÝíƒÅ‹”$‹O ƒú‰L$,t3ƒú!t.ÇD$(‰T$0Tu<‰|$<)×ÂщD$¸8ÏFë'6‰D$0ÇD$(<j‰|$‰D$J¸$ÏF‹KX;‘p~(hdhLÏFjDhÑj辤üÿƒÄ3À_^][ÄøÃ‹|$‹Î‹t$0‹ÑÁéó¥‹Êƒáó¤‹L$…É„³‹‹P‰L$T‹H‰T$X‹P ‹CX‰L$\¹|$d°€‰T$`ó¥p`‹D$$¹¼$„󥋋܋x‹ÅW‹‘ˆƒå‰T$ ™+‹ð‹D$Ñþõ‰T$”$¬RºPRT$`RVP‹„P訌$W¸PQ‹L$@T$xP‹D$ñ‹L$‰D$ ¸MQP‹…ÜRV‹€„WPèOüÿÿ‹|$4‹T$8S¸MWL$LP‹D$HQVRPè.üÿÿƒÄ8…Û~‹D$‹÷+ð‹ËŠ0@Iu÷SWè½>ýÿWèײüÿ‹…øƒÄ öÄu_‹EXÇ€ ‹¼‹¬3É;Át@‹P âð‡úu ‹EX‰ˆ ‹•¼‹‚¬‹P âð‡ú@u ‹EX‰ˆ _^]¸[ƒÄløèF‹L$ ‹D$SUVW…Ét‹hX‹°ˆ‰l$Åà…öu3Àë‹p|‹@X…ö‰D$¨Èu3Àë‹‹T$‹º¼…ÿ„i…ö„a…À„Y‹‹]‹xƒÿtP…ÉtP‹Ã™÷ÿ‹Ç+‹T$ö‚ùHÿt ‹T$ötA;Ú‰T$}‹UCˆLÿ‹T$;Ú|ð‹M‹ÚȉM‹L$…ÉuB…Ût ‹Ã3Ò÷÷…Òt4hVhLÏFhhÒjèÕœüÿ‹D$,jjPèGðÿÿƒÄ 3À_^][YËU‹E ‹SRPVÿQƒÄƒÿ„¶‹D$…À…ª‹M 3ÀŠDÿ‹L$‰D$@‹‘øöÆt5‹QX¹‰T$¿lÏFr3Òó§uöD$u‹L$ƒ ‹L$‹QXötH‹};Ç~ _^]ƒÈÿ[YËó+ð;ó}‹M 3ÒŠ1‹L$;ÑußF;ó|ë+ø¸‰}_^][YËE‹M‹U PQRÿ8F‹E ƒÄ ‰E_^]¸[YøèVD$Pèüýÿ‹L$ T$QRèÝýÿ‹L$,D$ PT$QRèIýÿD$Pè_ ýÿ‹D$ƒÄ0øTè‹D$hS‹ÈUV‹t$p‹ÑW|$,Áéó¥‹Êƒáó¤t,D$Pèˆýÿ‹L$pT$ QRèiýÿ„$„L$(PVQèÖýÿ‹”$ˆ‹Œ$D$4RPñè;ýÿŒ$˜T$…khu9‹L$ ‹T$‹UQRSÿPƒÄ…Àt‹D$_^‰(]¸[ËL$_^]Ç3À[Ë‹rƒþ ‰t$vh€ÐFhhhÐFèbæüÿƒÄ …ÿ„/;Æ}4‹t$ ‹Í‹Ñ|0Áéó¥‹Êƒáó¤‹C _Å^‰C ‹D$][ǸËî‹t$ +ï|0‹Í‹ÑÁéó¥‹Êƒáó¤‹t$‹|$‹K0VQWSÿPƒÄ…Àu_^][ËT$$‹L$ +Õ͉T$$‹T$‹l$$þ‰2‹t$‰L$ ë‹D$‹|$ÇN#õ+î‰t$$…í~‹T$ ‹ URWSÿQƒÄ…Àu_^][ËD$(…öt‹D$ ‹Î‹Ñ{04(Áéó¥‹Êƒáó¤‹t$$‰s _^]¸[ÃUV‹t$ ‹‹hƒý vh ÐFhFhhÐFè,åüÿƒÄ ƒýu‹L$‹Å^]ÇËF\‹N öÄt6…Ét hQhhÐFhŠjjèÞŒüÿƒÄ3À^]ËT$^¸]ÇËÅ+Á;Í}$SŠØW|10Šû‹È‹Ã‹ÑÁàf‹ÃÁéó«‹Êƒáóª_[‹T$‹N0UQRVÿPƒÄ…Àt‹L$‰)^]ÃSUV‹t$ …öWu‹D$_‰0^]¸[Ë\$‹C\öÄt‹L$ ‹T$‹D$VQRPSèRýÿÿƒÄ_^][Ë ‹iƒý vh¸ÐFhshhÐFèäüÿƒÄ ‹Cd…Àt-‹D$‹Í‹Ñsl‹øÇD$Áéó¥‹ÊƒáÅó¤‹t$$‰D$ëÇD$‹D$ ‹L$V‹t$ PVQSè×üÿÿƒÄ…Àu_^][Ãý~5‹C …Àu.‹‹D$+Í{l‰‹ÍÇCd‹6‹ÑðÁéó¥‹Êƒáó¤‹t$ëÇCd‹D$…Àt._^]¸[ÃS‹\$UV‹t$ÇW‹‹x‹F\öÄt-‹F …À„íh¥hhÐFhŠjejè‹üÿƒÄ3À_^][ÃÿŽÂ‹F …À…˜‹Fd…À„ƒÿ vh¸ÐFh²hhÐFèÜâüÿƒÄ 3ÀŠD7k;Ç~h¶ëF3í…À~L7lI3ÒŠ;Ðu.E;è|ò‹‹I+È3À…É~‹|$ŠTlˆ8@;Á|ô_^‰ ]¸[Ãh½hhÐFjdjejèbŠüÿƒÄ3À_^][Ãh¯hhÐFjmjejèCŠüÿƒÄ3À_^][Ã_^Ç]¸[ÃW‹|$‹…Àt)‹@…Àt WÿЃÄ…Àu_ËG`…Àt‹‹Q RPèO*ýÿƒÄ‹G`…Àt Pè_žüÿƒÄ‹G…Àt PèŸrýÿƒÄ¹#3Àó«¸_ËL$‹‹Pö€ty…ÀuhúhhÐFhƒj|j膉üÿƒÄ3ÀË@,…ÀuhÿhhÐFh„j|jèa‰üÿƒÄ3ÀËT$jRjQÿЃÄƒøÿu`hhhÐFh…j|jè/‰üÿƒÄ3ÀËD$V‹qX;ð^u¸Ã…À~öÂt ‰AX¸ÃhëhhÐFh‚jzjèìˆüÿƒÄ3ÀËL$‹…ÀuhúhhÐFhƒj|j辈üÿƒÄ3ÀË@,…ÀuhÿhhÐFh„j|j虈üÿƒÄ3ÀËT$R‹T$R‹T$RQÿЃÄƒøÿuhhhÐFh…j|jèaˆüÿƒÄ3ÀøÍIËD$3ɉH ‰H‰H ‰H¸ÃV‹t$…öu3À^ËF…Àt)‹F …Àt‹FjPè:©‹NQèÑüÿÇF ÇF¸^ÃV‹t$ 3ÀW…ötQPè ©‹|$ ‹D$jP‹OVQè‰ûûÿ‹O‹ðƒáð…ö‰O%tƒþÿuèÔ¨ƒøt ƒø t=3'u‹G ‰G‹Æ_^ÃVWj賨‹|$ ‹D$‹L$j‹WPQRè>ôûÿ‹O‹ðƒáð…ö‰O%tƒþÿuèy¨ƒøt ƒø t=3'u‹G ‰G‹Æ_^ËD$WH¿=„‡ 3ÉŠˆèQEÿ$ÌQEV‹t$ …öt0‹F…Àt)‹F …Àt‹VjRè ¨‹FPè üÿÇF ÇF‹L$‹D$‹‰F‰V‰~ ^‹Ç_ËD$‹H …Ét‹L$…Ét‹P‰‹x‹Ç_ÃÏÿ‹Ç_ËD$‹x‹Ç_ËT$‹L$‹Ç_‰JÃ3ÿ‹Ç_ÃÆQE¬QE·QEÈQE5QE†QEÆQEV‹t$ W‹þƒÉÿ3Àò®÷ÑIP‹ùèâ¦jW‹|$V‹GPèuòûÿ‹O‹ðƒáð…ö‰O%tƒþÿuè°¦ƒøt ƒø t=3'u‹G ‰G‹Æ_^ø@ÍIÃVWjahØÐFj è —üÿ‹ð3ÿƒÄ ;÷u_3À^ÃjchØÐFhèÿ–üÿƒÄ ;ljFuVèo™üÿƒÄ3À_^ÃjehØÐFhèÖ–üÿƒÄ ;ljFu‹FPèC™üÿVè=™üÿƒÄ3À_^ËD$ ÇÇF‰~ ‰~‰~‰~‰xÇ@ ‰p _¸^ÃV‹t$…öu3À^ÃW‹~ ‹G…Àt Pèâ˜üÿƒÄ‹…ÿt WèÒ˜üÿƒÄ‹F PèÆ˜üÿƒÄÇF ÇF ÇF_¸^øè–íÿÿ‹D$ SUV…ÀW„!‹|$‹_ …Û„‹G$…À„‹G‹l$ $ðÇD$‰G‹C …ÀtT;Å~‹Å‹s‹{‹È÷‹|$‹ÑÁéó¥‹Ê‹T$ƒáÐó¤‹{‹s ø+ð;è‰{‰s ‰T$„ž‹L$‹|$+èȉL$‹;è5‹O$P‹CPQèiÁýÿ‹ðƒÄ …öWèªÇýÿƒÄ…ö|TtbÇC‰s éjÿÿÿ‹T$‹G$URPè3Áýÿ‹ðƒÄ …öWètÇýÿƒÄ…ö|t,‹L$Î;î‰L$t‹L$Î+î‰L$뽋D$…À‹Æ_^][YËD$_^][YÃ3À_^][YøèFìÿÿ‹D$ SUV…ÀWÇD$„†‹l$ …íŽz‹|$‹_ …Û„k‹G$…À„`‹G$ð‰G‹C‹s‹S+Æ+Â;Åù‹S…Ò„‡…À~;‹{‹t$‹Èú‹Ñ+èÁéó¥‹Ê‹T$ƒáÐó¤‹|$‹Køȉ|$‹|$‰T$‰K‹K‹S‹CÊ‹W$PQRè«Àýÿ‹ðƒÄ …öWèLÆýÿƒÄ…öŒ¯„¹‹K‹CÎ+ƉK‰Cu¸‹CÇC;è|D‹D$‹O$UPQè\Àýÿ‹ðƒÄ …öWèýÅýÿƒÄ…ö|dtr‹T$‹L$ÖÎ+î‰T$‰L$tZ;k}¼‹C‹s‹S+Æ+Â;ÅŒÿÿÿ‹{‹S‹t$‹Íú‹ÑÁéó¥‹Êƒáó¤‹C_Å^‰C‹D$Å][YËD$…À‹Æ_^][YËD$_^][YÃ3À_^][YÃSU‹l$V‹t$WEÿ»‹~ ƒøy‡P3ÉŠˆÈZEÿ$œZE3À‰G‰G ‰G‰G‹v$;ðu_^][ËT$ ‹D$RPUVèöÁýÿƒÄ‹Ø_^][Ë__^‹Ã][ËO‹G‹ 3Û;Ç€< uC@;Ç|ô_^‹Ã][Ë_…Û…õ‹v$…öu_^]3À[ËL$ ‹T$QRUVè’ÁýÿƒÄ‹Ø_^][Ë_ …Û…Á‹v$…ö… _^]3À[Ët$‹;ð~0hAhØÐFVè!’üÿ‹ØƒÄ …Û„Þ‹G…Àt P臔üÿƒÄ‰_‹ÎÇG‹Ñ‰w ‹t$ ‹Áéó¥‹Ê»ƒá‹Ãó¤_^][ËD$ …Àtƒ8u ‹G‹l$‰D$ ë‹L$‹/‰L$ ë‹l$‰l$ ‹W‹wý‰T$~!;/t‹D$hchØÐFPè|‘üÿ‹ðƒÄ …öt=‹D$ =~Q;GtL‹L$hhhØÐFQèO‘üÿƒÄ ‰D$…Àu-;wt V蹓üÿƒÄhµhØÐFjAjrj è!üÿƒÄ3À_^][ËG;ÆtP芓üÿƒÄ3À‰w‰G‰G ‰/‹G‹L$;Á„_Pèe“üÿ‹T$ƒÄ3À‰W‰G‰G‹D$ ‰G_^‹Ã][ËF$…Àu_^][ËL$ ‹T$‹~QRƒçðUP‰~èÏ¿ýÿV‹ØèçÂýÿƒÄ‹Ã_^][ËF$…Àu_^][ËO…É‹L$ ‹T$QRUP虿ýÿƒÄ‹Ø_^][Ë^ƒãð‰^‹O‹G;È~@‹_+ÈÃQP‹F$PèÚ¼ýÿV‹Øè‚ÂýÿƒÄ…ÛŽ›‹GÉG‹^ƒãð‰^‹O‹G;ÈÀ‹L$ ‹T$3ÀQ‰G‰G‹F$RUPè ¿ýÿƒÄ‹Ø_^][Ë‹t$ jQjuVèe¾ýÿƒÄ…Àt‹WjRjuVèP¾ýÿƒÄ…Àu-3Û_^‹Ã][Ëv$…öu_^]3À[ËD$ ‹L$PQUVèÁ¾ýÿƒÄ‹Ø_^‹Ã][Ã/WEdWEÈWE“YE:ZE”WE[YEnWELXEåWEpZE     ‹D$‹@$…ÀuËL$ ‹T$QRP脾ýÿƒÄ øè&æÿÿ‹D$S‹\$U‹H‹l$KƒáðV‹p WÇD$‰H‹V …Ò~Y‹N‹FÈ3ÿ3À…Ò~#;Ã}ŠˆUŠE€ú t ‹V @;Â|åë¿@‹T$‹NÐ+؉T$‹V +ÐÈ…ÿ‰V ‰NuI…ÛtEë ‹‹T$‹NP‹B$QPè ºýÿ‹øƒÄ …ÿ‹L$QèJÀýÿƒÄÆE…ÿ|t‰~ ÇFé]ÿÿÿÆE‹D$_^][YËD$…Àò‹Ç_^][YËT$W‹úƒÉÿ3Àò®‹D$÷ÑIQRPèÓøÿÿƒÄ _ÃS‹\$V‹t$…öWt2è PSèu€ýÿƒÄ…Àu_^[ÃjjVjPèm~ýÿƒÄƒøt_^3À[Ë|$…ÿt2èâPSè;€ýÿƒÄ…Àu_^[ÃjjWjPè3~ýÿƒÄƒøt_^3À[Ã…öu_^3À[Ã_^¸[ËD$‹H Qè³ÞýÿƒÄËD$ ‹T$‹L$P‹B QPèIÚýÿƒÄ øðÐFËD$‹H QècƒÄËD$ ‹T$‹L$P‹B QPèyƒÄ ËD$‹T$‹H QRè®ƒÄø8ÑFËD$‹HP ‹@`Q‹L$R‹T$P‹D$QRPè¼ ƒÄ¸ËD$‹HPPQR‹P`H ‹D$Q‹L$R‹T$PQRèø"ƒÄ¸ËD$HPP ‹@`Q‹L$R‹T$P‹D$QRPè¬#ƒÄ¸ø€ÑFËD$W‹‹y‹L$;Ïs¸_ËT$SU‹l$V‹t$+×3Û‰T$ +îë‹D$‹P‹@`R .PQVè#‹D$0߃Ä÷;ØvÛ^][¸_ø`ÒFø@ÓFËL$‹‹@ƒàƒøt+ƒøt&‹D$…Àu‹AX‹Q`‹L$RÁàPQèí&ƒÄ ¸ËAX‹Q`‹L$RÁàPQè#ƒÄ ¸ËD$‹HP ‹@`Q‹L$ƒÀR‹T$P‹D$QRPè‰4ƒÄ¸ËD$‹HPPQR‹P`H ‹D$ƒÂQ‹L$R‹T$PQRèÅ<ƒÄ¸ÃU‹l$W‹E‹x‹D$;Çs_¸]ËT$‹D$SV‹t$+×3Û+ƉT$ ‰D$ë‹D$‹U`‹MƒÂQÆRPVèN>‹D$0߃Ä÷;ØvÙ^[_¸]ËD$HPP ‹@`Q‹L$ƒÀR‹T$P‹D$QRPèÉ>ƒÄ¸ø ÔFËL$‹A`‹IX‹ƒÀR‹T$ RQPèD@ƒÄ¸øèÆàÿÿSU‹l$$VW3ÿ;ï‰|$„’‹\$(‹‹p ƒþvh„ÕFh±hlÕFèÏüÿƒÄ L$VT$QRUèzB‹øƒÄ;þt _^]ƒÈÿ[ƒÄËD$ƒø:uI¾€…ÿ~D$jÿPjjjSèäÿÿƒÄjVjSèÓíÿÿ‹Æ™ƒâÂÁøPSèñìÿÿƒÄ‹Ç_^][ƒÄÃøxu¾@ë°= u¾(ë¢h¢hlÕFjljmjèevüÿƒÄƒÈÿ_^][ƒÄÃW‹|$ 3À…ÿtYD$ V‹t$ PjjVèQíÿÿ‹D$ ƒÄ=€u¹:ëƒø@u¹xë3Ƀø(•ÁIá ‹ƒÆ‹B PVQWè€@ƒÄ^_ËD$ƒèt;ƒèt!HtƒÈÿËD$ …À~‹L$‹Q`‰¸Ã3ÀËD$‹H`‹D$‹‰¸ËD$‹HX‹P`Áበ¸ø˜ÕFËD$P‹D$‹HX‹P`QRèzBƒÄ ¸ËD$‹L$ ‹T$P‹D$QR‹H`QèDCƒÄ¸ËD$W‹‹D$‹y;Çs¸_ËL$SU‹l$V‹t$+Ï3Û‰L$ +î‹T$ .‹B`PQVè¼F‹D$,៎ ÷;Øvß^][¸_ËD$‹HP ‹@`Q‹L$R‹T$P‹D$QRPè,GƒÄ¸ËD$HPP ‹@`Q‹L$R‹T$P‹D$QRPèUƒÄ¸ËD$‹HPPQR‹P`H ‹D$Q‹L$R‹T$PQRè¨VƒÄ¸øÖFøØè†Ýÿÿ‹„$èV‹´$à…Àu‹‹@ƒàƒøtƒøu!‹N`‹”$äQRè@XƒÄ¸^ÄØÃ‹Œ$äD$PQèX‹V`D$ RPèÀYL$hØQèñýÿƒÄ¸^ÄØÃU‹l$W‹E‹x‹D$;Çs_¸]ËL$S+ÏV‹t$‰L$ ‹L$3Û+ΉL$ë‹L$‹E`‹URÎR€RPQVè£Z‹D$8߃Ä÷;ØvÎ^[_¸]ËL$‹A`QPƒÁ RQˆ€Q‹L$R‹T$P‹D$$PQRè.[ƒÄ ¸ËL$‹A`‹QƒÁ RQˆ€Q‹L$R‹T$P‹D$$PQRèe­ýÿƒÄ ¸ËD$‹P‹H`RPPƒÀ RP‘€P‹D$ R‹T$ Q‹L$ PQRèJ\ƒÄ$¸øÈ×FÃV‹t$W‹|$‹F`PWè|Ãüÿ‹N`ƒÇÁ€QWèiÃüÿ‹v`¹ ƒÄ¸¾ó¥_^ÃV‹t$W‹|$‹F`PWè,Ãüÿ‹N`WÁ€QRèÃüÿ‹F`ƒÇPWèÃüÿƒÄ¸_^ËD$W‹‹y‹L$;Ïs¸_ËT$SU‹l$V‹t$+×3Û‰T$ +îë‹D$‹P‹@`R .PQVèFÁüÿ‹D$0߃Ä÷;ØvÛ^][¸_ËD$HPP ‹@`Q‹L$R‹T$P‹D$QRPè ]ƒÄ¸ËD$‹HP ‹@`Q‹L$R‹T$P‹D$QRP躩ýÿƒÄ¸ËD$‹HPPQR‹P`H ‹D$Q‹L$R‹T$PQRèX^ƒÄ¸ø¨ØFËD$‹T$‹H`QRè¾ÁüÿƒÄ¸áÜJ…Àu}ÇÜJèˆlüÿèÓcèžcèicè4cèÿbèÊbè•bè`bè+bèöaèÁaèŒaèWaè"aèí`è¸`èƒ`èN`è`èä_è¯_éz_øˆÙFøÃV‹t$W‹|$;÷t‹L$‹ÁÁéó¥‹Èƒáó¤_¸^ÃSUVW‹|$3Û…ÿu_^]3À[Ël$…íu WèüÿƒÄ‹ðë‹õ…öu_^]3À[˃øtƒøt ƒøtu»ë »Dë»1‹G‹QèÊáüÿPè˜üÿƒÄƒøt ƒøtu€Ïë€ÏVè™”üÿƒÄƒø@€Ï…íu V蔘üÿƒÄ_^‹Ã][ËD$…Àuèchýÿ‹L$‰÷ØÀƒàÃøuV‹t$ ‹Rè³iýÿƒÄǸ^øËD$ ‹L$‹T$hÚFPQRèçýÿƒÄËD$‹L$hÚFPQè|'ýÿƒÄ ËD$‹L$ ‹T$P‹D$QRPh<ÚFhÀíAèÝaƒÄËD$‹L$ ‹T$P‹D$QRPhtÚFhpæBè­aƒÄøèF×ÿÿ‹„$ ‹Œ$SU‹¬$,T$UPQhÜÚFD$ RL$(3ÛPQ‰\$4‰\$(‰\$0‰\$$èÑbƒÄ…Àu ][ÄËT$VW‹|$ ‰T$¾€ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu%‹D$‹”$,L$PQRjèÖþÿƒÄ‰D$é¾ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu%‹D$‹”$,L$PQRjtè}þÿƒÄ‰D$éD¾ÐÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu5‹D$L$PQSèmþÿ‹ðƒÄ ;ó„ùVèšþÿV‰D$èpþÿƒÄéÛ¾¸ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ã…©‹D$L$PQSè`þÿ‹øƒÄ ;û„Œ‹„$0U;ÃSht T$0RÿÐë D$0Pè>`ƒÄ;à jfh ÚFjhë^L$$PQWèÀpW‹ðèHþÿƒÄ;ót:VèÛþÿ‹¼$0ƒÄ‹è;û‰l$t‹;Ãt Pè;•üÿƒÄ‰/VèþÿƒÄ9\$ujuh ÚFj jgj èUküÿƒÄ‹T$ RèÈüÿ‹D$ Pè¾üÿ‹D$ƒÄ_^][Äø@è–ÔÿÿSUV‹t$\3ÀW…öt ‹\$T¸‰3ë ‹\$T‹ ‰L$`‹ñ‹L$X…É„)‹~@ƒÿ@vhÛFjRhÛFèÚÂüÿƒÄ ‹l$\;ý}.‹T$d{RVWèëüÿ‹D$dUPWè$ìüÿs4K8VQWè6ìüÿƒÄ$ë5ƒý@vhìÚFj\hÛFè‹ÂüÿƒÄ ‹t$X‹Í‹Ñ{8Áéó¥‹Êƒáó¤s4‰.‹6ƒþ@t¹@3À+Î|8‹ÑÁéó«‹Êƒáóª‹t$`3ÀŠL8€ñ6ˆL@ƒø@|ï‹l$d{UVWèdêüÿ‹V@D$RPWè…ëüÿƒÄ3ÀŠL8€ñ\ˆL@ƒø@|ï{$UVWè4êüÿ‹V@D$RPWèUëüÿƒÄKƒÃQSèåëüÿƒÄ_^][ƒÄ@Ã…Àtäé{ÿÿÿ‹D$ ‹T$‹L$PƒÂQRèëüÿƒÄ ø$èÓÿÿVW‹|$0D$0L$PwQVè ëüÿƒÇ$WVèƒëüÿ‹T$DD$RPVèÓêüÿ‹L$X‹T$TQRVèãêüÿƒÄ,_^ƒÄ$ÃV‹t$FPèRéüÿN$QèIéüÿƒÆVè@éüÿƒÄ ^ÃW‹|$GPè²íüÿO$Qè©íüÿWRè íüÿ¹3ÀƒÄ ó«_ËD$PhJèAÍýÿƒÄËL$‹A…Àt‹T$RT$jRQÿЃÄ…Àt‹D$Ãh€h4ÛFh’h¹j&èohüÿƒÄ3ÀøhÍIËL$V3ÀW‹q ‹L$ƒéug‹D$ƒøuOjèlmPVè%‹øƒÄ …ÿuh‚hxÛFjgjfj èhüÿƒÄ‹Ç_^ÃèZmPÿFjPVèêƒÄ_^ËT$PRVèØƒÄ _^ÃVWh•hxÛFjè½yüÿ‹ð3ÿƒÄ ;÷u_3À^ÃèHGýÿ;ljuVè|üÿƒÄ3À_^ËD$ ‰~‰~‰~ ‰~‰p _¸^ËD$VW3ÿ‹p ‹F…À~‹N‹¹…Àt PèÎ{üÿƒÄ‹FG;ø|å‹F…Àt Pè¶{üÿƒÄ‹F …Àt Pè¦{üÿƒÄ‹…Àt Pè÷FýÿƒÄVèŽ{üÿƒÄ_^ø èvÐÿÿ‹D$SUV…ÀW„°€8„§‹\$ ‰D$$‰D$Š€ù;t„É…b‹|$$‹èH+ï‰|$‰L$$tÜ‹C3ö…À~‹SUW‹²PÿüF‹CƒÄ F;ð|æ‹K‹CA;Á¾ƒÀ hÐhxÛF‰C…Rè^xüÿ‹ø‹ChÒhxÛFÁàP‰|$,èBxüÿƒÄ‰D$ …ÿ„â…À„Ú‹K‹s Øÿÿÿ‹ÑÁéó¥‹Êƒáó¤‹K‹s ‹ø Øÿÿÿ‹ÑÁéó¥‹Êƒáó¤‹K…Ét Qèfzüÿ‹D$$ƒÄ‹K …Ét QèRzüÿ‹D$$ƒÄ‹L$‹|$‰K‰C ‹S‹C ‹L$(hä‰ UhxÛFRèwüÿ‹K‹SƒÄ ‰Š‹C‹K‹…ÀtfUWPÿ0F‹S‹CƒÄ ‹ Æ)‹C@‰C‹D$€8t@‰D$é€þÿÿhÕhxÛFjAë_^]¸[ƒÄ Ãh»hxÛFjqjdj è!eüÿƒÄ_^]3À[ƒÄ ø´è†ÎÿÿUW‹¼$È3í;ý‰l$ u _3À]ĴË„$ÄVƒø‰D$u!D$tL$ ‰D$ ‰¼$ˆ‰L$ÇD$ õIë%ƒø…T$0D$ ‰T$ ‰|$8‰D$ÇD$ ÔÒHSè+Dýÿ‹ð;õu4hhxÛFjjgj èpdüÿƒÄ…ö[t VèBDýÿƒÄ‹D$^_]ĴËŒ$ÈW‹Y ètüÿ‰D$‹CƒÄ;Å~Æ‹SƒÉÿ3À‹<ªò®÷уÁQVè:DýÿƒÄ…À„H‹D$‹S‹L$jP‹ªQ‹NPhÛFQÿF‹F”$¸RP¿ÿ FƒÄ …ÀŒ‹„$̃øu!‹K ‹F‹©‹Œ$ÈRPQè÷ƒÄ …Àteë$ƒøu‹S ‹N‹ª‹”$ÈPQRèQƒÄ …Àt?‹D$‹S‹L$WP‹ªQ‹NPhÛFQÿF‹F”$¸RPGÿ FƒÄ …ÀpÿÿÿhHhxÛFj jè¸üÿ‹¼$ØL$,Q‹W‹BPè¬üÿƒÄƒøÿt‹OP‹QRè»­üÿƒÄ‹øë3ÿhLhxÛFj jèÏ·üÿƒÄ…ÿu"‹CE;茙þÿÿéZþÿÿh+hxÛFjAé=þÿÿ‹„$Ô‹ÇD$‰‹W‰Pé+þÿÿhhxÛFjpjgj èƒbüÿ‹D$$ƒÄ^_]ĴøÍIËL$3ÀIVu\‹D$ƒøuUè¸gPÿFƒÄ…ÀjtP‹D$Pë è{g‹L$ PQèp‹ðƒÄ ÷Þö÷Þ…öujrh¸ÛFjhjej èÿaüÿƒÄ‹Æ^Ãøu‹T$P‹D$ RPè3ƒÄ ÷ØÀ^÷ØÃ‹L$‹T$PQRèƒÄ ÷ØÀ^÷ØÃ¸è&ËÿÿSV‹t$3Û…öÇD$u ^¸[YÃUW貦ýÿPèLžýÿ‹øƒÄ…ÿ„VjjlW蔢ýÿƒÄ…ÀŽ‹D$ ƒø… jjjWèÀf‹ðƒÄ…öt1‹l$‹EVPèyhýÿƒÄ…ÀtRVCè wüÿjjjWèf‹ðƒÄ…öuÓè±büÿ%ÿƒølu…Û~ èÞaüÿ‰\$ëh¢h¸ÛFj joj èÓ`üÿƒÄ…öt Vè¶vüÿƒÄ…ÿt Wè9žýÿƒÄ‹D$_]^[YÃøu:jWèï`ýÿ‹ðƒÄ…öuh³h¸ÛFj 묋L$V‹QRèÊgýÿƒÄ…Àt£‰D$ëh¼h¸ÛFjdjoj èX`üÿƒÄëhŽh¸ÛFjjoj è>`üÿƒÄésÿÿÿ¸è¦ÉÿÿSV‹t$3Û…öÇD$u ^¸[YÃUWè2¥ýÿPèÌœýÿ‹øƒÄ…ÿ„VjjlWè¡ýÿƒÄ…ÀŽ‹D$ ƒø… jjjWèÀñÿÿ‹ðƒÄ…öt1‹l$‹EVPèéhýÿƒÄ…ÀtRVCè nýÿjjjWèñÿÿ‹ðƒÄ…öuÓè1aüÿ%ÿƒølu…Û~ è^`üÿ‰\$ëhåh¸ÛFj jpj èS_üÿƒÄ…öt Vè¶mýÿƒÄ…ÿt W蹜ýÿƒÄ‹D$_]^[YÃøu:jWè_ýÿ‹ðƒÄ…öuhöh¸ÛFj 묋L$V‹QRè:hýÿƒÄ…Àt£‰D$ëhÿh¸ÛFjdjpj èØ^üÿƒÄëhÑh¸ÛFjjpj è¾^üÿƒÄésÿÿÿ‹D$ U3íVƒøWt‹L$P‹D$PQèâüÿÿƒÄ _^]ËT$hÔÒHRèì¢ýÿ‹ðƒÄ…öuhh¸ÛFjë'jjjVèÉdV‹øèÑ›ýÿƒÄ…ÿu!hh¸ÛFj h„j è2^üÿƒÄ3À_^]ÃSW3ÛèШüÿƒÄ…À~KSWèÒ¨üÿ‹ðƒÄ‹…ÀtP‹D$‹HQèIeýÿƒÄE‹v…öt‹T$V‹BPè gýÿƒÄEWCè…¨üÿƒÄ;Ø|µh ÞEWèó§üÿƒÄ‹Å[_^]øè&ÇÿÿVƒÎÿè}´ýÿ…À‰D$uƒÈÿ^YËD$L$PT$QRè´ýÿƒÄ …Àt‹D$ ‹T$PR‹H<‹D$‹T$PRÿQ ƒÄ‹ð‹D$Pè;´ýÿƒÄ‹Æ^YËT$W¹3ÀzTÇó«z¹ƒÂó«‰_‰B‰B‰B ¸ÃSU‹l$V…íW„ ‹\$‹S…ÀtO (ƒù‚‘‹t$¹+È<‹ÁRÁéó¥‹ÈSƒáó¤è¤‹‹T$ ¹ƒÄ+Èl(ðÑljT$¿;ïr"‹õÁî‹D$PSèk‹T$ ƒÄ×+ïN‰T$uã‹t$‹Í‹Ñ{Áéó¥‹Êƒáó¤‰+_^]¸[Ët$‹Í<‹ÑÁéó¥‹Êƒáó¤‹_Å^‰]¸[øÌè†Åÿÿ‹Œ$ÐSUVqATW|$\‹N<3í‰L$Œ$œ+È+ø‰D$‰L$+ð‹œ$ä‹3ɉTÀŠ +‹\$3щ ‰‹T$3ʃÀ‹¼ÍI‹Lü3ÊE‰Lüƒý‰L$|¾3É3öD$ º‹ ¼ÍI‹xü3ù‹Ï‰xü‹(ƒÀ ‹ ¼ÍI3é‹Í‰hà‹Xä‹ ¼ÍI3ًˉXä‹xè‹ ¼ÍI3ù‹Ï‰xè‹hì‹ ¼ÍI3é‹Í‰hì‹Xð‹ ¼ÍI3ًˉXð‹xô‹ ¼ÍI3ù‹Ï‰xô‹hø‹ ¼ÍI3éJ‰hø‹Í…oÿÿÿÎáÿFƒþŒTÿÿÿ‹|$¹t$T$hÀRó¥è#ûüÿƒÄ_^][ÄÌÃU‹l$ V‹UET‰D$¸+ƒúu}(SŠØ¹ŠûW+Ê‹Ã<2‹ÑÁàf‹ÃÁéó«‹Êƒáóª_[VUèRþÿÿƒÄ3ÀMŠƒÁˆ0@ƒø|òVUè5þÿÿ‹L$‹t$ƒÄ3ÀŠƒÁˆ0@ƒø|ò^¸]ÃSU‹l$3ÀVW…ítS‹\$‹‹x ƒÿvhÜFj]høÛFè²üÿƒÄ sWVUè$ƒÄ ;Çt_^]ƒÈÿ[Ã…À~‹Ï{ ‹ÑÁéó¥‹Êƒáó¤_^][ÃS‹\$ 3À…Ût4VW‹|$‹‹p ƒþvh$ÜFjnhøÛFè”±üÿƒÄ ƒÇVWSèV#ƒÄ _^[øèÖÂÿÿ‹D$(‹T$SUVƒøW‰T$,….‹\$4ƒú‚‹l$(Áê‰T$4‹t$$|$+ó‹Ã+û¹Š2@IˆTÿuó‹D$0L$PUQè• ‹Õ‹Ã‹t$8ƒÄ ‹ ‰‹J‰H‹J‰H‹R ‰P ‹T$$¸+ðÐè‹D$4H‰t$,‰T$$‰D$4u‹Ö…Ò„šv'‹t$$|$+ó‹Ã+û‰T$$Š 02@ˆL8ÿ‹L$$I‰L$$uëƒús¹|+Ê4‹ÑÁéó¥‹Êƒáó¤‹D$0L$PT$QRèê‹D$‹L$ ‹T$$‹t$(‰E‰M‰U‰u ƒÄ ‰‰K‰S‰s _^][ƒÄËl$(é_ÿÿÿ‹\$4ƒú‚ü‹t$(‹|$$Áê‰T$4‹Ç‹‰L$‹P‰T$‹H‰L$‹P ‹D$0PVW‰T$(è‹ËƒÄ ‹Æ+νŠ0@Mu÷‹L$‹T$‹Ã‹l$,ƒíƒÇ‰‹L$ƒÆ‰l$,‰P‹T$‰H‰P ‹D$4H‰D$4u‡‹Õ…Òtf‹‹O‹W‰D$‹G ‰L$‹L$0‰T$‰D$T$QD$RPè• ‹|$8ƒÄ …ÿv‹Ã+ÆŠ Š2шFOuó‹T$‹D$‹L$‰‹T$‰C‰K‰S _^][ƒÄËt$(‹|$$ë„‹L$‹D$SUV‹1…À‹D$WtT…À„•‹|$$‹\$‹l$‰D$…öu‹D$ PWWèR‹L$4ƒÄ ŠEŠ>2ˆCˆ>‹D$EFƒæH‰D$uˉ1_^][Ã…ÀtE‹|$$‹\$‹l$‰D$…öu‹L$ QWWè‹L$4ƒÄ ŠEŠ>2ЈCEˆ>‹D$FƒæH‰D$uˉ1_^][ËD$‹L$‹T$ƒø‹D$ PQRu è³ƒÄ ÃèZ ƒÄ ËL$‹D$ V‹1…ÀtKS‹\$ U‹l$ W‹|$‰D$…öu‹D$ PUUèn‹L$4ƒÄ Š.Š2ЋD$ˆGCFƒæH‰D$uÏ_]‰1[^É1^ÃSV‹t$ W…ö„©‹T$…Ò„‹\$û€t!ûÀtût _^¸þÿÿÿ[Ãû€u Ç‚ð ëûÀu Ç‚ð ë Ç‚ð‹‹ÈÁÉáÿÿÁÀ%ÿÿ ȉ ‹~‹ÇJÁÈ%ÿÿÁÇçÿÿ lj‹~‹ÇÁÈ%ÿÿÁÇçÿÿ ljB‹~ ‹ÇÁÈ%ÿÿÁÇçÿÿ Çû€‰B …”¿8G‹q3À‹Ö3Û‰T$ŠÆŠ\$ƒÇ‹…8ìF‹8ìF%ÿãÿ3ËÚÁëâÿ‹8ìF‹•8ìFãÿ3Ë_üâÿ3‹Qü3‹3ÉA 3‹Q‰A3ЉQ3Öÿ`G‰Q„<ƒÁéqÿÿÿ‹~‹ÇÁÈ%ÿÿÁÇçÿÿ ljB‹~‹ÇÁÈ%ÿÿÁÇçÿÿ ÇûÀ‰B…§¾8G‹Q3À‰T$3ÛŠ\$ŠÆƒÆ‹…8ìF‹<8ìF%ÿçÿ3Ç‹úÁïâÿ‹^ü‹<½8ìF‹•8ìFçÿ3Çâÿ3‹Qü3‹3ÉA3ЋA‰Q3‹Q3ÐþXG‰A‰Q „e‹A ‹Ú‹Q3Ã3ЉA$‰Q(ƒÁé^ÿÿÿ‹~‹ÇÁÈ%ÿÿÁÇçÿÿ ljB‹v‹ÆÁÈ%ÿÿÁÆæÿÿ Æû‰B… ‹Á¿8G‹P3ɉT$3ÛŠ\$ŠÎƒÇ‹ 8ìF‹48ìFáÿæÿ3΋òÁîâÿ‹_ü‹4µ8ìF‹•8ìFæÿ3Îâÿ3Ê‹Pü3Ê‹3ˉH3Ñ‹H‰P 3Ê‹P3ÑÿTG‰H$‰P(t}‹Ê3Ò‰L$ŠT$‹4•8ìF3ÒŠÕæÿ‹•8ìFâÿ3ò‹ÑÁêáÿ‹•8ìF‹ 8ìFâÿ3ò‹Páÿ3ñ‹H 3ñ‹H3Ö‰p,‰P03Ê‹P‰H43ʉH8ƒÀ éþþÿÿ_^3À[Ã_^ƒÈÿ[ËD$‹L$U‹l$UPQè+üÿÿƒÄ …ÀŒT‹•ðSV3öÁâ…ÒW~CL•E‹Yø‹xø‰Xø‰yø‹Yü‹xü‰Xü‰yü‹‹8‰‰9‹Y‹x‰X‰yƒÆƒêƒÀƒé;ò|Ä‹…ð¾;ÆŽçE‹HƒÀ3Û‰L$ŠÝ3ÒŠT$‹<8ìF‹•8ìFçÿâÿ‹½8øF‹ù‹•8ôFáÿÁï‹ 8ìF3Ó‹<½8ìFáÿçÿ‹½8ðF3Ó‹8üF‹Hü3Ó3Û‰PøŠÝ‰L$3Ò‹<8ìFŠT$çÿ‹•8ìF‹½8øF‹ùÁïâÿáÿ‹<½8ìF‹•8ôF‹ 8ìFçÿ3Óáÿ‹½8ðF3Ó‹8üF‹3Ó3Û‰PüŠÝ‰L$3Ò‹<8ìFŠT$çÿ‹•8ìF‹½8øF‹ùÁïâÿáÿ‹<½8ìF‹•8ôF‹ 8ìFçÿ3Óáÿ‹½8ðF3Ó‹8üF‹H3Ó‰‰L$3ÒŠT$‹•8ìF3ÛâÿŠÝ‹•8ôF‹<8ìFçÿ‹½8øF‹ùÁïáÿ3Ó‹<½8ìF‹ 8ìFçÿáÿ‹½8ðF‹<8üF3Ó3×F‰P‹ð;ñŒþÿÿ_^3À[]øèÖ¸ÿÿS‹\$UV‹W‹|$,‹ÈÁÉ‹7áÿÿÁÀ%ÿÿ È‹C3΋ðÁÎæÿÿ‰L$ÁÀ%ÿÿ ð‹G3ð‹C‹Ð‹[ ÁÊâÿÿ‰t$,ÁÀ%ÿÿ ЋG3ЋÃÁÈ%ÿÿ‰T$ÁÃãÿÿ Ë_ 3Ã3ÛŠÞ‰D$Áî‹8äF3ÛŠ\$.‹,8àF‹ÙÁë3Õ‹,8ÜF‹Øãÿ3Õ‹,8èF3ÛŠÜ3Õ‹o3ÀŠD$3Õ‹,8äF‰T$‹…8àF‹Á3답8ÜF‹w%ÿ3ë3,…8èF3À3ÛŠD$ŠÝ3î‹…8àF‹ 8äF3Á‹L$Áé‰l$$‹48ÜF‹L$,3Æ‹ñæÿ‹µ8èF3Ë_3Ã3ۊ݉D$,‹ 8äF3ÛŠ\$‹48àF3΋t$Á8ÜF‹t$æÿ3Ë‹µ8èF‹w3Ë3Îw ‹¿ð‰L$ÑÿO„0‹ï3Ò3ÛŠ\$&ŠÔ‹<•8äF‹8àF3ú‹T$‹ÚÁë3<8ÜF‹Ùãÿ3<8èF‹3û3ۊ݉|$‹ 8äF3ÛŠ\$.‹<8àF3Ï‹|$$Á8ÜF‹úçÿ3Ë‹½8èF‹~3Ë3Û3ÏŠÞ‰L$,3ÉŠL$‹8äF‹ 8àF3Ê‹ÐÁê%ÿ‹<•8ÜF‹T$$3Ï‹úçÿ‹½8èF3Ë‹^3Ë3ÛŠÞ‰L$‹8äF3ÛŠ\$‹<8àF3׋|$Á8ÜF‹~ 3Ó‹…8èF3Ó3À3ÛŠÅŠ\$.3׋<…8äF‰T$‹8àF3ø‹D$‹ØÁë3<8ÜF‹ÚãÿƒÆ 3<8èF‹^ð3û3ÛŠÞ3ÒŠT$‰|$‹<8äF‹•8àF‹T$,Áê3û‹•8ÜF‹Ðâÿ3û‹•8èF3ÒŠT$3û‹^ô3û3ÛŠÜ‹•8àF‰|$$‹8äF3‹ÑÁêáÿ‹<•8ÜF‹T$,3Ç‹úçÿ‹½8èF‹~ø3Ã3ÛŠÞ3ÒŠT$3Ç‹<8äF‰D$,‹•8àF‹T$Áê3û‹•8ÜF‹8èF3û‹^ü3ú3ûM‹Ï‰L$…Úýÿÿ‹T$‹l$$3ÛŠ\$&Áí‹<8ìF3ÛŠÜçÿ‹8ìFãÿ3û‹ÚÁë‹8ìFãÿ3û‹Ùãÿ‹8ìFãÿ3û‹3û‹ßÁËãÿÿÁÇçÿÿ ß‹|$(‰3ÛŠ\$.‹<8ìF3ÛŠÝçÿ‹8ìFãÿ3û‹­8ìFãÿ‹l$(3û‹Úãÿ‹8ìFãÿ3û‹^3û‹ßÁËãÿÿÁÇçÿÿ ߉]3ÛŠ\$‹<8ìF3ÛŠÞçÿ‹8ìFâÿ3ú‹ÐÁê‹•8ìFâÿ3ú‹T$$‹Úãÿ‹8ìFãÿ3û‹^3û‹ßÁËãÿÿ%ÿÁÇçÿÿ ߉]3ÛŠ\$Áé‹<8ìF3Û‹ 8ìFŠÞçÿáÿ‹8ìFâÿ3ú‹…8ìF3ùâÿ3ú‹V 3ú‹ÇÁÈ%ÿÿÁÇçÿÿ Ç_‰E ^][ƒÄøè&³ÿÿS‹\$UV‹W‹|$0‹ÐÁÊ‹7âÿÿÁÀ%ÿÿ‹K ЋC3Ö‹ðÁÎæÿÿ‹[ ÁÀ%ÿÿ‰T$ ð‹G3ð‹ÁÁÈ%ÿÿ‰t$ÁÁáÿÿ Á‹O3Á‹ËÁÉáÿÿ‰D$(ÁÃãÿÿ Ë‹_ 3Ë3Û‰L$03ÉŠL$2ŠÜ‹8ôF‹ 8øF3Á‹ÊÁé‹8ðF‹Îáÿ3ÃÁî‹8üF‹O3Ã3ÛŠ\$3Á3ɉD$ ŠL$1‹,8ôF‹µ8ðF‹t$(‹ 8øFæÿ3Í3Ë‹µ8üF‹w3Ë3Î3Û‰L$3ÉŠL$ŠÞ‹T$(‹ 8ôF‹,8øFÁê3Í‹,•8ðF‹T$0âÿ3Í‹o‹4•8üF3ÒŠT$3Î3Í‹•8øF‹T$0‰L$3ÉŠL$*Áê‹ 8ôF‹,•8ðF‹T$âÿ3Ë3Í‹o‹4•8üF3Îw ‹¿ð3ÍÑÿO‰L$0„8‹ï3Ò3ÉŠT$ŠL$2‹<•8øF‹ 8ôF‹Ð3ÏÁê‹<•8ðF‹T$3Ï‹úçÿ‹½8üF3Ë‹3Ë3ÛŠ\$"‰L$3ÉŠL$1‹<8ôF‹ 8øF3Ï‹úÁ8ðF‹|$çÿ3Ë‹½8üF3Ë‹^3Ë3Û‰L$3ÉŠL$ŠÜ%ÿ‹ 8ôF‹<8øF3Ï‹|$Á8ðF‹|$0çÿ3Ë‹½8üF‹~3Ë3Û3ÏŠÞ‰L$(3ÉŠL$‹8øF‹ 8ôF3Ê‹T$0Áê‹•8ðF‹…8üF3Ë‹^ 3Ê3À3Ë3ÒŠT$)‰L$0ŠD$2‹<•8øF‹T$‹…8ôF3Ç‹úÁïƒÆ ‹½8ðF‹|$3ËßãÿÁï38üF‹^ð3Ã3ÛŠÝ3ÉŠL$‰D$ ‹8øF38ôF‹ ½8ðF3Ù‹L$(áÿ‹<8üF3ÉŠL$3ß‹~ô3߉\$3ÛŠÞ‹8ôF‹ 8øF‹^ø3Ñ‹L$(Áé‹<8ðF‹L$0áÿ3׋<8üF3ÉŠL$3×3Ó‹^ü‹<8øF‹L$0‰T$3ÒŠT$*Áé‹•8ôF3׋<8ðF‹L$3×áÿ38üF3ÓM‹Ê‰L$0…Êýÿÿ3Ò3ÛŠT$2‹l$,‹<•8G‹T$ŠÞçÿ‹8Gãÿ3û‹ØÁë‹8Gãÿ3û‹\$ãÿ‹8Gãÿ3û‹3û‹ßÁËãÿÿÁÇçÿÿ ߉]3ÛŠ\$"‹<8G3ÛŠÝçÿ‹8Gãÿ3û‹\$Áë‹8Gãÿ3û‹ÚãÿÁê‹8Gãÿ3û‹^3û‹ßÁËãÿÿÁÇçÿÿ ߉]3ÛŠ\$‹•8Gâÿ‹<8G3ÛŠÜçÿ‹8Gãÿ3û3ú‹Ñâÿ‹•8Gâÿ3ú‹V3ú‹×ÁÊâÿÿÁÇçÿÿ%ÿ ׉U3ÒŠT$Áé‹<•8G3ÒŠT$‹ 8Gçÿáÿ‹•8Gâÿ3ú‹…8G3ùâÿ3ú‹V 3ú‹ÇÁÈ%ÿÿÁÇçÿÿ Ç_‰E ^][ƒÄøèf­ÿÿ‹D$ SUV…ÀW„Ê‹\$,3É3À3ÒŠ ŠcC ÈC3ÀŠŠCÁâ ÊCÁà ÈC3À3ÒŠŠsC ÂC3ÒŠÁâ ÂC3ÒŠƒëÁâ ‹T$$ƒÂø‰D$,…ÒŒ3B‹t$ Áè‹|$‰D$0÷؉D$$3À3ÒŠŠwG ÂG3ÒŠÁâ ÂG3ÒŠÁâ ÂG3Ò3ÁŠG‹ê3ÒŠ7‰D$ êG3Ò‹D$(ŠL$Áâ êG3ÒPŠQÁâ ê‹T$43êG‰l$è‹D$ƒÄˆ‹ÐF‹ÈÁꈋÐFÁêˆFÁ舋D$F‹ÐÁêˆF‰D$,ˆ‹ÐFÁêˆFÁ舋D$0FH‰D$0…Lÿÿÿ‹T$$‹D$,ƒúø„U|ƒÂ‰|$3ÿ3íƒú‰|$ ‡Øÿ$•€™E‹l$3ÒMŠU‹ú3ÒŠUÿÁçMÁâ úM3ÒŠu úM3ÒŠU ú‰|$ ë_‹t$ ‹|$ëš‹l$3ÒMŠUÁâ úM3ÒŠu úM3ÒŠU ú‰|$ ë0‹l$3ÒMŠu úM3ÒŠU ú‰|$ ë‹l$3ÒMŠU ú‰|$ ë‹l$M3Ò‰l$ŠU‹êÁå‹|$3ÒOŠÁâ êO3ÒŠ7 êë‹|$3ÒOŠ7 êë‹|$3ÒŠWÿ‹|$ ê3ø‹D$(3éL$PQ‰l$‰|$è+‹D$ƒÄˆ‹ÐF‹ÈÁꈋÐFÁêˆFÁ舋D$F‹ÐÁêˆF‰D$,ˆ‹ÐFÁêÁ興F‹D$,ˆ ‹ÑC_ÁꈋÑC^ÁêˆCÁéˆ C‹È‹ÐˆCÁéˆ CÁêÁ興C][ƒÄËl$,3Û3À3ÉŠ]ŠeE ØE3Ò3ÀŠMŠUÁá ÙEÁâŠE ÚE3ÉE3ÒŠmŠU ÁEÁâ ‹T$$E3ÉŠMƒíÁá ÁJø…ɉD$,‰L$$ŒùA‹|$ Áè‹t$‰D$0÷ØÁ‰D$$3À3ÉŠŠnF ÁF3Ò3ÉŠŠNÁâ ÂFÁá ÁF‰D$‰D$3À3ÒŠŠvF ÂF3É3ÒŠŠVÁá ÁFÁâ ÂL$‰D$ ‰D$‹D$(FPQè)‹L$‹Ã‹\$3Á‹L$4ƒÄ3ˈ‹ÐGÁꈋÐG‹\$ÁêˆGÁèˆG‹Á‹ÑˆGÁ舋D$ G‰D$,‹D$0ÁêˆGÁéˆGH‰D$0…;ÿÿÿ‹D$,‹L$$ƒùø„È3À3ÉŠŠnF ÁF3Ò3ÉŠŠNÁâ ÂFÁá ÁF‰D$‰D$3À3ÒŠŠvF ÂF3É‹T$(ŠnRŠÁá Á‰D$$‰D$D$Pè\‹D$‹L$,‹t$3Ø‹D$4|ƒÁƒÄ3ƃùw=ÿ$ ™E‹ÈOÁ鈋ÐOÁꈋÈOÁéˆOˆ‹ÓOÁꈋÃOÁ舋ËOÁ鈈_ÿ‹T$ ‹\$‰T$,‹Âˆ]‹ËE‹ÓÁéˆMEÁêˆUEÁëˆ]E‹È‹ÐˆEEÁéˆMEÁêÁèˆU_ˆE^][ƒÄË|$ ‹t$éâþÿÿk–E^–EG–E4–E"–E–Eã•E©•E!™E™E™E ™E™Eþ˜Eö˜Eî˜E¸èÖ§ÿÿ‹D$ SU‹l$V‹0W‹x‹Î‹×áÿÿâÿÿÁîÁïÇD$ÇD$‹Ç‹ß÷Ð#Æ#ÚË]ËßÁƒÅ%ÿÿƒÅ‹ÈÀÁé ȃÅ‹Á#Ù÷Ð#ƒÅË]ôÃÆ%ÿÿ‹ðÁîÁà ð‹Æ‹Þ÷Ð#Ç#ÙË]øÃÂ%ÿÿ‹ÐÁê Áà Ћ‹Ú÷Ð#Á#ÞË]üÃÇ%ÿÿ‹øÁï Áà ø‹D$H‰D$…^ÿÿÿ‹D$H‰D$t<‹\$3Àƒû‹ß”ÀƒÀƒã?‰D$‹D$  ˜‹Ùƒã?4˜‹Þƒã?˜‹Úƒã?<˜éÿÿÿ‹D$áÿÿÁæÁçâÿÿ ñ ú‰0‰x_^][ƒÄøèv¦ÿÿ‹D$ S‹\$UV‹pW‹8‹Ï‹Æáÿÿ%ÿÿÁïÁîÇD$º«ü‹ÞƒíÁã Áî Þ‹ð÷Ö#ñƒí+Þ‹ð#÷ƒí+Þ‹u +Þƒíãÿÿ‹ó‹ØÁã Áè Ø‹Ç÷Ð#Æ+Ø‹Ç#Á+Ø‹E +Øãÿÿ‹Ã‹ßÁãÁï ß‹ù÷×#ø+ß‹þ#ù+ß‹}+ßãÿÿ‹û‹ÙÁãÑé Ù‹Î÷Ñ#Ï+Ù‹Î#È+Ù‹M+ÙãÿÿJ‹Ë…Zÿÿÿ‹T$J‰T$tW‹\$3Òƒû‹Ø”ƒÂƒã?‰T$‹T$ +4š‹ßƒã?æÿÿ+š‹Ùƒã?%ÿÿ+<š‹Þƒã?çÿÿ+ š‹T$áÿÿéøþÿÿÁçáÿÿ%ÿÿ ù‹L$Áæ ð‰9‰q_^][ƒÄøèö¤ÿÿ‹T$ ‹D$$SUV‹2…À‹D$ W„ã…À„´‹|$,‹\$‰D$$…ö…”o3ÉŠ‹Å3ÒŠ0 Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@‰L$3ÉŠ@3ÒŠ0 Ê@3ÒŠpŠ‹D$(Áâ ÑL$PQ‰T$èüÿÿ‹L$‹Å‹ÑˆÁꈃċÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈋T$0ˆHŠŠ >2Á‹L$ CˆAˆ>‹D$$F‰L$ ƒæH‰D$$…;ÿÿÿ‰2_^][ƒÄÃ…À„Ñ‹|$,‹\$‰D$$…ö…”o3ÉŠ‹Å3ÒŠ0 Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@‰L$3ÉŠ@3ÒŠ0 Ê@3ÒŠpŠ‹D$(Áâ ÑL$PQ‰T$èªûÿÿ‹L$‹Å‹ÑˆÁꈃċÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈋T$0ˆHŠŠ >ˆ>2Á‹L$ Cˆ‹D$$AFƒæH‰L$ ‰D$$…;ÿÿÿ‰2_^][ƒÄøè£ÿÿ‹D$ 3É3ÒŠŠp@ Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@‰L$3ÉŠ@3ÒŠ0 Ê@3ÒŠpŠ‹D$Áâ Ñ…À‰T$t‹D$L$PQèÊúÿÿë‹T$D$RPèüÿÿ‹D$‹L$ƒÄ‹Ñˆ@ÁꈋÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈈HƒÄøèF¢ÿÿ‹D$0SU‹l$4VW‹8u3À3ÉŠEŠ.‰t$ ÁF3Ò3ÉÇD$ŠŠNÁâ ÂFÁá ÁF3É3ÒŠŠvF ÊF3ҋ؈D$ŠvŠÁâÁë ʈ\$‹Ð‹ØÁèˆD$‹ÁÁèˆD$‹ÁÁèˆD$‹D$4‰L$$ˆL$ÁëÁé…À‰T$ ˆ\$ˆL$„è‹t$0‹\$,‹L$$‰D$<…ÿua‹L$8T$ QRèœùÿÿ‹T$(ƒÄ‹Â‹ÊÁèˆD$‹ÂÁéˆL$‹L$$ÁèˆD$‹ÁÁèˆD$‹ÁÁèˆD$‹ÁÁèˆD$‹D$@ˆT$ˆL$‰D$ŠD<2FCGˆFÿ‹D$<ƒçH‰D$ÿÿÿ‹l$4‹D$‹T$,‹Ëƒúø„Ê3Û3ÉŠŠNÁãF3ÒÁáŠv ÙF ÚF3À3É3ÒŠ ØF3À‰\$ŠŠNÁàFÁáŠv ÁŠVF ÂL$‰D$(‰D$‹D$0PQè‹L$@‹T$$‹D$‹t$ 3Ê‹T$4ƒÄ3Æ|ƒÂƒúw9ÿ$•ЯEOˆ‹ÑOÁꈋÑOÁêˆOÁéˆOˆ‹ÈOÁ鈋ÐOÁêˆÁèˆGÿ‹D$(‰\$‰D$8‹È‹Ã‹Ð_ÁêˆU‹ÐE^ÁêˆU‹ÐEÁêˆUE‹ÑˆE‹ÁEÁèˆEEÁêˆU‹ÁEÁèˆEˆM][ƒÄË|$(‹t$$éÜþÿÿy¬Eo¬Eh¬Ea¬EO¬E=¬E.¬E%¬EH¯E@¯E8¯E5¯E/¯E'¯E¯E¯E¸覑ÿÿ‹D$SUV‹‹p‹D$‹ÓÁê‹(W‹Í‹þ¯ÊÁï…Ét‹ÑáÿÿÁê+Ê‹ÑÁêë¹+̓À+Êæÿÿ‰L$‹ƒÀÚ‹ƒÀú‰\$‹‹ê¯î…ít‹ÕåÿÿÁê+ê‹ÕÁê+êë ½+ê+îƒÀ‹÷3ñ‹æÿÿ‹Ñ¯Ö…Òt‹ÊâÿÿÁé+Ñ‹ÊÁé+Ñë º+Ñ+Ö‹H‹õ3óƒÀòæÿÿ¯Î…Ét‹ñáÿÿÁî+΋ñÁî+Î당+Ë‹\$+΋ñÑ3÷‹|$ƒÀ3ê3Ó3Ï‹8‹Úáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñåÿÿ÷‹ƒÀÙ‰T$‹‰\$‹Ù¯Ý…Ût‹ÓãÿÿÁê+Ú‹ËÁé+Ùë »+Ù+Ý‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋h‹ûƒÀ+Ñ3þ‹Íúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Í‹l$+Ï‹|$Ñ3ÚƒÀ3Ö‹ñ3Ï‹83õ‹êáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñãÿÿ÷‹ƒÀé‰T$‹‰l$‹é¯ë…ít‹ÕåÿÿÁê+ê‹ÍÁé+éë ½+é+ë‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋X‹ýƒÀ+Ñ3þ‹Ëúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Ë‹\$+Ï‹|$Ñ3êƒÀ3Ö‹ñ3Ï‹83ó‹Úáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñåÿÿ÷‹ƒÀÙ‰T$‹‰\$‹Ù¯Ý…Ût‹ÓãÿÿÁê+Ú‹ËÁé+Ùë »+Ù+Ý‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋h‹ûƒÀ+Ñ3þ‹Íúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Í‹l$+Ï‹|$Ñ3ÚƒÀ3Ö‹ñ3Ï‹83õ‹êáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñãÿÿ÷‹ƒÀé‰T$‹‰l$‹é¯ë…ít‹ÕåÿÿÁê+ê‹ÍÁé+éë ½+é+ë‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋X‹ýƒÀ+Ñ3þ‹Ëúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Ë‹\$+Ï‹|$Ñ3êƒÀ3Ö‹ñ3Ï‹83ó‹Úáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñåÿÿ÷‹ƒÀÙ‰T$‹‰\$‹Ù¯Ý…Ût‹ÓãÿÿÁê+Ú‹ËÁé+Ùë »+Ù+Ý‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋h‹ûƒÀ+Ñ3þ‹Íúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Í‹l$+Ï‹|$Ñ3ÚƒÀ3Ö‹ñ3Ï‹83õ‹êáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñãÿÿ÷‹ƒÀé‰T$‹‰l$‹é¯ë…ít‹ÕåÿÿÁê+ê‹ÍÁé+éë ½+é+ë‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋X‹ýƒÀ+Ñ3þ‹Ëúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Ë‹\$+Ï‹|$Ñ3êƒÀ3Ö‹ñ3Ï‹83ó‹Úáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀ+Ñåÿÿ÷‹ƒÀÙ‰T$‹‰\$‹Ù¯Ý…Ût‹ÓãÿÿÁê+Ú‹ËÁé+Ùë »+Ù+Ý‹L$‹|$ƒÀ3Ïáÿÿ‹8‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋h‹ûƒÀ+Ñ3þ‹Íúçÿÿ¯Ï…Ét‹ùáÿÿÁï+Ï‹ùÁïë¹+Í‹l$+Ï‹|$Ñ3ÚƒÀ3Ö‹ñ3Ï‹83õ‹êáÿÿ‹×¯Ñ…Òt‹ÊâÿÿÁé+Ñ‹ÊÁéëº+׋xƒÀƒÀý+Ñãÿÿ‹(ƒÀȯ˅Ét‹ÁáÿÿÁè+È‹ÁÁè+Èë ¹+È+Ë‹D$çÿÿÁâ úáÿÿÁå‰8 é_‰h^][Yøèƈÿÿ‹D$,SUV‹0W‹|$83É3Ò3ÛŠo‹ÅÇD$ÁáŠÁâ Ê@3ÒŠ0 Ê@3ÒŠ Ê@3Ò‰L$ŠŠXÁâ@ˆL$Áã Ó@3ÛŠ8ŠX‹ÁÁèˆD$‹ÁÁèˆD$‹ÁÁè ÓˆD$‹Â‰T$ ÁèˆD$‹ÂÁèˆD$‹ÂÁèˆD$‹D$0…ÀˆT$„ô‰D$8…öua‹L$4T$QRèWöÿÿ‹L$$ƒÄ‹Á‹ÑÁèˆD$‹ÁÁêˆT$‹T$ ÁèˆD$‹ÂÁèˆD$‹ÂÁèˆD$‹ÂÁèˆD$‹D$@ˆL$ˆT$‰D$‹D$(Š\42‹D$,ˆ@‰D$,‹D$(@F‰D$(‹D$8ƒæH‰D$8…jÿÿÿ‹D$…ÀtD‹Á‹ÙÁ舋ÅÁ눋Ù@_Áëˆ@ˆ‹Ê@Á鈋Ê@Á鈋Ê@Á鈈P‹T$8‰2^][ƒÄËD$<_‰0^][ƒÄËL$<_‰1^][ƒÄøè‡ÿÿ‹T$ ‹D$$SUV‹2…À‹D$ W„ë…À„Ä‹|$,‹\$‰D$$…ö…œo3ÉŠ‹Å3ÒŠÁáÁâ Ê@3ÒŠ0 Ê@3ÒŠ Ê@‰L$3ÉŠ3ÒŠPÁá@Áâ Ê@3ÒŠ0ŠP‹D$( ÑL$PQ‰T$èÉôÿÿ‹L$‹Å‹ÑƒÄÁꈋÑÁꈋÑ@Áêˆ@ˆ‹L$‹Ñ@ÁꈋÑ@ÁꈋÑ@ÁꈋT$0ˆHŠŠ >2Á‹L$ CˆAˆ>‹D$$F‰L$ ƒæH‰D$$…3ÿÿÿ‰2_^][ƒÄÃ…À„Ù‹|$,‹\$‰D$$…ö…œo3ÉŠ‹Å3ÒŠÁáÁâ Ê@3ÒŠ0 Ê@3ÒŠ Ê@‰L$3ÉŠ3ÒŠPÁá@Áâ Ê@3ÒŠ0ŠP‹D$( ÑL$PQ‰T$èÞóÿÿ‹L$‹Å‹ÑƒÄÁꈋÑÁꈋÑ@Áêˆ@ˆ‹L$‹Ñ@ÁꈋÑ@ÁꈋÑ@ÁꈋT$0ˆHŠŠ >ˆ>2Á‹L$ Cˆ‹D$$AFƒæH‰L$ ‰D$$…3ÿÿÿ‰2_^][ƒÄËD$‹T$3ÉSŠ(@‰ 3ÉŠU‹*V é@3ɉ*Š(@‰J‹r3ÉWŠ ñ@3ɉrŠ(r@‰‹>3ÉŠ ù@3ɉ>Š(@‰J ‹z 3ÉŠ ù@3ɉz Š(@‰J‹z3ÉŠ ù@3ɉzŠ(@‰J‹z3ÉŠ ù@3ɉzŠ(@‰J‹Z3ÉŠ Ù@3ɉZŠ‹ùÁç3ɉzŠHB Ï3Û‰J‹Î‹yü‹‹÷‹êƒæƒâÁíÁæ åÿÿƒÀ õ‰pü‹q‹îƒæÁíÁâ åÿÿƒÀ Õ‰Pü‹Q‹êƒâÁíÁæ åÿÿƒÀ õ‰pü‹q ‹îƒæÁíÁâ åÿÿƒÀ Õ‰Pü‹Q‹êƒâÁíÁæ åÿÿƒÀ õ‰pü‹q‹îƒÀÁíÁâ åÿÿ Õƒû‰Pü‹Qø};‹êƒæÁíÁæ åÿÿƒâ õƒÁ Áï‰0çÿÿÁâ ƒÀ ׉ƒÀCƒûŒÿÿÿ_^][øèVƒÿÿ‹D$ SU‹l$ÀVW‰D$ÇD$‹0…öu3ÉëG»¹ÇD$‹Ã™÷þ‹Ã‹ú+Ç™÷þ…ÿt¯Á‹Ñ‹L$‹Þ‹÷+ȉT$ëÙ…É}Á‹D$‰M‹H÷ÙƒÅáÿÿ‰M‹P÷ÚƒÅâÿÿ‰U‹p ƒÅ…öu3ÉëG»¹ÇD$‹Ã™÷þ‹Ã‹ú+Ç™÷þ…ÿt¯Á‹Ñ‹L$‹Þ‹÷+ȉT$ëÙ…É}Á‹D$‰M‹L$ƒÅƒùt'‹Pøƒè‰UƒÅ‹P‰D$‰UƒÅAƒù ‰L$Œÿþÿÿ‹L$ _^]‹A‹Q‰Q‹‘ȉA‹Ä‰‘ĉÈ[ƒÄøèöÿÿ‹D$ 3É3ÒVŠŠp@ Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@3Ò‰L$Š@‹ò3ÒŠ03ÉŠh òŠH@‹D$$Áá Î^…À‰L$t‹T$‹D$‹L$RPT$QRè¥Nýÿë‹D$‹L$‹T$PQD$RPè´Oýÿ‹D$ ‹L$ƒÄ‹Ñˆ@ÁꈋÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈈HƒÄøèÿÿ‹L$0SU3ÀŠVq3É3í‰t$ Š.3ÒŠV ÁF3ÉÁâŠN ÂF3ÒÁá ÁF3É‹\$@ŠŠvF ÊF3ÒW‹;Šv‰D$ŠˆD$Áâ Ê‹ÐÁêˆT$‹ÐÁêˆT$‹ÐÁêˆT$‹ÑÁêˆT$‹ÑÁêˆT$‹ÑÁêˆT$‹T$0…Ò‰L$ ˆL$„܉T$0…ÿug‹D$<‹L$8‹T$4PQD$$RPèlMýÿ‹T$,‹L$0‹Ú‹ÂÁëˆ\$%ˆT$$‹ÚƒÄÁêÁëˆT$‹Ñˆ\$‹ÚÁëˆ\$‹ÚˆT$ÁëÁêˆ\$‹\$DˆT$E‹t$(ŠT<2‹t$,ˆ‹T$(FB‰T$(‹T$0G‰t$,ƒçJ‰T$0…dÿÿÿ…ít8‹T$@‹t$ˆ‹ÐÁꈋÐFÁêˆFÁèˆF‹Á‹ÑˆFÁèˆFÁêÁ鈈N‰;_^][ƒÄøèvÿÿ‹T$(‹D$,SUV‹2…À‹D$ W„ò…À„Ò‹|$4‰D$$…ö…Ÿo3ÉŠ‹Å3Ò3ÛŠ0 Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@3Ò‰L$ŠŠx@ Ó@3ÉŠhŠ‹D$,Áá Ê‹T$0‰L$‹L$(RPT$QRèLýÿ‹L$ ‹Å‹ÑˆÁꈃċÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈋T$8ˆH‹L$Š>Š2ÃA‰L$‹L$ ˆAˆ>‹D$$F‰L$ ƒæH‰D$$…(ÿÿÿ‰2_^][ƒÄÃ…À„à‹|$4‰D$$…ö…Ÿo3ÉŠ‹Å3Ò3ÛŠ0 Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@3Ò‰L$ŠŠx@ Ó@3ÉŠhŠ‹D$,Áá Ê‹T$0‰L$‹L$(RPT$QRèKýÿ‹L$ ‹Å‹ÑˆÁꈃċÑ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈋T$8ˆH‹L$ŠA‰L$Š >ˆ>2Á‹L$ ˆ‹D$$AFƒæH‰L$ ‰D$$…(ÿÿÿ‰2_^][ƒÄøèf}ÿÿ‹D$0SU‹l$4VW‹8u3À3ÉŠEŠ.‰t$ ÁF3Ò3ÉÇD$ŠŠNÁâ ÂFÁá ÁF3É3ÒŠŠvF ÊF3ҋ؈D$ŠvŠÁâÁë ʈ\$‹Ð‹ØÁèˆD$‹ÁÁèˆD$‹ÁÁèˆD$‹D$4‰L$$ˆL$ÁëÁé…À‰T$ ˆ\$ˆL$„î‹t$0‹\$,‹L$$‰D$<…ÿuc‹L$8jT$$QRèJ,ýÿ‹T$,ƒÄ ‹Â‹ÊÁèˆD$‹ÂÁéˆL$‹L$$ÁèˆD$‹ÁÁèˆD$‹ÁÁèˆD$‹ÁÁèˆD$‹D$@ˆT$ˆL$‰D$ŠD<2FCGˆFÿ‹D$<ƒçH‰D$<…{ÿÿÿ‹D$…ÀtC‹D$‹ÚÁëˆUˆ‹Ú@Áëˆ@Áêˆ@‹Ñˆ@ÁꈋÑ@ÁêÁ鈈H‹D$@‰8_^][ƒÄËL$@‰9_^][ƒÄËT$@‰:_^][ƒÄøè¶{ÿÿ‹T$ ‹D$$SUV‹2…À‹D$ W„å…À„¸‹|$,‹\$‰D$$…ö…–o3ÉŠ‹Å3ÒjŠ0 Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@‰L$3ÉŠ@3ÒŠ0 Ê@3ÒŠpŠ‹D$,Áâ ÑL$PQ‰T$ èÛ*ýÿ‹L$‹Å‹ÑˆÁêˆƒÄ ‹Ñ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈋T$0ˆHŠŠ >2Á‹L$ CˆAˆ>‹D$$F‰L$ ƒæH‰D$$…9ÿÿÿ‰2_^][ƒÄÃ…À„Ó‹|$,‹\$‰D$$…ö…–o3ÉŠ‹Å3ÒjŠ0 Ê@3ÒŠÁâ Ê@3ÒŠÁâ Ê@‰L$3ÉŠ@3ÒŠ0 Ê@3ÒŠpŠ‹D$,Áâ ÑL$PQ‰T$ èö)ýÿ‹L$‹Å‹ÑˆÁêˆƒÄ ‹Ñ@Áêˆ@Á鈋L$@‹ÑÁêˆ@ˆ‹Ñ@ÁêÁ鈋T$0ˆHŠŠ >ˆ>2Á‹L$ Cˆ‹D$$AFƒæH‰L$ ‰D$$…9ÿÿÿ‰2_^][ƒÄápÓI…Àt%hÈÒIj(ÇpÓIèüÿh0ÓIj(èüÿƒÄáÕI…Àt%hxÓIj'ÇÕIèá üÿhÔIj'èÕ üÿƒÄáh×I…Àt%hÕIj&Çh×Iè± üÿh(ÖIj&è¥ üÿƒÄÃ¡ØØI…Àt%hp×Ij%ÇØØIè üÿhhØIj%èu üÿƒÄáÙI…Àt%hàØIj$ÇÙIèQ üÿhøØIj$èE üÿƒÄá˜ÚI…Àt%hÙIj#ǘÚIè! üÿhèÙIj#è üÿƒÄáxÝI…Àt%h ÚIj"ÇxÝIèñ üÿhøÛIj"èå üÿƒÄá°ßI…Àt%h€ÝIj!ǰßIèÁ üÿhHÞIj!èµ üÿƒÄá¨áI…Àt%h¸ßIj ǨáIè‘ üÿh¸àIj è… üÿƒÄáˆãI…Àt%h°áIjLjãIèa üÿhãIjèU üÿƒÄáðãI…Àt%hãIjÇðãIè1 üÿhàãIjè% üÿƒÄáåI…Àt%høãIjÇåIè üÿh˜äIjèõ üÿƒÄáàéI…Àt%h åIj ÇàéIèÑ üÿhˆçIj èÅ üÿƒÄáøëI…Àt%hèéIj ÇøëIè¡ üÿh8ëIj è• üÿƒÄáìI…Àt%hìIj ÇìIèq üÿhxìIj èe üÿƒÄáàíI…Àt%h˜ìIj ÇàíIèA üÿhXíIj è5 üÿƒÄá0îI…Àt%hèíIjÇ0îIè üÿhîIjè üÿƒÄáXîI…Àt%h8îIjÇXîIèá üÿhJjèÕ üÿƒÄáðI…Àt%h`îIjÇðIè± üÿhHïIjè¥ üÿƒÄáèðI…Àt%h˜ðIjÇèðIè üÿhÐðIjèu üÿƒÄáÈòI…Àt%hððIjÇÈòIèQ üÿhÀñIjèE üÿƒÄáôI…Àt%hÐòIjÇôIè! üÿhóIjè üÿƒÄøè¦uÿÿ‹D$ ‹L$‹T$P‹D$QRPL$0jT$QRÇD$ ÇD$èAƒÄ…ÀuƒÄËD$‹L$ V‰D$‹D$T$QRPÿT$‹ðƒÄ …öujRhDQGj jgj è¯ üÿƒÄ‹L$Qè" üÿƒÄ‹Æ^ƒÄÃSUV‹t$…öWt1‹þƒÉÿ3Àò®÷ÑI‹Á‹L$;Á~‹Á‹|$‹È‹ÑÁéó¥‹Êƒáó¤_^][Ã莋؅Ûu»äQG‹D$‹l$‹t$PSUVè~ƒÄ…Àu<‹þƒÉÿ3Àò®÷ÑIƒù}\‹ ”FjƒÁ@h°QGQÿ,F‹T$(RSUVèBƒÄ…ÀtÄjih˜QGjmjdj èÙ üÿ‹Í3À‹Ñ‹þÁéó«‹ÊƒÄƒáóª_^]ƒÈÿ[Ã_^]‹Á[ø(è&tÿÿSUVD$WL$PT$Q‹L$TD$R3ÛPQ‰\$(‰\$,‰\$$‰\$4è ‹l$\ƒÄ…À„D‹|$‹õ‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ä4¾¸ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾ÜÚF‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;ÄȾÐÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾ÜÚF‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ä\¾€ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾ÜÚF‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Äð¾ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾ÜÚF‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ä„¾4RG‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾<ÚF‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;ľ\ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾HÚF‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ĭ¾<ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾ RG‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ä@¾4RG‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu8¾ RG‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;ÄԾ<ÚF‹ÇŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;Ãu4¾°~F‹ÅŠŠÊ:u:ËtŠPŠÊ:VuƒÀƒÆ:Ëuà3ÀëÀƒØÿ;ÃtlWèÜüÿ‹D$PèÒüÿ‹L$QèÈüÿT$(D$RL$(P‹D$`T$(QRPèzƒÄ …À…¼ûÿÿèÊüÿ%ÿƒøluUhRGjèSüÿƒÄ _^]3À[ƒÄ(ËT$L$$QRèƒÄ…ÀtS‹D$T‹L$PP‹D$T$ QRL$0PQèrƒÄ…Àt.‹T$<‹D$‹L$@‰‹D$D‹T$;Ét‹L$‰;ÃÇD$ u ‹T$RèüÿƒÄ‹D$Pèöüÿ‹t$$ƒÄ;óu ‹L$QèáüÿƒÄ‹Æ_^][ƒÄ(ø¸èÆnÿÿ‹„$ÄSU‹¬$Ä‹V‹EW…À‰L$„&‹„$Ø…À…ß‹´$Ü…öt4‹þƒÉÿò®÷ÑI‹Á=~¸‹È¼$È‹ÑÁéó¥‹Êƒáó¤é¼è‹ð…öu¾äQGjV„$ÐhPèƒÄ…ÀuM‹,F¼$ȃÉÿ3Àò®÷ÑI‹Áƒø}r‹ ”FjƒÁ@h°QGQÿÓjV”$ÜhR賃ąÀt¹jih˜QGjmjdj èJüÿƒÄ¹3À¼$Èó«ë ‹Œ$Ü”$ÈQjhRÿЃÄ…À%hh˜QGjhjjj èüÿƒÄ3À_^][ĸÃL$jQj”$ÔuPRVèe‰üÿP‹EPèÛ‹L$8T$\R‰L$4èùpÿÿ‹MD$@VPjT$lQRè“tÿÿ‹D$H‹´$PL$PVQ”$€VRèwÿÿ‹L$`ƒÄLD$ÎPT$@QRèxÿÿ‹ðD$HPè>yÿÿŒ$ØhQ謣üÿT$4j Rè £üÿ‹D$0‹T$4ƒÄ Â…ö‰D$u%h¥h˜QGjejjj èüÿƒÄ3À_^][ĸËŒ$Ô‰_^]¸[ĸÃSU‹l$V‹t$W…öÇE„䊄À„Ú< „Ò‹=üFj hHRGVÿ×ƒÄ …Àth¶h˜QGjkjkj è‡üÿƒÄ3À_^][ÊF ƒÆ <4t_^]3À[ÊFF<,t_^]3À[ÃFj hüQGVÿ×ƒÄ …Àth»h˜QGjjjkj è6üÿƒÄ3À_^][Ê< t „ÀtŠFF< uô€>uh¿h˜QGjpjkj èüÿƒÄ3À_^][ÃFj hRGVÿ×ƒÄ …ÀthÂh˜QGjijkj èÏüÿƒÄ3À_^][ÃƒÆ ‹þŠ€ûA|€ûZ~€û-t €û0|€û9FëâWÆèY{üÿWè üÿƒÄ‰E…ÀˆuhÜh˜QGjrjkj èrüÿƒÄ3À_^][ËP }F‰|$…Ò~‹Ê3À‹ÙÁéó«‹Ëƒáóª,3ÿ…í~]Š<0r<9w %ÿƒè0ë"ýÿ‹èƒÄ …í`ÿÿÿëhh˜QGjAéÛÇD$ ‹t$hVÇD$èjÞüÿƒÄ…Àuhªh˜QGjA餋V‹D$ …ÀÆ…0‹œ$D$,hþPSèù=ýÿ‹èƒÄ …íŽë‹t$…í| €|,, MyöEÆD,, EƒýAÆD,,tÇD$$j L$0hTRGQÿüFƒÄ …À„ÒƒýAÉ‹T$D* PVèjÞüÿƒÄ…Àt_‹D$‹T$‹Ít$,‹xú‹ÑÁéó¥‹Êƒáó¤‹@‹L$ÅÆ‹L$‹D$$Í…À‰L$u0T$,hþRSè3=ýÿ‹èƒÄ …í<ÿÿÿëTh¼h˜QGjAé•D$,hþPSÆD$8èþ<ýÿƒÄ …À~'€|, Hyö@ÆD, ÆD-ë‹D$‰t$‰D$‰\$‹\$ƒÉÿ3Àj ‹{hTRGò®‹=üF÷ÑI‹ñL$4Qÿ×ƒÄ …À…‹CT$5VRPÿ×ƒÄ …À…ýjL49h`RGQÿ×ƒÄ …À…ä”$,RèA ‹t$‹L$QT$‹FPRP„$@PèA ƒÄ…À}håh˜QGjdé«‹V‹\$L$(ÓQ„$0RPèMƒÄ …À}hëh˜QGjdëz‹L$‹D$(ȉL$tv‹D$‹´$”‹¼$˜‹œ$œ‹PP‰‹t$‹V‰‹|$‹W‰‹”$¤‰ è9üÿVè3üÿWè-üÿƒÄ ¸_^][Ä|ÃhÛh˜QGjfjmj è…ûûÿƒÄ‹D$PèXÛüÿ‹L$QèNÛüÿ‹T$ RèDÛüÿƒÄ 3À_^][Ä|Ãhmh˜QGjAjmj è?ûûÿƒÄ3À_^][Ä|Ã|$u‹D$VjO‹0èëküÿƒÄ‰¸^øËL$ ‹T$V‹t$j‹FPQRèÆýÿP‹PèƒÄ^øìRGøSGøSGø,SGËD$‹L$ ‹T$P‹D$QRPh RGh0îAè-îÿÿƒÄÃjEhüÿƒÄ…Àt$3ÛÇD$(ëhàhTSGj jtj è õûÿƒÄ…Ût SèûÿÿƒÄ‹D$(…ÀuA‹|$W3öè™?üÿƒÄ…À~VWè›?üÿPèÕúÿÿWFè~?üÿƒÄ;ð|å;|$Lt Wè;?üÿƒÄ3öë‹t$‹D$…Àt Pè" üÿƒÄ‹D$…Àt Pè üÿƒÄ‹D$…Àt Pè üÿƒÄ‹Æ_^][ƒÄ4ÃS‹\$UV…ÛWu_^]3À[Ët$ƒþu‹D$PSè©•üÿƒÄ_^][Ë;VWjè6üÿ‹l$$ƒÄ …í‰D$tU‹Mƒþ‰L$t ƒþt3À븋T$ RVWPD$$Pèë4üÿ‹ ‹s‹|$(‹ÑÁéó¥‹ÊƒÄƒáó¤‹D$‹ Á‰E‹D$_^][àJöØÀ%Jøè&]ÿÿSU‹¬$V…íWu J„Àt½Jè ‹œ$‹ðû¸ÿ}‹Ã‹¼$PjWjUVèØ ‹„$8ƒÄ…Àt$û¸ÿ}‹ÃWPD$jPjUVèÉ ƒÄVèà V‹øè L$hQèi“üÿƒÄ‹Ç_^][Äø8èf\ÿÿ‹D$衎üÿ;ljFu_3À^Ãjèž/üÿƒÄ;ljFu_3À^ÃN 3À‰~ ‰~‰~‰~‰~‰_‰A‰A‰A ÇF0‹Æ^ÃV‹t$…ötnh…h TGjF0jÿPèÀ@üÿƒÄ…ÀP‹F…Àt Pè,ŽüÿƒÄ‹F…Àt Pèl/üÿƒÄ‹F …Àt Pè\üÿƒÄ‹F…Àt‹N…Ét PèÿûÿƒÄVèüþûÿƒÄ^ÃVjPh$TGjèaüûÿ‹ðƒÄ …öujSh$TGjAjhj(èFêûÿƒÄ3À^á`J…Àu èá£`J‰F PVj ÇFÇFèÀÆüÿƒÄ ‹Æ^ÃV‹t$…öt#‹FhPîEPè4üÿN QVj èýÆüÿVèWþûÿƒÄ^ÃV‹t$öFt1‹FPè<þûÿ‹ƒÄƒøu‹NQè)þûÿ‹VRè þûÿ‹FPèþûÿƒÄ VèþûÿƒÄ^ÃS‹\$ VƒÎÿ…ÛWuh’h$TGjCjmj(è]éûÿƒÄ‹Æ_^[Ë|$…ÿuh—h$TGjijmj(è7éûÿƒÄ‹Æ_^[Ãh™h$TGj èûûÿ‹ðƒÄ …ö„œ‹D$‰~ ‹|$‰^ÇF‰FÇ‹G…Àu è†/üÿ…À‰Gt+‹L$ ‹T$$‰N‰VÇF‹GVPè€2üÿƒÄ…ÀH_^H[ÃöFt1‹NQè%ýûÿ‹ƒÄƒøu‹VRèýûÿ‹FPè ýûÿ‹NQèýûÿƒÄ Vè÷üûÿƒÄƒÈÿ_^[ÃS‹\$ UƒÍÿVW…Ûuh’h$TGjCjmj(è<èûÿƒÄ‹Å_^][Ë|$ …ÿuh—h$TGjijmj(èèûÿƒÄ‹Å_^][Ãh™h$TGj èúùûÿ‹ðƒÄ …ö„‹D$‰~ ‹|$‰^ÇF‰FÇ‹G…Àu èc.üÿ…À‰Gt,‹L$$‹T$(‹D$,‰N‰V‰F‹OVQè]1üÿƒÄ…ÀH_^]H[ÃöFt1‹VRèüûÿ‹ƒÄƒøu‹FPèîûûÿ‹NQèåûûÿ‹VRèÜûûÿƒÄ VèÓûûÿƒÄ‹Å_^][ÃUV‹t$ 3í‹‹@…ÀtVÿЃÄ…Àu^ƒÈÿ]ËFöÄtVhðñEèœLþÿƒÄ‹NSWQ3Ûè¬1üÿƒÄ…À~0‹>‹G…Àt‹VSRè¢1üÿPVÿWƒÄ…Àtv‹FCPè|1üÿƒÄ;Ø|Ћ‹A …ÀtVÿЃÄƒøÿtV…ÀtM3í‹V3ÛRèP1üÿƒÄ…À~C‹>‹G…Àt‹FSPèF1üÿPVÿWƒÄƒøÿt…Àt3í‹NCQè1üÿƒÄ;Ø|Éë ƒÍÿë½þÿÿÿ‹_[‹B…ÀtVÿЃÄ…Àu^ƒÈÿ]ËÅ^]ø è¦OÿÿW¹3À|$ó«‹L$0‹D$(ÇD$‰D$‹_‹B…ÀtT$RQÿЃÄ…ÀuƒÈÿƒÄ Ã3ÀƒÄ ËD$…ÀuË@ËD$…ÀuË@ËL$…Éu3ÀËHtƒèt3ÀËAËL$…Ét‹…À~ ƒø‹A Ã3ÀËL$…Éu3À˃èt3ÀËAø èÆNÿÿSU‹l$4VW‹ýƒÉÿ3Àò®‹|$4‹t$8÷ÑI‹Ù‹Oƒáþ…ö‰Ot;‹…ÀޝƒøŽ¥ƒø…‹F …Àu#hlh$TGjijij(èãäûÿƒÄ_^]ƒÈÿ[ƒÄ ÃÆŠE„À‹ý„c‹˜F¾‹NPQÿӃąÀu#¾‹FRPÿӃąÀu&ŠGG„ÀuÖ_^]3À[ƒÄ ËN‹V _^Š]ˆ3À[ƒÄ ËN‹V _^Š]ˆ3À[ƒÄ ËNT$ Qh˜ÊHj RèÎTüÿ‹FL$ Ph˜ÊHj Qè¹Tüÿ‹FƒÄ ;Ø}L‹ohOh$TGjeƒÍjij(‰oèäûÿT$$hXTGRD$™A€‡cAjø@KGS!@#$%ðÍApÎAÀÎA`ÏAÐA ÐA0ÑApÑA0ÒAðÒA0ÔAinternal errorpassed a null parametercalled a function you should not callmalloc failurefatalmissing asn1 eosasn1 length mismatchexpecting an asn1 sequencebad get asn1 object callbad asn1 object headernested asn1 errorOCSP libENGINE libDSO libRAND libPKCS12 libX509V3 libPKCS7 libBIO libSSL libEC libCRYPTO libCONF libASN1 libX509 libDSA libPEM libOBJ libBUF libEVP libDH libRSA libBN libsystem libfreadopendirWSAstartupacceptlistenbindioctlsocketsocketgetservbynameconnectfopenOCSP routinesengine routinesDSO support routinesrandom number generatorPKCS12 routinesX509 V3 routinesPKCS7 routinesBIO routinesSSL routineselliptic curve routinescommon libcrypto routinesconfiguration file routinesasn1 encoding routinesx509 certificate routinesdsa routinesPEM routinesobject identifier routinesmemory buffer routinesdigital envelope routinesDiffie-Hellman routinesrsa routinesbignum routinessystem libraryunknown library.\crypto\err\err.cint_err_get (err.c)int_thread_get (err.c)NAerror:%08lX:%s:%s:%sreason(%lu)func(%lu)lib(%lu)OpenSSL 0.9.7c 30 Sep 2003.\crypto\x509\x509_cmp.c‘DÒHðxBè FðxBÜ Fp{B Ô F^BÈ F`{BÀ F^BtÔH0mB‰´ FpyB‰ ¨ FpyB•$œ FàxBF ( FðìA„ FàìA| Fp{BÜ FpyB F FTt FX509sig_algcert_infoX509_CINFextensionssubjectUIDissuerUIDsubjectvalidityissuersignatureserialNumber.\crypto\x509\x509_obj.cNO X509_NAME.rndC:RANDFILEModule32NextModule32FirstThread32NextThread32FirstProcess32NextProcess32FirstHeap32ListNextHeap32ListFirstHeap32NextHeap32FirstCloseToolhelp32SnapshotCreateToolhelp32SnapshotGetQueueStatusGetCursorInfoGetForegroundWindowIntel Hardware Cryptographic Service ProviderCryptReleaseContextCryptGenRandomCryptAcquireContextALanmanServerLanmanWorkstationNetApiBufferFreeNetStatisticsGetNETAPI32.DLLUSER32.DLLKERNEL32.DLLADVAPI32.DLL.\crypto\rand\rand_win.cDISPLAYÿÿÿÿšûA ûA.\crypto\evp\p_lib.cX.509 part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\x509\x509_vfy.cname=„F@zB|F€zBè FpF‰`F0{B‰TF0{B0 FDFˆ8F°Bˆ(F`zBˆF`zBˆ FzBüF^BˆìFÀBˆÐF`zBˆÄFÀyBˆ´F@zBx F ¤F”FÐBÿÿÿÿPF„FGENERAL_NAMESGeneralNamesGENERAL_NAMEd.registeredIDd.iPAddressd.uniformResourceIdentifierd.ediPartyNamed.directoryNamed.x400Addressd.dNSNamed.rfc822Named.otherNameEDIPARTYNAMEpartyNamenameAssignerOTHERNAMEvaluetype_idASN.1 part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\asn1\asn1_lib.caddress= offset=%luStack part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\stack\stack.cMD5 part of OpenSSL 0.9.7c 30 Sep 2003€DES part of OpenSSL 0.9.7c 30 Sep 2003libdes part of OpenSSL 0.9.7c 30 Sep 2003€@€@@€€@€€@€@€@@€@@€€@€@€€@@@€€@€@€@€€@@@€@€@€€@€@€@€@€@@€€@€@@€@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                            @€@ €@ @ € @ @ € € €@€ €@ @ €@ € @ €@ €@ € €€@ @ @ €@ € €@ €@ €€ @ € @ @ € @@ € @ €@€ €@ @€@ € € €@ @@ €@B@B@B@@@BB@BBB@B@@@@BBB@BB@BB@@€€ ‚ € €€€ €‚ € ‚€€‚€ € € €‚€€ €‚ € ‚ €€ €€ €‚ €€€ €‚ € ‚€€ €  €€‚ €€€ €‚ €€ € ‚€€ € €‚ €‚ €€ €‚  ##%%&&))**,,//1122447788;;==>>@@CCEEFFIIJJLLOOQQRRTTWWXX[[]]^^aabbddgghhkkmmnnppssuuvvyyzz||€€ƒƒ……††‰‰ŠŠŒŒ‘‘’’””——˜˜››žž¡¡¢¢¤¤§§¨¨««­­®®°°³³µµ¶¶¹¹ºº¼¼¿¿ÁÁÂÂÄÄÇÇÈÈËËÍÍÎÎÐÐÓÓÕÕÖÖÙÙÚÚÜÜßßààããååææééêêììïïññòòôô÷÷øøûûýýþþ        0 0 0  0 0  0 0  0           0  0 0 0 0  0  0  0          $$  $ $ $$  $ $             $$  $ $ $$  $ $                  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0                            ((  ((  ((  ((  ((  ((  ((  ((          """"   " " " " ((((((((    """" ( ( ( ("("("("(hwcrhkuidynlockdsodebug_malloc2dhRSA_blindingreaddirgethostbynameBIOdebug_mallocrand2randssl_methodsslssl_sess_certssl_sessionssl_certssl_ctxx509_storeevp_pkeyrsadsax509_reqx509_crlx509_pkeyx509_infox509ex_dataerr<>.\crypto\cryptlib.c%s(%d): OpenSSL internal error, assertion failed: %s pointer != NULL.\crypto\mem_dbg.clhash part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\lhash\lhash.cdoapr().\crypto\bio\b_print.c0123456789abcdefà?$@0123456789ABCDEF0xMicrosoft Universal Principal NamemsUPNMicrosoft SmartcardloginmsSmartcardLoginrsaOAEPEncryptionSETdes-cdmfDES-CDMFset-brand-Novusset-brand-MasterCardset-brand-Visaset-brand-JCBset-brand-AmericanExpressset-brand-Dinersset-brand-IATA-ATAsecure device signaturesetAttr-SecDevSigICC or token signaturesetAttr-TokICCsigcleartext track 2setAttr-T2cleartxtencrypted track 2setAttr-T2Encgenerate cryptogramsetAttr-GenCryptgrmsetAttr-IssCap-SigsetAttr-IssCap-T2setAttr-IssCap-CVMsetAttr-Token-B0PrimesetAttr-Token-EMVset-addPolicyset-rootKeyThumbissuer capabilitiessetAttr-IssCapsetAttr-TokenTypepayment gateway capabilitiessetAttr-PGWYcapsetAttr-CertsetCext-IssuerCapabilitiessetCext-TokenTypesetCext-Track2DatasetCext-TokenIdentifiersetCext-PGWYcapabilitiessetCext-setQualfsetCext-setExtsetCext-tunnelingsetCext-cCertRequiredsetCext-merchDatasetCext-certTypesetCext-hashedRootset-policy-rootadditional verificationsetext-cvsetext-track2setext-pinAnysetext-pinSecuremerchant initiated authsetext-miAuthgeneric cryptogramsetext-genCryptsetct-BCIDistributionTBSsetct-CRLNotificationResTBSsetct-CRLNotificationTBSsetct-CertResTBEsetct-CertReqTBEXsetct-CertReqTBEsetct-RegFormReqTBEsetct-BatchAdminResTBEsetct-BatchAdminReqTBEsetct-CredRevResTBEsetct-CredRevReqTBEXsetct-CredRevReqTBEsetct-CredResTBEsetct-CredReqTBEXsetct-CredReqTBEsetct-CapRevResTBEsetct-CapRevReqTBEXsetct-CapRevReqTBEsetct-CapResTBEsetct-CapReqTBEXsetct-CapReqTBEsetct-AuthRevResTBEBsetct-AuthRevResTBEsetct-AuthRevReqTBEsetct-AcqCardCodeMsgTBEsetct-CapTokenTBEXsetct-CapTokenTBEsetct-AuthTokenTBEsetct-AuthResTBEXsetct-AuthResTBEsetct-AuthReqTBEsetct-PIUnsignedTBEsetct-PIDualSignedTBEsetct-ErrorTBSsetct-CertInqReqTBSsetct-CertResDatasetct-CertReqTBSsetct-CertReqDatasetct-RegFormResTBSsetct-MeAqCInitResTBSsetct-CardCInitResTBSsetct-BatchAdminResDatasetct-BatchAdminReqDatasetct-PCertResTBSsetct-PCertReqDatasetct-CredRevResDatasetct-CredRevReqTBSXsetct-CredRevReqTBSsetct-CredResDatasetct-CredReqTBSXsetct-CredReqTBSsetct-CapRevResDatasetct-CapRevReqTBSXsetct-CapRevReqTBSsetct-CapResDatasetct-CapReqTBSXsetct-CapReqTBSsetct-AuthRevResTBSsetct-AuthRevResDatasetct-AuthRevReqTBSsetct-AcqCardCodeMsgsetct-CapTokenTBSsetct-CapTokenDatasetct-AuthTokenTBSsetct-AuthResTBSXsetct-AuthResTBSsetct-AuthReqTBSsetct-PResDatasetct-PI-TBSsetct-PInitResDatasetct-CapTokenSeqsetct-AuthRevResBaggagesetct-AuthRevReqBaggagesetct-AuthResBaggagesetct-HODInputsetct-PIDataUnsignedsetct-PIDatasetct-PIsetct-OIDatasetct-PANOnlysetct-PANTokensetct-PANDataset-brandcertificate extensionsset-certExtset-policyset-attrmessage extensionsset-msgExtcontent typesset-ctypeSecure Electronic Transactionsid-setpseudonymgenerationQualifierid-hex-multipart-messageid-hex-partial-messagemime-mhs-bodiesmime-mhs-headingsMIME MHSmime-mhsx500UniqueIdentifierdocumentPublisheraudiodITRedirectpersonalSignaturesubtreeMaximumQualitysubtreeMinimumQualitysingleLevelQualitydSAQualitybuildingNamemailPreferenceOptionjanetMailboxorganizationalStatusfriendlyCountryNamepagerTelephoneNumbermobileTelephoneNumberpersonalTitlehomePostalAddressassociatedNameassociatedDomaincNAMERecordsOARecordnSRecordmXRecordpilotAttributeType27aRecordlastModifiedBylastModifiedTimeotherMailboxsecretaryhomeTelephoneNumberdocumentLocationdocumentAuthordocumentVersiondocumentTitledocumentIdentifiermanageruserClassphotoroomNumberfavouriteDrinkinforfc822MailboxmailtextEncodedORAddressuserIdUIDqualityLabelledDatapilotDSApilotOrganizationsimpleSecurityObjectfriendlyCountrydomainRelatedObjectdNSDomainrFC822localPartdocumentSeriesroomdocumentaccountpilotPersonpilotObjectcaseIgnoreIA5StringSyntaxiA5StringSyntaxpilotGroupspilotObjectClasspilotAttributeSyntaxpilotAttributeTypepilotuclpssHold Instruction RejectholdInstructionRejectHold Instruction Call IssuerholdInstructionCallIssuerHold Instruction NoneholdInstructionNoneHold Instruction CodeholdInstructionCodeaes-256-cfbAES-256-CFBaes-256-ofbAES-256-OFBaes-256-cbcAES-256-CBCaes-256-ecbAES-256-ECBaes-192-cfbAES-192-CFBaes-192-ofbAES-192-OFBaes-192-cbcAES-192-CBCaes-192-ecbAES-192-ECBaes-128-cfbAES-128-CFBaes-128-ofbAES-128-OFBaes-128-cbcAES-128-CBCaes-128-ecbAES-128-ECBMicrosoft CSP NameCSPNameecdsa-with-SHA1prime256v1prime239v3prime239v2prime239v1prime192v3prime192v2prime192v1id-ecPublicKeycharacteristic-two-fieldprime-fieldANSI X9.62ansi-X9-62ccittCCITTX509v3 No Revocation AvailablenoRevAvailX509v3 AC TargetingtargetInformationX509v3 Policy ConstraintspolicyConstraintsroleid-aca-encAttrsSubject Information AccesssubjectInfoAccessac-proxyingmd4WithRSAEncryptionRSA-MD4clearanceSelected Attribute Typesselected-attribute-typesjoint-iso-ccittJOINT-ISO-CCITTDomaindomainComponentDCdcObjectdcobjectEnterprisesenterprisesMailSNMPv2snmpv2SecuritysecurityPrivateprivateExperimentalexperimentalManagementmgmtDirectorydirectoryianaIANAdodDODORGdirectory services - algorithmsX500algorithmsrsaSignatureTrust RoottrustRootvalidExtended OCSP StatusextendedStatusOCSP Service LocatorserviceLocatorOCSP Archive CutoffarchiveCutoffOCSP No ChecknoCheckAcceptable OCSP ResponsesacceptableResponsesOCSP CRL IDCrlIDOCSP NonceNonceBasic OCSP ResponsebasicOCSPResponsead dvcsAD_DVCSAD Time Stampingad_timestampingid-cct-PKIResponseid-cct-PKIDataid-cct-crsid-qcs-pkixQCSyntax-v1id-aca-roleid-aca-groupid-aca-chargingIdentityid-aca-accessIdentityid-aca-authenticationInfoid-pda-countryOfResidenceid-pda-countryOfCitizenshipid-pda-genderid-pda-placeOfBirthid-pda-dateOfBirthid-on-personalDataid-cmc-confirmCertAcceptanceid-cmc-popLinkWitnessid-cmc-popLinkRandomid-cmc-queryPendingid-cmc-responseInfoid-cmc-regInfoid-cmc-revokeRequestid-cmc-getCRLid-cmc-getCertid-cmc-lraPOPWitnessid-cmc-decryptedPOPid-cmc-encryptedPOPid-cmc-addExtensionsid-cmc-recipientNonceid-cmc-senderNonceid-cmc-transactionIdid-cmc-dataReturnid-cmc-identityProofid-cmc-identificationid-cmc-statusInfoid-alg-dh-popid-alg-dh-sig-hmac-sha1id-alg-noSignatureid-alg-des40id-regInfo-certReqid-regInfo-utf8Pairsid-regCtrl-protocolEncrKeyid-regCtrl-oldCertIDid-regCtrl-pkiArchiveOptionsid-regCtrl-pkiPublicationInfoid-regCtrl-authenticatorid-regCtrl-regTokenid-regInfoid-regCtrlid-it-origPKIMessageid-it-confirmWaitTimeid-it-implicitConfirmid-it-revPassphraseid-it-keyPairParamRepid-it-keyPairParamReqid-it-subscriptionResponseid-it-subscriptionRequestid-it-unsupportedOIDsid-it-currentCRLid-it-caKeyUpdateInfoid-it-preferredSymmAlgid-it-encKeyPairTypesid-it-signKeyPairTypesid-it-caProtEncCertdvcsDVCSIPSec UseripsecUserIPSec TunnelipsecTunnelIPSec End SystemipsecEndSystemtextNoticesbqp-routerIdentifiersbqp-autonomousSysNumsbqp-ipAddrBlockaaControlsac-targetingac-auditEntityqcStatementsBiometric InfobiometricInfoid-mod-cmp2000id-mod-dvcsid-mod-ocspid-mod-timestamp-protocolid-mod-attribute-certid-mod-qualified-cert-93id-mod-qualified-cert-88id-mod-cmpid-mod-kea-profile-93id-mod-kea-profile-88id-mod-cmcid-mod-crmfid-pkix1-implicit-93id-pkix1-explicit-93id-pkix1-implicit-88id-pkix1-explicit-88id-cctid-qcsid-acaid-pdaid-onid-cmcid-algid-pkipid-itid-qtid-pkix-modmd4MD4id-smime-cti-ets-proofOfCreationid-smime-cti-ets-proofOfApprovalid-smime-cti-ets-proofOfSenderid-smime-cti-ets-proofOfDeliveryid-smime-cti-ets-proofOfReceiptid-smime-cti-ets-proofOfOriginid-smime-spq-ets-sqt-unoticeid-smime-spq-ets-sqt-uriid-smime-cd-ldapid-smime-alg-CMSRC2wrapid-smime-alg-CMS3DESwrapid-smime-alg-ESDHid-smime-alg-RC2wrapid-smime-alg-3DESwrapid-smime-alg-ESDHwithRC2id-smime-alg-ESDHwith3DESid-smime-aa-dvcs-dvcid-smime-aa-signatureTypeid-smime-aa-ets-archiveTimeStampid-smime-aa-ets-certCRLTimestampid-smime-aa-ets-escTimeStampid-smime-aa-ets-revocationValuesid-smime-aa-ets-certValuesid-smime-aa-ets-RevocationRefsid-smime-aa-ets-CertificateRefsid-smime-aa-ets-contentTimestampid-smime-aa-ets-otherSigCertid-smime-aa-ets-signerAttrid-smime-aa-ets-signerLocationid-smime-aa-ets-commitmentTypeid-smime-aa-ets-sigPolicyIdid-smime-aa-timeStampTokenid-smime-aa-smimeEncryptCertsid-smime-aa-signingCertificateid-smime-aa-encrypKeyPrefid-smime-aa-contentReferenceid-smime-aa-equivalentLabelsid-smime-aa-macValueid-smime-aa-contentIdentifierid-smime-aa-encapContentTypeid-smime-aa-msgSigDigestid-smime-aa-contentHintid-smime-aa-mlExpandHistoryid-smime-aa-securityLabelid-smime-aa-receiptRequestid-smime-ct-DVCSResponseDataid-smime-ct-DVCSRequestDataid-smime-ct-contentInfoid-smime-ct-TDTInfoid-smime-ct-TSTInfoid-smime-ct-publishCertid-smime-ct-authDataid-smime-ct-receiptid-smime-mod-ets-eSigPolicy-97id-smime-mod-ets-eSigPolicy-88id-smime-mod-ets-eSignature-97id-smime-mod-ets-eSignature-88id-smime-mod-msg-v3id-smime-mod-oidid-smime-mod-essid-smime-mod-cmsid-smime-ctiid-smime-spqid-smime-cdid-smime-algid-smime-aaid-smime-ctid-smime-modS/MIMESMIMEpkcs5pkcs1X9.57 CM ?X9cmX9.57X9-57ISO US Member BodyISO-USISO Member Bodymember-bodyisoISOOCSP SigningOCSPSigningCA IssuerscaIssuersOCSPAuthority Information AccessauthorityInfoAccessid-adid-pednQualifiernameExtension RequestextReqMicrosoft Extension RequestmsExtReqpbeWithSHA1AndDES-CBCPBE-SHA1-DESpbeWithMD5AndRC2-CBCPBE-MD5-RC2-64pbeWithMD2AndRC2-CBCPBE-MD2-RC2-64S/MIME CapabilitiesSMIME-CAPSrc2-64-cbcRC2-64-CBCPolicy Qualifier User Noticeid-qt-unoticePolicy Qualifier CPSid-qt-cpshmacWithSHA1PBMAC1PBES2x509CrlsdsiCertificatex509CertificatelocalKeyIDfriendlyNamesafeContentsBagsecretBagcrlBagcertBagpkcs8ShroudedKeyBagkeyBagpbeWithSHA1And40BitRC2-CBCPBE-SHA1-RC2-40pbeWithSHA1And128BitRC2-CBCPBE-SHA1-RC2-128pbeWithSHA1And2-KeyTripleDES-CBCPBE-SHA1-2DESpbeWithSHA1And3-KeyTripleDES-CBCPBE-SHA1-3DESpbeWithSHA1And40BitRC4PBE-SHA1-RC4-40pbeWithSHA1And128BitRC4PBE-SHA1-RC4-128Strong Extranet IDSXNetIDInvalidity DateinvalidityDateX509v3 CRL Reason CodeCRLReasonX509v3 Delta CRL IndicatordeltaCRLNetscape Server Gated CryptonsSGCMicrosoft Encrypted File SystemmsEFSMicrosoft Server Gated CryptomsSGCMicrosoft Trust List SigningmsCTLSignMicrosoft Commercial Code SigningmsCodeComMicrosoft Individual Code SigningmsCodeIndTime StampingtimeStampingE-mail ProtectionemailProtectionCode SigningcodeSigningTLS Web Client AuthenticationclientAuthTLS Web Server AuthenticationserverAuthid-kpPKIXX509v3 Extended Key UsageextendedKeyUsagezlib compressionZLIBrun length compressionRLErc5-ofbRC5-OFBrc5-cfbRC5-CFBrc5-ecbRC5-ECBrc5-cbcRC5-CBCripemd160WithRSARSA-RIPEMD160ripemd160RIPEMD160dsaEncryptionDSAsha1WithRSARSA-SHA1-2md5-sha1MD5-SHA1dsaWithSHA1DSA-SHA1pbeWithMD5AndCast5CBCcast5-ofbCAST5-OFBcast5-cfbCAST5-CFBcast5-ecbCAST5-ECBcast5-cbcCAST5-CBCdescriptiontitlemd5WithRSARSA-NP-MD5X509v3 CRL Distribution PointscrlDistributionPointsinitialssurnameSNgivenNameGNrc2-40-cbcRC2-40-CBCrc4-40RC4-40mdc2WithRSARSA-MDC2mdc2MDC2bf-ofbBF-OFBbf-cfbBF-CFBbf-ecbBF-ECBbf-cbcBF-CBCX509v3 Authority Key IdentifierauthorityKeyIdentifierX509v3 Certificate PoliciescertificatePoliciesX509v3 CRL NumbercrlNumberX509v3 Basic ConstraintsbasicConstraintsX509v3 Issuer Alternative NameissuerAltNameX509v3 Subject Alternative NamesubjectAltNameX509v3 Private Key Usage PeriodprivateKeyUsagePeriodX509v3 Key UsagekeyUsageX509v3 Subject Key IdentifiersubjectKeyIdentifierid-cedesx-cbcDESX-CBCNetscape Certificate SequencensCertSequenceNetscape CommentnsCommentNetscape SSL Server NamensSslServerNameNetscape CA Policy UrlnsCaPolicyUrlNetscape Renewal UrlnsRenewalUrlNetscape CA Revocation UrlnsCaRevocationUrlNetscape Revocation UrlnsRevocationUrlNetscape Base UrlnsBaseUrlNetscape Cert TypensCertTypedsaWithSHA1-oldDSA-SHA1-oldPBKDF2pbeWithSHA1AndRC2-CBCPBE-SHA1-RC2-64dsaEncryption-oldDSA-olddsaWithSHADSA-SHAsha1WithRSAEncryptionRSA-SHA1sha1SHA1des-ede3-ofbDES-EDE3-OFBdes-ede-ofbDES-EDE-OFBdes-ede3-cfbDES-EDE3-CFBdes-ede-cfbDES-EDE-CFBNetscape Data TypensDataTypeNetscape Certificate ExtensionnsCertExtNetscape Communications Corp.NetscapeextendedCertificateAttributesunstructuredAddresschallengePasswordcountersignaturesigningTimemessageDigestcontentTypeunstructuredNameemailAddresspkcs9idea-ofbIDEA-OFBdes-ofbDES-OFBdes-ede3-cbcDES-EDE3-CBCdes-ede-cbcDES-EDE-CBCshaWithRSAEncryptionRSA-SHAshaSHArc2-ofbRC2-OFBrc2-cfbRC2-CFBrc2-ecbRC2-ECBrc2-cbcRC2-CBCidea-ecbIDEA-ECBidea-cfbIDEA-CFBidea-cbcIDEA-CBCdes-ede3DES-EDE3des-edeDES-EDEdes-cbcDES-CBCdes-cfbDES-CFBdes-ecbDES-ECBdhKeyAgreementpkcs3pkcs7-encryptedDatapkcs7-digestDatapkcs7-signedAndEnvelopedDatapkcs7-envelopedDatapkcs7-signedDatapkcs7-datapkcs7RSAorganizationalUnitNameOUorganizationNamestateOrProvinceNameSTlocalityNamecountryNamecommonNameCNdirectory services (X.500)X500pbeWithMD5AndDES-CBCPBE-MD5-DESpbeWithMD2AndDES-CBCPBE-MD2-DESmd5WithRSAEncryptionRSA-MD5md2WithRSAEncryptionRSA-MD2rsaEncryptionrc4RC4md5MD5md2MD2RSA Data Security, Inc. PKCSpkcsRSA Data Security, Inc.rsadsiundefinedUNDEF.\crypto\objects\obj_dat.c.%lu%d.%lu.\crypto\objects\o_names.cTYPE=NULL.\crypto\evp\evp_pbe.c.\crypto\evp\digest.cctx->digest->md_size <= EVP_MAX_MD_SIZEP]Bp]B]BÐ"Cà$C@`€_F@zB|F{B@^Fp_Fh_FÀ]Bÿÿÿÿˆ^FT_FL_Fð]BÿÿÿÿÀ^F8_F^B_BP_B@aBø^F,_FX509_NAMEX509_NAME_INTERNALNameX509_NAME_ENTRIESRDNSX509_NAME_ENTRYobject.\crypto\asn1\x_name.cocsphelperOCSP helperanyAny PurposecrlsignCRL signingsmimeencryptS/MIME encryptionsmimesignS/MIME signingnssslserverNetscape SSL serversslserverSSL serversslclientSSL client.\crypto\x509v3\v3_purp.cmBü`Fp{Bð`FpyB `Fˆ`F ä`FX509_PUBKEYpublic_keyalgor.\crypto\asn1\x_pubkey.cBig Number part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\bn\bn_lib.c€_F@zBÔbF@{B|FÀyBhbF ÄbFX509_EXTENSIONcritical`gF PgF@gF,gF gFgF gFìfFÜfFÌfF¸fF¨fFfF|fFdfFTfFüÿÿÿHfF8fF=(fFP(fF) fFÿÿÿÿüeFìeFÜeFASN1_FBOOLEANASN1_TBOOLEANASN1_BOOLEANDIRECTORYSTRINGDISPLAYTEXTASN1_PRINTABLEASN1_SEQUENCEASN1_ANYASN1_BMPSTRINGASN1_UNIVERSALSTRINGASN1_VISIBLESTRINGASN1_GENERALIZEDTIMEASN1_UTCTIMEASN1_GENERALSTRINGASN1_IA5STRINGASN1_T61STRINGASN1_PRINTABLESTRINGASN1_UTF8STRINGASN1_OBJECTASN1_NULLASN1_OCTET_STRINGASN1_BIT_STRINGASN1_ENUMERATEDASN1_INTEGERÌgFàØBÀgFàØBpgF´gFX509_VALnotAfternotBefore”I@zB(hF€zBØgFhFX509_ALGORparameterType=Field=, Type=.\crypto\asn1\tasn_dec.c.\crypto\asn1\tasn_enc.c.\crypto\asn1\tasn_new.c.\crypto\ex_data.c‰,iFÀyBÔ FÐB‰$iFðxB¸hF iFAUTHORITY_KEYIDserialkeyidäiF@zBÜiF@zBÔiFPzB ,iFÀyBÌiFp{B8iF¼iFX509_CERT_AUXotheraliasrejecttrust.\crypto\asn1\a_dup.c.\crypto\buffer\buffer.c.\crypto\asn1\a_object.c@A ]E@]E`¿BÐ"Cà$C@d.\crypto\engine\eng_init.cRAND part of OpenSSL 0.9.7c 30 Sep 2003@@.\crypto\rand\md_rand.cYou need to read the OpenSSL FAQ, http://www.openssl.org/support/faq.html....................DSA part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\dsa\dsa_lib.cRSA part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\rsa\rsa_lib.cDiffie-Hellman part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\dh\dh_lib.cOCSP requestOCSP responderObject SignerS/MIME emailSSL ServerSSL ClientcompatibleÀ¤lFASN1_TIME.\crypto\asn1\a_time.c%04d%02d%02d%02d%02d%02dZ.\crypto\asn1\a_gentm.c%02d%02d%02d%02d%02d%02dZ.\crypto\asn1\a_utctm.c.\crypto\x509\x509_lu.cè FðxB4oFàØBœ FàxBHmF$oF°åBDÒHðxB| Fp{BÔ F^B oFàØB oFàØBoF åB•œ FàxBÀmF¨mFônF ðnFPæB| Fp{BÜ FpyBˆnFpnFänFX509_CRLcrlX509_CRL_INFOrevokednextUpdatelastUpdateX509_REVOKEDrevocationDatedefault.\crypto\bio\bio_lib.cFILE pointerfopen('','').\crypto\bio\bss_file.cr+a+.\crypto\engine\tb_digest.c.\crypto\rsa\rsa_sign.csignature has problems, re-make with post SSLeay045 ppFP{BhpFðxBpFTpFBASIC_CONSTRAINTSpathlencaCAsection:,name:,value:.\crypto\x509v3\v3_bcons.c.\crypto\asn1\a_int.c`.CÔÒH@³C¸ÒH@³CàpFÈpF0sF0/CDÒH€´C ÓH0³CìÒH0³C$ÔH0³C(sF0³CsF0³C@qF(qFDDRF0/C ÓH0³CìÒH0³C$ÔH0³CðqFØqFDDRF(sF0³C ÓH0³CìÒH0³C$ÔH0³CPrFDDRF0/C(sF0³CÀ/CØrFÀrFDDRFpriv_keypub_keyDSA_SIG.\crypto\dsa\dsa_asn1.c.\crypto\asn1\d2i_pu.c.\crypto\asn1\tasn_utl.c.\crypto\asn1\a_bitstr.c€SHA1 part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\engine\eng_lib.c.\crypto\engine\eng_table.cOpenSSL DSA method.\crypto\dsa\dsa_ossl.cEric Young's PKCS#1 RSA.\crypto\rsa\rsa_eay.c.\crypto\bn\bn_blind.c.\crypto\bn\bn_ctx.c.\crypto\bn\bn_gcd.c.\crypto\bn\bn_rand.cOpenSSL DH Method.\crypto\dh\dh_key.c.\crypto\asn1\a_verify.c gC DÒHðxBÀ F^BHvF0mB‹.\crypto\x509v3\v3_crld.c.\crypto\x509v3\v3_akey.calways\‰F„Cÿÿÿÿ‡F\‰FP‰F@zBD‰F@„C8‡F8‰F F€zB¤,‰F`zB¥‰FP„C˜‡F€‡F‰F@zBÿÿÿÿ‰F0„Cè‡F‰FøˆF`„CðˆF {B0ˆFäˆFÔˆF {BȈFðxBxˆF¼ˆFNOTICEREFnoticenosorganizationUSERNOTICEexptextnoticerefPOLICYQUALINFOpqualidd.usernoticed.cpsuriPOLICYINFOqualifierspolicyidCERTIFICATEPOLICIES.\crypto\x509v3\v3_cpols.cuserNoticeCPSpolicyIdentifieria5orgnoticeNumbersexplicitText%*sCPS: %s %*sExplicit Text: %s %*sNumber%s: %*sOrganization: %s %*sUser Notice: %*sUnknown Qualifier: %*sPolicy: Registered IDIP AddressDirNameURIDNSemailEdiPartyNameX400NameothernameIP Address:%d.%d.%d.%dIP Address:DirName: URI:%sDNS:%semail:%sEdiPartyName:X400Name:othername:copy.\crypto\x509v3\v3_alt.cmoveRID‰ÌgFpzB‰ÀgFpzB¨‹Fì‹FPKEY_USAGE_PERIODNot After: Not Before: decipherOnlyDecipher OnlyencipherOnlyEncipher OnlycRLSignCRL SignkeyCertSignCertificate SignkeyAgreementKey AgreementdataEnciphermentData EnciphermentkeyEnciphermentKey EnciphermentnonRepudiationNon RepudiationdigitalSignatureDigital SignatureobjCAObject Signing CAemailCAS/MIME CAsslCASSL CAreservedUnusedobjsignObject Signingserverclient.\crypto\x509v3\v3_bitst.c.\crypto\x509v3\v3_skey.chash.\crypto\x509v3\v3_ia5.c.\crypto\x509v3\v3_utl.cNOfalseyesYEStrueЯI”ŽFЯI”ŽFBIGNUMð¯IÿÿÿäŽFð¯IÜŽFZLONGLONG.\crypto\asn1\x_long.c.\crypto\bn\bn_add.c.\crypto\bn\bn_div.c.\crypto\bn\bn_mont.c.\crypto\bn\bn_exp2.c.\crypto\bn\bn_exp.c.\crypto\rsa\rsa_none.c.\crypto\rsa\rsa_ssl.c.\crypto\rsa\rsa_oaep.c.\crypto\rsa\rsa_pk1.c.\crypto\evp\p_verify.c¤F€zB”F€zBøF „F€_F@zBÀD@F „FX509_ATTRIBUTEvalue.singlevalue.set.\crypto\evp\p_sign.c.\crypto\asn1\asn_pack.c.\crypto\asn1\a_set.cD™Fp{BÜ FpyB”<™F°íA‘F ,™F™Fp{B ™FÀyBü˜FÀyB è FðxB`‘Fð˜Fè˜F D•ИFàxBБFĘF‘DÒHðxB‘´˜FÐB¨˜F°D• ”˜FàxB’F„˜Fx˜FÀD‘d˜FDˆ’FT˜FD˜F@zB8˜FÀyBÐ’F(˜F˜F`yB‘˜FÐD“Fø—Fè—F^BÜ—FÀyB`“FЗFÀ—FpzB‘¬—F`yB¨“F˜—FˆŒ—F zBˆ|—FðDˆl—F zBð“F\—FT—F DH—F D<—FpzB‘ oFpzB•(—FàxBP”F—F‘DÒHðxB —FàD—FpzB ô–F D•à–FàxBØ”FЖFÀ–F DD™Fp{BÜ FpyB• <™F°íA`•F°–F‘¨–F`zB‘ –FðxB‘˜–FpzBЕF Œ–FÔ F^B„–F€uC0–Ft–FOCSP_SERVICELOClocatorOCSP_CRLIDcrlTimecrlNumcrlUrlOCSP_BASICRESPtbsResponseDataOCSP_RESPDATAresponseExtensionsresponsesproducedAtresponderIdOCSP_SINGLERESPsingleExtensionsthisUpdatecertStatuscertIdOCSP_CERTSTATUSvalue.unknownvalue.revokedvalue.goodOCSP_REVOKEDINFOrevocationReasonrevocationTimeOCSP_RESPIDvalue.byKeyvalue.byNameOCSP_RESPONSEresponseBytesresponseStatusOCSP_RESPBYTESresponseresponseTypeOCSP_REQUESToptionalSignaturetbsRequestOCSP_REQINFOrequestExtensionsrequestListrequestorNameOCSP_ONEREQsingleRequestExtensionsreqCertOCSP_CERTIDissuerKeyHashissuerNameHashhashAlgorithmOCSP_SIGNATUREcertssignatureAlgorithmDecNovOctSepAugJulJunMayAprMarFebJan.\crypto\asn1\t_x509.c:Bad time value%s %2d %02d:%02d:%02d %d%s GMT\ 000123456789ABCDEFÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=, + .\crypto\asn1\a_strex.c\%02X\U%04lX\W%08lX.\crypto\asn1\a_enum.cCONF part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\conf\conf_lib.cgroup= name=.\crypto\bn\bn_print.c%09lu.\crypto\bn\bn_recp.c%lu:%s:%s:%d:%s BMPSTRINGUNIVERSALSTRINGGENERALSTRINGVISIBLESTRINGGRAPHICSTRINGGENERALIZEDTIMEUTCTIMEIA5STRINGVIDEOTEXSTRINGT61STRINGPRINTABLESTRINGNUMERICSTRINGSETSEQUENCEUTF8STRINGENUMERATEDREALEXTERNALOBJECT DESCRIPTOROBJECTOCTET STRINGBIT STRINGINTEGERBOOLEANEOC%-18s%2d %-15s(unknown)WIN32OpenSSL defaultCONF_def part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\conf\conf_def.cline [[%s]] [%s] %s=%s ENV.\crypto\conf\conf_api.c.\ssl\ssl_lib.cALL:!ADH:+RC4:@STRENGTHs->sid_ctx_length <= sizeof s->sid_ctxssl3-sha1ssl3-md5ssl2-md5SSLv2SSLv3TLSv1dss1DSS1.\ssl\ssl_sess.c%-23s %s Kx=%-8s Au=%-4s Enc=%-9s Mac=%-4s%s ø¥Fÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿè¥Fð‡Ô¥FÀÌ¥F ?Ä¥F?¼¥F?´¥F?¬¥F?¤¥F? ¥F?œ¥FÐ ÿ”¥FÀŒ¥F@À„¥F€À|¥FÀt¥FÀp¥FÀl¥F€Àh¥Fð‡`¥F ð‡Ø\F@ð‡\¥F€ð‡T¥Fð‡L¥Fð‡D¥Fð‡@¥F€ð‡à\FüWF ZF˜]Fð‡8¥F ÿ [FAÿ4¥Fÿ0¥Fÿÿ‡¨F `°F@`¸F@`,¥F$¥F¥Fü ¥Fü¥F ü¥F@üø¤F€üHIGHMEDIUMLOWEXPORT56EXPORT40EXPORTEXPFZAADHKRB5AESeFZAeNULLIDEARC23DESDESDSSaDHaNULLaFZAaDSSaRSAaKRB5EDHDHkFZAkEDHkDHdkDHrkRSAkKRB5COMPLEMENTOFDEFAULTCOMPLEMENTOFALLALLDEFAULT.\ssl\ssl_ciph.cSTRENGTH(NONE).\ssl\t1_clnt.c.\ssl\s2_clnt.c.\ssl\s3_clnt.c.\ssl\s23_clnt.c.\ssl\ssl_rsa.cSSL for verify callback.\ssl\ssl_cert.cx509 verification setup problemsx509 libwrong version numberwrong ssl versionwrong signature sizewrong signature lengthwrong number of key bitswrong message typewrong cipher returnedwrite bio not setunsupported ssl versionunsupported protocolunsupported optionunsupported compression algorithmunsupported cipherunknown stateunknown ssl versionunknown remote error typeunknown protocolunknown pkey typeunknown key exchange typeunknown cipher typeunknown cipher returnedunknown certificate typeunknown alert typeuninitializedunexpected recordunexpected messageunable to load ssl3 sha1 routinesunable to load ssl3 md5 routinesunable to load ssl2 md5 routinesunable to find ssl methodunable to find public key parametersunable to find dh parametersunable to extract public keyunable to decode dh certstried to use unsupported ciphertls rsa encrypted value length is wrongtls peer did not respond with certificate listtls client cert req with anon ciphertlsv1 alert user cancelledtlsv1 alert unknown catlsv1 alert record overflowtlsv1 alert protocol versiontlsv1 alert no renegotiationtlsv1 alert internal errortlsv1 alert insufficient securitytlsv1 alert export restrictiontlsv1 alert decrypt errortlsv1 alert decryption failedtlsv1 alert decode errortlsv1 alert access deniedssl session id is differentssl session id has bad lengthssl session id context too longssl session id conflictssl session id callback failedssl library has no ciphersssl handshake failuressl ctx has no default ssl versionsslv3 alert unsupported certificatesslv3 alert unknown remote error typesslv3 alert unexpected messagesslv3 alert peer error unsupported certificate typesslv3 alert peer error no ciphersslv3 alert peer error no certificatesslv3 alert peer error certificatesslv3 alert no certificatesslv3 alert illegal parametersslv3 alert handshake failuresslv3 alert decompression failuresslv3 alert certificate unknownsslv3 alert certificate revokedsslv3 alert certificate expiredsslv3 alert bad record macsslv3 alert bad certificatessl3 session id too shortssl3 session id too longssl2 connection id too longssl23 doing session id reusesignature for non signing certificateshort readsession id context uninitializedreuse cipher list not zeroreuse cert type not zeroreuse cert length not zerorequired cipher missingrecord too smallrecord too largerecord length mismatchread wrong packet typeread bio not setpublic key not rsapublic key is not rsapublic key encrypt errorprotocol is shutdownproblems mapping cipher functionspre mac length too longpeer error unsupported certificate typepeer error no cipherpeer error no certificatepeer error certificatepeer errorpeer did not return a certificatepath too longpacket length too longold session cipher not returnednull ssl method passednull ssl ctxno verify callbackno shared cipherno publickeyno protocols availableno private key assignedno privatekeyno method specifiedno compression specifiedno client cert receivedno cipher matchno cipher listno ciphers specifiedno ciphers passedno ciphers availableno certificate specifiedno certificate setno certificate returnedno certificate assignedno certificates returnednon sslv2 initial packetmissing verify messagemissing tmp rsa pkeymissing tmp rsa keymissing tmp dh keymissing rsa signing certmissing rsa encrypting certmissing rsa certificatemissing export tmp rsa keymissing export tmp dh keymissing dsa signing certmissing dh rsa certmissing dh keymissing dh dsa certmessage too longmaster key too longlibrary has no cipherslibrary buglength too shortlength mismatchkrb5 server tkt skewkrb5 server tkt not yet validkrb5 server tkt expiredkrb5 server rd_req (keytab perms?)krb5 server initkrb5 server bad ticketkrb5 client mk_req (expired tkt?)krb5 client initkrb5 client get credkrb5 client cc principal (no tkt?)krb5key arg too longinvalid trustinvalid purposeinvalid commandinvalid challenge lengthillegal paddinghttp requesthttps proxy requestgot a fin before a ccsextra data in messageexcessive message sizeerror in received cipher listerror generating tmp rsa keyencrypted length too longdigest check faileddh public value length is wrongdecryption failed or bad record macdecryption faileddata length too longdata between ccs and finishedconnection type not setconnection id is differentcompression library errorcompression failurecompressed length too longcipher table src errorcipher or hash unavailablecipher code wrong lengthchallenge is differentcert length mismatchcertificate verify failedccs received earlyca dn too longca dn length mismatchbn libblock cipher pad is wrongbio not setbad write retrybad statebad ssl session id lengthbad ssl filetypebad signaturebad rsa signaturebad rsa modulus lengthbad rsa e lengthbad rsa encryptbad rsa decryptbad response argumentbad protocol version numberbad packet lengthbad message typebad mac decodebad lengthbad hello requestbad dsa signaturebad digest lengthbad dh p lengthbad dh pub key lengthbad dh g lengthbad decompressionbad data returned by callbackbad checksumbad change cipher specbad authentication typebad alert recordattempt to reuse session in different contextapp data in handshakeWRITE_PENDINGTLS1_SETUP_KEY_BLOCKTLS1_ENCTLS1_CHANGE_CIPHER_STATESSL_writeSSL_VERIFY_CERT_CHAINSSL_use_RSAPrivateKey_fileSSL_use_RSAPrivateKey_ASN1SSL_use_RSAPrivateKeySSL_use_PrivateKey_fileSSL_use_PrivateKey_ASN1SSL_use_PrivateKeySSL_use_certificate_fileSSL_use_certificate_ASN1SSL_use_certificateSSL_UNDEFINED_FUNCTIONSSL_shutdownSSL_set_wfdSSL_set_trustSSL_set_session_id_contextSSL_set_sessionSSL_set_rfdSSL_set_purposeSSL_SET_PKEYSSL_set_fdSSL_SET_CERTSSL_SESS_CERT_NEWSSL_SESSION_print_fpSSL_SESSION_newSSL_RSA_PUBLIC_ENCRYPTSSL_RSA_PRIVATE_DECRYPTSSL_readSSL_newSSL_load_client_CA_fileSSL_INIT_WBIO_BUFFERSSL_GET_SIGN_PKEYSSL_GET_SERVER_SEND_CERTSSL_GET_PREV_SESSIONSSL_GET_NEW_SESSIONSSL_do_handshakeSSL_CTX_use_RSAPrivateKey_fileSSL_CTX_use_RSAPrivateKey_ASN1SSL_CTX_use_RSAPrivateKeySSL_CTX_use_PrivateKey_fileSSL_CTX_use_PrivateKey_ASN1SSL_CTX_use_PrivateKeySSL_CTX_use_certificate_fileSSL_CTX_use_certificate_chain_fileSSL_CTX_use_certificate_ASN1SSL_CTX_use_certificateSSL_CTX_set_trustSSL_CTX_set_ssl_versionSSL_CTX_set_session_id_contextSSL_CTX_set_purposeSSL_CTX_newSSL_CTX_check_private_keySSL_ctrlSSL_CREATE_CIPHER_LISTSSL_COMP_add_compression_methodSSL_clearSSL_CIPHER_STRENGTH_SORTSSL_CIPHER_PROCESS_RULESTRSSL_check_private_keySSL_CERT_NEWSSL_CERT_INSTANTIATESSL_CERT_INSTSSL_CERT_DUPSSL_BYTES_TO_CIPHER_LISTSSL_BAD_METHODSSL_add_file_cert_subjects_to_stackSSL_add_dir_cert_subjects_to_stackSSL3_WRITE_PENDINGSSL3_WRITE_BYTESSSL3_SETUP_KEY_BLOCKSSL3_SETUP_BUFFERSSSL3_SEND_SERVER_KEY_EXCHANGESSL3_SEND_SERVER_HELLOSSL3_SEND_SERVER_CERTIFICATESSL3_SEND_CLIENT_VERIFYSSL3_SEND_CLIENT_KEY_EXCHANGESSL3_SEND_CLIENT_CERTIFICATESSL3_SEND_CERTIFICATE_REQUESTSSL3_READ_NSSL3_READ_BYTESSSL3_PEEKSSL3_OUTPUT_CERT_CHAINSSL3_GET_SERVER_HELLOSSL3_GET_SERVER_DONESSL3_GET_SERVER_CERTIFICATESSL3_GET_RECORDSSL3_GET_MESSAGESSL3_GET_KEY_EXCHANGESSL3_GET_FINISHEDSSL3_GET_CLIENT_KEY_EXCHANGESSL3_GET_CLIENT_HELLOSSL3_GET_CLIENT_CERTIFICATESSL3_GET_CERT_VERIFYSSL3_GET_CERTIFICATE_REQUESTSSL3_GENERATE_KEY_BLOCKSSL3_ENCSSL3_CTX_CTRLSSL3_CTRLSSL3_CONNECTSSL3_CLIENT_HELLOSSL3_CHECK_CERT_AND_ALGORITHMSSL3_CHANGE_CIPHER_STATESSL3_CALLBACK_CTRLSSL3_ACCEPTSSL2_WRITESSL2_SET_CERTIFICATESSL2_READ_INTERNALSSL2_READSSL2_PEEKSSL2_GENERATE_KEY_MATERIALSSL2_ENC_INITSSL2_CONNECTSSL2_ACCEPTSSL23_WRITESSL23_READSSL23_PEEKSSL23_GET_SERVER_HELLOSSL23_GET_CLIENT_HELLOSSL23_CONNECTSSL23_CLIENT_HELLOSSL23_ACCEPTSERVER_VERIFYSERVER_HELLOSERVER_FINISHREQUEST_CERTIFICATEREAD_Ni2d_SSL_SESSIONGET_SERVER_VERIFYGET_SERVER_HELLOGET_SERVER_FINISHEDGET_CLIENT_MASTER_KEYGET_CLIENT_HELLOGET_CLIENT_FINISHEDDO_SSL3_WRITEd2i_SSL_SESSIONCLIENT_MASTER_KEYCLIENT_HELLOCLIENT_FINISHEDCLIENT_CERTIFICATEserver finishedclient finishedTLSv1 part of OpenSSL 0.9.7c 30 Sep 2003RC4-64-MD5DES-CBC3-MD5DES-CBC-MD5IDEA-CBC-MD5RC2-CBC-MD5EXP-RC2-CBC-MD5RC4-MD5EXP-RC4-MD5SSLv2 part of OpenSSL 0.9.7c 30 Sep 2003.\ssl\s2_lib.cs->session->master_key_length >= 0 && s->session->master_key_length < sizeof s->session->master_keyerror >= 0 && error <= sizeof bufc->iv_len <= sizeof s->session->key_args->s2->key_material_length <= sizeof s->s2->key_material.\ssl\s2_enc.c.\ssl\s2_pkt.cmac_size <= MAX_MAC_SIZESRVRCLNTADH-AES256-SHADHE-RSA-AES256-SHADHE-DSS-AES256-SHADH-RSA-AES256-SHADH-DSS-AES256-SHAAES256-SHAADH-AES128-SHADHE-RSA-AES128-SHADHE-DSS-AES128-SHADH-RSA-AES128-SHADH-DSS-AES128-SHAAES128-SHADHE-DSS-RC4-SHAEXP1024-DHE-DSS-RC4-SHAEXP1024-RC4-SHAEXP1024-DHE-DSS-DES-CBC-SHAEXP1024-DES-CBC-SHAEXP1024-RC2-CBC-MD5EXP1024-RC4-MD5FZA-FZA-CBC-SHAFZA-NULL-SHAEDH-RSA-DES-CBC3-SHAEDH-RSA-DES-CBC-SHAEXP-EDH-RSA-DES-CBC-SHAEDH-DSS-DES-CBC3-SHAEDH-DSS-DES-CBC-SHAEXP-EDH-DSS-DES-CBC-SHADH-RSA-DES-CBC3-SHADH-RSA-DES-CBC-SHAEXP-DH-RSA-DES-CBC-SHADH-DSS-DES-CBC3-SHADH-DSS-DES-CBC-SHAEXP-DH-DSS-DES-CBC-SHADES-CBC3-SHADES-CBC-SHAEXP-DES-CBC-SHAIDEA-CBC-SHARC4-SHAADH-DES-CBC3-SHAADH-DES-CBC-SHAEXP-ADH-DES-CBC-SHAADH-RC4-MD5EXP-ADH-RC4-MD5NULL-SHANULL-MD5SSLv3 part of OpenSSL 0.9.7c 30 Sep 2003.\ssl\s3_lib.cCCCBB.\ssl\s3_enc.c.\ssl\s3_both.c.\ssl\s3_pkt.cSSL alert number SSLv2/3 compatibility part of OpenSSL 0.9.7c 30 Sep 2003.\ssl\s23_lib.cIV blockclient write keyserver write key.\ssl\t1_enc.ckey expansionmaster secretÿÿÿÿ¿BEÓBE.\crypto\comp\comp_lib.cEVP part of OpenSSL 0.9.7c 30 Sep 2003EVP_CIPHER_CTX_iv_length(ctx) <= sizeof ctx->ivctx->cipher->block_size == 1 || ctx->cipher->block_size == 8 || ctx->cipher->block_size == 16.\crypto\evp\evp_enc.cbl <= sizeof ctx->bufinl > 0b <= sizeof ctx->bufb <= sizeof ctx->finalbuffer.\crypto\bio\bf_buff.ctq ]E@]E`¿B@ÌCpzEtBqF@dp]E]E°]EÐ"Cà$C˜£ _Eà]Eôp~E~E¥ _E^Eôp~E~E¤ _EP^Eôp~E~E¢ _E^Eôp~E~E§ _Eà]Eôp~E~E© _E^Eôp~E~E¨ _EP^Eôp~E~E¦ _E^Eôp~E~E«  _Eà]Eôp~E~E­  _E^Eôp~E~E¬  _EP^Eôp~E~Eª  _E^Eôp~E~E%J `E€_EÐaEÐ`E@bE'K `E°_EÐaEÐ`E@bE(L `E``EÐaEÐ`E@bE&I `Eð_EÐaEÐ`E@bE¦J `E€_EÐaEÐ`E@bEbJ `E€_EÐaEÐ`E@bE.\crypto\evp\e_rc2.cl <= sizeof iv°bEÐbEa°bEÐbE"dE`cEØp~E~E#dEÀcEØp~E~E.dEcEØp~E~E$dEcEØp~E~E+ðeE`eE€p~E~E<ðeE eE€p~E~E>ðeE eE€p~E~E ðeE dE€p~E~E,@fE`eE€p~E~E=@fE eE€p~E~E?@fE eE€p~E~E!@fE dE€p~E~E°gE0gE€p~E~E°gE`gE€p~E~E-°gEgE€p~E~E°gEfE€p~E~EphE€hE`iEÓH0³C $ÔH0³C4ÚF´CØÙFÀÙFL ¥FlengthCERTIFICATECERTIFICATE REQUESTNEW CERTIFICATE REQUESTX509 CRLRSA PRIVATE KEYDSA PRIVATE KEY.\crypto\pem\pem_pkey.cENCRYPTED PRIVATE KEYPRIVATE KEYANY PRIVATE KEYlen <= sizeof ctx->key.\crypto\hmac\hmac.cj <= sizeof ctx->key.\crypto\engine\tb_cipher.cLoad certs from files in a directory.\crypto\x509\by_dir.c%s/%08lx.%s%dLoad file into cache.\crypto\x509\by_file.cMD2 part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\evp\evp_lib.cl <= sizeof c->ivj <= sizeof c->iv¥ccÆ„||ø™wwî{{ö òòÿ½kkÖ±ooÞTÅÅ‘P00`©ggÎ}++Vþþçb×׵櫫MšvvìEÊÊ‚‚@Éɉ‡}}úúúïëYY²ÉGGŽ ððûì­­AgÔÔ³ý¢¢_꯯E¿œœ#÷¤¤S–rrä[ÀÀ›Â··uýýᮓ“=j&&LZ66lA??~÷÷õOÌ̃\44hô¥¥Q4ååÑññù“qqâsØØ«S11b?* RÇÇ•e##F^ÃÃ(0¡––7 µšš/ 6$›€€=ââß&ëëÍi''NͲ²Ÿuuê žƒƒt,,X.4-6²nnÜîZZ´û  [öRR¤M;;vaÖַγ³}{))R>ããÝq//^—„„õSS¦hÑѹ,ííÁ` @üüãȱ±yí[[¶¾jjÔFËËÙ¾¾gK99rÞJJ”ÔLL˜èXX°JÏÏ…kÐл*ïïÅ媪OûûíÅCC†×MMšU33f”……ÏEEŠùùéþðPP D<ÝKK–ܽ½a†‹‹ …ŠŠppàB>>|ĵµqªffÌØHHöö÷£aaÂ_55jùWW®Ð¹¹i‘††XÁÁ™':¹žž'8ááÙøøë³˜˜+3"»iiÒpÙÙ©‰ŽŽ§””3¶››-"<’‡‡ ééÉIηÿUUªx((PzßߥŒŒø¡¡Y€‰‰  Ú¿¿e1ææ×ÆBB„¸hhÐÃAA‚°™™)w--Z˰°{üTT¨Ö»»m:,ccÆ¥||ø„wwî™{{öòòÿ kkÖ½ooÞ±ÅÅ‘T00`PggΩ++V}þþç××µb««MævvìšÊÊE‚‚Éɉ@}}ú‡úúïYY²ëGGŽÉððû ­­AìÔÔ³g¢¢_ý¯¯Eꜜ#¿¤¤S÷rrä–ÀÀ›[··uÂýýá““=®&&Lj66lZ??~A÷÷õÌ̃O44h\¥¥QôååÑ4ññùqqâ“ØØ«s11bS*? ÇÇ•R##FeÃÃ^0(––7¡ šš/µ $6€€›ââß=ëëÍ&''Ni²²ÍuuêŸ ƒƒž,,Xt4.6-nnܲZZ´î  [ûRR¤ö;;vMÖÖ·a³³}Î))R{ããÝ>//^q„„—SS¦õÑѹhííÁ, @`üüã±±yÈ[[¶íjjÔ¾ËËF¾¾gÙ99rKJJ”ÞLL˜ÔXX°èÏÏ…JÐлkïïÅ*ªªOåûûíCC†ÅMMš×33fU……”EEŠÏùùéþPP ð<!KK–ݽ½aÜ‹‹ †ŠŠ…ppà>>|BµµqÄff̪HHØöö÷aa£55j_WW®ù¹¹iІ†‘ÁÁ™X:'žž'¹ááÙ8øøë˜˜+³"3iiÒ»ÙÙ©pŽŽ‰””3§››-¶<"‡‡’ééÉ Î·IUUªÿ((PxßߥzŒŒ¡¡Yø‰‰ € ¿¿eÚææ×1BB„ÆhhиAA‚Ù™)°--Zw°°{ËTT¨ü»»mÖ,:cÆ¥c|ø„|wî™w{ö{òÿ òkÖ½koÞ±oÅ‘TÅ0`P0gΩg+V}+þçþ×µb׫Mæ«vìšvÊEÊ‚‚ɉ@É}ú‡}úïúY²ëYGŽÉGðû ð­Aì­Ô³gÔ¢_ý¢¯Eꯜ#¿œ¤S÷¤rä–rÀ›[À·u·ýáý“=®“&Lj&6lZ6?~A?÷õ÷̃OÌ4h\4¥Qô¥åÑ4åñùñqâ“qØ«sØ1bS1*? Ç•RÇ#Fe#Ã^Ã0(–7¡– š/µš $6€›€âß=âëÍ&ë'Ni'²ͲuêŸu  ƒžƒ,Xt,4.6-nܲnZ´îZ [û R¤öR;vM;Ö·aÖ³}γ)R{)ãÝ>ã/^q/„—„S¦õSѹhÑíÁ,í @` üãü±yȱ[¶í[jÔ¾jËF˾gÙ¾9rK9J”ÞJL˜ÔLX°èXÏ…JÏлkÐïÅ*ïªOåªûíûC†ÅCMš×M3fU3…”…EŠÏEùéùþP ðP!K–ÝK½aܽ‹ †‹Š…Špàp>|B>µqĵf̪fHØHö÷öa£a5j_5W®ùW¹i醑†Á™XÁ:'ž'¹žáÙ8áøëø˜+³˜"3iÒ»iÙ©pÙŽ‰Ž”3§”›-¶›<"‡’‡éÉ é·IÎUªÿU(Px(ߥzߌŒ¡Yø¡‰ €‰  ¿eÚ¿æ×1æB„ÆBhиhA‚ÃA™)°™-Zw-°{˰T¨üT»mÖ»,:Æ¥ccø„||î™wwö{{ÿ òòÖ½kkÞ±oo‘TÅÅ`P00ΩggV}++çþþµb××Mæ««ìšvvEÊÊ‚‚‰@ÉÉú‡}}ïúú²ëYYŽÉGGû ððAì­­³gÔÔ_ý¢¢E꯯#¿œœS÷¤¤ä–rr›[ÀÀu··áýý=®““Lj&&lZ66~A??õ÷÷ƒOÌÌh\44Qô¥¥Ñ4ååùññâ“qq«sØØbS11*? •RÇÇFe##^ÃÃ0(7¡–– /µšš $6›€€ß=ââÍ&ëëNi''Ͳ²êŸuu žƒƒXt,,4.6-ܲnn´îZZ[û  ¤öRRvM;;·aÖÖ}γ³R{))Ý>ãã^q//—„„¦õSS¹hÑÑÁ,íí@` ãüüyȱ±¶í[[Ô¾jjFËËgÙ¾¾rK99”ÞJJ˜ÔLL°èXX…JÏÏ»kÐÐÅ*ïïO媪íûû†ÅCCš×MMfU33”……ŠÏEEéùùþ ðPPxD<<%ºŸŸK㨨¢óQQ]þ££€À@@Š?­’’!¼pH88ñõõcß¼¼wÁ¶¶¯uÚÚBc!! 0åÿÿýóó¿mÒÒLÍÍ &5Ã/ìì¾á__5¢——ˆÌDD.9“WÄÄUò§§ü‚~~zG==Ȭddºç]]2+æ•ssÀ ``˜žÑOO£ÜÜDf""T~**;« ƒˆˆŒÊFFÇ)îîkÓ¸¸(<§yÞÞ¼â^^ ­vÛÛÛ;ààdV22tN:: ’ÛII Hl$$¸ä\\Ÿ]½nÓÓCשּׁĦbb9¨‘‘1¤••Ó7ääò‹yyÕ2çç‹CÈÈnY77Ú·mmŒ±dÕÕœÒNNIà©©Ø´ll¬úVVóôôÏ%êêʯeeôŽzzGé®®oÕººðˆxxJo%%\r..8$Wñ¦¦sÇ´´—QÆÆË#èè¡|ÝÝèœtt>!–ÝKKaܽ½ †‹‹…ŠŠàpp|B>>qĵµÌªffØHH÷öö£aaj_55®ùWWiй¹‘††™XÁÁ:''¹žžÙ8ááëøø+³˜˜"3Ò»ii©pÙÙ‰ŽŽ3§””-¶››<"’‡‡É éé‡IÎΪÿUUPx((¥zßߌŒYø¡¡ €‰‰ eÚ¿¿×1ææ„ÆBBиhh‚ÃAA)°™™Zw--{˰°¨üTTmÖ»»,:cccc||||wwww{{{{òòòòkkkkooooÅÅÅÅ0000gggg++++þþþþ×××׫«««vvvvÊÊÊÊ‚‚‚‚ÉÉÉÉ}}}}úúúúYYYYGGGGðððð­­­­ÔÔÔÔ¢¢¢¢¯¯¯¯œœœœ¤¤¤¤rrrrÀÀÀÀ····ýýýý““““&&&&6666????÷÷÷÷ÌÌÌÌ4444¥¥¥¥ååååññññqqqqØØØØ1111ÇÇÇÇ####ÃÃÃÖ–––šššš€€€€ââââëëëë''''²²²²uuuu ƒƒƒƒ,,,,nnnnZZZZ    RRRR;;;;ÖÖÖÖ³³³³))))ãããã////„„„„SSSSÑÑÑÑíííí üüüü±±±±[[[[jjjjËËË˾¾¾¾9999JJJJLLLLXXXXÏÏÏÏÐÐÐÐïïï着ªªûûûûCCCCMMMM3333…………EEEEùùùùPPPP<<<<ŸŸŸŸ¨¨¨¨QQQQ££££@@@@’’’’8888õõõõ¼¼¼¼¶¶¶¶ÚÚÚÚ!!!!ÿÿÿÿóóóóÒÒÒÒÍÍÍÍ ìììì____————DDDDÄÄÄħ§§§~~~~====dddd]]]]ssss````OOOOÜÜÜÜ""""****ˆˆˆˆFFFFîîî¸¸ÞÞÞÞ^^^^ ÛÛÛÛàààà2222:::: IIII$$$$\\\\ÂÂÂÂÓÓÓÓ¬¬¬¬bbbb‘‘‘‘••••ääääyyyyççççÈÈÈÈ7777mmmmÕÕÕÕNNNN©©©©llllVVVVôôôôêêêêeeeezzzz®®®®ººººxxxx%%%%....¦¦¦¦´´´´ÆÆÆÆèèèèÝÝÝÝttttKKKK½½½½‹‹‹‹ŠŠŠŠpppp>>>>µµµµffffHHHHööööaaaa5555WWWW¹¹¹¹††††ÁÁÁÁžžžžááááøøøø˜˜˜˜iiiiÙÙÙÙŽŽŽŽ””””››››‡‡‡‡ééééÎÎÎÎUUUU((((ßßßߌŒŒŒ¡¡¡¡‰‰‰‰ ¿¿¿¿ææææBBBBhhhhAAAA™™™™----°°°°TTTT»»»»P§ôQSeA~ä–^':Ëk«;ñE«Xú¬“ãKUú0 ömv­‘v̈%Lõü×åO×Ë*Å€D5&£bµIZ±Þgº%˜êEáÀþ]u/ÃðL£—FÆùÓkç_•œ’ëzm¿ÚYR•-ƒ¾ÔÓ!tX)iàIDÈÉŽj‰ÂuxyŽôk>X™Ýq¹'¶Oá¾­ˆðf¬ É´:Î}Jßc‚1å`3Q—ESbàwd±„®k» þ”+ùXhHpýE‡lÞ”·ø{R#Ós«âKrWã*«Uf(ë²µ/š{ņ¥7Óò‡(0²¥¿#ºj\‚í+ÏŠ’´y§ðòó¡âiNÍôÚeÕ¾b4ÑŠþ¦ÄS.4 Uó¢2áŠuëö¤9ìƒ ªï`@Ÿq^Qn½ùŠ!>=Ý–®>ÝF½æMµT‘]ÄqoÔÿP`$û˜—é½ÖÌC@‰wžÙg½Bè°ˆ‹‰8[çÛîÈyG |¡éB|É„øƒ†€ Hí+2¬pNrZlûÿýV8…Õ®='9-6dÙ !¦\hÑT[›:.6$±g çW“Ò–î´ž‘›OÅÀ€¢ ÜaiKwZ º“âå* ÀCà"< ­Ç‹ò¹¨¶-È©…ñWLu¯»Ý™îý`£Ÿ&÷¼õr\Å;fD4~û[v)C‹ÜÆ#Ëhüí¶cñä¸ÊÜ1×…cB@"— Æ„}$J…ø=»Ò2ù®m¡)ÇK/žó0²ÜìR† ÐãÁwl³+™¹p©úH”"déGÄŒü¨?ð Ø,}Vï3"ÇNI‡ÁÑ8Ùþ¢ÊŒ6 Ô˜Ïõ¦(Þz¥&Ž·Ú¤¿­?ä:, ’xP›Ì_jbF~TÂöè¸Ø^÷9.õ¯Ã‚¾€]Ÿ|“Ði©-Õo³%Ï;™¬È§}ncœè{»;Û x&ÍôYn·šì¨šOƒen•æ~æÿªϼ!æèïÙ›çºÎ6oJÔ ŸêÖ|°)¯²¤11#?*0”¥ÆÀf¢57¼Nt¦Ê‚ü°Ðàا3J˜ñ÷ÚìAPÍ/ö‘ÖMvM°ïCTMªÌß–äãµÑžˆjL¸,ÁQeFê^]5Œst‡ú.A ûZg³RÒÛ’3VéGÖmŒaךz ¡7ŽøY‰<ëî'©Î5Éa·íåá<±GzYßÒœ?sòUyο7ÇsêÍ÷S[ªý_o=߆ÛDxó¯Ê>Äh¹,4$8_@£Ârà %⼋I<(A• ÿq¨9Þ³ œä´ØÁVda„Ë{p¶2Õt\lHBW¸Ð§ôQPeA~S¤Ã^':–k«;ËEñXú¬«ãK“ú0 Umv­öv̈‘Lõ%×åOüË*Å×D5&€£bµZ±ÞIº%gêE˜Àþ]áu/ÃðL—F£ùÓkÆ_眒•zm¿ëYR•Úƒ¾Ô-!tXÓiàI)ÈÉŽD‰ÂujyŽôx>X™kq¹'ÝOá¾¶­ˆð¬ Éf:Î}´Jßc1å‚3Q—`SbEwd±à®k»„ þ+ù”hHpXýElÞ”‡ø{R·Ós«#KrâãW«Uf*(ë²µ/{ņš7Ó¥‡(0ò¥¿#²jº‚í\ÏŠ+´y§’òóðâiN¡ôÚe;Õb4Ñþ¦ÄŠS.4Uó¢ áŠ2ëö¤uìƒ 9ï`@ªŸq^n½QŠ!>ùÝ–=>Ý®½æMFT‘µ]ÄqÔoP`ÿû˜$é½Ö—C@‰ÌžÙgwBè°½‹‰ˆ[ç8îÈyÛ |¡GB|鄸Ɇ€ ƒí+2Hp¬rZlNÿýû8…VÕ®=9-6'Ù d¦\h!T[›Ñ.6$:g ±çW“–î´Ò‘›žÅÀ€O Üa¢KwZiº“â * Àåà"4$8,@£Â_Ãr%â¼ I<(‹• ÿA¨9q³ Þä´ØœÁVd„Ë{a¶2Õp\lHtW¸ÐBôQP§A~Seä':–^«;ËkñEú¬«XãK“0 Uúv­öm̈‘võ%LåOü×*Å×Ë5&€Dbµ£±ÞIZº%gêE˜þ]áÀ/ÃuLðF£—ÓkÆùç_’•œm¿ëzR•ÚY¾Ô-ƒtXÓ!àI)iÉŽDÈÂuj‰ŽôxyX™k>¹'Ýqá¾¶Oˆð­ Éf¬Î}´:ßcJå‚1Q—`3SbEd±àwk»„®þ ù”+HpXhEýÞ”‡l{R·øs«#ÓKrâãWUf*«ë²(µ/Âņš{7Ó¥(0ò‡¿#²¥ºjí\‚ÏŠ+y§’´óðòiN¡âÚeÍôÕ¾4Ñb¦ÄŠþ.4Só¢ UŠ2áö¤uëƒ 9ì`@ªïq^Ÿn½Q!>ùŠÝ–=>Ý®æMF½T‘µÄq]oÔP`ÿ˜$û½Ö—é@‰ÌCÙgwžè°½B‰ˆ‹ç8[ÈyÛî|¡G B|鄸ɀ ƒ†+2Hí¬pZlNrýûÿ…V8®=Õ-6'9 dÙ\h!¦[›ÑT6$:. ±gW“çî´Ò–›ž‘À€OÅÜa¢ wZiK“â º Àå*"Ä$8,4£Â_@rÃâ¼ %<(‹I ÿA•¨9q Þ³´ØœäVdÁË{a„2Õp¶lHt\¸ÐBWQP§ô~SeAä:–^';Ëk«ñE¬«XúK“ã Uú0­ömvˆ‘vÌõ%LOü×åÅ×Ë*&€D5µ£bÞIZ±%gºE˜ê]áÀþÃu/ðL£—FkÆùÓç_•œ’¿ëzm•ÚYRÔ-ƒ¾XÓ!tI)iàŽDÈÉuj‰ÂôxyŽ™k>X'Ýq¹¾¶Oáð­ˆÉf¬ }´:ÎcJßå‚1—`3QbES±àwd»„®kþ ù”+pXhHýE”‡lÞR·ø{«#ÓsrâKãWf*«U²(ë/µ†š{ÅÓ¥70ò‡(#²¥¿ºjí\‚Š+ϧ’´yóðòN¡âieÍôÚÕ¾Ñb4ÄŠþ¦4S.¢ Uó2ኤuëö 9ìƒ@ªï`^Ÿq½Qn>ùŠ!–=ÝÝ®>MF½æ‘µTq]ÄoÔ`ÿP$û˜Ö—齉ÌC@gwžÙ°½B舋‰ç8[yÛîÈ¡G ||éBøÉ„ ƒ†€2Hí+¬plNrZýûÿV8…=Õ®6'9- dÙh!¦\›ÑT[$:.6 ±g “çW´Ò–îž‘›€OÅÀa¢ ÜZiKwâ º“Àå* Äh8,4$Â_@£rü %â(‹I<ÿA• 9q¨Þ³ Øœä´dÁV{a„ËÕp¶2Ht\lÐBW¸RRRR jjjjÕÕÕÕ00006666¥¥¥¥8888¿¿¿¿@@@@££££žžžžóóóó××××ûûûû||||ãããã9999‚‚‚‚››››////ÿÿÿÿ‡‡‡‡4444ŽŽŽŽCCCCDDDDÄÄÄÄÞÞÞÞééééËËËËTTTT{{{{””””2222¦¦¦¦ÂÂÂÂ####====îîîîLLLL•••• BBBBúúúúÃÃÃÃNNNN....¡¡¡¡ffff((((ÙÙÙÙ$$$$²²²²vvvv[[[[¢¢¢¢IIIImmmm‹‹‹‹ÑÑÑÑ%%%%rrrrøøøøöööödddd††††hhhh˜˜˜˜ÔÔÔÔ¤¤¤¤\\\\ÌÌÌÌ]]]]eeee¶¶¶¶’’’’llllppppHHHHPPPPýýýýíííí¹¹¹¹ÚÚÚÚ^^^^FFFFWWWW§§§§„„„„ØØØØ««««ŒŒŒŒ¼¼¼¼ÓÓÓÓ ÷÷÷÷ääääXXXX¸¸¸¸³³³³EEEEÐÐÐÐ,,,,ÊÊÊÊ????ÁÁÁÁ¯¯¯¯½½½½ŠŠŠŠkkkk::::‘‘‘‘AAAAOOOOggggÜÜÜÜêêêê————òòòòÏÏÏÏÎÎÎÎðððð´´´´ææææssss––––¬¬¬¬tttt""""çççç­­­­5555…………ââââùùùù7777èèèèuuuußßßßnnnnGGGGññññqqqq))))ÅÅÅʼn‰‰‰oooo····bbbbªªªª¾¾¾¾üüüüVVVV>>>>KKKKÆÆÆÆÒÒÒÒyyyy ššššÛÛÛÛÀÀÀÀþþþþxxxxÍÍÍÍZZZZôôôôÝÝÝݨ¨¨¨3333ˆˆˆˆÇÇÇÇ1111±±±±YYYY''''€€€€ìììì____````QQQQ©©©©µµµµJJJJ ----ååååzzzzŸŸŸŸ““““ÉÉÉÉœœœœïïïï    àààà;;;;MMMM®®®®****õõõõ°°°°ÈÈÈÈëëëë»»»»<<<<ƒƒƒƒSSSS™™™™aaaa++++~~~~ººººwwwwÖÖÖÖ&&&&ááááiiiiccccUUUU!!!! }}}} @€6RC2 part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\asn1\evp_asn1.cRC4 part of OpenSSL 0.9.7c 30 Sep 2003IDEA part of OpenSSL 0.9.7c 30 Sep 2003unknown control commandresult too smallresult too largeno result bufferindex too smallindex too largecommon ok and cancel charactersUI_set_resultUI_new_methodUI_get0_resultUI_dup_verify_stringUI_dup_input_stringUI_dup_input_booleanUI_dup_info_stringUI_dup_error_stringUI_ctrlGENERAL_ALLOCATE_STRINGGENERAL_ALLOCATE_PROMPTGENERAL_ALLOCATE_BOOLEANunsupported requestorname typeunknown nidunknown message digeststatus too oldstatus not yet validstatus expiredsigner certificate not foundsignature failureserver write errorserver response parse errorserver response errorserver read errorroot ca not trustedresponse contains no revocation datarequest not signedprivate key does not match certificateno revoked timeno response datano public keyno contentno certificates in chainnot basic responsenextupdate before thisupdatemissing ocspsigning usageerror parsing urlerror in thisupdate fielderror in nextupdate fielddigest errcertificate verify errorbad dataREQUEST_VERIFYOCSP_sendreq_bioOCSP_response_get1_basicOCSP_request_verifyOCSP_request_signOCSP_parse_urlOCSP_MATCH_ISSUERIDOCSP_check_validityOCSP_CHECK_ISSUEROCSP_CHECK_IDSOCSP_CHECK_DELEGATEDOCSP_basic_verifyOCSP_basic_signOCSP_basic_add1_statusD2I_OCSP_NONCECERT_ID_NEWASN1_STRING_encodeversion incompatibilityunimplemented digestunimplemented cipherrsa not implementedprovide parametersno unload functionno such engineno referenceno load functionno indexno control functionnot loadednot initialisedinvalid stringinvalid init valueinvalid cmd numberinvalid cmd nameinvalid argumentinternal list errorinit failed'id' or 'name' missingcould not obtain hardware handlefinish failedfailed loading public keyfailed loading private keyengine section errorengine is not in the listengines section errordso not foundDSO failuredsa not implementeddh not implementedctrl command not implementedconflicting engine idcommand takes no inputcommand takes inputcmd not executableargument is not a numberalready loadedSET_DATA_CTXLOG_MESSAGEINT_ENGINE_CONFIGUREINT_CTRL_HELPERENGINE_up_refENGINE_UNLOAD_KEYENGINE_TABLE_REGISTERENGINE_set_nameENGINE_set_idENGINE_SET_DEFAULT_TYPEENGINE_set_default_stringENGINE_removeENGINE_newENGINE_MODULE_INITENGINE_load_public_keyENGINE_load_private_keyENGINE_LIST_REMOVEENGINE_LIST_ADDENGINE_initENGINE_get_prevENGINE_get_nextENGINE_get_digestENGINE_GET_DEFAULT_TYPEENGINE_get_cipherENGINE_freeENGINE_finishENGINE_ctrl_cmd_stringENGINE_ctrl_cmdENGINE_ctrlENGINE_cmd_is_executableENGINE_by_idENGINE_addDYNAMIC_LOADDYNAMIC_GET_DATA_CTXDYNAMIC_CTRLfunctionality not supportedcould not unload the shared librarycould not bind to the requested symbol namethe meth_data stack is corruptset filename faileda null shared library handle was usedno filenamename translation failedcould not load the shared librarycleanup method function failedfilename too bigdso already loadedcontrol command failedWIN32_UNLOADWIN32_NAME_CONVERTERWIN32_LOADWIN32_BIND_VARWIN32_BIND_FUNCVMS_UNLOADVMS_LOADVMS_BIND_VARDSO_up_refDSO_set_name_converterDSO_set_filenameDSO_new_methodDSO_loadDSO_get_loaded_filenameDSO_get_filenameDSO_freeDSO_ctrlDSO_convert_filenameDSO_bind_varDSO_bind_funcDL_UNLOADDL_NAME_CONVERTERDL_LOADDL_BIND_VARDL_BIND_FUNCDLFCN_UNLOADDLFCN_NAME_CONVERTERDLFCN_LOADDLFCN_BIND_VARDLFCN_BIND_FUNCPRNG not seededSSLEAY_RAND_BYTESRAND_get_rand_methodunsupported pkcs12 modeunknown digest algorithmpkcs12 pbe crypt errorpkcs12 cipherfinal errorpkcs12 algor cipherinit errormac verify failuremac verify errormac string set errormac setup errormac generation errormac absentkey gen erroriv gen errorinvalid null pkcs12 pointerinvalid null argumenterror setting encrypted data typeencrypt errorencode errordecode errorcant pack structureVERIFY_MACPKCS8_encryptPKCS8_add_keyusagePKCS12_set_macPKCS12_setup_macPKCS12_PBE_keyivgenPKCS12_pbe_cryptPKCS12_parsePKCS12_pack_safebagPKCS12_pack_p7encdataPKCS12_pack_p7dataPKCS12_newpassPKCS12_MAKE_SHKEYBAGPKCS12_MAKE_KEYBAGPKCS12_key_gen_uniPKCS12_key_gen_ascPKCS12_initPKCS12_i2d_encryptPKCS12_gen_macPKCS12_decrypt_d2iPKCS12_createPKCS12_add_localkeyidPKCS12_add_friendlyname_uniPKCS12_add_friendlyname_ascPKCS12_ADD_FRIENDLYNAMEPARSE_BAGSuser too longunknown optionunknown extension nameunknown extensionunknown bit string argumentunable to get issuer keyidunable to get issuer detailsodd number of digitsno subject detailsno policy identifierno issuer detailsno issuer certificateno config databaseneed organization and numbersmissing valueissuer decode errorinvalid syntaxinvalid sectioninvalid policy identifierinvalid optioninvalid object identifierinvalid numbersinvalid numberinvalid null valueinvalid null nameinvalid nameinvalid extension stringinvalid boolean stringillegal hex digitextension value errorextension setting not supportedextension not foundextension name errorextension existsexpected a section nameerror in extensionerror creating extensionerror converting zoneduplicate zone idbn to asn1 integer errorbn dec2bn errorbad objectbad ip addressX509_PURPOSE_setX509_PURPOSE_addX509V3_parse_listX509V3_get_value_boolX509V3_EXT_i2dX509V3_EXT_confX509V3_EXT_add_aliasX509V3_EXT_addX509V3_add_valueX509V3_ADD_I2DV3_GENERIC_EXTENSIONv2i_GENERAL_NAMESv2i_GENERAL_NAMEV2I_EXT_KUV2I_CRLDV2I_BASIC_CONSTRAINTSV2I_AUTHORITY_KEYIDV2I_ASN1_BIT_STRINGV2I_ACCESS_DESCRIPTIONSXNET_get_id_ulongSXNET_get_id_ascSXNET_add_id_ulongSXNET_add_id_INTEGERSXNET_ADD_ASCstring_to_hexS2I_S2I_SKEY_IDS2I_ASN1_SKEY_IDs2i_ASN1_OCTET_STRINGs2i_ASN1_INTEGERS2I_ASN1_IA5STRINGR2I_CERTPOLPOLICY_SECTIONNREF_NOSNOTICE_SECTIONI2V_AUTHORITY_INFO_ACCESSi2s_ASN1_INTEGERi2s_ASN1_ENUMERATEDhex_to_stringDO_EXT_I2DDO_EXT_CONFCOPY_ISSUERCOPY_EMAILwrong pkcs7 typewrong content typeunsupported content typeunsupported cipher typeunknown operationunknown digest typeunable to find message digestunable to find mem biounable to find certificatesmime text errorsig invalid mime typepkcs7 sig parse errorpkcs7 parse errorpkcs7 datasignpkcs7 datafinal errorpkcs7 add signature erroroperation not supported on this typeno sig content typeno signersno signatures on datano recipient matches certificateno multipart boundaryno multipart body failureno content typemissing ceripend infomime sig parse errormime parse errormime no content typeinvalid null pointerinvalid mime typeerror setting ciphererror adding recipientdigest failuredecrypt errordecrypted key is wrong lengthcontent and data presentcipher not initializedcipher has no object identifierSMIME_textSMIME_read_PKCS7PKCS7_verifyPKCS7_simple_smimecapPKCS7_signatureVerifyPKCS7_signPKCS7_set_typePKCS7_set_contentPKCS7_set_cipherPKCS7_get0_signersPKCS7_encryptPKCS7_decryptPKCS7_dataVerifyPKCS7_DATASIGNPKCS7_dataInitPKCS7_dataDecodePKCS7_ctrlPKCS7_add_signerPKCS7_add_recipient_infoPKCS7_add_crlPKCS7_add_certificatePKCS7_add_attrib_smimecapB64_WRITE_PKCS7B64_READ_PKCS7WSAStartupwrite to read only BIOunsupported methodunable to listen socketunable to create socketunable to bind sockettag mismatchnull parameterno such fileno port specifiedno port definedno hostname specifiedno accept port specifiednbio connect errorkeepalivein useinvalid ip addressgethostbyname addr is not af ineterror setting nbio on accept socketerror setting nbio on accepted socketerror setting nbioEOF on memory BIOconnect errorbroken pipebad hostname lookupbad fopen modeaccept errorWSASTARTUPMEM_WRITEMEM_READLINEBUFFER_CTRLFILE_READFILE_CTRLCONN_STATECONN_CTRLBUFFER_CTRLBIO_writeBIO_sock_initBIO_readBIO_putsBIO_nwrite0BIO_nwriteBIO_nread0BIO_nreadBIO_new_mem_bufBIO_new_fileBIO_newBIO_MAKE_PAIRBIO_get_portBIO_get_host_ipBIO_get_accept_socketBIO_getsBIO_gethostbynameBIO_ctrlBIO_BER_GET_HEADERBIO_acceptACPT_STATEunknown orderundefined generatorslot fullpoint is not on curvepoint at infinitynot initializedinvalid forminvalid fieldinvalid encodinginvalid compression bitinvalid compressed pointincompatible objectsbuffer too smallGFP_MONT_GROUP_SET_CURVE_GFPEC_POINT_set_to_infinityEC_POINT_set_Jprojective_coordinates_GFpEC_POINT_set_compressed_coordinates_GFpEC_POINT_set_affine_coordinates_GFpEC_POINT_point2octEC_POINT_oct2pointEC_POINT_newEC_POINT_make_affineEC_POINT_is_on_curveEC_POINT_is_at_infinityEC_POINT_get_Jprojective_coordinates_GFpEC_POINT_get_affine_coordinates_GFpEC_POINT_dblEC_POINT_copyEC_POINT_cmpEC_POINT_addEC_POINTs_mulEC_POINTs_make_affineEC_GROUP_set_generatorEC_GROUP_set_extra_dataEC_GROUP_set_curve_GFpEC_GROUP_precompute_multEC_GROUP_newEC_GROUP_get_orderEC_GROUP_get_curve_GFpEC_GROUP_get_cofactorEC_GROUP_get0_generatorEC_GROUP_copyec_GFp_simple_set_compressed_coordinates_GFpec_GFp_simple_point_set_affine_coordinates_GFpec_GFp_simple_point_get_affine_coordinates_GFpec_GFp_simple_points_make_affineec_GFp_simple_point2octec_GFp_simple_oct2pointec_GFp_simple_make_affineec_GFp_simple_group_set_generatorec_GFp_simple_group_set_curve_GFpec_GFp_mont_field_sqrec_GFp_mont_field_mulec_GFp_mont_field_encodeec_GFp_mont_field_decodeCOMPUTE_WNAFno dynlock create callbackINT_NEW_EX_DATAINT_FREE_EX_DATAINT_DUP_EX_DATADEF_GET_CLASSDEF_ADD_INDEXCRYPTO_set_ex_dataCRYPTO_get_new_lockidCRYPTO_get_new_dynlockidCRYPTO_get_ex_new_indexvariable has no valueunknown module nameunable to create new sectionno valueno sectionno conf or environment variableno confno close bracemodule initialization errormissing init functionmissing finish functionmissing equal signmissing close square bracketerror loading dsoSTR_COPYNCONF_newNCONF_load_fpNCONF_load_bioNCONF_loadNCONF_get_stringNCONF_get_sectionNCONF_get_number_eNCONF_get_numberNCONF_dump_fpNCONF_dump_bioMODULE_RUNMODULE_LOAD_DSOMODULE_INITCONF_modules_loadCONF_load_fpCONF_load_bioCONF_loadCONF_dump_fpwrong typewrong tagunsupported public key typeunsupported encryption algorithmunsupported any defined by typeunknown public key typeunknown object typeunknown message digest algorithmunknown formatunexpected eocunable to decode rsa private keyunable to decode rsa keytype not constructedtoo longthe asn1 object identifier is not known for this mdtag value too highstring too shortstring too longshort linesequence not constructedsequence length mismatchsecond number too largeprivate key header missingodd number of charsnull is wrong lengthno matching choice typenot enough datanon hex charactersmstring wrong tagmstring not universalmissing second numbermissing eoclength erroriv too largeinvalid utf8stringinvalid universalstring lengthinvalid time formatinvalid separatorinvalid digitinvalid bmpstring lengthinteger too large for longillegal tagged anyillegal options on item templateillegal optional anyillegal nullillegal charactersheader too longfirst num too largefield missingexplicit tag not constructedexplicit length mismatchexpecting a timeexpecting a booleanexpecting an objectexpecting an integererror setting cipher paramserror parsing set elementerror loading sectionerror getting timedecoding errordata is wrongboolean is wrong lengthbad tagbad password readbad object headerbad classaux erroradding objectX509_PKEY_newX509_NEWX509_NAME_NEWX509_INFO_newX509_CRL_add0_revokedX509_CINF_NEWPKCS5_pbe2_setOID_MODULE_INITLONG_C2Ii2d_RSA_PUBKEYi2d_PublicKeyi2d_PrivateKeyi2d_Netscape_RSAi2d_DSA_PUBKEYI2D_ASN1_TIMEd2i_X509_PKEYD2I_X509_NAMED2I_X509_CINFD2I_X509d2i_PublicKeyd2i_PrivateKeyD2I_NETSCAPE_RSA_2d2i_Netscape_RSAD2I_ASN1_UTCTIMEd2i_ASN1_UINTEGERd2i_ASN1_type_bytesd2i_ASN1_SETd2i_ASN1_OBJECTD2I_ASN1_INTEGERd2i_ASN1_HEADERD2I_ASN1_GENERALIZEDTIMEd2i_ASN1_bytesd2i_ASN1_BOOLEAND2I_ASN1_BIT_STRINGCOLLECT_DATABN_to_ASN1_INTEGERBN_to_ASN1_ENUMERATEDASN1_verifyASN1_unpack_stringASN1_TYPE_get_octetstringASN1_TYPE_get_int_octetstringASN1_TIME_setASN1_TEMPLATE_NEWASN1_TEMPLATE_EX_D2IASN1_TEMPLATE_D2IASN1_STRING_type_newASN1_STRING_TABLE_addASN1_signASN1_seq_unpackASN1_seq_packASN1_PBE_SETASN1_pack_stringASN1_OBJECT_newASN1_mbstring_copyASN1_item_newASN1_ITEM_EX_D2IASN1_INTEGER_to_BNASN1_INTEGER_setASN1_i2d_fpASN1_i2d_bioASN1_HEADER_newASN1_get_objectASN1_ENUMERATED_to_BNASN1_ENUMERATED_setASN1_dupASN1_DO_ADBASN1_d2i_fpASN1_D2I_EX_PRIMITIVEASN1_d2i_bioASN1_COLLECTASN1_COLLATE_PRIMITIVEASN1_CHECK_TLENa2i_ASN1_STRINGa2i_ASN1_INTEGERa2i_ASN1_ENUMERATEDa2d_ASN1_OBJECTwrong lookup typeunsupported algorithmunknown trust idunknown purpose idunknown key typeunable to get certs public keyunable to find parameters in chainshould retryno cert set for us to verifyloading defaultsloading cert dirkey values mismatchkey type mismatchinvalid field nameinvalid directoryerr asn1 libcert already in hash tablecant check dh keybase64 decode errorbad x509 filetypeX509_verify_certX509_TRUST_setX509_TRUST_addX509_to_X509_REQX509_STORE_CTX_purpose_inheritX509_STORE_CTX_newX509_STORE_CTX_initX509_STORE_add_crlX509_STORE_add_certX509_REQ_to_X509X509_REQ_print_fpX509_REQ_printX509_PUBKEY_setX509_PUBKEY_getX509_print_fpX509_NAME_printX509_NAME_onelineX509_NAME_ENTRY_set_objectX509_NAME_ENTRY_create_by_txtX509_NAME_ENTRY_create_by_NIDX509_NAME_add_entryX509_load_crl_fileX509_load_cert_fileX509_load_cert_crl_fileX509_get_pubkey_parametersX509_EXTENSION_create_by_OBJX509_EXTENSION_create_by_NIDX509_check_private_keyX509_ATTRIBUTE_set1_dataX509_ATTRIBUTE_get0_dataX509_ATTRIBUTE_create_by_txtX509_ATTRIBUTE_create_by_OBJX509_ATTRIBUTE_create_by_NIDX509_ADD_ATTRX509v3_add_extNETSCAPE_SPKI_b64_encodeNETSCAPE_SPKI_b64_decodeGET_CERT_BY_SUBJECTDIR_CTRLBY_FILE_CTRLADD_CERT_DIRmissing parametersdata too large for key sizeSIG_CBi2d_DSA_SIGDSA_verifyDSA_SIG_newDSA_sign_setupDSA_signDSA_print_fpDSA_printDSA_new_methodDSA_do_verifyDSA_do_signDSAparams_print_fpDSAparams_printd2i_DSA_SIGunsupported encryptionshort headerread keypublic key no rsaproblems getting passwordno start linenot proc typenot encryptednot dek infoerror converting private keybad iv charsbad end linebad decryptbad base64 decodePEM_X509_INFO_write_bioPEM_X509_INFO_read_bioPEM_X509_INFO_readPEM_write_bio_PKCS8PrivateKeyPEM_write_bioPEM_writePEM_SignFinalPEM_SealInitPEM_SealFinalPEM_read_bioPEM_readPEM_get_EVP_CIPHER_INFOPEM_F_PEM_WRITE_PKCS8PRIVATEKEYPEM_F_DO_PK8KEY_FPPEM_do_headerPEM_ASN1_write_bioPEM_ASN1_writePEM_ASN1_read_bioPEM_ASN1_readLOAD_IVDEF_CALLBACKd2i_PKCS8PrivateKey_fpd2i_PKCS8PrivateKey_bioOBJ_nid2snOBJ_nid2objOBJ_nid2lnOBJ_dupOBJ_createBUF_strdupBUF_MEM_newBUF_MEM_growwrong public key typewrong final block lengthunsupported salt typeunsupported private key algorithmunsupported prfunsupported key sizeunsupported key derivation functionunsupported keylengthunsuported number of roundsunknown pbe algorithmpkcs8 unknown broken typeno verify function configuredno sign function configuredno dsa parametersno digest setno cipher setkeygen failureinvalid key lengthinput not initializedinitialization errorexpecting a dsa keyexpecting a dh keyexpecting an rsa keyevp pbe cipherinit errordifferent key typesdata not multiple of block lengthctrl operation not implementedctrl not implementedcipher parameter errorbn pubkey errorbn decode errorbad key lengthbad block lengthRC5_CTRLRC2_MAGIC_TO_METHPKCS5_v2_PBE_keyivgenPKCS5_PBE_keyivgenEVP_VerifyFinalEVP_SignFinalEVP_RIJNDAELEVP_PKEY_newEVP_PKEY_get1_RSAEVP_PKEY_get1_DSAEVP_PKEY_get1_DHEVP_PKEY_encryptEVP_PKEY_decryptEVP_PKEY_copy_parametersEVP_PKEY2PKCS8EVP_PKCS8_SET_BROKENEVP_PKCS82PKEYEVP_PBE_CipherInitEVP_PBE_alg_addEVP_OpenInitEVP_MD_CTX_copyEVP_EncryptFinalEVP_DigestInitEVP_DecryptFinalEVP_CIPHER_CTX_set_key_lengthEVP_CIPHER_CTX_ctrlEVP_CipherInitD2I_PKEYno private valuebad generatorDH_new_methodDH_generate_parametersDH_generate_keyDH_compute_keyDHparams_print_fpDHparams_printunknown padding typeunknown algorithm typesslv3 rollback attackrsa operations not supportedq not primep not primepadding check failedoaep decoding errorn does not equal p qnull before block missingkey size too smalliqmp not inverse of qinvalid message lengthd e not congruent to 1dmq1 not congruent to ddmp1 not congruent to ddigest too big for rsa keydata too small for key sizedata too smalldata too large for modulusdata too largedata greater than mod lenblock type is not 02block type is not 01bad pad byte countbad fixed header decryptbad e valuealgorithm mismatchRSA_verify_ASN1_OCTET_STRINGRSA_verifyRSA_sign_ASN1_OCTET_STRINGRSA_signRSA_print_fpRSA_printRSA_padding_check_SSLv23RSA_padding_check_PKCS1_type_2RSA_padding_check_PKCS1_type_1RSA_padding_check_PKCS1_OAEPRSA_padding_check_noneRSA_padding_add_SSLv23RSA_padding_add_PKCS1_type_2RSA_padding_add_PKCS1_type_1RSA_padding_add_PKCS1_OAEPRSA_padding_add_noneRSA_NULLRSA_new_methodRSA_generate_keyRSA_EAY_PUBLIC_ENCRYPTRSA_EAY_PUBLIC_DECRYPTRSA_EAY_PRIVATE_ENCRYPTRSA_EAY_PRIVATE_DECRYPTRSA_check_keyMEMORY_LOCKtoo many temporary variablestoo many iterationsp is not primeno inversenot a squareinvalid rangeinvalid lengthinput not reducedexpand on static bignum dataencoding errordiv by zerocalled with even modulusbignum too longbad reciprocalarg2 lt arg3BN_usubBN_rand_rangeBN_randBN_newBN_mpi2bnBN_mod_sqrtBN_mod_mul_reciprocalBN_mod_lshift_quickBN_mod_inverseBN_mod_exp_mont_wordBN_mod_exp_montBN_mod_exp2_montBN_EXPAND_INTERNALbn_expand2BN_divBN_CTX_newBN_CTX_getBN_bn2hexBN_bn2decBN_BLINDING_updateBN_BLINDING_newBN_BLINDING_invertBN_BLINDING_convert.\crypto\pem\pem_oth.c0123456789ABCDEFPEM part of OpenSSL 0.9.7c 30 Sep 2003.\crypto\pem\pem_lib.cphrase is too short, needs to be at least %d chars Enter PEM pass phrase:ENCRYPTEDDEK-Info: Expecting: TRUSTED CERTIFICATEX509 CERTIFICATEProc-Type: -----END ----- -----BEGIN ÝE¸~F@zB•<™F°íARGxRGÔRGNETSCAPE_CERT_SEQUENCE/usr/local/ssl/certs/usr/local/ssl/cert.pemSSL_CERT_DIRSSL_CERT_FILE.\crypto\asn1\x_info.c.\crypto\pem\pem_info.cniv <= EVP_MAX_IV_LENGTH.\crypto\evp\evp_key.cnkey <= EVP_MAX_KEY_LENGTH.\crypto\evp\encode.cn < sizeof ctx->enc_data.\crypto\pkcs12\p12_decr.c.\crypto\asn1\x_pkey.c.\crypto\ui\ui_lib.cYou must type in to charactersOpenSSL default user interfaceVerify failure Verifying - %scon.\crypto\ui\ui_openssl.cW|WÌWÒWÄGetProcAddressÂLoadLibraryAuGetVersionExAmGetTickCountQueryPerformanceCounterúGetCurrentThreadIdqSetLastErrorKERNEL32.dll¿_strdupà_utime_isattyÞ_filenoº_stat‚_mkdirŽ_accessÁ_stricmpÅ_strnicmp÷_getch‡_open³_close˜_readD_lseekî_fstat¯signal©FlushConsoleInputBuffer during intense changing, be aware. This is for us who like email... Please direct curl questions, feature requests and trouble reports to one of these mailing lists instead of mailing any individual. Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP with a curl angle. curl-commits Receives notifications on all CVS commits done to the curl source module. This can become quite a large amount of mails during intense development, be aware. This is for us who like email... curl-www-commits Receives notifications on all CVS commits done to the curl www module (basicly the web site). This can become quite a large amount of mails its development and things relevant to this. Get all info at http://curl.haxx.se/mail/. The lists available are: curl-users Users of the command line tool. How to use it, what doesn't work, new features, related tools, questions, news, installations, compilations, running, porting etc. curl-library Developers using or developing libcurl. Bugs, extensions, improvements. curl-announce Low-traffic. Only announcements of new public versions. curl-and-PHP Note that curl cannot use persistant connections for transfers that are used in subsequence curl invokes. Try to stuff as many URLs as possible on the same command line if they are using the same host, as that'll make the transfers faster. If you use a http proxy for file transfers, practicly all transfers will be persistant. Persistant connections were introduced in curl 7.7. MAILING LISTS For your convenience, we have several open mailing lists to discuss curl, Specifying multiple files on a single command line will make curl transfer all of them, one after the other in the specified order. libcurl will attempt to use persistant connections for the transfers so that the second transfer to the same host can use the same connection that was already initiated and was left open in the previous transfer. This greatly decreases connection time for all but the first transfer and it makes a far better use of the network. curl -tTTYPE=vt100 telnet://remote.server.com Other interesting options for it -t include: - XDISPLOC= Sets the X display location. - NEW_ENV= Sets an environment variable. NOTE: the telnet protocol does not specify any way to login with a specified user and password so curl can't do that automatically. To do that, you need to track when the login prompt is received and send the username and password accordingly. PERSISTANT CONNECTIONS server using a command line similar to: curl telnet://remote.server.com And enter the data to pass to the server on stdin. The result will be sent to stdout or to the file you specify with -o. You might want the -N/--no-buffer option to switch off the buffered output for slow connections or similar. Pass options to the telnet protocol negotiation, by using the -t option. To tell the server we use a vt100 terminal, try something like: First, get the krb-ticket the normal way, like with the kauth tool. Then use curl in way similar to: curl --krb4 private ftp://krb4site.com -u username:fakepwd There's no use for a password on the -u switch, but a blank one will make curl ask for one and you already entered the real password to kauth. TELNET The curl telnet support is basic and very easy to use. Curl passes all data passed to it on stdin to the remote server. Connect to a remote telnet curl, the -w/--write-out option was introduced. Using this, you can specify what information from the previous transfer you want to extract. To display the amount of bytes downloaded together with some text and an ending newline: curl -w 'We downloaded %{size_download} bytes\n' www.download.com KERBEROS4 FTP TRANSFER Curl supports kerberos4 for FTP transfers. You need the kerberos package installed and used at curl build time for it to be used. only readable by yourself (curl doesn't care though). Curl supports .netrc files if told so (using the -n/--netrc and --netrc-optional options). This is not restricted to only ftp, but curl can use it for all protocols where authentication is used. A very simple .netrc file could look something like: machine curl.haxx.se login iamdaniel password mysecret CUSTOM OUTPUT To better allow script programmers to get to know about the progress of The usage of the -x/--proxy flag overrides the environment variables. NETRC Unix introduced the .netrc concept a long time ago. It is a way for a user to specify name and password for commonly visited ftp sites in a file so that you don't have to type them in each time you visit those sites. You realize this is a big security risk if someone else gets hold of your passwords, so therefor most unix programs won't read this file unless it is http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY They should be set for protocol-specific proxies. General proxy should be set with ALL_PROXY A comma-separated list of host names that shouldn't go through any proxy is set in (only an asterisk, '*' matches all hosts) NO_PROXY If a tail substring of the domain-path for a host matches one of these strings, transactions with that node will not be proxied. RFC 2255, "The LDAP URL Format" http://www.rfc-editor.org/rfc/rfc2255.txt To show you an example, this is now I can get all people from my local LDAP server that has a certain sub-domain in their email address: curl -B "ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se" If I want the same info in HTML format, I can get it by not using the -B (enforce ASCII) flag. ENVIRONMENT VARIABLES Curl reads and understands the following environment variables: If you have installed the OpenLDAP library, curl can take advantage of it and offer ldap:// support. LDAP is a complex thing and writing an LDAP query is not an easy task. I do advice you to dig up the syntax description for that elsewhere. Two places that might suit you are: Netscape's "Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10: Working with LDAP URLs": http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm curl dict://dict.org/d:daniel:web1913 Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define' and 'lookup'. For example, curl dict://dict.org/find:curl Commands that break the URL description of the RFC (but not the DICT protocol) are curl dict://dict.org/show:db curl dict://dict.org/show:strat Authentication is still missing (but this is not required by the RFC) LDAP curl -z -local.html http://remote.server.com/remote.html You can specify a "free text" date as condition. Tell curl to only download the file if it was updated since yesterday: curl -z yesterday http://remote.server.com/remote.html Curl will then accept a wide range of date formats. You always make the date check the other way around by prepending it with a dash '-'. DICT For fun try curl dict://dict.org/m:curl curl dict://dict.org/d:heisenbug:jargon requests. It is If-Modified-Since or If-Unmodified-Since. Curl allow you to specify them with the -z/--time-cond flag. For example, you can easily make a download that only gets performed if the remote file is newer than a local copy. It would be made like: curl -z local.html http://remote.server.com/remote.html Or you can download a file only if the local file is newer than the remote one. Do this by prepending the date string with a '-', as in: curl -C - -T file ftp://ftp.server.com/path/file Continue downloading a document from a web server(*2): curl -C - -o file http://www.server.com/ (*1) = This requires that the ftp server supports the non-standard command SIZE. If it doesn't, curl will say so. (*2) = This requires that the web server supports at least HTTP/1.1. If it doesn't, curl will say so. TIME CONDITIONS HTTP allows a client to specify a time condition for the document it Run the 'openssl' application to convert the certificate. If you cd to the openssl installation, you can do it like: # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile] RESUMING FILE TRANSFERS To continue a file transfer where it was previously aborted, curl supports resume on http(s) downloads as well as ftp uploads and downloads. Continue downloading a document: curl -C - -o file ftp://ftp.server.com/path/file Continue uploading a document(*1): To use OpenSSL to convert your favourite browser's certificate into a PEM formatted one that curl can use, do something like this (assuming netscape, but IE is likely to work similarly): You start with hitting the 'security' menu button in netscape. Select 'certificates->yours' and then pick a certificate in the list Press the 'export' button enter your PIN code for the certs select a proper place to save it prompted for the correct password before any data can be received. Many older SSL-servers have problems with SSLv3 or TLS, that newer versions of OpenSSL etc is using, therefore it is sometimes useful to specify what SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL version to use (for SSLv3, SSLv2 or TLSv1 respectively): curl -2 https://secure.site.com/ Otherwise, curl will first attempt to use v3 and then v2. N. Henson has written a patch for SSLeay that adds this functionality. You can get his patch (that requires an SSLeay installation) from his site at: http://www.drh-consultancy.demon.co.uk/ Example on how to automatically retrieve a document using a certificate with a personal password: curl -E /path/to/cert.pem:password https://secure.site.com/ If you neglect to specify the password on the command line, you will be store certificates with, but it is not used by the most commonly used browsers (Netscape and MSIE both use the so called PKCS#12 format). If you want curl to use the certificates you use with your (favourite) browser, you may need to download/compile a converter that can convert your browser's formatted certificates to PEM formatted ones. This kind of converter is included in recent versions of OpenSSL, and for older versions Dr Stephen Secure HTTP requires SSL libraries to be installed and used when curl is built. If that is done, curl is capable of retrieving and posting documents using the HTTPS procotol. Example: curl https://www.secure-site.com Curl is also capable of using your personal certificates to get/post files from sites that require valid certificates. The only drawback is that the certificate needs to be in PEM-format. PEM is a standard and open format to Download with PORT but use the IP address of our 'le0' interface (this does not work on windows): curl -P le0 ftp.download.com Download with PORT but use 192.168.0.10 as our IP address to use: curl -P 192.168.0.10 ftp.download.com NETWORK INTERFACE Get a web page from a server using a specified port for the interface: curl --interface eth0:1 http://www.netscape.com/ or curl --interface 192.168.1.10 http://www.netscape.com/ HTTPS other way to do it is to use the PORT command and instruct the server to connect to the client on the given (as parameters to the PORT command) IP number and port. The -P flag to curl supports a few different options. Your machine may have several IP-addresses and/or network interfaces and curl allows you to select which of them to use. Default address can also be used: curl -P - ftp.download.com The default way for curl is to issue the PASV command which causes the server to open another port and await another connection performed by the client. This is good if the client is behind a firewall that don't allow incoming connections. curl ftp.download.com If the server for example, is behind a firewall that don't allow connections on other ports than 21 (or if it just doesn't support the PASV command), the curl ftp://user:passwd@my.site.com/README But if you want the README file from the root directory of that very same site, you need to specify the absolute file name: curl ftp://user:passwd@my.site.com//README (I.e with an extra slash in front of the file name.) FTP and firewalls The FTP protocol requires one of the involved parties to open a second connction as soon as data is about to get transfered. There are two ways to do this. header than it normally does. The -H header you specify then replaces the header curl would normally send. If you replace an internal header with an empty one, you prevent that header from being sent. To prevent the Host: header from being used: curl -H "Host:" www.server.com FTP and PATH NAMES Do note that when getting files with the ftp:// URL, the given path is relative the directory you enter. To get the file 'README' from your home directory at your ftp site, do: tables etc: echo "user = user:passwd" | curl -K - http://that.secret.site.com EXTRA HEADERS When using curl in your own very special programs, you may end up needing to pass on your own custom headers when getting a web page. You can do this by using the -H flag. Example, send the header "X-you-and-me: yes" to the server when getting a page: curl -H "X-you-and-me: yes" www.love.com This can also be useful in case you want curl to send a different text in a line parameter, like: curl -q www.thatsite.com Force curl to get and display a local help page in case it is invoked without URL by making a config file similar to: # default url to get url = "http://help.with.curl.com/curlhelp.html" You can specify another config file to be read by using the -K/--config flag. If you set config file name to "-" it'll read the config from stdin, which can be handy if you want to hide options from being visible in process NOTE: You must specify options and their arguments on the same line. Example, set default time out and proxy in a config file: # We want a 30 minute timeout: -m 1800 # ... and we use a proxy for all accesses: proxy = proxy.our.domain.com:8080 White spaces ARE significant at the end of lines, but all white spaces leading up to the first characters of each line are ignored. Prevent curl from reading the default file by using -q as the first command can also specify the long options without the dashes to make it more readable. You can separate the options and the parameter with spaces, or with = or :. Comments can be used within the file. If the first letter on a line is a '#'-letter the rest of the line is treated as a comment. If you want the parameter to contain spaces, you must inclose the entire parameter within double quotes ("). Within those quotes, you specify a quote as \". When using the --limit-rate option, the transfer rate is regulated on a per-second basis, which will cause the total transfer speed to become lower than the given number. Sometimes of course substantially lower, if your transfer stalls during periods. CONFIG FILE Curl automatically tries to read the .curlrc file (or _curlrc file on win32 systems) from the user's home dir on startup. The config file could be made up with normal command line switches, but you which might be useful if you're using a limited bandwidth connection and you don't want your transfer to use all of it (sometimes referred to as "bandwith throttle"). Make curl transfer data no faster than 10 kilobytes per second: curl --limit-rate 10K www.far-away-site.com or curl --limit-rate 10240 www.far-away-site.com Or prevent curl from uploading data faster than 1 megabyte per second: curl -T upload --limit-rate 1M ftp://uploadshereplease.com To have curl abort the download if the speed is slower than 3000 bytes per second for 1 minute, run: curl -Y 3000 -y 60 www.far-away-site.com This can very well be used in combination with the overall time limit, so that the above operatioin must be completed in whole within 30 minutes: curl -m 1800 -Y 3000 -y 60 www.far-away-site.com Forcing curl not to transfer data faster than a given rate is also possible, 5 seconds of a transfer is based on less time of course.) The -# option will display a totally different progress bar that doesn't need much explanation! SPEED LIMIT Curl allows the user to set the transfer speed conditions that must be met to let the transfer keep going. By using the switch -y and -Y you can make curl abort transfers if the transfer speed is below the specified lowest limit for a specified time. Xferd - currently uploaded amount of bytes Average Speed Dload - the average transfer speed of the download Average Speed Upload - the average transfer speed of the upload Time Total - expected time to complete the operation Time Current - time passed since the invoke Time Left - expected time left to completetion Curr.Speed - the average transfer speed the last 5 seconds (the first Dload Upload Total Current Left Speed 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287 From left-to-right: % - percentage completed of the whole transfer Total - total size of the whole expected transfer % - percentage completed of the download Received - currently downloaded amount of bytes % - percentage completed of the upload Alas, to both read and write cookies from a netscape cookie file, you can set both -b and -c to use the same file: curl -b cookies.txt -c cookies.txt www.example.com PROGRESS METER The progress meter exists to show a user that something actually is happening. The different fields in the output have the following meaning: % Total % Received % Xferd Average Speed Time Curr. curl -L -b empty.txt www.example.com The file to read cookies from must be formatted using plain HTTP headers OR as netscape's cookie file. Curl will determine what kind it is based on the file contents. In the above command, curl will parse the header and store the cookies received from www.example.com. curl will send to the server the stored cookies which match the request as it follows the location. The file "empty.txt" may be a non-existant file. however error-prone and not the prefered way to do this. Instead, make curl save the incoming cookies using the well-known netscape cookie format like this: curl -c cookies.txt www.example.com Note that by specifying -b you enable the "cookie awareness" and with -L you can make curl follow a location: (which often is used in combination with cookies). So that if a site sends cookies and a location, you can use a non-existing file to trigger the cookie awareness like: Curl also has the ability to use previously received cookies in following sessions. If you get cookies from a server and store them in a file in a manner similar to: curl --dump-header headers www.example.com ... you can then in a second connect to that (or another) site, use the cookies from the 'headers' file like: curl -b headers www.example.com While saving headers to a file is a working way to store cookies, it is ("domain=NAME") and if it should be used on secure connections only ("secure"). If you've received a page from a server that contains a header like: Set-Cookie: sessionid=boo123; path="/foo"; it means the server wants that first pair passed on when we get anything in a path beginning with "/foo". Example, get a page that wants my name passed in a cookie: curl -b "name=Daniel" www.sillypage.com client's side. The server sets cookies by sending a response line in the headers that looks like 'Set-Cookie: ' where the data part then typically contains a set of NAME=VALUE pairs (separated by semicolons ';' like "NAME1=VALUE1; NAME2=VALUE2;"). The server can also specify for what path the "cookie" should be used for (by specifying "path=value"), when the cookie should expire ("expire=DATE"), for what domain to use it 'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)' NS for Linux Note that Internet Explorer tries hard to be compatible in every way: 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)' MSIE for W95 Mozilla is not the only possible User-Agent name: 'Konqueror/1.0' KDE File Manager desktop client 'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser COOKIES Cookies are generally used by web servers to keep state information at the line. It is especially useful to fool or trick stupid servers or CGI scripts that only accept certain browsers. Example: curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/ Other common strings: 'Mozilla/3.0 (Win95; I)' Netscape Version 3 for Windows 95 'Mozilla/3.04 (Win95; U)' Netscape Version 3 for Windows 95 'Mozilla/2.02 (OS/2; U)' Netscape Version 2 for OS/2 'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)' NS for AIX referrer to be used on the command line. It is especially useful to fool or trick stupid servers or CGI scripts that rely on that information being available or contain certain data. curl -e www.coolsite.com http://www.showme.com/ NOTE: The referer field is defined in the HTTP spec to be a full URL. USER AGENT A HTTP request has the option to include information about the browser that generated the request. Curl allows it to be specified on the command http://www.post.com/postit.cgi To send two files in one post you can do it in two ways: 1. Send multiple files in a single "field" with a single field name: curl -F "pictures=@dog.gif,cat.gif" 2. Send two fields with two field names: curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" REFERRER A HTTP request has the option to include information about which address that referred to actual page. Curl allows you to specify the field is a file description. We want to post the file we have written named "cooltext.txt". To let curl do the posting of this data instead of your favourite browser, you have to read the HTML source of the form page and find the names of the input fields. In our example, the input field names are 'file', 'yourname' and 'filedescription'. curl -F "file=@cooltext.txt" -F "yourname=Daniel" \ -F "filedescription=Cool text file with cool text inside" \ If the content-type is not specified, curl will try to guess from the file extension (it only knows a few), or use the previously specified type (from an earlier file if several files are specified in a list) or else it will using the default type 'text/plain'. Emulate a fill-in form with -F. Let's say you fill in three fields in a form. One field is a file name which to post, one field is your name and one be read from a file, use <@filename> as contents. When specifying a file, you can also specify the file content type by appending ';type=' to the file name. You can also post the contents of several files in one field. For example, the field name 'coolfiles' is used to send three files, with different content types using the following syntax: curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \ http://www.post.com/postit.cgi curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" (continues) http://www.formpost.com/getthis/post.cgi While -d uses the application/x-www-form-urlencoded mime-type, generally understood by CGI's and similar, curl also supports the more capable multipart/form-data type. This latter type supports things like file upload. -F accepts parameters like -F "name=contents". If you want the contents to the letter's ASCII code. Example: (page located at http://www.formpost.com/getthis/
We want to enter user 'foobar' with password '12345'. To post to this, you enter a curl command line like: If there's a "normal" post, you use -d to post. -d takes a full "post string", which is in the format =&=&... The 'variable' names are the names set with "name=" in the tags, and the data is the contents you want to fill in for the inputs. The data *must* be properly URL encoded. That means you replace space with + and that you write weird letters with %XX where XX is the hexadecimal representation of It's easy to post data using curl. This is done using the -d option. The post data must be urlencoded. Post a simple "name" and "phone" guestbook. curl -d "name=Rafael%20Sagula&phone=3320780" \ http://www.where.com/guest.cgi How to post a form with curl, lesson #1: Dig out all the tags in the form that you want to fill in. (There's a perl program called formfind.pl on the curl site that helps with this). -D/--dump-header option when getting files from both FTP and HTTP, and it will then store the headers in the specified file. Store the HTTP headers in a separate file (headers.txt in the example): curl --dump-header headers.txt curl.haxx.se Note that headers stored in a separate file can be very useful at a later time if you want curl to use cookies sent by the server. More about that in the cookies section. POST (HTTP) DETAILED INFORMATION Different protocols provide different ways of getting detailed information about specific files/documents. To get curl to show detailed information about a single file, you should use -I/--head option. It displays all available info on a single file for HTTP and FTP. The HTTP information is a lot more extensive. For HTTP, you can get the header information (the same as -I would show) shown before the data by using -i/--include. Curl understands the if you can't understand the responses: use the -v flag to get verbose fetching. Curl will output lots of info and what it sends and receives in order to let the user see all client-server interaction (but it won't show you the actual data). curl -v ftp://ftp.upload.com/ To get even more details and information on what curl does, try using the --trace or --trace-ascii options with a given file name to log to, like this: curl --trace trace.txt www.haxx.se curl --proxytunnel -x proxy:port -T localfile ftp.upload.com HTTP Upload all data on stdin to a specified http site: curl -T - http://www.upload.com/myfile Note that the http server must've been configured to accept PUT before this can be done successfully. For other ways to do http data upload, see the POST section below. VERBOSE / DEBUG If curl fails where it isn't supposed to, if the servers don't let you in, Upload a local file to the remote site, and use the local file name remote too: curl -T uploadfile -u user:passwd ftp://ftp.upload.com/ Upload a local file to get appended to the remote file using ftp: curl -T localfile -a ftp://ftp.upload.com/remotefile Curl also supports ftp upload through a proxy, but only if the proxy is configured to allow that kind of tunneling. If it does, you can run curl in a fashion similar to: Curl also supports simple ranges for FTP files as well. Then you can only specify start and stop position. Get the first 100 bytes of a document using FTP: curl -r 0-99 ftp://www.get.this/README UPLOADING FTP Upload all data on stdin to a specified ftp site: curl -T - ftp://ftp.upload.com/myfile Upload data from a specified file, login with user and password: curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile See also the environment variables Curl support that offer further proxy control. RANGES With HTTP 1.1 byte-ranges were introduced. Using this, a client can request to get only one or more subparts of a specified document. Curl supports this with the -r flag. Get the first 100 bytes of a document: curl -r 0-99 http://www.get.this/ Get the last 500 bytes of a document: curl -r -500 http://www.get.this/ Get an ftp file using a proxy named my-proxy that uses port 888: curl -x my-proxy:888 ftp://ftp.leachsite.com/README Get a file from a HTTP server that requires user and password, using the same proxy as above: curl -u user:passwd -x my-proxy:888 http://www.get.this/ Some proxies require special authentication. Specify by using -U as above: curl -U user:passwd -x my-proxy:888 http://www.get.this/ or specify user and password separately like in curl -u name:passwd http://machine.domain/full/path/to/file NOTE! Since HTTP URLs don't support user and password, you can't use that style when using Curl via a proxy. You _must_ use the -u style fetch during such circumstances. HTTPS Probably most commonly used with private certificates, as explained below. GOPHER Curl features no password support for gopher. PROXY To ftp files using name+passwd, include them in the URL like: curl ftp://name:passwd@machine.domain:port/full/path/to/file or specify them with the -u flag like curl -u name:passwd ftp://machine.domain:port/full/path/to/file HTTP The HTTP URL doesn't support user and password in the URL string. Curl does support that anyway to provide a ftp-style interface and thus you can pick a file like: curl http://name:passwd@machine.domain/full/path/to/file Get a web page and store in a local file: curl -o thatpage.html http://www.netscape.com/ Get a web page and store in a local file, make the local file get the name of the remote document (if no file name part is specified in the URL, this will fail): curl -O http://www.netscape.com/index.html Fetch two files and store them with their remote names: curl -O www.haxx.se/index.html -O curl.haxx.se/download.html USING PASSWORDS FTP Get a web page from a server using port 8000: curl http://www.weirdserver.com:8000/ Get a list of a directory of an FTP site: curl ftp://cool.haxx.se/ Get a gopher document from funet's gopher server: curl gopher://gopher.funet.fi Get the definition of curl from a dictionary: curl dict://dict.org/m:curl Fetch two documents at once: curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/ DOWNLOAD TO A FILE ftp://ftp.sunet.se/pub/www/utilities/curl/ SEE ALSO ftp(1), wget(1), snarf(1) LATEST VERSION You always find news about what's going on as well as the latest versions from the curl web pages, located at: http://curl.haxx.se SIMPLE USAGE Get the main page from netscape's web-server: curl http://www.netscape.com/ Get the README file the user's home directory at funet's ftp-server: curl ftp://ftp.funet.fi/README 61 Unrecognized transfer encoding 62 Invalid LDAP URL 63 Maximum file size exceeded XX There will appear more error codes here in future releases. The existing ones are meant to never change. AUTHORS / CONTRIBUTORS Daniel Stenberg is the main author, but the whole list of contributors is found in the separate THANKS file. WWW http://curl.haxx.se FTP 52 The server didn't reply anything, which here is considered an error. 53 SSL crypto engine not found 54 Cannot set SSL crypto engine as default 55 Failed sending network data 56 Failure in receiving network data 57 Share is in use (internal error) 58 Problem with the local certificate 59 Couldn't use specified SSL cipher 60 Problem with the CA cert (path? permission?) 45 Interface error. A specified outgoing interface could not be used. 46 Bad password entered. An error was signaled when the password was entered. 47 Too many redirects. When following redirects, curl hit the maximum amount. 48 Unknown TELNET option specified. 49 Malformed telnet option. 51 The remote peer's SSL certificate wasn't ok 40 Library not found. The LDAP library was not found. 41 Function not found. A required LDAP function was not found. 42 Aborted by callback. An application told curl to abort the operation. 43 Internal error. A function was called with a bad parameter. 44 Internal error. A function was called in a bad order. 34 HTTP post error. Internal post-request generation error. 35 SSL connect error. The SSL handshaking failed. 36 FTP bad download resume. Couldn't continue an ear- lier aborted download. 37 FILE couldn't read file. Failed to open the file. Permissions? 38 LDAP cannot bind. LDAP bind operation failed. 39 LDAP search failed. FTP servers support the PORT command, try doing a transfer using PASV instead! 31 FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers. 32 FTP couldn't use SIZE. The SIZE command failed. The command is an extension to the original FTP spec RFC 959. 33 HTTP range error. The range "command" didn't work. operation, used for FTP uploading. 26 Read error. Various reading problems. 27 Out of memory. A memory allocation request failed. 28 Operation timeout. The specified time-out period was reached according to the conditions. 29 FTP couldn't set ASCII. The server returned an unknown reply. 30 FTP PORT failed. The PORT command failed. Not all 22 HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if --fail is used. 23 Write error. Curl couldn't write data to a local filesystem or similar. 24 Malformed user. User name badly specified. 25 FTP couldn't STOR file. The server denied the STOR 17 FTP couldn't set binary. Couldn't change transfer method to binary. 18 Partial file. Only a part of the file was trans- fered. 19 FTP couldn't download/access the given file, the RETR (or similar) command failed. 20 FTP write error. The transfer was reported bad by the server. 21 FTP quote error. A quote command returned error from the server. sent to the USER request. 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request. 14 FTP weird 227 format. Curl couldn't parse the 227-line the server sent. 15 FTP can't get host. Couldn't resolve the host IP we got in the 227-line. 16 FTP can't reconnect. Couldn't connect to the host we got in the 227-line. 7 Failed to connect to host. 8 FTP weird server reply. The server sent data curl couldn't parse. 9 FTP access denied. The server denied login. 10 FTP user/password incorrect. Either one or both were not accepted by the server. 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request. 12 FTP weird USER reply. Curl couldn't parse the reply 1 Unsupported protocol. This build of curl has no support for this protocol. 2 Failed to initialize. 3 URL malformat. The syntax was not correct. 4 URL user malformatted. The user-part of the URL syntax was not correct. 5 Couldn't resolve proxy. The given proxy host could not be resolved. 6 Couldn't resolve host. The given remote host was not resolved. Sets proxy server to use if no protocol-specific proxy is set. NO_PROXY list of host names that shouldn't go through any proxy. If set to a asterisk EXIT CODES There exists a bunch of different error codes and their corresponding error messages that may appear during bad conditions. At the time of this writing, the exit codes are: Default config file. ENVIRONMENT http_proxy [protocol://][:port] Sets proxy server to use for HTTP. HTTPS_PROXY [protocol://][:port] Sets proxy server to use for HTTPS. FTP_PROXY [protocol://][:port] Sets proxy server to use for FTP. GOPHER_PROXY [protocol://][:port] Sets proxy server to use for GOPHER. ALL_PROXY [protocol://][:port] multiple IP versions (which it is if it is ipv6-capable), this option tells libcurl to resolve names to IPv6 addresses only. (Added in 7.10.8) -#/--progress-bar Make curl display progress information as a progress bar instead of the default statistics. If this option is used twice, the second will again disable the progress bar. FILES ~/.curlrc (HTTPS) Forces curl to use SSL version 3 when nego- tiating with a remote SSL server. -4/--ipv4 If libcurl is capable of resolving an address to multiple IP versions (which it is if it is ipv6-capable), this option tells libcurl to resolve names to IPv4 addresses only. (Added in 7.10.8) -6/--ipv6 If libcurl is capable of resolving an address to (HTTP) Forces curl to issue its requests using HTTP 1.0 instead of using its internally preferred: HTTP 1.1. -1/--tlsv1 (HTTPS) Forces curl to use TSL version 1 when nego- tiating with a remote TLS server. -2/--sslv2 (HTTPS) Forces curl to use SSL version 2 when nego- tiating with a remote SSL server. -3/--sslv3 If this option is used several times, the last one will be used. -Z/--max-redirs Set maximum number of redirection-followings allowed. If -L/--location is used, this option can be used to prevent curl from following redirections "in absurdum". If this option is used several times, the last one will be used. -0/--http1.0 match any internal ones, it tries to get the time from a given file name instead! See the GNU date(1) or curl_getdate(3) man pages for date expression details. Start the date expression with a dash (-) to make it request for a document that is older than the given date/time, default is a document that is newer than the specified date/time. aborted. speed-time is set with -Y and is 30 if not set. If this option is used several times, the last one will be used. -z/--time-cond (HTTP) Request to get a file that has been modified later than the given time and date, or one that has been modified before that time. The date expression can be all sorts of date strings or if it doesn't This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option. If this option is used several times, the last one will be used. -Y/--speed-limit If a download is slower than this given speed, in bytes per second, for speed-time seconds it gets of LIST when doing file lists with ftp. If this option is used several times, the last one will be used. -y/--speed-time