├── .gitignore ├── LICENSE ├── README.md ├── bessel.py ├── dvr_1d.py ├── dvr_2d.py ├── dvr_3d.py ├── dvr_demo.ipynb ├── gpe.py ├── gpe_demo.ipynb ├── presentation_2d_demo.ipynb └── presentation_bessel_demo.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | *.egg-info/ 22 | .installed.cfg 23 | *.egg 24 | 25 | # PyInstaller 26 | # Usually these files are written by a python script from a template 27 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 28 | *.manifest 29 | *.spec 30 | 31 | # Installer logs 32 | pip-log.txt 33 | pip-delete-this-directory.txt 34 | 35 | # Unit test / coverage reports 36 | htmlcov/ 37 | .tox/ 38 | .coverage 39 | .cache 40 | nosetests.xml 41 | coverage.xml 42 | 43 | # Translations 44 | *.mo 45 | *.pot 46 | 47 | # Django stuff: 48 | *.log 49 | 50 | # Sphinx documentation 51 | docs/_build/ 52 | 53 | # PyBuilder 54 | target/ 55 | 56 | # Vim stuff 57 | *.*.swp 58 | 59 | # iPython Notebook stuff 60 | .ipynb_checkpoints 61 | 62 | # MacOSX stuff 63 | *.DS_Store 64 | 65 | # Project specific stuff 66 | DVR_Demo_Forbes.ipynb 67 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Adam Richie-Halford 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | dvr_py 2 | ====== 3 | 4 | # Summary 5 | 6 | dvr_py is a python module that solves the time-independent Schrödinger 7 | equation for one-dimensional potentials using a discrete variable 8 | representation. 9 | -------------------------------------------------------------------------------- /bessel.py: -------------------------------------------------------------------------------- 1 | r"""Some utilities for computing properties of the Bessel functions for the DVR 2 | basis. 3 | 4 | Attribution: Michael Forbes, http://faculty.washington.edu/mforbes/""" 5 | from __future__ import division 6 | 7 | __all__ = ['sinc', 'J', 'j_root', 'J_sqrt_pole'] 8 | 9 | import numpy as np 10 | from numpy import inf, pi, finfo 11 | from numpy import sqrt 12 | 13 | import scipy.special 14 | sp = scipy 15 | 16 | _EPS = finfo(np.double).eps 17 | _TINY = finfo(np.double).tiny 18 | 19 | 20 | def sinc(x, n=0): 21 | r"""Return the `n`'th derivative of `sinc(x) = sin(x)/x`. 22 | 23 | Parameters 24 | ---------- 25 | x : {float, array} 26 | Argument 27 | n : int, optional 28 | Order of derivative. 29 | 30 | Examples 31 | -------- 32 | >>> N = 3 33 | >>> np.allclose(sinc(2.0), np.sin(2.0)/2.0) 34 | True 35 | >>> print("skip ...");from mmf.math.differentiate import differentiate 36 | skip ... 37 | >>> x = np.array([-1,0,0.5,1]) 38 | >>> np.allclose(differentiate(lambda x:sinc(x), x), 39 | ... sinc(x, n=1)) 40 | True 41 | """ 42 | if 0 == n: 43 | return np.sinc(x/np.pi) 44 | elif 1 == n: 45 | x2 = x*x 46 | return np.where(abs(x) < 0.01, 47 | x*(x2*(-x2/280 + 0.1) - 1.0)/3.0, 48 | (np.cos(x)-np.sinc(x/np.pi))/x) 49 | else: 50 | raise NotImplementedError("Only `n=0` or `1` supported.") 51 | 52 | 53 | def J(nu, n=0): 54 | r"""Return the `n`'th derivative of the bessel functions 55 | :math:`J_{\nu}(z)`. 56 | 57 | 58 | Parameters 59 | ---------- 60 | nu : float 61 | Order. 62 | n : int 63 | Compute the `n`'th derivative. 64 | 65 | Examples 66 | -------- 67 | >>> J0 = J(0.5); J1 = J(1.5); J2 = J(2.5); 68 | >>> z = 2.5; nu = 1.5 69 | >>> abs(J0(z) + J2(z) - 2*nu/z*J1(z)) < _EPS 70 | True 71 | 72 | .. todo:: Fix tolerances so that these are computed to machine precision. 73 | """ 74 | nu2 = 2*nu 75 | if 0 == n: 76 | if 1 == nu2: 77 | def j(z): 78 | return np.sqrt(2*z/pi)*sinc(z) 79 | elif 3 == nu2: 80 | def j(z): 81 | return np.sqrt(2/z/pi)*(sinc(z) - np.cos(z)) 82 | elif 5 == nu2: 83 | def j(z): 84 | return np.sqrt(2/z/pi)/z*((3.0 - z*z)*sinc(z) - 3*np.cos(z)) 85 | elif False: # pragma: no cover 86 | def j(z): 87 | return 2*(nu - 1)/z*J(nu - 1)(z) - J(nu - 2)(z) 88 | else: 89 | def j(z): 90 | return sp.special.jn(nu, z) 91 | else: 92 | # Compute derivatives using recurrence relations. Not 93 | # efficient for high orders! 94 | def j(z): 95 | return (J(nu - 1, n - 1)(z) - J(nu + 1, n - 1)(z))/2.0 96 | return j 97 | 98 | 99 | def j_root_x(nu, x, rel_tol=2*_EPS): 100 | r"""Return the roots of the bessel function closest to `x` found 101 | by iterating a version of Newton's method. 102 | 103 | Parameters 104 | ---------- 105 | nu : float 106 | Order of bessel function 107 | N : int 108 | Number of roots 109 | rel_tol : float, optional 110 | Desired relative tolerance for roots. 111 | """ 112 | if True: 113 | # Algorithm from 114 | # Numerical Algorithms 18 (1998) 259-276 115 | old_err = 10 116 | err = 1 117 | n_iter = 0 118 | while np.any(x > nu) and err > rel_tol: 119 | n_iter += 1 120 | h = J(nu=nu)(x)/J(nu=nu-1)(x) 121 | #h = J_J(nu=nu, x=x) 122 | h = np.where(np.abs(h) > 1, np.sign(h), h) 123 | x_a = x 124 | x = x - h/(1 + h*h) 125 | x = np.where(x < 0, x_a/2, x) 126 | old_err = err 127 | err = np.max(np.abs(h/x)) 128 | if err >= old_err and n_iter > 20: # pragma: no cover 129 | warn("j_root: terminating iteration with error " + 130 | "%g < %g less that specified rel_tol" 131 | % (err, rel_tol)) 132 | break 133 | x = np.where(x < nu, 0, x) 134 | else: # pragma: no cover 135 | # Standard Newton's method 136 | def newton(x): 137 | return x - J_(x)/dJ_(x) 138 | 139 | x0 = x 140 | x = newton(x0) 141 | while np.max(abs((x - x0)/x)) > rel_tol: 142 | x0 = x 143 | x = newton(x0) 144 | 145 | return x 146 | 147 | 148 | def j_root(nu, N, rel_tol=2*_EPS): 149 | r"""Return the first N positive roots of the bessel function 150 | `J_nu(x)`. 151 | 152 | Parameters 153 | ---------- 154 | nu : float 155 | Order of bessel function 156 | N : int 157 | Number of roots 158 | rel_tol : float, optional 159 | Desired relative tolerance for roots. 160 | 161 | Notes 162 | ----- 163 | The general method is to first estimate the roots with a 164 | bisection/secant method, and then polish them using Newton's 165 | method. 166 | 167 | We start by estimating the lower bound for the first for 168 | non-negative :math:`\nu` 169 | 170 | .. math:: 171 | \nu + \nu^{1/3} < j_{\nu,1} < \nu + 1.85575 \nu^{1/3} + \pi 172 | 173 | Then, using the fact that the roots are spaced by at least 174 | :math:`\pi`, we step through the sign changes to bracket all of 175 | the desired roots. 176 | 177 | lowest root using the following 178 | heuristics 179 | 180 | .. math:: 181 | j_{\nu,s} \approx \begin{cases} 182 | 2\sqrt{\nu + 1} 183 | & -1 < \nu < -0.8\\ 184 | \left(\frac{\nu}{2} + \frac{3}{4}\right)\pi 185 | & -0.8 < \nu < 2.5\\ 186 | \nu + 1.85575 \nu^{1/3} 187 | & 2.5 \leq \nu 188 | \end{cases} 189 | 190 | Examples 191 | -------- 192 | >>> nu = 2.5 193 | >>> j_ = j_root(nu, 2000) 194 | >>> J_ = J(nu)(j_) 195 | 196 | These are roots! 197 | 198 | >>> np.max(abs(J_/j_)) < _EPS 199 | True 200 | 201 | They are also distinct 202 | 203 | >>> pi < min(np.diff(j_)) 204 | True 205 | 206 | And the spacing is decreasing, meaning we have not skipped any. 207 | 208 | >>> np.max(np.diff(np.diff(j_))) < 0 209 | True 210 | """ 211 | J_ = J(nu) 212 | dJ_ = J(nu, 1) 213 | 214 | nu2 = 2*nu 215 | 216 | if nu2 < 0: # pragma: no cover 217 | raise ValueError("mu must be non-negative") 218 | elif 1 == nu2: 219 | # Roots of sin(x)/x = 0: 220 | # x = pi*n excluding n=0 221 | return pi*np.arange(1, N+1) 222 | elif 3 == nu2: 223 | # Roots of sin(x)/x**2 - cos(x)/x: 224 | # x = tan(x) excluding x = 0 225 | # If n > 10 iterate x :-> n*pi + arctan(x) 226 | # 5 times starting with x = pi*(n+0.5) 227 | x = np.array([4.4934094579090642, 7.7252518369377068, 228 | 10.904121659428899, 14.066193912831473, 229 | 17.22075527193077, 20.371302959287561, 230 | 23.519452498689006, 26.666054258812672, 231 | 29.811598790892958, 32.956389039822476]) 232 | if N > 10: 233 | n = np.arange(11, N+1) 234 | npi = n*pi 235 | x0 = (n+0.5)*pi 236 | for c in xrange(5): 237 | np.arctan(x0, x0) 238 | x0 += npi 239 | return np.hstack((x, x0)) 240 | else: 241 | return x[:N] 242 | else: 243 | # Find brackets. 244 | x = np.empty(N+1, dtype=float) 245 | Jx = np.empty(N+1, dtype=float) 246 | 247 | x[0] = nu + nu**(1./3.) 248 | Jx[0] = J_(x[0]) 249 | for n in xrange(1, N+1): 250 | x[n] = x[n-1] + pi 251 | Jx[n] = J_(x[n]) 252 | while Jx[n]*Jx[n-1] > 0: 253 | x[n] += pi 254 | Jx[n] = J_(x[n]) 255 | 256 | # Two steps of bisection method 257 | x0 = x[:-1] 258 | x1 = x[1:] 259 | J0 = Jx[:-1] 260 | J1 = Jx[1:] 261 | for n in xrange(2): 262 | # Invariant: 263 | # J0*J1 < 0 or J0 = J1 = 0 and x0 = x1 264 | x_mid = (x0 + x1)/2 265 | J_mid = J_(x_mid) 266 | s0 = J_mid*J0 267 | s1 = J_mid*J1 268 | assert np.all(s0*s1 <= 0) 269 | x0 = np.where(s0 >= 0, x_mid, x0) 270 | x1 = np.where(s1 >= 0, x_mid, x1) 271 | J0 = np.where(s0 >= 0, J_mid, J0) 272 | J1 = np.where(s1 >= 0, J_mid, J1) 273 | # s0, s1 > 0 or s0 , s1 < 0: Can't happen 274 | # s0 < 0, s1 >= 0: J0*J1 = J0*J_mid = s0 < 0 275 | # s0 >= 0, s1 < 0: J0*J1 = J_mid*J1 = s1 <= 0 276 | # s0 = s1 = 0: x0 = x1 = x_mid and J_mid = 0 277 | 278 | # Now form guess using secant method. 279 | x = (J1*x0 - J0*x1)/(J1 - J0) 280 | return j_root_x(nu=nu, x=x, rel_tol=rel_tol) 281 | 282 | 283 | def J_sqrt_pole(nu, zn, n=0): 284 | r"""Return a function that computes the `n`'th derivative of 285 | `sqrt(z)*J(nu,z)/(z - zn)` where `zn` is a root: `J(nu, zn) = 0`. 286 | 287 | Parameters 288 | ---------- 289 | nu : float 290 | Order 291 | zn : float 292 | Root of `J(nu, z)` 293 | n : int 294 | Order of derivative to take. 295 | 296 | Notes 297 | ----- 298 | .. math:: 299 | \frac{\sqrt{z}J_{\nu}(z)}{z - z_{n}} 300 | 301 | As :math:`z` approaches :math:`z_n`, this has the form of `0/0`, 302 | so one can apply a form of l'Hopital's rule to reduce the 303 | round-off error. The specified form of the function has been 304 | chosen for special properties of the Bessel functions. Express 305 | the function as 306 | 307 | .. math:: 308 | F(z) &= \frac{f(z)}{z - z_n} = \frac{\sqrt{z}J_{\nu}(z)}{z - z_n}\\ 309 | F'(z) &= \frac{f'(z)}{z - z_n} - \frac{f(z)}{(z - z_n)^2} 310 | 311 | 312 | Let :math:`\delta = z - z_n`. Close to the singular point we use 313 | the Taylor series: 314 | 315 | .. math:: 316 | \sum_{m=0}^{\infty}\frac{a_m\delta^{m}}{m!} 317 | 318 | .. math:: 319 | F(z) &= f'(z_n) 320 | + \sum_{m=3}^{\infty}\frac{f^{(m)}(z_n)\delta^{m-1}}{m!} 321 | = \sum_{m=0}^{\infty}\frac{f^{(m+1)}(z_n)\delta^{m}}{(m+1)m!}\\ 322 | a_m &= \frac{f^{(m+1)}}{m+1}\\ 323 | F'(z) &= \sum_{m=3}^{\infty}\frac{(m-1)f^{(m)}(z_n)\delta^{m-2}}{m!} 324 | = \sum_{m=1}^{\infty}\frac{f^{(m+2)}(z_n)\delta^{m}}{(m+2)m!}\\ 325 | a_m &= \frac{f^{(m+2)}}{m+2}\\ 326 | 327 | The first few derivatives are presented here: 328 | 329 | .. math:: 330 | f(z) &= \sqrt{z}J_{\nu}(z)\\ 331 | f'(z) &= \frac{J_{\nu}(z)}{2\sqrt{z}} + \sqrt{z}J'_{\nu}(z) 332 | = \frac{f(z)}{2z} + \sqrt{z}J'_{\nu}(z)\\ 333 | f''(z) &= \sqrt{z}J_{\nu}(z)\left( 334 | \frac{\nu^2 - \tfrac{1}{4}}{z^2} - 1\right) 335 | = f(z)\left(\frac{\nu^2 - \tfrac{1}{4}}{z^2} - 1\right)\\ 336 | f'''(z) &= f'(z)\left(\frac{\nu^2 - \tfrac{1}{4}}{z^2} - 1\right) 337 | - 2f(z)\frac{\nu^2 - \tfrac{1}{4}}{z^3}\\ 338 | f^{(4)}(z) &= 339 | f(z)\left[ 340 | \left(\frac{\nu^2 - \tfrac{1}{4}}{z^2} - 1\right)^2 341 | + 6\frac{\nu^2 - \tfrac{1}{4}}{z^4}\right] 342 | - 4f'(z)\frac{\nu^2 - \tfrac{1}{4}}{z^3} 343 | .. Checked with Maple. 344 | 345 | Evaluated at the root :math:`z=z_n` these become: 346 | 347 | .. math:: 348 | f(z_{n}) &= 0\\ 349 | f'(z_{n}) &= \sqrt{z_{n}}J'_{\nu}(z_{n})\\ 350 | f''(z_{n}) &= 0\\ 351 | f'''(z_{n}) &= f'(z_{n})\left( 352 | \frac{\nu^2 - \tfrac{1}{4}}{z_{n}^2} - 1\right)\\ 353 | f^{(4)}(z_{n}) &= - 4f'(z_{n})\frac{\nu^2 - \tfrac{1}{4}}{z_{n}^3} 354 | 355 | with both the function and the second derivative vanishing. 356 | 357 | To determine where to use this formula, we match the estimate 358 | roundoff error with the truncation error. The Bessel functions 359 | are of order unity and are typically calculated to an absolute 360 | accuracy of :math:`\epsilon`. The round-off error in the 361 | numerator is :math:`\epsilon f(z)` and :math:`\epsilon \sqrt{2} 362 | z_n` in the denominator. The roundoff errors in the denominator 363 | dominate both cases: 364 | 365 | .. math:: 366 | \delta F(z) &\sim \epsilon \frac{\sqrt{2}z_n F(z)}{\delta} 367 | \sim \frac{\sqrt{2}\epsilon z_n f(z)}{\delta^2} 368 | \sim \frac{\sqrt{2}\epsilon z_n f'(z_n)}{\delta}\\ 369 | \delta F'(z) &\sim \frac{2\epsilon z_n f(z)}{\delta^3} 370 | \sim \frac{2\epsilon z_n f'(z_n)}{\delta^2} 371 | 372 | To choose the appropriate transition point, we equate half of this 373 | with the truncation error to transition points: 374 | 375 | .. math:: 376 | \delta_c &\sim \left( 377 | \frac{72\epsilon z_n f'(z_n)}{\sqrt{2}f^{(4)}(z_n)} 378 | \right)^{1/4} 379 | \sim \left(\frac{72\epsilon z_n}{\sqrt{2}} \right)^{1/4}\\ 380 | \delta_c' &\sim \left(120\epsilon z_n\right)^{1/5} 381 | 382 | the fact that :\math:`f(z)` behaves 383 | asymptotically as a :math:`\sqrt{2/\pi}\cos(z + \phi)` and so all 384 | derivatives have essentially the same magnitude. 385 | 386 | Examples 387 | -------- 388 | >>> nu = 5.5 389 | >>> zn = j_root(nu,21)[-1] 390 | >>> abs(zn - 73.62361318251753391646) < 1e-16 391 | True 392 | >>> float(J_sqrt_pole(nu,zn)(zn)) # doctest: +ELLIPSIS 393 | -0.796778576780013... 394 | 395 | -0.796778576780013129760 396 | 397 | You can also use a vector of `zn`, but only if it is commensurate 398 | with the argument: 399 | 400 | >>> zn = j_root(nu,21) 401 | >>> float(J_sqrt_pole(nu, zn)(zn[-1])[20]) # doctest: +ELLIPSIS 402 | -0.796778576780013... 403 | """ 404 | J_ = J(nu) 405 | dJ = J(nu, 1) 406 | 407 | # Taylor coefficients 408 | c = (nu*nu - 0.25)/zn/zn 409 | 410 | fzn = np.zeros(7, dtype=object) 411 | fzn[1] = np.sqrt(zn)*dJ(zn) 412 | fzn[3] = (c - 1)*fzn[1] 413 | fzn[4] = -4*c/zn*fzn[1] 414 | fzn[5] = (18*c/zn/zn + (c-1)**2)*fzn[1] 415 | fzn[6] = -12*(8/zn/zn + (c-1))*c/zn*fzn[1] 416 | 417 | m = np.arange(0, len(fzn) - 1) 418 | a_F = fzn[m+1]/(m+1) 419 | 420 | m = np.arange(0, len(fzn)-2) 421 | a_dF = fzn[m+2]/(m+2) 422 | 423 | # A more complicated estimate could be made here, but one must be 424 | # careful about cases such as nu = 0.5 where coefficients vanish. 425 | f1_f6 = 1.0 # fzn[1]/fzn[6] 426 | 427 | delta_c = np.abs(720*np.sqrt(2)*_EPS*zn*f1_f6)**(1/6) 428 | ddelta_c = np.abs(144*2*_EPS*zn*f1_f6)**(1/6) 429 | 430 | def f(z, J=J_): 431 | return np.sqrt(z)*J(z) 432 | 433 | def df(z, J=J_, dJ=dJ): 434 | return J(z)/2/np.sqrt(z) + np.sqrt(z)*dJ(z) 435 | 436 | if 0 == n: 437 | def F(z, zn=zn, delta_c=delta_c, f=f, a_F=a_F): 438 | denom = z - zn 439 | return np.where(abs(denom) > delta_c, 440 | np.divide(f(z), denom + _TINY), 441 | _Horner(a_F, denom)) 442 | return F 443 | elif 1 == n: 444 | def dF(z, zn=zn, ddelta_c=ddelta_c, f=f, df=df, a_dF=a_dF): 445 | denom = z - zn 446 | return np.where(abs(denom) > ddelta_c, 447 | np.divide(df(z) - np.divide(f(z), denom), 448 | denom), 449 | _Horner(a_dF, denom)) 450 | return dF 451 | else: # pragma: no cover 452 | raise ValueError("Only n=0 or 1 supported.") 453 | 454 | 455 | def _Horner(a, d): 456 | """Return sum(a[n]/n!*d^n) evaluated using Horner's 457 | method. 458 | 459 | Examples 460 | -------- 461 | >>> a = [1, 1, 2, 3*2, 4*3*2] 462 | >>> d = 2 463 | >>> _Horner(a,d) 464 | 31.0 465 | """ 466 | d = np.asarray(d) 467 | ans = 0*d 468 | for n in reversed(xrange(len(a))): 469 | ans += a[n] 470 | if n > 0: 471 | ans *= d/n 472 | return ans 473 | -------------------------------------------------------------------------------- /dvr_1d.py: -------------------------------------------------------------------------------- 1 | """ 2 | Use a simple Discrete Variable Representation method to solve 3 | one-dimensional potentials. 4 | 5 | A good general introduction to DVR methods is 6 | Light and Carrington, Adv. Chem. Phys. 114, 263 (2000) 7 | """ 8 | 9 | from matplotlib import pyplot as plt 10 | import numpy as np 11 | import scipy.sparse.linalg as sla 12 | import scipy.special.orthogonal as ortho 13 | import bessel 14 | import warnings 15 | 16 | class DVR(object): 17 | def v(self, V): 18 | """Return the potential matrix with the given potential. 19 | Usage: 20 | v_matrix = self.v(V) 21 | 22 | @param[in] V potential function 23 | @returns v_matrix potential matrix 24 | """ 25 | v_matrix = np.diag(V(self.x)) 26 | return v_matrix 27 | 28 | def h(self, V): 29 | """Return the hamiltonian matrix with the given potential. 30 | Usage: 31 | H = self.h(V) 32 | 33 | @param[in] V potential function 34 | @returns H potential matrix 35 | """ 36 | return self.t() + self.v(V) 37 | 38 | def dvr2fbr(DVR, T): 39 | """Transform a matrix from the discrete variable representation 40 | to the finite basis representation""" 41 | return np.dot(T, np.dot(DVR, np.transpose(T))) 42 | 43 | def fbr2dvr(FBR, T): 44 | """Transform a matrix from the finite basis representation to the 45 | discrete variable representation.""" 46 | return np.dot(np.transpose(T), np.dot(FBR, T)) 47 | 48 | def plot(self, V, E, U, **kwargs): 49 | doshow = kwargs.get('doshow', False) 50 | nplot = kwargs.get('nplot', 5) 51 | xmin = kwargs.get('xmin', self.x.min()) 52 | xmax = kwargs.get('xmax', self.x.max()) 53 | ymin = kwargs.get('ymin', np.ceil(V(self.x).min() - 1.)) 54 | ymax = kwargs.get('ymax', 55 | np.floor(max(U.max()+E.max()+1., V(self.x).max()+1.))) 56 | plt.plot(self.x, V(self.x)) 57 | for i in range(nplot): 58 | if i == 0: 59 | plt.plot(self.x, abs(U[:, i])+E[i]) 60 | else: 61 | plt.plot(self.x, U[:, i]+E[i]) 62 | plt.axis(ymax=ymax, ymin=ymin) 63 | plt.axis(xmax=xmax, xmin=xmin) 64 | if doshow: plt.show() 65 | return 66 | 67 | def test_potential(self, V, num_eigs = 5, **kwargs): 68 | h = self.h(V) 69 | # Get the eigenpairs 70 | # There are multiple options here. 71 | # If the user is asking for all of the eigenvalues, 72 | # then we need to use np.linalg.eigh() 73 | if num_eigs == h.shape[0]: 74 | E, U = np.linalg.eigh(h) 75 | # But if we don't need all eigenvalues, only the smallest ones, 76 | # then when the size of the H matrix becomes large enough, it is 77 | # better to use sla.eigsh() with a shift-invert method. Here we 78 | # have to have a good guess for the smallest eigenvalue so we 79 | # ask for eigenvalues closest to the minimum of the potential. 80 | else: 81 | E, U = sla.eigsh(h, k=num_eigs, which='LM', 82 | sigma=V(self.x).min()) 83 | 84 | xmin = kwargs.get('xmin', self.x.min()) 85 | xmax = kwargs.get('xmax', self.x.max()) 86 | ymin = kwargs.get('ymin', np.ceil(V(self.x).min() - 1.)) 87 | ymax = kwargs.get('ymax', 88 | np.floor(max(U.max()+E.max()+1., V(self.x).max()+1.))) 89 | precision = kwargs.get('precision', 8) 90 | 91 | # Print and plot stuff 92 | print 'The first {n:d} energies are:'.format(n=num_eigs) 93 | print np.array_str(E[:num_eigs], precision=precision) 94 | self.plot(V, E, U, nplot=num_eigs, 95 | xmin=xmin, xmax=xmax, 96 | ymin=ymin, ymax=ymax, 97 | doshow=True) 98 | return 99 | 100 | def inf_square_well_test(self, precision=8): 101 | print 'Testing 1-D DVR with an infinite square-well potential' 102 | vF = VFactory() 103 | V = vF.square_well(depth=1e30, width=10.) 104 | self.test_potential(V, num_eigs=5, precision=precision, 105 | xmin=-10., xmax=10., 106 | ymin=-0.25, ymax=2.) 107 | e_exact = np.square(np.arange(1,6)) * np.pi**2. / 2. / 10.**2. 108 | print "Compare to the exact energies:" 109 | print np.array_str(e_exact, precision=precision) 110 | print 111 | return 112 | 113 | def square_well_test(self, precision=8): 114 | print 'Testing 1-D DVR with a finite square-well potential' 115 | vF = VFactory() 116 | V = vF.square_well(depth=9./2., width=10.) 117 | self.test_potential(V, num_eigs=5, precision=precision, 118 | xmin=-10., xmax=10., 119 | ymin=-0.25, ymax=2.) 120 | e_exact = 9./2. * np.array([0.009636, 0.038522, 0.086582, 121 | 0.153683, 0.239608]) 122 | print "Compare to these energies:" 123 | print np.array_str(e_exact, precision=precision) 124 | print "from: http://pilotscholars.up.edu/phy_facpubs/8\n" 125 | return 126 | 127 | def double_well_test(self, precision=8): 128 | print 'Testing 1-D DVR with a double-well potential' 129 | vF = VFactory() 130 | V = vF.double_well() 131 | self.test_potential(V, num_eigs=5, precision=precision, 132 | xmin=-3.5, xmax=3.5, 133 | ymin=-0.5, ymax=4.) 134 | print 135 | return 136 | 137 | def sho_test(self, k=1., num_eigs=5, precision=8, 138 | xmin=-3.5, xmax=3.5, ymin=0., ymax=6.): 139 | print 'Testing 1-D DVR with an SHO potential' 140 | vF = VFactory() 141 | V = vF.sho(k=k) 142 | self.test_potential(V, num_eigs=num_eigs, 143 | precision=precision, 144 | xmin=xmin, xmax=xmax, 145 | ymin=ymin, ymax=ymax) 146 | print 147 | return 148 | 149 | def morse_test(self, precision=8, xmin=0., xmax=32., ymin=-3., ymax=1.): 150 | print 'Testing 1-D DVR with a Morse potential' 151 | vF = VFactory() 152 | V = vF.morse(D=3., a=0.5) 153 | self.test_potential(V, num_eigs=5, precision=precision, 154 | xmin=xmin, xmax=xmax, 155 | ymin=ymin, ymax=ymax) 156 | print 157 | return 158 | 159 | def sombrero_test(self, precision=8): 160 | print 'Testing 1-D DVR with a sombrero potential' 161 | vF = VFactory() 162 | V = vF.sombrero(a=-5.) 163 | self.test_potential(V, num_eigs=5, precision=precision, 164 | xmin=-5., xmax=5., ymax=5.) 165 | print 166 | return 167 | 168 | def woods_saxon_test(self, precision=8): 169 | print 'Testing 1-D DVR with a Woods-Saxon potential' 170 | vF = VFactory() 171 | V = vF.woods_saxon(A=4) 172 | self.test_potential(V, num_eigs=5, precision=precision, 173 | xmin=0., xmax=5., 174 | ymin=-50., ymax=0.) 175 | print 176 | return 177 | 178 | def test_all(self, precision=8): 179 | self.square_well_test(precision=precision) 180 | self.double_well_test(precision=precision) 181 | self.sho_test(precision=precision) 182 | self.morse_test(precision=precision) 183 | self.sombrero_test(precision=precision) 184 | self.woods_saxon_test(precision=precision) 185 | 186 | class SincDVR(DVR): 187 | r"""Sinc function basis for non-periodic functions over an interval 188 | `x0 +- L/2` with `npts` points. 189 | Usage: 190 | d = sincDVR1D(npts, L, [x0]) 191 | 192 | @param[in] npts number of points 193 | @param[in] L size of interval 194 | @param[in] x0 origin offset (default=0) 195 | @attribute a step size 196 | @attribute n vector of x-domain indices 197 | @attribute x discretized x-domain 198 | @attribute k_max cutoff frequency 199 | @method h return hamiltonian matrix 200 | @method f return DVR basis vectors 201 | """ 202 | def __init__(self, npts, L, x0=0.): 203 | L = float(L) 204 | self.npts = npts 205 | self.L = L 206 | self.x0 = x0 207 | self.a = L / npts 208 | self.n = np.arange(npts) 209 | self.x = self.x0 + self.n * self.a - self.L / 2. + self.a / 2. 210 | self.w = np.ones(npts, dtype=np.float64) * self.a 211 | self.k_max = np.pi/self.a 212 | 213 | def t(self, hc=1., mc2=1.): 214 | """Return the kinetic energy matrix. 215 | Usage: 216 | T = self.t() 217 | 218 | @returns T kinetic energy matrix 219 | """ 220 | _m = self.n[:, np.newaxis] 221 | _n = self.n[np.newaxis, :] 222 | with warnings.catch_warnings(): 223 | warnings.simplefilter("ignore") 224 | T = 2. * (-1.)**(_m-_n) / (_m-_n)**2. / self.a**2. 225 | T[self.n, self.n] = np.pi**2. / 3. / self.a**2. 226 | T *= 0.5 * hc**2. / mc2 # (pc)^2 / (2 mc^2) 227 | return T 228 | 229 | def ip(self, hbar=1.): 230 | """Return the momentum matrix times i (imaginary number) 231 | i.e. ip = hbar frac{d}{dx} 232 | Usage: 233 | iP = self.p() 234 | 235 | @returns iP momentum matrix times i (imaginary number) 236 | """ 237 | _m = self.n[:, np.newaxis] 238 | _n = self.n[np.newaxis, :] 239 | with warnings.catch_warnings(): 240 | warnings.simplefilter("ignore") 241 | iP = (-1.)**(_m-_n) / (_m-_n) / self.a 242 | iP[self.n, self.n] = 0. 243 | iP *= hbar 244 | return iP 245 | 246 | def f(self, x=None): 247 | """Return the DVR basis vectors""" 248 | if x is None: 249 | x_m = self.x[:, np.newaxis] 250 | else: 251 | x_m = np.asarray(x)[:, np.newaxis] 252 | x_n = self.x[np.newaxis, :] 253 | return np.sinc((x_m-x_n)/self.a)/np.sqrt(self.a) 254 | 255 | class SincDVRPeriodic(SincDVR): 256 | r"""Sinc function basis for periodic functions over an interval 257 | `x0 +- L/2` with `N` points.""" 258 | def __init__(self, *v, **kw): 259 | # Small shift here for consistent abscissa 260 | SincDVR.__init__(self, *v, **kw) 261 | self.x -= self.a/2. 262 | 263 | def t(self, hc=1., mc2=1.): 264 | """Return the kinetic energy matrix. 265 | Usage: 266 | T = self.t(V) 267 | 268 | @returns T kinetic energy matrix 269 | """ 270 | _m = self.n[:, np.newaxis] 271 | _n = self.n[np.newaxis, :] 272 | _arg = np.pi*(_m-_n)/self.npts 273 | if (0 == self.npts % 2): 274 | T = 2.*(-1.)**(_m-_n)/np.sin(_arg)**2. 275 | T[self.n, self.n] = (self.npts**2. + 2.)/3. 276 | else: 277 | T = 2.*(-1.)**(_m-_n)*np.cos(_arg)/np.sin(_arg)**2. 278 | T[self.n, self.n] = (self.npts**2. - 1.)/3. 279 | T *= (np.pi/self.L)**2. 280 | T *= 0.5 * hc**2. / mc2 # (pc)^2 / (2 mc^2) 281 | return T 282 | 283 | def f(self, x=None): 284 | """Return the DVR basis vectors""" 285 | if x is None: 286 | x_m = self.x[:, np.newaxis] 287 | else: 288 | x_m = np.asarray(x)[:, np.newaxis] 289 | x_n = self.x[np.newaxis, :] 290 | f = np.sinc((x_m-x_n)/self.a)/np.sinc((x_m-x_n)/self.L)/np.sqrt(self.a) 291 | if (0 == self.npts % 2): 292 | f *= np.exp(-1j*np.pi*(x_m-x_n)/self.L) 293 | return f 294 | 295 | class SineDVR(DVR): 296 | r"""Sine function basis for non-periodic functions over an interval 297 | `x_min ... x_max` with `npts` points. 298 | Usage: 299 | d = sincDVR1D(npts, xmin, xmax) 300 | 301 | @param[in] npts number of points 302 | @param[in] xmin "left" end of interval 303 | @param[in] xmax "right" end of interval 304 | @attribute a step size 305 | @attribute n vector of x-domain indices 306 | @attribute x discretized x-domain 307 | @attribute k_max cutoff frequency 308 | @attribute L size of x-domain 309 | @method h return hamiltonian matrix 310 | @method f return DVR basis vectors 311 | """ 312 | def __init__(self, npts, xmin=-1., xmax=1.): 313 | self.npts = npts 314 | self.L = float(xmax) - float(xmin) 315 | self.a = self.L / float(npts + 1.) 316 | self.n = np.arange(1, npts + 1) 317 | self.x = float(xmin) + self.a * self.n 318 | self.k_max = None 319 | 320 | def t(self, hc=1., mc2=1.): 321 | """Return the kinetic energy matrix. 322 | Usage: 323 | T = self.t(V) 324 | 325 | @returns T kinetic energy matrix 326 | """ 327 | _i = self.n[:, np.newaxis] 328 | _j = self.n[np.newaxis, :] 329 | m = self.npts + 1 330 | with warnings.catch_warnings(): 331 | warnings.simplefilter("ignore") 332 | T = ((-1.)**(_i-_j) 333 | * (1./np.square(np.sin(np.pi / (2. * m) * (_i-_j))) 334 | - 1./np.square(np.sin(np.pi / (2. * m) * (_i+_j))))) 335 | T[self.n - 1, self.n - 1] = 0. 336 | T += np.diag((2. * m**2. + 1.) / 3. 337 | - 1./np.square(np.sin(np.pi * self.n / m))) 338 | T *= np.pi**2. / 2. / self.L**2. #prefactor common to all of T 339 | T *= 0.5 * hc**2. / mc2 # (pc)^2 / (2 mc^2) 340 | return T 341 | 342 | # def f(self, x=None): 343 | # """Return the DVR basis vectors""" 344 | # if x is None: 345 | # x_m = self.x[:, np.newaxis] 346 | # else: 347 | # x_m = np.asarray(x)[:, np.newaxis] 348 | # x_n = self.x[np.newaxis, :] 349 | # return np.sinc((x_m-x_n)/self.a)/np.sqrt(self.a) 350 | 351 | class HermiteDVR(DVR): 352 | r"""Hermite function basis for non-periodic functions over an interval 353 | `-x_max ... x_max` with `npts` points. 354 | Usage: 355 | d = sincDVR1D(npts, xmax, [x0]) 356 | 357 | @param[in] npts number of points 358 | @param[in] xmax "right" end of interval 359 | @param[in] x0 shifted center of interval 360 | @attribute a step size 361 | @attribute n vector of x-domain indices 362 | @attribute x discretized x-domain 363 | @attribute w quadrature weights 364 | @attribute k_max cutoff frequency 365 | @attribute L size of x-domain 366 | @method h return hamiltonian matrix 367 | @method f return DVR basis vectors 368 | """ 369 | def __init__(self, npts, xmax=None, x0=0.): 370 | assert (npts < 269), \ 371 | "Must make npts < 269 for numpy to find quadrature points." 372 | self.npts = npts 373 | self.x0 = float(x0) 374 | self.n = np.arange(npts) 375 | c = np.zeros(npts+1) 376 | c[-1] = 1. 377 | self.x = np.polynomial.hermite.hermroots(c) 378 | if xmax is None: 379 | self.gamma = 1. 380 | else: 381 | assert xmax is None, "Sorry, xmax is currently broken" 382 | self.gamma = self.x.max() / float(xmax) 383 | self.x = self.x0 + self.x / self.gamma 384 | self.w = np.exp(-np.square(self.x)) 385 | self.L = self.x.max() - self.x.min() 386 | self.a = None 387 | self.k_max = None 388 | 389 | def t(self, hc=1., mc2=1.): 390 | """Return the kinetic energy matrix. 391 | Usage: 392 | T = self.t(V) 393 | 394 | @returns T kinetic energy matrix 395 | """ 396 | _i = self.n[:, np.newaxis] 397 | _j = self.n[np.newaxis, :] 398 | _xi = self.x[:, np.newaxis] 399 | _xj = self.x[np.newaxis, :] 400 | with warnings.catch_warnings(): 401 | warnings.simplefilter("ignore") 402 | T = 2.*(-1.)**(_i-_j)/(_xi-_xj)**2. 403 | T[self.n, self.n] = 0. 404 | T += np.diag((2. * self.npts + 1. 405 | - np.square(self.x)) / 3.) 406 | T *= self.gamma 407 | T *= 0.5 * hc**2. / mc2 # (pc)^2 / (2 mc^2) 408 | return T 409 | 410 | # def f(self, x=None): 411 | # """Return the DVR basis vectors""" 412 | # if x is None: 413 | # x_m = self.x[:, np.newaxis] 414 | # else: 415 | # x_m = np.asarray(x)[:, np.newaxis] 416 | # x_n = self.x[np.newaxis, :] 417 | # return np.sinc((x_m-x_n)/self.a)/np.sqrt(self.a) 418 | 419 | class BesselDVR(DVR): 420 | r"""Bessel function basis for non-periodic functions over an interval 421 | `0 ... R` with `npts` points, `dim` dimensions, `lam` angular 422 | momentum number. 423 | Usage: 424 | d = sincDVR1D(npts, R, dim, lam) 425 | 426 | @param[in] npts number of points 427 | @param[in] R max radius 428 | @param[in] dim dimension of the Bessel representation 429 | @param[in] lam angular momentum quantum number 430 | @attribute n vector of domain indices 431 | @attribute z discretized domain 432 | @attribute nu 433 | @attribute K 434 | @attribute r 435 | @method h return hamiltonian matrix 436 | @method f return DVR basis vectors 437 | """ 438 | def __init__(self, npts, R, dim, lam): 439 | assert type(dim) == int, "dim must be an integer." 440 | assert dim > 1, "dim must be 2 or more." 441 | self.npts = npts 442 | self.n = np.arange(npts) 443 | self.R = R 444 | self.dim = dim 445 | self.lam = lam 446 | self.__init_private() 447 | 448 | def __init_private(self): 449 | self.nu = self.lam + self.dim/2. - 1. 450 | self.z = bessel.j_root(nu=self.nu, N=self.npts) 451 | self.K = self.z[-1] / self.R 452 | self.x = self.z / self. K 453 | 454 | def t(self, hc=1., mc2=1.): 455 | """Return the kinetic energy matrix. 456 | Usage: 457 | T = self.t(V) 458 | 459 | @returns T kinetic energy matrix 460 | """ 461 | n = self.npts 462 | nu = self.nu 463 | K = self.K 464 | 465 | _i = self.n[:, np.newaxis] 466 | _j = self.n[np.newaxis, :] 467 | _xi = self.z[:, np.newaxis] 468 | _xj = self.z[np.newaxis, :] 469 | with warnings.catch_warnings(): 470 | warnings.simplefilter("ignore") 471 | T = 8. * K**2. * (-1.)**(_i-_j) * _xi * _xj /(_xi**2. - _xj**2.)**2. 472 | T[self.n, self.n] = 0. 473 | T += np.diag(K**2. / 3. * (1. + 2. * (nu**2. - 1.) / self.z**2.)) 474 | T *= 0.5 * hc**2. / mc2 # (pc)^2 / (2 mc^2) 475 | return T 476 | 477 | class GaussianDVR(DVR): 478 | pass 479 | 480 | class ChebDVR(DVR): 481 | pass 482 | 483 | # Factory functions to build different potentials: 484 | # A factory is a function that makes a function. 485 | class VFactory(object): 486 | """Factory functions to build different potentials 487 | A factory is a function that returns other functions. 488 | """ 489 | def square_well(self, depth = 1., width = 1., 490 | origin = 0., o_val = 0.): 491 | """Usage: 492 | V = square_well_factory(**kwargs) 493 | 494 | Returns a function of a single variable V(x), 495 | representing the square-well potential: 496 | 497 | (-A/2, V0) (A/2, V0) 498 | ------------ + ---------------- 499 | | | 500 | | | 501 | | | 502 | | | 503 | (-A/2, 0) |-------+-------| (A/2, 0) 504 | (0, 0) 505 | 506 | Keyword arguments: 507 | @param[in] depth Depth of the potential well (default=1) 508 | @param[in] width Width of the potential well (default=1) 509 | @param[in] origin Location of the well's center (default=0) 510 | @param[in] o_val Value of the potential at origin (default=0) 511 | @returns V The square well potential function V(x) 512 | """ 513 | def V(x): 514 | interior_idx = np.abs(x - origin) < width / 2. 515 | V = np.ones_like(x) * (depth + o_val) 516 | V[interior_idx] = o_val 517 | return V 518 | return V 519 | 520 | def double_well(self, x1 = -2., x2 = -1., x3 = 1., 521 | x4 = 2., V1 = 1., V2 = 0., 522 | V3 = 1., V4 = 0., V5 = 1.): 523 | """Usage: 524 | V = double_square_well_factory(**kwargs) 525 | 526 | Returns a one-dimensional potential function that represents 527 | a double-square-well potential. The potential looks like 528 | 529 | (x1, V1) (x2, V3) (x3, V3) (x4, V5) 530 | ---------- --------- ---------- 531 | | | | | 532 | | | | | 533 | | | | | 534 | | | | | 535 | |____________| |____________| 536 | (x1, V2) (x2, V2) (x3, V4) (x4, V4) 537 | 538 | Keywork arguments 539 | @param[in] x1 x-coordinate x1 above (default=-2) 540 | @param[in] x2 x-coordinate x2 above (default=-1) 541 | @param[in] x3 x-coordinate x3 above (default=1) 542 | @param[in] x4 x-coordinate x4 above (default=2) 543 | @param[in] V1 constant V1 above (default=1) 544 | @param[in] V2 constant V2 above (default=0) 545 | @param[in] V3 constant V3 above (default=1) 546 | @param[in] V4 constant V4 above (default=0) 547 | @param[in] V5 constant V5 above (default=1) 548 | @returns V double square-well potential V(x) 549 | """ 550 | assert (x1 < x2 < x3 < x4), \ 551 | "x-coordinates do not satisfy x1 < x2 < x3 < x4" 552 | def V(x): 553 | l_well_idx = np.logical_and(x < x2, x > x1) 554 | r_well_idx = np.logical_and(x < x4, x > x3) 555 | middle_idx = np.logical_and(x >= x2, x <= x3) 556 | far_rt_idx = np.greater_equal(x, x4) 557 | V = np.ones_like(x) * V1 558 | V[l_well_idx] = V2 559 | V[middle_idx] = V3 560 | V[r_well_idx] = V4 561 | V[far_rt_idx] = V5 562 | return V 563 | return V 564 | 565 | def sho(self, k = 1., x0 = 0.): 566 | """Usage: 567 | V = harmosc_factory(**kwargs) 568 | 569 | Return a one-dimensional harmonic oscillator potential V(x) 570 | with wavenumber k. i.e. V(x) = 1/2 * k * (x - x0)^2 571 | 572 | Keyword arguments 573 | @param[in] k wavenumber of the SHO potential (default=1) 574 | @param[in] x0 displacement from origin (default=0) 575 | @returns V 1-D SHO potential V(x) 576 | """ 577 | def V(x): return 0.5 * k * np.square(x - x0) 578 | return V 579 | 580 | def power(self, a = 1., p=1., x0 = 0.): 581 | """Usage: 582 | V = self.power(**kwargs) 583 | 584 | Return a potential V(x) = a * (x - x0)^p 585 | 586 | Keyword arguments 587 | @param[in] a coefficient (default=1) 588 | @param[in] p power to raise x (default=1) 589 | @param[in] x0 displacement from origin (default=0) 590 | @returns V 1-D cubic potential V(x) 591 | """ 592 | def V(x): return a * np.power(x - x0, p) 593 | return V 594 | 595 | def morse(self, D = 1., a = 1., x0 = 0.): 596 | """Usage: 597 | V = morse_factory(**kwargs) 598 | 599 | Return a one-dimensional Morse potential V(x) 600 | i.e. V(x) = D * (1 - exp(-a * (x - x0)))^2 - D 601 | 602 | Keyword arguments 603 | @param[in] D dissociation depth 604 | @param[in] a inverse "width" of the potential 605 | @param[in] x0 equilibrium bond distance 606 | @returns V Morse potential V(x) 607 | """ 608 | def V(x): 609 | return D * np.power(1. - np.exp(-a * (x - x0)), 2.) - D 610 | return V 611 | 612 | def sombrero(self, a = -10., b = 1.): 613 | """Usage: 614 | V = sombrero_factory(**kwargs) 615 | 616 | Return a one-dimensional version of the sombrero potential 617 | i.e. V(x) = a * x^2 + b * x^4 618 | This function asserts a < 0 and b > 0 619 | 620 | Keyword arguments 621 | @param[in] a coefficient of the x^2 term (default=-10) 622 | @param[in] b coefficient of the x^4 term (default=1) 623 | @returns V 1-D Mexican hat potential V(x) 624 | """ 625 | assert (a < 0), "Coefficient a must be negative" 626 | assert (b > 0), "Coefficient b must be positive" 627 | def V(x): 628 | return a * np.square(x) + b * np.power(x, 4) 629 | return V 630 | 631 | def woods_saxon(self, V0 = 50., z = 0.5, r0 = 1.2, A = 16): 632 | """Usage: 633 | V = woods_saxon_factory(**kwargs) 634 | 635 | Return a Woods-Saxon potential 636 | i.e. V(r) = - V0 / (1. + exp((r - R) / z)) 637 | where R = r0 * A^(1/3) 638 | 639 | Keyword arguments 640 | @param[in] V0 potential depth (default=50.) 641 | @param[in] z surface thickness (default=0.5) 642 | @param[in] r0 rms nuclear radius (default=1.2) 643 | @param[in] A mass number (default=16) 644 | @returns V Woods-Saxon potential V(r) 645 | """ 646 | def V(r): 647 | x0 = r0 * np.power(A, 1. / 3.) 648 | return -V0 / (1. + np.exp((r - x0)/ z)) 649 | return V 650 | 651 | 652 | if __name__ == '__main__': 653 | dvr = SincDVR(npts=200, L=14) 654 | dvr.test_all() 655 | -------------------------------------------------------------------------------- /dvr_2d.py: -------------------------------------------------------------------------------- 1 | """ 2 | Use a simple Discrete Variable Representation method to solve 3 | one-dimensional potentials. 4 | 5 | A good general introduction to DVR methods is 6 | Light and Carrington, Adv. Chem. Phys. 114, 263 (2000) 7 | """ 8 | 9 | from matplotlib import pyplot as plt 10 | from mpl_toolkits.mplot3d import Axes3D 11 | import numpy as np 12 | import scipy.sparse.linalg as sla 13 | import scipy.sparse as sp 14 | import scipy.special.orthogonal as ortho 15 | import dvr_1d 16 | 17 | # These are the "Tableau 20" colors as RGB. 18 | tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120), 19 | (44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150), 20 | (148, 103, 189), (197, 176, 213), (140, 86, 75), (196, 156, 148), 21 | (227, 119, 194), (247, 182, 210), (127, 127, 127), (199, 199, 199), 22 | (188, 189, 34), (219, 219, 141), (23, 190, 207), (158, 218, 229)] 23 | 24 | # These are the "Tableau 10 Medium" colors as RGB. 25 | tableau10m = [(114, 158, 206), (255, 158, 74), (103, 191, 92), (237, 102, 93), 26 | (173, 139, 201), (168, 120, 110), (237, 151, 202), 27 | (162, 162, 162), (205, 204, 93), (109, 204, 218)] 28 | 29 | # These are the Tableau "Color Blind 10" colors as RGB 30 | colorblind10 = [(0, 107, 164), (255, 128, 14), (171, 171, 171), (89, 89, 89), 31 | (95, 158, 209), (200, 82, 0), (137, 137, 137), (162, 200, 236), 32 | (255, 188, 121), (207, 207, 207)] 33 | 34 | 35 | # Scale the RGB values to [0, 1] range, which is the format matplotlib accepts. 36 | for i in range(len(tableau20)): 37 | r, g, b = tableau20[i] 38 | tableau20[i] = (r / 255., g / 255., b / 255.) 39 | for i in range(len(tableau10m)): 40 | r, g, b = tableau10m[i] 41 | tableau10m[i] = (r / 255., g / 255., b / 255.) 42 | r, g, b = colorblind10[i] 43 | colorblind10[i] = (r / 255., g / 255., b / 255.) 44 | 45 | class DVR(object): 46 | def __cartesian_product(self, arrays): 47 | """A fast cartesion product function that I blatantly stole from 48 | user senderle on stackoverflow.com""" 49 | broadcastable = np.ix_(*arrays) 50 | broadcasted = np.broadcast_arrays(*broadcastable) 51 | rows, cols = reduce(np.multiply, broadcasted[0].shape), len(broadcasted) 52 | out = np.empty(rows * cols, dtype=broadcasted[0].dtype) 53 | start, end = 0, rows 54 | for a in broadcasted: 55 | out[start:end] = a.reshape(-1) 56 | start, end = end, end + rows 57 | return out.reshape(cols, rows).T 58 | 59 | def __init__(self, dvr1d): 60 | self.dvr1d = dvr1d 61 | self.x = dvr1d.x 62 | self.y = dvr1d.x 63 | self.xy = np.fliplr(self.__cartesian_product([self.x, self.y])) 64 | 65 | def v(self, V): 66 | """Return the potential matrix with the given potential. 67 | Usage: 68 | v_matrix = self.v(V) 69 | 70 | @param[in] V potential function 71 | @returns v_matrix potential matrix 72 | """ 73 | return sp.diags(diagonals=V(self.xy), offsets=0) 74 | 75 | def t(self): 76 | """Return the kinetic energy matrix. 77 | Usage: 78 | T = self.t() 79 | 80 | @returns T kinetic energy matrix 81 | """ 82 | t1d = self.dvr1d.t() 83 | eye = sp.identity(self.dvr1d.npts) 84 | return sp.kron(eye, t1d) + sp.kron(t1d, eye) 85 | 86 | def h(self, V): 87 | """Return the hamiltonian matrix with the given potential. 88 | Usage: 89 | H = self.h(V) 90 | 91 | @param[in] V potential function 92 | @returns H potential matrix 93 | """ 94 | return self.t() + self.v(V) 95 | 96 | def plot(self, V, E, U, **kwargs): 97 | doshow = kwargs.get('doshow', False) 98 | nplot = kwargs.get('nplot', 5) 99 | uscale = kwargs.get('uscale', 1.) 100 | xmin = kwargs.get('xmin', self.xy[:,0].min()) 101 | xmax = kwargs.get('xmax', self.xy[:,0].max()) 102 | ymin = kwargs.get('ymin', self.xy[:,1].min()) 103 | ymax = kwargs.get('ymax', self.xy[:,1].max()) 104 | zmin = kwargs.get('zmin', np.ceil(V(self.xy).min() - 1.)) 105 | zmax = kwargs.get('zmax', 106 | np.floor(max(U.max()+E.max()+1., 107 | V(self.xy).max()+1.))) 108 | 109 | npts = self.dvr1d.npts 110 | xy = self.xy.reshape((npts, npts, 2)) 111 | vp = V(self.xy).reshape((npts, npts)) 112 | 113 | colors = tableau20 114 | fig = plt.figure() 115 | ax = fig.add_subplot(111, projection='3d') 116 | 117 | ax.plot_surface(xy[:,:,0], xy[:,:,1], vp, 118 | alpha=0.15, rstride=2, cstride=2) 119 | for i in range(nplot): 120 | if i == 0: 121 | ax.plot_surface(xy[:,:,0], xy[:,:,1], 122 | uscale * abs(U[:, i].reshape((npts, npts))) + E[i], 123 | alpha=0.3, color=colors[i], 124 | rstride=2, cstride=2) 125 | else: 126 | ax.plot_surface(xy[:,:,0], xy[:,:,1], 127 | uscale * U[:, i].reshape((npts, npts)) + E[i], 128 | alpha=0.3, color=colors[i], 129 | rstride=2, cstride=2) 130 | ax.set_xlim3d(xmin, xmax) 131 | ax.set_ylim3d(ymin, ymax) 132 | ax.set_zlim3d(zmin, zmax) 133 | if doshow: plt.show() 134 | return 135 | 136 | def test_potential(self, V, num_eigs = 5, **kwargs): 137 | h = self.h(V) 138 | # Get the eigenpairs 139 | # There are multiple options here. 140 | # If the user is asking for all of the eigenvalues, 141 | # then we need to use np.linalg.eigh() 142 | if num_eigs == h.shape[0]: 143 | E, U = np.linalg.eigh(h) 144 | # But if we don't need all eigenvalues, only the smallest ones, 145 | # then when the size of the H matrix becomes large enough, it is 146 | # better to use sla.eigsh() with a shift-invert method. Here we 147 | # have to have a good guess for the smallest eigenvalue so we 148 | # ask for eigenvalues closest to the minimum of the potential. 149 | else: 150 | E, U = sla.eigsh(h, k=num_eigs, which='LM', 151 | sigma=V(self.xy).min()) 152 | 153 | precision = kwargs.get('precision', 8) 154 | 155 | # Print and plot stuff 156 | print 'The first {n:d} energies are:'.format(n=num_eigs) 157 | print np.array_str(E[:num_eigs], precision=precision) 158 | 159 | doshow = kwargs.get('doshow', False) 160 | if doshow: 161 | uscale = kwargs.get('uscale', 1.) 162 | xmin = kwargs.get('xmin', self.xy[:,0].min()) 163 | xmax = kwargs.get('xmax', self.xy[:,0].max()) 164 | ymin = kwargs.get('ymin', self.xy[:,1].min()) 165 | ymax = kwargs.get('ymax', self.xy[:,1].max()) 166 | zmin = kwargs.get('zmin', np.ceil(V(self.xy).min() - 1.)) 167 | zmax = kwargs.get('zmax', 168 | np.floor(max(U.max()+E.max()+1., 169 | V(self.xy).max()+1.))) 170 | 171 | self.plot(V, E, U, nplot=num_eigs, 172 | xmin=xmin, xmax=xmax, 173 | ymin=ymin, ymax=ymax, 174 | zmin=zmin, zmax=zmax, 175 | uscale=uscale, doshow=doshow) 176 | return E, U 177 | 178 | def sho_test(self, k = 1., num_eigs=5, precision=8, 179 | uscale=1., doshow=False): 180 | print 'Testing 2-D DVR with an SHO potential' 181 | vF = VFactory() 182 | V = vF.sho(k=k) 183 | E, U = self.test_potential(V, doshow=doshow, num_eigs=num_eigs, 184 | precision=precision, uscale=uscale, 185 | xmin=-3.5, xmax=3.5, 186 | ymin=-3.5, ymax=3.5, 187 | zmin=-0.05, zmax=4.) 188 | print 189 | return E, U 190 | 191 | # Factory functions to build different potentials: 192 | # A factory is a function that makes a function. 193 | class VFactory(object): 194 | """Factory functions to build different potentials 195 | A factory is a function that returns other functions. 196 | """ 197 | # def square_well(self, depth = 1., width = 1., 198 | # origin = 0., o_val = 0.): 199 | # """Usage: 200 | # V = square_well_factory(**kwargs) 201 | 202 | # Returns a function of a single variable V(x), 203 | # representing the square-well potential: 204 | 205 | # (-A/2, V0) (A/2, V0) 206 | # ------------ + ---------------- 207 | # | | 208 | # | | 209 | # | | 210 | # | | 211 | # (-A/2, 0) |-------+-------| (A/2, 0) 212 | # (0, 0) 213 | 214 | # Keyword arguments: 215 | # @param[in] depth Depth of the potential well (default=1) 216 | # @param[in] width Width of the potential well (default=1) 217 | # @param[in] origin Location of the well's center (default=0) 218 | # @param[in] o_val Value of the potential at origin (default=0) 219 | # @returns V The square well potential function V(x) 220 | # """ 221 | # def V(x): 222 | # interior_idx = np.abs(x - origin) < width / 2. 223 | # V = np.ones_like(x) * (depth + o_val) 224 | # V[interior_idx] = o_val 225 | # return V 226 | # return V 227 | 228 | # def double_well(self, x1 = -2., x2 = -1., x3 = 1., 229 | # x4 = 2., V1 = 1., V2 = 0., 230 | # V3 = 1., V4 = 0., V5 = 1.): 231 | # """Usage: 232 | # V = double_square_well_factory(**kwargs) 233 | 234 | # Returns a one-dimensional potential function that represents 235 | # a double-square-well potential. The potential looks like 236 | 237 | # (x1, V1) (x2, V3) (x3, V3) (x4, V5) 238 | # ---------- --------- ---------- 239 | # | | | | 240 | # | | | | 241 | # | | | | 242 | # | | | | 243 | # |____________| |____________| 244 | # (x1, V2) (x2, V2) (x3, V4) (x4, V4) 245 | 246 | # Keywork arguments 247 | # @param[in] x1 x-coordinate x1 above (default=-2) 248 | # @param[in] x2 x-coordinate x2 above (default=-1) 249 | # @param[in] x3 x-coordinate x3 above (default=1) 250 | # @param[in] x4 x-coordinate x4 above (default=2) 251 | # @param[in] V1 constant V1 above (default=1) 252 | # @param[in] V2 constant V2 above (default=0) 253 | # @param[in] V3 constant V3 above (default=1) 254 | # @param[in] V4 constant V4 above (default=0) 255 | # @param[in] V5 constant V5 above (default=1) 256 | # @returns V double square-well potential V(x) 257 | # """ 258 | # assert (x1 < x2 < x3 < x4), \ 259 | # "x-coordinates do not satisfy x1 < x2 < x3 < x4" 260 | # def V(x): 261 | # l_well_idx = np.logical_and(x < x2, x > x1) 262 | # r_well_idx = np.logical_and(x < x4, x > x3) 263 | # middle_idx = np.logical_and(x >= x2, x <= x3) 264 | # far_rt_idx = np.greater_equal(x, x4) 265 | # V = np.ones_like(x) * V1 266 | # V[l_well_idx] = V2 267 | # V[middle_idx] = V3 268 | # V[r_well_idx] = V4 269 | # V[far_rt_idx] = V5 270 | # return V 271 | # return V 272 | 273 | def sho(self, k = 1., x0 = 0., y0 = 0.): 274 | """Usage: 275 | V = harmosc_factory(**kwargs) 276 | 277 | Return a two-dimensional harmonic oscillator potential V(x, y) 278 | with wavenumber k. 279 | i.e. V(x, y) = 1/2 * k * ((x - x0)^2 + (y - y0)^2) 280 | 281 | Keyword arguments 282 | @param[in] k wavenumber of the SHO potential (default=1) 283 | @param[in] x0 x-displacement from origin (default=0) 284 | @param[in] y0 y-displacement from origin (default=0) 285 | @returns V 2-D SHO potential V(x) 286 | """ 287 | def V(xy): return 0.5 * k * (np.square(xy[:,0] - x0) 288 | + np.square(xy[:,1] - y0)) 289 | return V 290 | 291 | # def power(self, a = 1., p=1., x0 = 0.): 292 | # """Usage: 293 | # V = self.power(**kwargs) 294 | 295 | # Return a potential V(x) = a * (x - x0)^p 296 | 297 | # Keyword arguments 298 | # @param[in] a coefficient (default=1) 299 | # @param[in] p power to raise x (default=1) 300 | # @param[in] x0 displacement from origin (default=0) 301 | # @returns V 1-D cubic potential V(x) 302 | # """ 303 | # def V(x): return a * np.power(x - x0, p) 304 | # return V 305 | 306 | # def morse(self, D = 1., a = 1., x0 = 0.): 307 | # """Usage: 308 | # V = morse_factory(**kwargs) 309 | 310 | # Return a one-dimensional Morse potential V(x) 311 | # i.e. V(x) = D * (1 - exp(-a * (x - x0)))^2 - D 312 | 313 | # Keyword arguments 314 | # @param[in] D dissociation depth 315 | # @param[in] a inverse "width" of the potential 316 | # @param[in] x0 equilibrium bond distance 317 | # @returns V Morse potential V(x) 318 | # """ 319 | # def V(x): 320 | # return D * np.power(1. - np.exp(-a * (x - x0)), 2.) - D 321 | # return V 322 | 323 | # def sombrero(self, a = -10., b = 1.): 324 | # """Usage: 325 | # V = sombrero_factory(**kwargs) 326 | 327 | # Return a one-dimensional version of the sombrero potential 328 | # i.e. V(x) = a * x^2 + b * x^4 329 | # This function asserts a < 0 and b > 0 330 | 331 | # Keyword arguments 332 | # @param[in] a coefficient of the x^2 term (default=-10) 333 | # @param[in] b coefficient of the x^4 term (default=1) 334 | # @returns V 1-D Mexican hat potential V(x) 335 | # """ 336 | # assert (a < 0), "Coefficient a must be negative" 337 | # assert (b > 0), "Coefficient b must be positive" 338 | # def V(x): 339 | # return a * np.square(x) + b * np.power(x, 4) 340 | # return V 341 | 342 | # def woods_saxon(self, V0 = 50., z = 0.5, r0 = 1.2, A = 16): 343 | # """Usage: 344 | # V = woods_saxon_factory(**kwargs) 345 | 346 | # Return a Woods-Saxon potential 347 | # i.e. V(r) = - V0 / (1. + exp((r - R) / z)) 348 | # where R = r0 * A^(1/3) 349 | 350 | # Keyword arguments 351 | # @param[in] V0 potential depth (default=50.) 352 | # @param[in] z surface thickness (default=0.5) 353 | # @param[in] r0 rms nuclear radius (default=1.2) 354 | # @param[in] A mass number (default=16) 355 | # @returns V Woods-Saxon potential V(r) 356 | # """ 357 | # def V(r): 358 | # x0 = r0 * np.power(A, 1. / 3.) 359 | # return -V0 / (1. + np.exp((r - x0)/ z)) 360 | # return V 361 | 362 | -------------------------------------------------------------------------------- /dvr_3d.py: -------------------------------------------------------------------------------- 1 | """ 2 | Use a simple Discrete Variable Representation method to solve 3 | one-dimensional potentials. 4 | 5 | A good general introduction to DVR methods is 6 | Light and Carrington, Adv. Chem. Phys. 114, 263 (2000) 7 | """ 8 | 9 | from matplotlib import pyplot as plt 10 | from mpl_toolkits.mplot3d import Axes3D 11 | import numpy as np 12 | import scipy.sparse.linalg as sla 13 | import scipy.sparse as sp 14 | import scipy.special.orthogonal as ortho 15 | import dvr_1d 16 | 17 | # These are the "Tableau 20" colors as RGB. 18 | tableau20 = [(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120), 19 | (44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150), 20 | (148, 103, 189), (197, 176, 213), (140, 86, 75), (196, 156, 148), 21 | (227, 119, 194), (247, 182, 210), (127, 127, 127), (199, 199, 199), 22 | (188, 189, 34), (219, 219, 141), (23, 190, 207), (158, 218, 229)] 23 | 24 | # These are the "Tableau 10 Medium" colors as RGB. 25 | tableau10m = [(114, 158, 206), (255, 158, 74), (103, 191, 92), (237, 102, 93), 26 | (173, 139, 201), (168, 120, 110), (237, 151, 202), 27 | (162, 162, 162), (205, 204, 93), (109, 204, 218)] 28 | 29 | # These are the Tableau "Color Blind 10" colors as RGB 30 | colorblind10 = [(0, 107, 164), (255, 128, 14), (171, 171, 171), (89, 89, 89), 31 | (95, 158, 209), (200, 82, 0), (137, 137, 137), (162, 200, 236), 32 | (255, 188, 121), (207, 207, 207)] 33 | 34 | 35 | # Scale the RGB values to [0, 1] range, which is the format matplotlib accepts. 36 | for i in range(len(tableau20)): 37 | r, g, b = tableau20[i] 38 | tableau20[i] = (r / 255., g / 255., b / 255.) 39 | for i in range(len(tableau10m)): 40 | r, g, b = tableau10m[i] 41 | tableau10m[i] = (r / 255., g / 255., b / 255.) 42 | r, g, b = colorblind10[i] 43 | colorblind10[i] = (r / 255., g / 255., b / 255.) 44 | 45 | class DVR(object): 46 | def __cartesian_product(self, arrays): 47 | """A fast cartesion product function that I blatantly stole from 48 | user senderle on stackoverflow.com""" 49 | broadcastable = np.ix_(*arrays) 50 | broadcasted = np.broadcast_arrays(*broadcastable) 51 | rows, cols = reduce(np.multiply, broadcasted[0].shape), len(broadcasted) 52 | out = np.empty(rows * cols, dtype=broadcasted[0].dtype) 53 | start, end = 0, rows 54 | for a in broadcasted: 55 | out[start:end] = a.reshape(-1) 56 | start, end = end, end + rows 57 | return out.reshape(cols, rows).T 58 | 59 | def __init__(self, dvr1d, spf='csr'): 60 | self.dvr1d = dvr1d 61 | self.x = dvr1d.x 62 | self.y = dvr1d.x 63 | self.z = dvr1d.x 64 | self.xyz = np.fliplr(self.__cartesian_product([self.x, self.y, self.z])) 65 | self.spf = spf 66 | 67 | def v(self, V): 68 | """Return the potential matrix with the given potential. 69 | Usage: 70 | v_matrix = self.v(V) 71 | 72 | @param[in] V potential function 73 | @returns v_matrix potential matrix 74 | """ 75 | return sp.diags(diagonals=V(self.xyz), offsets=0, format=self.spf) 76 | 77 | def t(self): 78 | """Return the kinetic energy matrix. 79 | Usage: 80 | T = self.t() 81 | 82 | @returns T kinetic energy matrix 83 | """ 84 | t1d = self.dvr1d.t() 85 | eye = sp.identity(self.dvr1d.npts, format=self.spf) 86 | t2d = sp.kron(eye, t1d, format=self.spf) + sp.kron(t1d, eye, format=self.spf) 87 | return sp.kron(t2d, eye, format=self.spf) + sp.kron(eye, sp.kron(eye, t1d), format=self.spf) 88 | 89 | def h(self, V): 90 | """Return the hamiltonian matrix with the given potential. 91 | Usage: 92 | H = self.h(V) 93 | 94 | @param[in] V potential function 95 | @returns H potential matrix 96 | """ 97 | return self.t() + self.v(V) 98 | 99 | def plot(self, V, E, U, **kwargs): 100 | assert False, "plotting not yet implemented for 3D-DVR" 101 | pass 102 | 103 | def test_potential(self, V, num_eigs = 5, **kwargs): 104 | h = self.h(V) 105 | # Get the eigenpairs 106 | # There are multiple options here. 107 | # If the user is asking for all of the eigenvalues, 108 | # or if for some reason they want to use np.eigh 109 | # then we need to use np.linalg.eigh() 110 | do_full_eig = kwargs.get('do_full_eig', False) 111 | if do_full_eig or (num_eigs == h.shape[0]): 112 | print h.ndim 113 | print len(h.shape) 114 | E, U = np.linalg.eigh(h) 115 | # But if we don't need all eigenvalues, only the smallest ones, 116 | # then when the size of the H matrix becomes large enough, it is 117 | # better to use sla.eigsh() with a shift-invert method. Here we 118 | # have to have a good guess for the smallest eigenvalue so we 119 | # ask for eigenvalues closest to the minimum of the potential. 120 | else: 121 | E, U = sla.eigsh(h, k=num_eigs, which='LM', 122 | sigma=V(self.xyz).min()) 123 | 124 | precision = kwargs.get('precision', 8) 125 | 126 | # Print and plot stuff 127 | print 'The first {n:d} energies are:'.format(n=num_eigs) 128 | print np.array_str(E[:num_eigs], precision=precision) 129 | 130 | doshow = kwargs.get('doshow', False) 131 | assert doshow==False, \ 132 | 'Plotting is not yet implemented. Please use doshow=False' 133 | if doshow: 134 | uscale = kwargs.get('uscale', 1.) 135 | xmin = kwargs.get('xmin', self.xyz[:,0].min()) 136 | xmax = kwargs.get('xmax', self.xyz[:,0].max()) 137 | ymin = kwargs.get('ymin', self.xyz[:,1].min()) 138 | ymax = kwargs.get('ymax', self.xyz[:,1].max()) 139 | zmin = kwargs.get('zmin', np.ceil(V(self.xyz).min() - 1.)) 140 | zmax = kwargs.get('zmax', 141 | np.floor(max(U.max()+E.max()+1., 142 | V(self.xyz).max()+1.))) 143 | 144 | self.plot(V, E, U, nplot=num_eigs, 145 | xmin=xmin, xmax=xmax, 146 | ymin=ymin, ymax=ymax, 147 | zmin=zmin, zmax=zmax, 148 | uscale=uscale, doshow=doshow) 149 | return E, U 150 | 151 | def sho_test(self, k = 1., num_eigs=5, precision=8, 152 | uscale=1., doshow=False, do_full_eig=False): 153 | print 'Testing 3-D DVR with an SHO potential' 154 | vF = VFactory() 155 | V = vF.sho(k=k) 156 | E, U = self.test_potential(V, doshow=doshow, num_eigs=num_eigs, 157 | precision=precision, uscale=uscale, 158 | do_full_eig=do_full_eig, 159 | xmin=-3.5, xmax=3.5, 160 | ymin=-3.5, ymax=3.5, 161 | zmin=-0.05, zmax=4.) 162 | print 163 | return E, U 164 | 165 | # Factory functions to build different potentials: 166 | # A factory is a function that makes a function. 167 | class VFactory(object): 168 | """Factory functions to build different potentials 169 | A factory is a function that returns other functions. 170 | """ 171 | # def square_well(self, depth = 1., width = 1., 172 | # origin = 0., o_val = 0.): 173 | # """Usage: 174 | # V = square_well_factory(**kwargs) 175 | 176 | # Returns a function of a single variable V(x), 177 | # representing the square-well potential: 178 | 179 | # (-A/2, V0) (A/2, V0) 180 | # ------------ + ---------------- 181 | # | | 182 | # | | 183 | # | | 184 | # | | 185 | # (-A/2, 0) |-------+-------| (A/2, 0) 186 | # (0, 0) 187 | 188 | # Keyword arguments: 189 | # @param[in] depth Depth of the potential well (default=1) 190 | # @param[in] width Width of the potential well (default=1) 191 | # @param[in] origin Location of the well's center (default=0) 192 | # @param[in] o_val Value of the potential at origin (default=0) 193 | # @returns V The square well potential function V(x) 194 | # """ 195 | # def V(x): 196 | # interior_idx = np.abs(x - origin) < width / 2. 197 | # V = np.ones_like(x) * (depth + o_val) 198 | # V[interior_idx] = o_val 199 | # return V 200 | # return V 201 | 202 | # def double_well(self, x1 = -2., x2 = -1., x3 = 1., 203 | # x4 = 2., V1 = 1., V2 = 0., 204 | # V3 = 1., V4 = 0., V5 = 1.): 205 | # """Usage: 206 | # V = double_square_well_factory(**kwargs) 207 | 208 | # Returns a one-dimensional potential function that represents 209 | # a double-square-well potential. The potential looks like 210 | 211 | # (x1, V1) (x2, V3) (x3, V3) (x4, V5) 212 | # ---------- --------- ---------- 213 | # | | | | 214 | # | | | | 215 | # | | | | 216 | # | | | | 217 | # |____________| |____________| 218 | # (x1, V2) (x2, V2) (x3, V4) (x4, V4) 219 | 220 | # Keywork arguments 221 | # @param[in] x1 x-coordinate x1 above (default=-2) 222 | # @param[in] x2 x-coordinate x2 above (default=-1) 223 | # @param[in] x3 x-coordinate x3 above (default=1) 224 | # @param[in] x4 x-coordinate x4 above (default=2) 225 | # @param[in] V1 constant V1 above (default=1) 226 | # @param[in] V2 constant V2 above (default=0) 227 | # @param[in] V3 constant V3 above (default=1) 228 | # @param[in] V4 constant V4 above (default=0) 229 | # @param[in] V5 constant V5 above (default=1) 230 | # @returns V double square-well potential V(x) 231 | # """ 232 | # assert (x1 < x2 < x3 < x4), \ 233 | # "x-coordinates do not satisfy x1 < x2 < x3 < x4" 234 | # def V(x): 235 | # l_well_idx = np.logical_and(x < x2, x > x1) 236 | # r_well_idx = np.logical_and(x < x4, x > x3) 237 | # middle_idx = np.logical_and(x >= x2, x <= x3) 238 | # far_rt_idx = np.greater_equal(x, x4) 239 | # V = np.ones_like(x) * V1 240 | # V[l_well_idx] = V2 241 | # V[middle_idx] = V3 242 | # V[r_well_idx] = V4 243 | # V[far_rt_idx] = V5 244 | # return V 245 | # return V 246 | 247 | def sho(self, k = 1., x0 = 0., y0 = 0., z0 = 0.): 248 | """Usage: 249 | V = harmosc_factory(**kwargs) 250 | 251 | Return a two-dimensional harmonic oscillator potential V(x, y) 252 | with wavenumber k. 253 | i.e. V(x, y) = 1/2 * k * ((x - x0)^2 + (y - y0)^2) 254 | 255 | Keyword arguments 256 | @param[in] k wavenumber of the SHO potential (default=1) 257 | @param[in] x0 x-displacement from origin (default=0) 258 | @param[in] y0 y-displacement from origin (default=0) 259 | @param[in] z0 z-displacement from origin (default=0) 260 | @returns V 2-D SHO potential V(x) 261 | """ 262 | def V(xyz): return 0.5 * k * (np.square(xyz[:,0] - x0) 263 | + np.square(xyz[:,1] - y0) 264 | + np.square(xyz[:,2] - z0)) 265 | return V 266 | 267 | # def power(self, a = 1., p=1., x0 = 0.): 268 | # """Usage: 269 | # V = self.power(**kwargs) 270 | 271 | # Return a potential V(x) = a * (x - x0)^p 272 | 273 | # Keyword arguments 274 | # @param[in] a coefficient (default=1) 275 | # @param[in] p power to raise x (default=1) 276 | # @param[in] x0 displacement from origin (default=0) 277 | # @returns V 1-D cubic potential V(x) 278 | # """ 279 | # def V(x): return a * np.power(x - x0, p) 280 | # return V 281 | 282 | # def morse(self, D = 1., a = 1., x0 = 0.): 283 | # """Usage: 284 | # V = morse_factory(**kwargs) 285 | 286 | # Return a one-dimensional Morse potential V(x) 287 | # i.e. V(x) = D * (1 - exp(-a * (x - x0)))^2 - D 288 | 289 | # Keyword arguments 290 | # @param[in] D dissociation depth 291 | # @param[in] a inverse "width" of the potential 292 | # @param[in] x0 equilibrium bond distance 293 | # @returns V Morse potential V(x) 294 | # """ 295 | # def V(x): 296 | # return D * np.power(1. - np.exp(-a * (x - x0)), 2.) - D 297 | # return V 298 | 299 | # def sombrero(self, a = -10., b = 1.): 300 | # """Usage: 301 | # V = sombrero_factory(**kwargs) 302 | 303 | # Return a one-dimensional version of the sombrero potential 304 | # i.e. V(x) = a * x^2 + b * x^4 305 | # This function asserts a < 0 and b > 0 306 | 307 | # Keyword arguments 308 | # @param[in] a coefficient of the x^2 term (default=-10) 309 | # @param[in] b coefficient of the x^4 term (default=1) 310 | # @returns V 1-D Mexican hat potential V(x) 311 | # """ 312 | # assert (a < 0), "Coefficient a must be negative" 313 | # assert (b > 0), "Coefficient b must be positive" 314 | # def V(x): 315 | # return a * np.square(x) + b * np.power(x, 4) 316 | # return V 317 | 318 | # def woods_saxon(self, V0 = 50., z = 0.5, r0 = 1.2, A = 16): 319 | # """Usage: 320 | # V = woods_saxon_factory(**kwargs) 321 | 322 | # Return a Woods-Saxon potential 323 | # i.e. V(r) = - V0 / (1. + exp((r - R) / z)) 324 | # where R = r0 * A^(1/3) 325 | 326 | # Keyword arguments 327 | # @param[in] V0 potential depth (default=50.) 328 | # @param[in] z surface thickness (default=0.5) 329 | # @param[in] r0 rms nuclear radius (default=1.2) 330 | # @param[in] A mass number (default=16) 331 | # @returns V Woods-Saxon potential V(r) 332 | # """ 333 | # def V(r): 334 | # x0 = r0 * np.power(A, 1. / 3.) 335 | # return -V0 / (1. + np.exp((r - x0)/ z)) 336 | # return V 337 | 338 | -------------------------------------------------------------------------------- /gpe.py: -------------------------------------------------------------------------------- 1 | import dvr_1d 2 | import numpy as np 3 | from scipy.optimize import newton_krylov 4 | import scipy as sp 5 | 6 | class GPESolver(object): 7 | ''' 8 | Problem with Gross-Pitaevskii Equation 9 | ''' 10 | def __init__(self, v_trap, g=-1.0, N=1.0, npts=100, R=10.0, dim=3, lam=0.0): 11 | self.npts = npts 12 | self.R = float(R) 13 | self.dim = int(dim) 14 | self.lam = lam 15 | self.basis = dvr_1d.BesselDVR(npts=npts, R=R, dim=dim, lam=lam); 16 | self.g = float(g) # Intensity of the interaction coupling constant! 17 | self.N = float(N) # particle number! 18 | self.v_trap = v_trap 19 | 20 | @property 21 | def v(self): 22 | return self.v_trap(self.basis.x) 23 | 24 | @property 25 | def metric(self): 26 | if self.dim == 2: 27 | return 2.*np.pi*self.basis.x 28 | if self.dim == 3: 29 | return 4.*np.pi*self.basis.x**2. 30 | 31 | def bracket(self, a, b): 32 | # a, b are radial wave function like vectors! 33 | metric = self.metric 34 | return np.trapz(a*b*metric/self.basis.x**(self.dim-1.), self.basis.x) 35 | 36 | def normalize(self,y): 37 | # normalize the wavefunctions! 38 | # y is radial wf! 39 | return y * np.sqrt(self.N) / np.sqrt(self.bracket(y,y)) 40 | 41 | def get_mu(self,y): 42 | # get chemical potential of a given wave functions! 43 | Hy = self.get_Hy(y) 44 | mu = self.bracket(Hy,y)/self.bracket(y,y) 45 | return mu 46 | 47 | def get_Hy(self,y): 48 | # y is radial wave function 49 | # y should be normalized before using! 50 | T = self.basis.t(); 51 | Hy= np.dot(T,y) + self.v*y+ self.g*y**2./self.basis.x**(self.dim-1)*y 52 | return Hy 53 | 54 | def get_energy(self, y): 55 | # calculate the total energy 56 | # y is radial wave functions! 57 | psi = y/self.basis.x**((self.dim-1.)/2.); # get the actual wf! 58 | T = self.basis.t(); 59 | E_kin = self.bracket(y, np.dot(T,y)) # Caculate Kinetic energy(total) 60 | e_ext = self.v*abs(psi)**2. # external potential energy 61 | e_int = 1./2.*self.g*abs(psi)**4. # interaction energy 62 | #----calculate the total energy 63 | E_total = np.trapz((e_ext+e_int)*self.metric, self.basis.x) + E_kin; 64 | return E_total 65 | 66 | def get_psi(self,y): 67 | # return the actual wave function! 68 | return y/self.basis.x**((self.dim-1.)/2.) 69 | 70 | def solve(self, xin=None): 71 | ''' 72 | input: 73 | N: particle number 74 | g: intensity of the interations 75 | ######### 76 | output: 77 | y: the radial wave function 78 | mu: the chemical potential 79 | ''' 80 | r = self.basis.x 81 | 82 | def get_dy(_y): 83 | y = self.normalize(_y) 84 | dy = self.get_Hy(y) 85 | mu = self.get_mu(y) 86 | dy -= mu*y 87 | return dy 88 | 89 | if xin is None: # initial guess for the radial wave function 90 | xin = np.sqrt(self.N)*np.exp(-r**2)*r**((self.dim-1)/2) 91 | y = newton_krylov(get_dy, xin) 92 | mu = self.get_mu(y); 93 | y = self.normalize(y) 94 | return y, mu 95 | 96 | if __name__=="__main__": 97 | import matplotlib.pyplot as plt 98 | 99 | def v_trap(r): 100 | return 0.5 * r**2. 101 | 102 | p = GPESolver(v_trap=v_trap, g=1., N=1., npts=100, R=10.0, dim=3, lam=0.) 103 | y, mu = p.solve() 104 | psi = p.get_psi(y) 105 | plt.plot(p.basis.x, p.get_psi(y)) 106 | print 'mu = ', mu 107 | 108 | -------------------------------------------------------------------------------- /gpe_demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "%matplotlib inline\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "import numpy as np" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": { 20 | "collapsed": false 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "%load_ext autoreload\n", 25 | "%autoreload 1\n", 26 | "%aimport gpe" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 3, 32 | "metadata": { 33 | "collapsed": true 34 | }, 35 | "outputs": [], 36 | "source": [ 37 | "def v_trap(r):\n", 38 | " return 0.5 * r**2." 39 | ] 40 | }, 41 | { 42 | "cell_type": "code", 43 | "execution_count": 27, 44 | "metadata": { 45 | "collapsed": false 46 | }, 47 | "outputs": [ 48 | { 49 | "name": "stdout", 50 | "output_type": "stream", 51 | "text": [ 52 | "i = 0 mu = +1.0000\n", 53 | "i = 1 mu = +0.3643\n", 54 | "i = 2 mu = -1.0093\n", 55 | "i = 3 mu = -4.3186\n", 56 | "i = 4 mu = -13.0963\n", 57 | "i = 5 mu = -26.3703\n", 58 | "i = 6 mu = -2211.3258\n" 59 | ] 60 | }, 61 | { 62 | "data": { 63 | "image/png": [ 64 | "iVBORw0KGgoAAAANSUhEUgAAAtUAAAGhCAYAAACu6EghAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 65 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlYVeXa+PHvYhbYyEYGUVFQQwUVcMwZ5zlDCyJzSOuU\n", 66 | "No+eMhVTK7PfsdLXypNvoZGecrbUytTIzEQRDE05mjEoKAYySrD3Xr8/fNm5ZZB5g9yf61rXBWs9\n", 67 | "61n3WmwWN8++97MUVVVVhBBCCCGEENVmYe4AhBBCCCGEaOwkqRZCCCGEEKKGJKkWQgghhBCihiSp\n", 68 | "FkIIIYQQooYkqRZCCCGEEKKGJKkWQgghhBCihiSpFuI2tm/fzuDBg/Hw8MDe3h5vb29CQkL45ptv\n", 69 | "qtzXzJkz8fHxqVYcERERHDhwoFb7rEvvvvsu27Ztq9U+P/30Uz755JMy11tYWPD777/X6vHKcvXq\n", 70 | "VebPn0+3bt3QaDQ0a9aMjh07MnPmTKKjo+v8+LXh4MGDWFhYGBd7e3v8/f1ZsmQJhYWFAPzxxx9Y\n", 71 | "WFiwfv16437lXf+Gytvbm2nTplXYJiIiAgsL0z+FFhYWvP766xXud+s1vHXJycmpcfw11djuGUI0\n", 72 | "dlbmDkCIhuz999/n2WefZfbs2cybNw8HBwfOnTvH119/zYEDBxg9enSV+1QUpVqxvP7667z22msM\n", 73 | "HTrUZP3ChQvJzc2tVp916d1332Xw4MGEhITUWp+ffvoper2ehx9+uNb6rIqEhARGjx6Noig8+eST\n", 74 | "9OrVC2tra86cOcNnn31GcHAwly9fxs3NzSzxVdWqVavo3bs3BQUF7N27l8WLF3Pu3DkiIyNp1aoV\n", 75 | "R44coX379sb25r7+VaUoym1/3x599FHGjRtnsu7IkSO0adOmUscouYa3cnR0rHygdaSx3TOEaOwk\n", 76 | "qRaiAu+88w4hISH8+9//Nq4LDg7mkUceobrPTarJ85bK2vfmpKehuZOeLVVcXMzkyZPRaDT89NNP\n", 77 | "tGjRwrhtyJAhPPbYY2zatAkrq4pvq0VFRdjY2NR1uJXSpUsX+vTpA9x4XWdkZPDJJ5/w3nvv4ezs\n", 78 | "bNx2J2vdujWtW7c2WVeV8775GjZEje2eIURjJuUfQlQgKysLDw+PMrfdOgJ29OhRRowYgUajwdHR\n", 79 | "kREjRhATE1Nh/yVvId9aNlBSzpCcnAxgfHt62bJlxreXS96eLuut3LS0NKZPn46bmxt2dnYEBAQQ\n", 80 | "FRVV5jF++eUXpk6dSvPmzWndujXPPPMMf/31l7GdTqdjwYIFdOjQgWbNmuHm5sagQYP46aefyj0v\n", 81 | "b29vkpOTiYqKMsY7a9Ys4/a9e/fSr18/7O3tcXZ2JiQkhMTExAqvVXBwMNHR0fz000/GPocNG2bS\n", 82 | "JiMjo8JzASgoKGDevHn4+Phga2tL+/bteeONN277D8CWLVs4d+4cy5cvN0mob/bAAw+g1WpNYh40\n", 83 | "aBC7du0iKCgIOzs7PvjgA6Byr5eYmBhGjhyJq6sr9vb2dOjQgSeeeMK4PT09nRkzZtC6dWvs7Oxo\n", 84 | "1aoVEydOJCMjo8JzKU/Pnj0BOHfuXKnyj4quf0ZGBo899hidOnXCwcGBtm3bMnXqVC5dulTqGPHx\n", 85 | "8dxzzz24uLhgb2/PwIEDOXTokHH7ihUrsLW1JTMzs9S+fn5+3HvvvUD1Xpd6vZ5//OMfNG/enP37\n", 86 | "9wPll38sXry4KpeuQidOnGDQoEE0a9aMNm3asHTpUhYtWmRy3JLrHRkZabJvWfeIb7/9lnHjxtGq\n", 87 | "VSscHBzo1q0b//rXvzAYDCbnAOa5ZwjRVMlItRAV6NOnD5GRkbRv355JkyZx1113ldnu5MmTDBky\n", 88 | "hK5duxr/KL711lsMGTKEI0eO0L179xrF8fPPP9OvXz8efvhhHnvsMQCTt6dvTvDz8/MZMmQI2dnZ\n", 89 | "vPnmm3h5ebFhwwamTZtGQUEBjz76qEnf06ZN48EHH2Tbtm0cPnyYiIgItFotERERACxfvpx3332X\n", 90 | "N954g8DAQLKzszl+/DhZWVnlxrt9+3bGjRtHYGCgsZ+Skoi9e/cyfvx4RowYwRdffEFubi4LFy5k\n", 91 | "4MCBxMXF0apVqzL7/OCDD3jooYcwGAx89NFHADg5OVXpXHQ6HaNHj+a3335j4cKFdOvWjZ9//pkl\n", 92 | "S5aQmZnJO++8U+45ff/991hZWTFmzJhy29xKURQSExN55plnWLhwIe3bt0er1Vbq9ZKXl8fo0aO5\n", 93 | "++67iYyMRKPRcOHCBX7++WeT801JSeGdd97By8uL9PR09u/fT0FBQaVjvFlJTbqzs3OpbRVd/6ys\n", 94 | "LGxtbVm2bBkeHh6kpaXxzjvvMGDAAM6cOYOtrS0AsbGxDBo0iJ49e/Lxxx/TrFkzPvzwQ0aMGMHh\n", 95 | "w4fp0aMHU6dO5ZVXXuE///kPc+bMMR7/+PHjnDlzhmXLlgHlvy7LSsYBrl+/Tnh4OL/88gs//PAD\n", 96 | "gYGBJj+nW1W2TEuv16PT6Urta2lpCdyowR82bBitWrVi/fr12NjYsGLFCpKTk6t93AsXLjBs2DCe\n", 97 | "fPJJHBwciImJISIigoyMDN58803AvPcMIZosVQhRrsTERLV79+6qoiiqoiiqq6urGh4ern777bcm\n", 98 | "7aZMmaJqtVo1OzvbuC4nJ0d1cXFRJ0+ebFw3Y8YM1dvb2/j9gQMHVEVR1B9++MGkv08++URVFEVN\n", 99 | "SkoyrlMURV2wYEGpGG/tc9WqVWX2OWLECNXd3V01GAwmx4iIiDBpN2HCBNXX19f4/fjx49UpU6aU\n", 100 | "f5HK4e3trU6bNq3U+p49e6q+vr6qXq83rrtw4YJqbW2tPv/88xX2OWTIEHXQoEGl1lf2XNavX68q\n", 101 | "iqL++OOPJu2WLVum2tjYqFeuXCn32GPGjFFbtWpVar1er1eLi4uNy63xWlhYqPHx8SbrK/N6iYmJ\n", 102 | "URVFUX/99ddyY3J0dFRXrVpV7vbylLzuvv32W7W4uFjNzs5Wv/zyS9XBwUHt0aOHqqo3fiaKoqiR\n", 103 | "kZEm51PW9b+VTqdTk5OTVUVR1G3bthnXDxs2TPXz8zO5Tnq9Xu3SpYt67733GteNHDlS7devn0mf\n", 104 | "zzzzjOri4qIWFRWpqlq512W7du3UadOmqZmZmeqAAQPUjh07qr///rtJm0WLFqmKopisUxRFXbx4\n", 105 | "cYV9l1zDspZu3boZ27366quqra2tmpqaalyXn5+vtmjRQrWwsDCuK+t633ycW3+fSxgMBrW4uFhd\n", 106 | "unSpqtVqS52HOe4ZQjRVUv4hRAXuuusuTpw4wQ8//MD8+fMJDAxk27ZtjB492jhiBhAdHc2ECRNM\n", 107 | "Rk41Gg333HMPP/zwQ73GHB0dTZs2bRg8eLDJ+qlTp5KRkcHp06dN1o8fP97k+65duxrLTuDGaP3X\n", 108 | "X3/Na6+9xqFDhygqKqp2bPn5+Zw4cYKwsDCTt769vb0ZMGBAja/V7c5l7969tGvXjn79+qHT6YzL\n", 109 | "yJEjKS4u5siRIxX2r5ZRIjJu3DhsbGyMy7p160y2+/j4lHqnojKvl7vuugtnZ2f+8Y9/EBUVRUpK\n", 110 | "Sqlj9+7dm7fffpv333+fX3/9tVR8JaOoJcutRo8ejY2NDc7OzoSGhjJ8+HC2b99e4TUozwcffEBA\n", 111 | "QAAajQZra2vatWsHYCzruX79OtHR0dx///0AxpgMBgPDhw83KW+YPn06R44c4fz588a2GzduJDQ0\n", 112 | "FGtra6Byr0tFUbh48SIDBw6ksLCQw4cP1/qsF2vWrOHYsWMmy3/+8x/j9p9//pm7777bpG7b3t6e\n", 113 | "iRMnVvszB2lpaTz22GO0a9cOW1tbbGxsWLBgAdnZ2Vy5cqXK/dX2PUOIpkqSaiFuw8LCgkGDBrFk\n", 114 | "yRK+++47fv/9d7p168bixYvJzs4Gbrz97enpWWpfDw+PCssk6kJmZmaZsbRs2dK4/WYuLi4m39va\n", 115 | "2prUR7766qssXryYnTt3MnjwYFxdXZk1axZ//vlnlWPLyspCVdU6u1a3O5crV66QlJSEtbW1SSLc\n", 116 | "t29fFEUpt3QAbrx1fvXq1VK1o6tXr+bYsWPs3LkTKP32fVnnWpnXS/PmzTlw4ACtWrVi7ty5tGvX\n", 117 | "jm7durF161Zj+//85z/cc889vP322wQEBNCmTRuWLFliTNY6dOhgcp43T48HfyeEp06dIj8/nx07\n", 118 | "duDl5VXuNSjPqlWreOKJJxg1ahTbtm0jJibG+A9KyRR9mZmZ6PV6Xn/9dZOYbGxs+J//+R+uXbtm\n", 119 | "7G/y5Mk4ODiwYcMG4EYNcUZGBtOnTze2qczrUlVVTp48yW+//UZoaGidzMri6+tLjx49TJYuXboY\n", 120 | "t6elpZX5uYzyPqtxOwaDgXvuuYfdu3ezcOFCDhw4wLFjx5g/fz6qqhqvd1XU9j1DiKZKaqqFqCJP\n", 121 | "T09mz57Ns88+y3//+1969eqFi4sLaWlppdqmp6eX+gN0Mzs7O4BSo2zVSVhLuLi4lPmhv/T0dOP2\n", 122 | "qrCysuLll1/m5Zdf5sqVK+zatYvnn3+egoICNm3aVKW+tFotiqIYY7k1vqrGVlWurq74+Pjw5Zdf\n", 123 | "lrm9ZHS1LMOHD2fdunXs2bPH+GE5gI4dOwLlX9eyamQr+3oJCAhg8+bNGAwGYmJiePPNNwkNDSU+\n", 124 | "Ph5/f3/c3NxYvXo1q1ev5r///S+ffvopixYtws3Njccff5yvvvrK5LXl7e1tcryShLCmNm3axIgR\n", 125 | "I1ixYoVx3YULF0zaODs7Y2FhwZNPPmmSHJfF3t6ekJAQoqKiiIiI4LPPPqNDhw7069fP2KYyr0tF\n", 126 | "URg7dizdu3dn3rx52NnZ8fTTT9f4fKuiVatWZb7eL1++bPJ9Ze8F58+f5/jx43z22Wc8+OCDxvU7\n", 127 | "duyodoy1fc8QoqmSkWohKlBW4gNw5swZ4O+RnCFDhrB7927y8vKMbXJzc9m1axfBwcEm+96cZJUk\n", 128 | "cb/++qtJm6+//rpUMmZjY8P169fLjOfmtsHBwaSmpnL48GGTNp9//jkeHh74+fmV2UdluLu7M3v2\n", 129 | "bIYPH86pU6cqbGtra1vqA3MODg707NmTL774wmSmgqSkJA4fPlzqWlWmz6oYM2YMKSkpODg4lBpd\n", 130 | "7NGjR7mzegBMmTKFDh06MG/ePK5evVrtGKBqrxe48W5J3759ef311zEYDMbX383uuusuli1bhlar\n", 131 | "Nf5sunbtanJ+NU2Oyrv+169fLzWV4K0PiXFwcGDQoEHExcURFBRU5vW/2fTp0zl//jzffvstO3bs\n", 132 | "4KGHHio3rtu9Ll988UXeeecdnn32Wd59992qnHKN9evXjyNHjpCammpcl5+fz65du0x+bz08PLC1\n", 133 | "tS3zXnCzkut/8/UuLi4mKiqqQd4zhGhKZKRaiAp07dqVkSNHMm7cOLy9vcnJyWH37t189NFHhIWF\n", 134 | "GT9Nv2DBAr766iuGDx/OvHnzgBuzExQWFrJw4UKTPm+uo/T09GTIkCG8+eabuLq64ubmxmeffcaF\n", 135 | "CxdK1Vv6+fnx1VdfMXr0aJydnWndurXxLdub286cOZP33nuPyZMns2zZMlq3bk1UVBT79u1j7dq1\n", 136 | "VX74zKRJkwgMDCQoKAitVsuJEyf45ptvePzxxyvcz8/Pjx9//JGvv/4aDw8P3NzcaNeuHUuWLGH8\n", 137 | "+PFMmDCBOXPmkJeXx6JFi9BqtbzwwgsV9unv78+aNWv44osvaN++PU5OTvj6+lb6XKZOnconn3zC\n", 138 | "8OHDeeGFF+jevTtFRUWcP3+eXbt2sX37dpo1a1bmvtbW1mzdupXRo0cTGBjIE088Qa9evbCxsSE9\n", 139 | "PZ0tW7agKAoajcZkv7LqZivzevnqq69Yu3YtISEheHt7k5+fz/vvv4+TkxP9+vUjOzubESNG8NBD\n", 140 | "D9GpUyesra3ZsWMHWVlZjBo1qtLXpCrKu/5jxoxh+fLlvPnmm/Tu3Zv9+/ezZcuWUvv/61//YvDg\n", 141 | "wYwePZrZs2fTsmVLrl69SmxsLAaDwThzBdx4Z6BVq1bMmjWL69evl3oyYmVelzdf++eeew5LS0ue\n", 142 | "e+45DAYDzz//fK1ck9OnT2Nvb19qfffu3bG3t+e5555jzZo1jBo1ioiICOPsH/b29iblToqiEBYW\n", 143 | "xrp16/D19cXX15evv/661OcM/Pz8aNeuHfPnz8fS0hIrKytWrlyJoigN5p4hRJNljk9HCtFYfPjh\n", 144 | "h+o999yjtmvXTrWzszPOjrBixYpSMz388ssv6ogRI1RHR0fVwcFBHTFihBoTE2PSZubMmaqPj4/J\n", 145 | "utTUVHXixImqs7Oz2rJlS3X+/Pnqxx9/rFpYWJjM/vHTTz+pPXv2VO3s7ExmJyirz7S0NHXatGmq\n", 146 | "q6uramtrqwYEBKhRUVEmbT755BPVwsJCPX/+vMn6iIgIk1kJ/t//+3/q3XffrbZo0UJt1qyZ2rlz\n", 147 | "Z3Xx4sWqTqer8NqdOXNGHTRokGpvb68qiqI+/PDDxm179+5V+/XrpzZr1kxt3ry5eu+996qJiYkV\n", 148 | "9qeqqpqenq6OGzdO1Wg0qqIo6tChQ6t0LqqqqoWFhWpERITauXNn1dbWVnVxcVH79OlTqXNSVVXN\n", 149 | "yMhQX3nlFbVr166qvb29amdnp3bo0EGdOXNmqVlFgoODy50t43avl7Nnz6phYWGqj4+Pamdnp7q5\n", 150 | "uanjx49Xjx49qqqqqv7111/qY489pvr7+6uOjo6qk5OT2qdPH3Xjxo23PYcDBw6oFhYW6vfff19u\n", 151 | "m7Jmoyjv+l+/fl2dM2eO6ubmpmo0GnXixInG/W+dReO3335TH3jgAdXd3V21tbVV27Rpo06aNEnd\n", 152 | "s2dPqRheeuklVVEUdcCAAaW2VeZ1WdYMNP/zP/+jWlhYqCtWrFBV9cbsH7e+Rioz+8fBgwfLnf3D\n", 153 | "wsJCPX78uLFtbGysOmjQINXOzk5t06aNunTp0jJnHbl27Zrx99bFxUWdM2eO+vXXX6sWFhYmM3PE\n", 154 | "xcWpAwcOVO3t7VUvLy910aJFDeqeIURTpajqHfTIMyGEEKIRiIiIMJbzCCHuDFJTLYQQQgghRA1J\n", 155 | "Ui2EEELUM0VRpFZZiDuMlH8IIYQQQghRQzJSLYQQQgghRA1JUi2EEEIIIUQNSVIthBBCCCFEDUlS\n", 156 | "LYQQQgghRA1JUi2EEEIIIUQNSVIthBBCCCFEDUlSLYQQQgghRA1JUi2EEEIIIUQNSVIthBBCCCFE\n", 157 | "DUlSLYQQQgghRA1JUi2EEEIIIUQNSVIthBBCCCFEDUlSLYQQQgghRA1JUi2EEEIIIUQNNYik+tq1\n", 158 | "a9x333106dIFPz8/jhw5Yu6QhBBCAHq9nqCgICZOnAhAREQEbdq0ISgoiKCgIPbu3WvmCIUQomGw\n", 159 | "MncAAM888wzjxo1j8+bN6HQ68vPzzR2SEEII4L333sPPz4/c3FwAFEXh+eef5/nnnzdzZEII0bCY\n", 160 | "faQ6OzubH3/8kVmzZgFgZWVF8+bNzRyVEEKI1NRUdu/ezSOPPIKqqgCoqmr8WgghxN/MnlRfuHAB\n", 161 | "Nzc3Hn74YXr06MGjjz5KQUGBucMSQogm77nnnmPFihVYWPz9p0JRFFatWkVAQACzZ8/m2rVrZoxQ\n", 162 | "CCEaENXMYmJiVCsrK/Xo0aOqqqrqM888oy5YsMCkDSCLLLLI0qiXxmbXrl3q3LlzVVVV1QMHDqgT\n", 163 | "JkxQVVVVL1++rBoMBtVgMKjz589XZ82aVeb+5r7essgiiyw1WarD7CPVbdq0oU2bNvTu3RuA++67\n", 164 | "j9jY2FLt1P97y1GWyi2LFi0yewyNaZHrJderLpfG6PDhw+zcuRMfHx/Cw8PZv38/06dPx93dHUVR\n", 165 | "UBSFRx55hKNHj5bbh7mve2Na5HdKrpdcr4azVJfZk+qWLVvi5eVFYmIiAPv27cPf39/MUQkhRNP2\n", 166 | "xhtvkJKSwoULF9i0aRPDhg1j/fr1pKWlGdts27aNbt26mTFKIYRoOBrE7B+rVq1i6tSpFBUV0aFD\n", 167 | "Bz755BNzhySEEOL/qKqKoigAvPzyy8THx6MoCj4+Pnz00Udmjk4IIRqGBpFUBwQEEBMTY+4w7ijB\n", 168 | "wcHmDqFRketVNXK9mpbg4GDjz3zDhg3mDeYOJb9TVSPXq2rketUPRa1J8Ug9URSlRjUuQghhTk3x\n", 169 | "HtYUz1kIcWeo7v2rQYxUCyGEEEI0FSXlVML8avOff0mqhRBCCCHqmbyTY361/c+N2Wf/EEIIIYQQ\n", 170 | "orGTpFoIIYQQQogakqRaCCGEEEKIGpKkWgghhBBCiBqSpFoIIYQQQogakqRaCCGEEELUmczMTEJC\n", 171 | "QnB0dMTb25uNGzdW2H7lypV4enrSvHlzZs+eTVFRUaX7+v777+ncuTMODg4MGzaM5OTkOjmnskhS\n", 172 | "LYQQQggh6swTTzyBnZ0dV65cISoqijlz5nD69Oky237zzTcsX76c/fv3k5SUxO+//86iRYsq1dfV\n", 173 | "q1eZMmUKy5YtIysri169ehEWFlYv5wjyREUhhKhzTfEepigKOp2OI0eO0LJlSzp06GDukIRoMBry\n", 174 | "PSE2NpbZs2dz/vx5xowZg6Io+Pr6smTJkmr1l5+fj4uLC6dOnaJjx44AzJgxg1atWvHmm2+Wav/g\n", 175 | "gw/Svn17li5dCsCBAwd48MEHSUtLu21fa9euZf369Rw6dAiAgoICXF1diYuLw9fXt9Sxyvs5VPfn\n", 176 | "IyPVQggh6kTr1q0ZOHAgPXv25I8//jB3OEI0CopSe0tVFRUVERISwqxZs8jKyiI8PJzt27ejKAop\n", 177 | "KSk4Ozuj1WrLXDZt2lRmn4mJiVhZWRmTYICAgABOnTpVZvvTp08TEBBg/L579+5cvnyZrKys2/Z1\n", 178 | "6tQpk33t7e3p2LEjCQkJVb8Y1SBPVBRCCFEnLl++jIODA9nZ2UybNo0DBw5gZSV/doRoqI4cOYJe\n", 179 | "r+epp54CICQkhD59+gDg5eXFtWvXqtxnXl4eTk5OJus0Gg25ubnltm/evLnx+5J9c3Nzb9tXXl4e\n", 180 | "7u7uJtudnJzIy8urctzVISPVQggh6kRsbCx//PEHnp6eHDp0iLffftvcIQnR4Klq7S1VdenSJVq3\n", 181 | "bm2yzsvLq0qlEGPHjkWj0aDRaNi4cSOOjo7k5OSYtMnOzkaj0ZS5/63ts7OzgRvJc3l9lSTaGo2m\n", 182 | "SseqbZJUCyGEqBNBQUG4urry6aefArB8+fJSf/CEEA2Hp6cnFy9eNFmXnJxsLP9wdHQ0Jsy3LiWz\n", 183 | "cOzZs4fc3Fxyc3MJDw/H19cXnU7HuXPnjH3Gx8fTtWvXMmPw9/cnLi7OpK2Hhwdarbbcvvz9/Y37\n", 184 | "xsfHG7fl5+dz/vx54/a6Jkm1EEKIOjVq1CgGDx5MTk4OH3/8sbnDEUKUo3///lhaWrJ69Wp0Oh07\n", 185 | "duwgJiYGuDFinZeXZ0yYb13Cw8PL7NPBwYHJkyezcOFCCgoKOHToELt27WLatGlltp8+fTrr1q3j\n", 186 | "t99+IysriyVLlvDwww9Xqq+QkBASEhLYunUrhYWFLF68mMDAwDI/pFgXJKkWQghR51588UUA3n33\n", 187 | "XYqLi80cjRCiLNbW1mzdupV169ah1WqJiopiwoQJ2NjY1KjfNWvWcP36ddzd3XnooYf48MMP6dKl\n", 188 | "C3BjJFyj0ZCamgrA6NGjefnllxk6dCje3t506NCBxYsXV6ovV1dXtmzZwvz583FxceHYsWPlfoCy\n", 189 | "LsiUekIIUcea4j3s1nM2GAz4+flx9uxZoqKiePDBB80YnRDm1ZjuCX379mXu3LnMmDHD3KHUOplS\n", 190 | "TwghRKNjYWHBs88+C8D//u//mjkaIUR5oqOjSU9PR6fTERkZSUJCAmPGjDF3WI2CJNVCCCHqRVhY\n", 191 | "GNbW1uzfv5+0tDRzhyOEKMPZs2cJDAxEq9WycuVKNm/ejIeHh7nDahSk/EMIIepYU7yHlXfO9957\n", 192 | "Lzt27ODdd9/lmWeeMUNkQphfU7wnNERS/iGEEKLRKpkhoGT6LSGEuFPISLUQQtSxpngPK++cCwoK\n", 193 | "cHd3N84f2759ezNEJ4R5NcV7QkMkI9VCCCEaLXt7eyZNmgTAli1bzByNEELUHkmqhRBC1KuSpHr3\n", 194 | "7t1mjkQIIWqPlH8IIUQda4r3sIrOOSsrCzc3NxRF4erVqzRv3ryeoxPCvJriPaEhkvIPIYQQjZpW\n", 195 | "q6V///7odDr27dtn7nCEEKJWSFIthBCi3o0bNw6QEhAhmoLMzExCQkJwdHTE29u7wtl/Pv30Uywt\n", 196 | "LdFoNMYlOjrauN3R0dFkm5WVFU8//TQAf/zxBxYWFibbly1bVufnV8Kq3o4khBCi0dHr9fTq1Ys2\n", 197 | "bdqwa9cuMjMzCQsLIykpCW9vb7744gucnZ2r3O+4ceN45ZVX2L17N6qqoihKHUQvhGgInnjiCezs\n", 198 | "7Lhy5QonTpxg/PjxBAQE4OfnV2b7AQMGmCTSN8vLyzN+nZ+fT8uWLQkNDTVpk5OTY5Z7ioxUCyGE\n", 199 | "KNd7772Hn5+f8Q/UW2+9xciRI0lMTGT48OG89dZb1eq3W7dutG7dmvT0dOLi4mozZCFEDcTGxhIU\n", 200 | "FISTkxOhoaGEhYWxYMGCaveXn5/P1q1bWbJkCfb29gwYMIBJkyaxYcOGcvepbD1zydMeBw4caLLe\n", 201 | "YDBUO96akKRaCCFEmVJTU9m9ezePPPKI8Y/czp07mTFjBgAzZsxg+/bt1epbURRGjRoFwIEDB2on\n", 202 | "YCHuAMpipdaWqioqKiIkJIRZs2aRlZVFeHg427dvR1EUUlJScHZ2RqvVlrls2rSpzD4TExOxsrKi\n", 203 | "Y8eOxnUBAQGcOnWq7PNXFE6cOIGbmxudOnVi6dKl6PX6MttGRkYyffr0UuvbtWuHl5cXs2bN4s8/\n", 204 | "/6zydaguSaqFEEKU6bnnnmPFihVYWPz9p+Ly5ct4eHgA4OHhweXLl6vdf3BwMCBJtRANxZEjR9Dr\n", 205 | "9Tz11FNYWloSEhJCnz59APDy8uLatWtkZWWVuTzwwANl9pmXl4eTk5PJOo1GQ25ubpntBw8ezKlT\n", 206 | "p8jIyGDLli1s3LiRFStWlGqXlJREdHS08Z98ADc3N44dO0ZycjLHjx8nNzeXqVOnVvdyVJnUVAsh\n", 207 | "hCjlq6++wt3dnaCgIA4ePFhmG0VRKqxbjIiIMH4dHBxsTKJvXgcQHR2NXq/H0tKyhlEL0fipi8w3\n", 208 | "1d6lS5do3bq1yTovL68qTS83duxYDh06BMDatWvp3LkzOTk5Jm2ys7PRaDRl7u/j42P8umvXrixc\n", 209 | "uJAVK1azyHLjAAAgAElEQVTwz3/+06Tdhg0bGDRoEO3atTOuc3BwoEePHgC4u7uzevVqPD09yc/P\n", 210 | "x8HBodyYDx48WO59riokqRZCCFHK4cOH2blzJ7t376awsJCcnBymTZuGh4cH6enptGzZkrS0NNzd\n", 211 | "3cvt4+akuixt27alffv2/P7775w4cYJevXrV8lkIIarC09OTixcvmqxLTk6mY8eOpKSk0KVLl3L/\n", 212 | "kV67di3h4eHs2bPHZH1+fj46nY5z584ZS0Di4+Pp2rVrpeMqK6lfv349r776aqX2v12N9a3/9C9e\n", 213 | "vLjSsd1Myj+EEEKU8sYbb5CSksKFCxfYtGkTw4YNY8OGDdxzzz1ERkYCN+oZ77333hodZ+jQoQC1\n", 214 | "MkokhKiZ/v37Y2lpyerVq9HpdOzYsYOYmBjgxoh1Xl4eubm5ZS7h4eFl9ung4MDkyZNZuHAhBQUF\n", 215 | "HDp0iF27djFt2rQy2+/Zs8dYVnbmzBmWLl1a6j5z+PBhLl26xP3332+y/ujRo5w9exaDwcCff/7J\n", 216 | "008/zdChQ8sdFa9tklQLIYS4rZLRqX/+85989913+Pr6sn///lJvyVaV1FUL0XBYW1uzdetW1q1b\n", 217 | "h1arJSoqigkTJmBjY1OjftesWcP169dxd3fnoYce4sMPP6RLly7AjZFwjUZDamoqAPv37ycgIABH\n", 218 | "R0fGjx/PlClTSo1Ir1+/nilTppQq6fj9998ZO3YsTk5OdOvWjWbNmlU4J3Ztk8eUCyFEHWuK97DK\n", 219 | "nvPFixdp06YNGo2GzMxMrKykKlHc+RrTPaFv377MnTvX5AOBdwp5TLkQQog7RuvWrenQoQO5ubmc\n", 220 | "PHnS3OEI0eRFR0eTnp6OTqcjMjKShIQExowZY+6wGgVJqoUQQpjVgAEDgBt1kkII8zp79iyBgYFo\n", 221 | "tVpWrlxpfMCKuD1JqoUQQphV//79AUmqhWgIHn30UdLT08nNzSUuLo6xY8eaO6RGQ5JqIYQQZiVJ\n", 222 | "tRDiTiAfVBRCiDrWFO9hVTlnvV6Pi4sLOTk5pKamlnr4hBB3mqZ4T2iI5IOKQggh7iiWlpbcfffd\n", 223 | "gIxWCyEaL0mqhRBCmJ2UgAghGjtJqoUQQphdSVL9008/mTkSIYSoHqmpFkKIOtYU72FVPeecnBya\n", 224 | "N2+OtbU1ubm52Nra1mF0QphXU7wnNERNuqbaYCjmypXNXL/+h7lDEUIIUYucnJzo1KkTxcXFJCQk\n", 225 | "mDscIUQtWr16Nb169cLOzo6HH3640vsNHz4cCwsLDAaDcd1DDz2Ep6cnTk5OtG/fnmXLlhm3RUVF\n", 226 | "odFojIuDgwMWFhacOHGiVs+nPA0mqfb29qZ79+4EBQXRp0+fUttzcmI4frwXp0/fT0yMH8nJb2Mw\n", 227 | "6MwQqRBCiLrQu3dvAGJiYswciRCiNrVu3ZoFCxYwa9asSu8TFRWFTqdDURST9a+88goXLlwgJyeH\n", 228 | "PXv2sGrVKvbu3QvA1KlTyc3NNS5r1qyhQ4cOBAUF1er5lKfBJNWKonDw4EFOnDjB0aNHS22Pjb2b\n", 229 | "/PyTWFm1wGC4zu+/z+PMmWmoqqGM3oQQQjQ2vXr1AuDYsWNmjkSIpis2NpagoCCcnJwIDQ0lLCyM\n", 230 | "BQsW1KjPkJAQJk2aRIsWLSrVPjs7m9dff5233367VBmGv78/dnZ2xu+trKxwd3cvs59PP/2U6dOn\n", 231 | "Vz/wKmowSTVQYf2KRtMLL6+X6Ncvme7d92JpqeHKlU2cO/ec1CUJIcQdQJJqIQBFqb2lioqKiggJ\n", 232 | "CWHWrFlkZWURHh7O9u3bURSFlJQUnJ2d0Wq1ZS6bNm26bf+VzddeffVV5s6dW+7j0efOnYuDgwP+\n", 233 | "/v689tpr9OjRo1SbpKQkfvzxx6aZVCuKwogRI+jVqxf//ve/S20PCjpEhw5vY2lpj4vLaLp23Y6i\n", 234 | "2HDx4vukp/+vGSIWQghRmwIDA7GwsCAhIYHr16+bOxwhmpwjR46g1+t56qmnsLS0JCQkxFiS6+Xl\n", 235 | "xbVr18jKyipzeeCBB27b/62lHGU5duwYP//8M0899VS5bdasWUNeXh779u3jtddeK7PCYf369Qwe\n", 236 | "PJh27drd9pi1xarejnQbP/30E56enmRkZDBy5Eg6d+7MoEGDjNtff/3vQvTg4GCCg4fRqdO/OXNm\n", 237 | "BufOPYuz83CaNfM2Q+RCCGHq4MGDHDx40NxhNDoODg74+fmRkJBAfHy88YEwQjQpZnz3/dKlS6We\n", 238 | "aOrl5VWlioCxY8dy6NAhANauXUt4eLhx2+36MRgMzJ07l3fffRcLi7/HfcuboSM4OJj777+fjRs3\n", 239 | "lvo83vr163nttdcqHXdtaDBJtaenJwBubm6EhIRw9OhRk6Q6IiKi1D4eHtO4enUnV69u4ezZWQQE\n", 240 | "7ENRGszguxCiibrxj3+w8fvFixebL5hGplevXiQkJHDs2DFJqoWoZ56enly8eNFkXXJyMh07diQl\n", 241 | "JYUuXbqUO9pckkDv2bOn3P5vN1Kdk5PD8ePHCQsLA0Cv1wPQpk0bNm/ezIABA0rtU1xcXKpW+6ef\n", 242 | "fiItLY377ruvwuPVtgaRgRYUFJCbmwtAfn4+3377Ld26dbvtfoqi4Ov7AdbWbly7doArV25fzyOE\n", 243 | "EKLhKqmrlhlAhKh//fv3x9LSktWrV6PT6dixY4fxd9HLy4u8vDyT2TVuXm4ekb6VXq+nsLAQnU6H\n", 244 | "Xq/nr7/+MibMN3N2diYtLY34+Hji4+PZvXs3cOPDk3369CEjI4NNmzaRn5+PXq/nm2++4csvv2TS\n", 245 | "pEkm/URGRnLffffh4OBQi1fn9hpEUn358mUGDRpEYGAgffv2ZcKECYwaNapS+9rYuNG+/VsA/P77\n", 246 | "K+j1hXUZqhBCiDpUMq2efFhRiPpnbW3N1q1bWbduHVqtlqioKCZMmICNjU2N+l2yZAn29vYsX76c\n", 247 | "zz77jGbNmhnnl05OTkaj0ZCamgqAu7u7cXF1dUVRFDw8PLC2tkZRFD788EPatGlDixYtWLBgARs2\n", 248 | "bDDeNwAKCwv58ssvmTFjRo1iro474omKqqrn2LEg8vN/pX375bRt+3I9RieEEBVrik9Pq+45FxYW\n", 249 | "otFo0Ov15OTk4OjoWAfRCWFejeme0LdvX+bOnWuWJLWuNeknKpZHUSzp0OEdAJKS3kCnyzZzREII\n", 250 | "IarDzs6Obt26oapqvT0FTQjxt+joaNLT09HpdERGRpKQkMCYMWPMHVajcEck1QAuLqNwdg5Gr8/m\n", 251 | "4sU15g5HCCFENcl81UKYz9mzZwkMDESr1bJy5Uo2b95c7nzRwtQdk1QDtG37KgCpqSvR6wvMHI0Q\n", 252 | "QojqkKRaCPN59NFHSU9PJzc3l7i4OMaOHWvukBqNOyqp1mpH4OjYk+LiDNLS5IEwQgjRGElSLYRo\n", 253 | "jO6opFpRFNq1Kxmt/heqWnq6FiGEEA1b165dsbGxITExkWvXrpk7HCGEqJQ7KqkGcHWdhJ2dD4WF\n", 254 | "F/jzz/InIBdCCNEw2djYEBgYCNyYn1YIIRqDOy6pVhRLWrWaA8ClS/9j5miEEEJUhzwERgjR2Nxx\n", 255 | "STWAp+csLCzsyMzcS0HBf80djhBCiCrq2bMnAHFxcWaORAghKueOTKqtrVvg7n7jcZmXLn1g5miE\n", 256 | "EEJUVUn5hyTVQojG4o5MqgFjCcjlyxswGIrMHI0QQjQ+hYWF9O3bl8DAQPz8/HjllVcAiIiIoE2b\n", 257 | "NgQFBREUFMTevXtr/dh+fn5YWVlx9uxZ8vPza71/IUT9KCoqYvbs2Xh7e+Pk5HTbe8amTZvo3Lkz\n", 258 | "zZs3x9XVlcmTJ3Pp0qUq9/X6669jYWHB/v376+S8ynLHJtUaTS/s7f0pLr7Kn39+be5whBCi0bGz\n", 259 | "s+PAgQPExcVx8uRJDhw4wKFDh1AUheeff54TJ05w4sSJOnnamp2dHV26dEFVVRISEmq9fyFE/dDp\n", 260 | "dLRt25bo6GhycnJYunQpoaGhJCUlldl+wIABREdHk52dTVJSEvb29jz//PNV6uv8+fNs3ryZVq1a\n", 261 | "1fn53eyOTaoVRcHT82EA0tM/MXM0QgjRONnb2wM3Roj0ej1arRYAVVXr/NgBAQGAlIAIUZ9iY2MJ\n", 262 | "CgrCycmJ0NBQwsLCWLBgQbX7s7e3Z9GiRbRt2xaA8ePH4+PjU+7MPl5eXri7uwM37jOWlpZ4enpW\n", 263 | "qa8nn3yS5cuXY21tXe24q+OOTaoBPDweAiz588/d/PVXurnDEUKIRsdgMBAYGIiHhwdDhw7F398f\n", 264 | "gFWrVhEQEMDs2bPrbC5pqasWTZFy8GCtLVVVVFRESEgIs2bNIisri/DwcLZv346iKKSkpODs7IxW\n", 265 | "qy1z2bRpU6WOcfnyZRITE433krIcOnQIZ2dnnJycSE5OZvny5ZXu68svv8TOzs4sT4K0qvcj1iMb\n", 266 | "Gw9atJjAn3/u4MqVKLy8XjB3SEII0ahYWFgQFxdHdnY2o0eP5uDBg8yZM4eFCxcCsGDBAl544QXW\n", 267 | "rVtXat+IiAjj18HBwQQHB1fp2JJUC1G/jhw5gl6v56mnngIgJCSEPn36ADdGkGv6D3RxcTFTp05l\n", 268 | "5syZ+Pr6lttu4MCBXLt2jUuXLjFz5kxeeukl3nvvvdv2lZuby/z589m3b1+V4jp48CAHq/FPyK0U\n", 269 | "tT7ew6shRVGq/VZjRsZWTp2agqNjD3r1Ol7LkQkhxO3V5B7WkCxZsoRmzZrx4osvGtf98ccfTJw4\n", 270 | "kV9//dWkbW2c89WrV3Fzc8Pe3p6cnBwsLS1r1J8QDUVDvSds2rSJlStX8ssvvxjXPfjgg3To0IEl\n", 271 | "S5ZUqo+xY8dy6NAhANauXUt4+I3Z2AwGAw8++CB5eXns2LGj0r/Pv/zyC2PGjCErK8u4rry+Xnjh\n", 272 | "BZydnY3lKj4+Pnz88ccMHz68zL7L+zlU9+dzR5d/ALi4jMPS0om8vFgKCs6aOxwhhGg0rl69ahyZ\n", 273 | "un79Ot999x1BQUGkp/9dTrdt2za6detWJ8d3dXWlTZs2FBQUcO7cuTo5hhDib56enly8eNFkXXJy\n", 274 | "srH8w9HREY1GU+ayceNGAPbs2UNubi65ubnGhFpVVWbPnk1GRgZbtmyp0j/IxcXFxs923K6v/fv3\n", 275 | "8/777+Pp6YmnpycpKSmEhoayYsWKmlyWSrujyz8ALC3tcHObTHr6p1y+vBEfnwhzhySEEI1CWloa\n", 276 | "M2bMwGAwYDAYmDZtGsOHD2f69OnExcWhKAo+Pj589NFHdRZDYGAgqampxMXF0alTpzo7jhAC+vfv\n", 277 | "j6WlJatXr+bxxx/n66+/JiYmhmHDhuHl5UVeXl61+p0zZw5nzpxh37592NraVtj2888/Z9CgQXh5\n", 278 | "eZGUlMT8+fOZMmVKpfr6/vvv0el0wI3ku3fv3qxcubJOZigqyx0/Ug0YHwRz5crGBvl2ixBCNETd\n", 279 | "unUjNjbWOKXeSy+9BMD69es5efIk8fHxbN++HQ8PjzqLQeqqhag/1tbWbN26lXXr1qHVaomKimLC\n", 280 | "hAnY2NhUu8+kpCTWrl1LfHw8LVu2LDWynZycjEajITU1FYDTp0/Tv39/HB0dCQ4Opl+/frz99tuV\n", 281 | "6svFxQV3d3fc3d3x8PDA0tISrVaLg4NDDa9M5dzxNdUABoOOn39uTXHxFXr2PIZG07MWoxNCiIo1\n", 282 | "1PrJulRb57xlyxbuu+8+xo4dy+7du2shMiHMrzHdE/r27cvcuXOZMWOGuUOpdVJTXQ0WFla4ud0H\n", 283 | "QEbGFjNHI4QQorJkpFqI+hUdHU16ejo6nY7IyEgSEhLqrXyisWsSSTWAm9tkAK5e3WbmSIQQQlSW\n", 284 | "j48PGo2GtLQ0Ll++bO5whLjjnT17lsDAQLRaLStXrmTz5s11WuJ1J2kS5R8ABkMxhw+3RKfLpHfv\n", 285 | "0zg4dKml6IQQomKN6a3e2lKb5zxo0CAOHTrEN998w6hRo2qlTyHMqSneExoiKf+oJgsLa1q0mAjI\n", 286 | "aLUQQjQmUgIihGgMmkxSDVICIoQQjZEk1UKIxqBJJdVa7UgsLBzIzT1GYWGyucMRQghRCZJUCyEa\n", 287 | "gyaVVFtaNqNFi7EAXL263czRCCGEqAx/f38sLS05e/YsBQUF5g5HCCHK1KSSagBX1xAAMjK2mjkS\n", 288 | "IYQQlWFnZ0fnzp0xGAwkJCSYOxwhhChTk0uqW7QYj6JYk539I0VFGeYORwghRCUEBAQAEB8fb+ZI\n", 289 | "hBCibE0uqbayao5WOwIw8OefO80djhBCiEooSapPnjxp5kiEEFVRVFTE7Nmz8fb2xsnJiaCgIPbu\n", 290 | "3Vtu+8cff9z4+HGNRoOdnR1OTk7G7ampqUycOJEWLVrg6enJU089hV6vN27//vvv6dy5Mw4ODgwb\n", 291 | "Nozk5Pr7DF2TS6rh5hIQmQVECCEaAxmpFqJx0ul0tG3blujoaHJycli6dCmhoaEkJSWV2f7DDz8k\n", 292 | "NzfXuISHhxMaGmrc/vTTT+Pq6kpaWhpxcXH88MMPrFmzBoCrV68yZcoUli1bRlZWFr169SIsLKxe\n", 293 | "zhOabFI9CVDIyvoOnS7P3OEIIYS4je7duwM3RqrloRlC1J3Y2FiCgoJwcnIiNDSUsLAwFixYUO3+\n", 294 | "7O3tWbRoEW3btgVg/Pjx+Pj4EBsbe9t98/Pz2bJlCzNmzDCuO3XqFGFhYdjY2ODh4cGYMWM4ffo0\n", 295 | "AFu3bqVr165MmTIFGxsbIiIiiI+PJzExsdrxV4VVvRylgbGxccfJqS85OUe4dm0/rq73mDskIYQQ\n", 296 | "FWjZsiVubm5kZGSQlJSEt7e3uUMSok4cVA7WWl/BanCV2hcVFRESEsKLL77I3Llz2blzJw888ADz\n", 297 | "5s0jJSWFbt26oShKmft+8MEHPPDAA7c9xuXLl0lMTMTf3/+2bbds2YK7uzuDBg0yrhs9ejSff/45\n", 298 | "Q4YMITMzkz179rB06VLgRsJd8q4W3EjoO3bsSEJCAr6+vrc9Xk01yZFqABeX8QD8+efXZo5ECCHE\n", 299 | "7SiKInXVQtSxI0eOoNfreeqpp7C0tCQkJIQ+ffoA4OXlxbVr18jKyipzqUxCXVxczNSpU5k5c2al\n", 300 | "ktzIyEimT59usi4iIoKEhAScnJzw8vKid+/eTJo0Cbgxsn1z/TWAk5MTeXn1U5XQJEeq4cYsIH/8\n", 301 | "sYDMzN2oqlruf15CCCEahu7du7Nv3z7i4+O55x55h1Hcmao6ulybLl26ROvWrU3WeXl5VankauzY\n", 302 | "sRw6dAiAtWvXEh4eDoDBYGDatGnY2dmxevXq2/aTnJzMDz/8wLp164zrVFVl9OjR3H///fzyyy/k\n", 303 | "5uYya9Ys5s2bx/Lly3F0dCQnJ8ekn+zsbDQaTaXjr4kmO1Lt6BiIjY0nf/2VSn6+jHoIIURDJx9W\n", 304 | "FKJueXp6cvHiRZN1ycnJKIpCSkoKjo6OJjNz3Lxs3LgRgD179ph8yBBuJMOzZ88mIyODLVu2YGlp\n", 305 | "edtYNmzYwMCBA01Kva5evcrx48d58sknsba2xsXFhZkzZ7J7927gxoOibr4/5Ofnc/78+UqVmtSG\n", 306 | "JptUK4qCi8s4QEpAhBCiMZDyDyHqVv/+/bG0tGT16tXodDp27NhBTEwMcGPEOi8vz2Rmjltn6SjP\n", 307 | "nDlzOHPmDDt37sTW1rZSsaxfv56ZM2earHN1dcXT05MPPvgAvV7PtWvXiIyMNN4b7r33XhISEti6\n", 308 | "dSuFhYUsXryYwMDAeqmnhiacVMONEhCQpFoIIRqDLl26YGVlxblz58jPzzd3OELccaytrdm6dSvr\n", 309 | "1q1Dq9USFRXFhAkTsLGxqXafSUlJrF27lvj4eFq2bFlqZDs5ORmNRkNqaqpxn59//plLly5x//33\n", 310 | "m/SlKApbt25l165duLq6ctddd2Fra8vKlSsBcHNzY8uWLcyfPx8XFxeOHTvGpk2bqh17VSlqI5ib\n", 311 | "SFGUOplCSafL5aefWqCqegYMuIK1dYtaP4YQQtTVPawhq6tz7t69O7/++is///wzd999d633L0R9\n", 312 | "aEz3hL59+zJ37lyTae3uFOX9HKr782nSI9VWVhqcnYcABjIzvzF3OEIIIW5D6qqFqFvR0dGkp6ej\n", 313 | "0+mIjIwkISGBMWPGmDusRqFJJ9WA1FULIUQjInXVQtSts2fPEhgYiFarZeXKlWzevBkPDw9zh9Uo\n", 314 | "NOnyD4CCgkSOHu2ElZULAwZcQVFu/4lUIYSoisb0Vm9tqatz/u677xg1ahQDBgwwTtslRGPTFO8J\n", 315 | "DZGUf9Qye3tfmjXriE6XSU7OEXOHI4QQogI3P67cYDCYORohhPhbk0+qQZ6uKIQQjYWHhwceHh7k\n", 316 | "5uaSlJRk7nCEEMJIkmqgRYuxAPJhRSGEaATkw4pCiIZIkmqgefPBWFjYkZcXS1HRFXOHI4QQogIl\n", 317 | "JSCSVAshGhJJqgFLy2Y0bz4YgKysfWaORgghREVkpFoI0RA1mKRar9cTFBTExIkTzXJ8F5dRgJSA\n", 318 | "CCEEQGFhIX379iUwMBA/Pz9eeeUVADIzMxk5ciS+vr6MGjWKa9eu1XtsMq2eEKIhajBJ9XvvvYef\n", 319 | "nx+Kopjl+FrtaACysr6VaW6EEE2enZ0dBw4cIC4ujpMnT3LgwAEOHTrEW2+9xciRI0lMTGT48OG8\n", 320 | "9dZb9R5b586dsba25vz58+Tm5tb78YUQlVdUVMTs2bPx9vbGycmJoKAg9u7dW+E+S5YswcvLC2dn\n", 321 | "Z4YOHcrp06eN2xwdHY2POtdoNFhZWfH0008bt2/fvh1/f3+cnJzw9/dnx44ddXZut2oQSXVqaiq7\n", 322 | "d+/mkUceMVtC6+Dgj41NK4qK0snP/9UsMQghRENib28P3PijqNfr0Wq17Ny50/i44hkzZrB9+/Z6\n", 323 | "j8va2ho/Pz8Afv1V7tdCNGQ6nY62bdsSHR1NTk4OS5cuJTQ0tNzZe3bu3MmHH37Ijz/+SGZmJv36\n", 324 | "9WPatGnG7Xl5eeTm5pKbm0t6ejrNmjUjNDQUgCtXrjB16lT+9a9/kZOTw4oVK3jwwQe5evVqvZxr\n", 325 | "g0iqn3vuOVasWIGFhfnCURRFSkCEEOImBoOBwMBAPDw8GDp0KP7+/ly+fNn4dDUPDw8uX75sltik\n", 326 | "BESIuhEbG0tQUBBOTk6EhoYSFhbGggULqt2fvb09ixYtom3btgCMHz8eHx8fYmNjy2x/6tQpBg4c\n", 327 | "iLe3NxYWFkydOtVkpPpmJU97HDhwIADnzp3D0dGR0aNvVB+MGzcOBwcHzp8/X+34q8KqXo5Sga++\n", 328 | "+gp3d3eCgoI4ePCgWWPRakeTnv4pmZnf0LbtS2aNRQghzM3CwoK4uDiys7MZPXo0Bw4cMNmuKIrZ\n", 329 | "Svbkw4riTnXwYO39TgUHV+3d/6KiIkJCQnjxxReZO3cuO3fu5IEHHmDevHmkpKTQrVu3cn/nP/jg\n", 330 | "Ax544IHbHuPy5cskJibi7+9f5vbhw4fzwQcf8N///hdvb28iIyMZO3ZsmW0jIyOZPn268fuAgACs\n", 331 | "rKz46quvGDt2LLt27cLOzs44Y1BdM3tSffjwYXbu3Mnu3bspLCwkJyeH6dOns379epN2ERERxq+D\n", 332 | "g4MJDg6u9Vi02hGAQnb2j+j1BVha2tf6MYQQd76DBw+afZCgNjVv3pzx48dz/PhxPDw8SE9Pp2XL\n", 333 | "lqSlpeHu7l7ufnV535Zp9YSofUeOHEGv1/PUU08BEBISQp8+fQDw8vKq8QeTi4uLmTp1KjNnzsTX\n", 334 | "17fMNn369GHGjBl06tQJS0tL2rZty/fff1+qXVJSEtHR0XzyySfGdQ4ODnz00UeEhYVRVFSEjY0N\n", 335 | "mzdvplmzZhXGVWv3bLUBOXjwoDphwoRS6+szzGPHeqkHDqBevbq73o4phLizNbBbbaVkZGSoWVlZ\n", 336 | "qqqqakFBgTpo0CB137596ksvvaS+9dZbqqqq6ptvvqnOmzevzP3r+pyvXLmiAqqjo6Oq1+vr9FhC\n", 337 | "1LaGek/YuHGj2qdPH5N14eHh6muvvVbpPsaMGaM6Ojqqjo6O6ueff25cr9fr1bCwMHX8+PGqTqcr\n", 338 | "d/9Vq1ap/fr1Uy9evKjq9Xr1008/VX18fNSCggKTdkuWLFGDg4NN1h0/flz19PRUjx8/rqqqqsbE\n", 339 | "xKienp5qXFxcmccq7+dQ3Z9Pg6ipvpm53kosUTILiNRVCyGasrS0NIYNG0ZgYCB9+/Zl4sSJDB8+\n", 340 | "nH/+85989913+Pr6sn//fv75z3+aJT43Nzc8PT3Jy8vjwoULZolBiDuNp6cnFy9eNFmXnJyMoiik\n", 341 | "pKSUmnnj5mXjxo0A7Nmzx/hBwvDwcABUVWX27NlkZGSwZcsWLC0ty41h7969hIeH06pVKywsLJgx\n", 342 | "YwZZWVn89ttvJu3Wr19v/NB0ie+//567776bHj16ANCrVy/69u3Lvn318wySBpVUDxkyhJ07d5o1\n", 343 | "BheXv6fWE0KIpqpbt27ExsYap9R76aUbnzNxcXFh3759JCYm8u233+Ls7Gy2GKWuWoja1b9/fywt\n", 344 | "LVm9ejU6nY4dO3YQExMD3Cj/uHnmjVuXkgS6LHPmzOHMmTPs3LkTW1vbCmPo3r07X3zxBVeuXMFg\n", 345 | "MLBhwwZ0Oh0dO3Y0tjl8+DCXLl3i/vvvN9k3ICCAH3/80XhPOHHiBD/++KPxXlHXGlRS3RA4Od2N\n", 346 | "paWGgoLfKCxMMXc4QgghyiF11ULULmtra7Zu3cq6devQarVERUUxYcIEbGxsqt1nUlISa9euJT4+\n", 347 | "npYtW5Ya2U5OTkaj0ZCamgrAa6+9RqdOnejevTtarZb33nuPLVu24OTkZOxz/fr1TJkyBQcHB5Nj\n", 348 | "jRo1ipdffpnJkyej0Wi47777mD9/PiNGjKh2/FWh/F/tSIOmKEq9zl/966/38uefO/D1/TetWj1S\n", 349 | "b8cVQtyZ6vse1hDUxzl//vnnTJ06lXvvvZdt27bV6bGEqE2N6Z7Qt29f5s6dW6rU4k5Q3s+huj8f\n", 350 | "GakuQ8l81VICIoQQDZeUfwhR+6Kjo0lPT0en0xEZGUlCQgJjxowxd1iNgtmn1GuI/q6r3oeq6lGU\n", 351 | "8gvqhRBCmEenTp2wsbHhwoUL5OTkmLw9LISonrNnzxIaGkp+fj4dOnQwPmBF3J6Uf5TjyJGOFBae\n", 352 | "JyjoZ5o3v7tejy2EuLM0prd6a0t9nXOPHj04ceIEhw4dYsCAAXV+PCFqQ1O8JzREUv5RT6QERAgh\n", 353 | "GhVJBewAACAASURBVD4pARFCNBSSVJejpARE5qsWQoiGS5JqIURDIUl1OZydh6IoVuTk/EJxcc0e\n", 354 | "yymEEKJuyLR6QoiGQpLqclhZOeHk1A/Qc+3aAXOHI4QQogwlI9W//vorBoPBzNEIIZoySaoroNVK\n", 355 | "XbUQQjRkLVq0oHXr1hQUFHD+/HlzhyOEaMIkqa5AyYcVMzMlqRZCiIZK6qqFEA2BJNUV0Gh6YmWl\n", 356 | "pbDwd65flxEQIYRoiErqqk+ePGnmSIQQtyoqKmL27Nl4e3vj5OREUFAQe/fuLbf9X3/9xXPPPUfr\n", 357 | "1q1xcXHhiSeeQKfTGbdnZmYSEhKCo6Mj3t7exsedlygoKGDu3Lm4ubnh7OzMkCFD6uzcbiVJdQUU\n", 358 | "xRKt9sbz4mW0WgghGiYZqRai4dLpdLRt25bo6GhycnJYunQpoaGhJCUlldn+rbfeIjY2llOnTpGY\n", 359 | "mEhsbCxLly41bn/iiSews7PjypUrREVFMWfOHE6fPm3c/o9//INr165x5swZsrKyePfdd+v8HEvI\n", 360 | "w19u49Klj0lMfBRX13vp2nWbWWIQQjRuTfFBD/V5zr/99ht+fn60a9eOP/74o16OKURNNOR7Qmxs\n", 361 | "LLNnz+b8+fOMGTMGRVHw9fVlyZIltXaMgIAAIiIiCAkJKbWtd+/ezJs3j/vuuw+AjRs3Mm/ePJKT\n", 362 | "k8nPz8fFxYVTp07RsWNHAGbMmEGrVq148803OXPmDH379uXixYs4OjreNo4m/fCXwqRCzr90ngsL\n", 363 | "LpCxNQNdnu72O9WQi8tIALKy9mMwFNf58YQQQlTNXXfdhZ2dHUlJSVy7JlOgisZNUZRaW6qqqKiI\n", 364 | "kJAQZs2aRVZWFuHh4Wzfvh1FUUhJScHZ2RmtVlvmsmnTpkod4/LlyyQmJuLv719um5sTWoPBQGpq\n", 365 | "Krm5uSQmJmJlZWVMqOFGgn7q1CkAjh49Srt27Vi4cCFubm7/n737Do+qzB44/p1kUgjpIY1UEgIp\n", 366 | "lCSE0CEoKChYUEREirIWfq6r4gq7iwi4rl1ZwcWy6oq6rouIXVgRCE06CT2U9N57nczM74+BANKS\n", 367 | "kMmdyZzP89wnycy9d87L7p49uTnv+zJgwADWrVvX5n+H9lJ32iddp8yXM8l8PhNd/fklk6ydrPGe\n", 368 | "5U3Qn4Ow87Mzyufa2wfRrVtf6utPUl29FxcX2QZXCCFMiVqtJioqigMHDnDkyBFGjRqldEhCmKXd\n", 369 | "u3ej1Wp5/PHHAbjzzjuJj48HICAg4Lp/adVoNMyYMYM5c+bQp0+fy54zYcIE3nrrLcaOHUtzczMr\n", 370 | "VqxApVJRV1dHTU0Nzs7OF53v5OREdXU1ADk5ORw9epS7776b/Px8fv31V2699VYiIyMJDw+/rthb\n", 371 | "w2yeVKf/OR1dvQ7PqZ4E/jkQ52HOaKu15P0jjz199pDx1wx0TcZZo/T8KiAbjXJ/IYQQ10f6qkVX\n", 372 | "odfrO+xoq7y8PPz8/C56LSAgoE33mjhxIk5OTjg5OV00iVCn0zFz5kzs7e15++23r3j9okWLiImJ\n", 373 | "ITo6mpEjR3LnnXeiVqvx9vbG0dGRqqqqi86vrKxsKbS7deuGjY0Nzz77LGq1mtGjRzN27Fh+/rlz\n", 374 | "5sWZTVEdsDCAAf8bQNSaKEJeDCH211jiDsfR464e6Op0ZDyXwcFhB6lNqe3wz3ZzO9cCIpMVhRDC\n", 375 | "FElRLcT18/X1JTc396LXsrKyWto/HB0dWwrm3x7nCuj169dTXV1NdXU106dPBwy/KMydO5fi4mK+\n", 376 | "+uorrK2trxiDvb09K1euJCcnhzNnzuDu7k5cXBwAffr0obm5mTNnzrScf+jQoZZWknMrAf32l4D2\n", 377 | "tMK0h9kU1aEvh+J+k/tFrzn2d6Tf2n4M3DIQ+2B7ag7WcCDuACXflXToZ7u6JsiW5UIIYcJkWT0h\n", 378 | "rt/w4cOxtrbm7bffprm5mW+//ZZ9+/YBhifWNTU1LQXzb49zBfTlzJs3j5SUFL777jvs7K7erpuX\n", 379 | "l0deXh56vZ7du3fzwgsvsGzZMgC6d+/OlClTeO6556irq2PHjh18//33zJw5E4AxY8YQGBjISy+9\n", 380 | "RHNzMzt37iQxMZGbb765g/6Frs5siuqrcUtwI+5QHF73eqGr1XH0jqNkv5ndYfdXq51wdh4O6Kio\n", 381 | "2Nxh9xVCCNExLtyuXKvVKhyNEObJxsaGdevW8eGHH+Lm5sa///1vJk2ahK2tbbvvmZmZyfvvv8+h\n", 382 | "Q4fw8fG55Ml2VlYWTk5O5OTkAJCamsqIESNwdHTkgQce4JVXXmHcuHEt91u1ahX19fV4eXlx//33\n", 383 | "8+677xIREQEY5ld8++23/PTTT7i6uvLII4/w6aefXrF/u6N1qSX19Ho9WS9mkf5sOgBBS4IIXhLc\n", 384 | "IY/9MzP/Rnr6s/j6PkLfvu9e9/2EEJbDlJfPMhYlxhwYGEh2djYpKSn07du3Uz9biLYwp5wwZMgQ\n", 385 | "/u///o/Zs2crHUqHs+gl9a5FpVIRtCiI8NXhYAWZyzJbCuzr5eZmmKxYXv4/s/kfghBCWBLpqxbi\n", 386 | "+m3bto2CggKam5tZvXo1R48eZcKECUqHZRa6VFF9js8sHyK/iARryHoxi6zXsq77nk5OsajV7jQ0\n", 387 | "ZMiW5UIIYYKio6MBSEpKUjgSIczXyZMniY6Oxs3NjeXLl7N27Vq8vb2VDsssdMmiGsBrqhfhHxvW\n", 388 | "JExbkEbB6oLrut+FW5bLKiBCCGF6YmNjAcOOcEKI9nnooYcoKCigurqa5ORkJk6cqHRIZqPLFtUA\n", 389 | "Pvf70HuFYdedkw+dpGLb9a3ccX69aimqhRDC1MTExACGJ9XSpieE6GxduqgG8H/cH78n/NBr9By9\n", 390 | "8yj16fXtvte59aorKmTLciGEMDVBQUG4ublRXFxMXl6e0uEIISxMly+qAXq/0Rv3W9xpLmvm+LTj\n", 391 | "7d550d4+EAeHcLTaaqqr93ZwlEIIIa6HSqVqeVotLSBCiM5mEUW1ylpFxGcR2AXZUb2vmtQF7Z9o\n", 392 | "eO5ptbSACCGE6bmwBUQIU6ZSqeRQ+OhoFlFUA9i42RD13yhUahW5b+VS/E1xu+5zfmk9KaqFEMLU\n", 393 | "yGRFYQ70er0cJnJ0JIspqgGchzgT8moIACcfONmu/mrDluU2VFXtRaMp7+gQhRDCZGRnZzN27Fii\n", 394 | "oqLo168fK1asAGDp0qX4+/sTExNDTEwMGzZsUDjS8+RJtRBCKV1qR8XW0Ov1HL3jKKXfleIU70TM\n", 395 | "zhis1G373SIpKYHKyq1ERa3F0/OuDolLCNF1mdPuaRcqKCigoKCA6OhoampqGDRoEN988w1r1qzB\n", 396 | "ycmJ+fPnX/Fapcas1Wpxdnamrq6OkpISPDw8Oj0GIYR5kx0VW0mlUhH+r3DsAuyo3ltN9uvZbb6H\n", 397 | "LK0nhLAEPj4+LRuqODo6EhERQW5uLoDJ/pJgbW3dsrOiPK0WQnQmiyuqAWzcbej7z74AZCzJoPZE\n", 398 | "bZuuP9dXXVYmW5YLISxDRkYGSUlJDB06FICVK1cycOBA5s6dS0XF9e0B0NHO9VVLUS2E6ExqpQNQ\n", 399 | "ivvN7vjM9aHgwwJSHkghdmcsKuvWzQR1copBrfagsTGT+vozODiEGTlaIYRQTk1NDXfffTdvvfUW\n", 400 | "jo6OzJs3j+eeew6AxYsX8/TTT/Phhx9ect3SpUtbvk9ISCAhIaFT4pVl9YQQbZGYmEhiYuJ138fi\n", 401 | "eqov1FzZzL5++2jMaSTktRAC/xjY6muPHbuX4uL/Ehb2Nn5+j3V4bEKIrsNce6oBNBoNkyZNYuLE\n", 402 | "iTz55JOXvJ+RkcHkyZM5cuTIRa8rOeaDBw8yaNAg+vbtS0pKiiIxCCHMl/RUt4PaRU2f9/sAkLE4\n", 403 | "g7qTda2+9nxf9UajxCaEEErT6/XMnTuXyMjIiwrq/Pz8lu+//vpr+vfvr0R4VxQVFYWNjQ2nTp2i\n", 404 | "pqZG6XCEEBbCootqAI+JHvjM8UHXoOPkIydb/ZuJbFkuhOjqdu7cyWeffcaWLVtals9bv349Cxcu\n", 405 | "ZMCAAQwcOJCtW7eyfPlypUO9iJ2dHVFRUej1eg4dOqR0OEIIC2GxPdUXCn0zlNIfSqncWknR50V4\n", 406 | "z/C+5jX29gE4OIRTV5dCVdUeXF1HdkKkQgjReUaOHIlOp7vk9YkTJyoQTdvExsaSnJzMwYMHGTFi\n", 407 | "hNLhCCEsQJuL6rq6OjZv3kxycjIFBQXodDq8vb0JDQ1l/PjxeHtfuyA1NTZuNoS8GsLJB0+S+sdU\n", 408 | "PCZ5oHa59j+Nm9tN1NWlUF7+sxTVQghFdcXcfD1kExghRGdrdftHVlYWDz30ELGxsaxZswatVkt4\n", 409 | "eDgxMTHY2dlx4MABbr/9dsaMGdMhMyg7m89sH5yHO9NU0ET6kvRWXSPrVQshlNbVc3N7ybJ6QojO\n", 410 | "1qrVP9asWcN3333HE088weDBg696bklJCX//+98pLi7mrbfewt7e/vqD7KRZ5NXJ1RwYdACAuINx\n", 411 | "OA50vOr5zc017Nzpjl6vZcSIYmxs3I0eoxDC/Bgrhymdm69G6RVPamtrcXJywtramurqaqOPVwjR\n", 412 | "dbQ3f12zqP7hhx8oLy9n5syZbbpxamoq77zzDq+//nqbg/qtzkzOp584Te6KXJxHOBOzLQaV1dXX\n", 413 | "rk5OHktFRSKRkf/Fy+ueTolRCGFejJHDTCE3X43SRTUYVgE5fvw4e/bsIT4+XtFYhBDmw2hFdVNT\n", 414 | "E7a2tu0K6nquvVBnJufmymb29N2DplBD+Kfh+Nzvc9Xzs7JeJS1tIT4+cwgP/1enxCiEMC/GyGGm\n", 415 | "kJuvxhSK6jlz5rB69WrefvttHntM9hMQQrSO0dapvlzife655xg8eDCZmZltvtbUqV3UhLwcAkD6\n", 416 | "n9PR1mmver67+y0AlJauR6+/dJa8EEIYg6Xl5vaIi4sDYN++fQpHIoSwBO1ap9rFxYVbbrkFlap1\n", 417 | "23qbG59ZPjjGOtKY00j269lXPbd79yjs7PzRaAqpqZEJMUII5XT13NxW5/rM9+/fr3AkQghL0K6i\n", 418 | "2t3dnYULFxIY2Pptvc2JykpF7+W9Ach6JYvGvMYrn6tSXfS0WgghlNLVc3NbDRw4ELVazYkTJ2Rn\n", 419 | "RSGE0bWrqB48eDC33norn3zyCTk5OR0dk0lwHe1Kjyk90NXpSF909SX2PDwMRXVZ2U+dEZoQQlyW\n", 420 | "JeTmtrC3t6d///7odDoOHjyodDhCiC6uXUX1Sy+9RHx8PO+//z6hoaGEhYXx6KOP8vPP7VuvuaGh\n", 421 | "gSFDhhAdHU1kZCR//vOf23WfjhbySggqGxUFqwuoPlh9xfNcXW9ApbKhqmoPGk1pJ0YohBDndXRu\n", 422 | "7gqkBUQI0VnaVVRHRUUxc+ZMduzYQVlZGStXrsTZ2ZlVq1a1Kwh7e3u2bNlCcnIyhw8fZsuWLezY\n", 423 | "saNd9+pIDr0d8PuDH+jhzFNnrjgTVK12wsVlNKCTjWCEEIrp6NzcFZwrqmWyohDC2Fq1+cvl/Pzz\n", 424 | "z5SUlHDfffd1aEB1dXWMGTOG1atXExkZaQhSwaWZNBUa9vTeQ3NpM/1/6I/HrR6XPS87+w1SU/+I\n", 425 | "t/dMIiI+6eQohRCmrDNzmLFyc1uZwpJ6AMnJycTExBAaGsqZM2eUDkcIYQaMtk51cXExnp6e7Qqq\n", 426 | "qKgILy+vVp2r0+mIjY0lNTWVefPm8eqrr54PUuHknL08m9T5qXTv3524pDhU1pfOrK+tPcG+fZHY\n", 427 | "2PRg+PBCVKp2/RFACNEFGSOHdVZubi+l8/Y5Go0GZ2dnGhoaKCsrw83NTemQhBAmzmjrVGdkZPDP\n", 428 | "f/6zzTfevXs377zzTusDsbIiOTmZnJwctm3bRmJi4kXvL126tOX47XvG1nNeT+wC7ag9Ukvh54WX\n", 429 | "PcfBIRw7uyA0mhKqq6V3TwhLlpiYeFHOMobOys3mzsbGhpiYGED6qoUQxqW+1gnn+tGmTJnCvffe\n", 430 | "y5QpU1Crr3zZoUOHWLlyJYGBgSxZsqTNAbm4uHDrrbeyf/9+EhISWl431v8xtYa1vTXBy4I5+cBJ\n", 431 | "0hen43WPF1Z2F/8+olKp8PC4hby8dygrW4+zs2yJK4SlSkhIuCh/LVu2rMM/o7NzszmLi4tj165d\n", 432 | "7Nu3j/HjxysdjhCii7pmUQ2G5P3555/z1ltvERMTg7u7O3379sXV1RVbW1vKysooKCjgyJEjDB48\n", 433 | "mGXLlhEWFtbqIEpKSlCr1bi6ulJfX8/GjRtNLun7zPQh+/Vs6o7VkfduHv5P+F9yjru7oaguLf2J\n", 434 | "4GDTil8I0fUYOzd3FTJZUQjRGdo1UTElJYWkpCSKiopobGzEy8uLXr16MWzYsHZtf3vkyBFmz56N\n", 435 | "TqdDp9Mxc+ZMnnnmmfNBmkhvXsl3JRy9/Sg2PWwYkjoEtfPFv5NotbXs2OGOXq9h+PBCbG3b1+8o\n", 436 | "hOhaOiuHdXRuvh6mkrfB8O8SERGBv78/2dlX3yVXCCGMNlHRFJhKctbr9SSNSqJqZxVBzwXRa1mv\n", 437 | "S845dOhmyst/Jjz8U3x87lcgSiGEqTGVHNaZTGnMOp0OV1dXqquryc/Px8fHR+mQhBAmzGgTFS+0\n", 438 | "a9euNn9AV6JSqQh5OQSA7DeyaSpsuuQcd/eJAJSVyZblQojOYem5+VqsrKwYNGgQIC0gQgjjaVNR\n", 439 | "vWLFCmbNmsULL7zA559/TlZWlrHiMlmuI13xmOSBrlZH5guZl7x/fsvyDej12s4OTwhhgSQ3X5vs\n", 440 | "rCiEMLY2FdWPPvooaWlpvPvuu8yaNYvQ0FDefPNNY8Vmsnq92AtUkPdeHvVp9Re9161bGPb2oTQ3\n", 441 | "l1FVtVehCIUQlkRy87WdK6r37NmjcCRCiK6qVUX1woULARgzZgw7duwgJyeH+vp6du7cybfffsuG\n", 442 | "DRsA+NOf/mS8SE2IY39HvGd6o9foyViacdF7hqX1pAVECGF8kptbb+jQoYBhnW6dTqdwNEKIrqhV\n", 443 | "RfWpU6cuec3Gxob4+Hg2bNjA+vWG4vH06dMdG50JC14WjMpGReFnhdQeq73oPXd3QwtIaekPCkQm\n", 444 | "hLAUkptbLyAgAD8/PyorK0lJSVE6HCFEF9Sq1T+srKzw8fG54kzI2tpaunfvTnFxMc3NzR0fpAnN\n", 445 | "Ir/Qqd+fIu8fefS4swf91vVreV2rbWDnTg90ujqGDs3G3v7SNa2FEJbDWDlM6dx8NaaYt6dOncra\n", 446 | "tWv54IMPmDt3rtLhCCFMVHvzV6s2f/H29uaRRx654gds3ryZG264oV1b5pqzoEVBFHxUQMnXJVTt\n", 447 | "q8J5sDMA1tb2uLvfTEnJ15SWfo+f3zyFIxVCdEWSm9tm2LBhrF27ll27dklRLYTocK0qqidNmnTF\n", 448 | "HQ5/+eUX6uvrWbp0KXl5eR0anKmz87XD7w9+ZL+STfqidAb+PLDlPQ+P284W1d9JUS2EMArJzW0z\n", 449 | "bNgwQJYgFEIYR6uK6jvvvBMwbH6yZcsWUlNTKSwsZOfOnaSmprYkqDvuuMN4kZqowAWB5L2TR/nG\n", 450 | "csq3lOM21g0AD49bARXl5Ztpbq5GrXZSNlAhRJcjubltYmNjsbW15fjx41RUVODq6qp0SEKILqRN\n", 451 | "Oyo++eSTrFixAmtrawICApgwYQKLFy/G19fXmDGaZG/ehTJeyCBjcQbOw5yJ2RmDSqUC4ODBkVRV\n", 452 | "7SQqai2enncpHKUQQinGzmFK5earMdW8PWzYMHbv3s2GDRu4+eablQ5HCGGCOmVHRTs7O06fPk1D\n", 453 | "QwNpaWmsWrVK0aRtKvyf8MfG04aqXVWU/VTW8nqPHrcBUFLynVKhCSEsgDFyc3Z2NmPHjiUqKop+\n", 454 | "/fqxYsUKAMrKyhg/fjx9+vThpptuoqKioiOG0GmkBUQIYSxtelKt0+mwsmpTHd4hTPWJx4Wy/55N\n", 455 | "6lOpdB/YnbiDcaisVNTWprBvXwRqtQfDhxdgZdWqbhshRBdj7BxmjNxcUFBAQUEB0dHR1NTUMGjQ\n", 456 | "IL755hv+9a9/0aNHDxYsWMArr7xCeXk5L7/88iXXm2re/vLLL7nnnnu4+eabW9bxFkKIC3XKk2ol\n", 457 | "Cmpz0fPRntj521F7qJbiL4sBcHDoS7duYTQ3l1JVJU9FhBDGYYzc7OPjQ3R0NACOjo5ERESQm5vL\n", 458 | "d999x+zZswGYPXs233zzTYd/tjGde1Itm8AIITqaVMkdxNremqDnggBIX5yOrll3dndFQwtIaam0\n", 459 | "gAghzFNGRgZJSUkMGTKEwsJCvL29AcOSfoWFhQpH1zb+/v74+/vLJjBCiA4n/QgdyGeOD9mvZlN/\n", 460 | "up7C1YX4zvWlR4/byMl5g5KS7wgNfU3pEIUQok1qamq46667eOutt3ByungVI5VK1TIx+3KWLl3a\n", 461 | "8n1CQgIJCQlGirJthg0bxpdffsmuXbuIjIxUOhwhhMISExNJTEy87vu0qadaKabam3c5hf8p5MR9\n", 462 | "J7ALsCP+VDwqWz2//upNc3MZ8fEpODj0VTpEIUQnM6ccdiGNRsOkSZOYOHEiTz75JADh4eEkJibi\n", 463 | "4+NDfn4+Y8eOvewTX1Me8/Lly5k/fz5z587lgw8+UDocIYSJ6ZSeanFtXtO86N6/O43ZjeS/l4+V\n", 464 | "lfrsmtVQXPy1wtEJIUTr6PV65s6dS2RkZEtBDXDbbbexevVqAFavXm2Wa2DLCiBCCGOQJ9VGUPJ9\n", 465 | "CUdvO4qNlw1DUodQXv89x45NwclpMIMG7VU6PCFEJzO3HAawY8cORo8ezYABA1paPF566SXi4+O5\n", 466 | "5557yMrKIjg4mDVr1lx2ExVTHnNjYyPOzs40NTVRXl4um8AIIS7S3vwlRbUR6PV6koYnUbW7il5/\n", 467 | "64X/Qk927vREp6tj6NBM7O0DlQ5RCNGJzC2HdQRTH/Pw4cPZtWsX69evZ8KECUqHI4QwIdL+YUJU\n", 468 | "KhW9/tYLgKxXs9BV2eDuPhGAkhLzWn5KCCG6olGjRgGwfft2hSMRQnQVUlQbidsNbrje6Iq2Ukv2\n", 469 | "a9l4ek4BoLj4K4UjE0IIMXr0aAC2bdumcCRCiK5C2j+MqGpPFQeHHsTKwYpBpyLYf8YfvV7D8OH5\n", 470 | "2Np6Kx2eEKKTmGsOux6mPuaKigrc3d2xsbGhoqKCbt26KR2SEMJESPuHCXIe4ozH7R7o6nTkvVKB\n", 471 | "m9s4QE9JybdKhyaEEBbN1dWVgQMH0tTUxJ49e5QORwjRBUhRbWS9/toLVJD3bh6uVobdFYuL1ykc\n", 472 | "lRBCCGkBEUJ0JCmqjcyxvyNe93mh1+ipWTUAsKKiYhMaTYXSoQkhhEUbM2YMIEW1EKJjSFHdCYKX\n", 473 | "BqNSqyh6rxEn25Ho9c2Uln6vdFhCCGHRzq0A8uuvv9LU1KRwNEIIcydFdSdw6O2Az4M+oAP9L4Yk\n", 474 | "XlIiLSBCCKEkT09PIiIiqK+v58CBA0qHI4Qwc1JUd5KgxUGo7FTUrBwIQFnZBpqbqxWOSgghLJv0\n", 475 | "VQshOooU1Z3E3t8ev8f8oMQTdU40Ol2DtIAIIYTCpKgWQnQUKao7UeCfArF2tKb5K0MSLyr6r8IR\n", 476 | "CSGEZTtXVO/YsQOtVqtwNEIIc2ZWRXV1czOrCwp4KyeHlTk5rC0qYl9VFUVNTSa9ycA5tp62+M/3\n", 477 | "h61jQGdFWdl6NJpypcMSQgiL5e/vT0hICFVVVRw6dEjpcIQQZkytdACt9Ze0NFbl5lJ5hScJTtbW\n", 478 | "xDo6MtjZmTgnJ0a5uNDTzq6To7y2gPkB5L6dS3PyQPSxSZSUfIOv7wNKhyWEEBZr9OjRpKWlsW3b\n", 479 | "NmJjY5UORwhhpszmSfVLWVlUarWMdHHhD35+zOvZk9s8PIh2dMRNraZaq2VrZSWvZ2dz7/Hj+O3a\n", 480 | "xYB9+3gmNZVN5eVodDqlhwCA2kVN4J8CYfMNABQVfaFwREIIYdmkr1oI0RFUejPom1CpVLyYkUGC\n", 481 | "qyvDXFwue05BYyP7q6vZX13NnupqtldUUHtBId3Dxoapnp7c5+XFcBcXrFSqzgr/Eto6LbsH/ozm\n", 482 | "nclgDcNH5GNr66lYPEII41KpVGbRotaRzGnMaWlphIaG4uHhQVFREVZWZvO8SQhhBO3NX2ZTVLc1\n", 483 | "zEadjp2VlWwoK+O7khJO1te3vBdkZ8fDPXsy19cXb1vbjg63VXJX5XK66i4Yuoew3qvw85+nSBxC\n", 484 | "COMzpwKzo5jTmPV6PcHBwWRlZXHw4EFiYmKUDkkIoaD25q8u++u4nZUVN7i58WpoKCfi40kaNIgF\n", 485 | "AQEE2NmR2djIovR0AnbtYvrx4+yurOz0+Hx/54vNkZsAyDn6aad/vhBCCAOVSsW4ceMA2Lhxo8LR\n", 486 | "CCHMVZctqi+kUqmIdnLildBQMoYOZcOAAdzm4YFWr+eLoiKGJSUxNjmZn8vKOu3JipWtFcET7ocm\n", 487 | "G+ptd1Nfk9MpnyuEEOJS48ePB+CXX35ROBIhhLnqsu0frZHV0MA7eXmsys2l6uyqIoMcHXm+Vy8m\n", 488 | "urujMnLftV6rZ8fKsWijt9KjYCn97l1i1M8TQijDnFohOoq5jbm4uBgvLy/s7e0pLy/H3t5e6ZCE\n", 489 | "EAqR9o92CLS356WQELKGDeOlXr3wsrHhQE0Ntx45wujkZHZUVBj181XWKnx7zwCgtPYLtHWy8YAQ\n", 490 | "QijB09OT6OhoGhoa2LFjh9LhCCHMkEUX1ee4qNX8KSiIjKFDeSM0FA+1mh2VlYxKTmbykSOcrKsz\n", 491 | "2mcHT5gB9d3Rh6aQ/uFWo32OEEKIq5MWECHE9ZCi+gLdrK2ZHxBA2tChPBcUhKO1NT+UltJv3z7+\n", 492 | "eOYMlc3NHf6ZarUDbrZ3ApB76mOaKzv+M4QQQlybTFYUQlwPi+6pvpbCpiaeTU/nw/x89ICXjQ2v\n", 493 | "hoYyy9u7Q/uty8sTOXRoLBR6EXj8V0KWhXbYvYUQyjO3/uKOYI5jrq+vx83NjaamJoqKiujRo4fS\n", 494 | "IQkhFCA91UbgbWvLP/v2Zd+gQQx3dqZIo2FOSgo3HT5M6gXrXl8vV9fR2BAA3kXkbPyBpuKmDru3\n", 495 | "EEKI1unWrRsjRoxAr9ezefNmpcMRQpgZKapbYZCTEztiYlgdHo6HWs0v5eX037ePV7OyaO6A7c9V\n", 496 | "Kit6Bs0GQDdqA1kvZ133PYUQQrTdub5qaQERQrSVFNWtpFKpmOXjw4n4eGZ4eVGv07EwLY34qNyO\n", 497 | "wAAAIABJREFUgwc5UF193ff39p5p+GbMVnI+OENDTsN131MIIUTbXFhUm1v7ihBCWVJUt5GnrS2f\n", 498 | "RUayvn9/guzsSKqpYciBAyxJT0dzHU+tHRz64Ow8FBzqIX476c+md2DUQgghWiM6Ohp3d3cyMzNJ\n", 499 | "TU1VOhwhhBmRorqdJnh4cCw+nqf8/dEBz2dmMiIp6bqW3/P2nmX45uaNFK4upPrA9T8BF0II0XrW\n", 500 | "1tbceOONgLSACCHaxiSK6uzsbMaOHUtUVBT9+vVjxYoVSofUKt2trXmzd282DxxIoJ0d+6qridm/\n", 501 | "n1W5ue36s6GX1zRUKhsYdAA8Sjgz/4z8+VEIoZgHH3wQb29v+vfv3/La0qVL8ff3JyYmhpiYGDZs\n", 502 | "2KBghMZxrgWkK45NCGE8JrGkXkFBAQUFBURHR1NTU8OgQYP45ptviIiIAMxjaabK5mYeP32aTwsL\n", 503 | "AZjg7s5Hffvia2fXpvscPXoXJSXrsPr3I+g+uJeor6LwnOJpjJCFEJ3EHHLY5Wzfvh1HR0dmzZrF\n", 504 | "kSNHAFi2bBlOTk7Mnz//qtea65gBcnNz8ff3x8HBgdLSUtmyXAgLY9ZL6vn4+BAdHQ2Ao6MjERER\n", 505 | "5OXlKRxV27io1XwSEcGayEjc1Wo2lJUxcP9+fi4ra9N9fH0fBMB66gZQ6UhdkIqu8fpXGBFCiLYa\n", 506 | "NWoUbm5ul7xursVya/n5+RETE0NdXR2JiYlKhyOEMBMmUVRfKCMjg6SkJIYMGaJ0KO0y1cuLI4MH\n", 507 | "M87NjWKNhpsPH+YvaWmtXnrP3X0Cdnb+aGwzsbsthYbUBnLfzjVy1EII0XorV65k4MCBzJ07l4qK\n", 508 | "CqXDMYpJkyYB8MMPPygciRDCXJhE+8c5NTU1JCQk8Oyzz3LHHXe0vK5SqViyZEnLzwkJCSQkJCgQ\n", 509 | "Yetp9XpezsriufR0dMAIZ2f+ExlJQCv+jJievoTMzOdxab6TyvF/wNrFmiFnhmDbw9b4gQshrlti\n", 510 | "YuJFTziXLVtmtk93MzIymDx5ckv7R1FREZ6ehpa0xYsXk5+fz4cffnjJdeaYty+0d+9ehgwZQlBQ\n", 511 | "EOnp6R26i64QwrR0VM42maJao9EwadIkJk6cyJNPPnnRe+bcm7etooL7jh8nt6kJd7Wa1eHhTLrG\n", 512 | "1rcNDZns3t0LlcoG57//j8pvoOdjPenzdp9OiloI0ZHMOYf9tqhu7XvmPGYAnU6Hr68vRUVFHDly\n", 513 | "hH79+ikdkhCik5h1T7Ver2fu3LlERkZeUlCbu9GuriTHxTHR3Z2y5mYmHz3KX9LS0F7lPyx7+yDc\n", 514 | "3W9Gr2/C6S+7wQry3s2j9kRtJ0YuhBCXys/Pb/n+66+/vmhlkK7EysqKW2+9FZAWECFE65hEUb1z\n", 515 | "504+++wztmzZ0iWXaepha8sP/fvzakgI1sBLWVlMOHyYkqamK17j6/sQAGX6T/B92Be0kPp0qlk/\n", 516 | "+RFCmJfp06czfPhwTp48SUBAAB999BELFy5kwIABDBw4kK1bt7J8+XKlwzQa6asWQrSFybR/XI25\n", 517 | "/xnxQlvKy5l2/DjFGg2BdnasjYpisLPzJefpdBp27QpAoymkX/AWTkRbo63U0u/bfvS47ertI0II\n", 518 | "09KVclhrdYUxV1dX4+HhgVarpbCwkB7XaN0TQnQNZt3+YUnGurlxcNAghjo7k9XYyMikJD64zPKB\n", 519 | "VlY2+PjMAaC4/mN6/bUXAGeeOIO2XtuZIQshhEVycnIiISEBnU7H+vXrlQ5HCGHipKhWgL+9PYnR\n", 520 | "0czr2ZMmvZ6HTp3idykpNGgvLpZ9fX8HQHHxGjx/Z0/3Ad1pyGgg65UsJcIWQgiLIy0gQojWkqJa\n", 521 | "IXZWVqzq04ePw8Oxt7Liw4ICRiYlkdXQ0HKOg0Nv3NzGo9PVU1j8MWFvhwGQ9XIW9an1SoUuhBAW\n", 522 | "49xkxQ0bNqDRaBSORghhyqSoVthsHx9+jYmhl709B2pqiDtwgO0XbKbg5/c4AHl5/8BlpBPe93uj\n", 523 | "b9Rz5skzSoUshBAWIzQ0lIiICKqqqti2bZvS4QghTJgU1SYgxsmJ/YMGMf7sLow3HjrEP8/2WXt4\n", 524 | "3IK9fQgNDRmUlv5IyKshWDtZU/pDKSU/lCgcuRBCdH3nNiNbu3atwpEIIUyZFNUmwt3Ghp/69+cp\n", 525 | "f380ej0PnzrF70+dolmvws/vMQByc1di52tH8LJg4OykxQaZtCiEEMY0depUANatW4dWKzlXCHF5\n", 526 | "UlSbELWVFW/27s2/+vbFVqXiH3l53HT4MLYe92Nl5UB5+S/U1p7A7/d+OEQ50JDWQPar2UqHLYQQ\n", 527 | "XVp0dDShoaEUFRWxfft2pcMRQpgoKapN0BxfX7ZGR+Nja0tiRQVDD6dh43EvALm5b2NlY0Wffxi2\n", 528 | "LM96KYv6NJm0KIQQxqJSqbj77rsBaQERQlyZ+Wz+cugQfPYZfPMNVFbCubCtrcHFBdzdwc3t/Fcf\n", 529 | "HwgIAH//81/t7ZUdSBvlNjZy59Gj7KuuJlKVwT/0D2Bl1Z3hw3NRq104PuM4RZ8X4XaTGwM2DECl\n", 530 | "UikdshDiMrrCRiht1dXGfODAAeLi4vDx8SEnJwdra2ulQxJCGEl785f5FNUdcSMvL+jTB/r2hfBw\n", 531 | "w9e+fSEkBNTqjviEDlev1fLwqVN8VljIG8wnliRCQ5cTEPAkTYVN7I3YS3N5M+GfhOMz00fpcIUQ\n", 532 | "l9HVCszW6Gpj1uv1hIaGkp6ezrZt2xg1apTSIQkhjKTrF9UDBsDw4TBjBoSFnXsDmpuhogLKyqC8\n", 533 | "3HCUlkJ+PuTkQHa24cjNNZx7Od26wYABEBNz/ujf32SebOv1et7Izua7tE94nsVUWvlxw7AzONnY\n", 534 | "k/9xPicfOInaQ038iXhsPW2VDlcI8RtdrcBsja445gULFvDaa6/x+OOPs2LFCqXDEUIYSdcvqnU6\n", 535 | "QxHdXjqdobA+efL8kZJiOLIvM9lPrYbYWEMhP2KE4WvPnu3//A6woaSI0qOD8COHj+1eYEn0fILt\n", 536 | "7Tk0/hAVmyrwmuFF5GeRisYohLhUVywwr6Urjnnfvn3Ex8fTs2dPsrOzsbKSaUlCdEVdv6g2Zphl\n", 537 | "ZZCcDElJ54+UFEMhfqGgIBgzBm680XD4+RkvpitIynibyozHOUUYf7H+kLX9+jGkzJ59/faha9DR\n", 538 | "f31/PCZ4dHpcQogr64oF5rV0xTHr9Xp69epFZmYmO3bsYMSIEUqHJIQwAimqO1pVFezdCzt3wq+/\n", 539 | "wq5dUF198Tl9+xqK6/HjYdw4cHQ0elhabQO7dgfRrCniaV7nsCqOFb17c+u/taQtTMMuyI7BRwej\n", 540 | "djTNHnEhLFFXLDCvpauO+Y9//CNvvPEGTz75JMuXL1c6HCGEEUhRbWxaLRw9Cps3w6ZNsHUr1NSc\n", 541 | "f9/WFsaOhcmTYdIkw1NtI8nMfJH09EUU24/knoa/AjDPy5cH7q+mNqkG/6f86f1mb6N9vhCibUwi\n", 542 | "h3WyrjrmPXv2MHToUPz8/MjMzJRVQITogqSo7mwaDezbB7/8Ahs2wO7d55f5A8NEx8mTDUd8PHRg\n", 543 | "751GU86uXQHodLUUBm9kdqYNjXo99+Y68sgsQ6EfuzsW58HOHfaZQoj2M8kcZmRddcwXrgKyceNG\n", 544 | "xo0bp3RIQogO1t78JbMs2svGxjB58bnnDO0hBQXw8cdw112GNpAjR+DFF2HYMAgMhKeeurTwbvdH\n", 545 | "u9Gz50MA9K/7F9tiYvC1teULvxrWT7MGHZx88CS6Rt017iSEEKItVCoVs2bNAuCTTz5ROBohhCmR\n", 546 | "J9XG0NgI27bB99/Dt99CVtb59wIDYepUmDYN4uLavaJJQ0MWu3eHADBkyGnKrXpy59GjHC6q5sOH\n", 547 | "oGcuBP45kJAXQzpiREKI62B2OawDdOUxp6WlERoaioODAwUFBTg5OSkdkhCiA8mTalNiZ2eYvLhi\n", 548 | "BWRkGCY5PvWUYbWQrCx44w1DS0hICPzlL4bl/drI3j4Qb+/7AC1ZWS/T086OrdHRTA325qWFoFNB\n", 549 | "5itZVOyq7PDhCSGEJQsJCWHkyJHU1dWxbt06pcMRQpgIeVLdmXQ6Q4G9Zg18+aVhg5pzhgyB2bMN\n", 550 | "T7Dd3Vt1u7q6k+zdG4lKZcWQIWewtw9q2SgmdUEa0/4L5cHW3HAoHhdnOyMNSghxLV0mh7VBVx/z\n", 551 | "Bx98wEMPPcTYsWPZvHmz0uEIITqQTFQ0N1otbN8On35qKLDPLddna2uY3Dh7NkyYYOjdvooTJ2ZS\n", 552 | "WPgZvr4P07fvey2vr88tpnjkMQIzIPFeNXM+GkRwt25GHJAQ4kq6ZA67hq4+5srKSnx8fGhoaCAj\n", 553 | "I4MgI674JIToXBZRVNc01bA1YyuVjZU065rR6rQA2KvtcbBxuOhwtnPGvZs7LvYuWKlMvMulrg6+\n", 554 | "+QZWr4aNG89PZvT2hgcegIceMrSKXPbSS59Wn3N0ZzGFY45hrYUlK6x5fmZ/xri6dsaIhBAX6OoF\n", 555 | "5uVYwpinT5/OF198wQsvvMCiRYuUDkcI0UG6fFE96fNJbEzdSKO2sW3XosKtmxvu3dxx7+aOm70b\n", 556 | "nt098XX0padTz4sOX0dfutko/DQ3Nxc++8xQYJ84cf718ePhkUfgttsueXp9pafVACcWp1L4QjZF\n", 557 | "nvDIR/BybB8eUXi7dSEsjSUUmL9lCWPesGEDEydOJCwsjJMnT6Jq58RzIYRp6fJFtdUyK3R6HUP9\n", 558 | "hxLsGoy1yhprK8Oi+w3NDdRr6qnT1FHfXE9tUy1VjVWU1ZdR2di2iXpu9m70cutFiFsIIa4h5793\n", 559 | "CyHQJRBba1tjDPFSer2h//q99ww92A0Nhte9veHBBw1Pr3v1Aq7+tFrXrCNpVBLVu6tJHAPLlsA8\n", 560 | "v5681bs3Nh24drYQ4sosocD8LUsYc3NzMwEBARQUFLBr1y6GDh2qdEhCiA7Q5YvqdcfXMdR/KL5O\n", 561 | "vm26tlnXTEVDBWX1ZS1HUW0R+dX55FXnkVeTZ/hanUd+dT4aneaK97JSWdHLtRcRnhFE9Igg0jOS\n", 562 | "iB4RRHhG4GxnxI1WyssNvdfvvQfHjxteU6ngppsMT68nT+bE6QfOPq1+iL5937/o8vq0evYP3I+2\n", 563 | "RssbC+GHCZDg6sqXkZH0sO2kXxKEsGCWUGD+lqWM+ZlnnuH111/noYce4v3337/2BUIIk9fli+rO\n", 564 | "CFOn11FcW0x6RTpp5Wktx7mfsyuz0XP5OPyc/IjyiiLaO5oY3xiifaIJcw9reZreIfR62LnTUFx/\n", 565 | "+aVhPWyAwEDq5k9l78DlqFRWDB58HAeHsIsuLfikgJTZKdDdiqc+tCbZW0OwvT3f9uvHAEfHjotR\n", 566 | "CHEJSykwL2QpY05JSSEiIgIHBwfy8vJwcXFROiQhxHWSoroTNDY3crrsNCeKT3Ci5ATHi49zouQE\n", 567 | "J0tOXrbX28HGgQHeA4jxMRTZ8X7x9PPqh9pKff3BlJbCJ5/AO+/A6dMApPzJmoKbtXjajCdqxM8X\n", 568 | "na7X6zlx3wmKvijCLq4781eq2N1QQ3crKz6JiGCKp+f1xySEuCxTyWGdyZLGfOONN7J582ZWrFjB\n", 569 | "448/rnQ4Qojr1OWLao1Gz65dsGkTVFRAc7Ph0OnA3v7So1s3w1cnJ3B1BReX84erq2F/lo6i1WlJ\n", 570 | "r0jnSOERkgqSSC5IJrkgmeyq7EvOdbBxYJDvIIb4DWGI/xDi/eIJcA5o/wQXnQ7+9z9YuZKGfevZ\n", 571 | "+xno7CD2nzE4T1kEt98OakMRr6nQsH/gfhqzGvF5wo8XHtbw76IiABYGBPBCr16opc9aiA5nSQXm\n", 572 | "OZY05q+++oq7776biIgIjh07JhMWhTBzXb6odnPTU17ecfe0swMPD/DyuvTw9j7/vY8P+PqCdTu6\n", 573 | "OErrSlsK7AP5B9iTu4e08rRLzvN19GV4wHBGB41mdNBo+nv1b1/byKlTpCbeR3afA7gkQ/RToAoI\n", 574 | "gMceM0xsdHencnclyaOS0TfriVoXxadxDSxITUUL3Ojqyn8iI/GUPmshOpS5FpgPPvggP/74I15e\n", 575 | "Xhw5cgSAsrIypk2bRmZmJsHBwaxZswbXyyzVaa5jbg+NRkNQUBD5+fls2bKFhIQEpUMSQlyHLl9U\n", 576 | "29vrCQyEW26BoCDDw1e12jBfr7HRsDhGfb3h67mjrs6wp0plpeHpdmXl+UNz5fmIl7C2Bn9/CAiA\n", 577 | "wEDDceH3QUGGJ+CtUVxbzN7cvezJ3cOe3D3szd1LRUPFRee42LkwMnAkowJHMTpoNIN6Dmr1qiMa\n", 578 | "TQV7dofQrC2n/8qeeKzLM7zh4GBYNeTJJ8n+1pbUp1OxdrEmLimOPa4NTDt+nCKNhgA7O76KimKw\n", 579 | "sxEnXgphYcy1wNy+fTuOjo7MmjWrpahesGABPXr0YMGCBbzyyiuUl5fz8ssvX3KtuY65vZYuXcqy\n", 580 | "ZcuYOnUqa9asUTocIcR16PJFdV6eHt+2LfxxRXq9oeguLYWiIigsNHy93Pd5eYbvr6VHDwgLu/jo\n", 581 | "3dvw9Wr1qV6v52TpSXZk7WBb5ja2Z20noyLjonO6qbsxLGAYCUEJjA8dT1zPuKv2ZWdnv0lq6tN0\n", 582 | "d+hHXNnLqJavgJ/P9lhbWaG/406OFv2B0h06nOKciNkRQ56+ianHj7O7qgpblYp/hIXxO1nPWogO\n", 583 | "Yc4FZkZGBpMnT24pqsPDw9m6dSve3t4UFBSQkJBASkrKJdeZ85jbIzc3l6CgIFQqFZmZmfSU/CmE\n", 584 | "2eryRbWSYTY0QE4OZGdDVpbhuPD7jAzDU/Ir8fKCPn0gKspw9Otn+Orldfnzsyqz2J65ne1Z29mW\n", 585 | "uY0TJScuet/FzoWxvcYyPmQ840LGEeYedlEPn07XyJ49fWlszKRv3w/x9X0QjhyBN9+Ef/8bNBo0\n", 586 | "OLLf7hMaG93o+X++9PlHXxp1OuafOcOqPMPT7d/5+rKyd2/s29P7IoRooXQOux6/Lard3NwoP9uL\n", 587 | "p9frcXd3b/n5QuY85va6++67+eqrr1i2bBnPPfec0uEIIdpJimoF6fWGJ9qnT196pKae37fltzw9\n", 588 | "zxfZ544BAwyTKy9UXFvM9qzt/JL2C7+k/cLpstMXvR/oEsi4XuMYH2oosns49KCw8N+cOHE/Njbe\n", 589 | "DBlyErX6bH9Kfj68/Ta88w5V5d4ksQI9NoTfn4PPu3dC9+58UlDAI6dO0aDTEefkxFdRUQTa2xvh\n", 590 | "X04Iy2DqOexqrlZUA7i7u1NWVnbJdSqViiVLlrT8nJCQ0OV7jTdt2sS4cePw8/MjIyMDtboDVnoS\n", 591 | "QhhdYmIiiYmJLT8vW7ZMimpTpNMZdh5PSYFjxwzH0aOGr9XVl56vUhlaRmJjzx8xMeDufv6czIpM\n", 592 | "fkn7hY1pG9mUvomSupLz16NiiP8QbgmdQIL9OrQNh/H3n0/v3m9c/EG1tfCvf5G37ACnSmZjRSMx\n", 593 | "Totw+v1N8PjjJDk6MuXYMTIaGvBQq/kiMpJxFwYhhGg1c85hl2v/SExMxMfHh/z8fMaOHSvtH2fp\n", 594 | "9XoiIiI4efIkX3zxBdOmTVM6JCFEO8iTajOj1xtaSM4V2EePGjo0jh69/CTK4GBDcR0bC/HxhsPV\n", 595 | "1bBhzaGCQ2xM28jGtI1sy9xGk7YJgDBHeDcWQEWVx3LG9pmDi/1vZlRqtZycsJH8X+yxo4BBPIqt\n", 596 | "TR3MmEHZU08xA9hQVoYKeC4oiMXBwVjLclFCtIk557DfFtULFizAw8ODhQsX8vLLL1NRUSETFS/w\n", 597 | "3nvv8eijjxIbG8v+/ftleT0hzJAU1V1EU5OhyD540HAkJUFy8uV7tsPDYejQ80dUFDToaticvpkf\n", 598 | "T/3IT2d+Yqp3Drf1hP3l8Oej1owMHMWksEncHn47vd17A6Br1JE0JonqPdW4euYwoOQBrPTNAGhv\n", 599 | "uYUX/vhHlqlU6IGxrq58HhGBT0cu9C1EF2euOWz69Ols3bqVkpISvL29ef7557n99tu55557yMrK\n", 600 | "kiX1LqO+vp7g4GCKiorYuHEj48aNUzokIUQbSVHdhWm1cPKkocg+cAD27DF83/ibTRwdHGDwYEOB\n", 601 | "PXw4jBihJ7thOyWnJ6CmniXHVGwrOf/vGOUZxR3hd3BH+B300/XjQNwBNIUa/GY6Eub8MXz0UUs1\n", 602 | "v+nee5nxu99RaG2Nt40Nn0dGcoObWyf+Kwhhviwxh1nimM958cUXWbRoEePGjWPjxo1KhyOEaCMp\n", 603 | "qi1MUxMcOgS7dxuOPXsMkyJ/q18/mDNnFYMGPYaVdQB5rn/lu1P/48fTP1LVWNVynr+zPw9qHyRh\n", 604 | "UQKqJhVhb4fhN80OVq2ClSuhpIQCNzfu+9vf2BIRgQpYEhzMs0FB0g4ixDVYYg6zxDGfU15eTmBg\n", 605 | "IDU1NRw4cIDY2FilQxJCtIEU1YLiYkNxvWsX7Nhh+L6xEaystLz7bhxhYcn89NMCiopeYdjIJmzD\n", 606 | "trKv5hu+O/ktudW5AIw7NI5FXy9CZ6Wj6p0qbpx9I046NaxeDW+8gTYtjb/OnMnzs2aht7Lixu7d\n", 607 | "+ffAgXjLLoxCXJEl5jBLHPOFnn76ad58802mTZvGF198oXQ4Qog2kKJaXKKxEfbvh23b4PTpvcyY\n", 608 | "MQxQMW/eXk6fNjw58faGMQk6QkceoNL3W7YWfsOQL4Ywc/tMauxqmP/wfCKHRzI1ciqTe9+C84Yt\n", 609 | "8NprbGpq4r5Fiyhyd8e7vp7V/v7c3L+/sgMWwkRZYg6zxDFfKDs7m5CQEHQ6HadOnSI0NFTpkIQQ\n", 610 | "rSRFtbim06fnk5u7nPr6aD7+eC+JiTaX7BYZFARxN53iln1HCUl2J881j9//7veUO5ZjZ23Hzb1v\n", 611 | "5u7wu7iz1IvqDz9hRlwcW87+afOppCReGjIEu+HDFRidEKbLEnOYJY75t+bMmcPq1auZN28eq1at\n", 612 | "UjocIUQrSVEtrkmrrWXfvn40NGTQq9dLBAb+iVOnYPNm2LQJtmyBc3s42KFlOclEUE2edz2v//5N\n", 613 | "krWb0GP4z8HW2pabQm9itv1wjqfb8tcBA2lWqxl45gz/+fFHIubMgcmTwcpKuQELYSIsMYdZ4ph/\n", 614 | "69ixY/Tr1w87OzvOnDmDv7+/0iEJIVpBimrRKmVlP3P48M2oVHYMHnwYB4c+Le/pdIbl+zZtMhyH\n", 615 | "tzXxWv1B/GhgH24scvTCb+LXEPklWapt6NABYGNlww1+93Lc806yndzo1tDAm6tW8cipU6iefhpm\n", 616 | "zgTZkVFYMEvMYZY45suZNm0aa9as4eGHH+a9995TOhwhRCtIUS1a7cSJORQWrsbFZRTR0VtQqawv\n", 617 | "e15TE+z+qo6G3yVhW6dho8qbF/XhgAq6F+IwaB2OQ9ZS3D0RPTqw7oZNyBNoet4MwO07dvDBa6/R\n", 618 | "o1s3ePxxmDfv4q0hhbAQlpjDLHHMl5OSkkJUVBQqlYqUlBR69+6tdEhCiGuQolq0mkZTyt69UWg0\n", 619 | "hYSEvEJg4IKrnl+1r4rkhGR0dToa7wzgO58Q1m9QkZ5+9oTuRRD+NY5DvqTWcwt6rzEQNh9sHPEq\n", 620 | "L+OTl17m5n37oHt3mDsXnnrKsEWkEBbCEnOYJY75Sh544AE+/vhjZsyYwWeffaZ0OEKIa5CiWrRJ\n", 621 | "aemPHDkyCZXKhtjYvTg5RV/9/PWlHL3tKPpmPb1e6EXgX4I4cwb+9z/YsMHQj11XBzgUQ+RaVMPX\n", 622 | "o79hHLgMAODWbT/wn5dX4VRfj97aGtU998Azzxj2Xheii7PEHGaJY76SjIwM+vTpQ3NzM4cPH6Zf\n", 623 | "v35KhySEuAopqkWbnTr1f+TlvYODQxSDBu3D2rrbVc8v/KKQE/edAD30/ntv/J84P+mmsdGwNvaG\n", 624 | "DYZC+8gRwDUbHtkK433AWo1NTT7PfPQKS789hI2hHRv9jTeieuYZuOkmkE1kRBdliTnMEsd8NY89\n", 625 | "9hirVq3izjvvZN26dUqHI4S4CrMuqh988EF+/PFHvLy8OHLkyCXvS3I2Dq22jv37Y6mvP4mf3xOE\n", 626 | "hf39mtfkf5jPyd+dBKDvh33xfdD3sufl5hqK6/XrYf3JGmqfPAQhGgAcU9fyl08+4Pe7G3FqMpxf\n", 627 | "F9Gbbn9ajGr6dLCx6ZgBCmEiLDGHWeKYryY/P5/Q0FDq6+vZt28fcXFxSockhLgCsy6qt2/fjqOj\n", 628 | "I7NmzZKiupNVVe0nKWkYen0zAwb8D3f3m655Tfbfs0l9KhVUEPFpBN4zvK96flMTbNmhY8npTPb0\n", 629 | "zgRroLSW7kmv89ieRJ7YDT1rDOdWeDpR/9gj+D61GJydO2CEQijPEnOYJY75WhYsWMBrr73GqFGj\n", 630 | "2Lp1Kyr565wQJsmsi2ow9JxNnjxZimoFZGa+SHr6ImxsPImLS8LOzu+a12S8kEHG4gywgvDV4fjc\n", 631 | "79Oqz9pfVcX0wymcaa4DHajWW6M+voYZ2k/448EqoooN51XZW3H0jpH4L36FwMih1zE6IZRniTnM\n", 632 | "Esd8LRUVFYSFhVFSUsIXX3zBtGnTlA5JCHEZ7c1fsjOHIDBwIW5u49Foijl2bBo6neaa1wQ/G0zw\n", 633 | "smDQQcqsFAo+KWjVZ8U5O3Nk2CAWBASgsgL9rVrc588gJzqNEb4buTX+JhID1Dg36Bj+xTZ8+g/j\n", 634 | "qzgvPvxoEYU1hdc3UCGEUJCrqysvvvgiAM888wy1tbUKRySE6Ehm86R6yZIlLT8nJCSQkJDQidF1\n", 635 | "fU1NxezfH0NTUy7+/k/Tu/frrbqu5Ym1Cvp+1BffOZfvsb6c3ZWVPHTqFEfP/h/LHG8f7q0IJfFH\n", 636 | "PSd+WcmMnLeYkpeN9dn/hv4YBl+MGsSAaY/x8OgpuNi7tHWYQnSKxMREEhMTW35etmyZxT21lSfV\n", 637 | "l6fVahk8eDBJSUksXryY559/XumQhBC/Ie0f4rpVVu4kOTkBvb6ZqKiv8PSc0qrrMv+WSfqzhkWr\n", 638 | "w94Ow++xa7ePnNOk0/FqVhZ/zcykSa/Hy8aGFWFh3OPpSVaWip8/PIzjf57m9vTNOGgNS4bs7Qlv\n", 639 | "DFVzLHISM+Nn8PjNt+Jge/WVS4RQkiXmMEscc2vt2LGDUaNGYW9vz4kTJwiWdfuFMClSVIsOkZ29\n", 640 | "nNTU+VhbOzNo0F4cHPq26rqs17JIW5AGcHYd68A2TcJJqa3l4VOn2F5ZCcCt7u6s6tMumF2qAAAg\n", 641 | "AElEQVSHwLPbm1emlnD6mdcIXb8KtwbDrMY0V3hjOHwc5Yi/1RRmxUznqdvH4WCvbsuQhTA6S8xh\n", 642 | "ljjmtpgxYwaff/45d911F2vXrlU6HCHEBcy6qJ4+fTpbt26ltLQULy8vnn/+eR544IGW9yU5dx69\n", 643 | "Xs+xY1MpKfmKbt3CiI3djY1N67YWz3s/j1OPngI9+D/tT+hroW0qrHV6Pf/Mz2dBaipVWi3draxY\n", 644 | "EhzME/7+2Fqdbf+vq0Pz4WoaXnwFp4JMAEq6wT/i4e14KFV5EtIwlRkD7uOJKcNwd5NpA0J5lpjD\n", 645 | "LHHMbZGTk0Pfvn2pq6vjp59+YuLEiUqHJIQ4y6yL6muR5Ny5mptrSEoaSW3tIVxdb2DAgA1YWbVu\n", 646 | "7eii/xZx4v4T6Jv1eM/2pu/7fbGybVthm9fYyOOnT7OupASAcAcH3g4L40Y3t/MnabXwzTfoX3sN\n", 647 | "1Z49ANSrVXwcrefNYXDGA6gMJKhqOvdGTWfelAEEBcnyVUIZlpjDLHHMbfX666/zzDPP4O/vz7Fj\n", 648 | "x3CWZUSFMAlSVIsO1dCQxYED8Wg0hfTsOY8+fVa1+trS9aUcu/sYujodrje4EvVVFDaubd/QZUNp\n", 649 | "KY+fOcOZ+noA7vH05I3QUPzPtoQAoNcbtnJ87TX4/nsAdCr4MdSet4Y1sCkEUAFFkfiUTGdqxHQe\n", 650 | "uD2U6GjZwFF0HkvMYZY45rbSarUMHz6cvXv38sgjj/Duu+8qHZIQAimqhRFUVu4+O3Gxkd69V+Lv\n", 651 | "//tWX1u1v4ojk46gKdTgEOlA/x/70y247ZMJG3U6Xs/O5m+ZmdTrdHS3suK54GCevLAl5JwTJ+CN\n", 652 | "N+DTTw07zgCZ3m68EdPERzG11NqdPS8nHtec6UzpM437bvNl9GjZxFEYlyXmMEscc3scO3aMmJgY\n", 653 | "NBoNmzZt4oYbblA6JCEsnhTVwigKCz/nxIkZgIqoqC/x9Lyr1dc2ZDZw+NbD1B2rw8bbhv7f98d5\n", 654 | "cPv+vJnZ0MD8M2cuagl5MzSUCe7ul/ZtFxbCP/8J77wDeXkAaBwd+C4ukGejMknxNDz5Rq+C9LF0\n", 655 | "S72PW0OmcM9kNyZMACendoUoxBVZYg6zxDG311//+leee+45evXqxZEjR+jevbvSIQlh0aSoFkaT\n", 656 | "kfECGRmLUalsGTBgA25uY1t9raZCw7G7j1GxqQKrblZE/ieSHrf3aHcs/ysr4/HTpzl9tiVkvJsb\n", 657 | "r4eGMsDR8TIfroGvv4aVKw0tImfljYjm7wPtWd7jAM1WZze60drA6VuwPjGdG/0nM2WyA7fdBr6t\n", 658 | "X3ZbiCuyxBxmiWNuL41Gw+DBgzl06BB/+MMfeOutt5QOSQiLJkW1MBq9Xs+ZM3/g/9t77zi5qvP+\n", 659 | "/33vnTu9bO9adaGGGqhQJJoRCAHCAptiY0cGGxw7AX7+huASE2xKHCfO146MQ/wDEttgO3QsAcEC\n", 660 | "gUURokmod23vZXb6zC3fP+7s7I60kna1K620e956ndc5t865ozPPfubMc56nrm41iuJjzpy38fnm\n", 661 | "9vt6I2mw5849ND7ZCBKMe2AcY78/Fkk+MafmhGGwuq6OHx86RFDXkYFVJSX8ePx4Sh2Ovi/avBlW\n", 662 | "r4annoJ4HAB9wng+um4B/1DewLrQO5hYcbBJemDXdbD1ZubnL+Xz16qsWAHTpgk/bMGJMRpt2Gh8\n", 663 | "5sHwySefsGDBAnRdZ82aNSxfvny4uyQQjFqEqBacVEzTYMeOW2hp+SOqWsTcue/idk8awPUm1f9U\n", 664 | "zcHvHwQT8q/JZ+pvpp7QAsZuWpNJflRVxa/q69FME48sc29lJd8ZMwaPovR9UVsbPP44PPooVFkh\n", 665 | "+XC5iK68hpcvKeOniff4pGVTz/nRfNhxA2y9mUn2xVy3QmbFCjjvPDjaSwgEhzMabdhofObB8pOf\n", 666 | "/IT77ruPgoICNm/eTHl5/xNpCQSCoUOIasFJxzASbN16NR0d63A4Kpgz5y1crokDukfba23svGUn\n", 667 | "WoeGa5KLGc/PwHt2H64bA2BPNMq9+/fzUlsbAGV2Oz8eP56vFBdjO3wxYze6DmvWWLPX69b17J89\n", 668 | "m5Yvr+S/ZqR4Yv/z7Grb0XMsWAHbb4Stt1CgzeXaayRWrIDLLweXSOgoOAaj0YaNxmceLIZhcOWV\n", 669 | "V/LnP/+Ziy++mHXr1qGIb+8CwSlHiGrBKUHTwmzduoxg8B0cjjFpYT1hQPeIHYix/frthDeHkd0y\n", 670 | "Zz1+FsU3FQ+6b291dPCd/fv5JGxlXJzicvGj8eP5QmEh8rH8Nvbtg//8T3jySUgvhMTjwbz5ZvZ9\n", 671 | "8XM8IW3m99t+T1Wwquea1imw9RbYdjOu6BSuuAJWrICrr4aCE3cZF4xQRqMNG43PPBQ0NTUxe/Zs\n", 672 | "mpqaeOCBB/jhD3843F0SCEYdQlQLThmaFuKzz5bR1fUuDkdlWliPH9A99KjOnjv30PTbJgDKvlXG\n", 673 | "xJ9ORHENblbGME1+39zMDw8e5EDad3q2x8OD48ezPD//2BkeEwl4/nl47DF4++2e/eeei3nHHXyw\n", 674 | "eDxP7X+RP27/Iy3Rlp7j9fNgxxdgxw3InZO48EJLYK9YARMHNpEvGKGMRhs2Gp95qFi3bh1Lly5F\n", 675 | "kiTeeOMNLr744uHukkAwqhCiWnBKsYT1lXR1vYfDUcns2etwuycP6B6maVL3yzr237MfUzPxzPQw\n", 676 | "7elpg3YHAUgZBk82NvKjQ4eoS8esXuT389D48VzaOzPj0di505q9/u//ho4Oa5/fDzffjPZXX+HN\n", 677 | "ghBPb/s9z+98nlAy1HNd42zYbgls2s5ixgy47jpLYJ9zDhzNG0UwshmJNmzcuHH4/X4URUFVVTZt\n", 678 | "2pR1fCQ+86nke9/7Ho888gj5+fl8+OGHjB8/sIkLgUBw4ghRLTjlaFpXWli/j6oWMWvWawOKCtJN\n", 679 | "6OMQO27ZQWxPDMkhMfGnEyn/dvmxZ5X7SVzX+VV9PY9UV9OSssLnXZKTwz+MHcvFOTnHf41YDJ59\n", 680 | "Fv7jP+C993r2T58Oq1YRv/kL/G9oM8/ufJaXd79MV6Irc4rccjbGthssgd0ynbKynhnsSy4Bu33Q\n", 681 | "jyc4QxiJNmz8+PF8/PHH5OXl9Xl8JD7zqUTXda6++mpee+01Zs6cyXvvvYdPBNEXCE4JQlQLhgVN\n", 682 | "C7N9+0o6Ov6Movg5++w/kZOzZMD30SM6++7eR8P/3wBA3lV5TH1yKvaioVGeYU3j53V1/LS6mqCu\n", 683 | "A3C+38/3x45lWV8JZPpi+3bL7/q3v4XmZmufosDy5bBqFYkrPsefa97i2R3P8uKuFwkmgplLbR3T\n", 684 | "0bbcYLmJNM/A55NYtgyuvRauvBLy84fkMQWnKSPRho0fP56PPvqI/KMM3pH4zKeaYDDIokWL2LVr\n", 685 | "F9deey0vvPACsvi5SyA46QhRLRg2DCPBzp230tLyDLLsZPr0P1BQsOKE7tXyXAu7v74brUNDLVSZ\n", 686 | "/MvJFN5QOCSz1gAdqRSr6+r4v7W1tGsaAHO9Xn4wdizXFRQce0FjN6kUvPKKJbDXrLEiiQAUFsKt\n", 687 | "t8KqVSSnTeGNA2/wzI5neHHXi3TEOzKX27vOIrn5BstNpGkWsixx3nnWIsfly2HmTBEPe6QxEm3Y\n", 688 | "hAkTCAQCKIrCHXfcwde//vWs45IksWXLMpLJZiRJRlWLcLkm4vHMTJcZ2GwnlmF1NLF3714WLlxI\n", 689 | "R0cH9913H4888shwd0kgGPEIUS0YVkxTZ8+eb9HQ8BggMXHiv1JRcfcJieF4bZxdX9lF5/pOAAo+\n", 690 | "X8DkX07GUXqUxC4nQFjT+I/6ev6lpoamtFvIdLeb71ZWcmNREWp/Z4OamuB3v7ME9vbtPfvPPRe+\n", 691 | "8hW48UZS+bm8efBNnt3xLC/seoG2WFvmNFdsAvEt12HuuA5qzgdTobLSEtdXX225iYhwfWc+I9GG\n", 692 | "NTQ0UFpaSktLC5dffjn//u//zuLFizPHJUli/fpj3UHC651Dbu5l5ORcRk7OYhRFpOfui3Xr1nHl\n", 693 | "lVei6zqPPvoo3/zmN4e7SwLBiEaIasGwY5omVVUPcuiQFQKqtPQbTJ68GlkeeIIX0zCp/896Dtx7\n", 694 | "AD2kY8uxMfFnEyn5q5Ihm7UGiOk6TzQ28pPqamoSCQDGOBz8bXk5Xy8rI2Cz9bPDJnz0ETzxBPz+\n", 695 | "9xBMu34oihXI+ktfguuuQ3M7eeuQ5SLy/M7ns6KIOPVC2H0t8c3XwYHLQHPhcsFll/XMYldUDNmj\n", 696 | "C04hI92GPfDAA3i9Xr7zne9k9kmSxN/93c0oihvTNFm0aBzz5tmJRLalyw5MM5k5X5ad5OUtp6jo\n", 697 | "i+TnLxcC+zB+/etf841vfANJknj66ae56aabhrtLAsGI4a233uKtt97KbD/wwANCVAtOD5qb/8iu\n", 698 | "XX+FYcTJybmMGTP+B1XtezHT8YjXxNlzxx7aX20HIPfyXKb8xxRcE4Z2+jZpGPy2qYmfVlezOxYD\n", 699 | "wKso3F5ayl3l5YwbyHRxLAYvvWSlRH/tNUi7meB2W6sUv/QlWLoUXZF5v/Z9Xtz1Ii/seoEDHQcy\n", 700 | "t1BND56GK+nceB3sWQ5xK2LJ7Nk9s9gLFoisjmcKI82GRaNRdF3H5/MRiURYunQp999/P0uXLs2c\n", 701 | "c7xn1vUoweB7dHa+QUfHOkKhjzLHZNlFQcFKysq+TiCwZEi/SJ/JPPLII3zve9/DZrPx8ssvs2zZ\n", 702 | "suHukkAwIhEz1YLTiq6uD9i6dQWpVBNO53hmzHgWn2/eCd3LNE2anmpi31370No1JIdE5b2VVN5X\n", 703 | "ieIeWlVpmCavtrfzrzU1rO+03E9k4PrCQr4zZgwL/QP0AW1thWeesQT2u+/27C8ogC9+0RLY552H\n", 704 | "CWxv2c6Lu17kxV0v8nHDx5lTFWzkhS4i+MF1JD9bAV1jMre48kqrLF1quXQLTk9Gmg07ePAgn//8\n", 705 | "5wHQNI0vfelLfPe73806Z6DPHI/X0tLyLC0t/0NX1/uZ/S7XZEpLv05p6W0n/OV8pGCaJvfeey//\n", 706 | "8i//gsvl4vXXX+fCCy8c7m4JBCMOIaoFpx3xeDXbtq0kHP4YSXIwZcovKS297YTvl2xOsv87+2n6\n", 707 | "nZUwxlHpYOK/TqTw+qFbyNibT0Mh/q22lt83N6Olx98Cn4+/Li/ni4WFuAY6TXzoEDz9tCWwd/RK\n", 708 | "fz5+vCWwv/AFmDcPJInqYDUv736ZF3a9wNuH3kY39czpBdoctB3L6dx0NdTNB1NBkqxLr7wSrrgC\n", 709 | "Fi0CdeBeN4KTxGi0YYN55ljsII2NT9DQ8ATJZD0AsuympGQVFRV343ZPGsqunlGYpsntt9/OE088\n", 710 | "gdfrZe3atSxZMvCISwKB4OgIUS04LdH1OPv23Z1ewAglJauYPPnfB+UvGXw3yN5v7yW82UpHnnNZ\n", 711 | "DpN/MRnP9JPjg1mXSLC6ro7H6uvpSLty5NlsfK20lDvLypg40JWEpglbtlji+ve/h7q6nmMTJsAN\n", 712 | "N1gC+5xzQJJoj7Wzds9aXtz9Iq/te41oKpo53SMV4G+6ipZ3l6PtXgrxHMDKU3PZZT0ie+zYQb8N\n", 713 | "gkEwGm3YUDyzYWi0t79KXd1qOjpe774zBQUrqKj4DoHABaPSNUTTNL761a/y9NNP43K5ePHFF7Nc\n", 714 | "bwQCweAQolpwWtPY+N/s2XMnhhHH5ZrCtGlP4fefe8L3M3WT+l/Xc/D7B9HaNZCh9GuljPvHcTjK\n", 715 | "hy5KSG+ius4fm5v5ZV0dH4fDmf1X5Oby1+XlLM/PRxnoH3hdh3fesVxEnnsOGht7jo0b1yOw588H\n", 716 | "SSKuxXn70Nus2bOGtXvXcrDzYOZ0RbJRmryQxLbltLy7HFqnAlZ/pk61xPWVV8JFF4mIIqea0WjD\n", 717 | "hvqZw+Ft1Nb+jKampzILHP3+RYwd+wPy8q4adeJa13XuuOMOHn/8cex2O88++yzXXHPNcHdLIBgR\n", 718 | "CFEtOO0Jh7eyc+ctRCLbkCQb48b9iMrKe5GkE/eLTrWlOPgPB6n/z3rQQXbKlN9VTuXfV6Lmnjz/\n", 719 | "hw+7uni0vp4/NDcTNwwAKhwOvlJczKqSEia53QO/qa5bftfdAruhoefY2LHw+c9bOc8vuABsNkzT\n", 720 | "ZGfrTtbuWcvavWt5p/qdbDcRZQKBpuU0vL2c6M4loFlK2uGAJUssP+zLLrMWP4p8EieX0WjDTtYz\n", 721 | "JxKN1Nf/krq6R9E0awGz1zuPsWN/QEHBCiRp9AxmwzC46667WL16NTabjSeeeIJbb711uLslEJzx\n", 722 | "CFEtOCPQ9TgHDtxHXd3PAfD7L2Dq1Mdxu88a1H2je6Ic/MFBWp6xQtTZcm1U3ldJ+bfLh3wxY2/a\n", 723 | "Uyn+q7GRX9XXsy8dNQRgcSDAqpISvlBYiLe/Yfl6YxhWWvRnnrHSpNfX9xzLz7fCf6xYYSljj+X2\n", 724 | "0hHr4PX9r7Nm7xpe3ftqVjxsu+ykQltCctdSat9aCs0z6Z7Fzs+HSy+1BPZll8HEiSL5zFAzGm3Y\n", 725 | "yX5mTQvT0PAY1dU/JZWy1ll4PDOprPw+RUVfGNSX9TMJ0zS57777+Od//mcA7r//fu6///5RN3Mv\n", 726 | "EAwlQlQLzija2/+XXbv+imSyEUlyMG7c/YwZ839OKKZ1b7o2dXHgvgOZxDFqkcqY74yh7Jtl2Hwn\n", 727 | "IG77iWGabAgGebKhgWdaWoimZ689sswXi4pYVVLCBYFA/zI2HnFzAzZuhBdftMrevT3HnE4rDvaK\n", 728 | "FXDNNVBUBIBu6HxQ9wFr96zllX2vsLlxc9Ytc5RSCoJL6fhoKW0ffg4iRZljlZXwuc9ZAvvSS6Gk\n", 729 | "ZOBdFmQzGm2YJEkENwZJtaYwdRPZLaO4FRSPglqoohapyLbBzyrreoyGhsepqfkJiUQtAC7XFMaO\n", 730 | "/R5FRbcM2qacKaxevZq77roLwzD40pe+xOOPP47DcXJc4QSCkY4Q1YIzjlSqg/37v0Nj45MAeL1z\n", 731 | "mTLlMfz++YO6r2madLzewcEfHCT0UQgAW56NinsqKP92OWrOyf0jG9I0/qelhScbGni3qyuzv9Lh\n", 732 | "4KaiIm4pLmaWx3NiM0mmCbt2WXGwX3rJEtvdSJIV9mPZMrjqKpg7N+PX0RxpZt2Bdby+/3Ve3/86\n", 733 | "DeGGrNuOsc3F3XAF9RuWEtp+Pug9f4xnzOgR2YsXQ07OwLs92hmNNkySJNZzjJSKEqgFKvYSO/YS\n", 734 | "O44KB65JLlyTXVY9yTWgL8KGkaCx8b+prn6EePwQAE7neCor76Ok5KvI8sgXmGvXruWmm24iHA5z\n", 735 | "wQUX8Mwzz1BaWjrc3RIIzjiEqBacsbS3v87u3d8gkagCJEpLb2f8+Iex2wsGdV/TNGn/33aqflxF\n", 736 | "13uWuFX8CuXfLqf82+VDmvb8aOyJRnmysZGnmpoyGRvBSol+c1ERNxcXDzx6SG8aGuBPf7JmsN94\n", 737 | "A5I9GeooLu4R2JdfnlHDpmmyrXmbJbAPvM5fqv5CXItnLnMqbsZxEcb+S6l++xLih+aAaf2ULkkw\n", 738 | "Z4612PGiiyyRnZ9/4t0fLYxGGyZJEh+d+xFqgYqkSuhRHSNqoId0ki1JUs0pOM5bYi+x45npwTPb\n", 739 | "g3eOF+9sL+6pbmT16DPchpGiuflpqqoeJhbbY93HXs6YMf+HsrKvj/hMjVu2bGH58uXU1dVRXFzM\n", 740 | "H/7wBy6++OLh7pZAcEYhRLXgjEbTwlRV/Zja2p9hmho2Wy7jx/+Y0tJvDPrnW9M06Xyrk6oHq+h8\n", 741 | "03ILkVSJopuKqLinAt9c31A8wjExTJN3g0Gebm7mmeZm2rqzLGLFvv5CYSErCwuZMBiBHQrBm2/C\n", 742 | "K69Ypba255iiwPnnWwL7yith1qzMLHYsFWND9YbMLPbW5q1Zt/XacihLLSG1+1JqNlyCVj8TzB5R\n", 743 | "M3Nmj8hessTS8oJsRqMNO94zG5pBqjVFsjFJsiFJojpBbF+M6N4osb0xYvtjmIkjr5fsEp6zPfgX\n", 744 | "+fEv8hM4L4BzgvOIX35MU6e5+Rmqqx8mErHGtKoWUFFxN2Vl30JVR+5PLo2Njdxyyy2sX78eWZZ5\n", 745 | "6KGHuPfee5HFimSBoF8IUS0YEUQiu9i372/o6FgHgMt1FhMm/FN6Vf/gF94E3w9S8681tL7QCpbb\n", 746 | "M4GLAoy5Zwz5V+cjKSd/cU/KMPhzRwe/b27mhZYWImn/a4A5Xi8rCwpYWVjIdLf7xJ/ZNGHbNnj1\n", 747 | "VUtgv/OOFV2km4ICy5/jc5+zyrhxmUP1oXrWH1zPmwffZP2h9Vlh+wD8tnzKUxej7b2UqrcvIVnX\n", 748 | "E7oP4KyzekT2RRdBefmJPcJIYjTasME+s2mYxKvjRD6LEN4cJrzFKvH98SPOVQvUjMj2n2fV3QuU\n", 749 | "TdOkrW0NVVUPEQp9AICi+Ckv/xYVFXdjtxcdcb+RgKZp3H///Tz88MMAXHHFFTz++OOUiw+kQHBc\n", 750 | "hKgWjBhM06S19QUOHPh7YrF9APj95zNhwj+Rk7N4SF4jdjBG3S/qaHi8AT1kiU1HpYPS20spva0U\n", 751 | "R9mp8b+M6jpr29p4vrWVNW1thHsJ37NcLlYWFnJdQQHn+nwntsixm85OWLfOEth//nP2LDZYIT+6\n", 752 | "BfYll2T5dFR1VrH+UI/Iru3KvjbPXkxJ8kK0AxdS9c6FJA7NAaPHF3bsWGuSvLvMmgUnEhDlTGY0\n", 753 | "2rCT9cxal0bokxBd73fRtbGLrve7SLWksl9blfAt8JFzcQ45F+UQOD+A7Jbp7FxPVdVDdHa+CYAs\n", 754 | "uygt/TpjxvwfnM4xQ97X04G1a9fyla98hfb2dnJycli9ejW33HKLiA4iEBwDIaoFIw7DSFJf/59U\n", 755 | "Vf2IVMoKlZeTczFjx/6QnJyLh+SPgtal0fB4A3Wr64gfSM+AKZB/dT5ld5SRtzTvlMxeA8R1nTc6\n", 756 | "O3m+pYWXWluzXESKVJVleXlcnZ/P5Xl5BAajSk0T9uyxRPa6dbB+PQSDPce7c553C+zzzwefL32p\n", 757 | "yf6O/aw/uD4jtJsiTVm3dykeys3zkKoXU/f+hUT3LIRUjx+r2w0LF/aI7EWLIC/vxB/nTGA02rBT\n", 758 | "9cymaRI/GLcE9sYugu8ErWyrvV5asqVF9kU55FycA7N2UNfyz7S1/SndVxuFhV+gouJu/P4FJ73P\n", 759 | "p5qGhgZuv/12XnnlFQCuv/56Vq9eTYkI7SMQ9IkQ1YIRi6Z1UVPzM2pr/y+6bok/v/8Cxo37Ibm5\n", 760 | "lw+JuDYNk443Oqh/rJ62l9owNWu8OSocFH+5mOJbi09aGvS+0AyDDcEgz7e28qfWVqp6LXK0SRKL\n", 761 | "AwGuzs/nqrw8zhqMmwiApsEnn/SI7HffzV7wqChWJJElS6yViRdeaLmPYAmave17eaf6Hd6pfocN\n", 762 | "1RvY174v6/Y2yUaFbR7ulgtp33IBjR8tglBZ1jnTpvWI7PPOs1xIRpL752i0YcP5zKmOFMF3gnS+\n", 763 | "1Unn252EPw1n3L0gLbLn+3Bf00hs4eME5ZcA61civ/88KirupqBgJbI8cn5SMU2Txx9/nHvuuYdw\n", 764 | "OIzf7+ehhx7im9/8JooyOmJ6CwT9RYhqwYhH04LU1a2mpuZnmUxqPt98Kir+PwoLrx+yeLSJxgSN\n", 765 | "TzbS8OsG4gd7/De987wU31pM8c3F2IvtQ/Ja/cE0TXZEo6xpa2NtWxvvBYP08o6mwuHgc7m5mVJs\n", 766 | "H2TfolHLB3vdOnj7bfj442x/bLDi7C1ebAntJUuyHKcbw41ZIntz42YM08i6vEAdQ35sIYkDi6jb\n", 767 | "uIhU9bxMxkewJsbPOQcWLLAytM+fb8XPPlN/sR6NNux0emYtqGWJ7NDHoSyRTVkz9jtfQVv0AoZq\n", 768 | "RQpyOMZQXv43lJbejqrmDk/HTwKHDh3iW9/6VmbWet68eTz66KMsXLhwmHsmEJw+CFEtGDVoWoj6\n", 769 | "+l9RU/MvGbcQu72M8vK/prT0G9jthUPyOqZhEnwnSNNvm2h+phk9mBaWCuRclEPh9YUUfL7glITm\n", 770 | "6017KsX/treztq2N1zs6aEll+5Oe7fFkBPaSQODEMjr2JhyG99+HDRvgL3+BDz6A+GGLxcaPt2aw\n", 771 | "Fy60/DlmzQLV+pITSoR4v/Z9NlRtYGPdRj6o/YBQMpR1uSLZKJVmY29ZRMfWhXR8tgjaJ9F7AWRh\n", 772 | "YbbInj/f2ncmMBpt2On8zFpQo3NDJ53rO+l8Kz2TbQLOGFzxv3DD81BRA4CMm8KiGymvuAOfb8GI\n", 773 | "8EU2TZMXX3yRu+66i5oa6zlvvPFGHnroISZOnDjMvRMIhh8hqgWjDl2P0tT0W2prf0E0ugMASXJQ\n", 774 | "XHwzZWXfxOebP2R/APW4Ttuf2mj6bRPtr7Zn3EOQIHBBgILrCyhcWYiz0jkkr9dfDNNkayTCuo4O\n", 775 | "/tzezl+CQWK9oonYJIlFfj9LAgEWBwKcHwjgH6zITiTgo48sgb1hgzWrHcoWyTid1lTzokU9Qrui\n", 776 | "AiQJ3dDZ1bqLD+o+YGPtRjbWbmR7y/YjZrO9Si4FqXnQcA4tn51DZO88aJ9Ib6E9bpwlrs85x/JQ\n", 777 | "mTMnk1TytGI02jBJkvjazp10ahop08QmSdgkCSVddxdVknDLMm5FOWrtURRybLZMccvykIrbVEeK\n", 778 | "4F+CdKzvoHN9J5GtIViwCa5/DuZ/lDlPjUylOLCKMefchsN15gdoj0QiPPjgg/zbv/0biUQCVVW5\n", 779 | "8847+cEPfkDR6fhBEghOEUJUC0YtpmnS2fkmtbU/p61tDd0rlNzu6ZSUrKK4+Ms4HEO3ICfVnqLt\n", 780 | "T220PNdC++vtWbF0ffN9FKwoIG9ZHt45XiT51M5qJQyD94NB1nV0sK6jgw9DoaxfuWVgttfL4rTI\n", 781 | "XpyTM3h3EV2Hzz6zZrM3brRmsvfsOfK80tIekb1ggaWC0wlpQokQH9V/lCW0D18ACeCWA+Qn52HU\n", 782 | "nUPLlnNIHjoHOiZmxc0uLe0R2N1l4sTh9dEejTZMkiRrEexJwCZJWSI797B2oapSaLdTqKoU9Wq7\n", 783 | "++k7nGxNEnzbEtnt27cQP+s5awY714pzT8KOff/nyLN9kdK51+Cfl3vKFjSfDKqrq/nhD3/Ib37z\n", 784 | "G0zTxOVyceedd/J3f/d3IiOjYFQiRLVAAMRi+6mr+xVNTb8llWpO71XIz19GSfFUGr4AAB9dSURB\n", 785 | "VMlfkZd3FYoyiAQrh6GFNNrWttH6XCttr7RhRHskrFqskndlnlWW5qHmndz06H3RkUqxIRi0Smcn\n", 786 | "H4fDaId9lia7XCwOBFjk97PA72eG241tsAq0rQ02bbIEdrfQ7uw88rwJE6xII91l7lwoKsI0TepC\n", 787 | "dXxc/zEfN6RL/cd9Cm2X5Cc3OQezYTbtu2aRqJoFzTOyIo54vTB7drbQnjEDBpNrZyCMRhsmSRK/\n", 788 | "rqsjYLNhl2V000TrVbq3k6ZJVNeJGsZR67CuE9Q0OjSNTk0jbhjH70AfeGSZQrvdEtqqSpHdTpnd\n", 789 | "TqnDYdV2O2UOByV2O/Zen4FkU5KOt5pp2PccXblPY0zf1HPTjhykdy/DF/w8BdMWk3NhDt45XmT7\n", 790 | "mbfS9rPPPuP73/8+a9asAcDhcHDbbbdxzz33MGnSpGHunUBw6hCiWiDohWGkaG9/lcbGJ2lrW4Np\n", 791 | "WuHpFMVLfv7VFBZ+gby8ZUMqsPWoTvvr7bS/0k77q+0kansidiCDf6GfvCvyyLkkB/9CP7Lj1P/R\n", 792 | "jeg6m7q6MkL7/WAwK/kMgEuWOcfnY6HPxwK/nwU+H2OdR2asGxCGAXv39gjsjz+GLVssV5LDqajI\n", 793 | "FtqzZ8OYMZhYiWk+afgkS2g3hBuOuIWERK45GXvHLCIHZhHaOwuaZkHnOLrdR2TZ0vQzZlhZIWfM\n", 794 | "sMpZZ4FjiN3kR6MNO5nPHNd1grpOZ1pk9y7tqRQtqRTNySQth7WTA+hPgapaIrsP0V3cVIW6539I\n", 795 | "KM+hBw70XFRXBm9fhPTBRfgC8wmcHyBwQQD/eX7sBaducfNg+fTTT3nooYd47rnnAOv/cvny5dx9\n", 796 | "991ceumlI8KvXCA4FkJUCwRHIZlspqnpKZqbnyYU6vGPlGUP+flXU1BwHXl5VwzpCn/TNIlsj9D+\n", 797 | "qiWwg+8EMVM9Y1h2yvjP82fi5voW+lCcpz6sVcow2BwO824wyKZQiE1dXew/fBEiUKiqLPD5mOfz\n", 798 | "McfrZa7Xy7jBCu1UCnbtssL5dZfNm62FkYfj91vK9+yzs+v8fBpCDWxp2sJnTZ9l6l2tu9AM7Yjb\n", 799 | "OPDhi80k1TCNrv3TMZunQcs0CI7NuJAoCkye3COyuwX35MmZtZcDZjTaMEmSMHftsr44JZM9X6AU\n", 800 | "xSqy3NM+fLt32263vuXY7VY5wTFnmiZduk5LWmA3p1I0JZM0JJM0JBLU92o3JpPox78lYLLQdpAV\n", 801 | "0XXM5XWc9raeQ82F8M6FsGExfDYL1yQvgfMD+M/341/gxz3djaye3rPZ27dv52c/+xlPPfUUifT/\n", 802 | "37Rp01i1ahW33nqriHMtGLEIUS0Q9INY7CAtLc/S0vIModCHvY4oBALnk5+/nLy85Xg8M4Z0NkYL\n", 803 | "aXS80UHnm1a0gcjWSNZxySHhX+S3/uim0y3bi4ZnZqstlWJTV1dGZH/Q1ZWViKYbv6Iwx+vNlLle\n", 804 | "L9M9nqyfzQeMYcC+fdlC+7PPoKWl7/NLS7OF9vTpcNZZJDxOdrXuyojs7tKX+wiAarpxx87CaJpO\n", 805 | "6OA0aJ4OrdOshZGGpaRV1fLNnjLFms0+66yedmHhsbXeaLRhkiRxUp5YVXsEdm+x3d3uXbvdVnG5\n", 806 | "BtTWnU5anU7q7XYaVJV6XachmbSEd1qA1x8mvmV0ZvEZi9nAEmMDBXJrpstmyIv08TnwwUL4cD60\n", 807 | "FWA4JLSZTuzneMib76d8YQ55032npW92S0sLjz32GI8++igNDdYvQ4qisGzZMlatWsXVV1+NfbBr\n", 808 | "MwSC0wghqgWCARKLHaK19Tna2tYSDG7IuIiAFaM2N/cycnIuISfnUpzOiiF97WRrkuBf0nFz+xDZ\n", 809 | "AM4JzozA9i/y453lHRaXEdM0ORiP82EoxOZwmE9DIT4Nh2k+LJQfgCpJTHG5mOHxMN3jYbrbzXSP\n", 810 | "h8ku1+DEdnMzbN1qlW3brHr7dogc+b4BUFICU6dairdX3ZTnYEf7bna07GBn685M3Rhu7PM2sqni\n", 811 | "jk/GaJlCtGayFeavLV2HyjOz2zk5PQK7dz15sqXTRqMNkySJYGUJul1BUxU0m/VLjGwYSIaJZJjI\n", 812 | "hpm1LRkGsm4gmSaSnt5OaZmipI78cndKUFUreHp38XrB50P3+2kqLKS+oIC63FzqcnKo83iodzsx\n", 813 | "nFWU2TYyU3qHcmqybpesmoj93QWweQ5smwkxNwAxF9ROlemYqZKc4UQ9203OVDdlfhdlDgfldjtF\n", 814 | "djvyMLlfpFIpXnnlFf7rv/6LNWvWoKW/bOfn57Ny5UpWrlzJpZdeKgS24IxHiGqBYBBoWpD29j/T\n", 815 | "3r6WtrZXei1ytHC5JpOTcymBwIUEAufhdE4Y0pnsZGuSrne7MqmWuz7swohk+zpLqoR7uhvfXB/e\n", 816 | "eV68c714Z3ux+YYn61tjIsHmcDir7InF+pydtEkSk12ujMie7nYzw+NhksuF60SzuRkGHDqULbR3\n", 817 | "7YLdu4+Mo92Nw9GjeidPtqaeJ0ygs7yAHfZOdrbvyRLbhzoPHfXlFcOJPTKRVNNktKZJ0N5LdPcS\n", 818 | "3OXlUFc3+myYJEnwj0N8UxNUHew6ONJ1d3Fovdo6ODVwpcCdApdm1e6Utc+rSXhSMm5NxqvJeFIS\n", 819 | "Lk3Ck5Jwp0ycGriTBu6EgTuhYdMH93/XNt5O9RIXwfkGxpQIstrz2TYMmWjdZKRP5+B5fzZsPRsi\n", 820 | "3sxxTYHqSjgwAfZPhKoJEJ6q4i53UO50Up729y53OLLavsGGzjwOzc3NPPXUUzz55JNs3bo1sz8Q\n", 821 | "CHD11VezcuVKrrjiCjyeU5eJViAYKoSoFgiGCNM0CIc/o7PzTTo719PZ+Ta6nh2HWVUL8fsX4fef\n", 822 | "ly7zUZSh++NhaAbR7dEekb2xi+juKEcoVglck1x4Z3txz3Djme7BPd2Ne4p7WKIPRHSdXdEo2yMR\n", 823 | "dkQi7IhG2RGJcCAeP6orQIXDwWSXi0np0t2e6HL1OwRaFoYBNTWWwO4W2d11ff3Rr7PbrcDXEydm\n", 824 | "xHa8spwD+RI7vHF2R6vZ276Xfe372Nu+l+ZI81FvJRsObKHxpFrGY7ZPgFd+OepsmCRJcP3NoNvT\n", 825 | "RQUkkAyrYPa0s0of+7vPlTWrKKl0O9Vr+2jt9HmZdv+8pTOYllD3JcCXtGpvsu+2L5nePsq5gQR4\n", 826 | "DQidDR3nQudsCE0Beg9zA4zqYrQ9UzF3zsL+6Vykmkowsj8LQT8cGgc1YyzRXV1ptRtLrFN9mka5\n", 827 | "plEGlMsy5XY7ZS4X5V4v5Tk5lOfmUuJ0DjrSj2mabN26leeff57nn38+S2Db7XYuvPBCLr/8cpYu\n", 828 | "XcqcOXOQhzO2pUDQT4SoFghOEoahEQ5/TEfHerq63qer6/1MJsceFDye6Xi9c/F656TLbFQ1b8j6\n", 829 | "oYU1Ip9FCH8aJvRpiPAnYSLbIlkLIHt1B/dkN+7pbjwzLKHtmebBOdGJzXvqZ7ajus7uaDQjsnek\n", 830 | "hffBePyIEH+9KbfbLaHtdjPO6WSc08lYh4OxTidlDgfKQH8t6OqyxPXu3bB/f3Zp6tvfOkNpKYwd\n", 831 | "a+VLr6wkXlpIXY7Cfl+KbY4uthr17OvYz962vUf6bv8jo86GSZLEL39pYrdb3hOqavmdm6b1vae7\n", 832 | "7t3ub63rVtG0gZeUZpDSNVK6RlJPkjISpMxEuo5bbTNBUo+TNBKZ4xpxNDOBqSTAFgclAbajteOg\n", 833 | "xkCNWsXWux3Fa0YJpEV2oQbTc2BSIYwphfwSkA//LhmTkPflouwai7TrbJK7L4D6SVnx2btJqSa1\n", 834 | "5SZVY2WqK6G2AhpKob4M2vPonTsJyTAo7OykuLODgq4uCiNhCmIxCrUkhaZJqU2h3O2gOC8Hd2EB\n", 835 | "zvxinPklqHkFSLm53b5NWa+/d+9eXnjhBZ5//nk2bdqUNe4LCgq47LLLWLJkCRdccAEzZ85EOdFf\n", 836 | "qgSCk4gQ1QLBKcI0TeLxAwSD76dF9kbC4S3QR7wAh6MyLbBn4XZPS5cpQzarbSQNIjsiRLZFiG6P\n", 837 | "Wu3tEeIH4kfOaqexl9hxTXIdUZwTnag5pzaWtmYYVCUS7IvF2BeLsTcazbQPxOOkjvG5t0kSY9IC\n", 838 | "u1toj3M6Get0UpH+GXxAKdojEThwwBLY3XV3+9AhK1rJsXA6M4I7VVZCe6GX+hyFQ16Nlfc8Nups\n", 839 | "2Ei127reE8ykd320dt/7TMLxBOFEjHA8SigRJZqMEUlGSRntFORuoTR/G+WFexhbeIACf/sR/Ugk\n", 840 | "bbQ15ZKoLUI6WIFz3yR8u+bgacjOOtobzabTkZegudigpkJh/3gH9WUy9WXWDHf8KBFGbZpGYWcn\n", 841 | "hcEgRR0dmTo/2Ik3HMQdDeGKhnHE46jJBBImCaeHVtXB1miS7cEQO5ubaT8sso/b4+XsOXNZuOg8\n", 842 | "Ll6ymPMXLqC4WGRyFAw/QlQLBMOIrkcIh7cSDm8mHN5MJLKFcPgzDCPa5/kOR2VaYE/F7Z6KyzUR\n", 843 | "l2sCDkclsjx4YavHdKK7oxmhHd0RJborSuxADDN5DKGaZ8M51omj0oGz8sjaXmI/ZVkiNcOgppfg\n", 844 | "PhSPcygepyoepyodeeF4+BQly880U6cXfZU5HJTa7ajH+0la16G2FqqrLdeS6uqe0r3dV3KbNBKj\n", 845 | "c6Z6tD3zySKZbCIU+oiurk2EQh8SDm8hmezblUkiHzM+EaNtLHptOfqBEszdxSjbi7G3Hjsuf9iV\n", 846 | "pDOQpCNPo7XQpLFEoa7CQX2Zg5ZCaCmEhPP4/VVTKQo7Oynq7MzUBR0dmLW1NFVVUdfUxN6ODpr6\n", 847 | "+AwXKjDOKVPmUSnwOvH5PKh+P3Gnj5jDR9wVIOkKYHjyMDy5KN58XJ4c/E4PAZeXgMtLjsdDvtdL\n", 848 | "rtdDgd9LjteB1yvhdg8qKqNgFCFEtUBwmmGaOrHYvrTQ3ko0upNodBex2F5M82iznjIORwUu1wSc\n", 849 | "zvE4neMzbYdjDHZ7KbJ84u4bpm6SqEsQ2xfrsxixY2eqk1QJR4UDR6XDqksd2Evt2EvSJd225dhO\n", 850 | "eoKIuK5TnUhQdZjYrorHqUuHPetP5j0JK9FHcTrTXtFxaq+i9P1sXV2WwO4tumtqoK4O6Y03Rp0N\n", 851 | "E3b75JJKtROJbCMS2Uokso1weCuRyFZ0veuo19jVUlSzElu0HKm9BLO+CP1AAanteSQ+yYGu4yfD\n", 852 | "MgIKsUKFUL5Ep9+gzZeiJaDRlGPQmA/1hTJNRTa6/H16p2TT2motMt62zVr3sH9/n4uMbYpCsddL\n", 853 | "pdPJJJuNqcDZhsGMRILiaBQlFSdsh5ADQn3VdomQTSUkOwgpLiKKi4jNTcTmJW7zEVf9JB0BNHsu\n", 854 | "hjMXp+rDo3rxqB68di9+pxe/yxLtOW4vuR4P+T4vAY8Dj8cS6x5PT3RGIdzPfISoFgjOEAwjRTx+\n", 855 | "kGh0Vy+hfZB4/ACJRC1H9dsAQMJuL8HhKMduL8fh6Cl2ezl2ewl2exGqmo8kDcxX0TRNkk1JEtUJ\n", 856 | "4tVxEjWJnna6TjUfxwWiu5cOKSO0HaUO1GIVtSBd8o9sK76jCNVBYJomHZpGfVpg1/Wue7Ubk0kG\n", 857 | "kvTaIUkU2e0Uqir5qkqezUZer3Zf+4ocjlFnw4TdPvWYpkkyWU80updYbA+x2F6iUauOxfYd48u8\n", 858 | "hU3OQ6UCJVGCHMqH9nyMxlyMmhy0/QGSu73QlAupfoTMU0AqVNELFRK5MrEcmXAAuvzQ6TNp9Zk0\n", 859 | "ew0aPBq1Hp0Gr0nEqUN9nZV9tbtUV1vi+2gUFEBJCfaCAty5ufgCAfK8XgodDopkmbx4nEAkkl3C\n", 860 | "YQKRCP5oFF80ijcWwxuLYU+HCAyrRwrzsB0idoiovWpVIiLbiUpOIrKTCG4ikocIHhKKm7jiJWnz\n", 861 | "kbJ50e0BZNWHU3Hjsrlw2dx47G48dhdehxuv043f5cLvchNwu8nxuMn1usjxOjPC3e22vMxcLqsW\n", 862 | "7ugnDyGqBYIRgGEkiMericcPEosdIB4/mGknk3Ukk00cW3R3I2Gz5aUFdiGqWphpd9c2Wx6qmovN\n", 863 | "loPNloOiBI47C67HdBK1abFdEyfZmOwpDT21HhpYhAVJlTIC25ZvswR3nootYEMJKNgCNqvk2I7c\n", 864 | "F7ANKmGGbpqZNNbNySTNx6kPT+veLy65ZNTZMGG3Ty9MU0/blioSiarD2ta2aSb6dS+FXGxGAXIi\n", 865 | "FykagFAAs8OP2eLDaPSi1Xkx6j0QDFgl7D0iekmf2CTkXAUjz4buk0h6ZeJeaLVH2Jc8wIHYIWpC\n", 866 | "B2joOEhb2yGinU2YxnFsTSAA+fmW+C4o6Gnn50NenhVkPhAAlwtV0zIC+/DiO8r+w4srkcCdSOBK\n", 867 | "F3cigTOZRDZNUvJhojxdR/vYF1MhZoO4DWKSSky2E5ccxHASw0kcF3HcJGU3CdmDJnvQFB+66sVQ\n", 868 | "/NhsHhyyE6fNiUNx4lKdOG0O3HYnLrsTj8OJx+7E63TicTrxuZz4nE78Hic+lwOPW8bpzBbx3fWJ\n", 869 | "ZpY9kzijRfVrr73G3Xffja7r3H777fz93/991nFhnAfOW2+9xcUXXzzc3ThjOFPeL8NIkUw2kkjU\n", 870 | "kUzWkUj0lG7RnUq1kEq10T/xnY2i+DIi22bLPaKtKF4UxcsHH9SwePH8zLZVPJm2GVNJNad6hHZj\n", 871 | "klRbyiqt6dKrfXhM7gH326tkCW3Fq1jFoyB75Exb8fRzv0dBskl9zp5HeqW6btc02lMp2tLttqPt\n", 872 | "W7x4xNkwYbeHluG2QaZpkEq1pIV2PclkI8lkQ6YkEg3pfY30tSj7eEiGG1n3ISW9SHEvUtSDGXZj\n", 873 | "dnkwO1wYbW7MDhdEPFaJO61sOAnHke2Uyma2cDZn00wzDb3/yY00So0000y73o7Rz75KiorqDqB4\n", 874 | "/ci+AJIvYIltvx/D50H3e9ACVo3Pa/l7dBen87j+Hs7DhHZf4vto+1zJJI5kEkcq1VOOsy1pSQxS\n", 875 | "mGaKhGLytgmz3JZQj6lpsZ5uJxRI2Kw62d2WZRKSSlJSSaCSkOwksZPATgInmmwnJTlJSU502YUm\n", 876 | "u9AVN4bswlDcmKoL0+bCVF2oNid2xY7D5kjXdpyqHafNjkO141LtOO123HYHLrsdtyO7eJzp4rJl\n", 877 | "kqV2J07tjizU3R6qiI0nar+GJ2tEL3Rd59vf/jbr1q2jvLyc+fPnc+211zJt2rTh7toZzXAb6DON\n", 878 | "M+X9kmUVp3MMTueYY55nGBqa1k4y2ZwW2c0kk1adSrWQTDajaR1oWme6dKBpQXQ9hK6HSCRqjnn/\n", 879 | "l1+2JnmO0dMesV3hQRnrQZZdyLITWXaiyE5U2ZnZJ5l2iNsxYw7MqA0zrGJGVYywDTNsxwjZMMIy\n", 880 | "RpeM3iWhB2X0IOidEkanjJ6yocdtJMM2qLKBli66wtEiIRwXGWSnfNSiumRKnTLlRxxTkZ2Onm27\n", 881 | "zLH/t848hN0eeobbBkmSjN1ejN1efMzzLPHdmvnybrVbe7WtWtN6jmlaEFOOostRUJvAA+QPorOG\n", 882 | "wuYnZObeGKAs7qQs7sSMOiDigJgTUgWQLENP2Ah2GbR26rR1pWjtStIaStAWidMajdIej9GVjBNM\n", 883 | "RonrKZKhVgi1QsPAuiOj4JY9OBU3quJEVZzYbFaRbQ5k1YmiOlBUF7LdgWx3IqlOcDiJ2R3E7Cpt\n", 884 | "qh3T7sVwqGBX0Z0qpteO4VQxHCq6w9qnu1R0uw3NLmXMnCFbpq67GHLPPlO2ordITz6J74tfzBbi\n", 885 | "h4lxVdOsoutHtH3pbZuuZx/POr8TNdVmndPruGToSKaGaWiYaGDomOhgaJjomKaOIRkY6JgYWC0D\n", 886 | "XdLpxKBNNjBN3doH6KaEJsmkJBsaCinJRgqFlKSm99nQZQVNUtFkG7qkossqumzDkFV02Y6pqJiy\n", 887 | "iinbQVZBUUGxg+JAsp14RtBhF9WbNm1i0qRJjBs3DoCbbrqJl156SRhngWAQyLINu70Iu73/4alM\n", 888 | "00DXQ2haJ6lUb8HdmRHguh5G18N4PO+Rnz8xs91dDCOSruPoetcxF00dvfOAP12GAlNFMmxIhgqG\n", 889 | "DXSblYhEl3uKJmN21ykZUtZ+w7BK1l+qvrYP3xeRoUvp2T/CEHZ79GKJ7xOxLZH0F/cgmtZ1lLa1\n", 890 | "retBdD2CrkcwjGim3b1tyimw6Zi+VvAd/XUVIC9djkciYa01DgazS1cXhMNWxM2jlURCJ2x0ETa6\n", 891 | "oH/LTgaNqsjYFRlVkVFkGVWSUGQZRZJQJNkqstWWJZnWaJTSN99EkWVk2bpGlqy2LEvokowpy2iy\n", 892 | "TFKWkWQZkKxoT5KEJMnW7K1kjQFk65c8CWs/smSdL8np89NtxWUpzcz+nmtBSk8tW/vIvIb1mkgS\n", 893 | "JmDKkjU1Iqe3u38V6K6k7qYJpoQsmVhXmMhmr3NMUDGxpy+VTLDumEQmBXoYWZegr9wP/WTYRXVd\n", 894 | "XR1jxvTM41RUVPDBBx8MY48EgtGJJMnYbAFstgBO59hjnltY+I+cffY/HvW4YWgZgW2VCIYRP6zE\n", 895 | "srZ1PXaM4zFMM4VhJDHNVFa7r33dbdBBSmEqKUwlNrRv2ED4j+F76ZOBsNuCgWDZFh82mw+oGPT9\n", 896 | "DCPFG2/8A+ed97e9xHYEXY9iGFEMI5G2GwkMI4FpZm93t639PdvFxdnnWrZEwzCsutu2mKaGaaQw\n", 897 | "zBSgk0pBNNotsCEWs+p4/Mhy+P5EwgqB312SyXSSol7bhx83DEjpBil9YG5zzZHIoN97wbEZdlHd\n", 898 | "3xX/Jzs810jkgQceGO4unFGI92tgiPdr9CLs9slBfKYGxoMP/mS4uyAQZDHsorq8vJyamh7/zZqa\n", 899 | "Gioqsr/JisUuAoFAcPog7LZAIBAcyRCtkzxxzj33XPbu3cuhQ4dIJpP88Y9/5Nprrx3ubgkEAoHg\n", 900 | "KAi7LRAIBEcy7DPVNpuN1atXc8UVV6DrOrfddptY7CIQCASnMcJuCwQCwZGcFnGqBQKBQCAQCASC\n", 901 | "M5lhd//ozWuvvcbUqVOZPHkyP/lJ3wsQ/vZv/5bJkycze/ZsPv3001Pcw9OL471fb731FoFAgLlz\n", 902 | "5zJ37lwefPDBYejl6cPXvvY1iouLOfvss496jhhfPRzv/RLjK5uamhouueQSZsyYwcyZM/nFL37R\n", 903 | "53kjaYwJmz1whN3uP8JmDwxhswfGSbHZ5mmCpmnmxIkTzYMHD5rJZNKcPXu2uWPHjqxz1q5day5b\n", 904 | "tsw0TdPcuHGjuXDhwuHo6mlBf96v9evXm9dcc80w9fD04y9/+Yv5ySefmDNnzuzzuBhf2Rzv/RLj\n", 905 | "K5uGhgbz008/NU3TNEOhkDllypQRbcOEzR44wm4PDGGzB4aw2QPjZNjs02amuncyAVVVM8kEevPy\n", 906 | "yy/z1a9+FYCFCxfS2dlJU1PTcHR32OnP+wViBX5vFi9eTG5u7lGPi/GVzfHeLxDjqzclJSXMmTMH\n", 907 | "AK/Xy7Rp06ivr886ZySNMWGzB46w2wND2OyBIWz2wDgZNvu0EdV9JROoq6s77jm1tbWnrI+nE/15\n", 908 | "vyRJ4r333mP27NlcddVV7Nix41R384xCjK+BIcbX0Tl06BCffvopCxcuzNo/ksaYsNkDR9jtoUWM\n", 909 | "r4EhxtbRGSqbPezRP7rpb5KAw79ljdbkAv157nnz5lFTU4Pb7ebVV1/luuuuY8+ePaegd2cuYnz1\n", 910 | "HzG++iYcDnPDDTfw85//HK/Xe8TxkTLGhM0eOMJuDz1ifPUfMbb6Ziht9mkzU92fZAKHn1NbW0t5\n", 911 | "efkp6+PpRH/eL5/Ph9vtBmDZsmWkUina29tPaT/PJMT4GhhifB1JKpXi+uuv58tf/jLXXXfdEcdH\n", 912 | "0hgTNnvgCLs9tIjxNTDE2DqSobbZp42o7k8ygWuvvZbf/OY3AGzcuJGcnByKi4uHo7vDTn/er6am\n", 913 | "psw3rE2bNmGaJnl5ecPR3TMCMb4Ghhhf2ZimyW233cb06dO5++67+zxnJI0xYbMHjrDbQ4sYXwND\n", 914 | "jK1sTobNPm3cP46WTOCxxx4D4I477uCqq67ilVdeYdKkSXg8Hp588slh7vXw0Z/369lnn+VXv/oV\n", 915 | "NpsNt9vNH/7wh2Hu9fBy88038/bbb9Pa2sqYMWN44IEHSKVSgBhffXG890uMr2zeffddfve73zFr\n", 916 | "1izmzp0LwMMPP0x1dTUw8saYsNkDR9jtgSFs9sAQNntgnAybLZK/CAQCgUAgEAgEg+S0cf8QCAQC\n", 917 | "gUAgEAjOVISoFggEAoFAIBAIBokQ1QKBQCAQCAQCwSARologEAgEAoFAIBgkQlQLBAKBQCAQCASD\n", 918 | "RIhqgUAgEAgEAoFgkAhRLRAIBAKBQCAQDBIhqgUCgUAgEAgEgkEiRLVAIBAIBAKBQDBIhKgWCAQC\n", 919 | "gUAgEAgGiRDVAoFAIBAIBALBILENdwcEguHi4YcfZvv27Xz3u9/lww8/pL29nWAwyI9+9KPh7ppA\n", 920 | "IBAIDkPYbMHpjpipFoxKXn/9da699loqKir4m7/5G2688Ua6urp49dVXh7trAoFAIDgMYbMFZwJC\n", 921 | "VAtGJa2trcycOZN3332XVatW4Xa7ue2223j22WeHu2sCgUAgOAxhswVnApJpmuZwd0IgGA4ikQh5\n", 922 | "eXns37+fioqK4e6OQCAQCI6BsNmC0x0xUy0YtWzYsIHKykphnAUCgeAMQNhswemOENWCUcubb77J\n", 923 | "ZZddNtzdEAgEAkE/EDZbcLojRLVg1LJnzx5Wrlw53N0QCAQCQT8QNltwuiN8qgUCgUAgEAgEgkEi\n", 924 | "ZqoFAoFAIBAIBIJBIkS1QCAQCAQCgUAwSISoFggEAoFAIBAIBokQ1QKBQCAQCAQCwSARologEAgE\n", 925 | "AoFAIBgkQlQLBAKBQCAQCASDRIhqgUAgEAgEAoFgkAhRLRAIBAKBQCAQDJL/B0BwkwoaJTwcAAAA\n", 926 | "AElFTkSuQmCC\n" 927 | ], 928 | "text/plain": [ 929 | "" 930 | ] 931 | }, 932 | "metadata": {}, 933 | "output_type": "display_data" 934 | } 935 | ], 936 | "source": [ 937 | "n_vals = np.array([0.0, 0.3663, 0.9147, 1.4798, 1.7695, 1.8319, 1.85])\n", 938 | "n_particles = 2.\n", 939 | "g_vals = -n_vals * np.pi / n_particles\n", 940 | "f, axarr = plt.subplots(1, 2, figsize=(12, 6), dpi=100, facecolor='w', edgecolor='k')\n", 941 | "for i, g in enumerate(g_vals):\n", 942 | " p = gpe.GPESolver(v_trap=v_trap, g=g, N=n_particles, npts=500, R=6.0, dim=2, lam=0.)\n", 943 | " if i==0:\n", 944 | " y, mu = p.solve()\n", 945 | " else:\n", 946 | " y, mu = p.solve(xin=y)\n", 947 | " psi = p.get_psi(y)\n", 948 | " if i < 6:\n", 949 | " axarr[0].plot(p.basis.x, p.get_psi(y), label=r'g={g:+5.3f}'.format(g=g), linewidth=2.0)\n", 950 | " axarr[1].plot(p.basis.x, p.get_psi(y), label=r'g={g:+5.3f}'.format(g=g), linewidth=2.0)\n", 951 | " print 'i = {i:2d}'.format(i=i), 'mu = {mu:+6.4f}'.format(mu=mu)\n", 952 | " \n", 953 | "axarr[0].set_xlim(0, 2)\n", 954 | "axarr[0].set_ylim(0, 6)\n", 955 | "axarr[1].set_xlim(0, 2)\n", 956 | "axarr[1].set_ylim(0, 45)\n", 957 | "axarr[1].legend();\n", 958 | "axarr[0].set_xlabel(r'$r$', fontsize=16)\n", 959 | "axarr[0].set_ylabel(r'$\\Psi(r)$', fontsize=16)\n", 960 | "axarr[1].set_xlabel(r'$r$', fontsize=16)\n", 961 | "axarr[1].set_ylabel(r'$\\Psi(r)$', fontsize=16)\n", 962 | "f.suptitle('Solutions to the Gross-Pitaevskii Equation', fontsize=16)\n", 963 | "f.savefig('/Users/Adam/Desktop/tryme.png', dpi=100, bbox_inches='tight')" 964 | ] 965 | }, 966 | { 967 | "cell_type": "code", 968 | "execution_count": 23, 969 | "metadata": { 970 | "collapsed": false 971 | }, 972 | "outputs": [], 973 | "source": [] 974 | }, 975 | { 976 | "cell_type": "code", 977 | "execution_count": null, 978 | "metadata": { 979 | "collapsed": true 980 | }, 981 | "outputs": [], 982 | "source": [] 983 | } 984 | ], 985 | "metadata": { 986 | "kernelspec": { 987 | "display_name": "Python 2", 988 | "language": "python", 989 | "name": "python2" 990 | }, 991 | "language_info": { 992 | "codemirror_mode": { 993 | "name": "ipython", 994 | "version": 2 995 | }, 996 | "file_extension": ".py", 997 | "mimetype": "text/x-python", 998 | "name": "python", 999 | "nbconvert_exporter": "python", 1000 | "pygments_lexer": "ipython2", 1001 | "version": "2.7.9" 1002 | } 1003 | }, 1004 | "nbformat": 4, 1005 | "nbformat_minor": 0 1006 | } 1007 | -------------------------------------------------------------------------------- /presentation_2d_demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import dvr_1d\n", 12 | "import dvr_2d\n", 13 | "import dvr_3d\n", 14 | "%matplotlib inline" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "# 2-D Sinc Basis" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 2, 27 | "metadata": { 28 | "collapsed": false 29 | }, 30 | "outputs": [ 31 | { 32 | "name": "stdout", 33 | "output_type": "stream", 34 | "text": [ 35 | "Testing 2-D DVR with an SHO potential\n", 36 | "The first 5 energies are:\n", 37 | "[ 1.00000000004332 2.00000000111529 2.00000000111529 3.00000000218725\n", 38 | " 3.00000002647711]\n", 39 | "\n" 40 | ] 41 | } 42 | ], 43 | "source": [ 44 | "d1d = dvr_1d.SincDVR(npts = 30, L=10)\n", 45 | "d2d = dvr_2d.DVR(dvr1d=d1d)\n", 46 | "E, U = d2d.sho_test(num_eigs=5, precision=14)" 47 | ] 48 | }, 49 | { 50 | "cell_type": "markdown", 51 | "metadata": {}, 52 | "source": [ 53 | "# 2-D Hermite Basis" 54 | ] 55 | }, 56 | { 57 | "cell_type": "markdown", 58 | "metadata": {}, 59 | "source": [ 60 | "We only need a few basis functions (i.e. a few points) to get perfect eigenvalues." 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 4, 66 | "metadata": { 67 | "collapsed": false 68 | }, 69 | "outputs": [ 70 | { 71 | "name": "stdout", 72 | "output_type": "stream", 73 | "text": [ 74 | "Testing 2-D DVR with an SHO potential\n", 75 | "The first 5 energies are:\n", 76 | "[ 1. 2. 2.00000000000001 3.\n", 77 | " 3.00000000000001]\n", 78 | "\n" 79 | ] 80 | } 81 | ], 82 | "source": [ 83 | "d1d = dvr_1d.HermiteDVR(npts=5)\n", 84 | "d2d = dvr_2d.DVR(dvr1d=d1d)\n", 85 | "E, U = d2d.sho_test(num_eigs=5, precision=14)" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "# Plot Stuff" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 6, 98 | "metadata": { 99 | "collapsed": true 100 | }, 101 | "outputs": [], 102 | "source": [ 103 | "%matplotlib osx" 104 | ] 105 | }, 106 | { 107 | "cell_type": "code", 108 | "execution_count": 8, 109 | "metadata": { 110 | "collapsed": false 111 | }, 112 | "outputs": [ 113 | { 114 | "name": "stdout", 115 | "output_type": "stream", 116 | "text": [ 117 | "Testing 2-D DVR with an SHO potential\n", 118 | "The first 5 energies are:\n", 119 | "[ 1. 2.0000000011 2.0000000011 3.0000000022 3.0000000265]\n", 120 | "\n" 121 | ] 122 | } 123 | ], 124 | "source": [ 125 | "d1d = dvr_1d.SincDVR(npts = 30, L=10)\n", 126 | "d2d = dvr_2d.DVR(dvr1d=d1d)\n", 127 | "E, U = d2d.sho_test(num_eigs=5, precision=10, uscale=3, doshow=True)" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": null, 133 | "metadata": { 134 | "collapsed": true 135 | }, 136 | "outputs": [], 137 | "source": [] 138 | } 139 | ], 140 | "metadata": { 141 | "kernelspec": { 142 | "display_name": "Python 2", 143 | "language": "python", 144 | "name": "python2" 145 | }, 146 | "language_info": { 147 | "codemirror_mode": { 148 | "name": "ipython", 149 | "version": 2 150 | }, 151 | "file_extension": ".py", 152 | "mimetype": "text/x-python", 153 | "name": "python", 154 | "nbconvert_exporter": "python", 155 | "pygments_lexer": "ipython2", 156 | "version": "2.7.9" 157 | } 158 | }, 159 | "nbformat": 4, 160 | "nbformat_minor": 0 161 | } 162 | -------------------------------------------------------------------------------- /presentation_bessel_demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Testing the Bessel Basis" 8 | ] 9 | }, 10 | { 11 | "cell_type": "code", 12 | "execution_count": 1, 13 | "metadata": { 14 | "collapsed": true 15 | }, 16 | "outputs": [], 17 | "source": [ 18 | "import dvr_1d\n", 19 | "%matplotlib inline" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": {}, 25 | "source": [ 26 | "## With a Morse potential" 27 | ] 28 | }, 29 | { 30 | "cell_type": "code", 31 | "execution_count": 15, 32 | "metadata": { 33 | "collapsed": false 34 | }, 35 | "outputs": [ 36 | { 37 | "name": "stdout", 38 | "output_type": "stream", 39 | "text": [ 40 | "Testing 1-D DVR with a Morse potential\n", 41 | "The first 5 energies are:\n", 42 | "[-1.75751018 -0.76051377 -0.21815647 -0.00674606 0.05559304]\n" 43 | ] 44 | }, 45 | { 46 | "data": { 47 | "image/png": [ 48 | "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEACAYAAABfxaZOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 49 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XecVOX1+PHPgaWDNFEQwUoRwQZBEMvFFiyJRmONsSQx\n", 50 | "fpOYahJbkmWT3zeaboyanxp/GmOPMZaoUSw3IipKEUtAioI0KSooAgLL+f1x7rjDOLO7U++U8369\n", 51 | "nte0u3OfXYbz3DlPE1XFOedcbWgTdwWcc86Vjgd955yrIR70nXOuhnjQd865GuJB3znnaogHfeec\n", 52 | "qyF5B30RmSAic0RknohcnOb1QETWisjMqPwk33M655zLTV0+PywibYFrgCOBpcBLIvKgqs5OOfQ/\n", 53 | "qvr5fM7lnHMuf/le6Y8G5qvqQlXdDNwFnJDmOMnzPM455wog36DfH1ic9HhJ9FwyBQ4SkVki8oiI\n", 54 | "DMvznM4553KUV3oHC+gtmQEMUNX1InIMcD8wOM/zOuecy0G+QX8pMCDp8QDsav8Tqvph0v1HReQ6\n", 55 | "Eemlqu8lHycivgiQc87lQFVbnULPN+hPAwaJyK7AMuA04IzkA0RkR2ClqqqIjAYkNeAnZFNxl5mI\n", 56 | "TFTViXHXo1r437Ow/O9ZWNleMOcV9FV1i4hcCDwGtAVuUtXZInJB9Pr1wBeBb4jIFmA9cHo+53TO\n", 57 | "OZe7fK/0UdVHgUdTnrs+6f61wLX5nsc551z+fEZudQrjrkCVCeOuQJUJ465ALZNy2URFRNRz+s45\n", 58 | "l51sY6df6TvnXA3xoO+cczXEg75zztUQD/rOOVdDPOg751wN8aDvnHM1xIO+c87VEA/6zjlXQzzo\n", 59 | "O+dcDfGg75xzNSTvBdeccy5VGEo7oDvQIyrdgK5R6Qx0jEoHoB0Wi+rYdmtVBbYAjdHtRuDj6HY9\n", 60 | "8FFUPojKWuD9INANxf3tKpuvveOca5UokPfDtkTdGdgJ6BuVHYE+QG9geyywr4nKWiwof5RUNgIb\n", 61 | "gE3A5qg0AluTTtkGW7K9DmsYOkSlI9AlqXTDGpjtgJ5YY/Ee8C6wClgBrIxulyWVJUGgawv194lL\n", 62 | "trHTg75zDoAwFMEC+J7A7sAe0e2uwMDotZXYjnlLsMC5HAumicC6Ggu2HwRBPMElDKUz0AtrgPpg\n", 63 | "DVKi9MMaq/7YTn9bsX2+FyaVN4EFwIIgaNr5r1x50HfONSsMpT22T/UwYCiwFzAEGIRdfc/Hgt6b\n", 64 | "UVkILAKWBoFujqHKRRE1cj2w4L8L1rjtFpU9orIOmBuVecAcYDbWIGwpfa0/zYO+q0mhhMk55O1o\n", 65 | "yh93pSl/3BFLEyRyyG2xFELic6dR2YqlGjZjueTNWBpiE0055UTZQFN++ZM8c6BB7AEhCmoDgX2A\n", 66 | "fYERwHDs6n0R8F+agthcYG4Q6Pvx1Lb8RH+/flhjOBhrGBONZH+scXw9Kq8Br2KNwda0b1gkHvQr\n", 67 | "WBhKGyxX2hMLVl2wIJTopHoXWB3X1+Y4hBJ2xa7CdsGuyHaKSj/sq3sfmnLIa7Ec8gfAh9hV2nos\n", 68 | "MCeC9CaaAvnWqCSCvWCNQHIuuQ5oz7Y55UReuVNUOkclOc+8OakOH9LU2Zi4vzaprEm6TS4fBhq0\n", 69 | "KoCEobTFAtNI4ABgf2C/6HefFZVXseD0RhDoxta8r0svDKUT1gDsHZXhWKO6PdYIzAJejm5nBYGu\n", 70 | "K1ZdPOhXiCjADwcOBw7CPkB7Au9jwX0ddtUo2JVrd+wD1Y6mr5szgOeB6ZX8nziUsC32VXo4dhU1\n", 71 | "OCqDsGC6KCqLsXzyMuAdLIe8CssjfxBoUBYf5lBCwRqDxDeNblHZjqZ/y8RtovTAGvvkES/JDdn7\n", 72 | "UXkP2fo+w/67lXFTtmPv13dg5yU7033trjS2Xc3mdi/TZuuLdNr4IvByEOjK0v3mLgylOxb898Ua\n", 73 | "3f2wNNpiYCb2f3Y6MCMIdE0hzll1QT8MpQP2B/wMdgUDiQ+/Bb5/F7MVLaQwlDosyJ8JHIv9h34K\n", 74 | "mIx91Z7b0u8ShtITC4ZDsb/JWCxQzgT+HZUZpf6K2VqhhB2w/wgHJJW9sCD+GpZqeAPLn84DVpRL\n", 75 | "MC+1UMI6oDuHPDOQQ58ZR7/ln6H3uyPo+f4gttRtZfGAFbwxZC2z9t3EzP1hTc/tsM7LXjSNYEmU\n", 76 | "d9Pc/9RtoEHFXjyUq2jU01CaPu8jsZj2DjANeCkqM4JAP8r2/asm6Ieh7AN8HzgF61R6CWshN2NX\n", 77 | "RL2w4HEQ8AxwL3BXEOjHJa56i8JQ9gS+CZyBtfh3AP8MAl1UoPfvDBwMTIhKb+AB4B/AU3F2voUS\n", 78 | "bg8cChwCjMHyy3OxD3viyue1QIOKaLiLLcojDwbGYZ/tsVhqazrwQlSmBoEua/Z9JOxEUwOQGMnS\n", 79 | "G/u/0zvNa4nbRpppFDLcvhdosKkQv3+tiNJxiQu3UdHtCKyf4EUs3k0FXmupw7jig34YyoHAL7E/\n", 80 | "yLXADUGgqzP9XPR16jjgy9gf7dfAjXFP0Ij+8x4FfAcYDdwE3BwEOrcE594dOAk4GQsg92MNTRgE\n", 81 | "2ljUc0u4HRBgv/t4LA8/BWuYnwemBRpkfTVTrcJQOmL/6cdhDfdYLLX3XFSeB14pRcMdpaU6s20j\n", 82 | "kK7hSG0semH9JWkbhOZKoEHZXaTFJRpVtQ8WLw6MbgdgDf5Umhr8pck/Vw1BfwyW274nCDSrq4cw\n", 83 | "lJHAT7Aryv+DNRit+s8SXZEOpynH2hnLH78JvBVosL6VdajDvp1cguXj/wjcEVcjFIYyADgVSyn1\n", 84 | "A+4CbgNmFqJDOAoUI7CG91js29cLwCQsdfVyOYxkKRdhKL2wK/iDo7IfltKaEpXnUv9Tl7voM7Ad\n", 85 | "TQ1AokFI/lbRM+X1RNlMUyPwfgv3k59rdSd3JYvSuZ/BGoEx0e0G7GLgeeC58eN5oaRBX0QmAFdh\n", 86 | "ox3+oqq/SnPM1cAx2EiKc1V1ZppjCtaRG4ayH3bFPxD4MfBQaoALJWwDHAEcj12R7gK8gn2w1mJ/\n", 87 | "2P40TU6ZDzwcledTA1l0xXZOdL5lwBXAo+U00iYMZSgW/M/Cfr+/AbcHgS7O6n1seOShwBeAz2Oj\n", 88 | "YRJ/m2da20BWu6Qhk4kAf0j0eCrWj/Ms8GKl9EkVWtRYdMUahEQDkWgceic9n2ggkh8nOrkTjUE2\n", 89 | "pWIbjOgztQf2jXAsMHL8eEaXLOiLSFus0+1I7Kr4JeAMVZ2ddMyxwIWqeqyIHAj8UVXHpHmvgo7e\n", 90 | "if44nwV+i33VvDwI9Nko/XAOcCHWCN0NPA1Mz3RFGo0u+Qx2NXsc1hjcDNzA0+NXA/8DfA/LT18Z\n", 91 | "BPpsoX6PYoj+NuOwlNgXsWFltwH/yDQtPeqAPQr7FnM81gjej/UdzK7VztZkUZ52BE2pmoOx0VZT\n", 92 | "sCA/GRu+59988hR1cvdg28agZ5rHqSUxKuoDrAFIHhmV+nhN0uNPbsut/6Kk6R0RGQvUq+qE6PEl\n", 93 | "AKp6ZdIx/xd4WlXvjh7PAQ5T1RX5VLy1onTLWWyVBt4euJErL9mRN4Y+DlwNTMklWIUSDmHEKxdz\n", 94 | "+FOnc9SkOj7Y7ln6rPpecOSWVwpd/5ZIGCZa/qFYY9Qf2AELNonJR+tpuiJaAbwVlWVPM74dTX0i\n", 95 | "hwNPAHcCDzP+6S1YoD8dC/SvAX8H/hlosKREv2LZCkPpin3dHheVA7FlCRKpmsnYZJ2abxDLSVKD\n", 96 | "0TPpNt39dMd0x+Z6pDYImUrq62sLne4sddD/IvBZVT0/enwWcKCqfjvpmIeAK1T1uejxE8DFqjo9\n", 97 | "n4q3VvQP/BXabarn7Fvf4fS7+lPXOB+4Afh7Nrn2KL92PJYe2Z9N7W7msl+uZPqor2KB9UosIBa1\n", 98 | "s1TCcDDWSXsI1tmzAQvIS7BvXCuxD2ZiAasuNH1o+9E01bw7NiPzFeCVocx+49dbLt2l24fyVTpt\n", 99 | "GM7UA2HqgW/x/NgbWdPzzkCDZkeMVLOkr9VjaBpVMxgbgZQI8s8Hga6KrZKu6JI6uzM1CMnzLXry\n", 100 | "6fkX3bFY0VxDkWmyXqLR2KafstRB/2RgQiuC/pWqOiV6/ATwY1WdkVpxoCHpqVBVw5wrB4QSHg38\n", 101 | "AQuCPw40eCkaM3sc8HXsyuwJrOPxeWwm3UYsRy1YLn9YVI6Kjn8KGx56b2JCVNQ/8DngUuwf9pfA\n", 102 | "nan/OPmQMNwB+BrWKbsjNhzzSWCqBrkFYwnDrsDespURY5/nqIOe45ADp9J3XVc+fmPcyv92P/HW\n", 103 | "Bfv2eXKnjmzcR+z3fgj4VxBs+y2tGoWhbI+l9BKdaAdi/1mn0jSqZmaxhwiL0JZtZwInSvuoJN9v\n", 104 | "l3SbuJ9YobIuqaQ+TixJkXw/XWmT5n7ybXNFUm7T3Zc0x5HhteSSekxLz5HhudTXc3kt9f42jwWl\n", 105 | "E410ZQvd2CJd2EIXttCVLdIt6X5Xu/2kdEm6P41ZTOMVNtOGTbThUW6glEF/DDAxKb1zKbA1uTM3\n", 106 | "Su+EqnpX9Ljo6Z1Qwr2A32BrZfwQeDBdGica2TKepk6RwTT9h2jEOmT/i42umAw81tzkiegqYDw2\n", 107 | "gmg34FfAXwMNch65I2G4e/Q7nI41NrcBUzTI/9tE9Hc6IyoC3LFqe+499e+0p2mEySHdWaPH8shb\n", 108 | "R/N4+4G8PUTQuWKjcyYBU8pxbkQ2wlD68ukJY72xoXKJMdMvZBpVI4JNorKSPPM2sYZ8N+zbVmJp\n", 109 | "jS40Ld2QKJ3SlI7YZzGxjnxq2ZSmbE4pyctOJN8ml0aa1hpqbKFsTXN/a5r7mvRY2Xa5i8aU55Jf\n", 110 | "S3efNK+lFrJ8jgzPpb6ey2up99M9zum4c3iLL7C0Sycae7SBHoL2OJLxk0sZ9OuwjtwjsAD5Is13\n", 111 | "5I4BrmquIzeU8AhsttqNgQZZLWsaSjgMC7hHYgH3T7l0ukRLJLTNZ2x0KOE4bNjmaGy+wXWBBhnn\n", 112 | "G6SKruyvxEbHXA9crUGQ9xV2KOEQrDP2VGxZh7uwHP60dA1j1GewJ3AYML6OzeP34ZW2RzHpndG8\n", 113 | "2KUHa/q1QadjI1GmANPK9ZtAlIMfRtN6KSOwYN8OmKXK9FWrBrzx5JNnLL3llokfbdrUKbE07/Zs\n", 114 | "Oy49tWOwI01rxievsZMo65JK8pry65PKhpSSCPSbVDMGAudKP05fRI6hacjmTap6hYhcAKCq10fH\n", 115 | "XIPNFP0IOC81tZNc8VDC4cBPsYbkL8DVzeWSo5mHR2EdkYdi6Zxrs20wiiW6mr4Iy8E/ANwIPJep\n", 116 | "A1nCsA74BvAz4Fbg5xoEOW/0EH37GAmcAJyIBbB7gXuwjuyshq5FjcBg7BvN4Z356PB9mbXxUJ55\n", 117 | "5wBmtN+e1QPaoOuxkUyvkrSKY7E3rIjy7r2x4be7YcNtdwcGb90qQ4Ge69dvt3TlyoGrFizY58PX\n", 118 | "Xz+occaMw9suXjy4J7RJbASyAevsXpVU3k0pqaM71nlgdnGp+MlZicehhLtjyzCcjXVOvrClLS8B\n", 119 | "H9c1frJY1b5Y4zAduA+4pVyn84cS7oD9LudjX6lvI2W4o4ThXsDtWCD5tgbB6zmea3vs285ngaOx\n", 120 | "xvaf0fmmFrKjWcIweeG4w0EP6c/S1eOYMn8ML3wwhDfadWbDrlhD0UjTwmmJwLoa+30TV78baEof\n", 121 | "KE2rXLbH0iDJi5YlVtnso0p/kP6NjXUff/hhz7UrVw7Y+PbbQ1i4cHjH+fP3675o0V7tVq4csEi1\n", 122 | "7WKaOrwTOygtx9ZBWaGKrz3jKkrVBP2EUMK6Bbsz+rXh/KjTBiao0HF9Zxo3dGLTmh68uWgXvjv1\n", 123 | "4uDJOOqci+jK+2AsvXIC8LHCw/edRKf7TuKU5f24RNtwowatG0oaStgF67vYH+uXOAgbtvkf4PGo\n", 124 | "zCvVOHoJw7ZYymQ8lhI6GFghbJ28C4tmnso9iz/LY9IG/SRgYwE8kevuxLYdg4m89GZgw5YtdR+u\n", 125 | "XDmg3bJle3ZetGhol8WLh/Zctmz3fsuX79539eqdVm7c2HUu0a5HRLOpsYbmXb8ad9WoqoJ+lOr4\n", 126 | "IfADbJTNL7B0QScsQJyIjfgJgcs0CBaWsMp5CyWUuYM4+NURXDfwbQbsP5OP6xppiwWsJVFZQ1OH\n", 127 | "WBuatoDbAcu174hNlJpFNC0beLVclj6IGoHhWOotMWmpjqYRUy8A0zX49Dc0EbpjjVlijfh9sWGT\n", 128 | "b2JDVBOd7HOAear4htiu5lRN0Jcw7IB1MHYHLtQgmJ3252zY4UXAt4EvaxA8Wor6FoKE4SDgQWw4\n", 129 | "5EUaBBtDCfthQ0V3jkp3mobFbSXaSAVLjSwAFpZLgG+NqE9gIDbefQz27WQEylu8134BM3ps5Nnt\n", 130 | "uzG91x58VLcT1pjNiMosYLanYJxrUhVBX8KwMzYOfQNwhgYtr8QnYTgWWxbgOxoEdxe1sgUgYXgE\n", 131 | "tvLlzzQIro+7PqUmQhvsyv1I2jcG7Lr+YIav3cCo99YweF0Hem7qi7AE4RWatqJ7HZivQeHmPzhX\n", 132 | "6So+6EsYdsMmAS0GztOg9VexEob7AI9iI17KNpBKGF6ApaVO1yAIY65OyYjQF1t47xis43c1NsHs\n", 133 | "aeBZVd755FhL7Q2haRu6Edgwy52xPP1smjZaSeTxl2tQmQtpOZeragj6Z2O532/k8h9YwnBPrPPy\n", 134 | "txoE1xW6nvmIUhsTgS8BEzQI5sdbo+ISQbCgnViNcw9sQtejwCRVsl6/R8KwIzYSaCi2g1hi0+rd\n", 135 | "sVTYQpo6b9+ObhOjdZZq4DtDuepS8UEfLDi2dvRK2veyWazPAt/UILi/UHXMR3Tlei3WKXmsBkHV\n", 136 | "7l0qwghsCecvYkMt78OGi05RpWipGQnDLljw3yWpDMRGM+2Mbaj+ETZEMzFMcyU2fHQl9s0jUd4F\n", 137 | "1hZi5rNzxVQVQb8g7xeGo7Arys9rEDxfqPfNsS4dsU7pLsDJGpTHxLFCEqE/NkHuS9gV9x3Yipwz\n", 138 | "ymWoZDSnoBe26Fw/oC82CmoHbBRUb2zyWh9stu122Iza5IlYa9l29m1ixm3itrkZtxs9/eQKzYN+\n", 139 | "8nuG4THYuveHahAUfZvCDHXYDutgXgmcrUF5rcWdDxHaYauOfhWbH3AvNov4OVUqPrhFw027Yw1F\n", 140 | "YpXEHjStr5NYa6dr0m0Xtl1fJzG8uBO2ONpmrAH4GFtqYSM2DyHdmjrJcxSSS3Nr6CSvpZO4n269\n", 141 | "nOR1ctIVTXM/0/o3qc+R5phs18BJfo6U13I5Lp1cjmtOoY9r3XuMH7/Ug37y+4bhV7D1eMYWYu2a\n", 142 | "LM/dB/u28RI27LQqUgUi7ICtUvo/WP78L8C9qvjet82I+nQ60NQAdIxKYqXM5BUzE49TV8zMtGpm\n", 143 | "ulUy69h2ZczUlTKTV7lMfpy4Lyn3062Imbr6JRlez2a1y+TnSHktl+PSyeW45hT6uNa/x/jx/Tzo\n", 144 | "p753GNZjSx8H6SYBFemcA7AO5fuAn+TTR1EuRBgG/AibFHcv8CdVSr5xjHOuSbaxs03Lh1SFn2MT\n", 145 | "e+6OOlSLSsJwOLbi5I0aBJdXesAXYYwI92NDK+cDe6pyvgd85ypPTVzpA0gYtqNp/P/XixWIJQwP\n", 146 | "wzowv6dBcEcxzlEqIozClr4Yhm00f7Mqvum5c2XEr/QziGZxngLsA1wbjeQoKAnD07CAf0YlB3wR\n", 147 | "9hL5ZJjlQ8BgVa71gO9c5auZK/1PzmOjaR7BNn/5eiE6V6OU0RXYuPQvaBC8nO97xkGE7bHJY6dh\n", 148 | "m9Bc64uYOVfe/Eq/BRoEH2AbuuwG3JJvjj8aofM4to7MqEoM+CLUifBdbGkDBYaq8lsP+M5Vn5q7\n", 149 | "0v/kfGHYCVvUrRtwrgbBgix/XoCTsF3D/gb8tBKHZEZ5+xuwCUgXqpJ2NVPnXHnyyVnZnNPy+t8F\n", 150 | "LgMuh9ZtXhItiXwNNr3/WxoE/ylqRYtAhK7A/2KbufwYuK1cZs4651rPg34u5w7DYdhM0o+j239o\n", 151 | "sO0m5tFSChOwfPdRWA7/6kpc5leEg4FbsGGlP1Dl3Xhr5JzLlQf9XM9vQzqPx4L6BGAmtp5KYo/W\n", 152 | "kURj/YF7NQhWxVTVnInQARuCeRbwDVUeiLlKzrk8edAvgGi1xkOxYL8ZW6fkVQ2CZbFWLA8i7Anc\n", 153 | "gy09fIEqFddoOec+zYO++xQRTsWWdZ4IXOe5e+eqR7axs+hLErj4RKtg/h44FpigyvSYq+Sci1nO\n", 154 | "QV9EemH57V2wlMGpqromzXELsXXHG4HNqjo613O61hOhNzY7eAMwUpVP/ds452pPzukdEfk1sFpV\n", 155 | "fy0iFwM9VfWSNMe9BYxU1fdaeL/KS++ICLZV3/bYWupdsQZuHrAY1VjG7YuwN/AgthLmZapU3PwB\n", 156 | "51zrlCynLyJzgMNUdYWI9AVCVR2a5ri3gFGq2uywwIoJ+iIdgOOIUibYRhXLsJE+H2E7Lg3CdmGa\n", 157 | "DTyGLfvwPKqt3uQ99+pxFHA7cJEqfyv2+Zxz8Spl0H9fVXtG9wV4L/E45bg3se3lGoHrVfXGQlS8\n", 158 | "5Ox3PBlbk2Yx8E9sg5R5pPsjinTBlmY4Niq7Yumwm4DpaX8m7yryJSyHf7Iqzxb6/Z1z5aegHbki\n", 159 | "MgnbRzTV5ckPVFVFJFMQG6eqy0WkDzBJROao6uQM55uY9DBU1bC5+pWMyH7YDNxuwAWoPtHiz6h+\n", 160 | "BDwXlZ8gMgA4Bxs2+SEifwZuRbUgK1eK8APge8ARqrxWiPd0zpUfEQmAIOefzzO9E6jqOyLSD3g6\n", 161 | "XXon5WfqgXWq+rs0r5Xnlb7IKcB1wKXAzXnn6UXaAOOBb2P7yt4AXIvq8tzeDsGWUzgRG6Hzdl71\n", 162 | "c85VlFKusvkgduVKdHt/msp0FpFu0f0uwNHAq3mcs3REBJFLsXTJ0aj+pSAds6pbUX0S1ROBcdhG\n", 163 | "268jcgMig7KrIoKlm44FDvWA75xrST5B/0rgKBGZCxwePUZEdhKRh6Nj+gKTReRlYCrwL1V9PJ8K\n", 164 | "l4RIWyz3fgowBtWZRTmP6jxUL8RGAC0HnkPkbkQOaLmKCPBb4EgspbO6hR9xzjmfkZuuIsDVwHDg\n", 165 | "+Cg3X6pzdwO+DnwfeB1rSMPUTt8o4P8eOBg4WpX3S1ZH51xZ8WUY8q/Ij4CzgUNIM9msRHXogC2K\n", 166 | "9mNs5NNvgfsSQz5FmAicAIz3SVfO1TYP+vlV4kzs6vogVJfEWhdIpJk+B1wE7AxctRtvdljIbl8D\n", 167 | "DlFlRZzVc87Fz4N+7hU4GLgPOALV8utsFhkzm6F/6Ms7o7dQd2cfVl+Jqg/NdK7G+R65uRDZHrgT\n", 168 | "OK8sAz4gaPdhzN7tYn41vg+r5wGPITIFka8hsl3c9XPOVQa/0reO2weBN1D9YcnP3wrRWjpPYzNt\n", 169 | "J0dP1mHLQHwFG/f/L2zG7+Ooboqpqs65EvP0TvYn/j5wOtZxW3bBUoQdgReAn6pyW4aDdsCGl54O\n", 170 | "DMMasQeAJ1BdV6KqOudi4EE/u5OOwhZDG4PqmyU9dyuI0Al4CnhclfpW/tAA4CRs68cDsX1wH4/e\n", 171 | "51VUtxants65OHjQb/0JOwMvAz9B9Z6SnbeVorH4fwXaAWfmtNuV5fqPBo6ISk9gMvB8VKajuqFQ\n", 172 | "dXbOlZ4H/daf8CpgB1TPLNk5syDCN4ELgLGqFGRRtuhbwMHAWGAMNgFtAdb4vYxNCJsDvO3fCJyr\n", 173 | "DB70W3eyw4A7gBG0sLlLHEQYi+XkD1JlfhFP1AHrA9gvKsOAoUAvrDF4MypvAUuishRYWYq9AZxz\n", 174 | "LfOg3/KJugKzgO+h+lDRz5elqON2GvBNVeKpny0HsSewG7B7dLtzUukFvA+sjMq7wHvR7dqorME2\n", 175 | "lvkQWBeV9dj2jeuBj/3bhHP586Df8omuAzqjem7Rz5UlEdpina7PqfLTuOuTkQ0X7Q3sCPTBGoHe\n", 176 | "UemeVLpFJbGVZOek0gHYBGwEPo7uJ243p5QtSaUxpWxNuk1XNCrJ9xOFFp4jzW1z91t6LdNxrVUe\n", 177 | "/1ldWRG4vGCbqFQdkaOwUS37xF2VDH6M/ZtMjLkezbPUzoqo5Mb2FWgPdMQagPZJt+2SSl1UEvfb\n", 178 | "RqUOm1zYJnoszTyWpMeJ+yTdT/ccaW6bu9/Sa5mOa63416VyVaF2rvRFumNr+X+NMlzeWYTRwEPA\n", 179 | "KFUWx10f51xl8GUYMvsj8K8yDfjdsI7lb3nAd84VU22kd0ROAA7BNiovR1cDoSr3xl0R51x1K7+g\n", 180 | "b2vhtCvYkgi2mNqfgdPKcUkCEU7Ctk1scbcs55zLVzmmd76KbVWYP1uP/jbgb6hOLsh7FpAIvYFr\n", 181 | "gPNUKbsGyTlXfcox6N8BjETkywV4r59ho0MuL8B7FcNVwD2qTIm7Is652lB+6R3V9YicATyByAuo\n", 182 | "zsvpfUSOw741jCrH2aMiHI8th1Cu/QzOuSpUvkM2RS4EzsW2Lswuvy+yO7ag2Emolt1VtAg9gNeA\n", 183 | "s1QJY66Oc66CVc+MXOvQfQCYh+pFWbzRAGxW659RvbrQ9SwEEW4Atqjyzbjr4pyrbNkG/fJL7ySo\n", 184 | "KiJfASYjAvCjFtdqERkKPAZcXcYBfyxwHLa4mXPOlVTOHbkicoqIvC4ijSKScbihiEwQkTkiMk9E\n", 185 | "Ls7qJKqrseGMI4G/R2vgZzrRaCAEfobq77I6T4mIUIcNH/2hKmvjro9zrvbkM3rnVeALwDOZDhAb\n", 186 | "MnkNtpfrMOAMEdkrq7PY0sefxVZmfBqRo6NVIC0FJDIGkb8AjwLno/rXHH6XUvkWthLlXXFXxDlX\n", 187 | "m3JO76jqHEik3jMaDcxX1YXRsXcBJwCzszzZx4icDXwbG345EpE5QCdsga6bgOGoLs/utygdEXYC\n", 188 | "fgocnNMuWM45VwDFzun3h23WklmC7duaPetxvhq4Otr8YxS28uAUyqU3unm/A65XZU7cFXHO1a5m\n", 189 | "g76ITAL6pnnpMm3dBiRZBWMRmZj0MFTVMP276sdQOROaRBiHbVP41bjr4pyrbCISAEGuP99s0FfV\n", 190 | "o3J948hSYEDS4wHY1X6m803M83xlR4Q2wB+ASwu2161zrmZFF8Nh4rGI1Gfz84VahiFTYn8aMEhE\n", 191 | "dhWR9sBpwIMFOmelOCO6vSPWWjjnHPkN2fyCiCwGxgAPi8ij0fM7icjDAGrLH1yIjZ3/L3C3qmbX\n", 192 | "iVvBROgMXAH8QBXfD9Y5F7vynZFbBUT4CbCvKqfEXRfnXHWqnmUYKpwIfYHXgc+o8mbc9XHOVScP\n", 193 | "+mVChGvR/gwzAAAQU0lEQVSATar8IO66OOeqV/WsvVPBRNgN68AdGnddnHMuWTluolIN6oFrVFkV\n", 194 | "d0Wccy6ZX+kXmAjDgGOBQXHXxTnnUvmVfuH9HPitr6LpnCtH3pFbQCKMwiaf7emzb51zpZBt7PQr\n", 195 | "/cJqAH7pAd85V648p18gIhwA7AecHHddnHMuE7/SL5yfAL9RZWPcFXHOuUw8p18AIgwHngB299SO\n", 196 | "c66UPKcfj8uBP3jAd86VO7/Sz5MIQ4DJwB6qfBh3fZxztcWv9EvvUuBPHvCdc5XAR+/kQYSBwOeA\n", 197 | "PeKui3POtYZf6efne8DNqqyJuyLOOdcantPPkQg9gDexTVIWx10f51xt8px+6VwAPOwB3zlXSfxK\n", 198 | "PwcidMCu8o9VZVbc9XHO1S6/0i+NM4HXPOA75ypNVYzekQbpAZwL7I2tY78HsAqYHpWntF7nFuRc\n", 199 | "ggA/xDpxnXOuolR0ekcapB2WW/8p8DjwHDAXWADsCIwERmGbmrwE/BZ4Rutz/6VFOAa4AthflfL4\n", 200 | "4znnalbNbIwuDTIauBVYDFyk9fpKM8d2As4GLgLeA76r9To1t3ryKHC3Krfk8vPOOVdIJQv6InIK\n", 201 | "MBHb/Pszqjojw3ELgQ+ARmCzqo7OcFyrKy4NMgbbrORbwL2tvXKXBmmL5eN/DdwHXKb12uodrkQY\n", 202 | "DDwLDPTVNJ1z5aCUQX8osBW4HriomaD/FjBSVd9r4f1aVfHoCv9fwLlar49kX3OQBukFXAkcB3xD\n", 203 | "6/XBVv2ccDXwoSqX53Je55wrtJKnd0TkaVoO+qNU9d0W3qfFikuDjAIeBr6q9fqvXOuc9H6HYCmi\n", 204 | "x7AU0UeZ68d2wEJgH1WW5Htu55wrhHIcsqnAEyIyTUTOz/VNpEH6AA8A5xci4ANovU7GdrvqDMyI\n", 205 | "GpVMzgGe8IDvnKtkzQ7ZFJFJQN80L12mqg+18hzjVHW5iPQBJonIHFWdnOF8E5MehqoaAkiDCHAD\n", 206 | "cHtrUzGtFeX0z5YGOQ14RBrk18DvtV63NtWLNsCFwFcLeW7nnMuWiARAkPPPFzu9k3JsPbBOVX+X\n", 207 | "5rWMX1GkQb4CfBcYrfX6cV4Vbq5+DbILcAewDjhH6/UdqxsTsGGaB/gwTedcOYkrvZM+WIt0FpFu\n", 208 | "0f0uwNHAq1m9cYPsDvwKOKuYAR9A63URcBjwIpbuOT566VvYmvke8J1zFS2f0TtfAK4GtgfWAjNV\n", 209 | "9RgR2Qm4UVWPE5HdsaGRYKmk21X1igzv96nWKhpi+QzwD63X3+dU0RxJgxwK/JX1vZ/jqrcmsKnb\n", 210 | "AN8O0TlXbqpqcpY0yNeA84BDknPsJatTg2zHonGT6T1vF7quPE7rdUqp6+Ccc82pmqAvDdINW1Lh\n", 211 | "81qvL8VTJ9oBi/jykVeyx5MXYxPCLslmQpdzzhVTOQ7ZzNUlwKS4An7kc8ACvfWJq7HF3NoAr0uD\n", 212 | "nByNKHLOuYpSllf60SiaGcC+Wq+xjYsX4THgVlVu/+Q5y/VfA7yPTeiaFlf9nHOuWq70rwT+FHPA\n", 213 | "3wM4APhH8vNar88A+wN/Ax6UBrlNGmRwDFV0zrmsld2VvjTIWODvwJDmlkUofn24EqhT5YcZj2mQ\n", 214 | "rsAPgG8DTwFXaL2+XKIqOudc5XfkSoMcBPTW+lbP+C1CXWiPLdl8iCotbr4SdTp/HVu6eTZwI/DP\n", 215 | "Ys8rcM65ig/6cdcDQISTgO+oZjfVWRqkA3Ai1gCMwGb3/h14Po4hp8656udBvwBEeBjbKOXWnN+j\n", 216 | "QfYEzgJOAvoA92O7e/1H65tfZto551rLg37e9aA/tlTEzoWagSsNMgj7BnAEcBAwD5gCTMP28J2j\n", 217 | "9dpYiHM552qLB/2868FlwC6qXFCU92+Q9sBoYAy2f+9IYCesIZgDvAG8BSwC3gaWar36Ll3OubQ8\n", 218 | "6OdVBwQLvl9SJac9dHM6r3UED8a2nhwC7ArsEpV+wEZgBbAS2+P3/ah8AHyIrQq6DtgArI+O/zip\n", 219 | "bAI2J5VGYEt024jtgJa4VWBrPpvHO+dKx4N+XnXgMOBaYES5rKgZzfztAewI7AD0jEovoBvQNem2\n", 220 | "U1Q6A+2BDlFpD7RLKm2jUofN1Ug8luhx4t9BaWoIUgspt6nPpd5P97il54uhLP5dnSuYifTwoJ9z\n", 221 | "HfgrMEuVkq7oWY6kQRLBP7khSBRSblOfS72f7nFLzxdD7OlD5wpuIu950M/p/HTH8uiDVFkVVz2c\n", 222 | "cy4b1bIMQxxOBZ7ygO+cq2Ye9JucDdwSdyWcc66YPOjzyeJqQ4B/x10X55wrJg/65svAnapsirsi\n", 223 | "zjlXTHVxVyBuIrTBUjunxF0X55wrNr/Sh3HYhKYZcVfEOeeKzYO+XeXfWi6TsZxzrphqepy+CJ2A\n", 224 | "pcBwVZaV8tzOOVcIPk4/OycAL3nAd87VipyDvoj8RkRmi8gsEblPRLpnOG6CiMwRkXkicnHuVS2K\n", 225 | "syH3NfOdc67S5JzeEZGjgCdVdauIXAmgqpekHNMWWyr4SCyN8hJwhqrOTvN+JU3viLADMBfor0ps\n", 226 | "e/E651w+SpbeUdVJqp9sATgV2DnNYaOB+aq6UFU3A3dhKZVycBrwkAd851wtKVRO/yvAI2me749t\n", 227 | "MJ6wJHquHJwF3BZ3JZxzrpSanZwlIpOAvmleukxVH4qOuRzYpKp3pDkuq9yRiExMehiqapjNz7f+\n", 228 | "PAzCNih5shjv75xzxSIiARDk+vPNBn1VPaqFk58LHIvt/ZrOUmBA0uMB2NV+pvNNbO58BfQl4C5V\n", 229 | "tpTofM45VxDRxXCYeCwi9dn8fD6jdyYAPwJOUM24h+s0YJCI7Coi7bE8+oO5nrMQoi0RzwJuj7Me\n", 230 | "zjkXh3xy+n/CtuibJCIzReQ6ABHZSUQeBlDVLcCFwGPAf4G7043cKbEDsf1gp8VcD+ecK7mam5Er\n", 231 | "wp+AVar8vNjncs65YvON0Zs9B+2wfoaxqiwo5rmcc64UfBmG5h0JLPCA75yrVbUW9M8E0g0tdc65\n", 232 | "mlAz6R0ROgPLgCGqrCjWeZxzrpQ8vZPZ54CpHvCdc7WsloL+mcCdcVfCOefiVBPpHRF6AguBgaqs\n", 233 | "LcY5nHMuDp7eSe9kYJIHfOdcrauVoO+jdpxzjhpI74jQH3gV2EmVTGsEOedcRfL0zqedBjzgAd85\n", 234 | "52oj6J+Jr6jpnHNAlQd9EYZgO3U9HXddnHOuHFR10AfOAO5WpTHuijjnXDmo2qAfbZbio3accy5J\n", 235 | "1QZ94ADs93sp7oo451y5qOagfyZwh2p2m7M751w1a3Zj9EolQlvgdGz9fOecc5FqvdI/FFihStz7\n", 236 | "8TrnXFmp1qDvHbjOOZdG1S3DIEJHbB/cfVVZkn/NnHOufPkyDHAsMMsDvnPOfVo1Bv2zgNviroRz\n", 237 | "zpWjnNM7IvIb4HhgE7AAOE9VP7VevYgsBD4AGoHNqjo6w/vlnd4RoRfwFr5ZinOuRpQyvfM4sLeq\n", 238 | "7gvMBS7NcJwCgarunyngF9AXgcc84DvnXHo5B31VnaSqW6OHU4Gdmzm8KNsgpvElfEVN55zLqFA5\n", 239 | "/a8Aj2R4TYEnRGSaiJxfoPN9igi7AHsDjxbrHM45V+manZErIpOAvmleukxVH4qOuRzYpKqZxsWP\n", 240 | "U9XlItIHmCQic1R1cobzTUx6GKpq2NIvkORM4O+qbMriZ5xzrqKISAAEOf98PuP0ReRc4HzgCFVt\n", 241 | "cWcqEakH1qnq79K8lnNHbrSi5uvA+apMyeU9nHOuEpWsI1dEJgA/Ak7IFPBFpLOIdIvudwGOxvar\n", 242 | "LbSRQEfguSK8t3POVY18cvp/ArpiKZuZInIdgIjsJCIPR8f0BSaLyMtYZ++/VPXxvGqc3nnALb6i\n", 243 | "pnPONa/il2GIll1YAoxUZVHha+acc+WrFpdhOAGY6QHfOedaVg1B/zzg5rgr4ZxzlaCi0zsiDABe\n", 244 | "BnZWZUNxauacc+Wr1tI7Z2Nj8z3gO+dcK1TsdonR2PxzsaUXnHPOtUIlX+kfjK3w+VLcFXHOuUpR\n", 245 | "yUH/f4C/+Nh855xrvYrsyBWhLzAb2E2VNcWtmXPOla9a6cg9H7jHA75zzmWn4q70RWgHLASOUeWV\n", 246 | "olfMOefKWC1c6Z8IzPeA75xz2avEoH8hcE3clXDOuUpUUUFfhH2APYH7466Lc85VoooK+thV/vWq\n", 247 | "bI67Is45V4kqZkauCAOBLwJD466Lc85Vqkq60r8cuEGVlXFXxDnnKlVFXOmLsBt2lT847ro451wl\n", 248 | "q5Qr/Z8C16rybtwVcc65Slb2V/oiDAI+DwyKuy7OOVfpKuFK/2fAH1V5P+6KOOdcpSvrZRhEGIuN\n", 249 | "yR+kygfx1Mw558pX1SzDIEJP4E7g6x7wnXOuMHIO+iLyCxGZJSIvi8iTIjIgw3ETRGSOiMwTkYtb\n", 250 | "994IcCPwoCoP5FpH55xz28rnSv/Xqrqvqu6HpWDqUw8QkbbYOjkTgGHAGSKyVyve+wJgD+DHedSv\n", 251 | "ZolIEHcdqon/PQvL/57xyjnoq+qHSQ+7AqvTHDYamK+qC1V1M3AXcEJz7xutr/ML4HRVNuZavxoX\n", 252 | "xF2BKhPEXYEqE8RdgVqW15BNEflf4MvAemBMmkP6A4uTHi8BDmzhbXsB31LljXzq5pxz7tOavdIX\n", 253 | "kUki8mqa8jkAVb1cVQcCtwB/SPMWWQ8NUiVU5Z5sf84551zLCjJkU0QGAo+o6vCU58cAE1V1QvT4\n", 254 | "UmCrqv4qzXuUx9hR55yrMNkM2cw5vSMig1R1XvTwBGBmmsOmAYNEZFdgGXAacEa698um0s4553KT\n", 255 | "T07/ChEZAjQCC4BvAIjITsCNqnqcqm4RkQuBx4C2wE2qOjvfSjvnnMtN2czIdc45V3yxz8jNZfKW\n", 256 | "y0xEForIKyIyU0RejLs+lUZE/p+IrBCRV5Oe6xUNapgrIo+LSI8461gpMvwtJ4rIkujzOVNEJsRZ\n", 257 | "x0oiIgNE5GkReV1EXhOR70TPZ/X5jDXo5zF5y2WmQKCq+6vq6LgrU4Fuxj6PyS4BJqnqYODJ6LFr\n", 258 | "Wbq/pQK/jz6f+6vqv2OoV6XaDHxfVffGhsh/K4qXWX0+477Sz3rylmsV7xTPkapOhk+t6Pp54K/R\n", 259 | "/b8CJ5a0UhUqw98S/POZE1V9R1Vfju6vA2Zjc6Gy+nzGHfTTTd7qH1NdqoUCT4jINBE5P+7KVIkd\n", 260 | "VXVFdH8FsGOclakC347W7brJU2W5iUZE7g9MJcvPZ9xB33uRC2+cqu4PHIN9/Tsk7gpVE7WRD/65\n", 261 | "zd2fgd2A/YDlwO/irU7lEZGuwD+A76Ysh9Oqz2fcQX8pkLw65wDsat/lSFWXR7ergH9iKTSXnxUi\n", 262 | "0hdARPoBK2OuT8VS1ZUaAf6Cfz6zIiLtsID/N1W9P3o6q89n3EH/k8lbItIem7z1YMx1qlgi0llE\n", 263 | "ukX3uwBHA682/1OuFR4Ezonun4OtKutyEAWlhC/gn89WExEBbgL+q6pXJb2U1ecz9nH6InIMcBVN\n", 264 | "k7euiLVCFUxEdsOu7sEm3t3uf8/siMidwGHA9lh+9GfAA8A9wEBgIXCqqq6Jq46VIs3fsh5bYXM/\n", 265 | "LAXxFnBBUj7aNUNEDgaeAV6hKYVzKfAiWXw+Yw/6zjnnSifu9I5zzrkS8qDvnHM1xIO+c87VEA/6\n", 266 | "zjlXQzzoO+dcDfGg75xzNcSDvnPO1RAP+s45V0P+Pzpoubq7kmb/AAAAAElFTkSuQmCC\n" 267 | ], 268 | "text/plain": [ 269 | "" 270 | ] 271 | }, 272 | "metadata": {}, 273 | "output_type": "display_data" 274 | }, 275 | { 276 | "name": "stdout", 277 | "output_type": "stream", 278 | "text": [ 279 | "\n" 280 | ] 281 | } 282 | ], 283 | "source": [ 284 | "d = dvr_1d.BesselDVR(npts=100, R=20, dim=3, lam=0)\n", 285 | "d.morse_test(xmax=20., ymax=0.5)" 286 | ] 287 | }, 288 | { 289 | "cell_type": "markdown", 290 | "metadata": {}, 291 | "source": [ 292 | "## With a Woods-Saxon potential" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": 11, 298 | "metadata": { 299 | "collapsed": false 300 | }, 301 | "outputs": [ 302 | { 303 | "name": "stdout", 304 | "output_type": "stream", 305 | "text": [ 306 | "Testing 1-D DVR with a Woods-Saxon potential\n", 307 | "The first 5 energies are:\n", 308 | "[-43.55090359 -36.58134219 -29.25606017 -21.92813792 -14.94875837]\n" 309 | ] 310 | }, 311 | { 312 | "data": { 313 | "image/png": [ 314 | "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEACAYAAACnJV25AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 315 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmcXFWd9/HPN/siBBK2EKLggDoBlEWBwWUqKIjgsLiA\n", 316 | "KIuo6CMIKooIOgMM8zzjisvzuIA6vJSRKI7LA6OIQawZcQFFUYaAgkOUJEAgCSSQrTv5zR/nFn1T\n", 317 | "qV7S3dWnlu/79fq9zr1V1VW/qu7+3VPn3nuuIgIzM+sc43InYGZmo8uF3cysw7iwm5l1GBd2M7MO\n", 318 | "48JuZtZhXNjNzDpM0wq7pKMl3SvpPkkXNut1zMxsS2rGceySxgN/AF4BLAV+BZwSEfeM+ouZmdkW\n", 319 | "mtVjPwS4PyIWR0QP8A3g+Ca9lpmZlTSrsM8BHiytLyluMzOzJmtWYfc8BWZmmUxo0vMuBeaW1ueS\n", 320 | "eu1Pk+Tib2Y2DBGhge5vVmH/NbCPpD2BZcDJwCn1DxosuW4h6dKIuDR3Hq3An0UffxZ9Gn0WEtOA\n", 321 | "XYCdgVlFzCwtzwJ2AGYUUVueCqwp4sm6dg3wVBFr69p1xfI6YH2DdkMpNkawebQ/h/S+B+8UN6Ww\n", 322 | "R0SvpHcBNwHjga/4iBgzGwqJ7YE9ipiT2tOPlXg+sGspJgKPAI8CK4CVRbsCuA+4DVgFPAE8Xmqf\n", 323 | "jOjs4eJm9diJiBuBG5v1/GbWnorCvRfw7Lp2L9KwrUgHXywlDeEugceWA18nFfJHgOXA6k4v0MPV\n", 324 | "tMJu26SaO4EWUs2dQAup5k5guCTGkYr084C/LqK2PB14APjvIu4jfbt/gFTQtyrY0g8qEe37eYy1\n", 325 | "ppygNKQXlsJj7GbtT2IKsD9wYCn2Iw193AvcU9cuc097+IZSO13YzWzIip74POAlwN8ABwF7A38E\n", 326 | "flvEb4DfR/BErjw7mQu7mY2IxFTSmeQvpq+YrwBuBX4O3AHcHcH6bEl2GRd2M9smEiINo7yyiMOA\n", 327 | "u4GfFfHzCB7Ol6G5sJvZoCR2AI4mFfKjSMdh31TELRGszpie1XFhN7OGimJ+PHAS8FLgP4Efkor5\n", 328 | "/d652bqGUjt9uKNZl2hQzG8hHRt+invlncWF3ayDFUexzAfOAl4F/AQX847nwm7WgSR2Bd5MKuhr\n", 329 | "gauAd0awKmdeNjZc2M06RHFEyxHA/yJdvew7wJuA2z1m3l1c2M3anMR44ETgg8A04LPAWz3U0r1c\n", 330 | "2M3alMQk4FTgQtIshpcDNzRrulhrHy7sZm1GYjrwduB8YBHwDuA/PNxiNS7sZm2iGHJ5M/CPwC+A\n", 331 | "EyK4I2tS1pJc2M3agMRRwCdIMyaeGMHtmVOyFubCbtbCJPYDPk6aQfEDwPc85GKDGZc7ATPbmsRO\n", 332 | "EleRzg69Edg3gu+6qNtQuLCbtRAJSZwE3EW6SPJzI/hsBBszp2ZtxEMxZi1CYjbweeC5wGsi+EXm\n", 333 | "lKxNucdullnRS38z8DvS3OcHuqjbSLjHbpaRxLOAK4FdgKMiuDNzStYB3GM3y0TitcCvgP8ADnVR\n", 334 | "t9HiHrvZGCumAvgYaW70YyL4deaUrMO4sJuNIYlnAtcBjwAHeRpdawYPxZiNEYljgNuBb5OmA3BR\n", 335 | "t6Zwj92sySQmkOZ3OQ14XQS3Zk7JOpwLu1kTSWwPfIv07fjgCJZnTsm6gIdizJpEYg7wn8CfgFe5\n", 336 | "qNtYcWE3awKJ/YGfAwuAcyLozZySdREPxZiNMokjgG8A745gQe58rPu4x242iiROI/XSX++ibrm4\n", 337 | "x242CiQEXAycBRwRwd2ZU7Iu5sJuNkJFUf8E8HLg8AiWZU7JupwLu9kIlIp6hdRTX5k3IzOPsZsN\n", 338 | "W11RP9JF3VrFsAu7pNdLulvSJkkH1d13kaT7JN0r6aiRp2nWWlzUrZWNZCjmLuBE0lzST5M0DzgZ\n", 339 | "mAfMAW6W9JyI2DyC1zJrGUVR/zgu6taiht1jj4h7I+KPDe46HlgQET0RsRi4HzhkuK9j1kpKRX0+\n", 340 | "LurWopoxxr47sKS0voTUczdra0VR/xgu6tbiBhyKkbQQ2K3BXRdHxA3b8DrRz/NfWlqtRkR1G57T\n", 341 | "bKxdALwSqLio21iRVCEN+w3ZgIU9Io4cRh5Lgbml9T2K2xo9/6XDeH6zMSfxRuAc0nHqLuo2ZooO\n", 342 | "b7W2LumSwX5mtIZiVFq+HniDpEmS9gL2IV1cwKwtSbwc+BTpMnYNOylmrWQkhzueKOlB4DDg+5Ju\n", 343 | "BIiIRaRLfy0CbgTOjoiGQzFmrU7i+aS5X07yNAHWLpSr5kqKiNDgjzTLo7g+6c+A90VwXe58zGBo\n", 344 | "tdNnnpo1ILEj6Rvnp1zUrd24x25WR2IKcBPwmwjemzsfs7Kh1E4XdrOS4lj1r5OOGHtDBD5j2lrK\n", 345 | "UGqnZ3c029L5wHOBl7ioW7tyYTcrSLyCdBLSoRGsy52P2XB556kZILEn8K/AKRH8OXM6ZiPiwm5d\n", 346 | "T2Ia8F3gIxH8JHc+ZiPlnafW1YqdpdcUq6dFNJ7XyKxVeOep2eDOA/YFXuyibp3Chd26lkQFuAg4\n", 347 | "LIK1mdMxGzUeY7euJDGXNAfMqREszpyO2ahyYbeuIzEBuBb4TAQ3587HbLS5sFs3+jCwnnQ1JLOO\n", 348 | "4zF26yoSLwPeARzkM0utU7nHbl1DYibpJKS3RvBQ7nzMmqWle+zVqsYD04DpRTsN6AFWF7G2UmmP\n", 349 | "i3hUqxoHTAWmlGJy0U4EniS9pzXAmkolNmVKdVRVq5oCzAR2LLU7kn6ntc+h/LlMHuDpNpN+/xsb\n", 350 | "tBuAdUWsr1/u7Z2wbq+97vhUT8/kH1xzzfNurVaZWKlEzyi/XbOW0HInKFWrOh64mvSPPwFYWxcT\n", 351 | "ge2LmERfkX+CdG3VvwAPFm1teUmlEhub9V6qVc0gXef1mcAcYPciZpeWdyYVoPWl2FC0vcX7rb2v\n", 352 | "Z5CK0hpgRfG+lgJL6tqlwGNjvXGrVjUR2JW+97hbP+1OwHhgFbCyrn2KvgK8vrS8kX4ufl4818Qi\n", 353 | "JpXaSaQNQm0DUW6nAlNXr545e+PGKTNnzVr2eHGm6dTiOcuvXf+76S96SrGxbr23iE2l5dr65qJt\n", 354 | "tBxFW16OBsv9Bf2sU7fc6Lb+1ge7fbD7hqMtOmo5zZ/Pf7XdtL3Vqmr/jGuBDQMVrWpVk4DtSMVw\n", 355 | "R1JRfSZ9RbbWzgYeJxXCZfQVxWWkIlP7hy3/Q28kFdsdgR3qYlbda4ynb0NSfu6HinYZ8EilEr1D\n", 356 | "+WyK3v204n3tVLyvWuxR104vXmcpW7+vJ+jb6NViXZFvOSYU7TNIveqZxXssL8+mb0M1E3i0eJ2H\n", 357 | "i9evxcOl9lFa4FuVxP7ALaSTkP5Yu73YQE2pi9rfX21j0SgmsvUGpha1z3NCaXkiadiz9nmXl8eT\n", 358 | "rhk8rtSOq7utfrk+6GeduuVGt/W3Ptjtg903HD4TfQjmz2de2xX2ZiiGdHamrzddbmfQNyQyubQ8\n", 359 | "iTQ88ngpnijalWz5zeDxXMWr2BDOqYvdSRug7Unvr9bOIBWtTXVR61E+SXpv5VhRtA/Tt5Fa3i5D\n", 360 | "RUXv/FfAxyL4au58zEbKF9qwrifxRdK3ulM9ZYB1As8VY11N4tXAK4EXuKhbN3Fht45UHNp4JfCm\n", 361 | "CFbnzsdsLHkoxjqSxNeBxyJ4d+5czEaTh2KsK0m8BjgEOCB3LmY5uLBbR5HYGfgc8LoInsqdj1kO\n", 362 | "HoqxjlFcDek6YHEEF+TOx6wZPBRj3eYkYD/g9NyJmOXkwm4dQWI34LPA30WwLnc+Zjl5dkdre8UQ\n", 363 | "zJXAlyO4PXc+Zrm5x26d4FRgL9JQjFnX885Ta2sSuwJ3AUdH8Jvc+Zg121Bqp4dirN19BrjaRd2s\n", 364 | "j4dirG1JHAu8CHhL7lzMWokLu7Ulie2Az5Muc7c2dz5mrcRj7NaWJD4DbB/BmblzMRtLTR1jl/Rx\n", 365 | "SfdI+p2k70iaUbrvIkn3SbpX0lHDfQ2zRiQOJR0B8/7cuZi1opHsPP0RsG9EvAD4I3ARgKR5wMnA\n", 366 | "POBo4POSvJPWRoXEROBLwPkRrMidj1krGnbBjYiFEbG5WL2NdA1OgOOBBRHRExGLgftJM+2ZjYYL\n", 367 | "SBfz/kbuRMxa1WjtPH0LsKBY3h34Zem+JaTrcJqNiMRzgPOBg31FJLP+DVjYJS0Edmtw18URcUPx\n", 368 | "mA8BGyPi2gGeyv+ENiIS44CrgMsj+HPufMxa2YCFPSKOHOh+SW8GjgFeXrp5KTC3tL5HcVujn7+0\n", 369 | "tFqNiOpAr2dd7UxgGvD/cidiNpYkVYDKNv3McA93lHQ08EngbyPisdLt84BrSePqc4Cbgb2j7oV8\n", 370 | "uKMNlcROwN3AKyO4M3c+ZjkNpXaOpLDfB0wCVhY3/SIizi7uu5g07t4LvDsibhpOcmYAEl8BVkfw\n", 371 | "3ty5mOXW1MI+Ui7sNhQSLyEdATMvgtW58zHLzZOAWVsrjln/AumYdRd1syFyYbdW9h5gGfCt3ImY\n", 372 | "tRNPAtZAVVUB2wMTAZE2gCotbwJWVaKyIVuSTVZVdSIwE5gF7AhMJx2VMrUU04DJpR+r/3q4GdjY\n", 373 | "T6wH1gLrSlFbX/saDp8Fky4EDvMx62bbpqvG2KuqTiEdfvnMIp5FOk5/p1LsTCpm60kFaDPpOPwo\n", 374 | "LU8AdgB6SDuPy7EceLCIJUW7tBKV7NfhLIr1rqSTyGY3aHchvfdZpEK+ClhBel9P0bgQb2DL8xTK\n", 375 | "y+NJO9hrMbFoJ7PlBqK2kXi63QzTAzaNhzXF69Si9trr63JZX+RSa8vRQ/pd9pSitr6JtJO/FptK\n", 376 | "7eZSW78cDdrBgrq2/rb65UbrQ7lvtP+pvWFtIfOZ39t2O0+rqu4KPA9YXY5GveOqquNJRWIyqSDs\n", 377 | "Ql+RKsccUiHfkVRs/1LEg6Sv+o+V4lFgRSUqGwfKv+jVTyf1amsxi1Q49yAdyz+3WJ5TvI+lpVhW\n", 378 | "ah8CHi+91wFfuy6PaXWvX2t3bxCzive3rPS6tfYh0kZpRRFPVKKymQwkXg3xqTNZ/MLT+fN40u+2\n", 379 | "FvUbhFrU/g6mlJZrUdugTKyLSaSNz3jSxroc44rbx9Utj2fLb3H1bX9BXVt/W/1yo/Wh3DfanSUf\n", 380 | "4NBi5jN/XDsW9gpwGWkopBa1mSNrO9Bq/8Dj6euhrSMVplqRWla3/BfgkUpUNjXnHfWvquo40kZn\n", 381 | "DqnA1rez2fK9bqJvo7aBvsJT325H+ser9apr7Ur6inctlgLLc7z/bSExjXTM+tsjWJg7H7NW01GH\n", 382 | "O1ZVnUwqfNBXzHsqUemor4nFN4Hae92etAGrHyKotWsqUemoi0xI/B/g2RG8IXcuZq2oowq7dT6J\n", 383 | "5wG3As+PYFnufMxakY9jt7YhIdI8MJe7qJuNjAu7tYrXk/ZDfC53ImbtzsexW3bFhak/Cbwxgt7c\n", 384 | "+Zi1O/fYrRX8PXBLBD/NnYhZJ3CP3bKSmEeaa32/3LmYdQr32C2b0g7Tf4zgkdz5mHUKF3bL6STS\n", 385 | "mbJfyJ2IWSfxceyWRbHD9B7g5Ah+ljsfs3bh49itlf0DsNBF3Wz0eeepjTmJfYEz8A5Ts6Zwj93G\n", 386 | "VGmH6WURLM+dj1kncmG3sXYKaS77L+ZOxKxTeeepjRmJ7Uk7TF8XwS9y52PWjjy7o7UUiSuAGRG8\n", 387 | "NXcuZu1qKLXTO09tTEjsD5wK7Js7F7NO5zF2a7pih+nngH+I4NHc+Zh1Ohd2Gwunkq5X+qXciZh1\n", 388 | "A4+xW1NJ7EDaYXp8BLfnzses3XnnqWUn8RlgagRvz52LWSfwzlPLSuIFpOPW5+XOxaybeIzdmkJi\n", 389 | "HPB54MMRPJY7H7Nu4sJuzXI66Rvhl3MnYtZtPMZuo05iFnA3cGwEd+TOx6yTeOepZSHxJWB9BOfm\n", 390 | "zsWs03jnqY05icOBY/AOU7NsPMZuo0ZiImnWxvdF8ETufMy6lQu7jabzgIeBb+ZOxKybtdwYu6pV\n", 391 | "AdOBHUsxs7Q8Caj9nErLAawBHm8QK6NSebJpb2aMqVqdAuwGzGLLz6b2We0ATAWmlNra8sQBnnoT\n", 392 | "sBHYULQbS+vriljboH2KPz5jKlfv+QmOfeidvGTFH4rb15Z+bl1UKr2j9BGYda2m7jyVdDlwHKmg\n", 393 | "rgDeHBEPFvddBLyFVCjOi4gfDTU5VasnA/8CrKqLlaQivb54aJTaIH372I5U1Goxo2h3AnqBpcCy\n", 394 | "IpaW2qXAEuDhnMVH1ep2wO6lmAPMJhXxWswmFehHgMdIn0v5M1pF+pxqRXV9XfTQ99nVGw9MJm08\n", 395 | "J5WWJ5M2DNOKmFpqpwNT+f2MI5jRs5ZnrX2ouG966TG1x/fSV+hr+Wxo0PaQNiiN2t662FRqNzdo\n", 396 | "axEN2sGiJvpp65cbrQ92+2Dy9Lysdc2ff30zC/t2EbGmWD4XeEFEvE3SPOBa4EWkwnQz8JyI2Fz3\n", 397 | "8/322KNSGdU/5uJbwAy2LJjldo9ieWdSsVxCKvaPkjZajxVtLVbRV2jqQ/QVwPqYVbxGfexS5DGO\n", 398 | "LTc+y4CHini4FKtG+zMaCYljgU8D+0c8veHd8jHpdzCJvkI/hb4NRn07sYjaBmZiqR1P2ulfH+OK\n", 399 | "+8ptbVnFcqO2v3g69X7a+uVG64PdPhgfNWZbmz//1WNyuGPRQ58RER8sljdHxEeL+34IXBoRv6z7\n", 400 | "mZY73FHV6gRSr7hW6HcqYlYRteUd6Cs09RHAU2w5VFGLlaSNRX0sJxXx1a1UsIdCYhrpmPW3R7Aw\n", 401 | "dz5mna7phztK+t/AaaQCdkhx8+5AuYgvIRXJllcMwywpwobmw8AvXdTNWseAR8VIWijprgbxdwAR\n", 402 | "8aGIeCZwNemreH/aqhdqQyMxDzgLOD93LmbWZ8Aee0QcOcTnuRb4QbG8FJhbum+P4ratSLq0tFqN\n", 403 | "iOoQX88yKyb5+jJwSQQP5c7HrFNJqgCVbfqZEew83Sci7iuWzwUOiYjTSjtPD6Fv5+neUfdCrTjG\n", 404 | "bkMncQ5pSt6XRbB5sMeb2eho9hj7P0t6Lumwsj8B7wSIiEWSrgMWkQ5DO7u+qFt7k5gLXAa81EXd\n", 405 | "rPW03AlK1tqKC1NfD9weweW58zHrNp4EzJrhJGAv4LW5EzGzxlzYbciKedY/DZwYwcbc+ZhZYx6K\n", 406 | "sSGTuBpYE8F5uXMx61YeirFRI/EK4Ahgv9y5mNnAPG2vDaqYNuBK4OwI1uTOx8wG5qEYG5TEx4A9\n", 407 | "Inhj7lzMup2HYmzEJA4DTgeenzsXMxsaD8VYv4ohmK8C74pgee58zGxoPBRj/ZL4NLCLh2DMWoeH\n", 408 | "YmzYJOYDrwf2z52LmW0bD8XYViS2I12e8O0RrMydj5ltGw/F2FYkrgLGRfC23LmY2ZY8FGPbTOJV\n", 409 | "wFH4KBiztuXCbk+T2BG4CjgjgtW58zGz4fFQjD1N4hpgleeCMWtdHoqxIZN4DXAocEDuXMxsZFzY\n", 410 | "rXZFpC8AJ0SwNnc+ZjYyPtyxy0lMAL4OfDqCX+TOx8xGzoXd/h7YAHw0dyJmNjo8FNPFJCrAWcBB\n", 411 | "vii1Wedwj71LSewEXAOcGcHDufMxs9Hjwx27kISA64F7IvhA7nzMbOh8uKP15zxgF+C1uRMxs9HX\n", 412 | "ej12aRfgQGBWg5gJbAdMBaYUbS0mAwFsahAbgTXA6iLKy6uA5cCjRdSWVxLRcePOEgcDPwQOjeC/\n", 413 | "c+djZtumXXvs+wHvB1aU4n7gtmJ5DbAeWFcXGwAB4xvEJNIGYfsiasszgB1JJ+XsXIpdgO2QHgMe\n", 414 | "7ieWA48UbVtsBIpZGxeQLpwxtKIujaNvw9lfTCxiUmm5FuNJf2f17bhieVwpausaoK0FDdapu49+\n", 415 | "7utvfSg8fGgtr/V67K1Cmkgq8rs1iNmk4r8LsCtpQ/EYqdCvIH0LqMXK0vKTwNoi1tUtbwI20/ct\n", 416 | "Y3MRsHVRrC1PJn1zaRRTgWm12IymfpUz3rQDj/ecyPd+Wb6vFFMbxATShnTDANFD+lbUUxe9Rbup\n", 417 | "WC635fe7uUFEg7Y+aLBO3X30c19/60OR55/GDBBcOVjtdGEfDdIkYCdSkd+J9C2gUUyn/4Ja662W\n", 418 | "29rnUyuEvWxZGNeXYkPd+hYbj+9ywkH3sc9fncv//exU1q+mb6NSv6EpfwtKz5vrj8TMtjKU2unC\n", 419 | "3sqk9PmM8Jck8Wrgi8AhESwbhczMLJN2HWO3mlHY6ko8l3Q1pONc1M26g09Q6mASM4D/D1wcwS9z\n", 420 | "52NmY8NDMR1KYhzwPeDBCM7JnY+ZjQ4PxXS3S4AdgNflTsTMxpYLeweSOBE4E3hRBBtz52NmY8uF\n", 421 | "vcNIHARcCRwTwSO58zGzseedpx1E4tnADcA7Ivh17nzMLA8X9g4hsTNpDph/iuC7ufMxs3xGXNgl\n", 422 | "vU/SZkkzS7ddJOk+SfdKOmqkr2EDk5gOfB/4ZgRfyJ2PmeU1ojF2SXOBI4E/l26bB5wMzAPmADdL\n", 423 | "ek60wSRZ7UhiInAdcBfwD5nTMbMWMNIe+xWw1YUajgcWRERPRCwmzcx4yAhfxxooLphxFWlSqndE\n", 424 | "eHIqMxtBYZd0PLAkIn5fd9fuwJLS+hJSz91G3+Wkb0YnR9CbOxkzaw0DDsVIWkiaprbeh4CLgPL4\n", 425 | "+UBnQjXsSUq6tLRajYjqQPlYH4l3AScBL47gqdz5mFlzSKoAlW36meFMKSBpP+DHpGleAfYAlgKH\n", 426 | "kk6MISI+Ujz2h8AlEXFb3XN4SoFhkjiHNARWieCB3PmY2dgZs2l7JT0AHBwRK4udp9eSxtXnADcD\n", 427 | "e0fdC7mwD4/EucD5wBEu6mbdZyzninm6aEfEIknXAYtIF4U4u76o2/BIvId0IepKRN+RSGZmZZ7d\n", 428 | "sU1IvA94J6mn/pfc+ZhZHp7dsUNIfAA4i9RTXzLY482su7mwtziJi4EzSEV9ae58zKz1ubC3qOJC\n", 429 | "GZcDrwXm+7J2ZjZULuwtSGIKcDWwJ/DSCB7Nm5GZtRPP7thiJGYBC0kb3SNc1M1sW7mwtxCJvYGf\n", 430 | "F3FyBOsyp2RmbciFvUVIHA78FLgiggsj8GyYZjYsHmNvARKvBz4HnBHBjbnzMbP21rGFXZdpHDAF\n", 431 | "mFa0E0nvd2Ld8kAH+vcOEBvKEZds+5lexVzqlwNvBI6M4Hfb+hxmZvVa8sxTXaapwMx+YgawfRHl\n", 432 | "5e1JRXwaMJVUzDeQJipbD/QU0VvX9jfkIWA8aQNQH5OKmFzEpOK5NhSvta7U1i+nWDtrPPeceCSb\n", 433 | "J67jr7+9gGcsX7HVY7Z8rtpzl5c3AL3D2aiYWXtqyzNPdZlOAr4GrGwQq4DHgT8Bq4EninY1sAZ4\n", 434 | "ilTI1wLr45KxuWqTLpPoK/RT6NuwTG2wPJV7j3sRf3npmcy+42fs983bUUwF9t7qcX0/W3ve+uVJ\n", 435 | "wARdpo3ARlKhry33NIjyRm1TEb117eYB2mjQ9he1+2tikLa/2+oNZyPmDZ91lZYr7MC34pK4LncS\n", 436 | "26LoMdeGZVb397jS0MuJwDER3AoLRvTaxZDTpLqYTN+QUzlqw0+1byL17bhiub4dT/oGM66ftlGU\n", 437 | "d8xrkLb+tv56I8OZW8jzEVnXacmhmE4kMZdUxdcAp0XwWOaUzKwNDaV2+nDHJpOQxFuAO4B/B451\n", 438 | "UTezZmrFoZiOIfFXpItNz8BHvZjZGHGPvQkkJkhcANwG/AA4zEXdzMaKe+yjTOIA4Muko3cOjeBP\n", 439 | "mVMysy7jHvsokZgpcQXwI9JZpEe6qJtZDi7sIyQxReL9wB9Ix53vH8HVET522szy8FDMMBUXwngj\n", 440 | "8E/AnaR50+/Nm5WZmQv7sEi8HPg46QzP0yL4aeaUzMye5sI+REUP/VjgQmBX4GLg3zzkYmatxoV9\n", 441 | "EBKTSEMuF5CmDPgo8O0IerMmZmbWDxf2fkhsB5wFvJe0Y/Q9wM3uoZtZq3NhryNxEPA24A2ka4+e\n", 442 | "EMEdebMyMxs6F3ZAYgfScMvbSHO+fwV4QQQPZk3MzGwYunZ2R4kJwN8CZwDHATeRzhj9sa83amat\n", 443 | "aii1s6sKe7Ej9AjgtcAJwGLSVLpf84yLZtYO2vIKSqNNYhrwclIxPw64F/g28KIIFmdMzcysKTqu\n", 444 | "x14cb74/cFQRhwG/IRXz70SwZLRf08xsrHTFUIyEgL2AlwBHFrGaNBnXQuAnEf1frs7MrJ10ZGGX\n", 445 | "mAIcDBxeil7gZ8DNwMIIHhjNXM3MWkXbF3aJ6cDzgQOKOBDYF7gH+HkpHvSJQ2bWDdqysEu8EHg/\n", 446 | "qZA/E1hEmj3xTuB3wG8ieGosczUzaxXtWtj3Bv6GVMjvjaBnzJMzM2tRQynsw77QhqRLJS2R9Nsi\n", 447 | "XlW67yJJ90m6V9JR2/K8EdwfwTUR3OWibma27UZyBaUAroiIA4u4EUDSPOBkYB5wNPB5Sb5S0wAk\n", 448 | "VXLn0Cr8WfTxZ9HHn8W2GWnBbfR14HhgQUT0RMRi4H7gkBG+Tqer5E6ghVRyJ9BCKrkTaCGV3Am0\n", 449 | "k5EW9nMl/U7SVyTtUNy2O2xxEtASYM4IX8fMzIZowMIuaaGkuxrEccAXSCcGHQA8BHxygKfyoYhm\n", 450 | "ZmNkVI6KkbQncENE7C/pgwAR8ZHivh8Cl0TEbXU/42JvZjYMTZsETNLsiHioWD0RuKtYvh64VtIV\n", 451 | "pCGYfYDbtzUxMzMbnpHM7vhRSQeQhlkeAN4BEBGLJF1HOrGoFzg7ch0sb2bWhbKdoGRmZs2R5fhy\n", 452 | "SUcXJy/dJ+nCHDm0Akn/IukRSXcN/ujOJmmupJ9IulvSf0k6L3dOuUiaIuk2SXdKWiTpn3PnlJuk\n", 453 | "8cWJkDfkziUnSYsl/b74LLYa4n76cWPdY5c0HvgD8ApgKfAr4JSIuGdME2kBkl4KPAl8LSL2z51P\n", 454 | "TpJ2A3aLiDslPQO4AzihG/8uACRNi4i1kiYAtwLvj4hbc+eVi6TzSbO6bhcRx+XOJxdJDwAHR8TK\n", 455 | "gR6Xo8d+CHB/RCyOiB7gG6STmrpORPwUWJU7j1YQEQ9HxJ3F8pOkGTx3z5tVPhGxtlicBIwHBvxH\n", 456 | "7mSS9gCOIV2T2AddDOEzyFHY5wAPltZ9ApNtoTh89kDgtoEf2bkkjZN0J/AI8JOIWJQ7p4w+BVwA\n", 457 | "vsg86WCVmyX9WtJZ/T0oR2H33lrrVzEM82/Au4uee1eKiM0RcQCwB/Cybp0rRdKrgeUR8VvcWwd4\n", 458 | "cUQcCLwKOKcYzt1KjsK+FJhbWp8Lvg6pgaSJpGvT/mtEfC93Pq0gIp4Avg+8MHcumRwOHFeMLS8A\n", 459 | "jpD0tcw2BqQCAAAA5klEQVQ5ZVM7dygiHgW+Sz/zcOUo7L8G9pG0p6RJpJkgr8+Qh7UQSQK+AiyK\n", 460 | "iE/nzicnSTvV5l6SNJV0Hd/f5s0qj4i4OCLmRsRewBuAWyLi9Nx55SBpmqTtiuXpwFH0nRi6hTEv\n", 461 | "7BHRC7wLuIl0EtM3u/jIhwWkS/s9R9KDks7MnVNGLwZOBeaX5vg/OndSmcwGbinG2G8jTdfx48w5\n", 462 | "tYpuHsrdFfhp6e/i3yPiR40e6BOUzMw6jC+AYWbWYVzYzcw6jAu7mVmHcWE3M+swLuxmZh3Ghd3M\n", 463 | "rMO4sJuZdRgXdjOzDvM/D/zk1V/GLuIAAAAASUVORK5CYII=\n" 464 | ], 465 | "text/plain": [ 466 | "" 467 | ] 468 | }, 469 | "metadata": {}, 470 | "output_type": "display_data" 471 | }, 472 | { 473 | "name": "stdout", 474 | "output_type": "stream", 475 | "text": [ 476 | "\n" 477 | ] 478 | } 479 | ], 480 | "source": [ 481 | "d = dvr_1d.BesselDVR(npts=100, R=10, dim=3, lam=0)\n", 482 | "d.woods_saxon_test()" 483 | ] 484 | }, 485 | { 486 | "cell_type": "code", 487 | "execution_count": null, 488 | "metadata": { 489 | "collapsed": true 490 | }, 491 | "outputs": [], 492 | "source": [] 493 | } 494 | ], 495 | "metadata": { 496 | "kernelspec": { 497 | "display_name": "Python 2", 498 | "language": "python", 499 | "name": "python2" 500 | }, 501 | "language_info": { 502 | "codemirror_mode": { 503 | "name": "ipython", 504 | "version": 2 505 | }, 506 | "file_extension": ".py", 507 | "mimetype": "text/x-python", 508 | "name": "python", 509 | "nbconvert_exporter": "python", 510 | "pygments_lexer": "ipython2", 511 | "version": "2.7.9" 512 | } 513 | }, 514 | "nbformat": 4, 515 | "nbformat_minor": 0 516 | } 517 | --------------------------------------------------------------------------------