diff --git a/.gitignore b/.gitignore index ad8d12aa..7f835a82 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,4 @@ _templates log/ bower dokomoforms/static/dist +package-lock.json diff --git a/.travis.yml b/.travis.yml index 23b6529e..69d100e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,17 @@ language: python python: - - "3.4" - "3.5" cache: directories: - $HOME/.cache/pip - node_modules addons: - postgresql: "9.4" + postgresql: "9.6" firefox: "42.0" before_install: - - pip install coveralls flake8 coverage beautifulsoup4 py-dateutil pytz selenium + - pip install coveralls flake8 coverage beautifulsoup4 py-dateutil pytz + - pip install selenium cryptography jwt redis - gem install coveralls-lcov before_script: diff --git a/Dockerfile b/Dockerfile index 12992c44..8373333c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.4 +FROM python:3.5 WORKDIR /dokomo RUN apt-get update && apt-get install npm nodejs postgresql-client -y ADD package.json /tmp/package.json diff --git a/docs/index.rst b/docs/index.rst index 6d3583fc..4922ca7b 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -21,4 +21,3 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` * :ref:`search` - diff --git a/dokomoforms/handlers/__init__.py b/dokomoforms/handlers/__init__.py index 85d2d729..d1b758a7 100644 --- a/dokomoforms/handlers/__init__.py +++ b/dokomoforms/handlers/__init__.py @@ -1,7 +1,7 @@ """All the Tornado RequestHandlers used in Dokomo Forms.""" from dokomoforms.handlers.root import Index, NotFound from dokomoforms.handlers.auth import ( - Login, Logout, GenerateToken, CheckLoginStatus + VerifyLoginHandler, Logout, GenerateToken, CheckLoginStatus ) from dokomoforms.handlers.user.admin import ( AdminHomepageHandler, @@ -13,7 +13,7 @@ ) from dokomoforms.handlers.debug import ( DebugUserCreationHandler, DebugLoginHandler, DebugLogoutHandler, - DebugPersonaHandler, DebugRevisitHandler, DebugToggleRevisitHandler, + DebugRevisitHandler, DebugToggleRevisitHandler, DebugToggleRevisitSlowModeHandler ) from dokomoforms.handlers.demo import ( @@ -22,13 +22,13 @@ __all__ = ( 'Index', 'NotFound', - 'Login', 'Logout', 'GenerateToken', + 'VerifyLoginHandler', 'Logout', 'GenerateToken', 'AdminHomepageHandler', 'CheckLoginStatus', 'ViewSurveyHandler', 'ViewSurveyDataHandler', 'ViewUserAdminHandler', 'ViewSubmissionHandler', 'EnumerateHomepageHandler', 'Enumerate', 'EnumerateTitle', 'DebugUserCreationHandler', 'DebugLoginHandler', 'DebugLogoutHandler', - 'DebugPersonaHandler', 'DebugRevisitHandler', 'DebugToggleRevisitHandler', + 'DebugRevisitHandler', 'DebugToggleRevisitHandler', 'DebugToggleRevisitSlowModeHandler', 'DemoUserCreationHandler', 'DemoLogoutHandler' ) diff --git a/dokomoforms/handlers/auth.py b/dokomoforms/handlers/auth.py index 398fef3e..e2394450 100644 --- a/dokomoforms/handlers/auth.py +++ b/dokomoforms/handlers/auth.py @@ -2,12 +2,10 @@ from collections import OrderedDict from datetime import datetime, timedelta -import urllib.parse import uuid from sqlalchemy.orm.exc import NoResultFound -from tornado.escape import json_decode import tornado.concurrent import tornado.web import tornado.gen @@ -15,93 +13,43 @@ from passlib.hash import bcrypt_sha256 -from dokomoforms.options import options +from dokomoforms.handlers.portier import get_verified_email from dokomoforms.handlers.util import BaseHandler, authenticated_admin -from dokomoforms.models import User, Administrator, Email +from dokomoforms.models import User, Email -class Login(BaseHandler): +class VerifyLoginHandler(BaseHandler): - """POST here to verify the assertion generated by Mozilla Persona.""" + """Handlers for portier verification.""" - def _async_post(self, - http_client, url, input_data) -> tornado.concurrent.Future: - """Asynchronously POSTs input_data to the url using http_client.fetch. + def check_xsrf_cookie(self): + """Disable XSRF check. - :param http_client: the HTTP client - :param url: the URL for POSTing - :param input_data: the data to POST - :return: a tornado.concurrent.Future that will contain the response + OpenID doesn't reply with _xsrf header. + https://github.com/portier/demo-rp/issues/10 """ - return tornado.gen.Task( - http_client.fetch, - url, - method='POST', - body=urllib.parse.urlencode(input_data), - ) - - @tornado.web.asynchronous - @tornado.gen.engine - def post(self): - """POST to Mozilla's verifier service. - - Accepts: - { "assertion": } - - Then, POSTS to https://verifier.login.persona.org/verify to verify that - the assertion is valid. If so, attempts to log the user in by e-mail. - - Responds with: - 200 OK - { "email": } - - :raise tornado.web.HTTPError: 400 Bad Request if the assertion is not - verified - 422 Unprocessable Entity if the e-mail - address is not associated with a user - account. - """ - assertion = self.get_argument('assertion') - http_client = tornado.httpclient.AsyncHTTPClient() - url = options.persona_verification_url - input_data = {'assertion': assertion, 'audience': self.request.host} - response = yield self._async_post(http_client, url, input_data) - data = json_decode(response.body) - if data['status'] != 'okay': - raise tornado.web.HTTPError(400, 'Failed assertion test') - + pass + + async def post(self): + """Verify the response from the portier broker.""" + if 'error' in self.request.arguments: + raise tornado.web.HTTPError(400) + token = self.get_argument('id_token') + email = await get_verified_email(token) try: user = ( self.session .query(User.id, User.name) .join(Email) - .filter(Email.address == data['email']) + .filter(Email.address == email) .one() ) except NoResultFound: - if data['email'] != options.admin_email: - _ = self.locale.translate - raise tornado.web.HTTPError( - 422, - reason=_( - 'There is no account associated with the e-mail' - ' address {}'.format(data['email']) - ), - ) - with self.session.begin(): - user = Administrator( - name=options.admin_name, - emails=[Email(address=options.admin_email)] - ) - self.session.add(user) - cookie_options = { - 'httponly': True, - } - if options.https: - cookie_options['secure'] = True - self.set_secure_cookie('user', user.id, **cookie_options) - self.write({'email': data['email']}) - self.finish() + raise tornado.web.HTTPError(400) + self.set_secure_cookie( + 'user', str(user.id), + httponly=True, secure=True) + self.redirect(self.get_argument('next', '/')) class Logout(BaseHandler): @@ -115,6 +63,7 @@ def post(self): httponly. """ self.clear_cookie('user') + self.redirect('/') class GenerateToken(BaseHandler): # We should probably do this in JS diff --git a/dokomoforms/handlers/debug.py b/dokomoforms/handlers/debug.py index 51b05f70..efe3b84c 100644 --- a/dokomoforms/handlers/debug.py +++ b/dokomoforms/handlers/debug.py @@ -79,19 +79,6 @@ def get(self): self.write('You have logged out.') -class DebugPersonaHandler(BaseHandler): - - """For testing purposes there's no need to hit the real URL.""" - - def check_xsrf_cookie(self): - """No need for this...""" - pass - - def post(self): - """The test user has logged in.""" - self.write({'status': 'okay', 'email': 'test_creator@fixtures.com'}) - - revisit_online = slow_mode = None facilities_file = compressed_facilities = lzs = None diff --git a/dokomoforms/handlers/portier.py b/dokomoforms/handlers/portier.py new file mode 100644 index 00000000..3dfe373a --- /dev/null +++ b/dokomoforms/handlers/portier.py @@ -0,0 +1,146 @@ +"""Utility functions for portier login.""" +from base64 import urlsafe_b64decode +from datetime import timedelta +import re + +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives.asymmetric import rsa + +import jwt + +import redis + +from tornado.escape import json_decode +from tornado.httpclient import AsyncHTTPClient +import tornado.web + +from dokomoforms.options import options + + +redis_kv = redis.StrictRedis.from_url(options.redis_url) + + +def b64dec(string): + """Decode unpadded URL-safe Base64 strings. + + Base64 values in JWTs and JWKs have their padding '=' characters stripped + during serialization. Before decoding, we must re-append padding characters + so that the encoded value's final length is evenly divisible by 4. + + Taken from + github.com/portier/demo-rp/blob/6aee99fe126eceda527cae1f6da3f02a68401b6e + /server.py#L176-L184 + """ + padding = '=' * ((4 - len(string) % 4) % 4) + return urlsafe_b64decode(string + padding) + + +async def get_verified_email(token): + """Validate an Identity Token (JWT) and return its subject (email address). + + In Portier, the subject field contains the user's verified email address. + + This functions checks the authenticity of the JWT with the following steps: + + 1. Verify that the JWT has a valid signature from a trusted broker. + 2. Validate that all claims are present and conform to expectations: + + * ``aud`` (audience) must match this website's origin. + * ``iss`` (issuer) must match the broker's origin. + * ``exp`` (expires) must be in the future. + * ``iat`` (issued at) must be in the past. + * ``sub`` (subject) must be an email address. + * ``nonce`` (cryptographic nonce) must not have been seen previously. + + 3. If present, verify that the ``nbf`` (not before) claim is in the past. + + Timestamps are allowed a few minutes of leeway to account for clock skew. + + This demo relies on the `PyJWT`_ library to check signatures and validate + all claims except for ``sub`` and ``nonce``. Those are checked separately. + + .. _PyJWT: https://github.com/jpadilla/pyjwt + + Taken from + github.com/portier/demo-rp/blob/6aee99fe126eceda527cae1f6da3f02a68401b6e + /server.py#L240-L296 + """ + keys = await discover_keys('https://broker.portier.io') + raw_header, _, _ = token.partition('.') + header = json_decode(b64dec(raw_header)) + try: + pub_key = keys[header['kid']] + except KeyError: + raise tornado.web.HTTPError(400) + try: + payload = jwt.decode( + token, pub_key, + algorithms=['RS256'], + audience=options.minigrid_website_url, + issuer='https://broker.portier.io', + leeway=3 * 60, + ) + except Exception as exc: + raise tornado.web.HTTPError(400) + if not re.match('.+@.+', payload['sub']): + raise tornado.web.HTTPError(400) + if not redis_kv.delete(payload['nonce']): + raise tornado.web.HTTPError(400) + return payload['sub'] + + +def jwk_to_rsa(key): + """Convert a deserialized JWK into an RSA Public Key instance. + + Taken from + github.com/portier/demo-rp/blob/6aee99fe126eceda527cae1f6da3f02a68401b6e + /server.py#L233-L237 + """ + e = int.from_bytes(b64dec(key['e']), 'big') + n = int.from_bytes(b64dec(key['n']), 'big') + return rsa.RSAPublicNumbers(e, n).public_key(default_backend()) + + +async def discover_keys(broker): + """Discover and return a Broker's public keys. + + Returns a dict mapping from Key ID strings to Public Key instances. + + Portier brokers implement the `OpenID Connect Discovery`_ specification. + This function follows that specification to discover the broker's current + cryptographic public keys: + + 1. Fetch the Discovery Document from ``/.well-known/openid-configuration``. + 2. Parse it as JSON and read the ``jwks_uri`` property. + 3. Fetch the URL referenced by ``jwks_uri`` to retrieve a `JWK Set`_. + 4. Parse the JWK Set as JSON and extract keys from the ``keys`` property. + + Portier currently only supports keys with the ``RS256`` algorithm type. + + .. _OpenID Connect Discovery: + https://openid.net/specs/openid-connect-discovery-1_0.html + .. _JWK Set: https://tools.ietf.org/html/rfc7517#section-5 + + Taken from + github.com/portier/demo-rp/blob/6aee99fe126eceda527cae1f6da3f02a68401b6e + /server.py#L187-L206 + """ + cache_key = 'jwks:' + broker + raw_jwks = redis_kv.get(cache_key) + if not raw_jwks: + http_client = AsyncHTTPClient() + url = broker + '/.well-known/openid-configuration' + response = await http_client.fetch(url) + discovery = json_decode(response.body) + if 'jwks_uri' not in discovery: + raise tornado.web.HTTPError(400) + raw_jwks = (await http_client.fetch(discovery['jwks_uri'])).body + redis_kv.setex(cache_key, timedelta(minutes=5), raw_jwks) + jwks = json_decode(raw_jwks) + if 'keys' not in jwks: + raise tornado.web.HTTPError(400) + return { + key['kid']: jwk_to_rsa(key) + for key in jwks['keys'] + if key['alg'] == 'RS256' + } diff --git a/dokomoforms/handlers/root.py b/dokomoforms/handlers/root.py index f439cc09..2dd299dc 100644 --- a/dokomoforms/handlers/root.py +++ b/dokomoforms/handlers/root.py @@ -1,10 +1,16 @@ """Administrative handlers.""" +from datetime import timedelta +from urllib.parse import urlencode +from uuid import uuid4 + import tornado.web import tornado.gen import tornado.httpclient +from dokomoforms.handlers.portier import redis_kv from dokomoforms.handlers.util import BaseHandler from dokomoforms.models import Administrator, User +from dokomoforms.options import options class Index(BaseHandler): @@ -25,6 +31,21 @@ def get(self, msg=''): message=msg, ) + def post(self): + """Send login information to the portier broker.""" + nonce = uuid4().hex + redis_kv.setex(nonce, timedelta(minutes=15), '') + query_args = urlencode({ + 'login_hint': self.get_argument('email'), + 'scope': 'openid email', + 'nonce': nonce, + 'response_type': 'id_token', + 'response_mode': 'form_post', + 'client_id': options.minigrid_website_url, + 'redirect_uri': options.minigrid_website_url + '/verify', + }) + self.redirect('https://broker.portier.io/auth?' + query_args) + class NotFound(BaseHandler): diff --git a/dokomoforms/handlers/util.py b/dokomoforms/handlers/util.py index c959fde1..9b60a790 100644 --- a/dokomoforms/handlers/util.py +++ b/dokomoforms/handlers/util.py @@ -108,9 +108,6 @@ def set_default_headers(self): 'Content-Security-Policy', "script-src 'self' 'unsafe-inline' 'unsafe-eval'" " cdn.leafletjs.com code.highcharts.com" - " momentjs.com cdn.datatables.net https://login.persona.org; " - "child-src login.persona.org; " - "frame-src login.persona.org; " "style-src 'self' 'unsafe-inline'" " fonts.googleapis.com cdn.leafletjs.com *.cloudfront.net;" "font-src 'self' fonts.googleapis.com fonts.gstatic.com;" diff --git a/dokomoforms/options.py b/dokomoforms/options.py index ae0bfcc2..e3f9eef5 100644 --- a/dokomoforms/options.py +++ b/dokomoforms/options.py @@ -14,6 +14,12 @@ __all__ = ('options',) _arg = None +define( + 'minigrid_website_url', default='http://localhost:8888', + help='The URL of this instance of the minigrid server.' +) +define('redis_url', default='redis://localhost:6379/0') + # Application options define('demo', default=False, help='whether to run in demo mode', type=bool) define('port', help='run on the given port', type=int) @@ -30,12 +36,6 @@ define('admin_email', help='the e-mail address of the main administrator') define('admin_name', help='the user name of the main administrator') -persona_help = ( - 'the URL for login verification. Do not change this without a good reason.' -) -persona_url = 'https://verifier.login.persona.org/verify' -define('persona_verification_url', default=persona_url, help=persona_help) - revisit_url = 'https://revisit.global/api/v0/facilities.json' revisit_help = ( 'the URL for facility data. Do not change this without a good reason.' diff --git a/dokomoforms/static/src/admin/js/base.js b/dokomoforms/static/src/admin/js/base.js index 5ff6b5a2..9f980b5c 100644 --- a/dokomoforms/static/src/admin/js/base.js +++ b/dokomoforms/static/src/admin/js/base.js @@ -3,7 +3,6 @@ var $ = require('jquery'), ps = require('../../common/js/pubsub'), SettingsModal = require('./modals/settings-modal'), Notification = require('./notification'), - persona = require('../../common/js/persona'), utils = require('./utils'); module.exports = (function() { @@ -14,8 +13,6 @@ module.exports = (function() { _globalAjaxSetup(); _setupGlobalEventHandlers(); - // setup handlers for persona events - persona.init(); } /** diff --git a/dokomoforms/static/src/admin/js/login-page.js b/dokomoforms/static/src/admin/js/login-page.js deleted file mode 100644 index 0c6cd77e..00000000 --- a/dokomoforms/static/src/admin/js/login-page.js +++ /dev/null @@ -1,14 +0,0 @@ -var persona = require('../../common/js/persona'); - -var LoginPage = (function() { - - function init() { - persona.init(); - } - - return { - init: init - }; -})(); - -LoginPage.init(); diff --git a/dokomoforms/static/src/common/js/persona.js b/dokomoforms/static/src/common/js/persona.js deleted file mode 100644 index 14f4dc39..00000000 --- a/dokomoforms/static/src/common/js/persona.js +++ /dev/null @@ -1,97 +0,0 @@ -var $ = require('jquery'), - cookies = require('./cookies'); - - -var Persona = (function() { - - /** - * Set up browser event handlers for login/logout buttons. - */ - function setupBrowserEvents() { - console.log('setupBrowserEvents'); - $(document).on('click', '.btn-login', function(e) { - e.preventDefault(); - navigator.id.request(); - }); - $(document).on('click', '.btn-logout', function(e) { - e.preventDefault(); - navigator.id.logout(); - }); - } - - function init() { - 'use strict'; - navigator.id.watch({ - loggedInUser: localStorage['email'] || null, - onlogin: function(assertion) { - $.ajax({ - type: 'GET', - // GETting the same page onlogin prevents an issue when the - // user has multiple tabs open and logs in. - url: '', - success: function() { - var user = localStorage['email'] || null; - if (user === null) { - $.ajax({ - type: 'POST', - url: '/user/login', - data: { - assertion: assertion - }, - headers: { - 'X-XSRFToken': cookies.getCookie('_xsrf') - }, - success: function(res) { - localStorage['email'] = res.email; - // Pick where to go from ?next= - var next_url = decodeURIComponent(window.location.search.substring(6)); - if (next_url) { - location.href = next_url; - } else { - location.reload(); - } - }, - error: function(xhr, status, err) { - localStorage['login_error'] = err; - navigator.id.logout(); - } - }); - } - } - }); - }, - onlogout: function() { - $.ajax({ - type: 'POST', - url: '/user/logout', // The 'user' cookie is httponly - headers: { - 'X-XSRFToken': cookies.getCookie('_xsrf') - }, - success: function() { - localStorage.removeItem('email'); - if (localStorage['login_error']) { - // TODO: clean this up - $('#msg').empty(); - $('#msg').text('Login failure: ' + localStorage['login_error']); - localStorage.removeItem('login_error'); - } else { - location.href = '/'; - } - }, - error: function(xhr, status, err) { - alert('Logout failure: ' + err); - } - }); - } - }); - - setupBrowserEvents(); - } - - return { - init: init - }; - -})(); - -module.exports = Persona; diff --git a/dokomoforms/templates/admin_homepage.html b/dokomoforms/templates/admin_homepage.html index 0bd40daf..0df28b85 100644 --- a/dokomoforms/templates/admin_homepage.html +++ b/dokomoforms/templates/admin_homepage.html @@ -85,5 +85,3 @@

Surveys

{% end %} - - diff --git a/dokomoforms/templates/base.html b/dokomoforms/templates/base.html index 8e8e6b0c..540569a2 100644 --- a/dokomoforms/templates/base.html +++ b/dokomoforms/templates/base.html @@ -100,9 +100,6 @@ - - - - - diff --git a/dokomoforms/templates/index.html b/dokomoforms/templates/index.html index bb8ecca4..46e33095 100644 --- a/dokomoforms/templates/index.html +++ b/dokomoforms/templates/index.html @@ -36,8 +36,6 @@

DokomoData

{% block extra_scripts %} - - {% if message %} - - - diff --git a/dokomoforms/templates/view_user_admin.html b/dokomoforms/templates/view_user_admin.html index 4abcc083..0f6e989a 100644 --- a/dokomoforms/templates/view_user_admin.html +++ b/dokomoforms/templates/view_user_admin.html @@ -53,5 +53,3 @@

Users

{% end %} - - diff --git a/dokomoforms/templates/view_visualize.html b/dokomoforms/templates/view_visualize.html index a408d0a1..5c0a4e92 100644 --- a/dokomoforms/templates/view_visualize.html +++ b/dokomoforms/templates/view_visualize.html @@ -23,8 +23,6 @@

Welcome {{ current_user }}

- - {% if time_data %} @@ -49,6 +47,4 @@

Welcome {{ current_user }}

Logout - - {% end %} diff --git a/gulpfile.js b/gulpfile.js index 9f38491e..59e75a3f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -107,7 +107,6 @@ var path = { // note: these are file names only, not full paths... // they get concat'ed with ADMIN_JS_SRC_DIR in the bundling process ADMIN_JS_ENTRY_POINTS: [ - 'login-page.js', 'account-overview.js', 'view-data.js', 'view-survey.js', diff --git a/local_config.py.example b/local_config.py.example index 6776c4ec..36af65ed 100644 --- a/local_config.py.example +++ b/local_config.py.example @@ -87,15 +87,6 @@ import os ####################################### -# persona_verification_url = 'Some URL' - -# Default: 'https://verifier.login.persona.org/verify' -# Under normal circumstances you should not change this setting. -# persona_verification_url tells the application which server to use for -# authentication using Mozilla Persona. - -####################################### - # revisit_url = 'some URL' # Default: 'https://revisit.global/api/v0/facilities.json' diff --git a/package.json b/package.json index f2a1d217..66b2fe16 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "bootstrap": "^3.3.6", "datatables": "https://github.com/DataTables/DataTables/archive/1.10.9.tar.gz", "es5-shim": "^4.3.1", - "highcharts-release": "^4.2.1", + "highcharts": "^4.2.1", "jquery": "^2.2.0", "leaflet": "^0.7.7", "lodash-compat": "^3.10.1", @@ -29,7 +29,7 @@ "devDependencies": { "babel-core": "^6.1.20", "babel-jest": "^6.0.1", - "babel-preset-es2015": "^6.1.18", + "babel-preset-env": "^1.6.0", "babel-preset-react": "^6.1.18", "babelify": "^7.2.0", "browserify": "^13.0.0", @@ -43,7 +43,7 @@ "gulp-if": "^2.0.0", "gulp-less": "^3.0.5", "gulp-livereload": "^3.8.1", - "gulp-minify-css": "^1.2.3", + "gulp-clean-css": "^3.9.0", "gulp-order": "^1.1.1", "gulp-react": "^3.0.1", "gulp-rename": "^1.2.2", @@ -99,7 +99,6 @@ "dokomoforms/static/src/survey/js/Application.js": true, "dokomoforms/static/src/survey/js/api/FacilityAPI.js": true, "dokomoforms/static/src/survey/js/api/PhotoAPI.js": true, - "dokomoforms/static/src/common/js/persona.js": true, "dokomoforms/static/src/survey/js/components/Facility.js": true, "dokomoforms/static/src/survey/js/components/Footer.js": true, "dokomoforms/static/src/survey/js/components/Header.js": true, diff --git a/tests/python/fake_revisit_facilities.json b/tests/python/fake_revisit_facilities.json index c012e244..25452dae 100644 --- a/tests/python/fake_revisit_facilities.json +++ b/tests/python/fake_revisit_facilities.json @@ -1 +1 @@ -{"count":198,"facilities":{"_id":"5582e965747df37272f0a01d","en":[180,85],"ws":[-180,-85],"sep":360,"count":198,"children":{"wn":{"_id":"5582e966747df37272f0a01f","data":["᭣㰱Čࢀ嬥ᦠ⹐ీ㶠㘻䄆㠠䚠㎜͈ƒ乼ਐी᧣ᐰŗ抠唠爢㓠ǃ*瘰ঊ撬KS᩠ܠ፜䀶ƒ૘¬洠䛒筵田΅ᠮ扈ᘽⴺG⭑棴ಳ%偽⠧⛽ဠ㎊吡Ს╰泌呉⁊吭窸⎄ᛁ唠⺰䀿…玠㡑䓰ၨ䃁#䇭Ű⽃ৣ崱怬㢕㥃䩮૬ᝲ匶䪥搠佺坴ǣ౟䝰y䑑ⳓ筩჎ⱨ幤浴坌㭙፭怬䁏䡢⍯⩀㘴㳒∵噊㝠ၼ䕄嘭⪚Ϟ⨠ᕯ儫ᅉ࡯埫硸Mලₑ惯⬭焙㹟ῶ␦ˠ桜ತ慢ᐽ匳牨㤡昱恢⳾໓დ㤼䃊ဠ㵓ᆣℚ౒惧ᆡ䃟ᳪ䁊ㅓ᮴ֹ≁დਊ䛓ᝄ⡴椦䗅栬〈亂妜5䆢⦠析ᨯũ桌ᜠ†૬㪡Ȳ䐲ᒡ⹱咺ⲧ⟲೦ᦴ攨ᓐ綩憓ṧ㞯曲Ȫ㩻➪ዲⱶጫ溙Ũ偖ᄅᠪ凉樭፼ݺ㙭⦨▋媽㈻嘋稦僴ち⬳ᓦ㞺᛫ᨵ㛭皈ǣɚ伇⬲猳⺉巡沚ᇨ爳焩冾Hथ䆩⁹⿦洐甝疾凟⌃๼熋䜆摇橄戬䣅⥔咾䲄妌䝊̅停彀⨴䖂䓊⣠㋞㞵牋噵滇坴㻙䠕㫞啈䛄්֡ӡ堾Ā桐䂑漣圱ቒƔ䪪儔櫗哴绕䈰癃䚑⹃ℑ懟䕱剖䚨熲≱㩄≰⧞⑈̹Ⓣ啍⇣禲ƈ洧ₐ崯␉甽㌠⌸抍ፔ掸ଲ慸㘱ㆵ孎捡筁揘朸Øဵ懘τ犙吲ᗼ怼眘޲狤⯎ᚱ剆玤ࢽ䦽ພ睥ᣖᕼႹ灄䒵燝ᒸۄ灍ᖪಳᖅ泇ᜅ㳌䠅抯电拄坱勌傀₂厕⪷僵㻈≀灡呢⚪ཕ桡ƙ礤Ä㙃偂㉈โၹೊぴЭ㑨㎑౯䠑ἥ䃑㈧൐䩂涨籺㐳᧐䷬扣ຈ恙㚳㉭び̲䢍挺䶍ᩧ㌍㩶扡℡䩓綩䨼⎸痙ࡑ懒㮪ូ⹱玒➸⵱庖琒๳䡽⹨⤓䄙璫ු⯝煣牫俊⮝楷盫䋎〜ր੊╸ृ႙૊偍⡢ɑ噢刵嘰穀཰搼某ᡇ䏀ᙡ➡乓憆ᶦߡ凇⿣仏ⶱ⩄庱昱ё穊䑑䅌䀭呰㏃↤氐弤⁰ᘧ࣑娥䘙ᘪ栲ᦶ㇭≱⢳㭴䳌恕㞳ʝㅲ༓㝲涶䴌㩦揲䠾弍ڏ㙒ᾀ獓䎥䴼噤炙㚋朧Ɓ瘪⯏悥ʼn䄧㺜㨛买⹝ᦶ彯ᮥ癄ङᆪ煢ⲝ䥫獪ᾦ⫫ʮᰝ禁⸢䑤媶㋼婑ૻࡱᔁ囆䢉噠$䴣梈&声簳䁠匀⒬簠˫㩑২㡫䁰䗇⡧䗥品琫Ԣ䲍Ԣ塃ෲⲕ઀䜀潥䍩堳∫ં呲悲簿ऺ䱹ઍ榴凶子䒾㎍⒰嘹Ꮔѡ䄄୐㘹⑰嵢Â篈࿖ᙄΨ䄈稣䪅晲旧ᑙ㺸ᤇ⑗綀⛰㹯瀪Á᧻甗᠉玻䥰晱僚஦䯦⻗䬵瞮䥱䕊彛犞♶纆珪Dʒ䇼䟤糯䌙⿊䃿֣彡矊媌䁶䵰〢凨ᖘ(张8嘠ᙔ憈䦓婝眊ᤸ媒ẝ៺絸ዡࡖ䁟㫗യ劂ࢠ㙡ܱ忢悢ᵛᚮ␑ဪ॰೺殃婗⓰ǯ㘍嚂悜ـ槶‴ঐ七〵ϸ綯ɾ剙廕䫧̨Ն੮旪憩ශ纾䍨ㆦ玥ⓐ甩咮ࢪ⸺┅撬嗠⎋䌻殶ᥗ 䤜㊱拋㇧檜๑⎴㗥咐硕ᒠ‰஡怦ʾ檬ၘ୑ᡦ€ᡢឪ祕◆壑㕊灎⩰Ⅵ䨽拦安㱌欘ᑥ⠫ٰํၓ₹䫰˶䋹䁶栶ⷒ䂣劖䕄䆇⋸᩽委䶂緍橀㷱愀犚儏䄱档潳瑪㻅䪃╣㮳⹵Ήⷥ伖♢罹ᴡ堃३㥥᝭焄㠁⟨ᆕ扃෧ᑻ剦ধ㡼椰喈ᕐ支ᥔ橝⡯ℹ䂡䞢戫ᤖⒽ䥠ḃኘ⿜㵴善⪄ᑳ䙸⬢瘺ᒞඅ熯ᨱℭံ䋡ᑒ䅈⳷䵺๴፳稆懔囼⒖䅇₌⧪橭㬬䭡ష皀䄕䣟Ꮳ嘋⏑ނ皐㔒๮⪿焉ݳᇗ௃㋄媜㚐榔璾೎ᒌ斝᱂෬⎦⼹寔䘿ᶨ櫧ੱ朱ず届⏥Р٤傐ạᠫϐ㇨愩炀慩‸઒߭⯫㹦⮒䛐⁥峇為夤祆岰儶ᇯ䞃㿀场桤墉•怷祱ጋၟ㒀⸐剫孀横擸ⳡ恨඙ᴔ⇐勣⬷д焂䑐労殁᪽倩噪凍箺␖䈷矆嵊曞౪峾䜙塒᳄㉫㲅䮄撮䳮圑母䖼䁭儠ⷑ䆸ජゥ冖䠅盗怽啺甊咦嫆寄ኔൣ擮燉硠ὐ䂮䡪؝य槷ᥠᑆ皤櫴㫨井࠴ԧ刊䟁ɯ⩠継疠ⱪ₉۝ᄌ㢈娺䑑箿ㅖ従ٰ檊⢏瀒浔槚〧窘ߘ⋙䄕㧃Ⴌ捱໦⋺渤滼࢞捕⫗㖔䇁䚫rʠᜮ⃦ᄀⰠ吸Ἧ᫉ഒ䥐ഡ⧍婙爔㭚屿標᭠ᚻ௭ᑤй啐ⷱশ渣Í橡㛓໘ᛉ⑌筋吕硰๙ᐼ㟕ਪ⌷ੳ痧ည⛟溦䉱仐䨬媑ḑ⪶㿑㯣⚌姦⼣ᬉΖ㻫托宼瓗五〒䔱圏ᴵ$ჸ斡⡡㈶ᬿ ੭㳖⨣確Ώᝐ㢜ɀ䜯䀠เ⢂ՠำ㱘ʃ洨䊫ℏሁ溹⩜䛊橔叐樸睻搼棎䊠ⴰ䬠哦㛻唋ֆ淪盡侚Ѿ翍䙱ᱩ佴午勇䶊ᷴ缁嬉┹繍䚺交㻚▦㡖ᑖ⇉擶䛧❾㵎曆⺻子ᨖ㑓㣩曦⢸吥ణ䞸墘僻ᑏ⚬漗␵䵐ἠ庄⾫ˑㆎ珰禇漚༷睛懡綯ᗝ正欵㽜夡ːՖ汶單╪毴傢Ꮍᑊ箋厥㢰⟡偢┓૩獬㬅ᵓ桅㽹洨͐伅ᑗᦡ䞭ⶼ㍧ạ擾妶〉㙸ⶢ痪⺔嗵空䱌妋澓梀䟰榗☬擭糭丐B嗮㶗㺙眥㙏㙊傚紝愂ⷭ㿦㤎孄/燤㿫羽ਛ徍໡滄拌㷅棢岸簟㌗寳睥ጽ攅笹犴஺㦙ᵘ叭翮唏擛绲਑హ⟄ℏῇ䎼柱伅㖐漥緎⸂Ⳬ振ᮋ㜁笠⽅瓸榩宊䃯ઁ㐢䁸tᡡ測唻੟䍽จ⾆碷䪩㘦噛䢗䨄ਦ扰䉉䖕愥౯ၻ䞕䊈֙ᩀŠ斧㚗⡯䤉༁Թ筢寸䰄歛棕䶜Ȁ杈笧宜奡ྒ⤉䕙ר࢘碡䊍᠃杶⠶圝᳏㾌竚ቸ瀼罂祀㸜怨ěͯТᰩ皘⋰ᷕ砫恌Ꮰ弡穅‰䐜ᐹ瀡㉋孰ॵ徂唩䧙咔⢇傖筮䨄椬倥㌋Ῑ䯋潷⁍Ⴃ䤍㜽凃䙭ᤏὫ殰㜽滄䤩ᮄ坅䪆ี硞忽涁惜⥓䖽㈫惿氐⭃䈱㎎䤆屢樉Ⴁ㭨⸬⌂ҟ寙䲔稢僕ܠ㢁㐭涂ᨫŵ垇⽟婁屽䩎倫˘ⰽ渶䠥㎤@ম⃼ޑ孍Ĵጴ㣤䆜搱℀⨾严ኂ㪏⢃幂ඈ䣵᯾咼⑀᭮Ӧ䗅㑃䣮娄㔂㓆᭤窨㣂㚁ᄈᯭ䡼ငᴾ䛴㫕紲價㩷䅼˯䁋⡮娢杇Ⴉ㈇兣࠻偰䈬ㅍ毆䭍⊅䩑儠ᾘ㦤堄䄺ᾈ䒵䚢吆瘷㥵亝␳塄⩕䢼ⰻ睶寐㉜ᤵ彰笺墴㹯徃䘿噝圾枓禓䪌༺⣇䙙䭜䮊ҥ՗䝽℠检҈㧃憂㦀✝俉ᝆ♍⃋Ԣℇ⌣㥜婡沎㹝ノ䐱䴀䱹䕻匳㜀皛㤂⎂伎瘫偐㷽ះᨲ✌㢽Ⰾඕ礼⚳秫䑩㎼⡜封瓸㊿䑢䔽枎╡徼む宁㥥忉⮋瑷䮜ⴠ.灈㸠洴慘ӹᬡ㩅⃉ݼᜰ幪dɐ˰幤恐䭴汣㯱㔓⛰ʣᅅन眩◘䟯㩸䫌Рਧã׀爡卂℘ ➁㻴䆪㟔慙ቝ਴䮀婧⥙᫭ᖂс别椧疼皣杜ἆ㜻₅㥕ṁ䮻ὄ摀⥹䩖ۄ䈴簥䴞ኣ୆咚䏊˨糪栩䩬焣౿晦ൾ♨礡想Ԇඦ尠いㆴ夺ཇ᥇俬憄⽂悚ܨ廈㱿⹦匐洨䷳䛌◰⺠൉奂㙔䴣孓姘䨌笣筘㡕㊈ᑧ櫷˫眼叄㓪㦜๓㍚ီ㧹㛨弘㟹䧫侼匷結儷矘眆曣ḵ౻㰺䪻᧧䯬娅ୂ؊Ű䀣嗅⌖ᠧ怫成൅禦倧Öဥ≂⡜⤀߀罢၉破Ljࢢ⠱´੹⍱䐩咊∜ၧ䴧收䈜㑍溨䵢ᇅࢯ窶ㆭᬱ㖮汹ஸᲱΨ䛀㲷៨恥੿倹ῶჍㅸ⪂Ұ媷⺍捗ኾ㳳煴䎀桅ᆖ楱Ɣ必䍎ᦂ棬勁▷皜㏐ૠు㰾ฏᢹᯒ梼JŐ⨤㡔怠ۇ⁚ǏɡⰭ䁊窀ፒ濬ˑᖡ㣒徍˔ט㬢㄂䋬夿ᆉ乼₻㩰⯀涰瀮斖Ⱐ硷没攱⼈䰶ⓠ嘛儂ㅶ瓖ច䩋甍᳎姱↫⽀⢭枑⡓㱷杽旿勂ᷢዼ暾㒊ၷ5ږ嫱㚥筎傢⹲糅㥊卢㠽竀䭒柄ᖬ椩䭃〤ᆋ猸ⱥ䜮㌫⚼皓◰⫲漇狀殱⵭䝼ଔ䓮㯌䃨峸吲媺䥱擋ᬔ䚍⽿括呦㱹㳊♡刚ᑳ垵☱⣁ᎌ瀧‰烠֠搦␱㘥嗂㊦粜 ʾぜ䒐✑张´䇋஧掏䴭敭䎌ଫ䳮氯欥樴ຎ䈐㙱ϱ勹煕禎ዢ៕䐥ᘨ珝慥ᒩᵥ᪎嵮棡卹橬浲很㎇Ჹ喞䞭ړ搙ᑅ溬㢒ඕ勁渣䁜㐔ᤀ樀瀬准࠭䈡ၟ惺୐绯㈦歔姭ᗔ䎙䃀۾ᢉ䆚Н͔Ңь棅䦶㭷ᠺᮢᙞ⨩捸ᓲ➩䫕促ɜ弪氵ᆑᨢ弍⃉㪉歉坭痥痕ূ嘍縪勔堾岵⟊湺⭹况热㲑ᣃᙽ匠坢㪳劽ܣ❪S啉ూ㺎㬆}㐢᝽䊀᳖縈⪁箄ƅ炐罅䁴઀䔥㇓㭟䔅䮏≼揻宍樭捺ᶽ柽歪㮑ቧ婩㇭ᎅᏈ宱婎⽩籩ⓩ羉侇䥷壭攖㎕糪ᘹឭ䢘ᯙ偊⠡仟ᪧ䡍猓䯓ᤞᵾ獎ឝ㲥Ⴁ㼇㇇窲撜⢔␡壍⍔傣㝱剶垎䏂䃯㪀㽡䊊揜ᒑ梣ݯኅ୲Ꭳ樉߁㣬潝⯉冔㲯愰ȹݱۣ叩ऋ湧殀ḩ慩㟛౴ᄖⱇ焻㏐侠奰䦿∁٠憡爼€ԡ⠋Ε⏾ᔁ䬣䀾婆娮塭歂䅾⿌㙁Щ塠㡆䍮㚗䰑枭璷㦉̍᳃凫沋νᕩ紼撊㔇嶣ᙍ惫ᷪ㭪⹌犊⩹厞犯㎎筥捱傼䮿ᰀ佣竴ㄏ挵桌ᔤග䊌㗣㬿ඊ˂㼭ᢿ⹜⟲潀ㄻⓤ䙭ᕃ漍㭌䘩嵶Ժ㑐猒㜍ᐼ书䚎嗃㔃穥❽ᧃ渭籑䚳晁惯▓⚗兣伄烫綢ළ澨埜尦㍾䳆ೳ綌㼓㜲垄檦Ὡ≵䑜➘歀琄⳦ஶ㤣㖸媞ᐛ厉罵擢␒㤉ྏ᎕檷喓℮ㅥ枮にᮻ岓歗哳㈺䝵≦㧎㞾样ࡴጐᖉ巚碀્禉ヲ岵凐楃⭦ŕ廣㤨˸暵侜ၺ䳱嗲ࣀ咧欪䀭䴰㡼˔ݍᬎⶼ཮架ᙆ䑾ᴾ晩忑㊌侂穐㖓ⰼ㊅❎㢃ⰽ唃氊㱣焋㵠䩙凣冸㋬ᘺᅐ檦❥ȁܠ䃖灖ॺਙ经盐噴ݫ砯㫫䍅㫉᠅㼲ᐕ䵱唥⎒⚱昣䱭ၴ⏑嫓㋑䣺嘩ၝ絻ཡ暪㚣஭ᬁ䟪ㆋ承拵㛩㊵ݿᣳ噺㴓䣸䉿㤬½䜧䂡ↈ࿂ඥ吤8Ő榥猋ᘥ㑋䂽䪐➃堮ƭ䛼ᰃ㛤␂⛬២ஶ㓾ྫ䪪泓὎Ệ⟱榲炭ၫ宫㢕爊ᬑ⟰㕮㊻箔篊・瘈㓩ޙἕⳈ㡥㔃奎ଡ⢉³児瘢娤想啊涵ܟ松㓁䙺⪄✃㸮璡䵖匤㢌┦→坱澻ᑻ䄖暰රѺ睾坑㿓䍽⃱朋㷃篹ጁ䚔㘠孻⾝囬㏙㚊㳡牾㜋桘媪䍷䋠妢偅ƈࠡण怸Ⳡ珒湻ܔ眠廧穼爒̀瓛ќ䭄ᘢ⪧␀懢捏★ɝ朆橖㻋㨗ἒݨ碓䭾刁㣮㍻⨏ᨉ暿㣧ኮ㈖篨㛧盼̃ᛏᷳ电ત俓嗁㟑爫減㇨㉡㠨᪞浇坛ૻ࠷㿍權䶒䇿䣀碼ǀ౔熭䯲据佡➻疸ᜊᚩ咣ʸ乹㟨祻䌇᫢笑㙷ḓ娈㨼焓橿溔㩃㩋睽绽ۜ犤ਦࡐ戒ɛ⬯年惢ᜃ≓䮄佡卛消甋‚烇塏Ϗฟ䣔൬䐧ಟ䆊᡼ᬿ൱၆瓽├ᙶឍϻ㦑皽剥托ᬁ⛈婷寸Ƨ௮㶇䮫帍⽬㽷⸌㴓侺筛⿺冬漟ㅀ㛮䰴哐ํᚫ䫕䎗主濜冤崀ͦ䗿䷲ⴢ⺜⓽䏐ږ瑞䛩漒欮翛疩ḏ喐炪ώ᧵濴㚇⟞哚瓈祯㣱哭挨㞓៊匄㪺畱⧞综Ṵဠ╝ԙ粗糙摉汭扏⶙揈ᙬ縮䦄䔄ᴟض愪捔屠炮窗䮼Ẋ漮└⯕ປ⫎ّ㎺㽵羰束⏦㴑㊷⑚柋໚癯Ⴔ偉ᒕ眓⋂硞䌮ء匤糵牠㸌̚囁㼬氳㜗湠䏩牿ઑ䂥Ü䌒毜㕥㶎款䭺界幯儗窘ⷔ⿢儴䚝垼⼺潾尷ⓔ欈朎؛༳㱓擦䴑㟗潚痆የ࿈潡摞ി疽䩐ᡌ瀨ᚕ獘஘ᴳㄜʘᥒ涨Ȫ䆥䘀〧傁͐ᩩ᧹笨㻸⑿ΐࠅৠКओ⼈扅犃ɑᘤ很ॿ楗ࢧ㞄猺嬝䖩睾拗㞕➪师朗═̻ⱷ眇朘槫㹸搗⺃篸㻰珮伕氟ᣌჀ֠ඣᠩ¤๰笇䐿ங㘇⿾ᝂ⧯䈏ᶎ䤙吠㿒㺆䫊涧㲬ᬔ‡̫屫ㅓ䓎ચ⮋ཕ㚵㢴歩⤢⾒埭缺絻㆓䇞໸怵獃帬ᭀࢽ㊔سώᴱ䀣犣刲䂠⚂哘㼞䈟⦡ሣ㍧⸸檝縃盖尦᳻㌊垶ĺ媰▿㸢៕᛺睓ᵬԐۄ羡勮૆ミ夐⑫⏼␨恭㥮ᔍ㏋弆矚ᬍ㟀刼㠨―⬣㵗い絎˳倠ᑸ〢Ĕጐ⊀稠‭㠣䄂檞◍㭭ᴔ坶ᝰⷂㆂ᐀䑉昈㙌ᲈ܃憳ŝ㊅ၩ⎕ͩ癋䭡嫺棂杍繅碼⤟㔣〕㻢掗汽ㆮ尞ᘙ簪炚ಀ¸⻐㬡ᮇ怩㊟ᲳዔƠ憠㒪筛汆সↁ◡䦶吭᥸Bऩ厾ছи䟟偱究′௭ዥ⑌♜㵖咖䢾珘癅䗊䛙穿渉㰈唕厸徂Ϗ玭ᔁ㩛‎▦竔մ᭿㏬ᴔΡ潟糸൰俖弸尬䳙泲䂴ྠピ䘷㟪n籦爍ಎ⦥极᝚䃁秬ᇟ⛽㨢⛸⍷䣶௧ञ䏹㘳䂖⇛ұ景⻜ᐮᱎᩀᣮࡈ⌁俳䨱◝慍嫑昗㏣储秦禗䈻☸ᖄ຀婊ᮿ㒪歋⡏ەႫ呅ٸ᳣瞸⛒䂳Ȥ䶫ࢿ抄ୀ䙄䭓⑝ࢬ䉯㑸伡ᱦ⼇䢙Ễ䑟敯㷼嚑᫬䣈䁉௘㋁橦㼎柄⇟㠯ࣰ侹«㟡䀮糛烾៞䕱礼忕㒐Ģ⌰响ḃ▰ش浅䞃ऱ晐ᚍᑦ㛒䟌Ằ侕ᢪ摌羝䉏睍䤁翰瀈㞾兯篒⥿գ໑㇤棅続ᖔㅀ䭦䕫ᛇᆗヽ䒖ᨠƆᡣ〤ⅺ̫႞ฦ俆仏粈䬐ᔯᵂ紴੎घ岘䜴㦼呤扎ಆ拇㤳泈羴ᨬၟდ˩୘員嵦㔾愡兏墆ᔇ്妩步∫⋾ஐ㔠⠡琦筂碋恚Ὅᾝᄒ䧥㢮䷴ާ䏱⦛紦偊ṁ̖ᄘ㾃⟄็Õɵࡀ⼱屸र䱭ѷԊ᾿⥣Dz屔潔捉੔㍑日䀂璍硌Ҏᓰ䨡䈠俠傏硋ઠܠ绨̌晙䋞≸⠶ሂగ״磮㶕∴⛚砀幯်໦剤೽⬸宗幕ㆃ屃य़䍎棥ໆ⏙懓䓳䒸朳ⴆݥ罰ጷछ䈩㞩Ⅎ忋Jଟ䞄ⓕ↧总䂓夯ྒ冞廀狇䪢䀦⥠҅ㆠ♵䬷䌳⤱凉ፌ䬡紭寝㋀ᰍ毛᳃盰扙䓯ᕸ䳝嶩൧Ꭶ爤⪩⢲ᅘ卙乨╭䥓硠䱔ど符䀈吪䦚⧉ၵᚲ䕵翱䣭捄伈ᩩ㜢撿ኛ⊪␱ᤤ亃嫅䱀浲ᐔ䱨⿰⍇く≱漘祑ᴘ兄癬桝⤗ሠ䮭ዮ爧瀅⩭┅竆ῤ徳䷗ō佢᎞疘⩉⚥໠㥑⁗ㆩ樻඘汑Ṛ授Ͼボ⺎ธȬᇜ⛉Ǒ৛ٜ囱䩀眽Ⱶ痤䵞糙ਆ㶮⅙竦ተ戙ᒖ也磣勳䗃堩曄᜺橲爍▭᣿ᷜの畇暎⃺ᚔⵉ᫳ڧxᘿ惤暧♸ᄆ⨠咭䎯煊ㆂᶤ䜻䡮庿䗵ᡨ䵩媭啊缾ᐎ烚㜁⯆ᴄኍ楂⠒᷊Ց禩䮫玆ಞ㕾 禔䄘ઐ❼㘚⼲ၬ桐尚᫇੹îٜ撼㳶䷳䎉㖛〺₽ⳛ➿斛ᲃⅱ✶Ẃ䉘䳀㚔ᓤ粹㩳㜈搥፰䒍ఫ㧭䐾㶦ƀᦰ渡㰽怲䬈Ĉ伨ቩ䏕ᜭ捿ᇤ灈ᶀ㭣栆窊煤Ϛᕔ籽殤礭㞓⨛䚬࠹䟧ⓣ㊍ⲅ▮ᅴ䴃畭煍撿㎁䰖㬁⛆冽ᙣ⹶稥᭰吲嘣晖ӛ搩䨺␘⹥禇矏ᆰ֫枏⳼⑪䵭ၹⰤ㝻庆㫩兂䧚੄ੌⶢʢ⨔恖Όϓ理⇩䫆亿摍ຟ䖞ሴഽ玫ݎ您猅䦳弉渻嬇๶沠㧘晀㠼㺐ќ瑠㔦匆䙌殳ƍ⚜戏惴䛚ӥῢ䋥䒟乎⾎匆妾὚槉窓ዀ拥⾨䍏㔞㈮䠦ᑈ橳㢳瓁ᓾ␦ⴛធⴐ翷峹珃ᝐጢ侹ᢄᩭ䪰㡳ឃѭ姫˭ဿঅ睕Ḙፈ઻喲䅕撿ᗇ⟒ᾫ柭岡Ӯ䯞⧙⌹確๳༁旟᝿⑼೔䐥彀⎍त㻱Ἒ༴瑫ㆆ䛣挻⌓卭䴪橕淳䝕ॾ刨⮷巋她᭞᝼䲃៭୐᳒̏瑦㟹窘䎸淎׽栀唐洪Ⱇ呯೉ÿᇵ࿊Ὑ儁㱲䥖簗ឃ㗒⁎䓭ᘿ@ⲧᆈ⌆眍巂㼉㰚䢪▒ᠪ懾ˣᶙ倁⇙ć⾸㇁᜞撽ᬂ悥ᷪ䣕紊䈨⣮㮦夅Ẻᔻ⩪⧶ᨀ宬ጠ沰沯ഇ畀ߦ樠怡㙧⚐j惢互约⬲˔䄹㉭䣸猢厄婹䦛撤ⱴ慜墮櫭࣋ጘ⮂㓮䝅ѱ䆗煖⤘圗ᾫ༫ㇵ壷⍬²㄄壅撴㨸⳿䨖橶ᝌ͐Ü㒵涔䱑㖖斧羠䊬֧杷ᝃȫ绁獍磱掰ⱘべᎻ࿤榛㨅㫔宀筫琪緰䌈ᱡŰ墹圸᭩㸧幄π౛☡▀䁔㓍સ੶હᮇ㺵宬椑᧨ڰዝ䭌泰䥥䑽凑㜺媷沿⦃㥾ᓵ沔樫㭏⸨猆㷿砑ⷖ䂶忩੠媻䑤媽༣匥峃㈶呣㙱㟊Ƞ約粳⣻䙘࿰㹡ዶ࠹怦ᇳ倀㮦扄㬸㕖䛌⃆濌⪠឴礻㳓ਲ਼燖䈵⑻燀㎠稼ᕀ囈繂ル䋘澝䫰⡵㬥䤵婶䕧▇ᚂ弓㢳੏㡓䄜⩏兾ࢵ婴栊ẘ祟ᥲ嚤ോ䆂炡䫆⨢㓱⑶噶快內ᔯᆒ嫦Ң糎⨰ብ䯹䩞㥡偶⽬ᲈ窻ᓪ崬梫ᡉ啄⌘戮ⷓ䕵栆籾喉旔妊囤な㣊㑋惶ȃᄾ⽢羡ቯШ眘̳ဠ㥟悌怰෿Ì搡᭓㱦䀡༰ᆀ喰剽緁੿⟚嚼ቅ汦ⱉܴ⎹䵉⏚ߧ放⦆ↀ坪唬䨪狈ݺ哥⩹撊㉹ᰵ啷ᇆ䝬ᰗ஢䏩ℯ଎ʬ⋢ච吰孨ⲟ犏ᕧἔ喨᷏䍹⠿⪳㗁቞ᤧੲ⺖Ẻ㧌啲徂⏈โ勈⯪䶵㉕暷䈧ᶊ㔎ᜧᣚ櫋䝎⛕㪮叁೽⑅ᑃⓈ桀ⲱĸⰋ㓕ⷌΡ㴏䮁ၽ઩并かࠢ䁎撞唘䕫⟐什炡㎉剈〭㊤፿㏘ോ喆᪴欂㨡⡿瀴Ú勮䜚㴋濈练喴᧯ᰈʠ䈬敊㖌ַ䢡⡀ᙃ⭇疂䄼昦奊拥歏὞岸⩼⫆嶐扤ἆ卾ں㓃ᘦ橊ಎॏ㶙⒙刳㖭左⿂䀿໕ȫ࿯㝃⧬ૢ㌍௾㚨㌭㋫⌫ᖣ娊珨Ě榲俈壙⾟⮡⢵⍞⚡侺඄ᨄ㕿᜺玓૊⋜璻䐔滏䈁ᓴ㮮㥽席֎坬ӡ灣֠媢ċਓ壑挪ᨦẑ梜㟷洊䦘ᥫ䗬୺ঔ؃ὸ佂縥戬䵵旸勒傋绁浃㋨尖䰱㗥夒ⰵ厇䘍攭努牻䚪᧞Ⳋ宔̊㍕ὒ䠣恏‘␰০䤡䓭梭˜éǢ唕繖㾸ᕛᕂ㗵嗤⃉匶䘿᳠䥅䗁࠵໔䅰厅瓶ៀᤪ措畊၁匋牜䓳㗙槴瓱᭵ᆍ⑘႖䈔ਡ櫋᛭ॐЈ⌼づ婌乤眞磰廚䓙Ⱕ㧏⌗᯿䆨ᙐ³羮圡ണ坞呚䌲䕬绌㫫梴梫⌙朶䛷⋉䳴㕳悶䒫ৎ⻅ᛨ᪸溻卍塕␫኶Ē⬽七㾬◍ि偌ᨐ߫㨀ᯓ㨏かℙǠ䬮壽焉牑曄㭤䴘庥㝕൫挪䂸ఋࠈᴁ㱠Ꮐᛈ掍嘦㫩帵廽է淐哮嵹・㾋细滀瓌ࢃ䛡͖姸捶᧱柈Â䑚怡滍ᵮ〢着ᡠ㕉㣷㻆/歬ϧР粐㈢ⵐҔ⒠䧭ྵ墣⮌∎㘝Ꭾ穡爳㗖拼帄洫⤠౺竵➊䵔畂层瑺䫊᜶䛷㭆樧㉙ᛚ曻ၜ浝ᥔ‎偢䈉߀䁐簓傯㞭ᓄ忂㍠哜㌉ᨁ୻㬏⺶ၡ⭑现㍖燶˻፠㘖ᔶ憎倊ᇍ䛆㵐䄂槞㮝嬖式⎛巳㖵ĭᰕ㲁⡴夜疮敐䬚ἔṶ第A䈫௴䘲憗塤嵷璙卨ಝ㱗垰ऱ壉ǣ䠆漓Ԍ⿝圜穷汏⁔垊唹ᶖ旔欭䴺喛࠸όһ厡楟⪦㗑㪅枒â桺ரՁ猌牏Ӕᯁඕ┍塪ɦ䬯䐲惈ࢰ泱ƒ⠦㼅剣ൺ㫅䙆䧸咄⊄㠕娖揚㾈⍓㺿㖠毳㦽䐕⛹䙹痋䟈ƺ定㺀矑壵傭⦀ܠኡ⭰㲛⋴᠍崯㨊椋㫌她兑栨᫒暒祹砥咫✠㺂䣊届ᇍ泰㉸䦠縑烵❰瞍ᶠ⟳吘樧繩睎彎䮏䔇↍潛➦ဣ䂚Ǟࡌₛ甦ߔẲǖ曻㌠㚡⠈࢕㔥⇖♡䬝Ὠ擔ʴ汴ݐ橞ᘬ䩺ā繶⑊ἣ⼦ɏ炃懚㳜ᦉ㾝ᨥ偑䙦̡๫䮬濛尤瀥㜋䬹ࠈᒁ刣ェ䀨㛄ೋ嶬擘⍨毁䘣ヲ̂឵ဂ墤⤟䵖殴㑯♽ᙨỻ竏㎟⸰畔ᆇ⩕⍣␉䝽ᳱ掛㨾㇉‿琚㠘嫒攕崁瑔旟栠怲㓑濡噷Ἁీᴋ㈍沒⩝➂ᕷᬞᑁ仪¹碘燹㈢⺏☭悯熻繯亞䋼㔷㲡华䵧嫡එ淿布ㅷ⟠筴Ѐ晳勆嗛媊⋏㈋㯋梶⨙㩕巹ღЉ㚖椔瑆暤㠭㔵㓻៼㊥䆀帣䉈丼䒾其歧樣⟓椗ԍ⅖䜽ᢣ搪ᇁ巖࿌㉮焺攏窯ৢ尩Ἴ㭭ᚓÿ㝮挠㊨㢶碦咸㟗崞❻洋䩠䢴᫄檭嗍⫝̸其吣亍栢䇺嫈ᱣ䁀綂暩ྥ咸䴅沫␦仴≙懐欀ᣃ㧨ᴤ⽏傈₹䁈న㞪࣋緄ẁ㍡ᦶ⿣㛸ᖵ௄ー㬑濧Ӕ㸨ဲ㴜ȓ⻄ഠ⨣࡛攀緲඾ᘒ穚䛇缻䬌㫱ᡶൌ䉕䩚ᶗϖ☚㟶啧Ⓓ筲庡嬽漱㐭嵯毾䄉搜侂彁棉⯧滐ᙲc̰ˑỰ栢ᶨ㛞秝䢮产ⴽ〶࣪۫ᄞᯱ࠴翂祂捀థ婱朦犾㚑⍿䛫浡℃༵⽛夜㎘ែ姲岪⢀㉁䨄ĭ⺸ॣ昃湻ቧ䈘喯’㾝只䏣粣璆䗲␘嗛羮䶙哚皀⩈䈆㘿ô哐ܓ欔氃⻢㙕妀㎷ᬚ⏞䟅䣩檒䦡普ᾞ㓚㠈暢傣㑔ǀ ߈祸Ķ㹗আ浖⏏儬ᩋᢃᴘ䊵⻴慯䂨⼪彀嶧ය炇樂箴檑㌓忰Ⱛ傊䃡ₜ佥଄☩序目栏ằ㈓婧Ὓ㸪狚嘛堙眣嫯沰牬瓰䓔៮ហ⨡⡀࣑⚒㗐⺆碀⮡倨č•▫䫖r⽖⎳࿊ⵕ㌫㠱⁖୉⚤屛嘥㥗㵔⟘䰘乩㡩禚㈃ާ㻢綦欰碫䂖ݛ湭卉瑿ˁ⼡ധ䰷၈ȗੈᝀ䨢ᓎ␮tČ䙜ോ⴦Ⓟ䫯ᛸ䙛⇳㋫▢䊭㍟捗ፔ㹛࿌ẙ㈛婢檖孮僎ྵ䌋䐐ༀ撪恆㇎ʐ捀ከ寏ⵋ剌⅐欌䄀眀㘠c㹐㠿孞⶷ᦶ䲙煛䙹’㌬嬈௄䟨冧卐⎔烘䕨ϳ㠴ビ瓥珑〜㡿ॆ䒿䖘檒✊ぺ槃灭፛ᮎ䄆㓐à㗠㠦愥犩ᷩ䲹⑀珍玵㭽娖柽㸵揶䔗׉⦸噵᮪烞⻯⩛ഌ瓝䱲㰕澦㉈ぐව䝧ᦤ欃欑勠偂崮㜫漅晷૨䲓䗇䧯ጨᓺ䙹が䜒緈洀ᔵ䙗澊掕痘柃ᾐ缻⿏哒㥻ᵙ炽㴧⍌⨶೔Ⴍ焙䈓妼╫ⵖ䶑磚┲䭹⧕㖵ᣖ㺵勫䪐瑵佯䕾価⹊ᬫ㸌癖䛴▁淣䘤䬤煓᝛㗓瞚歜瘡ଠ㫩̼砡癟ⱀÈ೑⬫岆壙姃ཧᜠ㮃ᮻ䅱ォ˺嵢塋䱨噓䂘ᗢⲌ㛞囦ᰌ୑箑㝕᫇傻ῌ࿷唚Ⱎྉ㥎㬃死禼壃ঢ憒焌㍯᫊㕴ᰕ⹬匰㧶㖲州फƙ師⫻喯Ồ᛬㍷ᬃ㩩䖛勸䇃滇⩶姠渓㾔箋ᠱ⃣䂝伢☡彗籰姺盌ᎊ䗠㭡ⱏ兕偰ů悩儫斸ᢈ樧ᔄީ別ō柺ౡ祡㠕㡝丢ᛦ枛؄ێ㐰窋Я㿕ἁ䵲ൗ僵䪡᜼澚帩ワ塶硭曍惊ၤℒ寬效佶䡿ࣸ㘇睞᧤樋囮䯲笈箎ᙛ㗺䀮䠊ď峌囁᳆橠廆ឯ㭀楞㩒溲囗丈準Φ᧏⹰ǹ䁩Ž慢縆汝㖣焖盽㶐屉囟嶺碧橮乛┋糏买粠༗Ɔ啽㶨džЇ倡䔼〯⭐眀ח㏁獖⦺杒緖໛愨Ṷ䗳ᶲ伃箽梀纥䂮㠬⪆淫㩧墶琋℄㕓ᬌ㲓ⵓ媵忶滻᳞ⷨ┭䅊丠榡睰Ẳ䥓⁷⭁吠㕃䀳瀣ę⵰ᶓ墢委㈚剱䊪㡃②印㚄秉Ď攌ἠ朡杜᷈皣⸨緑缁別桂悝ɃḘᜡȀ∧㝰Ꮯ⍴碌ᵮפ㔂ࡨ䅷咴ῐ◴⑟哣粱ᲈ࠰౯℣䔐ဤ乏ᙩ熈滹ວ㖑⃊燷⬳Ӯ卙䴉ᏂƂĂ浇氨䳀愆⤒Ÿ㏜樮噞ໄ▴၆Ыో㠌⪛任❕ ᕢ㖅ᑂ␼浊᷺㷉睠䐢府杛柺俓俳歠䦌⶟痲楶㷶ᶇ碽桕姮枉䳧冹洡ⵡ倨䈐皬ᄸ疓䬌䗎㫪㘨䭌ὕǚ⡜ঞ㻫楘⦴玁睊䛐೵㵌犨緹䵦屮㮅咤杩嫲涫坤⢜㔜䠊Ὡᣜᮉ怪Ⲿ岉焪己竳¼痮䥯䰉Mࣈ㳍儧㪒揷ᑿ嫺⼇呎廲⾒卢 畠䆖Ṙᎂ␁両墊浌㿺禐啈擂崽㟃媋䴅殗綄嶵еΊᕿ嘊⍮ݺ年砝痍ћ泙䯔㈿ᣵ㕕朖瓛瞀㭂欧㨽䳔㲼ଡ⵱爱歮⬷๿㕥ᗻ᯸㜜Ρ਽昡䋨淶ٹ䩯䊷ႄ䣸壖ᄲ⻻㘋啭⧇䍗緪澾砕昙樏࿶峯▚⾦獠ࢗ斮Ỗᰛ᮷ᱭ澳䬍稫剬⃌㏲⠦⒜၈ᣑⰂ⸿往縕䮼ᱜ⸙ḗᷘ㡽䴨ⵙ圁筳䖲徺瓛቏䆞昊巗揔㍽盺ᓎ嬂Ꮕ৭啞ᙇ᡾ኗ᨝吉痡⇉ߩ昹厷ᏹ⛄ˈౠェ☠恕埦睲甶妽啘媿炞↔憙ࢧ㵾Ẑ࡞䇆̜絀㱷岃甍砰〛ᬥ濧၀簣༖⳰彬笫縎曟ᙒ缁沸忆矗斕᎘㷭㓠ᘌ祌♰ⱥ狈汯熓㹈恍㔍╲㝦⚠㸐ㇹ喎甿橞寄欠㦈狛嘣柗ᇸ_஠瓎⦦停ԉ嗧滸㰍㮞 晰奲圶◓ᓞ䄗⫟㬇䠖晞塁稯ৎ䦄Ꮻᶲᲅ㚺皠歸⾋愘敶⟼⎶㟓旅渆⎿੉瑉墺ᝲ州㈆῿㳅燣կឞᬆ睺䰩砫徆㹙᎓◕毈罰ᛯ䥟妉旍丌䁫⡟ዩ绑塱某Ѽ婬匷绿᎒兊➑淐纜ͻ㬈␢祩⟇㥖献免凖絥杹溊禭盏渻⦄某弣噎竡巼ㄖ旼⾃ຈϯ݁㏥敢栻壟‟ফ睟㕫娉《䧨ರϒ୥㼳Ġ庫㾴縴ổ䮔爛⿋徲ᗷ矕⧅槇㯦䚂稭樭ㇲ䎞嫧㴭⯌䱐㙾ዳ㨊ḗ卸ŋ疧◜䯫峢墿ኍ皎挎㼸笍垪濚箭י嚾殐极堅滨呷䟾⨲硋b坖抠ᚘᯑ䖔朖対ⷆ炸⳰ῥ毎‪ጎ泡悋⊙۝只㸦㸜㾣取⩹㤐换ៜ㹆痻䇝勳䠗໲捨ཛྷ㡦ዱ㯲籟ഩ⻕⒵ₘ໕㔖῭眃矓䊁ਡ⧭ਅ↴ߞ滏㊵䨚缇ྜᲥ玥䶽粧ྈ柢熚禗㿏弿娗㩪㷒̾烝欑ᯫ⼽᧘箈ٶ砒ኢ崞៶‏矜圇⋱松恧㏂㿅䗶׷㖝甘壀宮῏勛䳷ס羌⏈羁空挵姗暗勯຿䢒栥淟ࣟ尖纹珨娆䨠䧅爒㕝妐ⴻ՛疦ⓞ㙸滭㼙寑暿⥌岑爾徑⹗眿缎唵ƍ綜繴ግ県篒䠫⠡⡼娬ばỻ֞刕䀫眶绠䅀竖槕扆㞊㽫໚⬾䬾↜峆復氫氕ဍ䛝堍ṕባ燛䧾甏ᨈ㏘㺿ᡧ撓湾糤檹夯㏅˓尡ዦ琵䁹ⵔŻ湇∠㕆瑰矏ᇅ亁䶄斜氹㔐炁緹9ူ㙁沐䃬۰橡ḛ⭾狼ཛᲡȄ倳厪㙼˂䢯ኜ瑼ઠ㘇㨡゠ᵻ㻒‬װ㎹㮘縰岿祶䖟捹ḟ㪐倝怙摖怀1❀၀ၢῩ⍈敥㰃禰姍攧壢Ġ烝䗹ಅ勭ᦶ㰠㨚㿱࿏僪㿔႖⠢⁋Ȩ̮ᒿⶮ犝槸㠑ⳤ彮徾ݮ塚Ԕࡤܬ昨ᑲ㊶ᇕ缸㵆漂柸濅潴娿疧歼䃆涟婯⅒殭䛀嚑㟋ᨩ瀭瞜ẗ巖㡿ײ▊ቸ㭶䘬炰ȓ⎥緧篞_渢懪㢣瑠ᄿ䘯Ჶ᪱㠪䄣䠤䠤ࡖ°䃁䶲߱↽ӗԯî偼✚挐ˎ灕㖾཭仩᷒娉㊀ᅨẓ㸠㛉⾡ມ㰎㕺႑㨯ƾ⃀δࡃ氀☧ኾ➰囃あв䶷䘭⾒繓屠׮珩沠᳐ॠ➠⇑∫㌭䇻ₓ䝷桀㰴ơ玒ୀ݀吾ڝ⬦擖Ԡ嘳ᠯ╥傯攻°ైᶀⶽ㭡椡ᴥ㰨吳桙䭚怷䪔ᷯ㣅ᖺී䨷ᷡ溣€墓琸䰾嵏ᔷ䳁ʛ僬஀ਜ਼ἠⷮ㠢嬙ງ㔇ዥ⁏末€䆟㈻ݴ支䠀ⱁ䁠嬦ජ∿瀨汞⃔ự㳹笴൨ୀЀ瘎䦽㟚暕砻ᇺ群硳₍ʂʙϔ໚ቼẠ娰糉崳娪怶ᶷ澉穋擷‪ࢀ悰ᴘ㞖䎍䡙䘩Ⰾ-๎㔻Ӹᶯᯌ♸႗䫇⌀疣悚槰岂そ探⃘ở᳑ˇƩ侨㒠弎䱜┧う䠬摌ጻთ⚼䏚ͷま恑䈠મᘌС໢❣嬲᷈楹傗恏ᆔਐ኷ῠ磆沽ʥԩХ࠸ࢋ塩⁒䆆ʘ¨櫰ᶠれ厅䳉喔⨶߽㡞惄䇪憞㡼ㅄᆰㅀ墆䳣૸猪╮㡝ޱ⃋幄䏝ۈؔᕨ╎ᠮ朢㓹ȣ㠰䯭ၕヘ⹖㰣Ӿ偰ᣀᅠડ俼৫䈯Ȱ塀㔥Ἥdž瑳Հཤῐ⠰⬸⌣渲優 䑚㡸㎂ચ┭Ѽ੄Ṹ⯰䳼傡ⶦ⨬☍㿡⎸崢䂭Àʶ匫Վ吾ᬖ斡ᘁ⳶愧ᠩ墆ɻ䄴䏜Ӷ෷চ䣴ⷶⓙ㷋∥秊㧢忌瞆庀ˠɦྡ̸⨠ᲁ䢢痊峑䐾ᱞ႒Ĕ憁䵟䉦㉨Ͳᝐ噡⑂瀃侠堰伤墁ჶ⻤䋝ٞ෼ᰀ㏻̖斌㳠廣⥯⇭ܳヶú1Ɯఔ᷀ၳᘂМ⊻̭狊挹ᡆ侚幈•掓ն曅࢐撼⡢岛儵䄺௭ᢆ℉憨䌴̘ęി堯ᔁ㵣㉤ޠ嶆屔墅惦᩻䐈䜱ణ҉怞ᧀᘠ㦈ᨧ湁㈵柘Ḵé◽空䇲䈴嵩⚲挐䕰ᾒ稀婶㔪琯䡨㧚塪ภ῜劀倱䣤◛ℨ㌉牫ዂ啰凑Ż確๲➄㽊ڲ䋉♲ᠬ᤼䀴壋‼䤘Üఀ؇䵐Ꮃ㕠倩噧῅夻䪾摸⥇ᇆ⠶笒ಅ䣀၀爄塌ṥȣ千懱ʸ䤙湜ᗗ础࿻檸㾢ѱ䯈嘈窪䔺㟨ᓌ⣰匑⏢䮵॰䛵ԛ㛨倨戥濴⥠⠹澨㵭炁㈓⮑堏⩟巫ޞ協㲥稭傦䎨湎嵯䡶军ނ㍰Ἃ嫟ұ㸝⛐㲧丵绦瑠椂Ⅳ畯殍ࠦ䭔㥒ᒎd塣〠ᖄ瀢⁽䃊偎⋅炪ᛌ䨄ူ䓐竬㱤ஒ吆䋲淐㾀櫡⌑壿ჴ侥唐⍚⣝ⴛ炯ᘴ穋Ơ᣷儤㇍೻ؔ⸠࿱⻠ᖉ㚩࿋硈⧀÷䡢䐄ፚ璦ᑮ占砦唣欙ᔰ⌱ứಁ罛凈戾䖃๓ⴔ㊸幑曁潧䬲ጵᾤ䲀๟冢扈䆳វፚᯛ㦠妬ਥ毄㋨࿵䱼ᢶ暷⊙䖥ۍ揌㶐㍞璂嘤㜩堽䙀⚬ࠧǩ⍰䐃ശᖁᱸ矱⦂⁺琑࿂扜Ἥ㊘䈬അ禦ಆị䬳⾔續姐㦨綍筥౸⡓庶Ɏ碻බ恌✸堒̓漩㏇幦ᙘ䲉ᤉ㇑挕欐懌䓔Ɵ㔦㙑櫦憫㬎忶ႇ⢩慄塜䎓ࢅ泝സ兖掃ᣦ䶩䜾㙏⻐夓ᙩ挍䓇ಖᏁ䊸泑䨜徛潵䴤ࡋኤ墜燇⋹䛺∮᳿唐ố䬂䣦ඩ圹๎岔㢰㪏棂Ǧ⏊䖴⃓ᥑ睌彰䃇८ʯ⁇佀ㆿs㏕ㅻ樜ᒀ态熢繦囆慩媻㔡੡攌掫䞧璲ᦑ༊⽱ټ呁徫猿⹈Ո䨿吼汀后૖ᮒ䶠㹾㟃䖋垧ᗉ婙沕撕㪌浐ዐਗ溍ፈຑ௨㐚統笽⿷⟁㣫棛㷂姤ঞᶔ㔐⊱䒂⇦倓ံ濲ᥟ棏狄⍄穤勮䯻µ㴐䘀䶨罗篆乑岙婾ాए⡐㠄ੈ⧈喪ണ㝛ね坃忦䯔碯┏捨⑟᜞ᣜ㌣✩Ⓝ漨樨䜎失怶࢐ᱦⴚ䤼䎚ᡟГ㌩䀑៱὇ゴ癒ₕ摣ຫ㴢℻Τ䓶奀ۄ煢៦┭笱㛤㲆夘⤐̖筟૚ᴾἈ燾籹㹇ᷳᯢ盡㱬筅燆㔧䯍㍅⫂䢹؄夡琐☑夳᭤殮棏Ṧങ⤤ಯ䌸᠐僊䰂僥ῑ樊痫䲩㜯ਘቫ䗡ਘͅ婨噀ՌⱠ瘭ᠳ嗶㨷䝃㈓挣㤟ऒ挭仰撾䏢සХ伦㱌䞡⼴励碁ऽ坕ܠøⰐ᭜㚚怗ӡˮ㾧࢓㒁ƴڀ䳮搤☉т∌纸㟅Ą斦๟䀯آ䅖Ǫľ伦ᢄ妠ゔ捄♮㎧≇⩔䂐䳬䃇᭰ۨ݀ഄ棩浈坅♭岾঻ဳ䡶ᢟዂ̈́Ø揈ˀภ〠涺樔疪ࠧ灈₝ɻɷȒ叉ᗈ㸨嗈紥ࢥႭᬉྰ濎ࢬ㇍ዹ櫜䣙ἒ㉐㗩榲睄┖怏䭿#㑑[䓪㬷❰௦Ẩ籰妀㒙‥䐤
䁙煣%紖㦁ຯ东ᳺ☤ᓹ䏥䀣栦Ṣ决碼眅፸挈ᛰְ⇇ፌ䵢梧㋢㴈娷Â༨䃞Ġ҉௢᮪ㆭ㵉噀⋳奭␮Ᏽ䪉䨮⦒Ĕϲ㒳暯宋ऒ恍ᷤ恩䙪䷧䪏⠸㡂ᡕ၌䶃аỴ૩琼ՅБ悿甴౶擴呛ቷሌ䡩䡒ऄ煰Ꮃ渚ᵪ横〡牬偘ïᎌӫકᐒ㭸‸ە橈宑ʶ՗Ϊ愝恰厔Ƅ൵Ⴊㅴ刞缳ӂ枩គ楃◟ᣐ䧑ほ㬛凈ჰ၌ཀྵᝍ抐䏕愪ᩦ㔶岖⥓⣏䂺䓪Ȩ䬘Ⴚࡌढ暇犻倳ᑗ䣧৞⌒⠙೺䑺偌⟸沬䎳䞯እՕ籀၊᷂࠭ɂ䩵ᛐ㔴塀嘰広㍆檳䕁婭䄞槺ħ➿ؽ᥀䲔孁⹼囧榦ਥŝ绝ᒺ䤂储Į䯲䴚㯀㣈垃猩㕁狏敕䙅咁⧢⊽參㙳ි⚔⻩ẵᇇ秦䚼搶᩼䀿槁ğ␡䤽ṓ堬搴⓲佅ル懋䍑窀ೱ榤㏴ʆ䤨ࠒ╖᷈榁㪣獪别椬᪆咴ᤧᏥρ䳣ዾ䲬䦠㱒䂅⾢ᆸ祅᪉೿椢㉈栁䦝ᤥᚬ䉠炠ಅɡく䵜ઝ㽷桛匓܀ឣ樄औ刞䪳彘⍑ㄠ䏾⒟硋槕掕②ᛣṦ⛯┹ɓ䊇掮䕏玤囀ࡵ㣣፞İƻ䡪㊄䷩ᦲ⥅⼷亭ᵑဠ哛欁䉰䊻勨➢⡻ᥩ䥂ਣᒯ公屉◟ႌň刬তؙ愵᝸ᦹ竲㋺ᣳ㦲ླ暘擂⦿᎜昞曓☱匌⃩砕㲂൮䠠⭃牯䳛䤧扤ୄǫਊ㶔Ĥ彲技攮Ṇ䜨嫓岛慤礒⡪䴞暇ޔ䔨䦁ᦡ㳤嚳х⢞䅵ß᳖ۑ䓵ᆊୌ処Ⴒၫ⫯䔫⭒牱Ⲧ姽ǘ牒垀൵䬠⮹椡⹂ɣ喻孄䩮យㅯᆲd溍ੀ⬰慲綄☠඲籫㪏瑑大΄䔔嚻ᓄ㐯ࡠだ嬤࠭簮็Ҋགྷ℣㶩ܑ䝛ᷖ⯬煉⾲濇帵杨␰媸ⲛ⤱ᱯ䆑ʜᇓ尀僬寓毂♭硩啒ᡇ怵绝Ɫ妦័溲ᚈ叔椙䎆砒ᳫ୓ၠ⁵愉㎔擭䴘࿀儯㙁倁㸢∢း䀻ઙ䲻楷ʑ摿ϲᨣ佫⯁ݜఠ癧族潦嫟癧竰Ǣଷ✳擂᐀ຠ痭ፃ坧಺〤籘吨ᚂ䒇ⓏួᎲ⧤嘩Ἁ炢¡怬⠼¡筹↣㋞暕䆲榴ୀ䊶灡ۣ⑮姡睐့峤⅞琎匶ધỘ㶌淲ⶒ博痫ᥢ㸠溛碃㧔ᎉء㌡ᎌ⅝Фバኑ峔⒰児皤ઓ囪憕䁺䐩׎彸⼸怕䋆㚴ڿԤ᪴ⳏਚ扸䊧࣭杂㑄庙き䨅ⶬ涢ཻ 楨䛊炁ଅ⑄Ҋ▴孉獳أᵪ個៧濐ヤ䈢刲΄乖棚⦸䢩Ἀ絩ᬶࠤ皴ι愢৺粞朣佼ൢ<煌᥌¢庒媯⊧势倥橷䅥枅䲍殔傜䉀䈓䛄眫ྐྵ敏‫㒳湛㘆ʫ圇䬢ᕼ㢾御⿠䟩᪾罂橿䲱˒姍≡䭨߽双礘㗉࿳₂⁷孳䟖壱奟Qń়᜞ᤜ翙伡ἇǯ‽䬣䚄⽻稁獔䕧ಃ␡⅀⥁晲怵䵨羹楜䩢൵㡰dz䊺倝ᕆ⡬庴䂂倷䷀斩̈́ばĜ湲䊛凘؍ᫀ咐眾焲䂛ঁ綵戳ᡇ䦜վ椔ޜ瞣憸ㅀ㵄嗓䅄Ⳮ嵁惐紻ᓡᥴ㎧╈䳼ⷌ䈢㾜❌㐠⽵േ১㡱塸稚獬Ȼ乗ᨦ⛚ʀ⢠噰㢬䆾ࠩ䳍⾅禵ᖼ⚍❿᳁侍إ批ㆇ厣溰孆粲ⴃ廱୬ˤ⮂༱㲢姡䨪㫇䗬㇀烊3䊻ẑ獭⇘Ⲳ䠛௡Έ䀪䜇渂堠惍繳ʫ⤶᎙۫痁۶≸㨑⮒䄶竬㐯歝ㄪଫ刊԰昫伭᧦⫄⇩擲㇄笧䆬焯‵⋰ו௹⒟䣐౦ⱬ櫶䪫紲晊灾ὄ簼䳺ዚğ匤ٳᨪ㕬亡畒㋆佩㲫᱕↕橳程ʡɤޫῒ㡼帙㗓稵Ⲃ䱳ᣆ兦报䗡᳣尗䳲䂰Ḙ㤈䡉宩稠䋤儬皝࣏绾籕ᇯ䶃໛ج樎簡惁ਆཧთ䞷娲槒劐៭䡵Ⴑ㞀熉Ⱚ大∣㴃ֱ熆⌋楙㎷జⵐࠩ⿀၅偪焒屢涰梧干㉊⥔剕撾ዄ埀ᝪᛘ㙀⋳䴪⢧䣉灗嵈╫ↇ擔⾞ొ〨㭅㐪䅥᧨䢰僀䥲₫⣘֕㨂⸚࿞㦐憹㕪₈⡈ᐵ⃒ṧ橎╜䮇⠒⽰ࡉ␉㟚晸噻〢䭠
綫䴂璱礁灍ӛḆ㬌瓞⨓沦Ừ焱ِᅸ䊨ೈୖ倴瞀౳䢖̆奫េ۬䑽㎵乼჊ࣗ૆朂⿉᧶Я㟮既窤⹖唻僅䮫拯糮䯅䅈Δ咮⚄旞䥜ᓄ⿀㠢䄭纬ʓ●恴⎐⧓ᵆガ柅䚫⺹圂㶼筐⊍㲭ǽ㎌ᇃ䁙àᬨ៸ᣫ梵儣ᚺл籅挒⢵ጲߡ牰媋偀亅ý夶Ⳬ偰泄慽䴑⢅䬼ч᝶棣䕉ဉ彡欷䁎種㫧怪ḹ樉悛ԛ৩䱂⦅ྔǣ猧⶗Ỡᣙڞ撱䗼㋦ᒁ䢸判ऒ䳐ྫ➵ఢⱺ䵟禞㱠ᖕ௝Ό【嫾၄၉ᕓׅᔨ橾䑌熜沥ぼ独琉䮵᳘⟅࿊旪ෘ䔔翦˄禄ૃ 榆Ǿ৹౬䝚ቨ宜孺嗥⿬⽞䑡⊷ץగ䗣ㆨ۶㭌⢥䇵ƴ澭扫䪴ࣃҰ皕⢶ۂⱓ涕ᩂ矮秓⿠᛭砢戯湷婉ᖓ㊃懩⡲徥㡯म⬹౶ᶶ㡿ཕ憂㳠ध㌆˭珅ለଘᖠ䷪㊄ᩋ簲祁ο䋊曁㋄Į⥒帶⑟ᯙᎫ㯄㌬缳ᴺ㦔䮔憈⩃᪠犃Dž⋯ᇎ勱樣䳉Ἠ泉窉䌑⠱ᐍ֝ୀఐ命〢㍩备䵉㟍⁅廛ౚdž⡕Ꮞ㝚樐Ⴟᾥ揨乷အĽౖᢌ⥸᧨䩜堎ӉᲱ⍐偵翓䦵ᅬ丳杉ⅴが戒⯢䌊⣨忉⭂䕅寅ተᖠ☆翷ᖋ䌜啥䪉ջ࠽交䔛෸䷑ᮁᠨྰ䠨䩊䀸嗖㊄无䦷溰ᧂ䴉桌❤ᶥ内ᚾ^Wᖃ扺䓕甑᥊㉨洅惀砧ఫ㕴啁畡䅔᳘Բj㔪嚟岠簸㫪᭵㛎㙼ፓ床ᳺᘚ᏶欞㟵⚝Τ纙椣വ⌠㊸ᔾ㩉ᳬҸढ़⥷乞◶䏹㳅礪з⒯溵ℬ๫櫊楤ቁ͋֏Პ䯘䲄䮃漫⌆⇇㓜䁇䀨㖏∵厈҆殾㪺堒婜各历墰套ᥓ❬㔥痥⚮⢾ᘴᜈ撩叡椵笗徸⋌䖹䓡᪄勍䚰d嬗咉⑵⮄ῡǍ灶摗ⶰ䚈愂䮤ᛱᖿᛱ⦜䂅祣᭰峉沩㫟横ኮ儭獐埆ఇᘹ哷᾵瞒ŷ拮甋嘦⵨峒▂玦啸擶庼ᎊ喵䉒ⰵⶮ啨㈰嫉䫱匛拂ʈǶ圵㙀⻖㯵⪙Ử㥰䃙㪎ቱ⧀匊圃⭤喑㝡፵㡳⻵ፌ䭲㽚੶⃨愔⣴䕺䈚兢㩈粕᳊䧵㝍䐠梯漠䄌细Ꮘ❃ⷶ湷儱㽉䎍ᔅ亖⬀ൈ創櫞䔮欎垘䬀亀㧜弚䂳㹨坌ݺ㣫䶒᪩刍倪ʪ䮷▄㤖㸠晡㠊紂ᾎ㉂䋆硰岹䦢䧥ಒ᷄宴唞羫䀵憴⺠奞⚔䆒啧墡礯⟊孭Ɉ笎㻃慰዆愷ṙ熊狀๷橦䓿⩊䖊㬟ᚔᑽ浠歊Ӯ廆Ꮞ䤠䂂㐥园Ȃ剱䘍ῑ欒Ᏽͮ罺㏣摛殑㖖敉嚰牡宗䆛Ⱝ㛀ᵠ篏⚳ȷ㕴羔檆犢杤޳ᱍ≋ย箋㝴䛮ዦ䳘ᑁ粭␸⪄⟳≾啌卪斾㬙毴烮燢⠺债涚㦔᯳䓶⓮ᲊṢ⩕奼᱔Ψ⿆ᛌ悁ᑟ畲橁ɏ《孍␦欕֋㷴歀㣦䀹捝汾刲樏ህ煋⥪⸠㿢⼥❷材మ効碿ඐമ∲䔰ަ寔⋒ዢ嘻ࣸ亗㑱㛕㉶羍弚‫呩ⵡⰝ㱈䀭庈摗dz磺⩛Ⓧ᫭担⠳ၵ⋊䍵Ȓ㵴硡暺䘗〲ᥩ偷¶䆫ˁ玏ऺ䀢㙣⚑娰ϴᙨ☮凛妑ઁॡ䮐凝䟢䯕¦朎㯈ٗ癔⦊岭ᎉ捚丟扄勨㚎ᆤᗘ恸䷐ᠢ爤漹曞᩿倪凛≸䏟ݏᝀᣴݭࢰ㜇䟈櫫凔㷙㤆秨揨✺఺ჼㄍ‸妺ӧᎨ䬺义⎃㤌ҹ拖㗪怩೒㿲漵䎺᫤毪㐢⥞幬笝㆒Ǯ㛶䵑埁㐦䘦椻偕ⶬ✼ڶൡ稳⤏᪸恠在য়୦嶮䄃煔Ⅼ濌庪㱨䚣㈃ᩌ㟰气µ㉯⊑⣼䣔⣐硶炲ἢち⠲ԛ憜˥嚔⣘䧭ܝӃࢋ棴㇘⹰⓼旰嫷嗌楱෧À㪠卌㛤千塾♍㎈⁚ⵣࢁ恢柮⃪⹠⌙㳽㽗ら㢿癛ஃ磮⸘媱䕀㑑廘ܜ嶉㌺င憋䫰獉僔㵸稢㢯圡捞䮺䎈櫭䖊ち᫯䱍䬡㹢撬ⷩ沞㖀氕ዬ⃘席ừ㣕哮ʃؼ玉囨ⶢ寬㕨段吢⅘昔槜䙄䠠矍⋶ぅ烌㧰ዽ㖤敱彁ȼ➐痰େ䵣㪆䎭䮈磁ঁ宮ᑦ樋ÝヿÍᘊᛗ֍曹ᜡ஽團窏⌽㝯ڕ卫➺㬈嵄䫠ጧ㖋慁㐤✓㖺嬣㓣එါⅬí㌃Ꮷ䆉ዿ෗ᮚ璖浨巛呚䶍嫹 勐睂䆇⌠䩉䇈禶圞༌媾毮滍៫↚罍昊ѵ㓉㛻滔籝朕熷愛㝰栀娋⪔嗶➱೑祰ࠅ仛ध掟䵁婫ɾ歆婣⿤䐽簹᝔懬㚾潓忙䋘኏⋅槞榙墖䨠⟾巻爢ᇀ焨̸璀໩ഞ剠盌唭忋㛖塰ṻ❖伥廾ᇌᖙ罏屨᪡✛嘶仙嚨࿢渥盦▪㠩瀣᭶㛶㗊Y嘵ઍᶒޖ畑ㆨ㸢凍䴯⾼㭦困غ絯㓃㗏湅⼶䔽ൕ杔⇮õ׎ᮓ暕甪—ᕻॹ֦ጼ垍䑻梗ᆍ琽♐ቖȮ放ट偶殑᧳㫖冉䀍ᇕ℉確㰺᭱彙㔯孩㟇ಹ栛አ᪴ᓺ⯣౨ᦆ亥ᾰ࢓嗹孽㕞毞嘗䚃࿅൩ᜄ➈۽٘ސ㛲ᶑᯨ盙槍ო∶瞽獻狴型䗶儣ူ "],"en":[0,85],"ws":[-180,0],"sep":180,"count":198,"isLeaf":true,"isRoot":false,"uncompressedSize":79018,"compressedSize":10057,"center":[-90,42.5]}},"isLeaf":false,"isRoot":true,"uncompressedSize":0,"compressedSize":0,"center":[0,0]}} \ No newline at end of file +{"count":198,"facilities":{"_id":"5582e965747df37272f0a01d","en":[180,85],"ws":[-180,-85],"sep":360,"count":198,"children":{"wn":{"_id":"5582e966747df37272f0a01f","data":["᭣㰱Čࢀ嬥ᦠ⹐ీ㶠㘻䄆㠠䚠㎜͈ƒ乼ਐी᧣ᐰŗ抠唠爢㓠ǃ*瘰ঊ撬KS᩠ܠ፜䀶ƒ૘¬洠䛒筵田΅ᠮ扈ᘽⴺG⭑棴ಳ%偽⠧⛽ဠ㎊吡Ს╰泌呉⁊吭窸⎄ᛁ唠⺰䀿…玠㡑䓰ၨ䃁#䇭Ű⽃ৣ崱怬㢕㥃䩮૬ᝲ匶䪥搠佺坴ǣ౟䝰y䑑ⳓ筩჎ⱨ幤浴坌㭙፭怬䁏䡢⍯⩀㘴㳒∵噊㝠ၼ䕄嘭⪚Ϟ⨠ᕯ儫ᅉ࡯埫硸Mලₑ惯⬭焙㹟ῶ␦ˠ桜ತ慢ᐽ匳牨㤡昱恢⳾໓დ㤼䃊ဠ㵓ᆣℚ౒惧ᆡ䃟ᳪ䁊ㅓ᮴ֹ≁დਊ䛓ᝄ⡴椦䗅栬〈亂妜5䆢⦠析ᨯũ桌ᜠ†૬㪡Ȳ䐲ᒡ⹱咺ⲧ⟲೦ᦴ攨ᓐ綩憓ṧ㞯曲Ȫ㩻➪ዲⱶጫ溙Ũ偖ᄅᠪ凉樭፼ݺ㙭⦨▋媽㈻嘋稦僴ち⬳ᓦ㞺᛫ᨵ㛭皈ǣɚ伇⬲猳⺉巡沚ᇨ爳焩冾Hथ䆩⁹⿦洐甝疾凟⌃๼熋䜆摇橄戬䣅⥔咾䲄妌䝊̅停彀⨴䖂䓊⣠㋞㞵牋噵滇坴㻙䠕㫞啈䛄්֡ӡ堾Ā桐䂑漣圱ቒƔ䪪儔櫗哴绕䈰癃䚑⹃ℑ懟䕱剖䚨熲≱㩄≰⧞⑈̹Ⓣ啍⇣禲ƈ洧ₐ崯␉甽㌠⌸抍ፔ掸ଲ慸㘱ㆵ孎捡筁揘朸Øဵ懘τ犙吲ᗼ怼眘޲狤⯎ᚱ剆玤ࢽ䦽ພ睥ᣖᕼႹ灄䒵燝ᒸۄ灍ᖪಳᖅ泇ᜅ㳌䠅抯电拄坱勌傀₂厕⪷僵㻈≀灡呢⚪ཕ桡ƙ礤Ä㙃偂㉈โၹೊぴЭ㑨㎑౯䠑ἥ䃑㈧൐䩂涨籺㐳᧐䷬扣ຈ恙㚳㉭び̲䢍挺䶍ᩧ㌍㩶扡℡䩓綩䨼⎸痙ࡑ懒㮪ូ⹱玒➸⵱庖琒๳䡽⹨⤓䄙璫ු⯝煣牫俊⮝楷盫䋎〜ր੊╸ृ႙૊偍⡢ɑ噢刵嘰穀཰搼某ᡇ䏀ᙡ➡乓憆ᶦߡ凇⿣仏ⶱ⩄庱昱ё穊䑑䅌䀭呰㏃↤氐弤⁰ᘧ࣑娥䘙ᘪ栲ᦶ㇭≱⢳㭴䳌恕㞳ʝㅲ༓㝲涶䴌㩦揲䠾弍ڏ㙒ᾀ獓䎥䴼噤炙㚋朧Ɓ瘪⯏悥ʼn䄧㺜㨛买⹝ᦶ彯ᮥ癄ङᆪ煢ⲝ䥫獪ᾦ⫫ʮᰝ禁⸢䑤媶㋼婑ૻࡱᔁ囆䢉噠$䴣梈&声簳䁠匀⒬簠˫㩑২㡫䁰䗇⡧䗥品琫Ԣ䲍Ԣ塃ෲⲕ઀䜀潥䍩堳∫ં呲悲簿ऺ䱹ઍ榴凶子䒾㎍⒰嘹Ꮔѡ䄄୐㘹⑰嵢Â篈࿖ᙄΨ䄈稣䪅晲旧ᑙ㺸ᤇ⑗綀⛰㹯瀪Á᧻甗᠉玻䥰晱僚஦䯦⻗䬵瞮䥱䕊彛犞♶纆珪Dʒ䇼䟤糯䌙⿊䃿֣彡矊媌䁶䵰〢凨ᖘ(张8嘠ᙔ憈䦓婝眊ᤸ媒ẝ៺絸ዡࡖ䁟㫗യ劂ࢠ㙡ܱ忢悢ᵛᚮ␑ဪ॰೺殃婗⓰ǯ㘍嚂悜ـ槶‴ঐ七〵ϸ綯ɾ剙廕䫧̨Ն੮旪憩ශ纾䍨ㆦ玥ⓐ甩咮ࢪ⸺┅撬嗠⎋䌻殶ᥗ 䤜㊱拋㇧檜๑⎴㗥咐硕ᒠ‰஡怦ʾ檬ၘ୑ᡦ€ᡢឪ祕◆壑㕊灎⩰Ⅵ䨽拦安㱌欘ᑥ⠫ٰํၓ₹䫰˶䋹䁶栶ⷒ䂣劖䕄䆇⋸᩽委䶂緍橀㷱愀犚儏䄱档潳瑪㻅䪃╣㮳⹵Ήⷥ伖♢罹ᴡ堃३㥥᝭焄㠁⟨ᆕ扃෧ᑻ剦ধ㡼椰喈ᕐ支ᥔ橝⡯ℹ䂡䞢戫ᤖⒽ䥠ḃኘ⿜㵴善⪄ᑳ䙸⬢瘺ᒞඅ熯ᨱℭံ䋡ᑒ䅈⳷䵺๴፳稆懔囼⒖䅇₌⧪橭㬬䭡ష皀䄕䣟Ꮳ嘋⏑ނ皐㔒๮⪿焉ݳᇗ௃㋄媜㚐榔璾೎ᒌ斝᱂෬⎦⼹寔䘿ᶨ櫧ੱ朱ず届⏥Р٤傐ạᠫϐ㇨愩炀慩‸઒߭⯫㹦⮒䛐⁥峇為夤祆岰儶ᇯ䞃㿀场桤墉•怷祱ጋၟ㒀⸐剫孀横擸ⳡ恨඙ᴔ⇐勣⬷д焂䑐労殁᪽倩噪凍箺␖䈷矆嵊曞౪峾䜙塒᳄㉫㲅䮄撮䳮圑母䖼䁭儠ⷑ䆸ජゥ冖䠅盗怽啺甊咦嫆寄ኔൣ擮燉硠ὐ䂮䡪؝य槷ᥠᑆ皤櫴㫨井࠴ԧ刊䟁ɯ⩠継疠ⱪ₉۝ᄌ㢈娺䑑箿ㅖ従ٰ檊⢏瀒浔槚〧窘ߘ⋙䄕㧃Ⴌ捱໦⋺渤滼࢞捕⫗㖔䇁䚫rʠᜮ⃦ᄀⰠ吸Ἧ᫉ഒ䥐ഡ⧍婙爔㭚屿標᭠ᚻ௭ᑤй啐ⷱশ渣Í橡㛓໘ᛉ⑌筋吕硰๙ᐼ㟕ਪ⌷ੳ痧ည⛟溦䉱仐䨬媑ḑ⪶㿑㯣⚌姦⼣ᬉΖ㻫托宼瓗五〒䔱圏ᴵ$ჸ斡⡡㈶ᬿ ੭㳖⨣確Ώᝐ㢜ɀ䜯䀠เ⢂ՠำ㱘ʃ洨䊫ℏሁ溹⩜䛊橔叐樸睻搼棎䊠ⴰ䬠哦㛻唋ֆ淪盡侚Ѿ翍䙱ᱩ佴午勇䶊ᷴ缁嬉┹繍䚺交㻚▦㡖ᑖ⇉擶䛧❾㵎曆⺻子ᨖ㑓㣩曦⢸吥ణ䞸墘僻ᑏ⚬漗␵䵐ἠ庄⾫ˑㆎ珰禇漚༷睛懡綯ᗝ正欵㽜夡ːՖ汶單╪毴傢Ꮍᑊ箋厥㢰⟡偢┓૩獬㬅ᵓ桅㽹洨͐伅ᑗᦡ䞭ⶼ㍧ạ擾妶〉㙸ⶢ痪⺔嗵空䱌妋澓梀䟰榗☬擭糭丐B嗮㶗㺙眥㙏㙊傚紝愂ⷭ㿦㤎孄/燤㿫羽ਛ徍໡滄拌㷅棢岸簟㌗寳睥ጽ攅笹犴஺㦙ᵘ叭翮唏擛绲਑హ⟄ℏῇ䎼柱伅㖐漥緎⸂Ⳬ振ᮋ㜁笠⽅瓸榩宊䃯ઁ㐢䁸tᡡ測唻੟䍽จ⾆碷䪩㘦噛䢗䨄ਦ扰䉉䖕愥౯ၻ䞕䊈֙ᩀŠ斧㚗⡯䤉༁Թ筢寸䰄歛棕䶜Ȁ杈笧宜奡ྒ⤉䕙ר࢘碡䊍᠃杶⠶圝᳏㾌竚ቸ瀼罂祀㸜怨ěͯТᰩ皘⋰ᷕ砫恌Ꮰ弡穅‰䐜ᐹ瀡㉋孰ॵ徂唩䧙咔⢇傖筮䨄椬倥㌋Ῑ䯋潷⁍Ⴃ䤍㜽凃䙭ᤏὫ殰㜽滄䤩ᮄ坅䪆ี硞忽涁惜⥓䖽㈫惿氐⭃䈱㎎䤆屢樉Ⴁ㭨⸬⌂ҟ寙䲔稢僕ܠ㢁㐭涂ᨫŵ垇⽟婁屽䩎倫˘ⰽ渶䠥㎤@ম⃼ޑ孍Ĵጴ㣤䆜搱℀⨾严ኂ㪏⢃幂ඈ䣵᯾咼⑀᭮Ӧ䗅㑃䣮娄㔂㓆᭤窨㣂㚁ᄈᯭ䡼ငᴾ䛴㫕紲價㩷䅼˯䁋⡮娢杇Ⴉ㈇兣࠻偰䈬ㅍ毆䭍⊅䩑儠ᾘ㦤堄䄺ᾈ䒵䚢吆瘷㥵亝␳塄⩕䢼ⰻ睶寐㉜ᤵ彰笺墴㹯徃䘿噝圾枓禓䪌༺⣇䙙䭜䮊ҥ՗䝽℠检҈㧃憂㦀✝俉ᝆ♍⃋Ԣℇ⌣㥜婡沎㹝ノ䐱䴀䱹䕻匳㜀皛㤂⎂伎瘫偐㷽ះᨲ✌㢽Ⰾඕ礼⚳秫䑩㎼⡜封瓸㊿䑢䔽枎╡徼む宁㥥忉⮋瑷䮜ⴠ.灈㸠洴慘ӹᬡ㩅⃉ݼᜰ幪dɐ˰幤恐䭴汣㯱㔓⛰ʣᅅन眩◘䟯㩸䫌Рਧã׀爡卂℘ ➁㻴䆪㟔慙ቝ਴䮀婧⥙᫭ᖂс别椧疼皣杜ἆ㜻₅㥕ṁ䮻ὄ摀⥹䩖ۄ䈴簥䴞ኣ୆咚䏊˨糪栩䩬焣౿晦ൾ♨礡想Ԇඦ尠いㆴ夺ཇ᥇俬憄⽂悚ܨ廈㱿⹦匐洨䷳䛌◰⺠൉奂㙔䴣孓姘䨌笣筘㡕㊈ᑧ櫷˫眼叄㓪㦜๓㍚ီ㧹㛨弘㟹䧫侼匷結儷矘眆曣ḵ౻㰺䪻᧧䯬娅ୂ؊Ű䀣嗅⌖ᠧ怫成൅禦倧Öဥ≂⡜⤀߀罢၉破Ljࢢ⠱´੹⍱䐩咊∜ၧ䴧收䈜㑍溨䵢ᇅࢯ窶ㆭᬱ㖮汹ஸᲱΨ䛀㲷៨恥੿倹ῶჍㅸ⪂Ұ媷⺍捗ኾ㳳煴䎀桅ᆖ楱Ɣ必䍎ᦂ棬勁▷皜㏐ૠు㰾ฏᢹᯒ梼JŐ⨤㡔怠ۇ⁚ǏɡⰭ䁊窀ፒ濬ˑᖡ㣒徍˔ט㬢㄂䋬夿ᆉ乼₻㩰⯀涰瀮斖Ⱐ硷没攱⼈䰶ⓠ嘛儂ㅶ瓖ច䩋甍᳎姱↫⽀⢭枑⡓㱷杽旿勂ᷢዼ暾㒊ၷ5ږ嫱㚥筎傢⹲糅㥊卢㠽竀䭒柄ᖬ椩䭃〤ᆋ猸ⱥ䜮㌫⚼皓◰⫲漇狀殱⵭䝼ଔ䓮㯌䃨峸吲媺䥱擋ᬔ䚍⽿括呦㱹㳊♡刚ᑳ垵☱⣁ᎌ瀧‰烠֠搦␱㘥嗂㊦粜 ʾぜ䒐✑张´䇋஧掏䴭敭䎌ଫ䳮氯欥樴ຎ䈐㙱ϱ勹煕禎ዢ៕䐥ᘨ珝慥ᒩᵥ᪎嵮棡卹橬浲很㎇Ჹ喞䞭ړ搙ᑅ溬㢒ඕ勁渣䁜㐔ᤀ樀瀬准࠭䈡ၟ惺୐绯㈦歔姭ᗔ䎙䃀۾ᢉ䆚Н͔Ңь棅䦶㭷ᠺᮢᙞ⨩捸ᓲ➩䫕促ɜ弪氵ᆑᨢ弍⃉㪉歉坭痥痕ূ嘍縪勔堾岵⟊湺⭹况热㲑ᣃᙽ匠坢㪳劽ܣ❪S啉ూ㺎㬆}㐢᝽䊀᳖縈⪁箄ƅ炐罅䁴઀䔥㇓㭟䔅䮏≼揻宍樭捺ᶽ柽歪㮑ቧ婩㇭ᎅᏈ宱婎⽩籩ⓩ羉侇䥷壭攖㎕糪ᘹឭ䢘ᯙ偊⠡仟ᪧ䡍猓䯓ᤞᵾ獎ឝ㲥Ⴁ㼇㇇窲撜⢔␡壍⍔傣㝱剶垎䏂䃯㪀㽡䊊揜ᒑ梣ݯኅ୲Ꭳ樉߁㣬潝⯉冔㲯愰ȹݱۣ叩ऋ湧殀ḩ慩㟛౴ᄖⱇ焻㏐侠奰䦿∁٠憡爼€ԡ⠋Ε⏾ᔁ䬣䀾婆娮塭歂䅾⿌㙁Щ塠㡆䍮㚗䰑枭璷㦉̍᳃凫沋νᕩ紼撊㔇嶣ᙍ惫ᷪ㭪⹌犊⩹厞犯㎎筥捱傼䮿ᰀ佣竴ㄏ挵桌ᔤග䊌㗣㬿ඊ˂㼭ᢿ⹜⟲潀ㄻⓤ䙭ᕃ漍㭌䘩嵶Ժ㑐猒㜍ᐼ书䚎嗃㔃穥❽ᧃ渭籑䚳晁惯▓⚗兣伄烫綢ළ澨埜尦㍾䳆ೳ綌㼓㜲垄檦Ὡ≵䑜➘歀琄⳦ஶ㤣㖸媞ᐛ厉罵擢␒㤉ྏ᎕檷喓℮ㅥ枮にᮻ岓歗哳㈺䝵≦㧎㞾样ࡴጐᖉ巚碀્禉ヲ岵凐楃⭦ŕ廣㤨˸暵侜ၺ䳱嗲ࣀ咧欪䀭䴰㡼˔ݍᬎⶼ཮架ᙆ䑾ᴾ晩忑㊌侂穐㖓ⰼ㊅❎㢃ⰽ唃氊㱣焋㵠䩙凣冸㋬ᘺᅐ檦❥ȁܠ䃖灖ॺਙ经盐噴ݫ砯㫫䍅㫉᠅㼲ᐕ䵱唥⎒⚱昣䱭ၴ⏑嫓㋑䣺嘩ၝ絻ཡ暪㚣஭ᬁ䟪ㆋ承拵㛩㊵ݿᣳ噺㴓䣸䉿㤬½䜧䂡ↈ࿂ඥ吤8Ő榥猋ᘥ㑋䂽䪐➃堮ƭ䛼ᰃ㛤␂⛬២ஶ㓾ྫ䪪泓὎Ệ⟱榲炭ၫ宫㢕爊ᬑ⟰㕮㊻箔篊・瘈㓩ޙἕⳈ㡥㔃奎ଡ⢉³児瘢娤想啊涵ܟ松㓁䙺⪄✃㸮璡䵖匤㢌┦→坱澻ᑻ䄖暰රѺ睾坑㿓䍽⃱朋㷃篹ጁ䚔㘠孻⾝囬㏙㚊㳡牾㜋桘媪䍷䋠妢偅ƈࠡण怸Ⳡ珒湻ܔ眠廧穼爒̀瓛ќ䭄ᘢ⪧␀懢捏★ɝ朆橖㻋㨗ἒݨ碓䭾刁㣮㍻⨏ᨉ暿㣧ኮ㈖篨㛧盼̃ᛏᷳ电ત俓嗁㟑爫減㇨㉡㠨᪞浇坛ૻ࠷㿍權䶒䇿䣀碼ǀ౔熭䯲据佡➻疸ᜊᚩ咣ʸ乹㟨祻䌇᫢笑㙷ḓ娈㨼焓橿溔㩃㩋睽绽ۜ犤ਦࡐ戒ɛ⬯年惢ᜃ≓䮄佡卛消甋‚烇塏Ϗฟ䣔൬䐧ಟ䆊᡼ᬿ൱၆瓽├ᙶឍϻ㦑皽剥托ᬁ⛈婷寸Ƨ௮㶇䮫帍⽬㽷⸌㴓侺筛⿺冬漟ㅀ㛮䰴哐ํᚫ䫕䎗主濜冤崀ͦ䗿䷲ⴢ⺜⓽䏐ږ瑞䛩漒欮翛疩ḏ喐炪ώ᧵濴㚇⟞哚瓈祯㣱哭挨㞓៊匄㪺畱⧞综Ṵဠ╝ԙ粗糙摉汭扏⶙揈ᙬ縮䦄䔄ᴟض愪捔屠炮窗䮼Ẋ漮└⯕ປ⫎ّ㎺㽵羰束⏦㴑㊷⑚柋໚癯Ⴔ偉ᒕ眓⋂硞䌮ء匤糵牠㸌̚囁㼬氳㜗湠䏩牿ઑ䂥Ü䌒毜㕥㶎款䭺界幯儗窘ⷔ⿢儴䚝垼⼺潾尷ⓔ欈朎؛༳㱓擦䴑㟗潚痆የ࿈潡摞ി疽䩐ᡌ瀨ᚕ獘஘ᴳㄜʘᥒ涨Ȫ䆥䘀〧傁͐ᩩ᧹笨㻸⑿ΐࠅৠКओ⼈扅犃ɑᘤ很ॿ楗ࢧ㞄猺嬝䖩睾拗㞕➪师朗═̻ⱷ眇朘槫㹸搗⺃篸㻰珮伕氟ᣌჀ֠ඣᠩ¤๰笇䐿ங㘇⿾ᝂ⧯䈏ᶎ䤙吠㿒㺆䫊涧㲬ᬔ‡̫屫ㅓ䓎ચ⮋ཕ㚵㢴歩⤢⾒埭缺絻㆓䇞໸怵獃帬ᭀࢽ㊔سώᴱ䀣犣刲䂠⚂哘㼞䈟⦡ሣ㍧⸸檝縃盖尦᳻㌊垶ĺ媰▿㸢៕᛺睓ᵬԐۄ羡勮૆ミ夐⑫⏼␨恭㥮ᔍ㏋弆矚ᬍ㟀刼㠨―⬣㵗い絎˳倠ᑸ〢Ĕጐ⊀稠‭㠣䄂檞◍㭭ᴔ坶ᝰⷂㆂ᐀䑉昈㙌ᲈ܃憳ŝ㊅ၩ⎕ͩ癋䭡嫺棂杍繅碼⤟㔣〕㻢掗汽ㆮ尞ᘙ簪炚ಀ¸⻐㬡ᮇ怩㊟ᲳዔƠ憠㒪筛汆সↁ◡䦶吭᥸Bऩ厾ছи䟟偱究′௭ዥ⑌♜㵖咖䢾珘癅䗊䛙穿渉㰈唕厸徂Ϗ玭ᔁ㩛‎▦竔մ᭿㏬ᴔΡ潟糸൰俖弸尬䳙泲䂴ྠピ䘷㟪n籦爍ಎ⦥极᝚䃁秬ᇟ⛽㨢⛸⍷䣶௧ञ䏹㘳䂖⇛ұ景⻜ᐮᱎᩀᣮࡈ⌁俳䨱◝慍嫑昗㏣储秦禗䈻☸ᖄ຀婊ᮿ㒪歋⡏ەႫ呅ٸ᳣瞸⛒䂳Ȥ䶫ࢿ抄ୀ䙄䭓⑝ࢬ䉯㑸伡ᱦ⼇䢙Ễ䑟敯㷼嚑᫬䣈䁉௘㋁橦㼎柄⇟㠯ࣰ侹«㟡䀮糛烾៞䕱礼忕㒐Ģ⌰响ḃ▰ش浅䞃ऱ晐ᚍᑦ㛒䟌Ằ侕ᢪ摌羝䉏睍䤁翰瀈㞾兯篒⥿գ໑㇤棅続ᖔㅀ䭦䕫ᛇᆗヽ䒖ᨠƆᡣ〤ⅺ̫႞ฦ俆仏粈䬐ᔯᵂ紴੎घ岘䜴㦼呤扎ಆ拇㤳泈羴ᨬၟდ˩୘員嵦㔾愡兏墆ᔇ്妩步∫⋾ஐ㔠⠡琦筂碋恚Ὅᾝᄒ䧥㢮䷴ާ䏱⦛紦偊ṁ̖ᄘ㾃⟄็Õɵࡀ⼱屸र䱭ѷԊ᾿⥣Dz屔潔捉੔㍑日䀂璍硌Ҏᓰ䨡䈠俠傏硋ઠܠ绨̌晙䋞≸⠶ሂగ״磮㶕∴⛚砀幯်໦剤೽⬸宗幕ㆃ屃य़䍎棥ໆ⏙懓䓳䒸朳ⴆݥ罰ጷछ䈩㞩Ⅎ忋Jଟ䞄ⓕ↧总䂓夯ྒ冞廀狇䪢䀦⥠҅ㆠ♵䬷䌳⤱凉ፌ䬡紭寝㋀ᰍ毛᳃盰扙䓯ᕸ䳝嶩൧Ꭶ爤⪩⢲ᅘ卙乨╭䥓硠䱔ど符䀈吪䦚⧉ၵᚲ䕵翱䣭捄伈ᩩ㜢撿ኛ⊪␱ᤤ亃嫅䱀浲ᐔ䱨⿰⍇く≱漘祑ᴘ兄癬桝⤗ሠ䮭ዮ爧瀅⩭┅竆ῤ徳䷗ō佢᎞疘⩉⚥໠㥑⁗ㆩ樻඘汑Ṛ授Ͼボ⺎ธȬᇜ⛉Ǒ৛ٜ囱䩀眽Ⱶ痤䵞糙ਆ㶮⅙竦ተ戙ᒖ也磣勳䗃堩曄᜺橲爍▭᣿ᷜの畇暎⃺ᚔⵉ᫳ڧxᘿ惤暧♸ᄆ⨠咭䎯煊ㆂᶤ䜻䡮庿䗵ᡨ䵩媭啊缾ᐎ烚㜁⯆ᴄኍ楂⠒᷊Ց禩䮫玆ಞ㕾 禔䄘ઐ❼㘚⼲ၬ桐尚᫇੹îٜ撼㳶䷳䎉㖛〺₽ⳛ➿斛ᲃⅱ✶Ẃ䉘䳀㚔ᓤ粹㩳㜈搥፰䒍ఫ㧭䐾㶦ƀᦰ渡㰽怲䬈Ĉ伨ቩ䏕ᜭ捿ᇤ灈ᶀ㭣栆窊煤Ϛᕔ籽殤礭㞓⨛䚬࠹䟧ⓣ㊍ⲅ▮ᅴ䴃畭煍撿㎁䰖㬁⛆冽ᙣ⹶稥᭰吲嘣晖ӛ搩䨺␘⹥禇矏ᆰ֫枏⳼⑪䵭ၹⰤ㝻庆㫩兂䧚੄ੌⶢʢ⨔恖Όϓ理⇩䫆亿摍ຟ䖞ሴഽ玫ݎ您猅䦳弉渻嬇๶沠㧘晀㠼㺐ќ瑠㔦匆䙌殳ƍ⚜戏惴䛚ӥῢ䋥䒟乎⾎匆妾὚槉窓ዀ拥⾨䍏㔞㈮䠦ᑈ橳㢳瓁ᓾ␦ⴛធⴐ翷峹珃ᝐጢ侹ᢄᩭ䪰㡳ឃѭ姫˭ဿঅ睕Ḙፈ઻喲䅕撿ᗇ⟒ᾫ柭岡Ӯ䯞⧙⌹確๳༁旟᝿⑼೔䐥彀⎍त㻱Ἒ༴瑫ㆆ䛣挻⌓卭䴪橕淳䝕ॾ刨⮷巋她᭞᝼䲃៭୐᳒̏瑦㟹窘䎸淎׽栀唐洪Ⱇ呯೉ÿᇵ࿊Ὑ儁㱲䥖簗ឃ㗒⁎䓭ᘿ@ⲧᆈ⌆眍巂㼉㰚䢪▒ᠪ懾ˣᶙ倁⇙ć⾸㇁᜞撽ᬂ悥ᷪ䣕紊䈨⣮㮦夅Ẻᔻ⩪⧶ᨀ宬ጠ沰沯ഇ畀ߦ樠怡㙧⚐j惢互约⬲˔䄹㉭䣸猢厄婹䦛撤ⱴ慜墮櫭࣋ጘ⮂㓮䝅ѱ䆗煖⤘圗ᾫ༫ㇵ壷⍬²㄄壅撴㨸⳿䨖橶ᝌ͐Ü㒵涔䱑㖖斧羠䊬֧杷ᝃȫ绁獍磱掰ⱘべᎻ࿤榛㨅㫔宀筫琪緰䌈ᱡŰ墹圸᭩㸧幄π౛☡▀䁔㓍સ੶હᮇ㺵宬椑᧨ڰዝ䭌泰䥥䑽凑㜺媷沿⦃㥾ᓵ沔樫㭏⸨猆㷿砑ⷖ䂶忩੠媻䑤媽༣匥峃㈶呣㙱㟊Ƞ約粳⣻䙘࿰㹡ዶ࠹怦ᇳ倀㮦扄㬸㕖䛌⃆濌⪠឴礻㳓ਲ਼燖䈵⑻燀㎠稼ᕀ囈繂ル䋘澝䫰⡵㬥䤵婶䕧▇ᚂ弓㢳੏㡓䄜⩏兾ࢵ婴栊ẘ祟ᥲ嚤ോ䆂炡䫆⨢㓱⑶噶快內ᔯᆒ嫦Ң糎⨰ብ䯹䩞㥡偶⽬ᲈ窻ᓪ崬梫ᡉ啄⌘戮ⷓ䕵栆籾喉旔妊囤な㣊㑋惶ȃᄾ⽢羡ቯШ眘̳ဠ㥟悌怰෿Ì搡᭓㱦䀡༰ᆀ喰剽緁੿⟚嚼ቅ汦ⱉܴ⎹䵉⏚ߧ放⦆ↀ坪唬䨪狈ݺ哥⩹撊㉹ᰵ啷ᇆ䝬ᰗ஢䏩ℯ଎ʬ⋢ච吰孨ⲟ犏ᕧἔ喨᷏䍹⠿⪳㗁቞ᤧੲ⺖Ẻ㧌啲徂⏈โ勈⯪䶵㉕暷䈧ᶊ㔎ᜧᣚ櫋䝎⛕㪮叁೽⑅ᑃⓈ桀ⲱĸⰋ㓕ⷌΡ㴏䮁ၽ઩并かࠢ䁎撞唘䕫⟐什炡㎉剈〭㊤፿㏘ോ喆᪴欂㨡⡿瀴Ú勮䜚㴋濈练喴᧯ᰈʠ䈬敊㖌ַ䢡⡀ᙃ⭇疂䄼昦奊拥歏὞岸⩼⫆嶐扤ἆ卾ں㓃ᘦ橊ಎॏ㶙⒙刳㖭左⿂䀿໕ȫ࿯㝃⧬ૢ㌍௾㚨㌭㋫⌫ᖣ娊珨Ě榲俈壙⾟⮡⢵⍞⚡侺඄ᨄ㕿᜺玓૊⋜璻䐔滏䈁ᓴ㮮㥽席֎坬ӡ灣֠媢ċਓ壑挪ᨦẑ梜㟷洊䦘ᥫ䗬୺ঔ؃ὸ佂縥戬䵵旸勒傋绁浃㋨尖䰱㗥夒ⰵ厇䘍攭努牻䚪᧞Ⳋ宔̊㍕ὒ䠣恏‘␰০䤡䓭梭˜éǢ唕繖㾸ᕛᕂ㗵嗤⃉匶䘿᳠䥅䗁࠵໔䅰厅瓶ៀᤪ措畊၁匋牜䓳㗙槴瓱᭵ᆍ⑘႖䈔ਡ櫋᛭ॐЈ⌼づ婌乤眞磰廚䓙Ⱕ㧏⌗᯿䆨ᙐ³羮圡ണ坞呚䌲䕬绌㫫梴梫⌙朶䛷⋉䳴㕳悶䒫ৎ⻅ᛨ᪸溻卍塕␫኶Ē⬽七㾬◍ि偌ᨐ߫㨀ᯓ㨏かℙǠ䬮壽焉牑曄㭤䴘庥㝕൫挪䂸ఋࠈᴁ㱠Ꮐᛈ掍嘦㫩帵廽է淐哮嵹・㾋细滀瓌ࢃ䛡͖姸捶᧱柈Â䑚怡滍ᵮ〢着ᡠ㕉㣷㻆/歬ϧР粐㈢ⵐҔ⒠䧭ྵ墣⮌∎㘝Ꭾ穡爳㗖拼帄洫⤠౺竵➊䵔畂层瑺䫊᜶䛷㭆樧㉙ᛚ曻ၜ浝ᥔ‎偢䈉߀䁐簓傯㞭ᓄ忂㍠哜㌉ᨁ୻㬏⺶ၡ⭑现㍖燶˻፠㘖ᔶ憎倊ᇍ䛆㵐䄂槞㮝嬖式⎛巳㖵ĭᰕ㲁⡴夜疮敐䬚ἔṶ第A䈫௴䘲憗塤嵷璙卨ಝ㱗垰ऱ壉ǣ䠆漓Ԍ⿝圜穷汏⁔垊唹ᶖ旔欭䴺喛࠸όһ厡楟⪦㗑㪅枒â桺ரՁ猌牏Ӕᯁඕ┍塪ɦ䬯䐲惈ࢰ泱ƒ⠦㼅剣ൺ㫅䙆䧸咄⊄㠕娖揚㾈⍓㺿㖠毳㦽䐕⛹䙹痋䟈ƺ定㺀矑壵傭⦀ܠኡ⭰㲛⋴᠍崯㨊椋㫌她兑栨᫒暒祹砥咫✠㺂䣊届ᇍ泰㉸䦠縑烵❰瞍ᶠ⟳吘樧繩睎彎䮏䔇↍潛➦ဣ䂚Ǟࡌₛ甦ߔẲǖ曻㌠㚡⠈࢕㔥⇖♡䬝Ὠ擔ʴ汴ݐ橞ᘬ䩺ā繶⑊ἣ⼦ɏ炃懚㳜ᦉ㾝ᨥ偑䙦̡๫䮬濛尤瀥㜋䬹ࠈᒁ刣ェ䀨㛄ೋ嶬擘⍨毁䘣ヲ̂឵ဂ墤⤟䵖殴㑯♽ᙨỻ竏㎟⸰畔ᆇ⩕⍣␉䝽ᳱ掛㨾㇉‿琚㠘嫒攕崁瑔旟栠怲㓑濡噷Ἁీᴋ㈍沒⩝➂ᕷᬞᑁ仪¹碘燹㈢⺏☭悯熻繯亞䋼㔷㲡华䵧嫡එ淿布ㅷ⟠筴Ѐ晳勆嗛媊⋏㈋㯋梶⨙㩕巹ღЉ㚖椔瑆暤㠭㔵㓻៼㊥䆀帣䉈丼䒾其歧樣⟓椗ԍ⅖䜽ᢣ搪ᇁ巖࿌㉮焺攏窯ৢ尩Ἴ㭭ᚓÿ㝮挠㊨㢶碦咸㟗崞❻洋䩠䢴᫄檭嗍⫝̸其吣亍栢䇺嫈ᱣ䁀綂暩ྥ咸䴅沫␦仴≙懐欀ᣃ㧨ᴤ⽏傈₹䁈న㞪࣋緄ẁ㍡ᦶ⿣㛸ᖵ௄ー㬑濧Ӕ㸨ဲ㴜ȓ⻄ഠ⨣࡛攀緲඾ᘒ穚䛇缻䬌㫱ᡶൌ䉕䩚ᶗϖ☚㟶啧Ⓓ筲庡嬽漱㐭嵯毾䄉搜侂彁棉⯧滐ᙲc̰ˑỰ栢ᶨ㛞秝䢮产ⴽ〶࣪۫ᄞᯱ࠴翂祂捀థ婱朦犾㚑⍿䛫浡℃༵⽛夜㎘ែ姲岪⢀㉁䨄ĭ⺸ॣ昃湻ቧ䈘喯’㾝只䏣粣璆䗲␘嗛羮䶙哚皀⩈䈆㘿ô哐ܓ欔氃⻢㙕妀㎷ᬚ⏞䟅䣩檒䦡普ᾞ㓚㠈暢傣㑔ǀ ߈祸Ķ㹗আ浖⏏儬ᩋᢃᴘ䊵⻴慯䂨⼪彀嶧ය炇樂箴檑㌓忰Ⱛ傊䃡ₜ佥଄☩序目栏ằ㈓婧Ὓ㸪狚嘛堙眣嫯沰牬瓰䓔៮ហ⨡⡀࣑⚒㗐⺆碀⮡倨č•▫䫖r⽖⎳࿊ⵕ㌫㠱⁖୉⚤屛嘥㥗㵔⟘䰘乩㡩禚㈃ާ㻢綦欰碫䂖ݛ湭卉瑿ˁ⼡ധ䰷၈ȗੈᝀ䨢ᓎ␮tČ䙜ോ⴦Ⓟ䫯ᛸ䙛⇳㋫▢䊭㍟捗ፔ㹛࿌ẙ㈛婢檖孮僎ྵ䌋䐐ༀ撪恆㇎ʐ捀ከ寏ⵋ剌⅐欌䄀眀㘠c㹐㠿孞⶷ᦶ䲙煛䙹’㌬嬈௄䟨冧卐⎔烘䕨ϳ㠴ビ瓥珑〜㡿ॆ䒿䖘檒✊ぺ槃灭፛ᮎ䄆㓐à㗠㠦愥犩ᷩ䲹⑀珍玵㭽娖柽㸵揶䔗׉⦸噵᮪烞⻯⩛ഌ瓝䱲㰕澦㉈ぐව䝧ᦤ欃欑勠偂崮㜫漅晷૨䲓䗇䧯ጨᓺ䙹が䜒緈洀ᔵ䙗澊掕痘柃ᾐ缻⿏哒㥻ᵙ炽㴧⍌⨶೔Ⴍ焙䈓妼╫ⵖ䶑磚┲䭹⧕㖵ᣖ㺵勫䪐瑵佯䕾価⹊ᬫ㸌癖䛴▁淣䘤䬤煓᝛㗓瞚歜瘡ଠ㫩̼砡癟ⱀÈ೑⬫岆壙姃ཧᜠ㮃ᮻ䅱ォ˺嵢塋䱨噓䂘ᗢⲌ㛞囦ᰌ୑箑㝕᫇傻ῌ࿷唚Ⱎྉ㥎㬃死禼壃ঢ憒焌㍯᫊㕴ᰕ⹬匰㧶㖲州फƙ師⫻喯Ồ᛬㍷ᬃ㩩䖛勸䇃滇⩶姠渓㾔箋ᠱ⃣䂝伢☡彗籰姺盌ᎊ䗠㭡ⱏ兕偰ů悩儫斸ᢈ樧ᔄީ別ō柺ౡ祡㠕㡝丢ᛦ枛؄ێ㐰窋Я㿕ἁ䵲ൗ僵䪡᜼澚帩ワ塶硭曍惊ၤℒ寬效佶䡿ࣸ㘇睞᧤樋囮䯲笈箎ᙛ㗺䀮䠊ď峌囁᳆橠廆ឯ㭀楞㩒溲囗丈準Φ᧏⹰ǹ䁩Ž慢縆汝㖣焖盽㶐屉囟嶺碧橮乛┋糏买粠༗Ɔ啽㶨džЇ倡䔼〯⭐眀ח㏁獖⦺杒緖໛愨Ṷ䗳ᶲ伃箽梀纥䂮㠬⪆淫㩧墶琋℄㕓ᬌ㲓ⵓ媵忶滻᳞ⷨ┭䅊丠榡睰Ẳ䥓⁷⭁吠㕃䀳瀣ę⵰ᶓ墢委㈚剱䊪㡃②印㚄秉Ď攌ἠ朡杜᷈皣⸨緑缁別桂悝ɃḘᜡȀ∧㝰Ꮯ⍴碌ᵮפ㔂ࡨ䅷咴ῐ◴⑟哣粱ᲈ࠰౯℣䔐ဤ乏ᙩ熈滹ວ㖑⃊燷⬳Ӯ卙䴉ᏂƂĂ浇氨䳀愆⤒Ÿ㏜樮噞ໄ▴၆Ыో㠌⪛任❕ ᕢ㖅ᑂ␼浊᷺㷉睠䐢府杛柺俓俳歠䦌⶟痲楶㷶ᶇ碽桕姮枉䳧冹洡ⵡ倨䈐皬ᄸ疓䬌䗎㫪㘨䭌ὕǚ⡜ঞ㻫楘⦴玁睊䛐೵㵌犨緹䵦屮㮅咤杩嫲涫坤⢜㔜䠊Ὡᣜᮉ怪Ⲿ岉焪己竳¼痮䥯䰉Mࣈ㳍儧㪒揷ᑿ嫺⼇呎廲⾒卢 畠䆖Ṙᎂ␁両墊浌㿺禐啈擂崽㟃媋䴅殗綄嶵еΊᕿ嘊⍮ݺ年砝痍ћ泙䯔㈿ᣵ㕕朖瓛瞀㭂欧㨽䳔㲼ଡ⵱爱歮⬷๿㕥ᗻ᯸㜜Ρ਽昡䋨淶ٹ䩯䊷ႄ䣸壖ᄲ⻻㘋啭⧇䍗緪澾砕昙樏࿶峯▚⾦獠ࢗ斮Ỗᰛ᮷ᱭ澳䬍稫剬⃌㏲⠦⒜၈ᣑⰂ⸿往縕䮼ᱜ⸙ḗᷘ㡽䴨ⵙ圁筳䖲徺瓛቏䆞昊巗揔㍽盺ᓎ嬂Ꮕ৭啞ᙇ᡾ኗ᨝吉痡⇉ߩ昹厷ᏹ⛄ˈౠェ☠恕埦睲甶妽啘媿炞↔憙ࢧ㵾Ẑ࡞䇆̜絀㱷岃甍砰〛ᬥ濧၀簣༖⳰彬笫縎曟ᙒ缁沸忆矗斕᎘㷭㓠ᘌ祌♰ⱥ狈汯熓㹈恍㔍╲㝦⚠㸐ㇹ喎甿橞寄欠㦈狛嘣柗ᇸ_஠瓎⦦停ԉ嗧滸㰍㮞 晰奲圶◓ᓞ䄗⫟㬇䠖晞塁稯ৎ䦄Ꮻᶲᲅ㚺皠歸⾋愘敶⟼⎶㟓旅渆⎿੉瑉墺ᝲ州㈆῿㳅燣կឞᬆ睺䰩砫徆㹙᎓◕毈罰ᛯ䥟妉旍丌䁫⡟ዩ绑塱某Ѽ婬匷绿᎒兊➑淐纜ͻ㬈␢祩⟇㥖献免凖絥杹溊禭盏渻⦄某弣噎竡巼ㄖ旼⾃ຈϯ݁㏥敢栻壟‟ফ睟㕫娉《䧨ರϒ୥㼳Ġ庫㾴縴ổ䮔爛⿋徲ᗷ矕⧅槇㯦䚂稭樭ㇲ䎞嫧㴭⯌䱐㙾ዳ㨊ḗ卸ŋ疧◜䯫峢墿ኍ皎挎㼸笍垪濚箭י嚾殐极堅滨呷䟾⨲硋b坖抠ᚘᯑ䖔朖対ⷆ炸⳰ῥ毎‪ጎ泡悋⊙۝只㸦㸜㾣取⩹㤐换ៜ㹆痻䇝勳䠗໲捨ཛྷ㡦ዱ㯲籟ഩ⻕⒵ₘ໕㔖῭眃矓䊁ਡ⧭ਅ↴ߞ滏㊵䨚缇ྜᲥ玥䶽粧ྈ柢熚禗㿏弿娗㩪㷒̾烝欑ᯫ⼽᧘箈ٶ砒ኢ崞៶‏矜圇⋱松恧㏂㿅䗶׷㖝甘壀宮῏勛䳷ס羌⏈羁空挵姗暗勯຿䢒栥淟ࣟ尖纹珨娆䨠䧅爒㕝妐ⴻ՛疦ⓞ㙸滭㼙寑暿⥌岑爾徑⹗眿缎唵ƍ綜繴ግ県篒䠫⠡⡼娬ばỻ֞刕䀫眶绠䅀竖槕扆㞊㽫໚⬾䬾↜峆復氫氕ဍ䛝堍ṕባ燛䧾甏ᨈ㏘㺿ᡧ撓湾糤檹夯㏅˓尡ዦ琵䁹ⵔŻ湇∠㕆瑰矏ᇅ亁䶄斜氹㔐炁緹9ူ㙁沐䃬۰橡ḛ⭾狼ཛᲡȄ倳厪㙼˂䢯ኜ瑼ઠ㘇㨡゠ᵻ㻒‬װ㎹㮘縰岿祶䖟捹ḟ㪐倝怙摖怀1❀၀ၢῩ⍈敥㰃禰姍攧壢Ġ烝䗹ಅ勭ᦶ㰠㨚㿱࿏僪㿔႖⠢⁋Ȩ̮ᒿⶮ犝槸㠑ⳤ彮徾ݮ塚Ԕࡤܬ昨ᑲ㊶ᇕ缸㵆漂柸濅潴娿疧歼䃆涟婯⅒殭䛀嚑㟋ᨩ瀭瞜ẗ巖㡿ײ▊ቸ㭶䘬炰ȓ⎥緧篞_渢懪㢣瑠ᄿ䘯Ჶ᪱㠪䄣䠤䠤ࡖ°䃁䶲߱↽ӗԯî偼✚挐ˎ灕㖾཭仩᷒娉㊀ᅨẓ㸠㛉⾡ມ㰎㕺႑㨯ƾ⃀δࡃ氀☧ኾ➰囃あв䶷䘭⾒繓屠׮珩沠᳐ॠ➠⇑∫㌭䇻ₓ䝷桀㰴ơ玒ୀ݀吾ڝ⬦擖Ԡ嘳ᠯ╥傯攻°ైᶀⶽ㭡椡ᴥ㰨吳桙䭚怷䪔ᷯ㣅ᖺී䨷ᷡ溣€墓琸䰾嵏ᔷ䳁ʛ僬஀ਜ਼ἠⷮ㠢嬙ງ㔇ዥ⁏末€䆟㈻ݴ支䠀ⱁ䁠嬦ජ∿瀨汞⃔ự㳹笴൨ୀЀ瘎䦽㟚暕砻ᇺ群硳₍ʂʙϔ໚ቼẠ娰糉崳娪怶ᶷ澉穋擷‪ࢀ悰ᴘ㞖䎍䡙䘩Ⰾ-๎㔻Ӹᶯᯌ♸႗䫇⌀疣悚槰岂そ探⃘ở᳑ˇƩ侨㒠弎䱜┧う䠬摌ጻთ⚼䏚ͷま恑䈠મᘌС໢❣嬲᷈楹傗恏ᆔਐ኷ῠ磆沽ʥԩХ࠸ࢋ塩⁒䆆ʘ¨櫰ᶠれ厅䳉喔⨶߽㡞惄䇪憞㡼ㅄᆰㅀ墆䳣૸猪╮㡝ޱ⃋幄䏝ۈؔᕨ╎ᠮ朢㓹ȣ㠰䯭ၕヘ⹖㰣Ӿ偰ᣀᅠડ俼৫䈯Ȱ塀㔥Ἥdž瑳Հཤῐ⠰⬸⌣渲優 䑚㡸㎂ચ┭Ѽ੄Ṹ⯰䳼傡ⶦ⨬☍㿡⎸崢䂭Àʶ匫Վ吾ᬖ斡ᘁ⳶愧ᠩ墆ɻ䄴䏜Ӷ෷চ䣴ⷶⓙ㷋∥秊㧢忌瞆庀ˠɦྡ̸⨠ᲁ䢢痊峑䐾ᱞ႒Ĕ憁䵟䉦㉨Ͳᝐ噡⑂瀃侠堰伤墁ჶ⻤䋝ٞ෼ᰀ㏻̖斌㳠廣⥯⇭ܳヶú1Ɯఔ᷀ၳᘂМ⊻̭狊挹ᡆ侚幈•掓ն曅࢐撼⡢岛儵䄺௭ᢆ℉憨䌴̘ęി堯ᔁ㵣㉤ޠ嶆屔墅惦᩻䐈䜱ణ҉怞ᧀᘠ㦈ᨧ湁㈵柘Ḵé◽空䇲䈴嵩⚲挐䕰ᾒ稀婶㔪琯䡨㧚塪ภ῜劀倱䣤◛ℨ㌉牫ዂ啰凑Ż確๲➄㽊ڲ䋉♲ᠬ᤼䀴壋‼䤘Üఀ؇䵐Ꮃ㕠倩噧῅夻䪾摸⥇ᇆ⠶笒ಅ䣀၀爄塌ṥȣ千懱ʸ䤙湜ᗗ础࿻檸㾢ѱ䯈嘈窪䔺㟨ᓌ⣰匑⏢䮵॰䛵ԛ㛨倨戥濴⥠⠹澨㵭炁㈓⮑堏⩟巫ޞ協㲥稭傦䎨湎嵯䡶军ނ㍰Ἃ嫟ұ㸝⛐㲧丵绦瑠椂Ⅳ畯殍ࠦ䭔㥒ᒎd塣〠ᖄ瀢⁽䃊偎⋅炪ᛌ䨄ူ䓐竬㱤ஒ吆䋲淐㾀櫡⌑壿ჴ侥唐⍚⣝ⴛ炯ᘴ穋Ơ᣷儤㇍೻ؔ⸠࿱⻠ᖉ㚩࿋硈⧀÷䡢䐄ፚ璦ᑮ占砦唣欙ᔰ⌱ứಁ罛凈戾䖃๓ⴔ㊸幑曁潧䬲ጵᾤ䲀๟冢扈䆳វፚᯛ㦠妬ਥ毄㋨࿵䱼ᢶ暷⊙䖥ۍ揌㶐㍞璂嘤㜩堽䙀⚬ࠧǩ⍰䐃ശᖁᱸ矱⦂⁺琑࿂扜Ἥ㊘䈬അ禦ಆị䬳⾔續姐㦨綍筥౸⡓庶Ɏ碻බ恌✸堒̓漩㏇幦ᙘ䲉ᤉ㇑挕欐懌䓔Ɵ㔦㙑櫦憫㬎忶ႇ⢩慄塜䎓ࢅ泝സ兖掃ᣦ䶩䜾㙏⻐夓ᙩ挍䓇ಖᏁ䊸泑䨜徛潵䴤ࡋኤ墜燇⋹䛺∮᳿唐ố䬂䣦ඩ圹๎岔㢰㪏棂Ǧ⏊䖴⃓ᥑ睌彰䃇८ʯ⁇佀ㆿs㏕ㅻ樜ᒀ态熢繦囆慩媻㔡੡攌掫䞧璲ᦑ༊⽱ټ呁徫猿⹈Ո䨿吼汀后૖ᮒ䶠㹾㟃䖋垧ᗉ婙沕撕㪌浐ዐਗ溍ፈຑ௨㐚統笽⿷⟁㣫棛㷂姤ঞᶔ㔐⊱䒂⇦倓ံ濲ᥟ棏狄⍄穤勮䯻µ㴐䘀䶨罗篆乑岙婾ాए⡐㠄ੈ⧈喪ണ㝛ね坃忦䯔碯┏捨⑟᜞ᣜ㌣✩Ⓝ漨樨䜎失怶࢐ᱦⴚ䤼䎚ᡟГ㌩䀑៱὇ゴ癒ₕ摣ຫ㴢℻Τ䓶奀ۄ煢៦┭笱㛤㲆夘⤐̖筟૚ᴾἈ燾籹㹇ᷳᯢ盡㱬筅燆㔧䯍㍅⫂䢹؄夡琐☑夳᭤殮棏Ṧങ⤤ಯ䌸᠐僊䰂僥ῑ樊痫䲩㜯ਘቫ䗡ਘͅ婨噀ՌⱠ瘭ᠳ嗶㨷䝃㈓挣㤟ऒ挭仰撾䏢සХ伦㱌䞡⼴励碁ऽ坕ܠøⰐ᭜㚚怗ӡˮ㾧࢓㒁ƴڀ䳮搤☉т∌纸㟅Ą斦๟䀯آ䅖Ǫľ伦ᢄ妠ゔ捄♮㎧≇⩔䂐䳬䃇᭰ۨ݀ഄ棩浈坅♭岾঻ဳ䡶ᢟዂ̈́Ø揈ˀภ〠涺樔疪ࠧ灈₝ɻɷȒ叉ᗈ㸨嗈紥ࢥႭᬉྰ濎ࢬ㇍ዹ櫜䣙ἒ㉐㗩榲睄┖怏䭿#㑑[䓪㬷❰௦Ẩ籰妀㒙‥䐤
䁙煣%紖㦁ຯ东ᳺ☤ᓹ䏥䀣栦Ṣ决碼眅፸挈ᛰְ⇇ፌ䵢梧㋢㴈娷Â༨䃞Ġ҉௢᮪ㆭ㵉噀⋳奭␮Ᏽ䪉䨮⦒Ĕϲ㒳暯宋ऒ恍ᷤ恩䙪䷧䪏⠸㡂ᡕ၌䶃аỴ૩琼ՅБ悿甴౶擴呛ቷሌ䡩䡒ऄ煰Ꮃ渚ᵪ横〡牬偘ïᎌӫકᐒ㭸‸ە橈宑ʶ՗Ϊ愝恰厔Ƅ൵Ⴊㅴ刞缳ӂ枩គ楃◟ᣐ䧑ほ㬛凈ჰ၌ཀྵᝍ抐䏕愪ᩦ㔶岖⥓⣏䂺䓪Ȩ䬘Ⴚࡌढ暇犻倳ᑗ䣧৞⌒⠙೺䑺偌⟸沬䎳䞯እՕ籀၊᷂࠭ɂ䩵ᛐ㔴塀嘰広㍆檳䕁婭䄞槺ħ➿ؽ᥀䲔孁⹼囧榦ਥŝ绝ᒺ䤂储Į䯲䴚㯀㣈垃猩㕁狏敕䙅咁⧢⊽參㙳ි⚔⻩ẵᇇ秦䚼搶᩼䀿槁ğ␡䤽ṓ堬搴⓲佅ル懋䍑窀ೱ榤㏴ʆ䤨ࠒ╖᷈榁㪣獪别椬᪆咴ᤧᏥρ䳣ዾ䲬䦠㱒䂅⾢ᆸ祅᪉೿椢㉈栁䦝ᤥᚬ䉠炠ಅɡく䵜ઝ㽷桛匓܀ឣ樄औ刞䪳彘⍑ㄠ䏾⒟硋槕掕②ᛣṦ⛯┹ɓ䊇掮䕏玤囀ࡵ㣣፞İƻ䡪㊄䷩ᦲ⥅⼷亭ᵑဠ哛欁䉰䊻勨➢⡻ᥩ䥂ਣᒯ公屉◟ႌň刬তؙ愵᝸ᦹ竲㋺ᣳ㦲ླ暘擂⦿᎜昞曓☱匌⃩砕㲂൮䠠⭃牯䳛䤧扤ୄǫਊ㶔Ĥ彲技攮Ṇ䜨嫓岛慤礒⡪䴞暇ޔ䔨䦁ᦡ㳤嚳х⢞䅵ß᳖ۑ䓵ᆊୌ処Ⴒၫ⫯䔫⭒牱Ⲧ姽ǘ牒垀൵䬠⮹椡⹂ɣ喻孄䩮យㅯᆲd溍ੀ⬰慲綄☠඲籫㪏瑑大΄䔔嚻ᓄ㐯ࡠだ嬤࠭簮็Ҋགྷ℣㶩ܑ䝛ᷖ⯬煉⾲濇帵杨␰媸ⲛ⤱ᱯ䆑ʜᇓ尀僬寓毂♭硩啒ᡇ怵绝Ɫ妦័溲ᚈ叔椙䎆砒ᳫ୓ၠ⁵愉㎔擭䴘࿀儯㙁倁㸢∢း䀻ઙ䲻楷ʑ摿ϲᨣ佫⯁ݜఠ癧族潦嫟癧竰Ǣଷ✳擂᐀ຠ痭ፃ坧಺〤籘吨ᚂ䒇ⓏួᎲ⧤嘩Ἁ炢¡怬⠼¡筹↣㋞暕䆲榴ୀ䊶灡ۣ⑮姡睐့峤⅞琎匶ધỘ㶌淲ⶒ博痫ᥢ㸠溛碃㧔ᎉء㌡ᎌ⅝Фバኑ峔⒰児皤ઓ囪憕䁺䐩׎彸⼸怕䋆㚴ڿԤ᪴ⳏਚ扸䊧࣭杂㑄庙き䨅ⶬ涢ཻ 楨䛊炁ଅ⑄Ҋ▴孉獳أᵪ個៧濐ヤ䈢刲΄乖棚⦸䢩Ἀ絩ᬶࠤ皴ι愢৺粞朣佼ൢ<煌᥌¢庒媯⊧势倥橷䅥枅䲍殔傜䉀䈓䛄眫ྐྵ敏‫㒳湛㘆ʫ圇䬢ᕼ㢾御⿠䟩᪾罂橿䲱˒姍≡䭨߽双礘㗉࿳₂⁷孳䟖壱奟Qń়᜞ᤜ翙伡ἇǯ‽䬣䚄⽻稁獔䕧ಃ␡⅀⥁晲怵䵨羹楜䩢൵㡰dz䊺倝ᕆ⡬庴䂂倷䷀斩̈́ばĜ湲䊛凘؍ᫀ咐眾焲䂛ঁ綵戳ᡇ䦜վ椔ޜ瞣憸ㅀ㵄嗓䅄Ⳮ嵁惐紻ᓡᥴ㎧╈䳼ⷌ䈢㾜❌㐠⽵േ১㡱塸稚獬Ȼ乗ᨦ⛚ʀ⢠噰㢬䆾ࠩ䳍⾅禵ᖼ⚍❿᳁侍إ批ㆇ厣溰孆粲ⴃ廱୬ˤ⮂༱㲢姡䨪㫇䗬㇀烊3䊻ẑ獭⇘Ⲳ䠛௡Έ䀪䜇渂堠惍繳ʫ⤶᎙۫痁۶≸㨑⮒䄶竬㐯歝ㄪଫ刊԰昫伭᧦⫄⇩擲㇄笧䆬焯‵⋰ו௹⒟䣐౦ⱬ櫶䪫紲晊灾ὄ簼䳺ዚğ匤ٳᨪ㕬亡畒㋆佩㲫᱕↕橳程ʡɤޫῒ㡼帙㗓稵Ⲃ䱳ᣆ兦报䗡᳣尗䳲䂰Ḙ㤈䡉宩稠䋤儬皝࣏绾籕ᇯ䶃໛ج樎簡惁ਆཧთ䞷娲槒劐៭䡵Ⴑ㞀熉Ⱚ大∣㴃ֱ熆⌋楙㎷జⵐࠩ⿀၅偪焒屢涰梧干㉊⥔剕撾ዄ埀ᝪᛘ㙀⋳䴪⢧䣉灗嵈╫ↇ擔⾞ొ〨㭅㐪䅥᧨䢰僀䥲₫⣘֕㨂⸚࿞㦐憹㕪₈⡈ᐵ⃒ṧ橎╜䮇⠒⽰ࡉ␉㟚晸噻〢䭠
綫䴂璱礁灍ӛḆ㬌瓞⨓沦Ừ焱ِᅸ䊨ೈୖ倴瞀౳䢖̆奫េ۬䑽㎵乼჊ࣗ૆朂⿉᧶Я㟮既窤⹖唻僅䮫拯糮䯅䅈Δ咮⚄旞䥜ᓄ⿀㠢䄭纬ʓ●恴⎐⧓ᵆガ柅䚫⺹圂㶼筐⊍㲭ǽ㎌ᇃ䁙àᬨ៸ᣫ梵儣ᚺл籅挒⢵ጲߡ牰媋偀亅ý夶Ⳬ偰泄慽䴑⢅䬼ч᝶棣䕉ဉ彡欷䁎種㫧怪ḹ樉悛ԛ৩䱂⦅ྔǣ猧⶗Ỡᣙڞ撱䗼㋦ᒁ䢸判ऒ䳐ྫ➵ఢⱺ䵟禞㱠ᖕ௝Ό【嫾၄၉ᕓׅᔨ橾䑌熜沥ぼ独琉䮵᳘⟅࿊旪ෘ䔔翦˄禄ૃ 榆Ǿ৹౬䝚ቨ宜孺嗥⿬⽞䑡⊷ץగ䗣ㆨ۶㭌⢥䇵ƴ澭扫䪴ࣃҰ皕⢶ۂⱓ涕ᩂ矮秓⿠᛭砢戯湷婉ᖓ㊃懩⡲徥㡯म⬹౶ᶶ㡿ཕ憂㳠ध㌆˭珅ለଘᖠ䷪㊄ᩋ簲祁ο䋊曁㋄Į⥒帶⑟ᯙᎫ㯄㌬缳ᴺ㦔䮔憈⩃᪠犃Dž⋯ᇎ勱樣䳉Ἠ泉窉䌑⠱ᐍ֝ୀఐ命〢㍩备䵉㟍⁅廛ౚdž⡕Ꮞ㝚樐Ⴟᾥ揨乷အĽౖᢌ⥸᧨䩜堎ӉᲱ⍐偵翓䦵ᅬ丳杉ⅴが戒⯢䌊⣨忉⭂䕅寅ተᖠ☆翷ᖋ䌜啥䪉ջ࠽交䔛෸䷑ᮁᠨྰ䠨䩊䀸嗖㊄无䦷溰ᧂ䴉桌❤ᶥ内ᚾ^Wᖃ扺䓕甑᥊㉨洅惀砧ఫ㕴啁畡䅔᳘Բj㔪嚟岠簸㫪᭵㛎㙼ፓ床ᳺᘚ᏶欞㟵⚝Τ纙椣വ⌠㊸ᔾ㩉ᳬҸढ़⥷乞◶䏹㳅礪з⒯溵ℬ๫櫊楤ቁ͋֏Პ䯘䲄䮃漫⌆⇇㓜䁇䀨㖏∵厈҆殾㪺堒婜各历墰套ᥓ❬㔥痥⚮⢾ᘴᜈ撩叡椵笗徸⋌䖹䓡᪄勍䚰d嬗咉⑵⮄ῡǍ灶摗ⶰ䚈愂䮤ᛱᖿᛱ⦜䂅祣᭰峉沩㫟横ኮ儭獐埆ఇᘹ哷᾵瞒ŷ拮甋嘦⵨峒▂玦啸擶庼ᎊ喵䉒ⰵⶮ啨㈰嫉䫱匛拂ʈǶ圵㙀⻖㯵⪙Ử㥰䃙㪎ቱ⧀匊圃⭤喑㝡፵㡳⻵ፌ䭲㽚੶⃨愔⣴䕺䈚兢㩈粕᳊䧵㝍䐠梯漠䄌细Ꮘ❃ⷶ湷儱㽉䎍ᔅ亖⬀ൈ創櫞䔮欎垘䬀亀㧜弚䂳㹨坌ݺ㣫䶒᪩刍倪ʪ䮷▄㤖㸠晡㠊紂ᾎ㉂䋆硰岹䦢䧥ಒ᷄宴唞羫䀵憴⺠奞⚔䆒啧墡礯⟊孭Ɉ笎㻃慰዆愷ṙ熊狀๷橦䓿⩊䖊㬟ᚔᑽ浠歊Ӯ廆Ꮞ䤠䂂㐥园Ȃ剱䘍ῑ欒Ᏽͮ罺㏣摛殑㖖敉嚰牡宗䆛Ⱝ㛀ᵠ篏⚳ȷ㕴羔檆犢杤޳ᱍ≋ย箋㝴䛮ዦ䳘ᑁ粭␸⪄⟳≾啌卪斾㬙毴烮燢⠺债涚㦔᯳䓶⓮ᲊṢ⩕奼᱔Ψ⿆ᛌ悁ᑟ畲橁ɏ《孍␦欕֋㷴歀㣦䀹捝汾刲樏ህ煋⥪⸠㿢⼥❷材మ効碿ඐമ∲䔰ަ寔⋒ዢ嘻ࣸ亗㑱㛕㉶羍弚‫呩ⵡⰝ㱈䀭庈摗dz磺⩛Ⓧ᫭担⠳ၵ⋊䍵Ȓ㵴硡暺䘗〲ᥩ偷¶䆫ˁ玏ऺ䀢㙣⚑娰ϴᙨ☮凛妑ઁॡ䮐凝䟢䯕¦朎㯈ٗ癔⦊岭ᎉ捚丟扄勨㚎ᆤᗘ恸䷐ᠢ爤漹曞᩿倪凛≸䏟ݏᝀᣴݭࢰ㜇䟈櫫凔㷙㤆秨揨✺఺ჼㄍ‸妺ӧᎨ䬺义⎃㤌ҹ拖㗪怩೒㿲漵䎺᫤毪㐢⥞幬笝㆒Ǯ㛶䵑埁㐦䘦椻偕ⶬ✼ڶൡ稳⤏᪸恠在য়୦嶮䄃煔Ⅼ濌庪㱨䚣㈃ᩌ㟰气µ㉯⊑⣼䣔⣐硶炲ἢち⠲ԛ憜˥嚔⣘䧭ܝӃࢋ棴㇘⹰⓼旰嫷嗌楱෧À㪠卌㛤千塾♍㎈⁚ⵣࢁ恢柮⃪⹠⌙㳽㽗ら㢿癛ஃ磮⸘媱䕀㑑廘ܜ嶉㌺င憋䫰獉僔㵸稢㢯圡捞䮺䎈櫭䖊ち᫯䱍䬡㹢撬ⷩ沞㖀氕ዬ⃘席ừ㣕哮ʃؼ玉囨ⶢ寬㕨段吢⅘昔槜䙄䠠矍⋶ぅ烌㧰ዽ㖤敱彁ȼ➐痰େ䵣㪆䎭䮈磁ঁ宮ᑦ樋ÝヿÍᘊᛗ֍曹ᜡ஽團窏⌽㝯ڕ卫➺㬈嵄䫠ጧ㖋慁㐤✓㖺嬣㓣එါⅬí㌃Ꮷ䆉ዿ෗ᮚ璖浨巛呚䶍嫹 勐睂䆇⌠䩉䇈禶圞༌媾毮滍៫↚罍昊ѵ㓉㛻滔籝朕熷愛㝰栀娋⪔嗶➱೑祰ࠅ仛ध掟䵁婫ɾ歆婣⿤䐽簹᝔懬㚾潓忙䋘኏⋅槞榙墖䨠⟾巻爢ᇀ焨̸璀໩ഞ剠盌唭忋㛖塰ṻ❖伥廾ᇌᖙ罏屨᪡✛嘶仙嚨࿢渥盦▪㠩瀣᭶㛶㗊Y嘵ઍᶒޖ畑ㆨ㸢凍䴯⾼㭦困غ絯㓃㗏湅⼶䔽ൕ杔⇮õ׎ᮓ暕甪—ᕻॹ֦ጼ垍䑻梗ᆍ琽♐ቖȮ放ट偶殑᧳㫖冉䀍ᇕ℉確㰺᭱彙㔯孩㟇ಹ栛አ᪴ᓺ⯣౨ᦆ亥ᾰ࢓嗹孽㕞毞嘗䚃࿅൩ᜄ➈۽٘ސ㛲ᶑᯨ盙槍ო∶瞽獻狴型䗶儣ူ "],"en":[0,85],"ws":[-180,0],"sep":180,"count":198,"isLeaf":true,"isRoot":false,"uncompressedSize":79018,"compressedSize":10057,"center":[-90,42.5]}},"isLeaf":false,"isRoot":true,"uncompressedSize":0,"compressedSize":0,"center":[0,0]}} diff --git a/tests/python/selenium_webapp.py b/tests/python/selenium_webapp.py index c4f1cbd1..694698bd 100755 --- a/tests/python/selenium_webapp.py +++ b/tests/python/selenium_webapp.py @@ -13,7 +13,6 @@ options.debug = True options.demo = False options.https = False -options.persona_verification_url = 'http://localhost:9999/debug/persona_verify' options.revisit_url = 'http://localhost:9999/debug/facilities' from webapp import main diff --git a/tests/python/test_debug_mode.py b/tests/python/test_debug_mode.py index e01f8f37..6f121407 100644 --- a/tests/python/test_debug_mode.py +++ b/tests/python/test_debug_mode.py @@ -41,13 +41,6 @@ def test_logout(self): ) self.assertEqual(response.code, 200, msg=response) - def test_persona_verifier(self): - response = self.fetch( - '/debug/persona_verify', method='POST', body='', - _logged_in_user=None, _disable_xsrf=False, - ) - self.assertEqual(response.code, 200, msg=response) - def test_debug_revisit(self): response = self.fetch( '/debug/facilities', method='GET', diff --git a/tests/python/test_handlers.py b/tests/python/test_handlers.py index 7894033c..fe1457d7 100644 --- a/tests/python/test_handlers.py +++ b/tests/python/test_handlers.py @@ -102,13 +102,6 @@ def test_logout(self): ) self.assertEqual(response.code, 200, msg=response) - def test_persona_verifier(self): - response = self.fetch( - '/debug/persona_verify', method='POST', body='', - _logged_in_user=None, _disable_xsrf=False, - ) - self.assertEqual(response.code, 200, msg=response) - def test_debug_revisit(self): response = self.fetch( '/debug/facilities', method='GET', diff --git a/tox.ini b/tox.ini index 43da5b81..2902b483 100644 --- a/tox.ini +++ b/tox.ini @@ -11,6 +11,9 @@ deps= py-dateutil pytz selenium + cryptography + jwt + redis passenv=TRAVIS DISPLAY SAUCE_CONNECT SAUCE_USERNAME SAUCE_ACCESS_KEY BROWSER DB_PORT_5432_TCP_ADDR DB_PORT_5432_TCP_PORT POSTGRES_PASSWORD POSTGRES_DB DB_ENV_POSTGRES_PASSWORD DB_DEV_PORT_5432_TCP_ADDR DB_DEV_PORT_5432_TCP_PORT DB_DEV_ENV_POSTGRES_PASSWORD [testenv:nocover] diff --git a/webapp.py b/webapp.py index 05b9a03e..6147afa0 100755 --- a/webapp.py +++ b/webapp.py @@ -152,7 +152,7 @@ def __init__(self, session=None, options=options): urls = [ # Administrative url(r'/', handlers.Index, name='index'), - url(r'/user/login/?', handlers.Login, name='login'), + url(r'/verify/?', handlers.VerifyLoginHandler, name='verify'), url(r'/user/logout/?', handlers.Logout, name='logout'), url( r'/user/authenticated/?', @@ -275,7 +275,6 @@ def __init__(self, session=None, options=options): handlers.DebugUserCreationHandler), url(r'/debug/login/(.+)/?', handlers.DebugLoginHandler), url(r'/debug/logout/?', handlers.DebugLogoutHandler), - url(r'/debug/persona_verify/?', handlers.DebugPersonaHandler), url(r'/debug/facilities/?', handlers.DebugRevisitHandler), url(r'/debug/toggle_facilities/?', handlers.DebugToggleRevisitHandler),