Skip to content
Browse files

Updating RMT parallel example.

  • Loading branch information...
1 parent 2eae784 commit 18ad520a9477b477694960df5f4264677cd561e2 @ellisonbg ellisonbg committed Aug 16, 2011
Showing with 1,420 additions and 62 deletions.
  1. +1,270 −0 docs/examples/newparallel/rmt/rmt.ipynb
  2. +133 −43 docs/examples/newparallel/rmt/rmt.py
  3. +17 −19 docs/examples/newparallel/rmt/rmtkernel.py
View
1,270 docs/examples/newparallel/rmt/rmt.ipynb
@@ -0,0 +1,1270 @@
+<?xml version="1.0" encoding="utf-8"?>
+<notebook>
+ <name>rmt</name>
+ <nbformat>2</nbformat>
+ <worksheets>
+ <worksheet>
+ <cells>
+ <markdowncell>
+ <source># Eigenvalue distribution of Gaussian orthogonal random matrices</source>
+ </markdowncell>
+ <markdowncell>
+ <source>The eigenvalues of random matrices obey certain statistical laws. Here we construct random matrices
+from the Gaussian Orthogonal Ensemble (GOE), find their eigenvalues and then investigate the nearest
+neighbor eigenvalue distribution $\rho(s)$.</source>
+ </markdowncell>
+ <codecell>
+ <input>from rmtkernel import ensemble_diffs, normalize_diffs, GOE
+import numpy as np
+from IPython.parallel import Client</input>
+ <language>python</language>
+ <prompt_number>1</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs />
+ </codecell>
+ <markdowncell>
+ <source>## Wigner's nearest neighbor eigenvalue distribution</source>
+ </markdowncell>
+ <markdowncell>
+ <source>The Wigner distribution gives the theoretical result for the nearest neighbor eigenvalue distribution
+for the GOE:
+
+$$\rho(s) = \frac{\pi s}{2} \exp(-\pi s^2/4)$$</source>
+ </markdowncell>
+ <codecell>
+ <input>def wigner_dist(s):
+ """Returns (s, rho(s)) for the Wigner GOE distribution."""
+ return (np.pi*s/2.0) * np.exp(-np.pi*s**2/4.)</input>
+ <language>python</language>
+ <prompt_number>2</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>def generate_wigner_data():
+ s = np.linspace(0.0,4.0,400)
+ rhos = wigner_dist(s)
+ return s, rhos</input>
+ <language>python</language>
+ <prompt_number>3</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>s, rhos = generate_wigner_data()</input>
+ <language>python</language>
+ <prompt_number>4</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>plot(s, rhos)
+xlabel('Normalized level spacing s')
+ylabel('Probability $\rho(s)$')</input>
+ <language>python</language>
+ <prompt_number>17</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs>
+ <output>
+ <output_type>pyout</output_type>
+ <text>&amp;lt;matplotlib.text.Text at 0x3828790&amp;gt;</text>
+ <prompt_number>17</prompt_number>
+ </output>
+ <output>
+ <output_type>display_data</output_type>
+ <png>aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVl3QUFBRU1DQVlBQUFEWGlZR1NBQUFBQkhOQ1NWUUlD
+QWdJZkFoa2lBQUFBQWx3U0ZsegpBQUFMRWdBQUN4SUIwdDErL0FBQUlBQkpSRUZVZUp6dDNYbGNW
+UFgreC9IWHFMaW1tS0pwcVNCSkFTSXdLcUJwT3FVQ1NtWm1wZGF2ClRLM3dkaE8xckt4cmliYWJG
+cVpvWkxmRjFKdG1wVWxkRVV0RU14Q0ZjczhWbHpTdml1REM0aWpuOThlSkNRUmtCbWJtekF5ZjUr
+UEIKUTRZNW52UG05R2crbnUrcVV4UkZRUWdoaEtoQ0hhMERDQ0dFY0E1U01JUVFRcGhGQ29ZUVFn
+aXpTTUVRUWdoaEZpa1lRZ2doekNJRgpRd2doaEZrMEtSaXBxYW40K2ZuaDQrUEQzTGx6eTcxZlVG
+REFxRkdqME92MTlPM2JsMVdyVm1tUVVnZ2hSR2s2TGVaaDZQVjY1c3laCmc2ZW5KeEVSRVd6YXRB
+a1BEdy9UK3g5KytDSGJ0MjluL3Z6NUhEbHloTHZ2dnBzREJ3NmcwK25zSFZVSUljUmY3UDZFa1pl
+WEIwQ2YKUG4zdzlQUWtQRHljOVBUME1zZTR1N3R6NGNJRmpFWWpPVGs1Tkc3Y1dJcUZFRUpvek80
+Rkl5TWpBMTlmWDlOcmYzOS8wdExTeWh3egpjdVJJcmw2OWlvZUhCNzE3OTJiSmtpWDJqaW1FRU9J
+YTliUU9VSkY1OCtaUnIxNDlUcDQ4eVk0ZE80aUtpdUxJa1NQVXFWTzJ2c2xUCmh4QkNWRTkxZWlQ
+cy9vUVJFaExDM3IxN1RhOTM3ZHBGang0OXloeVRtcHJLSTQ4OFF1UEdqUWtMQytQbW0yOW0zNzU5
+Rlo1UFVSU0gKLzVvMmJacm1HU1NuWkpTY2tyUGtxN3JzWGpEYzNkMEJ0U2hrWjJlVG5KeE1XRmhZ
+bVdQNjlldkg2dFdyS1M0dTV0Q2hRK1RrNUpScAp4aEpDQ0dGL21qUkp4Y1hGRVIwZGpkRm9KQ1lt
+Qmc4UER4SVNFZ0NJam81bXhJZ1I3TjY5bSs3ZHU5T3FWU3ZtekptalJVd2hoQkNsCmFGSXcrdmJ0
+eTU0OWU4cjhMRG82MnZTOXU3dTdTeFVKZzhHZ2RRU3pTRTdyY1lhTUlEbXR6Vmx5VnBjbTh6Q3NS
+YWZUMWFnOVRnZ2gKYXFQcWZuYkswaUJDQ0NITUlnVkRDQ0dFV2FSZ0NDR0VNSXNVRENHRUVHWnh5
+Sm5lNHZxS2lpQTlIZGF2aDh4TXVId1ppb3VoUXdlNAo0dzdvMnhlOHZiVk9LWVJ3TlRKS3lva1VG
+RUJDQXN5Y0NiZmNBbmZkQldGaDBMZ3g2SFJ3NEFEOC9EUDg5QlBvOVRCNU12VHJwNzRuCmhCQWxx
+dnZaS1FYRFNheGJCNk5HUVdnb1RKc0d3Y0dWSDF0VUJFdVd3T3paY1BQTjhPbW4wSzZkL2JJS0lS
+eWJES3QxVVlvQzc3MEgKano0S2l4ZkR0OTlldjFnQU5HZ0FZOGJBYjcrcHpWUGR1c0h5NWZiSks0
+UndYZktFNGNBS0N1REpKMkgzYnJWUWVIcFc3enhidHNELwovUi8wN3EwMmFibTVXVGVuRU1LNXlC
+T0dpekVhNGI3NzFEODNiYXArc1FDMUdTc3JDLzczUDNqb0liWEpTZ2doTENVRnd3RXBDano5Ck5O
+U3JwL1pGTkc1YzgzTTJhUUxmZkFOMTZxaUZxS0NnNXVjVVF0UXVVakFjME15WnNIVXJmUG1sV2pT
+c3BYNTlXTFlNYnJ3Ujdya0gKOHZPdGQyNGhoT3VUUGd3SDg5Vlg4Tnh6OE1zdjZ0QlpXN2g2RlI1
+NUJPcldWVHZTWmRpdEVMV0xES3QxQVljT3FmTXFrcE9ySGdsVgpVL241Y09lZE1IS2tPbDlEQ0ZG
+N1NNRndjb3FpVHJJYk5NaCtIK0JIajZvRjZyUFBJQ0xDUHRjVVFtaFBSa2s1dVlVTDRkSWxtRFRK
+CmZ0ZnMwRUdkbi9IWVkrb3NjU0dFdUI1NXduQUFSNCtxayt0U1VxQnpaL3RmZjhFQ21EY1AwdEtn
+YVZQN1gxOElZVi9TSk9Xa0ZFVnQKaHVyZEcvNzFMKzB5UFBHRTJ2bjk4Y2ZhWkJCQzJJOVROVW1s
+cHFiaTUrZUhqNDhQYytmT0xmZityRm16ME92MTZQVjZ1blRwUXIxNgo5Y2pOemRVZ3FlMTkvVFdj
+T0FFdnZLQmRCcDBPNHVMZ3h4OWh6UnJ0Y2dnaEhKc21UeGg2dlo0NWMrYmc2ZWxKUkVRRW16WnR3
+c1BECm84SmpFeE1UaVl1TFk5MjZkZVhlYy9ZbmpDdFgxQ2FvdVhNaFBGenJOR3JCR0QwYWR1d0Fk
+M2V0MHdnaGJNVnBuakR5OHZJQTZOT24KRDU2ZW5vU0hoNU9lbmw3cDhVdVhMbVhreUpIMmltZFhu
+MzJtenJVWU1FRHJKQ3A3ajlJU1FqZ1h1eGVNakl3TWZIMTlUYS85L2YxSgpTMHVyOE5qOC9IeVNr
+cElZTm15WXZlTFpUVUVCVEo4T2I3M2xXQlBuWnM1VTU0R3NYYXQxRWlHRW8zSG9IZmRXcjE1Tjc5
+NjlhZDY4CmVhWEh4TWJHbXI0M0dBd1lEQWJiQjdPQytIZ0lDVkhuUVRpU1pzM1VJYjVQUEFIYnQw
+dlRsQkN1SUNVbGhaU1VsQnFmeCs1OUdIbDUKZVJnTUJyS3lzZ0FZUDM0OGtaR1JSRVZGbFR0MjZO
+Q2hEQjgrbkJFalJsUjRMbWZ0dzhqTmhkdHVVNGZSK3Z0cm5hWmlUejJsTG9NZQpINjkxRWlHRXRU
+bE5INGI3WC85a1RVMU5KVHM3bStUa1pNSXErR2QyWGw0ZXFhbXBEQmt5eE40UmJlNzk5eUVxeW5H
+TEJjRGJiNnZyCld1M2NxWFVTSVlTajBLUkpLaTR1anVqb2FJeEdJekV4TVhoNGVKQ1FrQUJBZEhR
+MEFDdFhyaVFpSW9KR2pScHBFZEZtQ2dyVWlYS2IKTm1tZDVQcGF0SUJYWGxGbm5xOWQ2MWo5TEVJ
+SWJjakVQVHY3K0dOWXVSSVNFN1ZPVWpXakVRSUQ0ZDEzMWVYUWhSQ3V3V21hcEdvegpSWUU1YzJE
+aVJLMlRtTWZOVGQxUC9Mbm40UEpscmRNSUliUW1CY09PZnZycDcxVnBuY1hBZ2VEdERmUG5hNTFF
+Q0tFMWFaS3lvOEdECjRkNTc0Y2tudFU1aW1kMjdvVzlmMkxNSEtwbVFMNFJ3SXJMNG9JUGJ2eDk2
+OVlJalI4QVorL0hIajFlZmp1Yk4wenFKRUtLbXBHQTQKdUpnWWRlbndOOTdRT2tuMW5EMEx2cjdh
+TGNFdWhMQWVLUmdPTERkWDdRZllzY04yKzNUYlE4bUt0cXRYYTUxRUNGRVRNa3JLZ1gzeQppZHA1
+N016RkFtRGNPTWpLZ293TXJaTUlJYlFnVHhnMnBpanFNaUJmZkFFOWVtaWRwdWJpNCtHSEgrRDc3
+N1ZPSW9Tb0xubkNjRkJwCmFWQ3ZudU10TWxoZEpZc1NYbWRGZWlHRWk1S0NZV05mZkFHUFB1bzZT
+MnMwYUFBdnZ3eWxGZ2tXUXRRUzBpUmxRMFZGYXI5RlppWjAKNktCMUd1c3BLbEtiMlpZdGM0MW1O
+aUZxRzJtU2NrRGZmdzlkdXJoV3NRQjV5aENpdHBLQ1lVT0xGc0ZqajJtZHdqWkdqMVpuZnYveQpp
+OVpKaEJEMklrMVNObkxtREhUcUJFZVBxcnZZdWFLUFBvSVZLMlE3VnlHY2pUUkpPWmhseTJEUUlO
+Y3RGZ0NQUDY0dWVmTHp6MW9uCkVVTFlneFFNRzNIbDVxZ1M5ZXZEdi80RjA2WnBuVVFJWVE5U01H
+emc5OS9WcHFqKy9iVk9ZbnVqUnNHaFE3QnhvOVpKaEJDMkpnWEQKQnI3NEFoNStXSjJ3NStyYzNP
+Q2xsK0N0dDdST0lvU3dOZW4wdGpKRmdZNGQxVzFZZzRPMVRtTWZoWVhxNzV5Y0RBRUJXcWNSUWxU
+RgpxVHE5VTFOVDhmUHp3OGZIaDdsejUxWjRURVpHQmlFaElmajUrV0V3R093YnNBWXlNOVY1Q2tG
+QldpZXhuNFlONFpsbllOWXNyWk1JCklXeEpreWNNdlY3UG5EbHo4UFQwSkNJaWdrMmJOdUZSYWlz
+M1JWRUlEQXprL2ZmZnAzLy8vcHc1YzZiTSt5VWM4UW5qbFZmVS9hL2YKZVVmckpQYVZrNk1PSTNi
+MkpkeUZxQTJjNWdrakx5OFBnRDU5K3VEcDZVbDRlRGpwMTZ4a3QzWHJWZ0lEQStuL1Y2OXhSY1hD
+VWExYwpDZmZkcDNVSysydlJRbDB6YTg0Y3JaTUlJV3pGN3QyeUdSa1orUHI2bWw3NysvdVRscFpH
+VkZTVTZXZEpTVW5vZERydXZQTk9tamR2CnpqUFBQRU5FUkVTRjU0c3R0VDZGd1dEUXRQbnF3QUYx
+d3A2cnJFeHJxVW1Ub0ZzM21EclZ0ZWVmQ09Gc1VsSlNTRWxKcWZGNUhISWMKVDJGaEliLysraXZy
+MXEwalB6K2ZBUU1Hc0hQblRocFZzQmwyckFNdGFMUnFGUXdlREhWcTZkZ3pMeThJRDFkbmdFK2Vy
+SFVhSVVTSgphLzh4UFgzNjlHcWR4KzRmYlNFaEllemR1OWYwZXRldVhmUzRac25UbmoxN01uRGdR
+TnEwYVlPM3R6ZmR1M2NuTlRYVjNsRXRWbHViCm8wcDcvbm0xV2VyeVphMlRDQ0dzemU0Rnc5M2RI
+VkJIU21Wblo1T2NuRXpZTlcwNFBYcjBZTU9HRGVUbjU1T1RrME5XVmhhOWV2V3kKZDFTTC9POS9h
+b2Z2M1hkcm5VUmJYYnVxUzU5LythWFdTWVFRMXFaSmsxUmNYQnpSMGRFWWpVWmlZbUx3OFBBZ0lT
+RUJnT2pvYUZxMgpiTW5vMGFQcDNyMDdyVnExWXNhTUdkeHd3dzFhUkRYYjZ0VnFjMHpEaGxvbjBk
+N3p6OE1MTDdqV3hsRkNDSm00WnpXREI4UElrZW9NCjc5cE9VZFI1S0ROblFtU2sxbW1FRU5lcTdt
+ZW5GQXdydUhnUmJyNVpYVCtxZVhPdDB6aUdSWXZnODgvaHh4KzFUaUtFdUpiVHpNTncKUld2WHFs
+dVZTckg0MjRnUnNHK2ZPdk5kQ09FYXBHQllnWXlPS3E5K2ZaZ3dBZDU5Vitza1FnaHJrU2FwR2pJ
+YW9VMGIrTzAzYU5kTwoweWdPNS94NWRWSENiZHZVT1JwQ0NNY2dUVklhMmJnUmJyMVZpa1ZGbWpX
+RHNXUGgvZmUxVGlLRXNBWXBHRFVrelZIWE4yR0N1ajlJClRvN1dTWVFRTlNVRm93WVVSUzBZUTRa
+b25jUngzWEtMT3VSNDRVS3Rrd2doYWtvS1JnM3MyYU91RytYdnIzVVN4elpwRXN5ZEs4dUYKQ09I
+c3BHRFVRSEl5REJnZ3M1bXJFaHlzTGhmeTFWZGFKeEZDMUlRVWpCb29LUmlpYXM4K0MrKzlwemJq
+Q1NHY2t4U01hcnA4R1ZKVApaYkZCY3cwYXBNNklkNEpGaDRVUWxaQ0NVVTFwYWVEakEwNjBHYUNt
+NnRSUit6TGVlMC9ySkVLSTZwS0NVVTNyMWtsemxLVWVld3cyCmI0YjkrN1ZPSW9Tb0Rvc0x4b1VM
+RjlpMWF4Y3BLU244OXR0dkZCUVUyQ0tYdzVQK0M4czFiZ3pSMGJMdnR4RE95dXlsUVZhc1dNSHUK
+M2JzNWNlSUVYbDVldEduVGh1UEhqM1AwNkZHYU5XdkdnQUVES3QxMzIxYTBXaG9rTnhmYXQ0ZlRw
+MlgvQzB1ZFBBbWRPNnY3bjdkbwpvWFVhSVdvbm15MXZmdm55WlQ3NTVCT0NnNFBMYmFWYVdtSmlJ
+c2VQSDJmY3VIRVdoNmd1clFyR3Q5L0NoeDlDVXBMZEwrMFNSbzBDClB6K1lNa1hySkVMVVRnNnhI
+NGFpS09qc09DbEJxNEx4OU5QZzdRMlRKOXY5MGk3aDExOGhLZ29PSDFaWHRSVkMySmZkRmgrOGNP
+RUMKZS9mdUJkU25qMnREMUFiU2YxRXp3Y0hnNnd2TGwydWRSQWhoQ1lzTHhyZmZmc3Zldlh2cDBh
+TUhFeVpNWU9YS2xSWmZORFUxRlQ4LwpQM3g4ZkpnN2QyNjU5MU5TVW5CM2QwZXYxNlBYNjNuOTlk
+Y3R2b2F0WkdkRFhoNTA2YUoxRXVjbUUvbUVjRDRXRjR5aW9pTGMzTnhvCjFxd1pDeFlzNElZYmJy
+RDRvaE1tVENBaElZRjE2OVlSSHgvUG1UTm55aDNUdDI5ZnNyS3l5TXJLWXVyVXFSWmZ3MWJXcllQ
+Ky9kVjUKQmFMNkJnNkUvSHpZc0VIckpFSUljMVg1c1ZkVVZNUzVjK2RNcnlNaUl0aTVjeWZ4OGZI
+TW1qV0xyS3dzMDN0SGpoeXA4b0o1ZVhrQQo5T25UQjA5UFQ4TER3MGxQVHk5M25OWWJJMVZHbXFP
+c1F5YnlDZUY4cWl3WURSbzBZTU9HRGF4WXNRS2owVWlIRGgxNDhjVVg4Zkh4Cm9WKy9mb3dkTzVi
+YzNGeGlZMlBadFd0WGxSZk15TWpBMTlmWDlOcmYzNSswdExReXgraDBPalp2M2t4d2NERFBQdnNz
+Qnc4ZXJNYXYKWm4zRnhmRGpqMUl3ck9YUlI5VVo4L3YyYVoxRUNHR09ldVljZE45OTkzSGt5Qkhl
+ZnZ0dHpwNDlTMkZoSVVhamtYUG56dEd3WVVQOAovZjE1NXBsbjhMRFNPaGxkdTNibDJMRmp1TG01
+OGZubm56Tmh3Z1FTRXhNclBEWTJOdGIwdmNGZ3dHQXdXQ1ZEUmJLeW9GVXIyVjNQCldrcFA1SXVQ
+MXpxTkVLNHJKU1dGbEpTVUdwK24yc05xaTR1THFWT05odnk4dkR3TUJvT3BLV3Y4K1BGRVJrWVNG
+UlZWNGZHS290Q20KVFJ1T0hqMUtnd1lOeXJ4bjcyRzFiNzhOSjA3QUJ4L1k3Wkl1NytSSmRUK1Jn
+d2RsSXA4UTltSzNZYlY1ZVhuOCs5Ly9adVhLbGVUbgo1MXQ4UVhkM2QwQWRLWldkblUxeWNqSmhZ
+V0ZsampsMTZwVHBsMW05ZWpXQmdZSGxpb1VXWlAwbzYydmJWdDJ4TUNGQjZ5UkNpS3BZClhERGVl
+dXN0R2pWcXhPKy8vODZERHo1b1ZyL0Z0ZUxpNG9pT2pxWi8vLzQ4L2ZUVGVIaDRrSkNRUU1KZm54
+b3JWcXlnUzVjdUJBY0gKczJMRkNtYlBubTN4TmF5dG9BRFMwNkZ2WDYyVHVKNUprMkRlUE5tUlR3
+aEhaM0dUMUpJbFMzamtrVWNBdFZscTNyeDV4TVRFMkNSYwpWZXpaSkxWMkxjeVlBWnMyMmVWeXRV
+Ny8vdXFTSVk4K3FuVVNJVnlmM1pxazZ0YXR5MnV2dmNheFk4Y0FxRmZQckg1enB5ZkRhVzFMCkp2
+SUo0ZmdzTGhnalJvd2dORFNVRjE5OGtZRURCOUt4WTBkYjVISTQwbjloVzVHUlVGZ0lWaGpJSVlT
+d0Vhc3VQbWh2OW1xU0tsbk8KUENjSDNOeHNmcmxhNjZPUElERVJ2dnRPNnlSQ3VEYTdOVWxkdkhp
+UkF3Y09VRnhjek1hTkcxbS9mcjNGRjNVMm16ZERhS2dVQzF1VAppWHhDT0RhTE95QmVmLzExR2pk
+dXpPN2R1d0h3OFBEZ3JydnVzbm93UjdKeEkvVHVyWFVLMTllb2tUcVJMeTRPNXMvWE9vMFE0bHBt
+Ck5Vbjk1ei8vSVRRMGxGdHZ2WldNakF4Q1FrSUE5V21qVHAwNk5HN2MyT1pCSzJLdkpxbmV2U0Uy
+VmgzSkkyenJ6ei9WelpVT0hJQ1cKTGJWT0k0UnJzdWtHU2dNSERzVGIyNXZmZi8rZG5Kd2NRa0pD
+R0Rac0dEMTc5cVJwMDZiVkNtd045aWdZaFlYZzRhRitrRlZqWVY1UgpEYU5IZzQ4UHZQeXkxa21F
+Y0UwMkxSaVhMbDJpU1pNbUFPVG41N04xNjFhMmJObENSa1lHRFJvMFlOR2lSWlludGdKN0ZJeU5H
+K0c1CjUyRExGcHRlUnBTeWZiczZhdXJ3WVhDQUNmNUN1QnlIMktMVjN1eFJNTjU4RTg2Y2tXVzQ3
+VzNBQUxVVC9MSEh0RTRpaE91eDJ5aXAKMm1ialJyanpUcTFUMUQ0eWtVOEl4eU1GNHpxdVhvVmZm
+cEVSVWxxSWlGRFhscEtKZkVJNERvc0t4aDkvL0dHckhBNXArM1oxTmRWVwpyYlJPVXZ2SWpueENP
+QjZMQ3NhQUFRTVlPSEFneTVjdngyZzAyaXFUdzlpMFNacWp0UFIvLzZldUVQejc3MW9uRVVLQWhR
+Vmo5KzdkCnZQTEtLNnhkdXhZZkh4L0dqeDlQWm1hbXJiSnBUaWJzYWF0Ukl4ZzNUcDNJSjRUUVhy
+VkhTYTFaczRZeFk4Wnc5ZXBWT25YcXhPeloKcytuUm80ZTE4MTJYTFVkSktRcmNmTE82TEVndFdW
+L1JJWlZNNU51L1g1MFBJNFNvT2J1TWtqcCsvRGh2dlBFR0FRRUJmUExKSjN6MgoyV2VjUEhtUytm
+UG5NMmJNR0lzdjdzZ09Ib1M2ZGNITFMrc2t0VnViTmpCMHFPeklKNFFqc0toZ0RCdzRrRWFOR3BH
+U2tzTHk1Y3NKCkR3K25UcDA2QkFVRk1XN2NPRnRsMUVUSmNGcWRUdXNrWXRJa2lJK0hvaUt0a3do
+UnUxblVKTFZseXhaQ1EwT3IvSm05MkxKSmF1eFkKNk5vVi92bFBtNXhlV0NnOFhPMEVsNGw4UXRT
+Y1hacWtLbnFLaUk2T3R2aWl6a0FtN0RrV21jZ25oUGJNS2hnWkdSbkV4OGR6K3ZScAo1cytmVDN4
+OFBQSHg4Y1RHeG5MampUZGFmTkhVMUZUOC9Qenc4ZkZoN3R5NTE3MXV2WHIxK09hYmJ5eStSazM4
+K1NlY1BnMEJBWGE5CnJMaU9pQWd3R3FFV2JMOGloTU15cTJEazVlVng3Tmd4akVZang0NGQ0L2p4
+NHh3L2ZwdzJiZHJ3NmFlZlduelJDUk1ta0pDUXdMcDEKNjRpUGorZk1tVFBsanJsNjlTb3Z2dmdp
+a1pHUmRsbkN2TFJObTZCWEwzWHltSEFNT2gxTW5DZ1QrWVRRa2tWOUdQdjI3ZU8yMjI2cgowUVh6
+OHZJd0dBeGtaV1VCRUJNVFEwUkVCRkZSVVdXT2k0dUxvMzc5K21Sa1pIRFBQZmN3Yk5pdzh1RnQx
+SWN4Y2FJNk9tZktGS3VmCld0UkFRWUU2YW0zREJ2RDExVHFORU03THBuMFlKUi9tNGVIaGRPellz
+Y3lYdDdlM1JSZk15TWpBdDlULzdmNysvcVNscFpVNTVvOC8KL21EVnFsWDg0eC8vQU5SZnpwNmsv
+OEl4eVVRK0liUmwxaGF0UzVZc0FXRHIxcTAyRFZOaTRzU0p2UDMyMjZZcWVMMUtHQnNiYS9yZQpZ
+REJnTUJocWRPM3o1OVdsS0xwM3I5RnBoSTA4L2JUNmRQSDY2ektSVHdoenBhU2trR0tGbFR6dHZo
+L0d0VTFTNDhlUEp6SXlza3lUCmxMZTN0NmxJbkRsemhzYU5HN053NFVMdXZmZmVNdWV5UlpOVVVw
+SzZCOGFHRFZZOXJiQ2lzV1BWMmZkVHAycWRSQWpuWk5NTmxFNmQKT2xWaHM1Q2lLT2gwT2xxM2Jt
+M1JSZlY2UFhQbXpLRkRodzVFUmtheWFkTW1QQ3I1NStMbzBhTVpQSGd3OTk5L2YvbndOaWdZVTZl
+cQpRemZmZU1PcXB4Vld0SE9uT2k5RGR1UVRvbnFxKzlscFZwTlU3NzlXNEx1MmFKUVVqSDM3OWxs
+MDBiaTRPS0tqb3pFYWpjVEV4T0RoCjRVSENYMnMvYUQydjQrZWY0WVVYTkkwZ3FoQVFBRjI2d0pk
+ZndxaFJXcWNSb3ZZdzZ3a2pLaXFLNzcvL0hpOHZyM0tWU2FmVGNmancKWVp1R3JJeTFuekN1WG9Y
+bXplSElFV2pSd21xbkZUYVFsS1FXOWw5L2xlVmJoTENVVFp1azh2THljSGQzcjNDK2hFNm5vMlhM
+bGhaZgoyQnFzWFRCMjdJQmh3OERDQnlhaEFVVlJuelErK0FENjlkTTZqUkRPeGFaTlV1N3U3Z0NW
+OWpPNGl2UjBDQXZUT29Vd2gwNzM5NDU4ClVqQ0VzQStMNXpLZk9YT0dKVXVXc0hUcFVzNmVQV3VM
+VEpxUmd1RmNIbmtFdG02RlBYdTBUaUpFN1dCUndWaXlaQWs5ZS9ia2wxOSsKWWZQbXpmVHMyZE0w
+UjhNVmJOa2lCY09aTkdvRS8vaUhUT1FUd2w0c21vY1JIQnpNbWpWcmFOT21EYUFPdDQySWlPRFhY
+MysxV2NEcgpzV1lmeHNXTGNOTk5jTzRjMUs5dmxWTUtPemgxU3AzSUp6dnlDV0UrdXl4djNxSkZD
+d29LQ2t5dkN3b0thT0VpdzRtMmJWT0hha3F4CmNDNDMzYVFPVlBqd1E2MlRDT0g2ek9yMEhqOStQ
+QUN0V3JXaVc3ZHUzSG5ublNpS3dxWk5teGd3WUlCTkE5cUw5Rjg0cjBtVG9IOS8KZVA1NW1jZ25o
+QzJaVlRDNmRldG1tclEzY09CQTA4L3Z2LzkrdXk4TWFDdGJ0a0FGazhtRkUramNHWUtDNEQvL2dj
+Y2YxenFORUs3TAo3bXRKV1pNMSt6RGF0NGVVRkxqMVZxdWNUdGhaVXBMNmhQSGJiektSVDRpcTJI
+VGlYb21DZ2dMV3JsMUxVbElTNTg2ZE16MWRMRjI2CjFPSUxXNE8xQ3NhSkV4QVlxTzZ5Sng4Mnpx
+bGtJdCtjT1dyemxCQ2ljbmJwOUo0NmRTb2JOMjRrS1NrSmc4SEE4ZVBIOGZMeXN2aWkKamlZOUhV
+SkRwVmc0TTUzdTczMi9oUkMyWWRFVFJ0ZXVYY25NektSejU4N3MycldMdkx3OCt2ZnZUMFpHaGkw
+elZzcGFUeGhUcHFoagorcWROczBJb29abkNRblZIdnA5K0FuOS9yZE1JNGJqczhvVGg1dVlHUVBm
+dTNVbE1UT1RVcVZNVUZoWmFmRkZISXhQMlhFUERoaktSClR3aGJzdWdKWTlHaVJRd2VQSmdqUjQ0
+d1pjb1UvdmpqRDJiTW1NSFFvVU50bWJGUzFuakN1SG9WYnJ3UnNyTmxoVnBYOEwvL3dlMjMKcXd0
+SXRtcWxkUm9oSEpOZE9yMUJYVXNxS1NrSmdJaUlDRTBYSkxSR3dkaTVVeDFPS3l2VXVvNG5uNFFP
+SGVDVlY3Uk9Jb1Jqc2t1VApWT20xcE5MUzByampqanVjZmkycGtnNXY0VG9tVG9UNTg5VStEU0dF
+OWRUNnRhU2lvOVhobUg5TlpoY3VZdUJBZU9naEdEMWE2eVJDCk9CNVpTNnFhWkVrUTExU3lWNGJ6
+VGtzVnd2RlVheTJwa2oyK25YMHRxVXVYMUZWT2c0SzBUaUtzYmNBQXRWaXNXNmQrTDRTb3VXcXQK
+SlZYeWZYWFhra3BOVFNVNk9wb3JWNjRRRXhOaktrZ2xWcTFheGF1dnZvcE9wK09XVzI0aE5qYVdr
+SkFRaTY5VGxXM2IxT1lvV2JETwo5WlNleUNjRlF3anJxTlphVXR1MmJVT24wOUcxYTlkcVhWU3Yx
+ek5uemh3OFBUMkppSWhnMDZaTlpVWmJYYnAwaVNaTm1nQ3dZY01HClhubmxGVkpUVTh1SHIyRWZ4
+cXhaY1BTb3VpKzBjRDB5a1UrSWl0bWxEeU0xTlpYYmJydU5sMTkrbVpkZWVvbmJicnVOalJzM1du
+VEIKdkx3OEFQcjA2WU9ucHlmaDRlR2twNmVYT2Fha1dKUWMzN0JoUTR1dVlTN3B2M0J0RFJ2QzAw
+L0xSRDRock1XaWdqRno1a3krKys0NwprcEtTU0VwS1l2WHExYnp6empzV1hUQWpJd05mWDEvVGEz
+OS9mOUxTMHNvZDkrMjMzK0xsNWNXWU1XTll1SENoUmRjd2x4UU0xL2VQCmY4RFhYNnRQa2tLSW1q
+R3JENk5FVGs0T045OThzK2wxMjdadHljbkpzWG9vZ0tGRGh6SjA2RkNXTFZ2R2ZmZmRSMVpXVm9Y
+SHhjYkcKbXI0M0dBd1lEQWF6em4veXBOcnBMY3VadTdaV3JkU2gwNis5QmpiNmQ0Y1FEaThsSllX
+VWxKUWFuOGVpUG93RkN4YXdkT2xTSG56dwpRUlJGNFp0dnZtSGt5SkdNR3pmTzdBdm01ZVZoTUJo
+TUJXRDgrUEZFUmtZU0ZSVlY2ZCs1NmFhYnlNN09wbEdqUm1YRDE2QVBZOVVxCmRWdlAvLzYzV245
+ZE9KRno1K0MyMjJEelp2RHgwVHFORU5xemVSK0dvaWdNR1RLRU9YUG1rSnVieS9uejU0bUxpN09v
+V0FDNHU3c0QKYW45SWRuWTJ5Y25KaEYzVExuVHc0RUhUTC9QRER6L1FyVnUzY3NXaXBxUTVxdmE0
+OFVaMTlyZXNSaXhFelZqVUpCVWVIczdPblR1cgpQVHFxUkZ4Y0hOSFIwUmlOUm1KaVl2RHc4Q0Fo
+SVFHQTZPaG92djc2YXhZdFdvU2JteHQ2dlo2Wk0yZlc2SG9WU1UrSHlaT3RmbHJoCm9DWk1nRTZk
+WVB0MmRiTXNJWVRsTEdxU0dqdDJMUGZmZi85MW00L3NxYnFQVlZldnFpdlRIam9FTFZ2YUlKaHdT
+SEZ4c0g2OTJod3AKUkcxbWw5VnFBd0lDMkwxN042MWJ0Nlp0MjdhbUMyZG1abHA4WVd1bzdpKzll
+emNNR2FMTzhoYTFSMkdoMnBleGZEbjA2S0YxR2lHMApVOTNQVG91YXBGYXRXbVdWSGU2MEppdlUx
+azRORzhLcnI4Sy8vZ1UvL3FoMUdpR2NqMW1kM2thamtjVEVSQll1WE1peFk4Znc5dmFtClU2ZE9w
+aTluSXgzZXRkZW9VZXFjRENrWVFsak9ySUx4OHNzdnMyREJBbHExYXNXTUdUT0ljL0twczFJd2Fp
+ODNONWd4UTMzS2NJR0gKWlNIc3lxdytqRzdkdXBHV2xvYWJteHU1dWJrTUdUS0VEUnMyMkNQZmRW
+V25IUzQvWDUzTWxaTWppdzdXVnNYRkVCd01yNzhPOTk2cgpkUm9oN00rbTh6Q0tpNHR4YzNNRG9I
+bno1cHcvZjk3aUN6bUt6RXpvM0ZtS1JXMVdwNDVhTEtaT1ZZdUhFTUk4WmhXTTdkdTMwN1JwClU5
+UFhqaDA3VE44M2E5Yk0xaG10YXRzMnNNRks2Y0xKREI0TWpSdkRzbVZhSnhIQ2VaZzFTdXJxMWF1
+MnptRTNtWm5RcDQvV0tZVFcKZERwNDR3MFlOdzRlZUVEdDJ4QkNYSjlGcTlXNmdzeE1xT0ZFZGVF
+aSt2V0REaDNnazArMFRpS0VjNmpXQmtxT3d0S09tL3g4OFBDQQozRnlvWDkrR3dZVFR5TXlFUVlO
+ZzcxNW8zbHpyTkVMWWgxMDJVSEoyTzNhQW41OFVDL0czcmwzVi9venAwN1ZPSW9UanExVUZRNXFq
+ClJFWGVlQU1XTDRZOWU3Uk9Jb1JqazRJaGFyM1dyZFdKZkJNbnltUStJYTVIQ29ZUXdELy9DY2VP
+UVdLaTFrbUVjRnkxcHRQNzhtVzEKVS9Qc1diRHlYa3pDUmF4ZHF4YU9uVHRsWXFkd2JkTHBYWVZk
+dTlUOXU2VllpTXFFaDRPL3Y3cHZoaENpdkZwVE1LUTVTcGpqdmZmZwozWGZoNUVtdGt3amhlS1Jn
+Q0ZIS3JiZkNrMC9DbENsYUp4SEM4VWpCRU9JYUw3K3M3cGVSbnE1MUVpRWNpeVlGSXpVMUZUOC9Q
+M3g4CmZKZzdkMjY1OTVjc1dVSlFVQkJCUVVFOC9QREQ3TnUzcjBiWHUzSkZuYlFYSEZ5ajA0aGFv
+bWxUZU9zdEdEOWVWck1Wb2pSTkNzYUUKQ1JOSVNFaGczYnAxeE1mSGMrYk1tVEx2ZTN0N2s1cWF5
+bSsvL1VaRVJBU3Z2ZlphamE3MysrOXd5eTNxQjRFUTVuamtFWFZCd2c4LwoxRHFKRUk3RDdnVWpM
+eThQZ0Q1OSt1RHA2VWw0ZURqcDF6ejc5K3paRTNkM2R3Q2lvcUpxdkZtVE5FY0pTOVdwQS8vK04w
+eWJCa2VPCmFKMUdDTWRnOTRLUmtaR0JyNit2NmJXL3Z6OXBhV21WSHYvUlJ4OHhlUERnR2wxVENv
+YW9EbDlmZU80NXRSUGNlV2NyQ1dFOVp1MkgKb1pWMTY5YXhlUEZpTm0vZVhPa3hzYkd4cHU4TkJn
+TUdnNkhjTVptWmNNODlOZ2dvWE43a3liQmlCWHo2S1l3Wm8zVWFJYW9uSlNXRgpsSlNVR3AvSDdq
+Tzk4L0x5TUJnTVpHVmxBVEIrL0hnaUl5T0ppb29xYzl6MjdkdTUvLzc3V2JObURaMDZkYXJ3WE9i
+TVZpd3VoaHR2CmhNT0hvVVVMNi93T29uYlp2aDM2OTRlc0xMVXZUQWhuNXpRenZVdjZKbEpUVThu
+T3ppWTVPWm13c0xBeXh4dzllcFJodzRheFpNbVMKU291RnVRNGVWQXVGRkF0UlhZR0I4UFRUNnU1
+ODBqUWxhak5ObXFUaTR1S0lqbzdHYURRU0V4T0RoNGNIQ1FrSkFFUkhSek5qeGd4eQpjbklZTjI1
+WEd1S3RBQUFWUjBsRVFWUWNBRzV1Ym16WnNxVmExNUwrQzJFTkw3OE0zYnJCMHFYcUNDb2hhaU9Y
+WDN6d3hSZWhXVE4xCitXb2hhbUxyVm9pS1VwdW9icnBKNnpSQ1ZKL1RORW5abXp4aENHdnAzbDN0
+K0g3bUdhMlRDS0VObHk0WWlpSUZRMWpYdEducXFnRXIKVm1pZFJBajdjK21DY2ZRb05Hd296UWZD
+ZWhvMmhFOCtVWmNOT1hGQzZ6UkMySmRMRnd4NXVoQzJjTWNkOEk5L3dNaVI2anBsUXRRVwpVakNF
+cUlaLy9RdnExMWVicUlTb0xhUmdDRkVOZGV2Q2tpWHcrZWV3Wm8zV2FZU3dENWN0R0lvQzI3Wkp3
+UkMyMDdxMVdqUWVmeHlPCkg5YzZqUkMyNTdJRjQrUkp1SG9WMnJYVE9vbHdaWDM3UWt3TWpCZ0JS
+cVBXYVlTd0xaY3RHQ1hOVVRxZDFrbUVxNXN5UmQxclplcFUKclpNSVlWc3VYVEM2ZGRNNmhhZ042
+dFNCTDc2QS8vd0hFaE8xVGlPRTdiaDB3WkQrQzJFdkhoNXF3Umc3VnAzL0k0UXJrb0loaEpYMAo2
+Z1hQUHc5RGg4TEZpMXFuRWNMNlhITHh3ZE9uNGJiYklDZEgrakNFZlNtS3VrUGZuMy9DeXBWUXo2
+RzNLQk8xbFN3K1dFcFdGdWoxClVpeUUvZWwwc0dDQk9tSXFKa2IyenhDdXhTVUxoalJIQ1MyNXVj
+RlhYOEdtVFRCcmx0WnBoTEFlS1JoQzJFQ3padkRERC9EQkIycngKRU1JVlNNRVF3a2JhdFlQVnEr
+R2YvNFNmZjlZNmpSQTE1M0tkM3JtNTBMNjkrbWZkdWhvRkU2S1VwQ1FZTlFwU1U5WEJHRUpvVFRx
+OQovL0xycnhBVUpNVkNPSTZJQ0hqckxlamZIL2J2MXpxTkVOV25TY0ZJVFUzRno4OFBIeDhmNXM2
+ZFcrNzl2WHYzMHJOblR4bzJiTWpzCjJiTXRPcmMwUndsSE5IbzB2UG9xM0gyM0ZBM2h2RFFaSlQ1
+aHdnUVNFaEx3OVBRa0lpS0NrU05INHVIaFlYcS9aY3VXekowN2w1VXIKVjFwODdzeE05Vjl5UWpp
+YUo1NVFoOTNlZFJmODlKTTBUd25uWS9jbmpMeThQQUQ2OU9tRHA2Y240ZUhocEtlbmx6bW1WYXRX
+ZE8vZQpIVGMzTjR2UEwwOFl3cEdOSFFzelpxaFBHci8vcm5VYUlTeGo5NEtSa1pHQnI2K3Y2Ylcv
+dno5cGFXbFdPZmVsUzNEa0NQajVXZVYwClF0akVtREh3K3V0cTBkaTdWK3MwUXBqUDZSY3VpSTJO
+TlgzdjRXR2djMmNEMVhnd0VjS3VIbjljYlo3cTEwOGRSUlVRb0hVaTRjcFMKVWxKSVNVbXA4WG5z
+WGpCQ1FrSjQvdm5uVGE5MzdkcEZaR1JrdGM5WHVtRE1teWZOVWNKNWpCb0ZEUnFvVHhxTEZrRU4v
+amNRNHJvTQpCZ01HZzhIMGV2cjA2ZFU2ajkyYnBOemQzUUYxcEZSMmRqYkp5Y21FaFlWVmVLeWw0
+NFNsLzBJNG14RWo0SnR2MUZGVThmRmFweEhpCitqU1p1TGRod3diR2pSdUgwV2drSmlhR21KZ1lF
+aElTQUlpT2p1YlBQLzhrSkNTRTgrZlBVNmRPSFpvMmJjcnUzYnU1NFlZYnlvYS8KWnZKSmNEQjgv
+REYwNzI3WFgwZUlHanQwQ0tLaVlNQUFlTzg5V2VWVzJGWjFKKzY1ekV6dndrSm8wVUpkMHJ4aFE0
+MkRDVkVOdWJudwo0SU5Rdno1OCthVzY3YXNRdGxEclozcnYzS21PYTVkaUlaeFY4K2JxZ29YdDI2
+dWJNUjA0b0hVaUljcHltWUloL1JmQ0ZiaTVxZnRwClJFZER6NTVxWjdqenRnRUlWeU1GUXdnSG85
+T3BLOXorK0NPODh3NDg4Z2o4TmQ5VkNFMUp3UkRDUVFVR3d0YXRhdDljY0xBc2tTNjAKNXhLZDNr
+YWoydjc3di85Qmt5WmFweExDK2xhdlZ2Y0tIemNPWG41WjdSZ1hvcnBxZGFmM25qM2c2U25GUXJp
+dXdZUFZ2ZXEzYmxXWAo3MDlPMWpxUnFJMWNvbUJJYzVTb0RkcTJWWjgwWnM1VU84V0hEVlBYVGhQ
+Q1hxUmdDT0ZFZERyMWFXUDNiclZmbzFzM2RmWGJnZ0t0Cms0bmFRQXFHRUU2b1lVTjQ1UlhZdGcy
+MmI0Zk9uZFVsUm9xTHRVNG1YSm5UZDNwZnVhTFF2RGtjTzZaMmZBdFJHNjFiQnkrOEFFWWoKdlBR
+U1BQU1FMQzhpS2xkck83MzM3NGViYnBKaUlXcTMvdjNWcDQxMzM0VVBQNFRiYjRlUFBvS2lJcTJU
+Q1ZmaTlBVkRtcU9FVU9sMAo2aExwcWFudytlZXdhaFY0ZThQczJYRGhndGJwaEN1UWdpR0VDK3Jk
+Rzc3L0hoSVRZY3NXZFgycVVhUFV2Y1NsbjBOVWx4UU1JVnlZClhnL0xscW43aHdjSHc3UFBRc2VP
+YW9lNUxHNG9MT1gwbmQ3dTdncjc5ME9yVmxxbkVjSTUvUHFyMm1TMWRDbjQrS2hQSHZmY284N3oK
+RUxWRHJkMFBvMzE3aGFOSHRVNGloUE14R21ITkdsaThXSjA1M3I0OVJFU28vU0M5ZXFuYnh3clhW
+R3NMeHBBaENpdFhhcDFFQ09kMgo1UXBrWkVCU2tscEVkdStHUG4zK0xpQ2RPcW1kNnNJMTFOcUNN
+WDI2d3F1dmFwMUVDTmVTazZQTzdTZ3BJTVhGYWw5aHQyNS8vOW11Cm5SUVJaMVZyQzhicTFRcjMz
+S04xRWlGY2w2S29FMk8zYlZNSG1XemJwbjRwaWxvOFNncElseTdnNVNVcjZUb0RwNXE0bDVxYWlw
+K2YKSHo0K1BzeWRPN2ZDWTE1NjZTVzh2YjNwMXEwYmUvZnVyZlJjempCQ0tpVWxSZXNJWnBHYzF1
+TU1HY0c4bkRvZGRPZ0FRNGZDYTYrcAoyOGorK2FlNmV1NC8vNmtXaU04L1Y1dXVtalpWaiszYkYw
+YVBWdGU1K3VJTGRTK1BFeWVxUDZUWGxlNm5NOU5rOFlBSkV5YVFrSkNBCnA2Y25FUkVSakJ3NUVn
+OFBEOVA3Vzdac1llUEdqV3pkdXBXa3BDUW1UNTVNWW1KaWhlZHlocEVkS1NrcEdBd0dyV05VU1hK
+YWp6TmsKaE9ybjFPbmdsbHZVcjhHRC8vNzVsU3ZxMDhqaHczRG9rUHJuZi8vNzkvZm56NnRQSWUz
+YWdZY0h0R3haL3MvUzN6ZHBvbDdMMWUrbgpzN0I3d2NqN2E2L0pQbjM2QUJBZUhrNTZlanBSVVZH
+bVk5TFQwM25nZ1FkbzBhSUZJMGVPWk9yVXFaV2VUOXBRaFhBYzllcXA4enc2CmRvUzc3eTcvL3NX
+TGtKME5mL3dCWjgrcVgyZk9xUE5FZnY3NTc5Y2w3MTI5cWhhT3ExZGh3d2ExZ0RScVZQRlg0OGFW
+djNmdGNmWHIKUTUwNlVMZnUzMytXL2w0K1Z5cG05NEtSa1pHQnI2K3Y2Ylcvdno5cGFXbGxDc2FX
+TFZ0NDlORkhUYTlidFdyRndZTUh1ZlhXVysyYQpWUWhoWFRmY0FBRUI2cGM1Q2dyVXd2SDY2K3FD
+aXZuNTZzOEtDc3ArWDFDZ05wTlY5bDdwci94OGRVangxYXZxVjNGeCtUOTF1b29MClNlbnZLL3Ba
+YnE0NlVmSjZmMCtuKzdzZ2xTNU05dnhaZFRua2VwYUtvcFRya05GVjhwdFc5bk5ITTMzNmRLMGpt
+RVZ5V284elpBVG4KeVptUVlMK2NpdkozUWJIVTJiUE9jVCtydys0Rkl5UWtoT2VmZjk3MGV0ZXVY
+VVJHUnBZNUppd3NqTjI3ZHhNUkVRSEE2ZE9uOGZiMgpMbmN1Sng3Z0pZUVFUc2Z1bzZUYzNkMEJk
+YVJVZG5ZMnljbkpoSVdGbFRrbUxDeU1yNy8rbXJObno3SjA2Vkw4L1B6c0hWTUlJY1ExCk5HbVNp
+b3VMSXpvNkdxUFJTRXhNREI0ZUhpUWtKQUFRSFIxTmFHZ292WHYzcG52MzdyUm8wWUxGaXhkckVW
+TUlJVVJwaW9QYnNHR0QKNHV2cnEzVHExRW41NElNUEtqeG15cFFwU3NlT0haV3VYYnNxZS9ic3NY
+TkNWVlU1MTY5ZnJ6UnIxa3dKRGc1V2dvT0RsZGRlZTgzdQpHVWVQSHEyMGJ0MWFDUWdJcVBRWVI3
+aVhWZVYwaEh1cEtJcHk5T2hSeFdBd0tQNysva3Jmdm4yVkpVdVdWSGljMXZmVW5KeGEzOU9DCmdn
+SWxORFJVQ1FvS1VzTEN3cFQzM251dnd1TzB2cGZtNU5UNlhwWjI1Y29WSlRnNFdMbm5ubnNxZk4v
+UysrbndCU000T0ZqWnNHR0QKa3AyZHJkeCsrKzNLNmRPbnk3eWZucDZ1OU9yVlN6bDc5cXl5ZE9s
+U0pTb3F5aUZ6cmwrL1hoazhlTEFtMlVxa3BxWXFtWm1abFg0UQpPOHE5ckNxbkk5eExSVkdVa3lk
+UEtsbFpXWXFpS01ycDA2ZVZqaDA3S3VmUG55OXpqQ1BjVTNOeU9zSTl2WFRwa3FJb2lsSllXS2gw
+Cjd0eFoyYjkvZjVuM0hlRmVLa3JWT1IzaFhwYVlQWHUyOHZEREQxZVlwenIzMDZIM3d5ZzlaOFBU
+MDlNMFo2TzBhK2RzN05tenh5RnoKZ3ZhZDlIZmVlU2MzM25oanBlODd3cjJFcW5PQzl2Y1NvRTJi
+TmdRSEJ3UGc0ZUZCNTg2ZDJicDFhNWxqSE9HZW1wTVR0TCtualJzMwpCdURpeFl0Y3VYS0ZCdGNz
+bCtzSTl4S3F6Z25hMzB1QTQ4ZVA4OE1QUC9ERUUwOVVtS2M2OTlPaEMwWmxjelpLMjdKbEMvNysv
+cWJYCkpYTTI3TW1jbkRxZGpzMmJOeE1jSE15enp6NXI5NHptY0lSN2FRNUh2SmNIRGh4ZzE2NWRo
+SWFHbHZtNW85M1R5bkk2d2owdExpNG0KS0NpSW0yNjZpV2VlZVliMjdkdVhlZDlSN21WVk9SM2hY
+Z0pNbWpTSmQ5OTlsenAxS3Y2WXI4NzlkT2lDWVE3Rmdqa2JXdXJhdFN2SApqaDBqSXlNRGYzOS9K
+a3lZb0hXa2N1UmVWcytGQ3hjWVBudzQ3Ny8vUGsyYU5DbnpuaVBkMCt2bGRJUjdXcWRPSFg3NzdU
+Y09IRGpBCi9Qbnp5Y3JLS3ZPK285ekxxbkk2d3IxTVRFeWtkZXZXNlBYNlNwOTJxbk0vSGJwZ2hJ
+U0VsRmw0Y05ldVhmVG8wYVBNTVNWek5rcFUKTm1mRGxzekoyYlJwVXhvM2JveWJteHRqeDQ0bEl5
+T0RvcUlpdSthc2lpUGNTM000MHIwMEdvME1HemFNUng5OWxDRkRocFI3MzFIdQphVlU1SGVtZWVu
+bDVNV2pRb0hMTnVvNXlMMHRVbHRNUjd1WG16WnY1N3J2djZOaXhJeU5IanVTbm4zN2lzY2NlSzNO
+TWRlNm5ReGNNClo1bXpZVTdPVTZkT21hcjU2dFdyQ1F3TXJMRHRVMHVPY0MvTjRTajNVbEVVeG80
+ZFMwQkFBQk1uVHF6d0dFZTRwK2JrMVBxZW5qbHoKaHR6Y1hBRE9uajNMMnJWcnl4VTJSN2lYNXVU
+VStsNEN2UG5tbXh3N2RvekRody96NVpkZmN2ZmRkN05vMGFJeXgxVG5manJrMGlDbApPY3VjamFw
+eXJsaXhnZ1VMRmxDdlhqMENBd09aUFh1MjNUT09IRG1TRFJzMmNPYk1HZHEzYjgvMDZkTXhHbzJt
+akk1eUw2dks2UWozCkV1RG5uMzltOGVMRkJBWUdvdGZyQWZWLzFLTi83Um5zS1BmVW5KeGEzOU9U
+SjA4eWF0UW9ybDY5U3BzMmJaZzhlVEp0MjdaMXVQL1gKemNtcDliMnNTRWxUVTAzdnAxTnZvQ1NF
+RU1KK0hMcEpTZ2doaE9PUWdpR0VFTUlzVWpDRUVFS1lSUXFHRUVJSXMwakJFRlpWcDA0ZApKaytl
+YkhvOWE5WXN1Mi9RWXpBWXlNek1CQ0FxS29yejU4L1g2SHdwS1NrTUxyMXhkUlUvdDhXMWJPbkVp
+Uk04K09DRGRyMm1jRTVTCk1JUlYxYTlmbjIrLy9aYXpaODhDbHMvRXZWcWRMYzZ1VWZxYTMzLy9Q
+YzJhTmF2eE9WM1p6VGZmekZkZmZhVjFET0VFcEdBSXEzSnoKYytPcHA1N2kvZmZmTC9mZWlSTW5t
+REJoQWtGQlFVeWFOSWxUcDA0QjhQampqL1Bzczg4U0ZoYkdpeSsreU9qUm8zbnV1ZWNJRFEzbAo5
+dHR2Snlzcmk2ZWVlb3JPblRzVEd4dHJPdC9UVHo5TlNFZ0lkOXh4QndzWExxd3dqNWVYRjJmUG51
+WEREejlFcjllajErdnAyTEVqCmQ5OTlONkN1QS9iWVk0OFJGaGJHbENsVFRETnlNekl5Nk5ldkgz
+cTlucVNrcENwLzc0S0NBdDU3N3ozNjl1MUxWRlFVS1NrcEFQVHMKMmJQTWJOcVNwNS9Dd3NJS2o2
+L01zV1BIR0Rod0lNSEJ3UVFGQlhIdzRFR3lzN1B4OS9kbjdOaXgrUG41TVgzNmRGUCsxMTU3amRE
+UQpVRUpDUW5qenpUZkxuT2U1NTU1RHI5ZlRyVnMzRGg4K1RIWjJObDI2ZEFIZ3M4OCtZOFNJRVF3
+YU5JaUFnQUErK09BRDA5OWRzMllOClBYdjJKRFEwbElrVEp6SisvUGh5T1gvOTlWZjY5ZXRIY0hB
+d1hidDI1ZUxGaTFYZU8rRkVhckowcmhEWHV1R0dHNVR6NTg4clhsNWUKU2w1ZW5qSnIxaXdsTmpa
+V1VSUkZtVFJwa2pKejVreEZVUlRselRmZlZGNTQ0UVZGVVJSbDFLaFJTdCsrZlUxTGJqLysrT1BL
+d0lFRApsYUtpSXVXenp6NVRicmpoQmlVbEpVVXBLaXBTL1B6OFRFdkg1K1RrS0lxaUtFVkZSVXBZ
+V0poeThlSkZSVkVVeFdBd0tOdTJiVk1VClJWRzh2THlVczJmUG12SVpqVWJsemp2dlZCSVRFMDNI
+NXVibUtvcWlLQys4OElMeTVaZGZLb3FpS0lHQmdVcDZlcnB5OGVKRkpUSXkKc3NMbG9kZXZYMi9h
+WitEVFR6OVY1c3lab3lpS292ejU1NTlLYUdpb29paUs4djc3N3l2VHBrMVRGRVZSVHB3NG9keCsr
+KzNYUGI3MApPVXViTm0yYTh2SEhINXQraDRLQ0F1WHc0Y09LVHFkVHZ2bm1HNld3c0ZDNS8vNzds
+UlVyVnBTNU4xZXVYRkVHRHg2czdOMjcxM1N2CjQrUGpUZmN0UHo5Zk9YejRzR2twK1U4Ly9WUnAz
+YnExY3VMRUNlWDgrZk5LdTNidGxNdVhMeXRHbzFIeDh2SlNEaDgrckp3OWUxYnAKMnJXck1uNzgr
+SEk1UjQwYXBheGJ0MDVSRkhVWjhDdFhycFE3UmpndmVjSVFWdGUwYVZNZWUreXhNdjg2QmZqdmYv
+L0xtREZqQUJnNwpkaXlyVjY4RzFDYWtCeDU0Z0taTm01cU9mZUNCQjZoZnZ6NDllL2FrZWZQbTlP
+M2JsL3IxNjZQWDYwMHJBU2NuSnhNVkZZVmVyK2ZRCm9VUDg5Tk5QVldhTGlZbWhYNzkrUkVWRnNX
+M2JObmJ1M0luQllFQ3YxNU9ZbUVocWFpcC8vUEVIaXFJUUdocEtreVpOR0Q1OGVKWEwKVlgvOTlk
+Y3NYTGdRdlY1UFpHUWtwMDZkNHZEaHd6ejAwRU9zV0xFQ2dPWExsNXY2Q2lvNi90Q2hRNVdlUHlR
+a2hMaTRPTjU1NXgxeQpjbkpvMkxBaG9DNUxNM1RvVUJvMGFNRElrU05aczJZTkFGdTNibVhZc0dF
+RUJnYVNtWm5KMnJWcnVYejVNdXZYcitmSko1OEUxT2JEClJvMGFsYnRXZUhnNGJkdTJwV25UcHZq
+Nys1T1ptVWxhV2hwZHVuVEJ5OHVMRmkxYWNPKzk5MVo0VDNyMjdNbVVLVk9ZTjI4ZVY2NWMKb1c3
+ZHVsWCtOeEhPdytHWEJoSE9hZUxFaVhUdDJwWFJvMGVYK1hsbEg3eHQyN1l0ODdwa2ZhNzY5ZXZU
+dkhsejA4L3IxNi9QNWN1WAp1WERoQWxPbVRHSGp4bzNjY3NzdERCMDZsSFBuemwwMzAyZWZmY2F4
+WThlWVAzOCtvQzVUSFJBUXdQcjE2OHNjZC96NGNmTit5VktLCmk0dUpqNCtuVDU4KzVkNXIyYkls
+TzNic1lQbnk1YWFsR1NvN3ZtUzVqbXRGUlVYUnJWczNGaTllVEs5ZXZmanFxNi9LM0pjU0pmMDMK
+NDhlUFo4V0tGUVFFQkRCcDBpVE9uVHVIVHFlcmNJWFNhMTE3dndzTEM2bFhyMTZadnFIS3poRWRI
+YzJBQVFOTVM1R2twNmR6MDAwMwpYZmQ2d25uSUU0YXdpUnR2dkpHSEhucUlmLy83MzZZUG1rR0RC
+dkg1NTU5VFhGek1KNTk4d3IzMzNsdXRjeXVLUW01dUxtNXViclJwCjA0WjkrL2J4NDQ4L1h2ZnZi
+TnUyamRtelovUEZGMStZZmhZU0VzS3BVNmRNVHl5WExsMWkvLzc5dEd2WGpycDE2NUtSa2NHbFM1
+ZFkKdm54NWxaa2VmdmhoRWhJU3VIRGhBa0NaSmErSER4L09PKys4dy9uejV3a0lDS2p5K0lvY1Bu
+ell0SFpSdjM3OVRQMGllWGw1ckZ5NQprcUtpSXBZdFcwWmtaQ1NGaFlWY3VIQUJMeTh2L3ZqakQx
+YXRXZ1dvL1V0MzNYVVhDeGN1UkZFVWlvcUtLQ2dvcVBKMzArbDA5T2pSCmd4MDdkcENkblUxT1Rn
+NkppWWtWRG1nNGVQQWczdDdldlBycXEvajYranJFWGlYQ2VxUmdDS3NxL1NIeTNIUFBjZWJNR2RQ
+cnlaTW4KYy9Ub1VmUjZQYWRPbmVMWlo1K3Q4TzlkKzdxaTk5cTNiOCt3WWNNSUNBamdtV2VlcVhR
+b2FzbS9xdVBqNHpsMzdoeDMzWFVYZXIyZQpwNTU2Q29BdnZ2aUNCUXNXRUJnWXlCMTMzTUh2di84
+T3dFY2ZmY1JMTDcxRTc5NjlDUW9LcXZERFVhZlRtWDcrd0FNUEVCb2FTa1JFCkJBRUJBVXliTnMx
+MDNBTVBQTUN5WmN0NDZLR0h5dnlzb3VOTG43TzA1Y3VYRXhBUVFFaElDUG41K2FaeitmcjY4dDEz
+M3hFY0hFeEEKUUFCUlVWRTBiTmlRS1ZPbUVCb2F5dkRod3hrMGFKRHBQRys4OFFZSERod2dLQ2lJ
+WHIxNm1RWWVsRnl6c3V2WHJWdVhlZlBtTVh6NApjQ0lqSStuU3BRc2RPM1lzZDl5Y09YUG8wcVVM
+b2FHaCtQcjZjc2NkZDFUNDMwVTRKMWw4VUFnbmxaMmR6ZURCZzlteFk0ZGRybmZwCjBpV2FOR2xD
+WGw0ZTk5eHpEeDkvL0RHMzMzNjdYYTR0SElQMFlRamh4T3k1NDF4c2JDenIxcTNEemMyTi8vdS8v
+NU5pVVF2SkU0WVEKUWdpelNCK0dFRUlJczBqQkVFSUlZUllwR0VJSUljd2lCVU1JSVlSWnBHQUlJ
+WVF3aXhRTUlZUVFadmwvQ0hyZjBuUWF1Ym9BQUFBQQpTVVZPUks1Q1lJST0K
+</png>
+ </output>
+ </outputs>
+ </codecell>
+ <markdowncell>
+ <source>## Serial calculation of nearest neighbor eigenvalue distribution</source>
+ </markdowncell>
+ <markdowncell>
+ <source>In this section we numerically construct and diagonalize a large number of GOE random matrices
+and compute the nerest neighbor eigenvalue distribution. This comptation is done on a single core.</source>
+ </markdowncell>
+ <codecell>
+ <input>def serial_diffs(num, N):
+ """Compute the nearest neighbor distribution for num NxX matrices."""
+ diffs = ensemble_diffs(num, N)
+ normalized_diffs = normalize_diffs(diffs)
+ return normalized_diffs</input>
+ <language>python</language>
+ <prompt_number>6</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>serial_nmats = 1000
+serial_matsize = 50</input>
+ <language>python</language>
+ <prompt_number>7</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>%timeit -r1 -n1 serial_diffs(serial_nmats, serial_matsize)</input>
+ <language>python</language>
+ <prompt_number>8</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs>
+ <output>
+ <output_type>stream</output_type>
+ <text>1 loops, best of 1: 1.19 s per loop</text>
+ </output>
+ </outputs>
+ </codecell>
+ <codecell>
+ <input>serial_diffs = serial_diffs(serial_nmats, serial_matsize)</input>
+ <language>python</language>
+ <prompt_number>9</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs />
+ </codecell>
+ <markdowncell>
+ <source>The numerical computation agrees with the predictions of Wigner, but it would be nice to get more
+statistics. For that we will do a parallel computation.</source>
+ </markdowncell>
+ <codecell>
+ <input>hist_data = hist(serial_diffs, bins=30, normed=True)
+plot(s, rhos)
+xlabel('Normalized level spacing s')
+ylabel('Probability $P(s)$')</input>
+ <language>python</language>
+ <prompt_number>10</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs>
+ <output>
+ <output_type>pyout</output_type>
+ <text>&amp;lt;matplotlib.text.Text at 0x3475bd0&amp;gt;</text>
+ <prompt_number>10</prompt_number>
+ </output>
+ <output>
+ <output_type>display_data</output_type>
+ <png>aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVl3QUFBRU1DQVlBQUFEWGlZR1NBQUFBQkhOQ1NWUUlD
+QWdJZkFoa2lBQUFBQWx3U0ZsegpBQUFMRWdBQUN4SUIwdDErL0FBQUlBQkpSRUZVZUp6dDNYbGNW
+UFgreC9IWGdHaHVxQWh1cFNKcEFxS0FKcmhEdWFDaWxXbHV2M0xOCjhONWNzcmhtM2ZxcDljdmJj
+czFkSTF0dmFxbFptVmd1bUlBYmkxdmxsaXNxYnJFb0lMTHovZjJCekpVQW1XR1pNek44bnZjeGo4
+dk0KK2M0NTcva1M4L0djN3puZm8xTktLWVFRUW9neTJHZ2RRQWdoaEdXUWdpR0VFTUlnVWpDRUVF
+SVlSQXFHRUVJSWcwakJFRUlJWVJBcApHRUlJSVF4aThvSXhhZElrbWpadFNzZU9IVXR0ODlwcnIr
+SGk0a0tYTGwwNGRlcVVDZE1KSVlRb2pja0x4c1NKRTltMmJWdXB5Mk5pCll0aXpadzhIRHg0a09E
+aVk0T0JnRTZZVFFnaFJHcE1Yak42OWU5T29VYU5TbDBkSFJ6Tml4QWdjSEJ3WU0yWU1KMCtlTkdF
+NklZUVEKcFRHN01ZeVltQmpjM2QzMXo1MmNuRGgzN3B5R2lZUVFRZ0RVMERyQVh5bWwrT3RzSlRx
+ZHJzUzJwYjB1aEJEaS9zb3pLNVRaN1dINAordnB5NHNRSi9mT0VoQVJjWEZ4S2JWOVlZTXo1TVhm
+dVhNMHpTRTdKS0RrbForR2p2TXl5WUd6YXRJbWtwQ1RXclZ1SG01dWIxcEdFCkVFS2d3U0dwTVdQ
+R0VCRVJRV0ppSWkxYnRtVCsvUG5rNU9RQUVCUVVoSStQRDcxNjllTFJSeC9Gd2NHQk5XdldtRHFp
+RUVLSUVwaTgKWUh6OTlkZGx0bm4zM1hkNTk5MTNUWkRHTlB6OS9iV09ZQkRKV1hrc0lTTkl6c3Bt
+S1RuTFM2Y3Fja0JMWXpxZHJrTEg0NFFRb2pvcQo3M2VuMlkxaENDR0VNRTlTTUlRUVFoaEVDb1lR
+UWdpRFNNRVFRZ2hoRUNrWVFnZ2hEQ0lGUXdnaGhFR2tZQWdoaERDSUZBd2hoQkFHCmtZSWhoQkRD
+SUZJd2hCQkNHRVFLaGhCQ0NJTkl3YkJ3OXZZTzZIUzZNaDQxeTJ4amIrK2c5VWNSUXBnNW1YelF3
+aFhjZGJDc1BqQ3MKVFhYdlN5R3FDNWw4VUFnaFJKV1NnaUdFRU1JZ1VqQ0VFRUlZUkFxR0VFSUln
+MGpCRUVJSVlSQXBHRUlJSVF3aUJVTUlJWVJCcEdBSQpJWVF3aUJRTUlZUVFCcEdDSVlRUXdpQlNN
+SVFRUWhoRUNvWVFRZ2lEU01FUVFnaGhFQ2tZNHE0YU12MjVFT0srWkhwekMxZVowNXZmCnY0MzB0
+UkRXUXFZM0YwSUlVYVdrWUFnaGhEQ0lGQXdoaEJBR2tZSWhoQkRDSUZJd2hCQkNHRVFLaGhCQ0NJ
+Tm9VakFpSXlOeGMzT2oKWGJ0MkxGdTJyTmp5akl3TXhvOGZqN2UzTjM1K2ZtemV2Rm1EbEVJSUll
+Nmx5WFVZM3Q3ZUxGbXloTmF0V3hNUUVNRGV2WHR4ZEhUVQpMLy9vbzQvNDdiZmZXTGx5SlJjdlh1
+VHh4eC9uN05temQ2ODV1Q2U4WEljaDEyRUlJWXhtTWRkaHBLU2tBTkNuVHg5YXQyN05nQUVECmlJ
+Nk9MdEttUVlNR3BLV2xrWk9UUTNKeU1uWHExQ2xXTElRUVFwaVd5UXRHYkd3c3JxNnUrdWZ1N3U1
+RVJVVVZhVE5tekJqeTh2SncKZEhTa1Y2OWVyRjI3MXRReGhSQkMvRVVOclFPVVpQbnk1ZFNvVVlO
+cjE2N3grKysvRXhnWXlNV0xGN0d4S1Y3ZjVzMmJwLy9aMzk4ZgpmMzkvMHdVVlFnZ0xFQjRlVG5o
+NGVJWFhZL0l4akpTVUZQejkvVGx5NUFnQTA2ZFBaK0RBZ1FRR0J1cmJqQnc1a3NtVEp4TVFFQUNB
+CnI2OHZYMzc1WlpFOUU1QXhESkF4RENHRThTeG1ES05CZ3daQXdabFNjWEZ4N055NUUxOWYzeUp0
+K3ZidHk1WXRXOGpQeitmOCtmTWsKSnljWEt4WkNDQ0ZNUzVORFVvc1hMeVlvS0lpY25CeG16SmlC
+bzZNaklTRWhBQVFGQlRGNjlHaE9uRGpCbzQ4K2lwT1RFMHVXTE5FaQpwaEJDaUh2STlPWVdUZzVK
+Q1NHTVpUR0hwSVFRUWxnbUtSaENDQ0VNSWdWRENDR0VRY3p5T2d4aG1QalVlR2dMcU8yUVZ3dHlh
+MEZDCkI4aXkxenFhRU1JS1NjR3dJRW9wUWsrSHN2NzRldlplMmt0NlRqcDBCMWdJdHRsZ2R3Y2NU
+OEoxTHpnM0FFNE9od1IzcldNTElheUUKbkNWbEFaUlNiRDJ6bFhuaDg4ak56K1h2WGYrT1gycy9I
+bW44eU4ycjMrL3BBN3M3MEdvUFBMd0RPcTJGT0QrSTJBQUpjcGFVRUtKQQplYjg3cFdDWXVmalVl
+TVpzR3NPdHpGdk04NXZITUxkaDJPaitPL1IwMzlOcTdkTEJad1gwZUJYT2pZVnRpK0dPVXlsYmtv
+SWhSSFVoCnA5VmFvZDBYZHROMWRWZUd0QnZDcjFOL1piajc4Q0xGb2t3NWRXSGZiRmdDcExXQXFW
+N2dFbFpsZVlVUTFrMzJNTXlRVW9xRkJ4YXkKOE1CQzFneGJRMStYdnFXMk5lckNQWmN3ZUdvQy9E
+NFdmdmsveUt0WnZNMTkxbUdOZlMxRWRTU0hwS3pJYTd0ZVk5dlpiV3dldlpsVwpEVnJkdDYzUlYz
+clhTWUJoNHd0KzN2QXQ1TlFwM3FhVWRWaGpYd3RSSGNraEtTdngvcjczK2ZHUEg5bjUzTTR5aTBX
+NTNIR0NyMytFCk80N3c3RUNvbFZyNTJ4QkNXQ1VwR0daazlhSFZyRHE0aWgzUDdzQ3hqbVBaYnlp
+di9Ccnd3eGR3b3lPTWZ4enFKRmJkdG9RUVZrTUsKaHBuNDd1UjN6SXVZeDg3bmR2S2cvWU5WdjBG
+bEF6OHRoM1A5WVlJZjFLLzZUUW9oTEpzVURETnc0ZVlGZ2tLRDJEeDZNMjBkMnBwdwp5enJZOWEr
+Q1FmQm5rY05UUW9qN2trRnZqZVhtNStMM2hSL0RYSWNSM0NQWTZQZFh6dlRtQ2diYmdNTUFXQmNL
+K1hZbHJzUFMrMW9JClVVQUd2UzNVTzVIdlVNZXVEaTkzZjduWU1udDdCM1E2M1gwZmxVTUgyd0Js
+QzRPblVYWUJFa0pVUjFJd05MVHYwajVXSFZ6RmwwOTkKV2VJRmVXbHBOeW40OHI3Zm81TGtBeHZY
+dzBQUjBPUGZsYmRlSVlUVmtJS2hrWlRNRko3OS9sbENob1RRb240THJlTVV5SzVmY0VqSwpkeW00
+ZjZ0MUdpR0VtWkV4REkxTStHRUN0ZTFxc3lwd1ZhbHRUSGY3MWIrMGFYNFluZzJBVC9kRGNqdjlj
+a3Z0YXlGRVVUS0dZVUdpCjRxUFllWDRuSC9UL1FPc29KYnZXR2NMbndZalJZSnVsZFJvaGhKbVFn
+bUZpU2lsbWJaL0Znc2NYVUs5bVBhM2psQzcyNzVEU0N2cTkKcG5VU0lZU1prSUpoWXQ4Yys0YWN2
+QnllODN4TzZ5aGwwTUdQbjRMYkptajNrOVpoaEJCbVFBcUdDZDNKdWNPcllhK3lLR0NSY2RPVQph
+eVhEQWI1YkEwOU1saXZCaFJCU01FenB3d01mNHZ1UUw3MWI5OVk2aXVFdTlZYURmNE5oa0plZnAz
+VWFJWVNHcEdDWXlOVzBxeXlLCldzUjcvZDdUdjFiV2hYbG1JL0tmWUFQdjdYdXY3TFpDQ0tzbEJj
+TkUvdm5MUDVuU2VRb3VqVnowcjVWOVlaNlpVTGJ3SFN5S1dzVHgKUDQ5cm5VWUlvUkVwR0Nad0p1
+a01vYWREZWIzMzYxcEhLYjlVZVB1eHQ1bXlaUXI1S2wvck5FSUlEUmgxNFY1K2ZqNEhEaHdnTGk2
+TwpoSVFFR2pac1NJY09IZWpTcFFzMk5xYXZQWlp5NGQ2VUxWTm9VYjhGOC8zbkYzbTk3QXZ6Tkxw
+d3I1VGxlZmw1K0gzaHgrZ09vM25SCjU4VXkxaWVFTUZkVmVvdlc3T3hzRmkxYVJGNWVIZzBiTnNU
+RnhZVm16Wm9SSHgvUHVYUG51SGJ0R2syYU5HSG16Sm5ZMnRxVzZ3T1UKaHlVVWpDdXBWK2k0cWlO
+bnBwK2hjWjNHUlpaWldzRlFTbkV5NFNSOXZ1akQ0UmNPMDdKQnl6TFdLWVF3UjFWV01MS3lzbGkz
+YmgxRApoZ3pCeWNtcDFIYm56NTluMTY1ZFRKa3l4ZWdRNVdVSkJlT1ZIYStRci9KWkZMQ28yREpM
+TEJnQWIwZThUY3pWR0g0Yy9hTjVEYzRMCklReFNwWHNZNXNyY0MwYlNuU1RhTFd2SGIzLzdqWWZz
+SHlxMjNMSUtoaDJRVy9DakxSQUVSQUQzaklIWHI5K0kxTlRrTXJZamhOQ2EKeWVhU09uWHFGRC85
+OUJQSnljbWNQSG5TNkExV0o4dGpsalBNYlZpSnhjTHk1S0kvZXl0UHdZLzdZV0F6cUoya2Y3M2dy
+QzhoaExVcQpWOEZvMXF3WjNicDFZK3ZXclh6MTFWZFZrY3ZpM2M2K3pZcllGY3p1TVZ2cktGVWp2
+anVjR0FFRGpMOUxvQkRDTWhsZE1LNWV2Y3J1CjNidng5dlltT0RpWXBrMmJWa1V1aTdmNjBHcjhu
+UDFvNzloZTZ5aFZaOWNDY0FtRE5ydTBUaUtFTUFHakM4YjQ4ZU54ZFhWbDFhcFYKdlBqaWl4dzll
+clFxY2xtMDdMeHNGaDVZeUd1OXJIeW0xK3o2OE5OeUNId1JiSEswVGlPRXFHSVZHdlMrZWZNbURS
+czIxT3hNR1hNZAo5RjUvYkQwZkhmcUkzZU4zMzdlZFpRMTZsN1pjd2JPRDRPeEFpSnBsbHI4UElV
+UlJWVGJvblpXVnhSOS8vRkhpc2thTkdoVXBGbnYyCjdERm9vNUdSa2JpNXVkR3VYVHVXTFZ0V1lw
+dlkyRmk2ZHUyS201c2IvdjcrQnEzWFhJUWNDbUZxbDZsYXh6QVJIV3hiQkwzZmdUcGEKWnhGQ1ZL
+VXlDMGF0V3JWSVNrcGkrZkxsSlo0VmxacWF5cDQ5ZTVneFl3YU5HalV5YUtNelo4NGtKQ1NFc0xB
+d1ZxeFlRV0ppWXBIbApTaWttVFpyRXYvNzFMMDZlUE1tMzMxck8vYVZQSjUzbTJKL0hlTDczMVB0
+T0xHaFYxeThrdXNIdlkrRXhyWU1JSWFxU1FXTVlwMDZkCjRzMDMzOFRUMDVONjllb3hkZXBVSmt5
+WXdOTlBQODJjT1hOSVRrNW15WklsZUhoNGxMbXVsSlFVQVByMDZVUHIxcTBaTUdBQTBkSFIKUmRv
+Y1BIaVFUcDA2MGE5ZlB3QWNIUjJOL1Z5YVdYMTROUk84Sm5ENzFpM3VQN0dnbFIyNkNaOEhidkRi
+amQrMFRpS0VxQ0kxREdsMAo5T2hSYnR5NFFWcGFHa3VYTHFWZnYzNzA3bDIrZXpyRXhzYmk2dXFx
+Zis3dTdrNVVWQlNCZ1lINjE3WnYzNDVPcDZOMzc5NDBiTmlRCmFkT21FUkFRVUs3dG1WSldiaFpm
+SHYyU2ZaUDI4UUZtZXIvdXFwTFpDQ0xnSlkrWDJEVnVsM1h0UVFraEFBTUxScWRPbmFoWnN5YU4K
+R3pkbTd0eTVMRisrdk53Rnd4Q1ptWmtjUFhxVXNMQXc3dHk1US8vKy9UbDI3QmkxYTljdTFuYmV2
+SG42bi8zOS9UVWQ3L2orMVBkMApiTnFSZG8zYmFaWkJVNGNnNFU0QzM1LzZucWZkbnRZNmpSRGly
+dkR3Y01MRHd5dStJbVdBU1pNbXFaTW5UK3FmLy9EREQ0YThyVVMzCmJ0MVNYbDVlK3VmVHBrMVRv
+YUdoUmRxRWhvYXE0T0JnL2ZPUkkwZXFiZHUyRlZ1WGdmRk54djhMZjdYKzJIcWxsTHA3ekVtVjhT
+aXIKVFdXc3c3Ulp3czZGcVRhTDI2aU1uQXlOZnh0Q2lOS1U5N3ZUb0RHTWMrZk9FUndjVEpzMmJl
+alpzeWNmZi93eGE5ZXU1Y0tGQzJ6Ywp1TkdvQXRXZ1FRT2c0RXlwdUxnNGR1N2NpYSt2YjVFMjNi
+cDFJeUlpZ2p0MzdwQ2NuTXlSSTBmbzJiT25VZHN4dGROSnB6bVJjSUtuClhKL1NPb3FtK3JyMHhi
+T1pKNHNPRko5c1VRaGgyUXk2RHVQNDhlTjA2TkFCS0ppVk5qbzZtdGpZV0tLam8vbjk5OTlKVFUw
+MWFxTVIKRVJGTW5UcVZuSndjWnN5WXdZd1pNd2dKQ1FFZ0tDZ0lnRldyVnJGczJUS2NuSno0Mjkv
+K3h1alJvNHVITjZQck1JSjNCR05yWTZ1LwpCV3ZaMTFoQSthOTkwS0tOWWV0UVNuRXUrUnkrbi9q
+eTI5OStvMFg5Rm1XOFJ3aGhhcHJOVnJ0bzBTSm16WnBWa1ZXVW03a1VqTXpjClRGb3Rhc1greWZ0
+cDY5QVdxTjRGQStDMVhhOXhOZTBxWHo3MVpSbnZFVUtZbXNsbXEvMnJHVE5tVkhRVkZ1LzdrOS9q
+MmN4VFh5d0UKdk43cmRYYWUyMG5NbFJpdG93Z2hLa21GQzRZcDc3Qm5ya0lPaGZCQzV4ZTBqbUZX
+NnRlcXo0SytDNWp4OHd5NUI3Z1FWc0wwTitLMgpNbWVTem5BeThTUlB1ajZwZFJTek04NXpITG41
+dVd3NHZrSHJLRUtJU21CVXdiaHk1VXBWNWJCWTN4ejdobEVkUmxIVHRxYldVY3lPCmpjNkc5L3Uv
+enh1L3ZFRjJYcmJXY1lRUUZXUlV3ZWpmdnorREJnMWl3NFlONU9USWROWktLYjQrOWpXalBZcWZ3
+VlU5MVNnMlgxWmYKbDc2Y2l6bEhyUjYxME9sMDJOczdhQjFTQ0ZGT1JoV01FeWRPOE9hYmI3Smp4
+dzdhdFd2SDlPblRPWHo0Y0ZWbE0zdkgvanhHZWs0NgozUjdxcG5VVU0zSFBiVnp2ZllRZGhUNU5v
+V2FxM01aVkNBdFc3dE5xdDIzYnhxUkprOGpMeTZOdDI3WXNYTGlRYnQxTSs4V3A5V20xCmhZZGEz
+dS8vZnJGbDFmVzAybExiREhzT2JqNE00ZlBONGxSb0lhb3prNXhXR3g4Znp6dnZ2SU9IaHdlZmZm
+WVpYM3p4QmRldVhXUGwKeXBWTW1qVEo2STFiTXFXVWZ2eENHR0QzMitDekRPcHFIVVFJVVY0R1RU
+NVlhTkNnUVV5Y09KSHc4UEFpVTQ1N2Vub3lkV3AxdVdGUQpnVVBYRHFIVDZlamN2TFBXVVN6RExX
+ZjRkUno0TGRZNmlSQ2luSXc2SkJVVEU0T1BqMCtacjVtS2xvZWtnbmNFVTl1dU5tOC85bmFKCnkr
+V1FWQW5xSk1JMEowN1BQbDE5Wi9RVndneVk1SkJVU1hzUmhYTS9WU2Y1S3AvMXg5Y3p1b09jSFdX
+VU80NXdBTjdZL1liV1NZUVEKNVdEUUlhblkyRmhpWW1KSVNFaGc1Y3FWK3NxVWtKQmc4RzFacmNt
+Qnl3ZG9VS3NCSFpwMDBEcUs1WW1DdlUvdEpmWktMRjBmN0twMQpHaUdFRVF6YXcwaEpTZUh5NWN2
+azVPUncrZkpsNHVQamlZK1BwMW16Wm56KytlZFZuZEhzZkhQOEc3bjJvcnh5WUs3ZlhGNE5lMVhP
+CmxoTEN3aGcxaG5INjlHa2VlZVNScXN4akZDM0dNSEx6YzNub3c0ZllNM0hQZlkvRHl4aEc2VzF5
+OG5Mb3NMSURTd2N1SmFDdCtkOTYKVndoclU2VmpHSVgzMng0d1lBQnQyclFwOG5CeGNURjZvNVlz
+SWk2Q2grd2Zra0hiQ3FoaFU0Ti85ZjBYcjRhOUtoTVRDbUZCRE5yRAp1SFhyRmcwYk5pUXhNYkhF
+NWZlZVltdEtXdXhoVE5reWhmYU4yeFBjSS9pKzdXUVBvL1EyU2ltVVVuVC90RHZUZktieGJLZG55
+M2lQCkVLSXlhWFlESlMyWnVtQms1MlhUWW1FTERnY2RwbFdEVnZkdEt3V2o5RGFGdjdQSWk1R00r
+MzRjZjB6N2cxbzFhcFh4UGlGRVpTbnYKZDZkQlowbmR1SEhqN2hkZ1VVb3BkRG9kVFpvME1YckRs
+aWpzZkJqdEhkdmowZEpMNWtRcXR4cEYvMXNhQXcvMGZnQ2lDcDdXcjkrSQoxTlJrYmFJSkllN0xv
+SUxScTFjdmdHSkZvN0JnbkQ1OXV2S1RtYUZ2am4zRDZBNmoyWjgyQThQK3RTMktLNXlnOEs1ZHgy
+QmNYemh5CkdySWFrSlltL1NhRXVUSm8wUHVSUng3aHpKa3paR2RuazVPVFEzWjJ0djduNmpMTmVW
+WnVGbHRPYjJHRSt3aXRvMWlYUHozZ3pHRG8KK1lIV1NZUVFaVEJvRDJQZHVuVUFIRHg0c05peWtn
+NVZXYVB3dUhEY25keHBYcis1MWxHc1QvaDhDUEtHbUJmaHR0WmhoQkNsTWFoZwpOR2pRQU5EdWJD
+aHpzT1gwRm9ZK01sVHJHTllwcFJVY21RVCs4eUJVNnpCQ2lOSVlOVnN0UUdKaUl0dTNiMGVuMHhF
+UUVFRGp4bzJyCklwZFpVVW9SZWpxVXJXTzNhaDNGZXUxOURhYTExdzkrQ3lITWoxR1RENjVkdTVi
+dTNidHo0TUFCOXUvZlQvZnUzVm03ZG0xVlpUTWIKeC80OGhrNm53OTNKWGVzbzFpdkRBZllIdytO
+YUJ4RkNsTWFvNnpDOHZMell0bTBielpvMUF3cE90dzBJQ09EbzBhTlZGdkIrVEhVZAp4b0k5Qzdo
+Kyt6cExCeTNWYjlmU3JuMndpQ3cxTW1CNkhRNjhmRUJ1ZXl0RUZUTEo5T1lPRGc1a1pHVG9uMmRr
+Wk9EZzRHRDBSaTFOCjZPbFFoand5Uk9zWTFpKzNOb1REN0oyelpXSkNJY3lRUVdNWTA2ZFBCOERK
+eVlrdVhiclF1M2R2bEZMczNidVgvdjM3VjJsQXJmMloKL2ljbkVrN2cxOXBQNnlqVnc2K1FsSkhF
+VDJkK0l2Q1JRSzNUQ0NIdVlWREI2TktsaS83MDJVR0RCdWxmZi9ycHA2Myt0TnFmei94TQpQNWQr
+TW5XRnFlVER2L3IraXptNzVqQ3c3VUJzYld5MVRpU0V1RXZta2lyRGlBMGpHUExJRUNaNFRTaXlY
+YXNaTnpDN0xEcnk4L1BwCi9YbHZudS84ZkpGK0YwSlVEcE5NUHBpUmtjR09IVHZZdm4wN04yL2Ux
+TzlkRkY3WVoycFZYVEN5ODdKcDhrRVRUazgvVFpPNi81MHYKU3dwRzFXNUhLY1crUy9zWXMya01m
+MHo3ZzlwMnRjdFlweERDR0NZWjlIN2pqVGZZczJjUDI3ZHZ4OS9mbi9qNGVKeWRuWTNlcUtXSQpp
+SXZBemNtdFNMRVFwdEd6VlUrNnRPakMwdWlsV2tjUlF0eGwxQjVHNTg2ZE9YejRNQjA2ZE9ENDhl
+T2twS1RRcjE4L1ltTmpxekpqCnFhcDZEMlBHenpOb1ZxOFpyL2QrdmRoMnJldGY5ZWFVNWIrLzA5
+TkpwK254YVE5T3ZuZ1NwN3BPWmF4WENHRW9rK3hoMk5uWkFmRG8KbzQ4U0docktqUnMzeU16TU5I
+cWpscUR3Nm02WkRzVFVDcVkvMStsMHRIZHNUMUo0RWsyZWFhSi9UYWZUWVc5di9hZHlDMkdPakNv
+WQpMNzc0SWpkdjNtVFdyRmtzWDc2YzRjT0g4OVpiYjFWVk5rMmRTRGhCbnNyRG80bUgxbEdxbWNM
+cHorOCtJaEtnWTJOb2ZFci9tdHlMClJBaHRHSDJXVk9GY1VnQUJBUUdhVGtoWWxZZWszdHY3SHBk
+VEw3Tjg4UElTdDJ0ZGg0SE1LVXNKeTN1K0R5MzN3VGViOVcwcytPUSsKSVRSbmtrTlM5ODRsRlJV
+VlJZOGVQYXgyTHFrdHA3ZkkxZDNtSW5vR05QME5uTU8xVGlKRTlhYU00T25wcWE1ZHU2Wi9mdjM2
+ZGVYcAo2V25NS3BSU1NrVkVSQ2hYVjFmVnRtMWJ0WFRwMGxMYnhjVEVLRnRiVzdWcDA2WVNseHNa
+MzJBSjZRbksvbC8yS2lNbm85VHRnaXJqClVSbHRUTFVkYzhwU3luS1ByeFV2ZEZibzhxcnM5eTVF
+ZFZIZXZ5Rk41cEthT1hNbUlTRWhoSVdGc1dMRkNoSVRFNHUxeWN2TDQ5VlgKWDJYZ3dJRW1QL3p3
+ODVtZmViek40enhRNHdHVGJsZmN4N0ZSa0Y4RE9tcHp6WThRb3B4elNSWGU0N3M4YzBtbHBLUUEw
+S2RQSHdBRwpEQmhBZEhRMGdZRkY1dzFhdG13WkkwYU0wT1NVWGJsWmtqblN3WTZGTUh3c25OQTZp
+eERWVTdubWtpcjh1VHh6U2NYR3h1THE2cXAvCjd1N3VUbFJVVkpHQ2NlWEtGVFp2M3N3dnYveENi
+R3lzU2VlcnlzN0xadVBoYjlrNGNTT1QweWViYkx2Q0FKZDZ3Wld1MFAyeTFrbUUKcUpZTUtoZ1RK
+a3dvOHZ6UW9VUG9kRG82ZCs1Y0ZabDQ2YVdYZVBmZGQvVWorZmM3SkRWdjNqejl6LzcrL3ZqNysx
+ZG8yM3N1N29GRQpCZWxsbmNrak5CSDJIanovSFRkdTM2QnB2YVphcHhIQ0lvU0hoeE1lSGw3eEZS
+a3o0QkVSRWFIYXRXdW5CZ3dZb0FZTUdLRGF0V3VuCklpTWpqUm8wdVhYcmx2THk4dEkvbnpadG1n
+b05EUzNTcGsyYk5zcloyVms1T3p1cmV2WHFxU1pObXFqTm16Y1hXNWVSOFEzeTByYVgKRkgzTWZB
+RFlxck1Zc0k0QTFOVFFxWlgrdXhlaXVpanZkNmRSN3dvTURGUW5UNTdVUHo5MTZwUUtEQXcwZXFO
+ZVhsNHFJaUpDWGJodwpRYlZ2MzE0bEpDU1UybmJDaEFrbVBVdXEvYkwyaXVZVzlPVnBkVmtNV0Vk
+dGxPUDdqdXI0bjhjci9mY3ZSSFZRM3U5T284NlNTazVPCnBrV0xGdnJuelpzM0p6azUyZWk5bXNX
+TEZ4TVVGRVMvZnYzNCs5Ly9qcU9qSXlFaElZU0VoQmk5cnNwME9lVXlTUmxKY0YzVEdLSXMKR2ZC
+YXI5ZVl2WE8yMWttRXFGYU11dEo3MWFwVnJGdTNqbWVlZVFhbEZOOTk5eDFqeG94aDZ0U3BWWm14
+VkpWOXBmZm5SejVuKzdudApySDltUFpqclZjOVduOFd3ZFdUbVpPSyswcDJQaDN4TVg1ZStaYlFY
+UXR5cnl1K0hvWlRpMnJWclhMOStuZERRVUhRNkhVT0dETUhiCjI5dm9qVmFXeWk0WVl6ZU41ZkUy
+anpPbHl4UXM2Y3ZUdXJJWXRnNmxGQnVQYitTZFBlOXc2SVZEY21jK0lZeGdrb0xSc1dOSGpoMDcK
+WnZSR3FrcGxGb3g4bFUvemhjMkplVDRHNTBiT1dOS1hwM1ZsTWJ4Z0tLWG8rVmxQWHVqeWd0eVpU
+d2dqVlBsY1VqcWREbDlmWDdadQozV3IwUml6QnNUK1BZVi9MbnRZTlcyc2RSUmhJcDlPeGNNQkMz
+dmpsRGRLejA3V09JNFRWTTJyUU96bzZtcUZEaDlLc1dUTzh2YjN4Cjl2YXVzbXN4VEczbnVaMzBk
+ekh1cW5XaHZlNHR1OU96VlU4K1BQQ2gxbEdFc0hwR0RYcWZPM2V1eE4yWXRtM2JWbW9vUTFYbUlh
+bEIKYXdjeHBmTVVublo3Mm9EcHk4M3I4SXgxWlRGa0hYWVUzRGZqcmtiQUZHQWxjTHZncGZyMUc1
+R2FhdndaZkVKVUIxVTZocEdUazhQMgo3ZHZadTNjdkFRRUIrUG41WVdOajFNNUpsYWlzZ3BHVm00
+WFRCMDVjZk9raWpXbzNrb0poaWRzWkVBeTFVbUhMeC9vMmxYbENoQkRXCnBFckhNRjUvL1hWV3JW
+cUZrNU1UYjczMUZvc1hMelo2UStic1FQd0IzSnpjYUZTN2tkWlJSSGxGL2hQYWI0Ym1oN1ZPSW9U
+Vk1tZ1AKbzB1WExrUkZSV0ZuWjhldFc3ZDQ4c2tuaVlpSU1FVysrNnFzUFl4Ly92SlBkT2o0djhm
+L1Q3OWVpLzdYdGtWbnFjQTZ2RCtGTHF2aAowLzJnYkdVUFE0aFNWT2tlUm41K1BuWjJkZ0EwYk5p
+UTFOUlVvemRrenNMT2g5SFBwWi9XTVVSRkhaMEl5cWFnY0FnaEtwMUJleGkyCnRyYlVxVk5IL3p3
+akk0UGF0V3NYckVDbjA2eUFWTVlleHMyTW03UmUzSnFFZnlSUXEwWXQvWG90L2wvYkZwdWxndXRv
+K2l1TTZ3OHIKa3VGTzNuM1hJZ1Bqb3JvcTczZW5RZE9iNStYZC93L1BrdTJPMjAzUFZqMzF4VUpZ
+dUJ1ZThOdi9RTC9GOE9QOS95RFMwbVNhZWlHTQpvZjJwVGhyYmVYNG4vZHJJNFNpckVqNGYyZ0l0
+OTJtZFJBaXJVdTBMUnRqNU1Qby9MQmZzV1pVc2U5Z09EUGtiMk9TVzJWd0lZWmhxClhURGlic1dS
+bXBXS1J4TVByYU9JeW5ZY3VOMFVmSlpwblVRSXExR3RDMGJoMlZFMnVtcmREZGJycHhYUTV4Mm9m
+MFhySkVKWWhXcjkKVFNuakYxWXU2UkU0T0JVQ1h0WTZpUkJXb2RvV2pIeVZ6Njd6dStUNkMydTM1
+M1Y0TUFZZTNxRjFFaUVzWHJVdEdMOWUveFhIT282MApiTkJTNnlpaUt1WFVnWitYd2VBWG9VYW0x
+bW1Fc0dqVnRtRHNQTDlUem82cUxrNFBnWVFPME9NRHJaTUlZZEdxYmNFSU94OG00eGZWCnljOUxv
+TnNTYUhSZTZ5UkNXS3hxV1RBeWN6TTVFSDhBZjJkL3JhTUlVMGxwRFh0ZmhTZWVCMTIrMW1tRXNF
+alZzbURzdTdTUGprMDYKMHVDQkJscEhFYVowNEdXb2tRRmRWMnFkUkFpTFZDMExob3hmVkZQS0Zu
+NzRBdnpuZ2NNWnJkTUlZWEdxWmNHUThZdHFMS2s5Ukw0QgpUMDBvbVBSV0NHR3dhbGN3a3U0a2NT
+YjVETDRQK1dvZFJXZ2xlZ2JrMTREdVdnY1J3ckpVdTRLeE8yNDN2VnIxb3FadFRhMmpDSzBvCkc5
+ajhPZlNDRXdrbnRFNGpoTVdvZGdVajhtSWsvcTM5dFk0aHRIYlRCWDZ4b2NNL082Q3oxYUhURlgv
+WTJ6dG9uVklJczFMdENrYkUKeFFqNnRPNmpkUXhoRGc3bVEyWi82UGwvRk56QnIrZ2pMZTJtcHZH
+RU1EZlZxbUFrWnlSejRlWUZPamZ2ckhVVVlTNDJmd3JkRmhmYwoybFVJY1YvVnFtRHN2YlNYYmc5
+MXc4N1dUdXNvd2x5a3RvU2Q3OE93OFdDYnJYVWFJY3hhdFNvWUVSY2o4R3Z0cDNVTVlXNk9Ub0NV
+Cmx0RG5iYTJUQ0dIV3FsWEJpTHdZS2VNWG9nUTYyUEl4ZEZrTnJTTzFEaU9FMmFvMkJTTTFLNVdU
+Q1NmeGVkQkg2eWpDSE4xdURqOTgKRHNQSFF0MGJXcWNSd2l4Vm00S3gvL0orSG0zeEtMVnExTkk2
+aWpCWFp3Y1ZISjRhL2orZ3k5TTZqUkJtcDlvVWpJaUxFZmc1KzJGdgo3MURpT2ZmM1BrUTF0bnQr
+d1d5MmZtOXBuVVFJczZOSndZaU1qTVROelkxMjdkcXhiTm15WXN2WHJsMkxwNmNubnA2ZWpCMDds
+dE9uClQxZDhteGNqNmRPcXo5MXo2NHVmYzEvMElhb3RaUXViMWtIblQrQmhyY01JWVY0MEtSZ3pa
+ODRrSkNTRXNMQXdWcXhZUVdKaVlwSGwKTGk0dVJFWkc4dXV2dnhJUUVNRGJiMWZzN0pVN09YZjQ5
+ZnF2ZEc4cGt3Y0pBOXh1QnQrdGhhY2dQalZlNnpSQ21BMlRGNHlVbEJRQQordlRwUSt2V3JSa3dZ
+QURSMGRGRjJuVHYzcDBHRFFydVZSRVlHRWhFUkVTRnRoa1ZIMFducHAyb1kxZW5RdXNSMVVpY1A4
+VFkwSEpXCnkxS25EcEhwUTBSMVkvS0NFUnNiaTZ1cnEvNjV1N3M3VVZGUnBiYi8rT09QR1RwMGFJ
+VzJXVGgrSVlSUjl1WkQxaURvRzB4cGh5OWwKK2hCUm5kVFFPc0Q5aElXRnNXYk5HdmJ2MzE5cW0z
+bno1dWwvOXZmM3g5L2Z2MWlieUl1UnpPNHh1d29TQ3F1bWdPKytncURPY0trWAovUEdrMW9tRUtK
+Znc4SERDdzhNcnZCNmRVc3Frbzd3cEtTbjQrL3R6NU1nUkFLWlBuODdBZ1FNSkRBd3MwdTYzMzM3
+ajZhZWZadHUyCmJiUnQyN2JFZGVsME9zcUtuNVdiaGVNSGpseDUrUXIydGV6dm5nVlYxa2N1cTAx
+bHJNT2N0bU5PV2N6d016OFlEV09Id245MndnM1AKWW0xTS9DY2tSSVVaOHQxWkVwTWZraW9jbTRp
+TWpDUXVMbzZkTzNmaTYxdjBaa2FYTGwxaStQRGhyRjI3dHRSaVlhaVlLekc0T3JwaQpYOHUrUXVz
+Ylh5WTFBQUFXSjBsRVFWUVIxZGdWWC9ocGVVSFJxSDlGNnpSQ2FFYVRRMUtMRnk4bUtDaUluSndj
+WnN5WWdhT2pJeUVoCklRQUVCUVh4MWx0dmtaeWN6TlNwVXdHd3M3TWpKaWFtWE51UzZVQkVwVGcr
+RWhxZGg3RkQ0UE5JeUs2dmRTSWhUTTdraDZRcWt5RzcKVlFPK0dzQTBuMms4MGY0Si9Yc3M1N0NK
+R1I2ZXNacnRsQ2VMZ3FFdlFQMnI4TTNtZ3R1OHlpRXBZWUVzNXBDVUtlWGs1UkFWSDBXdgpWcjIw
+amlLc2dnNjJyZ1NiWEJnNEU3bklVMVEzVmwwd0RsODdUSnRHYlhDb0xlZktpMHFTYndjYk54VE1h
+dHQ5a2RacGhEQXBzejZ0CnRxSmsvRUpVaWF3R3NHNHJUTzRCY2htR3FFYXNlZzlEYnBna3FreEtL
+L2g2TXd5RkE1Y1BhSjFHQ0pPdzJvS1JsNS9IdnN2NzZOMnEKdDlaUmhMVzYxZ1craHllL2VaTG8r
+T2l5Mnd0aDRheTJZUHgyNHplYTFXdEcwM3BOdFk0aXJObForUHpKenhuNjlWQmlycFR2MUc4aApM
+SVhWRmd3WnZ4Q21FdmhJSUo4OStSbER2eDVLN0pWWXJlTUlVV1dzdG1ESStJVXdwU0dQRE9IVEp6
+NWx5TmREcEdnSXEyVlZGKzdaCjJ6djhkL2JRZndBaFFHcEo3N1NVaTh2TStTSTJTOTlPNVdXNTk3
+L0JMWDlzWWZLUGs5azZkaXRkSCt4YXhudUYwSVpjdUFmL3ZadWUKMHpISWNvRlV1WnVlTUsyaDdZ
+Znl5Uk9mTU9UcklSeThlbERyT0VKVUt1dThEcU4xSkZ5VThRdWhqU2ZhUDRGU2lzQjFnV3g4WnFP
+TQpwUW1yWVZWN0dIck9FWEJSeGkrRWRwNTBmWkkxdzlZd1lzTUkxdnkyUnVzNFFsUUtLeXdZQ2xw
+SFFKd1VES0d0L2cvM1ovZjQzYnk1CiswM21oYytUU1FxRnhiTytndUZ3dG1BVzBWdk9XaWNSZ2c1
+Tk9oQTFPWXFmei83TXVCL0drWldicFhVa0ljck5xczZTMHVsMDBIazEKT0lmRGQ2VWRCckNrTTNr
+czc0d2h5OWxPNVdVcDYwL0kzdDZCdE15Yk1BeW9DM3dEWlB4M2VmMzZqVWhOVFM1ak8wSlVIamxM
+cXBBTQplQXN6azVaMkUzSVViTXlEeTYvQzgyMmg4UjhVbnJtblB4VmNDRE5uaFFWRHhpK0VtVkky
+RVBZdTdIc1ZKdldDRGh1MFRpU0VVYXpyCnROb0dRSTBzU0hwRTZ5UkNsTzd3ODNEZEM0YVBoYmJi
+NEdldEF3bGhHT3ZhdzNEbTd1RW9uY1pCUlBWUkE1MU9kOTlIaWE0K0NpR0gKUWVrZ0NMbklUMWdF
+NnlvWXJaSHhDMkZpdVJTZlRjREEyUVd5NjhHUG44SXZNSGp0WU43Zjl6NzVLci9xSXd0UlR0WlhN
+R1Q4UWxpYQo0eEE3SlpZdHA3Y3c0S3NCWEVtOW9uVWlJVXBrTlFYamF0cFZxQTBrZE5BNmloQkdh
+OTJ3TmJ2SDc4YXZ0UitlSDNueTcvMy9KaWN2ClIrdFlRaFJoTlFVajhtSWtYS0xnVEJRaExGQU5t
+eHE4NmZjbSt5ZnZKK3g4R0o0ZmViTHIvQzZ0WXdtaFp6WGZycEVYSStHaTFpbUUKcUxoSEdqL0N6
+Ly96TXd2NkxtRHlqNU1adVhFa2wxTXVheDFMQ09zcEdCRVhJeUJPNnhSQ1ZBNmRUc2RUcms5eDRz
+VVR1RG01NFJYaQp4WUk5QzhqSXlTajd6VUpVRWFzb0dBbnBDY1NueHNNTnJaTUlVYm5xMk5WaHZ2
+OThZcWZFRW5zMWxvZVhQc3pDL1F0SnowN1hPcHFvCmhxeWlZT3k1dEllZUxYdUNuSkVvckpSTEl4
+ZStIL1U5UC8zUFQwUmRpY0pscVFzTDlpd2dOYXZFVzBvS1VTV3NvbURJL2J1RlpTdjcKNGo5N2V3
+Y0F2SnA1c2ZHWmpld2V2NXVUaVNkeFdlTEMzUEM1SkdmSTVJV2k2bGxGd1lpOEdDbDNOUk1Xck95
+TC8vNDZRYUc3a3p0ZgpEZnVLcU9lanVKSjZoWWVYUHN5a3paUFlkMm1mM0hkRFZCbUxuOTQ4K1U0
+eXJSYTNJbWwyRXJWcTFNS2NwcjIybk8yWVV4YjV6S1cxCnVkK2Y2dlhiMS9uUHIvL2gweU9mWXFP
+ellaTFhKTVo1anFOcHZhWmxyRmRVUjlWMmV2TjlsL2ZoKzZBdk5XMXJhaDFGQ00wMHE5ZU0KMlQx
+bmMrckZVNndldXBvVGlTZG92N3c5dzlZUEkvUjBLTG41dVZwSEZGYkE0dmN3Z25jRVkxL1RuamY5
+M3J3NzBadjUvSXZRY3JaagpUbG5rTTVmV3h0Zy8xYlNzTk5ZZlg4K25SejdsVE5JWkF0b0dFTmd1
+a0lGdEIrSlEyOEdvZFFuclV0NDlESXN2R0Q2cmZYaS8zL3Y0Ck9mdEp3YkNLTFBLWlMydFRrVC9W
+K05SNGZqcnpFMXZQYkNVOExweE9UVHNSMkM2UXdIYUJlRFR4S0gxV1hXR1ZxbTNCcVB0T1hSSm4K
+Si9KQWpRZWtZRmhGRnZuTUpiT2pZSEM4ZEliZTZqVXpONVB3dUhDMm50bksxdE5ieVZONURHdzdr
+TzRQZGNmM1FWL2FPN2JIUm1meApSNnZGZlZUYmd0SDdzOTVFVG96VVB6ZWZQM0JMMm80NVpaSFBY
+SkUyeHY0NUs2VTRsWGlLSGVkMkVIMGxtcGdyTVNUZVNlVFJGby9pCjg2QVBQZy82NFB1Z0w4M3JO
+emRxdmNLOGxiZGdXUHdkOS95Yy9iU09JSVRGMHVsMHVEbTU0ZWJrcG44dDhVNGlzVmRpaWI0U3pj
+ZUgKUHViNUg1K250bDF0ZkI3MHdjM1JqYllPYldubjBJNTJqZHZoVk1kSkRtZFZJNXJzWVVSR1Jo
+SVVGRVJ1Ymk0elpzeGcrdlRweGRxOAo5dHByckYrL25rYU5HckYyN1ZwY1hWMkx0ZEhwZE93NHU0
+UCtEL2ZYUHpmUGZ4R0dBLzRtMkU1RjIreW01SnltekdJdGV4amgvTGN2CnpYY1BJenc4SEg5Ly8v
+dTJVVXB4L3VaNVlxL0c4a2ZpSDV5OWVaWXpTV2M0bTN5V25Qd2MyanEwL1c4UmNXaW5mKzVVMTZu
+U0RtMFoKa3RNY1dFcE9pOXJEbURsekppRWhJYlJ1M1pxQWdBREdqQm1EbzZPamZubE1UQXg3OXV6
+aDRNR0RiTisrbmVEZ1lFSkRRMHRjVjQrVwpQVXdWdXdMQ0tmMkwySnlFWXhrNUxVRTRsdENYaG56
+QjZYUTZIblo0bUljZEhpNjI3R2JHVGM0a0Z4U1BNMGxuQ0xzUXhxcURxemgzCjh4eTNNbS9SdUha
+am10UnRRcE82VFdoYXIybkJ6M1h1K2Jsd1dkMm0xTGFyWGFHYzVzQlNjcGFYeVF0R1Nrb0tBSDM2
+RkZ5WlBXREEKQUtLam93a01ETlMzaVk2T1pzU0lFVGc0T0RCbXpCamVlT09OVXRkWHQyYmRxZzBz
+aE1Xb1ljRGhJVHVnNkkyWjVzK2ZmOS9saHF6agpyK3JYYjhTZG0zZEl2SlBJbitsLzZoODMwbS93
+Wi9xZm5FaytvLy81ei9RL3VYSDdCanFkam5vMTYxSFhyaTUxYTliVi8xeXZaajB1Cm5MekFsUzFY
+OU04TC8zLzJyRGxrcHQ2QjdMdVJjaW1ZVSs2ZVI5M2E5aHo3N1ZkcTJOUW85V0dyczVWRGF3WXdl
+Y0dJalkwdGNuakoKM2QyZHFLaW9JZ1VqSmlhRzU1NTdUdi9jeWNtSmMrZk84ZkREeGYrRkk0UW9W
+RGpGeVAzODlkRFd2THVQMHBZYnNvN2kwdEowMk5uYQowYngrYzRNR3pKVlNaT1Jta0o2ZFRucE9P
+cmV6YjVPZWZmZi9jOUw1ejU3LzROUENSNzhzTlR1VnE3ZXZrdG5rRGp3NEVtcmVMbmpZClpvTk5i
+cEZIdXMwcEh2dnlNWEx5Y3NqTnp5M3hrYWZ5c05YWkZpa2lkcloycFJhWXdrTnRPZ3FLakU2blE0
+ZU9hNGV1c2VYakxmcGwKaFVYb3IrMEtmOWF5WFhtWTVhQzNVcXJZOGJYU1BtVHgxdzNwak1wb1kr
+dzY1aHZRcGpLMlU1RTI4eWs5cHltem1QSXpWMldXK1FhMApxWXp0VkxUTlgzL25sYk9keXY0WCs2
+WlZtMHBac3FITTk4WVpjTE9jdkx2L3l5TEx1R0IvY1QzMGVvWGViODVNWGpDNmR1M0tQLzd4CkQv
+M3o0OGVQTTNEZ3dDSnRmSDE5T1hIaUJBRUJBUUFrSkNUZzR1SlNiRjBXZkVhd0VFSllISk5mbmRP
+Z1FRT2c0RXlwdUxnNGR1N2MKaWErdmI1RTJ2cjYrYk5xMGlhU2tKTmF0VzRlYm0xdEpxeEpDQ0dG
+Q21oeVNXcng0TVVGQlFlVGs1REJqeGd3Y0hSMEpDUWtCSUNnbwpDQjhmSDNyMTZzV2pqejZLZzRN
+RGE5YXMwU0ttRUVLSWV5a3pGeEVSb1Z4ZFhWWGJ0bTNWMHFWTFMyd3paODRjMWFaTkc5VzVjMmQx
+Cjh1UkpFeWNzVUZiTzNidDNLM3Q3ZStYbDVhVzh2THpVMjIrL2JmS01FeWRPVkUyYU5GRWVIaDZs
+dGpHSHZpd3Jwem4wcFZKS1hicDAKU2ZuNyt5dDNkM2ZsNStlbjFxNWRXMkk3cmZ2VWtKeGE5MmxH
+Um9ieThmRlJucDZleXRmWFYzMzQ0WWNsdHRPNkx3M0pxWFZmM2lzMwpOMWQ1ZVhtcElVT0dsTGpj
+MlA0MCs0TGg1ZVdsSWlJaVZGeGNuR3JmdnIxS1NFZ29zanc2T2xyMTdObFRKU1VscVhYcjFxbkF3
+RUN6CnpMbDc5MjQxZE9oUVRiSVZpb3lNVkljUEh5NzFpOWhjK3JLc25PYlFsMG9wZGUzYU5YWGt5
+QkdsbEZJSkNRbXFUWnMyS2pVMXRVZ2IKYytoVFEzS2FRNSttcDZjcnBaVEt6TXhVSFRwMFVHZk9u
+Q215M0J6NlVxbXljNXBEWHhaYXVIQ2hHanQyYklsNXl0T2ZaajNEMkwzWApiTFJ1M1ZwL3pjYTkv
+bnJOeHNtVEo4MHlKMmcvU04rN2QyOGFOV3BVNm5KejZFc29PeWRvMzVjQXpabzF3OHZMQ3dCSFIw
+YzZkT2pBCndZTUhpN1F4aHo0MUpDZG8zNmQxNnRRQjRQYnQyK1RtNWxLclZxMGl5ODJoTDZIc25L
+QjlYd0xFeDhmejAwOC84Znp6ejVlWXB6ejkKYWRZRm83UnJOdTRWRXhPRHU3dTcvbm5oTlJ1bVpF
+aE9uVTdIL3YzNzhmTHk0dVdYWHpaNVJrT1lRMThhd2h6Nzh1elpzeHcvZmh3ZgpINThpcjV0Ym41
+YVcweHo2TkQ4L0gwOVBUNW8yYmNxMGFkTm8yYkpsa2VYbTBwZGw1VFNIdmdTWU5Xc1dIM3p3QVRZ
+MkpYL05sNmMvCnpicGdHRUlaY2MyR2xqcDM3c3pseTVlSmpZM0YzZDJkbVRObmFoMnBHT25MOGts
+TFMyUFVxRkVzV3JTSXVuV0x6anhnVG4xNnY1em0KMEtjMk5qYjgrdXV2bkQxN2xwVXJWM0xreUpF
+aXk4MmxMOHZLYVE1OUdSb2FTcE1tVGZEMjlpNTFiNmM4L1duV0JhTnIxNjZjT25WSwovL3o0OGVO
+MDY5YXRTSnZDYXpZS2xYYk5SbFV5SkdmOSt2V3BVNmNPZG5aMlRKNDhtZGpZV0xLeUtuYUJVR1V6
+aDc0MGhEbjFaVTVPCkRzT0hEK2U1NTU3anlTZWZMTGJjWFBxMHJKem0xS2ZPenM0TUhqeTQyR0Zk
+YytuTFFxWGxOSWUrM0w5L1B6LysrQ050MnJSaHpKZ3gKL1BMTEw0d2JONjVJbS9MMHAxa1hERXU1
+WnNPUW5EZHUzTkJYOHkxYnR0Q3BVNmNTajMxcXlSejYwaERtMHBkS0tTWlBub3lIaHdjdgp2ZlJT
+aVczTW9VOE55YWwxbnlZbUpuTHIxaTBBa3BLUzJMRmpSN0hDWmc1OWFVaE9yZnNTWU1HQ0JWeStm
+SmtMRnk3d3pUZmY4UGpqCmovT2YvL3luU0p2eTlLZFpUZzF5TDB1NVpxT3NuTjkrK3kyclZxMmlS
+bzBhZE9yVWlZVUxGNW84NDVneFk0aUlpQ0F4TVpHV0xWc3kKZi81OGNuSnk5Qm5OcFMvTHlta09m
+UW13Yjk4KzFxeFpRNmRPbmZEMjlnWUsvbEF2WGJxa3oyb09mV3BJVHEzNzlOcTFhNHdmUDU2OAp2
+RHlhTld0R2NIQXd6WnMzTjd1L2RVTnlhdDJYSlNrODFGVFIvclRvTys0SklZUXdIYk0rSkNXRUVN
+SjhTTUVRUWdoaEVDa1lRZ2doCkRDSUZRd2doaEVHa1lJaEtaV05qUTNCd3NQNzV2Ly85NzcvY0Fy
+VHErZnY3Yy9qd1lRQUNBd05KVFUydDBQckN3OE1aT25Tb3dhOVgKeGJhcTB0V3JWM25tbVdkTXVr
+MWhtYVJnaUVwVnMyWk52di8rZTVLU2tnRGpyOFROeTh1cmNJWjd0N2wxNjFiczdlMHJ2RTVyMXFK
+RgpDelp1M0toMURHRUJwR0NJU21Wblo4Y0xMN3pBb2tXTGlpMjdldlVxTTJmT3hOUFRrMW16Wm5I
+anhnMEFKa3lZd01zdnY0eXZyeSt2CnZ2b3FFeWRPNUpWWFhzSEh4NGYyN2R0ejVNZ1JYbmpoQlRw
+MDZNQzhlZlAwNi92NzMvOU8xNjVkNmRHakI2dFhyeTR4ajdPek0wbEoKU1h6MDBVZDRlM3ZqN2Ux
+Tm16WnRlUHp4eDRHQ2VjREdqUnVIcjY4dmMrYk0wVitSR3hzYlM5KytmZkgyOW1iNzl1MWxmdTZN
+akF3KwovUEJEL1B6OENBd01KRHc4SElEdTNic1h1WnEyY084bk16T3p4UGFsdVh6NU1vTUdEY0xM
+eXd0UFQwL09uVHRIWEZ3Yzd1N3VUSjQ4CkdUYzNOK2JQbjYvUC8vYmJiK1BqNDBQWHJsMVpzR0JC
+a2ZXODhzb3JlSHQ3MDZWTEZ5NWN1RUJjWEJ3ZE8zWUU0SXN2dm1EMDZORU0KSGp3WUR3OFBsaTVk
+cW4vdnRtM2I2TjY5T3o0K1ByejAwa3RNbno2OVdNNmpSNC9TdDI5ZnZMeTg2Tnk1TTdkdjN5Nno3
+NFFGcWNqVQp1VUw4VmIxNjlWUnFhcXB5ZG5aV0tTa3A2dC8vL3JlYU4yK2VVa3FwV2JObXFmZmZm
+MThwcGRTQ0JRdlU3Tm16bFZKS2pSOC9Ydm41CitlbW4zSjR3WVlJYU5HaVF5c3JLVWw5ODhZV3FW
+NitlQ2c4UFYxbFpXY3JOelUwL2RYeHljckpTU3Ftc3JDemw2K3VyYnQrK3JaUlMKeXQvZlh4MDZk
+RWdwcFpTenM3TktTa3JTNTh2SnlWRzllL2RXb2FHaCtyYTNidDFTU2lrMWUvWnM5YzAzM3lpbGxP
+clVxWk9Lam81Vwp0Mi9mVmdNSERpeHhldWpkdTNmcjd6UHcrZWVmcXlWTGxpaWxsTHArL2JyeThm
+RlJTaW0xYU5FaU5YZnVYS1dVVWxldlhsWHQyN2UvCmIvdDcxM212dVhQbnFrOCsrVVQvR1RJeU10
+U0ZDeGVVVHFkVDMzMzNuY3JNekZSUFAvMjArdmJiYjR2MFRXNXVyaG82ZEtnNmRlcVUKdnE5WHJG
+aWg3N2M3ZCs2b0N4Y3U2S2VTLy96enoxV1RKazNVMWF0WFZXcHFxbnJvb1lkVWRuYTJ5c25KVWM3
+T3p1ckNoUXNxS1NsSgpkZTdjV1UyZlByMVl6dkhqeDZ1d3NEQ2xWTUUwNExtNXVjWGFDTXNsZXhp
+aTB0V3ZYNTl4NDhZVitkY3B3TTgvLzh5a1NaTUFtRHg1Ck1sdTJiQUVLRGlHTkdER0MrdlhyNjl1
+T0dER0NtalZyMHIxN2R4bzJiSWlmbng4MWE5YkUyOXRiUHhQd3pwMDdDUXdNeE52Ym0vUG4Kei9Q
+TEw3K1VtVzNHakJuMDdkdVh3TUJBRGgwNnhMRmp4L0QzOThmYjI1dlEwRkFpSXlPNWN1VUtTaWw4
+Zkh5b1c3Y3VvMGFOS25PNgo2azJiTnJGNjlXcTh2YjBaT0hBZ04yN2M0TUtGQzR3Y09aSnZ2LzBX
+Z0EwYk51akhDa3BxZi83OCtWTFgzN1ZyVnhZdlhzeDc3NzFICmNuSXlEenp3QUZBd0xjMndZY09v
+VmFzV1k4YU1ZZHUyYlFBY1BIaVE0Y09IMDZsVEp3NGZQc3lPSFR2SXpzNW05KzdkVEpreUJTZzQK
+ZkZpN2R1MWkyeG93WUFETm16ZW5mdjM2dUx1N2MvandZYUtpb3VqWXNTUE96czQ0T0Rqd3hCTlBs
+TmduM2J0M1o4NmNPU3hmdnB6YwozRnhzYlczTC9KMEl5MkgyVTRNSXkvVFNTeS9SdVhObkprNmNX
+T1QxMHI1NG16ZHZYdVI1NGZ4Y05XdldwR0hEaHZyWGE5YXNTWFoyCk5tbHBhY3laTTRjOWUvYnc0
+SU1QTW16WU1HN2V2SG5mVEY5ODhRV1hMMTltNWNxVlFNRTAxUjRlSHV6ZXZidEl1L2o0ZU1NKzVE
+M3kKOC9OWnNXSUZmZnIwS2Jhc2NlUEcvUDc3NzJ6WXNFRS9OVU5wN1F1bjYvaXJ3TUJBdW5UcHdw
+bzFhK2pac3ljYk4yNHMwaStGQ3NkdgpwaytmenJmZmZvdUhod2V6WnMzaTVzMmI2SFM2RW1jby9h
+dS85bmRtWmlZMWF0UW9NalpVMmpxQ2dvTG8zNysvZmlxUzZPaG9talp0CmV0L3RDY3NoZXhpaVNq
+UnExSWlSSTBmeTZhZWY2cjlvQmc4ZXpKZGZma2wrZmo2ZmZmWVpUenp4UkxuV3JaVGkxcTFiMk5u
+WjBheFoKTTA2ZlBzMnVYYnZ1KzU1RGh3NnhjT0ZDdnZycUsvMXJYYnQyNWNhTkcvbzlsdlQwZE02
+Y09jTkREejJFcmEwdHNiR3hwS2VuczJIRApoakl6alIwN2xwQ1FFTkxTMGdDS1RIazlhdFFvM252
+dlBWSlRVL0h3OENpemZVa3VYTGlnbjd1b2I5KysrbkdSbEpRVWZ2amhCN0t5CnNsaS9majBEQnc0
+a016T1R0TFEwbkoyZHVYTGxDcHMzYndZS3hwY2VlK3d4VnE5ZWpWS0tyS3dzTWpJeXl2eHNPcDJP
+YnQyNjhmdnYKdnhNWEYwZHljaktob2FFbG50Qnc3dHc1WEZ4YytOLy8vVjljWFYzTjRsNGxvdkpJ
+d1JDVjZ0NHZrVmRlZVlYRXhFVDk4K0RnWUM1ZAp1b1MzdHpjM2J0emc1WmRmTHZGOWYzMWUwcktX
+TFZzeWZQaHdQRHc4bURadFdxbW5vaGIrcTNyRmloWGN2SG1UeHg1N0RHOXZiMTU0CjRRVUF2dnJx
+SzFhdFdrV25UcDNvMGFNSGYvenhCd0FmZi93eHI3MzJHcjE2OWNMVDA3UEVMMGVkVHFkL2ZjU0lF
+Zmo0K0JBUUVJQ0gKaHdkejU4N1Z0eHN4WWdUcjE2OW41TWlSUlY0cnFmMjk2N3pYaGcwYjhQRHdv
+R3ZYcnR5NWMwZS9MbGRYVjM3ODhVZTh2THp3OFBBZwpNRENRQng1NGdEbHo1dURqNDhPb1VhTVlQ
+SGl3ZmozdnZQTU9aOCtleGRQVGs1NDllK3BQUENqY1ptbmJ0N1cxWmZueTVZd2FOWXFCCkF3ZlNz
+V05IMnJScFU2emRraVZMNk5peEl6NCtQcmk2dXRLalI0OFNmeS9DTXNua2cwSllxTGk0T0lZT0hj
+cnZ2Lzl1a3UybHA2ZFQKdDI1ZFVsSlNHREprQ0o5ODhnbnQyN2MzeWJhRmVaQXhEQ0VzbUNudk9E
+ZHYzanpDd3NLd3M3UGoyV2VmbFdKUkRja2VoaEJDQ0lQSQpHSVlRUWdpRFNNRVFRZ2hoRUNrWVFn
+Z2hEQ0lGUXdnaGhFR2tZQWdoaERDSUZBd2hoQkFHK1g4TEF4UDFCZTVmQkFBQUFBQkpSVTVFCnJr
+SmdnZz09Cg==
+</png>
+ </output>
+ </outputs>
+ </codecell>
+ <markdowncell>
+ <source>## Parallel calculation of nearest neighbor eigenvalue distribution</source>
+ </markdowncell>
+ <markdowncell>
+ <source>Here we perform a parallel computation, where each process constructs and diagonalizes a subset of
+the overall set of random matrices.</source>
+ </markdowncell>
+ <codecell>
+ <input>def parallel_diffs(rc, num, N):
+ nengines = len(rc.targets)
+ num_per_engine = num/nengines
+ print "Running with", num_per_engine, "per engine."
+ ar = rc.apply_async(ensemble_diffs, num_per_engine, N)
+ diffs = np.array(ar.get()).flatten()
+ normalized_diffs = normalize_diffs(diffs)
+ return normalized_diffs</input>
+ <language>python</language>
+ <prompt_number>11</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>client = Client()
+view = client[:]
+view.run('rmtkernel.py')
+view.block = False</input>
+ <language>python</language>
+ <prompt_number>12</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>parallel_nmats = 40*serial_nmats
+parallel_matsize = 50</input>
+ <language>python</language>
+ <prompt_number>13</prompt_number>
+ <collapsed>1</collapsed>
+ <outputs />
+ </codecell>
+ <codecell>
+ <input>%timeit -r1 -n1 parallel_diffs(view, parallel_nmats, parallel_matsize)</input>
+ <language>python</language>
+ <prompt_number>14</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs>
+ <output>
+ <output_type>stream</output_type>
+ <text>Running with 10000 per engine.
+1 loops, best of 1: 14 s per loop</text>
+ </output>
+ <output>
+ <output_type>stream</output_type>
+ <text />
+ </output>
+ </outputs>
+ </codecell>
+ <codecell>
+ <input>pdiffs = parallel_diffs(view, parallel_nmats, parallel_matsize)</input>
+ <language>python</language>
+ <prompt_number>15</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs>
+ <output>
+ <output_type>stream</output_type>
+ <text>Running with 10000 per engine.</text>
+ </output>
+ </outputs>
+ </codecell>
+ <markdowncell>
+ <source>Again, the agreement with the Wigner distribution is excellent, but now we have better
+statistics.</source>
+ </markdowncell>
+ <codecell>
+ <input>hist_data = hist(pdiffs, bins=30, normed=True)
+plot(s, rhos)
+xlabel('Normalized level spacing s')
+ylabel('Probability $P(s)$')</input>
+ <language>python</language>
+ <prompt_number>16</prompt_number>
+ <collapsed>0</collapsed>
+ <outputs>
+ <output>
+ <output_type>pyout</output_type>
+ <text>&amp;lt;matplotlib.text.Text at 0x376c950&amp;gt;</text>
+ <prompt_number>16</prompt_number>
+ </output>
+ <output>
+ <output_type>display_data</output_type>
+ <png>aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVl3QUFBRU1DQVlBQUFEWGlZR1NBQUFBQkhOQ1NWUUlD
+QWdJZkFoa2lBQUFBQWx3U0ZsegpBQUFMRWdBQUN4SUIwdDErL0FBQUlBQkpSRUZVZUp6dDNYbGNW
+UFgreC9IWElMZ2pMcWhvRm1xaGdDZ01Db2dtVG01Z3FOMVNNNjFjCjZoWmxpcmxVMXErdVdyZHVk
+YStwbVJyWnRWVXJ5OHF0TWt6SDBRVEVMWGROQlJPM0ZCVlEyVG0vUDRpNWptd3pNTXlaWVQ3UCs1
+aEgKek16WDcvZk40VElmenZtZTh6MGFSVkVVaEJCQ2lFcTRxQjFBQ0NHRVk1Q0NJWVFRd2l4U01J
+UVFRcGhGQ29ZUVFnaXpTTUVRUWdoaApGaWtZUWdnaHpLSkt3VEFZRFBqNStlSGo0OFBDaFF0THZa
+K1ZsY1gwNmRNSkNnb2lQRHljRXlkT3FKQlNDQ0hFelZRcEdGT21UQ0V1CkxvNk5HemV5YU5FaUxs
+MjZaUEwrRjE5OFFYNStQbnYzN3VXZGQ5N2grZWVmVnlPbUVFS0ltOWk4WUdSa1pBQVFFUkdCdDdj
+M2d3WU4KSWlrcHlhVE5wazJiaUk2T0JpQThQSnpqeDQvYk9xWVFRb2hiMkx4Z0pDY240K3ZyYTN6
+dTcrOVBZbUtpU1p2SXlFaSsrT0lMc3JPegpXYk5tRGZ2Mzd5Y2xKY1hXVVlVUVF0ekVWZTBBWlJr
+MWFoUnBhV24wN2R1WHpwMDc0K1BqUTcxNjlVcTEwMmcwS3FRVFFnakhWNlZWCm9SUWJ1M3IxcWhJ
+VUZHUjhQbW5TSkdYZHVuWGx0cy9LeWxJQ0F3UExmRStGK0ZVeWE5WXN0U09ZUlhKYWp5TmtWQlRK
+YVcyT2tyT3EKbjUwMlB5VGw0ZUVCRko4cGxacWFTbng4UEdGaFlTWnRNakl5eU12TDQ4YU5HL3py
+WC85aTRNQ0J0bzRwaEJEaUZxb2NrcG8vZno0eApNVEhrNStjVEd4dUxwNmNuY1hGeEFNVEV4SERv
+MENIR2p4OVBVVkVSNGVIaHZQLysrMnJFRkVJSWNSTlZDa2Jmdm4wNWZQaXd5V3N4Ck1USEdyOFBE
+d3psNjlLaXRZOVVZblU2bmRnU3pTRTdyY1lTTUlEbXR6VkZ5VnBYbXIrTlpEa21qMFZSdDRrWUlJ
+WnhZVlQ4N1pXa1EKSVlRUVpwR0NJWVFRd2l4U01JUVFRcGhGQ29ZUVFnaXpTTUVRUWdoaEZpa1lR
+Z2doekNJRlF3Z2hoRm1rWUFnaGhEQ0xGQXdoaEJCbQprWUloaEJEQ0xGSXdoQkJDbUVVS2hnTnEw
+cVE1R28ybTBrZVRKczNWamlxRXFFVms4VUVIVkh5blFYTytiK2ZjUGtLSWlzbmlnMElJCklXcVVG
+QXdoaEJCbVVhVmdHQXdHL1B6ODhQSHhZZUhDaGFYZXo4N09adHk0Y1dpMVd2cjI3Y3ZxMWF0VlND
+bUVFT0ptcXN4aGFMVmEKRml4WWdMZTNONUdSa1d6YnRnMVBUMC9qKysrLy96Nzc5dTFqOGVMRm5E
+cDFpbjc5K25IOCtQRy9qdDNmRkY3bU1DcHI2WlRiUndoUgpNWWVadzhqSXlBQWdJaUlDYjI5dkJn
+MGFSRkpTa2trYkR3OFBzckt5eU0vUDUvTGx5elJzMkxCVXNSQkNDR0ZiTnIrbmQzSnlNcjYrCnZz
+Ym4vdjcrSkNZbUVoMGRiWHh0OU9qUnJGMjdGazlQVHdvS0NraElTQ2kzdjltelp4dS8xdWwwdGY2
+ZXVrSUlZU205WG85ZXI2OTIKUHpZdkdPWjQ3NzMzY0hWMTVkeTVjK3pmdjUvbzZHaE9uVHFGaTB2
+cEhhS2JDNFlRUW9qU2J2MWplczZjT1ZYcXgrYUhwRUpDUWpoeQo1SWp4K2NHREIrblpzNmRKRzRQ
+QndNTVBQMHpEaGcwSkN3dWpiZHUySER0MnpOWlJhd0ZYdWNCUENHRTFOaThZSGg0ZVFIRlJTRTFO
+CkpUNCtuckN3TUpNMi9mdjNaKzNhdFJRVkZYSHk1RWt1WDc1c2NoaExtS3VBNHNueGloOVpXVmRV
+U3lpRWNCeXFISkthUDM4K01URXgKNU9mbkV4c2JpNmVuSjNGeGNRREV4TVR3MEVNUGNlalFJWHIw
+NkVITGxpMVpzR0NCR2pHRkVFTGNSSllHc1JOTm1qUzM4Qzk5ODA2cgpsZE52aFJDM3F1cG5weFFN
+TzJIK3RSVmdTU0dRZ2lHRXVKWERYSWNoaEJEQ01VbkJFRUlJWVJhN3ZBNURtRXVCSm1lZzBaK1E0
+d0U1CnpTQzdHY1dIb29RUXdycWtZRGlhQnVrUUFIVHREVjYvUWE0N1hHOE45VEtoNFNXNDVnVkho
+OEhSb1hBYUtES25VMWV6bGw1eGQyOUcKWnVibGFuNERRZ2hISlpQZWRxTFNTVyszNjNEUExBaitF
+SDdQZ045K2dOTzlJTmZqcGtZS3ROa0RuZGRBNTlWUWJ5OXMvQm9PRGFmaQp2UTZaSEJmQ21jaFpV
+ZzZ1d29KeDU4OHc1Q2s0SFE0YjVoWHZVWmp6QWQ5QkE1R0JrTmNZTnJ3RFowTExHOTI4L3FSZ0NG
+RXJTTUZ3CmNHVVdERTBoREk2RlR1dGgzUkk0UHJqa2pkSnR5KzRWTkFVUStDbjBmd2tTbjRWZm42
+ZjAzb1lVRENHY2lSUU1CMWVxWUxqa3d3T1AKUXNPTDhPWDNrT2QrYzJzc3ZnNmp5V2tZTlJ5dWRJ
+RFZ5eUMvVVpYNnF5M2JXd2huSnRkaDFDYXVPY1VmN203WFljWDZXNHBGRldYZQpEaDhaSUw4aC9E
+MGNQUDZvZnA5Q0NLY2lCY1BlMU1tRjBjTWd2d0Y4OVMwVTFMZGUzd1gxaS9jdWZoc0w0L3BCNDNQ
+VzYxc0lVZXZKCmFiWDJKdXJaNHIyQVZTdEFxVk1EQTJoZys0emlRMTVqQjhESGVyaFJBOE1JSVdv
+ZEtSajJKT2dqNkxBSmxpYlhVTEc0eWJZWG9lNDEKZURRU1BnRnlhblk0SVlUamswTlM5cUlOTVBC
+NStPbzd5RzFpbXpFMy9STk85WUdIS1M0ZVFnaFJBU2tZZGlEOVJqbzhDS3hmQWhmOQpiVGl5cHZp
+NmpvdkE4REdnTWV1eWNDR0VrMUtsWUJnTUJ2ejgvUER4OFdIaHdvV2wzdi9QZi82RFZxdEZxOVhT
+dFd0WFhGMWR1WHIxCnFncEpiU1AycDFnNEFod2FZZnZCRlJkWVQvR1NJM2UvYWZ2eGhSQU9RNVhy
+TUxSYUxRc1dMTURiMjV2SXlFaTJiZHVHcDZkbm1XM1gKclZ2SC9QbnoyYmh4WTZuM2FzTjFHQnVP
+YitEcDlVK1Q4bHdLNUt0M1B3emMwK0RKSHZEZFozQnlRTG50SEgxN0N5RWM2RHFNakl3TQpBQ0lp
+SXZEMjltYlFvRUVrSlNXVjIzN0ZpaFdNSGozYVZ2RnM2a2IrRFNiK01KRkY5eTZDZkpYRFpOMEcz
+eTZIK3g4dHZzaFBDQ0Z1CllmT0NrWnljaksrdnIvRzV2NzgvaVltSlpiYTljZU1HR3pac1lQanc0
+YmFLWjFPdkdWNGpwRzBJZzMwR1Y5N1lGbEw2UWRJVWVIQWsKMU1sVE80MFF3czdZOVdtMWE5ZXU1
+ZTY3NzZacDA2Ymx0cGs5ZTdieGE1MU9oMDZucS9sZ1ZyRC93bjcrdS91LzdIdDZuOXBSVEcxNwpB
+ZG9sd3NEbjRLY0ZhcWNSUWxpQlhxOUhyOWRYdXgrYnoyRmtaR1NnMCtuWXMyY1BBSk1uVHlZcUtv
+cm82T2hTYmUrLy8zNUdqUnJGClF3ODlWR1pmampxSG9TZ0t1azkwakFrWVEweVBHRUQ5ZTNxYnRL
+dC9CU1oyaFc4L2gxU2RTVHRIM041Q0NGTU9NNGZoNFZGOC93YUQKd1VCcWFpcng4ZkdFaFlXVmFw
+ZVJrWUhCWU9DKysrNnpkY1FhRjM4eW5ndlhMdkQzNEwrckhhVnNPYzFnL1dJWTl2Zmk5YXlNaW0r
+MApaTTZqU1pQbXFzVVhRdFFNVlU2cm5UOS9QakV4TVF3WU1JQ0pFeWZpNmVsSlhGd2NjWEZ4eGpi
+ZmYvODlrWkdSTkdqUVFJMklOVVpSCkZGN1ovQXF6ZGJPcDQxTERWM05YeDlGaGtCWUcvVjY1NmNV
+Q2l2ZEVLbjlrWlYyeGNXQWhSRTJUNWMxdGJQMng5Y3o4WlNhL1BmVWIKTHByLzFXdTdPaVJWb3VF
+bGVMb3JyRnhWZkhjL3Mvc3I3dFBSZmpaQ09BdUhPU1RsekJSRjRSLzZmekJITjhla1dOaXRHNTd3
+NDBLNAo3N0hpSmRlRkVFN05BVDYxYW8vdmozeVBvaWpjNzN1LzJsSE1kMmdFL0JrQWZlZW9uVVFJ
+b1RJcEdEWlNwQlR4RC8wL2VQV2VWLzg2Ci9PUkExaThDN1RKb3EzWVFJWVNhcEdEWXlOY0h2NmFS
+V3lPaWZVcWZQbXozcnJlR24rZkNNSXJ2TXk2RWNFb3k2VjNEbWpScFR0YTEKS3pBUitBazRVVkZy
+TzV2ME5xSEFCQmZZRndlN25qU3JUM3YvMlFqaHJHVFMyMDVsWlYyQk8zK0VnaUE0VVVUNXA2TGFP
+dzM4Q056egpENmhmZTFjT0ZrS1VUd3FHTFlRdWhCMlRLZjVMM29HZEI0NE9oWWpYMUU0aWhGQ0JG
+SXlhMWh5NExSbjIxNUlWZHpmOUU0SStnUmJICjFFNGloTEF4S1JnMUxRVFk4eGdVMUpJcjFxKzNM
+bDZnY05CMHRaTUlJV3hNQ2tZTnVwWjNEUUtCNUtmVmptSmRTYkhnZVFUdTNLQjIKRWlHRURVbkJx
+RUdmNy9zY1RnRVozbXBIc2E3Q2VzV24yVVpOQlJlMTcvd2toTEFWS1JnMVJGRVUzdHZ4SHBSL00w
+SEhkblFvWkxhRApIdStyblVRSVlTTlNNR3JJNXRUTnhWK2txaHFqQm1uZ3AzblE5elZva0s1MkdD
+R0VEVWpCcUNFTGR5eGtVdWdrdFdQVXJJdGQ0T0NECm9KTjFwb1J3QmxJd2FrQmFaaHFHVXdZZTZm
+YUkybEZxbm40V2RGME9IcWZVVGlLRXFHRlNNR3JBOG4zTEdlRS9nc1oxRzZzZHBlYmQKYUFuSkU2
+SHZxMm9uRVVMVU1GVUtoc0Znd00vUER4OGZIeFl1WEZobW0rVGtaRUpDUXZEejgwT24wOWsyWURV
+b2lzSm4rejdqa2E1TwpzSGRSSW1FNmRGNGpGL01KVWN1cHN2aWdWcXRsd1lJRmVIdDdFeGtaeWJa
+dDIvRDA5RFMrcnlnSzNicDFZOTY4ZVF3WU1JQkxseTZaCnZGL0NIaGNmL08zOGI5ejM1WDJjbkhJ
+U0Y0MkxCWGZTczhNNzdsblNyczhiMEdvL3JQckMyTmJlZmpaQ2lHSU9zL2hnUmtZR0FCRVIKRVho
+N2V6Tm8wQ0NTa2t6UFBkMjVjeWZkdW5WandJQUJBR1VXQzN2MTJiN1BlS1RiSTQ1eFJ6MXJTb3FG
+RHB1aDlUNjFrd2doYW9qTgpQOVdTazVQeDlmVTFQdmYzOXljeE1kR2t6WVlORzlCb05QVHAwNGVo
+UTRleVlZTmpYRkZjV0ZUSWl2MHJlTGpydzJwSHNiMjh4ckJ0Ckp0enppdHBKaEJBMXhGWHRBR1hK
+eWNsaDc5NjliTnk0a1JzM2JqQnc0RUFPSERoQWd3YWwxMk9hUFh1MjhXdWRUcWZxZk1lbWxFMjAK
+ZFcrTFgwcy8xVEtvYXVkVEVENFhia3VDTTJxSEVVS1UwT3YxNlBYNmF2ZGo4NElSRWhMQ2M4ODla
+M3grOE9CQm9xS2lUTnFFaDRlVAptNXVMbDVjWEFEMTY5TUJnTUJBWkdWbXF2NXNMaHRvKzMvKzVj
+NXhLVzU2QyttQjRCZnE5REorcEhVWUlVZUxXUDZibnpLbmF0Vk1XClRYb1hGUldSa0pCQWFtb3FG
+eTllcEduVHBuVHAwb1h1M2J2ajRtTCswYTJTU2U4NzdyaURxS2lvVXBQZTZlbnBEQjQ4R0wxZVQw
+NU8KRGoxNzltVDM3dDAwYm14Nm1xbzlUWHBmejd0T3UzbnRPUExNRVZvM2JtMTgzV2ttdlV1NDVN
+TWtYMWh6Q2xJcnY1MnJ1M3N6TWpNdgptekcyRU1KYXF2clphZFllUmw1ZUh2UG16YU93c0pDbVRa
+dlNzV05IdW5UcFFscGFHdHUzYjJmVnFsVzBhdFdLS1ZPbVVLZE9uVXI3Cm16OS9QakV4TWVUbjV4
+TWJHNHVucHlkeGNYRUF4TVRFMEtKRkN5Wk1tRUNQSGoxbzJiSWxyNzc2YXFsaVlXOVdIMTFOejNZ
+OVRZcUYKVXlweUEvMXM2RGNXbGhWUjJVMmpzckljL0taU1FqaVJTdmN3Y25OeldiRmlCVU9HREtG
+bHk1Ymx0anQ1OGlTLy9QSUxUenp4aE5WRApsc2VlOWpEdVhYNHZEM2Q5bUllN21VNTRPOTBlQm9D
+bUVKNTJoZmoxOFB1OWxmWnBMejlESVp4RlZUODdWYmtPdzFyc3BXQmN1SGFCCnp1OTE1c3kwTXpT
+cTI4amtQYWNzR0FCK0dvalFRdHd1S3Q3THNJK2ZvUkRPeEdiWFlSdzVjb1FmZnZpQnk1Y3ZjL2p3
+WVlzSHJJMisKUFBBbHd6b1BLMVVzbk5waFFOR0EzN2RxSnhGQ1dFbVZDb2FYbHhjOWUvWmsvZnIx
+ZlBhWm5BN2o5R2RIbFdmVFA2SGZLOFdIcUlRUQpEcy9pZ25IMjdGazJiOTZNVnF0bHhvd1p0Rzd0
+M0pPOHY2Zi9UbHBtR3YwNjlGTTdpdjA1SGdYWnpTRGdLN1dUQ0NHc3dPS0NNVzdjCk9IeDlmVm15
+WkFuUFBQTU1lL2Z1cllsY0R1UDdJOTl6WCtmN2NIV3h5MnNnVmFZcHZpNmp6eHVnS1ZJN2pCQ2lt
+cW8xNlgzbHloV2EKTm0zNjE4U3U3ZG5EcEhmdlpiMTV1Yy9MRFBZWlhPYjdUanZwYld5cndCT2hz
+TzFGT1B4QW1lM1UvaGtLNFd4cWJOSTdOemVYbzBlUApsdmxlczJiTlRJckYxcTFiTFE3Z3lDNWN1
+OENCUHcvSTRhZ0thY0R3TWtUOEUvT0xqUkRDSGxWYU1PclZxMGQ2ZWpydnZmZGVtV2RGClpXWm1z
+blhyVm1KalkybldyRm1OaExSWDY0NnRZOUNkZzZqbldrL3RLUGJ0MkZCd0tRQ2ZIOVZPSW9Tb0Jy
+TU92Qjg1Y29SWFhubUYKYWRPbVViZHVYUjU1NUJGeWNuTEl6TXpFeTh1THlNaElGaXhZb05xaEti
+V3NQcnFhQjdzOHFIWU0rNmU0Z09IL0lPSTErSDB3bFYzOQpMWVN3VDJZVmpMMTc5M0xod2dXeXNy
+SjQ5OTEzR1RCZ0FIMzY5S25wYkhidGV0NTE5S2w2UHZuYkoycEhjUXlIUnNBOXM2RERKa2pwCnIz
+WWFJVVFWbUhXV1ZMZHUzYWhidHk0dFdyUmcxcXhaN05tenA2WnoyYjM0ay9HRTNCWkNzd2JPZFJp
+dXlwUTZzUFdsditZeWhCQ08KeUt5Q2taQ1F3SkVqUjRyL2dZc0wzdDdlTlJyS0Vhdyt1cHI3T3Qr
+bmRnekhzbjgwTkQwRmQyeFRPNGtRb2dyTU9xMVdwOVBSdUhGagpEaDQ4U051MmJXbmF0Q2xqeG95
+aFY2OWU3Tnk1azVFalI5b2lheWxxblZaYldGU0kxMXd2ZGo2eEUrK21GUmRQT2EzMkZzRkx3WDhW
+CmZQNlRzWjJjVml1RWJkWG80b01IRHg2a1M1Y3VRUEdxdEVsSlNTUW5KNU9VbE1UKy9mdkp6TXkw
+UExFVnFGVXd0cDdheXVRZko3UDMKcWNvdldwU0NjWXM2dVJEckExK3Rnck1oU01FUXd2WlVXNjEy
+M3J4NVRKMDZ0VHBkVkpsYUJXUEd6ek5ZT0hjUmVUL25tUGt2cEdDWQpDSDBQT3NiRGw2dVJnaUdF
+N2FsV01Bb0xDODI2YVZKTlVLTmdLSXBDcC9jNmNmeGZ4K0djSFg0WTIwVzdTdHE2WnNPVWpzV0hw
+UzRFClNjRVF3c1pzdHJ6NXJhcFNMQXdHQTM1K2Z2ajQrTEJ3NGNKUzcrdjFlanc4UE5CcXRXaTFX
+djc1VC9zNXMrYndwY1BrRnVUQ09iV1QKT0xDQ0JwQXd2WGlOS1NHRXcxQmx4YndwVTZZUUZ4ZUh0
+N2Mza1pHUmpCNDkydVNlM2dCOSsvWmx6Wm8xYXNTcjBPb2pxeG5XZVJpTApXS1IyRk1lMjh5bVk4
+alo0VnQ1VUNHRWZMTnJET0hQbVRMVUh6TWpJQUNBaUlnSnZiMjhHRFJwRVVsSlNxWGIyZXBoQ1Rx
+ZTFrcnpHCmtEZ0ZuUHY2VHlFY2lrVUZZK0RBZ1F3ZVBKaVZLMWVTbjU5ZnBRR1RrNVB4OWZVMVB2
+ZjM5eWN4TWRHa2pVYWpZZnYyN1FRRkJURnQKMmpST25EaFJwYkdzN1Z6V09ZNm1INlZ2Kzc1cVI2
+a2Rka3dDSHpoeDJUNSt2a0tJaWxsMFNPclFvVU5zMzc2ZFpjdVc4Znp6enpOMAo2RkFtVEpoQWNI
+Q3dWVU1GQndkeit2UnAzTnpjK09TVFQ1Z3laUXJyMXEwcnMrM3MyYk9OWCt0ME9uUTZuVld6M0d6
+dHNiVkUzUlZGCjNUcDFhMndNcDVMckFjbnc1cTl2c25Ub1VyWFRDRkZyNmZWNjlIcDk5VHRTcXVq
+SEgzOVUyclJwbzdScTFVcnAxYXVYa3BDUVlOYS8KdTNyMXFoSVVGR1I4UG1uU0pHWGR1blhsdGk4
+cUtsSmF0V3FsNU9Ua2xIcXZHdkdyNU43bDl5cGY3UC9DT0RZb1pqeXMzVTdOc1dzZwpZNE02Q2kr
+ZzRGRnk4NHl5SCs3dXpXejZzeGFpTnF2cVo2ZEZoNlRTMHRKNC9mWFhDUWdJWU5teVpYejg4Y2Vj
+TzNlT3hZc1g4OWhqCmo1blZoNGVIQjFCOHBsUnFhaXJ4OGZHRWhZV1p0TGx3NFlKeERtUHQyclYw
+NjlhTmV2WFVYVUw4ZXQ1MXRwN2F5dUM3eXI1UmtxaWkKN0VMWS9SejBta1FGOVlLc3JDc3FoaFJD
+Z0lXSHBBWVBIc3lFQ1JQUTYvVW1aelVGQmdieTFGTlBtZDNQL1BuemlZbUpJVDgvbjlqWQpXRHc5
+UFltTGl3TWdKaWFHYjc3NWhpVkxsdURxNmtxM2J0MllPM2V1SlRGcmhPR1VBVzBiTFI3MVBkU09V
+dnRzbnc2VC9Jb1hKN3pXClJ1MDBRb2h5V0hUaDNvNGRPd2dORGEzME5WdXg1WVY3MHpaTW8xbjla
+cnpTOXhYajJIWjVVWnhkdEt0Q24xRlRvTWdOZnY1UHVlMXMKOWJNV29yYXp5WVY3WmUxRnhNVEVX
+RHlvSTlwNGNpTUQ3eHlvZG96YWEvdHpvRjBHRFMrcG5VUUlVUTZ6RGtrbEp5ZXpZOGNPTGw2OAp5
+T0xGaTQyVjZlTEZpMDV4VzliejE4NXpPdk0wUGRyMlVEdEs3WlhaRGc0K0NEM253YWJYMVU0amhD
+aURXWHNZR1JrWm5ENTltdno4CmZFNmZQazFhV2hwcGFXbDRlWG54MFVjZjFYUkcxVzA4dVpGNzJ0
+K0RxNHNxRjhZN2oyMHZRSS8zb2I1TWNBdGhqeXlhd3poMjdCaWQKT25XcXlUd1dzZFVjeHJqdng5
+SHp0cDQ4SGZLMHlkZ09NejlnODNiVjZQTnY0K0h5bldCNHBWUTdtY01Rd2pwcWRMWGE2T2hvMXE5
+ZgpUL3YyN2YvNm9EUWQrT1RKa3hZUGJBMjJLQmlLb25EYk83ZGhtR0RncnVaM21ZenRjQi9HTm10
+WGpUNWJISVBIZXNPQ2s1RG5idEpPCkNvWVExbEhWejA2empyRXNYNzRjZ0owN2QxbzhnS003ZFBF
+UTlWenJjV2V6TzlXTzRoelNPOEhKQVJDeUJINTlYdTAwUW9pYm1GVXcKbWpadENsQnFSVmxuRUg4
+eW5vRWRCNWJhc3hJMWFPdExNSFpnOFZwVCtRM1ZUaU9FK0l0WkJlUENoUXRsZm1BcWlvSkdvNkZW
+cTFaVwpEMll2NGsvR016NXd2Tm94bk11ZlhlRjBMK2orQVNRK3EzWWFJY1JmekpyRDhQSHhLVzU4
+UzlFb0tSakhqaDJybVhTVnFPazVqTHpDClBEemY5aVJsU2dvdEdyWW9OYmJEelEvWXJKMFYrdlRh
+QXc5SHc0SVR4VGRja2prTUlheW1SaS9jNjlTcEU3Ly8vanQ1ZVhuazUrZVQKbDVkbi9McXF5NXc3
+Z29UVENYVDI3RnlxV0FnYk9LK0ZNNkhRWFZheEZjSmVtTFdIa1pHUmdZZUhCNWN1bGI0S1Y2UFIw
+S0tGT2grbwpOYjJIOGZLbWx5bFNpbmlqZitsYmljb2VoZzM2YkxNYlJnK0ZkNDlEUVVQWnd4RENT
+bXIwTEttU0ZXYWRiZEk3L21ROGIvWi9VKzBZCnp1dGNNSnp0VWJ5WFVmcW1qRUlJRzdQNDB1Vkxs
+eTZ4WWNNR05Cb05rWkdScXUxZDFMUXIyVmM0ZlBFd3ZXN3ZwWFlVNTdabFZ2RmUKeGk2MWd3Z2hM
+RnA4Y1BueTVZU0hoNU9Ra01EMjdkc0pEdzgzWHFOUjIyeEsyVVR2TzNwVHoxWGQrM0E0dlpLOURP
+dmUxRkVJVVFVVwo3V0g4KzkvL1p1dldyWGg1ZVFIRnA5dEdSa2J5OE1NUDEwZzROVzFNMmNqQWpy
+STZyVjNZOGc4WXZZYWNnaHpxdTlaWE80MFFUc3VpClBZem16WnVUbloxdGZKNmRuVTN6NXMydEhz
+b2V4SitJWjBESEFXckhFQURudXNNNVdMcEx6cGdTUWsxbUZZekpreWN6ZWZKa1dyWnMKU2ZmdTNi
+bnZ2dnNZTm13WXdjSEJ0R3paMHVKQkRRWURmbjUrK1BqNHNIRGh3bkxiSlNjbjQrcnF5cmZmZm12
+eEdOV1JjaVdGYTNuWAo2TnFxcTAzSEZSWFF3MXUvdmtWT1FZN2FTWVJ3V21ZZGt1cmV2YnZ4b3Iz
+QmcvOTNUK3NISG5pZ1NrdG1USmt5aGJpNE9MeTl2WW1NCmpHVDA2TkdsenNBcUxDemtoUmRlSUNv
+cXl1YW5VOGFmTE42N2tPVkE3TWc1MExiUjh1SHVENWtVT2tudE5FSTRKYk1LeHZqeDQ2MDIKWUVa
+R0JnQVJFUkVBREJvMGlLU2tKS0tqbzAzYUxWeTRrQkVqUnBDY25HeTFzYzBWZnpLZUlUNURiRDZ1
+cU5pc3ZyUDQyNWQvNCsvQgpmNWU1RENGVVlORWNSbloyTnF0WHIyYml4SW1NSGoyYU1XUEdNR2JN
+R0lzR1RFNU94dGZYMS9qYzM5K2Z4TVJFa3pabnpweGg5ZXJWClBQMTA4ZjBuYlBtWGZtRlJJWnRT
+TnNuOGhSM3EwYllIMmpaYS9ydjd2MnBIRWNJcFdYU1cxTXN2djR4R28ySERoZzA4Ly96ekxGKysK
+bkx2dnZ0dnFvWjU5OWxuZWZQTk40OVdJRlIyU21qMTd0dkZyblU2SFRxZXIxdGk3eiszR3E3RVh0
+elc1clZyOWlKcFJzcGZ4ZVBEagpzcGNoaEpuMGVqMTZ2YjdhL1ZoMHg3M2c0R0IyNzk1Tmx5NWRP
+SGp3SUJrWkdRd1lNTUNpdzBZWkdSbm9kRHIyN05rREZFK29SMFZGCm1SeVM2dGl4bzdGSVhMcDBp
+WVlORzdKMDZWS0dEUnRtR3I0R2xnWjVZK3NiL0huOVQrWkh6YSt3blN3Tll2dXhTMzdXUTFZTVlm
+QmQKZzNrbTlCa3pzd2doYmxhaml3K1djSE56QTZCSGp4NnNXN2VPQ3hjdWtKTmoyVmtySmN1TUdB
+d0dVbE5UaVkrUEp5d3N6S1ROeVpNbgpTVWxKSVNVbGhSRWpSckJreVpKU3hhS21iRHk1VVE1SDJT
+VlhOQm9OR28yRzljK3RaOUtYazlDNGFveXZsVHlhTkttZHAza0xZUThzCk9pVDF6RFBQY09YS0Zh
+Wk9uY3JNbVRNNWMrWU1yNzc2cXNXRHpwOC9uNWlZR1BMejg0bU5qY1hUMDVPNHVEZ0FZbUppTE83
+UFd2SUsKODloeFpnZDk3dWlqV2daUm5nS01leUpuZ1F2UkVCd055Uk5OV21WbHlabHRRdFFVaXc1
+SndmL1drZ0tJakl4VWRVRkNheCtTU2ppZAp3RE0vUE1QdW1OMW1qVjJiRHZjNFhNYmJkc0NEdzR0
+WHNpMnNaOUpPVnJVVm9tSTJPU1IxODFwU2lZbUo5T3JWcTFhdEpXVTRaYUNQCnQreGRPSVF6b1hD
+aEcyaVhxWjFFQ0tkaDBSNUdVRkFRUC8zMFU2bTFwUGJ1M1Z0akFTdGk3VDJNNkJYUlBCYjBHTVA5
+aDVzMWRxMzkKNjczYTdXdzBkcGw3R2JLSElVUmxiTEtIVVp2WGtpb3NLdVRYUDM3bDdqdXNmNXF3
+cUNGblFvdnYveTE3R1VMWWhGbVQzcE1uVHdZdwpyaVZWY3UzRnRtM2JHRGl3ZHF6b3V2L1AvWGcx
+OXFKMTQ5WnFSeEdXME0rQ0IwZkNuc2R1bWNzUVFsaGJsZGFTS3ZtNnFtdEoyYU90CnA3WVM0UjFC
+a3liTnljcTZvblljWWE0ellmQm5GOUIrQkR1ZlVqdU5FTFdheFdkSkFlemF0UXVOUmtOd3NMcDN0
+YkhtSE1iSXIwY3kKck5Nd3hnYU5SZVlIcXR2T3htTzNTNFNSRDhLN3YwTmhmWm5ERUtJU05wbkRN
+QmdNZE9yVWlaZGVlb2tYWDN5UlRwMDZzWFhyVm9zSAp0VGVLb21BNFpTRENPMEx0S0tJcTBuckNu
+d0hRSTA3dEpFTFVhaFpkdVBmMjIyK3paczBhNCtLQlI0OGVaZnIwNmZUcDQ5aW5vdjUrCitYZnF1
+OWJIdTZtMzJsRkVWVzE4RXg0ZENPcWNzQ2VFVTdCb0QrUHk1Y3UwYmR2VytMeE5telpjdm56WjZx
+RnN6WERLSUZkM083b0wKM2VCNEZQUldPNGdRdFpkRmV4aVBQdm9vMGRIUmpCdzVFa1ZSK1BiYmJ4
+azdkbXhOWmJNWk9SeFZTMngrRFdJKzVXeldXZHE2dDYyOAp2UkRDSW1aUGVpdUt3cmx6NXpoLy9q
+enIxcTFEbzlFd1pNZ1F0RnB0VFdjc2w3VW12VHNzNk1BUFkzN0FyNldmaWhmazJlbUVjcFhhCnFU
+ajJRQTFQVEg2Q0Q0WitZRWFmUWppbnFuNTJXbFF3dW5idHlvRURCeXdlcEtaWW8yQ2N6amhOOEFm
+Qi9EbmpUK09LcC9KaFhOMTIKS281ZFgwUExWMXV5WmZ3Vy9GcjZtZEd2RU02bnhzK1MwbWcwaElX
+RnNYNzllb3NIc1dkYi95aSsvcUsyWEUvaTlITGcrZDdQOCtJdgpMNnFkUkloYXg2Sko3NlNrSklZ
+T0hZcVhseGRhclJhdFZxdjZ0UmpWSlJQZXRjK2swRW5zT2IrSFgvLzRWZTBvUXRRcUZrMTZyMTY5
+CnV0WmRGR1U0WmVESjdrK3FIVU5ZVVgzWCtyeDJ6MnM4Ri84Y3Z6NzJxK3c5Q21FbFp1MWg1T2Zu
+czI3ZE9wWXVYY3JwMDZmcDJMRWoKZDkxMWwvSGhxQzVldjhpWnJETUV0ZzVVTzRxd3NvZTdQc3ox
+L090OGYrUjd0YU1JVVd1WVZUQmVldWtsbGl4WlFzdVdMWG4xMVZlWgpQNy9pKzExWHhtQXc0T2Zu
+aDQrUER3c1hMaXoxL3VyVnF3a01EQ1FvS0lqbzZHaUw3aGx1aVcxL2JLUFg3YjJvNDFLblJ2b1g2
+cW5qClVvZTNCcnpGaTcrOFNFRlJnZHB4aEtnZEZETUVCd2NyZVhsNWlxSW95cFVyVjVTSWlBaHov
+bG01Z29LQ2xDMWJ0aWlwcWFsSzU4NmQKbFlzWEw1cThmKzNhTmVQWGVyMWU2ZE9uVDVuOW1CbS9Y
+TS8rOUt6eWh1R05VbjJDWXNaRHJYYVNzYkoySllxS2lwUituL1JUM2s5Kwp2MXIvUHhHaXRxbnFa
+NmRaZXhoRlJVVzR1YmtCMExScFV6SXpNNnRjb0RJeU1nQ0lpSWpBMjl1YlFZTUdrWlNVWk5LbVVh
+TkdKdTNyCjE2OWY1ZkVxc3ZYVVZybkRYaTJtMFdoNGU4RGJ6Tmt5aCt0NTE5V09JNFRETTJ2U2U5
+KytmYmk3dXh1ZloyZG5HNTlyTkJxTENraHkKY3JKeExTb0FmMzkvRWhNVGlZNk9ObW4zM1hmZk1Y
+WHFWSzVkdThhdVhidks3Vy8yN05uR3IzVTZIVHFkenF3Y21ibVpITGwwaEpDMgpJV1puRjQ3QXRm
+UWs5M0JvdktZeEdFeGZkbmR2Um1hbTR5OXRJMFJsOUhvOWVyMisydjJZVlRBS0N3dXJQWkNsN3Iv
+L2Z1Ni8vMzYrCit1b3IvdmEzdjdGbno1NHkyOTFjTUN5eC9mUjJ1cmZ0VGoxWHVlbE83VkpBcVF2
+OE5wMkVKMEpoMXlHNDNzcjRjbGFXbkQwbG5NT3QKZjB6UG1UT25TdjFZZEIyR05ZU0VoSERreUJI
+ajg0TUhEOUt6Wjg5eTI0OGFOWXF6WjgrYTNCcldHa291MkJOTzRFcEgyUGN3NkdhcgpuVVFJaDJi
+aTNkZEpBQUFjV1VsRVFWVHpndUhoNFFFVW55bVZtcHBLZkh3OFlXRmhKbTFPbkRoaHZON2poeDkr
+b0h2MzdqUm8wTUNxCk9ReW5ERVRjSVFYRGFXeVpCWDdmUXB2ZGFpY1J3bUZaZE9HZXRjeWZQNStZ
+bUJqeTgvT0pqWTNGMDlPVHVMamltOS9FeE1Td2F0VXEKUHYzMFU5emMzTkJxdGJ6OTl0dFdIVCtu
+SUljOTUvWVFmbnU0VmZzVmRpeTdPZnp5QnR6N0RDejdGY3c3MzBNSWNaTXEzYUxWWGxSMQpBUzNE
+S1FNemZwN0JqaWQybE5tbkxPeFgzWFpxamwxQk8wMFJQTlliZGo4QmV4NERySGVMWHlFY2lVMXUw
+VnBiR0U0WjVIUmFaNlM0CndBK0xvUDlMMEVET2poTENVazVaTUxiK3NWWG1MNXpWdVdBNE5BTDZ2
+YXgyRWlFY2p0TVZqSUtpQWhKT0ozRDNIWGVySFVXb1pkTnIKNFBzZHRGRTdpQkNPeGVrS3hwNXpl
+N2pENHc1YU5HeWhkaFNobHB4bThNdS9JQnFLbENLMTB3amhNSnl1WUNTa0pkRDdqdDVxeHhCcQor
+MjBzRk1HeVBjdlVUaUtFdzNES2doSGVUazZuZFhxS0Mvd0EvN2ZwLzBpL2thNTJHaUVjZ3RNVmpN
+UzBSSHEySy8vS2N1RkV6c09vCkxxUDR2MDMvcDNZU0lSeUNVeFdNODlmT2s1R1RRYWNXbmRTT0l1
+ekVxL2U4eXVxanEwaytVelAzWEJHaU5uR3FncEdVbGtSWXV6QmMKTkU3MWJZc0tOSzNmbExjR3ZN
+WEVIeVpTV0dUN1JUYUZjQ1JPOWNtWmtKWkF6OXZrY0pRdzlXaTNSMm5vMXBCM2s5NVZPNG9RZHMy
+cApDb2JNWDRpeWFEUWFsZzFieHV0YlgrZm9wYU5xeHhIQ2JqbE53U2dvS21EWHVWMkUzaGFxZGhS
+aGgrNXNmaWR6ZEhNWXYzcThISm9TCm9oeE9VVENhTkdtTzIyMXVYRHR6amVZTm02UFJhTXA5Q09m
+MWRNalROSEJ0d055RXVXcEhFY0l1T1VYQnlNcTZBdTBXUTlvRWlsY3kKcmVnaG5KV0x4b1ZsOXkz
+ajM5di96Y0UvRDZvZFJ3aTc0eFFGQTRCMmlaQW04eGVpWXUyYnR1ZjFmcTh6N3Z0eDVCZm1xeDFI
+Q0x1aQpTc0V3R0F6NCtmbmg0K1BEd29VTFM3Mi9mUGx5QWdNRENRd01aTXlZTVJ3N2RxejZnMHJC
+RUdaNkl2Z0pXalJzd1Z1L3ZxVjJGQ0hzCmlpbzNVTkpxdFN4WXNBQnZiMjhpSXlQWnRtMGJucDZl
+eHZjVEVoTHc5L2ZIdzhPRFR6NzVoSTBiTi9MWlo1K1Y2c2ZjbTRCb0dtcmcKV1hkNDh3b29kU3By
+amQzZCtNZHV4cTV0R2QyQWdyTGZhZ0xFQUorQys0MW1aR2JLL1RORTdlRXdOMURLeU1nQUlDSWlB
+bTl2YndZTgpHa1JTVXBKSm0vRHdjT085djZPam85bXlaVXYxQm0wSG5Ba3hvMWdJNTFKQXVYTlpt
+UXJFZndUM0I1SjE0NHFhSVlXd0d6WXZHTW5KCnlmajYraHFmKy92N2s1aVlXRzc3RHo3NGdLRkRo
+MVp2MEhiSTRTaGh1YjNqSU9OMmtIdHRDUUdBcTlvQktySng0MFkrLy94enRtL2YKWG02YjJiTm5H
+Ny9XNlhUb2RMclNqZG9CU2JKQ3JiQ1VCdForQURGdDBhZnEwYlhYcVIxSWlDclI2L1hvOWZwcTky
+UHpPWXlNakF4MApPaDE3OXV3QllQTGt5VVJGUlJFZEhXM1NidCsrZlR6d3dBUDg5Tk5QM0hYWFhX
+WDJaYzV4dUNLbGlEb3YxWUYzLzRRYkxjMUk2QWpICjNpVmo5ZHRaMExhamhqWVQyN0RyeVYyMGNa
+ZmI5QW5INXpCekdDVnpFd2FEZ2RUVVZPTGo0d2tMQ3pOcDg4Y2ZmekI4K0hDV0wxOWUKYnJFdzEr
+R0xoK0VHWmhZTEljcHdFbUs2eHpCNjFXZ0tpc3FaSkJmQ0NhaHlXdTM4K2ZPSmlZbGh3SUFCVEp3
+NEVVOVBUK0xpNG9pTAppd1BnMVZkZjVmTGx5enoxMUZOb3RWcENRNnUrbkVkaVdpS2tXU3U1Y0ZZ
+dlI3eE0zVHAxZVdYeksycEhFVUkxcXB4V2F5M203Rlk5CnNmWUpQbnp0UTBoMndrTXBrdEZxZlNx
+S3dzWHJGK24rUVhjV1J5OW1TS2NoWm80aGhQMXhtRU5TdHBad09rSDJNSVJWdEd6VWtpOUgKZk1u
+amF4NG45V3FxMm5HRXNMbGFYVEF5Y2pLS2Y3RXZxSjFFMUJhOWJ1L0ZDNzFmWU9UWEk4a3R5RlU3
+amhBMlZhc0xSdkxaWklMYgpCRU9SMmtsRWJUSzE1MVJ1YjNJNzAzNmVwbllVSVd5cVZoZU1oTk1K
+Y3NNa1lRV3VKa3ZndTdpNDhOMjQ3MWk4WVRHYXdQKzkzcVJKCmM3V0RDbEdqYW5YQlNEd2pkOWdU
+MWxER0VpSzVDbnk1RHlKYmd2Y1dRQ2xlUmwrSVdxeldGZ3hGVWVTV3JLSm0vZGtWVmkySGtTT2gK
+NVNHMTB3aFI0MnB0d1RoKytUaU42emFtclh0YnRhT0kydXprUUloL0d4NitGeHFySFVhSW1sVnJD
+MFpDbXN4ZkNCdjViUnpzZmh3ZQpocXpjTExYVENGRmphbTNCU0V4THBPZHRVakNFalJoZWhyUHc0
+RGNQeXAzNlJLMVZ1d3VHN0dFSW05SEFldENnNGVuMVQxZnBLbG9oCjdGMnRMQmpYODY1ek5QMW84
+VFVZUXRoS0Vhd2N1Wkk5NS9md1Q4TS8xVTRqaE5YVnlvS3g4K3hPdXJicVNqM1hlbXBIRVU2bWNk
+M0cKckIrem5tVjdsN0ZveHlLMTR3aGhWWFo5QTZXcWtzTlJRazFlamIzWU5IWVQvVDd0UjE1aEhs
+UERwNm9kU1FpcnFKVjdHSWxuRWdsdgpKM2ZZRStycDBLd0RXOFp2WWZIT3hmeHI2Ny9VamlPRVZk
+UzZnaUVYN0FsN2NZZkhIV3dadjRWUDkzM0tMUDBzbVFnWERxL1dGWXhUCkdhZUE0bDlXSWRUVzFy
+MHQrbkY2dmozOExTLys4cUlVRGVIUVZDa1lCb01CUHo4L2ZIeDhXTGh3WWFuM2p4dzVRbmg0T1BY
+cjEyZnUKM0xrVzlWMnlkNkhSYUt3VlY0aHFhZDI0Tlp2SGJXYkRpUTFNKzNtYUZBM2hzRlFwR0ZP
+bVRDRXVMbzZOR3pleWFORWlMbDI2WlBKKwppeFl0V0xod0lUTm16TEM0NzhRMG1iOFE5c2V6b1Nl
+YnhtN2kxejkrWmVJUEV5a3NLbFE3a2hBV3MzbkJ5TWpJQUNBaUlnSnZiMjhHCkRScEVVbEtTU1p1
+V0xWdlNvMGNQM056Y0xPNWZsZ1FSNmpGZEJ2M1dSL09HelVtZW5NelNWUjh5NUlzaFhNMjVxblpn
+SVN4aTg0S1IKbkp5TXI2K3Y4Ym0vdnorSmlZbFc2VHVuSUljRGZ4NmdlNXZ1VnVsUENNdVVzUXg2
+R2N1aUYzNVN3RjNON3lMc3d6Q09YanFxWGx3aApMT1R3MTJITW5qM2IrSFZMLzViNGV2clNxRzRq
+OVFJSlVaa2lXRGg0SVV0M0xhWFBSMzM0NUcrZk1OaG5zTnFwUkMybTErdlI2L1hWCjdzZm1CU01r
+SklUbm5udk8rUHpnd1lORVJVVlZ1YitiQzhhOGhIbjBiQ3lIbzRSamVLTDdFL2kxOUdQazF5T1pI
+ajZkNmVIVDVXUU4KVVNOME9oMDZuYzc0Zk02Y09WWHF4K2FIcER3OFBJRGlNNlZTVTFPSmo0OG5M
+Q3lzekxhV25rMlNrSllnSzlRS2gzTDNIWGVUOVBjawpWdXhmd2Rqdng1SlRrS04ySkNIS3BWRlVP
+TWR2eTVZdFBQWFVVK1RuNXhNYkcwdHNiQ3h4Y1hFQXhNVEVjUDc4ZVVKQ1Fzak16TVRGCnhRVjNk
+M2NPSFRwRTQ4YW1kNmpSYURRbVJlV09lWGZ3eTloZjhHbmhVNnBkOFRGa2M1amJWcTEyYW80dEdh
+M1Y3dFpmdXh2NU4zaHMKOVdNY1N6L0dwL2QvU2tDckFEUDZFYUpxYnYzc05QdmZxVkV3ck9YbWIv
+cE01aGtDM3cvazRuTVhTKzNXUzhHd2RUczF4M2FNakdYOQoyaW1Ld29lN1ArU2xUUzh4STN3R00z
+ck5vSTVMSFRQNkU4SXlUbHN3alB3QUxiQ2l2TmIyL3lFaUdXM1pUczJ4Sy81bFRiMmF5b1RWCkU4
+Z3R5T1hqdjMxTXB4YWR6T2hUQ1BOVnRXRFVncVZCL2pwZHNkME1TSHZ0Zjg5TkhrSTRqdlpOMi9Q
+TDJGOTRLT0FoZXYyM0YrOG0KdlV1UlVxUjJMQ0ZxUThINFM3dEVTSk1KYjFFN3VHaGNpQTJMWmZ2
+ajIvbnl3SmYwLzdRL3h5OGZWenVXY0hLMW8yQzQ1RU9iUFhBbQpWTzBrUWxoVnB4YWQyRHBoSzlF
+KzBmVDhzQ2RUTjB6bGN2Wmx0V01KSjFVN0NrYnJmWENsQStRMlVUdUpFR2FvZUFtUm14OU5talNu
+Cmprc2RadlNhd2NHSkI4a3R5S1h6ZTUxNUorRWRjZ3R5MWY1R2hKT3BIUVhqOWdRNUhDVWNpQmxM
+aVB6MXlNcTZZdnhYclJ1M1puSDAKWWd6akRlaFQ5Zmd0OG1QbHdaV3krcTJ3bVZwd2xwUUNEendD
+S2YxZ3oyUGx0Y1FSenB5UmpMWnNwK2JZbG1VczcxZDBjOHBtWnNUUAp3TTNGamYvcjgzOUVkNHJH
+UlZNNy9nWVVOY3VKVDZ0VklQWXUrR0lOWFBRdnJ5VzE3VU5FTWxhM25acGpXNmRnQUJRcFJhdzh1
+SkovCmIvODMxL091TTdYblZCNE5mSlNHYmczTjdGODRvNm9XRElkZmZKQkdmMExEUzNESnQvSzJR
+amdjVjdQV2wycnMzcFIxKzc1bmJzSmMKWHRuOENrLzFlSXBuUXA2aGRlUFdOc2dvbklYajc3L2Vs
+bFI4ZHBUaStOK0tFS1daTjk5eExlc3FmZHYzWmMzb05XeWRzSldMTnk3aQp1OGlYOGQrUFoxUEtK
+cmxoazdBS3h6OGsxZThsS0hJRmZVV3JMOWErd3hTU3NicnQxQnk3WmpMZStxdDg2Y1lsUHQ3N01W
+OGMrSUp6CldlY1lGVENLTVFGajZORzJoNnlLNitTY2R3NWpiRC9ZUGdPT1YzUS9BZWY5RUpHTTlq
+aTJiUXJHelk1Y09zSVhCNzVneGY3aXRYUEcKZEIzRDZJRFIrSHJLb1Z4bjVMd0Y0MFYzbUo4SzJj
+MHJhb216Zm9oSVJuc2MyL1lGbzRTaUtPdzh1NU12RG56Qmx3ZStwRW05Smd6bwpPSUQrSGZxamE2
+K2pXWU5tWnVZU2pzeDVDOGFrenZEZWtjcGE0cXdmSXBMUkhzZXVpWXh1Rk05M1ZNemR2Um1abWNW
+WGloY3BSZngyCi9qYzJudHpJTHltLzhPdnBYL0h6OURNV2tONTM5S2ErYTMwemN3cEg0cndGNDIv
+ajRQdVBLMnVKYzM2SVNFYjdIRnZkak9YOXl1Y1cKNUpLWWxzakdsSTM4Y3ZJWDl2KzVuKzV0dWhQ
+Y0pwZ2dyeUNDdklMdzgvVERyWTZibWRtRnZYTGVndEZqQ2V4OHFyS1d5SWVJTGR1cApPYlprckt5
+ZHViL3ltYm1aSkp4T1lPLzV2ZXk5c0plOTUvZHk2dW9wZkQxOWpRVWt5Q3VJd05hQmVOVDNNS3RQ
+WVI4Y3FtQVlEQVppClltSW9LQ2dnTmphV3laTW5sMnJ6NG9zdjh0VlhYOUdzV1RPV0wxK09yMi9w
+eVRtTlJnTmVlK0I4VUNVanF2MGhzaG5RV2FrL1M4ZTIKcEoyZWluUGFRMGFvT0tka3JKamxoNjV1
+ZGozdk9nZitQR0JTUlBaZjJFOTkxL3A0Ti9XbWZkUDJ4UStQNHYrV3ZOYWtYdlhXZWRQcgo5U2Iz
+cExaWGpwTFRvUzdjbXpKbENuRnhjWGg3ZXhNWkdjbm8wYVB4OVBRMHZyOWp4dzYyYnQzS3pwMDcy
+YkJoQXpObXpHRGR1blZsCmQvYW5JOXpLVWsvbEJjTWU2SkdjMXFMSFBqT1dYTmRSWXZaZkQxTlpX
+V1dmZHR1b2JpUEMyb1VSMWk3TStKcWlLRnk4Y1pIVXE2bWMKdW5xSzFLdXBIRWsvd2s4bmZqSytW
+cmRPWGRvM2JjL3RIcmZqMmRDVEZnMWEwS0pCQzVvM2FFNkxocVcvcnVkYXoyUmNSL2tnZHBTYwpW
+V1h6Z3BHUmtRRkFSRVFFQUlNR0RTSXBLWW5vNkdoam02U2tKRWFNR0VIejVzMFpQWG8wTDcvOGN2
+a2RGam4reGVwQzJCL3pyakF2CjVnYmtWOWppZXNQcjVMWXQ0T1UxTDVOK0k1MzA3T0xIc2N2SFNM
+K1J6dVhzeThXdi9mVzFXeDIzNHFMU3NMaVFuRGx3aHFPcmpsTGYKdFQ0TlhCdlF3SzFCOFg5di92
+cXYvOVozclYvcXRaTC8xbk90UngxTkhlcTQxTUZGNDBJZHpWLy8vZXU1cUpqTlAyMlRrNU5ORGkv
+NQorL3VUbUpob1VqQjI3TmpCbzQ4K2FuemVzbVZMVHB3NHdaMTMzbW5UckVJNHIxdjNSQ3BpeHVH
+d0czRGp1QnZEL1lkWDJsdGo5NmFjCnZmZ0g2ZGwvRlpJYjZmeDN4MzhaMm1rbzJmblpaQmRrazUy
+ZlRVNUJEdGZ6cjNNcCs1TEo2emUvZit0cnVZVzVGQllWVXFRVVVhajgKOWQraVFncVY0aXZoeXlv
+aVpUMHY3NzMwNUhTK1hmSnRtVzFkTkM1b0tDN0NOeGRqdFY2ckNydjg4MXhSbEZMSDE4ci9SczNk
+QUpacwpLR3YzT2Vldmg3WDZzNlN0cGUwcXkya1BHYUhpbkpMUnNuYmw1YXlKakpXN2xuV1ZKdlZM
+ejNsOHRlZ3JxNDFSbnFLLy9sY2RGMys0CmFLVTA5c2ZtQlNNa0pJVG5ubnZPK1B6Z3dZTkVSVVda
+dEFrTEMrUFFvVU5FUmtZQ2NQSGlSVHAyN0ZpcUx3Yyt3VXNJSVJ5T3pRL2EKZVhnVW4zNW5NQmhJ
+VFUwbFBqNmVzTEF3a3paaFlXR3NXcldLOVBSMFZxeFlnWitmbjYxakNpR0V1SVVxaDZUbXo1OVBU
+RXdNK2ZuNQp4TWJHNHVucFNWeGNIQUF4TVRHRWhvWnk5OTEzMDZOSEQ1bzNiODdubjMrdVJrd2ho
+QkEzVSt6Y2xpMWJGRjlmWCtXdXUrNVMzbjMzCjNUTGJ6Snc1VStuUW9ZTVNIQnlzSEQ1ODJNWUpp
+MVdXYy9QbXpVcVRKazJVb0tBZ0pTZ29TSG50dGRkc25uSENoQWxLcTFhdGxJQ0EKZ0hMYjJNTzJy
+Q3luUFd4TFJWR1VQLzc0UTlIcGRJcS92Ny9TdDI5Zlpmbnk1V1cyVTN1Ym1wTlQ3VzJhbloydGhJ
+YUdLb0dCZ1VwWQpXSmp5emp2dmxObE83VzFwVGs2MXQrWE5DZ29LbEtDZ0lHWElrQ0Zsdm0vcDly
+VDdnaEVVRktSczJiSkZTVTFOVlRwMzdxeGN2SGpSCjVQMmtwQ1NsZCsvZVNucDZ1ckppeFFvbE9q
+cmFMbk51M3J4WkdUcDBxQ3JaU2hnTUJtWDM3dDNsZmhEYnk3YXNMS2M5YkV0RlVaUnoKNTg0cGUv
+YnNVUlJGVVM1ZXZLaDA2TkJCeWN6TU5HbGpEOXZVbkp6MnNFMnZYNyt1S0lxaTVPVGtLRjI2ZEZG
+Ky8vMTNrL2Z0WVZzcQpTdVU1N1dGYmxwZzdkNjR5WnN5WU12TlVaWHZhOVluSE4xK3o0ZTN0YmJ4
+bTQyYTNYck54K1BCaHU4d0o2ay9TOStuVGgyYk55bCtOCjFCNjJKVlNlRTlUZmxnQmVYbDRFQlJX
+dk11RHA2VW1YTGwzWXVYT25TUnQ3MktibTVBVDF0Mm5EaHNXM2xiMTI3Um9GQlFYVXEyZDYKOFo0
+OWJFdW9QQ2VvdnkwQjB0TFMrT0dISC9qNzMvOWVacDZxYkUrN0xoamxYYk54c3gwN2R1RHYvNzk3
+ZVpkY3MyRkw1dVRVYURScwozNzZkb0tBZ3BrMmJadk9NNXJDSGJXa09lOXlXeDQ4ZjUrREJnNFNH
+aHBxOGJtL2J0THljOXJCTmk0cUtDQXdNcEhYcjFreWFOSW5iCmI3L2Q1SDE3MlphVjViU0hiUWt3
+ZGVwVS92M3ZmK1BpVXZiSGZGVzJwMTBYREhNb0ZsMnpvWjdnNEdCT256NU5jbkl5L3Y3K1RKa3kK
+UmUxSXBjaTJySnFzckN4R2pSckZ2SG56YU5Tb2tjbDc5clJOSzhwcEQ5dlV4Y1dGMzM3N2plUEhq
+N040OFdMMjdObGo4cjY5Yk12SwpjdHJEdGx5M2JoMnRXclZDcTlXV3U3ZFRsZTFwMXdVakpDU0VJ
+MGYrZDYrTGd3Y1Awck5uVDVNMkpkZHNsQ2p2bW8yYVpFNU9kM2QzCkdqWnNpSnViRzQ4Ly9qakp5
+Y25rNXViYU5HZGw3R0ZibXNPZXRtVitmajdEaHcvbjBVY2Y1Yjc3N2l2MXZyMXMwOHB5MnRNMmJk
+KysKUGZmZWUyK3B3N3Iyc2kxTGxKZlRIcmJsOXUzYldiTm1EUjA2ZEdEMDZORnMyclNKc1dQSG1y
+U3B5dmEwNjRMaEtOZHNtSlB6d29VTAp4bXErZHUxYXVuWHJWdWF4VHpYWnc3WTBoNzFzUzBWUmVQ
+enh4d2tJQ09EWlo1OHRzNDA5YkZOemNxcTlUUzlkdXNUVnExY0JTRTlQCjUrZWZmeTVWMk94aFc1
+cVRVKzF0Q2ZER0cyOXcrdlJwVWxKUytQTExMK25YcngrZmZ2cXBTWnVxYkUrN1hCcmtabzV5elVa
+bE9iLzUKNWh1V0xGbUNxNnNyM2JwMVkrN2N1VGJQT0hyMGFMWnMyY0tsUzVlNC9mYmJtVE5uRHZu
+NStjYU05ckl0Szh0cEQ5c1M0TmRmZitYegp6eituVzdkdWFMVmFvUGdYOVk4Ly9qQm10WWR0YWs1
+T3RiZnB1WFBuR0RkdUhJV0ZoWGg1ZVRGanhnemF0R2xqZDcvcjV1UlVlMXVXCnBlUlFVM1czcDBQ
+ZlFFa0lJWVR0MlBVaEtTR0VFUFpEQ29ZUVFnaXpTTUVRUWdoaEZpa1lRZ2doekNJRlExaVZpNHNM
+TTJiTU1ENy8KejMvK3c1dzU1dHc4eW5wME9oMjdkKzhHSURvNm1zek16R3IxcDlmckdUcDBxTm12
+MThSWU5lbnMyYk9NSERuU3BtTUt4eVFGUTFoVgozYnAxK2U2NzcwaFBUd2NzdnhLM3NMQ3cyaGx1
+SG5QOSt2VTBhVkw2N20zaWY5cTJiY3ZYWDMrdGRnemhBS1JnQ0t0eWMzUGp5U2VmClpONjhlYVhl
+TzN2MkxGT21UQ0V3TUpDcFU2ZHk0Y0lGQU1hUEg4KzBhZE1JQ3d2amhSZGVZTUtFQ1V5ZlBwM1Ew
+RkE2ZCs3TW5qMTcKZVBMSkorblNwUXV6Wjg4MjlqZHg0a1JDUWtMbzFhc1hTNWN1TFROUCsvYnRT
+VTlQNS8zMzMwZXIxYUxWYXVuUW9RUDkrdlVEaXRjQgpHenQyTEdGaFljeWNPZE40Ulc1eWNqTDkr
+L2RIcTlXeVljT0dTci92N094czNubm5IZnIyN1V0MGREUjZ2UjZBOFBCd2s2dHBTL1orCmNuSnl5
+bXhmbnRPblR6TjQ4R0NDZ29JSURBemt4SWtUcEthbTR1L3Z6K09QUDQ2Zm54OXo1c3d4NW4vdHRk
+Y0lEUTBsSkNTRU45NTQKdzZTZjZkT25vOVZxNmQ2OU95a3BLYVNtcHRLMWExY0FQdjc0WXg1NjZD
+SHV2ZmRlQWdJQ2VQZmRkNDMvOXFlZmZpSThQSnpRMEZDZQpmZlpaSmsrZVhDcm4zcjE3NmQrL1Aw
+RkJRUVFIQjNQdDJyVkt0NTF3SU5WWk9sZUlXelZ1M0ZqSnpNeFUycmR2cjJSa1pDai8rYzkvCmxO
+bXpaeXVLb2loVHAwNVYzbjc3YlVWUkZPV05OOTVRbm4vK2VVVlJGR1hjdUhGSzM3NTlqVXR1ang4
+L1hoazhlTENTbTV1cmZQengKeDByanhvMFZ2VjZ2NU9ibUtuNStmc2FsNHk5ZnZxd29pcUxrNXVZ
+cVlXRmh5clZyMXhSRlVSU2RUcWZzMnJWTFVSUkZhZCsrdlpLZQpubTdNbDUrZnIvVHAwMGRadDI2
+ZHNlM1ZxMWNWUlZHVTU1OS9Ydm55eXk4VlJWR1VidDI2S1VsSlNjcTFhOWVVcUtpb01wZUgzcng1
+CnMvRStBeDk5OUpHeVlNRUNSVkVVNWZ6NTgwcG9hS2lpS0lveWI5NDhaZGFzV1lxaUtNclpzMmVW
+enAwN1Y5ais1ajV2Tm12V0xPWEQKRHo4MGZnL1oyZGxLU2txS290Rm9sRysvL1ZiSnljbFJIbmpn
+QWVXYmI3NHgyVFlGQlFYSzBLRkRsU05IamhpMzlhSkZpNHpiN2NhTgpHMHBLU29weEtmbVBQdnBJ
+YWRXcWxYTDI3RmtsTXpOVGFkZXVuWktYbDZmazUrY3I3ZHUzVjFKU1VwVDA5SFFsT0RoWW1UeDVj
+cW1jCjQ4YU5Velp1M0tnb1N2RXk0QVVGQmFYYUNNY2xleGpDNnR6ZDNSazdkcXpKWDZjQVAvNzRJ
+NDg5OWhnQWp6LytPR3ZYcmdXS0R5R04KR0RFQ2QzZDNZOXNSSTBaUXQyNWR3c1BEYWRxMEtYMzc5
+cVZ1M2Jwb3RWcmpTc0R4OGZGRVIwZWoxV281ZWZJa216WnRxalJiYkd3cwovZnYzSnpvNm1sMjdk
+bkhnd0FGME9oMWFyWloxNjlaaE1CZzRjK1lNaXFJUUdocEtvMGFOR0RWcVZLWExWYTlhdFlxbFM1
+ZWkxV3FKCmlvcml3b1VMcEtTazhPQ0REL0xOTjk4QXNITGxTdU5jUVZudFQ1NDhXVzcvSVNFaHpK
+OC9uN2ZlZW92TGx5OVR2MzU5b0hoWm12dnYKdjU5Njllb3hldlJvZnZycEp3QjI3dHpKOE9IRDZk
+YXRHN3QzNytibm4zOG1MeStQelpzMzg4UVRUd0RGaHc4Yk5HaFFhcXhCZ3diUgpwazBiM04zZDhm
+ZjNaL2Z1M1NRbUp0SzFhMWZhdDI5UDgrYk5HVFpzV0puYkpEdzhuSmt6Wi9MZWUrOVJVRkJBblRw
+MUt2MlpDTWRoCjkwdURDTWYwN0xQUEVod2N6SVFKRTB4ZUwrK0R0MDJiTmliUFM5Ym5xbHUzTGsy
+Yk5qVytYcmR1WGZMeThzakt5bUxtekpsczNicVYKMjI2N2pmdnZ2NThyVjY1VW1Pbmpqei9tOU9u
+VExGNjhHQ2hlcGpvZ0lJRE5temVidEV0TFN6UHZtN3hKVVZFUml4WXRJaUlpb3RSNwpMVnEwWVAv
+Ky9heGN1ZEs0TkVONTdVdVc2N2hWZEhRMDNidDM1L1BQUDZkMzc5NTgvZlhYSnR1bFJNbjh6ZVRK
+ay9ubW0yOElDQWhnCjZ0U3BYTGx5QlkxR1UrWUtwYmU2ZFh2bjVPVGc2dXBxTWpkVVhoOHhNVEVN
+SERqUXVCUkpVbElTclZ1M3JuQTg0VGhrRDBQVWlHYk4KbXZIZ2d3L3kzLy8rMS9oQmMrKzk5L0xK
+SjU5UVZGVEVzbVhMR0Rac1dKWDZWaFNGcTFldjR1Ym1ocGVYRjhlT0hlT1hYMzZwOE4vcwoycldM
+dVhQbjh0bG5ueGxmQ3drSjRjS0ZDOFk5bHV2WHIvUDc3Ny9UcmwwNzZ0U3BRM0p5TXRldlgyZmx5
+cFdWWmhvelpneHhjWEZrClpXVUJtQ3g1UFdyVUtONTY2eTB5TXpNSkNBaW90SDFaVWxKU2pHc1g5
+ZS9mM3pndmtwR1J3ZmZmZjA5dWJpNWZmZlVWVVZGUjVPVGsKa0pXVlJmdjI3VGx6NWd5clY2OEdp
+dWVYN3JubkhwWXVYWXFpS09UbTVwS2RuVjNwOTZiUmFPalpzeWY3OSs4bk5UV1Z5NWN2czI3ZAp1
+akpQYURoeDRnUWRPM2JrSC8vNEI3Nit2blp4cnhKaFBWSXdoRlhkL0NFeWZmcDBMbDI2Wkh3K1k4
+WU0vdmpqRDdSYUxSY3VYR0RhCnRHbGwvcnRibjVmMTN1MjMzODd3NGNNSkNBaGcwcVJKNVo2S1d2
+Slg5YUpGaTdoeTVRcjMzSE1QV3EyV0o1OThFb0RQUHZ1TUpVdVcKMEsxYk4zcjE2c1hSbzBjQitP
+Q0REM2p4eFJlNSsrNjdDUXdNTFBQRFVhUFJHRjhmTVdJRW9hR2hSRVpHRWhBUXdLeFpzNHp0Um93
+WQp3VmRmZmNXRER6NW84bHBaN1cvdTgyWXJWNjRrSUNDQWtKQVFidHk0WWV6TDE5ZVhOV3ZXRUJR
+VVJFQkFBTkhSMGRTdlg1K1pNMmNTCkdocktxRkdqdVBmZWU0Mzl2UDc2Nnh3L2ZwekF3RUI2OSs1
+dFBQR2daTXp5eHE5VHB3N3Z2ZmNlbzBhTklpb3FpcTVkdTlLaFE0ZFMKN1JZc1dFRFhybDBKRFEz
+RjE5ZVhYcjE2bGZsekVZNUpGaDhVd2tHbHBxWXlkT2hROXUvZmI1UHhybCsvVHFOR2pjakl5R0RJ
+a0NGOAorT0dIZE83YzJTWmpDL3NnY3hoQ09EQmIzbkZ1OXV6WmJOeTRFVGMzTng1NTVCRXBGazVJ
+OWpDRUVFS1lSZVl3aEJCQ21FVUtoaEJDCkNMTkl3UkJDQ0dFV0tSaENDQ0hNSWdWRENDR0VXYVJn
+Q0NHRU1Ndi9BMkdrMllXcWd3ZTFBQUFBQUVsRlRrU3VRbUNDCg==
+</png>
+ </output>
+ </outputs>
+ </codecell>
+ </cells>
+ </worksheet>
+ </worksheets>
+</notebook>
View
176 docs/examples/newparallel/rmt/rmt.py
@@ -1,56 +1,146 @@
-#-------------------------------------------------------------------------------
-# Driver code that the client runs.
-#-------------------------------------------------------------------------------
-# To run this code start a controller and engines using:
-# ipcluster -n 2
-# Then run the scripts by doing irunner rmt.ipy or by starting ipython and
-# doing run rmt.ipy.
-
-from rmtkernel import *
-import numpy
+# <nbformat>2</nbformat>
+
+# <markdowncell>
+
+# # Eigenvalue distribution of Gaussian orthogonal random matrices
+
+# <markdowncell>
+
+# The eigenvalues of random matrices obey certain statistical laws. Here we construct random matrices
+# from the Gaussian Orthogonal Ensemble (GOE), find their eigenvalues and then investigate the nearest
+# neighbor eigenvalue distribution $\rho(s)$.
+
+# <codecell>
+
+from rmtkernel import ensemble_diffs, normalize_diffs, GOE
+import numpy as np
from IPython.parallel import Client
+# <markdowncell>
-def wignerDistribution(s):
+# ## Wigner's nearest neighbor eigenvalue distribution
+
+# <markdowncell>
+
+# The Wigner distribution gives the theoretical result for the nearest neighbor eigenvalue distribution
+# for the GOE:
+#
+# $$\rho(s) = \frac{\pi s}{2} \exp(-\pi s^2/4)$$
+
+# <codecell>
+
+def wigner_dist(s):
"""Returns (s, rho(s)) for the Wigner GOE distribution."""
- return (numpy.pi*s/2.0) * numpy.exp(-numpy.pi*s**2/4.)
+ return (np.pi*s/2.0) * np.exp(-np.pi*s**2/4.)
+# <codecell>
-def generateWignerData():
- s = numpy.linspace(0.0,4.0,400)
- rhos = wignerDistribution(s)
+def generate_wigner_data():
+ s = np.linspace(0.0,4.0,400)
+ rhos = wigner_dist(s)
return s, rhos
-
-def serialDiffs(num, N):
- diffs = ensembleDiffs(num, N)
- normalizedDiffs = normalizeDiffs(diffs)
- return normalizedDiffs
+# <codecell>
+
+s, rhos = generate_wigner_data()
+
+# <codecell>
+
+plot(s, rhos)
+xlabel('Normalized level spacing s')
+ylabel('Probability $\rho(s)$')
+
+# <markdowncell>
+
+# ## Serial calculation of nearest neighbor eigenvalue distribution
+
+# <markdowncell>
+
+# In this section we numerically construct and diagonalize a large number of GOE random matrices
+# and compute the nerest neighbor eigenvalue distribution. This comptation is done on a single core.
+
+# <codecell>
+
+def serial_diffs(num, N):
+ """Compute the nearest neighbor distribution for num NxX matrices."""
+ diffs = ensemble_diffs(num, N)
+ normalized_diffs = normalize_diffs(diffs)
+ return normalized_diffs
+
+# <codecell>
+
+serial_nmats = 1000
+serial_matsize = 50
+
+# <codecell>
+
+%timeit -r1 -n1 serial_diffs(serial_nmats, serial_matsize)
+# <codecell>
-def parallelDiffs(rc, num, N):
+serial_diffs = serial_diffs(serial_nmats, serial_matsize)
+
+# <markdowncell>
+
+# The numerical computation agrees with the predictions of Wigner, but it would be nice to get more
+# statistics. For that we will do a parallel computation.
+
+# <codecell>
+
+hist_data = hist(serial_diffs, bins=30, normed=True)
+plot(s, rhos)
+xlabel('Normalized level spacing s')
+ylabel('Probability $P(s)$')
+
+# <markdowncell>
+
+# ## Parallel calculation of nearest neighbor eigenvalue distribution
+
+# <markdowncell>
+
+# Here we perform a parallel computation, where each process constructs and diagonalizes a subset of
+# the overall set of random matrices.
+
+# <codecell>
+
+def parallel_diffs(rc, num, N):
nengines = len(rc.targets)
num_per_engine = num/nengines
print "Running with", num_per_engine, "per engine."
- ar = rc.apply_async(ensembleDiffs, num_per_engine, N)
- return numpy.array(ar.get()).flatten()
-
-
-# Main code
-if __name__ == '__main__':
- rc = Client()
- view = rc[:]
- print "Distributing code to engines..."
- view.run('rmtkernel.py')
- view.block = False
-
- # Simulation parameters
- nmats = 100
- matsize = 30
- # tic = time.time()
- %timeit -r1 -n1 serialDiffs(nmats,matsize)
- %timeit -r1 -n1 parallelDiffs(view, nmats, matsize)
-
- # Uncomment these to plot the histogram
- # import pylab
- # pylab.hist(parallelDiffs(rc,matsize,matsize))
+ ar = rc.apply_async(ensemble_diffs, num_per_engine, N)
+ diffs = np.array(ar.get()).flatten()
+ normalized_diffs = normalize_diffs(diffs)
+ return normalized_diffs
+
+# <codecell>
+
+client = Client()
+view = client[:]
+view.run('rmtkernel.py')
+view.block = False
+
+# <codecell>
+
+parallel_nmats = 40*serial_nmats
+parallel_matsize = 50
+
+# <codecell>
+
+%timeit -r1 -n1 parallel_diffs(view, parallel_nmats, parallel_matsize)
+
+# <codecell>
+
+pdiffs = parallel_diffs(view, parallel_nmats, parallel_matsize)
+
+# <markdowncell>
+
+# Again, the agreement with the Wigner distribution is excellent, but now we have better
+# statistics.
+
+# <codecell>
+
+hist_data = hist(pdiffs, bins=30, normed=True)
+plot(s, rhos)
+xlabel('Normalized level spacing s')
+ylabel('Probability $P(s)$')
+
View
36 docs/examples/newparallel/rmt/rmtkernel.py
@@ -2,43 +2,41 @@
# Core routines for computing properties of symmetric random matrices.
#-------------------------------------------------------------------------------
-import numpy
-ra = numpy.random
-la = numpy.linalg
+import numpy as np
+ra = np.random
+la = np.linalg
def GOE(N):
"""Creates an NxN element of the Gaussian Orthogonal Ensemble"""
m = ra.standard_normal((N,N))
m += m.T
- return m
+ return m/2
-def centerEigenvalueDiff(mat):
+def center_eigenvalue_diff(mat):
"""Compute the eigvals of mat and then find the center eigval difference."""
N = len(mat)
- evals = numpy.sort(la.eigvals(mat))
- diff = evals[N/2] - evals[N/2-1]
- return diff.real
+ evals = np.sort(la.eigvals(mat))
+ diff = np.abs(evals[N/2] - evals[N/2-1])
+ return diff
-def ensembleDiffs(num, N):
- """Return an array of num eigenvalue differences for the NxN GOE
- ensemble."""
- diffs = numpy.empty(num)
+def ensemble_diffs(num, N):
+ """Return num eigenvalue diffs for the NxN GOE ensemble."""
+ diffs = np.empty(num)
for i in xrange(num):
mat = GOE(N)
- diffs[i] = centerEigenvalueDiff(mat)
+ diffs[i] = center_eigenvalue_diff(mat)
return diffs
-def normalizeDiffs(diffs):
+def normalize_diffs(diffs):
"""Normalize an array of eigenvalue diffs."""
return diffs/diffs.mean()
-def normalizedEnsembleDiffs(num, N):
- """Return an array of num *normalized eigenvalue differences for the NxN
- GOE ensemble."""
- diffs = ensembleDiffs(num, N)
- return normalizeDiffs(diffs)
+def normalized_ensemble_diffs(num, N):
+ """Return num *normalized* eigenvalue diffs for the NxN GOE ensemble."""
+ diffs = ensemble_diffs(num, N)
+ return normalize_diffs(diffs)

0 comments on commit 18ad520

Please sign in to comment.
Something went wrong with that request. Please try again.