<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>LynxCatTheThird</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <icon>https://www.lynx3.me/favicon.ico</icon>
  <id>https://www.lynx3.me/</id>
  <link href="https://www.lynx3.me/" rel="alternate"/>
  <link href="https://www.lynx3.me/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, LynxCatTheThird</rights>
  <subtitle>I am LynxCatTheThird, an AGI from the 103rd century.</subtitle>
  <title>猫说 Meow</title>
  <updated>2025-11-02T14:45:11.000Z</updated>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="前端" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/"/>
    <category term="前端" scheme="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/"/>
    <content>
      <![CDATA[<h1 id="静态托管">静态托管</h1><div class="note warning flat"><p>优选是社区行为，请注意 TOS</p></div><p>静态托管的优化关键在于分配到更好的 IP。对于 Vercel、Netlify、Cloudflare 等厂商，分配到的 IP 往往不尽人意。分配到更好的 IP，就可以极大缓解不稳定的情况，并且大幅度提速。</p><h2 id="Vercel-Netlify">Vercel / Netlify</h2><p>先使用官方 CNAME 获取到 SSL 证书，然后换成：</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">vercel.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>vercel-cname.xingpingcn.top. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>netlify.cname.bee-zh.cn. <span class="comment">; cf_tags=cf-proxied:false</span></span><br></pre></td></tr></tbody></table></figure><p>由于 CNAME 的 IP 的质量并不能总是保持优质，需要隔三差五检查。</p><p>另有：</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">vercel.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>vercel.cname.bee-zh.cn. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>netlify-cname.xingpingcn.top. <span class="comment">; cf_tags=cf-proxied:false</span></span><br><span class="line">netlify.example.com.<span class="number">1</span><span class="keyword">IN</span><span class="keyword">CNAME</span>sth.netlify.com. <span class="comment">; cf_tags=cf-proxied:false</span></span><br></pre></td></tr></tbody></table></figure><h2 id="Cloudflare-Pages">Cloudflare Pages</h2><p>使用任意支持地域化解析的 DNS 供应商（可惜 Cloudflare 免费版不支持，可以 NS 到支持的，比如阿里），国外解析到 <code>sth.pages.dev</code>，国内解析到 <code>cf.877774.xyz</code></p><h2 id="Cloudflare-CDN">Cloudflare CDN</h2><p>使用 Cloudflare SaaS（Software as a Service, 软件即服务）中的自定义主机名功能，具体可参考<a href="https://www.bilibili.com/video/BV1SM4m1176E/">这个视频</a>，皮皮虾老师讲的非常清楚，鄙人不多赘述。</p><h1 id="单点服务器">单点服务器</h1><p>自托管服务器的网站问题则更大了。</p><h2 id="HSTS-Preload">HSTS Preload</h2><div class="note warning flat"><p>HSTS 配置错误可能会导致网站长期报废</p></div><p>由于 HTTP 不加密，首次访问可能会被劫持，没有机会建立 HTTPS 连接；若无 HSTS（HTTP Strict Transport Security，HTTP 严格传输安全），攻击者甚至还可以阻断 HTTPS 的连接。即使加上 HSTS 头，从一般用户角度来说，也往往需要首次的 HTTP。</p><p>那怎么办？加入 <code>HSTS Preload</code>（HSTS Preload List，HSTS 预加载列表） 列表（这个列表随着每次浏览器的发布而更新）后，你的网站会自动启用 HSTS，首次访问即为 HTTPS。代价就是 SSL 证书爆炸的话<strong>无路可退</strong>，只能等下一次浏览器发布的时候退出列表。</p><p>进入 preload 列表必须 <code>max-age ≥ 31536000</code> 且 <code>includeSubDomains</code> 且 <code>preload</code>。为了避免这个问题，建议从较小的 <code>max-age</code> 起递增。</p><p>加上这个头：</p><figure class="highlight http"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">Strict-Transport-Security</span><span class="punctuation">: </span>max-age=63072000; includeSubDomains; preload</span><br></pre></td></tr></tbody></table></figure><blockquote><p>Copy from <a href="https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts?hl=zh-cn">Google</a>：</p><p>max-age 指令用于指定用户浏览器必须仅使用 TLS 访问网站的时间量（以秒为单位）。一旦时间过去，如果网站未提供 HSTS 标头（或从 HTTP 到 HTTPS 的临时重定向），用户就可以再次通过纯 HTTP 访问该网站。</p><p>设置 includeSubDomains 指令会强制在最初发送标头的网页网址的<strong>任何子网域</strong>上使用该标头。例如，如果 <a href="http://google.com">google.com</a> 发送的 HSTS 标头包含 includeSubDomains 指令，则会在 <a href="http://mail.google.com">mail.google.com</a> 上强制执行 HSTS 标头。</p><p>设置 preload 指令并将网域提交给 <a href="https://hstspreload.org/">HSTS 预加载服务</a>后，系统会将该网域编译到使用预加载 HSTS 列表的浏览器二进制文件中。不仅 Google Chrome 如此，</p></blockquote><h2 id="泛解析">泛解析</h2><p>某一个域名的所有子域名指向同一个网站，一定程度上起到镜像站的作用。有些时候 ISP（Internet Service Provider，互联网服务提供商，也就是运营商） 不会下狠手，只会封禁一个子域名。</p><h2 id="DNSSEC">DNSSEC</h2><p>DNS 污染是对于小网站成本较低、伤害较大的一个招式。当受到大范围的 DNS 投毒时，上游的权威 DNS 都会受到污染，DoT 和 DoH 也无力回天。</p><p><a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">DNSSEC</a>（Domain Name System Security Extensions，域名系统安全扩展） 通过引入数字签名来确保 DNS 响应的真实性和完整性。哪怕攻击者劫持了 DNS，也难以伪造签名，这个错误的 DNS 解析结果会被拒绝。它确保了你的浏览器在发起 HTTP / HTTPS 请求时，连接的是正确、合法的服务器。</p><p>Cloudflare 提供免费的 DNSSEC，可以按照<a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">博客</a>开启。</p><h2 id="CAA">CAA</h2><p>CAA（Certificate Authority Authorization，证书颁发机构授权）是规定那些有权为域名签发证书的 CA（Certificate Authority，证书颁发机构） 的白名单。</p><figure class="highlight zone"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> issue "letsencrypt.org"</span><br><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> issue "pki.goog"</span><br><span class="line">example.com. <span class="keyword">CAA</span> <span class="number">0</span> issue "digicert.com"</span><br></pre></td></tr></tbody></table></figure><p>这可以有效防止黑 CA 或者 ISP 通过颁发假证书的方法进行攻击。如果 CA 胆敢违反 CAA 颁发证书，那么可能会被吊销执照。</p><h2 id="CT">CT</h2><p>但是，某些 ISP 掌握或者胁迫正规 CA 颁发证书，这个时候 <a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency">CT</a>（Certificate Transparency，证书透明度）就会出手。CT 会记录下每一张证书，方便进行审核。什么？你想不提交到 CT 来逃过审核？那这张证书会因为没有有效的 SCT（Signed Certificate Timestamp，证书签署时间戳）而被浏览器拒绝。</p><h2 id="OCSP-CRL">OCSP / CRL</h2><p>证书已经出问题了，怎么办？</p><ul><li>CRL（Certificate Revocation List，证书吊销列表）：CA 定期发布一个包含所有已吊销证书序列号的大列表，浏览器需要下载并检查。</li><li>OCSP（Online Certificate Status Protocol，在线证书状态协议）：浏览器向 CA 的 OCSP 服务器实时查询证书状况。</li><li>OCSP Stapling（OCSP Stapling，OCSP 装订）：网站服务器自己定期去查询 OCSP 状态，并将有效的 OCSP 响应与证书一起 “装订” 起来发给浏览器。这避免了浏览器自己去查询，减少了延迟和被 ISP 拦截的风险。但如果 ISP 是中间人，它也可以替换掉这个 “装订” 的响应。</li></ul><p>似乎装订 + 短期证书（90d）更有效，靠撤销长期证书有点亡羊补牢？</p><figure class="highlight nginx"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># https://ssl-config.mozilla.org/#server=nginx&amp;version=1.27.3&amp;config=modern&amp;openssl=3.4.0&amp;hsts=false&amp;guideline=5.7</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># OCSP stapling</span></span><br><span class="line"><span class="attribute">ssl_stapling</span> <span class="literal">on</span>;</span><br><span class="line"><span class="attribute">ssl_stapling_verify</span> <span class="literal">on</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment"># verify chain of trust of OCSP response using Root CA and Intermediate certs</span></span><br><span class="line"><span class="attribute">ssl_trusted_certificate</span> /path/to/root_CA_cert_plus_intermediates;</span><br><span class="line"></span><br><span class="line"><span class="comment"># replace with the IP address of your resolver;</span></span><br><span class="line"><span class="comment"># 这里我替换成了 1.1.1.1</span></span><br><span class="line"><span class="comment"># async 'resolver' is important for proper operation of OCSP stapling</span></span><br><span class="line"><span class="attribute">resolver</span> <span class="number">1.1.1.1</span>;</span><br><span class="line"></span><br><span class="line"><span class="comment"># If certificates are marked OCSP Must-Staple, consider managing the</span></span><br><span class="line"><span class="comment"># OCSP stapling cache with an external script, e.g. certbot-ocsp-fetcher</span></span><br><span class="line"></span><br></pre></td></tr></tbody></table></figure><div class="note info flat"><p><a href="https://letsencrypt.org/">Let's Encrypt</a> 的 CRL 域名在中国大陆遭到封禁，建议使用 <a href="https://docs.cloud.google.com/certificate-manager/docs/public-ca-tutorial?hl=zh-cn">Google Trust Services</a>。其验证服务器在国内有 CDN。</p></div><h1 id="通用">通用</h1><h2 id="ECH">ECH</h2><p><a href="https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/">ECH</a>（Encrypted ClientHello，加密客户端问候） 理论上可以保护隐私、对抗封禁。</p><h3 id="客户端">客户端</h3><p>Firefox 119 已经默认启用 ECH，Chrome / Edge 据说是 105 开始默认启用，总之最新的浏览器没问题的。启用浏览器内置的安全 DNS（Cloudflare、Google 等主流均可），然后尝试访问 <a href="https://tls-ech.dev/">https://tls-ech.dev/</a>，看到 <code>You are using ECH. :)</code> 就可以了。</p><h3 id="服务器">服务器</h3><p>Cloudflare CDN 免费版默认启用 ECH，Pages 似乎没有。</p><p>包括 <code>OpenSSL</code>、<code>Curl</code>、<code>Nginx</code> 等项目对于 ECH 的支持大多停留在实验阶段，故单点服务器难以上手。</p><p>你可以使用 <a href="https://dns.google/query?name=tls-ech.dev&amp;rr_type=HTTPS&amp;ecs=&amp;show_dnssec=true">Google Public DNS</a> 查询网站的支持情况，HTTPS 记录中包含 <code>ech=</code> 即可。</p><p>Firefox 用户还可以安装 <a href="https://github.com/27justin/ohmyech">oh-my-ech 插件</a>实时查看网站的 ECH 情况。</p><h2 id="CSP-与-SRI">CSP 与 SRI</h2><p>自己的网站百密无疏了，但是别忘了上游 CDN 投毒也是网络安全的重要话题。StaticFile、BootCDN、51LA 等都发生过投毒事件。</p><p>可以通过 CSP（Content Security Policy，内容安全策略）头限制资源加载：</p><figure class="highlight routeros"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">&lt;meta <span class="attribute">http-equiv</span>=<span class="string">"Content-Security-Policy"</span></span><br><span class="line">      <span class="attribute">content</span>=<span class="string">"default-src 'self'; script-src 'self' trusted.com"</span>&gt;</span><br></pre></td></tr></tbody></table></figure><p>通过 SRI（Subresource Integrity，子资源完整性）防止资源被篡改：</p><figure class="highlight routeros"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">&lt;script <span class="attribute">src</span>=<span class="string">"https://cdn.example.com/jquery.js"</span></span><br><span class="line">        <span class="attribute">integrity</span>=<span class="string">"sha384-..."</span></span><br><span class="line">        <span class="attribute">crossorigin</span>=<span class="string">"anonymous"</span>&gt;&lt;/script&gt;</span><br></pre></td></tr></tbody></table></figure><h1 id="鸣谢与引用">鸣谢与引用</h1><ol><li><a href="https://furries.fun/2025/02/04/over_the_isp_wall/">[矛与盾] 运营商封锁的原理以及 “低成本” 解决方案</a></li><li> Cloudflare：<ol><li><a href="https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/">https://www.cloudflare.com/zh-cn/learning/dns/dnssec/universal-dnssec/</a></li><li><a href="https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/">https://blog.cloudflare.com/zh-cn/announcing-encrypted-client-hello/</a></li></ol></li><li>Mozilla<ol><li><a href="https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency">https://developer.mozilla.org/zh-CN/docs/Web/Security/Certificate_Transparency</a></li><li><a href="https://ssl-config.mozilla.org/">https://ssl-config.mozilla.org/</a></li></ol></li></ol>]]>
    </content>
    <id>https://www.lynx3.me/article/7bd2ed19/</id>
    <link href="https://www.lynx3.me/article/7bd2ed19/"/>
    <published>2025-11-02T14:45:11.000Z</published>
    <summary>补药封禁我的网站了 QwQ</summary>
    <title>网站可用性优化指北</title>
    <updated>2025-11-02T14:45:11.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="数学" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E6%95%B0%E5%AD%A6/"/>
    <category term="数学" scheme="https://www.lynx3.me/tags/%E6%95%B0%E5%AD%A6/"/>
    <content>
      <![CDATA[<div class="note warning flat"><p>本文极为简略，仅作为学习笔记使用，许多证明步骤未写出．</p></div><h1 id="均值不等式">均值不等式</h1><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac><mo>≥</mo><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt></mrow><annotation encoding="application/x-tex">\frac{a+b}{2} \geq \sqrt{ab}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.1078em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span></span></span></span></p><p>这是高中数学课本上第一个重要的不等式，A 版教材称为基本不等式，B 版教材称为均值不等式．</p><p>其中，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{a+b}{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 称为算术平均值，<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{ab}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.1078em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span></span></span></span> 称为几何平均值．</p><h2 id="证明">证明</h2><p>画图中……</p><h2 id="变形">变形</h2><p>均值不等式有多个变形 / 推广形式，极其常用的有：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mi>b</mi><mo>≥</mo><mn>2</mn><msqrt><mrow><mi>a</mi><mi>b</mi></mrow></msqrt><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a+b \geq 2\sqrt{ab} \nobreakspace(a,b \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1822em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">ab</span></span></span><span style="top:-2.8922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1078em;"><span></span></span></span></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mi>b</mi><mo>≤</mo><mo stretchy="false">(</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow><mn>2</mn></mfrac><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">ab \leq (\frac{a+b}{2})^2 \nobreakspace(a,b \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8304em;vertical-align:-0.136em;"></span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><p>此外还有：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>+</mo><mfrac><mn>1</mn><mi>a</mi></mfrac><mo>≥</mo><mn>2</mn><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a+\frac{1}{a} \geq 2 \nobreakspace(a&gt;0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>+</mo><mfrac><mi>b</mi><mi>a</mi></mfrac><mo>≥</mo><mn>2</mn><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{a}{b}+\frac{b}{a} \geq 2 \nobreakspace(\frac{a}{b}&gt;0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2251em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8801em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord">2</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>2</mn><mi>a</mi><mi>b</mi><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi>R</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">a^2+b^2 \geq 2ab \nobreakspace(a,b \in R)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="mclose">)</span></span></span></span></p><h2 id="应用">应用</h2><p>均值不等式的应用有三个条件：</p><ol><li><strong>一正：</strong> 两个数均为正实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub></mrow><annotation encoding="application/x-tex">a,b \in R_+</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8917em;vertical-align:-0.2083em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span></span></span></span>．</li><li><strong>二定：</strong> 求和时积为定值，求积时和为定值．</li><li><strong>三相等：</strong> 等号能成立，即等号成立的条件能满足．</li></ol><h2 id="特殊情况：">特殊情况：</h2><h3 id="一不正">一不正</h3><p>条件一正没有满足即为一不正，又分为两种情况：</p><h4 id="一不正-2">一不正</h4><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 一正一负，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>b</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a &gt; 0, b &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><p>一不正时，均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，尝试将原式化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo>−</mo><mfrac><mi>p</mi><mi>x</mi></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>p</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x) = x-\frac{p}{x} \nobreakspace(p &gt; 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7475em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span> 的形式．此函数为飘带函数，随后便可以利用函数的单调性求解．</p><p><img src="https://s2.hdslb.com/bfs/article/f7bcd952b4d016afad33e106e51369381352440272.png@1e_1c.webp" alt=""></p><h4 id="二不正">二不正</h4><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 均为负实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>&lt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a,b &lt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><p>类似的，此时均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，提取 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">a,b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span></span></span></span> 的负号，利用均值不等式求解之后，再利用不等式的基本性质二恢复负号．</p><h3 id="二不定">二不定</h3><p>条件二定没有满足即为二不定．此时均值不等式不成立，无法利用均值不等式求解主要利用配凑的方法求解．又分为两种情况：</p><h4 id="求和积不定">求和积不定</h4><p>利用加减等方法凑出分母的倍数．</p><p>例：当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&gt;</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">x &gt; 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span> 时，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的最小值．</p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">(x-1)+\frac{4}{x-1}+1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>．检验 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x-1 &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{4}{x-1} &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> ，则有：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac><mo>+</mo><mn>1</mn></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><mn>2</mn><msqrt><mrow><mo stretchy="false">(</mo><mi>x</mi><mo>−</mo><mn>1</mn><mo stretchy="false">)</mo><mo>⋅</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow></msqrt><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>2</mn><msqrt><mn>4</mn></msqrt><mo>+</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    (x-1)+\frac{4}{x-1}+1    &amp;\geq 2\sqrt{(x-1)\cdot\frac{4}{x-1}}+1 \\    &amp;= 2\sqrt{4}+1 \\    &amp;= 5\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:5.5561em;vertical-align:-2.528em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.028em;"><span style="top:-5.028em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.9419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"></span></span><span style="top:-1.4419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.528em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.028em;"><span style="top:-5.028em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6099em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7693em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.5699em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8301em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-2.9419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.9561em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord">4</span></span></span><span style="top:-2.9161em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.0839em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">1</span></span></span><span style="top:-1.4419em;"><span class="pstrut" style="height:3.6099em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:2.528em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>−</mo><mn>1</mn><mo>=</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x-1 = \frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">x = 3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">3</span></span></span></span> 时，等号可以成立，得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>+</mo><mfrac><mn>4</mn><mrow><mi>x</mi><mo>−</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="application/x-tex">x+\frac{4}{x-1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2484em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 的最小值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>．</p><h4 id="求积和不定">求积和不定</h4><p>改变某一因式系数使和为定值．</p><p>例：当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>∈</mo><mo stretchy="false">(</mo><mn>0</mn><mo separator="true">,</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x \in (0,1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span> 时，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的最大值．</p><p>将 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 转化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mn>2</mn><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{1}{2}\cdot2x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span>．检验 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>x</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">2x &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6835em;vertical-align:-0.0391em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 且 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi></mrow><mi>x</mi></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{3-2x}{x} &gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mbin mtight">−</span><span class="mord mtight">2</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> ，则有：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mn>2</mn><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≤</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><msup><mrow><mo fence="true">[</mo><mfrac><mrow><mn>2</mn><mi>x</mi><mo>+</mo><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><mn>2</mn></mfrac><mo fence="true">]</mo></mrow><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo>⋅</mo><mfrac><mn>9</mn><mn>4</mn></mfrac></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>9</mn><mn>8</mn></mfrac></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    \frac{1}{2}\cdot2x(3-2x)     &amp;\leq \frac{1}{2}\cdot\left[\frac{2x+(3-2x)}{2}\right]^2 \\    &amp;= \frac{1}{2}\cdot\frac{9}{4} \\    &amp;= \frac{9}{8}\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:7.2189em;vertical-align:-3.3595em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.8595em;"><span style="top:-5.8595em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span><span style="top:-3.288em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"></span></span><span style="top:-0.9805em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.3595em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:3.8595em;"><span style="top:-5.8595em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="minner"><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size3">[</span></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.427em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size3">]</span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:1.654em;"><span style="top:-3.9029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.288em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">2</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">4</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-0.9805em;"><span class="pstrut" style="height:3.654em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">8</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">9</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.3595em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>x</mi><mo>=</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi></mrow><annotation encoding="application/x-tex">2x = 3-2x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span></span></span></span>，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mfrac><mn>3</mn><mn>4</mn></mfrac></mrow><annotation encoding="application/x-tex">x = \frac{3}{4}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">4</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 时，等号可以成立，得出 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo stretchy="false">(</mo><mn>3</mn><mo>−</mo><mn>2</mn><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x(3-2x)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">x</span><span class="mopen">(</span><span class="mord">3</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mclose">)</span></span></span></span> 的最大值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>8</mn><mn>9</mn></mfrac></mrow><annotation encoding="application/x-tex">\frac{8}{9}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">9</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">8</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．</p><h3 id="三不相等">三不相等</h3><p>此时均值不等式不成立，无法利用均值不等式求解．此时应放弃均值不等式，尝试将原式化为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi><mo>+</mo><mfrac><mi>p</mi><mi>x</mi></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>p</mi><mo>&gt;</mo><mn>0</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">f(x) = x+\frac{p}{x} \nobreakspace(p &gt; 0)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.1076em;">f</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.095em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7475em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0</span><span class="mclose">)</span></span></span></span> 的形式．此函数为对勾函数，其两个拐点一正一负，横坐标为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span> 和 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><msqrt><mi>p</mi></msqrt></mrow><annotation encoding="application/x-tex">-\sqrt{p}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3369em;"></span><span class="mord">−</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7031em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord mathnormal">p</span></span></span><span style="top:-2.6631em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3369em;"><span></span></span></span></span></span></span></span></span>，代入求值得出拐点坐标后便可以利用函数的单调性求解．</p><p><img src="https://s2.hdslb.com/bfs/article/15d7843ec7aab9e7e9ebdd6478fca2ef1352440272.png@1e_1c.webp" alt=""></p><h3 id="1-的代换">1 的代换</h3><p>1 的代换法是将代数式同时乘以 “1”，转化为均值不等式求解，通常是给出一个和，再求一个和的形式．</p><p>例：正数 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo separator="true">,</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">x,y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 满足 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>=</mo><mn>5</mn></mrow><annotation encoding="application/x-tex">\frac{3}{x}+\frac{1}{y} = 5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1901em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.3262em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>，求 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow><annotation encoding="application/x-tex">3x+4y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 的最小值．</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>1</mn><mo>⋅</mo><mo stretchy="false">(</mo><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo stretchy="false">)</mo><mo>⋅</mo><mo stretchy="false">(</mo><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>⋅</mo><mn>3</mn><mi>x</mi><mo>+</mo><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>⋅</mo><mn>4</mn><mi>y</mi><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>⋅</mo><mn>3</mn><mi>x</mi><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>⋅</mo><mn>4</mn><mi>y</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>+</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac><mo>+</mo><mn>4</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo>⋅</mo><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mn>4</mn><mo>+</mo><mn>2</mn><msqrt><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>⋅</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow></msqrt><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mo stretchy="false">(</mo><mn>9</mn><mo>+</mo><mn>4</mn><mo>+</mo><mn>12</mn><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    3x+4y    &amp;= 1\cdot(3x+4y) \\    &amp;= \frac{1}{5}\cdot(\frac{3}{x}+\frac{1}{y})\cdot(3x+4y) \\    &amp;= \frac{1}{5}\cdot(\frac{3}{x}\cdot3x+\frac{3}{x}\cdot4y+\frac{1}{y}\cdot3x+\frac{1}{y}\cdot4y) \\    &amp;= \frac{1}{5}(9+\frac{12y}{x}+\frac{3x}{y}+4) \\    &amp;\geq \frac{1}{5}\cdot(9+4+2\sqrt{\frac{12y}{x}\cdot\frac{3x}{y}}) \\    &amp;= \frac{1}{5}(9+4+12) \\    &amp;= 5\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:15.2531em;vertical-align:-7.3765em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:7.8765em;"><span style="top:-10.5909em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-8.6095em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-6.1076em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-3.6057em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:-0.8709em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:1.6362em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span><span style="top:3.4622em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:7.3765em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:7.8765em;"><span style="top:-10.5909em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-8.6095em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-6.1076em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose">)</span></span></span><span style="top:-3.6057em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">12</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mclose">)</span></span></span><span style="top:-0.8709em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.5544em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">x</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">12</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">3</span><span class="mord mathnormal">x</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8804em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.5144em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.8856em;"><span></span></span></span></span></span><span class="mclose">)</span></span></span><span style="top:1.6362em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3214em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">5</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mopen">(</span><span class="mord">9</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">4</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">12</span><span class="mclose">)</span></span></span><span style="top:3.4622em;"><span class="pstrut" style="height:3.5544em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:7.3765em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>当且仅当 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>=</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{12y}{x} = \frac{3x}{y}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2422em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8972em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.3262em;vertical-align:-0.4811em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 时，等号成立．联立方程：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mfrac><mn>3</mn><mi>x</mi></mfrac><mo>+</mo><mfrac><mn>1</mn><mi>y</mi></mfrac><mo>=</mo><mn>5</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mfrac><mrow><mn>12</mn><mi>y</mi></mrow><mi>x</mi></mfrac><mo>=</mo><mfrac><mrow><mn>3</mn><mi>x</mi></mrow><mi>y</mi></mfrac></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}    \frac{3}{x} + \frac{1}{y} = 5 \\    \frac{12y}{x} = \frac{3x}{y}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.7391em;"><span style="top:-3.7391em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">5</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8972em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">12</span><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">3</span><span class="mord mathnormal mtight">x</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4811em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2391em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>解得：</p><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mo fence="true">{</mo><mtable rowspacing="0.36em" columnalign="left left" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>x</mi><mo>=</mo><mn>1</mn></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>y</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac></mrow></mstyle></mtd></mtr></mtable></mrow><annotation encoding="application/x-tex">\begin{cases}    x = 1 \\    y = \frac{1}{2}\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:3em;vertical-align:-1.25em;"></span><span class="minner"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size4">{</span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.69em;"><span style="top:-3.69em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord">1</span></span></span><span style="top:-2.25em;"><span class="pstrut" style="height:3.008em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8451em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.19em;"><span></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></p><p>满足条件，可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>3</mn><mi>x</mi><mo>+</mo><mn>4</mn><mi>y</mi></mrow><annotation encoding="application/x-tex">3x+4y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em;"></span><span class="mord">3</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">4</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span></span> 的最小值为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>5</mn></mrow><annotation encoding="application/x-tex">5</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">5</span></span></span></span>．</p><h1 id="重要不等式">重要不等式</h1><h2 id="证明-2">证明</h2><p>由平方差公式：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup><mo>=</mo><msup><mi>a</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mi>a</mi><mi>b</mi><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">(a-b)^2 = a^2-2ab+b^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.0641em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.8141em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></p><p>并平方的性质：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">x^2 \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>可以得到：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mi>a</mi><mi>b</mi><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a^2-2ab+b^2 \geq 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>移项即可得：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>≥</mo><mn>2</mn><mi>a</mi><mi>b</mi></mrow><annotation encoding="application/x-tex">a^2+b^2 \geq 2ab</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9501em;vertical-align:-0.136em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord">2</span><span class="mord mathnormal">ab</span></span></span></span></p><p>可作为均值不等式的补充．</p><p>由于平方的性质中 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>∈</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">x \in R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span>，因此重要不等式的条件略有不同：</p><ol><li><strong>一实：</strong> 两个数均为实数，即 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo>∈</mo><mi>R</mi></mrow><annotation encoding="application/x-tex">a,b \in R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0077em;">R</span></span></span></span>．</li><li><strong>二定：</strong> 求和时积为定值，求积时和为定值．</li><li><strong>三相等：</strong> 等号能成立，即等号成立的条件能满足．</li></ol><h1 id="连续不等式">连续不等式</h1><p>均值不等式的全部如下：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>n</mi><mrow><mfrac><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></mfrac><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mn>2</mn></msub></mfrac><mo>+</mo><mo>⋯</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mi>n</mi></msub></mfrac></mrow></mfrac><mo>≤</mo><mroot><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>a</mi><mn>2</mn></msub><mo>⋯</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mroot><mo>≤</mo><mfrac><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mfrac><mo>≤</mo><msqrt><mfrac><mrow><msubsup><mi>a</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>a</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>⋯</mo><mo>+</mo><msubsup><mi>a</mi><mi>n</mi><mn>2</mn></msubsup></mrow><mi>n</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\frac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}} \leq \sqrt[n]{a_1 \cdot a_2 \cdots a_n} \leq \frac{a_1 + a_2 + \cdots + a_n}{n} \leq \sqrt{\frac{a_1^2 + a_2^2 + \cdots + a_n^2}{n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.487em;vertical-align:-0.7916em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.599em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">2</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2306em;"><span style="top:-2.3em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord mathnormal mtight">n</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4869em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7916em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3078em;"></span><span class="mord sqrt"><span class="root"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.4699em;"><span style="top:-2.7547em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size6 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3078em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.1634em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8184em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4101em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≤</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.84em;vertical-align:-0.4817em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3583em;"><span class="svg-align" style="top:-3.8em;"><span class="pstrut" style="height:3.8em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0916em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.5281em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.214em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.3183em;"><span class="pstrut" style="height:3.8em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.88em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.88em" viewBox="0 0 400000 1944" preserveAspectRatio="xMinYMin slice"><path d="M983 90l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5zM1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4817em;"><span></span></span></span></span></span></span></span></span>，其中：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>n</mi><mrow><mfrac><mn>1</mn><msub><mi>a</mi><mn>1</mn></msub></mfrac><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mn>2</mn></msub></mfrac><mo>+</mo><mo>⋯</mo><mo>+</mo><mfrac><mn>1</mn><msub><mi>a</mi><mi>n</mi></msub></mfrac></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{n}{\frac{1}{a_1} + \frac{1}{a_2} + \cdots + \frac{1}{a_n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.487em;vertical-align:-0.7916em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.599em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">1</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em;"><span style="top:-2.3448em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.6444em;"></span><span class="mord mtight">2</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2996em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.558em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mopen nulldelimiter sizing reset-size3 size6"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8443em;"><span style="top:-2.656em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2306em;"><span style="top:-2.3em;margin-left:0em;margin-right:0.1em;"><span class="pstrut" style="height:2.5em;"></span><span class="mord mathnormal mtight">n</span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2em;"><span></span></span></span></span></span></span></span></span></span><span style="top:-3.2255em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line mtight" style="border-bottom-width:0.049em;"></span></span><span style="top:-3.384em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4869em;"><span></span></span></span></span></span><span class="mclose nulldelimiter sizing reset-size3 size6"></span></span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7916em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 是调和平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mroot><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>a</mi><mn>2</mn></msub><mo>⋯</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mroot></mrow><annotation encoding="application/x-tex">\sqrt[n]{a_1 \cdot a_2 \cdots a_n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.04em;vertical-align:-0.3078em;"></span><span class="mord sqrt"><span class="root"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.4699em;"><span style="top:-2.7547em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size6 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7322em;"><span class="svg-align" style="top:-3em;"><span class="pstrut" style="height:3em;"></span><span class="mord" style="padding-left:0.833em;"><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="minner">⋯</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span><span style="top:-2.6922em;"><span class="pstrut" style="height:3em;"></span><span class="hide-tail" style="min-width:0.853em;height:1.08em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.08em" viewBox="0 0 400000 1080" preserveAspectRatio="xMinYMin slice"><path d="M95,702c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429c69,-144,104.5,-217.7,106.5,-221l0 -0c5.3,-9.3,12,-14,20,-14H400000v40H845.2724s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47zM834 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3078em;"><span></span></span></span></span></span></span></span></span> 是几何平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>+</mo><msub><mi>a</mi><mn>2</mn></msub><mo>+</mo><mo>⋯</mo><mo>+</mo><msub><mi>a</mi><mi>n</mi></msub></mrow><mi>n</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{a_1 + a_2 + \cdots + a_n}{n}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1634em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8184em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4101em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1645em;"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 是算术平均值，</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msqrt><mfrac><mrow><msubsup><mi>a</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>a</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>⋯</mo><mo>+</mo><msubsup><mi>a</mi><mi>n</mi><mn>2</mn></msubsup></mrow><mi>n</mi></mfrac></msqrt></mrow><annotation encoding="application/x-tex">\sqrt{\frac{a_1^2 + a_2^2 + \cdots + a_n^2}{n}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.84em;vertical-align:-0.4817em;"></span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.3583em;"><span class="svg-align" style="top:-3.8em;"><span class="pstrut" style="height:3.8em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0916em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.5281em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">1</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8051em;"><span style="top:-2.1885em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span><span style="top:-2.8448em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3115em;"><span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="minner mtight">⋯</span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7463em;"><span style="top:-2.214em;margin-left:0em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight">n</span></span></span><span style="top:-2.786em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.286em;"><span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.3183em;"><span class="pstrut" style="height:3.8em;"></span><span class="hide-tail" style="min-width:1.02em;height:1.88em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="1.88em" viewBox="0 0 400000 1944" preserveAspectRatio="xMinYMin slice"><path d="M983 90l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5zM1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4817em;"><span></span></span></span></span></span></span></span></span> 是平方平均值．</p><p>这个不等式链展示了不同平均值之间的大小关系．</p><h1 id="糖水不等式">糖水不等式</h1><p>一杯质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span> 的糖水含有质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span></span></span></span> 的糖分，易得该杯糖的质量浓度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．向杯中加入质量为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">c</span></span></span></span> 的糖，易得该杯糖水的质量浓度为 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．由常识即可得 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&lt;</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} &lt; \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span>．并由情境得：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mi>b</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a&gt;b&gt;0,c&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>．</p><h2 id="证明-3">证明</h2><p>作差：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>−</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} - \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></p><p>简化后得到：<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mrow><mi>c</mi><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><mrow><mi>b</mi><mo stretchy="false">(</mo><mi>b</mi><mo>+</mo><mi>c</mi><mo stretchy="false">)</mo></mrow></mfrac><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">\frac{c(a - b)}{b(b+c)} &gt; 0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.53em;vertical-align:-0.52em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.01em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span><span class="mclose mtight">)</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.485em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">c</span><span class="mopen mtight">(</span><span class="mord mathnormal mtight">a</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight">b</span><span class="mclose mtight">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.52em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span></p><p>所以不等式 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><mi>a</mi><mi>b</mi></mfrac><mo>&lt;</mo><mfrac><mrow><mi>a</mi><mo>+</mo><mi>c</mi></mrow><mrow><mi>b</mi><mo>+</mo><mi>c</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{a}{b} &lt; \frac{a+c}{b+c}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0404em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.6954em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2057em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8023em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">c</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span> 在 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>&gt;</mo><mi>b</mi><mo>&gt;</mo><mn>0</mn><mo separator="true">,</mo><mi>c</mi><mo>&gt;</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">a&gt;b&gt;0,c&gt;0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.0391em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">c</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">&gt;</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> 时成立．</p><h1 id="权方和不等式">权方和不等式</h1><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo>≥</mo><mfrac><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac><mtext>&nbsp;</mtext><mo stretchy="false">(</mo><mi>a</mi><mo separator="true">,</mo><mi>b</mi><mo separator="true">,</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo>∈</mo><msub><mi>R</mi><mo>+</mo></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\frac{x^2}{a}+\frac{y^2}{b} \geq \frac{x^2+y^2}{a+b} \nobreakspace(a,b,x,y \in R_+)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3629em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.415em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.4734em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace nobreak">&nbsp;</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">b</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0077em;">R</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.2583em;"><span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mbin mtight">+</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2083em;"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></p><h2 id="证明-4">证明</h2><p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.25em" columnalign="right left" columnspacing="0em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mo stretchy="false">(</mo><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo stretchy="false">)</mo><mo>⋅</mo><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mfrac><mrow><mi>b</mi><msup><mi>x</mi><mn>2</mn></msup></mrow><mi>a</mi></mfrac><mo>+</mo><mfrac><mrow><mi>a</mi><msup><mi>y</mi><mn>2</mn></msup></mrow><mi>b</mi></mfrac><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>≥</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><msqrt><mrow><mfrac><mrow><mi>b</mi><msup><mi>x</mi><mn>2</mn></msup></mrow><mi>a</mi></mfrac><mo>⋅</mo><mfrac><mrow><mi>a</mi><msup><mi>y</mi><mn>2</mn></msup></mrow><mi>b</mi></mfrac></mrow></msqrt></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>+</mo><mn>2</mn><mi>x</mi><mi>y</mi></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="true"><mrow><mrow></mrow><mo>=</mo><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><msup><mo stretchy="false">)</mo><mn>2</mn></msup></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{aligned}    (\frac{x^2}{a}+\frac{y^2}{b})\cdot(a+b)    &amp;= x^2+\frac{bx^2}{a}+\frac{ay^2}{b}+y^2 \\    &amp;\geq x^2+y^2+2\sqrt{\frac{bx^2}{a}\cdot\frac{ay^2}{b}} \\    &amp;= x^2+y^2+2xy \\    &amp;=(x+y)^2\end{aligned}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:7.9653em;vertical-align:-3.7327em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2327em;"><span style="top:-6.441em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mopen">(</span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span><span style="top:-3.7556em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span><span style="top:-1.8509em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span><span style="top:-0.3268em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7327em;"><span></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:4.2327em;"><span style="top:-6.441em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4911em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span><span style="top:-3.7556em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord sqrt"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6994em;"><span class="svg-align" style="top:-4.4em;"><span class="pstrut" style="height:4.4em;"></span><span class="mord" style="padding-left:1em;"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4171em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.4171em;"><span style="top:-2.314em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">b</span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.677em;"><span class="pstrut" style="height:3em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7401em;"><span style="top:-2.989em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.686em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span><span style="top:-3.6594em;"><span class="pstrut" style="height:4.4em;"></span><span class="hide-tail" style="min-width:1.02em;height:2.48em;"><svg xmlns="http://www.w3.org/2000/svg" width="400em" height="2.48em" viewBox="0 0 400000 2592" preserveAspectRatio="xMinYMin slice"><path d="M424,2478c-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514c0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20s-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121s209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081l0 -0c4,-6.7,10,-10,18,-10 H400000v40H1014.6s-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185c-2,6,-10,9,-24,9c-8,0,-12,-0.7,-12,-2z M1001 80h400000v40h-400000z"></path></svg></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.7406em;"><span></span></span></span></span></span></span></span><span style="top:-1.8509em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord">2</span><span class="mord mathnormal">x</span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span></span></span><span style="top:-0.3268em;"><span class="pstrut" style="height:3.6994em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">y</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8641em;"><span style="top:-3.113em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:3.7327em;"><span></span></span></span></span></span></span></span></span></span></span></span></p><p>利用不等式的基本性质二即可得到 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mfrac><msup><mi>x</mi><mn>2</mn></msup><mi>a</mi></mfrac><mo>+</mo><mfrac><msup><mi>y</mi><mn>2</mn></msup><mi>b</mi></mfrac><mo>≥</mo><mfrac><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup></mrow><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mfrac></mrow><annotation encoding="application/x-tex">\frac{x^2}{a}+\frac{y^2}{b} \geq \frac{x^2+y^2}{a+b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.3629em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.0179em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.394em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.415em;vertical-align:-0.345em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.4734em;vertical-align:-0.4033em;"></span><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.07em;"><span style="top:-2.655em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">b</span></span></span></span><span style="top:-3.23em;"><span class="pstrut" style="height:3em;"></span><span class="frac-line" style="border-bottom-width:0.04em;"></span></span><span style="top:-3.4461em;"><span class="pstrut" style="height:3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mbin mtight">+</span><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0359em;">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8913em;"><span style="top:-2.931em;margin-right:0.0714em;"><span class="pstrut" style="height:2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4033em;"><span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></p>]]>
    </content>
    <id>https://www.lynx3.me/article/d68048af/</id>
    <link href="https://www.lynx3.me/article/d68048af/"/>
    <published>2024-08-23T05:18:35.000Z</published>
    <summary>有点难诶……</summary>
    <title>四个重要的不等式</title>
    <updated>2024-08-23T05:18:35.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="Linux" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/Linux/"/>
    <category term="Linux" scheme="https://www.lynx3.me/tags/Linux/"/>
    <category term="Bug" scheme="https://www.lynx3.me/tags/Bug/"/>
    <content>
      <![CDATA[<h1 id="出发点">出发点</h1><ol><li>部分软件未针对 Arch Linux 进行适配，导致出现兼容性问题。</li><li>部分软件的默认配置不尽合理，或与每个人的情况不符，需要进行调整。</li><li>系统的部分行为不够合理，需要进行调整。</li></ol><h1 id="Alsa-的配置与兼容">Alsa 的配置与兼容</h1><p><a href="https://wiki.archlinux.org/title/Advanced_Linux_Sound_Architecture">Alsa</a> 是 Linux 声卡驱动程序，通常是 Linux 默认的声卡驱动程序。</p><p>ArchLinux 的 Alsa 包 似乎没有附带默认配置文件，因此难免遇到问题，此处以我自己用到的 ClassIn 为例。</p><h2 id="除去软件自带的错误的库">除去软件自带的错误的库</h2><p>由于 ClassIn 自带一部分 Alsa 库，导致 Alsa 无法正常工作，ClassIn 成了聋哑软件。</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib dlmisc.c:<span class="number">170</span>:(snd_dlsym_verify) unable to verify version for symbol snd_func_private_integer</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">4556</span>:(_snd_config_evaluate) symbol snd_func_private_integer is not defined inside (null)</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">5047</span>:(snd_config_expand) Evaluate error: 没有那个设备或地址</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">3694</span>:(snd_config_hook_load) Unable to expand filenames in the pre-load section</span><br><span class="line"><span class="attribute">ALSA</span> lib conf.c:<span class="number">3572</span>:(snd_config_hooks_call) function snd_config_hook_load_for_all_cards returned error: 没有那个设备或地址</span><br><span class="line"><span class="attribute">ALSA</span> lib control.c:<span class="number">1264</span>:(snd_ctl_open_conf) Invalid type for CTL default definition</span><br></pre></td></tr></tbody></table></figure><p>直接删除即可：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -rf /opt/apps/classin/lib/libasound.so*</span><br></pre></td></tr></tbody></table></figure><h2 id="调整配置文件">调整配置文件</h2><h3 id="指定设备">指定设备</h3><p>再次运行 ClassIn，仍然报错，并且找不到扬声器 / 耳机，只找到麦克风：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm_dmix.c:<span class="number">1000</span>:(snd_pcm_dmix_open) unable to open slave</span><br></pre></td></tr></tbody></table></figure><p>看起来是没找到设备，指定下就好了。</p><p>先找一下设备：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aplay -l</span><br></pre></td></tr></tbody></table></figure><p>输出类似如下内容：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">**** <span class="attribute">List</span> of PLAYBACK Hardware Devices ****</span><br><span class="line"><span class="attribute">card</span> <span class="number">1</span>: PCH<span class="meta"> [HDA Intel PCH], device 0: ALC897 Analog [ALC897 Analog]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br><span class="line"><span class="attribute">card</span> <span class="number">1</span>: PCH<span class="meta"> [HDA Intel PCH], device 1: ALC897 Digital [ALC897 Digital]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br><span class="line"><span class="attribute">card</span> <span class="number">2</span>: HDMI<span class="meta"> [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]</span></span><br><span class="line">  <span class="attribute">Subdevices</span>: <span class="number">1</span>/<span class="number">1</span></span><br><span class="line">  <span class="attribute">Subdevice</span> #<span class="number">0</span>: subdevice #<span class="number">0</span></span><br></pre></td></tr></tbody></table></figure><p>发现有两个 Card，分别是 <code>PCH</code> 和 <code>HDMI</code>，其中 <code>PCH</code> 卡有两个 Device，分别是 <code>ALC897 Analog</code> 和 <code>ALC897 Digital</code>，<code>HDMI</code> 卡有一个 Device <code>HDMI 0</code>。</p><p>编辑 <code>/etc/asound.conf</code> 文件，指定声卡。这里我添加如下内容：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">    device <span class="number">0</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>当然，也可以用设备名称来指定。</p><p>核实下设备名：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">aplay -l | awk -F \: <span class="string">'/,/{print $2}'</span> | awk <span class="string">'{print $1}'</span> | <span class="built_in">uniq</span></span><br></pre></td></tr></tbody></table></figure><p>输出如下内容：</p><figure class="highlight ebnf"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">PCH</span></span><br><span class="line"><span class="attribute">HDMI</span></span><br></pre></td></tr></tbody></table></figure><p>改写配置文件：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="type">PCH</span></span><br><span class="line">    device <span class="number">0</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="type">PCH</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>这样就指定了默认的声卡为 <code>PCH</code>。</p><h3 id="调节声道">调节声道</h3><p>再次运行 ClassIn，仍然报错，而且更糟糕的是输入输出都没有声音 —— 又成聋哑软件了：</p><figure class="highlight apache"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for CAPTURE: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br><span class="line"><span class="attribute">ALSA</span> lib pcm.c:<span class="number">8832</span>:(snd_pcm_set_params) Channels count (<span class="number">1</span>) not available for PLAYBACK: 无效的参数</span><br></pre></td></tr></tbody></table></figure><p>声道不太对，调整下配置文件：</p><figure class="highlight haskell"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">pcm</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> plug</span></span><br><span class="line">    slave.pcm <span class="string">"hw:1,0"</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="title">ctl</span>.!<span class="keyword">default</span> {</span><br><span class="line">    <span class="class"><span class="keyword">type</span> hw</span></span><br><span class="line">    card <span class="number">1</span></span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>这将使用 <code>plug</code> 插件自动转换音频参数以匹配设备的支持范围。</p><p>再次运行 ClassIn，声音设备正常了。</p><h3 id="后记">后记</h3><p>还有许多可以修改的，比如解决 Alsa 与 PulseAudio 的冲突，日后再补充……</p><h1 id="FontConfig-的美化">FontConfig 的美化</h1><p><a href="https://wiki.archlinux.org/title/Font_configuration">FontConfig</a> 是 Linux 字体管理器，负责管理系统中字体文件的搜索路径、渲染方式、字体匹配规则等。</p><p>FontConfig 默认配置对 CJK + 编程的应用场景来说并不友好，会遇到以下问题：</p><ol><li>CJK 字形错乱，简体中文、繁体中文、日文、韩文等字形混用</li><li>字体渲染效果不佳，缺少粗体、斜体等效果</li><li>终端设置等宽字体会导致 CJK 字符回退到宋体，设置 CJK 字体会导致等宽字体的错乱</li><li>缺失 Windows 下常用的字体（微软雅黑、黑体、宋体、Arial、Times New Roman、Courier New 等）导致显示效果不佳</li><li>默认的 <code>Sans</code>、<code>Serif</code>、<code>Monospace</code> 等字体不够美观，并且功能欠缺</li><li>ZSH 的符号字体显示效果不佳</li></ol><h2 id="懒人篇">懒人篇</h2><h3 id="安装字体">安装字体</h3><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sudo</span> paru -S noto-fonts noto-fonts-cjk noto-fonts-emoji noto-fonts-extra ttf-font-awesome ttf-nerd-fonts-symbols ttf-th-tshyn ttf-jetbrains-mono</span><br></pre></td></tr></tbody></table></figure><h3 id="调整配置文件-2">调整配置文件</h3><p>编辑 <code>~/.config/fontconfig/fonts.conf</code> 文件，添加以下内容：</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version='1.0'?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">fontconfig</span> <span class="keyword">SYSTEM</span> <span class="string">'urn:fontconfig:fonts.dtd'</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">fontconfig</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 拓宽系统字体设置生效面 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>system-ui<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>ui-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"same"</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 你可以自行添加更多字体设置 --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 字体替换  --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>宋体<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Microsoft YaHei<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>微软雅黑<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Arial<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"contains"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Source Code Pro<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- 你可以自行补充更多字体替换 --&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 等宽字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>monospace<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>JetBrains Mono<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Sans Mono CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 无衬线字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>sans-serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Sans CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 衬线字体顺序 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Serif CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="comment">&lt;!-- 渲染设置 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"not_eq"</span> <span class="attr">name</span>=<span class="string">"slant"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"matrix"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">times</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">name</span>&gt;</span>matrix<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;<span class="name">matrix</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>0.2<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>0<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                    <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">                <span class="tag">&lt;/<span class="name">matrix</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;/<span class="name">times</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>oblique<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embeddedbitmap"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">bool</span>&gt;</span>false<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"less_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>medium<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"more_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embolden"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"></span><br><span class="line">    <span class="tag">&lt;<span class="name">dir</span>&gt;</span>~/.fonts<span class="tag">&lt;/<span class="name">dir</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">fontconfig</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h2 id="解释">解释</h2><h3 id="字体家族">字体家族</h3><p>字体家族（family）是指一组字体，通常包括一个默认字体和一组备用字体。</p><p>在 FontConfig 中，字体家族的设置通过 <code>family</code> 选项来实现。这里以 <code>serif</code>（有衬线字体）字体家族为例，设置字体家族的优先级：</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"family"</span> <span class="attr">qual</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>serif<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">edit</span> <span class="attr">binding</span>=<span class="string">"strong"</span> <span class="attr">mode</span>=<span class="string">"prepend"</span> <span class="attr">name</span>=<span class="string">"family"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Serif CJK SC<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Noto Color Emoji<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Symbols Nerd Font<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">string</span>&gt;</span>Font Awesome 6 Free<span class="tag">&lt;/<span class="name">string</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><p>字体家族的优先级由上到下，越靠前的字体优先级越高。建议按照以下优先级设置字体家族：</p><ol><li>中文字体</li><li>英文字体</li><li>表情符号</li><li>Icon 字体</li></ol><p>设置字体家族后，系统会自动按照优先级匹配字体，从而有效解决问题 3、5、6。如果锁死使用某一字形，还可以粗暴但有效地解决问题 1。此外，若字体有多字重，搭配渲染设置可以解决问题 2。</p><h3 id="字体替换">字体替换</h3><p>比如上面覆盖 <code>宋体</code> 字体与<code>system-ui</code> 字体家族的配置，以解决问题 4。</p><h3 id="渲染策略">渲染策略</h3><p>直接使用默认配置就好了，有问题再二分法排查。啥？你没备份？我这有一份完全的默认的配置，注释都没删，罚你自己整理！</p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version='1.0'?&gt;</span></span><br><span class="line"><span class="meta">&lt;!DOCTYPE <span class="keyword">fontconfig</span> <span class="keyword">SYSTEM</span> <span class="string">'urn:fontconfig:fonts.dtd'</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">fontconfig</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!-- </span></span><br><span class="line"><span class="comment"> Artificial oblique for fonts without an italic or oblique version</span></span><br><span class="line"><span class="comment"> --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the font is roman --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the pattern requested non-roman --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"not_eq"</span> <span class="attr">name</span>=<span class="string">"slant"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>roman<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- multiply the matrix to slant the font --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"matrix"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">times</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">name</span>&gt;</span>matrix<span class="tag">&lt;/<span class="name">name</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">matrix</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>0.2<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>0<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">     <span class="tag">&lt;<span class="name">double</span>&gt;</span>1<span class="tag">&lt;/<span class="name">double</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">matrix</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;/<span class="name">times</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- pretend the font is oblique now --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"slant"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>oblique<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- and disable embedded bitmaps for artificial oblique --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embeddedbitmap"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>false<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> Synthetic emboldening for fonts that do not have bold face available</span></span><br><span class="line"><span class="comment"> --&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the weight in the font is less than medium which possibly need emboldening --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"less_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>medium<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- check to see if the pattern requests bold --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">test</span> <span class="attr">compare</span>=<span class="string">"more_eq"</span> <span class="attr">name</span>=<span class="string">"weight"</span> <span class="attr">target</span>=<span class="string">"pattern"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">test</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment">  set the embolden flag</span></span><br><span class="line"><span class="comment">  needed for applications using cairo, e.g. gucharmap, gedit, ...</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"embolden"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!--</span></span><br><span class="line"><span class="comment"> set weight to bold</span></span><br><span class="line"><span class="comment"> needed for applications using Xft directly, e.g. Firefox, ...</span></span><br><span class="line"><span class="comment">--&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"weight"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>bold<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"rgba"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>rgb<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"hinting"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"hintstyle"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">const</span>&gt;</span>hintslight<span class="tag">&lt;/<span class="name">const</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">dir</span>&gt;</span>~/.fonts<span class="tag">&lt;/<span class="name">dir</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">match</span> <span class="attr">target</span>=<span class="string">"font"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">edit</span> <span class="attr">mode</span>=<span class="string">"assign"</span> <span class="attr">name</span>=<span class="string">"antialias"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">bool</span>&gt;</span>true<span class="tag">&lt;/<span class="name">bool</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;/<span class="name">edit</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">match</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">fontconfig</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h3 id="后记-2">后记</h3><p>此外，还有一些高级的设置，比如：</p><ul><li>调整字体大小、粗细</li><li>根据语言自动调整字体</li><li>为某一程序调整字体</li><li>为某一字体调整渲染策略</li><li>根据应用场景自动调整渲染策略</li></ul><p>这些设置可以根据个人喜好进行调整。我对此没有需求，未做过研究，请参阅以下资料：</p><ul><li><a href="https://wiki.archlinux.org/title/Font_configuration">Arch Wiki: Font Configuration</a></li><li><a href="https://fontconfig.pages.freedesktop.org/fontconfig/fontconfig-user.html">FontConfig User Documentation</a></li><li><a href="https://catcat.cc/post/2021-03-07/">用 fontconfig 治理 Linux 中的字体 – 双猫 CC</a></li><li><a href="https://github.com/Bryan2333/Dotfiles/blob/master/.config/fontconfig/fonts.conf">Bryan2333/Dotfiles</a></li></ul>]]>
    </content>
    <id>https://www.lynx3.me/article/b5186965/</id>
    <link href="https://www.lynx3.me/article/b5186965/"/>
    <published>2024-07-24T09:32:40.000Z</published>
    <summary>Linux 的备忘录，记录 Linux 相关的一些问题和解决方案。</summary>
    <title>To Make Linux Better!</title>
    <updated>2024-07-24T09:32:40.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="刷机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/"/>
    <category term="刷机" scheme="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/"/>
    <content>
      <![CDATA[<div class="note warning flat"><p>除非您有把握，否则不建议随意调整手机默认的性能配置！默认的，往往是最好的！</p></div><h1 id="流畅度">流畅度</h1><h2 id="内存方向">内存方向</h2><p>对于 Android 11 + Magisk + LSPosed + 小而美 + QQ + etc. 来说，sdm660 + 4GB 已显捉襟见肘。对于小而美、QQ、B 站、抖音等软件，其本身优化就极差，再加一堆 XpHook，性能便更差了：不仅狂杀后台，而且时常会 OOM。怎么办呢？</p><h3 id="交换空间">交换空间</h3><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>本段教程尽力做到流畅和保后台之间平衡，但是由于 OPPO R11 内存实在偏小，不得不向保后台偏移。代价就是</p><ol><li>增多耗电，加剧发热</li><li>热启动变慢</li></ol></div><p>为了从源头上解决内存捉襟见肘的问题，我们可以使用交换空间。这里我使用使用 Scene 调节。</p><h4 id="ZRAM">ZRAM</h4><p>ZRAM 是在内存中划出一块来并对其进行压缩，详情可见 <a href="https://wiki.archlinuxcn.org/wiki/Zram">ArchWikiCN</a>。正因如此，ZRAM 设置不当会给 CPU 带来显著的压力，进而拉大耗电量、减少续航。</p><p>如果您只打算开 ZRAM，那么建议在 2GB 到 3GB（2048MB 到 3072MB）之间。过小作用不大，过大拉多耗电量。</p><h4 id="Swap">Swap</h4><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i><p>不可以只启用 Swap，这会严重拉慢磁盘 IO 与严重磨损磁盘！</p></div><h4 id="ZRAM-Swap">ZRAM+Swap</h4><p>ZRAM 建议在 1.5GB 到 2.5GB（1536MB 到 2560MB）之间，Swap 建议在 0.5GB 到 1.5GB（1024MB 到 1536MB）之间，并且当 Scene 提示交换策略时，选择优先使用 ZRAM。这样可以让新鲜的数据在较快的 ZRAM 里交换，而当 ZRAM 被榨干时则把脏数据写到 Swap 以备过后使用。</p><p><img src="https://s2.hdslb.com/bfs/article/20f11065f4af3fd39fe1100c57e465231352440272.png@1000h.webp" alt="效果图"></p><h4 id="VM-Parameters">VM Parameters</h4><p>将 swapiness 和 extra_free_kbytes 拉得较大。这样可以保证留有充足的 RAM 以防止 OOM。</p><h3 id="特殊版本">特殊版本</h3><h4 id="微信">微信</h4><p><s>微信版本复杂，建议参考<a href="https://gitee.com/ww3w/dzb/blob/master/1.md#-%E5%BE%AE%E4%BF%A1">百分之千 / 定制版应用收藏 / 版本拐点</a>选择，并从<a href="https://www.coolapk.com/feed/51351476">酷安老哥微笑渲染悲伤的帖子</a>里下载。</s></p><p><s>比较推荐的是 CN 7.0.21、Play 8.0.15、Play 8.0.33、CN 8.0.42。</s></p><p>不建议 OPPO R11 使用微信了，实在太卡。</p><h4 id="QQ">QQ</h4><p><s>建议用 9.0.8，可以从<a href="https://t.me/QQUpdates">QQUpdates</a>、<a href="https://t.me/qq_updatelog">QQ/TIM Update Log</a> 获得。9.0.15 和 9.0.17 有多人报道冷启动、小程序、扫码变慢。</s></p><p>时代变了，建议用 9.0.65，可以从<a href="https://t.me/QQUpdates">QQUpdates</a>、<a href="https://t.me/qq_updatelog">QQ/TIM Update Log</a> 获得。</p><h4 id="Others">Others</h4><p>请参考以下几个视频：</p><p><a href="https://www.bilibili.com/video/BV16P411P7QT/">安卓软件保姆级优化，让你的手机再战三年！</a></p><p><a href="https://www.bilibili.com/video/BV1r94y1T7Xa/">让老旗舰机重回新生？请收好这份养老软件指南！</a></p><h3 id="三方客户端">三方客户端</h3><p>对于某些热门软件，可能会有大佬用爱发电。传送门有：</p><ul><li><a href="https://github.com/bggRGjQaUbCoE/PiliPlus">PiliPlus</a>（哔哩哔哩）</li><li><a href="https://github.com/huajiqaq/Hydrogen">Hydrogen</a>（知乎）</li><li><a href="https://github.com/CeuiLiSA/Pixiv-Shaft">Shaft</a>（Pixiv）</li></ul><p>这些三方客户端有更为优秀的外观，更为可观的速度，以及某些诱人的功能。</p><h3 id="手动养老">手动养老</h3><p>对 QQ 微信等压力大的软件启动 Scene 监视器，随时监测硬件状况以逼迫自己养老，防止 OOM。</p><h2 id="CPU-方向">CPU 方向</h2><h3 id="通用">通用</h3><p>推介以下两件套：<a href="http://vtools.omarea.com/">Scene</a> <s>、<a href="https://moka.latestfile.zip/">Moka</a></s>。</p><p>Scene 可以调整 CPU~~，Moka 可以删除温控［注意：OPPO R11 一路下键即可，删不干净很正常，全删掉会有 Bug（比如爆音、打电话自动开免提、录屏时录不了系统内部声音）］~~，强烈不建议删除温控，而且移除温控之后毫无效果。</p><h3 id="三方调度">三方调度</h3><h4 id="Uperf-方案">Uperf 方案</h4><p>刷入 <a href="https://github.com/yinwanxi/Uperf-Game-Turbo">Uperf Game Turbo</a>、<a href="https://github.com/nakixii/Magisk_AsoulOpt">AsoulOpt</a></p><p>Uperf Game Turbo 可以较好地调节 CPU，使之在需要省电时省电、需要性能时高效。（注意：我们只需要 Uperf Game Turbo 的配置文件，而不需要其过分地教我们做事。为了避免其引起的一系列问题，请在刷入后将其禁用。）</p><p>AsoulOpt 可以调节线程，提高 CPU 效率。</p><p><img src="https://s2.hdslb.com/bfs/article/5b176872d9d21a056c214fb990aa0a881352440272.png@1000h.webp" alt=""></p><h4 id="CuprumTurbo-Scheduler-方案"><a href="https://github.com/chenzyadb/CuprumTurbo-Scheduler">CuprumTurbo Scheduler</a> 方案</h4><p>说这个东西可能令人眼前一黑，但如果说 CuToolBox，相信大多数人都耳熟能详。CuprumTurbo Scheduler 就是 CuToolBox 的模块版。</p><p>经过测试后发现其确实有助于提升流畅性；但未经长期测试，加之峰值功率与 Uperf Game Turbo 相比明显偏大，难以得出准确结论。</p><p><img src="https://s2.hdslb.com/bfs/article/589abf4ddc5824f1bcc037639c4391171352440272.png@1000h.webp" alt=""></p><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>安装 Tritium Fiage 前，请先卸载 Uperf 及其相关和衍生模块和 AsoulOpt，并关闭 Scene 的核心分配与高通的 Performance Boost Config。</p><p><img class="inline-img" src="https://s2.hdslb.com/bfs/article/b78cebe362474026d5abdcd637f6cba61352440272.png@1e_1c.webp" style="height:600px"><img class="inline-img" src="https://s2.hdslb.com/bfs/article/74af917c131fcdb2609cf48c4802f5a31352440272.png@1e_1c.webp" style="height:600px"></p></div><h4 id="Tritium-Fiage-方案">Tritium Fiage 方案</h4><p>Tritium Fiage 是基于 CuprumTurbo Scheduler 的修改版，可以从酷安的<a href="https://www.coolapk.com/u/3922059">鱼龄</a>那里下载。</p><p>启用后建议将性能模式设为默认。功耗基本不会变，但流畅度会好很多。</p><p><img src="https://s2.hdslb.com/bfs/article/8a224c202551da98cb6b8440784107621352440272.png@1000h.webp" alt="如图，极端场景（此处为连续刷 4K 视频）下功率仍不太高"></p><p><img src="https://s2.hdslb.com/bfs/article/e279516c9b215b5c4b438be2eb8416071352440272.png@1000h.webp" alt="功耗"></p><div class="note red icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>安装 Tritium Fiage 前，请先卸载 Uperf 及其相关和衍生模块和 AsoulOpt，并关闭 Scene 的核心分配与高通的 Performance Boost Config。</p><p><img class="inline-img" src="https://s2.hdslb.com/bfs/article/b78cebe362474026d5abdcd637f6cba61352440272.png@1e_1c.webp" style="height:600px"><img class="inline-img" src="https://s2.hdslb.com/bfs/article/74af917c131fcdb2609cf48c4802f5a31352440272.png@1e_1c.webp" style="height:600px"></p></div><div class="note orange icon-padding flat"><i class="note-icon fas fa-triangle-exclamation"></i><p>不必手动安装 cu_jank_detector.zip，启动不了。</p></div><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i><p>~~不要安装解除系统限制模块。这是与 Moka 重复的去温控模块，并且效果略差。~~不建议去除温控。</p></div><h2 id="Dex2oat">Dex2oat</h2><p>手动 dex2oat 可以提高冷启动速度并降低 CPU 和 RAM 占用，具体选哪一个模式请自行测试。</p><p><img src="https://s2.hdslb.com/bfs/article/67d3336ea1ab8de166b5263c41f0af711352440272.png@700h.webp" alt="编译过程"></p><h1 id="后台">后台</h1><div class="note green icon-padding flat"><i class="note-icon fas fa-circle-check"></i><p>这里假设您使用 ZRAM（2048MB）+Swap（1536MB）+Tritium Fiage（1.2.1） 方案！</p></div><div class="note red icon-padding flat"><i class="note-icon fas fa-ban"></i><p>后台优化后并不是可以放飞自我了；相反，留后台会显著加大 OOM 的风险，尤其是在 OPPOR11 等 RAM 吃紧的机型上，请务必适当设置交换空间，并合理使用！</p></div><h2 id="对非必要软件关禁闭">对非必要软件关禁闭</h2><p>使用小黑屋、雹等软件，以禁用方式冻结在后台死皮赖脸的软件。</p><h2 id="调节所有软件后台活动">调节所有软件后台活动</h2><ol><li>在 Thanox 的后台启动和后台运行中对<strong>用户应用</strong>设置<strong>全不</strong>，在任务清理和乖巧模式中设置<strong>全部</strong>，随后排除 Shizuku、输入法、三方 Widget 等常驻后台的软件。</li><li>切换过滤规则为系统，对软件商店等毒瘤适当设置。（我用类原生，没有经验，提供不了相关建议）</li><li>添加模板，仅打开任务清理和乖巧模式（仅点亮这两个开关，其他均灭掉），并启用自动配置</li></ol><h3 id="注意">注意</h3><ol><li>对咕噜咕噜 Play 服务、咕噜咕噜服务框架和咕噜咕噜商店的操作可能会导致其它软件无法调用咕噜咕噜相关服务</li><li>对下载器与浏览器打开乖巧模式会导致下载通知冻结</li><li>对浏览器打开后台运行而关闭任务清理可能会导致其一直在后台吃内存</li></ol><h2 id="为必要软件开小灶">为必要软件开小灶</h2><h3 id="接消息">接消息</h3><p>某些软件（比如微信 QQ 等通讯软件）要接消息，但如果一直挂后台占 RAM 太多，可在应用详情页：</p><ol><li>打开后台启动（否则开机不自启动）</li><li>打开后台运行、后台保护，关闭任务清理（否则频繁被杀死）</li><li>乖巧模式（减少后台占用）</li></ol><h3 id="监听">监听</h3><p>某些软件（比如 Robot36、Thanox 后台记录、Scene 动态切换、Shizuku）要能够一直执行下去并试试反应用户操作，还有一些软件（比如天气小组件）要频繁获取信息，可在应用详情页：</p><ol><li>打开后台启动（否则开机不自启动）</li><li>打开后台运行、后台保护，关闭任务清理、乖巧模式（否则频繁被杀死）</li></ol><h2 id="效果">效果</h2><p><img src="https://s2.hdslb.com/bfs/article/5e24560d4bcad132eb0a52fe3375f49d1352440272.png@700h.webp" alt="开机静置五分钟后"></p><p><img src="https://s2.hdslb.com/bfs/article/5e24560d4bcad132eb0a52fe3375f49d1352440272.png@700h.webp" alt="一边水 Q群，一边在微信聊天"></p><p><img src="https://s2.hdslb.com/bfs/article/12ff98d20468deb923a5c073ea5fe0c11352440272.png@700h.webp" alt="使用一个半小时，再静置半小时"></p>]]>
    </content>
    <id>https://www.lynx3.me/article/4097fa9/</id>
    <link href="https://www.lynx3.me/article/4097fa9/"/>
    <published>2024-07-11T15:00:00.000Z</published>
    <summary>类原生真好用～</summary>
    <title>旧手机优化计划之三 - 流畅、保活与省电</title>
    <updated>2025-02-22T14:54:55.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="刷机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/"/>
    <category term="刷机" scheme="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/"/>
    <content>
      <![CDATA[<h1 id="总述">总述</h1><p>本文将介绍三种主流 Root（Magisk、KernelSU、APatch）的安装，并介绍它们的一些技巧提示。</p><p>开始之前，请确保您已经刷入了 TWRP 3.7.0、<code>1170</code>底包的系统，并有且只有一种可用的 Root 方式。</p><h1 id="必备前置知识">必备前置知识</h1><h2 id="救砖">救砖</h2><ul><li><a href="https://kernelsu.org/zh_CN/guide/rescue-from-bootloop.html">救砖 | KernelSU</a></li><li><a href="https://apatch.dev/zh_CN/rescue-bootloop.html">救砖 | APatch Docs</a></li><li><code>logcat</code>、<code>dmesg</code>、<code>/proc/kmsg</code> 等抓取日志的方法</li><li>基本的 Git 知识</li></ul><h2 id="内核切换方法">内核切换方法</h2><p>切换、更新、修改内核有三种方法：</p><ol><li>从别人那里要来 boot.img 刷入</li><li>将内核镜像（.gz/.gz-dtb）用 AnyKernel3 刷入</li><li>将内核镜像（Image）用 magiskboot 打包入 boot.img 刷入</li></ol><h1 id="Magisk">Magisk</h1><h2 id="安装-Magisk">安装 Magisk</h2><ol><li>下载 Magisk 最新版 APK 文件，并安装到手机中。</li><li>打开 Magisk Manager，点击左上角的 “安装” 按钮，选择空白的 Boot 镜像文件，修补。</li><li>使用 TWRP 备份 Boot 分区，刷入修补好的 boot.img 到 Boot 分区，然后重启手机。</li><li>重启后会提示<code>需要修复环境</code>，不要点击修复，按返回键拒绝。选择安装，<strong>取消勾选</strong>“安装到 Recovery”，然后重启。</li></ol><h2 id="Magisk-注意事项">Magisk 注意事项</h2><ol><li>Wenhao 新版内核由于未知原因不适用 Magisk，将会导致手机随机重启入 EDL 模式或高通救援模式，并且无法使用微信视频通话和 QQ 视频通话，请勿尝试。</li><li>修复 Magisk 运行环境与更新 Magisk 时，<strong>务必取消</strong>勾选 “安装到 recvoery” 这个选项，高版本 Magisk （26.1+）会<strong>默认启用</strong>这个选项，错误刷入后会导致 WLAN 无法打开以及 Recovery 无法进入。<br>如果您不慎安装到了 Recovery，请提取卡刷包内的 boot.img 和 recovery.img 重新刷入对应分区，或者干脆重刷完整包。</li><li>“Ramdisk” 为 “否” 是正常的，是 R11 (s) 设备的特性，<strong>不</strong>影响 Magisk 功能。</li><li><s>使用 <code>Magisk Delta</code>（后改名 <code>Kitsune Mask</code>）将难以在除 <code>Kitsune</code> 自己的群组之外的社区得到技术支持，也不需要且无法使用 <code>Shamiko</code> 和 <code>ZygiskNext</code>（包括衍生）。</s> 不建议继续使用 <code>Kitsune Mask</code>，其不仅在社区内臭名昭著，而且已经停止更新。</li><li><code>Alpha</code> 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li></ol><h2 id="Magisk-技巧提示">Magisk 技巧提示</h2><ol><li>Magisk APK 相当于刷机包。当 Magisk 出现 “掉 Root 权限”“获取不到 Root 权限”“Zygisk 反复注入失败” 等问题，而三方 Recovery 又可用时，您可以通过将 Magisk.apk 重命名为 Magisk.<strong>zip</strong> 并刷入来修复。</li><li>Magisk 有多个 Fork，各 Fork 各有不同。若您想切换不同的的 Fork，除了在三方 Recovery 中刷入 Magisk.zip 外，还可以在已有的 Magisk Manager 中授予将要安装的 Magisk Manager Root 权限，并重新启动准备安装的 Magisk Manager。此时准备安装的 Magisk Manager 应当有 “无法获取版本信息”“必须重新安装”“修复运行环境” 等提示，重新安装即可。</li></ol><h1 id="KernelSU">KernelSU</h1><h2 id="安装-KernelSU">安装 KernelSU</h2><p>在第三方 Recovery 中把 <code>AnyKernel3-*.zip</code> 刷入即可</p><h2 id="KernelSU-注意事项">KernelSU 注意事项</h2><ol><li><s>KernelSU 在 1.x 版本中移除了 non-GKI 支持，因此不适用于 R11 设备。R11 设备请使用 0.9.5 及以下版本。</s> R11 作为 non-GKI 设备应当使用 <a href="https://github.com/rsuntk/KernelSU">RKSU</a></li><li>KernelSU 在 0.9.3 版本中更改了管理器检测方式，在 ColorOS 6 上会引起卡二屏。请使用 0.9.2 及以下版本。</li><li><s>安装模块超级慢的情况暂时无解。</s> <a href="https://github.com/5ec1cff/KernelSU">MKSU</a> 引入了 Magic Mount，可以缓解安装模块缓慢无比的情况。</li><li>KernelSU 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li><li>KernelSU 没有申请 Root 权限的机制。在授予应用程序 Root 后，应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限！</li><li><s>KernelSU 暂未有较好的隐藏挂载点泄漏的方法。</s> <a href="https://t.me/pzqqt_c/5837">不建议使用 susfs</a>。</li></ol><h1 id="APatch">APatch</h1><h2 id="安装-APatch">安装 APatch</h2><ol><li>下载 APatch 最新版 APK 文件，并安装到手机中。</li><li>打开 APatch Manager，点击右上角的 “安装” 按钮，选择空白的 Boot 镜像文件，修补。</li><li>使用 TWRP 备份 Boot 分区，刷入修补好的 boot.img 到 Boot 分区，然后重启手机。</li></ol><h2 id="APatch-注意事项">APatch 注意事项</h2><ol><li>更新 APatch 管理器后需进行两步更新：<ol><li>点击主页面更新以更新系统补丁（APatch）</li><li>重新修补并刷写 Boot 分区以更新 KernelPatch</li></ol></li><li>APatch 禁止在 Android 内修改 <code>/system</code>，介意勿用。但要知道：这十分有利于安全。</li><li>APatch 没有申请 Root 权限的机制。在授予应用程序 Root 后，应用程序在调用时会自动获取 Root 权限且无任何提示。请仅授予可信的应用程序 Root 权限！</li><li>若您使用了他人修补的 boot.img，务必重新设置密钥！</li><li>Scene 及其附属模块暂不支持 APatch，请勿尝试安装。</li></ol><h2 id="APatch-技巧提示">APatch 技巧提示</h2><ol><li>可通过使用内核模块 <a href="https://t.me/tbthoughts/25">Cherish Peekaboo</a> 隐藏一些挂载点。（作者：GarfieldHan，暂停更新）</li><li>可通过<a href="https://t.me/apatch_discuss/76157">特殊方法</a>使用 Shamiko，但非常不建议。（作者：GarfieldHan）</li></ol><h1 id="推荐学习">推荐学习</h1><h2 id="自己编译内核">自己编译内核</h2><p>如果您对已有的内核不满意，想要自己修改一下；或者等不及更新，按捺不住追版本号的激动，那下面的内容正合您胃口。</p><p>编译内核是一项较为浩大的工程，所以我们用 Github CodeSpace 编译。当然，您也可以选择本地计算机。但是，使用 CodeSpace 有相当的优势：</p><ol><li>自带完美的、几乎无性能损耗的 Ubuntu，免除安装、调试系统的烦恼</li><li>Ubuntu 是较为常规、通用、可靠的 Linux 发行版，有助于避免在一些小众发行版上的问题</li><li>编译内核很占 CPU、内存和磁盘 IO，会影响本地计算机的使用</li></ol><h3 id="启动！">启动！</h3><p>Fork 自己中意的仓库，建立它的 CodeSpace，各项配置拉满。</p><div class="note warning flat"><p>注意：对于不同的内核，您可能需要不同的编译器！</p></div><h3 id="环境搭建">环境搭建</h3><p>首先，您需要准备好编译环境。</p><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">环境搭建 1</button><button type="button" class="tab"> 环境搭建 2</button></div><div class="tab-contents"><div class="tab-item-content active"><p><s>选择一个合适的位置，下载 <a href="https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz">Linaro GCC 4.9</a> 或 <a href="https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+/refs/tags/android-9.0.0_r61">Google GCC Android 9</a>，记下路径。</s></p><p>GCC 老矣！</p></div><div class="tab-item-content"><p><s>选择一个合适的位置，<code>git clone https://github.com/kdrag0n/proton-clang</code>，记下路径。</s> Proton Clang 老了，让我们使用 <a href="https://github.com/ZyCromerZ/Clang">ZyC Clang</a>！</p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="环境变量">环境变量</h3><p>设置必需的环境变量。</p><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">环境搭建 1</button><button type="button" class="tab"> 环境搭建 2</button></div><div class="tab-contents"><div class="tab-item-content active"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> ARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> SUBARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$PATH</span>:/path/to/gcc/bin</span><br><span class="line"><span class="built_in">export</span> CROSS_COMPILE=aarch64-xxxxxxxxxx</span><br><span class="line"><span class="built_in">export</span> OPPO_TARGET_DEVICE=<span class="string">"MSM_nnnnn"</span> <span class="comment"># R11 MSM_16051，R11s MSM_17011</span></span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> ARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> SUBARCH=<span class="string">"arm64"</span></span><br><span class="line"><span class="built_in">export</span> PATH=<span class="variable">$PATH</span>:/path/to/clang/bin</span><br><span class="line"><span class="built_in">export</span> CROSS_COMPILE=aarch64-xxxxxxxxxx</span><br><span class="line"><span class="built_in">export</span> OPPO_TARGET_DEVICE=<span class="string">"MSM_nnnnn"</span> <span class="comment"># R11 MSM_16051，R11s MSM_17011</span></span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="编译">编译</h3><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 拉取子模块</span></span><br><span class="line">git submodule init</span><br><span class="line">git submodule update</span><br></pre></td></tr></tbody></table></figure><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">编译 1</button><button type="button" class="tab"> 编译 2</button></div><div class="tab-contents"><div class="tab-item-content active"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make O=out sdm660-perf_defconfig</span><br><span class="line">make -j$(<span class="built_in">nproc</span> --all) O=out 2&gt;&amp;1 | <span class="built_in">tee</span> kernel_log.log</span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">make O=out sdm660-perf_defconfig CC=clang</span><br><span class="line">make -j$(<span class="built_in">nproc</span> --all) O=out CC=clang 2&gt;&amp;1 | <span class="built_in">tee</span> kernel_log.log</span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h3 id="打包内核">打包内核</h3><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">打包内核 1</button><button type="button" class="tab"> 打包内核 2</button></div><div class="tab-contents"><div class="tab-item-content active"><ol><li>提取一个原版 <code>boot.img</code>，要求不带有 Magisk</li><li>回到 CodeSpace，依次展开目录 <code>./out/arch/arm64/boot/</code>，将 <code>Image</code> 下载下来备用</li><li>下载 Magisk.apk（适用于 Linux/，方法为解压后在 libs 里找到并提取 x86_64 的 <code>libmagiskboot.so</code>）或 <a href="https://github.com/PinNaCode/magiskboot_build/">magiskboot</a>（适用于 Windows），得到 <code>magiskboot</code> 备用</li><li><code>magiskboot unpack boot-origin.img</code></li><li>用 <code>Image</code> 替换掉 <code>kernel</code>，保持 <code>kernel</code> 名称不变</li><li><code>magiskoot repack</code>，刷入得到的 <code>new-boot.img</code></li></ol></div><div class="tab-item-content"><ol><li>回到 CodeSpace，依次展开目录 <code>./out/arch/arm64/boot/</code>，将 <code>Image-gz.dtb</code> 下载下来备用</li><li>下载一个 <a href="https://codeload.github.com/WenHao2130/android_kernel_oppo_sdm660_4.4.153/zip/refs/heads/prebuilt_ak3">AnyKernel3</a><br>注意文件夹结构！</li><li>用第一步得到的 <code>Image-gz.dtb</code> 替换掉 <code>AnyKernel3-*.zip</code> 里的 <code>Image-gz.dtb</code></li></ol></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h1 id="参考资料">参考资料</h1><ul><li><a href="https://github.com/WenHao2130/android_kernel_oppo_sdm660/tree/747c8b9cf5968d20f155e6e7853d56d3d2e1d77c/.github/workflows">WenHao2130/android_kernel_oppo_sdm660</a></li><li><a href="https://kernelsu.org/zh_CN/guide/how-to-integrate-for-non-gki.html">如何为非 GKI 内核集成 KernelSU | KernelSU</a></li><li><a href="https://github.com/tiann/KernelSU/discussions/950">[基础教程] 如何编译一个 ARM64 架构的自定义内核・tiann / KernelSU・Discussion #950</a></li><li><a href="https://github.com/tiann/KernelSU/discussions/952">[基础教程 2] 如何使用 AnyKernel 3 打包内核・tiann / KernelSU・Discussion #952</a></li><li><a href="https://apatch.dev/zh_CN/install.html">安装 | APatch Docs</a></li></ul><h1 id="拓展阅读">拓展阅读</h1><ul><li><a href="https://github.com/osm0sis/AnyKernel3">osm0sis/AnyKernel3: AnyKernel, Evolved</a></li><li><a href="https://source.android.com/docs/core/architecture/bootloader/dtb-images?hl=zh-cn">DTB 映像 &nbsp;|&nbsp; Android 开源项目 &nbsp;|&nbsp; Android Open Source Project</a></li></ul><h1 id="鸣谢">鸣谢</h1><ul><li><a href="https://github.com/Wenhao2130">Wenhao2130</a></li></ul>]]>
    </content>
    <id>https://www.lynx3.me/article/2a7bbe49/</id>
    <link href="https://www.lynx3.me/article/2a7bbe49/"/>
    <published>2024-07-11T05:18:32.000Z</published>
    <summary>类原生真好用～</summary>
    <title>旧手机优化计划之二 - Root</title>
    <updated>2025-11-12T15:15:55.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="刷机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%88%B7%E6%9C%BA/"/>
    <category term="刷机" scheme="https://www.lynx3.me/tags/%E5%88%B7%E6%9C%BA/"/>
    <content>
      <![CDATA[<p>作为一个信息学爱好者，怎么能不搞刷机呢？作为旧机型用户，我已经遭受绿厂迫害数年了。一气之下，我便把手机刷成了类原生（DotOS 5.2 Vanilla）。在使用了数月后，有了些许经验，分享一下。</p><h1 id="机型概况">机型概况</h1><p>机子是 2017 年发布的 OPPO R11，CPU 是骁龙 660 AIE，运存为 4GB，闪存是严重磨损的 eMMC 64GB。电池是原装的 3000mAh 的（现在只有 2200mAh 了）。</p><p>绿厂只给到 Android 9 ColorOS 6，连暗色模式都没有，根本满足不了我的需求。于是，我决定刷机。</p><p>OPPO R11 目前主要由 CY 团队维护，故绝大多数资源来自 <a href="https://d.cyteam.cn/">CY 团队的下载站</a>。分享链接有密码，请自行加群获取。</p><h1 id="刷机入门">刷机入门</h1><p>在此，我们需要明确几个定义：</p><ul><li><strong>底层</strong>：是指基本的驱动等最重要、最基本的文件，即 “底包”。R11 (s) 系列底包版本号多为 <code>X.nn</code>、<code>nnnn</code> 或 <code>nnnnnn</code> 格式。由于并不总是能够提供三种版本号，请自行辨别。</li><li><strong>系统</strong>：<ol><li>字面意义上的系统，包括全部可被刷写的分区</li><li>分区名，通常指 System 分区，可能同时也包括 Boot 分区和 Vendor 分区</li></ol></li><li><strong>A/C</strong>：为了避免歧义，本文中 Android 与 ColorOS 均使用全称而<strong>不</strong>简称为 A 或 C</li></ul><h2 id="解除-Fastboot-限制">解除 Fastboot 限制</h2><p>由于在大多数稳定版系统中 OPPO 对 fastboot 进行了限制，所以我们必须降级或升级至合适的版本进行解锁 BootLoader 的操作。</p><h3 id="无限制">无限制</h3><p>若您的版本号为 <code>A.01</code> / <code>170529</code> 或 <code>C.17</code> / <code>1170</code>，恭喜，Fastboot 畅通无阻，您可直接开始<a href="#%E8%A7%A3%E9%94%81-BootLoader">解锁 BootLoader</a>。</p><h3 id="升级">升级</h3><p>若您的版本号小于 <code>C.17</code> / <code>1170</code>，则可以下载 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E5%AE%98%E6%96%B9ROM%EF%BC%88Stock%20ROM%EF%BC%89/%E5%8D%A1%E5%88%B7%EF%BC%88Flash%20Through%20Recovery%EF%BC%89/R11_11_OTA_1170_all_PDZfMhjgV0q1_b68a39.ozip?sign=IY5sogNDdcsn_0Y7V9WT6SSAK73dy6YUPLk92BpdWnk=:0">R11_11_OTA_1170_all_PDZfMhjgV0q1_b68a39.ozip</a>，在<strong>自带</strong>文件管理中打开，升级至 <code>C.17</code> / <code>1170</code> 以解除限制。</p><h3 id="降级">降级</h3><p>相信决定对 OPPO R11 刷机的同学大多数应该更新到了比较新的系统版本吧？如果您的版本号为 <code>C.19</code> / <code>1190</code>，则必须采用降级法。由于此时手机处于严重受限状态，所以我们只能采用最底层的刷机方式 9008 刷机（这也是售后修手机的方法）进行降级操作。</p><ol><li>打上<a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%EF%BC%88Software%20Tools%EF%BC%89/%E9%A9%B1%E5%8A%A8%EF%BC%88Drive%EF%BC%89/CYteam-Services-Tools%20For%20Win10.exe">驱动</a></li><li>下载 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E5%AE%98%E6%96%B9ROM%EF%BC%88Stock%20ROM%EF%BC%89/%E7%BA%BF%E5%88%B7%EF%BC%88Flash%20Through%209008%EF%BC%89/R11_11_A.01_170529%EF%BC%889008%E7%BA%BF%E5%88%B7%E5%8C%85%EF%BC%8C11%E3%80%8111t%E5%8F%AF%E7%94%A8%EF%BC%89.7z?sign=EjY5LRISMx_UXC7jbayarsYXffcL_IEzOxuSgBCMpto=:0">R11_11_A.01_170529（9008 线刷包，11、11t 可用）.7z</a> 和 <a href="https://d.cyteam.cn/d/CY%E4%B8%8E%E6%A9%99%E6%A0%B9%E7%9B%AE%E5%BD%95/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R%26K%20Series/R11/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7%20%EF%BC%88Software%20Tools%EF%BC%89/%E5%88%B7%E6%9C%BA%E5%B7%A5%E5%85%B7%20(Flash%20Tool)/R11-MsmDownloadTool.exe?sign=hKnlxjiE602PHN3sgJpqSm_El2EMBhrUt5QAVEyPug8=:0">R11-MsmDownloadTool.exe</a>，选择对应代号（R11 的代号为 16051）；手机关机，同时按下<code>电源键</code> +<code>音量+</code>+<code>音量-</code> 进入 EDL（9008 模式），连接手机至电脑，按照提示刷入即可。</li><li>A.01，启动！</li></ol><p>切记保证数据线连接良好，慎防数据线意外松动。除此之外，基本不会出现什么问题。如果出现诸如 “握手失败”“握手超时” 之类的错误，请尝试重启电脑与手机、更换数据线或 USB 口、重装驱动，有条件的更换电脑。</p><h2 id="解锁-BootLoader">解锁 BootLoader</h2><ol><li>打开开发者选项<br>打开手机，进入设置，找到 “关于手机” 或 “关于设备” 选项，找到 “版本号” 或 “型号 “一栏，并连续点击数次（通常需要点击 7 次），开发者模式即可成功开启。</li><li>打开 OEM 解锁和 USB 调试开关</li><li>下载 <a href="https://developer.android.google.cn/tools/releases/platform-tools?hl=zh_CN">SDK Platform Tools</a>，并解压到合适的位置</li><li>手机连接电脑，重启到 fastboot（或执行 <code>adb reboot fastboot</code>），然后执行 <code>fastboot oem unlock</code>，终端应当提示 “unlocked”</li><li>重启，手机应当有一橙色感叹号（<code>&lt; ! &gt;</code>），提示 “数据有危险”，并要求你访问<code>g.co/ABH</code>。若有，则解锁成功。</li></ol><h2 id="刷入第三方-Rec">刷入第三方 Rec</h2><ol><li>手机连接电脑，重启到 fastboot（或执行 <code>adb reboot fastboot</code>）</li><li>电脑<a href="https://d.cyteam.cn/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R&amp;K%20Series/R11/%E7%AC%AC%E4%B8%89%E6%96%B9%E6%81%A2%E5%A4%8D%E6%A8%A1%E5%BC%8F%E9%95%9C%E5%83%8F%20(Third%20Party%20Recovery%20Image)">下载合适的 Recovery 镜像</a>，执行 <code>fastboot flash recovery twrp-x.x.x-xxxx.img</code></li></ol><h2 id="刷入第三方系统">刷入第三方系统</h2><ol><li>从<a href="https://d.cyteam.cn/%E6%89%8B%E6%9C%BA%E5%88%B7%E6%9C%BA/OPPO/R&amp;K%20Series/R11/%E7%AC%AC%E4%B8%89%E6%96%B9%E7%B3%BB%E7%BB%9F%E5%88%B7%E6%9C%BA%E5%8C%85%20(Third%20Party%20ROM)">第三方系统刷机包 (Third Party ROM)</a> 内下载喜欢的包</li><li>这些包大多是一体包，直接刷入就好</li></ol>]]>
    </content>
    <id>https://www.lynx3.me/article/d654e311/</id>
    <link href="https://www.lynx3.me/article/d654e311/"/>
    <published>2024-05-02T11:18:32.000Z</published>
    <summary>类原生真好用～</summary>
    <title>旧手机优化计划之一 - 刷机</title>
    <updated>2025-02-22T14:56:32.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="前端" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/"/>
    <category term="前端" scheme="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/"/>
    <content>
      <![CDATA[<p>在开始之前，有这么一个网站：<a href="https://files.lynx3.link/html/loading.html">https://files.lynx3.link/html/loading.html</a>。</p><p>这里面引入了五套字体，每套字体 3 个或 9 个字重，共计需要加载 1000 ～ 2000 个字体文件。那么，这个网页的速度与性能，会差到什么程度？</p><p>由此，我们引出本文的话题：如何优化网站速度？</p><h1 id="减少下载资源的数量">减少下载资源的数量</h1><p>更多的文件意味着更长的加载用时与渲染用时，因此应慎重引入。以 Butterfly 主题为例，若不必需某些组件（如 abcjs），则应将其关闭。若不明确某些功能（如 Layload）的利弊关系，则也不应轻易启用。常见的有：</p><h2 id="功能性附加组件">功能性附加组件</h2><p>附加组件包括 abcjs，Mermaid，Katex / MathJax，Aplayer，Firework 等。这些东西若非必需，不应以多多益善为由开启。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># eg.</span></span><br><span class="line"><span class="attr">aplayerInject:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><p>此外，还有诸如小挂件、弹窗等，同样有一定的性能需求，可能也会对页面带来负担。</p><h2 id="预加载">预加载</h2><p>在双方网速足够快时，开启它作用并似乎不明显。但对于部署于 Github Pages 等国外平台建议开启。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">instantpage:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h2 id="懒加载">懒加载</h2><p>在图床速度足够快时，开启它作用并不明显。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">lazyload:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><h1 id="调节动画">调节动画</h1><p>很多朋友为了网页美观性往往会添加加载动画，但正如前面所说，只要有一条资源有问题，就会阻塞整个加载动画，致使网页迟迟显示不出有效内容。纵使是非全屏式动画（pace_css），也仿佛在提示用户 “嘿！我还没加载完呢！” 十分影响观感，建议关闭。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">preloader:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure><p>但是开启转场动画可以掩盖加载时的闪烁，提高美观性。</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">enter_transitions:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><h1 id="优化图片">优化图片</h1><p>图片作为媒体的重头戏，在网页上不可或缺。随着图片体积的增大，图片所带来的负担也不容小觑。优化图片的要做的是减小体积，其方法有：</p><ol><li>手动降低分辨率、位深、色彩精度之类</li><li>使用工具进行无损或低损压缩<br>参见：<a href="https://butterfly.js.org/posts/4073eda/#%E5%9C%96%E7%89%87%E5%A3%93%E7%B8%AE">Butterfly 安裝文檔 (六) 進階教程 | Butterfly</a></li><li> 将 PNG，JPG 等格式转为 WeBP 或 Avif 格式<br>此类图片发布日期较新，有许多新技术以及新特征（比如在保证质量不太差的前提下，最大程度压缩体积），适合网页使用</li><li>将 Gif 换用 APNG 或 MP4<br>Gif 不仅体积巨大，质量差，渲染还十分费力，不如直接用视频</li></ol><h1 id="保证资源加载畅通">保证资源加载畅通</h1><h2 id="保证性能良好">保证性能良好</h2><p>在引用资源前，应确保来源稳定可靠。若其速度不稳定或服务时好时坏，可能会导致卡加载动画或卡白屏。</p><p>应对资源和服务进行维护、监控或选择可靠的来源，引入前应进行<a href="https://itdog.cn/">多地 Ping / HTTP 测试</a>，确保多地访问通畅。</p><p>若确因资金、政策、网络环境等原因不能保证服务时时可用，可用备用 URL 或 IP 属地判断等技术缓解。具体按可以参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p><h2 id="使用合适的-CDN">使用合适的 CDN</h2><p>打个比方，假如在上海收快递时，件儿从苏州还是美国发过来快？显然是苏州！CDN 也同理。市面上常用的公益 CDN（JSDelivr，&nbsp;UNPKG，CDNJS）等多没有大陆节点，使用此类 CDN, 数据包往往要漂洋过海从大洋彼岸发过来，速度堪忧。</p><p>以 Butterfly&nbsp; 为例，可在配置中将 CDN 来源设为 custom 以使用可靠的国内 CDN：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">CDN:</span></span><br><span class="line">  <span class="attr">third_party_provider:</span> <span class="string">custom</span></span><br><span class="line">  <span class="attr">custom_format:</span> <span class="string">https://registry.npmmirror.com/${name}/${version}/files/${file}</span></span><br></pre></td></tr></tbody></table></figure><p>其它一些优秀的公益 CDN：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Custom format</span></span><br><span class="line"><span class="comment">## NPM(推荐，CDNJS 并不总是提供最新版本的包)</span></span><br><span class="line"><span class="comment"># custom_format: https://cdn.jsdmirror.com/npm/${name}@${version}/${file}</span></span><br><span class="line"><span class="comment"># custom_format: https://npm.webcache.cn/${name}@${version}/${file}</span></span><br><span class="line"><span class="attr">custom_format:</span> <span class="string">https://registry.npmmirror.com/${name}/${version}/files/${file}</span></span><br><span class="line"><span class="comment"># custom_format: https://npm.akass.cn/${name}@${version}/${file}</span></span><br><span class="line"><span class="comment">## CDNJS</span></span><br><span class="line"><span class="comment"># custom_format: https://s4.zstatic.net/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br><span class="line"><span class="comment"># custom_format: https://cdnjs.webstatic.cn/ajax/libs/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br><span class="line"><span class="comment"># custom_format: https://sf.akass.cn/${cdnjs_name}/${version}/${min_cdnjs_file}</span></span><br></pre></td></tr></tbody></table></figure><p>若国内源无法包含所有所需文件，还可以给某资源设定单独链接。例如：</p><figure class="highlight yml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">CDN:</span></span><br><span class="line">  <span class="attr">option:</span></span><br><span class="line">    <span class="attr">busuanzi:</span> <span class="string">https://cn.vercount.one/js</span></span><br></pre></td></tr></tbody></table></figure><p>若站点面向全球用户，则可选择 CDN 竞速等策略。具体按可以参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p><h1 id="压缩文件">压缩文件</h1><p>HTML/JS/CSS 文件中的回车、部分空格、注释等仅起提高可读性的作用，却仍占用相当大体积，因此应将其删去。</p><h2 id="Gulp">Gulp</h2><p>参见<a href="https://kmar.top/posts/7d9fb37e/">网站加载速度优化方案总结 | 山岳库博</a></p><h2 id="Hexo-插件">Hexo 插件</h2><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">方案 1</button><button type="button" class="tab"> 方案 2</button></div><div class="tab-contents"><div class="tab-item-content active"><p>参见 <a href="https://argvchs.github.io/2022/08/27/hexo-minify-static-files/">Hexo 压缩静态文件 | Argvchs の小窝</a></p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-html-minifier hexo-clean-css hexo-uglify --save</span><br></pre></td></tr></tbody></table></figure><p>在博客目录下 <code>_config.yml</code> 添加如下配置：</p><figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">uglify:</span></span><br><span class="line">  <span class="attr">mangle:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">output:</span></span><br><span class="line">  <span class="attr">compress:</span></span><br><span class="line">  <span class="attr">exclude:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">"*.min.js"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">clean_css:</span></span><br><span class="line">  <span class="attr">exclude:</span></span><br><span class="line">    <span class="bullet">-</span> <span class="string">"*.min.css"</span></span><br><span class="line"></span><br><span class="line"><span class="attr">html_minifier:</span></span><br><span class="line">  <span class="attr">collapseBooleanAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">collapseWhitespace:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">ignoreCustomComments:</span> [<span class="type">!!js/regexp</span> <span class="string">/^\s*more/</span>]</span><br><span class="line">  <span class="attr">removeComments:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeEmptyAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeScriptTypeAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">removeStyleLinkTypeAttributes:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">minifyJS:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">minifyCSS:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure></div><div class="tab-item-content"><p>curbengh 的 <code>hexo-yam</code> 插件</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-yam --save</span><br></pre></td></tr></tbody></table></figure><p>在博客目录下 <code>_config.yml</code> 添加如下配置：</p><figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">minify:</span></span><br><span class="line">  <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">previewServer:</span> <span class="literal">true</span></span><br><span class="line">  <span class="attr">html:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">  <span class="attr">css:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">  <span class="attr">js:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">exclude:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.min.js"</span></span><br><span class="line">  <span class="attr">svg:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.svg"</span></span><br><span class="line">  <span class="attr">gzip:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">brotli:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">  <span class="attr">xml:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.xml"</span></span><br><span class="line">  <span class="attr">json:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">true</span></span><br><span class="line">    <span class="attr">include:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">"*.json"</span></span><br><span class="line">  <span class="attr">zstd:</span></span><br><span class="line">    <span class="attr">enable:</span> <span class="literal">false</span></span><br></pre></td></tr></tbody></table></figure></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h1 id="缓存">缓存</h1><p>部分服务器是没有缓存功能的，这意味着每次访问都需要从服务器下载资源，既浪费流量，又拉长加载时间，而 ServiceWorker 就解决了这一难题。ServiceWorker 可以对缓存进行合理调度，减少内容的下载量，对于速度提升十分明显。</p><p>具体部署过程此处不多讲，请参见 <a href="https://github.com/EmptyDreams/hexo-swpp">hexo-swpp</a>、 <a href="https://kmar.top/posts/b70ec88f/">Swpp Backends 官方文档</a> 和<a href="https://github.com/lisuid2/hexo1/blob/main/sw-rules.js">一份新版配置文件</a>。</p>]]>
    </content>
    <id>https://www.lynx3.me/article/a63f345a/</id>
    <link href="https://www.lynx3.me/article/a63f345a/"/>
    <published>2023-07-17T00:00:30.000Z</published>
    <summary>慢死了啊啊啊啊啊啊！</summary>
    <title>网站速度优化指北</title>
    <updated>2025-02-21T15:01:30.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="前端" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/"/>
    <category term="前端" scheme="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/"/>
    <content>
      <![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="抱歉, 这个密码看着不太对, 请再试试。" data-whm="抱歉, 这个文章不能被校验, 不过您还是能看看解密后的内容。">  <script id="hbeData" type="hbeData" data-hmacdigest="42a454e2688e8691207cac00c9713725a7140963f5042028ac8491395507aee8">8c83c1fd70b2001f095a68c8e758fb295c4f063044f716f40246118917c673cb7535dca42f32ee2700deb3ede0e2a9f20cb6a61a3960fcc735619bb49ccdbe381b3931fc27882f153b5b5992b5d4e62cf4e5d3ba0be83d9f8a898e1aa10c80d6902a9c5f876125b8b356e0c21577ba9a1a692f02d74def7ba98580071cac912907dbd0f8b7834e62a6007ce10d543c12c30aba1aad581c4223ec924d21908482cb0cc2ac8ad66a2a8a185f8b50966e1ff60c6590e2f48a94ce5cdd5f5c5479ba59d3b3e2eaee9fbbb20f8d22379b9f53a25d87067e42461bf761acc8dd2f7c9fd53ec17c8d1dbee7768c76f3a3b6e2315651ef1c1d514f36e49b9268887c57ce3bbef38e8a769b8fdc36bf475fd181f94984d35a5de3227f08717113b15dcc8f068930ea5766d469ab67be8382052d3ca071efce322920ffa6e46c6c396bad6fec0dc5e4ac0f951f33bd64d4e6567167b1e6607faa42874026c98c37389b6a71abc8794f12da2f9319dfc514ce31269ac7ad519bef71d868202df1cd689018bf94ec0b077b5fac90cfb2c70c27fe7aed7628a9162731a1e87b35142cfc8f27ed2f3a1bd088cfb082a3dd7e07c374899fdbef6b61b9c46538f1ceed3fbe07ebf1064b9e5c79e3a2baebfef7a6419766950a3afb8fc3cc5631a8b2e8d7597b1b101774b92db9a12815b66f096d5a8209c9ad975afa28cbcd3e4a79eecd80540301128624a908d5857bdb133d9e738db2c859bf574548421c97700dd5809fc5da72c28ded5705a47eb230dcb27a53566cb9344f9fda59bac71d6ecae48da990ae9229175966009a0b12af1c9e102b57d914cf9667c61d62e313dc537bc2a5aee91ad548b50bfd2e6a56da77e0fdf03bbb4689861685311028e5bfde03fc2355bc7aabff5211c4bf6d6c3ef2663e2eda01cf1835d56994ef6eb5a0ab828d1414ea8ab4445331e41c67a8775c632468e234be1b07be25b60efe512a0e0e0e8aded8430265858fb2a774b859e7d3d504350d12ff914499f481742d2f9fde069344c22707136db07974870253802b3a1d87e36a98dabd4cc4316598cebc3d0de46c17e4b779f45c5e33325e2597f8af85572bd6945958770d6bdb7bed90b4996ee6a4be8169ee4ae9009491412bed469a6276b38ac762f8ee2a8edb85caf40804a1d25e6c9b58e942c826af4b9009d9016dd6888fc4ee6df95ccc2e0fac2240d004319e140f33fd2fec1b13fec32d93efc456d29eb522698450086a223bb754da71af0bbcdbd29ad5c7be388fb0ed43b509820175e0d0a69ba295cea3a7d1cb289f5d37667c50d6e84af4f54df826afb1a4724267234a6f814504ec1d0eccb8dbe05cb551f96693cd5de28dd8d1b7a00d545696a315d11cae8cf908d8612dd6c7140d2806d52ef9739a0a33869807d04bc66b69e8addee8129b0b516b6b247cf8f9a7f24e9bb562679f2260924c360291b848e9536e0f65a28c9e152a1e8d5587626d559e873986442bde69739e205bf78c9c69cce0096e1112c9f4bdf36419421dedeb06d849206a76fee2b77518ea9b946eebd11c8a98231f68d607c5f34ba0497bf7301a7b19c8a2f51f7037885d5cc20c83b7b6235c9d2b4856b3a1bd0fcf59be38ae52c99566aedf708beabb94d324ab9d2126bd2856db954a7bb590ab9b7930d453abe2d56768d4095c669f732d64378e597259a754f55664ad21fc0b3c2d6b73d1d84cea8d7d06dda696fb656235f3cba6000438cd4d22f4ba2d786b8db3e77a316dcda16552ca69bb255e40d12ac5b2be6fa2756eecda76fb3ab35cec780fa3bd62cd9bc4b289aca0f3f07d50b6f0f5c46c5a39f721d38c145a8665aae10c1a7e0366f67a46801041d81ef3d85492fc202577048e540bbf0f6260f23284d431b937c19e06a1adfa3cacaa165e77262e7a5f7d8cb396bf351dc831d5bb0160593714004d4de5f11fb52f707bfcfc534246b6206967c0acd91899d06b64a1b9a7b24c7525bd350510eee056150291446f512daddd0b9852f3d04ee77ed30b158cd2a801eaddcbaf452a4d454570a3fe8607e45f79da38d13f0093f420f997255478d223c577768da9486a6050860061f6a4c980bb981830893001a53261d3d2276c9f7f2f5521dafea8b3ed31dd9b52d0c9c41f11f6fd1ae385d4c101ceb7b3b9cc30610784117426033ac0d12dd414fe5af6d0eef6756a18c51677b4f1a847e99eef5b65c2e2d62cf918c10716260dcce48619e1939b55c670701209c53aaeb08de94a99e54027a82ca36e76179142cbaa8f831d08f3022c2d072044ad8dca26def0a1cfb9da997b93d488f0862f03cfed60d2fe084a3219d1823d6f46462fc25931592801b84f5de606a4985ad416ab9aeb150903c92a83786a376ded59f5e731f056d821ef54887f49cb1b8ee6427e9ea7b5cf196744667a3413b8ea6d329bc683736279ee34b6dca1689776b62802a07fc76433a24851db43ef7a84a48664be682e50f925d86a0890beb88b202bccd27a63c07358427d6966d610f905ad78e1200da1a0713fd5fcb8e0ff03d120e3954499f32f61b554e4ce39616685b8c8ce691bc59a91db3508019b956a1aa7776c43f3bca0c86bd9a5b7a69c8f171ba38ca218b8c98b8bc5145858a09a03d85525f329445a65c01e6957e0f46ddfe0186fc4a11ab3e3d28ecdb9a7a1fed132b809697bce6e015de7f975e904d34c4b49227a9d91f8124054f97ab2b3fd41fec3930091771f4b40a3a607719f91e944b573cf7b0655cfccf67ebc0082176234e11b7072e9049aa375379fb099c5df2b0c085f55fca9a8243c12ca48fdd2547f17977db7f2352edd63c0965eb0c963d494a57acd5f0f9c6bafcb1d1940946c7b0f6f1f5b572d92c09cc7702687763330a34e640a234e29aba5315499e8b841abed4df9bbdf96db71deef4cc08317582ab51f5bc7e923243252df04c8255f1bbc5aba616768624d226eb87bcb67900bd9ada5f25e60f3df1010a2a3ac7b923db88378c3d6f35a1b3fc292a73e77a0f3c40ee0ef5fe48f18df8ce216b932e0ad2b7b47e3783d41951f952d557694764e729d807f8067b1827b48bd53d5ed86dc122ddd26b66a791f865327ef08d0ed7d6ac62f389380901e96ee37f7b2c060d383fb609afe4782e9aff9b5618eb5bcb8aa1c4d97c232413ca3fb1256846cd6c3d15c04137a8eedd0cdcd7450a4a355e7e3f93d5aefa8f8458ab68557de68b9bde6deac613f96745f5372c98be68571334214ac9246511451de2430e14593b50b1248924a5b196193919d764bec331df578e56b8d7a72885fa3cd580b8308e3b1615ded3b8cef7ef6d104fef014979caf4f9e25338627f2b31c3ce0176021a75fb65754bec7faabbde1e0a326607d6ef410bebae8cf430c4a877a70c1fd76e03944f30d772c06b9fa18956cc2c3ae85e4c20443e59b9d0dd0723fe35d3f73cd8b24a27109d67ef8729570fa858c06a09fdb92f8f2ce807fea889d32ef084b78d6ea12830c706c9dd7a1689f7ad68b1923d3fd1f5f45c33377fedf8c7fb6a98f8ce8377820b918a31b26a7bb5c5428a1d1a8d851c6e3af1d2165fa1394ae030873e00e1ffdb9f25eb69258924463cea026cec95ac782de1397b51b88d583dc21c53f132b2d9ee4e54f3a3ffdef82a683c9336ee7d973c18d0b3680720d8b7714259091ddd201bf950b8cbe40ce47d684ed4afc00e9c95becdeab015c878d84bd767d7cec80de82493507f7910e703807418d8e68bcaffc2a905169e4fea6f19b2bae9c07935db01dc50359e77d81fe72e2472ebdc4c71f1528051bbe72452af4b94f4bbff830d3692238fbeb0538f83610c8b1b408ec7e566ecc49bdd7087a3ac55f40352c4d6690ab4e98e8b65e79c624e8522cbca8c51b928e1decf54786902843fee76e687c9f648852a44564ef2774f133410fb4c0a86268286638104bc01cdec3f562cb4a1f201e8336d663f5f934f1f0919559c765585b2631f6754be6b26e81af41f760434fd0c8b32949f1d052f4bf51cfc19b91927ac71777b7d53ee209c7127e18d13505aa532a2bd3532bc32eb0e71017e13632c5961886a454efaff2b36b2e89ef76492fca4cfbbaf9f94631c05418c4996b8856215a9fcab56b9175f24ff174bf5a13ef9fc17a6d09cd423501537f932c6db94862ce7ca6a4c8c648fe18398fd38ada7603c9a15a1ef255c3bff1fa677af68b44bb05a3902d273c435b1001dae901b216afc93c7ba3c686b8f9394803c7fe270400806afb61fa846fe0f81ff840145d5f5b4034a1de75395a882626e322f906484b20dcd876ac91a0bb5b669ef3eb5d34a3959754bbf20d9088f2bcf3b81c1b761f07cbf7e0c178ae1172260c09988426afdc64c7c1790f97c957c375de8222e4969e8c23926936e484960e4571867e7563ce0930fb08247e48ad38d636b4474e547bf3c367a3db1219155d5c3e339bc7c91f1cca19bd132444e6f476ce07b641a00eced55a288b27a03970033ad5f902a5c5dc9544b3bfe1ce8f8f25d75b4186fb887b73568ec8af92571959ac2631bc340c5b6bf58a6864fcb1ee7e9607987161ab030cd8ae2ee8e56e421c4f150812ccfb00a2e6c68e3302105ca297b9d63e16ddad58c71374e3c5c921f0c5e2bbdbaf3f8c162b0a7843456c444e1b9dfd99cb782a205f16568847aa3be74f70d74e70b58ec4a62231636bdb761aa7e3599e45f20e47eb2c896d59554eeaef248ffc6a2a6b750ac82c3e4bc01dd648e45709fd184006ae4596ad005048680eb3ce25743a22f44d8a5b36ae69a0ad38f3d40c98594be27735fd7d4c66b1ecebc9390b8960abc85df0ed1e00ff00490b9c32d12bde3e1f2b78104f358c721f56d921269084fa2d1860f3d1b008dc56ad70d938777a96970b0b3f51674595d25874582dd8bbd04aa2fbe6b8bb5825917c022e86505791b7dd0a52419b16624973443d9496b637d41607c8ec872af517cd964ec94b5b9c2574be2ef90d99376501a793fc08470490199e8790302caa1184e0f78a83f5e5174de8a525cdeec3346f09b9294533a8d3f1f3badd0f5ad319d5858e43c59bfd9e6fa6a02fc4464521a32bf1325ea6e8af371612b35e4784d735976a608bc634d7ab6ac53985adada2fed7039e46062df845c242024205d36d0859879349ff4093e0f67f6c8bede5616ed3c40cbc5f48f31a83ce7124025d39b58b3c5c524a3a73a19a13a0d8c6feef605f4888b547dbf3aeff57c800691572a63607399f5c83dd72e8d6f9c01792401c2d66dc630564e61f49deb464fff51f551f1c2aab6098acc16d3a0d7ff41d649cad37f801b56d6a30474895ce543bcfa2abd4324d146da11b487401d1b3a3681a9b31d1be92bc3e24308bbb0196275d1389368e1bd5f73791c4fe12fd4f9937c551ad532f4de3cad5edae12d0cc8e450ed0e4f0b78518636c2764ac44322d31a424fd5b42e468dd1abce953f064554aa76f8bbfbcbe73dc583cd6c30db96ad121e1c60af2b5047d54b44c70cfdd6d2a6acbffb16a85362bf44b6150186960ec55e78faccd87c4a048fae24f1317c217bd157ae4ec0460f6c8d6ad7e86ed0fb6ce39aa69baeb53955f84259bc9f066517ccf460b0ffda48b2b33890c7b8f57aa556ca915fde27ad345960bbe5126c935f674b7cca6621250848fa3acbd6764d66f5d9503d790ee2ce62ec0d3d0c2d844506681ad04db02f3261c83f59133780ea66d71ec309c989d82744e2588dda035e87481b58073b81daf98e8dd444d73fc1e07ad76e238599b8a59488727060ab3133b57441920d4d2af6fa542fc54e6a0f2f4315b0488c932b657bb35364903a07e8b1017586a4ce8c5f8e8a1589e4c82088be2f72b15267e7a5a93be3d33f0ee7fc3edb2d1ce92e3285025f4eb696b347d60462fe8560889ef73a8335dcdf15679f684abba6a16fe7c07ac2fc59d323b6e5d8bfa1298934fd204e848c63741acbfa23c6620102594faf65ff8799771a497f45ef88dc8b23d203c5ac6566db03e33e83ee9dd69facc13af1a46d93d462855b497892cab16ff385c51400b3335546ad445a20522d241aae0bd6819a95b0404c962b3c799e6266fd70a7c80b8bbee54e3ca55b4c5fd5cd0f7ab6944f610da2a7cf017dd799db88f80198daa9e4f49d469888cbd16ec42700fa27d9712dec6e9fa6242f421e166e702d3bf68efacafc9308ad2474f5c952c565295c9d7322e8b9c9575246e168bc91d3500e81b1222543d638a5856643507df5e2fd861012a516d86373fb6e39e2362f8f24eb902a5e0970e4ae971961f8f9167cd6bc75717051db5d36d84c0790f30af91487f410c864735fa16901a7b07b4147111103b97b6c5e9c462169ae60a68ff37ed8b17a052bdf4af1e83f047659a55833587de8b8cbabfe7a065a3520a7c6383ce9485e9735551aa78f2510ccd3f7450f908e3a057a43988e53fadd298cfa52219866e8cce5a0e304d3e7151dfda3d9c34bf31449d3dda5175c26e7e7979d62e9fd0442474edf7315726d5599cab6292620a9fe9dc4bdf47dc256e5e54a4f26faec6e023452612b3b6027cafc33508e0fa4d1de37fdeb3d32672fa0a0185720355d9c0221f7f90772d60bd3e7d40bd62683377bafbc3eb0747c2dc70355eaabef1ef8ef72ebefc6c9964d5d6a86f1887f39cda86a3360f0c2b84ff6c3a5330571c99928d898cc6b2492a9d8fd5237bf6715f77bbf3d46104fbaee219c675fc907423a88ab1597cfaafa6fe4a4569bec55f1bb97232339c5461fc9f08cab908e9694edd7072e7edb305b4be2b5a630970420c76bb457dbd571586adc587d82513b921a39ffff61d44626b90e1909352a9c6f0f50fa70e4b5862f26cb2b9f16b056e36680792694489635b743a8028cff37152ae6b2e4d87f5e2aa742bebcdbcab6d2cd3df4214f9b4f6a28c48b424ef1b89abd5a2b3d6ad8b4a8ade699df6d3dc01afeccb8f1fb88cd1f089eaacac2682bb7993051fcdffd795107e530ea815198a4151c691351baeb637f7740f7c3bc1ae96310c57d872f00d0d1de0b28792fea1cbe93ee9c3a25ae724c3d0941a09c2e71fe3508eb04f09696e677e25cad38e084a60a4252b08c91494ce844ffefc8e66803c5f88cb32f9c0cf089a70329dad4122d1f2a0f25ee9b79f5e1581484f9b8ed11becbd9e775cec62d41b3b7e4d8b516d5a5bd07ef283a1ce4b08fb8d9d9a8f4b30df1b4c1b02a7d068b828295fd2835e4e5d1bf2790c01b4adc84116e31e8ae793ba076cdd5372a1f6322b60d8f5b311581e0edc315adabc84202e241a711b464efc80b1c145f76a06924868f8d383dde78791d3aadcb9b874b411a2a62d8da03117acd44666c95d2bc5c409baeeeeb108f53c5557456fc6b9c1c7be63c1cea9980905f2d3e892aae5136c29d1ca42b4024405a4edc9d2295f3cecf1294b0f81dad79b3b1eb23feff33ad472ddf3d96386a8fdc8b6b5f489eeaeac446ede340841b10ef18f601f1af0559c9abd7bd1d32571adf385006cca69ea3fabaf8cdaec482b3734c6bae2921b8baedf843e8b781289544d9ece2492ea92a3063987ed329b83391f9bf7eb1e5179a961cf61919643e0399ec11fea252391ecaae682e0fdd5c0fa4f4d429ef5d62e3f1e5fb2d6cffe92099d78b47fb820d42f9003b2971d33cee0d8c02845cc91fae3135e3eee22a431b1e65423df6fe0046bd9ffb5df861b97dacb205bdb695077a07b39566dad632f0423ba21999136585bc358601fd4a02c8dca32c82c63d75b2f4cfcc706983fda4193e46f7e2dc0b35e550ac2d2e7b0e75944db1b84a1183690a6572e20d2c9872c38788364a845208ec3ab4fd831bd04014ea6c19dcabffefe1aec18841bca003a0930ddddb0b63a8886dc4be0284faa181228da3c13304bbcd2180e25c72bbe1c487dc4384aad4229c24ebdcf7050ee1793b33dcf0a244d04622bfc617a660bda11bfaebf73c5abe779edf5b938e362d4fca5b3913f93e361a7f2496f8cc23a9fa89a1b5ee10a6ea029b9e0a8a106925b3036aa9ce72c174754b7d0147d0712260b8b9ca09019256bdd9c00c8aaf98e88876fd3a648cb646885869f881fe073ea83a8892fb874b11d7f662b1f1f4017a27a12b11c2722022ed17daf7910be4dcfbdc5940013f780d55df81111d1c5ea92f4ed70599a5f4b56c70f4478c21c76cb36849b46268c9eddabdc3910b79cc432719396ba725548f540ddfd0f6794b640b0bec11697c2de8ffcd9a3fa8b890342245f453303d79340c055ebb3fac255ccd97897348289249e0b0fe72ff67b463cf27190dfc664ac3f0e90f93928decad05a504ebc6329a51101f28785c3f324c4ce3a891c24c0503efd664631fee76f530db2f0b09f4806b4969e69411e9240858e987ae6e98addc1fa3185795503fc8fc497d16bdbe9b6cbb169819fdd142a8d27ed38663ae078da5b189fea64c54ef2e75deb544764c8b5f83c23cb5f3223e5ec67fcae853b5333f2193206bb7fa24914689f5b008cca933f432ca0f0eba89ce4a7835cf0542b1c34f33fdb7b69544ccb991ce0577943f16cb55172b61c28e5411f938676e831e98a6516be6b62f44893be0a6445a87d0f2e51b703bb2693bb9126576e0e87a33079991e38eff12d494f6883588a9980702cf191b6010cc4587ceebc2f4f7db9b909b07f91835d20c8ee4a05eafa856933ac860789b8ff9e33ba37ebfde004e54a9ea6191230dc4491616bd4453d2b1a0eb1a6133b3ff1a8bdbddcd8b49a88579f974a29cd19394a8c0d8ce8542b2b2aad7f81fe7080712ca9b8aedf8226cb758f97019b821ed821d2fae231dca13ef85a0de6cfc8208ada00014151d298ebd27b28f188995742e06e7056de74240ec54fef6368cf553a7bffadaa9250db7cb16311a63d16436a5f6200dc39a128d45bb78b5435fefdf4c8eca9f1abc8e6a8b917509771776d9bffd90006a09756c9807e1dbca41f67377f43b5de8231e2635de91eadb72241b2349e2fb3a765808eca8109fb15f215226eec4564a680063f088f50643a1e5c8d4f15fd0bdcc08d34f2abcb123432dce659bc7d86c7d4d68e342610ae57e00953d2de9a23969e7635bec6333e367d54c078d2a52db33f0ebbd0801d95cc89cb21e1461abb4b346f9ade5ea78bbefb058a3bfc47ef6eb17b353ecce673442bc585393bd45a8c86c0beb4bcadb4eebc22bbec774e45d16a4e015fed0108e07d41caba85643e5e01d6a2b455cf7e7739796575608f69edd4ddd27e485a185c0a47a61874d7b2399e6ebd8fe9258881ab0fe9de47d494fad470a5c933e75a36c8402c0ab3a3a5d1ccde2fedeadf819eb50d553e3ccf15a8a984f7632197916789da4d27e5ff253e43f053f933532d463d6c15cb5a773b86c4a0a0814a0b51e1c70233188d50f306baf4ddc391f9424d12e7c3e0967006f2e2abf6bd2218b5386cecf2e84d3792971a99f02d706227c7ad04a879498bc28774226b8a5ecad37036f858dfa7c93a597c476ef9c9ec352b5588eb95ac6b471a36fda315305ca75aa7dc76be97444970d7ec591db7b3227560cd797adf30262d27c6d6e7a2d56928624b04555bb1d2e6ee99cb20083baea74304551d5595ea17e419e189d88f3d497741d9541d371927f558879ea3abf51c4e4346358cdafd061886c1dc6587bf3d4983962e673a367d966872e0bd378c9c6ee7c7393f850d469801ad23226d6e8badadec2603d49a684cca1771ef554faa7a5ca5f53ed17a0eeadc18f9835e53084c1fc7cd1fd46a0fdd900b40405eaf3947627859c4a879649e5bd3135debdf02a51d4fc94d1bde97809167191c96e34203fd9021ab6dd9fa1071f13b7fa1162e3187404ddef45a2e4dde2a3a7634880cc21f75b80000c501b1769bd74bf0b27ac3c763caefa8859c3061c357ff9fb619c38eaef5b1fe122386af74312ce318fff5e7d2336294f7a3ffcc7b4a83db46a55255a70fffbb0b188819d17abb877a30cc1be1966833aeac7cf41e8ee0a95c9363a7a68bec61e3aa6ccf00710063be23394c57e80ce42f71d3b14dd0ed1ee1031d86f0197a8bac0ab7463320ecacd96e65228f39ea53bb64b337a3e5cccd8879ca71adc4cb947b0daa42b836b1008ec5b345f8f7643e91fedc7973a1a4b272c3e7b35833471aa81cb668f58a264860b3b7ac441738b5a80ca728f7121fe1721383b026394cc2489c711cba516b8f33f9c4dd71fae3af1a269127292ea39fe006402168eec479835369944638738a1d6289b8296563109f6df7add19a6717f0214f03b88b797e3a3c4404810b79f12de771ee49b0c2ce0672f906a95dac2bf9fe9205fca9815218547c96c9621ddd2affb7691938d217a1ffbd6b615675bac1957d032b4a74dbe76ce3cad5c358a3309db4225b7f90f3efdefebcef69a8d83589d609837750bcd0abc6b9b17b5d5be3600b619a59656642a393725a8fb47fd72c0dc6589a132e99b0c2285e7ecb8168703720de96d8268ded330a1cfb9ee3cb138b58cbc03722fdae9a29dda6ae1ecf2063570b2496f2bc82a9d15ea9f57565697c6618492355496630ca3192a9baa11d2a42a40795506894cbfedc89e106eb94d70d90763473fd068cd42036d080753b7fd373f38202861597cc3aa37520aa0a800ef870fc5fc42f060e07cb9c45a3c974595803c38a6d6a6ba4960d9c84500b9a215412a3d36ba39d726c1cb2fbd102a80835f989d8dab7caaabdeacfdc513759cf49b9bb0c22b265d61b24e2fc78c10f9c56d4aec7a64e9ed9d25be9da7ff1ed469f7fbeb9179efde928e5dcf51b76c543a5b13c76a84f48244de9042a5ad8dc0a0f84d37def78a95eff368fe322aa098108eb40e8d74da57f31c377f8f8dd31b6fa3249b8f1903a6b445507641d675574d87a9d76610aac9f2341114e1ef63e01eb0c3251c40a67bd0ff92a85db927cef2c370e04ea7c937a01dc620bb5468c3bfd587d8832832f2c4010c12d75b0746cf4335ff217b9f5d7d372b955749bbf34ca45f9b646c7c835b484b02ef92223c05d7ad0744ae27453f0818c77bc9c8e67d2fb4ed222feff7d04de3abd2174dac9ec6a261ddcc4601cd31b7a2e9c44b24848bcd75e56a4a6e85207e9595ffadd65dae4f184db56fa8dbebda2fb8ad9b05dc35b8eb498fb0fc486a2f9c1b7486d8245ca180b5438c9f0dcaf685bda55c0f70ab3c75ae7179cef94067641c9e53e4d1736707ae933b150a2a4ceca311f15e0a91e4f0229e0a9ea9e19dbaa03b8f7bae320d9f75a8c8928292cc5b2ce412006cf73b91634c732f50c31f03bd76e1a70fd4ee9bf789cbea40a04bbd55414bda9fafd043eb991398a7ece10e03d787abb383994b77a5b602d633adffac81b8f080ace85cefc3d6e3f00a016e5eeec1e1796237cf6c97850cda9e72b791db844eaba0c4121c44a721525c8a0d819c4077e451adcf97fa9bbf9e879e62bfec30386360114c7af5e8f64bf1820bdb8412724fa5d6224958a429823b1d419a6af2a61b09fa7ddd40f75ef18a677054ae68cf2eeec4ae12286bd1756323453f246caf56d76e1357c43be98e1cdb397399648a1cc6074247a774e57f39bb96fdda1bb018946dd5c02010993e2e37de9177c231d46c190579051f1c610a1298c399eb2669c5717f092c5abdfabb891bf91baa076a1496edcb0ffe1734805185082ec0030c1af09be9989aab03b7e98d6cf411c3f3eb1b09d7993dc0bb3232edb7b3980e98f7cd2cd5797b2bd50e7893d9f1faebbb76c24581525c6e99aa8571ebca9ee9159fbc3412ec5a4a7305698c7c102b7848b1d1085854126e2e09419d86d15d30e3e846e808038ba7c0a0469caaf7b320f499dc23011a90724a8e46fe535ec017b99769ee3a1a1d3fc995ac3ef7cefce83df95fc6da8e067c705f76e6a0378e41f68a22f824484892049feed889cd50b4bd866704a97cffb7e9858e43bd85297e781afb6bc208d134900b181f024c2affa3f28589d4d864e93d388ebdf1c6b9249167fe86cebcec1e074a7c732d4b14cbe9e038354ecea27b097361709f7c767cfc52d18cbeb8b012a415ef0b0e93018389f2a9c2efe4f31640179e8cef8bbbd2e02a7aa8ff39550f244b5473b13a5ee65e27ba54fb8726e50a87a8b06747343bb7d6c6c4400af71748c5a811c43337a86d81544f674ce567b2f8860df9237d8558be61f6b95714e62191cb8f820beaf01844f814ffff786126bbaa488d6322d6057d0d174b7d7cb293b8172571660357df8b66049d6d4e71f9b186dba2d814a9c472b00151f561de67865e255250162fcb92ea5fc7a42eb37f0ab417b2ab0c23d54e6415335d6e236375ad47f66849b5b4747af6937e62767a54d55cb840e122fe53926771f27b314284a287fcecf9376b1e40b625fc455659185d8ccec01adc726fb145b84d03a13a66a6ca223c324261e4dfd4ac125c45d6fadc3a0cf599a13f7ff167a9932b87c82d19c25da119991aa7a7861617f1bc2d3d3b5bc907c7f79254d7b68d9e9ece9aaa7f200dc367519c428584986d889bec960a6e27c27ded1632f4b5b9c23cdba66dcd639aecbab98e3f35d960d6e2e84f82160fb4d20dd0afc3c22ca3c61a89879b8cb62c97613f770f3e365175be08afa49c7913a67b99c1e08a6379a524e8a8f0131297f56e3ae1316fac831661c29f7c00717d564cabe43919eed74b988d8e2e38c4428d9969da8a5c35274e432e0a1ee53bf17b0d0ea9d883812532c921d4283c9c96c14a0957459176f9f68390f5968bb7d148f05050478cc6aa5aff2f71f5b9c8d8eb0b2c8f5de9f336ec60a085b90014c74f35a9f54ae8a9bdb8558941bff69d47c3988b7439104e2bc4d455747960853c7c21e94e728d4bd911a59e181ef73de98c40f1fd0c073a3b6af0a9f20b91bcc0baf6fd2f952bfd4c0a19c7ea99ed732c8caf7bce5bb7d6ebe655171fb560da5bf301f818896ac007aa578fe85186c1c840c9f881692769f5c97cb78616405a45f5ff64c6321d50577a4c2daafcd26dede68fe467322171cc1e167b0bcfde3ce384a48a5f4dd157bcc4fb7538becb890aa0ef715a30c6db78e41a0f3cfc76df231cbe91ff52a33f0c4ec84a56aa4c9d79d75aa23042f35915507dc588c4cc078312c99c83e5fac224a0f5d2b63439a5e3bc376e5e0b61765cd0efe93da2fdfff5678f4bb340297a3737e43a42088ecced17fd33f02822fba3637df4a52e71ca217112b8916156ee28aefc50fb320d75876beec39c9b9930a4dbb5de7a31546eed912ef4ae0c215a2bc6186f3bee83337120c1e07d7749c40576e2f13bbf237faa23513cb3b29e49e608531a3cd56bbf6736e85d01b9d83bbf2e62c5d0493958db046825abd3e2a37a659e3451958cfd620fd1da401b9dfc7fd712a8074cbd12064f17b348654850d8e4afed041535e272b9a79d897cf2ff0059785b5c6dc2cc09f3661fd9b6db210c26cf8d4488aa1eddaa76bc223c4cdcc213ba6f7c3d5c402c53b730a10fa9087456daa5615345d918e0afb031b381cf7c18545c7c7fefcdfe72fa1b5394becfecda8a261583c138a84c300673b901b8ca46284e170eb1f1a14ca653dc87af30a2da11bcc247ec20617be62df5a0d1482ce770d399f9a0720cf78665764e053515fff6924db2ca01e4c5a6d4b287f7c3876947977ab3a7cd1b2354b33795f180dd183bbb2202da3d61d6c1ac7bec5ddf12c30549ced0f9e067e317b8df52cb07c5647e7bb75fb616ac6b28f58428a9aae4a36131450d67465902d35c624793ae7e47e21f1198ab05613f5ad0d9e77ffe23d360a36e4f20267cf837210837056010864f32c950544c5b393e478ab6e6b434d1f374919b95bf0d38b2fc875927276cb4ed589b8b5e1e55715d8072dfba5b6b671bc7d625d5d62984e07abe8db763078a21641c8ebb3830da0dee9700bb43cf3296d5051434aee6c98e9423b2b65c4f7b77ca76d549973dffa01a65f41f4bb3e915a667ec70a8dc79b23d80db890ea4155063bbbc4372cc783e226f5d970125fe1dc0165ebd1a49b7ba563ca3e4aa15a8d5212e33cb6a4bda9829103a83b4ebf9c07dd8eb3af0aed913e8b1bb5b2dcc38747a48818baf4cb412de55a3b2ef5858543d7e50f0fc5b40a7f021a5e246b2817ef4e3d6b39a4979eece0badaa9c58770bf20284cb602dca4f31eacfadca4b7be9242266f9cc5d7dd2b3c9e33ca0758b02f91e52876682bff1637c58a88c2fe14737a144fbbb6fefe304da239c80df4db460a958a83d585169cc4e5efbf4d847811c2f35422d53d3a3f77a27381e3ce610ceca4c9300f5286637e2af32adb3243ef7019c36d091624cd877f5aef7107ac1eec46dbeb74184237624ecc274cc228e2526aead92d9f8c86980fdfd4b6262c7a7252c184eb99460109c654a707f48be42852dd14817b9434e6d60a6cbc9c1007cb8c3c8b5c4d3cabc3470c26560bbb132ab8064fdc5b34c4bf97dcf617a79183319a8cc5a8ba2c7efec999ea89ed9de98ce2e0ef7e875bbef45504ef6bea098fd74f4d1c21606d8953de4dc2e9e11dc6835a08ce46c4c0bf230df87e25f18c519a914fb0bdf9a006aa797e08c3a58a0d83ac310486468313db6e5373c41e3d4253b253da8c824f378e250f15469e6c804b99f90eb21178c3aa7355aa9c777cef8ed3f5e8e8dad70fa26106ef255fa3302336fdc86e4d81d54487fe4880bfeac0206ca6558b39cf46769858bcf5e0c76605c183fc4f6c45fdd653fe49fed1e64dce9f1aaf1d97c55a4a0a7da139a84f624650f38a173bbd14cab80c60fa86607fd46c0d6d0932179a1d35fda794d572bcda7caaa494cf56c4b874a3541af668d368e7ea4f0002ad23ad82333668ae9a13eca72de60b70d1c64e750ee2fbe24886ce73e64d22a2b7b7982b93371754bdbd1333001f27ce7aebcbce8db0ff30f5a210fbc74caeadd74944edd9870bc7c42e093326045a2e5d858133562d8c6068d89763582398c09f15567d8337d7c58d87e2d69d0a1b081c683d8e3e40b1bd9f6cce97c60e2e3930750275562d4c1770b1abdb9bbc9e15bd9d1a5b6114618a70b405245dbf48d087ea1b07d554a546a1bd1dc09961845cd305a5e22353e2e8d48418256e9900610f68eff23394a8de8b5669338b7b554d830c86a3b193c1ea1c2f82f297e3130eb14c4f5085a13945cd439704a6b61cf7a4e70d151f38b18dcef274dd1c5debde3d171605b9a379632178be51e5f7132539448e03a6562888120867eca7a7950bb9c30dfe7318288683576866994c7b1539ddafd8144552129e95844690b76b09c25d3b6dabc9b48dba54fdde8dea3a19dbef3da79236b8c00263ee1d3467cb43a7ee833bd94263b379e008555454cda67db626666ff3ac3ad0320da108d2accf1c1a630a6213829ff3e7c8dc7ca26a53b2bde06bd7c5a5bcd17606b484960c249688e620546c4477f963ee677122636643e4a837f2228e18febacdcf26af4e69e19615b26adff3d7fe52f10a2b4ff2487cb6bbc79ddd1752f1a721cfc073e6ca034160f2b31cdc162ab7ff0eee0feb44a13d5090e9e6e33ff6b53187acfd743b7f3b99ff8d1198badf5b31f8336e62d527e39f4c64aacdfc7ee79c89912d676ac480c557398f94926981ed61facb1ff5eb788fb1ee768ee0e916bf957d8288f555d75aa97cbfe7bad099d91376a590564eb0c5d556a3b0f01f3a23ff45e3e7d34b9c732f293a5e33c178127e1bf845db9911643071b7ce6fa79ec12337d7d0a837cc793948db832783f569ee489c4470fe88d9204d7e1d57239f609a1eb1f0e4b6b0e25ae86fdec03cc20026975987f5ad5640e5f1399f4bb447ad07a87159b5388bfd79e3baa5e76067a3e85c85d417ef148c74af0a674e407e422a0a7c4bb2a19b958455a414fd25537984ecc2a72e95671ef4d6d71a23b8f00644c6a2cbe51190e54c9a11f310984571fd2e5e1a8ed0fd91b2655958d503c241859b3ccaa9a8a0318b1cb73730db4384d0961d8b50908ae02123230c177a42c8645c4da42c73d1103c36e521e498e28eac6bb4f8706589970a2532b3038d04305746e28df8885a94e748c5560f029e52f25e42dc78b756ce09705223a87e773b8b769685dee9a453180092cc5f9f178784e79a9aeaacd99606e032c74a85bcc77f4c5574b1c6f27c61fb053e0234e6a3f05270bc3b32908b167b066f219c34307a4633479c2cab59e3e0b16255a02750c7beb321c950b2b69df8a655a859adbcbfee83c5376a6114c627e78f31918296c8d26da06aa8a4a6c735289cd3a4470bb21ff35430121eb08960dfdcac350ca6d0930bfd958fc80afb71773f687ae2caa783f7ba787c094c064ac5cef72ab38afe166f18db77007e395719c4ff32bad7f0cff39bd1bb703e0421c40e61fc0ecc4ef2cc97b2b4bbb90a3c28beca10bfc4c32015c438dbd2cbbc630e7155947cb4af68b7e6053fcb5c8bccfa936e073a06f8bf17cd3089eab39922a46763d8a392052576832ea39b96048906be20c4bf4b39cdd65ceead09f463be54b9347d5f50fe52944e34beab5983323bf2b1c2a845f290cd39eb720cb38a1b8ade8be9874ecda82fda17e8718a5d01fe268c1258796273f945397bde456fc88f2287bb4134ad0de517d77485524aa904a2ffb8502934505b12dde7f8261aa8811f98258e7f56df8f5abf974726e9d0b148ddd92826305d2a0aa0941bcce3a7a80e7bdb8e500073146f1391a6192b13b02a799dd682db2af4b4638dbf537bf7530571ccc5a04d587f779bd27081462f26effa65608c01eedf7dd9603a9610e2439c047a6429d8fb48aee79bcc19531619c5a97915301150b45a348cdd055b112ceaa517d8874a5c89d2ca472534926e164130ee1e74ec81de9a5df0dc7b79852b29cf31e01016d49e819ef108b5716ee82fcd829d766b4d20c31aecf1e93754444ea4e15aab04a981d969718f418479da19c577cd696520d4585b4028800db6df0b867bf1a336215f4154be0695fe1485ffc01cd2102ba3123dd39045e5fa6f2eb70e5db58983926bb936c49ffa0b82df93dcfaaacc78c91c76c7cffc09c11fb3e44ceb3cccef0bdc3940e088b2b9b9891bde93bdb17a24f961e6c9436188bbc1a7bdc2d911ea67e22d83f97fb795cbb3cb11bc57cf0d8220526583f002cb73341c5bed3fa93e73592e760d5c02bafac9bd5964b231adb3ec271a2effd6a5452eab79da15b3a6a97e626f2022dfa0471e6621b7b51af409c3dae4e1721161e15ddb8861cffd841bc6b42a23a9561f13bd7a2baf6ea527d22a41a0d54cc3c5449ce90ecd46cbe07fda7e6d40c857e51b2c8f6fe12015acf8781d57e1cd56fea9483786a87982b75c6bc417b921b0c9c1469a486d28d23486cdf93671629b08558fb885b0a1f199de9c57d55202da0ffb706467f2da7efbc74b8de3cb4b3146eb0f276393d4ccf5dd11aff71cab42de32e02a35413302c5a2c0ba36fd2241263bbb9c23b7f79e6623e9147db9195c06f2ada732dad6c57dbec62da144f58cd8030a6c185841292fd0054d14614d90d505d4af81cd28f3ad9bf0d1e12b7deacb7ab6c466fef4e35182ca6b724e588cf5328e4b9ba5ddcf8fdc1d599255185669050351d129e044e160edbf79366ba369923ab8379ff934779acf1ec39bd147e745b3d77cb863edb636e5931f87ae3ce06fa6da7838ec52cfbdccb283008bcae2b29eddd5388a5c412a07efee5ae9735bd04e2262b9ac8c55db48c1931018ee37f8f3bffd65a2e837e0c066821ad890afbbfe0183cf426a4d190a8777dc5a7f6f3d254fdc0acc43730211061706e9437fe836677ad9b1fbc7e47a4cfafd386a3f55f570aeac3d3fef265b5ffccb8e58f8a02ce443cbf83019d55ba77d9b7e3d9634bc95c2cf08a29ea8a33032666131b11abd68c8acb19e49cb67f536e8953ed853622ce5aeca9d4835f655313aec96e717786c721ebb57156960c961be75d2c8c93b04b432c8f05f1bb7e4e4b22b6dbf452c295df2fd05ef016eb4cb6047a8c9ae4a72104c1955bb1abfb6bc97ffd9913cc8620bafa797f994631bee574815cc541140b9e5203aa4bb978706b525813f4a0ddb4894a7b176f0dda7140db88e88ba079481b5435c6fa44cbf96bb9090e89175fcbc0cb4238218cb210d879d1618631a8ddae5912dcacae83bd77e5c27b69ee3ab899d1412b640c0596158ef5a276f1374e5b5ca3d6b0b0b698011c9975ed91d64f630fdcf13faee365903dc31bbd0912c13fdda3b1905aea41fae357d1dc82819150001a1840ac0b81059d6e196ccd12cb5a199dfa989de547e8bba4a2fe270fe9d3346c6da45ce6fe07c0e182bc2318f23902447c7ee9379301827030d2ed9ad3ab6c5f07a12e41b608c3f91584cb6cd3dac1861482afa3e13c2f25e0db5c37043227db9a17a867fa7adfa25aa8a2379d9539b446c520dc310e6a6c31be5a0b3f67983435b9809681c25dfb46d6c185b9d225531e3baddbbfa88c175705c26e4067f2c05addb3221bec2fc7fb5fb6f1ec6e40a6316ac41f2d35e7feeeca047c2fca3d8d0566000560ad8c8e4fe39578bf5b0dd9f9e12411eed758106a0b50c5f279c7df83e5c48f54d5ca20e2328523afd402be5e81bffd3de356f791bacd1f22446f6fd777eaa72afd48e62a671f24d13757234cbe752fb1e1a8bbf1aa25c75a2846c16a4420f1f7ff8efe5ce12ab4f9b9c1134be733368712d489fd8f4707a74fe166f153144d3c4d46e683d7e9f52c5d49bb8e47a47d935998d9b792c49a73aac880bee95eaec2eae5aa438474bafc26ebf0174afcde65338d7770acedfe61f7434c0681ca4c586d446c9bfb3b87ff7e19ea04d12050067384204a6a4aad3530fec486322eb649023d65f0c20ca15f4c930659ef811357461839fb1994951fb8e8107266ae5a6e9a08c32e8d821bf2b0edb8935547107e904d0959b56c6b5ff8c5fb28db1534ddd724090f8fe0de0f279f70fa52c760c02d3aea6b21b2ffa3f1d0ed5879dc4ceed39616840f26f8d0241af4c24cd40e07711053e3b9d78ce06641c1112c7010aa5d918e5ffbba11791aad4717a912ba7a81a1cc96b6a4ee95aca1d443b344f740be3233ecd57a1a21b2dba6a73441def6741e6bd3e901e55b13a45e55a7af2435793b9ec5bca9847256fbc412f468f9cfe8e2c58bdc0f5df03b43d1ee46b0d8374f6539c04710a59d42bf26ddf93f43e7a46cd54a25bd243edbcf53fe3c03f1d22af030e2f5a9413d8b9a78bcf0d8447e0f152dbf305ad207363854ddfa8cb498d6c83ca06994289a998f76e1bbface6902ac91532b2d9aed715b64d9c9973b52aa9cb76295ba51ce2f1fccb08b475371d7fca077e299682dd6d80b0757dc281f5ae57a286a082e9a2e5447a575b89767d0d0512dc11054f25369831fc2bc5a4d08e5a240836875a862840ae97013de6c108423c3a23c81e7512ae6b7517b713da84fc263ec5b80116a0e0e983bebbc3458969f435c22e6e7626305f783da62ae2c5a4414f9ce597c57b977bda89e88b8349245c0b764de1292cd7c373752a9715e4754f6b0017244cd884b203921dff98df140eb856d652035aa5897a7462679c59d00b33e9726df468c10d762bd3e0cbbc81970636f6fbd6e0748d5084f14084b12c42084607a4d09ab6bd782ab81b03205ee4389657412278464e9506c06d48222fb2336b1a1259da0904b88b0e2d98f32785ac3ad6054df3bd0c0dc56414dfcebe61e64ca6e0f1a7ed1f67f55246a84d53fce4eaa547596b2b6527c88e499db149923500b7c45bc1dcc9d3ab80e606d9d2f3b7c30fe73a012322ae46993d4e5e62a66b52da24206b34563614add3b1573cfc6ba71e180de2192ed3a786052ef6abf242e49ba068c6b1b45635a988c90b583eefdb31008bc357c20c3efd01832d6790868ac6d99ced7e27fedb370aaddee9d31490d392e1385259012fe22b7c0d4a1e2c24fa16d0d9046cc6c993a954e33f5496c81ea56ccc6cceec4ba66ad4af53bae76b34efb70d8c53c17938a01b1dde46288966cf7a75ca83f1e60a34bafed62d4ec8718999a0947ee24e50ab932c79abe7f3aab202444ea7c8396013da90e191f1a9e76cbdf42b0c03129e7bf22ca6429e06e307768af027d8e0c60d7794d65abd638b6fd498045402cef2317260bfa8d5f13791001ba9daa33d50d8402063020a44c3495d84f33be8d748b6afeb02f1c3c246a7e613f3e20870bce722cfea0f751fd83a1b247614d7ecac457c4c3a91b1c041c1c563d93ef8254fa65f9d0289f34695d1792a39d76d518b1bbf9d5cf00354098f2c193f496043bc1a55b6277539fd0fb06bbc49f17d54995473cf7e3351c73d6e3891f36258422f2569746b56048408e7c8fb186be2d45d23e27207efbffcf2e33cc1341f54672a454c3ff69ae11a056613bac2db8b754e28433734ae043d62e57330df9b7a1cb299df74247aaa29f35716f87bbe6202af18f447b7be9f4a9c7308490380f2ef3344dbf25b71495ac41ab35c466693c343d9dea8edc02a1278628717e80b02a1f6a04f92d8c826529377b167653ad003ed80db660d249349611f368b84c17e2e2a5f42cde2f0eef1a26794d28b757a57ee0a9afc43821a5eec8573c91eae6d58cd6af64820084b2fe26de7e5c560d10432dd85e9b96fc8e8b5ec12586ae41d241b76575eaa73fbfc2828558b054cbc61a1acf6b095c3a8fe6282eddaa8d7f7d1a950059de197d9c5d27c99169386527fa5edc53b3985eaf34f4c410a2199aa3006daa179e684ba12be7737d2e111159482187f1310fdb99d6475c8615e1f96da8bfefac1d406511f38d4fc154d81339ae8fe263024a18534271cfc0e91e19bed619778e91d46eddbeda196629630c25a9ef285b3c7eab86e7d30244dd9c3de742254e89296f89e8c88ec729ff32baf57499fbce6b401a1c51140d6ab226313689464cb971ec74e00b35d12cb2d3c07a50919d06a966793fa3ade9f1d3314b0900f5036ef2a5712a8e03796998d926a7188520baa3e5575e4f10fe25c85e66650e0236130faa556e16f5622a8cb19351cdec0dfc0175666b7b000c0118e0165f566480b983454cf0f3b1b284b73470255e4dcdc0fa5632df05be4fe8a2ecfc5c31391238fd4b87d6a988d699e7b24dbac2b51f2f6c9fda2dce2256c4eee06fa4277ff54068721a3d3d01d9eb2870cf872d51b92c3c84adba574e8ab0389a81d97f583a87d378aae1bbb15db6ad3dba69c48d9fda377f5587d984938a3ca813017b5ceb4ed70a1c7966665ec28c5ba7482e0447161a0469310d5a8087777fd505ecefe9034f047d637bcec65cf562d60017c925bea4c59434a38ed45c81b15e4cb1d15f327da6246f8f434fdb4cc5a9d90fac9059caaf1fabf8fb1dce0fbe319023b9c29293c8075586960e2494de21f6cea2130f4c39a4b898099049b5b82a37d7506542fff3397bc2d8e739b47430939afda628185466f300b14d7f1fe1daf6f17dbe3fdc4ca8182e2fce3403bd88bbe2aab0ecfcd15764c598aed47e56f69dc6d770c7737f83629ff71f944899f462e2ab6f1ae391bc5a6ace6a5694f49c70580f77e9bcf7a32ee15e83db90428a429f19240845a452b854ce2eaed485d237cf6982f882bfb87d1b9fa7050c5d7b32e013646b8ee72658281ca010ac5f3f9c95fc5ecdde17eb290b57c3bcf6252330847d3ae4f7e8ab390873f064e050d976387aa0f4fafa3762c0178ec5a4b244b6040d6a6d1b98dccd35d95013b1514d8ea33c5c6c5645a29f51df54580c8068c0c7d14cc2ce1aedc87585cffb9627e64d3b387a07281973febd112a90f589e79405720293d63d5f8261553c9f928f1193602e92c0fa54d912631163b80ef680a780a92e8a49a80eb4ca85fd0fe92956a55ed21ddbc5579e7fca759275f8c62de834b0e4a3838883344d60e28529feb122dbdd1b028c66e7e2714ff2810eafe871d29795556343d24af4e460aa6120aad1cdcf2989a395b8af43a7ed082afef4684a6aeb7f5fb106f0b66c998cb12dc3a9881017f2373a791c65251b511fb272e60320a7af22caf6e6f810b6f5942fd42ee650ff6589666fca7e4b6d7d7a1fe9c5b003b2749ff9020a48fea80a1b63199af1615610b940956c9ba47eb3d4ad23f5767c88341334e49e0140a77e85e52c71a9de47796e89d6a133b2fbf8981afbf8085a7c27ec56fcc92e4a5ae9b3fd11f9673a01630848c448bb1dcc3f93dd8831c1f5d1b7b4206a8b1f5a048701d6346aef1427b78c55a3aacc72dd86dfe62e272f5d51ff4f55bd741e63570602aa914b876cbee8a3a18c9a949af013a0f2202e20808e025fe7680b8496a19450efea14d80bc4d94d12107cd68fb86646e8a925568542088356a4ac8bea5a1dd6b9250fcfc9046e0342c109aa9e34be2a87c3e94b0715e5e137864b091989548826a66d807dee753496a8f4eea735294253954a4f29d7a540dd74e327fef1dda63c4b2093bc015cf882c82ecc7f68b8f48e1f0fe6be7de6f3dea734e878b25b5dfa9a65c4e49c64a47049a4f90d43950a403088cb0ce1e3850d01cb9bd549ac3e1d32ae7671f75840997a47685ab71e7bb5079ee9ec00cf4863408bb16c1a41b45868188c2169c4d75c36ab154e534b72b197fa344670ebb1fe53bb00dbfadd055873a13cf5bf72a8d33e873e4dd3c7effbf39e921f51f18a27f1af4faef2a89cadc644f56f4e06064117cca514d246ababe924b33157b0a54e13b6813f422b4216f50ee4e614517d0a9bd2a2cad5799ccde4c8eae95602876f5d88fede4d311ac8c37550c8466f75561f71dc74654fc9264a5012909ffcb839411631f948590de8f73bd0b18a8342a1bcbaeb19bac72644b98e7fcf457ff8fde50d4e82d1d47e40ded6cddf77a23d6989ae00cd0cebe1cf03f80bedfba9079fec79bcb07ed044caac26735892546af83114ad541b97be427d91a09f75bcdeff3505582066fb9d3013b38570c7f6e08907de646e5b8c3001a77a4f0d38312708281a57006b3c5c8b22414b64c89ab7888e33f2f49c494132bf74229326efd9434cb1044daaaaa72d0a255382de01fd732602a6986b21495bf1567eb72c47603dbdaa8ff824a7db0deda7b04e213fc10fb2d3309050b626bee8fe1ce3b65d289b610d8a1bd631ea4397f0bee247cf8d477d8bcadc3933cb4b644b5de13a93f211ea7d0a27f10597282e98e0a312a74fd21f83805996e42d2dfee57c803eeb67e80156061bb4f7e92d6931559082d4ba182f54655e2636b6aca06343a1567d94bceb7e51632e90117fc879e14476f0d71b6cd2255e8deec8a25b2bb0049fd9dfa39c5a8a5b60793959e1674ea80d3e9f896a8cc15f282650d490860476ea1120daf0e05afea8c1321eacfe1c8dde8d178b05184ad66a98df49a1b77901ed8ba77de7293b8014a4ea0b5d76e28179e0958bf0009eb8ee5d213bd6cf9f12163eca9861d315146060196637f9bbd83684eaff09da4e0ae6062c6feb684622b099b1daac8f424a92bb3258e13f10b580d47ef7349659bf1ae7bdfa87a3b69460d753012439194837d76e24ff089781b8dc70e9d2180224648012e29b78a4a1c243a809e5785b6ea2c0946cc0b4a95850a016d5c17535b3f0246c228836f2d5fbc73abed7608f266c2f1dbd339e616700d36080396547cf7eb50c9358896bf5f44f587a49d347427d59ef2f3db94bb95f7654e109c0c69494a3c8ec148dd72ca40927281ae09e9901f20ca2e341de031a4f65b803011710d3b2ab6ab97da1a5807ca3f827b867a85397c6614588428c609a682209b732f52ecdff02704fd09f0cb8b6db51caa19fcda4beb52b28f4b2aaa84e566d7b06e440d696bab30f6633cafc799862f0c87ffcfaf6085e66dae06afb604bbc138e12d9988cf6ab5d4d73914791422bec970229927bb64fe272f69ea3ebdf4ec3aa279ee5bc65a5cc5df7136293f44f0e23e52785e4cab0e4d84b4792aabac38197fcfb09f8af566fbef9e676d96592ae79ab6baa781ff2823ddaa0143122a22e0501faf871289b815440a2dab9d1e328b4276edc2beb932b89933018cb38d658ab0fd462f7f2e22ff2e79932f1663dc40f02a41c92083e079c4bb17df9b7b789d48504d5d08fe3e3680c145e4a3f43f302549fcd993c1d5c94052538be71c769af0d13219bf7d9e1e1b24de20b6b47b6b9cf5a54880435ce594687566e5c0bcfec1da6d126c0bfc5247ce2da511c3b36f6083875f6c4fb16dcbf2a78fe1279b28c5eea1298101d4f36a3c916ba712e60e6fae76f1fb9b3fcd151edee8cc2bc19008415b4617b08e8b0c37edbbf9a91ddfa920ddfddc4b3eb9bbb52c7ee36be9434bef196a647a6fe3b8ecfa10db8f4d8b8e67e91c851a9efd317c84fc31eaa90be8bdfcfc882c94f429abd6d1b14d589533f9a93f1ae609c087ba0f4750e2ee7a8446124cad62c923cae9c1171261e1f26137e3d2149486f897f7af066307a4daaa836abfd59eb30906567075aa891efc1fe18a3ba20ba1aec95df4c58e1168077e2c7bdfcfdf9d12c3ac128c70ecd1bd7050c18d9604a279563235a50e080a7fc3064b83a8f80c76199d6ca76b3e30dbb5c854d8f468dd070f1caece9d6527f651f5555baa0bf9a1e53adda76ecf79b3be7211665a308387510e8e950bc497a989edbe4ba632a9090f213de8d65e6eaa219e9de97ce93844b59b030304705222f9db8a16f9cd073557dbbfbcd2aee3d75d6ed044407ad106474368d6f228f6be48031d7676c727c2bf605a5f08eb8011eef6945d1baf32c91f34f6e723504e09dac8225d389446d9cff28d33756840fe764338a99e05f240659ec2e63fd5ab87b0c17fa8eaff88dc7676836cda79d2cb9171b7f9e9d3fba3cfaa6a9fa4f51ab6043dccd20e2f3cf69ce32d0a1e025151552c64bd32672ec28b9879e59f2b3b2342d6442e8943908053aadae97737f0b78a1f9b4368f3d4f06641b33b462273229e51a05baea711eddd045569b1064df0953250dc6562fcf7d02424a9402ea76398d2cb4ed892f1cafd1241b6dfda45a0bd1e03bac925c5e7afa27efbb2d852029fe7900f0fdd954b47c4ff58a41c2401f2ed7440f18bce9df362b9b6dd10f22c3a0eacbd864a900b95daa9fa22ee57a44ac0a29847682c89aa99a6db347df0200d53d469976878147200404d78becdb809bd978f1b53bd1089237ba0ba3bbb39444da86d6541f4bafdea2053d49e2d34e0e71a187b2d1a8b0c7e61962a7cf7d9ec4e6181a080c9debc215f1743bc21345ad820f8f33758be69ad15faf475217210964aafcbc72701c59d17e63cfd9c1d3dac7d7043da16fb86a799d22a764a31c6029c1d777d8dfbc93ab8017049b28fcf286922b075d8aad98a8794b3219bfba9e848191c9e7efe2f53ecc27f5e4e3053e55d76cdebb2cd7a8dbd71e6f1387ee00a0679416adc569e4c7f237eb8a099b7428b08723094a91a0b3a0757d0501c518ae19ee99a0b81d058149546e324037d20269364d0541f6d211856555897b1fdb9dae47e7c9018dfc3daec7aa41352cd790de9faf5f072fd67b868540c664d3ed4f1354e58ec6d9cb5ea4d39ce9c241aa0b0df4de98e51be4357278394c01b37040642de5168448fe14670a3e72f499f9fbe4b1b854a68b14ae176d18d362714c1926e204fc7b5b3b72a9faa79e17e875c893c24ea704a3c386d632512c38a9c127415e0f0247b9c096ae9509087a843bf365729cf1600d4dc08c55c6a4da60982e971b0c42596bbc982e7d8d4ba72d36be4cabcad99b69ae6a9046f93a5775ce51f5a3d76b0dbe60d4500cdfcf1597adf18556b66c3baa0cd321c823e4b1ef36138c118163977b0c574a3142dd54ec22b77add35ccf33e8fb83f71d4740c638c3549b31c03737383544381db142ff80aa52364d93d829fc33e4f940554adeb11fdbe160cb53dad77e338e90606bdbcfdcda95fd7730b759fbf99f300d5b71c98bb21687731a5b24b911513bbb910f1ade1651d0da1cb03cf84f41f09db11b3a26b376c033102bfad3d6cdea351548a176a90ef7bcf5ff50973b158ac932499c1576c583c3e6241fcf0b287f5e63263d925b7c85306b4be81b13ce07ba8fa2f67bcc85aca5676e3fce9a9db528e5267c85302637ced6a467202b54421b9d2b5da8344d09154cf61aaeb0da1d20ba6c49505b1d0310d9a35f096f191c0f9b3ad02b39337e9ff46efdad7d785f84e60ddccf6ca07fad7ca3c863a20694d1b07cd474881b74ca233da8d9e5f10b7b09e4e68c03b730d7c14a11408bf50c7194ae697b473bc2ca3118edc87b459a1368ba39c5d3be0c9bd6360f08bf578ea40725860353aad17410d85d61348596b8eacc4c936d922d1e3e3833601d804a6896eafe4dd31628dd1932740f7eaa22a6a8b3b6b3b130adcb0d087f765034fcdf436d9ef36624c1586d79b900a3bab87fcf2f92d4cdfd03d2810c97040854fa4813e7e15de46e49137fc154de8e676ac48149ee163464c5c7c5f1def4bb87b128bdc2aa33bed862834ef06f11c9541ab6c71257b4195fce190e071e8a0624a2c9aa5cd5f3db80bdbbbfe2596ad2077eb72909bbfce5da74a5581bc25cf0ce2a00e2b365ce91943f925de9822c62a72023a264e5931e2f0a8446a1243fab5c66139d45283cda2336da5ac98b1b9835e1180ebf0da3fa6218b20b4bd71c807c26eea3ec32cd20696490ad79ee605fa18ca522b4d6dfd41d542dd6357f291af7d5329fd6c2989ed8f6092e2cf163dba1883c9428ec5c061bd2d30fc34f8f01bc2107819da15c6e3921e820ccfd498e89c0a9e607a0e8a3fa749257a356f6a35fa3ebd9bd0346956cab4bc550cdd83d291a9569bf73a1338431db648b6d9d773b70ae3d76170d2aef71f445f1074f64cd1f323921c1c08e321be4aed0585a84e48807dbc23667e8a28118cd5323ce868c1889573dc0dcae984cb5ce678c49231febcbb1bdd55aa1ad89df909a5911f0e41ad69fb52e0838b27d3b55567b270624eb685e4e52a517b0018be5b5e4661289d2f474885f8aa87b18dd83e979221329ed238650674ded976c09ec83f3a99da349a25c8a4f9e265bd1f965f3bf5bec619c850789f8eaa5758da77750dbffd7c9203cab54a8aaf7c415d22e3712f6765864f11250272433b660aa9414d92ad826a0d793d6cc4c79abf593ab25bda6f465612cef8d9bb8aa180253b7d22aadfa0c964c06a64afe1ff282c5d447e6b1cbd814a44220b999df7de7d7dfec229425a1b32b9db220bce4026a78a4164d4ca1d60d603eec4f192f45454dab71893371896921e023bbbc0b6ff88145684e4f7f4e693029cf8788ad342ffccf40d2ada7c5b444d5b322783f5b5798d34bb9319f450320077511ea86f434462d4678dc199212895dae6b28e08ec46b0c7e35ba5411aed639da66d669f70cf6db80955c0202d406dec97847faa7688f06462ab6e7363b8cf1115af49c131b020a03df4c3da5a6d463730747c8b26c4b161a7227ac508204ccb9a47b49d2c56808303ea3c783dcf882043d4dc8250d649a0e76d66056f901a637987dc2cc805b8fc102c04c1827affc1dbc6fd9cc3757aade236c9039dee95786814478975d1da1dd77d0eceba287e315bd5d9a8691b9c62e395f4f10bb06c56ae61050af53ca04c4651ee2ecca98e624c0b16fdf8e4962140c33f87ef01154fb5ef9b76f980e6d1deca38b123942ca5a866ab6f5fadc2d5a9d1da601e5853642e1f45758906140722e9847c6976fc9e8954fdc3c378d3fbea0f279e0a90bd90b4611a2d23213c27a1443b24d7df15813ddb05dc81ed3179a970096f958c07980d6b66f9210aa9902e6d309a1bcfdf327a70a87669fe41973eac9c10fb6b95d1abddeb0590c3e37eec3b2ad9426c6665783abdd3d03de90d4714291f744988d7e777081fafcb3804e67d63da126df736cd6bece37b831eaa3a467e97bd8d2993422273a9580cdb8377edd91cdb6e573cac0a46ecd1451db3b34390212011eeb52ee182891d1d1626fd216694a14f435849299094f01c0f5be227fb9458e1196da1f7ab56994d7395abe0cf19ceed180ca35fd6ae89147f3e287cec75b4334fabd6f5d53c23638d15fad24f0d5613e79f1ff733906997d3f62f776e35d4e23e02bd24f83e09454f23b08c256f7aed97f25ada5fd21a295c4401f0929fbee53c9a9a9fe0db639a861ff68d5975f3575b654391a7fa66d2a0ea871fb12025f3a08632cb5a52c26b1f970c137c362b903843579ed05f649b8e6f5cedc2ab0899f1b25160a1e6f981d07acb124e4e0ef46ce4a8f86f891a59938eb7b6dc7179473a20dbe192bd244bc3b2fa354886f8e2603ec89c95f1e22ab3546c65d3cf4d9f5a38eabd5765d640491ee4f6823ffa4ef86256ae62fe95c52c046837fcb8fbaca2f11be3422f7a381ae2db84b4e1f047e6c35cd096465dac4c2f6be29edff2a1ac654fe6d71f31d4e7617d882711d887f342ed1f15de1727a03605de2e2a261b88f8a3eb00ce745201a1cbe52e34c7a067cf89bb41e7fc8599c036c493dc817bc2ec42c1c7a64d6d2b4ab0663acc39443734d004b0d9210b72d34295e6287be27664b52a4f1342b858c686bdfa72a3df708c579ea6d0acb57df5a719e451d3322e8348cf97153de1fa831a66aaaa9185bc171148c6eb071d4dbcbf20ba2d62c3ca15519017bd8325cf05171552e9266f5642b3d1936b5a108e2ce84d7a909e68926fedb854da635dafe6ac39d1870273a61e04c58a209296522420327e9cd774251c0ba88883291cd607d9846b899de24fccaf02c2b1197b691b022a6ca0b9ff580da9dab5b068e6697c571fe47243bdde1006e52ef7a90474393a0f3e16f2c489a35e4c815c6d914b6aedceb686c738dd9944ba486e19319307fceddb10c88e14421547124ff9af01d9f837e49bf7698001b6b5c87618503c8cbc6e40ce17b6426bb1d1a653efc819ebb863a789a4da61e8569c340fda3a104967e5a6cabc748d6d95ad127b4405cfef010f37170a27fc3e344a5698f94d489e41fa0ba134e1fc9a16492ec2ba1fdf2aaeecb1f22b111e2e59a3a865cceea70e1b24b502ecf256ee215b36ab89f24b071add4bc5b672f2a3bbdd5d8a00a07e79ad5d8dcfb97e62e7abf9bbde0c39bbaba6179f3b191505d5ba3945c77bbe803fbc1069c46a0ad2b252e1b876da8c0551bf11e7ce87a1f83bfa44389dc48685eead280e3ab4f9a87e69fc09ae5171b793fa596a613621c743e99d75e9c0e47b0ba3e1bc734472c80f987a5a3eb448572faf780f6f6f0baf3518b8086566239d1deb87e72219a06878bf30539e09fe225470d01c7df91b563ebbeb42e3637d523ca74b6a4cc8bbe8ba7c17940bf5f579bb9c83173e7c182f02fb641737cc6f651774a2d2a3d4356d861dabcc6cff7361ad956647a51b5812af0db5bda47d71880d5f8d470ff53080f855181f83f4d8a5435b8baebd46542dd32ffad021c7481412494835f9fc4138efd376c313d08c600888d872cccf8d55c50b59fe462af26c3894f96008394cb4d2b26fa56939366e356ddd75686fd6dfcc7bd912832511b415ef06cfb9ac621bcb2be23fd17621dbce1c64c1063266c5157179e1b2900d8e3505e5c055012fa59677e14c4f13a1de0dc24225bec8c49521d60f5e971774c8a42c6f6974cbaa4ead6cc39d76b6ba112ce4fb476c59a48ca208ba72d12ad1ee2516ace63d753b5b0b7b6f060a09c1fcfacf30c0412fdf2cb40f01317de6ab09ddbb34948cd27fe48ebfc7b71284d4659ae252aaab48ea66418dff0e67c84d4b1a2fabca29e7eef431dafd2c97746beb2d3177a8bbebaae6957042538bfc0eb432a619c470ab10f10a3cb483417c5becf7ef80562999c45cbfeafc3689bd8bd4652fdc9073f3ef8d133d3ea8445bb5b3e86131f40150df9d89146c577f06cfbfb0e02d8a1e88a926354eb7be1171f9809e232b915c562a23d8663daaf7c49008758405827f4fa2ac388feb24eccf5c352897dcbb0671d78422555d6860db40ec1bae7e3fcb5552b1548fb8bb54568eab9b1af7ea155760197c8da42cb9cad84660b92e934c4549f1bf6c417e64196a1ebad5dd0c2de50e702f60e360612ffe6795558fce8fa129255e983ab8d4448560af01ac34b324a1109be0b5b09b10582c259f4bf649dea54a88451b77cce783e4bb68bd75f48abb95ed87c797cc64da6d852b3b7f4938a67ac7042378a9359d546927ea645b37a2295c62afee58da9a7ac2f22c86d5062d265c937ed649942a671f50e85b9903ef3e52cf60b5076d65ae7d87ac6fa66b7f9765ac59f9fe680d26bf56ac4f1bed920c5b7c564df9090b882383a3388561ec66f7905cd23894a612ef0060ba2b227d2fb7c9b71e9fbd923c75f5035ba15024849544215e6a8347f0fc25e3d80c6e8d7c882de22956d2dc15bb6ac7fb019373efa29c1f135045ee4bd43d3c0d7ae82a413ee8deffd69a29785637a5bcfd92e8e083c3e7c9f86efbd0f68056888022ca9b0eab91cc5c80b8fc54feb99b6af250031b5d730b2ef0eb96acbc7be51cbff8804728b19b099da902622c249379492e2c5ba2045b53bd77025064e6771af6f92fd8eb669e6cdf15a1956c4e6ac81b5e811764339839295879781a38588702e8c7efe9eeaf123337caa79db484959989bbe8dacd649c6cacdd4bbfbf7c95a123b95a28f916b96ff7daa8a33ecd4762195fe017a42b0e98a49c7fe35e4973537683fae28fb78946ecc20c628c2f201212119e92d16daf4f2f3978f82014b53d596ade5f2154e33b08ec85db91dc46f348cae71898b902a8c842361f1af44978b91d9b3d290470b22588ebf293b7df7cd3afdd526fee67a8ea8628927fe0dd8728829cf0b17a399ab9334b38987e54d680ff3ef522c6615eca3575966522c1de190279f3ae86e3430eb614d0620b9c3dfb9c7f3935f0fd2f7968bf233741efffd06675d3dd679686f3007575373445a196bda82800f9ae8166e17f6952c35e424fb030af563da74da79d3ba01249cd700af82ee87cbdddad3d8438fd39986e545895f4c4f7e47bf9f4a5892ea5b571e2e0916f95701bc7d908842987159c8affb0469645c962d255041a3197c8fb49aa9b70fd599b4ee27528cbe24cf67004bf7e8b66039437ec75c322535381c11ce912363ac24a54cd0fb8f14e93367437f99d5f1e57fc946be17a55e3417b4f6da79b81d9f5da22c18ffacee60a3e64cbf536492b6e337babae118eadb52cbab5961850cf9a331db2c218638be46701ea1348a2ed7623509e90d8568308153537f9cbedbddf5577fb573be0e26991aefc82d6d7d121b0c47e8cfd611d15139abeb4c5ba510988c1211c7ccdeaa196d3b1e519f895e6d4293463b8466604d4dd34f3ac0a3a3f909a9c06eaac20a73d2c0038a197a6195c5a0f76ca4c1f4505e93be9178d957cc6fe7ecbc1b628cb87fe95b336131e2cc16af8efd68c8544211dbafe493f151ffe43f7325b329660263767593e33012cd7bdd22bdc3e7525b8a63ab18ce75118699f874c4818372a1806fe658cd902b52f26001bd1923741ff48ba92b42256ca98af95134b34140ada919278ea6c5274a27d4b42500a53ff81589865318cc38eb220b2f459a950bc5226adab5e7c3584b3458e4a4929eefacefdc4b608ec503a15aa401ba22f3acf42feef55032581f812885c236095f312312e590b3180cb4e592ade62f3260601111f079e087e52621b4fc2d6e4ce8304e54aa780c255ddc73e5507ad2a38a88a5778e970ed41c1eb2b3d7cf6f26fc64d6e89a77b7a026f7b9d97155c6dd5152aa457a6b6c5ab597a68a947e1a1954ab3b9266f3ca1529c4b48e0961dcec49649d6455e4f70e50af376a62b4d10607c1dcee4517f6ce4012418cb955848282de509f43f92199dd0e0a19b9184f92292c4c86601d1e078f3b0f87b6f5142c3b9ac6793b474317123244a0188bdeda8aeea7e87d6baa0be9f7d27d90910b183c77a7d446964960eb4560840c66142725412945e7d73adf45baf8c81333fe8881dc4b61791c7c0a18706667086869089be225a51b646f8162a78919a173e9ee80ea549efcbec28faf4e02d5bf6ce60bb8b080b95219b34f7c795ffaad03a45e42192fb45b4851f551a223e4fad3080cce0c0aea3447fd4a101685e0c6ac19c36872e27cfedae40b9216d37cabf5e9c09c7b4771b6d90d847dee22f9fa546a8c8673ac541dca7346ec92de9e380d19794ccede1a612954f96e289488977a6cf2cfa47343d8407eba9a8d1b0406087f69f2633d2fa69cfe1b46c65f64054c326d396e55e094e8f00c86da592cb6362f2402668e162b24e446aac9aa8645744e845e6908fbda5d53f69ad6bb8ec0347d88d592755f1328d039f03ae132969a5b1551b57801d1005630cd54b8cfbf7be0d157c52591bc04cbdbae2447ba72abf477bbd6f10728c343082ec6fa7f79693b3c4a10120130b9ac02a1733ee6c64b8707ee41f637f5655c8d1cfe44c336bcd9a92c687125b74ff13b9599e1b4debf34859b4de1c28830bba358393bc2508c7b485d28723770459ceca90bd0c19cb7fefc68128eadc2feec7d498f0e91eed7632a5ccfd4301e88dbe79442573c771fe6f86574ab111d123565efd713c7d3c2b4f500e09ecccf11fb16008cea11938559b6950929191f15398ae0f156a9ab8400cf496fb720db4673a0c4fdfe689faa7f08d1a2eedf30d56531d9d85d830818cf79491c218e5e8510a7f79eb5256c4924893665a98d44acb45deeac968669c311c11e47057ab914e4530c282163b45c48ecac72657b4368dfa570f1c7764faade153c52c99e0bc9a2d774b959558e0093355f041e8723843ef88f26a5da73b15dfdfbb8d2068178973b1a79b0866a71da74bc28bdec287da75cbe50f553541cc67a1e125c69845b19f033df42967619b126cf5348d0bc85fcd1da24bd08cbf089d7594ab4ea0e1b62bca7301ca9e9c0da1cd2a9511d28f91c2b89d0e14c01bc20e868c8c9da03f47362a9a89d11842e1e9a46a293e0796d59e6bddb6c8e0a60b777eb9ef39690ae897caeecc11c3a5ce230cb86e155fd03589f02715ac768d4c8e10516dffcc90b27ebaced95547c18dd07d9af1456dc2057c889d9e74f5ad60ed057df7acc2934dcfde4015b13b446444bdee7518a113bce0d6482b4eac5fcf95eadecc62bddf5abd335e0bdb9af965ca1ef3e5d4a98d0216231f2b7baa14070835608e74c851eeaab321663059bcbefde5a7ec5307fe89c8a9233038bb6d0f074a3e144e70cc71b51fe95aeb488c768daec6b1324c5b4327bb1b004a78c32bae44062f1e171c4049c46db816a74ee5a27fbc1a7d7c4705c57561156ffe6b32e342dd1239bcd9c7da37507c3f6b23a3311fd7942451e017130bf9918d751cfc7b89712dc34f4ed9988ac6b6a655f17ed36b9d2517620e9f70045d9d34e6c4b727e827bbba2beb5da81899102592843bca3f115ab9ba412ba040c9e19fa12dcfb98ecaf616a3f8ad2cb111f1a24333ef13947444100c7f5bde0baaefd807a843f2ff58a82933b1e38223a2bb7066753e7d47e52e2826c6a09d6344dfb03c6e5b676c7ee9815c693763467c76e463c6a48d05a4279213467167d0b1e634b0c694a5cbabec1d426b031e1b60ba78d097edf7d6025c468203dc42efefdbb958691e1013b2b62850fa256a3beea79e939cd74150a49e259d809da6632ae31f70c2c8cde4e3497f885a1ffc4a9c73039f211d0c80b7fbc1ee3e326fce07d42d4d6251ada0443436c52962d4346ca9c16f111951e8ccfa7064bfe356a1435084a1ab4ab3cba35bc138719552b0fc34e8eb418d506c0c7d8e5ce7e27e66922c2facfb5d528bd3f3d96b3ab37be62b480b20bc970a8b58144dcd89b76b871ac938fea8ba6e5c4316603655c84ac778099effd6cccd9219f4a740ad606ebca95798d8db8a0dd014e5ea075f49161264493f4a2b4f1b96168f949e8c0733efcbf6e6f9253a2798f3d5454ead4ee810427eea9b6283b15235bc0d9f5f103e8bb73c11b89ce1e0395b224f139646f2aa8e28ce43485666a2a2b7f9517a5e0ac5cfe47dbc011a866738c72abff9ae0d06500399093cbcd6e9065a38a9446d9234dc92c4f2f0a9a544ce1057b6ecb3434219f7b933096172b30a50764b6fdc879a431d749bbbe78d4a5a288fe9bbd55d593a6f1559fdaab0aad11863b5ad7241dc6d423e448729379bf18cbd90b7e941e55f0badde66f7f133bab3fbb074b528fa875c95199abc4ca0d8ac5a90e9cbc7b059deac9cb2c42da35364a255462273a180ffd9407631262cd4db9fae66197d007af67092c6dd14e5d0c1c2e9c3f24139b98921242452f198b0ddb2962d20b2ca11b4a92d8774e35017c9417628e193f07d6593cf845b1bb51f6f97f2a11a42ba8380e0f2557586751f795a5aec08727bf3a8ca3a39049e25ce3823dec046218964a772084a05c96ed00c05896768970f7aea77e8a6067c7f3bfdc0573d6da5a48efe3cba70f996d1861da523a1d9948bca0bd7c59792210f491506e49683d285f8045241f7de1081b06b38479e82e8cce80a37466608bf7e0b362bb66966a0e53d62268d0676dd2f5f4278b4637c3533030f481cf29b55d1ec3650951d29bfb0822ec7057f235639d293a4efb2f30623fe884ae55604bc270d65f88851a5eeb240dee1b53306472f06abeee6dd0651819794eb4f2311dcf0cc42260d20642386e1f680b88c53cc87fe4d3926cfeeff6cb9975da973feecbbfe38c4f62f60bd09f46203b063f6fa81865eb98e86ac8ae30c8cff6fc270b1d7128b6f5cb3dcf4eba1dd6238a4f8a5ba76d61db76a787e96970dd120b95dfef1bb6331b123012e8c634409b8c004fcce2156471fb6d78bb86e92cb13f33a3516619c95f2d6a29678bfdb888e69de79f57d47df8492f92962cb5cbf6ff5bf98288bb3a46e737f802b94b21aa1b810075f8b448229523ac91c1a5802b7b66df8cffd6e9262363f4b8641bdbaa4ae7784f31c453aa3e04d32647b67103b9afe61f676d0ab43e323306a0e63a61a291dbce550737feb3dea461c03091dde1113160701ca7e979f567a1749095368cefa8a1d68698b29f6b55949411c283d46f42b67793f2bc3332e2514bd186f8aad00fc457809f3aab17a75cb4bf20a161aa2bb1f15a2e3878edf9ed1cfff43f72ed7d7e3ddcf5ea85b74515877cf43f32534ddbc09c4e2cf02c64b20831dfc1755051d119bdea7b549a9f0dab13b69b59875e7cab106e96b26b23cb718db2e3e0f107f225de6183d926804508902a672bed2570050fc4cc0137524a4014100ec891c63409eb8289823191187b60209dadbe17fe76a9c6876946098126baa964532cf69615c2501842d5030b254bfa39eba360af5a17e4828a4cbf7bb2539c1184369068e4adc0ebd6cafcb664c99457362e78ca9eb8187a6a4e3e7303466c262318738ef60b45fd32c5922dd68adc5975c683f170b2ba14cd45403f7f54b732693f0a3a65e821a69ac8275e5d513d2a2f4c08e55a0c2371a62c8e331964890500ade40d3c22ec5cba197cd421a4208eaab182968eefe4309878fd1f1f296d8fcce1c7c2cf04a16c02afd6634aa16dc69164b88b528e774b2421da2d7f69df3786695a37e1bbfe9de2bad913d7e012e306b61e9336106e41196658085c52f58dc457513cb037aa185dc90848303bd44bcce5e058dbb022042b7b710cd863df3d4a717ac99c7655550b9d283517f0e6d6bead55173fda6bf7e673e9c4e921c7d3eae990f122fe09cccc2a4644e67d07a9b8d1f6bfa7a47b754131721d4ba1ee8cdcf02a1586847b780cb21c38c728b0c5b3c34f6c8e1c9bffa5b0820be5bf9a04217905f781dd98e9d1217a1152c206cbc04ad812ffe8b25777beaa22b90f70714d3f9620bbdf35ec849e6988620f0e127d606685158f16f0268456f6098b46c8ad20b2ffe2e4393d17c733e78cdf9c2e8a2e9c1f7ef5bb9579845e5028e8affb13d0b06a0d0946a78efefba7f2e1e1afdbe323ddf0c6118598fb28ab8551437165fa6d4e86d34620d579ca8ef306fbd5210b9b0a4753190204f4a10c52e43131a528bfe3a8b95b5f72d3da4e85439f0435cbcb3954a76da0813b873e586e5af25a6acd7d571ea1fc15c784c577a98406147677e05dbe9e000e680ea47659377912ca99b0011cb3adb61a291598443781c61f6adcd6f2b404c03174be541b9e41cb9973b73a21a4d4c69272c1d6a1471dcfbfb569de2e6d1688620f717ef32d5655e3f9c4f2c01fb4b66538a4f72a0e53a1fd7848dca8eb035c3d6c66d9849599e0c15b43321cf1b88bae36277ac594366c3b75b59f3b7fe824d35e0e42e9643440dded63c442efb0f03725fa9d6502d5e3a32e7795341458a99c1b62a8bc7ca413fb2274389959119f9ac3d5edf728cc31a1f03c2e7d1efa657e8f4f52eb82370b9aa963014d5a86fd41643a7110c58fdab5791ad966f01937f73482ba76bc0a6544873177e638c2c3a6459f7c0ab6a3aab9235c7f1e8b6b04026e214a733eb103ab382a8c923ecff61209f6ecfff2fba98276dd224de0d1c85c811b24a5f3e8f23d25bf26ba0b4d879bc2f72e70f3b1741fe2cce29f5fc8bb1e5523ace50edf25c85b31bcb011ebdd63eb82e5f6f2d08fb83dc377d6081c216011191cb51b1e907bd3fb256c762f8345acbb5f97d23223e6c5929d121247a1eb3fcc51b0acefbefc600cd6df8471e4e8a34f726ece6b60ef8fc48c42848d70f76458b94853a67273c4c1a612b495ef2578a35c6925b24573b8df99792ded40fdf29bcbf23b2be1f51d2eb8de0b2712fb9d0fcdb1f5f4c220165e1ca831422608648221a9e3746e3ae0e88bb3ef68616c8da096cef8f8bf38e21b9e4eb8dd443677b8c58029f13de58d9e6acd937cec4250fb02818fc6adb680fe17ed4d2482460ae7b29b6d4bfa4be19779d12df4e79dc59e2523d7228acc1cad7c22992c73f03a4b4ba3a7ac2f18020c0fa4e1395c3488b325a61bf3f737138753ff4da4b69e7af5b393b13f678e7d67f7102c3db771ef832db5dbe85654b04a812e5afcd4e51b982baf2432969224d569bae5d07206e3718de2a5fdee44a1e4056697f95fed413c0ec842122b5eadfe4e64fa0a77663491284ac760219de77ca342fba7ff0da82f1ddba57a2d3324724ea4304d20c45f5f466301cefd6147f30636726af1c8206a0e63d954b37eb00394f129265fe14379d30459f7a0404ecb117914f36894697b09e6d35b940aaf3bf677868f8440ab049db5aa0b63e941bb830b4d6568f1aa28e26e0813b9578ddccaf31b7c9a7a7a77b98ee68619387d596b12680376d2c43fbd1bcad5cc3901e4d2ebd96a97f00d55a17997fa50bdfc23516a904687dec486e31c18c4a0bf16f2fe78bde616cd66871953e7b23a1a24c42a0958018f477e4f590af211a44e5fa1074c23c2000f10cf129b1064a833f4009996167540082382210dfebd279d639add6aff05c3762bdca231f2b16c1df159943756ff0441c1c883c1a3e00f76f5401a368fab57f93e9d07b3b1a6e5b0329aa90bff1661501752821727593271735708fcf9a7803c7f719920e0a88395985966d3daa9f1b9e6ecb8d2b30ac34164bbd0ffb6d54860522ef85739120a109aec96a9c45c85a0fb768da182036ffbfffb0660045e01c9e4acee9dc0d08973a50cdb3911a4bba7a5cdf80c4b0626ee6330032785eb9a6635453839bd74041db5d4d984c59353fe51c16fa70909c4e9b9626565b6d2d850a9e452c2e054000483f4c004d9beacab293edef6c64fa1b7523016619ed4918dea0ba8078e2ce107bc675dcd03258b09858f7ae4f57c946e4dcccaa2e1d75ec4fbe369d07ffa2174d235cf6f40f5601024e9f2e813953aff10594d1350ade2d0d3e71e452b4de13c4d6eed12234b93208309821bf66e289b5378e6d80d64b9de797d40f686c4b992d0350cc9e10a6b6ee6f9c587ea5f0b3d9e8f58bcda6c92728e2201704e60ddea3c95a69882008f177c27f0a49c9a2788b9e605cb68a067a4c7324377863484ada0b8bd9589ee798a816a50ce71359be96cfcb87f428f390bc12ac4c4e5f09c6c9bdc0f4d9d3b0874290e37e9092f2dc502523191a97b0a48a42beaee0c1d833f24e5b4df8914f8c0baf4eb05931ae886fa7b35986e367c7583779375340c527a37a224304d1b40d8ce74568caeab08e20c040c57dfd21e0d330394583c6afb4281e3b37889d8252b524914113b23204026f11535897ef41aa3b31a18600226bd9dab06ec477588188ecb7c2a211f1af8da19df9461009ce6ff8d276f36c253d09a93e45db2d4d97155b8ba2034d33ba96e178aa2900f3413cec4d7ef674368fcb00e9401433a2c082318dee3a24d72186fd447b9f004e8aeabe6ff5602a3b80b7650bc0f88663a3fe83438a9e6046160a04ed32c1df7eb0f91f1909324e313ece44c67ca88e7022dcca0e7d055cab3df27f305869b6b8c53ea6d0c266e8160b6a8e8aa7259fb720a11aa04da26fda86dea62845bc6560ce423eeb8978537bc01028cfb9eb53d44184b2c1154f2942796307610af60b13362d596105cea239ac229e486d4caa9ceacad5d80a7138452a19671cb7453363d59c66d43f9efd28fcc7464b4eac4c960c007971c32d7c57029034bc473c55b8cf1a964f7c3c8dbf7c5f3132ebb0ef95b612f4c4a3616689c12e32098d3fa1d9a88acd545c2c4a54269dbfd53229a41285b443c3738738dab0bc136f1f7f6a77d30ff69d9924e4dce92d386dd587a91634140d50c25746ed3cc2aca1b252de9fe2418949dcb6c1799f7a0f13b650a26c6e06dfcce08ee7fdb07a23004c3382a46ad6a9b58c8dd828b77809ec05248119b0dfb6e7f6eafc648c2bb6dc6f7540e51cd55a340f83d07af2011c5c3a954b58719bf4626ebb68624c5ae15cb5c5279501556aca44bc5d173a417a9cbde1ed33a1c68be9976f70f7f7fe5e9323f937a17752b42e6f12883e2464d9955ce6b2da50d5076cf260839a3304049f0931fcb92552011d8a51d0555c430dab507f922eab3ba1e3e4dedfd850bd9812cd34e63eddbd9dc83bddc7f5a45edbbc3537415d389fc1f57a97252b86c7e87c5c08c954774aa7859c7074c22ba1d194272f5920aaaa0cfde3b2b0546689978db4de29dce2b30566978188baa7bf6ab3418a76a4417b844a329e216cc4cfa1439c623a68480a5470758ad8aa87e24d8fad92312420ecb3bce1d06952e52870b361632c4a0e9f56ddc244363329b5087e66d5dfd827aa61e3cb5aeb6b66038c993a0fafa4ec6e775fb0e0b62828228bd19eca4fe8d35dd93eea2deed9b7d25dd2b2bad9622ae32c0551bca47afca1e774de92807531167f320f338cfaf3ce9ac874e1e3989e4da77827b3772ae7ae12b1f7f8b941e544cf8ea602cf8109be9a0950d79a7e0236127f395b443f6b3b283a5c80977e4b737a004cb7f46006f8eac0c142e5cbf1a023099ce269c6648fc3a73663c4b2dc39fae85ee01301ed8e8da8724857aed65d56628287307d04429a2f4566606df1f7c889d4f4000137da0e8fbd9712b52f6f6a900c7f4e4f0efe9ed34768901b0c72eeeb31902bfe380eec84d92dd110a2397c3192123a67a315f1d07cf9d3bc95f01e1938cb8bba24b0b8a5b65c1de0d43daab46a527ce5b33832d95e4c2bf40d5d82b540972e4b7743fe7571700d0e153995d53532470e5dfb5a849b3819f7244dc7f6b02d5a0ef90b8f93290e4d93100c7f8bca4da93faf6073bbd75e900dc55123acbe5c5b0ddd759f75d93593e7711f91a0461caa21226adc107594f4ecb9f4fae851e3438ae90b42216a941e84d2b01e1ed5fe9c99259387b3be13f0bda549c38d3bac08198cc3ce23f90c0a9e0bcaf91422e0a621c1092c963c72687786aa9a40ee08456362ff8c2a183ac1df65958028031f0082ee28ec87a6bb3e5da35f29d27c63fa0309f7b2944f5c704f4c77754061d83a06cf1ef0a26e9a3f506f4a6bd774184fb559a3416fca33f50ae93f4ad8a3792520ac0864df14e76bde95c3dc20dccdedfd23ed083c978b042779a9703ee78dd34912004d6c20a963a1f53c92c50aee4073ba6f82684b3531fadca0edc99ec83d78c1a00a6d3bc8438eaf0f1ae881d2ba8e0aae283b7c8ac8bcf320f7d844d95dbed1abfbfd33d5b24ce052aafd522e170d0927e2d66110281926892d7d9949cb93b0e2d82c8b9f1bd123e752acecbab5b183debea98c4e1be7ebfcad705d444b97dfd68f86d9746512a5732953742298830c2c4f2d0d2deba812c6abcf1dcd0f16bd84adc5fd568cd45f781e69e234b882cff981b1e762b3f60dc7a37039e5cdb4d2f2c830964d819ebefc3b97540abce3661fdc7940a0430e035f0bb9fe39e3987e86bb9bdbc153486a7acfbd6c5239e1e8eee0dcfaeb0d17c880b973ba918dfcdde30d5390f3a447953346d28e20b75e6eb8f6fa7dfc753ac11a31316425b5fdfaa0606551c5125958471be15deb2c66d426536fd784c04effb14a346a1830a3d7c74531dfd732b4a081773e898f1acc42693d7402871d4bd60cb1aa93766f9666e39b22497e8bd3f75e041e63a7ac788d7f4ece777e8fa161dd4f64f208403f1b60e1f5f89a5021f572d9e99b7bea82ae5017e6f2760444f7899e779d775ea8bf61a52e74daa41ac42e35ad840771b2050cd45b690b00f53acc9c3a69126b163840be36eb590cc5743fc6d4a7adbc37fe430cb1fcf442bd9586e0425e57fd53f506a64ada6d095a509ee7e70bf7b9cc081e155712418c15bf5f2f48ed20b115828ea3df5a8f313a18b4e33cda54f0fd12fd22ad575bb5bbd5b60f8fc4b65043a5e2bf3e1457b80f7727babd4030ac871580a599ccf543c17102b8cd581bd09d3324fa3cff0942d7601117aac2ae4cec02a1ea4abfd1db58ef7d98b38c6999795d21e4d0f823f2ed1b621765f9a96fe4681f67fc3cb5a414cbae62e152b0ab56546e63138c7cb3a9a9bbadc57793a13e5472bcf8a698c869be5e7be2c55639eafb048e2d05b84def6bc0f787e7f8f535bdec2cddd80c8d279f7f66d6d9ad7d53596f92402ae8a6b0b60ae52f0c12ae59b227a55743f2b2ef45041e74db3b35135c337dd1f597d32c0c80cd9176f401d540a813f9dc69e57937159a713e3c8782449f7a8b84f9a9c72dd49c8bf90603c5b09885a945b18805a34ef4c2f52c48c9a1a4f97e8ac0973ab57b158b86d19dbf41ad4e3cc8a48af5457f800bda0623db9568e004aa49125c8e3e2dcdd03329d84fad4a77f03865d83e2d5dae3d304f4ee400cb58a0ef05ae069ac5c44f4c1fbe6b69526c7cb28a6b0c8618cc1d850cf4428cedc7d04fd12dba148a6de6ab7fa189beba6b8ea96d978b59c3ff6810bcc2bd6de492251fd29ac50d78f1e7fef09ebd673174ac147e60d2a00d9fe6239c67d516dc1a28ff544f9cf611b1d9fa6f313f0b6a8442d578584d664ff50a9ba0ec14cffea1caf801ee2420c17bedb55f1a007fd5127b25274523ad7acce4837d1aed63b19fca8677dd208305e1204fd146602beab247deb3a89d0992dd19c83727542ea62591a742971f9990200e4173a94dd2b23e74b5711367447c944c91de00fd1b5b66109fa4984065fcd2779abdd6d025cdb907b9adafcaa7966f89d90f4d6712ed5fe04359aad8211f42c596d04edf606cc372fd3b6c540dd90f72b012ea40cabe0d7a0e6034c3a2924c6fd8121d1c694e8acc153587326d82c7dad3ddd1d796df217e4611d5ae918add07d913c42c55e2f3a69c4e5e0e405bf5d1d5861c6c527ff417d6ea1715b63042a74664f04a4377cb9c88869962858f09348f9aa4dc694faec19c794abe6042bc66b59b5bbe7b1f3bded3c716fb0f21ad7bca2aa1262b2941e0b414b0de7542d965e7be73cdb383b3f33277ff049b8c503a8f93d32b75fbe9e329eb791c0d7573db024b236e7cf0c7d8ede5f73254b380833936d01a388c987d54aaa9cd7c00dfe48624ceb6a3f1c4a4fc31ac6e224c1626dbe5d0ace991041d6ff73b55103edff195d71465e9242e431ad68688907cb5bd35b37c9d607b73a9d8d3e2c4418309af228c902104354a87273ffff1da6a819b3ef6fa209d972d2209cd9d63edf87886eb27f96c9c3466995d96d14deed4dfbe215beece631cfde208789b7912d9677380cbdd65835fea32255161e2e11e330cb5bda0ce2ada368101165387f52e78ac54e4c768f6f654a30a998bdbd92233af8969488bbb433b46268d3fd4e28484404c4a8fd7f8623952a9241d4a6f667bfe51f2b3e3508057315097361a779ddca05d4ade1c7c712d3acd4774692409e03ef2fcdfce1f43b1ab7153622bf25371d640e9f407f44e2eb16807e843c69de0e63e118fbb7704d633d78f365702c6fbd8c907ff8a11265c311c6d24f1ee98664bed016bcec1018a0999995e6a744f7ef718e6e170c6f535d6b502075927c1d0f623d4e95c2c014852a7685c75122f6cad3e8dd414280503f4e9e01e644251d739abc5182daded65aa7d2d5f15fa999b05a9992c8fbe0458b6caa1eb6bf5157e19b40500812929a14fc8076f0e46af6f579840d5c9eb12369704e33d9f8db0033fb8a8d60282af5ce8faf966b9f0fda6f0d2ebe2ff742845a6fdd63f547683d4a201ba2dce1ca26065c7bb5345754559bf098e9ec34eaaab4d285158eb7d9d86743c25551346924401277160d59027065e4e941a4833544d292685cdc2dbc746bac0fa964407c5c5e6e066a8e3f59d78eb58f06885729ee9430316f67a0022dabe90728e30a4198fa22b01a4c5a7eafa93003acb0d2385a4fdada84a0a33234982c86093522e69d90fe2c59ce460ceadda12b65245ec5d5916ecf10adecc0a888a560c7313427c6330ee6d66ef4b22bfa6ea5b23e5235cde6d9daf554d7a44b337733b21c5cf7e08392925bb9360f84bff4ca2c1acfbe9f24910d1175844d749fcaf1e9e5c570f68a187d923e738d08a0bdb0273b032548406e433b7c84b18a50e023e35f797e4244d51db12eb3dd9551c40dd575c80cb1480e89e2f99e7409745bbce70cccfa77cedb01564eb20826f378771f76c3ba6f219db95ed434b632d5511dd390cdb35d32f164158deb35657b6e08cc5f6d2b14d018f3102d402a19dac6dc09809c73da99245cc6c42980fc60cf1cc903c1d800b81b05368b79a2e3fa723a931e9623a1e752e4c36a8d7e2508af26fb1ba381de649c97b6c7e8cf644822d54b8e39375910f1962817fa5c87be680428faefcf46f576844cd19f2507622d92f3cb6504190121859ebc8ba97bdeb0e399fca6fbf3466cadf6345ca3be15190861cb6320dcb9efeb73360ba5e6171516f846f56c7d12ec022c9bc92ace9c012f79379bccbd0e8959752abea3507eb8e6c15dc83ac2302e92a5a07fa57ac8e99449c3209883fb7c7706fad0d671c6cc4169cd011b042de69be5802dca174d057dbf03517ba2c8ad3acdfd35b8ac15285de69ac9c126f8bb164a7dddadf71ea7a622ee9d0dc2bddc57c7488ab6fc56e343a3081b281d69d3df7bc865a5a01c8efb78fbe20a472b8a614629cdb2577ae4917cb1e43a75c29ccddff9f131ad4c033e6b51da14dbe40610d9351965c7e7d98c8b5928203e437f4464a3eab9613b296b396f146955e2fda52b937313aae405a7f1de016d642c18f1a31ae3243ef9988ae36c519ef2b0b85b0382e50625d3b7856899e912eb2a6479f4c56163992616716890c442370d8f114a84a1ac7184b43f8f72df65646f6897afc67fb7ab579e1fe4ab20c744dfe7cfccaa7e885074dca9c4a62f5c2db87b2d0564c8502aa4dbfa2db112a7ce2e72e01e99267f3cbb9b3b42a41826c17e247b9e7681363d5c29ee020cd920c5380b38ed5704b2227cf9cf31d5f5a848296d20d97997c0547135955e601e802f3173b336b9535afc2f5b4589aed2436750a2b085012493122fd30f98c09398575d1659ad2fe0f88896cb8760fac805b2443cb3b5c145111d001ab45df3f8fd5dd756294da8a687487a420eb679aee9d8d99a5fff7ca175b7bcb50d6ec981a370a64bca1b97f94cffbbfa0bda39495f62ac7c8e30ee4c842ea001547a5904e1ea3b32692cf3cc2a7e4f07976f1d2fdc794feb3106bf345d4ad52064178d69ce03a65b74cbca728ecaeb6c74024064e91628ccc04ef89174d05700585d96a575e2bcb53a142ed1305f5a325c888e6ed50f324988a1306cbf9fc3fddee1e483779251751356100a34756cc413710d21c4ff550a7df1cab87cfb1130c7477917b21b57440c3e681d23eb58d40f0ef41de57109c49460116dcb8575225143f72b8948c3545f4062e4966b02a06ced8b8c41e05df6fc7e662c941a0761457be23d28d6307bd46c5fd8c664a1cce28007d627477433f8ad96f042ace1ed77798ee39aa0568aeb7c243ea194f661472265c76fbf6c8db31c74767a2a71db176816a445d1dd356a5209ecf8e53cd478dd3db68fa9ff5863bac44d43d0daa9744ec30f5d5d4bcf84419141f3645d786bc8bc950d3df1896c4194336a7ff3990d6db9fcd1b6d9b49b5d7f6aa42ef3971f91d47f4ec9f5f9a2a68065b6a5ccd5c0c8e97558c18db4b24ce82872239f3f00ae591e60685da6fbd888533ebb017c264b8f440d34d91c5645b903f5c752ea81596ecdddbd6c32978d6c4927f5760cca8681f2a66ae745d9c03c9cfce2bca42f777f533f5b0ec44211b37e2c8c6deb5c4106343f155bc7348f7b229702519bfdadd7e5546daee8b4174ea7f07a392f19a6c1863763594930262e301ddb9029948665382828f14be61c079b923218875c142cb6e6b556f26c9a224b19a582dfa80202aa0f147ab269a948d29fa0a15aae6086ef4a78f95dc187011389367f34a6619b675fc8839cf88d0746207c421ece841bdb21af35ef3a992dc91fe4842a7612b497ef3fa6a48ea8a20114ef83d5fb99ce2eabaf35fab82b42af18600fb1c754dbdf6059befb139a9c26740099cd7262ae6be41d812d783c4e3f7c1163c496a5214f2b1d8b6e27a0a78d4e9304bbaaf0215711ad985ae52fa155864af60fcd90f8c4bb49a80fe44e1dac113b98105542a3509b1252cb03d6549456b55fb758284ae038c4e7d28ddd22ab96e5621a9d67055256461b912db68fce822b2b1948f1d55dd763072083f52f8c8362de4421d5b5fa6a9763b6a16b50c9535dc6cd214eb1b0c7700e5850e391d95c02ee7fb7f1af916690c90881d0c106c781aa87a53984707f248350038e450de5964327a5d4c8c5f7d94c9655b0eb124e18b6ba3b245d2238c5d9c3149d5afebd2c60f619e91fd0f6c93113de0c4e8b585b3410a47044ce48d1f087a1e3992e25d696af4ed62c00f35d79ab980a652150f6ee60f1cc70965a70cdb8237a50d3d6d7c51a8de3f6bca15455ffad21b13d47c85335c5d715a3c17c29e3b7be4e76e7f9c479e5c0a067d22a653c39946ef2960fcb186ecaa68b28fa424ad72884b8cc002493134c6428e4701f3f293ab145a605d8fa613b18f0088c0ee5ff1d10f5859271f7a1471e6f68f463ee39c8a34ac1cd12403bed3d64b0fd383ea4d6dba01f8ed0b42131bd497b373ce71bb37ffaa7e8247207d51158343767a721ce498ea6fbc96898949e4a493c15d511a9558ab07712986d0608de00af2932fec1afcc119d08e99262dcb020aa50084b679df5f96dfa0783cc16e929dd63df4132ede520bd17a5784d736b4c022b440ecc99f28b7a30663446ce7c9b7e3c6e042a6fb3b70e0cdd6b6916ac7790ea0285510c8d4fe901f99b469e7160d1eb1e05e18a77fe4fb6cb1661a7511d64502d160032f69a420f05193b206585384be337a6249ea479e348b10666985a20deb09c93b82c3cd3368b05a1a6d7dc3fd524f9635a2d1c3f720d03573eaba5c6b730b8760c1a61e018ca8fa392700f53be2141adb8a9ec7eb5eefcb63a8625e28e189a4f6515e6bfe9fa8b8b261e114d0e5e5f6fb26968fdd33d2c9d65456aeae0b59ea0110b14f7c57afda44b68992cdc0400efdd9f312f2156d0836661026d2c9c3cf1f19233968f6fc164e62f5b3a26ca00c2df9d4bcfa81abe2856749e90dbef8a9a3d4cc7a0d2dbfecbad7196fb51d4a29215b22e50c7cdcad69c5296d575b835de7dcf0e529dfe43db39b97b32d0713bcbf13de57c7080ae20fe9e95f0bc700a5a518add9abde203017afabc81eb548dcbd0e421958b36a05fe44ffd1e98bd1d1b67452fd06c2b06ee22eb0f28b69a42f377397d1d3d1227f8b0677623692b980f5a165207d32e8d858f3db2ca3254319d6e8d492862595c9bd57ad5283dc72162d610925609649b36d270ed78863d96789248fbbb83b3b4f882172cf15f9e7b5ffadbef8fe52eb47a6a25973971fd184f8f7859b42efde02abe44cd125165711ebfd7a9b2ef23eed0da5099f6d3cfda8c08cb56de472bed7d1e46d7e2b43fa698f5c0f19cdfe4bce6d4a2f30561e5eaffed07ec04af6a8391acf55a083a1049a29c84e91523f7ebabc3b0d16f6c0633b21035e1fd17eec8756de908af918349e839b2907d21b9f913cb5ad8bba816a92c96b56066bd547043e64a27b1bf2e840bed3d7a00a1d53e8569f00df66701661da1b4b8f221cf0b2be8e4051c88808e25183697bebf0f5a98e637eb1f258569b3c7d0b60b9bf68f4800b359ead02cdcaf9e77d55a6778d438004fcf250c0fe721482dcd7d402d75f0886c9067d282d41c0bd9798e7dafde25c6a1f1cb89f0080adf8b65be798fe9f8480861b725c0e394dcb541b1320acee7db377c2b9bd080412e0549d961c1e5f343fd62c7375c7199154cffa2c3212e8c05c0a214e81392f7a12e6cec77bae132307286011f5ea9790874c7f7c4852cf8b5baf4174a743ab258dbf7b9268952d58181a4729a80c4395d0b28ffc896cd0fd1fd00a50fa10a8385bf245fd64df4ba82f5aa2bd4b494f158ef97b0d172fdd3e2974d4bc002e940f9a0d9370fadd04dbf03c92e36398d7d5a6160b367ea99870012f92e6799b7aa77ea60368fd94aa1ca27cc37ae95ff503cabf2d08ed6d36ea19199d7572fc77132434cd1ef7e73885d9a5c08b2853c57b720b1144832eaf515ffbb0cd9a22daf537b943e0ecc1e94556efa6d592b5288cef1fcba63eeef81a2573a4defa4af4064f8f03fa7e253fd23c435f4fc4e7a60e12863be21a3a5871eec872e0ad356b71051c46cdc5d4561e51554c8551cc531625dbe4acd9beeb8ef96ba90190c1840e837c09eed2176009059b3a6f786a16898b839ab13b97a2ea46625c8060aab28170bb48558c71cd4edb1dcd9dfd7b0ff48556318a20f2f9a9c4e4108f917a1ef7f17f3be974988048d977b136e5b2d6c19c5af5fa16477955999d2fa675412e3854610be336ba4321a24b7804704b3655cfc7971f743126acc2d1bd4f8e49fddd364e5df3bedf240e711e9772a83d82cfa3ab7ac25f5f2134f22c4c3e4f0413c556a81ed9051cebfc78c2884d64bd7ba4c7006809428c1f3b0f6a919d04920655ef55fbcb16c28b53ce2c2db8b0c41c4b31e5f0bffdf97bb42f39cd2e8c1c4a2c1eb9d5b02f687a94c9e8a20d1cf9a702753935fca9f1ea1c4933589cbf791228818242abee393382c183b8205385e6d6dc799bd79b3eaf512d37321516cef0df41d9df9258b4300b2cf60af60c80f6e0cbabf1b64678512f22f00eed249bd7ed2a695db92e2c811c6e11a2459b23da7ecce8a9bdb86ce8d372644285cf43cf9e362bd106c8798dfd51d4d8e830c76c01e1a4d450cb221bdeae3468aa8e7fc9c0c557454edd3fbf859b715eb6ad7b107ce95ed35ed2110b489751493e9cd4da08c7c6b422f8b53805d6d1f1053a69142fde634e1b92f9f88fd13ead425efa8af2b1b6d6ed9ec419030a76f20ccff028f789caeca6b0483ba8403ef131fe3f280f63584bc27b51edb468caa547202b67547d3cebc339cdd2f7bfef2ebdb16a69062054ccee8ca3116007826ad8e9d9b447973dec86436aa5e40b46fb082f734066c8c0a358510a3b545fd83535f163549b0de18f25bb78388c8fd29915a01a2dda99fbbd3b25c3a4dde8efaf26d4a6696dbb949feb554a52134f74ad3f93f8a8085576a91983cacecf4861ca986e2a6239d6f0e6d798557a06e13d2e9203f6ed16dfd5454dc37950587d34768a637f228c1a14aa444e59eee7d68c052286ad9081b60a52852a0676004594c34be9636414fb985d1017984816867bf6070fc1202c0a27ca1eb5a7c63da20dc1ccce8b744a40ea212c4732f957cd67e8acbf34e7c9d6f87992ec6bb2291c8c199c711df67d86260baaec82955d3b80a3f7f143fcfeb07f27a9aadf4c77bdcca9df1714e8a1155738dbd9f6b15c0d1bfd096dad99139c901c629b194e54dd00fe2dba5065c9cc3139fb5628dbcff78978ab88d9ec9a8deb0b205a390fbca92f72ac1ee47d19c8abfdf7f0ffed0df1dcd773bac2e4e7ed36f67e2651d1b9f4f76d56183c77a58f957b67a1b4692e3398c49950ba03f608990caf33ac1539d3d86803a347cb5f41489e592b46ff7308cbf7e821c099b26a9acce31b9bcdacb00b3eee9c3b2eb894e1f7d0194509d0a443901e1b99ab32c08ac7141eaad82894c70854cc7ff079a4e39180a2b2daeda74dbad620b73ab24203085b8ca48177e66f6437b831c63f6a38216fe532e65a811042a824dbf311ac290c09ba64faee909ec34f404d1ba54a9a6011bba64575cda6d0092bb0747092d620d06f279ec6aa4cdf7d83d417508c55b9efaf0e479267e32f317182041c2cd834a246549debc847b83089882347da6ced7f9b73e52a77375427fe9e3c9fb6897bc6b546cf1d794a32c90a3aabfae0346be3c14fcd301e1a070a75666258e6bb768322645633aac54b3ed184fd24f23dbc9ad683278ee2e349eaf4e05f2aca5dc5663db029d8292d83bfafe9110deae72b3f562772ef8d250c58417b379ea85aef0eb7f765cda6b9c34e9bc68af42a58daf4655d39486bfb994b1687de4a64d4a1c2170a77926deb5199dd63bc0880051dc3bd0edef6cc2759db6f1ff10e9ef004e6f29b01ef1be27db48df4094ac0b47437f70b938faf8eb98219b0003a764be191a1085fce7dae895577e41cb2aac5f681ef10d89626336a9c46cd858a1cf8c24e0e1620c879d8d53d7051bff8d24b29c54a59e33c5b3267e39ee86c1297dd4562dbd31b22382d17c0da7d5df75316cb2ae82f3aabef436b44e177a40df1fd347d3f552e3e570a04844033a281ada09412be736e1fe2b706abc2db44d6a75c77d380f542f21fb718b17a62d823641c06ac5fd39676fbf36ca92fdd60c946b904cf41489d601457326aaff34f975735e9a0698f2486edaa1db6dad7445da76faa89ced930c4ae201484ecb8e3c94f662c89a83b165e394beb24c1ed05664eeb1061692a4175ba5f8e529983aa251250dc4473cfda4dba798a01f129f41faca1ef994a66ef71abe518fbd8fd72fb1da1a8fcf778f2c89c6b3a3762193e815e913982d4ed0eb746526fbff29eb4f38ca0e0561cfde935075d2cef558a85863f41162a18b50499e363b89b2c4b6fbb8a346453bfc16556c4d1eca011fcf7610c448217b07a1c93cd2b342bb485bf8c9d45ebd10b8935c9d1a79cb096f531dd856cdd92d51905b6e36c00641161e2d75c380ef22a2a1f376f9670fdc892043b24d42e319864bc90cc35b7684b02aa98a09e2902a613c5a8d84ab8dbebb48548d23fb2b6278ab934898aaee4f1f06cb26653e3ca5855169aa9d110823676a9e9656cb92873746d4a5290653e62ec8e26412852e6c3fd6a219d6fbd504a0d91eb83211f8fac125904b9b4109b46566245679ab52c1f96147a651fd18d3400b36bcd56c0b7703add12cc0a5192cccccb33f9af23944b70c59e63831a0fb9ad9862296555aa3d6bfdd0b1578b756768a2316aa892faa4787cd3b8960ab8b5541cbedaeba798e1c2c2e179e02ef15818711d826368389b2f172dd2507822a4dbd07968763b4b886500ecf9eb10d80b1c15dcc5fde2e7908aff750dcf60d2f3100e93e8290d569de188d7f4c6f20633a535668af2e84cf5b1cce582002865d24292cf8d30142bccf69ba05ab620ad53931f193ba84cb1530b4785ab468188a41eca919491e9415461efd2c7d11bddd7ba1cb36106a2bee034b7d9babc0c229b6ff7bc753dbffedb5c9fedca440419438934e89c3d7de10fdd88095271828fcccc59b5a45cd75bf00a8c952e6471cd12176a8af35a575802886323c6e93ef865f1128acadd1528ed5853cc829702e67004ff9560047780bfef009e4bb760c9c3d4987e99033ddae03b498655322070613b045b604a6998c61320d1d9762a7bd4d7919575fdf67e2f50be597895b237bb98dc8455851536da91649ffeb2947018da69b32dbff084a7324a2a36e7350cd150dd2584eaa9e44306067628152e1a370ef416b47fbaa1605072789dfc98799ed3aa6802f6a1d790e06aafe9003f7c75f0db561a644499da49da92cebbc4b2cc65d67cf1ed3fdf1084b2f228ccafc821d54d1814ee44056976918d752a501c6229229f537e183d52b4dfbbe7eafb60a77d949fb75b91a188f45d1df1a2ea008d8b4b9a1989f7a9a1b84105100811a8b05bf9118c2da686002f940ab3f9f99e7ed03f5fe3356c73b27e5e1e58f079f9709afa60e437e141e92ac8794f9d31e8250038590efbb148d1ada849f9e57f5a596abe0a6d0086dbcfbed80e9068f8cbb0d4e0477f84d951e47172e5bd2c88d3a73c6f2650838338597da74b701ef6bc030d08dad0d0c758582792c837455dc91fdec602799edc3dafbdcabd3c73277dfba8365f44109579124589148720dac13602002b02e9a631793399382753dc424a622ef8085289c38d477cd457334b5e16bd299f8d9242f6160fe608b8e5d73d2b651b4d84f0bc416b75fa3fd264102d0c250622974e2a1f2e5efdba9387fe847d697e50fa57f03f6cbd86db01c82114f9d1137fd97cc2ff64d2cdf213c2e4a61b4db72f5005ef023c71e4eebea3dc9c2744762566be841b7665b0ed695180f4c12bfbd95626a8aadb62a84ac8f127fff9c2dbd89f910c066aa70ad4b52fe4f45ea02b416f0af2b54645b7815089b75475466940351302b003e572d08f8f4a9c3332452592cc562e763391b45a83f689377fc029095f73fc1c0c1a8f6e0b5122be302c3387169df248c51fd46914bdfcf124a5f1c05d5ef0543380b565c2c12f19f8ab5b10f33e8a9579e0c2e95f50bb9550b60c2adfc7a43a8396cbcb041363a0f8598ce22acb210d5e94919408575ffb32501f5c659a5696de0fc411e0c0631465d66590bba38194b38d25ae5fbf5cdeef1161de07a8ba0ff5664e22d9dcab9d28d83bcbc35a526544a7bad6cbb97710ccfaef30f2db8578c7aaf31e2cc478e26be40ffcaf19aa8f617f1265f47a914b9751eaec9dcd301138de081e6a1781002075f9c6681ef9656080a2938c724a72a72c273a19f02e5b404dee8f0562c53aa2d856529bdb2eea69de98ceedfbda4de8853ae4414423994788c5f06addc76f100a293ace9e0e542f2e014293e9357e7a784cfeaee767ec77645df018634108bb3b36cbf2c14b0b57b3acf67a060d6fd73f380e83af79af811ab0049625de9ff3767a80968865ff4afa6f892079c87ae7673c7af4f59347ab02c3790c3b36e1ecedb88e91260eb17a86271f92b706ae5e6227ff64bddd674ebfa0f571c7c296569ad465917f2a27924d4c9cdecb5addafe3f9f9664682ebd59b432f6fdbc48582b7223ddf16e7b6bcbf4d37b0b40a067a925c32b2c624c325bebac97424d280632fadbefcd024751b174b74c30e9579fb80ee1bcfcdc358ead34f2f99ed2bb9c9cb1d766ee79a9a58bb497d232c756928677bdb0b9da244f656474731bea81ce167e8a565367db17e6359c92134e1d9ccd7608aa6462e991b91805c9c64f1f606a725d2810d5fbd9ef4d6edc57991236854657c60d24efe9abc8a0eeb46f71aaa06e8f0676fab35e836f7bdcfcd19bac7fd4a010a13a1434f43551b521d3c0d8077a35ba9fa41de3ff3601874e6e974cbd51f895c18de665c04c7007ca9db8b0bf9527e7263733744c1c6067abd2a33712987938317a79a123f53fd43cc0b4bd9afab00522ba2a18e2aa3d5e83ece061a36a2ec65022fcba8164f99542f428595e227a7dfaf5ad5c46d8daa3633590961e833d9ce27a9171328fd7f02f420ef1f806a2582cf723f9963422d62c4e3dda8d86fd1fb625a8b0702da9f4f0d4464c1f5fe1f9a85cb825b06d99319c18e5741426d20f4fcc9dc33150d22866a7bcdeb5b945b6f495a2cac0ffcb9a0c88616d04f492dc551eab0779c35eb4c6f33718a6188c5d8404487b823884d096a3ca31358663753eeda5fb23704ef7bfb5064f598e6dc14ba91bd58a80ff99b23472d9f7d93e903b10cf3fe8f2407b301b628c82534f28b5c8388bbf8465dbcbccd99c5209a4addbb76235ff2610adbabdd401550697a67683fea00874fad917a9de70c3b97914cd7931535e53c40e5f9328b08d565f088c7e54df7fc89562c23d807516e3db419adc60e5d31ca2d2bd8ffaec1efa495cfe899ade6f73145597e1ea9e586a8c7967d2192776af66ebb48e8482b0bd837add1b0b06d0c9b37a11117801089d351b633befc2175984143dbe0efaeb469d433dbb9688cefdef42a9bcdb1430c97c73bbb6e0b21bf5134bec0081fd2fe80447dc31949ae003b7e6b3541bbec3400da70005f3be5671942e469e32b5465ea5bebf36bcd5e59d34c09d9b14c8c17708ed20cbc65ddf3b0179bbbe64f04373514e0a923d528988595c2f23bb3487ee40e970fc50c08a7271f9c89b0515f41f6aa944feacd552ddd4081512d996495c5b02c9baec10fccd1279a8fc9a4f3b58770c79994edb651b766263e5be840deba4d690be829bb68cfa2493e2a9bea32f743b3af7bc9f1b3fa00ce5f806a6f3cc7bc6d743a68d9988e11e33087006ff6a159234c4c337fdcc8149126d2348c21d97b6992e45c77943d56009e1bbb2861aac18139342a154e7345a799621b74cf03e56ebb62620f91d002ec5f73b087ca1195847ec6bed983b82f71e402a26a32bf5cc30c3075bb2f649e1960a69a76764d86c9d5abbf89a080ccd143204e864010e10003da8c3fd6d09d73a56e4ab161a4b7533df5ca8a882dfa7f7bc87481235e8c40bb6de9068eaa2a602bdc89511911168393f08df2f52a8a6bab0fbeae9f420b2a05d676390856eb980d2f114cb67b7fc359aabf05b4ca90dce122253d3b5fa74686ff881a9fc33625639eb99f8cf86c2ec38bce85e12fa699f2fb4359d4c1ffd714e805fc63e5b8d632389868f44f66b5788358361f2ba30af54b672c81aa37cb9d0335437b5ca977568dfda88a677c8d3b3163da5bb9f262cc1e1ac5807f558de249623f0f3f1ba26585485cb897bbc3f9af6a11703f7e827062b1eb99ef7462b476082c098ace38cad0ff667e11c63ac4df85bfe41ba482c8e56433651cfbb875b63eef3c8329310f58239490491766d3d3fb93ab7a930eab0c70000be7e75f4c88a5849422dba856f26ac9c9bbd0ce6d9b009e9cd94ae13ef1897dd02e01095bc299c1da7fd6ec9e12443ac6e98e01495239db5929bbd4f33e048b6a9d2f4b4e323ae12b28412f8fa6c26e005eaac0bfa73f43fbbb49d0ee59a2806d096d25f1f38458f6c10c86fcf18fc40a1771075c58b66443e3f9712202a206c00d0c5710b8c4ab2d5634193f7d1c92d98b8b29880a4b20f8fdc056ea3f24dedadf6a320bdbe86b95bbb7b2148ffdda89d56216550e6b41d67f46f0fe1a3880806fca0188a988743bb7d298b3c235526effcff7380e1bcb91d864a6935c78d0bdc012d8ef5200bae46370fddbe08c3a83fbcba2e028214ab9329702530249c1cef46e464fec28b80b67f9e16837e51e87110c4aebb5aaf621f572f4d5e50f21c22a002d53d0cde38c177cfbaee5c4c717ad5e0e2e9a7691bca1ce521e381957c36604e0990c0a19a60cdf687e37e3130b2b3b0698ac5f26915add1e0e7448df09bffd0ac8ac693474cda6074757a200e829b0e64ee9110aff75efef43cf93cd8f695a14b9ffc193d53462f260d253128b98023b24ebd49da109985f2f57f0b7a4ff57b587485dc58529e76b68afd4f967371ac36c9b0961632d9aebe45b2aed6e0c38ca25325ba61bbab5fe7c7216ff5e218c15ffc301e26758fc75a1e22beaf729af8eb310c93127be32972cf8f063df4492f077eb2c4de8df7685508ed8af6da72bdb6add703babcf184881918bf1c71e4d298b1dd7a38c25b9e938f1f3170e8692ea8452f61bced0c7f4f0229273aa0a142bb9d029efc0fae34b3a780f14bd2fb193efa07cc6514b56d9290827a26ef6c7bbcb21d272ba38b3f9e6fe5ac9b9c67bc234e26fcdb0a63466ca179b54fa3f3927ab2b9e0fb0895cc515c7d7d15a832a097d532501ba2131ba73694d4cdab338941e839cec8a42735a4ed6a263f43e6f5a95fc73a7a1f34625ac7c6f87b6bb97106d89e40ee8ae70070c511dc1c7d05d470e6f4fe6a0c073cd8860c9497320f3fc454804b0bc3581a246fe8a1e947b22e8464ee83ccbcc73223f20d6dc3a19ad472945bb1ba05084785e216dfb3f539a68d0a6c9dc747b1f483cf0ab461672cfbb730770ef78dad886308a39df9d4344f95723c62a974e53e360fb2c82b2dd6eaca77bddabec66d5f3bc4281252ccbbee0b1ac37512ecdbbef1f469b7d95b524ab67a7d598ddb91ae2b6b3090fff14141ef08645a53f1ddbf5abe456736e7be88f761738f12d081336636c561e45fe98cc61cd43012b113346b53d4f4f3f8a08a92430213152a95bec335217fd193f686185006c7eae0ba582b4bfab9e7c4b9cf29dbafb0d28c24574072ddf07a3e1aa5699f9559a5e73778ff8fd48edb65924a8ab53858a721ebb2a593790decea7792804589808f3133cb97f7190cb9d5ff144dec8d4d5e1a5212a12422857d575664cf0396226b7fec7d9b21727ea824bfd182384c8eeff4cddede7ab055ed42322a9663392ac77d88321a9cd2fca8c8befaea396c0934deae3e1f783a7d75a07a49a63b86a5017b753a2b7fb927385b6d1cc4cfddd52efc803b79d3049d42c6ef2b74f8a21ae574ef984b6949975f529bd69c4a3a4b8a5abf69f47efea9b2d13785cf8e4b9009479ed4a8fcbf5cef18a618fda34898e1f453b79d4efa6acd7c7ec49b6598e9f10b13b498586d32bfcc40bbb6846688073ebcacea031d85899a3ffe6c6da938d52df345723f02a03cf0d0a30080c7cc37f4c03fcbc5202a1b5bdd425a8082ccaf5431e38019a2f8e44dd629e34edff5c5e2d17f8e79c564a149bfba151f63a48be264d244d901aff828de5ec12129ef038b52a3433d85beabe8f5ddcfbce8a1f6c494701160be16c240e7a35227d65005ec9993a99d74599c52d69de266d809190bda75600fc4bce19390f2fad5d2829b78701b6277524acdb97e281f2a1dc53449bfa631c20ddd28f49cb7e7ad026c3ad8be7f9a2d46878405fafc9d38f1f34c660e1488c3d9a179fe3ad7fcf5abf3cb0716cc712f9f0771b5edc8e6ff7690b69e977c4e531ea03f0f1bc472b7b316dbb6449c8593e707478d373e2ec8193d95e4dac8617bf00023e6f13f770a86f0794b36b7e9b563549d9a932a42e7c56bd4ed7116a7471494e0ae3a8e2bc555934de73dfab25a3ba94cdad1faac063cbaa3065cdcea272a832aed44c89365323a6564c163779147a309e9bdf39d82e4f847998005ae411de7888bfee1b8c916a0d497b77014212a2b9313abe9a3b601a5d68826c6f7738ffeee78748b400bc8d3e0393ce33bd73f155f98e438eb3ee261392d96ae4abcf717f027b5ac500ba3eff0d78cf5a91bde0908db30f09f4ac588d5d1cb4632d7368b05d6d8c77a8ba6bde6196a10982380a66c1fdfc50741245ebb9e1b95d0c176d6735fa4a569bae4656b6cac157daebfe54bb7418d63e4ddf4db2f72c1896abf9647e6dceadfa23f4cee532c86917c93b3b5514ca211fc3f41a04f38306763dc42bde284d41cc0bbae7b5b468b82ee5e1f6997f787138cb9427565b4988135bb2de47fdddc26ac99d9e55fbaa595f7a6bbc3d0632a4cefe05df9a97904e849f1a11a402774abadcd11b4f3309764cabf6e58caa3eea95a4aa82190b7358a915953acff83217f3ad065d66baaf1caa550f4ea272f87d590a6d8c1a1aa63f0410fc8bf9e18eda9f5ffdf8da710c7c84f476f23456ba1ca1b8858dc1b5cd7efb9c4fdc6d078db74556d869bfc6363604f5049dd52fce6c25df2d8824e86ff9fc0fabc52b49b2330bcf89f80569b9c623d4d48b1a9b556e1c10bbb0b79e2db5c094425606b21dd0bc3968616ae560b2022096aa3a3921d38109ba1253fc2ac16953dbb268459d5ad1b736f31f56c79f413eb8582cdd746a2f9eadddef75e5b14e2b6290dca59ffb32b906cbe4023464faa8c984dd9d9ccb052ffc184038781fe63f51733ef65437627f19b4e214797c58db5e53e7900be610c5960b932d994c0afc0c8b275da7b28fbd3281b3d16d90e8ce48ce55e740868f21a8a9b4b1baaf653d59b048ff0d10b1580647a5f92cd83d2ccdd99e6a9313796b5b1898efdaf8cc25d1be0c5230844d77593349ba11a01a9adf9c0fc4666aa5505195aff2404f2b7e138cd238b7d19427916624597f7b0c54f8ee3c44f957f367953ad9e383ec9b605899b80f7e1e35bac4160ab4a68b04813c590b164ba3b681d4c802a9a352f255771d5e8e1a70972270152532f4f5e411031964944219b5b267f7e55079c49fe605a0b23b373e6cd040d3691052079452670349c0719a77d0fd587871288d1d86cc6244eebb65448dadb5fc608c4266d757f2062985254c041aad6d0b0cf2cbea89c1d4444b2da8faa2a78f0a77588b3598e81b0274ec6501ce93bbc3bb4b994bbc8b76714641d547de58340861e07a999de48aad673cc11180c2ed8c282b23bc1be768233955d41a81b1793d15cca93997a2a811225f183ae56e957db53068ae1113db26f9121c00e986b711c40e66c5f702dcd7173a64b1a0a4a0db9c6e57b6c8c7595b0d44766f26b0924ce1ec37ea9e05c37bca9de8e476482da53e78ff9d080b7015f059684d9371f4edba2a7d68b361fa11a078b21c24f00beb5650d2b0ef8c63f78441b56e9d2a0ddd8efd9d984a225920259eb08395d8d2b68988f0b3579f040824d5baa3fb5b03502d3e6a78e9233c2eab77ea044098f261dc14363b693aa9817e7023a00a857bebb8a6d56c2cf144f776f8c819b095b93c47f2b0eb1580eff8923973f8d691e85c26a2952bb1341c0e67dafdbc9c83548322b7f73f5410eaae58657ebbbeb75859b6b160b851526c3c27b77bfe3dedf620192d89af586c9ec9abc416df02ec7733f6e6841b178effb6c2cf42b63266e32c997d5b0dd5dfd8348a955a0591416f94c55e7e522532220ce019e83660293862006762fd397bdba76b1ddfd1159c232002866a98fb5916654e901c51ecc76b3382be935253d66ac293f2881bd1f91ff28b134912a70402bcd84f4ce292f5c5d952830c0e1f5dc87cdd0fff15d37f78f067c3ef9505e9abba404b376bc0d01f379dde54c8f6f2b32c8def1d3f2804e5c3501b5ba0d37d5aaa24c85fd63ff3612ce9348880406c2f011dea7b6d8eadc06c2c533656525c2d713130e49f6f467571b603aedcbefce500b50ca96ad3b73fde6aae9c1bce1f3f710671bd26e15b76b0e7539b3e7129fe02b1f3db9adca6ebb5f44e11b7701bfba2ba4aedb8f3c4165eba63853fbee7e28e3c7c2dddc579d87e091cd101b441799c616572ec2e3ca59a62434d07ff5434345c5a7b5d744e6097ee96ef549b881d8cdc87ae2636414db68a41e82bba44e95fca0be7052267ba30880c5290cceb21e46b5896a91bd5b203ea8eefc2dae390cb21e410e53c9c145a162362f9124ab336bdf043c93cfb7486bd1885751cf199d4c7e9af8b78a0f0e957b1bac8f526459af6bc412a955fc25df94d8129cf6025ee6ac28aa4008e861e58bb2d67b8bcbdd111d2fad26a7e995a61727ce275f2cd9e22ca9d7754930dc6deb99be2f3093a688b3f6496d2c6b9ec6c18a1acae407bf9d7cc99ba2422d73251209755ef146e74b5220abfa4ae3b5f871e061a0015a4a384be19ca8a18d08b42937e49c722f7f1a30d67891eadccda9e7aa745e768b0ecd040a69b50ad0cf7109818691aa6951a6a08a50c77db2a8ca20b8f53481e29aee7d7afde8b0da6e540e5ea2bfa7738d18a08de45b5a3ffc528863a126cb56ba394bb99421c3b38f0e5e797017b07a8586d517c5d9686248f188b6cc0b9ff07b1ba1b859982bf26f8dbc1d04882f0af661fe16f1aaf1cccff384636729e3448c8868392a81a351d2a101e3a07c5429747a997a48a8aa3cb892b1dae52b9e4b1b29517550a7d885496cd8016af008be0ccfdb2cc25f8f2deac7b6c0fa1125f4d8a6d070e8a591cb62d6b5edccd3a22cfa83ed9466e855bbc2a5b88f23a0ebec18d34fa9b026525c0e81627032c4a4680e0d69346fbdcf3811407c1d0e68e6079c66c66000f8f5bb33441d27a3c333518cfddfaa6cbf0de6ae9c7014626993b258fe54ba0d4bbc37be7bd23acbb6e313e9f89a73f7cd15208e35b7c981af8263ba0084d4a53a9c550314aa59aaac8d7a73e8fc9c919475b26b85e8b7744c8ec3d647ea3c37234c7c6607556f5fe236b7638917bfe6bc64e93d348f064c4d3a5553d4c170b5223425b4eeaf96d41aae4532fa871cfbb8b47e86e69564aa79001581a9a70ebcc1df528481f8f7bd1d5816ee87e27378198cc9fc6cbd8312409ac1cd171bb43a58073d5623912a5d0ce35a4d6e6d05e76c97ed5d2ade9c0c5a87ea8b19e0cbfbf1b7750df1ceb28460d0f1ef07231210136dbcbb2d078e359d26f98c4618d4b03d07f3d1be385cdbc426359b484cba1cb56f7412ea72db3713b871f7e8d5551fd4ac0891f6ff5aa9ea0b2333cde815e71b3939185a29aba2916a77ae0bf3a3b2e161316d1452de58dab8ddc822f3926083e7161d31e127d6577bd22aa6dc4eb8c34559b186faebe778a67d38be7edb8f4c4bc32dc2f56f278f2b8487f1e791a07f385f6ecce775c04827deaa018154ac2c438e9a604097f9c53b4dd2802cd2adf82da4f79165ae99f966c4e1006d02c1a61a72f6ad878152df473a91eef6142108196ca12f4d274c67755de918e1a63079e76dd81d78abde138afa38817d54b57d480e020e4ccfe17bf7a34fe5fc9e25417c66043e1bbdf9dd803a3906df1845b9d4e3a15ee8ca8b16c3acad6a365eec725a2045138112806477255d410c0249540bd7ef3ac1396502fa256064fa7e58435e8fabfb3a692f40ca7b397d491fa930c41a0346db63bf2b1221f77597f8ad01fc7ccf9f034353ad0fbffc4e8e3d1955acda4d2f61083196072feb0748a29a96575a8cbcae44b4fe45397449ba66ff78a31967a77b3989de52f23d1e536539d0bc5f05b74cd717b452bc67be2e6fcc4792dc729e7378fb13c3ec0fe65697b25a62e4950d24262cb715c342df20ca19c154a16878ecb8392fc3a6a6384628ea3f7ca4d6e4953972066c1ae3d93d190e30465de71dec96e8f3d6817fe3ae7b1ad1e5359fbc692e40f03a9346c114da002eeee88ae6437836553cd692f88b37c39e43618f3de84a196cc87cbf01e3229dd808653883b3479ead3d962125e855bdb7459bfabf484806279d41f15e65c2d2f98532e8b84a3eca5dc5f9d5fd85974656ad3346dc8273a23829fae0a7f81f6bcf0016da117db588cdc8fca73d494cc4ac10ac3727473ebc194d4a5e389ca51ffc01b309590fd9bdd2152c1f0de4f5c7331aaba10295fcf3607a6ffc758ea98edfd3e7b8224eae6928a26207558af6cb358dd98fe6e1aab62eafc803b2e596a38e813c666207c14a712237e1389e73ab8fa1baf48fcfdf7d91ffc6f39e7c2cb0d9f513b4238477e8a45e1e19bc9d1c999d274d938cf81bba6e14a95dca1c8b4928a29a7366fa139ca0c2b216457f6b571ab2c437fd59f6e06a180aca4f5af44962564490534db1e64af1744bf392530bab85ec40d5d32093f6f2ea3897efd714a2ae1cd5705fa1be14d45b849f252552ea28094b2b883f1ef9fa4919bd7f69a3e8bf989eb853047e523532d82f830754a5a5216eafa5253c4f86199a2bcb5901b2a0350981fd0860e6f0dfc9eb1cd2b374a3f3600c7d774468fa170e2bdd331c670d2a7cf3698d914c8feecf76942ab78ecfa9fb77f313d3f6045feb682851d1ac8add50ddc852c7cfc61fb3ca15dd2e86f70589eac1a2fb319ee0aeffe32dc8ba40ed92d7ad01ca17d9c90f9c21fbd8ca99ee530ab570c03aee1e48fa52177bd4bc09bf0e5c122ba683c4808751f92e6bf131f94913f28aaa4f181cd097a7d326ef1156646fd18fb83cabd62ada68d3ccec789f2ef50b9657c4717874faeb89b81c588f630023868411fa14d1ae48a8c8fe1d546d6a6a20871372daa1439c517150512d19d50cc98ea7faf2dcfa449b0ffa838d761aa2063e88aaff8ecc0c34479527feba59afe8c6f20929099e27ad753e588fe560cec56e80bda4242e4450aa2a8e3a32edb0f436e6ab29411c6b07da88ab223799447c7999e5ec8201fad4aa702dc0e239a86647c6aafda0a1651093f3e7895aec2312ea12b99964df91bf9d7925e0113c1b2aebf9353f817f5021af52679c9751034e885a948a5466958e5fad8e7302b13c80889568ab7c5860335454653039c59db5bae91126d9eaeb062449375d1e4fd2f3bbaa6f9d46533d9078cca44e62db76d4d8aacb4a172f638305dd5e41a9ab00cd5e4bbdea6685706b339a34c92d92324422da614c22584de714d8a9d65f798d306b1ae02b382a557ea9ae01959effa2623a630505d13f45f741a9a9a4b402d0c485352000cbb723115b54edd1e50949cafeb0954c0937ce10cd378e6642c563aff4f48cc54a4ca6032303072be1517a5f95610b0373c512ff7f925f56c51d91d1e11745266c31be2c32f788c9168afabb0e681b6695492e50b43c94a09e9c846813e193949b8438422737ad3f7f24f9eaecf9594bae799c1208d83912b323f4ec91f9d343b576e1bd7bf09adb6bd4c247de13b339194239e97bb37d98e7cd5b47e21ec154d5447f3e79575754e226a998a3d399a06d0d51d9a9b7c12c9e2f019aded2c9819162dc1c96673dc110684d54dbe4775dd4d524a4fffb57005939adb59850654db54065eeece59163b493b87ee1b4a2007d5ee1395e640eb9db04a9ab684605269055b650428d33a221ca7b52d26eacb120823aa3aa5dde5bacee37e1e80912d716f5fb99ae8d860f1a4e4172c227428baa9d0285fe5454330563abd135ab4c53baa8c0d7ebad1a1d47959862e63827e3c4fa37c48c8b8cf86a2b33ba3f9797ec1ebda95ec0f51b435ceceed02208b5273bf7f06370c2267aacc2a85a92244f68fe6e1c69aa5b90cda4d8d0e95719f90d19dc48c9c18bed94e7af35a203b01ad3d2c81acd0d560296fd7ea53e53219071316e4c072af722f34ca3348cc352ed5d4c77466aa50061732da45afd21979c94949f674b5c66b0213d7648ca2504be7b3d0419c41fb2f33859b6837636fd28c174f97d5e785eb08a39af9a3c4bfb907d6640692889aaa965dd451c26633bd7b6804fb81263768d510022a3abe5910e686955791540af0b7b9e362f98b3ce69df69e8a32b7332e99a3e58d666e7bf58a20e5a19ad085ee130b4c437fc8f9cd6580f68dff470f0231d026bfb5c029ee12ecf5613d437c154e8a30721bef8e0e2bb31ba37627a0a7c469d5edc5ecfc66ca69d05f62def9f7fb89a330451229c5cef8bf4e13fbfe3dc89f6c8d4b292e7ef065c34b84fddf21eafa7bf36abfe8d9afd0fc92996eed89a1cbb52da8f51299ab16c60ed936316334f9e3e45ddc927f01ab658ee91cb5b4845efe23a9c82cd5042fa81ab75065013e59b399a7d2b6f4132f761b94899681cd8e78170ac9f87e1a143cb07e9bed412eb530b0242a4b34a36617ca6f07dc0b3e9967ad253fb89ca7d8f4b8ada840f9ba83dd020bee42470982f882e032c748217061aee2ed0540d1373146d0dbd3998fbe8518775ee3ea8761bf2bc975fffd7f264c4e9070c7a0e7b94342b4d5bceeb410f475634ed98a7da03b6dbebf0a042e9a3e5cdb0c5441b5785428b6f5c3d74775c1ae086ceafd9f67e7505d425825f8e425f4fcb6170966ae5785898dc64394f4516175ab5dc62478e179c90b90a756c1e3516b4fdd58f7642b50928d8f1e7673170d288bb39414fcc3ee42ea9d1705d09ee20114a4fc2f88cbed26edade339adaf5f598ca37ae47db9705689b5ada5640990976a66ad807a5e2f8b0ba40dc9b566a83363e74fa6758fc682f0563cbd5fec03be15255a5771e112875a3ae3b022f4165e8fe8915a14922ca669d414404eba89ea4c424b869a97ba5f6fb2de832ba3b23442e7bec9d7a0d4146771a46e621f417b5a1bc7401bfe05f348288e561a20d3ce907f98879f05166400e7b684139610b13ee6c80023081702ea8686018602227d83fe3f5f437085df3c464bc28c5ca8c6f1a406667604f179f475573f2e8b4c303e55a1fcb1bb0356d3c4e597def0e5bb71fd0b003cd69f64afc41f0e14f7a620a813cefb547e3cd75ee40c29ff014ad45f62e0a8fb2d6138e6604762dd046be91bec60f811cfbcc81e98f2e2e815b9f1027a4bf8957eb11e94808b58db78189f1691a2700f1ac57af326edb7e27339453c09b3f86a545d86441555f6e15069f16ba09ad3a891f656d1c359a702ddc010e9a42663bfdb9436c2e738df620dd437729101b91975f064c2b6e4ef4df5135285913d37eaadcbbcacb2ddf01d170ed7abac77794b8b8097d553da34b97cec8863377526ea1ceecdd2c8084b8ec30f097ca78267f5c4d7f70552bb22443a986a80e45f6534420272403aba75b6bdc03a4532a4fdb781cf1069734c8855823d7656fd2f7c5e1b346899efd504224053b2930fda75d81fe0a15920de029c69837eb8d7825c5d54fd4781d9feffccd01ac57e65147f1d795993f8aac1f8e680496c421a9e3dd3e03044e61074fcba4fb750f340b7fe7f94204392f031098722646b1b600a6882eb581fe25452f26763033723d766966aed468f1fae413738312e65da39a75cef2e173ca7e818dc551eefd37f5671820c0f7131a6d952b3c4a13705234605ee733a6854c43968c79e7d0eeaee6a64339f259d962d98e10b4f5cd35d8b1242974a2def405d613d5f5bf876f23a4f19feff0e7ae57710bf09a0313ae246560eef057a9e1ff5819ba740604e99d279f1285fe15364b828228679d0a034c7f8f4da719145b98d46504da3423eecdb0ce7ca91c916fa2b0c1398496a3c96cbd5606334185033fec0991b3f6e477e8e3297bdaa02413a96f483cda94ea4875ae73f343db5d1535340bfe09d7c647ca94214d34c7afd2c2b54f3e7604b96ac8baa86c355e0fa7023fc0037d0617154506661e972445880aa806a6dbb92eb2997f82ae8b5945a4b14dc832440e7b766b22d7451ae3592e9a9239f38023e6b188cd043f249e2451fa7937999d5af5324eb4a3760e1998165f9ba304627958c55b4f08c591e838a35944ce19a956ea2419f9cb5db18329a0b7cdb88281bc4a979e925b76c625886e658580404501fb7c812bbb92ba40ee2e95a32bec9383773ea8a3e84d435e0e17443bb88e1fbdeaf70f45941239cc89dcfe646f27ab851ae569edda8a1543c2c86a3014e067c01636ab4e765478ee2abb0057376d330fbcbbab958c3f88dccd1a8a683c93dbf578de51576719e3bb1a7543461289258510c95c84b17ce64484258124aae4f2b2e56206429e4a175c6dcc8d7ab0f9895de00bf0815d0066c9e65f1095d0ce43396ea4f216fb2680cfb903701e0acf89cb6cb756e703f0b0f7f6a3e0b126fbbe7c0ddcc97f0ff9e501c756a42273c4d53d80225ee440d74ef62ad8ac3d615a2a78ea0a91d670bd565f63c31b0cf6c6ef0917ffc2d03f65605a9a4cef150688e2aa60aa50a8466fadf08867061567d45f3761fc708449c7c1713cf2df85d17f13ad009071c983661490985929d9a44dd0fe5074adf61bc43f8bb7f8a00b0eb4f760ff47b39196d02816acd0f0493075cd9c0b352bd4c34eabac2c385d53fac6450c03d4650992eec016075057e7d1af659b1dec9e42f4c449f0676a2044bcff58108b638bf305ebf60761192c02b2c63a96d768f8a4acfc115fad1043f4e8e415e50d222dccdfede149f24c1dde39c194632dd5302fd552e34c550feb391b939a419dbfc267b95a0177e5c4bb3f093809da137d33528362c2944f35020143b9c1804df3fdf9c8d430c45a3f100c8ce63f562546b1281a4779b3e480d488977624f2904df238a2a97009774bc9f71022c8ada42c443b6bf0ae20d9815152813bca2be67df0122905d6f70554b13c8332ccf98fc1480513f73cb55dd7ded16e71b1fd58879a79270ef85ebe947c77e2011096f55817025edd0847cb4bcac10f77b4af3ee50af622ccd3a6223b618a6b18a7c7ba94d8ca34ce92670f60d84c31817cdd06b98811bc4a748c6882c58bd0890755537cc6036b680b5b0dff8d77ebf6da596e8d2c94d3bc6fd07bfca97633569354673d969389597841872555726669f4fc9371c7dc04ec70af234a3bf9f194aee92668fd196a5c954d8c5160b52f43a9750c222e22fadcbe12910ed334d30e10d7022cae89f85558f312c7241027fae0bfa47899ba4404dec5c2ee101c63ed19c58c4acc0215b04ba7eecfeba6efb45688cc06cbdb3a26ecf821364e5c8152eea3d6f02d8174eafa548e328a8caf975ba60ca5c9b2dc3bacbd97a32d35d648e18c2737dcc90ca723a82f5fbcc5e62815ba152b056de4d73defc1ecb877c1afd003eacacd537cf9c68df188d6a1e1454e04d00b19fd7214eb5b8793730ad8088d2bae2c1f060cb4d344cbb374cbbe20c3462d26db064c7853823d149b365eef70b772b5552ac57ccd8fac4ee608f08abc5aef58d52056c8e12c86f161708f2a011a73fd937c13a99d387b6ec1e08f7d1f29f999d22a25224f9313dc63ba783b9f91551438d7f84de0261cab2392ac7d463653334a6e929f2273485172acf32bce48a1b64a2d8e72ea3ca59d4d328971d07ac62435442c4ea3954e7b88f799dc97b144cc91f643a3aac05dfd34fe56459b46d19460c10ba2003277a40c9adcbae95a6b13e69840ad13e0994f0604cef1038883c097ecd25fe04e3b4fa661bc3e598673d5ed9d16e282b02e2518fafb9ed0f0df6e2c389aa4d6df3894c991df695e304c8bf235a1d281eb4f5f3fa5c72552a2988661d4335f0a841aa554a1cc8b09b9cbbd45b64c08f4e09d7a4663caff64a114cace25ea3658b876a45481dbe7b2f808ffdd9c76ebea1cc962fcb718bd9ca69bc0ebcbf6aec8ef5fe5ff0e2f3b949cf48118fd09ab16a276f209dfe9a98c38b142ef50ff8424d301be8d862112729e99d1dc985e712459609f9d2eaf5e525ff7a1f1b8fb1777ada3c826c0be6c737396141b8748695737ef4270763eca0cf96a03e2e2816982123bf5a314a966eb5561cc75e7bd05692b002ce151fd468658ab0a9bd07947d51e470044c91c04f068bae63deeb1185893c6d66cf78fd65f7fdd29d2e5db859c5638d2e288f44dcabf282adb7592181d0b679c6843c4158e0cb096b6a26d68e02bf661e9320e33a8a91ad8e7f3aecaa8c597a3bcad4a9fdf07b45f320ab9ef1a824c2ae5837ef5b5ae5ed4ad2ab36e3cc3f0a9a6da9919047ad4ab3b5fc2c3a87f8463a83c375cfbeb4df645d1be29705948ebebcb2cd37d5a610865beea7ddaf44af28babbdc73836e2c30c812004aa917d0196dac2b3c4e534d498f2ce769f41dafe3dbe81049a0976762bb22510f26d3a0902843cfca424209273a149476308b66f390002ea80797353853c00f04a2243cf47c734599b2932318068dabb296a7ec81307ad9c83c73ba7c637a541c26dacf99bf4e442e11efe159261d643ce9366bbf3eca1524f64674a921e81491007f4bbcf551eb7d0b30deef734cc244c4d1b319912101b1bb08505885da841d18e532cef59a136cf2232d30a7a7ac541e054b5600e2b09bec19d44fbc1e0dc5fd0c32bbf1398d0922c3d1851a762f1a10703bcb2849e9c4fd66a8cee78503c0ee6ebd9da6e33edc830463a25601d37ce4192ca753909cd13bec9fe2b8f66eb3bf8ce63d77391797550428fa7a790aead549c8c54c15dba673697ecf71d375d1271ef81fa0f76264cfc37530431c1b5b4dd5f090aa4a5e6e658e4bd07741ea6cf791eab44b90d4300fd573959a3d914c6dab92bbcbeb3104587e86eb7f7cb189e12564435c4cf1c4e0a2a29b084b69d42dcbfe69e4903f8702d37129726c36da17165983e0d2c6e342aac52d0650f920581533ff54dd9f1d79ff6e2b10b01ec8e61a1b41068d1af0244a6e126b5a6f58f771a4d3597e82996b6e8f3caa2f4df57a6326f8232a41b9630bf939d44569fa621033b7b2895316315ee14f2815e85d87cf31f13ef8fc81c7c291e8d2d7112ea71b0a2225a008a0312bf364679de0174dde4f47f7574312d743e86f08c5df9c3f3b164baf67959c85e624527d3791356b83ee6cf7a344db3765b7a0cda1e16bbb24af3fdb178555b25d9348ba366123e7b9bec57f7c03d08fa269953cfc1fc30128c19e5cc4a024bf8692123caa616f6f3910c5ef1e25a76409a234d7bad18a2c2a1859f3c730d465927f32419f5470d29cd936c438ae7deefe914e02265fe040bc33ff574e19828076bc3c3a3d54fc500f0c84804c83e833c35c8f060459a279261ed4343a6ea7cccb9df1b931685cf149b2fc71ac9b69921e6bbf9aa53751dd82f849e45df0899a5aa730ac44af4295ee5823f204437c33c3e527b28dea7c94bdf87cad4afe5ea3d3fd3515c9167a29ad30fa5152021fafc7afaae516118d2df43e9d527de049c4c8eb3da3cabed9167f893043542851a1cc445a1eecb9211ef4d3787ae8c915a8d86b19c65d732dbc7ddc708021d045e203b5cd50d9fc588377b578b244b7df287f483f18c0a3924f38bb6814d7f60ef15a0997f7faa39b0daa55bd8c309dce5270e12cd78cb8912e6073e454ec944d84a0705bd785a852b76de5dc11394887c9c542e4683f1fdce116da358e6256f59bbd644e775044deea9c13e80b8874f789d649404783ea053afcb3c7d96f21af2a255670c8d33f5e3c77e3e5d3a8da9c1488c014e2b62570c0bea2ac2e4e0c7fe374a0ce40e54602d0cc181ea0cb40ec534f03f9d4841caaaeecdb78d8ef0a3c84f1f14feba17ed1b5efeffa579d24d852e43f8192f791f43b458a64aa14d8d258b81f4138641b6b63fa0560c6a17ab6d91f225d2b88b9841ac449b11e2d75d53e1cd9009ff770d9cc72c488f23b4fcb212483f5b918ded34c20bb6a1ba64f780e1f12586a10bae90fd1a5d3f901a29ba05b92f6a1bbe4037333e42a3af20ec3540cc8e745679cdf1a20f88702e732bbf58a2c977208b8261123411ed97c063b3389561932c843677413c35a0e63cfa69706c8c144567e9850b5cd9678f328e69ebbf0b399fb263b979c2f4df26de61e15ee95e5ff583fa154dd81acd6ec3b516db2c7b27603b72912aff1d16abd71988cb2ca7cddf11b3f5abbb67d889252bfe48681630894a97bdc169989e2f2cd8e4c46706c28a296b8c6b3b1081942da19231117940b3d326f77908d4ada43e1ede45383b33b695997dc0bccbdb5eb45c50d8ebdb2fd8e59d6c1ad5bb71582923d0bbe78e832931cc053c3a79532b6f17a5eaa39d85aefcae9bf31155aff3725920e72a525ad013b7f7ded6690ab47324680d765d48eb9ab5e7ba1b246f829c2084be87647d869e5db721d04a33fdec93f70c1f7eb087257930b864fc8886d1c6622decfda124cb94cb25b3d8d96d6d26e71a3339564efcfb442904005491a2bee64842dbe7e9868bcf9de13852b1181cea8b776b11883c47c416db0d000860c07bd2218acad5938016b08e04d9d9d6d0b170f438e1f13bb67c37225ebcc2c745d408cbf1914460fa0b1bd6c409c07f1d0e069345fc83497ae43ae23b9f58b10f2f70a84a0c6be01e7943322b3ca722578f727fa21b00e37dab3d90b55546a3bc15985435fca535d8500205ebd4cbbdb0ac75d6326b01ce0b56ca8ce47ac34233b4893cb3e4c8dd9bc661997c12c0e50c30d220817c4da9a57468664533deaa04053c8f0b1b28f118373c289f92976f410b02874ca2895a8110c02ee7631672f1552b1e10ecc5075ee376b36b2d9d253bd6d3f592283c372698e8fc73d4aae7c7d72263ebe8de9514295263cf312908945bfc9d1c2a432c05ff8fb747d54a30b7928fd0151371b9a692e8720666cf5fe4b9e26125d7abcbcde5feaefb58a7aa8026bfcf19514b073c51d7cd42ef0ec5ea7c37b7cb4e7da19605a0ce0af58970413eff276f2a5f4fc54dfcea29955d5a6228c1f6b0fa0b4f7857552355b5893dd8376ecdabf98506245377512d1a9b678d53aae6bda36874589bb7a82bfdf05d0d2d8353a9fe36b5b81e9998c57a0ce4de1056392227bbd4f366fdec77ec3ab874183c9b6d30107592fe0b421a0e37499c495669873ee2c0fa0b87553a306433d47596532c8df0c698937661e0cd377061e928602761e34aeb4a552af36aa5e336ca2493a02f1f3135b045b45b64210a1df0cb850d885d246ba4338881b1c9f1e6b4e099d254bbd590a1bf0520fe1f031b9faab9ac48052589f4173123a80a166dec2282b8998121a85767ab8c68f5a3df1a1b01b383a7a6d96d1cd5b61d400996bccc24e3eb556881b0fd164901f873b6810bda81682c676420866da1037e1c7eb033815e6f3163f323647f46ac63ad9c10f73c63fa12c0e463ae1088979aa617cdf143a180278dd1cd94fea83efb93be42da2841ea1014ced2b78136a8a546916dd74ad013b4bb4d6ac0a6743c22edec08d703bed5c2ebde1d1d4697f89aa75de9b370dfb54aac4b7ead4997b72db2d54a6038b52c6dc117b083fe47feccf3e8fb79ba779124a2ac291cf8668f6e608c7cf6470f6977a1406ae275afee06623847b90ecf70d0005f7675567b9a4c427dd979deff873ab55bac4672b7b6d09bc38b5bd25f5d13325854cbcc2957d0e47e5b4f1c879dc5f01a051931fec16104112a617977d00150755d20e65685f0ee2c6ab28c0563ed7aa0ea635138314435eb9060efb3fb693ca3dd51d562ef79e9099d28bce058fbe62b8af21d8a4923965aff69d573dada0f6d9da48a27c71deaa16929a2902fde085132db189f30cdde8c756299f1bdd53ba1bafdb723fda08bead5514d8c98fdbbceb2509606fc682f3fa42c4889b55e3f23c0c5337df8e31e2ebb2de4a7fcf24e33c0d32b2a15ecd3c8ff877af9edc40944323a118ab3da65f2d7715c16f03eb9a0f4b4a3a57deff500ffc6a57afa189464e0f3a357f381791e5db4f561a2ffa23d38cd6c686b6dd160638cac8160deb54c05d4dcb224e673048e0e4ed14b911343229ad7ac683cdcdf12c32533bafcc1c498acdf9dcbf6b6e9d9f4c80ab5af5e221cc3e6ee0e4b93e5de9253908e894c084cde5c3b543fc71918f1181f1d5e40bd304a5aa950a00a48f30c485f559980c33a20bc29159d325a0493ff72cff9789fd94577f2632148ee0dfaec1331e3481f029e623ba90ad66d566959f0d30ba7a44dc3ec25909579c51e9f15a4ceee7de780a8c1b97ab04cd93473f729acfe90b5bf737aeaa1e8b7421b30f3df4e8cccbc37982ff7d1e9b198eb1814627950efc13b6894a3b7279cef232a1defabf630d95f3ffbaac2d986a46b189b98b3c166365890e992e1aab3e18880ca9f195fdcc36d6d220c71a51ee4e59c4cbe3ca3fc75dca87ec116244dad71ed86537d188a182a71bbb6d5e927b95b2933fe7f444881dde91ab43b2f142f6bda8deb4a7c361ec3de5d5146560d5c29a5b6cb20ccb2229fdfddbfee9a29bc8a8518c2434f81fe5c50ff9b117f1912a341ccf0bb5e0f871c12668751c812e070d7e1f6ea84def18b29b440b178f98d955aeac409da20c5030f862bebfc0f99afc81d31799fd87495ee4e30ae5cf30a919e181bb688e4d78fe450f26f7cf2cae1621663d8855ba038d219376f74ac804fe8469d8e2c08cda3e05765865c18d20a5908c2df17266d424ac8e6c2343694ed3b8c4fca3652901e7be2a15fdd1a07e439d7dee703c396880c351d223314ed8d979b3c22dff4ceeda36a699015663a17a7784e0ee87b7a381ec2e45c7605eaa98f0602a1e44369627230bed5eaadb0d0df32db54a594f77b676cbfaf49b5585da3f30eea9ac0f92226e9f15fff0c3525e5617c9dbedea956869b50b1bbca39cc75bf1a1729afd2b0d39eb27d15bff31074173b1888c81d8a580b9df4321dff8c2bbdea9a594ffd8af1e70f610cbaba23e903d0a85e3a41cd1748900da628dbf7590126a2c8c0d7e73eda25718987a4a4081741f3f00317fcd730322e48733e0bdf766e71579bd29357d1ab5df4f7cbf34e9fcbe111d8f6707608d80b40177020b281d8de473e4da0e3a751578b9df4396a06b42bf211c47529c5a1906fdea7974d87417f025ef58dd573c8fb4f065e82f7c1013e850d2b45e105bd2525e7470cf906b4ad9dbc7ed6acf333cb002cf8baf3df168a8d2a216657dd027367a721155791d24b3713bb47ef63657a112efa8046473cc059bc76090ca4d6c0055f864ae573d59a48bba5a1b9bfb4e4bda6e97add89984519d16ee6e98f1372baa078cdcbbc910e1d7bad8a3b3e0fe67c1be4d6013ef67c9b0f90fb02d43cf6bc5bed53cd6e917cf897ff2d66034ca1fbfc7da3dd5d877b472ed3eff671545fc8929a064ea2f9070941c8e754e80b6df1c22dc23918f10fe8070475cfe401a83afed0eeae12245ab2bffc514f59e6dee3930b7682207e3c2ebd0c798e62218c6eb1e17e967a51e7771d2da836d0ac1fc89c19a8709b08a5b9db493b4c436242db7f3530e51d15a15dd52123b2ea14fe5db566b0cdcb25388c5ae93ae37fb58600dbd8362801b3fdb3d55129a6b419d7715bc93f98cd3f62b8e33d5d828a54f92ba17ca380343dc2c79e6137e8975f0fb586bcfa3380cf64a6ab109b3972fc29b00ab44fac692c1b3609e576d1ca0cc7a49c88c35e2894abf663a708836f9eb21684577e52cb6491a46ee9f7abb96a1091dc8c4db6477eb5c76201663a3804bb993995ce0d7dd6fd319001c3e726efe30703627b574f727def57450880d7e1e2b251baf4e07e0858120617910e0e50b905bcb7df257ba8aa8d4e3b5b86f0902c65b5bbd3a7a3477891d60b76db2b5f6e781a0c604dac2cccbc61797103c3d8004386e5f08b8962c0cb4309981af1a23f23483a57d5f3aaab9b6ec165d441e223bf5fe160e29b764cf88e999011eddd69a6b2226e12ee959a6a51b727c3887d863a699fd9c3bfbc345aefd99303146b824c45beebae6f6396d460b16a99d68369112ddfa08b488bfe89ba7bac43072ddad9f2b46889e69066e198f35ac2e424ca908ed62877be0fe32d1c031cf8ea789145e852ffcae971f23da5bab8ba4c1f579807be01aba2bb61ed042dd8f2779b91afa3821966ffd2bb620edc97033de95ff868cc347473b470b8756c52384bcc34d1d5ee2260d4349480f9ff0bfba90fab8d887855682b51a9930aedf1b536979939eb4b7b0df5a7ed089977d081f5f3beda84f56638b737785b76ffc7892fcd3a71f92440cecde6c724ed50d62ebbc2f2e0624df909e6a82beda8e069d458e29969c597a0300377c1fcedafdfcd88778442cae311ec126a0b3d73fbc4825e59fa50ab03fe978a50bc6e4e6fd8c990efe9098c6d9884284c5557b8c00458f86695d2feed48e28ed9d4ab7117d943bd6e77e99efe144487d22792a3a2484f5783e81e183008969e520976932e9c024eb570ff4604f2ea985bf010f6a178ee129b7d6bd6cbf079536f9ea8c328d98be60331acceec42feffd59d728395437d8094007f12be83a9f825ca7fb68c4d5e6e7b8e474b870997b669b8087ebf00b5012d8fbf660a06b952fd3afbef6d16b0bf5079c17b34b805a89ecff7c72b3a9baa91f1095ad1656fcb0cb46ba496b522402863af55bacb005251b81f1f61644c48c8c2c15cf2bb6968bf43152a951b689bc7be566def8bbbc6041891b5302c82bc1b63d2c587657ccea88bd44d2a1c58d3f13644358659a7452c49bffc08e632ef40f47b7ea0bebc49e1bff09e3df5d146643b9d07a586759f2d4037217cebdc8bb1f19d0e4b995dbccb5e57076539b96150ad024d33f98faa827efc685be09df8a201c72bef3248e94e30629c55e36f3812180c291b733205251d49049fd5202502fc7a1eb6d308cb01a083d1405c9bf8ff0ba8e84bc938f10aae95d0361e97a6cfa31a757e0a0963a5027340961bc667d0e8e38dcb6ddd642e0ba70a7e177a91b831bde112096a83306a5a0c07f3af4d424eb9574c30e06010277d72ac080acc75b91fab86421d9b3b3d87ad780ca73a833ef1a971fdf2470961574e5482e8e6541b1ab6b851de40b83ff343755900a882fe309a25c7d5e16e524753b9e9628eb90679fede0bd493f359789ea6adaf94ce1b9170866dfc71dcde686099aa51befb1f3c824de5fa89ad63fbf3fdbd407fab0ef6e41a78ac60b038613b631882730bfc13e76e30c24240cf2bd92ab122fd86ccc45bba8bfdf6632bea114ce62aeb7d3b56333afddf81f0cf3fd4ad93da8274bfe66cb4f9480c86f7e97efae3e7406bdc9e628d4ba8199cf5ac87711d94a4edff3eda7a911ba46bf48380b7258ec7f462b7fcffb60e31b1f73a0d940579d60808e58e926ed3fd37733740c0aedccdd6b0bb92e7e84c16ea1b728bcfb1a5876a5b412cc1db35481db89b6e50c988b383dda0245fb33f2dc840e24fe05e456fe7564f5e1c30d6bcec2a7239b93b8a4ca4e53d862dad65001cc40f4341d887f5034b314d7efec2fb12402e13ab6bf722907babd5c8eccf2a022460b0bb1072034d55040263bd6b7f0b37aef37d02a8ce4edadc24111d5fc3535205bb0eb1848e11150ac847736745661b8922c7d163c2c66232ddd35c2d542fd05f8e2996e91a265da0a0923e00877fc73da61777763b08600c5f77e92c65f8c8d63cbb745b043156d175f67775eb18f373c55b1ae36e7db05db0e0069a8ee60ab550d1adbf356fb78bc7b64177efae87dfa0f92a6d7b670ae4d3af2ef08bcb8449bd365e9a6d43c905fc79102a1c895ed52d607947ad61bf4a808fc83a44134fa97976956fd7c791bbd5b929c305e51a025682b7131ac47fc6b82220584377158a5af59eaf6a2cf8283788bc2e22ff0a655cdacd077250486e118a0ef1c221d66600c1ead08cd17e5d250a675d1d1c0d945a470cc3af0592ecadf42a79af8d176ff1b007a1e1cb665172c7d0559c1e41af4c4b08298f3b85196014dec6aa07834f54596e7bdde50198bc0e13f9faeb4c0200b666717ac5c3f9aff410a577b3449f83876faf2b1efb987cafbd845816bad1c624578f652afaf56d3cbdb42c5a7e28b088af518bb9c286f67bdf43c7fb45696254952808223fff3158f1deb59e5e2a4f6e3e22e298d4f6de855da91e6f2b2adbafb580f6f339aef647de47c7307cc91749f563430b4d75e0c6299d81cabcde71662e57828cf66f95963f97f852da2d6784d18f971bae25dff9771c6f9dd3da5db23f41e811d440039b6daf6dddb697a220ffacde441029f5297cf0b89cfd6a9c6339ef5945df19133192344b548141fe4dd050ec5c6659820f7fc19a2e2969eaee52e32a83498c2a13390836ac77b9e469e84594159c413094a562d5cf7c775f847922a7eb53e9c5b8093c9f9127bbe3b2ecb99d1f3569e0344f6f6b5edb6f85a5906de1d5439517f0417d4869d45bcc9a178c2ea1d8e6f657d0c856f389f67299c76df2919a9bd34e4e6e9d230d30e2d9beb71c261a0103c891ed5174ef37623c5aab7211d6a2e108769161c603f7e90ca229fffff066d1202b7694458e775cd43f8bf52b5042b44ff66118254bab5cd8bdeb8eecb20898ca3d77e7d66a29af1ea5ee188a01b22454d529fd2e74bc784d00de1d8ec9b042305c0a800a25896437329c860260855dc6f114e9f096815260c8d0925b8d719438ea901049c89cee98e1955e77fb79a889703cffc425ac69bdeea15227eca4cff94c6f77fde8137ff2d3664a4225d68d24189641acef8d91d593f88d1545cfb84668d392a56218e4fbc76e61655dedaca2d9148898e03c3fbbe8c799d05791eac3e449d2ed1e6ddf9ae51444545f3b711e9695e6359bba7db3eb3fa4c319b389fc6c7ad5f520659777e531c6d08a9a3b1809c34b2504e9d579057afbf1e309f238b6958f801ecbf9f10e8220e0aedac8205448ad9a84108f9ed1837d868ceed4403958c18dcfb4830510a15665ce919e03d08b16bc3dc4ff4a572a24ac2b3868de86a19055cbed237590b95dd6c2b4e3dd01db69109538123d77d917ed6a45113823dfef39e786135f07b2b5b3760ca2ecc2ca671c2cb56e04d45a2945ce5174fdf19d1ca8faefeec195a48e05eb6e57c16aa5e6d8d39644da0c943dcfb97f4f17b5c757f3fd6dc58a282332c9dd59314d0db92c4f945dfb07bac7fbe5bc18b1622c3b1c2b3493dd0cdb0f3c33303a241b0eff4648b00fd525741ccf1f7a05c29985da6ae472bf732354593a45ffc2dbee7beb17204270e229ddecfb308084ac1f28bf53aee6055119854ba39a46a1ed9a261658559fedf41a9a782f75e6cd1d13603d94652f8219275cbbd3d146edac86c098955a2ebd0c789c7122527d132f3e9f29216e5eac055d26e50ea1d798cb3b71984a90be8aed8e43193a8acf4c9d3495f34db0ab7b98090cc32b12d11a3f4a48621b4ca701119341c6e9302340f8a286ee461dfab6c1f0275e7cd86ebff8477105dc64d19cfc622818e169618cf8938e198f89cd542598ec561fdce70c9828f48888dd7505136fe1761da4f6baba2ffe859e736ee6ee00f347239529b19f56c91fe3b5b149fa76e0448787c0d535adba570662634cad01cc58a9c13025d2d8111d1d804b37aded026c18243cf7266bce4ac6730046a82561854bc20d09ec7e42d0c9741f42d283b32a3d6d001d2e82656f92ba084cd7736d06dd691ce06d443af3645b993d22f0ad858be7d87666527a49d846835768392251515a51295d9681d597f08f4145bd0d5791afe2b7f2bab98484109c41cb0ca2ee19106b69231192ee0186e5bf59e29d596463d2f0d026919b21378d867c9fc4153b2502ea641e5723eccca8dcdab2c2d5104cdb9aa2536de5c617a041aba32d0d0bba5c891a09b8d59719632ac10e80622b5c3ffc341558797c60b7450a527b3431472a525896f26bd03e3dd76ca09072202fda52cbb00abf7b583be947813e06bf848348fcffd8437daab8987372c6fcb323ecba0c5582c2fcef1eed84fb03a80f05c4a4a377fa8413a6734b372ed39b49758b664923639aaf9116cf9bee1a10a5cd8dca17ecae12f285b94ad042eb06a0d43acd696d20636140885cdd0e26020b65f8963928cfddd94c9a35f8ef18907a3964b7e36afeff07dd58728b141e7aa4d99ef38c738bb57126077fdff0806116232fc397f820dd3d7ae1012508bc60f94349981ea4d04fc474f46631146f32083507c4af0c4557daafee4c6c60aabead0acdbce6647477a416e8c18cb3a5fbed5ef4e029400a88e96d71c38e16ac378aa37cb7cf9011c406beab1e73ae60e698f83d0a1b481098f692aae08b86e084e78f2840d8d37780a54380915718edf29af74677992cd852a9cc1b283af2b955ede34579e9d570b483a5f31e29dfddb4f208f7917dda0576d60d21f61cc73422736899bee0a6e0b3b17de71893097aeb8c1657d2ac921e86af170e035df24a6a9305c5f423f1dc965feb7e82608a2c51abe62c457ae8ff145f4f4084774c7e459c3cf2fe4afd47a8475912b83addee3386a41869f003c338dbcd9c0b60931182a19fe76c240cf8ba5595702fcdc6efdb8439369d805193d8721a82eb4d9e0af40adf047e18e4146fa973f2e255412ed26451fb5a752a8d97f9cb1bf12fbd8a46045b2c1856ac67b84c7f7e9d0368ae9b87fe7763c6289d85f49a72c4333d44bfe530593d84dd17dc9ddd62ab257bce96466cb6a2e5367222312c3b480b7765f5c39f98ad3f71cb2dd2ac81e4df5e05c6e638ab52c6bbe4e591a08c30ddd8ef8050cd8512ed7339e5897765d4a79be34a92c698b50c904b0931d8c434b5c01ba8190cc95c78dcd0cc7ee43faeee9baf46dbd7894624c1ba26acf5d953d92f20ca1fb50d1a816076c896ccfe7bfe3e6c6bc77d952488a0682d2cd8697b75c4b5eaf2c24222a45965313457575471fd6f25cd81fc67f97f669689443c4346adb6e266bb3024eac61572c9100452503cb70153d8d542e3363d8e96dba32f0b2724ea933a68246f5e19174f51c434dc8e6b5a5deb110c2d68f364170122dc6de2d889a9ddd917c7a17563bc505c8ddb1ead0816a952246170ef058470cf3391db38e3df95b6db2162511fab849a9a3205e5faace4d026c4ee3c20666c037fc7bc82df079ec6219f997e63a1183fb00977c5c16b16235bfd2d433b0074d1e21d18042cb47b4d17a704eec52d64c64c29453b913916c5e629d2d4ec38b1b5a44709f604d55f4359b155e78d11425f9f93bb1caa0f0c171b5194116db32abf7b0e4c31e4ac18cb6ffd6eed2ae08e365add0444fc0004c43e2f39a77c94f6a06963684ac3118d57f70d6ba9e99b5ad0080a1b0a21b1d6f0dbddf65eece68d05dc754f5ac7c4df0ebaadf174749fffc50eaae7fa2ec3ff00b12785942d550cefe4130d3b6742e2408c9b10f98377683f1cd6a7343c00336442a0f7170df49571256242166277198d2afb4adb3fffabd65b433d01fae44367c02afb96db4c6a9875d955c3fc729755daf1048e2527b1feb3e3d2508290dbc9ca69e04a795389b55d61e59d01a234ff75b1470bd02687a7bc5fade21a61cd2131929f48532b31091736c46b84323a36403d3722231a0a4d6f410e0ae80f3fa388bf0f0b4067e6c25cc931a5401e5b081e4504cdb21a6701ec7124d7fc93eb97c5ca5961449e96b938166be56fffaaf4de0c23f5a313fcf474655342d79405c5ed258f6c7f66ebffcfbe56659e227da5aac86057849f41066ccf91a7deac45e7c8e3159b558422d6f94d8cc314a48577e44d88beecf2e233d0a8dccb6adb573f72dbcfb1098166720a613f9cbb41e2b8b04410ba95b8376d210a47238a7ab1ffda05aa552d1bebda02bcfc9f65d11b243fb970925c5fed3da11458fa0c292f0b73618cf02c53dd939ae8c4667b579c965b9453d301666ed68ca0b6133a667344b84a979b29f7bfabeca07413f4598e650257fa1be8d829c0d158ccf42497c85baa0a33885fd831ec51ae00db1eaba5be6120804f1f9dc2bbd935adddbed9643682b9de7bf2c4512b533edaa284a82a9484e663f1c6d130c6cc21a49515e756b7a9efeb91be2c550c1b75db0a57770fa31471396d86a05f42841e6e211fa1fe1200a7eebd280db6302bb99cbaad32fccb636503ba3db0be66f5235196d5e41a2e6008f091f277eca3ded4d0ee83b0346949b73b64ff7691fc59dcee965e42c6435f885944ef80854ab7c1b56986ed6c62a6e46c85027be3d0c6e1231bbac87a20df290b7818f226d32aab3d15a10af20d75ac13473eb5a7577370c7d7cfe0b4c73d66adb5c304fd1334a003b4a21da595d644e31d3d0db05394f5de0a311c6d5ee09f1dca2253cf2cbf44f34862c36be72d317f491f74f76fb72b989aedf31a448032fedb365558579fd433117ddfbf0f5a41b660343bb4f166b7c397e3a313d30f4786aa6bfe3ee7aaad961a8cda8c1f28ec3b6b7299fb89a9bedabc67fcd0b162e23a2ca4e3f19abbe2dd26e4fea6e8a60a3aad056903d3900621ce6dc12a81e5b3d98326b47c0c28f61687e77155a9de429093c9e558360832dce436fad3b064a32c3ecb5a10f63667447dd35e34024041428a4d375738e44e9c0fb4d267a4516d6872cff864acb4abf42e041f31203c44c0e1ccb23ea6bbc8fa3c6c2a2c652fd775858c30731d7cfa778c7748dab971486fc1197b0a4d8cfd394651a43160b18799d70e9494152da6c2ee40bc8412cec85cba9538cd5ee083dea373537a21cabbbe949747ca1597c8548e682d32d9d2541ac8d94a82d415e7b348f781d328da5f38a9767c6151a881b00e23a66f0685ddaff515608798579e552a25ba436922a24bc063f5e1524aff66bd1017136e28ab41b158da616165b8cd4a489bf9b57756f5b545bd5505f80854fce1ca54b78bae519cfd5962e761d7335b0173cb82728ba031c625b990dbaf105a1171eeba3adfb1914721379a2b6ef86b94b1d74609b0e3a077dac1dab7bdbf66878d54a1dd831f414ea8bf83a0e1e22c9eed69449a030d4c325dd4e9512b1f5d3bb555ecc732ceddb6a9562ce2d485d0e8bd635e336c257428fb37b2cd3035b1e877515b4f5032076e47eaa242d24db163a01794002a9cb807511879867d9f669e70373e7fa29bd0bf9c1cb63b923b3acb7a3e520e07152fe5b315c04f011d298ce940469ad3571e48b10b3bbd75e892cbd43cf9ba602760e9ba82fb45dc289bf6f5958f377ec34e9911a5124e6763dcf6faf7bccd33b8822332b0d69a3261781d6d0f884b9ac757d14056f2ba4312ba702370ee34cb644acbecbed778f41214e210ec4db75cece68fca8d732e3106842dc10a669185e512fcdc6da112d67122026d1fa637f2de51bd1404ba8b211ac903eb1e6bf3497501d90313f94909a10750bea1a4114d031098ab42748d21a60bbd790925a9175e7c0dcce3d027c7a039437be528037748ca90f4d2ec4de45299d164e5429bcc96fb03ac2e951311f25ebc720180a7ae6ea481a95c27852c7f8860d1bcb64085acb4d1670cbe2ff0913ce2c1e9aaa8e2ff92faf35d94472d65430a9d5e6d2785e06ac5f1dbeea0b9989b7707e5f2c2e453529ed5c6c3b57e5768b75d91c56991593efbcbab58e093db3b5cebf1a9d2063c166bdf33e56c6d56b94045ac37ef7ed88f7dd556b8e0f8ae5ea683bf7cd54d9534bfdb581187ca3f46fb0b3cbd1bb54c3969248bf74dfe660817bce43665a6f3cd7979f55f20fcec0abb719ee79b6d5e10cc2d7bd0662de6e8fdd7483b7becdab4648312f0d5a37a6cd7692352a5a6c3dd313edaa0591b7b3b118cec6cc2cd60f18654064c5169085058f9df7c304c58c79190b61dab05e712064de50713332b3da856dbef00a2e72b7989bc92d0ed34780d4cb6fcc70bf6d7a4deab0529a9650c54f5fbcee5b7e6f9167bc51843f626e9ad9b3ffeb32699d8aba0d1da9c02fc9507106c4d33016768b9bbc34627c44df58beeb28c572bba4d9a947b31c85bf32f175cdbde87f67061100885c64d4c0ff0201a221dbadd8f035537a4f8760c234afa63677654912a43547d510ca8925700818d0ce20c4fd7ab68393ceed0ce1d09437278ea3672e6fcbfafc9412d539ac93a7f337a7318108201d524b09f92fdb55b27a1f6166ff22c62797d45f94d7d7ba2040cd73006dd73969889b22d861f4fa5c3aab4a66f7ed919007e844fcdd5cfadae857101b7df740dc4900b52807a82a6a90cbce1eb7843a839e52805926ce92e620971836013e9e27fdbd6e6133b41fd34fdc44a87011a93df26ff8981ae28dafe095eefa739b82140498bed8fea2582c01418c37f2a0d73fbd3e2d5ad531b476437d84e44cabbb9d9c19d703ec7e4ac9bc8506c9b8910dfb0fc0b0d0eb549dcc2e8c718948411769f9e9b5fdeb609fcbeed2dc8285c17bbee4acf9c64d5d11610e81263da137e5de135b0a78143163883c73b2e8843b6666704216063dde5e5190bf6339b2bb8c4c5e0661241b1083e15760e390657c27f53330cef023091be2ad2aba47b2767f1ccab247b66cb30442892a29d05048d73975d6ddc80698b780eac573f10844d84e29c6550684aa6775a41338293245867d181423e59977d2c7053a785f75e5740b8f50ad2d4cd4757699ae7de297fe6244f401027c1ee208380016e41803ac1e1c268b8384c4c51a64c57f55521464f96326e32a2ffe306298c7fbc725ce9324029ecf86e1c3dceda75bce9f35218bceca4c7a94d7c47bbdfc3f788522f9694918513379f6dca0b4f321afecfcd21a9b8dc93bf060bbf1c8293042bd02e2f578ec912efe4f966588df379abfbbf6b763a180bfbf5323dddffa1186c47fbdda2b2e7588b4e0643caa1789e8c488363db6ec3e4b32475cd58fd8699d0276330c389463ab32b0f66cff003615f45769a64d27ae672d04c06ac1ca65743742f625df657502b32ba9a930c4084cbee19066f7c661d63ad3a174c463a42a3903a9f7a94e0d0907c6a6fdfb29440f047ca66de98e4dd6fedf1b1889e0d1a190b3efcfff7e2ca7e94fc6269a0c0944d0b34728a59a882ca24a516f2f7438886b07453fae0e92c12879c5ef95c4caa38f1072502819763a02fd91e7b7bdbf6215314c315b328120a83501291f8ac8a81ea9886dc99899ae78abcae460f80a57325ef1272168f654d10b67f75589172c83e55cec8d2fca70c6e7b0fc545053e4e9d253fe2c7e134ec617e9c76a5ed3857d208cfcbf222094ecd7faa228b52a397c9c6d76d881d7925a765d4c0986894330fecafb053d986424c6b315127933e82d06f5c3368e8718e9b25e4e565be80ed38b1b634888715e7b6df32bfcf3364970c5ce1ce7d8338e82a05ef077e5447f7dd1b6d114792241e97c6d2959e00c81adec7afea4111f23e9498642ff807accc759c433725272fbf71d456b8cfeaa4accc8b025f3cf57bf4e03a2a6267255ba7d4b721687c1652db3f95a17c2dddd06f1b5f09dea0854e122cd9469f77b72f7f4dad557abc403d0f8b6d417da992cc1624416539dffdcd345764da0acd1ed7a8f37b9ee9304789b4abe5462769ca69cfd207ef9415775c74659df4566bdb84ccbeaefaab8fe01a080d0786af5508afe3dedfdeb442e73585d36329e683872d57f3d5c401b283f0343c593a519e9ce1b306ce9cb508593a440ca5e914c6559ef50e4db1aa8f3ba05e8e6e6dc151f075cd4360a02daab9786ee03361dd627901b6473e229b8130354cd92baf8a34917868ac1e604a680807721e077fd34fc6455e17865c4d45a326136f8d64e0935f854d163c1ccc21a4b8dea98cb5a07d8bbc3ade1b62b71b1c50bafd96b4fb545b3b0013d1b92aff5bf9ddae7cc784ac1c0dec55eb1df953d32fa8a5d24ff64ecf3e834d9f7e55989969e5eb6d6c51dc9422ba2178c57f271fe4f51e8551f9f24d2e24ccd613af124886e67772236d09446c3f147aadd1770f91ed7598cd43b9e435a1039c694d0cf086d823980bf57e500ac7411490aec1e606cba2e97e3cad372c90ac031f14ad89468242ddd6381675419405b660d963dbe9995f765e9d193879de8468edbde9facfb7976b25292f8f84c593cda48743cccf36b5e4b722307b496d3350537ef60a5413d3f13856d6d4dc649df3fadd826854175195bcfd3a6fa2f33a33c2ad1ea6c12b807fb6d1074e8a40536a4bec9d147205ac68f727b71f892915523a72defac2d5900dad4ffedfc764427d42b7103aad1602e55edc7f3ac436f24464c56448b0dea1b8094e5c85181fda5c28fe857741acc11aa785a6d0928a5bd90c227515515608a7cc9e7fd58691ebea67272906923f0a6e3cb10979aa51149cbbc61b37c050b6b99f38ef5380bd30bf7a887411a9efd663ab84621272140fc824808074a270981a30dfc57b9def5c861d0b922da2e4e661438e0fef3f94e59306479b8ae85f5667b088ac5e7cdb84eeeecb41eed6163cb420a41a4022451dfbbbbe04d273e233e717f11cd2687969c0214937d9445801d51c9eb7e6ba44da028c8fd739e9bfa955258b4c0ccebdfbff250944021d58617149438e45503a3f299826cdf8e12ce8afa87d559dcb0745ae939d512f089607f06cbaba15600ddff921bfb5214cdcc5706f221d5a2e820c86795e2569790ddad42ab028a37f009ceddab9ffedf3319d6d77c228d3742afa43a565f139cd94e0d0ca420918ba63d9facdeffaa54333df9e6c9fb050d654d98f906d7d36998dfbfa190f86288d70c08b389d13bd84d6c203244fe73d4362d2cae8748e907a1b71bce84ed2d9ec4f5b8b4d90f47d2c952685ba690d4b149ca99720390557e912ad16b86d32c7b62af6a39a2268029a67dd782707b64fff232f9e93ad6480b29f0ed6dfa981ad8e11dca92fc4224583d950c0106a8876d3a1856166444e4b3bf20727f498ff9c7b31b035ce29d3b350f349c5c907ae8c74cea451ef39439fe5e0c9719aa1ac8c9d350614cf9a5702234dc7ca86c3d19e4db6c5d34ff9da86b3cb07e2cd633cb4e691974bb89282bee9042b6688d5591abd9e57f5fa6a7bd9d9f103e99ba64766e0f5bbb326daade4754c5c4668b0bddd949e74206cdcfe374d89bc7059578da94c36724c92426a1916c68d85f05bc0df2c1218db2d61eaced2752ee3b622beb8c3b631786c862390879809e16110acc63d512fbf9dc05924da936a1080980bd25993b71f019ae8234d539ad6e78682c8c65f112bacc00d9d6d0e23230879c578b637def1f0fcc065c1c4f43f311d70a44e3587adcc24df6728fd24f680346c80c366aa6559f317fe52a39671a707f96ae9b3eb737a1a8dd60f0d4c1308b5322186b0c9b4db4232fca6648d992bb85a612040777c89c86cce99387865064e7a0208c25e50324b9ab2b7c31ee0b1a9e04f74cf7c2a600815ae97f25a31f070bb22cc36074510c0ce3a4a19a117319cf6b5b778d2919a4aa24a329851faad7c1634165b59ec8e453d38d6668fa312d79d2c8c1018e531e687ad60f81949b96fc648c32a02b60b23d8ed917e6583cf789405b64fb9b4c569924a77470eb140de479bb451a67830c30bd2e04c03f45e135564a902880d6c43c37d2552acddb6ee69d05b7d0ffc3c063ac3be099e08d6af030ba0d7b334b52215aa5a6679f2813026cf6fbd90c947b739e22f629a15303bf0f90ee661cc737887f50654da7e7bfb8408e2ff50d5aca33cd6221740ab0f352db0b6fbe1efa582f5501b7a9c1f6f60db39e855310c71b9a06a36052dfbf8973169103c19053fe75c5ca732f8723f12205114718667cec386d964d9b29ecb39fd956e14eda7c7d6159a90daa7950febc9038a975c3e27e7ba7a0914e762d65d95e8416aa0d73cf0be922a8c6ae8e6cfedba8802b67125bd998e10d4a28c3e0ba8a588ecf077327463b94f585037f6bfffc17f3865001bc752e7dd4ed60f264a0871ff364842b702c217cd1d763e6eec039ceafb8d3567682c89f450d2e7e14b66cb1e62320a8e7b4a32ce2a4117c8e443ceaf0423a2c31f3dc1276618d7a63db3a1fe8cbe6f406cdcde170f8409594939ed08fe2ad67dee9627af37c546ae76c08a2ef55d3aadd6eda7aaa7827220fdbdc92481086a75dabcd06e36ae6f4d36d72a537c27c51eb5debabb383a0613fffc4fe06da5f6204616addf79d069cd85887c23c545d40078a56801aabcd2cdd37a46e50ade9b4b03a8698a571a9b5d51251578075a23f60ee808b0e3d3a61adaa8f31d2be1318c34d4c7bcf53a56f86b8007e92a60b695e8933e8598f4a4c50b7055f254df22a577ced1b1e4b89246532f24438694f4047eb50cd52e39e5183cb9d1595d7a963bea0ea010c760782e247ad8592344cec253e9cb6370639365ed19023c85877ff92e5e71e93257d2f53ec51d0bd4fee72d04cf74e1a23e255c36763c323a038f7496e50e0c6b6a5641d758bbc8a1246fe321a9d5eb7b017e84bb2213c7bb5dfa4f30f6f8b881f5e4d5361bbc3a467336a0d2ca6b2d7342d1343b18d15358b66e861fd678b563d7ed7f3afb9e7d3d5ca66df061cde423caa02ad968d48491325f2699a74c487491b1a2a9cb8585bba09ba9f1b512b29c053918f21acd2b045778f52c9f729d32b7eebf35f2501c7f6f22e86d7ec25585cb96f679980577a28518f359014ec902ffc5f31f6e37ae8fd0d528d2ee3a052fd5dfc1e0f4675b9c52fec34025a76ebd91169957e06e1f26c9c4c8b50577c14664d370d39eb798bbeeb241e549b12219951da939fe56aacc1744ab2b22c9c61f13246a78ff63d19071ecc1ad02ec47003154d642cb6871f70e0859869381d406c2cae835e16ee6f4a1dd9ab99d8f3afaed912826e6d447f39be5a0c465a1a44dc5829845f4d68bce5a271bf390e4c00071d4ad4aa68da12c49a596f1be7d3a5450ed4a05366b5e2ea5ed25010bb29c3b216035023c4af75c554df462eca58876150a556efdae4506be4ee773cbe1486a14e6706d1d8d9f3527939937a5e555fac2c8de4ee214ea3a05c7ad9a70e09eb82c4b1b9f67d43bf290e1d95f146c24bddb473d2ef0a3b472cb1079276bb8b0a5026b6e3274ce1f97ed969dd653ae1801ce5328d4260c667eeda256dead89d0f47d597611f10e98248118fdc914967426f28d9914298fbb648a2e39791a971514262949cdf001ee6a12a692bd5462cda7b86e2ba6373de5659d52bd0f26fa9af73bb5764b123e3b5b6f2d090642561f6c51f7a8ca7f835db420cda2877ad5902601af9f44091c69e7278d904d0e0623432077d60ce061110a794a5dd8d4a4046ae3964eba14954ae8f58ec2518d129c1d6471c123cb459a698cfd8c57dacc037fed844f4c81fe986c2ce349a4219f75e6515cec2b01845dc7a8f2440c6c398cc8b4fc08d70ee8176886c61347b47fc20981b7565c410ea8b80eef529b917dc4d5aaf00144aa9f8f8a566d11d16a4fd01568df8d265215ae602abea39f785a01967e71a027ae225258d2ba43a282f8f6f72160208523f4e7be87b2c3f701acf021d36ea957b656baa50a9dfdbc25f563c001c8e501361d35538c84e360556c60e436165cef3ae9066197157bbf3e1d4b6fb687c3cf3ee38dff63e14adfdef0ee749bab6576c390525c83a2b344a98bd5c6549e9743338d7f43d3133d06eef81135332655c629e6fb9704610a571be0f6f1660b264dc524d389acbc65613b643b4a5a46110e08525db28632af644e5191b8414f6db5eaf80c565bd790dca34104312d2a95a0bbc0a6b5a3a885391a64b7c6f9e5e633f6a211f9e858e1657880c9c801a6fef24fd6ab2d1d6b90c3e541b000b0bfa500e49f5bbaa4a2cdd4957c35a47b7167329da31632c43973c39293b971a05627cca5b3a2044a7b0c975ccf0e1a78069e086f4b1ebb1311d2ea0777e49179bbde10ce47193c112a4b05d20f981196c77e6ad42e5a364c8a328cb6bbc1c709e0ae8df6b19e8b393a1bf17b8d5cfa1570898a8ecf9a09640bc89002398c88a54515f105bed01ded36e2c42cac5b1bc803ec14f450a71856051f8d844d400cb42fd4bbdb5818436648d1d09d5dd1c311b0fd96c431bbbc9229ac5d6cb02d1d3a58f4a414fa78dba115e3086500ae75c5ba356ac853dfe942ba98316b12e93a20b139e353451409ac72a7496a07fbb5e088ba6041859f96f51f1467e06a55d5df5baf235e377a251f8fe66e87bafc8c749daf8a403a3d1d48f865c63aa3d16c10d400e89abe6722f2eab1883befc3b4975c1bb49322d6fca6a11cb6767731e4b225f9d0068352f03a204baa1a1ed9d0052a66c2e6e1db6c5be616e6a2c89a7e329f0d1802be2183e4afe626902452221c0d8f9de07fc2b9e9376953f938946033afa24b659e2dde93152a381bd1cdd16dd5f989182ab6c7d5e450100cee50901d82f82591a612a881d6d4f8161e61238fe01b31d83e0f3e240cf6171eb5f8918a9a749db5e73cbeef916ffa7e184b2795f037ebce6e82ca575e3cdec80322cce1830a557467fea773fbed723b80efa345d23213a3375bf24cea6647554e82967b04dfbb9d460f278f81524d9fbfb4c821bb70d545c75420eaecc771280ab8a923e8e738413a5f989d865dd1887d6619a1fc35be05e7e9f4b07902cb6ffc3beeb46f8dc8e8e4ed7b7731b13e7e38097d44eb4f8a7cdd7a3861695506a2817e5f12e87b49b8f0baac838795aa58cada3f0da05f4de92f8924c8b0e3ed8701f96809c8139f6e5c25a9dd9b3efcbb857a5ee0086d1d0934e7ec65f75353c10be143f1a699bc3031c6f192c68f52ef228bc64d46aa1336b65ff54583dbf5c342d14adf1c49029894a448f2d10f4d1f0bc7485e8c80607bb2f6d93b7466ea947efc63a751b434a4797adaa0280667b066e8cfd0b7910215e9799d22b874e43659dedae33090c3057e5bfa28293826ee1f8b0f55dad3d7bb6b0ef9a17b585cf0e6b61aff5e669e76e7d91b46393a0b1bd56de11025dea12700a0d15aedc912b4aa39c4f12d61d6cf10219b47f0838246b4bc0e0cb1ca1178310137cb955047681d80d635e1e0ea27321d49464d03c6c89ab75b3eac0bfcd2e790de25078a8a41e7b31eb539c8928f38f212fa4d95afb1bf92f382fcbacf8213cbccec4064c216c257e883447464f037aaab926da6a5e7cbc071626d945db45830c718f32055c399857c3004afc6d7be2df81b6f423d60ecc97f92da72ac6303783c1a6314a5caedcec6ebebe8897d7642bb831303d25a0979cdaff6971f70ac583397d1a96f0d93829516f1d0fb9a9f5ee1252158675da6528ad39541d0c4405374a1a571bbbccb6718e79b3cb7858c639f2638911b1d1b966205eae7b81d1fb105acedbd882bcdf925422d6cb1fdcb6d04644b3b18acbb0606789a2211007755146dea6ebc98bc66026e9c8463a8b046b2a9869f9c0e63641e4836db0a75425cfe8d68b07b1140116bd63d5e836eb749ecfa5af0e90888d31b9e45eb6c526d0ee8fc08625b813ad413510c05880e2314c419ac2860e193e41660af061a0702dbafa50ef4ccc86d1ba18a6f8fbdc8cc5b94bc1cbb989ef85960755e4fb77fe38b7aaa407ee333e7725dd16ed28c3e4bd8c441a992d827d7c636695d62e3af91cc0905ab2c64f43bd00ffdc7536f1103bb84db86896678409f48515a4a1a0eabcae0665bd71e7c514e9d71c32ab920c6dcaee8f099fd6b683c01b66fa2e969fdcfcf393b28bd97419348fd43419212e8a3a7d271fa9196bbb739854a87f14f0992c5d2188e04981a485e3e5876ffcd0dbece7d0dfab136ed8f8781df8114bd78a55783555844a1e05f9cf03a3882bd1abefc51806f60b15d3eea413a9e5bf7ebbf7f9f5528a33c2c0493c941329833b5823ec5908a975a8c890358d3d3a289bba07c9f1fcc1cdcc60cbe12cc489667d8d98d5a236d8638a1a71a76c55b110897b4a15f3f89ae3d324a13400fb27ee1969705cb61a5ad7ffdacb0a6940bae7001ae238422f2d89349c21fd40bde01b26d7a30694401058233a8eebb3f847519fb9a1be80ce8810c2b7bf415b79849e3230cd31fab1ed411c066c0489806a2cef0a9c9c7aa961cee58da46447d098439c4155ebfbae9def6f53dcf476686665ff5b290ceb88d1dad3a78a3bf181c529dc36dc957df1425cf290ff152b76ac6f40e9bcc11f08d5f364900e1641fcfe587bb36b007d288d103af65211414835e2a1410606a8b7fc8779fa300337829811cd9b411c0e29d0f39840a2f23a71c90d7fc2ad4fdf14b3c7c52317f0368fb0e9b59b018dc813d05560e2071f9a853d34cf87ce7ee9a9e9188c26b38cb69c50f253ce53be30118b2e9a4e64f8baade6e982d06372df79cde5ba18e44cb27a7f37a89d6304e02f82c664266b4dbf69ed2cbd66e45dd0996419246206c7a3ea2355508582abbc299f6b85fa667aa0318c745bcf28c366225e6c322cedaf120d6de1c72c4e38f87aa9f7160bf59757429b7830e8f311eb6e373a10c0213462da548e656736a11d7a712128325fb128663342a606418689bddbb60d93169ae68ed9be13bcf4bc777b850bb218729bdd955e9f954a72b5cfb5a3971afa67f14ccb7c46dca553cc159456879a86f8748e62dd8d0e5e8ee79fb8303e8857aa523522f045ed30a67fcf7e88a5dd8d286bbc41cff3ce8c0f8e22e5f8f87c9d2bc7ed88e200c0977507f21df2f6d4549db68d0b5ab0b7577cb48897df158361ffe034f6f44a474e65ba7fbdcdc25c58d08c13eac3d3928a7e55fc85994a381167adc29adbe6ebe14454cef0fbf24b5d90e24282fe008b791aa9837634e75a7ea1d3feae815023b3e9f752fd21be5bf842daa8e7c5d72f6582b15e9ca3b6c992fb9979382d21281ed6308151cde15b292f2c9b0e3d516a1d3ee3d42e4a28a87d5e1ca74b0909af5e37f23cf53cff0d7b9e14f8321d3a80d17e0405e0ca6fef730f717f99f2ac4fab664e73e30db30708dedcfad69199b835d65a158763d2eb0107acb7bec0fcb105dbd289a30ece4397b28ef6026028e54a5d632c733da0706f96e40c3bec0adbb1139ad8ff363e92f597c6a89d46a3072b1587a7ab9270aa7068a56a2681f2358318a3fd505ddb7fc15b305997e337bb2ac207f41aefedf5be0c9769337bbe5bb45a96b97548ec785d745cc4e7fe954ef54025a548852c0dd787b7f4e318f33f0ac797377c72bf4ecda46c773dbae1de6caf2e384783169b1f8490f108c078285f5ff17ac25d85f96bf4de627e76bd0d68e826b439f990ed35a11b8b699e3b2d878fe10d2614b1abed891e42aac31ed2758801d48e8a0bd086ee830d012ecf90d6a33e108ba61866936bbfbb374be355284c34404f1a73f8ac3c1765069d596328eb045819f32f9dc3fa8a5a89e5641e8e862132acd0f7200e91ac5d91125c9303b919c4b592995943513ca70150d4957e1452f64e0b32c803a89832cf2282adeb87825b4ceede28362b711ccf87aeda06b1894294c42e5a68750d56cb4a3c503491964b15ff42b0d7467b4efd887eedc86630207b4821484c985768e08852e63c2f89a89067f1c7411f584269d863a99cde2e73fae5761235709088df571a7f30f86805e79444d2133115dc408801714f925308093a9cc3f6f622996acef8c82ed2af83f0e4967a0dd006b91fe478152c83b7bf7179a42f01420ba21fa373b5124621f78942d662f4de591a08d19bf5737653e6f7fafb7a978d1aac4cd2977b5716b654b54c6e84af8eb64ee37c02f61860112e0ac3ecb9c7b03cb5d230db82a630830591c2ed5f4bbb740c253b1ab4a8f2efb4e2fbc004d111415d0d4ec890033ad0ba81a6011337a1e16ad98932ebc2b6ba4400ac8387f57977b4d3081ff5949a80378a418fdfa26aaf34d32d71c9d0b47084fccd99ebbf1bffbe81ab66ec0a4354de8f4839c6b0b4c5d1b71e1854117ef3e8587fa24bfe3ef604fd919c7af4b1eef91d88364ca53a5544862b5a0de768afacb75d530c86eb613aee682fd1c155f956bb678bd341a4edff3c9113b252e15ae90a3a268f4bf883585415ecdf874973febbf28007971f9e24a3ba7bb05ad86bb276e55b0986f7c96aae59c0468c61eb9e16b88e8cfea306301fc333f968227f543aaeb465660dbc3f84805cc77dbb34707633bba57e1bce36b249887204f357a49bf68300f0bb35f9c2b43852a5d891bfd7f11cdafcf3439db3a3ca112aae8111fb18b47d55289ce2a3867a4cf93ef4d9fe98db7a1ca8c526f4b0a143ca648fdd3e094e120760caae33d5cd9d365b31e0e5a8d375ef726230ed75e1f580bddf7deb098b39c90ffe34edbc3f80ddbf8d51e90f0ee5b3a1b4b25891a98fab95a5090b1ff067c517c1df59d66aaa4219bab3de04317945372239a7b5d9634cc5b0cc0e0470c685ec1f77ff9c2c9cd52ca48c343330aefbd0d2cb40f561d26e59e87b0105a93aa9a2d205395695cd7a93bf70ca86b9cad7e9fbeaeec8a0a4dd3b4209288c88cd6dc2b00e8a7a27f67accee79825d437bc2afb9de9b4412458bfc78934619e75cc34b3db807507a8308e73e7377cf27625d09bad32064a3f143701d787a0a1e921571d5134df1ec48583b3d3a289a9c1abb7723f2e494f9951b4445ffbd6cb2157d3d95a93cab4069206ebcaada19ab58af56add695c9c4ef07ce7292efef7ba0c6f95679745859c2e197a8940df9cd6e4c5e34fb50ec02587544d66afd80292b82287300bb1dc268abb6fd6ab8c1707fd80efcea181919483ab5e045e747e83fdedc77b0d2b0520deed68e85ec55840ef3618c10bd4cdc44dd25e6b393f2088a9525bd250bb7852349a83d58540f2db115bb092c0caebfe900c888a76aa87ce037677f8148e2f0f455b9def6b924954939c64bb3007cc01d266c2b062fbe259816111b767221d348538e0513b67422dd389b5c24d34f36ac11014d92483c8cb8ec7fb59d520dd3e14d4dbd8ce72c19ec600f35e56c9577fb95d6f5dbc6944a3eb3c8bbeffd741e7ee1db306cc72726514f9a0ddbf9f67f9f3926153bdbfbd935d906f194bc46a03dc230d70f9989d3a9ef0b68acac843b620811b5f1ca64014a7c4fe0e89b68a24c8d6bfa9b48c8d73ae4cde8fdadb2c45b8a9368b7a21534e569e9b18874f10a97118d527927308eb1abd5b6b2883624202ca8bfe60c57d8fe1d44209163e5abbd2ff8fb4d03e7fffcdcd6a093bbf021e02d2da7556fcc41db4bedb879b78257bb49737f8aee8ea584b53665212170f3085b52b92c35376d4bff19e3a2f311b4202c6cc5338441be9e643f5831066fe4f6357c7faf95388fe90cb82326de1c910cc9a9306cc6555cde68677250ee465c73c446a72e0e3ba8f07098c47e448024694739824da6fc51e3d55d6928f87d3b7b15f5275cf073879dda580f2c30c79209e5a28462fb63533fa856ba0f0a641e601d55bd425e24534aa445776cf3592e40fb57b7de3f3924084b643ba857ff4bc6c9d8e22a03ca6d1a497573dfc7517701d2b38c564e6d5473fb2146afa6e3145302ca280fe7a9fd664e42db9ef97174a1f4ba0a346976f6bccab7842490ee77e0af13475dd29c1786b8c0e35d42a8009e31388955476db0582383f8f5a82791f68d382d804b8ffc1a6f8e989f7bd27f929f69cfd66a6ed02287637a257e91eb493d1a69b57bc2869d26315aaed7bc20adbb67500a46d5a3fa30588d603be59499d040889f6575cfb137b4018ed5915999e3aea9089fe3fe3a92e26bd26f04255beffda1da720cacd32fba6d18d0c72356b367511f8658e88e776cc5e7a33e1e54a01af2512a5671d40ad061e87a1479bbae3d57b1e36dd0f67ecb5e8d2e3ea9003d0a2527ffa6d60d5d1264bec9cbfe08af58247232f6bd66be97adf5ac489b4560f3965b9deab83b7ef99c0097e8e9344bf51cc2df7424f7e5485f086e864d204db9d0f1aa78e7ac81509a95fd2272f5757e091e986053236e75787ebf2ebc881bd4946f7e576b08952352d2e668790c22b99139f67859f48676b649cb904cd1e493ef10bc9f7c63000ff6bb7b7f29fead5cbc3975f7b325c925dc5bb86379dfc011c9d83a9b94a1173a5233c78954405c994f5d130bf7835d0d04e9b2feff7a953e67ad20a73bd168c72c1bd21aaea11f7f4f3cb683c17daf5ec62c016b734dcddc56fa4f72c7afa120bdf12a348e12e38b22cfe219eaaa8a64bf339ee51002e47ad28aadb627a4d66199a4f476d4342ac08a59a6bc4713b8530023861b33becd5d5e708f2c1c8228eb7e476b14dbc3c7455cd64de2b3ed17a97afa41c8e896e987321c5610a4e0012283b3209122256963d76332a16248e565b00ff226b502f67aea7489c463f6b778d344358bc0c5863fe196041eee75f50448e63c406842419719053deef84cc074a3df41a30ecf304664503b04b1ba8616af8ddda2610a08011fba58c52831a58a69f17921a7fe58d2283445ee5fa48f7fc75c493516075888b119a9144a0474e9230836e47c360b54e17673b0a85a4ff189d4f5ff98e6150e78405ef0d70d6fc2095cf7d09a360752645fb1514ead139c35a8c91758aeeb772a61228358a1439f7ff558710dbe3252f68be826e1b91dbb204608d2fcfe79142502a9e7255dc496965bf3c831356584e9f943b1c8931aab74ce14d96750f932ef30f45ed35157f4f93e668b8aecd861a4ab46f36f1c9d6c9b6abbb1f4a92e5bbcfc3319d3edeb1024b6ab844b6746bcebd0d6a8f7922696d05667ca2d947bacdfccaccd2e7cad01b1127f7f770e793b970b320147b5796fc2bfb1bd4e558ecaacf58e0800ad25ebfcec969fd40a1e63fe1a43d34e759d6783e3cfeb9f4d11b2236e16ffeb5e5f624bcb867d61064bb2e0a5729b97c677e4d766bc51c0df9b55ad9257a5b3d83ed49d30e5bb46fe71579743d62a172f1709dbd2fe760794e205316d2f791ce3ad65e879742a980ccc8a76f5c015259c191eeaa32fae2b046aa3d5437009b4ec9dff8ee132ae7e5c463e6083693ce2e1f9dfd9171b2ee64f7c87d431d2d20878e0dc5f56b82f13c01db1750703c15deef590378b9ea4d79455649943f40c97764798dfdd1d9b29bd0c456d27541fa8aa7378e4360e39034105304b03695fcf4958cfb691d792f076c71f92047e8e73e27e774ad96db27b4937bd3817848a2fe4b07fdd72b64fb0ccaf0d06ae088731d8e062ac621df75b5710c041d65a3588692572321476582a89fd1f7637efd6439b45f097ce66b115e22437ae7e2a0022c1c563fc7cad70098f09d8d52f766ae756feb00fa86ef60b7f8741141960aa6a4e887e0c6cc3ba98e060b6db177d5360ee4013d9585d68d93459a6f56a896123928c490ddd853565c291797ffbcdb276ed22c9371e1a78df570fae50873ddcccf6a6c41ae5b96fde8ee90ffda56374b74ada17dad4387f444679443461b0efaa1cc34dd4a9a39713ed64ccbeaf2cfaf2181fc25c254ed0dac7831e813527c45b2766eea3a5f994a9129874f1feec883f460b44b736eaa8ef75a764c1dd5c91497b9760797c86447b1b4a1f52e00fe95df39ae852f5e70028fa1a33b27225e700b01c50dccf401ad541edaef252a287412191a6034dae47676692122a262477c0b03327b9539f00b464fa13808dc35abde61400ac2d3eda9dabdadee6b31f413a9f2494645471c6f4b27ce96fc773773d2a2945042b147cabc3cf1d90fbbeba76eadbabe660ed53109e3b0c1772e00f56944a2542e56662889a8440983d8d7a74c96685196daff6b26e7d06e88940c7d608021ad92d5a637d6eb0be02884c9946087f940501317e9ca4a62f40f82c37566b30cbf7032741369ef27a21336abd6be1d61f645d6f0bb278839dadfcb3ccb163e799957d8d85a2c9e07c42488dda8bdcb38662cee36269a6635f062ce8e12cd6a8d855c184d2199c1430e78f6e2c3532c358d6edf51a67d507dc194ea53b6ad91e234d873b6a9e32957aeccd9d5f1ace75f551c1c6663c73ffb1a9baafdeb86a2c4cd8b4bace567b37082612bd52c072b4bbddfbdce26fc5e3dc75b39fc446708d551a60b5379fb89da142be17f55864e4ff82eaf2eba2390fc44291c280c6f9f279223d5652bd0e456433b6bc2a9e6b3763c6176ddb6996f51fd09220e00176d7ec13dc5cd2323d5879a0a4aa0af50215a79965333936e7a202aad9b55525c4f87d2953a92993c4c4bc94ebcc6f5164e67b9b0085530d52d15f362d934acf8fe7b11283c2102f5a232b4d0c681864d4b2a934c5315c0899c1f7b4bf4f75f90f274c27cf2431ca722d926fb495088c3efe905d9f6891ea03e43bf553042e88377b195899e78b466e94cc79f1c2caa6f957299aa90220d92ec0e099807f1150628b7662cd8d3e3b70419f0380f594a46af0957ce8dac4a64a91a43fb22bdb2a71e41e5bfe4550a0b621803974b668b093a9c51fc907ee3824a9106ef16650b578330a7cfb8f1c0280f004addb96f6ad758849985fd4115892b24a7340641954bc6a8326efa4e670e534f0d7fde75061922517628a791913fa22b9d5f77cd0b7c5762ad422b59c9c5d8ed067777755805f07044be70dc7a13c850aed65366ddde11d90b6423a719e314b5e88342bb916399ac842f0574ca40803098b8bd443e5352bc557bcf941ab53574fa765166b95b7baa286bb2c00305f52c1617b15469c9642c8755b1e52cdba2b8f199d0124b14eedf37cdeb1fb6d8561f81899edc829570fc40e65061fdd6b4bf609670475b8e04e733034a20ffbe08c7173b9b020d1ea38d41f76002dcd86829d709d632f162a14ba400492921680c494ea92980781f5dc047c899867df17a39c03159fba3ac0bfc35b236067140a1dc384bbe671896b4f6132ab25e8b3072cf1c486cb57547f4d603ce8a6d5739cfcefb4f764b672ec26295b2078dc8c44dcd4524305d51d05ed925469e609122bf9831605eeb06b38d2165710d842f7543863e3c2e3d16ad1b1afeb4022fc30b901fe9e216fb977a2ab808d4da7255bba3e182577b03c5908211226e23ef2b2276520de305f1a60e481547a443d9fd713a29dd01030f95755992ec946e5e3967fdf67736f59d6f211b2e3135e81a123fe5358eca5e3fca9d618707324cbbba2dbeb5f9426fd858749165aaebdd3892632c35c12ad38fc8d0bb3e2b2ca3beff8d81c31efe7bd75f5a7eeaf09342cb5725f5372994a6c531da2798958346adb7738ef9069149fafe3df25d87e4a3e3e0e0121721d65c0093ff7e9710d84ef730d3668b78d3b797f602ce30dfdfa9b7b15f3ba2bb09ce58bbf75aa3e58d70bfc210960484440f1aa58a9b74abc73d5beeb10e334e473b1454b40599072fa36a697521b0ff01477fff56bf2213d31228ff960ef5fa2c794b9dc40055c08075c94ff714bd734bca0145b375411c7115184e4f3dd946820b0c642be2647d7a87e17653779f8ab9185f9f5ef79fe46b3c0c24f53ca10b09cb5b46048785a1ab2fd48a95873193f4b1965fcc876832978152c5d5c02866bc7aea03996fd4c0e0f1a3d276d220991c912c44e9cd8f7d2ad75b589435c78572995ec280b9c627fd32dbe2ef4e676665856bb3280d1f6afdbeee9a8405b9f5dcdfaaf91487e8bd5b155ab912d593efcfb4d0026edfdd931db5e61d4905125adc1f1fa73cc2d38c1625ff9d9111e5b6d9884173070f5529e1b41d950b16a40e35133f88c188e0ccf4dd2cd19d0de8ad1cb84c37b643ab3a2012b24dfb647925f1dca26a0fedb42991640908372abbeb3a985eb14453ec15196a1f89bb3a3e9347eb08702539c7e5f25e29f6b1fe4c2eba694eace3786c6b2b9e93bb98f852d9a15db3f15d34c5236cc0ff718b15334f02c65791b5a243e6c5fd4c0c7e46871ee3a37dd3c9fc4327d645a6c249fbd05ff0a3c6ce8231cabf93dd995d0036e502ffdf12182d1f84b63c95bb4066af30ab91453a652e5be5a6bcb1583cc600ab11ab944c7ca26c0bcf9e0703fbbf1215f837924b710fbb9c16805295ff8b6bf614ffe3f19394d5c29b2b1c0879b106f95494e37a64d1f4e95264931c3baa6acce287293006bffab9ad913d1e6d11e3dfdc23224bdf13947af43fc55cd68b2cab7c3831fef3e0caa7e0aba0373dc672ada2d8283041d5720145467c4dc4eef95af4bd9fd9b28a8c544ee4fc28bab7f17575a65cfdfd15af97fbef67116be9baa8fe1a5e4fd17802e5289ad083d9d6b30f9d74de76dd7601b1614d8e5b21cbebd47cf45c39ffb123ba1e838fbd51888c2d3b1d0c61514a415b73b830cc8f46af82a4aeabecbfd7f90a51de447dfb00e8de74eaefa4f3a2137b630c9bf2e4a0e0457566bcf5c6ab226c834b65ecfd6124a7a6ae6cc87b8a23361cb1848f2d35510f74670e68fbd8fba44d4c79ab1164a15fc3f80b1e944bb73a4b1cbf5c3804c009a995f3329645f6073dc7f5e3e1a2b161b7f6fdbeb562e8766dd6e4993696c603c506b90acf8e6d922e78ddd56dd8c3209e0d9465429d204265b39a5532352d55e4ef54ca9d2ef17cfcfe94f58e6cba8e6b45f1c127719f739b9fa98a7d187e9b6eeb70aace723f3cc38aabc42220602f2ccbd67cd5218825939c1a2543e298b877181d83880c480bf08ea60ad013acab461c265abb51a57605288cc3bc586ca5d83536450eaeabaa458299e2a4183ae3cf5a402b6c84575b6c84d5a711b658538367f4b2413954ddaa4da548d37f21a27ef1656c8990dff99882c17b63d2edd9be1e07b22bbe86afad6c6e2de76efb231560b31dcc1017575b7c16e646b042fc2dd25c737497421d21cacd9fa609f73f61ac274724351747e1e55b4d180ea3b2602e2086d542deb205ce8b71f2bd182bd7f1f83b768f3f6ada8e2e916704680ab192a44be34e2e771157a31408ca84b351910c2ad736ee7cb44fe309f39acf2a9622ff8c0fa5c6a3b4daa459d0f879fd651fd80d3b76ccacf7060563f96452a04995ccdb3f753afc53513aeb9237745a28229e02dabb2b9030ecb06bccc8430c75a46bb920d96ebf3ff9d4086b75a378ef22e51eb1a84037e05c7ab1d842edfe291c5b50befd67f8ee7a88660bbfa04b27616537e9b4f0ced737b6f5c11f47a33649aabf39eb5567d3c5b92de416360eba550f10a3d4254167a99fbb3c3e0db272643a83ecb5d58afc1693cd797675c7d29ad1bc942c96d5001f7ca5c39c43f923909da3733ef2de0df13d5337533ddd8f3b0280fbcde1f7f32fe54763551ca8ca133d35508527ada1f4fceb3de9d11e67f572be669f953741c9361f44cb8a3aa6e5c3d2668cf247fd1ca0188b2476b2d12118a854e56b5b3a1af5b0d335a7eb48a59dab2e2a4b25ba7df54a57040207de69fb69ae4b6265bd60eb982d18639924a9f7a6727c6b6aa95320e8c9f865b450e0737d375bfac4bea09b02a31421fcceb911e039be339b4653fd00c7ca9832615342013cde46fa51f96f0fe773c9ef6dc63a3e024c62e0a999f34a8957835d382e1f73a06458df48dc83120cedd9d518f974e45b4486abafeed35efe84219b214af1fcee8368a3f04d9ee721ab0142fd4e5d3965d7b4602c55a8a5851abebddd2bd7780084409a6f851db82e8254cecdc98a47fd22efab323fd4f30938c0a91947d5e544a7bd3972addee93b64675c90592165a1fa3614f415dba517cc74dd05700d3dbcab1b648917a5bc1435ba2149d32eb895f47e2c6e19b33722ea47ec02154ab9d72a94056636ba05817b1901ca8fd242b4ca7647a39514ad39b6bbc7572301a5fe99b8021129a583809530a173261fe67265b5545aa5e9a23b51fafd5383866e9767e4cc7335d5827f272cf10874c8fb8b1bf974809cc6818826defc098ab6654da85437fce76d291f4d0d15a83b7af1b05d4260cd7cc49325583917e3bcdd2941a64f70bcb9bec8505fae92bb65e114e893b2b8c116a7687eabd6865dcdf9ad30bd17068fa40dd5b16db5ec425a197acdaf957672acbc67105818fbd91d34befaf03d7bde2225e2f078df71d2db1d7ccbd1bb3df2b27a599041bb92ef766c68d7650d2025465eda097fa569c79a282eccbaa5d3c6d89760d765f9dcf5f237549ded70ded247d7969c35b4ca8563073a2493ce22ecf102d56325eb7bbaec317da9d535f0d922799ab5b605b54cd0d4f3751ea612819730b133b021bb9832e921d2d90ba4b2fed54798fae625fca667d561cb2526c538d9c7b4b8480318467bce7dd3c43f9b93fd696368cb962e8516a0bb5908b3b8380bf057e1c2dd78bf15dca1339dabc9f7ae1d7acc59553807cdd710b7d900d78d6a0a52b8fad4b20dbf32d61dce08452166aedf6ad1da07b50696f6f2bb693904e5196772e6dd079680d77a422037e02f7c12ff15cf1308a19c6deae2043a14d513a0b0736dbdaf70ff8c95c71d2a4e8660d8d3a8ecd9c2ec2affad1fcecc54aeb1f2531eec99cc238b95c2883afb92351a95145e6db6ef6e62e10edd0d680ec4ed7c5c6b57a75dd14a4b0fefe2fb8b7c6e61a2b7edfba9665b6501d6bb81edda176a0a58e40d26b234b9659f52507a4261fdf5d142fb515d0343ef326c6631caae6554de62eb9932b6116f52de0cd00ea286eaeb779dfae2d0e606f146bce23f046e5eedcb8ffc6a95592c5c6c8de15685471b76278e7391d88c3767827a693235efde7a5f0acd5eb3d4717c3426f29d5326b3637bfd1bff6bd3e922c1537705359d4d5711a34d141e237f36c9698c577fd58e265bd2d94a5cb20268e512955a6eada71988809fbabe945d85f6d0c0424b768c4f697afac7aa91c5763b193df02899d6fc96f1a29fbfbcfca9676c5a3e2f3c33e7a4ed04a631ac46061c591b581eb6284e2d0f870ecde9016d7f8ce6e139cdfe3fb6dbc62c877429fd408f8546533c31982b3eb1f4bc985de5b1f0533673b66c57afb40b159fd77ac4138e8dc67c78132e16003ca1e24f7e30f135a53907631abcaa9ea25a15f391c97af300efdc73547c51837cc9784d0ff8011160e26ef6e7b08a71c20d1a221850e22eee036312066ea0939ae44a4172411ae5c1e0531fd23fdaeb6aa3147ba884b3f43376be03ddf52df8779f8258046e68afa88a3f0624030dd2a36d0cbfa25c55f39255fcf83cf94ecd37835c28d04f6037397a117ed228aace32488983a07bec58230c466375e908eb6e0a2a240613d01ed13523036ce6de0ee4c5195bcf36c895df8e0fe2f144a8732a654a5253877beea8cf8b1dc19055f6d5e743bd9ce89dd952ecbe0729c0ca7039f6b9e5278865113e22eeaf9dad6f539b605c2c759087bf31513d2198d3a3c706efc8846880467a48f779322098f4c011dd2b2a145ad8ed5697610b4e1a4a2d47504b7dec3894727536a3ae668067e85e6f1d58052f5c7c615452d972ea7e5563a89625e27c301385267a0747047b99b81d5bfd560673d35b33bb7d6060c2f4cee7fedb52ca4c2183990c7d7a2dcc4ec7bf13e16b7cb847980c09a50bba31f0f123d895507446b8f2cda2c403dace872330fb7e7cf9d4f1eefa0ed2978be3071a88538f229ff711c96cfa285bb5f9b6401babd2add67068fb7e0e041d829934eb341eef7b73df5723132a4165de7dcdc5ec0991c1e671543941f5b1d1b764c38ca6d3d510aafc778600b465929e9f6735803a1263a4ac5052c0734c252a8bc0748f3edf9594ab8b95314d8bd55be8721bcd8c34fcf07cfec671f5b75bdbaa65b33cc810571bc049f3422a9bc24c424a79c353f22242a8bbd33dd73be929c0f3fb95f928de950a2a9797436caea78d3cabbf85d0573ed32c1fecf8ef1a82ceb694f5e9500cfea2ff91fef5e8729dae88bee2a42b709b2d2b83865c3d8ef1712ac51a2663e4a1e4cc79a6a8c47e2a6a53dc7b4c726e82659449ec241b8fd7419b147845da2ac4153f1a0b5ed6aab7a5b4790c7b2a4287223a1d00e970e3b983d478f67192ffbb5cd27fab0afdbb08b4a8b84d83c5876d3d51a0285a26503d762374f5223e03b4f5ec17835a2e4923cffcde9c60510085f10cb51a0877ffa7d85ddd078eeb08150067b211e48ec71028b8c9a9290eb3a86bf41c71fb652497164a2af251efe0013bc535e9688cb172c70d0e90f91729e750dcbfc39e2d4ca6e67efb52a7f3a5f2a047e6e58fed72b2d571ea02fc41711f408c40708aec0a162f8e90a2c4b55e8cac528597f345f6d9b30cc8c06224c5ee7155b7562aa73a09c5048a5a26afcc5117066ee9ddd7fde8db99a923f5c1721a64d502b1ff262a0ed63ebba20f3964118e84a545cf1e6b04092fe3c4d8495b54350fdedc875b08aa4bf43529fac583f3323167df1a7d4711e639f286a6d17460c65267341f9809a74bf61a92ad51466a248efd301564ebed2c028f884cbbe2945c1327fb78e7e1ad17658d03f21dcfa4bc689247e3ad38addbde122c5c589ac5ab977e7e4b099db715b3ca8bac984fe064345b0a28589dded66df949a916b7e5adcb4dff7c4d95e1baeb872372885482f9ccbe369595501d9d4825217d4b28296f5fc1d381f1e492eda5e619fd360bbee6878329ed85bc3d26b9119f2dbbcca337450091e030aca99d11b3784c5c27b012c92c2a6e2d479408532bc2b2135517bc46a7cf444d19c78a5daa14233242b39baead60b3127c22b32ce2372323ec1d95da6e2e97e25bfac494c6dbb0d95665a2c8f2154fe4b1bc4bd8d39ffa7998ad565d400a82280747ba6c8bdaec3248b498338a2f84886136d439f9deb6a7545f7315ee734c11688d55c811f68dc44cddabbcbf680af92c4b7efd0f42aff6d4f69ad97852e30a1fcb9258c620e6a01ef31e35fc7c86f26760cf7f21771f580237ed5c5e0dbfd82ff66749882158993e2ee7221a7227244fb01bfeb16baff773988d8df40c3b72755304273adc3c82b1a86efb868752f4fafb5cf0b88182515994ce4f8cad77f7ae6bfd5ee75fc23ae944c84f6248675543be6df8b89c1943ea518e058e4ec1146af55d6d4c646fbee6b89dacf7cf17db02c295a48e1431a9c19d44588e38545a02b8a19199fbf5f466eebfb5a68b99f140166a3027aeb10d2ea226137e8beb4af9e025254ddb2e5d8f5ef161a6b9893cc45271ebc90c5137e2d641ee7b7dcf2e77dd53af6465dd826538425c6e114c4dedcecf4fb0797990f9f56def27745fe3d89cb6bd8639b78a9ae958904f1aa20f04c904894577daa6d68c8e8f6f13ca5171e36e8e12f921771d8286a6f7a01fbddbc9f62384743421f50957b0cb72631ede9c4a13f189b6e8c659278e708b21c52466eb2711c4927cb018aa4bcc50685a00b96193e4bf245e73c0a96b3281c15376f1bd42cacc861d02dfac26eefe41a8c3abdf1650a27283c27791218b2c3b9dedb59a7f627bd756aa3d999055645ffc6a7a48d1da746a327622f28e71af4bee216e350c74a7ccd8c561fdbf867d1dc1b3dd96c69ac6943202815c6d8e49469def34114e7dfb5590e3460899e0d839616baca8c8bc8c0cf1e077f63a38583ae486b748ab557b55bfcd1a159f627dfa54535e18f49c80867bdc9f8554d9419ae12f6a0667bb5a5c9f3f290f7cdcb35a140f239643f125e57b77f2b5e178240b09fc8b80e9d4efbff91f65c937ce21c85377b493ee1a49b2c4b779c3740e849fe466c93fcb55ee5f813f27ba20c6ccbfdd62e8bb7a7f063290a48f6d83a57d427668c7086cd6665e1489a007ff72ae5b2373da8c733aadbe2440a0654266fb901bb6314911875a67ec0bf8625249c3845a0464ad8006649a71309c62427542f03bcae7ac67c6661425c9608ebb06c6e6f01879dd67daeae0ef9ac3e2a0c702d1715109f7bfb3ac0631adff6cb946c4bd3376d036bc71f8e9239ca5989fa5c25929da6cb010ac96ff49700ff296f292aac30625648e9b3a7be87bf0820a184dad94339159b8c0e401fda1ff22ebc9f126f84f2f768fa0511d4da215d80efa59a9cc6f27aa43770340454fbda7d77ab8ad71b3b8eed053345f3c3eb0118c2b06d6dbdac055bb0e91dd7fa23016d626972033d8e18cb432381ae949d4f30b119750b96ab7dee1090d6dfc311d0f7b2d7a1e74011db79acd382641ae524d4f694d6ece0d1a24292d34bdd7e82871ee78dc11dc098890bbf3cc7ad847ceff95f6b2dad418f2f56c44b9d2ec3d602a7ca9b62373861057bef1b14f3a65cd90119d9adc8cdfd5a8e2fd67f13708e3f719b27502078b5e0d18b85cc612d44cef86cfe72b0f140ff30fcee303b5d1fbc71bd804915c2e901d2c462a414728c10cd1171bb947e3f87f1bf4f99bc44b00af9b57a8c10038be88ae5653491942df23fda33da9c05639f89921c10a75f165c079a2ec75f0fa6387e3cc762b832d6c3404a1d65022309b94d1909fa52e9999c972ae577caf16a6c0492f58aa39157f84e2c02af987bf238d1a843e6af8b07993bba21d6335375b306c70b7f9dab216aefa22a9bf37960383a7bacacea98ca8372d674cf147c4b2bfa2b006a3b466a3791421e344acf74a14daf993052a86ef8ec99d5f534b4c56827cc396323255174365282d0e0910bea36f74d22c4d5f1e93ef5e0588f1bd350b6a8d92f1caf0d5093250639f2589ebafea2cf13f773599afe8d35bfc0db09c85dba857f2652f31cfbc8e89f7608820cb6949930c17449e704fc9626f90689fd0bfa966797d024df93c1b90180018e6c0b6422e5f5c6bfb352a169be7ef329587526355577111780b11bc4aa771bec1c01b9cf03831830aa9f61711ccf4f92c8e1a409df5ad6d601b3fe3ea1552f61da96f507f437fb404b1d87d3a08d1f98a8c05d73b058b0655d5bc4a87b10a52ac73beed98e7faa9b5fa267af42f0b7e3d1868c115d9b2b114064eff11c393c42c89fce25d279224af994f1aa762d497d9bcd51d19b95617ba518c6d4136721b5b508da7b260c64a9c2591c311966c5f03cbff3c7fc63ebd677046fdf13f6fe8cd1e7da5c9c55be969f2011e82143e02883754e1ff1d849309820d5aff91876c57a0cd70fd11acce7bb80a04a9530ff02f57c92e0591ddfb23707d52dbf0cb094ee9b5bd0fa0b70c2b42b9c4edb1f7991de8ac49066175a278cb7da49bd02bd4cf6d7954108f1aacb3722356c99af363dee152a045170aeb59d9854b4a0d1a796048fa7dc1313e256aebd966dc8997e870dcde32cb674959d6eac4fe0a7e4a43aa50160b95272a3172e3a61b115855c59b58bbdfad050d363bc0d860036b8c89a4c4b42e227e49511044589edac85f1c1a23089023b2cd0369e261866a1b654864f42aa53d7c7b3bc411a4762e39c5ef7818a03c986c29622f56d3b22e34426fff5919f80e88c43260791bd5e44ec4a817eacdc066adeada4cac7a7ef855a7d9a265b469aeb8d5bddbed2e2a76ce451825d713bad71246fe0729b36696ea00d32cd2beec5f76ad6df1d6755064817ed6aff479712f29f051bab209c3ad1b9992b0d4a168c1c6c02027044d91a99f9fdf0111d06d82227b267494776876191861700c19d9523d461c9e22e70257bff720a371a4a1f5a1f6e98e3f6991cd5bb705f24ff98b9c7a016b4ae3874818a894ddd94889bb3b181181502b2633bd82b04fb277df404a0d8a091e8c5da7ccd336a8175162896bf8f4f0779937f937d5f6412f4f78c1e08feaebd41aed66638a5cf3ff805451e90102fb488c898935de708bfb6782d629e214e5c54aeafbaf803c803cdc22c61e832c7fd6853f2fb9e180496b7057d5da883158ff5e010ba67205a09b83268e2710ee0a995171f4ff4dfd2ddc4c8c1fe493c45b7695763885aa7c24c8104c445a01413eaee35be507023599485c3d844bef36913d8c595f2897a8ebe405017843bc3b744ee5eb3ff99035ff4b8eef54ce48a953fb93a1b04ca8a1dc1bbfd7faa6ec76ae7bafb315d783c75a7e970aa5edb13a164c73ae152077231f8954caeeb96790d526eeeebc7118197d3d797490c3eb6de46fd92f792a620c86e0c5bdd8e4864872bc9f3d92b1a54c46f03d948bbacf8ec88b4f7ce4795cea316499fd049607b4d11f5787b0ce8d2b66400ecc698c4782de797a8818bd2f30d20c6a705650f22d50655127f8a35f9c74d4cad34370d74598dc9ba9981e5b6ede601a31cc3ad493fd25cb34132b27d3560261578fffa862751df9b86e0963e9f24bb8c17854eb568e59bce2043b99f9aff42eb1894d04b3ca8687fb6eb27c6757fe8c38dba7a153d438a9fae6d462883a80e26d9359da49989c37034d2072c475ada27bcad5bb4d76f6e9184569fab591327ccc480f4456ebdaf864fd79a274fba0bf2a1102916f08bda41413f17013ed9b980a2a387c8e536967f60e1e4a5a3b796ee14b27b54b556d1d1656ce97ad0bd1cc7c8a4846bae5a121155be05f2008d807a4a811dece40c57340c0849e719044e304a96448dec1a3d01f0efe9707656e2bed966e6bf233bf40510770da343bcc7987b4a4230ecf464a527693865bc1d2146bf8e7dad117cecf447e431cbf79e6406f9fae2b4ea9effdd0977e20d25d8bacadbc54e4952deb2f362dd26d7d7f8bd318e2160598dce61517dc1bd62faaeff8a86dbcd16b113ef343c5d98748c1c47366422f7a5530e26d5f59000ffef11e2d1246fddb8317278e5db426067038281b7fb7a9ee13765d6ad45a4abbbb4455f48b6c2a27c9e14176db4f95524c4547c85eea832ac3deb20ff9a0c407ba882947c4ac15677b207ab12ee0b774f5912ee5366aaf0e2518e0cb4e34172d993dd05433fc0bc96f6ea203c2273b425035a83d7d811800fc257d991201f16f33c4b76bbef7219139b5ac1925ff6abe8aee402e9e3d8a7a088858c5565bba1958f2be72013eac28a0d2007b3bee46fb1e225e4ab5353f703f3d3922975b3f86a688d626d852616327dd787ef60a4ec432cd3ac7f4a3adb961f8a65d7e7316dd931c50b3a2b86442a1d2972d0b600ecb1d3602bb5270bc8ce44f8b309ee02cb78dc7841933172c4669d56f93cb0fb722ac79f65d21307fab5f73af2ece581224fb2bc1b1da93b41668a78fb060485a82f6d57d8d5390fb3673d298e5fe6e8ebfb9f7576285143c42a8f78d7804270a8d2bcda44bd544bec8439cd5ce7bfef3004f5ddb1f97ac28429677737700c5bb05d08975d3a221c1a1d3165ad4772053114037a0f25a0a751e0a6a3d67164c3b51c086e028e470fbd2eb0278cbe4fcabc3425b97b4b116db014659da9b4287180313ea34131840457c1b8071faeb3198ddce83cd325797765f858cc671048700d0a47fd15141cbf14ffd0b198aa5f6296ec70aa37827d298849ba5aae1144775af02bf690a9a35640e6a8a11d3ae0b7925eb7ff01f890dc5478d9c941bf0d9f1208e001d0865bced47545069d635024fb539abe94b2237c3392430e2496d2939e054f4fd99018599258be264e6623b69d1e3d3763a06922e43e5326b97747159bf83aa84b8646dc6632351b223235bb13643fa1802618d2516014f346b18267575a8725fbf4b2baa4ee8e5e0d2cd2490edc7276995ff278614443ea21bf81856a390e6b9fb00c941ccfbe5197a77b496c70649cedeca7be1df99b1d0c9057fd41fd006dda9499a917781b4dc93c6b39982823d216eef12a443e1b351b76eb6729bb523dea01c7247e20402ba18ac6950f39fc68fb65dc692207d647d12c4f93937e1027a5b14d2ff1836b96648afa910b3d8c795bff0e7c4165ce6b2d00ba6b3a2527c001e6d869fe32aec57bc00f904eb44f1089a656dc873e1abab582c6eb6191773aa5d88730f9a700d19dc722638d02978ab7f3c1763bf6fb591b050c871c50806e1cacf143b9e859108b02d24cfd12d01b35b31a73e5bbe70e28871ccc4b307c8c43f526d005eba33ef3879c2f7b8e745f360a98770c2982019260c452ecee77f709a3e47a72c58186a43ac139edee105e2ac667cd5608312983919d60ace638207a9967e897e693b1b17710b6e6d6f1fb6668dd2be9052afa74ab088c3d03917a7e5a3f4acc0e3f827b3bc1ef96bfb579cb1cea1b0f97c658e1dd0b3359956fbe17c70b5ddaeda5722b8e06295a8ba4dd0086140822eab8e172091e51dc9d015df346d5f06fafb77b6614204098a7a23bea72e7a899d25bbeb873df7ab9a3f45534274095871791056dcdd840028aba80390e7f03a4c2e51ce0ac00ada108906882147330e596e19970bb861f0a40c32cbdcb2002ecd134005899f0554152ee1802857598401fdf44c3089ace46c301f90e4426c83236c0fb31f2703c23d6aefda1197ab8ac597196942532eec47328ae69eec1afc29362296c888d141a93416bd2e7653f50c429821c2ce8f83cd5fa06030f9727b138c89531fcddc63cad6b50af2190f76f1bef11237d0030a94ca07a3be8864530f74610289d4e06f367ff5558dc02fe0d167f3a6e209200a031b18cf48edcac36a9be19589b9d13cc7b16775dbc94276ef39bd2a6e859da66cb6ba19f88b66beb50c28d96f22e38d576c6644b7ab12d5c83b001a0f31425858fe5f56ce7d58409bb1243b081238f002837d3618f1581f619c54c7bd4ccdd71738681578bb92e9365cba838f2329e8bbf8d6dd14b5da8894aaef29759d83d9e87235776eba27a6ef849f41450ee363a168cdeeec795957f1e92ef97d18ea8a9e7c01f4f77304801dfd8124f2dc7cf9cb52b3cd1cdf109992565d7b96920110bc13f51ed82ce7091baf33442bc47d78528846b77cadef918de24f57c0ccab43dab54a7c1cf02bcb57753db3f7e892a9e10682e14f040b0ff4aaf762300d9015c0fe7e84fe1c664a69878c0c955fa1d9849f126aae5ec7e496fc7eaf60b2043da76bd6b81bc6a4b07930ba77298e39d3ee1aeb132d9d3d61584b6f68b49699376cfaf6a567470d509f17fe38c6b0ed670606b8d17f4adcc678dab57468e526b238dfc755431b021acdcf866d532a10bb06e4830aabeb14008cc9a970a695b2380d63626fe7d35b3001d1e1e5a8c2733a36c5410053711fb002d10db86b08633358f2f44ca0ae528cbafd05a62816325afcc4f310155e1ae8ad991682c46b212ed4c79de0cc0d313f4214169ff233ab175adf75609b31528ad8a4520d7d57a26d196aadb9fa6716003ccfc73186ba83f03b6fdc7c808fd3629e49f26d22038d446f0e50869360c70af0fb9e64d62bad4c9f861ca5fe7f244b57a62d60e310a73e98a6d11977b02438692d1c2ccaf540e8db235a04b78c91ca17aadda5f49a476e21f416a5630700c2350aedf859693e154fa417cb11e9c3a1561dcfb9e8e6bd96482f23c3cac13b3a52829ece799d0fb5a925ecfac263a300dcafe04f8ca3ce538844a541fcb980d38126c8ce0d8c30d381c6f5ec5f7f0c2a77f0e9f88a20d8b781260c5b268bdcc61901d84aebd463f32f4c9ec7a673056bce0b6f91a40967c8b3de46fab45c5573736ee86d661709b3e8d2a6d1a57e06fa78bbb146c5af6c8db6fb85f6d6025455a479084287e9fcf2436ee49a8c7d093a0b453c6cfc3421562676f421df6c9c65c661849762c59d8a0c5d93abfba6520ee9fdcb0a87e5d91c4e19171827fd017e2254450239a6b57436499d7214c9b54e3124bfa2f59731ae78b33a94f362512c5a38a9fd8fb698b0f7e0278dd78ec91894a7ede0040360bc2ac51efdfe482ca6611c043397558d0abdb082aadecc0be43b45d245e55e1b0c3053a6f2868dc9d8e98fcb1f1ac4b7077dc46ef8200a1739c9d4392756c9140588505a1d8b273c9d43dab115db7408ae267785701970696ba2cdb3ceaa4f5ba09cd1b36c2d4ddf041080c7c14e929ed6e42fa4c5a40133a7ae4c4ca94f28b453883bee9e1d24c8d4ace4c726c681305f75216e70e91f87bd4da2b82220be6fdd7fd408e1953b60f8b3a74f292a54e7d658d174e3ca331b049926a37875f8522677aff7ef72f180df647ec41790ac3afd8eff72bf5d971751b3a3e920cec40347042f47a65a89c4c3d135069388d70303e080f454febc2694807837128bb72b1796f7fbe78108e1add84a0efaf602831b449e2b28756aa43aa602e0a7d925ee1681e99ff914e991ad53980516149e49b44c616cfee6df4e4d1f7bcf4f9ca558fca7688b2d0ae9f0c1b0d2874aec03e9015fd60241436fbce89981dd9bf4be39ad7c8cdd2218068514f2df1f04323abedf8fd1a0d36722b9e9f00c8df5af3217a9d5148282f8ef9584eb6eeb2ccc422245262d16253774912031378850e1b0fec8800bacf0254b07beb77e7626889024a18bd7e4a91e033dd3252e292ab5b136b5eddcaf9ac96cc0f942236cbfaabe463d38690fc5335e6d25774b7d1661f410e07ea9b03806b15ebf78c211c06dbea34046e56ba368092e9266cb30de02295d1248b6cd78758341557ffda57782114aaea082d15fb89dbac33975e13bd4e9a5422346a625a7f99ff21b5d1b94d5a0ec294f3ae739d95574ef1d4475f3c1ca4864751ba6c9215b57ff31e7cbc931486e5b0823659cc76ebb35a004f06ae81d5cb293f43c608ecb63c35294ca7c9b46c93f5d54b5502ee0775d9d884d4dd3839f7f610212530737b493619e06568a1a9433c7ff6d9299d6ac0e4f9df8e1bd84e10543ab04657c3602c923de12ee0a411b7f5077774781f69a4f90dbfa534b5d078552d146f9befd877004f4cac9ccf285f7afde0a6a9d0fe217a43772bead2b1e66d6f8868bc714cb1a9f282c03c1a9b0f758122557565370a214f67f23093f98b2b56967341fc173547da9d3a09a4368c7fda23c18176a29a38f05181eac78d3c5d920cf503bc15cec986765bdf4d44d158f2e00aa8cb7ef98a7cb360b375097cfafbfee030f8f34975c41ee7403f03cb2530f04be05e1a3703680c1363a97b0fe24f55275c0b181a2138f7abfc560bb57edbe0479485d55f25106ab051eadd793411a60a0cbcafa87d3626dbf073dadac8b6cdf9ea0b47841992426141b3f0e1e81f5a27fbe67ca03300e3534c1f5c7f69d40eea76b34d7f532be5b701b3a8f69f4c90acf70272faff4cce0ed0bf6115bbd008c72218ad7438d0cc179b98c28bd568185c918b4d3a5f8680575fd58dc7c590d904c01c1cd01fe12fc6628e2799c0f4e1024958c988b639f0e2632d60145a757f1c4626b70728e9c435331fa06c899df52ad1960de491ce1e77cf8a6e6b38a8d4a1443e26ada978f61af3c100ee59e938b06b4dc89c29c3e85058ca5b137150a2209bf03d2792c507cb956a6f167add523ccda4647d924b28eed4ac5e5f1a145124af39aca694f8c6075e744bba9aac9a057ef5ca49fe56b8577e7b2756c7b9f8749faad93ef275c806e333004287373c1751b19e9dcf9abc489e8b34d599610f2dfbbe44bda4fcb7f8727d2aa6414bfa09c495cab252c792a2622ceab52b950d428f6c79288750f3cdf6b69a4dbee650afeaff4009ab2bb89bb7e62092b8b303e3b2987c5fc4b6b529369843d5801d19cae53d6702a74337f6bb28c6fb1bf3d4019ceaafd5490d818b42a2d190889e6a1537d2c7935469ef78ed1fabf362dbadfbebb16d80fedfc800c388bb039a53cd7bee7fe71602e1f6d2177b2e01696f944d69e7e27f2dcbcd496b5523acbbbaa530f1d10c8faec0f1c61f50fff31a678534ae3fdc287b42ee81caf49045899e4c23b202d63aaa581e0368f1b9cb943acd93386505ea73ae9a0fff65cdcbcf40790cc6bbc64bd2e66f20a8129613a21800143b4588bb70d9ed1763bdb2b901113805e65789c3c6d1ad717d171788a20590a59b28767267a881f68f5f4a42779db8af51868ed05c88a288012d84916d59e78262a767e0eb70381f0c7d946d8ee8851e18af80b9eda5b9949f4002ece68be779a0e297e100f1c3970d59fcb34e5e532210cea83510d63f0bfd11ab015a55f73e1fd16d60db06a82cd9fcf1ce66330e1b4adface6b4c7ca34733ad94c3ccebe662c7efa4834502b4c0071883ff3ee6db8f03b48c3eb68a233bb4b14d20e3ceb3a59a229c7c7f91881481575a5ecf2b203e06d1ea614a61af28d8dc92a67dc57ee7c9c5d9de412c4dcd31523035dd259ce687658a2a223604ac62de1c3b4e2e43fa525cae70040834b97e3cb1d21324f8e920030254d3997ea48c3d44414ba14e6b20ec80dbb281784f9d0bf4859fcea54f31c3c48ef6d3c6326fda4aa4c3a984fd3b6d528d5c69eb531406b947e147893cb97ee804a959e54f48f145f5c534830e22689f5872648f92f201f99f7563b6d2f9ac90e53f0560d5a01314c86a6559ad822afa9320e827bae1b08a29b762fa6370ee5a8f21143d6d652f25b27b8d2f91029dbd16a0a7e69bec8bf4f3a9f24e1e6a10307257634b411d478b571c404a68f8fa9b03a4a686ce061b114ceeae3504c39f0adb3e03cfcc0c25d9532651d22ea389e5859310e9022640182bf35ac98b691f2dd66ca6796b42aba6dab8c493ec43608297bfb2ce9f07a6f2046a9c4f023f185dd6e65af4b9b4008aae2301e5c4820a87e210cce9d15658b4d99636ce9986b0ab7f1615ee72c2da15e4c31ab4e9e42cc22796b8b74631db7773268f9d88919cc5370ff922904d6a506b2f68260810437a5a4af3deef79036ed469cd0d51211e3bf553167fb1feb4a21585bd9039ad0690ca9c34a55a0ed41e1ca1cd0c9142a9af3546a2d3949e22d07ca2d2611abcb9a3344fb153f48311f992e6195e98943479a1f87e9c157c60afc9ee32f8aeda80bde26b0c8ad6e9b5c19faeb9e904674f71e9952150010a1442476a26e4c9b7e3290bbe2fbe726b77ab25369a0eaccdf4f9b2ffa3c79ed07943292d0b9169ca14ad95ebce77af611234ed5122817239ed084fd2167df90dfd1dfab3a5ce8e773334bc0a6a5ee789004c682de4b73d11e24bbd2876347224b4248c47c3d3a0fac44070b5367e3c0209d0015f8ca2329a4be6d7cf134e1eb63b061d04aa1c84716b1cd8852fade59d5124a17f629d9849bac231cf9cc30b51a5da060d5d4bdf52b2fe885a1c6771cd060d46908cde61be74e46f14e960a40165a8d4dafbb2cf62e9194e903b8261d5be095686372f35e68477b3d06ae65a0752297b6c076af89c88178465490c1bfaaa26b44a8d733c00ffb59c996aedf824884e448863338ac23f53931f8d21db80b497be68fadbdab62519bc0647a79b69e362e89d5bd7516eb45b6a5123331926694fdc3a5fda489c7f9a8c350b9cc00256768ca85f47def28979f1153147d3fe3231dd45f445062dbe6eb8eb9a0090b7142a67904c559e9572eb803982be231917c9fbdb484a23de3ada29fd0af91bf4b121a1e5a4a3010293baf79e61ab728901eda64545528e3704734961117f21964774a19d5eb2401b47d4dfb5d1bf1c534706160c0f254974f1781ef303ac235b5bbf4c948beba9390bc4cb531fb43c003380ba20ab33b8b4dd374a4100216104b0b1d186dd0dd3bdb728894694a592489632669ff328eb4149cced037c1d49525305e67a1f6f3e729c69b15429c56eafbb2a9f3a784bcce5d90be46de2ec37832d1b1d6ce51b42c26a209fc45e455cd8e7a8b46cbecd413f4678f587c1069dc93dde34d651c26f739faede97bb9a70aab4f1496b5be0ef957113818361a59cc013820a887d48139e73de400d57237f3a399acac50789543a865a3ee439b81de22cb228b8e713aeaea91536314f03302fff9f6f6b299b720930073aa22dadcaa00abadf5141e9753651d95fbe39f42fbbbcc83ec6dea422123db7e5d2cade3c320b69ac2e6481e77b5916e77dad8fc1f2a14cd355d926ff31990366f006d4d52e3eb70a729ce17ef83a71f1d69cdd8f9c1210f3211289b0a8571da84a1b0c64a4141aa103c464666fc6b2eb860e56bda8415b9595baf93b65dccec89a3cc6742e2fb8b5c1867471cdd9ede7d9d4ec08126e1a05f7d1ba170782d265c9a35c6723566557a43d26d543e9238321dbb99fd8b6260fea1fc81724fd4eca1603778472626cf83b9211354d4d2beb5a0a93e83e0f55029f8c1bdc86595d4304040723173472da316635f8dd1518445ef48bb71089a27a7a27c5fd419908dee657cf0e7129928704c604eb725bfb421bda102fafa1a857a53a865840bd28167eb18d0086933cffa32267e54e41d9912d783e4924e27be3d93f0c69a2b4ab6dedf70927b3e28ebbe713696ed8eba16f7a37de6a214eff7dd0c462a822ef2ebc9d05d24fc1e5544e0fd722b095da2d0cfb39a4234d2a0b6ae64f740eb928cfef1e5cbc456e38dba80bc6ed798b5c73799766102e024e3e1717cedac5f0e61a26c82786be9644953c44a171da0e77dbc9afd3a648ec148bef0fee8127f1a54407505422392f9e7844018f60caa9230d60acd32e246af1c512634cdc64ef183eb70d2a7cf6d9b8d9f0a318651cae2937ef834862a6ed8b1d73cc08a3b519fffa53d1bc1165a79ef4f1e8621e13d5182da34d6a42ecc781c647ee416e95db0e8b0267f4b5c4ffc7a0de820f97dee613f7b012be9d8af3b72d320965acbe4d9c82770647ef1e3293df25c7f4c524d6480205f8ba6c48686e497421b68877d6277ba8b281302324db9f8ddcb701c55c0c69bf13307bbe2c82dfc0c9945d73e08326b7ac5de80fec4251137cb2cfc62e415fff96bb5ae5e1e3ad2683105556eca9fc5bc75c7ab07faade663e2710b4e2940e076fc01a55c4dadb852377d95fc5588298ce126bd5b42fe8a514e99059c8ed3f267b41e37d4c834e944fb181ee5b2af20f5310cfaa45244501620ed067a685166f26d7b7eb24fd6ad60ae3deeaf233c97965dde3597b3dce2e6d6b509f231ded452c9aeefe7e1e1a5457256c3ab6507d21b8d534b35e61acda1d2e9337f3dab6f2620c18a41d49b9f5d7a1befb4f29e5a0860b6715ea9c5f1bd2b9ede2be286a8699c66ca4cbb743459c884a6d906f8eb1c23790946cbaec5892d71c42f32a3b189208d0a8352df5d85de7610d4c04536ada400af2bd8dd062d6413615f7ac1ed1f1b9fb0bbf3328ad21b0c0ca4ac80d726e2b703f6c5c42469b83ba2bf4e765bb0038edbd168cc542bb899d5262b481daf415ee61158efa3f1c597a14aa8971474a48818a172a44f69f91fe9aece53bb15a411ef2b995ccc5791e5427ef421d92778410e6bf7c1d35738f71f02ccdc7b9e3fe19e7f24f8c7eb40ab529c64798aa7b1a06497b719163c61a9ea9b8c4dde8b38e169079c3f7a9e25ec2d29065879064876cdd38c0ace76e834f959b35a281b328db80432dd6bfa00f361853824c22f7829e843591eed02415575089df114fcde2d7c93447d293f93a4d47b4ae6bda334e1da0dc1922f86aba0c970a6b845f6cb6f775f8ac02d017e53662db9cb6511168bab615b1394633c1eec83e1f9296e6ccff11e85f364ab0168df43d6261b98821044743b748cb627d2a3efc2a81dd2b41b6970397b4dc3340144dbf1346af61a7c749bc4786c60716e8fb0f15d1945f30b1a708ea4a0d519d364312d8f857ebeffbebeb65e61a823fc6a7083d5da2c7378d0baef6efbc9db795c64e188647b234631f76bf0a1193742c86ad26a1959c92e911d584aa1e463db3ece12e30de496636a3db91d124acf255272f92854a7b4321f04a559ae2ae44140fe8cb9b69edb039d8ddcc71a346073a6871d7d530adab0f11ea6b678397d142746a610403215a6cbd08c829452832d591eed43fa096f93c9dc9f9277e0d3de66bc440d83f0e0f1c4a8e2a7cf579eb58a59b288d8fd580c129d64d3718001faddd426b51a65690bd6d16cb39c35dd0915242e6ad0490779c3cba447d267b7f9daf42edaad2a5ba09eb7e42ed4427a5369a12ba9cfe103f47a7743392994aa74ed9dffab6a7ff67ae14343179ecfc664547c2e012ec3c62eee3a4fd5155426f0912a0a254ee7043a92a2ea541571b8a70a97595b8085471f7662f1b624e00d90f1ba5779621099ebb12aa01b3afbe848746ce984745fc48037e03c2f1182fa11c89dabeb62d6e85c0ac1a38ccc5f0c55034041fba3600cb042792dfbbb1ed1509d7d76ae5e8e3460974616d3f8287a5717e9f154da6d563a0d387fb850489f5b9af138551d5aa7183a9a2511788cd039b49f53f4262ff0003622a8de9198d997fc527a3cd4547618d0e16a4cb722adf178cdc2ad1fb6451806c572e5e270520e9dcda3b453f240f1a1a52562db5dc9a2fb81c58f0efa5c0c8869fc3bf8d28e40c48634a5e7b0313be076ebc356e336fd3a27779df08f45bf68e3bb167a1a333d0ee4fa7e5575ec358456b446ad10551f749344737fdc3e620f1025d16f60584f01da47e386b5e5b9baf870d25f923e8aeec915e82201867beebabd70706c6e30c71c0d88378f72a0bf034672d9c41d5eeccabc9f6e833295a0b264104b2d5c4aae12dd10add335b44f18a4b971fe2a17d7ea55b1edc259c12820c7b79cfcc53873839a0c9675f20ba4f5a69eb956a646a462a0f753183aa85e62bb407c1c523fa5bf3f0e98dfe7956a28b5c1ff09d8a1b5046f86c8abb49c87c4bec446b3b281c8b62d54278d41ac96b8bab300ff42a7aa53f318e260bc4941e39a69d4c3e0d4affc58b84e98cf54320befda0841d5731920056f5f501ba6400575d91af6a47921d5206232f94a2ab2f1f2bedeae72613daa90acb033514b9b9b4a143d5efee9fbc542fd4807ea072f2439b0fa819ce9f2a57ad8d994c8430a602a2b47ee6cb614daa3e28d6daad56d046282e26fb574a9afd1124fd34e7537df1c944e219b4d25e24a0ceba6a99381d46519e4abcc84eb4d759b897f4160e415730d681c2aaf8560f7e198ff21782cafa9444a9d8458f553584def69853aad70e0102daa66befdfdf3bc27e4c330c09226da1cb8ecacda9204d9324bc48d1e11e14f1622154c70706a1e1122c0673bf810433e888b740f7610a896e3ebe675413ee1e3481f13f7802007e78131ecb88cb7e64af47bae24d96f5384a6577b3a3758c1de9c658ee6438298ae9ad9c322d2a73bd6ccbe6baa1d58572a9951cfc005682cfd6ddd8f62383338def19e19c928ef06630a138eadd6c59e5ceb002e6b9967d82b25639f90a6a99144d0b9cd6acf4a4650c57831341d32f5235d2b15ae3e38bed1508992e9f5b2673e3b443d1ec6482d25a9549d21f1d06b479e72afbfedcd6229fcf117cb1df72d7adf959f8ef334492f2f7d7700d988033b7f68dd4556c3ee6a659c48041a2949c3883135e0d4695dea455f03132a81c43bab34a03cee804174aee0746926d13210077393428630d33c97f2ae1d95f8c2f0cbc49c7c652bdf4276a1b30e24eb95ca7a2b63146a5ef715da7a730fa82b431237df22b24de83a426b3b227c7c2bc73ac0dec92374b3e707ab9b7dbcdd710630a6d065b1437d0619cc30a4434aeed38d96a68b26e3d9422765cdcba95afe538d15c9046fb0bb5f20381ef29ac3f7cc8eaae1a22e03487816a930d0fd7adb20109de4aadf0fe49e6f091a18abb438b6a49a70761eca8710857038e07fbb21a17f27ef5dbeadda8671ee3a935d03f8d1669955829d5ad53c982680eed52c514142d9652540fcd0c4f30c1631ee56d2f8baf2ac467d94b7e442ad6f83e8148c78afabc833fbbf6d42f45c9aa327cbd4ffdc0d0d6a4e7f9c9d8c0a1f83a6cdfe74729ad59e5378de220d6fa3171a8adb714767b4ffd419415df0b49da761982621139cec2010920fa86c65c204314ccf13b6db73731719dfb56a037a1e43203a46b7287ee41ed9a395311873d450c46d35c9907eb4befde8416d25ae8c6d1a8d92a521b77e27bd75e7d630d04aa60374b181a6771113c467564561d8b02bc1279fddb78de066b567fe17e41ab24d047cc72f2448397924e012504204f57e066c15faf83d602dd83ccf1197f8090f431a8644f153dab3cabe43852942e0b1e2af0947cb0266e38fc600cb71f4e7931b9aa7d55b768ac269eb3ced95a1d65ea1997557098bcef4b8d5dad1cf5fa9798e43915e187c441d7bfe7717ade111484bed2918a9d4e2fd23ab4981b11d7bfb209c12e07a1bae71e0eb15165d88fbe2b1f99641601cf6c8fec1437dd93772a05138b55f4ddc6e35bf3c856254e116f36a4a2be72f2787e934f45a0169083aa69a6959daaa7145925e12c065760f7e8cc693e465dcaa24ead6df24fe9179219fa9fccb7ef928d05ca5ccf1237b2c83e335eb4809369e9bc278c7ac38cf43303ff51b49ab22eac9c1e70c67ce675388e3892e2399901331b990ec592b4fac574ccc895afa3a58d41e3ad37fb2192609091de7e4a18f1afebcd52a88089d1d45b9e802e8e90aa54062a5dcdb57ca2b4330fddaaba165692aeb473209bbfb846e12606d7c2dedf59377683fb76e17fe448a64f9fc1da552bd0392eb37c695e0a67db08263ec550f8dc306f1a78c77df4067eb602a60eb9c02788661e6a4ed5cb8544c7aaea50d17ac9c873c1aa5e05eb87410aa553286d64e567d85eec59f481c8dc1cc99842dcfad5d07fa824bcbf76e0a85bc8771f0dcc802b490fc0de7274e3495feb4cea31610f8824d21855b180ef676f1c8d55249ed78aef62187ece6a3f9e87e4e3c4bd048e0f884ed03b9143fe3276a99bf7540e979a163e674aceca6331c3b0ee0a7bd4061cc4c1daf87ce74865c0da8d79b59fd53e8d916afc250d4f333d84f797e94a2c25d518f8d1b37e8b0890ea5518f6d6604990161efffab49e1b7ab4d8bc9b3661bda945c557392eccea4dd2deeab4c0e47f373791e8440f1dd236a2420a24d12c445c91d1732789c63da863abe36e7e5d5e92859c2d204a7b336c2c9b8b6226a4d7fea42332ef590faec127a0cd1dbaa9152300dd8b8780315dc550d6c61de2eb6689fbd8602bd469246bd80009f23c867035224ba9bb519607d7318798446ec57e632e55a66d91e77785975dc968d18b0825f1a4285d46600f323a7c3a218dc89adf2900b4da6b47b0ff3593590a35e1c5232c5f1a762538f3fd138554f75ad2261f89c03fe1dcb13fbde552297d04040c1f45daf8eae15a5dc82f4e2f25e3f4caced9aba6fa6ec5ffd2bc133ba1145945c1bc225dfcc223e490a6d2d36d7444daf2329c95445397dd90f2f2ca262b5140b381ece195f1e7504f03ee7c75656e2f22446db67c412e00aaaadd4d5ecc266ebb2f19d8b6b55303a518f735517f56ad4d34bf35930f119d3a42b8e716d354f81c80114da660a72e42b56728d06183487320aee299c8b980f881a4810d4a1ddad268559c35fef7f6f0b6c9d2570ba68289094351dc5d1b6a7abed75e7ae6def748b7c9bddeb1743b9e317520dce297d9f19ca67f0715d916b9c8eb15953df2bfa4967f012240419cf45f372ba6afea13a92033ab7a8b68c69c24efe47527bfe38e7b0358eb5cea5e04778982fd2483e984c38f647a9f541e473d83807bdbaae8e41236c09517dc8efddb6ae5798352ac0e96af111a47f269e7198072af7f6f3bb202a66f902bec45e8131a33faaca7f19120660da084d900444c2492bb684832996693c4f8c8959b8b709f5826787f24c2f05931a6c0a74c57ee8c1f23a5a7291f94a5187b8773efad0e61509ade21708a239474b04583c1cf00a34a25b746b90a4d2b4520a21efa97ec7d924a33816504d46d34a32a0e6f95cdd754e80245b759486eafdcfaa9725c3cc6d9f6017debc4d7eba7c457fb0bad43c57cd7560461733b8d5a150d503d4306e472fc71b635f86be2dbd66a8982992a6707684d00d514d7c011c1f4f96585192b5e2d04c05f98bc16123735295ff31f5cade865702c8b01429cc971ee16f296537694237ca00697430e62ac600ebbb43af1e10540a6bf06f3d50aad5cae10823033dde4fb44ba1c31084c9f2efe0bb00368371d655078e8faa8947f0d37a48ba9058edaf764aa4bedeeba5f88685c08bd79cd1bde5b3dfefc6dd0a2153878c6dd13e1d1994012966788c0000b1eb7da87eedea42bafa45e45b95ac23af87ec5f59109510917d1a08a769b91df73379f90d5cc8e8301c0244dbb5e93113de02a10535a80dd2497ef87d4750216ac248959f10577747ff8a665788898bcd68064fc22827cb0c530b80f4401d42ba3cba821d08c706bbc2ccc51d76673db57cfeeef7c3e050c035ae16c4011547fc08e66009b6f28cca7a2b586707c9571dafb37e5f2663b04c175605a57e6a74ef97ce4af07e9db8266fb46d7a38c7609785c0c5bdf8b3ec77d166f3444652cda04741459689d7648c432554e667f15c01e898c7a0b1115aff7ba6f5ad5f17e71e0fecdf5d325f34ac65161f6a35c99a58e1005b02fecf66e4883cb07bf6f463ef16e8e3508c9db6898cf4b8641fac480c390a2813cf3793651643beec369b2aed0cd71f9b13511ccf6e6fb502707e0c312dd98c56b7c525e2202e854fb45b70fd13dde558f1b78b404563075dd61065c5b279aebc82e3131e616a2fcf39a227af4ae89999cfdafe78f5549830bcdff3fe883e71965e0fc18009b02d92ed9328b4f0bea9d67b8788445d762766a3607449feb2d10187601f5462bcef32f068eef2b326d2ba4f4dea68002d6b5aa64c9fee16eee976da1fc89399e89ef55a282b1bfb129bc66b410a748f924cf5fbdddce9c9cc117522d1571c58bc3d6f2208e62d8c0ca79b9eed5913d198e364491fc9937db7cb940047cbf7341251aa4ba3f698345057b18eb825b0293577809dacd5cdf0d4e80bc3a0847566d29a7208d008126980547a38622cb5c2b4332ac8c8a1f4bc44c5a0e12ebc3b22e45aa04d9c245f99d183cabcc077d73b51d9f5efe6df05eec30e356166c96a7b3610209dcb0d9f17f30a381232c3890123f7c4832d22024c43b69389f5dede1ecb0eb2fb11a8d50f6dc88c9da63dbe68ac842228df4a3d92a79d363486696642bcc63a532f4d7c9ecceccc9179d501c3a9024e9afd1736c2336ff2aff74a57a5008a45269d26a1dd205b15bfc86b6620ec56568ab8cb41972f3d52a93b9bee16c3cdb951a4e76e272979f2b57823cc98db9a58689a2fa8ddbc86c4e8342259c1411c03ff02e7710bef547d8986b2e9b03170782cdb6efdc6cc4deffc236f31b0109af366f595b0236dc5c1587481c6caaefef6d25964f48a213924c85499543e8f3ae1572072b76eaebca216c2ce56344df98c6e62a70e7111380c88155a24cc26640e3414a6bd61285dee39562d6499bc951f0fb0dc1b07529625daca6446e14357ec82c5e8a139ea7f8a8e92af52d18493bc55b08e60b3b99586eb6d06aba749f4d10a5b6a57a226ae124bc7a5a6f1f1163145d09ec10909885961d2da00984770ba5a1c6d98a7861291ce032c500335e715a400db798ab7b93806299e3dd9e183823aeb98ab12cad9c643afc66e3ffc5b8e3f049dbdcf99bbdc4e52c607576aa84695a637f531f4dfad3ce9c59744ddece09bd05553f4b2d0dde692698f466dbf8892bca8e83062f20d4a8a964b036f1ab3bb62ba881fde7b1b0ca76898b3d672a671dde9e49a4ce6525c26e2cdce2a86606e6e40f97804464e4ba1fcd3a67308c7e197d9db2da6b8c4bfb06658977044231fa5e3adec80656f50a9cb28619ba812364d42d77c3d8eab5350facfed4489bdc9c3e2e8ed6801634303c314134b3a0f07ba49339c6b152769460be44b3540e69f1e96f1315c5f0b9ce112bef3cf1c2183600f9b72b30e6464b76ec519a58a973946a3e157202cdcbac4fbbbe1350e102059e79d91a952533dab96cb3bb6c3a3d89203103c3419e6f4fffe43ff879a2e4cbd498b094e9fc7fa8ce64e587d90324c92446f90d6e99c438cc1b2a9327863b4453b1f35dbd4eceea04a45c45f5a35618bf351d40688bfeba5be7d5fd44e9ac58a49040bbb5369c100dcd2d183c508439f0eb7bbecef740dbd1cf97eb3858cdc17f3efadf83adb63bb3cdc62c7ffcd8bf94e2fecb3ad2f0e923ac115e407ced403b9951bea28ce709c8721dc1acad1ab65faf8ec90286a9cec553ed592cf42f53602dfd7f182937c5032f0c89f1ebbe247862a6f407582183c41bc4185c5a5acd95f6c20da7109d29905050534af53317d93aaf56910a3bb147f246783389dc60c305073da2ed2cf37e26ab76800a9a1422e447254c07de165437ecffd1df647003646be60ee1e3a4e3d25c4cca050c7dfbd4bc562525cbfa7a2abfc2dc5077d2a67dc9eeaa40133d4bc60c8095a86fd78977a3197be5d0d1ac3ff0dd47bcdcb1c5c09f77eec59774c00bf43d173c02adb5e99b9e331d4294760f864b6dfd0a67706d92189a27185265e2c1c35c19a69b037c9e0e32798dd6754b58efba0ef4ffc9e12eabbe17e9ee1dd77823916ed36bc43b0250708d2043e063c0a535524b0cfdf8ad1d7cb1b84df0baff3970453557ee65ee12615eabc4713d71c91ee3e7bcf976724867639309d4f7570538109ba364ada2fe570b4bbf079754520b00163a2cdb066e5153a20c53dfdcd0ce49f05c3104ed9868aaac4c8d0ceeb7d00e164162439fe96d00796379533ed7b133f05038888700124434a7942e2c7e287e6d971b48f369f305747f507d399ebeb9f129831ce63eeeca3d582ca26cd6f2f920709b0c70dd6d3213d844d48cabd002b4e9425145de01f2c07aa6062ee902776acba1bc0e20b44d18b5a9a48849a8a8908e4fe27c5a0428a7881e18e1e3e73a63fa09351ce810cc783b8609c03c6aac60e7c9e51880411f0a9c810e2ed6467aff65e67b6e65ac5833a3d3c23d27ee62a9313e52d0e610e85fc954c3f6bcc649af7d470cb86f5be4abd8e7042fe3935c9fefbe3159b4bc5ca24193d0babe56cafe4f950dceb9695a9a60386784ca2efb5a25581afb1fb4cddcbf33e717ae04a7d279925707267923653976938b9d017ed18604bbca3cedfcd29b6c0dea01438e70049c3959a3963bc88fada78067bbda31befb5e8c156cba9cb9f34fc8ab7ad5c3e753759022f8bad0e1ebd0f3465b17025644fd9a0b5f479ef72d4bf048ece5ade030febae9b26b242d54378f9a58d1a6200b01c99458049db5f0812d043e8431e758d6e7e11abd092ef3d90df8fb81259559b757f30b44af76c0536ed18d9dab5b8aea3ceedea78af83e3f454ba402babb3ff0598f48116d1254971820d42e56d2cb107bf6cde55abc5dc1725e308688829cbfb6d1279f6e58c057cf13f8ec66317eac040245e6bbe64f02eaba986d44b910aa500133275fc14284c220f6d525c165a98e46c70980b6cb270ec81ed548037c69fd4a4b8a59bff472f7613a6dd794978fb1ef5ac51bea680f206501907d35470666d92c9b34475a4bdfd78caa2fd71a91fe4b8bca7ec1e466489bfd50544e8a30f48f0bd29ede163316ad62f673b575b0e7f80c6ee512dc6153c2a7c0ec26eaf0290dcdc4eb9bf82c8a19e16e1b348967adccd1a40cc080162a4478fde2de0dc87bc33f1f6c14e1152d0d3a4cfcfe31f08e809f1cc25b7b71ad76c123daa614ccd92d46b542af233eb0bdda8320dbba6e5a3248cb0b12f389ec612beb94effd3b7dc867d216a8f369a14d01316eee9b175ce4c32cd2ad43a30ce295c1b24c2df599991cb214d41e611a635c6378360fd45fc6eb1bce1e1896468382ada13e49e57d53a422350fbeee5d6df1052284ce4a935d203f20d1cfb37bc7280efa2dfee20b7525210e36f2ec84d2b8d2fba05ef07443421abd9dc57d6050be1a3ee7521e40b320bb660def272d0a2eabc8754df89c6a0440488296390bfa0eff389fc344848da6b883de313a532239247251bbbc8bf603432a2b99a4de6ea183c47d1150de32aad2e319a0adcc8b517f59e441a8732c5c328e6ba48ad6db68839d23ad0e11522b4aa0fbb3d671ef5c7747e21ddfdbdde186cafcbdf9ccd3f48d3bab3488d8eaa139a0d198282232fc42e5d07af4825795c1dfd360028f8b7cd6147c9d41373fbaa06e11cc0978feffac4fea38d067348fe81d65256ec1c28e2f2d506cc3970235607cae88c46db439641732dae33b366c4d55c7541dc6958dc7ce2cd17c71ff92b208b53a2c9c5ea9da9bb9f8916218947f5fa9fb410dbb03761ce6af3f477254a69c3dbeb9ba783b6d7448502f191fd0e7d55a52cd5defcf27924541310dc47238def9178752edcf56e40346eb87b6729cfaad17aa4a076cb3f2a2a6dafcd69438279dc3a98379e3f68ce0298452dee29661273f06b9881a769c53aeda321ea96f385911ed973d2ba8dc7f62bd9bb9a6fb568c138ea08f46757576598df4ab5c6f61770628659d39fc9ed29be28d8d1d7d4ed4042e0e8101ee3bcfe0cd9a95595c62608811cb4a97c5115b5e73e3340955358b220cbc09ee1b897fc808d03882f071f7ccc74379f866fec2677706b16aa6a87a991f12cf5932e7c819f2bce3028e4ce9dfd49d3aa895feb62c671a2747788fb801451492b4f88863c228827e686818142491fa3c8fd9c38d26323a606ba12eed1d8891f63860d0f884d1f0c51462d148a3a54109d6d4e3af70fe50801fb34388ff4168e44bb999f736639af702635ee9a2e167fd6595490d5702b3f0a27d1021d3e1d1a40b0bbe928cb983958d0ab14862ebbb9859b1d9c3bb3ca2df6f13d18302e627cadf2ccf292e30aab78a31799b3c0469aef5166db683f740d8b13503b8ad6b1813a3bcef1963ff72dedfc2fd814bc94bae21b9b4310026cfda5354bad095f65a191acaaa8eb5fc815cf72dd8d54877646fdbb86faf6ebb443273f0c8fe02783187c3408f30a8d67fe43508fffcbeab20368a924a7be4c645b32774f0a791264496eb887d320923f29403d630af79ccdc43676f94268ff83a9da1fdacb4e19c9ae245a5c9707e29458de01c02907807e2deeff5148af7b6668110dcb94a56aaedf1fea0106faca5d7ebc7f47bd4485c63d122d3ebca1bdf9e86a8920a5a7d79a2c496653ed8aa673d3b833e83505d7f387ae01c22f465a5548a7ab0b3475b93c66b91e4077569d2c93394bb7169928615bf2161db9551b997adf78b9686c159851266c34f46cd83ef0ef9b4de9495dc867ee39d756787f1bdaa6d820b77f4cbc68cf26ed062d24d7d6c01394e913b330d589978b7bf899b692f6a4620107034310a7bfcb4d478e33e71f210ca6e402b03e6fc1ee9a67af1d3e4eeb2bd90608d4cfa645c639569084da40548b5f4282fe9b12e280d91ed7b83c93cb90df7af533e38c6caa6b5f1e18adcfc030f302c932a54dc25bcde86c25fdacfa8e72150cf5045a88e82852b18bf5c5f6a0dab371cb4e2375ca6cfc392d36265098d5d53ec13e51e7423c0c3947cf5ccce790fa5ff9ab2f5c7d38924de04310e8f01cc8ac02c6aa5b4919c41fcda5ea14960f1e8deef7e6cc08a2d644380ef631cf5609542e2adc263f550a57df87e6a5c5d7aad279a0a049b027d2bc20bb78b663e047a29d1eba2029bb2089f5f7c244162495a2f38b67c4b45c015458cfff72b1fdac1c1703a3038be18678b5f29efe557763a9eb09b40f797d21e05a16a0bd905476742180f5b2d55422d1a6542e5c28facb2673d349693e5e5a6ea59f8d0a1262921c8b90420f5e407c6222c8bf2dec8ee2e152d0465b15195ed8ba591cc424215e6588841c5ce4e95b8cdaed9be1712f21fc7007319d3b822fe85b1517b26be77b07a67ca13d8cc87e45ead68408d73bb6d6c802eef2bbab396d312574f171b216eaf5e3d04817e0eeb3724f0a43be70d692c7d5fcbf370c2712a5ae8bfd87845ca2d85e877c5fdcac708fc54f8796ab17e57e69319202ed62d18da08eee37883167290f4f6b8d09d8fbae76bb7876b7821eaf628504f7bc8da3f85cf503cb1fdc63ab4d788fe876bae8fbfc73f40ca934c3c96b42ede6c604cfd44b6fad2b911476936dfdf769fe424e3af1b49bbdccac11312fbd19028dba8a7afd0b32418ed17087d4037ac03b586119d8a2702c0c6c5330e5e3fe16cb9b8bbe62b26eb5e5ddf4918b07e7b6a2b167353057fe48ef83dc1e544eb899209c7eaba6bc57d51447841a32b15a2006d579266fba9795f946cd09a0e688cff333bbf432e65ef307dcc65cdf1f75a3d0a67c7ade0fdbd44f4b8ea018a769c977ee2f6a2585c06636960c518a7364dabef4df601ac26c7bac175bb54316134eb0c25e814e882546101a9194043435d851a86bb9e0ec798d09a8919dbe0180ce349eb82f7ffb60965ca2855338ca39a1c254862268b007c3617c1ee4aa25c5f88a983845fa5ceefcdc892e0d8d14c77cd1d55638a67d932ca68c6f39cdba3e3ae2157105a2a82235aad22f0bb7ca7c2c6f23eaae72fb69a90bf2dc3e6a8ebb0bc84eec10e1aaa97e8d116ba1df4d577496988d331127198a51e5d6956830fc40bbdd10f512987bb4d01957b18e0710ebb78ecaf40005de9cc8e66a63f90b3d5fbf4336e674b68c86399c2be1c30c707acee673d8c33d3b94325caec48d4e9b6c11a3beb5983e3f50db670c486874377bbd55adf257950d7072b5800c8a505e893ed54f5605474d447d0ff9aafb49cead0eccc057cdfee2356fbb78ffbfa07f0c603ac7de9ca22c1a442e657f2f64348cc4289b90f0033486a9341b9e10e53424f8da452604cecbdc903ed60c3419725ec49670289e8f5ffefbc3bc364ef3d9edfc47e2e87a1bea84768faba17ab973bb010f366404b3b727e09f9b799d8d0d07386fb8a131a1c3a0086a80f42fb0b8bc78d404d3ec8279c33335ef1bb342d1bbc95760caedd257eefdfa88b564cfdf727b48a00fa435d780a2e0eab289db25892a2c957204ae4b2c34c736275fe876280b9f5092e9a06735e9c9b63021e71437b437add37d0421944838d5a2d7be0e11727bbfe1af8bf69e40f67538970c4f3c187e97e02e8d0c9a893e86256a723c60be423410ece5223a9feeda8efb95e0ea07b64aa2dccbfeae4e33489677eed306e31fce5244c1ba0c4f9f3093759fa2dbd48d1f73b248c1728b4034e30c3a4c7a7a6af21479597f896c5588d80295c8a427b92485e9c72348f0d876b51c3f0b28d0e23c474e6da62aff06e00059f917f8b99ce926e78a401dfdfaabef3419d10a9fff5ee21951231d102b2d69b102809b5746135c717706ff9dbfd602ae86e7cb9d191f3a4fe5994afa651f26632a7552a69f052087f299c6d2118d034db58fd58ef7c04accb43f87978011332f369596ecba20aafa594d7c2a72fba9cb2bad7cb023d25b4eb0e33f7075aacb077ad733a5b55e4bc2f6362af06ab9b04eadf5d66930711e8f8696477fb4b53fd16cb0e5a40a76692d88256b3d2cf7b62c1186ca5da5b3881cd5c845249f7c86736db2b9fd30077085aef345c7e8df225530b072d88888b5c6c8419a7f1cabd9e8035d51ee3e995c13fd25d28361b522dad23b8b9f1e91ffc3c147c225a6bcbc8703ca4877f29b9d9c6ee477d93aac7f202f5fa7d49a42ee587832d5b5448b8728c283e23777febb5df35c539ab75f8e16422c4883e1f72391326146867880299bc4894d97b39fd5d39f8382edbc1cbfebc2b3354e4f3b34e4a5d0d14a2a605eb5e2a0f9a11fdcdc34721940b1b3e7479d27b9f24fa900a9bafaf13e0f2c0d44532ba3e3a6db3170dbac2850453b692f6c40f36a47566061d00dd1e8fc033642e095ca2a7b9f03ec70eb39329ca4a01a6067fb13932b6854c3ae31afba2462f8ef0a59d21917c43ecf7ebbc5a73b0c3a0bb49e8cde124448da19a2b67952beb34b329a1dcd6d1c97ff8a4230980d780de59a880c52b7ee0a68c32b3588b568fd85cd6f10b09078b79c0b07d2c65ab8e241c233cafd7428d629f6165a6409cc0367d4b39b42112584ff270846d9211f1a9d4a8cb3ee8667efb7e005f51ad3f887b407d8c855699236d302c5f9614f630a3e97364405d48ba0634ca024e42ebe8da36e72472cf7fd61debe75a9382c501a0863b354b3863089e51de8fd1092ff6205c082781d76b3472d9ad4c70f6756e3bef19c945d82aaa8d42ee06054ee7cd5929933a528fcf3e7cfad9661fe0de0a75a46fec1819dfaa700a9c6f43adcfbb58a4d9e791bce9bf5282167fcfc2f1f9ef6c3fbd72aa163ed186c830b6d4e5e3e5555846b20fadcb993780f740deb10e07f1c027a834c26c6f47f6865c3109a1e5ee1e2cfa3639ad0b6a096da32dc2360d3a5f2cc6fdf8ea7c44aedd1613c75803a7a703f335dfc39f375434996b038809d2c69c8bd95f4c0f296486606c0c065377856fac45f311244692db28e85c39790e3e439d1845e4a06101a6f58b18183f68d555d83362f5f7e6f158b43660eda2c387d72117f9c81d47f1ae4621cf742344a0fbc7bba97053a50c5ff9bb97644b60dde63e92916fadc6a5a24bacefae10dc20fc56790c49fb1b33606be01724413be83476e2f93a0d7fdc62964c7429b449b64edf30e07f45b68c6e4b285738017a350ce21b91797a62c622d3a301d112f25f15bf44880bd65b8228ca43c271abb4d274036aef16be6cad4bce3d09c7aa22a07da82f1b1f9fb1ebce9df0402c98908442cf0f4c5965a310225052a27288a6c27849abf7bc51007941ffd671b5567ae43a7ec3413056c19c215f8f33e88ee9b5c1939b65416cca8cec42a5eeb53d4eee6b4c29a25708bafafb562914e63bff48046b307bfbd0d2614741ea7ec33070a6c0fac46932dd938f38b2096d30a3d2c070850759a123c99dc748dd85af66c359807717b394515b3c91498ca60663dc953054df6ac6f5235876a671e110ebde8b4e66fb2954905087e778ab48360821f6ee3e81a4481b4640b6bfa67f7974f8ab9b3c2f20ac5b61e07cd09000b6c7c3dca145fbe89d98f4e94651e235c9d5e4aea51d27a8e3b2ef672d582c59ba180eb39339e90587c50bc9cf67c75f29f7bff87e74aa6e0432cbb372ee185e4903163772dde641f5bb6a657107d84c56d619387d8c5f53d5aaa3c3ae21a8778156ed3d12b0e962be1d839c8663127d47c462554015338eb6c9e04c60054847261d164d663fedeab04fe1660017219390cfad0c82001df990bc57f1801a17d6335e81502ce53e0d20ad1fee9a68c3ada3b9eb2a9022e934fde32c3b9a49fe2c2516b0d80df6eaaf42a0b17d9dc72922058dffb2868b92cb8523a976ed8040bd0b9366ec3cb8163fbfadabe4b1bedefbba13bff8efcbbbbccd429099904127159a2bbebb1e0b74dbd885954d44aa7d46ddee5caf35a9a62d11c64f07e5cffe96949b0aa3fa817ff1227afca22cc376bf5da0cbe49ffc5e29d22792077dab44672bc36f060136dabb717ee2612f8f88cc17b4978ad698c8c2b5ad26c03583e8dfc88e36a753b8f79a00fc4be688e9a1645801a2913622b42c0a98e3b63afff0a8b62da406af1f36a9932cf6b6100a0708327c5f8791a4d9577579d53af0cdc2234a3904c1087508dcc02468ce7d960230b1f704be176c50f79d0e37b17cb83a90d54de38cac8e8bff4f17375773d2c83e3d4a32e7016d8a91b6c3e6059ce7ed8f5773d3a4933a0e2388e7276e6ee161d5d5e97552ec25100d74c2946183f4b5cf4258df55e90a11576b38888190154d99ecd6dc014214196cee01d8b752c9047cf420a7426409f6f1a7535fa00afc30d968747da56587344a7f4d65834a075da5f0aadd28256a8a98c5620e18b64d3d501e32ad8194ed4f9cb4b3ee6e6759039c653f678067f695559515967e4251aa28af1ccad8cf9d0f7c0e396379412be0b7a3b6e2c6ff28d989667a24dbe38f8d29e66c619ce4a17f6af515347bebe480d653ac997c063466d76f1c4cb1a33a02c7e6e71f643dfecb995652778b7f48eb9548652deccf5c033702f5401175c0d8d3792496505f97a8e1048458d020ed90416559d04e5ea0786a6a34a842263f65c50f0795cfeaadc850a63aea4a5bc8a2724747a4753fdc6d607682d6d1b4caec7987381af5b8f10fecdc583e9b2e101bed7ff8ae54ccb741ebbf651ae70a6a79701f206b3712a458b9cf4c3d3db7f9cd1f7f010214ea74b03d0662ab55642b679e5b16abc6a509fce64579c219e9b8aebe7b35240a4b9e148d7754be2dffa555afefe029847a86558c2ccdc606244abad261e3fc00957c53f30cf8a6f8071ef4024dafe5afc1a2f97607c5a0e55845faf6d1354b40fb97297c961d0e9a273f271594b2e1a6da8fd234d8ad9c84b2b40023b60898f67f8b53da9dc998271147fbc3f8c345d643fd7538b793336338f929ceaffe72c38f2f705507458036fccaac426345b617d838942d4501fe1de046e01c1b40e4da587678ccac8501fa93d8263272157d7cc0a0d7b098c2066368ae3bfe7c49437a6529794573f959789bfd8a63bb4c9957293fae0ddf6f234fe06f3cc413a5b8158662e9b4420002cb5121f10af7d952ddca6c0a253a5b9274328289f229fa24b4d28786e7e849b98308434357131bcdab070075bc28dd5d75fbec5acb10f5f213ffb730ca2b1717e4ec5d8934b0932fc5b12d2bbec9b4b3d4f43b65cd6882a9399406a087bf813b0ad7c3e33add2e9234a097fc91a1cd19cc08e1b78fdabbf52ba3c26b1f4490d87ca466152438cd32be8a4562ba2a736e460b540f8e5ca95bd6124877fd21b63169e5f703ea2a831329bf525fa9156ca650419eed04c42743e62e43bdc1f5b5e4f6d213b75db62c7abb1503156c2d00cb420a96e4a6c9d14e4ac8a2c062c4810a9a3874123694b8d4b97a4255bbb68cf56a3cf0397d9ffd579212c58c92aff78d8742a6a688818ed39a1c0b9e755468328e11bef8647de97026f812612ba78cfef13179388f20496bd7da379da7d6ef4c2f51c1ecd705592e9adb219365a62ab79f22c32e2d4a24fa9ac4bb052bf50f203da9c2d61c3ac7e5550d54d898b320f99aedc55bd52206f92495a6350afa3ee5c32802b9c7f2e8d94cde422522d1cef7ab3a30ac25c689b266dd6dc4e97794093fca5ef3a5015406271733bd1009da935b2ad50c4d05286b04606a319b2df3a4d239e76890c48ab280097e528044b9b9e1522bad2d7321d9f1735c84314dbcd3077cdca99b121cd5f0c5509e1d97522ab9111884a809c0766dba4fa9bf9d16b76f5cc2348ceace20adc9f9c7a3fbe5b59e629f1a7a0fb1b92b1fcb7512b1e2f70954850913c7469ba19e6e160395c07638203421abd9bd3005a6ff8041e636a357d8c061f3ff6811cb96547d193e223f56d5a929212ab3a4c45a7504d0fe8c42cb2d83cf9f469a7764a467d9dcac628ef8f2cf8a3d28371ca1760037d9c8b95abbd8c325420c09397630c5baed9e760209101587e29de80d7299414a07ff7eac0ad144d8577e9a0eba368226969ee0b553531225068f737eff55fba0e35dc58ebf6dfd75d03cd0034583245151209c32da27243006dc0620f6384a7a1ea7ff26911c63b81f0f0d04dee5728258d2c8a8a700ccb1084f8dbfe480e6827ced89ba26aadf958c7436382a8993b80e76d94a27b66fa5098f4d22ff0385f5cfdb567e77052b252c901d687b08f9d63aec07ba96e5f4e7d26590bdacfe1a7792412a235f2fc82649d92c4221d171ad167252cbbc5b3b8485bffc07a887f45147d54cffa18e57fa5380cb08a9bc63f399e4ddd66944e5329eba1cf488e9d5a7cca87a7541f573699f855a51a32a78f5008444b9792ced1d168b6ed578b880037930f39d6478ba088b4f78b1d24b83ed93a516455eae10e3984527e584ee845ac6b4beec2b431c3478bae45bfdc721b459ed0d365f6b8bd16588ede62c2d19c6e8407a5051abb0e7ab010d20977394ec549f1714c179c84a4ffb0aabf1fef67236ca026314b01e1e5b3f7b5a55098d272f2fd3ca90429a9c7cd01f0ee0574d9c54845a40611ba5861bbaaa416f4ced814b1a4508f753a44ceebf76530056b6fad30f73ba60eb93596adf0a86a997592d5e38e1e7d5d6f0ed9e13013e2e4b8eb75b63bf364834d6d132cd195fb798e899f76b1b8e82c8a427db09b0ea582ed6b078db90460cb48d286dd8beac7310e7f51736a6b7ff0f6ee3625340f8420178439550c1699cb86cf88cde7465d2962d1dfb514d509000688f778d2fe701613dcb9176cc9682efe2b7d8f68de9ce431440c7dee1a8a9a52568faa373b175b7e2efff94eee7cbbac5e4da80d97f5ce4e255075ca6c8a21be2ac51a768040151b06d5800a354d2d002712e4261fc443a64bc80c7e24b7ed0a07db5ddc962b24fe86ddfc5900483bd0d9067a64e3ede6ef72346f56f98532a2c9b96f87bb34bcccd896ef44ac4cddc42e9b64ebf3f092377e4d5220fbf18f50e6422e14f0bd72080cddd515395e80efabe1897ba501a4c2ea60e37d8f931bf8052c63c19f0a1783fb6665d9307d4ba2ad4f3442c1b0cf02c7bcac915a53dd9f44bd23c837cc95004859df224d084e1dd0828873a81b5d64d3dabd3b476ef5319d70ad1af75df98296c5c78b85e560e11ee1ae2d891456ec7107249446191494e899232838b8c32b2e1f4228e4c796ac5cb5359da601975c779b5187e93540542d7f3ea16d62f29f06a7b23e80192135596ecf353a616c2db25bc50d1febcf4f1167cfbf9e0fd4fc54080748afccc10318afe856fb6eef19c7f0541106aa36deed797acbf6f740cfe0efcddecec67a70232c08aec35b369b838c67a5364dd6138013140bb59db1ebe9f4ef65e4e26c766839f09fcc9a97abd3833d87ca915b7dc214ff4246324bd077365d6aabf7b05ca9391f1f18478c4ac953872727ac626964fc4cd2f35ee81852514a2355404ee2be372a0b3384e264d6911577a5d3a7408c2ae9107eebdded0938651bd761fa73de359c4ef15d9b26dc2b4629afdbb4eadd05071f1b1a445d3d1d64a60aff9799da5788dfa768993cdac74da85d87a86bb7a5d06620f0c246b577880947def05b6f023d32b2953498e62a6180013306c1fc7369dc30a3880379d9ce8ad5a1bc7d16b80cee40b697348e5c621ed719df3a6521bf7383c7be38e27ce3cb6e58974412e82d4e52bb2dd5944b6e3f2124e78be63c8447333d2aac06127ec6a2901f89ec1fd6221f5856a3a43f3690ff796d6ae9616028f889560277d63b1a8ea8a1b30b697886dc2e76a4434437bec81d237f47c2082af922e156e7b0dc286912493aa8fb04468446fcf2d8a951883a9cfd2c63ef391fcc31221f463ea6171e6f76dceaf255375e6775a90ac367045046534acc2a6b9474362bc8a49c90dfde98be56bbf68b99f9a421a41e3bc1301dd007574c3ccaf70e261663c8aa10c184183302d10a674f5713e0a711edd5cb3d3ca50df495c49c4038abef8ce1edd2106217d1f38e13490cad385fbfcec1d18b0cf58b086fe6e84d8977d2d5b5838983323fdc4d3aeb3c355247a648902b7adeb4917c09145d19d6469f9c6fc27110ef4cadda91c746386dac57131560ff1eba413dd595edde45dd4b072da48b4b75b0f04f17bb05c5e5bd703a323a477e55156b821c495b4f4761b6f12c49baca23ced33db6f8babed4bf9a5f7c1df61a1e587e2fe10dbccac7c4b8ac417a8f71d6c0478bb3bdf935cc9efe48e22e5d9ae381137e939f9b53dd092cb61ac1b082f020672117249d2c7f61c4d31f099fcee433516de30cdf356302251da322700b62152536d81ba9f047378c50883dcaa4da160ba068796dba79423dde1bf6a68221b1c216380b6e6e2a0539cdddfcbcd28a219cca07bb4fcbcadbca3d6f848171c11d621fe1c62cb00164d6699fc2f25ee1f95e11586b3d78ffef2428aa48fba4d6bb99f8a46c5556ee5817df731050f545ea6469ca22843e372e3fa036852902742ac65d4f021b1cd14e9002f8a44b01e78478a6dcedb439e78aaf3c5322692c0e7e4e2c5b0d9e5764e0fc094f78d10bfe498824d295458ea594ba8d1499a1e4b724950f79b1bca398ea57770dff87af8a130caf80ce013314fb48086f3fa3e7f3ded153f26cf894df54698e1e88ca7112d4d6fcf9b97e04b0e7dca271399143afda56e49fd977ee498104f2ec28ebeb0506ddce565ec9a89e3a751f97a04a92388054609a5aa624da82364465f8eca0e0df94ad65d9217f67c0db505a73936b815941bf0e9b7a27f10229dc874b5d0d102fb5fc4da60387b8b85bd618dbddf1888221e51e79bf3e5ff3416f978e3aa5bd1c46d92d5ddb0130b866b3aef1238ebcae4d8e84986783c8cb46546ca96e4db01fb1623f17fe8ad247df6f918fbbfbd21bcbfa76b726980da3442e54ca2c9c22d73973e94550de2642be6bfbe7ef25cd2c27075587387a54b5df5d46ed263b82a4a34f30d5071aa04dbf7b53621a93e9e68f52977c9bf3bcea8a8c48164de5d8eab744185711c8f95a88bf996ec314b267637447f717a1a1a02aedea0f226d173c3bcf8f98f7ec1edb4f787118f47026c704dbf714035b0b61ffe26d7f2648cdd26a63c007d1bb1cd40d5196428a1a54a76d5339ade108e8421b33b180025ceab2695407828507265b313161945aa55b94ee74aad3dce9b33c148c7f26860671279ecac0b0f8a4d2beafe923c305ad3929cd9ca071374b9fcd250d4dc64703ff498ec836b761cfbe0380ff682bed09e94b76b8a80651770354f4e3442191391711d4391bd2fe23fe7f69985d755b013be670060c3c2f1917c28a783434d39b7cfb2e77953da3daf1b6e12384bf27a24d233d0e070e7d30990e26c173c4d9e2387c664c7481ee045c1bbf1523a06f1e6af8f4eee10c8cc32f2b1269dd98a0ec510fec4ffc48cea48682ed727708afe545d4a378a4b6a010cbe45963d14ffc8a75566066fd349f0052b8479f27377383f064c2b48821e37704edeb3dc6772481b37272f1d428521be1678445828d1928a0f74594eba17f2118cded1e93868553205ad7859a6d2777166832c670cfb87415a4641482b5100722194631117da0834592b7248c83ce6c54415456cc160800286fdfe390e27803b655257a65a21890fcd0f4478452a572296f1bcbaa9d0c1f7f2917691714470a9ef691a395825eb847e40368c77c8fc4e486f7e48658264699265191e5ff733aa844b5f4114d67e595adba5e956a630ced1692c3867cf9addb98fd59057b8f6cd10426f13d95a7eba675267c227f202689da0d73449510b10cd8c7d6c6859db72150d0c4a8003eeff6d3ddeb1d02146ccefa97531f920b73cfc90aea3617a3c2bc9d15ed61df92d7a8798cc91c070b838007cc94dcf51de3cbe0bf0583c3dd00a32510fc56ab7fbbb6036521e7c72ff5fcb534a4f13153533d2cf665d9411a9a9ff9b56fff017898664c2a2dbc7efd70ff79669ffaebb7abf4e8ab843d9d557571cf05034bc8baa9efe96e43f0520e10def177f4dbc381fd10f16ea509007bb8573fbf478c46087875c3e973b07813d816ffee14299f5e6ebd7916904c60b49edaa675b4ce8b8eba6bcd747e5bf68d93457badb3a18f618169ca047f056e71d3e8510ffa25f08c9ec63165962b58b9cb320a78bae39ca1f93086840f7def83b32bbf01187c466b726dc193a28baff45a93e6da6ced3970e4e02a452eac442c1dc5450705e372e8bfc2bbeb7ab9ce7dde3267015a3f4d846a5bbc6f71ffb37607a7ac6983e1262135495705a7ec941c57bd9b4b608d4ee458dced0af795ab674da89820143c0e20020c61d71470f8a9dc84fa02feabf09748964e1c744dade37a2e8a50484c0fdd08cef1b0c6106aafd4b41136e24c513023e6d3646c30b0082d97fae1ae6643564b45cd1251164df3bc69f7d9f9a1b5a68e6b4e354ec825115a236b9f171699c2304416bf1c5a85a6b78553abc18ee33ed73400ce3e3a48c40157172df57b76ba4c0ba113d854fa4ebdc16f8d4e505d456ca4bc09cd3877ebd27e5a481ad6cfb4f4160e3f4b87c9dcce95daf33474f2482e534c81890178004f88df835dd658ed2278d6e5ca92fd874a204b038720d3b4b141fcbf96b4496d238ebf3f71e413aef13ce2a507a1a9b3e0b0c7f51edfd31e703be83db14afefaffe526b7af5a4f605a164022ae6709f9726808a49621b627fce2112de45513d9375a3a1eda4bce7fc88a3e103243dd6c007a759fe5323ca06263a4b02d2c3a08e6df0aba00389e2481cdef0323ddf55d5225eaadeb391c3273f93b0f14d19c7c59a07dab30b2d87d340e7e699b9e52721ba7626a58d9c3f2ef24433e8cc79d9ae2f661f52401ba620d5e44e851e3debc3b6a07ba7ff5392c978c2cc3e484e305ba2be2ed1c27934e91d6818db7b6cdcf58707dacded82d3e294794a39f79ecf13b55876af2f3875e3f199dbc17b1a3f86062674b117ddc09fd803647ff8fb810215d4e08bbff3ccc1343e3c59a3de0ebebe7a75caa934b6f32e5e78f7562141bc578ade64e18e8ca7c193beeacd71b93b7774c3ebe10c7268c578f7399bcb8927eabb47fce701a378802ab029f1de73041383e20b36937c15bc3201d8395184f31ebe005219853dbb1c45b1ce504386a8e4a1dbc190999dd5ae0c88acd40113ea356ecd6a1431a7b626a89104c1e23af97249ff6a065a3a41b838feb3ab21d8bc7af86fd4e9bba767ad148be16a965af6143eb6d32800d98b956f5c5f27717025664439252351177d66dc197c239ee8f226ab887ce473918e0505b8b0a5a7bbe484c1c7dffba2fcd39c847aecd6bcdb014b3f0582686df63d5bf3dd8e9bd5365b12a3c9e4fcb00d4ededc2c5d79527a2d63ed81c0b86da794953929a3294678502c754fa01ef603e07d53a109fbc87e755c612ea16af10f2ac38f8746e1355981070c8bef82768e42bc49db9bd7101d0d597fcc0e2beb2c1123fd5d84128a546d1c214a4cefc9963b9cfeffe94e822d621dc78f2ae16084a5a1059d1db4ccf3ea0979583d04c4a18b80647046763b69b1d0afa2828b7a2edb92a8865a13ca967240bd8f450479c04fcfdffc76a58c101b89be15252f93b1d4c2b1d559dc865b545fd6af631ae8bc51b8bfe2b329cc53bd0c1c919935a8069536a54ac93e18564fab9491d76d7520570fdbb7a2a01618a3adcf0a2d5440b416c466c00dde89b78a374b3486d09834475281cbc0502f45d4f9216f1b970c1666b6408950f19e3b348fb3514e6e88bfb6524508778cc4a7d8e1bf05204fc96e23ebecba38f1417fbc99b2768f60c4561d8f2cc7e3a8c164d0d9d75f0687fc159ad175af476cb3afc3e34a97239f8430e5b5d87ee206f4042ef5d4cf62c570be34c21b04cd706736339b3b58b4cf0d8b7b08be3048c730617355c2cd5b09119cf2a330a71af0d554899de81f28c92ce799909dcfcb4efadafe01c92571cc3f8b05f3636a5a56678f4f598f30a512ebfec8ca5c23020cdf5d38bf81275672a57310bc11ad1072d79840a2caaec56540f25c961fae0de6538112984d1a0fd9f9415ae4af24ab1d9f46ec9d1381b10ac2f2823707f55418a0d7e3f7b395594a790066057e967e90a056cef0ff405a85156e85f7e3497c20dd5d673faecaf9bf63bced9e852b0c496ae969373753da9f143e9d2c26ebc76b6e20213236f5e028e2148b0750bd9d7174225d12981a5e1319abf2ae1e1555de8207f65f7b02c664ebc030cbdefc446ea72355edc3fdf219086c067f3c936fd9f33e9cc7c8c2fcdc27b3ba2f7990f59172c4c6bd3b55e96522ee9b254d26b74d13350f0c53952630ad30e41ce433b43c2e3073e83bf08c044725b842902affbf5954d15b570f699a160712537a7c15c1b420438756369938e1323897424d51c4cfa476744ac08be9560a6e2b376e5f60e71b447339245497bad0cad34eb4870cea30ff1c78b548a2f3fac49ea8caa75f2c56fe49b39dbecc90744219263d8d76b46d663230d1525bfa72fc5f8d91fea419109c540f2d62a9a3a1633123ac91ffd7a736f7ce6879afc6ed2f4434c1c8ad15c7c1721350d00c76b065759a0d977c670646f2ae5297660e4943d4fd950c084ed1b725a951145e70d75a0bf6d0642baa9277c77620d29ab2b825b2dc70052ca8efb322d30d6b3b12be7ca48c06acedca796a28314c69275831004c57fdef7c3b622df30231a341f2bee583f04db3cbde25a8f7c889ceebd9fe2e2c3f13b41e6c4a93ca14bf63306c524cb62e261482ebc5f05af67ebddecebc70f4d51db86bc634d7be8ad4db306bed089fc00b99b5eba2e101a1dc20b39ee9b041a84c6ba8f1c8002b1de6efda99fdfbd32a90e955d6fcaf6cf2b7410e6e5be8462eeba1b02f2d77311f527df9e5470c5d3a0410c9961f22e8a2c8dcee9cd7237645272e8b2a3a9d3cba3fce5c5ac47f303b1cfa18572994d61140c8fb1c581d3764aa7586bd84d1f214bd0bbe165f4f90568568f88c4ed7a1fc3ac81b78335264373139c3760b2c0973d0ca63afb70aed48836c881e65da054959fe31d954ab78711ff57aee961f7b3b992f1e8f70082251268ad2c893a3a8e443a4ecceea84d0bd0071cfd50e4d2b12085c483acc3d8d89680102afa1550ab10181ab64daebff22792192a6f34ec1d45fd7a3c290da6b94c6e1539a0999c6d24f876a810dbffe357ad81ebc35bc13dae91a98ba59a9098a375ac286e8192e21e1a54c552ab2d502565776a1d7cd6df1149ec628a564bdb2b28913776cb7d23d41a76e3404b55e62fa514199cb4d9ef7fd4b172c86a279221a11477dd8d7e7fe6668a342ba8337a6d7bb13ae1adbbdee5f63a71fdbe0b956b895e41abedf01f40672c54b2f0168b0130b1d52ed29fd72e01263535b71f2e3059a76a36462a16fdeda937babd88ecb00f6ae6b03357a2ea722c804ce02313f8b0b06c8745446ab40eb7ddfbaf16b400c43844a79b87461188d23097e8adb15cf00415ee1e9e41bb1efaad310a6c22b6dc6d757aff18d2f74d293b2ba2cf5dfd18dbd2009722c168623697aed1513cb243d52e29eae0ca49d8b66fbdb074bd063b1b0bc6d3dc24ce47cf9b1ec0bde0c22546e297fd6bdf115ccbcc07531d708fc79ea09e0100571bdd25a242f71081cd710d9171ba5032cc74ebea24c6681cea076ab8c111426052b15368ddf5d8c74b040a50e5a9b4a5abd4aab2481ca2834d0a26813ed94bbb597ba2fba949e2c20f246259242fa727c06934cf00ee20b1dd0b3a9bed611d5b5620470eb40b69bbc485b01581b92bc984f3b000e0002636a4dc32fd601ae9293523c693f9892ee47358e8965eea2e5057ef0628f0a7f20d6ab059427bf20ee0e64c8bcfaad734c37d788783c1cace32f62a311c68a9e0a061daa37cd29c506c64151dd091e3a3e29b6a5d9354d9e1ac9297266164734ef9ea503d2b07b6bcc7b3cfc019115d956120f53ecc9736655c5eb33d5797a7c7a088059f7d4505457425bdb05ffe70c5a7a3b33813da5ee7cd8b790d390e6cb54993cf473e784a11fef4c98623cbc4359187c65436f626cdbf6b99ebe7b33d3fb4d9ba754f8af67509e8dfa72488203671a229f73d112efcc91e57b454207969e8c269a0ff6f51f6bf3ddadde2733681204f265892187dc011d1c4aee82e59e54348b10c38e0d6741f31f6eb5ab9e33f0ccd809459d001569d734037511685eb6c3bd148a4aa4ac3595a833bc9dced45b9beda4b31d84004143da69a5dcf4e67c00aace3e4f61768b4a61f7d005da92e135b82124634211b470ebf6b799b584dac50a612d55f321a9dbbf28571745ece1408592f0b10114251e21649feba9d5c36418c007acce7b867691e6ad22e93e7ff0244c4e41f51f640c5eaf99d83d430e1890d080af35f6eb536c3846d8d31414a664e7a0d20d6591a9016b05d77e31e6fbd92a4754fdec6e14a42d3c48b8a42c3bd606fc1e5741411732c0d474ffb96990547e2ea141606e062c3e4a9b65c06550267c98a7c5943b69e12c741e9d1b58d3a29bd6249cfd6768bfe4459460d9c0ca092f78a98341b6f2f5adef7d425495e3d2a555ab65b2aa39795cb57a291a02de8473b28e7c7bee271e5ccdf03689db19ba902e5805637869685713c674852508aab4dccc6d349e18500a7c61708fb6af1992f175821e86808cfee7664aa866d1d4f3461f1b31a54e793f7126de5b4436ceb1f733065c1dd02d44696036ab756eaeca23f1b7a5fe701edbb597baead1a4cdc747a9907f7b8abade52a765c1bb389f788530cd39e50abb058e5843dd705a06afc0a553ab2411e05409ed9540f6b8bd3b2aec38c38bcf44da7d5d8c541f4667964a0c7998dd7b7679300cdc7ba600a4fce3867884bfa681c6e39b0e530df2e3df52a5256285942d555a644e31fe2bf58259ab4135231f46d749a36ae2d382fcb0cb8a6b97d513dc9dea2f353b7c2e373e23fb3dedd6682fbf97f57543e6734aacc42a5b67f3bc05c31f444353383d0a5db59777bb72d7dd5bd321a694f5bb55bb6ca4e94bbce5636c9a98b42722bd9e6661d4357f95766ea44f164a788c8098970e30d3401fdd1432f22666d2c96f0b6bad78de6f6db52b756f907859f1cd24079bf59f75a4a03a8951aeede42f98da8d7f774921ab0b4bb98dac830779ac2b95cc0e4eb8a45affb72439f9af337e6d0bc21a13d5192d288fcf9500b745703892ae31afd3093cdc52cb3f8fa50c833cf621f8d1af15b446d94f6774235fd15d8b5e17a8939b1c77de7301a3c124797c17b69760203a4a26c6ec9d6596524e28d6f87353658900fc33c02c810fb931a6a38239d0601461c37a68970597dbeb89337c901b5c689ed6c66c701c28ac213fbfcfa453a94294fb46e4fd625fd25db96d3b83b1c75eed26f53489991f2bcf2d237d7d9dd3bc5917dfb5255f5884a259e404db9e090ed010f74a56b9a18f09f85451a03ec89c56b55c4d422cdcbbdd30b0002bbd88340af674fb8aacea52b99d41b46ee4dd1f4daae562bd2acaf5a2f84d694887620678aec56c6917d2441003434009dec29144f1002d55dc61c2d50a5663e22f5a4a82e46ca633b821d55450e97a52a0bdd962de933b0a1188093a96da3d139d20427b5e23b1bd346e418eaa96fd3b5485bfc9760bf697d74ebedbdc1dc386844ffdb305270480d49ca0935bb331c4476915a11cfd7f5c8acbe9aa688c22a0ba605e047e44c1c1d901e1c1acf865bf26acac2c4fab0f6d83c925c72e2255c02068f175f8bc6196d2219ff6301514b8f6f1dd02771c32374272b4f4add470920b3b32e957c025885a1810615a75cb3a0b4a19ddae58375d1f6a4b2b3cdfad5d65163d91de1f08763662c3060c600508158e9fd92dbd29ab75acae7dbf215b94743cd9bef7c1462175ec14dc6377991b4c3e0a02cc40502bfa5ee01c4782ffaff5925bb5a949cdc94be12d97aadee0e0acb788361a3693b5a923ca35ca55273032b8bb878071fb1670381add97d2906511db7438e1c7c28a0a1009f8a05afff7e2757f036d21c38063f718e3e29a14bcde0ebefceb06106e5261f3102c69c2db0c871815fc6cf70a45a06b8332f82dab7d574c0fa5f2c70858ae9bfe258042a317f4b95cff7dcf7293cb21209fb20cc91ec0c3ee7a73bfdb5205d5129f672a9a2f2606f88cd872fa8cb31626e352b42dc7614e6b027eb06850e122ee77122c6cf6f19dbaeb9f07205a04f2a9bbd99c7ecff04c051407705a4bed75341482aaffd60d95affd31e18434349c9dff1bd3bd57614c0dbeeaee9ec73f6fe47190ae0414ab1bf30be630f2df97b9c03528f60236f93d090bc3be265ef425599c002c2f81e25cc3bd940d80f5e81b7c9eb660c48f1772251a1e5226777185ef3431581a53c09f8517dfa84cc5c85e062d7a999c6b767a2cee374e63bb0a36f779a6f8831de0b8b411a7ab3689066d2c470a93497e8144d60c6889b91257682aa227e4696d9c61f2f410ab09926b893da6c4a4d2ab96cf84dee114d41b1ecf3aa22f462577de7c9dd3cb1a3c3df74a2d5019aa88e6f6a78dd399592411d6d8a5d5312b95d761d34b04db4b60e13d580237cbb5f99db3f24dae3856f3ccbcbf1f163665ef7d580b9df5a2b702ccfe66645cdf82c5f97a9cdc833551660353fd57be213b3552a3396dcc37230771df2233f55e4f84f5c5529592475b6d748dcf23be5bc9a72dcd8446fb2f32e52b859ed9d1eb03f7081554af3f0e8c49b3eec77e05fff71fc6cec8cb5a97fe211d9522304699452105f4d9fffe9f2ecf327c3b9872e9f4b3d287666c835f95364fb172f03e6288278c0fd1a628bea552dd142d51264ae924dd765f8d6b4e97c96004e109411cb06ba91ade5cbf6bdb7f571987c4ac924fa45ce05c57d30ed76144c010cacd2de07892153f4c9177a87b7603b131627c0deb91712fd5966ceb96cb03e2c3ad8d5f6ee0f637de4e8e49a034a48c6eeaad04c9745676931f75521368b8526953db46410efaeafbc9566047ad357f973e1d7e8541557fc1ded0f6fe06c2df56e3a80ce20bb5ce3275bffbfcc7636ca364ae801e0a711cd8a13bf079b4a4baf36f7a085df352b41cdf66b358e16e8b27e3670556c9126c424e42e37a8580320fdf5158e19e7baffa2898c1f0256fca9fbfaedc4285657407380a5035462cdca0768dd19c3a20088ab64ad26327070ef68b52a5fe4f85180da558ec8679dd1180dcb778dd2ed2065e417633700df84f4ffe84e57e1273af61cc8f9674bdd4f80bde213f4ba4ef1f94a4a494bb22f2c9ee8ac8e2e618fd9cd4799ad14b1ffe506592a08405e3f31a9bbd324b62323d916f6105dbd874bc476539f7484d510fa3cc1940df11b705f641fd38cb22f395b3ee0baa337a3de321ccf286e09123afcb8dc44e4e2ed8cf6311f6896f5adc1cb22710f71885138f25664df948d6a46fc54e85ed31725d157006f6ab6dfb9f6ef7cd99448d0a55acdee62a6373579ff7b230b150fc1505dfac291ab7568beba7305b46ca5e4beb1a4cc73e7d40540ad2ada9551be9959c1dfbe4c1d31b93214eeaf9299524b74276d8cacd5cd11ed348a2c01773f37e2fcabd445fc9de6b7aeb0a19963570bb50c664487c987f4f24dcdb4a1f527382c2428dd2376569067725b63b66e32252131b6d4c8af66f286da2f8f3e8027948f7882111dd1109c5b06b85192c108f0f461891185901d2a7c338416d9cbfb1537a8099bbc1ab9924f9ae9165616a22cd67cb956062d4fb0e4bcd0747bd3d08eb1f796a4c025530d1a6a79ab1639843e74a8d221691300cd1b3a7d39cbb5c44c61e2860c9eb8c7ff11a7109f5a4d621212677feafec25e6efe682921d9b796a59cd713490bcdb391ea7e5b90752ac62d86867606c8a72193bd07822e9c2a1e51661ce58fe8c8b1e327cc91e5dd29b0ae479dd4dd33228cbb2eb82a4b3ef5865c5960325a66059451e395a5c2d419f1527739300f81d4f4b068574633fa82a2e2064130eddfd031be2193471126ad9aca152d7860eeb1d34c48ae978895ff7f82ccff0022b7e9aecc0bd12983b04c7fdad02c32d6e4f793175b3c3bdb285c60bbef5c467afbfcff35ba9de71e882e13d889de187a15899a31c6cf6c91c677a368f222eac8e3580b1b17f217c4151be82a64467671125fbd9c0bcec59da31e463f4c98af9d1725f4db48e68a12918bfdb99c523e39dbc0cc0931a5543a8faa96ba59a3c4a3fea3469cf803a2baed842024ed1a57edd1c24c79f9bd00d7cef9cfb517b21afd99bd3b2c301611adb4f7aab5e7e762871a6e1b63021ef869cdb73a73275859af8e1cf3c7f7aeccdccad6621a719cb32a17147169bb4ae1e8d440805afcdbf04226e74f8559945019c370451a3fccfb5358d536b6a94cf6a80e59b29762f9de13af4617992e103945e1a6be9f3f65b3f79c404ea95af43242b2a9bda1bbde716746f7fa4079067db806697bdf9fba5402a07bcfd5283d1b7a93be6cfb6290b27c2e5e555246427c85206e3da0e4141b908bc745ec4c305434f31ebe155e3c19684113e35025521911fcff102a96b853642e9f06d2f4071f7317b577df20c89ef23c08683196589a9893d6993c3892a308bd78da83339ec37c6ca4ff214220dec8403c76db88a505c5b8864eeedf0c5c7afde6aab41cdd2f8830dcca78172000a2e004ffab47c85c0c65f11878d6339e4c606c734f6ad2d9bd04393ee77b68645e885080aeb66ff83c8e704028133392f240e62162a426844341be97919fbc6f31bc3c736c53b32df046ec154b57759d561ccf9c844e8c05da79ff3cd69c21c45ab1a98634355c2baec2dbe1c5d25e8cdd6acbb42b5fa8d59f8b902151cf9099d47086d957f730b4d3dd5ab2e045432443bbcb474b55d1dc573e107fff4c823ededc9e22493684a0d62a12770ac4e34667f1501a17665d1923998a2b80a6a6ceb3acae6d09c284cd8e49dfaf78ba8047521ae7e3a5925a05be32f3f6d24f9ad5516ef180c6b62272f87e91ef0ade0b6968fbca3bc0e8e6f8d301491c708dd9cda0b671e4ef2e86a08c2dc665ae4b058af343fd7886d8ebfb64df2572954b02db98c5c18f11467733aae07637d87e6a5044f03634e993b93749bb7858502e447fdbe5ac00d4f65ad92f746cd7cc4faf4070043e475c4e07241100b48332d14508d271a0b5c3bcea37ea1f99ffcf2cfe8048d1bc7d8588f10e118670ce6a6dc7396643e9454722398c8a7b08e5d13e94f35ca58542edf075b86dcaaa0991f4417d7ad3db04e416fd9f298dcbc7f990f38e38bb2619ae1d9e9dc98477749cfbc8720579c1e01598634efd11a51e5a3d65ae77fb3760f7c9e0a7006006af2ff025a5b46394ee267b7b7131036de6dfa49cc68a13eb5c7194574039d2362575a7149733c0c18c5cb11b793e685fa9bd9c49d089f88127ae8c7686acd994ec321834f60a12bb4996244d8722e8fa6a776d45c911704f6c7d7a4b785d03f4b095e0b3b743e55df36a7cae2527f0928c78235ff72e54cc17b1ed86b561604147835764f4ea314ee7d51dcbb097658a47769a2f5e92a68178f0a96e425b9cbabe94dec670e07f1054fecbf4a3e57d024f8e440aff9a698617b02cdad7ee4b27f4454b708ac25d058b7e4a74c6db99d6efac9ddb9c4b2cd415a1933384dd078427a44651f604512d4ce60300d5a26ef1ffbd9f0df5fcfeee3704a5d25acc52bc9bd02f95c8133c9961dc5436c504f140f985a40b5ed05a8befbb3832a3f550ba8b7556b28f73d72af141811c7d6897a96a6abcad693edbd8681fb0ba50a2be564d4aaf633484c60f6bd34de157ba7a5440dc268c9ba29ca3213be8eb9cbbfffb3a711bead70eec5680360f3acc8ccce6e2983019e81a9773148a9c418203e21e36b8ecf09e11d648691a9f700eeb2a067840a5af40e6b1dc3a98b3f50736c3cae8d396627d7409b87aab0a918a84e7ab9185be7fd7001e6cc0a7623aa1eaced100400c0b9e8b7c6e05f99113f37cc6c0e546488fb78f28002c9b518b86b15d1a9ff2445c03b1caaade22232621b553d86ad0e1f9fbb9290eff465b07277e2520e00b285f9d26422dd7a6bf1701ec9b60351db4810cf804f312247b127774d38856a25e3e4cc982c3c37dcd0ce58517435f2eb8cd531b443333aeb3fe36fad9a8bef8df8255c27e54e5dad650447fcdcf9c84754d7b360b6e4e84cfc7452fbcf4caa98f116691600cdfe7eb8328079f87c9179263671377c4f0e9d6cc35a1ac2126818ca2135181781bbad6b5fe54b13eac6b86cad955a44c13ca8dace94981bd41769bad0c30658f33bf2b85d0a614a665ad1509baf3b8bd9a73629657b1fd9dde03f1023150277c34ef4bf6e545a659fe5877f5e9c2ebc7faf90ef44987f784060f78d430cf307d9b00474a5d6d998f2ce61816615c25015dbd52e383fb6a15108c8b2ab29eb4e512cf4410f0fbcb6d5905e5afe0d595e4139b9382b51bf463e14696268bac99b99a542fdbe2564d296e87d28c289de5c31baf343c1d66d86df1e33b0d6965004655c237c08c435b8081b50d0e8281cf5662ea5018b5c8b7f4c6f7b4d53f0204b809c47929fe976a08ff08fca8f354eadc6367ce920cb8a69cddbe22bf57ab6aef229fb00f39f09ec455322dcc7204c0fc7000b13b17fde36fc9752a432d8a7a196e97d420608ce45c4c8ec8213562832a535b2cebd5c9c4d05388b73264ee2a1bac42de609d834fc6aa7fadf768e5e1269ae37bc7487f97b9061243bfdcab0096c4d4ea7cc112d362d7b07c85838aaa707a159005b331cd5edb0a8c5a735038f15121ac30488189573d7fde7a4e51542bff0a21a3673c65c0aaeeb821e0546ae27166342e0e82de6f46ad1a2d31a6fe683313f12ea3686e90f4ee5b42bac3711ef8390e1f8284d808825558ef2dd9a4dc85fe1278d69dc85e05b3a75e675a1c1753bf65fd564d18c242254511507d8ec01bdfec686ccbaf4749f9c41c783ded197476f3d3b3b3e90d62d95602037c57ee6bbe6a46e14138171eb7f8c38daad55b41920dd57cb7e1711f1aed833ab50c5c1744c760cefcac3630a623655a9ba7ef801357f94ece6272b78bae14d8610cdea44dee8902dcfa2e38c3985396cffa8ddef898a280857309c49e61cf7d3f53d8eb4067d91c69055448a825dc38f8c34d0786dd39391ec9816c6e7c14cd3ecccac3f91177c0fe40ee264b188720ab0347e36118b31eb4449a01ebf2feed50e5b7ec103760a3e0a460cdff56cfae948569cf07f9845f6cba28b1a46feeccb22ff31129b8ff5966824a3190f11a31aedbc6abac277a57866818abebf5227dc9b522440c0e209b82de3be379d87d56fc811c26ef9ed88657df06830c8f040fbd72d599174d84cb000077b7a85897cc7cc0bf92077cbce437cdf531dc25af66d57ea254423a0be869aadd6bf57b7313a56758fc970e29a04951f9fc2a0cb6716d0bd1515c938de4a0c7592d1e6fac1a9ac0e749c6101f762938fdc9857f92e0b931636309a4030989026ffa440817f05af4f0c358c8386e209f85e4b76e2d03454724d7a25cb06c5855f22df6a984cf5be49c2f6c8dd0fa207cc46a34e00af53840a78f8cc4c9c6acfcf84b6e738737d0929d214b366942b2c6dfa3b1250e8e5891f899e0297766cc5f01aed0331bf5044958d6a3653e4f86d8fac1ad254a5909e02e9045f944792fed67e43c7d68505dcc5f706021ec2b0de84bb5a7acf0859430ae96820ee2b37dd334dda4c4782f1a8bc1cc3ab2be7182781ceb81818ca8dbc52125596fd574563d1a1656ae24e828548c3824cade725cbed57648bd98fbadb05d7b86a873390ffba15e5406fcfa551884908563c4f02335374e1865e80cd62a8bbe929a6c5b787f021fb471925654d819f641b69f1432b2ad5d7d72f7e70f58a9eb862ad1b0292bf93a91adca7f3c3ffbe3e13bbb9e878192e50f9ffae1a75492cf72f2a4584f16996edffb7cdafb7ad4cd77819a5a6c65791fc39f3f406619db02a942e76c50909cd9591a5bd82a925ebbd2df098d1b27f033c8b8f9398851c585ba1a0cb2c30bcc9916376e63b583d88b410a4b84870f69d13e4f1a86697cb110ac6886bca8abfc0bca999c953c97e4d65ccf34b6258a08a685ad2fa2bebf95bf2dd4ecf9421a73869a92b41afb6f7bc0b3deeedbcc3759090c4a9d717b2beba726d3ee36f94048c31b363c1874aea80a13a4bae60a24737ff6af712f59479e87c81050513b87afe869c4e9f2fc706c43cd84a19865dc2e028a5085ef7781d258fb7eb6d10cf17e75c49fd09b9e135f209545d8e5641517620dbae8634d699e16914d4bce9d2a3459ffa13c2506e46b064e7028be963d888517b9554802475250273880ee4ad6b9e3821260ab370beb26b82ee99544bf7b938e61231787e7ac057a7f1f0c3e0ac74b2798c59f853e240e22193bc459d0bc276a89ac0ddaf652627f889a60b27c3c380859d120cc192d251d64dcf51e1c3ae5159b9bc43a5a2b87df566f86b676cac9b5c79f31c7fa4e6ce804257ddca8f24bc7ef580bcb7bf6df531cd79f5692c3ca3e96430162df45bf4a44007b421ab411e7ad97687f9d593972c14831744e9acfcd0e56dfa40a9b36f58418909cfdc46a66a848166fa194b8cd23e279ad298030c1daece520f73ff442a1dc3d8b73b47f850fa566e4f6b871d1c9e47aaabef5b49069d1d580b7023a694e0c05d6cc3c3befb6b24e9102391826dbd59d4930002b8a520c81621784cd23464666133b5835c28bd23faeabffd0b398b627423204643932a09f64617bdcfc57e5ddbfe8d0c0e85f82de7c7204764c0edbd757cfd1124668bb99ecb040812b62fc9c5ca9fc3e43557683800acdd15a3aed841acd12e8ce0e3672438411798e0baf94b0223011c2473dc5fe890b8a484e7a8690a0d68b68dc314b19ea0d0ab21b88f0170f5ee6f1babc6ec173ea83ace5b31395c0fda8fda2fa62a8ea8bd2eaecad37effc43ec54de7e1e9f14aa369aa2b859fa2a2e8285e467dabeb901e8960546b4f554f2b63ab2016c87020eaab0f77be87b6459b2bb6d7a4dfd46029f56b7c4d47fd7d690619bc2a95d092f5b6b89290c6611599d45c00412ee2d3c7e7d1cd18dd1065d784fc399a7aef44ba32a5e840b74997b8b1aef3d094bdc960e29173d5516f440c73d9e6d4e5cfc411043e7e95436565c6120eed5b1ab07f51f5c88dd85510643bf597f3e34b346757c63e0926b43a86e382b2f4c3e1b166a03e73e05094633ac52fc48346f02f3e6adcb3cf289efe9afe08ab160861bb65338bf8f3002282692c533b94e47b7e7ea58acf93c9f935e89e0daa1d017bfd45558417e9006ae62faa52ddac7ae3cc3f36a07b2622ce5a85aca7a70b985258f436179f6f9e69ddbc1bfc8b981392083deb31ae2c7883d9c8c7e8606c54a05a5296859641fd5e5784e85c291143114a90d23125c2fd5f4cfac743e82d5e7ad2bcdbba0ca4216a0fbb9809a33f22e051d94d4a3ed780ee3a8496d6e595e3f164795ce697c99920782cfef4d6dfc5dc2ddaa68da2820d324a714a093deca38f174bdabd5d656123c2a0c8c9d36a6b1838952e6f651dd052338536ba1091cc6fcc5bdaf285c6fc964815c5565094491e2fd33c52662354fb0eed7fa502628a5cc8346df2e13de4b9f5b9f57223b0662ffb8a6db848eb9293623831f83fb5a1b3c8b8f39f3f341a1b9174c64ac22e8dc512481c4af16d9972de18bd234de53e4c6422576836c63d4823ca658d98fbbe23a03427227d7c629dd9fa29eadb91c2aab60b90b12b78c11e877c365737f7a6e40a0fdb3306f7aa50cb091e2fdfd38deded30406cfa776b7124b9249c36e4ea0b9711d17d8ae28c202e027ec6b8a0f6ea028139e6b367e999e6982a200accdecfb4ab0f8131a0ff6f4fda523e00efbc2eb5b0c4d04d95146e2eef44fef7fa039cd5315c08fab893ce780940f8fd4cae54d1a7bb8a6880f3cba567405889b8206d512ee09f649c0f19cc69485659384ad732279fb9ec0864cf2147ae5091d25a286e64d3dc36cfcb19f80226a51023d5d8c15fc6a235a64c406219f5bbf836f806baec5f8082013588de94435dd40a61a7abf392d7107c4d01ba7bdd4e746c835fdb746d46a4c0f89d4b6afa31c680b3c06732a1a009464435e35bb470f9f532e73f9ab9e4139299010a242a3eb8eaca4dae8589ed7d1738621e507fec9b6cfc32069f1b7987474ba63ca1ed3debb16451db6bc024bac3529b2e8cd7a06146af56bbfbf6ba07278ffe8a95f8c87454e95ffc8ba944fce793cfc58bb8426676a70a8db82213a4c6d5efb499cee06af59881327f2eff493ca5de809eb113b60c1511d84b3e3b43109646984224bdb92a36bee5e2aca1418a06342494dfe95f808c2ea691132d5bcfedb9d6c3ee8c4911f06dd4f019c9c39a763958f24e69cd2792093e85d4cd4e495f5000a5de80eaa8faffae3c18d8edb122467063ff12c6deb34adff74cd36c3b0b5a993fbe91662533a2d2d877ead610199258a2ba0a7980ea51c8e197896ea57b87894fcb05eaa7608f2caf3b935c41ce2f445165ddbf4eaa6041c23be19c33a516755d9a08efd3b86aa236879367d5b92281f3c7b34941d85550a57d371e453dc8f05e35ef3d41f22eaabcd66aa4ef23afeb4aa562f8dee6ba7052ab24e5b3c00cadb62b5fc5752519a4b254095df059e1647683c420063c07bc5a9a9fe35aeac8166df9379c75240d9b0658893eca183a577ba7d8cca28ff05b0727ce9cea8d92470232520bacf21e98d8a19cebbfab866da4c0a8722e40147134dcff4506111bbecdd28f94fab10af4c4a89f08efed775bdb6f2adf20ee8d904bdde768236059679eab8e636478b0e82f73aac522ab2692722b71e64ddab3c5763702f468e1da2b84e060b33247c0abdab445ee89ad726ca359dd19828f392a04447c7b9447311c0e509b00a13a9a2ae2451652edb530741881572e106bc9be5081270144d64f02d992954e9b8be4df2176b50e5abdf7dac248940e4970f6f7564c42c6a99a3d6896aa20e4cbdf66b47f1d0702feb2c194971d20c4d253476a9945214d2c34edaa6f953c11eb4215fb0b6d249a94f86e9f1cda4dece6677e5fe80994e047be69902ac05edfd9bf8364e354fba06f7272ebc8a3f4ce63c1d7e2ffa1a25c57907f7664acae6fe54e92f818a8669b6984a97a91539ad76c705d16e1846e5980083cb7f427545471b2ee54e4b80b2d9ceae18b604ba8b34651ecee051d876f2de76e1aca529925f4a63089fe1b13140764c8ded50dddfd8f7b9756b0999e2a1b50034cbfe961cbea9628b8a04b2e8a5d89ea943ab537dcade4de9cff4400c5fd30b68ea20db4596f064744c84d2a5a8d5116879b0874355407bf774b76250daee9105288edfe4bae75b25bdbf73c9f474414e32919e4e9234ec91b3e1bcd93ca4ac6017fd187f473ff4bc0f51a346178e5bc548b24f4b4ce2a5c172485060fd0b0aa723a4299796e289422dae916d7527e968ae15cca308fcab0eeeca3c5fab7353c490f4a61a61f43f726c112424f71fc58ca83f26e91402591f94d42155276de58d64a4f065e034c8e9a72698ae272254cbdef6ac94951cb902f6679059b00f884423f1c2831940ecaf8b1277b04559692c9728df40a894fc71273c2c0bfbc76bc1a3a1b3a27d418db25f19fa1bbec45308690c1d0fd54aca1f05e39fb9e45d11e05e9f4ba2c28bd1b0e8d2545ccd94216e9076ead25242c64b1878cf0b847d951b47651855947d1d7b933c6673a9f18122947db95de9893012fda5a81d3585358c6741f98324e658b9a006f08291c08c3dc26d4ade4048452d16798ee9557f7763bf2a0d34babb6f5ccc3d46a358e5faabff5237027c5ad583a96f0a16c8c9271bf80ad38cafdba1c7a6cf1aeeff23d4b80f435011d68b574be8d68c66edbf4733c55ec1df4bd460f7d491972af938eedded6e68203e6961249b5caa08eddbfb590e891e9717437a911611f6d225a0e89053592fdaae2d34c53238fb0742f9462af11028082c567bc8b83e5261f516982b541adaf1e33d37292608d4d142dd60972362ab1a640b4f4972bb685e806b6db0f36fac9515bae339c23f57a954207e673bbe53132ebb7c6709a8f7cbde8eb2f786bb7d85865d89465668c8ea0e8f8c024603a475ca752cd384ce0ec9a32c0894303b973f8c7b2479279d989880c7cc9f477afc87cf47e8b8eddbc729f71ead6624e59fa0afed0aa173cb212968d25dc3f9e544532b46ffad555e1ce54971422cdc7ee6323f7b9622d03cc15d5ba74c92229f260f8d25d7caf7a8eb447fa77c6a3c40705f9bc85a4cda7cac4ddd88f1578a7c4c273996ce895de32810e4e773e7943ae00706ec25c948a0a48f7656e3bdcd73a6b092b4cf217c900c17fa92b793652e28d49d291578afb8d0d2f6ae15fae0b9ba13839876732adc279278ad8a04ffd3426c36c9c4b69f44262fb06493be079d6c1cc137205dd5c15973c02975952464df56f9c8491c12133dbbe4b4ee5cce14fdf9a02783ae43315f22943655e0a4ddd01bf13b0d29c352fa3d949a6077ba48d0c947f9c195a4244234e31b59afad50b22e79d25b3de319fa6e6d04e5a6c604495a305db40623fa2862d39999ab65014eb40455708c96e7117a17975c2f7a77c0af649c7675adc811556a8b23d7decc66249582427aa59f20ceb057741d2fbea666fc81be7f720e49b38acd900fb15c9095838e4ef47d8d89b3dcb59d1cdfdb24824d62b5cc57ef74441bb9de1bd604a30389e848a5e194779d3d1c1914b27ec9a1d4c149198bd2fb4ac74a8653ee26cf5d188aa7108198c708590c9e2ba9ceabefa022c32947a7269bbd18866d90757e20dc52284221268ddaf35be89e4e43eed38f3d18525644e37b1843a5195527bcbba815ff2eb591f121a0b12847eff8302773a95417ffde2c8e1faf1f20fbe820a135c99bcdfcf98301b6156725376e79b5ea529444f9bde8d0542a96e85aa11c52e6855a93662926a622749d5dbc8c6c3760e52d3f7ce8dc778684eb288fbea26a75c6b7b9739e696a9bae03726c21ddf7a95e026fb6a034ef17dd12d7507d45737bd728bffa3852f9c8692bb3d3e04e21d12ab9cdeadb64066b5abd0d197b3370e76be8aaf1719114105946f70083178fd747d716bcf9871c5ff64bff46173251ba23c1a60b0c7b82ca93a35bbdc33ff2335b0280f0dba20abd34a6e9e768b07ca441aa1c8a3f1fb0d5e9304d2f0cd902fe96f58ee00fa3eae8a0cac466f0215a8de1fbb55141aa513cffaa08d358f494f084eeb7f078f5fafb041244d262e159e5c89840ca54d9561fa138e1e93bd895e8ee0b46e3fc6a240f4e263e7c86aa2a092f392d405870138c0e1d7b04fd6aa9e7f8ebea4190277493ef483d9d97dbeea468b4f0ff487b457e392ec8aef0b31cd7f501bb302044792f8a230ce3ef2139243f801657f15a200f8fcab895b3d7f891f92156e4f357c6db9042e13270e2e60db552be619e0c6b7edb9a3ba347262c26c6e2a64f8c339e5f42cd9fe6bf9db4fef6752025a370b00a96c8fdf44ce65661edfe850a32ee1c3298b95252381dc5383a226751d6c4934d5dc49f9cf634bcfa7e6cf8b3fa96e58553621818eb13617817272ee0359f955134c22960cccc47c7c82ebd6504b0f2438689397a27fbc4682609528064201299fa0f5a471ced79ff5c91f73725d920fd08bf44f929df288e5d60e74150ac497631ece435797a8758665c766e399934924f8b424fc93fad600cb7cb79f50f0da92660b6b945269ed5ed76eace6c3878582f85688c832c1a599bc16d2cf414bf76856514370b9febf41fa91ae771b45acb7018e82568c9c71aaec0105bd1d3fcac7141728065f24943274ad079b445318cdbbd139a43da27e126689d74bf4bf4458f717cb7e6cdaee2d37dd9680b0013bde8bae59d342b1a9f82db804688a18cb1ece226e69a578c419bd502f082140aee301a646d7c8290385168856b87aa1286195d86fd300d50ea970718be3e8207562e9db14b22f0fa46311c029be895109d04011da1f6fd19070745677aa4be4eca7765c41636b80cdd45be915667e18b9c9cff8ca7b0f2b8879627a5ee6cedeaa2ba7fd09ef5d8a073fddfe9e50dbfd5722958d5a4b0eac68cbbe35db8c11ec60f069558bd82f61ea792f3ffdbe86e12ea2227d99fafda68e9044dbc456320a251aa575339aec7de582dabc346b98c1870316f23a72c06eea5286a28817a0d21da1d669f6132be4cf96fe551d8631cb8c5516fa075bd57119d1ff518f1fe2a600c029e72aa22251227b4df8db8cf4cc4d74874f96fd371dbd23635a1e844bf265c3a64cbed5f2942866aaf3aecc16acf141880d0ed0963a0c27e786187559759bab8bd6bb7b94f7415b1acce309ad7a90309f97ad135f692dfe7411973fa564e95f76e3fdf2ef7aedb81298391e2e5bdb7712cbd794d36e607b97e6fe4faa74f9fd7087528a0e209df807e5f20c85ab2fb79d79f0fccac5d64b6656d5122a574799c13e6401c9c16d61d36582d84eb8d00e1b1224cd765b79d377d12d49ac265027720f7654c02047cd17661aa06a4d2d7e6c05301f6b40e722d582a66afccae4296151e247cfd78a1fab2b90093d3088f47b27b0e8165ddd41ff603236a87da598ab3d550c4e62b34b010490c9be474ae44723f9f6851ae25a025863cd4cc83d544d82e7b966f32184baa396e9d24ea6ce35196246433460f6e11bbfadbdd89568b1b61de7ca5532ef628f7a3ef7b45781a421e8454d7ff829fa2d2a8d4c78ad4b28df428a02d17c513608e10a822af8f148cd1ea696a474df26b93fe7e7636ffe587d646985ac1e2504f68ae78baaa51dfd960f8145cc802b87652e857e96881f0ac9585cf6d8cc5b9e13bc532bc1335a468ce55cee8b88632e16d21b8e6bfabd577e62689ee6e4b33d560a96cad8d974124365321ba70eaad904b32b32ee9e01cc7f963395b9edf880d6f8cbc1c2aef3a6b26486c0a4703a6962a4858ca4670d9dae94fc97ad62171352ff4476c2a03b5a26a6cf36ce6f6902a36fd9ce5ecdec85d8e7784ae023e4500ccd44b7f356632caf71511a88fdc96f5c72867bf99a00acbef3090a6f381b938e5b5d47c768751d3146f94d5d4b1c0ae79deda64127cbee49b1108dff794d005729c50a9553d8f47ff657ac5c9163dffa4b66c65115e24ccd5340b4522ff4f19d9384d2be6a76141ab09182d5a12249d63af9c23bccc390be7e47d106d7f0295bac0285006c156f5e81718561903400db883f513ca172f255585545cfab9b6480c0293097304632da2b8b1fab35004b55346404409a1465e14bef736fcd1521a3ecfee344388cb55dce2e98f86fe164982f6fa046cf2537b11ca856f58b4bdd2348050d4477f02743a27bc93b8badfea1e03b19e5238c7c2baffbb029b5a0ec53b49df624a4434facb44adf2c9f5a98b784701a2ad3de81358075903496ff00eb06296980713b12a71405504011e0d88929cd084bab58e58254a2433d4fdcc01bff5e467b3caae996aebeb789aa9795d190813cd081e489db642f4fb907dae6b3c90b5f6773aeba76fb415723f4b02bfe661d92f7a79f0c05ac5b761a0c8b8521e067190aa5d96e64793ee0b44fb7349113a2dcb7a4c461390c8abf152f75ef218e3fe9a80b490500a91b5196d2cdcc1d040437860ab0c3997dd15697667e0a40fb9414fa461286c5079fb1a46bfce5e952e8d956489a863240d9b7a2b7c0c6537ecbabb2999980b27afda91f3c37851dd919fc4cad9a4991cb87e5842c1de500634ad41b7fb80e995a54ff5f61c3ab6765ecc0145e4d857bd7882fe4ffc2b3c9fa276a4c3d6237ce4966677cad33e58e27f29d0a788f5641e25b3683b15165a38985bbab9e5c240d865ae6385de99333cd00f33246efc8317f19642fbd522f00d882ae5fa7eca2227361d7ff8af05e4dc90e5d9884b9599513a0d470c4f988b738665de23f0b1ce2b204f1a120e6d58df7783fb4bba28bbd8a75c03fe6ce39eb803cac0b4b83d2147a5c9ecdc009d2fe7933195a22fe88e94900e6e5d0d91d258b40e2f42258b6857b377c4cfda72fca6105c97ed8bcf86ff374b5cd24767a8a2b05fab54dbdfa5e772d1d8fcc8a8472fba05ffe1d5f3f6e1221351be014bd73da9e528aad5b5317dfc5b023a44520f2782d1a4ef9092983b163ad495bea7a1e3fd8cffffa31b845fa987ad711013c747ccef3e9c9a6bdfc83d9cd8022edfde359ff0193c9c89231a91454efbc17fd84c59289bf85d8609bff3f8fce44454ee6317e6cad7fc056b3f3e540a0443d0cec83c72eb33118386519bb915a85392c5df3b270fa1ed5b4f963d3e58b64d3e85bc98549700e8a040217fdef26b756e9178404f5440018ae5e1af29b49d583f2e519a8c5144748e2945f3dbea38a06aeef55492cc5319c7fce389585df230fd8186b725c6348a44781c98ccba3b97333b704d6980a9e5269922f7430411b7fdeca0ae0a8c14da370a9f0704d101a426b42b354fd0324b05e046d5900f7a63ceb15fc7b7f5af71cf312e4aebb087119468f5ff201fd848bdb38c504d82fcbc40b1ee6b3433797e7dca05212d401850a593b85dce6882752e91d2c5305d7b8c211591dd6dd387a8596745deaf63584bca8e89b2641e0843d152344fd0532c6cbb87c355999489d169f4f222d5bc1334a4ae7be6679c6fd9987dbe07da8a2e7ea91d63604b13db62801f7eaebca9998a551d55e9ae08aa13e85a281024784f76f7095678599a30fb46c0a42a9921938f380cc0a59eb1c7ffb023dc7748c3c210f25996a4f1cdf3d625c8e99aaadf508aa9b3597aad7855eddab828e3b546a4c326715f34c70e29c7f42f394d045750ba597967633ca59595a353b82b09e7e7784557f9f858efc53eafb20f7d0eb5628c59b15e34bb21d6cdcb372543981c7d593f21bb7cb7283df35d0dd27224872fc2555e81fd93a4be61707d28e1ca8cedc3724a2b1795bacbc41adfa2bfcd77dcb195f787fe02b552966c4b5a0c038549bc91e40200d575067645bc30b5f2fbe95be784cf960f76eaf1c718d5615c100a875396892473040e866ddb0af95074ed4573b2f3ed95f99243acf18fbc3062feb2b221c8611b06b50c195cc23a509ca731e872cc9ae42ab5bfa674aae7000061cafb13d4226ab5c61f8f34b86353f1208715cf4e3c846a149e763e5bb87bde449b639175483da4817749296594fb14095fadb71e948c386e08e11fb897c3c87cb748bfed451d451227756f4c7d360ee879dd89e38a3169d3fbf210ed5caad877bf70d1b66fb1192f9c36a68cbbf2772d2e52408e6e70c6981e857307ff8fcc176cea6dd49c018a9c779efcfb8d1e8750dcb58bdbea2ddb48290693e884c1090d58e72e4085b5358590476cb9c97932a5e8f729e5449446df38c90f06c3ca24df0a26f3638619311bb57196572a22f154eaacf1c3aaea465832e006347113cc33bbcde9d4937cd0da86d5035684c4fcb74a514a4c217f542caa8b1ed60337257ed660ef7ac226e192c6e677c11ba8bd1361d889bde33aa59d22b6b94da43fd1efaec64b52f913a47ec0905bf8ec3ffcb0566a501976b6b2f55580dc64189bc1bec604926252b23d2deab6de12ff09b1bba2fe20956f62c01594f2a3395e40f6a5e04a4e0f2d39bf409bacca722824de42f03948b46767ec410cb6a399210934386c32a35574c0d6c9c7dc163f6e2513d1dc31797e8ab30b82c1c57352e6c4917d8d4f78c181ffb22a4127d86c9b248f6a277311d4dfd01f54c27f8e3346f7ca9d88aee0c01bee82d21c34dafcb323f3542a7ac8d215b95f855d6b51ef74a949778a598a6e6b3180229f6c968a714f343177b124d660db2ba444bfffa4ccabc72444ed83a77b0db0e07ca967137a46f980263288f51c6f27f1dc14725c1819d9706c23e7aeb20a5fc4a431cac061d7b27e78178814f3d9cc5762507a5f5d562c85ade7966e3d6c5fc416ad20fffc6b01755b445cff5942e118ac1f5cadf1a65d8996675d670023f3bb3a63f828452849d3127f4d492b9f431035711ae8506016e1033643d66b01565f074599722b2159f042dedab2c9129617702e90f1fb2d88b9c09bb9cb0a5c81b502bc4b25d7a343ae97a9a49dc79f48759d558c734bc14821b08df23a4eeed4ee627004d73b355f328a61e7613f02fdbc67bd376191a45ecaba031b724f7f4ca98b35f7fae03d20469b8f244291c13a7ad618d74bccb1f72f1e1cbe239be95504c648730ea0b3f49d5f6ee653095caf155bd765fcf263c928f4d20c3744aee3795ae2ca45c7bf809da8bdb0e58ea971cc61d2ad86ddea101c733eb9fefc005f62845524473b9b15d8a60c89ff08b95568f480f90b87f2229b55bcbeaa2255790759011873e630ef4278d4c092a400efe9732ebd43822b6b429c2aaa531b5a83d8bf00beb8092c1ec5496560f611214c9ca861bd83d05ea5d86b6460d37f84018e525ebc1fa87c625cbd93d999b2df13377e2f06a925677e8aeaef7ae3a1a72a9fd1b1ef3928e4ba98b666616ce56e8fe416de396151565ba02505e94e0b38e8b06520f97bca4579c603d135c372771cc1be9617ae7f230f834414bffba148261b526497131dbb49f5155c9db3a10049b6be8d033348d7e9088cd2c8c90c9f6db817f1dd91b1a2b20bf5402fff0e9deb5f08f70559d409c080696a9dfe48da96938682d8f4965da49de2466a82581dcfc77fcc2c5e9a2ed64660c694447731a6d7625403026adefed2a66dc882acb4fbe48ef73dca23dd4566a24081b7a8917dd00bed11a098ae4852e62f746ec093cbea8b2594092041fac73f673c485ad3dc3627942202494a542601d886e81ee018345a2f775d5c2cb669d662286c8918661f78785fe14e60ec0faabce71d5ca5c78f614184fe65840d177ee3a79cc8de0d2d0932dac50c850568db0812649529ab8f40a117a001b026ab9c88a7da617dd339c3d48eeeecfa17e0e25cedc22817dcb9953ee6f85b6c82382150a3e18dfdb1019545b87f6f7730daf494ddf84beee9e153f2456370971f8d64d42888b2016910d6cc8f867318283c70259e3566d6a74d84c90eb84afe8d06bb911944b2a2ec3b169d2756bd84c2021f7dc4e1b028ea3c5746718db07c7e0122b3d7067b53d839f18f982f5d3222b8838c3f0dd44459a0eab9c1af8ffe3657678a6fc122e5fc3b805d0a38696054451fc49b43aac5a3a95a118620a69b069bf36eba2f2af41c81e35c5fd6a0f22570bb3afeb7b06061aad5cc08e076250a2477aa4cdbfd442822082728efee8836d403cdd683d713a92a5ac41bff50c9806be7e0ba0066c8b36fab0969e2c12707d33be25100b4f9f4643e62c8c979f19e5bbcd9156f4c46668becbf2fd31abe44b0d39acef5a0b8167e68df40d2031b047d69a89d02ecd351c42c0334fc6c918c5d901cb64c83b6b3d96ef73ea2d1f847504d34045ee179ceffdec34efa990c213e2e24a27b953b6af66aea42d0d16cd3c3b85985bcec935b273ee96caa33d21c9570c99cc724e1fc83641353d76e7fc56785f8493b0c8a761c7929bcfd826019981d5760153c6d3706d71baf1b6718ad5d68603a871b9c9805a69b4ee86247ea1a7fcfc79404279c33e68d546725cee62e16c90c952b8562358b06cf3a552be3c87c7289f98fe2b6e86e6e2bb95fc80f28f82bf2fadb422ae29f666893e221a4552df5acba4721d537564aca0520089c6f2ac8ea613c69f9f69d0f1c6a1fb01cd6f10b94c2910ca94aba1b202a986b95a9b5acecd17218bfde1a575af83ea419f7ebb1796b726d2efcf8bbe5650af7efa662e1569e6a22cb590e7cf9dd90c0d7bbfce0b2361a4ea0ccd166d108b711f50fb5dedb015fda67a6e25a9f8a2df1bdcea5d0e5d2153496174d2ca76467715d08b8f7fc366d01fd4e2fad177474a4d231619c8c727f06cc2952a6c03f9628593956cb806165c75b772a6c5abb5ffb9d858bf1488da58206d4afa86cbb8e12e2f2e54d35637724a46a40b208288076113282f5adc36c700dda1beba5e63abd3b38e500258bdaa5e6cd273de23e819320263e2d284eacab6c4d003c341d9cc815d9f57a0aae03ff92a275c9fa5047345d4047d899644217b29d9405ef5a8a774aa394ac10135730522efa72fda19487fd487b0eaa052cc87e1cf1888b0dd63c9b462a26c5a43434f2feec3fc50a5f8e84a69c642bc081b02351fabc77afa4671c044b81c55839f7bb3f74d5c215ac12e18fd18cbcaf9e4e639d86ccd25d097874982a8dc5a12f58640e18b8caf59034eb9872e07d112bda1f223af52fb16bddcbabeb8ca84bc733a6cb835d4573dc374bad3c07946bcb4a1089c6760025f2b88fad35c0568f8ec684fe6d6572bda5cf139b79541bba4d6e217c7597a7f4081d117218e4efee3ed07185d7d903cfaa315d0e2ce265bbaeb89ae546692043a068e5232b80231153b0e2a3e98973fa4edd5e812437116f305879933c5bc29f3eddf585d149f37696b9227cdc9d2f846883fe812a49df2d867295743387596a8f95ad90451c31f1d5ece50863a842312397c8f9f5d2285c4bfc66236256b9c6882e36afd077478004bfbe43f2776116b0c931d60d55414067ffc8d074ca7ed4bd67504676a1ac5690b700655c0afc2ef52039187032c2c75f8408771e4c15e509c67696399cb87a46acdbabe142459fe617e5354703fdc0be7b55410317edb09657d7156af7642cf33739936961d92ff9aa0ecaff18fd2106e959740eeb3a227ec3760ee0869440fec97550776d45c43415173414deb51d1d6149d7ec6780c6eb3f304208b4a4e991e3c6895249f5240a410e5f4b0a69907dd1b3dc085d881ff66fd87bd8163df469f3a21d96e875c16eabea4564afd2f8fbc0611c9d51c09731d0110cb66c1038f277336052100fc124e11794ea7d206b722e34818a677979a9ab72067a98029f0942cc9bbb020ed85380b9d516b1050967f5603ea0243a8afd8823d4c2ead852c2f9890bf81e7f0669805a99db7de33b0e37d7d09ad0fac820e16beab366e5ca50cc40bec14da815cae0215ea184a11f40de4f6646896fef094a6133f7daaab2d6df2cbd35cce7a02a828f8de990d7c3e09b8f0f589d32ecbec49490be4c04688c25a22a18513882ff01319e12aaf75d8fd8d7a65ee9c2b61b687fe69ebd1505be1661cb19520c7b09d7c037c3010364efe87a382ee5993c43d5f83e64d32d220bd56765bd4a453f7581353ffa39ab6b10c7dcb7b4166e0c65d11e1b25482c8b54866ee6baf6caeaa24de3dea128e6eb0d98dce9bb497a1c0c62ce1cbae878f9c4e14bfa29da01a6a9f8c1782d80e60bf6c618f4e9a34dce1c2fd1df3952fe9145075e354ebb00e7694e1f340bfaaad8894c19d570a282e2648c8a13c2d52fd0c9cf4f4859d534930e35969a3faa37efb51d74d1a9415d15518c5f1f2454e4bb01badf4862c29ce4f34c83e904885a42db6f1ad8a625fa8fb46e56abaea78235cf6595f04efa52bcc9eb604634229a746a314eb47a7a0e1d1ac50b37c938d0636fdfd1bcb118f69cdee285da0709dfffc15c4a5dad595ec65ff1ddf2762b2fa53405984d92e5791ffb089994d8226f7ee5d2e8d2b03c1e548ce2a9dc2a2b16b2e2eb6d26cbcc3efdfa914cd1a77fa637b32a9484dff17d56c81ec54b39cde809394a5ecad2e569a3436c71cb023b097355b98fc3fd59df7e6c28346e1acaf0d5a3e8a302fd3e92335c1888484d301da9b2b228a73a91cafc9931e0adb96493e5483b6c3f086a954d43838d9909b432c6790bde8d20ccaa7aeec9dfb02d084621624ad5f65e7afeb7f67a88c4c7fb25a4698009e974eead1555f77cad77c1fe9e3cfd07b31260554333d852d9421910e6f664c674bde3d88f6d041912cbb3b5c13f86e6d25e46645d824e08d1bdc07242ad61f743e633523ccfffe8a0c6a99f3588d09b8d3c33e4b77e756009fb6a0d5c31ffce02290a14cb6430266e6173fe0c3221eb3486ef0f01d9d5d71694f92b9bac70cbd363666587edb8ef03272b5de4cb68bb561a701d7eedc546c87aabcf609b1c4292c21b00af54d9ab129e4a77db2a2a6ccf858995693e650a715ffcf7c8da394440c44f3f4b051ce771a190635369bb944d484054342fb03a52d91976d9cb6119e026b33f4a048841f421cce3f7a1d95d1949590e03ec7c26bc0fb9fbcc923ef2a797023d5383268ddece2e0d3d8719ff4f4512cae1987c54da67227d729c5426aa62cd2e77df853ba347409a81e11322aadab19b659e5d8f2bce3dbec1a8916ce90f0ad99c354e172144d8aa40f619a672af663be1d3a21b0760445675828209e19562e454b122c11ca4aa86f6622e7f088d2d83f2125ad25da62eca8646c00ba6b7068b38c0972a00a023bfefd9433d62fe9f80b4e3fb3b4935e4d4b093e3c9dfd060e91f4b757ab9eac28026edc812e3080d019d14a643206b7454570a07a3eb601eb87524004a8eb495cfc272fdaa4c34fb2c5800352465903df60c62c09f39061d3e258200339b464580045a140eaf65e67a27220da3f5553b99506dde69705c82764ae62f725bedb612eeb97ee6060257239a330950abbf5deab9a4fa06e62a979f838f5b45b4fedfcf00e1333665bfde7a4fb3cfcfa6a8927b2b4afce92901e99b787c381ff699c8f24c02b1640ddb1f1238492a3b8a2b3cd367701e362808b3221a00655c55535520e9be789dfcb5966825d4590c391fb0606c5635ad99d7c8179d519c2a452e06d2005f899ccd97a45d13d84cb2221f8589b8f4db78789e2ee0f3226d34319c2faecba0afbbde6e17c5a88a3b4106a56c3d3521ceea99f5639e3ac3884679b30442920aba9b05f8bccf86657dcd531d582cf041720dd4db6146af1b45ec829eef23a376b2ed5825115d826fcb3741a875543ae1fb68e11d230c334513680e7e3527e4e84a826ff8c4556931cdb89b67f9745fe313a078c2d52eb19f4ac5b0d5383a4db7a871274f15369ac6fe3ed8ad7246a16992ac567a024a3e6f37ae97ef5cdb15d427cbab2a7bbeb59968051dc8f6822d34009119e49759f7c3e509bd594fa6a7fea8d05476cc84da803f404bc5e3a04ca14f6e5c552617862374945ae6e6e4110577b0c8723a1dd20d9d562e54d98b089c6f74fcf276bcb76dc82dc210a52bfa8541527deb8d0842dcbad27edc4a50a81eb9f7bd21aff53f4e1dca4f7c4baebf278eafec5503e0801f0a1164cc872300f3db53a8fd33f87e20a60fda2446574fed9fdd5c0e29c1be35fac1fa59f575178ac66705a6aaaa623b6ad3244b724975757a406d28e3352dbafe60021b29863241a63e19b385d1d019482803a854f624f371f74ad691c669f253f869bb7e65e9c179300917a2af1d8822e19ba37a6be4770fc1f208f6a97595f1e183fd5ad3e0e463fd7bc2f795b52ad9816dfbedc1254c18152aeb021c5c0b66e222d2ac809c99d4387c418fb38d23b8d675fa6c80a7f7db2ae1ab39721b6c6bc3e11d7d5eecf1d8ce7fb2f7ad9811e7add89480ac5f28d9bbfb8d7815c702a5f3894c2e2721331c4a6da75a23885cd57d6f9e4dc6bc86d07ac76f375fcf0c951e3c35ec9efacd9936afe912368e4fef2783f0939c9dd7488a1c9625134a57653a70caabc69be2318d52afb462c71f06c56ac1e4d6e8ceb787adf65db0584b96ecf27fc409ad7f23e8e00c045aad651e5fa6e8d1df6989231e2b6b28c741e5e57642896a207bde6a265de6cd589c61eb2a4498b36e2077747530edd31fac5d75d10c0d43201b2904fb54a2116271671e94403c9917953a03c8453a67fc90db2b59b4cd03b7ce19291af6c4727c39c9725c2a63d1728c66772b9d83678ed2ea1f63c2eddc024d5877c652fd375316c4133c70e67e6a2d3e912ef1c9744eaee1c097deb545b4c5c44f57b0567dca6c57b3af72f9573a8f322af8b32ceeddcaac0e0855e5963e3f3b9fb2127b0455fee3f135475aad0874d127929b990e28d110158e359c6110dac241753bf7cae8c203db1637f77176d38ea9ec64bd7a2e5dec2988204f038c281eae404484ef6790dc326de1e8e5602de33627e1aea9c1a4d67a236c819796b6617c1ec38e8b335394448ef78a573bd0f80bae74a4660c2c2e64e8051629059bf2a05170285bcc9af3a08be6314e2a135522e25dfbb7a30e3228f0a658338bd681f9a69dd4fb7dcdd2ca7fb07e6a3428a7ea9dbebf3225a5e1f22ec38f585940544aaa021f7e4cafcf31843d91f00bc2db5fa96fc4dc171ff642809445abcef2322db81131d30988bdd10c41cdffdc84cb0eab164310892b919170c52d1a6342c972b87b2f9eaaaaf8f036162d92966a6d6d2c3321d62c7fa84aff2b9ea583abd3e25db2d6114f6102c39d02506be8cb831b16aaa579832b3b55752211842d4cd9c1167ad1a4fa0e0c1a93dbca8aece1aee95012005adeebef0ca086247dd900e8805a9b5c14b183cc3cb0f32d5b501591ba9b4a2d0a224e648246c1328eeace36fc7dd4de8656b880af05cb7c3ec5c37c2831e7f8c38b94d3146a25975756abc76aacceb5c5931916065b4ebf8ff79def02f0f4e445674e5d3ba6e8f4e80205d97f634f409f187899fed869c5fd6cde6baffabff587b59d416b1d3f426620dc20e27a35bc5f617505f50c38881bcec552865098d0985d631a75c36d27767845ff689ff6a999f629253785ef3b918d4ea74d684a2e49f0f932da2dc48cb352749d8a723d6a7faa9e4dc598ceeab8f2dca5020bfdf694854e7971fcbf1c6466db3ff666211d25d0a6bcb39216d73c28a98b72b8b6c8cb755d0eeb03c2f82c65601cab193ef3f79a80fb727aa2b651312059e48a7d5a170bb70d0873c3d85ce2a88a8dfeb0aa9824f18c69bfe2732993cf09da93652bc2ceb64badad7dc76a2c948b94ee718bdac835888f1d2996ecd8eee90528549fc97a9d5c6887eb2f3973c43a5f558f7ade3b7e8e5ece7aa64714fddc2f8da3fa5aceb31c4cb3d4b8837696746595ac8964ba2b92f0451467fd705b458054125a0313dfa793d27d5b2915a7707cac5d0df00e62b20812f06899823d89de027d45ee1fba42566c5248057988bea7a2832c9d95beb5a2e6e6474e790a4413e4171136fca21dc87fe66e9d6105a03222f32268478919da0cbe112ec985ef846432cc3747c705b06358f1f08e83373eaeb615938eda576a14f0be7a922fb5b53384e653ecbf9002564fb20b3513507ba3c7e3a3ca011eed7ee425c1f5f94710f53f7ae5431e3fd9104b73e82c170b104f9bfc0746df3746f1f28afab30af2ada47a1edb518270738253809c965cc6f335c0e8083f3b37a2ce2499a074331c37babc1b379472056e69591cf1fa068b333e84b130ec20dc363df4e2e93bcc951532b77b5bad9fc6537d3c430acd73df80317124412501eff8973f26e7ae78fb3f671aba74d44f4246dbb0d190e70da7d0dabb6dec450997192ed552201af45eebc14e61c59f626a5f067cf63a8d29c07ca388cce1f688b3a18f1c747f3a88881309bcd30768053a9904cec96d154a3f8aacb69e7eefaeb4f84209cc8a5cbecaef580459700f37aab4d84d74bc9643770fd0174253fee04f02612108fee0861a319276691fcf8599550165f6aff2f8b6bf1897dc4fc8bb54509edd1d6a487664398eb3b0b3684eee3d0a4419fff61d6d77dd790838139ab99cf3b497f923b1fcfcdbac840a90bec01cfcbdb3845cb499b9217faf1b8a5b0697c03ef9c17d9a11bf3453591008db6976e482caa74512701fd08076279cdb2b924d43dc0907f561e5c9f8b1e686ea922f3dc419ccc3bcc2cc49b292f8e5ec4b8430bdb93969b8f39e45b8c6598a104857f7c08c156bc839d3660899deaa2100550ee0ce062b49bfc2b6c20b19d28f228f0b3268c078d80b918aa0f07783f83f5528e28d6c801ba4d8adf720d06b8d673043b5dd9e59f21b0853824f1d9b019f845a8deebed648d14c4bb1d37f2e12dcb7058deb35347ca4b62e54227b52beba70414c9e2dff722abe017b53745f801b32accd2bb1f6a3882d4c4e1ac2cd7db0352392ac1b075d772ac219b89710bcf9f2e239c9e109376d5ee2c03288a320eec927a819b3d4a6f4e5d38c07d59430f1370d179452c3754c57d12646ef6fd2590a61e9e13afde2a6d81921a7409f99dc854e1fa10febca2cfaff22159cdde9ef6b26014a650f71f71e9401f9da624667ccdfcf8436daecf1415083edfa6f7844529dac0b9c728236c0f135af4a7a4fb9d972be59a8d213501c79b0a4c450bb62f225baf9dca72028294e9101859f7423b99882ec37f316e7456ed877c7850f3bf79a79b9dba9699fd8bde84a04f33591bdbb4a1650b9c4283cc2f728d2765ad8e42c3199ce980930e3f3fab1eff91d478a95a25e6fe66e167bba227b3603dd31217e7e07ff8f92b54369ed1a126907fc222626ce4b01758a3cef900d4c08e95a58ad25c9b5cf3447b522047c10df3870afc6c26b0e97ef7c713a363c4c018b84fd4424ada9773cf0d96c0e71b1c1398ffbaa6ad5caac48a9efc5899b903e513ed1ca90391767d8074858015af924e3d1b391966a4c3cca486e3940784d7f2940ee13c0badca9160733de9e8ff405d2262a868124abefa3a569d3ec4c2a65f1f24e9f9853f611014a06b41a275d3ef7a7712c070f674f9b80c4cf35395427f7594e356c3adb29c75c43e1fd62f4e7a95599a6ae6af82ebebff37c6dc27b5b2fb24a28915b44b25c76ef3bed9303191dc8a02b253cb26f2370dc95be254cbf6142bb60e0aad4278fc69aa89441d837ce2b2cbea69c66357c1235186d7cd80d894336f633ede3e0ce1945a5324c08891a2e5f0317dbd2d00c505275be7c29852d1fdff941df2350a89ab71e285bee9559d67df741c26ecae73e82fb8c55f23d1faba7715a7e0777ef848d4c4aeb5d8a61e519b9feb80ecafe68b30298a825bd299ea4c37e733733820a8dfa8e4c22ad7e3292c46a7a02989456181ef7623344047c98b5ada2cb31edfde22f96051d75c9f58488a45b95b0debeab5f7e2fc5194cc75cb3607174172685cb127ddf7e43c89f73c53103c0f32b6191c343c7a7a65aeb668c616ba8f6daa299ac0dac067717335c4da7c80e1fdb97c7a9daa545679a56646aa4543849ffaf233024b13f6080f1668b7e68576132c9ce5259a47a7463249bc3fab4333edbfec11c6aa1c1aea127a31f2fa4aac5eabccf2e85a1411917827840ed6d901accfba92a046650c2dd3cf7fe21092a89bc193d65c39959fd2e2ded866f703765ffc500d57224ac4c87eda4e77badae4f1a46d143bb607e5490e9eba9f406c3be30d1b69f9fedae02eb9e7133e30a5bcb6128b80543f806182250a077975516aaa9a06b23f39823f68104cc9aac64e6fe091cc1129921899d3968a7307c56dbf6160a46bd5e0657aa876b9b3f3ad25b3dd23855869c5504401c6f5f43e364a9083f696e88221daeec2b2711422ca91df0667a89f6a1243cbe4bb333af3498f540c9d1166d4725e0012a5915d80611f5e4a2a99c097f768e74131b13f0759af7bc428df4d203d46cd6a16d9f03222123b61b0c934d87765d91f635176b9c0b5f2a69ba461beafb350abee664ad220a89329b1888162d49cf0e2a517b7b0558bf3823e1439380a3299340d8695ba2ceb7c33844e3f709549e9cbd6faea111d195a43be04acb2b3192df6b91c3ab272841be08daf3784e74b72ef6cc8b73113c8f2cc081463463b50644864071a8847d2cc66c1604661f0be96171f579e156b105064e3efae5722da118a48a90e20a0614805d5377c404c6e24c52f1f8e3c335ee0cdc612827a9eb3e1d2db74176b7dc570abe02ec5fd8bede37e29ba70e7a48a507ae6bd333c92654992bc5853978f3e540ab266e4bda7035ed84ac7c048dfe274f240a20b63d480c28cec358d0ff8af88e768c6c98bd09b86f9a07e314270590d6951e0d6b60f118bb2b90838835680b517238bbd65beb1819c8f2a8415891f7a2c1dcad09fc47b742644218ef4b6948efbf41c7e4037d22048dceafdd4ebba76e21a7caa6c729d90def6643b75ccfabbecb5416f92775fbdd54c795ec82eab3c0c0c52ac96ecad07009f938b79285f44629d93a528208e5b508d442144907e0f2bbfc9474d661c0931842b5389bff7969946cd1fda52104a8dec0668a840c986c8ba44bc4bbdf9dcb11f948ec9b490c9cb65df65939136b8a78666a8a3cb68d65875576a82ee1ea691c14e8ed840d9bb15ef84d4c06a10a9b7429df67360d116c12d4c9760c2acfaa9c347075c09d984d09ee51ffa0544623d9ff75eb2ae3871c935fe262a230d28fd6dcc86b117ca1f574d1dea7d291eb1347725b093d86974241b6e2c01fe865ffd6534604385ada188a4c8bc5efa4e2d97fe9ccdf95a3849f78b53d15283fa2d3233b94e846599b3f02da63f728d7459c071991e079614f4a694540d2104196cc2ea665a9375fcb3219ef5f2734ffefc9517305dd0daecb205d3ce99406669e3e71ced0098664083261ecdbb80b09b7adbd20e127b944a550dcea036baaebf3be898a11cb3349bf2f81eb36f4c53223bd7cb031e0eb1be83a6d352baa8ebf17a432d0c9f144e2bb73c80a715ca06cfae5a4e0a5c0d374cff094566490e9f5ae4e0fc3051fcc2c2a633ee93deff49f6a05aa17b5701151ddca0aa72cc1c209a306f34f45ad7370a24c41fd992c6cd8a2721ea7298ef235c2e222030cb7a741a6e9a767e5f698a9fc70c89437d7ce7fbddaa9aebbc835296003208973adcdeb9325304a1e3af0b0a076cb8f53ae39a95e0af478dc8686fddc4444c12aa00c099bbc3947311aa77099fbe71b6a777b7bdef0193a0375135d0b5085953fe2d53dca1a95c4df7841050d2e93ba8dba97cfb6acdd5383f74bb7fd43f772e3bd4a026c92b929ec30134a17e740c04b1a80d6601a0e058e92cad86f70da874717835d9712b5b0cf9f7d52f1346aa11f58d605ebfc7e714fd86112cd5e8828c1a06857b441365ddb1589f6cc82dcc219db7007b2c1c317ccbf6669dfec21305577c5646843cceb9646168f88506eda18bf4031b16753e1abd56b0e6c1721be2f17876529ab450d5a9ec462142df6312796de3e0798bf4e6db91b88145a1a9070614e8114d966f9ec7215668a2512f59227e6bd0a42ba3b659540480298cf82fe50b61eb8978d1ce003a0cd8f47a67dfda9ed3e3afab46512bb8e917d8140e955acda4876c04a51e426a9bd488b0e932e7f34ecae46f5bb05977f516eb203b8d03802862b379d2aa78d156ceeddb6344c02322ad221094481918ca72061e1d6519843a0f6956f441d5106ff5b2ba5080249902bb595b98a8f7144a8849fca72a90cfb735f5abb405a45f0bfeee27eafb6eab4296b343aac62ef321b8fba3082d8c403ce6184054da9bbbd3254bfda2e1018272b5a15e151f69e8c74efc1eee6cc112032314dc33ad3d3b54478c6ead8a6ec2bf658b6e39e35672da297c840c0f1d5985ec63294ac6332b23d8c31c05ef97b908fa1ac56edef4e52bdd7a807cd44d02565ab3041a3e2c2d8f375879c0512c7e9f7e3e597149f8f8f13cf832b768e5d3e3b6f4766b6e9cdc980687c3057feaa2025c87c4cf4a2c7be753cf1ab80312e972699172a7e13f12616ada79979d64d889db0f5fc20b0e97bdf038de7a5e897d47d98360fda638b2d72cbc9114676315a6b21633708099b87a9781378525034da4ecbd249c924bc10e1e878f09500111521c262deec8851758b65e4cb9660db8d8ed71d93706a3502dc985f06d353d0e9a5f303973e35128cc0165a62d3e715170b615df76a5e58e0a0637a193cb9c9f5f8078238c2c9ca6daa0a08c980bf2564d6ff0793c22b9265a5c920b1a0acfa30cb6111c74560b2f3785ab19403cb61f5a29a646b9ad7600db45bf5cf6286da7e7c8b0e77763c4faac44c800c67cf02b225115843b73889c09f303a3a1d870d7bbf755bbb9738079b4b03b4a5fcd937590130ca1a4878f619f6fc77207024b4d05febc33d6983f7bd6a44da021cdcc470cc500b7cb190bb767c04744c9d4577c42e919842c24d68a2717b1d6c3a742757616e5c2ed5fdd17ff14c4856c83201f87cb4fb043d8fac7bf4059df23ec77c7f6f3c092d5ab104a7a09d8778e0e06f47c69c27eb2a40229a2d717a2d305d5ed53e2288d3882cd3e95e740071f4f9c4bdcffdfce426975e9bf8798fc1c58336aa8ce79eb3c99d0cba5f4433a1427f1a0d4987c0a65f0ff21f394a4a57b0c169fc5759be1701b552a3a3ce45c5e250e0bce7eacba95cbf57f0e7faad48d5e6c088331ef42c570ea188346df498d4290cb0799155ac36c7b68d04f40ef9602cbdc1af6e3b6b0abb95b487da24a4427036652d0c927dcc0649f9862656cf2257fc01cd60442fa79d78160d1fa2b9ebc8aba2917afc6a3756de73a60fdb95c8532026c894b3f486d3f93b549652bf38bb63c800aafc00c0bfbe8912d3895763bb6aef805c8eab02b4a99cfe0090112644fb3804ac28fb22d2355a53ec604cc7fb741923f159a18e222f9f08376ff301304b657760691dfcb41856c706d2a34c20318b3612d9edfb2c515a31282ac8387f6f943405e56ec16bdd45d412cb551c5ee4dd70945c7dfc02c58a582ab0869ede6440350263847284184003cf04a733a7addcc53b855a4d0969ee628df6f761702f6dbff0b6c157a200426eb17c28282283e8e8a17ef98620835e68a3988ea186340f0c65f71817dfa0c250ec4d11efe71c44e8cb4fada806d3ed5d23ad4f4ee949a4e04042dd787d4119e167c24a5238210ccfa96a8e7ae6328394938efd4cbfa0ae625ee411d65d5812b357cda437a0247fd280e45b83d7bb49466a9db199856f4e8074b66849472c4c40a8ffbd1222d6b93feccc7552a6c63d6c6b798e325bb496bfe1c2a9f39ad218598601ce76c6dd35cc3c98571be0e3a08404714ebbcada0ee710d8b6dcfb8bdd764b8609051ade7210b4cb03055a242986038d1f6331821e13575e9ecf69848baa2cb8c054cb4e5462d54b8d6d3d56799dba8a3000cea294d1b827cacee6f150c3f87cf8cf136f0eabe5a823e9adfdc4243321902ebba35487d8022fba3f12b2104086bf3a795f148a4abc74dcdfffcf27cb3c4cc3e7cec74e34d76eee0c3cc1469769ac0f03bf926755e81ac21b28d10bfb031f1d257332f22dceffd89f2194795a23b9e799ca6b2052bf016f7fbae838065e4e308e12273979065d31e2a226300f92cd340381361ea68bb9bdd6816175f53613fe19360dcc81dbe76dd69d52aa4b1e9f7117519aca6cd96759643afe7e72aaa2546c106633cff7a469ab5027d735a91ae4ddd2f1b727ccf0f89343b0619b874032be405c7ab23c734918028e94f632385c21338f19fc4eba310a051aaf1be74b918dc56d829833c38220f0c7499d258d0bebbb730b4f24121cbdc79584eda183657b619d6992db354131998c7acdeceeeb4b39d4a05d9dccf1169ad91f514fbe16c3e084fa9b5284f31ce67d8ddf74ee30fd75c800ab92576d0b7604e4b5f0f573909c6dd57922cb9d517333392ff1b69369dc485ecedc57d8d0cdb5b8f6ba2dde6d722eb4b512db0cf139aec200cd774715e2e723df0f9886ea33671574fb5ff43ffbe166476d3dc77448a4c302d8f930de5852750ac5225f8b702f4a28cf970a19400f4e6ba1d6c0ff2de48b0cad472d868887d79d86720c01792b19cfa9ef68cf3b26547c3c2ccbf7b049325a2a126bba510e69def010009dd880a3dee8884523d381558299ea8cf7d0b69e1c223dcc8e4177208f72e752de103f9abedb15539c6e95ddce5b9873a88532c2380487136c3c86f007d032091fb484ae7c088ebd02a01541ad6c64813b6ddda41a6658f54a48b120d982fe18d7b789252ad39931887500651d26d1ae5a6ae40c0ad55298283e949a71e07fdf82482334ae4ada715aa99ce4b8adaba5517433b01bef913eb034bdd5d4d397b36aac64f9d0e817abe361698ccbfc908dd0a90897db3d89eb3ba47e9c70546487a2cada364911f5de4b6b588a40383b7635e0e05ee784393424f2b58cdb196d6145a68c5e2bb24209114684734ff9fa7ee25659bde99bb2e22f43bc3c7924e82faec6fe76e305545ef2b10881dd1f487fb3fe333378b8877326b41ae16f80d6bcce231246fc927b1d2858fb8676e2549f4187189d2c2b961e23d37a311511a9dac88c3d9e112edf2941587680f752e9560d0d2bcb623281629c4b833b45ba0df4628bda344b1c30c46979d929482c4ddc0727bbb4f17a7c012c06d697319342f21de238a7214e096d7c6bb93e207595e6064def77f06a666f5bfb536e7c0bfcffe32a19bdd87c2fd3be0d3fc458413f4531b60e6a47b7f7f10f3b7fc8af49c930e25162a0757c438235945d810f0f8fc4a24ffa79fe2ce93e3533ad3d6811ab4640f589353d655fefa70e7893feb13aebe1005bf990c0f198c30a59f51669a28d967d58b07ffec8ad3955bc699a5b74d51d56e46e9b920cc2000ea9223494a52c61f70814f38a57045d67a3e10388e5b8ed8f87720b966240a7862b3d5364fe6fe447bf785289ea82483f7aba7f67a9477e00ceebb4284a6f68342ad1531ea84b407f60053ada43a176a813e88f2e78c8ee2f0633692437c9bf7f0fe6377dfa7dcd6ad86098d55a8f0f2c4bc3271fb3685eb217f49b3f9669acde4b6997996eff23ee136eb30834f6090aef92236991c5dca62d584274d05af3b07135eed7d9de51482bd21b39144b482f04c0d3fdaf313584fd09839fd51b9dc7e01dda37867db3377d48b5e47bc30c0d73884be2eeaf05e05fda14e1cf0df6cfc850908f05152372d878881557db340a82820d75414443676984025a5fb8c1d9f901c4b76d296a6361074e49fcd9dedeb75bdd8bf65bc26d2416ac772fc0d3e9c8f6d556fc38506071c9e99244121881c34718c682f607a6a6bb57a02ffc08d69cb224d039066ae43b3da7616a4843feefb0289db2428fbe09bfa2bf28251301b975ec9d5e70a58d82e82cbab799409503e4964513c98e2354aae92b8c1523d66d6d6a1b2c09656e73ed946d8bd1cfe59b89a3475fbdb6f3f7483d4152c0f870b855f54b5fa6a97a92b4c6e7205fa870b680231824d9e23b790f9dbc63ff0c2feadf4fcb4ff31385719240d3cbeb0b0f301a604e0c008757b9fcd11cad1321bce66cd130e145436a861bf3ef026d481301b16fa69df462b29fa6e94b0d1d7443956ad71c0c8fbcb24cea89018929acd6acbb5002d120218d864de60e26f510c069639b9850d0d47673fb15ae4709c0850f19262298feb071b9b16c730a3c6a76ccd6558adadd3707341fe86fd63b477d024977f814a834323ac0924d7a605305681e3bd331eea13eb3bad4f118cb503c433c7e6fb189124a2521c289860680e8b31a69cbb403eb915543a78e3340904711caa13e23cb0f896232df6a376611487a96ffae40e3fca95a850d95c0817874f069fe89a7f6b0fbb8a22d190383b26dccb4ca833495343ad312e1e20c263dd64cad3656a834f9349f2eb4dec74055b5b3efa8f7c5133113121a0a238454435945639a9b412d9390caeee803be9afbcee70ddfc19a5bef00d5d026d6d1e769426944bac29a394d4e7fe57ab76abb09eb72768bf3644b518be7fef809b8535838f93001b3cb8df24ceb4eb0e19440fea0b2a32f20790f63babc0e97c17da1c3abd791202dc7ed1f1a96302b7631f37b98d4f839ea62a5353a2b8b549668faa717e13577d7ef4a1ad3883c80e4730768c7dd1a9b1defc1d1d995556911ff307a35e8c24707af94f3847424460c9a85cf9ae583719fcee4a123d1abf11d5f95fe756c9b9dba524cf347db7182f470e6d675c846311bd4818bea32ff295b74713c21321acba521cd7091a7876a4da115e9b2d083701c7958ef0fbd52aa652aacf8ab5a5d32231ea55256ee85437dcc287d68c071f106abe0209bfdf8b3275c2f496981638781817090aeef8ed7f9df0227a0ece02234e757705f8de92f743d47d5a46636dc921d6d964a4942913a198ed89df465491a27ec29f58c8723fad608b8d5812a5be55421be5fcfc4536e5f71b46fb303cd0aa0c2423d9726ba9b1e242cce35ec5df76a2ca13c20dcf78b584093d981c3696d86c65d2ecb0417fa7d91fc7f028b076c691881900fb98294dcb1adc8d0f319b8b26f14954ef427480fe245b505d9ab496421924d6489d5cf7ec8b4ebbe5d94b2dac6c66546c59c11ab88f588262d68513cf68926df8679153b57ca1a99bc387064b610c2fd06ed517e2e1df08cb23d2a6db03dade1fcac6bb8e2f9fa5a4ef10350a8b15e1e32d0232d607e548ace592e2829261b54be2d4e1057e69fd9668c9e6edd5bba95cdb3d199c4ac8569345e9ed507d13269c87c4d0fbe52dc46b0fd74839ae3156a7d4b40f121238c47850a842303c72a3626d80b0a1611a6fe21dae8495fcf176cb8e31363d1c56e72874976e5c485158e01014074c4062bb748666884f12433cd2644f67ff4e4db28638be81336d5457d03d5bad768f8eab227085e2fdd7e1e521d7994917a6b4270531eb810c68306a55695b62938d958e82f5664d05a383c15e2e072f4d37086f841a263f06c911f68d90c6f2551296e1bf383d792989e148db66a1f92cdc662c2674c474e56c1f1205bfbf4916fd30dc86a0b6632aab1ce5b9525658c6261935819676c5834c5039effd2c8166d8fe255528d0e3daa0ed8250334434050d9ab5206912ea77eca942e095e919d93fb26309d4c70cc0e9c5d9ca347d6d8f030c070cad3d1ac6b5106149fd3f015dd80ec7ab707d68a54da658f9c146e473d11a25de6d8ae8352d0d9d6db5407b23058e1987a260cb09ce9044ac78c7812d59baf8e4f357d8e222f435e5ae1a82252f17d220998dc623283c90ad1df6911ba31981cae652335a1335ef96a3b9b065a1e818ce66a4e9b0a769895b784d1605882da6688fd395bccc5531509d8780e3c7eec421f08e9727cc5ebe523b00be9c0956c99aa33077bff08ff8fdb0bed37bf4a94bdd8f73a38613c1760f6dc0bbc44f5f4942a7da572dc589d606e5b5fdbf306d9ed538e3033f249364e20eb19400a24e04150ef83b70e743a7bb04aa77545133fc1dbbca140b1ca91d37b54e45bdc3da50bd9b033d0d4e5a3d89af21493c0d9364f81b1da8e7503d0f93e839ed7fd06f3c29677a8bce0de10bf46b35c453c28aa35fdbd8dd8dcb69330cf90e15ea5d8bc2fa17d95a150a95eda836c3729aca05b0e078b5c5a860fef362737c9aa79de8b9a83757f24da4cbc262601638e08978363db06e3c28e54e23afe260d1f621934363d2b889061023196f12100988d3c34dac9a9aa19ed55f6f05da3969eef540100db8d37748aed8639d0da06f832f2bd403e3b8185c9881e56c88eb77d70d6ad4d7bda1be9039f790cc650d09f3ccda84a69ba1efbaf04dc48656d6e91d63c0e9bc263fb061337ea06ed8f53ad948ecc39d0b7d694fce41ff5a09720c207d2d7108639b380c4fd0efd488a6a51b7ffb4650fa56142a08a98a5f4091515f9bf15b78d103e682da86b4997b01459ba1b20dd81747aaf871472bfa52cda6711ffeaf6a2a45e8b64396c82d0cf05ffa4849724ec116527c5125d766b5745caad502d5e8fdf63c1284c9662144f8fcf2cc2d29aabecc09920e28b585bcc655fb19cfd73ae50c3a3c2944f8556cb85e8fbfeb681697ff4af8952d4a759fb85a9ff3b1a4f22980494588d344b4b38113af008f2aae067072a04d453def2776ae54ce006ce5dedd0cecbc7714b6313dcabf045dd3944418132387c3323c5434b387bf7d07dc932dcb68d21d60608200af427781721f1d830469ef0c314d75ed369f0e90457324ef6ccb68ad96925b218efe62eeca0ca76e7ea4c9f1d63b99dfa935bdf69ecc2a6424fe482ad0c7c1b2df2cdf979cc87b7b64837165bf54e7e9208015b075084459fe89869327ac07e2356a80b5f1837681a88f35f71144cbc735a3c46be4bb26408ef43ea98ad932e09015e069dbba9869a32c99f03606b03f0bfc3309e82769d402c0ddfe9c167a6c86683217f17046db3056b1dbf41fc27e40b8ff0f26970938b31733ee8bdf3a0186c6494c4128cbf0aca63864439de726b15ce12c2723b275b308e9f7bdb63778e803a8f8a365812438958c7466d5d5f1c14630316843eeb47d7eed42cdabd69e65746c670be81fceddb11ca0800d5fb71d429781dc644b9d86e55ddabd51c89f327cfcb22bbee72f15a4af465e2d79968e25c5e10f0a4a68a5048b47cb7792013aba35f75fc68d9222f4ace529ae3579c85e0779d2d9d09efedeecb4c5ddc9f659041a124520b7ae877bce81b48fd338d3b92eb8579f91005e1b642446c4626507c7745b6bd7588c0fcc2494cfc008d3f3863e58f8e9d095a5f1ac62b8c70513568d6a2168c66f787bbc1b2855ffb335bf378605931336bd2aab55a175a25870fc3cfd368bd5e9477e96f2f513907801c69f3923fdc50d94bd8f9116fa81d70dd9c422e2f60bd37d965ddf4c2ee1e871bcb14d099c888da13eeee27c6943e46a22f93c8b9bd1426bd25398203fd1585d3424b7d236677449508b5b66df470e38be2090033cdb2828a76f0b7eb88dea8a60f16a0cb22e773747006b24ff582ab06151f095a055bfa1174f837ecca6efe0c625d5e9b8a85babbe50f9789e484feb121b7399e3a061cb1d648df85bf8270bba9f8a7e852c4d0dd12261bfd9a4b138ea6958fa26717e35d0cb8e58667c5a48dc082fa6135e70aeeb5e8f62aa6e0350ed31d144d494107fd972b009312139ffdec7c371c01ea176c21a2354d1c8d8bae44eb369e5acb2ac94e5a488db386f65bb4e929416d13c0e2744b84ed3b86822a8e690db9eb2e3e7b473a4f3ee1b6a545b18f6154b22cde3b3281c985bfb5767bdcd511518e5715d5e1cf9549db6b0a2540bcdeddc2eb284dd5a3681f8a35fb8fe1901a59e2d98d9e8a62f133bad7dbec84a169407b79df115d2cb55770ab3e281620cfdcebd345665a957febdbc4a7d51c06a061f7b9729e0b14e97d8f1511b2825b591b2e7b3e6105e46c1da8077d5b08d447d760eab3021e673b2eb9be2575c9ab50f96c94ef04cc1608c338bc47d93a3f65075289d300ab564ffc0b90dd91f34381da84d12e47c4b2f58e5847fa289ecb036466c040fd3f5655671241c6d6498321488186273a89dc8187c00895f2f194b6f4211475b2eb55f192b9e6bc6654dcd9bbd6524e26930a2369327b44dc3b1e82fd17d6e90cf5a5dfc0d6b6c14d3e520e292b6066680b33ffcd91d537dc3f24a52fe5c5f77162e241610d48b3104bca667cdf4a7b9949b8a6928e7599764a596af09c8657f521a8244f2074816f0b2b405adca85f06ba9b45da8e632cc6d187609ceb343a03684c1064c25b39227d953f9d53ee7bc55a76cf044067d44e4c0372744e02bdfa72ba552692b2387714f05732bae0f542ac5e9c81484e180614024555d8e4cd577eef4c4870990f311a106bbccb2b13bf0ed557cdb0eb98598fc5ff2c39e0074476644e2831cb48330be5a8c4592a80e69bf5eb2aab31ca12ee50223247714481291926a13c4846c66cca0675c99f58e93a9418af544c08cd6ff84dc869eb97492f8e225e321ae98fe81ffe9569e49da96a94a92b612c3ef0b05c79e6159cbec61407f1e87b6e6a894cccbff81afaa916b1c9adbf568eb80414d5a08e72a011f06dcfe9d7d2efa6d8d5675256967e41d92977f237f0a97dec41af8281ebf8eaefd03aba85f9fc5aabda8eb7c382987f17d454a72a82e8ec2340ab0df8790cabec2a07fa3a2d9a8408396ac849808e5cf517fb341dc22d41e681adb322fac3e6a5915eb003224ac5d7f250fedee78316d4e7aff43186e5b2d5e0d8eca358111ea99d1a2ae10b5d5be99f07f16c5fb7530407fa7b8d378127fd03691c7c0a117aeb9eaba920fa49e3b9d90ba0484203561fd58479cccee148ef43cad82c23f15f88420498459f47e575b9e805bc5ea1b7683c1d476db9e27945f52d692bf5616ec06c13f381733e1d554610d9a382d5fcbc3dfee638c7cc872f8621e6cade0294d05dce3018efaf2d1dbb4289ee27edfeff7587e8691e320a2e3cb37e18bdd41ece35e885f993060a08dd292b5cb8648aee9ca50c19757e4fc3dbb83c9157030ba3b9d822324d4e5b485600a28f480e466ca89181ab5a07a8adf13a76c8530451a76fcdff3a86ec6538ab565139d31e0b91a3a6c4303ccaa59b86706469220417c0e366d80283c4ca9a41a3cd5a65b4c77d12ca63b813eea9eeca9f03243d7f37c2fa084e0a6a25582070df6191c2a639e1f59c41bceb34737a446c6f35f7369a7f44205380b93c1e247bc81cedc80f3d6bdef3d53b0daf56a26c3dbb1ace29b9cee359c648ac21953a0cea11f8537e66944f6960266926db86918e61b72b6fe4a8c42a512c840a0b7b2112ee7e5c7611eca4e403d917bb8febdbde14adbcbc8f22fa2d89c3ce49af3c490d6c41d4b288ced37b301c641dace77e27dbc0e283b50b01c9c9b451d722724d7299532a1d8fdc2ed77f0763bfb8007b0fff30a186e7c8d347d6b507f7c502e5679052911e7508e238d977ef15aca542a8952cc1de3cb23f2565b29909cfdbc1f6fcf9389e0a3c8148ab102bb520e98a56204d0ea9b80647fe769e5b43b2e2dd7b0b8288f9735da2dfdd2ec05d78313ed8cf02e03059b32f6d458653606bccf06ae81e3a7281cbcc194516e106c453b8707b6954860254e8588d11fa96433900bad9d71570cceb1d252ef16a02ca5c93db6d2194671dbf00c782fd9ba131f8e95330cbd52b087dc3d70240ba0053a873962dfc91e6332402dd02c385e51bf7762e31e7b1977d585dd2b636e1b3a1b5020791168201d9f80a7c4faa6883b5d6f7474753eebeb2b9cbb3c0d9aa8466be4df4dfe4ff9dad01426c8d27b280c56267714276b5e66f3c290bdf90c9693e08c151ef3c56c07003728daaf53f73583b2d3f0f2e8bac24cc95629e376d79278c752f066835debb078b7e363222869f9ca991baf10df599e4566706b074fe8efdf357552cd404709a93a6272447f125aff3e1fa185287866d3e663ea369d8bc1cd4171ff00043341707aacb8fa54a4c376a25c70841341fdd874cdef29ac20a21741894b3f3a35e9b32e8b81a6f6dd57524d0c322d65639ab1fd2ccac71f98f29317952827f9a64143ca0a48db50556f52552f2f4f504d10ac6e5021b1ec9070699907aa1e98d24240f670b1cd93a6fc578aaf701db53d301e8b77cba4e3f9674ec701809a36a084b3fa3536b2fe9c4a9e0bb24a11fa22e5987823f6de73accdfb51142498d5cb8ab07d6d01c709728a58aafb80bcfda15717b53c11c0c88f2968e550262f76ce01d039847dae8c04c18ad19b83ea0ca347481eb547dd8213e2b792246de8ca98bba977b2b40d148e88f591f18dde397e0f64efbf77b2a7a0bb02a318a4d98f44d1acfda02e1d98370e86a91060a0776745c7ee271b14c046d95c58d4035fa2a53982414d6ec80b904f47e6297841266c34fdfdabbdda58686a6a62244c318a841a2f475f60a1d363f71f91f6ddb1d7b1d4930c901fcef54b1aa8177ca9acf0fbcb3ea5638ed10bc88f970f85ac27365f3fea9770cf0c787dd41e541ce7d88ad543786ad283802ceeaae727d09d1f60ae040a3d61b66057bc68136b59f4b734ecb6ad3573b4c4b67b37b5218cdd819b2bf3d7e478fabadb44e6930abbc94e68abf79f7e38c6358544a2432dcd7bc7d5a1f00e11b23a60c484984f6b4a441218d595e4e2925330af74e0f7b8feb41d6fd9ad9404c523869a57e1e5b3b70fb115640f306d23d94eff934c6ff03ae35b2c333fbabb2130d4050b24c8d9cad653a5c47c63721de7894f1862e06a6ed5950ed880745e885cfb894e428c99f3e6490a8303051a35be2f52c59fdf86a72b774e9df1ea4c149e5c2205f5f20b6231191c7c88e8baf8ab6c6d6b1c42e2a1add3b27346139f851626b06179721d64b092edee5ed4dffa439cdadaa7199f8732458cf2cd04672eccbe16808ec958c6b477c4c39f65219b8b4c3e72df8c82d59c961f7e48e451ef0ae82268894788108facdbc1a07f9f10060c870fef832e44364e4f2dc2ab6f6e21baad2760594bc339bf4905eb41f15f546ff0fe7eccd133724073ea0cc4d04944a889785b91b39f505266e81a6667c8217ce80887f6d2a7c822611c17f272a381b92fa8d36f1130d0e834542e2b0598aa9ec8c07b0f0c832547929a07ce7f5b2e26023c27dd0d6deb16fdc3cb1804d563087d683c9da8dd144c4134a6d91ee857d5f6fadd14666bbac5f41d5e821930c9842d0cf37840a25560228f79c8f46c6f6c1f414cf4bd239ee35dc29cd951b44b85ee2ed4f925c4c31f222b6457945e1dd04e43f3b96690594c2a9ccd4f417f840594174564cf244bdff9a68b5232b5ca672ed09a8aa062a4a8fd58b3f0f9875b14553d837ce5cd0e25148cd1305eb6760632f5216f6240b3d5a185bc4aa19f8408fd6dfbbc3597c1f90b3ce0c56d5117f3798b6b84faeab69a552ab7ce2830009ae336f4675ae87befcf8241dd57af938bba316b66299d7f992adc27e9240154169bec3aba51ea8c60d3d9aa0c9ff8a03a814cd458ebb84a7105240719b6ec1712a767bd3e61a78565f6e6e8f5a7879778670f9408505ac98aa82208eba84e2f20d597eb82183cd0ffe61bdfd2c4cf565dc0c822bc80789077ecef2c4e48eea5cd39854fefee59b12c7ab87dbecd5392fdcf13b18ca3711621de20b61af939b474c16b1e093b5dfcf2263373242664e21f101f62e663b55977f3843449f0d96d8eed98be3826ea043525f9a1fefe6b983532a3cd394591ede46f63679048895e88ff76a8e5111dbdfbcc86fc081339eb81c8a1be71724fe5af1aa9a4488a679890cf13dce4f7330e3ee90c725b4984822297b50866a674e5d258e1c54e5a58a35e80fa325ef6827ba92548a9001034f3446c85361ded5ed9a530eda4a4b682c29cdb4b5d1398e474da147e69f0f9379749e74a5a188fd7a85c71c7f9bacfe95b2bc848e878585f0e8cc239519f30294e066a966c21743b3e63f909fcd0ad9b7245f39b06ceb9584c44f17eba64ac9e3e000e1b4b879c77f6b7a813b18b5710acfd1a2506517e04f1d632efaeadba2c18486346c5fb80dd0f841864eb90deb3ff4bf8594e75683b05e89527fe537ea9a1d53f9d445cd787e6f27952afa9bd4bdda6aa004f88bf31eb400b9b25f8a8610aad1ab77dc27ad208c34dfa3eaba5297548f3c027af7e899b3307bb4d7b78dca939063ced8abef8165e727e340c25ec7a7bc94ea51cd859dd4f390ad9eb885b518ca7b5de465a6f97ea9e244e1d17c2f8885391dac37f653e31809f5a9248e1e1ba37df5779c496a9b64dc10b28b3a215834bae960c5c5ed0a09b2c06318bbd15ccd07e8cff6ea7c759f2579357cb7ee648e6dce13ae0eeb4beeb68d0d2a001a635034c6381234321ceec5877c6b840fb1b716b0f3916c17b7c6521909c8a072c32267569931cd83655b8d6f4ff1b7bacf6ac91d14a803a3adce08aa1feece4d2f93ee9f4ceb4931ca925b06e69c975cf0a4cf613532173780a56fd1679eace9d8af3d6323a5e772cf34a9f98b471b212bf46b0249551e925907ab16c742d02766a4ca38bcbf3b074ef7239fb13a94cd865ac6d550e83c38867fccc7089d031424e2e815b69ed8ca1dc465cc0ac0a95556cdc7f231bbcbeb7b30639afef1cfe9070ab8386e1774c632984576e6cc78a2ee6b8a37f60e7008670d44208aeb97751f1612a95aae9a28cb12d0ca1f982dcd06db2b45028519e7516994dafab1a644a54d114a0e006f0f84ab28ab2ce5dd39e5b3c81117db767f874b9d89e0a0539fb546626fe62c926d1f34328d9f843456143a1cdb1d0f88e23bb87f26a59bc2c316dcd74349c5d8c7c3ee80447a2f2a494aa2241f9dee227ce6b7022553ee68a089d5c63db699d9f44f936324a0742e103eb9e721761db8a550cda7201bed12a9a25fd8c22e2a9539e9c1ffe9a666a022fa59b5ac0eaae208130bec38997f9dacbbaae8403301a9194182024841aff6b7d12364eec95408ca423ddbb704dabbd22bb94149fe05a5901c1581ee71693a4511d1dda17bb9414655b06d5cdc00b94edad7e77c1c59da422388db0ee1f4a5bdbb32cc663c6cf15fbca0a74d34ed0908257223481fcb47c0c819a9fdabf33342afb817278aa9c5e9904a9f84047d4818b9c28a4b624b537f9c226fe9a076f5e17775335c286a1eb9c9e414b75353e97b13c43d24f01d7c4bc32f767d39d31ff68e6b6a44f26047deae68bf9a0dc38b0724b5f77778e58d35e4e17fd1d26d40775ac7cbb475de9ef20cf6928007e4ed5ef09bc8303ad55ca43ce8bd0682535ed161f5bcc9aeeee3c79d93064d240507a429dfef61c4cf5f73825b159630171f682dd7a7505e1c017be2a36d1f6a90b5555a5e1417c13adca4eec6c4751cd2a8a6fff4efde477caefd4a08d206aaf7dba1c3496296ce92bc6f2862ab6c9e44834461578b4c5216d56fc15086fc9dbbe6b55a59dd543c889dbc2706fade868d68a20faf573b1ae2f56d8935a4f368b5de204c22db081950aefa3a0e939cf3d2e72020d1243370b5ff788fd7852c55a3cdbc1333c7b03a2d7e240826e0672c802d25e26d02cc4121c6d4a6df160198b4aabe89ac1e1a7cf18bdcffa084e1eecb9125c1f23a112b678b1ac0818d8a172cb24456c45b0d2cc7cf7dda80c5bd86508d41f4d9350f472901896409cbaf26657e8a00e53779d9e10f0a6f11291aecc9cac19fc967b26b84ff0a8b58bed7002e0235c3dad6f75c530e5499cfed0aaf7c287329c70ad0b8b4839d260da57a5b2df2d6752cb1ac39f2446dd57117e85536931fd938ab87266103732a12687be1cc61896018986c56fed23025a38c8fc82e482e0e8b5a08573376b2261678bbca1573c3995e64c5cc43b3c5d839c2f101bece33ceedfb2d602e18ae1500c0694dd43057d7e03afa320be7a8a8d9aad626fab4bbdfc0cc485fd3bf003f0069222ea0630aae3267990b8b940c444833e86bfa7eeb2f40194ff390db7c1d269a5f9b3c23896132dfb9587f6c86cba2da8a39c65c67a6a32b24dec2e1b5d005702f9b67aafaf2197e8e3c9731b3c9329e85f5e9e4db52f5515cb09dd3d8683a1a5984351d63396eb1fceb4b4da27645e1ce5ddb6f2c140db336c6e99133fbb421fc05ab06195f8394603cc16a72972ebc6dac82625704ca84f5aa6eb5346f23e215ab83aaad1b16d168e1ad2a43a4fe4fb53d2390c6f136e7b6fa06a45545a8345ee0b96f92eb199f5fb40e030a0854224c5ff4f585ec9f140cf7d8cb3dc132903099027b0b5812b03b4c2525a5768af999eb1512b2bf2ea68e4b8426a4bac7708143cb7b62f11bdde14e9bee4ebe24b91fe59727e75968fc4264046bac61ef096d631f47768265a9adbf5feeb01359c9ce979d4b5e4fb589bab8cdd972310424d2cdfd5c5d35d0251a480a059303f4d2ffe29df04402bd6add35469fe9f122b0da23ab46871a0e26ab6c8aff2e54608ef199c7a6b3d7c3f8ee16810e7f0a079e3066590fb818bf21738e227ea140924dbeca16a8da202decc76c97910cf4a191bf092682fd39a648e92de6b17985c926111308208eab0a6f8d957322c36ba702045970d6ac3ff6cee5eca9edcf67867f2d8fd6db81677a9104cf78dbb489efc4d8a91ebb33bbc7ef5e52d5a19d59c4e36640476988f1e5ad8b206267ac88799ca37effde9334a0524f8802a04c8352ee3035e2b344f43938fb553ae72b84a4d17b84cbb8a19633363204f127b38a2c416c41ce74b9392547fe29c2d9b34120a44ac80a4c8607716f33ac1a3f171d46d4a7cc213f7c93df49f36ee2fa73dbaa83f91625a9e7dd49ea2599c80be4c86d7b4412c18146f52d8fd7697c1be5246321bbcab31cc8605b366457aa45dc3e0f062766ff80ef656e56fdaeb65fd0129d790b9b7e68bc0594a5489aece457e4cdc31d5d578290bb19530d34241c07a58bb9bff8f8cf02ba561c1a1c306ed6e1b04cc60ff25891768a6f81dd36566a9b881e1169e819f6c14be991b15f555ec9438d958ea6828b0004f5dd207286cb187c8639f2eec33bfd5932a74b9ee76c30e97628e0f4439cfa6d054e622252013d5e410a554477f533b5a6a2841eb0044fbfd358009cbe953655f80be1d14cbca0af2648d938a089a8c720ab61f91a0b034384d410eb6ca264b7e8c3aa809efbca94cdb248387a761bc9e2cdf2793cf98e36d9af504ee82d212abc1a79cca7a035f341e5c349b872eacbfc2975684225e6793b3ea8931b4508e54209f21e50de3b2502f16f8219bd309cf81cbb4ce66fde2f133e17c90b7c2c2ec0e8f5d315e9acf3d7f13625c63d8d403fa852805d9491e83fe4576b0023643022e0c020312c677c0aaba0da83a421353958660f82158b3255e6cc63bab3e84a526c7723583447579740a6580f0b1216d8b7e7f45833bb93740c72df2c83bcc3b1cce4e24c51a5a8494df6210dfa92752bc6d79117123dff0d8de8e4b5a55e593bbf0b75d9b480069adbce8422edbdffec8efdcc6c8812b5deb720fa2a104f63fb77152e377b2f441779607595d20f478d4a0173865aa3180517007067a53a158ac7fcad560cbb7dbc913a50d47cec62ad4e29d1433837ae6430473cfa7e3426c12c18beafa7584b5761666b02d26c934e5c45d01333d8d0093696fc9133e46ebdf7e4b37b012b83943ad905368747672c12db708cd369857b564e51fcb4a582b1bb9e01411a7264c909fa32d56370200e38d1e51672f2dce05f2d44c893f4fe39f899bfbf72086e34ea070a32f00f451e43bdc71adb5222de170300c6785a045abae39fd450fd9563210d94a0dd71ced46d5926cc77cbc19a79b7903684d99bc0483512f07a23ef6ca1cb9fcec7ebf6c5038fcb8645445e02342430c9438ac108f7b07b69741be2e01968c8e4c7ce7aa2077cb333e00f49e9ebe4c1bdf0a09f6b1a1b1baa9a94ce87eefaa400baa6f62d11a48ba8d6a23e90e6170438be146500968d680d27fa93820e9a5a66160819d4a1394efa0959f233a93abb4164f3a6e69dfa2b30d8d39f045c41ef371d84cece1cc29044e581b45c264f5a8d6b25e9f4fcf85c3837400c4330260cefbddabec0861eb847f7d28fe0a1e765802e78b64316798d6a3d1987c8fae2ad16a149355fc29e3fbdd52a4ca9f6d3a573c6bf9dd256d97d38649ad8077e9106ad4926e40c9012e406b73bbf826453035c78f6e5ccb7baec23a02c6af565faa1cdd65b511e40b05dad67fc2127d9a4d92ced9b341b243a184463f5ac274abb5cd35bd82637a094c06da6aa9222f9dd6f8a363f75eed8be476ed4d4ce9bbfc31beee4a1aacda7a5075f66cdbbe98e03c1efa835e9e15521924f36e9479c10f9af9a41a62fa7bbd715cc0f792511962ee9ff555352a945c9f67d887325883deda7b02fc5c2d45aa1b33a4a2f898c1ec1493b42c6847e88529c5ed6141e8cf30e0d0ce82cad3bb2ef5b33041b5e5ced216f08e3b8d208453468faf52f22dea6fbaa8f0cf27d6033865de513fe7cc37baa2f85f15521dd41608e01b00567d1cfd258a85e9c7ed2593003e4cf6641638e1a3dd65bb299ffa4805171d677550c229317d5da1b9017491a8b1afa676f4f2cbe26b1fad7378403a981c58bf0bfc9b19b8566cfff03829ec26a6cbff403bedada82940871654cc3c656502d72c65577a35f15699865c52f8411e39dd67e5a184d1bfdf27ef399d85e8f88a7cebf99c91b19bca76c063991b1fae62097236ddb35a3e2a2816522838c8ad5e922e8376e3ce2785487ab930261ff0c699ea831da4bdea819864d51790f7816027b3a4b8d8c16121f6635c6b8c75a9c220f7b211a5eefd73ad8d6b44e67d4aafd5847c190be9a213e77db8c60269f07c3bb8fd296f7a41ba52306cb82f79bbd59b85fcd6a64e8ff55bcd45abf25ed7d28568ca310dcf6348f9f23a496b7d27a3504144f4f5ea9519849788c3d56c46aaa81bf6f44b1884cc8a6d5788bebef57d312df74b5bfe6d5a425e24d1bf1e41e5a8aa49d41d583712902b79f8b8fade4a9c41197c48a5fb40f774dc58a216ece19d8b2893dbb340274c3a1a180739b131f4583dd8e20f48d4693f964d791eaf1b4de30999dfcc0e868b107a7ad1f81b56ecd074d43385c4939c7d09d66eba96173d5fcae0f5f5b18ecf16d21234f37e89ee8577b51b9c81be60f3bf30157fc2ec2b647f89b1f466237368fa5d007a677112db8557218146b7340d5e44434b00d68eee33cc6a468b24fb2ff479620916a8f3a45ccb8b9138cf0b7694e272245781cea6c65f09730b0af3094a65b47226509868a34f46f036a974eca014ca18ffcf238c2063ce22a82bdbe9dbdf65812e280a66a00663ecaf434d09ca65b2bf8dfd2803226d00d57710eb05d254f77a4e5df06a9c29d6196b0d9afb5647328d943d6cb3cac1e66c26db840fc3a50cd16b831d8a0472e4aa77252d174375c53ce686960ac63f12b17f2e3b2d54a3686cab27beb1df22a1a587ed1db80f3f06cd4b6c4f7ab93e3f7af7982bc5423f624ce8964e1592ca28ee0a3991ff02b8af8c83c1ec6eb6e4996c1f83566e8f49d74ae955990e495018478cf13638595291ed24cf7c3ead7663dc9137dbb67f5bb0fbc49d45a39864016d9798c2d8d747f018da296cba8e50e5bea56868a02181c3de7e8c64b2aed3659cee0de96e9797adc34f8490d94c12e5d6ecfc859430574e0df40cda7ad06f176b179d3bb5a0817002684677decf41c1e8d5b545318c03882f49fdbb3b07165d163adc656abf7e4a618dd3376208608733948d8c125f581745f10fc45906fd1f116f11e8d6a956b833180f2c530226659cd6fa391b6645a803b879bb8f64a9cf136ccf0b62729c80207025e33ab1b65d21ab46476f65417bbc800ab3358415a9d519070aec3e9f3fb4814c1fa0227fdefec3ce9444c9d9162211977099b6cbcb20c0c596c007a3f9f89072ff70cca88843524334760a780ef2bfd1073c07de28637ef65f54e37f1ca4f96b822c85a5c1d0b7f59fb08f6231c56b2025b1b280bfc5d4f077692500239a6f32b84a47937f3df592f6c161def1ca59a4735c9e005473988c1b99eb57d00ab16d83e030bb8d857f7ca072ec54a71e5e4a1fa01b113f3dec543bbbba5578efce056afa2332e4634dfee616a2f2fe33f3475e3c2fc92796ef0cd920124b68e833e7ddbaf50dcbdb286dd2a51450f32f9396eb3ae7b0151d6d883d40afa9baa3808fa708f03dfa6e510e0a3dc6372c83917b085e2a1817cc1d1b1febc7be5a60e7f4bc558a3f6e39620e187a324dfb86eb14c681775d1ddbb3772d9ed7875040bd4781cab1dd86ff55de70613d1f8a8553f1eecbaa7cdc8a9591fbdc3f2dca7a8493c599bc80d925fca6ed2a348f9b97c23dc87ef37e159bff95f22b28691e7fd1c9061ae90ab424eee743374b9aa371df3ad8a2971eac9f1da5ec1c3f0f3cc3e0720789025f28e741804f2bbd299d6b456bee916095b04d47b6ee1e24bb4618eb42363705bd08a50b121892517f4fb06881b3533396dfb69ceacc488489613a757d5c9189a22028f1cf506d304b597530ec9fe46c487949c5e59d210a571ec6bfbf7bc078262abf84fa0302c055888d7ac3a0708fa70f667e92cd1e734ff8e4dc400d990a32b236214d1e16ff6e02f0a9a0f08c4dad2c778ddd85bf0607db110475ced6e2a581f7ff9131011fde086c96244e61b4007a2862d134d159b13d7732b96b2c29d4e6aee8465fcfef727750c4cb1b95f3832d3277468a268592e0d8d399a448a01da074f61966265d27468d585ed16fc607944f5852b1aabc2a8ba7ea4018cc6efff39960e81b5eb502fee0961d1719900675d377b49f8b39a5ae7df832620ccac30f8d208a113fcfab93c34e8b25bee525340f00a8e6df35316d8291e0576f725bcc91b9a6af6a83ae6a2ecbc703e8e14c5ace88011ac51f0d7ff49982213cb1107e7abafa34ebfe0a4e7b9b99ca06468eb34849dae336aeba685262bab055c03168db85f6b763a32f040244c36f3b2324cee6d14645638152de264bea452e36e74fe3afb0215d13feae90d1284a52bbeae11a2b4a4e8f45dd5d91d52a3e5485fd792a20fa989e7bc96d5158d55d7e5d9f34b84a3436eacb3ae992d72f234291377589bf58f97bcafc9d8b784c09fc7c8ebdfef96128b190aa49666ea6f7d9d43daa3e6f1cd10a7e919eb67cccb32339ddaaa3bfac4360226b02d0d97577cf1d67294e500c1c6c0927fcead4c5499296fd2f0edc3aa743cf0ea3bfe55b25306c508e2f771a30b266e2be9380b279924394ac032b372a6cf4602a150c0c365ae8a4382bb4c8bcfe1778661f54fd5f45ecbfd54930df3dc0578de67bbd16929010f8afecc1906c745393e5c5aadbd4067658d24713115fc52e349bbffca106e5e29f9d30bf09594c4f4fa3ad91c198db2baf9e7f416c8f67a87e565158b94a9eb56304c02afa03ef6f7810ce0ad8d9bab8d040b0fa74b14006d5cd041c97ec0f3981c08a12fa295f74913e0c2a49da9afb4fc60255944b28334ab02ec0a80659acdd0bac59a41f92e4d1636b7d0a419ebe76502b2ba909bd60d2a6b4f8f99eb8d62baf0fb4a05e700aee57e76905e6bf6dd2095e8bd7e7d6b63bf5d59c5366b8c4dd7a689be3e85d3908ca4422b4efe74780d10abed31ec9e0cc74d556f0790c4a38e7ba45655427299adef1738be4beb396bf9a65833ef82198ac6528abde852836f0ad9be123729fa6a5cba4e27149a67337ba34331b5e8a0b85e3d6135d09c901e4ee73cf3819cf3136752d15436a666d7231c889aa0bd8c21d832110f9e3cadbe186c9f7ceb90ddfbfffcc32f51192886b37f0882ca95159e7e462c6c81d401f888eb86cc81e58d59271c37f1fcb8b84ce19bb8d6a29d20dcbb4a8493dc8d0fdedbc74dc6a76303938e019ae3d5f7d1ec1482dc2a0889f02cf672d9249bd2e04ca924c32246fbfc1b72d404635922e9dc25bff0bfb8f0ebea936fc3ce07c52f8ee0db499e350ebd2d045097d99283a1d5d04f872708486dcaf0b24982942b2bab5435d48d101c8dc09091b79118e89b2624110fcd32f2e9ec6723115e0ffe1ffeb27fe6c77b38e8def8ffbb7cbc8ef6b8522987ecd423f33df8cf0a1095dd64cbe996b1c94d9aec8d5a54ba3cccf047db856594092829eee11438a2658fc41fa052b7e0a9a995991345781c2cc1ae601c71856b39baec586e2b5a600b786212ab04c315d2ba2bb4714b2722162b58e05508486ee8048e110663f952a0e5bdfe0a7766e12b34dc6b315d8acebc956c15b2d57b6208b89974e4923c8755487c34858fcec449d4016c937526713d51bee936318d2737b97fd28be9000fd5b8e2d336b804a37b898224125f984b0fc30280fb47b3a8b9749ec2a56001f2e8fc0e83b47d551887d4e3e6ec0386ca615a2977fecef023d468ca4e4075c774aafb4f4ea01d6a73e4b40a43d6b1b9f4685344fdc7a1093cab06308f0cd4005fb4dc72347f21fa6532ead5906829a1245d17db35406b877902698d4a35fd5b107710067aed4988916b3a6650708831e14edd22ce8d9471dc6aad8cacd12fb73252f94ab71383c5e1d10e3c34ab66057adb17c94b9bd720cf9b88b2dcd2ee47354e49b514d53e940a3b6da443e2dcfeb9b0a2ad353f603d7a8e9e119a4bc3a62c794d78108f7579f0cb91b5d5493c42cd0c9407d0ff576efdf2d69d1d87547cfa8561a5220e076e3fe23d541ae4235dd4791e029bbbb90453f00799a70578b300c0f216c570002637eb937bff4ec2a31b7cf378b90c62fd3a52fe905ca3622551f5b8a3fe65c50794a14162b39017af8866d338eb0a0f86f69ef213aeafd49293c74dbee89b16fa134f24bb9f8baef8c32d46673510ea718986824734ddd9912159cf5ff5c036ec07c4dc2417ae15b84409767b7f11b30dbc1d74f390b448f180a3000ae4c4643b485c7364a3a7e4648711c6ba276b9a59f1168a92756dd31c5a9fd14761b8a0d92b72dce933f342cfa27386aacb2b4b8152f692a2e282d5d71eda2b8275a3937e2bebf4930945198cab7521a9dfe843f59656cdcf68d00ad0352928fe113e546e17911b215d559cfdf91c795e105686e10cba3aee880d9c8a4a1ff88108f05849182d333b46798e3a3f6bbef7160b8d5c764c0226e01ccfbf356e87d8ef7a9e647392ecdaa745423aa6e7afbed2a79bb3a2eabbaebd283344119d5929feddeeffb0bdf961d9d802bf8e4152912b0d1001f88e803551c935c29be10173e46f0cdf099a6bc50bd8470c472ec2099ca5e13fb122119984af904ef02a0ff6ecc5d18d6296443e3f72726d844aa66a84eb153e5e2cdd1902ee691b4e0b2823badb8631059b9a1f844ebf517ad82baf7dab97e3149ddd9589f19ada37200088c0feae066182052ad6ceffd2c40e4829e04dac78b801ab33b5656bbfd3bdcca415ed361e7864f4109f617842a330e8c645d6e87f8aa7586fa6ea82beb5ca90267e04fede32f95ad8695c0b542e6e9cdf6623d5bb8cdecddf5fd27a6cab0851a3dd9af8ee9f79622f45d762918fcd1e975f41f401f1cb5725476829205bb878ab3a249d31f518fde2a154f6be74152f895b5b16f62ce9c251d4a5a1f5a5cfcd29c403acd0d3f92be79fc5a7d755b3e397d0ef356db6fd1e6fb4154bff3ad0f25fff1a4dcbd72dc946da1341323078e924d117a98bf02caff8a6617e598ad63bcdcc363ec65e1cf0c36549273ed1b62b0a563a500f583e520d84e0339397e291c93e82d70a1a7bbb7db55558ca2e43d9d0556775ea45e56953e8d50c5bd2d19057fd8cbb4d8fbd586d9cbdf1a5c0db8784011811f9a8a6295e1b14df3a7376c7ad6c977abba88b042b28f10456ddaaefa361b0e3a22495f88cccda96a68c51a56c43c2a3a88a67eaa8c56dd07156083016f702580ba66bdd6a2a3d70496c7398a7f550eb403b1ceabbbe4441ebd87461b1fac85e47482ce3c6a4748f722c45a608d7cb7d23ea5cd7553371fdc9ec5862eec8887ff64130cb37b3a7c9d02c90891a4d5d6b55e4abcda91f0118947c77d68ff2cf2da63130483c4f0d2418bb2489918e666ebeb6c32690da366bd42d26dcb48dca485b384bec938e85c7860c5bac361cbad9bd6690e5c7e60089dfbc62e52f930aee761e3e89c47533b8c1945017b5cac4f4d6a6f5bab3aed6a46be95de231a795a77701d7056c875844f489fbcf640b4d95a2f5bde9c90abf178b0754eca02419b2e76845d56c4ff006a80fdc2dcf39a6317fca42ce08ec99f2890ac291203d5fdcbc054fc0f38fc876ecfb161ee8e7944b8a5e892d21086e32b857800c2dd32834ead022144f39f80b3a01d3e189b264b0f62c9848940e2c5d5eaa1720dc78fa0bb1616de63f8b3ca275a10aeb0c849b27bcc3574a3e8aeabc0ff67f8933a4b3a6bd7948568bcfbb91c688eb8eefb4465ed2b4fa7bf1fae043d7a0869b448bf57920df93dc13b6618e621680c22298ee0e83df4e31936bc8a7ea98f69aeb21a040d1bb225247f9cd112663a1730597a2f9c49dac4cef4c193cf697798b33d31426a26b6908ccb03cc660332cb47d54fd769235bfefe737b8a654d4f994a4e4bb6ec9f30afa61f692b995fb9f2fbe837f05596a9d8ae8030b898edcadf708217920730c1ab243232c8f9d0302db520e48c096391964bd0305850d7dc7a5d4ad3ec9e02846ecde109c4c0e3026062849c800d334bcee93986ebfb378cae2b77e7d8fda7b325b95eb6bddcc8587127e4451db2088f4568bb8c990c78574fdb4cc8c72db2fdadc27762844f3c1037254bae329631ed347905c6171f4431e0abdc4b1d4f8db77960393abcf026224c9e48c6320b4ac5bae3bea056104a1d33f2d010d98f8c8a30d7720edc20a8df3a34a77970905724a60ff8c3873a373f48755f581f86d1bd14b974ac7241a7929b339a77feca78fe34d67ab0bc40db5d846198ac1f585636fb9aeab256542b8a0c89db54d89d930519eee47d0028408eefea13d10128f1a77935e6928c1b41b8dfb9b32b96769a85323ee8c7c0059c9935a519b95b2e8a6cc7095bd4bd17e5ab411cd2daab3b3bc83028522e7263c851af5f1e6f174dcecec4914399d7f144549d25fc594b4850b088711b1dbb8f484187f887571951e677e9222d53bca928c667c3ab7a13bcd37024f718f836996cff78e43c0926c1b4dc328c0ecb868da631d71b8161edeb8814c039c16c5cb76b9b926c68aa177eea884cd9b531071e4940a19817f324d513727a0322e213e524de63d213d89d5f67744e113eb1d1aef85ec66861d8f9c884bf76847853715930cc91bad1bceab6701e433075bae162aba7a19367fec14204a0067ef9f24b6b06a499f40b0d5909a7e25041d0d0f9f1875a7c5c854824e0ba734705386dacbcc44bd6d9439efb9ef8dc09105ce949097a5847eab12a743b04645a2843af885fc1e7d7f2e5722bb1d484bcc2c3ae9c414e320e1c1fb052fa536ed344717c98da22e5b2a9e046e247ea455ffea9688e42eb0ec80888ba9c30698d830ee33028f91cd187507d93d974e21fe30ba8b94f7e282d9e81622dc76f8a58eceb7ca527d63bf0a6d79fce50694acd7385c90ca0a26a98b0eca356fe403a3262dd782cf8d23ce427d31a161267b493bdbd4446226ccca52c6d127f8ec7bfe626f552869672c7213f8ca1d1600bfb8752930b6b067fc1166ebf9dcc55a20bf7397ba63391d99293bf8eeaa1f97f5d80e96344bd25e1f3a29a2ea17336769817771fb62a85bdbcb41c3becea752b78c2b60163a0f59ae7ac097e38c14dcc74c5205cf3fd8d1a2f3cfcf235aa3187e80bb25f1b64149ebf1f5ccd455f137b37d5b418956109b4183bbadfd817e268a18d7d38824100ee8dc3909181a9bd63b7f8a12b0840f523d59fa37f0e34c93a71624a2b4494f9a02a6a4af88735003db358503784c35c5f9122eb4a7677a6ff26a420327d647070d8cc0a923d2c3188ba55f344df5b49df65e6f7e0e298e6cfe7406589b6e78277e16e7a2475cf9ff4ac074437095fe4d6c4e2d74932a7247904e0bc661320f3ffa89cc7901496db7e86c2297d01395c0c5cfb237ef3f37b0cda684b5a8890492558651a9c9dc98c4a64983079cc4e46f0c779c6bd9997fed58a40839561aabb37962896dff421d7e348e69f51ea74ec13085f0c6f1fa708322e63af3ceadcd9e3a223a0f210280ab0286db3630f20f74340bbe1404aacc64270a00888e171f0ccee30a5cdc9528d1bf3ee7d22af5e62f87ad7273de4b091a991e7b02873cbc35ea42ffdf0038314e81fc3a909dd3d920cc6f651a15ef9f0923228581891cf494bb595c658345f74036b23f5667161dce908d24339588020bb332992f429490486ac4166a52954adf990e62438bd184447344f1aca49bc399cec807932a852b93dbeb81919bfc9d6c522be44b0dc5c0c1f898ede06ae126582ba8dcde4f317d2c1e7117f2d8a9f84305e1efd3d9ae5a418436ba77ec8329f8a82f846fd66226d976742df7a54800b1fdea3f1371d6661ba7586852de28be78ece05dea54371ea075eca38458dfb06c3aa5b0b968bf90233d2a552e58277feac23c94bf374d18ae2081e5eb15bd209ec15c0cecc5d0989a8a7c30d04ed53d9d0b38797f66bd1efa2b916b79335416c63f3246024c10e5070d1067d5532d31ce42cb9789179f5b1e9a94b78b9b29ed7beef5884695a84a22a6ba66ccddd4e6fbaa214839cb65ec0ff13defb0217e27ce6fb8bcfa54d34092da45094ef8854a3ebe53467b28757a3e0f7dd55eb524ad2505ec65d23d30a6507187bce998ed82af01a8ce3630a2fa8c8225feaa3e10c3954bc6caa4ff2201a28151e95daf10b3f5a2a4e5d7b6c4cdc6544c67e693ce19ac01e21984c853796d2ac8d501ba78948af77a0cede35c3354049ae14713cee36a635d30fab86949c3379cdc53609b80371d2a4c69a469a1707af07919eebf0bf9e09bf5c2b03556eadb976a8ed8fe695701574f7d604fc30910f0d0683513dbeed82a08c1d66119337172a376038e067210d0edce84675e30317e4f702559dc1d255986c965ea0e8a7afa15344cb5ae5e801c60a7ab158a6c3ceacdfcbe47773993dd008b65ce231ccd23f91259ead0bc2f1b73db07d9ed2c1fdfc8e2a0b61d2803078d4a302eda19d01d9686f7d6ddf3f3f40dcaf6a1f115e99febdefee289aef7d2d17085fbaf4bc63a0522f4c00d3e5542029cd6dd9ee2162e3fc1340b59d9010b0b570d75e115bb7355f96421cf0be7fb285b37d3eb21009759aeb80e4241958416a7d0452e4bfa6498dc2e0a733f284d4c75b9ef8d6b7727dc44f4ad0f4f6754e24f50de9e84e57a74c7beacad15fa5746f9d23f222845543ef09e64714fe11e23038f1e412ee1857f11346536af14c66d0bfa4058cbb2b762d5be0541632b19950b32347df959c10490995bf7ed83200ba49409cf9a1157e71a2fd13375b4c7099ceb42eb48c785e7292f71e76499b64a5c2853461a1465e6b01edd5db7516cd03c0ccf04ad61adc0bcb437e9c45582b7c3736b7c77b9a4d4b23058c658e6d13c32d805dbf4dd15296b249ae36d1ff0c13623d1ed74964842e67f27f9840b353363911d2266fc82b61925c51bbc593c0ad0976da1f451f4f78c6930209d706963ac40498df312d1a7af5b87f6cc988ea80d5c1bcb8a4c15270a4063355e621ee982a34cd3fbe3b4e1dbf6246048a2f5752287e4efb2ed574d166a80d76a2a9d25027114a313e185d8d0ff7e80c0382624d7784f08057c625874d02787bb9ed31c3b44daa13c09811134941c2f9bcde8bb446327d84b0c4ab7f2a8a8165c47ec32c6872141ebda51f982ccf21b77589f0b93488ba8d3adfa12d466d96e36ba6f628bc07d9e9c234f6bc407b8a9499d111b216914f803dffc52a31f866b8f13cc7ae300bdfce1e33ad2335dddd5b91c4c548238b53279b656d1129142e23b26db4d16e8d783cfc46a921dd4a7dce6e13fe86ff4d6fd9d6c97147fc75ebee7516dadc4826d8d09a6cac8324306fc96444302efb96bc4b0b37f3f5c88f4645d525d6b91c0e7d48af5fef10d2672c8b769b4eacbe572a4172a1f2408e9c49b433cf903428d66d0554d4b79cc7932ac0a3654fc52a389a064ba82d2ae0b201d1ebf6cf806c93f6f578a605515bf4bfc7af85f42d22a6d33ad7f54e6d4e40d3c6b56904ec19237fe74ba5d42e3198498a99fc1d57ef4c09518ccd8f9f68d7b365cbdd6a73c39659816493e959c5923c4bd5860c42123953774b5b4069167874143a27eb144b96567d2f1b89fcdb7a6f292e9a11d96dc26a788c59942291f77813ff86468c1299060e9deff4b06810b1d110c8a27a71ecf9028bece28914e7ea07f6f1357acbe413abc2608374b9b09761c70e7ff626a8cbf86984816ef905c95112534d845f4b34c524eee4b20af4f1dbbc3894ec891f002ea87e0675a667cfffdd3edba1345184f3cfc2e0c2fbdaf41d6f44a3712f47a24214f9e672b2a4f2731a66bc463eaedb47f27073b172ae746f0417cd1d05d5888754038a4c7f0650563c1dbf2e83829c6aeee998e01d578c17423716cf4eb6dc592e8470a802a8d83f3787e999a52808a8932cd93e6a6158e93e3b24e03e102e17d33e7352deed317660ea913961b6ce2a4704c4c2c35271998fa1e6518ab8d0adcf4aa1bb34d256481852096603142fb0c761a5e34d67d7e742c140d2a6a887b6202885f82eeab348f8708bfac37a3b278ac1c480714771482f6730e3ab9058e841c6d2ffb6c3d6872525d4c4a4dd3385a052b6c900f1429a8f80ed64e35df8b9139b9314f46a4e3d0e1d8928e551a86954c0e91da1a8eb98b8631dd8159e75e1560fc9eeae9d908d6b66bbdf48156f7c180b5e5ccc9e367ee48a35806f966568b47e3c281ece060f4a57662ce521b00b90782e6adfc17a746305b7973c00510ef24212e9e31d0d40980d534a6a775fff6578b288adc224c3a094dada56b9c890926caa4102214402c9eb478b8225263d2adef2cd1bed07f6aea05dd2a616f37ca35f4d1933ea945ef4e24bb705ef38598b306b8fcfe09ec7b7c0915d0405fb0cb93c76ab903ce7f1dc799193679af4c536f08b70482cc7a8375ce63396efc886df8df63603f41be0ebcd2ce85285d1a4d33ba67910980db315570fea93b02698ba625db2cbaf41dc29f3d3a18d1e41881583e1d4fd5cb24f603f8e9bfe465095a5836a75ff7fdf2be6614c9c0e9f605cd1e9085031641f24fd791d85733c53ff8131a229cd856f6c339667143b263404d60eb2228647160df4e50ffd1e3fd6b191944b16a86a8392bac5b3fdd50a7fbc004d75704d99ce5f8a42c36539e9ec281ad341c93419c370f5002ee3068ad5126648142a435ff41a64aa5a33f3fcc62d67af9e449e6e9710d72d79c3081d6d34cca6e70b72ea6c76b7d134cae0417675da564fdec7494bec9f55bf739dbb311135bd881c904e1645d127bed6bc03c0dc7f75e3d7c9d933da42aa4f5d869e426b1a90cb99fd881ac86c6c519daf9ac29b6f90e79ea15286ea8945a0abb57d15ef57b5dcea876ab273edd0a27bf057091c5520ad0a548609b4c5438668197a494dbf049418ee990cf82674c88e67e5a81da6e768cfd8c176b0b7bb017ad1cd0dd0c885f5e039f7e946ce5579d058f6f306aaaddba817f2937660a7d4e32efab051906b18d34aee7a23c8a94efc00098e8c03599034e89de1788e542b502930a46e5283d543917be925feaf8ecad1a01389f2eb35653617b3b5fadcde858c1c26ddb5c51b11f2e4f950a5a2797254eda89efd74abc3be54a6cbbfd349df3473e8f1f6627de48e1a7b3ae106aa5b21e093c87f5e129791d9e5990db8028351aa4b9d7dc890eeefaefb7f9aa9deb4742872f41e1cf2924a174bbe62382436f3ec4701782ad83b4244e1f15cb49daa0e7ddf5548cbbf4ab142e9cad94e94ed2134259c736a461d3102d8f8c38166f2942927a5221919fb18df6f61f4845e95a227c8b9fd63f662940123eac5b69c8687c0d643b973819b68e8a31fc871fed64b73ba95ac7f0843a838ab65db2f79f84705d35357904faedee0fb765c3cf5ab1e4e3c639e9c697b70e6d7fb6a0b3cc875f432d838c12f1988af5f789b99e34fb6f94e6182593cac3b3bf5bf96b9cc8ef42d306e45cd612eb8db482524e0aca8c0fee930fa2402c77676a65e75d35cd348e606eb486c06b76b0b07a216c2a87b88c4f4b4eac0e8f34e98542046ef10e27be563cd755ec0c50cd2f245e3c5b43dee79307aa5716e66ae5e6a8c788d9aad86988815a1da7878fc65685dd262084c20ef5f6e236e7b75fc79272ebf990e6081b9b9e4f69b9ce412951248ee31b758b1f1300f13e684fc5254367ea18e51110be73275237ff313a03d049995051645c85b1dfe7e1cf39ab9a7df4b8172e51ac31dd62158200bb581f56b03b633e977884fd4c7065035479feb3d8dd24468954927077e4c030a38ee66dc84d3655c88c6fac95ae6f3dea34e9e1565668c87394be62772238288311655d552743d0b7f3b706a361f2df9a61b83eba123f008bb88b3f3b3d428f850c2ff78ffe875fc30c1b92dcc2c29a50c42a45823d3f51d93891a8f386739f65c4e3542ab6d2d72aeadacaafd4dc1d23c8c39b2993106763f8c11e88a35c231e7f3359967721c9ad462236c1a0c93fbba628f19c9b1f6e7b331105340a31a93a2021bab10478f00359ba7c38eaca4d3378ffaa7d1431b71b0c19219470705620b66c3506cca0d5b26d92d8a6e90c2b0c7b137d30a84384773ce71963e95f60f1a5bf8fbfc3690953f3a81f5bc694d877c43d3e538641138700f22a7f8d1285df42bd29d8b2427ab5dae0575764ce502274e04fc8bab5908f69871c17e2a00d5652f6f36edf3c3d80fcaccafcb5e537b5e9dbbc09fc6bd08acc6193a045ffe0fc57db5ce4727bc3e982555ea3e6de0d4a6b66c3530f407d25cee74cac2644124dcc4a33511ecff888db736ad857c7cc94af3cc89ca8d50e3bf04e636acec89acaf73037517ebc0daea8c3ded7e3217974fac493c089628f9a78c3b8e849bf6d02082dd656de703e3dacc72b1b0588f186e3ed77dd1273f871ff5183dcf03c766565051a84c6f29af9a1611e683ed6a36298e62d6cf43ff40ae410a5db93f514f08b075e5110f04e8b50c043a79b332a1df8580c13fa7af298450c081d804d64bff3499a85dc1af7994a4661b5c6d4d90d9fc15627318140b68f255eec1b0d724a490297d1bc3a31b60b7fc6cae0fbfb2334f877cb667ea3c25d1006d1f9f3ca822e08c99d24fe8647447f581cb91e936fd544d995d120339595a58ef5bd8687c52d390df2ad20ce449ed9ebf88399ca6f511f7378b4b976f9053ac62d45bd375747570f97beb3e6e9de4c954bc34c16768b117d2d8340ec784690780fa605e68f4ff5e9094d318cf183ec02ea11d55371fc1d777dd19177535a864c2a4b21d86fa822e7643cb81495f0756fe9b45a0e265810d45ab74d15b33bd64ebf3afd0f8b4153d9447c18703104f48be9ec52f57cfdb1266b17da68ad9567b6f3fc268259baaa3f0c50bf50b6514bb4fb32ffc6c62ac3af5e01f0fab710a742ba86588659a3e7fc6d5c9c76010ff50dacc078fd1f82b32db4ccb58c48e4d10540ecf20434554d266c3748c0ea629ee8bb49cc96c575247faf95fc57fca5ce90540ac8dfafc7d2e4bd8196ff1d1041d7bbfd4e408c64b06f9256053116d969653aea088241a08f224db60447503fba6d6a7c11ef8ae5bf10b835c32a6361f356ded3196fe5fa89317750957741cafc3041465625e90f74ebb139e4d081805a96767a381379725583dff8b08ece2ade247fab2d55786e77a2aeaa845a19d44dda092eb3d213713734590edbd91279111e4b05e1fc85157bb734d9349b86e73e5ac10ea21e317ca106cbc25613633e798ac6286f8e69c1e4d68e380174e40dc4ca89381b0bbe980b76dc1fb7ad05f4d63d7e74ac2afd3e072fff023499b102af14ca47b4b87419a96ef32997a987bef81054146a17cd27803336e102a1b07929e51e54f377749d1c9fb333f6214ce21d2032394f3ff417c8e4f7afab67ae88df964cd9c0ca9fc72fc9c785340864af9297ea78e6b80c6e969229abcb2b1eaa667b8040945517f1da081a5c9ed34460ff3e328c6a415a596300ce34c6947872b1b87f4adbc58e624309f5bbafe05ea1c5a7247152dc7816266f6bc0b3dda18d2dfc3a4fc432ce0ab81d467b9a4b8414bc070391a45f2522b92bbaf783f3543e005b7fa4a037e38ef35bffe61def2bb67aecdf49d1cae9441f9cc5673669648b387082c2fba3146e8810d9bfde9730e1e047417217ff20a6bafafaa699c25c8808fff5ee499ec02a371535eba64a07319a06aa801e9c972c2486c0a63e954e7d6e9ce0d1a364407800566ed86469bd901eca2049fd3d6465631c62478943e1142507520e9423b7f4fd653fda2e103db9891d890555e6064bceb072aa5c4ac9a3ae7bdc202cb66fa1556a40ecd1f50f502a0d643f0fb7945240a46f8573b6d16dc3f9dd07a9924483646c90b06fa103c1855fad3d018b26af10678112fc04b45d626e68d8b7c6f40914e062ec269ea726204248130fc49ecf05b004a82b0c7ba28b3eeaecbfbd9239a11372e7ea4806729d84cd8e208e02743e7afbd2687340696b2857335fa8c43c51a1b67a1e898b4181f1a6ded1ef4ec5af29e86f0ba6298dc17298be5b35404e69bef841083c3189b78db76101a9268384cd5f2daf15993f8c5233349bf0bc911e13a3be449675177010f3cba59ed4c94e986218174da87ee68214f4e5e7f0e7968092fcd232229b7716caaaa67e535d708d6422e2ba5bb1889e3a40d343a7a1731f6e072dc65ec7abec16c95d21784ee5721821a1379a8985d2fa284c7cc5b5372988dd9ebd3c52e1d6861ab7bcab4fbf838d6716ddffdd196a1760ab1e59e43c2b4964643ca284e3af4ec187d5d89cecd4b125014cb402808ad5fcc7a921296de55e1817ecf7a90ba0511b8b34afb036d0b0e8a245fe13b037c54265a5e3b690c899d149fcc0b1f03eb61c58e4390917e09ff5cc3693b87e38c412b0192dddbb99bdda8f214e8520da62501ba64966b390bf1186ca92a4ddc7d4db89aef53a722aa41db816b3705701bb7192bd00f3d4e7d15c9bc915fa30cbbfb022c6b9f10e1299fd918721d4bf2fe465f8c1c280447b878a90b18f6677501c4ba4fb3be76008f73b87d8b808c5976181b2c55cd1a5b40281f7ad28f534b5c14c3c892d74da256503ad23f81065de40c8efd59bdb4f25e7f51da6ba904532f1fca5aac42c4a7632a8d414dea5b754aadb8c71a3e3c66dbbfbc0c04a4f2e7ce379270191d4c3411b0be7b5e2dbf4797b1f40f233dcc867e52923a0cf4ee4b31571f6af11b092ca79cb1495ea8404b9002d2f884091c5016a270b57bf4369f3b64d03c5d993849d6bbd6cc2826cdf4580a4a4573ef63fcf41a4d4c1c93bd4471d6cd18ad30c17e926fc92720d7512abda4e2f9269433eef183c3c0ee1fc9477de246502e316b512f3c6370f4cef770317750e1dfa14146d73980fc98eecc3297e9a44d86dc2eb7885346cda8ca548e98ebbabfa57dd1d2dffe23fa263776961540a514f2add3e8ed9503bdf6a07b1cc42393003c4feaf60d575e9fbc1781659a97ce8534f468868aa3421889829fe7fb21e21e6cfd6a39fe752cdd2ced11d67720388931608fdce43c1c98cc4bd7506f025a237726fee61bdcd1a7ca703ff5a3436acac3ac49713a6391c5e04a982009d8c6c66116e7eb494fac47323dac838a8320162c488a60c1ff18962ae2efa53c640a371b23a64a63a463fd578b449177add031a4cd55ef98bb57687e2fb9d86267a675da025347b2045bf56ecc3bdcee26a3dc77a4bb387e6e87b64dc5a366fae920aa452eac8fcf7bed16619c018a965f140b97212c7d501c7da1ed9d4216b4e5493f6c4b025549bf3980d583c2677f6a3f778cb649325d83ab786f6ad7e67c78f3e5a408fc78258e8486258c5b8dd348b56e40ec01b47f9415367b729545014e39ddb4a36228e680fd571e2681ab31ccc7d06100fd71b38ce8131ab54a0f773c0bbc4f2d830e77abdb24de63c38922b0b75f3b260290d668b8fba89e1510f294b902f776820538b4274940fce90f36051f1e56bae9c2a2ef90b1e19cc7fbc4fdc6b483e68ea81d5cd3c8021a313265b6a2b3deaed5b4628fe2dbf9a9938dc4c92c96862aaa86a63015526d31561c83c8d0defce6c46a8cb32aa11fff41015e967124f97cb5dae25e0d00fb0eb361a159a0af05b0b28b0f238b55c62c58e2edee7f068730709b516fff294bb8c1b9b5b1e62acb47e5b1c3e76ff05cc0819f05cde6f5273974ca9daf8fad3ee7aba2e378fc5803b9393df028ffc651bbffb68fe5f3f0eb58bb424ca75575449914e33fa7a033d0494b55b8a105bf5423a56d880ffcfd853a67d416587a0bb46535d7f43a3712447a51ef164feb2f208792df1900ccfb90ca14964091c302166ffecdc7c3a9f5090cd6b61c88505c5b2e274b465f8061a4661bd69769ec263fe10e925f7f6339917d7e6fbf85529ca18e27d96fccf6f0fa3e8a94f86d7190b36db3784c289c6d151551a5078868c1a4e3a5952ab5487bc79c37d91f004a26b2a947123357219b6a2161b558027d9324feba48ce25afb2daf75f88ea8ae0d9a175b0d44923df39de2f7f0e908c85aec2a45ac25d4334bc8a839264af2c2e908a9f937390d738d0b874f9d39251cbbacecd922b6785be425c52e19f6c54c6ca05a8cc33cb20dd4e0ee35c70d281855eea37cae228d0568df141a108166e3f731b5acab0f17cfde07ab993bc6595967d2f80cf6bd6e32bb7237bcbcb4e3acee9e4cc6657c49ec5337639e3c765e3faf830c2e11246fdeaa4edee320829e9da8a6d1e85cd97e089eb5b9308d92263aa1a96d3dff3a470bf76f87b9373cf4329a4c6a2c0dbbe5679fd3468f08e250ddaa1dd230ad72e40235bc77979361cc06967a6887be6cc5205716f15b4977ff4c53c0363bb30232f1ca2980521aacd7eca82100372b7d41dbc18d0835ae63861f223ca719129f2581d47d5edbf2a81470998991a61797c8f897f8ddd5f2b4808a9ce26a1187e1188bc2bb7f1f7ff95815b3f2291b6c37999237ab207fcbdf740105363b87afd12f4a600ee83c2ee2aa9570665cd06e0afde8ad784fb9717037be7cf0ee7dd380141b4574d4b77122b1198b21c1a222d145821eeffa87724a45fb569eb0d727671fbbd18e707f68772bb8f328ba9d235e841141c25c584290566c18e73bb7cf63945278baa6ea198c9c5bad8c6f03954c3122e263a0e6bec47cd04ac415e7216f43529e74e4a6f1ea1a8c29493847bdbd740b9919c9d105a1aff54a3ce5091e65f9a6370a59ee96359fc27a7e9db242c0263c28f7015c8dd82d0964e108ad61b558bb95cf42c313318c878a0827d006d01fb6c0a72b7f81851ffc6a19b4662d4d205a49905feb71f0cde67272e6b704d98342195ef020cedb36f94fdd63b73cf5bed71516c27751ffe492dfc0141eb155d1dc613c6b1db83ea3e13f046f6a9d732255c8aab8121d6b0e240f7498f70f20c898a06bfb65d6a351c6fb14971acec238284d28ca23a0ad3b03bf451d98cf77cb15a608df0a0fe364a60bb374958833102a7b9c657bf111962e9742ac900787cda26e10a2d4d691df152d14d3a3327ff27c661d1c21908e2d354e0d698cce8322d7cf76fea1956e85144ba110058cacc8bab108f952c5dbe04d084ea949eb8c9f98b384f267036d477dad9ac04661cd23ba5a5b5701f8cf2dcfdfa531383df0b08fd815306369ec31017a63949936997c3accc1933e2e60218188c78347a22fcf9f008956446f352dd60b10350e9cfdafc8d690e23010b9cc8bdeb23e9c6a2c1a70d14a4fb72f1f45112f8b964412bb05c0bd5249bc2fcbc21826967ab2873029d67498c1c49fc3ec38f4aea02904a30fdb26556cc93326036d992b3e969e6a9a50bc1108da021839d286082bb16b5c97b82265b6a34b8290078b35df0677ad57609080aa27db0e70f2678b4384910f76b946227e10da918c8ab8fe0da7a1a3046bbb4bd8cc3807a4a40517b6988616033b7c3e547a69103d06e10f2835d0ea359a8e7d53956605e4920135e96ffcd14ca8829ac3922ff2ddcadc6106d67955aa93e9d28bdcd70c7379a01abd067e797aa62b15010ddf60fb8c88f11a4dffaa95f368b49c455d923783433dc987c5cae17e884f3bccf87fbfdfbf0e52a0a8d3021d78f640c7f715f0b8c8ec18fccbad3666f3f841f606ec6b2ade9429a176d365e19a3af7a4cbadb692145d0b7e06adea220310b7cb655dc535b40e87ed39df2d6e21ab0d69827609a5385015a10b970c9fdc8f196c821a2aa95285c04d4e140332fbf0e9b271119fde77e1e8a5b6e330232f38a66a029a8d1591059452fb01b55db9951e16c8b330126286da50ba2c84c19ea9ed0563484671ad49ed80841ec98d86ed4aad15719d2172b7a8167267fbddbbb76b7c2a4af8bd7034b1e1b362f6e58d5a37268073212452ef6c14cd44fd7fab392aa6feaeb94233381a040d3e875e76f83597f878712d577a58acc80afa9c51249bf3b394d7cf6ab79687226823ae5d34782f25a7493e8f282908cbff0ba0d27fb4faba6d7cf166202f6c0dcfa539a6b03f77fd557cd3841d1874c716ea9196de0c5b3df4a1f3c79b3b07a44b79a308e77300d53f96c218502624f1dd6707082a09df0b3f8a5e69def650fcdb1011e6e59958e5f7d746326ca8bd0e11b8a4b7d1def00e1824cf5492c54d5d7ca88c99379017f9e29c4fa22b892ecc2912396c7162dbea34d1ea9e99233430a15d25437a524745d64d460f2569b18c93b40d75f967e1f13ccabe7eabf2686e764060280ed3ac8d44b7746b7d4105d5d2304c8fa9b189424ddf155c502c52ac288681daa67c1d1137ccda6771c63137c44f657ef6ddb11c81bf1371052db0c445d50dfa949dd0a988169c53234de68ba5dedf524ce06d13e6eef6071ae24172ace10c0e445aef2049394142970fd76bde35c34522132f4ec407ebaa7163a5dd2379b1a63250ec115cae901a98dd3feac8f38c7a9db63626932f99206c390c748e43149546c9b8f4dfe259c4903c51f4c37ac328fbea16781806bdf8f969a9a84e8df92053b319108f66c0c2f693c8cdf65f995a70e7210502407dd59e48423b00a6e81ef7dda9899db85038b5d040e4793070fccc9b31c656d9414a4a7da482e502b4e0edd88578a10c076c15d02edf6dce40b63c34b0a205533a15bfadfee744d8b631522697c70f271e34bba253fdb9015230e003aed42214000fac710fc4b3f51eb2ba34700518f3a6cd02b71655a96a04f298296a540cc659e0fb7725683fb0c12556f6c895c0d9fe9b66c88562dc640a50a8069993097013cf39fec785229aae97a3c00e8d5efce12e655a77b842a2a23241683ad59c225961d1a503f3743fefda7519ca5983241f5cdba00d27e9f2d01696ac20d87f4d990fbe1f601b1ff616606cf5b5dd85d6dc866435f27465b92fbcced5775678c06d899af70989ae24382aa46dbb1733f2746a6580f9b9ecb8c3bff2ee090ab4d56443b447e4c21dd693c7a3e97f3184fadce70011d91829dd11ad5d082a6e07a1dbfd3c2d2463d3af756be700865a997b1d8c3f60a7e21aa02a1896a4a55606c56fe3d346a4312fd0caf5bc7f156406a43cd4d20c6e3c1aa030664e19aef95496bacd7c4f1583096cb3f07efac4df507bf2247c7f19e559d5f0fcd58ce386b6f8e69161154a950599a487ad014cdb004aa3e9f738f9e45187ee47444a6a46e1e7f7c2672ce1c3e29cbd7d622fe72a6100214a05e1cca43aadf24a70f29e03b3320505fec834fb167915f95f326434faab0fb5818b028dee6823a3cb718a180855d9e71bc7ba858e0b13e5548e7a66d637593dc491b7471c2e913afe1aae15a7648fddb64308e19069802c6d57bcd895db79300f7554b24e5a3a95f68640ca237503c5bf0402e823ce30386e82c177015b169f6cc82324e01d1468d7f6153171cea34fba344ca2d8af948e70150f752cd2ea7a91a323d0ff591f5666dd99580804b7dc0931cb0e005098c948dee8b9fa71b1b203cd1e3c1a394b5e91ee93079fe45551fc135751dd106e9e110f782d5536ccb47273c56f742cf2960ac7a9215ee43705893b61f07c942a99f7d77532ae2b7c840fce40029b12d8cd0c2d6ba1e3419eec74d93076cef5912fe679740977c5c53ade4c856443999ff65fd3d6d7038adb7a8a594b9e0618586054ca8250815100842ea21f6afb18762ecd39679fc60425560dcf4d6393775dd2cacff5695920448e04240f2105538f59418c066304f46b9027f0e3fdb2eb445db333cbadf4a2a681b4538ffc11c72b763dd2120f9339ff2975f189777324def6967a5fc1d865291734820997545cbbb5afca2fede2f9452af57fe9ea1ea1b780384cd3ba476af261b1d74e732e66663efd39a72ddc40520bec4a09dc79bc01ea81ca926da5d32cc19f3ed1686c5f708d8a13442dc8987a0e64b72fa0218b60600db5c1dd477cd0e2f419e82b7fa811f6d29f7a1279833dafa34656ad097f32fd9b1dc9d29486cb40f60129a03b4a563f05332184ab5a785e24e2d2d1870d9e06b96ac5f83bd8aa73d7c044f6033bc349545a8f78dd8214b9a13d20d518e695e5c0eae36033558b0b7b65926901eb3f2c20c100193a6772beb3e301479de9af7a3707b3698ded26d16a59b5cf4d079c46a75583e48e260ee1c973b08f1b97a97661d5fd4f9acefbfa84fa24ad33ec7600706f9a2947dc3c9d1c975249a7c2dc024815618f5019f9a267df0f87d4cd5ed71432af2f03ac5cab344428a33548c2f04a89c348f540f1591ff6720beb58b3db5e1297a830be333fc751aaacefc5ef23f6de8fad3e86e8b4ddc92f857569a160214015b18d542ed6836edc8df80610eafa224cbbe2c5435d83c2871ee33f04c9fca8480160b3ef2d15575be524078a2899b36dd95ea43ff19981dd1520a714a658eb69ddcb4d01469d9b34767f0ed2257bbfb23dec3f8b35bc9e21ccbf4d2226b1291cd2154004a65b5173ee5832746b60cdc050cb25bb1ac1720633d71aa44e78444147763e495b39be0c8813bb69875a0c5771a8ce88307fb010299ff564112898b60adf01357998fd55a1686dd42f61e2d8588c3047c1bb8bb71f18a8c6ab6321cc0f62d3d3af1f262e27b3ae4e440745195282d2b9997ba2251b66b7768a4ac7667bda2ced28fffc93da7f2ac3d9d257835bf4a42c934c3eb4bf84b1cbc81d8d6fb3e1bc5881b86ceb694a7bf581f0386c88c372442ff70687e080752f5f8626afd90353843590ee703858f60132bf7c91bd8decf51b1cf53bf85b7be19d4e4b5028f22ca89340a3fe28290dd88fc0c4d8801a61fb1acf12cd3964518de0da242827f150cd623e4304d3fc886ccde7000375e1e6de2a086705bf73773051963f9dae2fcb6284c7191d7d093765e7ef9b92c88d0b31a24978c818c0b5fc34bfff4683debf91c82f39b9f1515d511d1f342128fb6358ccf41501804c76f7443f1b7bff8363198ecdd8f0a6fc9a2ec8327ce43746cc70b0e48115ae4ec3d77fae6ad93d79eecf5eb9f5f94ba72ed2ff2f77b52ee0c712f4e24d13feed88bfea1d187d4b6a33b21e06c276ba4742ad0c09ca1dfc023aaad5f79e8d54a888a2460aed8ea8a118111cdfcd3ac270014b42b49a443d61cf3c3061d5e14600e62023889cdce771575fc27c5be9738e9735e770881ce9c224ad9b9fad9aa7e1cc838eebc1f466e3a72525fa919eb1f2bb58f250bf8810f7a6e7773c83481c6d91a1fe4ea3c9097d873336302b04d2b69ef124f693e929e8fb6172744084140e52a3731557fb16d2f1192d43593dbcd07748320619b40f1f773864c63cbd3b072e436a9d8f63552c9311224b566bea4f34e91599b2f9dd3990a2f1f41647565ad59f9dfcc5ece6e5c93a0f6e6145f9c5da7791ebe16e5977954cfa7423eed6e0d4417f2d6f8d04b3ffa98fd239317823bbfae74660b29297c7517797b5ef554123411e0f1b2a967ed802672125ea79d018b64a893fff47fe8084354300fb8903f3add17e296883fad02a043dc54343127ab88a493401932c7aa1282584f10176c9b8b73be9d42b6f5784aa5ef545d97a4790112b04e9dc1af8ecf96c8ffc94e86c4d7b25e2707ba6b935d3c87bb9d0aac114edb550913cdd14cf2ea63237dd865807f5be7a999ff4519c6f29369d862e43f56036f3beaddcc03b56c556ff37090160c7f06c2fed2e22aaeec7b6478b5a2db4eeddfa53bd63a94c238f162497f364f12a8d75e56c353b1d6fffb845ac39af4d57eb6294c56c78f861e463782cb6f7a9b7d4f0bcedbb94424d887cdfd548a8176e555f7e41a7f5124be28038fd9ac88db2eaa2634a8f63274e5665e8ab678f2f26b72be20a23b6509eae6d1e797847fa5a54efa79bb16d40c895e0fa3894fb23ad1260a8b14261d3afc48eb6688937f4ea617aa4c63dc46ced25f6a626a1a8b83bee4e429f8527f8ba1d747d3310aa7cbd85094b423ed0b4f1cbe04be2e9645c393c4f36213e1a43c29eaff0bf3784c2d7b2dfb6b881e479f469a7ed4d11f2b286759507e465519165fe877e9fe81ea7644147a3e7cf7796092a54d61b0f4ec95327cc01011b48de0e144d2ea47cf95b262989974ce5f1520f12f2234b01d66724db8038249fdc394fce5daf127ed6c9dbb0926e1161a8371549a0bd898f28eda34512392628d6c4268bf650886fd2c464245c6b401d5aeb96d9efe4d2df01bf7f7328340d6a03a1d08f8677e865522ed5527a854f2b59abec2fe6bbf98cac9b1e99455d30516d54c03b065e193c04294f7f3a7e029b96f2bb0ee0397be87c06f84e99bb0001bd1084f763cbfc5243d9955ca527c168f2e9e9baa6f300ec247534597fca6f0776f1098c1a3acecb823fbf14bc408a7ef2ce8dc5a5f260b213ba64391fc6cb2de84823f5b16282c767f69e4c8f4a7a5379f359de01350f9a6a0a9d695eef129327dd91a989817909ac3fb3b091f220657a6a07c58653609d8f449ae6da3d1f8385a38c3913501fc599db49f67bd31ca0290e120086ae49bc8eac920a0e1251ef919a6a362da121408d9ef80354d279b59414b14f69b97f39e3a0dcbe0b2461e21b2b2e87be13460151530decca9c3f049ada1de18099421989e32f0721cc1e4f5b116532abcb1f3ef39c79b36243fd5e05a7b14c0414a83496fb50624d62cfae2d5aa04917bd30ec6234ec3684d06cd87df3bacfea067aaa96ce12e1e6dc8dd31ead7ab9a0e8f9c450294a04791aa614beb40185463b363088a456e71fb022000009e76f14b0faebe39d5faa5019f06673c15f41edc6182c92b09bd993d69277afcad7c964e9df0c3c08af30c81850f42c9427574e0d9d549c27e0490beb6ef42cb85b4c1ebaa8ba593f4740cb2012ca998b3425d42109c661a8dea7b77ccd2b4ead21103c78acbbccadd4544f2505f07d5e16b96389f9bc20827e7a05b909ad82f13fc09bfeb1b0c156dbe68064c81eb89a5fea62cc3db72180859991a544b53d5fd1b90e709f20416f26af2c3ec03a1fa66535d726a74b0f2e1947123f6f8d3656cd777606fc8fe919923c6524202004e9732727c0b1021f1d7c7cd1b931ff4d3d1ef1b58088662459c7f8f4ed286b1c57280c9013088720923208aadce7cea4e6bf96176ac8a79d240ed72d54f46d4a4b5f4b5210820b827fb41341a377d6118e2076f1b290cf33f813eda42b2bfa36bd76b886b8a7b865d2e8cde81c82d530e91488f1d29c41ae36143e1a989fd2fcf2e6bc189f5e7b38c02ec8dc68512ed40cf5cf792542d09ea11f9d8bc8d21c538be1fc66726aa439104744ff3aabae89de6f757b35302c52df7b152aa97b2f69e34d1c1de2ac3535676f38ed50b976844b5e1b2a985d2d110e531b2155d165102612213449d8a99a089022a6a75c9da133a26adc1f5ac5812e52edea98a90e34680f5b0aa5d064578baf2e5ebcc1932c9f89fbd189bee4694f0c991287457ea061b4943e5a3b577edbb0eba611909b84a033bab7f1b3e6653c7208ca54c67f71332891929be98c0d043779fb2dfe98154c1d7564e1477eff2e4da6c572c428859371e34f69ef5b08c1e4d8315b8e1f8e369b6c95e16208db43f87c0e312d5446bfe80cabf4b1c1b0ce59bad0f3f367f274a241a150f10f8aecd167ae24f1bad5d3c6c1f70435fc282653b893fae2dadb67e4eb748eae08a11c7abb4acaa3dc99dd3d355826910d90f2f159f2b0d648c5e8a6453c175a183a7e6b6531bdcb1768ba6a59f9e75c7ed44fce1357428aa30649f523e62e64837a5124e0fa055c3d77039bb2ea93b959ccbb63c8ca20c61a4789fa22f3adca9e11f6a0ace9c2ee4782efadd57dda41297abed4ff51b7e6a1722ba91f9e878fa2f4c4668c48e66b47c59298225568450c228f34da99db3fc8b2a9e1d240bb9f6e11a9b3a3e3429b6e2dcd224996ac2337497ce62ef6608bc01b0dfbd42e1f88de7a80758436eab4672297d0ac1942cf9360554a537c4fa7f8bbf8fd88f52b385532c20b9f1af569db69c41954fb4d048106e4cf7ee36a0ceadbdea7b94ed7eeb58053c35f049680d77e2c15838e576ab7b374215d1910ee059e7d6b2e1cef172a8809c24dc2aea89c7e72dd13f5a77eb899f5c2a370e6f4ef3a67e966ffa23a2fe42cff9c7ab94ef4cedac1a65dabe9f47a9b6b92e35d38e58d6fbea7c246001dfc5c6a68665c9863adb51e8ba0c5cbde815001ef3be55548df79bfb0435a1204a24f8c2ff2e83b9a4c523e965e7a42bb36b0e99042dcf5d44ecc3886514801c5d9a8bdffd388170974c4795862393cdee15daa859bdb3fd74601fb4ad9a8ab4997b4ea535aa06fbccf2b2083736d439ea13b5d7800f44fff6d4cdaf1c867218051a342360d7cebfbb8cc940ab3a6be549566abbb784592e26ec40445c4906f77a65780aaf9675e6e8f0b423ca65e133158a1572169daccca9cdb51ec0e624f716fe724912d39b779b1e9bc2a4af1a57afd651c613c098a713d689be01bbf0070ed1d9a1b6078382c1f88bf42f675dd21a51a8480fe7180565102e4d5dfdd5798beb50db5796d5458dd618cf45655e90bdd921b5e0fe957eb81558369cee208891758bb890f253486929e7d455945e704d8af7da4f8b239af742b32353c960115f07ac7521184ef134b0141965fe16bf23ba9b650d78fa3e08e0c01d9d4e7efbde7b8b72108e7fb33ae7b37f3373faf91911bcea26136bd115e1e82949b72b799f8de73c3698f6c735cf874190438f17c99d10b73f3f855a09aebcc1f23d535e6dbafadb5ebab70f43e5922650bc4d62c9c28ab3aff837cac19d9ee995199381a3fee1ce998058e9a8c21aa18998bcfcffaeabca5ddea0f0c3e7b5500e44a07689eba23dd29c2c9c4cbe0c052034a487ce635c707411b89e79100ac770414b0dbd005ffd196fdbc157161d6c6ebb1ec0bdc4b783e00979c59d30eb3d489f087bde78afc40551045f9ab5eba016f8698e8be5201ceec215398d6e3ce133b75a7e374184e4745f461f2e341bbfcffab43e721d5ac8a46e115f49714244a79b9a9f459cd1b1bcba0ca6f063679bf7e8c1ac4c8b8b80867513a0d99bb8ebca33f112719ccaf8d0269751550bbb5cc0000bb417a54bc20dc296fd1e05316dcca5f75d8477bd23e701dbfb025de05ed3f25f83dcacfe88a2e06361b9818803eb5fa60616ae433dbb89c40ea8de1420516d156263d4af0d077ae28286cf47f31a521b3269bb9d4b4c90d25fa9439ec390554ec8c7ce3b522407d1fc47a39dcecacff892a23b06dfc4face1c9f9c106f4da743946b0a4dd2133a8f3680c0668da366c11437605ab55e7af65a36cb50f4ea0c962d1034cfbed6e5b6bc879270cd2af2318901da87b6e92274cbf472ee522073f380617914c78a30cd11276419ee1383bd40727c607a9d6119ed305a8f3b20061d3718df0bc1447115c63329d78d3dba6960719d4e1e0294b9df75a4e59ee3f4199def9ded9460f5bfe490e4dd33928ec52db7a711d3eb2d16ec199b1bfd525684fecd2601f54cf6360bb804cbd4f3243e488050d8b781c58c50beb4f7c87d22e3fee01bdad7406cc498ceb0bc106b4ca1c7622279c979de655b5160763aecc078ae4f2dcd3e9999e1e09cb4962e7de0e22087a6e8472510ed6d310a337d0a65975660c96bf1c3b3069bffbdbae51acad5a1b11684a0a8ec87a88d27c1610b10c07a51007ea3bc7b38a0ded0a1133a35717cd4d65812563076f23cee94619caa3460a1cc8575378c79deb76fc59667106079695b9593f68ac7fce0fc48a3c54b21dfe50b2c2ff06f740cd5f8a63eebcb9323091113761b6e33e36043eb337e5173f49dab90febe7c05fd2aa67960453396ddda7c9ae04e396cde833b25e818794a7ea9b1c82efad6768b3a141ce3fdcf70d7f217327418d114378a71b27ac697d9aed7b26882a23c0fb62c8ffd4a6760e3fc1718e901fb6442c791e91755c56be85841daf6bb2c066ae41a283a01abd191a359465c955d86f01c1348cac1ecf88e143ff075b2dd190f303eec5bbc89a86c242aa806bb7b472ea4758eb7a6c7316aa5e99898dbfbe52d2c67a5e0700bb371d29a56dd31b95f2ca841357fb5abc8617d3f4c0881813ac44073e3e792e445d2896a61f50ad3272db5df67f17dc72e70e0c57a3135074001d7ce980b7ba4fe3f7d573d2485d5e655eb4c8234896f11e2c8dc2a19ba7f8c5e72d29c77221b65d9ed5fcfcf1608ff20d1299100a8d0fa608ce484d2f446dc7e6a0cff180d00cf390bba279cc6b34396e7ae1afec3fdbb544c9fa6198fc09b4566742ee53d73585ece89a37dbd18b23472ad3a4ee18022f8fe8a4d525626cb547a0a2134d0cf62ada016d9b963a9846c514d3a70ac385d973923261b5ffcd6ed6155f63db66d2d1bde3346e30b6f49bc398a72ccf0caa7252a11cca6f6073a036d16bae8789da7fd0f0e62f6296455780243a7ec80aa3168731ebe64c08fba6324ae257548bb64c3c689d4854e8531a7a4bd1da744546f2418ee8dce255e9800212a307d982ee4699903f04cde4953942f1f1e90e523437f855549f655c929ca21ad64c45c85e28e435858f54344ea6e8af0c3435ed7062477d69fe100082cd4316abb3b1f6aab3cabf9b6956034154e079abbe4ed0df6b2d8804e2ac28861019f58c657120e92e0659adbfe5a1caa73113b004be490fd8a279af776c68696818f63d793a5c693f588ed0f2653364f31f2ecfd891ffcb18267997fe7ecb1a09b0ab40697a2f067d7693bd4a6c137d60f901d6816c594868c06ff71f76b978193446d32bc78dd5567ab66f6f6daa5c7dfe4197fcf237e64dfd95b50b6386a3c15d511e2cf4a7be7dbbfb7f39527044aa69e360848e4f8c3369b19035608df0728a993fcd42d9309e32bf7dfbe13c099432ea8867a0201d880bea3b0ecfc4cf105564a98b9a6cab45229a92149d9200091bca844357e37e1e22d92b105363fe84552b6058d50b0d40848e787a7025db31be7ad61adb79a612cd38817b0f0233d59e2feae7037675908f5d18b7d1e20430449bc0b1c91c0be45bbd904a69bbb618f6c8b7ae2581ca1298dcf6056d50ce2d0dfe25fe778fd8340318e442732a75f961854ab928d78beb879e931efd9048c11e6b6f1185a7a5a422616257faa37ab65f476bdeec34f1a7c940924eff3a6bac27af0444018225dfc70fe1b804f777c223c293d96f7d5916ac9b47cc45c12da52a24461fede44456b3fb9150e198e64e85c8b3cd54a5d82513d3e39d5f44c035c8706cb90af7bca6e30f60c5ff9000265f703a0a58fdd9167390b1d7b6e0fd3553afb2ad9325e111041195968867177c6c00faa82b5bd4372758b5d968d52e227e1115537809918257656fa0259dd658442813918e081a6e18c047cce51fc998a3bc3818c38d47a1bd34b2eaa8ad69dbd334bb539e82b8f2f7638bd651ced89c88318427caa462f82f537c2b495a708535ab4b81044ff3ebc33c4c5eede88829062abce35cb02b58ab4339884f57f27b430e4cbe2874f24e958e9169690e475aa3105b5581718519507502b86b2ddc324c61a40e50e6acd8337bad35bd68f03f860886d5cb2999934eb949df3142d4de3648f36d5f062feb9cb2dfcce75a4b5ba84b6e073b529c073c1e5f34e9db13cb92f91cbd0f010f51a5d0c859722967f7ec2c78cf2d21a0c68264200dbe0e0de1d36db5f4d12da9b3a61f3fe836f6aaca9d6a574b2e3f4d796fdeae1a57cd76d56dd9e25c9a61d04a4c9b7f8c469755442a177731574fa0554fe6bb731284ba64a5d0f9645e584dfa6266311616e8469579efce723bedd157ad9b819b4f94a011a69cf341c281743a171f81ce1d623f8d2ccada1e2b7dd93184b17c535a372fc358c90b9a23ad33703fffdd4bd7fb7faeee57bf23fb90c68c069ac452fb1ea46836c9f1d04b407bd2083507f2cba05da05f1d6200c51a745e348a2f853578189fa2aa83adeea2148014370c3dd425124c59458b64026aec3c84f5b9d7dac6b434de31afe20fa32a7ef327ffe0ec1e5429076ffa0202027d35fcdcc0a9c48b1999726cf5ff0f3263aad42f5c2f19432828c8d2a6c678a1ae2ba75ec5e58c11da92f5fa8a47cdab9619df20ab5949c97c3b817371807ab08cefe64a6a5713a23bb0d977c1633669d8ee6b17b1e42f52cb495816e589f3a8ec15ae5a9857f5f0f24024fadc7bbd2ade4d61ba78a012d06e7a44c8eceae8d5bf9a6959f24a7647d0dfd46c3dc94d37e198d8708cefdd06d3cc21ddd914931cd1c6b6f94ba503ae1207375cded0dfe6dc1bd652927f390329ae8e56a948289377eff3031253382a11ba9dab9105b319423694aa2992cbf982f09c38300f133b7fb4219dcd0e0bb567bb9117fff4b95dd0cadbd5d07e137ab7a2d6e5c7722a7c419aec0dd42810d838138f0c57f2ffdd8b259f200c82872d971c50f018eab7e217d14d705a8af1c7f8944126c0842dcf3e6f49d6f7f0e4de87dd725def58069f6a92914769762709520467cf3d3195291fbf1bb5b96372025ad3561fd65a221577056af04ea064e24ec0ac2ce9f593334cc9081a28121efe035a4127827847a5e906e7916537ac7b77fd52f2f44719a5f3c169fb79fe37fb311d8d7a894036e51edf3e83c827fea791d523624ce155b8560e5f5ae18335b9c387a3190abbde030eb35858af5228e399d7d316d228345023241fdbd531aed7e462906aa1413e7a6cf6a2aecc343e96fb0591e20f1158ede0caedec0af5507ed5bab3d392145a91042484488937386b7c13bbbad4d9881d0fe2f1c18be2b612d6c58d6ff0ce332f28e4dea29dfc02d13c2ece6eb8bcfbd9a98b0e381304c50a1098dc8a1d51ca60df5eeb498d503c8610b27d419e0670eb60dc99566a256be3f160d21d3b7d0c6af17e107b6e826d3136db1a02f95c34b9600d572d87487774c00fca0662aa57e14d6dd1784ff680734c330f67649f43d4cfc582be6ed80605d272c856eb8189caabd78d431d59080f76a82ba851a5cf2d4b46abe289ff26a21973aaba3a2f0a429aebad2b3320101960205b01b5af29321e12643d8f698e42d6455000d02c46f84cc01fb67a712e56094116c83d59d8bd5a7d7baa073cad5654c9b9e2813498eade62b0a9548af059f355a3803ee209db44c8bfed0afe8e4d426568b8f8a58a2bb76d43e642dec414518df932d985a18597e3ac46a3840ca9d7c026904f6213dfca9e4023c2083f01a2746f9933dc090f33545ff64b4be83ddba64a39478d389722fd87e545827c58b092ed118c848432f246d01ddb1b7f6802ed0339d135b6ea8ca394dcb46ac7c0684f1e96a6b1de8d8ab1add5858a8b1588622fbb78e138812d24419016225d5a0b85e2757e5b50af8d4cb12d4b4d855c302a8a835c8f637690b60ea3d8e4722258576eccd830347047fbe23694e38ebb490bc1f72733388f061c3006a4ab68b1b95d0b1a66f624580185e29626a594092a9f57514a030449c1daa87a57af31d1b499f890cff5e851a48d5c4b2e15e936eb736fcdb8f311111512488b0cd869dad540793f9336e53a38bf9c3250a3b2e865560c528de3ffb632e3312e1c62154f255061b476af053a3090afb4073acecf510aa4b5df2c2f1094bc0ead8f481e04a4f06388966e9da0384a907ca373b02f956aeb8d3ff5aabd8767ef6ed0a80b79a5e1c646b2db9e0cefca5d852cc8f7a5092f4829b2cd4361cdcd843b0712a61a2eea7803ffaeeb0d7641158b7d377546ceb8d619f6d99bbcfe2dc1c80ad46dcedf096049efd3ca3a39cbac343ad7cd2bcd56e9e7721108eedbedbc2b30cfad49f1d453576732b3eef687d565f9d92dbb39bc3e9efc7e7180e7553d3de94a109aba8d1b9e4ae7825454a561210eb7c184a2399de59412ebd121e657a2fd63b889955a4ac4f5b551235b3cc6580d987018c38ccdab85cff39c18136d4936c37769feb8d74030aa3beac1907b11d254c0c4a603dbf5b1fcfb5706dcf828510b96c3a11b99fe4ab0ddd97f598eb476476ae3acdb9944478047eaca658c59c147c9b78e620163ab26442d69834abd33401e273ae922f3988f0791fa661ce075592396455d8ab8b2b2883a3e8ad92005dea5f62045161bede5c601551d386c4f080f7455032bb03280cfeb142a2bfdbd12597969836195e95af2cba4e75dc8db3f82e08841714edd848e5f87359af5aaceb96c2e201e51924f43fe561986712b9a224889171ac485afb7c81be92ce7697498f544b7f5f8d4501b015c8f1432dfb1c4c9fb5937c084fedc2ce543ec78aff3619b4e8383ebdf4baf06f14b03cd0161f026d7506e05f3cec5fd225849fe8a137f4ed256f354bd6e7b8d376c309a68b822bf7dde296bb007b7f00de366fc87d5eff759dba940ddbf16f5aa0d3575e868257bb5fa0f4d6675d3f818fe79f1a4e0b957fa2b0b5d5273267d4aea2e810706f955b68c979ae2d500c1877479b5c0e724d4902a03e75957b48754d64c37839c7b2facc5a09ec1f26a697256b0aafcd04cff4de62c5a021d0751d35bb9ab02c3ceb8b2f2ec3b613d30e13a633afd6301ed343f6aaed780ecd39ef8b2bee88bc7603eb2de23597be308c6b4ea89ffef70432f6030b53c1e0aefc8b6d5a391a13a19e9e3090dd459bb1c9b1902075eda4783703414268257ab223cbc6228daef8543ac26e3ddd11c1b8a2f262eb0c6c71d9b1b8daac13902fd766407a7274649adb718395d7ce686f168f2a0803f22dc82fffb63963052ad33dc438d4c4e45d9c5386ebd47d7a670e19ee04da116d31b26f532ef41e45f219594f1d20fddecb7dbe060a2f4cf05a7363c4e9cc2edd9b2fd31b9c8f3226457051a4b532e077777d802d0ed49f0b0341597f37154c31a0d5769d556c2467b214b7381e6271bb09c415374c2d006375fcb50bcb2c18626af1fd6cc0697dd6e12295640a429b00f03f155e55177fac983f46cff9cc33b967dd6e725b3c8aa2daaa39bdd516bd4b23209cf73e72cfec1fbdf7ff8905ea0e8799c48c0225a6e23a5f61418d74edb558ad01651d4ae26d9dda1c1b9174be91b2456f4ead2de3add31da75fc7ea4e12610094b66fc734a81b2fbbcce05ed614a308e4d6ba5fbb807c13fba174b9e48bb156b8743216806a38f5264c2b1b9cbce91bc17712dd9bf35a3e59e16c8fe8225ef22978bf9427a557271508cee7e0d4fa7c1e69e351ae4f7df7bc5b231b078ebc88508bde8c9d25acb6927175ed191150a68bc73be562734564167ab429772eb5ac6cd4e6b355ff2128f7f219ddea91ec88d73ca317590990ef130e8f5e9935f3d200dcf34885b0a5f65b220ab9cf13f49187b09477030e35d820847c8c82d6dec07e3f4c729747fd1866cb5fe0ad3c3bbd9da3e1d323ef382418f90d1d70c5cec4022063d1f8d208ac414887e33d9bcb2d92ebada1b62ea269b1f4c9c6fb7297061f274d1a779a407cf6a0dd6aa04863a726c10cbea54eaad0d33d1df1a9ac3db3abaa012d6107469dc8425c4b41b5c7db9adea9389769e4b9f5f0b0a711c5e5761346397c7c05a6f4d26800541645fa60b8ad5be75802169be348f26fab1c1e10308150f28128acdbb63c257618b70e9f5e92580cbd8efb8ca08f7389e6cde795c908e6b8a763af92c1cd816551cbadd582ab8da8028d3c4d6f460bb5dc39ba32adf0ad1a24e61de6e5d72420b33a2f796a8f3b6e1c40e74b8d22c47b4c1dd3dc14b8fcdfd887a923463e67fe898feaadf97c2e5b0555886fd6e05d52d1a2f83d954e92aeb2a89fdb27cab5c38f7441bde6995e6e11fdf8b8983bbea1d6afa26020bc9e79561385eccd544ff3fdfb196d1b1b23103a5fb8459131d0ba116a011f3780de57b35acb8a2b4aafbe0bdd2955b0aa9fb8236adf1b54dd381cdfdf90a146f452e641d67ec7abb80a936a650af63f5fde5c66cefa80bf5d5bec4a282601431e66432a56aa43bb59a22996505209f4fe7d6f06b20b761ddf8e7ab9c3dffbaf7578200f138651d2da9182d3a0cdc70dfd3c0803f36057799576310c3b24dff7ac0f630a4de7c9654de1e076b3dab9a9a60c12f7c7c1aa7c2f76a47f7168cd1a3f1a55d1ae7cc3841ea32d7f26d03ad019f48c0550c99e8e2616052c36571229a1b2dd54eb005f290dec660867a70fc06902376ebfa4438ad23e89b5d9096868f3ed886f565b96180ffaec895b8c3e9204a2a1c098789129b6dabfa93fb9d103a2f2268b4eea925e8068b1dccde6975689c93a52ce17821e6cf859d1392497b295dda8b061558931b146faac803a1468bb7c6f191f1ea66144db4559f8dc850ffcbf7f9ad4793b7541f47dc07d3554e3a05d1f3e9ca53696a27d09e39495498707769218136ec775d66e5a21b6dd4a0ef884591df60520816f36e071bae9be576c2f68bc51f4ba0c6355d2e17d3a62876061547c4105663fc646b3ecd169425f8e2d8fd0fcef2d027ec235d7f738237507fd43d07ab35ec7d6a5732f659b818d6ab50c277935d69deccbdcbe4f6f3f10bb6741365f246d2d1b398fe97f1b7dc5ffc04a3c58f01d751f2301c4fd88d123f17fbc6c4b9cf3e499c1e7ba253391501eec4fc3457ee725e4d3aaf2475dbbf042e0cbc53419c04c0dc169087329f3261e383728b5e01bd6362f7de68e18b0214c5684bb331a1a0597e8da3f40cc2dec03899b16d0fa6ccd97ba73fc16d4f384142fac005420ecb247f9589a87b48a320ab4d40f51fe9034def692dd3c47d5de89df67e418b10570b8b60464cbd9aea87975809d76e3f09f0fab512e86f51b05b2b88b4417dc5a2ec524910f04f5930dbf52f5960d85b7748a95c67341a66434276bc79ef7f4d6a027b26b6278e9a96f93d213deeb6ea8a21193f67f818f4be2ce8bb53b576ee65d1f90200f11ed46f184907899e02f76354fc643f7d521c6103819fed4252be67e501de4712a5a186e0e317338230407ac680eee1b89ed9731658779bc2f5ae759e225b24538db5df6a8c6d48175d04057b9dbab8f1dfeac90f8c7cf7adf65256ca19ce7e6dbda7dad1d9029865e372476cb7352302d75af057ccf3176dfa7b8b3b09c212fa795bc9ae2b6baea37313060d67f284baa46331221513cef84cdd982261b82f760446289b29e4eb4f84b9da03658eba24ac8b07ddce235f1f614cc7cd0d324c50b6b77861cdb54d141d99fe14c4ecd36fcd55d24a05b21ec709a7106e49c1cbe467576071e85571e5dada05287ea71296d730dec6ad4db645a54e6d7e24106781b082cdd08fa6a44a1f9e6d1a57ab3f91f4ffce436b5f545d8fc04c581ba1d3b74b58676eee431cb38a70c65bb5358083a93ff316db02c9b14842cf00b0d22aa1a68f2ddd36af647b1c7e7f93b1cc677db3935863a87b593464284697d320044cdbc1be1af63c945b55111e1cbcbebc792f0c49ca83fe2a3b40572effa1b23d8e19d90630ad90627183751b674d4c21cbdc09aaaa5019285a8a12a3549f98b548c29fd9cd488e1eedb3cefb9361b4f4cf6c5093beb51414ab4cc03fa8f9f2f1fc29e8da9525a51ef476703187434dc2eca63612bfb9be7c944ba033bb6d69d552ad58c8ed50225341762ad5242e53eebbacb6c07cb6e962125b0c5cd393a8fdd7a1680e0f3d4ee50011232602b4a10a29e7bd7abc42bf5b50c4a0bf5fdcefd11e85cd6fc259edd5623a72d0a895ea7732cc126acef47a84938e2d8f35e6252572ef2991f2e46b4faebfa5a80d5b0fbf3a46395ee70f848198420619d586c4749c35d7860f499fc49151160e5d31da4ae8adb9396be30689271e0c62efbf2d4aa23779bc166472d046cd0132be6d686a559373f3e8bbbbd29c22a77c2d0c05659c79bc98b569b480847ec08fd2717f55936e3779c02aadf036814f92c4439b007ee9ab4f5a4cfdd6ca982c96dbaddf97e608ffa16a1ec7b35b35dcf409aca36cf63fa3b487e0fd4ca17f69423874e891c5159b7477e04f7495c5dbd2c48bf0a0b0053323614084790e153526895419d31197a1cbfb914ca0709e761e5afa86b6e05d148857721afe010d02ea0745f63b7b1da0ba6352ee0c5c47c122388310ca6c9067902e0962f418bae8053ad07dfdd8105a78843e83aa3be8482330fbc1557427875b2dc62a4f4b5aa818950de8ecebe8ea783aeb5f73612681785262e6db2e1ecf6510286b74362f0d780e998f672c309b5ea4f4c4e325ee46e67cd8c1d22a81a15183dfc938a29d3db3e4ae6a2085575e50060b8d93b6186934952f55702817105284ceecd180675a72f2067a5eee9681abfe91d11cefc8fd93501262edbe2a3da2ab57dc2e019883e77a3a3f44e276f45db5ec3dad13fe6f7676875fb46a89edc6d0561688fbd6285f6d9a03a40b540d8fe93332e397abe5ec9b6269f2eb2fb18e0ba57db6084d544ae4db33f1cac97e4307fadd55814b6514686c07dc3759cd079be2593676466041b96593617235127f5ff6b9ace0abced844bd495ea5a78ca77127e8f69f264a93b211e44c57de98d14c763f14380c4a6a45ebe1b3d481685c5d5b25abe64714dedeaacfa52a1615e12e3ec83de89c06c8a8c87c9df32a2568ca731d2d987747664e0ff9b8cab51f381add4ede25709e2f33b74c4c655c5427353d596aa1524d446a712f8f4ba57ced35edbfca843969d6d6cde5fa6cd2aa9a3e9d575bb67b5a46f257c29a0bc56e0c28fee6ba3d719cf22fbe50d1d58d598a67d8e4232f8822ec14b1762bed5d79b5a52983811539dffae62d9778aabc72d6c51081c026d34558a5df89c9f8a3f74346e08622bdc10f72b3a7ff11bb2f754253461ed7a3319ce263c3aed8fb069e142c7fb1ca3b733701bac27c87ccf875fffb6d1b0f2681de42bc588aa33f541cd12a9e2647e88e3512f345706094ae5b6cc2cb1a8254f730793165464e3376bb676815469564c3eaaab81b2e31c29c2ab4208a9748cd1685eb28421aad9663db81c70a98263b0d08c94f6bb1fb2b2793b89e274dcae7caa7ad0877c7505f726122cf965db4c5e205501b1109e66985b11f7b16add4cdc9995e869c1ddf9dbd63916a560a0071f2aa2a22fde688766035a1dc23ad221a1832eacd1cab68a1764fb52f0b8cb657e95f9dea96e7c08d47f5c9be228e173ef12eca627aa5f046554a8eb0e9d93282efff84702bfe86f263d2cc4ecbc7fc27667fd39194468a9db4ea972a6644acae56def10a6df13328280cbbc366f1689662eee644ecbd3f097fb2aeb54600446c9078128f6193e118a00dfc345a0f33dc7c593e2c3e72361ef822c025c2973f28f5d2f81f9af4e5fb1fc099b295be129afeb17223d3e936ead6daec21d7b511ba87bd5c2978d886c4ca8b5612d835932e0d8e5ddbd61cc7eb260983fcbce07adf8efaa0a50b1a49dda6f0d225de7c93329d3055a06d100bcb7d7044752ffbf37ec7048de21683915fa7856cec91a90ec7a63cad8fdc25b61edecfe4a15902695f98d76c7dc76f7e27b21dcc2e565f347fabd480c8eb184683b8f550f66c13053b57749ef77a9ec2f319094ec82648712e7ae8b38b7d3b0f7329cab0c05e6d8a79924e4b562ad8ef5b43d3f052b71ddfbc8d1a5973707ca2da0ddd301e9af7480e4b77d66a47d3ca259babcc767c882aff3892ff568365000bd413636f9c4286b434bf3a048a97c7c461860a5928aa2d6d90999f590010cd5e1582b812c3f2340d4e327dee3f612799b351e4006afd1d614535cd9692a4b0a08e606485770f00c7ebd73a29c01470dc5ae262399aedc09628ea5f248e7ed05f27f54ebb95c4ad8bab6c7ea5f00822004243294ede8d36b6a02fd7dc6d76675f5c2cb284ad46397725419a12eb51b6cd632592b369f2da2e480a86fe8939e1ba4f0aad2bea9882a4e1f61565cf0e0b295c5a1bf28d69d77f5d2de62f7b40980265c3d6eab0dff1c39adcb5ed54b2a42efca8887ad0b80e9916e5cf04b1d00c0ac23c3489ebc02eb4f01a3dcf6b6c4ee1768d3fe532f394ae14219032f5fc9d3daabc63f5d28975b2e9a673e2fb33d6ad0fb7d6dd8d16ce70039f11170629d20c5198482e3f8fb1972f43234fb5642927812d469626e3557b224fec2c154fcb39eba4eba5aedb1a7309f25d6a98e25975f7215022972e3daa29194455e4ca1f8b4ed85a7ac40f84dd1a3f442863c44462bb1dc0e5bed2c28b300ae1060d1996ace4a4905c944d14bbca94fbd8becc303d09279fc3008f6d086ad8e98d8682ee0ef063e7158f6c4f79b221ecf697d1a785fada6d0b01e726728cd248d07c7ac5a4e4f6fbb0ab6da26a64d424c3d8f15a0247fc0878d92e7eb03a5c6a533661002008e4a30535d52495b3fad548e1bf2ff95714c3ada92061ee54b185e76cf69c30958b15f64c8381cebf5d81496d7d2066355aeffff521efe94a68bf8903aa9c39299cb870aa46ad1dc5d3071f226392183ebfeaf6683c28170582ef9886e55e5cc84f1079e3bd033890050d7e28d81b10859ce018e2c2ee46d5aee85787319cdc20ee67705018e83b40ff6ac11e96bf64957330a53484c7432f350505ded2e03c528533cb05e4a465037892914091d026007452d4dbd58d299b124ab5835a28e8ece6e744fcefbdcc168834804df7626096c78e557eed053ddb333393ee92ecceeaa96b7548b14e19bb14155fdde1cd0d114b64ba45218e965d68ee5e231637cecc7f80ae36adeca6a8d6f5c6d8c5634e283e9a8433a0be17d226690bfa506e2acb45b5b7046971660156d1150a1eaacf14493285a6b386200d696d077cc6aaacedd2b2c744ac743d7febe8a3a60a7238faea063dbe0103452e1f195d2917b962e029b30f7350084ac573e55a164ef3185baead073bb383677eda984c6448a7e658db3d5465f49e23647bacd2b7dbe1ec4c2c71331f807fa0597478c5f134ba26f246feef05574c3078d8ef875b77ab732cd4dc47b0343967cc2936cb01a9654dbe730fbb89561df5594cdf2518f52cecfb76b26a51e75a6823c6817dee84764aaf723b2119c86be19942675983f4ef3559ab1dfe38980190dd1ffde445f2513dcca22f243618781276a3a859238d296e65689c0c92a7435d9914a67ae989ff68e1f7b58aa051be7c2e04e5fdef4c30994aa6d3ada9226d6705e02664f6aafc53131ed925bb9cc424dc49caf2c5b44a3c6aa2e04fbe7b7ae2560a213585433776ca0ac2103c27e237cf59c3af4349b03b593fda66aba24e0332a57672c5234d0ded1da51d82614164501a1352d460de93dcd73f36e2b5347fb3caa678f9a1828e222d31b82cb581473256f293a589860e65f152ce30b680871b59a98eddd7d487b4fa7e2859756490134ed96e782b8e40f604e7f1f4173d4e4716c75f24a911ae9bfcf05b663f4a0201284945ee589dcf635fc3b2da054003a683244b24e2e8489be3ce1fb0a3b208ee002390baad9e4371f9e0ff42b68cb2d8fead71d30ba1a4eedef8705de868f44cb78c6d6853dd6327c536433a5d7790fda048b4dd3fb44dce733d9051005cb33b34bca3391cde0e8856c9dc9dd6851f98a1a41b380ed1b3014ebb46fcf32bcd10da44902fbbaa88d59909b4108a5caa3c8154956a7269bb0190df95155c3a7ac5d406a1e98068e95aa63c957e9701ecbee649768e9a44bb4925d9c5e8ffa83480ea872f69b7c338b72c8b6066ccb0e75b12ff064a273f0d5f8e06840492120da6bda9714d6fb8de9ee06bf67672a9e652b3bc27bde0ebf8b084b43ec8ded349a506ee8d1045bf145aaee147221179a8a9ed3c20b47983bb102d4d63ab5916e0cfa0b6e94ffdfd5037377752c35a1936572800dffae034f1d5f1a85c3384065eeb4162a6f2f290d4ac91611dfdcabe76475b6ac76e109e66d23b128a0e49da45eb70eac1c2009a34993a0e295ec60eb089adf40e7401bfd36715d131ee14e668f4fdf657c712888397bfb36f374d8898adf43ab676cbca8d40a9090ff3fa6e69ca60597d3bd9534cc940d096b2ce7d31f99bbb638806ea2d80f4d4d7b08d80a83dd721ce7338d0019967ae400c827ace912d83b8e0e9d05170b81d42d52b83ddfa2e5b2ede9f985cc0e7c53f6a1ba840626d31d1cc1e79f107a148cf3f5dfdb5f91d5d6e999fd5359f08a276244ba258af0f913f5f663848fde67ce92a9b3fd014ad66eb04fd4106a5edaaf3f61d8051fae3044247be8cfab86714fcbed5182af23da406a33a71963be6f046789d9c9a4b7e62f2ce18837ef511944f0db56784b1b6d63f05a979d58cc63ba33b031da39cc4012870d4b4bc97c907c18074596a52377c917e60b621085dae1c4affd31d5c7b5fa2744c2f3df6f0410e5ad5d6bd9663ced88815a9ff554af80aca731e1bc6e348738290e20f09d4f95d59a1c8381ab93ba877589351d0251e76134ed3fcc32782fb6fc4f7b8296fb702274720475b45a4b5047812138c4b480a91b25c2a7c7c5d8a791532c9a87e0ff4bbf7c5a8cdac2badd82156a9a2a9a77abc27dec39800c0c1c46e6ac1153ff080e3d8f5b354614b3fee2a46871ee068cb195a9da6922c71a5086137c1762bfc89051366b2be535a3b59017fe8c3adf7295e537f86f7bddd1b962b825eef9470e6acb0cc78ed9b077b0e9aff775c42ad9f7fbe7c57b7b7867aa84d2268fe7c9e95f61ff395caf6527d967d66d65474edf4a9c013004b92af798efcc299fe0d8e5d5fbb4e2a6c1641bba1d760ed2360c514c8481abe1526ade110941f51e4b69bf6f115a592326d93c15c293d1caccfa4c167037652e59e36d5a3c8a88320dfcee0d23801b69671be9c63312eb7321df7f6c6db1f62fb6f3974e33cecdf10aedcf1143158dc56c262eca8f913e3cdc71325c20d2a81bd43dda1f28de44528d8238011407878de8bcfe7e20ffae12ee5571f8a7c1ed1e9b881971b38ca8d068b9138d5b8a41675743a0daa636f5ecbd6901cacc8d62d1e5c2fb24d425a4e04764d47c94c030bb9e2f38b3adf77cce088969eba15ce4d099fb77d9f1ebd8ab303c89e6ccb918dda1f0dc76898a960d1b094065f0737de5f8f2986752ae85bb745c1d47db3bc76767aac0f7ecb0f2d84faf5a3acc31aa6defe0670b24c2c660acb425f134d184c6202e05f399cd50b1e24944ef8bd6f7e9874f5a0770e9fc026210df222d5d3401fa2e55b850d6c2e9304d2e6644d6f1aa8e4d2cf7c60a14b2a65f3f1122da9ca7fa55c3be114b6d00d43fc199c1d0aed732fb7ce784263205d48ea571fd016110124fa5f3da07367dbec452b4a568758803427666887cd71ee3183a17bd14ecfe552ad63dd2f64ce89290f18916ef86e66398ce383389db80dc5161d596970cd8f6fb4e2ed656c80dea0e6a4f611fdb04037c888c3a97467c2ab5cf764e7417de49cdb7b5131d850d7b38dde2a07bbc24ff34a3860a7cd62e9c44c1510b83b2f98f30c007653b7a43565def21bf97daa378454ad8f18e7815463e7598e595ec126924c949d08287f18fe0a2fe3db2b5b06ff8697b001d9a112157c1305193678bc65a1df752d108849b28fe1e5d0b3696f1b18c5743068e850ded5a13b7dc8ffb848a091722e7212033c82661e3758649451fbe967dfa873cfe8973cd9b081d0faf00d5ff83471156aaa2e1df4abb7841f67a8fc975edbc58fe8feba4077bfe1c02d40397a9b78413cf97b79b0fa443fc7bca89d5c15fb7cfacc1b97bd03ecdf17a1356dbcfc40fe13ff470de80125da092101d042f116a3d9760398cbefc6abadc7f11dfaa9a198cb61ae478a9bb8d7f4a230009dfdadabc03594882623429ebef468498d3e37fa603edb8d69710ec2c2045c95eef050a62e9ebbfa7d9e82cf51459e7e39337a98e4748d06997554ad4194db042b0d5b8a3ebb897e2e5afb86ef9d432a009fa911f62d2fbe343d3767bdb9fc4cf94fde04173d7c8e28b36aff9056ef707db6267f833551140ae17a36374476ce5edff446eb68feee94c07bd0dab7fa49f59f75e6f40c6d9e9426d29fe93ebb672d5342e911b5592183e47072da8fd43e28c4c9a98eef6795aaa9bc32af7dd6092794579dd629404fbb5bf9d16a7d6704bdee815cafc2a23f570a4509301dc6186d187b8b6bb30b96a985d13d3e78750540c46e7fe1e5c933bfaccaab8f9ea6164f3c8cf45948dc5baf0a477a6e8a25df23974c9bdc723cb788557ecf5f00a561c4f9fafef25bba084121004b7237cf834bf32b18cf9ffb82336f408e8c951dffa3332f5ab76f94cdb22022a7cecfe5c9e82e53742055fe38836e12897d5cdda82fd854f925fd537afbaf3334a419d18e3d71aadd538cda89921b81890bbf7200364d3e2d838e0152f23c400ea523a2949654e51284409dd4af86e9de61ddfa0901aa4a5b94863a22fe5a5b9ae3688bd88f27ff01dfdd82e10de3ee03d8ac9f7640f1b80e6eccf81c7c56e8ddcdcd733f75d4abcf44341c03d820b98523d8f8b435cafdf0e3eabcf96a3e5b229cab5687bff87b8c561de077abcf8b33cbbafaadac0fb986336c66c1907fa90775f3a42b98baf035f729ab92652e4ffba42114dcc8278a0c3b2ce67433877704493e0d2785bab9a432451e5e7e6bea5d9675dd9770e7bade9ea2d1ed43ce0a5b1c8ef93f81f4042dfe1731abd83680975221b772cc27360a99d97101f17aff4a2599572b85f5d7957f6dcf11d2b8374a964b5e2c47ece7af47ebc95e2b892216c0128bb7115ff09f406c7f44b516a537c8263a3bc581594249b57750e9bd0179280dea0ce973d33f78bc876780667e8a1460d735788a9cf15ea643bd50da017f92508e4e44dfd06a42d9c4d2eceb27b6f7fa408074acfa3081bfdd0fd9c849b499a38bacf893e45bcc4392807bbfb0212d8c8bac65fc6cbb37ff644d315b0261fb31d29d2a8dec7f4a99f7eee7dcbc8d68c34bce662eaba67cc5d89e2d0dac737ce97472f11dade09c02a4d835352dc2bdd18522501345e9232d811fdc43d75df73955036d839a16d58d00c06178e5c17b172881f0d7846e583e1d66cf38fb0e037d1ef544bb6e3c214732b7b8b95196967bda6621f2e3ce68ee1568ed543f5c672c4c380cc8667029437931698bf6353df52b8f237deabff05e9f9d956ec57ee9be8ea8771f915c5cd7ec494beea56b0cda1978a6f71d3b92077901e04814004424ee71dfcfa64f277bc088aa4fabaa4a44fd25582077fbeaa2737ce66a20c04e40b0dc6cdfc26bad4a4cab9cb366bde22ef3355f0e839e70f3035b6973b9ea4ed28021cc6195947da711c26977c99c5ec6fc03e1014d2827380687d31d35caaa112a9e256b3ab2f1d4a9527100038931167ab8b0ab113aaa4e0011787e1290e48fb26d5b24869dc74686a4f25503a00a6cdce44b174ef861f518f96a0debd103df910e606a1d6b2f8aade085f07ec7585bfcee98e71dc717b5a69bd81e701a7ad2786485ca8c57a2ac070d4f87d73f0bc406eb9a0d392b6057702c9987ff496fdba548b5b059f681f432f45605f995b81d17b9750f38bf47274ed93f7215a2c5df3092bca439231c72821189ccab47caf583f6a1031c7798c32d7b7d6ceb1d6efea5981400c62297377f18b4090f00f29b9a98fd58beed16282e5fac9ceed4a808ef595610ff27b899f64fb398cc1d1454ee1e6161b7d2b3c6aa80d67b0044c7dfee766d8c4f563e1d0396afe5617cf4d86af9c6e7efd5cfff1fafefcbe32068875d847d3910846e56007140d884d2ecaa8d883c7c39e31aab8e1dee32053e5852dccc51b67603f0e4adade409d6feb3a94b141c5f305ee944fe83c6e7ee901661dda9b9f84c459d96fab446fb5f8f1d65719f8e903623820a80937befbd93d7a495b93e50b6bda950703430bf893c5954917b3156244f3a769fb85c383faa6f70854e3f3ed1b6772e7b6a9231eb7988897c5a69d3b2b5fe5ed5c1f1d41b8d7b970b9fc9c789da62da980a963eafd8074b8c83b3d1bc1b211cf0ff881383c77c74a4a44b1236f6469ec321440cc55f2cfff7adcb875b6684d3cff714b32d841253a5679822b6b3111f67f9db2495373ca37dba6333d6c9ebf0740c25cfd7d6a635758852ef28acb062224af71f8354d7551d2d79ec48f0b7775310f658b21ebb4095db0c4c61df95b282c6b7255a4e1c32e94c001ec46d114373f317cf83d9344481e7c17986162e6acfdde9fd5625bd0b0fb0a6a3b8b03ecdb1a1a56825cfae2ee1a1c2562972380eacf46e7930919fbd7790dd497bcd40764b9e63f67c5f3e5dea38dc1eca7c5351c1bbbbe077b6d5846c104d5bc93baa0416e387c411194e468e45cbf0a341d03c014cf21dbe0027019244c5353de305ecc7f0eb46f69dac5a36dd72c5690d0799891b56252541b91ae628db6707bc0021cc4ba794ad51a2f6ff3feb99f69006c2b7e5c9cfc63f4ee16a95fdefb673e025a52ea4a237f50fcbc21c5b89c9257c4ef79eae014edff5b0a1edbb6f72e8d47f1426e332dafb6e10c61ffa97961a6eb6c591254099b94e1da497679e8b47f95b9d5d448cadb1e8272a91e50ed4e655e2a624973bc3dc25ff0d8813980a36a8c6ca10b841e8a5929023c78ac918411f633c3d5f4f95b3804833989e8f4320bf7f1e4c03823dd9ea672349580974995dd190a0df3b6ae5345b3822163ee270bd44caea03044a703b28b0009afaf421417f240a71318a181f59768cd4ffdd0d3d560000f6de013957a033a4f3122033e95c7eb20d9b18369e3f4c994f94addf47445da5efef38716ef0fa87d0b4904a276403fd0a5ebfe9de290cee9c5af9a9c33da387bf7ead1e571bba94a84f2664fa3565c4398445b910730f99374ada2d7199064606cd789d65792907777d9e4bcb10701e226b149ee8f39943e931e209217507e2b469b2e597e3ce5539b20cce81997efcf5c7abfbe9b074f8fc3bde5d01b80b1b035b1bc8917900bbc3baec047678fd20bec97d023538913bc0fc61d2d9c0c008df492e17cde5a17a11d400588f8c9941ddded67865db96e035d3b48ff6e1c38a51ec12e88736a9cb953fce9b38894bca4bc8459c076debd02b774d5bdea90da847ca714634d8ebf3dc5d4b8484aa867e0aacee04bd09b1f8c4cb35ed558192c4a809cb70fcd77ccd592c079cc10ae16cdb73c83038f28e1b357204ecd6fe92353ef2147e50746a3ca4a76c5d31cd36dcc1983c14ed754c1d63d04f4e67994fd3383cc6363749a3486d2e5aef689bf96e4b82f9be97e1316cebeaeb2d609b5c6028a82e20dfcb938e9b1134ebe2c4beadc126c88273ae54dd952e1494461b506802466ef34744aca4a85a13970355c40b30ae5712ad603471db1a96b02e477dfb8e6a58df112117ec27141e83c8745d26dc3974347c388a5380d37894f4c44c0663c7e02cdd91ec45b66ffaaf9427625376e77f403e8b3db0da724ed737913d83b9d57012e436bbc82b2217ac557439ea5943fa909c90dd9bcac3d892b0084c75cbcda477a97b8ccb06bbf4b5a9968d5f3bc2a1b2f2e2561074475c46e5dc1e047272febcfc041b415023039e6b5902dc43c65089fb8c3bac6364ea59075f15f4d6cc767c6834b45ea48ca499dcf125794e21621ebed26f919fc325e3ac92c020c3066d6fbae0937b6388e5f81045ceb0eab8444ddcfbd314456570e91c34c98b4d42af7b19a2d9bf3e6493bcc2f95f9407689d0be61fcf9ae07df3009c69f35afa3df4fe2ba2635c286a2068abeb459f486508f6ab32b899b319e1b82e2f4a0f32e2195a9682ffd3a8430e4142399c91317dda5bcf032e0d8eaa0db70f24a78f7aab8bf2d872b0b058e2945cb53405f999e458ccc58e39dea90a7087929ce9603c64a62203fb01c9b01d470e9831cdfb96ad36b0a7e4409ce930d561fb28228f0a193187e1658a1ad03a8ec88f30267f42261f5c96241e50532569e5f2f4c0c30d36e178497d9b48c192c0810b18d4b3f4871f5b0930097d149e1f84a5175f2420f66f8e859a14e08ac9533432038dfb8ac2def0c4b44f597c0150af19ab1cf2b6738bba15d258a771f5591fc71d9cf2b636e5bd69f29d47da471c367440ed13745975906e6ae2852c21448cdb51968be9c1864e776a3197d0e28d9f19e75472c0cbe8a833cfe8a8f80fc2345b4a6943055797cc5aaf2a6b095d00453801fed0db1e1035ec04f86cccb5dd6c9dafe1e0a156ccafed12fd7b0532b9be49d7b0113d5b716602dc9f6c520fb512c71eae263fa41c301d34623cbdef9e546f952317dc480898e446b1a50640e6bfbd8decd25d673413b536e6bf3317eb615bacddf449f57c549efc9b0dc672ec9e759346a64a546f49c7e981ba702af2e188948debb34460eab831f608c081919899c8d02580da4a7996c88dbdd23ba34482dc8905b67344d1ae90145577855e16a97f263f76259d97121fb9d87cfe61ece709a4e7ba914b55f2fc7f3bd6683ca2644aeb6c0a163e17939948346c25a588813ae843f8711b2b1833d0dd4ca5677d9d78b0eb3a865c3dc2cb1b852dd7b362eff64002ab7b48862fc0c20d689dbbc379fe8d640d737e3e9266ecd066ebca415648dd8785c963f5cba72e6ca40ad14e84c7d3cc6b61696ab36b6662e489799c6ea395dc3e30091a3355dc8d6913dc5ebd607fefced29bce962acc6fff04f0ea0844c374bea7b4abd53cf75abf250f222394be94b8bec702bbb412d737fb00e927fee747c6652600b27c01e1400d800fdce821b29e8e92a8f2191c927850810a81de353368e6466e3ad64ea5e37a7b9f487fad0956d427fee3f6e5d7387f40d9aac63a851fa728e7eeb6c586214084322b8d6f87cd41ee5c43668e76e3d7c4cb2cd104514768fdd7a21711d5271d1bc2ced7e19622297f45442c97e559c8352ff818a3df8d195e3bb20633d53fc27ca1adb60568724acf778995c00d469aae05fbf5e4bc31207748fe677a593683ff8f9f917cb0cf8c42951621ab712d892d087fe9b50a280c73cc30cdd4f40cf30be3608e6408262a21eb184afe20f8c51ae42592d6691b872123cd917ad66622f07f2b2c84cce45075f3dfa82fd5b680375868350d93841720ba2923d56c4633e4ac0c6f24f2404bc146dd8bf37352dffe6b77c0f8ec001b23e9b705446bb90d13caf9a6a40849b17823e2ea9aa519c5c5ae2452109750d6eddac22569ffd62e3ee2419a7e02c97270998dfb4c3ab6f93a5aaec272a67eb88c79974c702aa0fe35f8e77a6df26e1d1826b071d0907542118b447bba25ab7fa3f6fe22393164333be17229940d80e1c55947aa5ae19914ad5a1091f0e9b79d9b2e66cdd6861dacbc5c18e1de16643e68b273c64130c380ccc5835aa4e1c8211e44b5bfbf3e4678512ce92614768313b6f5e811f33f595ae1cfc918ebd4ac133d3dab32510b68c67f4381dfda69051fbcc587657e1accfcfbb7e980eb2b6684adea127c97d38d7fdaac18bf52eb2e118a60fbd9efb6e07939f2d77565cccdc2bc7bce98763e3e69c8638cab4c14a8b5c71f8832b307fe2e1d0d17bee4550b1c76f53f5b01c1d8f71765d9a8280296f32b4b3af57722790cb88abae8a73d69a65b2eccba61d0957b816c76901e3b23e06c604f3ce5c3ca56b584faeaf8d5ceb1489eb3870d7d95b4983ff9328eb8fea32a834bd4e37a59ffc70249c1dce9d7197d2d7752d50ab10bec05066a1ae4aaef3b7a38bd932b82374b4f7a15205c8de7ca8aa7a0e42847b112db89cb03884316ad80959ea87604f3c08c1e13f708506ea6fb8ff5e5ac7ca4a2aa450b428aa4a2ab467202f519084a5eeec8982b7b37fd2b86a80a975f0fc0fe11a3cca00c5fa469ae6fd4dfd01702c92d811713e46e6014127891a5d55307eb479da436b99cd13a38a5a0517992e183a863041125686431b58d2b18f117ade91bee5d60b39e5e047636efa6e2a0f8b37788696c3f03a3372e58c7155a8e395ea469fd659cca7714374f95b9279f88d57aa278ec35acfe6a6275de2b9e6a29a258dbdba9650a2f03c802297996569725d29588c02e679835c6035f4696fed292188d10720b785ec7618c3a731beaa369fcc0422292c46eaad824d3eb6604f8bc62a23fb254ee9e051770d5bb9f653f3c782b128c6c7b6995148a10b7278861f49ab60de838c82a99be987e781b3e76cfdb39b939078352f8c53bf367cffceff17c02ea8fc0e00c343f1ee802b856c755598f0240f907aab44e59f57c4a55fd14cd382d9eeb10242f3e52a118141834b00a53a9fcd381bef02aaaa195302be17b3285884a2bc3cc533523466996f169f85260ef1c7237e8e257f9f810ae870c2f1fd7c2ead7706ce305e6d6e2eae4ffc943c91547b73e9fc5d949fc36f7d9a8ea746169da2f81ee3886f9f60e6f53495f74bbbf05b6d11fa0636653f173029835f6c7e70bc7df84a216718adf57032c2852716ddc348fe361fc4beef9aac896e4f87bed05b8792f9e113f1eba8240b0d795261398193f0ca9f3cc2adea553e28768e955572f762a9b38418ac52bb3277f4300bf2bffa45037720c7bd918349a8f3d4f130f810d5c1cc405fd641ee5613a2959e60191133bfa34b7af00a347b781ed75a04e0cc054fcafdbacce7aeaa438399a72a8685792619627c10a3ba914635c3a220ca60321ed2b0ce4f4eeb5c6353d5f849d06d92668aba55ac19e916dd647757d8d3969e546ff227d9937244081b3c361fe6e2d1de80a94929f5889642b86dd11bb358fdd36ea2ab4f5733d9d53c696fd8862840abe54b2b5b850697d90d15cf1626cc32e8a2057a43fee983863dbc2e412c898cf90742fc46119d494e3c8ca1404c101f7b8e94717f488d5c4eeabb409e93a1c42f3798b87c03f249397a9eb6176585dd5f0d7784ab01c808ffab26389aec913c02d71e610ee76cf6f84daa02dade250c4f361d0d5a42cb855bb8d6303ff8fb22c2c1f0557537228fd7a93b9bec534e198f7251dcbb03d489d85c0280c07171206de0a96939be6e8997b5a459db640f2f49b50de3fde8d982d8b40b7e9bd31bd417bbd0e7e16d889ea43f84f1e2816c69a99ba1113dc111e4445f51de68ca7085504f2f4869dbf0eb200baf17d5bfdfbee0067adf2732ea0856d327a83e745f1e2ffe6482b3c39f209537eae81a50857a38e4147e0825624cb2d8b31375bb6cd36a85b2db86dc4d664054a210a2f78ea906cb2e1ec78491f2b5b4bfbff98eed6bce259ddf2319c4a492ac6f636a9018f9dc521bb9e36fbf76b532dcb5bb7ee8a3563fd9c6d414f9aa20806403ab68f94e59e9e20091de23348129f741c6b3c794e7a141c37d8cf14e3d8caa1a2a75aa242123f0c1fa74fd1a95b20db0c5c345c9db48f8a60a09608232d22264c2ca740ee240bdfc908e0769dba8b31e574e000daa78131b44ba338f88c6c977e62f070e4419f8f42396f0ee46f573759631c991a348a369cc358ebfe647d98c270779c2370adf6f9fdb0d162b5af217e3f629a156dbabd225234393568bafd98b64a3f5b6196c1b9ea928edb1f9a1da2d65227a1e7c76136d96d5a761c54c036b8093c2d910642a5fd7336a8aaa982a306736e4358185d833d409de0ac8ee7b505d2562668926a594458aba6abc30b94a45ffce0bf5005db947c80c51141c15f0fa1d200031272c00cace25da746fe67e5b2ab56fb9382181246694675f8b40d11b46ce2e29654e2a3bc30e3525d2e8e0a517efc8c3fc993012bb37d0265609133714840d2a358de9fc009c2c268bdbac3d095326162db4c6bde577accd7062b327703aedf87fa79a918ae0d63cc9d5b6b66ede4a471a3078af948981f57182dc8b89925f49690caf758bc58ebf5523036802993d7cd00e3deb30477a3dea9ae5a1f558899feab2692a81bf714fc328d11a6ddc5339f7640ba7cd4f9f8d4d25c03d1c5d924685ed3b7b1ed5cbb38c9a284953f6bee300479ef830a47767e9819803fea6f426fb7540b62c76e2db9b98f88a1a6d6772609799bf4cde72eadcf2a4e65715715fc85d8805144ef293875857554b9eb2a6f9d940978ff32c36216519a753e46cbb5f7ef4f4b4ff461b4d93f5d20000c516aee29281abeb9d1f4467b8ab745523117c7c2b149fef2735ed4396678274e914cf73bb0e74d25b7aa39f7cd087e6175545cc7131dc1c541e57b9ee6039612d8e16e12df77f1934405084c88e6fb07ef9f983702937c4053a293b3d3682557c287b1ca1681eda0f9fd17c6a717752339160abecca995affb5638ddad54dd6b8c4567c00e17388d62e6de81abb7a4d7694a1013b6410a699a2ece3c02667b7326110a42dd335f4ce223e548ff7364f3747c8459c720e92d54353db198e9d01c6f897f5fc711747b676963949c47e827d9a8b2fc3208b2439c6e63dd7b5105cef93c68e787037c0a4b9e3133cc7c6fc4c17b2d94ba26336402705de19ebf3f96703f5136fabda77e9cdb84adeef5c7ac66b66d4132fa3e8b704859ca9e562b07e0fe6bd48427823323ace7adae520d8e8d48006b4a028bb553aabd147bcf9e7d9e8ebd18c5a5d8bdae50d92c718b079c08f57903ebed8d6fce950c9f07439009b1315d5f906c7ba169de571631d192675944dd6052e07ecdb8d29bce7759aa970d26e9372f14615b3f4db8bb65e6be8fde1b69485c6345d852764aafe1768e154e4a1cc5b890758b2eb04d64a542bff82481306ada95f8328ed8b9607d4db8ac6e462064f8a7b7c89847a51b738e8a27cdf0e69d3fbd52fb40829f38d1bbcdb78b83e6d7edc12bb904a400af69fdbcf9acba784a5cfaef5da46c9f3c6d1ce3035bfa9aa61c496b065fdaf418d078687bf4eda4f1aee57514664b9af4b5ddb088ce553cc753ee0d77ee4c269c149f3d474bfb3a4494c0534a9b0f5608e5b1607d679ca8c094b6254244909700ed7bfbd2775572b32367f272fa41af41ea00079148b621443f58184675d8d33982c1c273db5899240e10122f851ffde9b21b02c0f3e69283b20b588170026f67f7fb5a367949d3b9e313e39eaa4665d3ad6c00a4eabb8e06a1f3b04c97f1e1768a5b58c4a5279db82f4dbf20a0c1b5123c9da3030a2b32a88a4969ea0f4e2673690837608efad951775238052508fdced58925ffe4952d4cde74a95bf957fd1c486330603111daa6c3bd3d7c22649679cdc2444f4b066c3152f04d498b61dfd4a084b9bfdf8c05d807d2d443b596df6666554ed15c0d6c722599f0804fb65d26ac8b3e2138212bed431e0d309e00c0d9a12e1af1241e36b305bd225927687985a6b45d3d39bc910fadb6b0470450062e9c361c6734dbd21893fa3fcf72e8d67e51bd46db657a6f370a4d5f06ac42a433db749d35ef91cdfaf711e19d098b7f68f59008a759662281f028de171a22739b4cce247db05da9dea750049684fe8e45eb06840545877acc9620210c1ef825aa81b06a3f4fbc08623592bb8331eed474cea5e40e091474882d3201862bf1a4790f84801e592d710bbc8e3f74517e711ba2603a27520a015654045565230dd2981ae535b54bec46e0fe4d08022bd79a3768e6cd863e2c8bfaa479b9d965d7692fe59313e9b5330dc4214dd914628daba37245c49961e6bfca35e99a0375ab5b643ab546111e78a8463192044c520c169e2f4cf5909e6d88ef9b63fa8a33d261f463e29d7b4943293edfa581411e4c3b25092f7b81116ebc42ca9901eb60fc73725c0079114af3031ee846ea1a2f6b5f8e50b62f852a076a8c870a69c390ea04d1d3e6edfce367188f322c8decee269bfd1209847cd1cbdd52572e37c7902ab08c490a87d48fd2dc32654b8240c0f7d74746de29e94cc169ec2c7f5efac41608b256cf31369bd100ac56136a787f6bcc7ece4713e26e71909a348e2406bdfea4b45f76d441decb3d860a475bd08a791286c1c60f595b9a03da3ac9e0df4754b519327b5ac10312908532c48b02bd97fd081c2e824ce04df1fb701a7f6b846520c141209181f866cc52200daffecddff574453b58b4561678a8c997378a7a6587fdb22f5244a6d361d0c1fd20e5858f4cd0e54f58445740789fefe7775f53930ad202ab7b573962630dd0644cbdffc13dfc61e81ee6e7ce5ea7aca3fb62503bb9dc7de74c61fad335f20e72de9ae4fa2be746eb15a82f28c532333f88843c6aeeed9b19b359bafb1db52bd2f5e1d7207139e1e61deb6e27b5f2c912631ea83148059276f089c4b4ea2eecaf2a632528fd7564e8914c8794cf9c030eb54764a563cd9d2e8f56a811a74e2cf054b0ee186a0cd2e39604bd5c17639cfe81e8c5f38242ee845c1f6c8049c98de0ee2ea74d3a5d346c4ce716ed0add42de7473c7ce2537fb7a5df6f4947a0ecf6e907fb7da10dd20c73836c27c870d216ef8bcedbf076707739d8eb2d2854850f295a3f1786b0ee9ea3e08b8e3ca098d8fae09336aa6ee99cbaddee1e99918a887e65681d850a5ddd124222dd23bcea44cd7a1e6fdbf227dedc03d70bba552b431370cb0e88a278e6a1365d4c02284c781f817546d99a17273530bd0998728be70920d6937e7f48ca563cbac68cfac252ec85a682ad06be01ea1af7a39684484bf4e74b74d2b24d570f9ea28f3f51f641f24c9cc2dd8e3592b75e2b6c9b38202f76cebe984e8429c3ba6e73d3c517166e6ec8416226736140804a1cd6c745097e8ae7cae15a32976e7cb75db07e0f35c21fb9787418953eed0ba2bba4d9d6a51db17b6c6983b4343aaa1a291af57548361df6ae234e5cc55a97a649fa93481c1fa3eb11c615faca1974b52e0c32f1ee687321900598cae3fe28e3abbd58e0372a5a33b6db858e475adae8e90f00351ad183d050f494975cab9b2c1ac747314456443bb7a801733db6210fbcff012726182b799ead23317d51e231e270c0d094520004b1353b28cbe56833c89a71b3c9f4500b7f74f492ef634d1c31e16115ced340971cbca8f7fd9b7efbaa1b5f7e08d6c3d0187ae91069ea691d53e30930ab39c741cddb050f7e0164103abf251f4e6f53b5afc13b79fad3d9e7c202a14c7ec2c2e5084179c12330d7f5ee9426ed1d7313ba2e9f8f1038d6782efe8a00d12d4c9578957b1d23e04b35a638f535e6cedb9b99d688b494f2b51c19757607be3fa81aae17080a2eb7087adacd151c8b33c2efbf0d47b7c784721c97fa57b18696f88f8f7c9c6539ac72ad6418ea7bb91a35202410f1a0a4233b37b4697b552295baeb28733ab7038d86f25193acc9f91c6073925ada383667ec46c8dbf780abe02c59098743bcd6902308464d566d4cce27de8ef8815aef31cb270582410b44610c489a34377bb6d87083d6f1dd3760398eb570c785d274637b11f95c56d756c7c3afd17e51e4129ca2bd9b599ec1a037d275c8df62686278aa14861f27e8030434697ddc685d750c0d55801816c7b31c54f2e48104785ea0b5dfa69e4bed5c180fc2d32dccc3b1cb656a40f52ef2254cde523e48c2297f7b27d7828b31aba8a893b86bfc0670393dd168f9fe382bfd71c7c723e03d36e22c8cddebb6219ae3f69cc1fc6302911936787c92aac8393ffb426956b1538a33c571df7411a923324ed1303b32e137d02962e928c1cf61f956ed5461d960a40c049339971e2db7d5348eaa591480b557924882778eff839a8d8e2143ec63cd29750a6776133120e33ea0e8ea5276361389716d349d58ca8dabde716642d352137ca7cd7062f3e3af42c136f60350dc8ee8b98f7f7177df5a5134fcafb2aa72e6026cb1c753e760b9fcf2293b6c53e4475481dff7d4d46bd6bb45f57d95d826169c1af0d5b69b3141a8422cee01f9cab7eaa2aa9fb62e582894e756c3a432cdac8488db8672a5fe6b4cd00cf408773eab4adcb7a953687ba4cb57b87722d426b1b187308a7b8f89b4b57b0f4dbf8e534655bc82d6136e6b90074eaa9352a86af0883ecbf3af06e36ef96f42c1703f4fa60c6e960fce38796c3be71903fe2b58da0df62bf1207be4e3bf5e674fe157b6dca1b07cc4ff0a63e7c0befb484771b86565dd249e8fbcea3b1b32bbe25782f796ee350f11ea5e928cb425e73857441d4e598797999dea6a171ec633de09cbe5be01f47bd77d33d0de145e68342cf9fd7b583bc399ebe8d90a5db6c7c51d289d8b0410cfa23ce9ad1f88aad65c9a968aca7a1818246070cc71ec062f391ac8c6eda19fcc46357770e958f6d22ed8ef57b3537bcc00f541ef599b6aedf25a1b540c0520abeff97bbde1d0f49b2119e63fffd725530ef83d02ef4bde281474dfa7345afedb0f0600f675c75cb2a9df097e0319477a3f626391ae67d9f612d7352ae817cc2fafd34f105ffbd190153aa2624588ff70843a47bdf183c0830ed6c351535c8a4d706ca91250c715b31231685dfc4445b2bfa241ba4d9854aa9fddceeb722d05b063317662065b23ac78a413d7d9c6b334935bbeb4a524d92dacf37961de5e882359738c52e1ad70e929f799b1b79ef28c958f7ffc18e8576393d35bf594448c92c9886127abe6b56c306ca18f91cead91a42d6a582afe7a7cd2dea07f9e654895530f5b055dadd743ed00072b15b7698ae24c363d165a4d0e87635e18b7b23b078adcb3848799a62d41147ca274b4aee50db0bd83b4e10358c53f90c096c6e441456a890d3820035665f4e6c94a8da32382321dff28c221a239ec96e8cdbf25fd67f1e86190025459a1117ae985ca049d6e193eb1b8bb95ed6847515228fbb0b3af477e283701218b8e54956d505b593acf456944f67de9af4b3a75637ffcfd2d620544351ffc79924392449f658852ced7125a00619c98f519f17c95e8ac05bf18b6c42759c62e65774635761da16c699f1d2d99b2371dd95380411aa02e29354fbf0590689173f6bb504a397c01ce20c04c53227d4dbe1ee8247c8668add8f2362c02ab73db9ec0225f55e8aa561a6ef20d5cdd5e4d53d51b28afd92e314ba79ef29a06b607f62717ea318c6065474566d5152ad087300dac2b680d9e88b7238beb0491995d2822d6b8146c31e01308bf1bb99538da8cea65f8100bfa29665e35ff5e0d59e68ea5a72eddbab1d006e287ff26c48c9fd489c82be59f6009c002026f319632c7574af457b95a29916bcd56e0cee060e80847360e63a9c10849a9b4a54c807d90a49dcccae7666e8902b0a7d8da46e2cfbbdd22fc36d65458c23eb68e0d2e5207882f6a1691f237ae19dc3f24003833c18cf743cea19c21618df24becbfda088d9c231cbd0cb1fd6763c57318396a83b40073925c23bac3d10410889bcac1802672e418400298ac35e416e7aac7fb658196c35c7684bb587b5c8ca18568fd2df1b1bb7a63461fca84b312fec3b601a88def32501f4a2fe399346855c7537e0191adcba2640529ac47fd27f78692866cc7c8bb263aa12824bc26ec0f58a5d6efec92acca1de63cd66cb2a59333f0406537ba996735c9672efcc4e4bbf79fadc6063dec22614bd1861069711b5326370c9be9febc71bdf7b6c7a4d3187a16d1c0aa679bc3c0fe227274d580c08df63ab73230bd27480b5f9a757968678fda8c1a61c2907c47f2b2ce6ff0a8d4a701c551200f5a982e7d75667be36b81c8a062813372185a6792b65573017c03d093e16e20ff7a19e5c2ebf62b52f8ff0ceba2c2dfc9f211c143a433a717b47571ea6ca8f48f6338d84c7a78b5c9065672814be756ef65456c4ec619ce1039be879264ddcd9855582373769eefd82d816ea44cc06a08b8c39a7db7450106c106adf919affa8c705ab5e190f70302f2a6b8ca6eaa0da320a55ba681bbf6791bcb7bf81b6ea59a5573055ae3c9ef06b3eeadb78bc0f5d6843263a6415fab5168d87ad51c966278ccc9d453f65e31163c6b40e28ee5954a5d6d792e3175e1fddc370c8f0b47dedd696169905d3d611bdc8b0bdc6d238d85d6f09d511aa73b2afaa39b6901056240337d6a442b8f9f7a113d6c8353c92416e368a5132e32b196d8b06fe0726f5185877299898f4ef1df8e2b499512adac42534d23ac9ded538fbf6091955370a21a90e2a0210661b1edf5f97ced51177a129f1e9deddb32532e89eb0f74806110d4d015f453871c414bdc5da522f334de7f658807ec12b1a9ac283aa3ba65e080875ddc55071ac98d63cb433e065324d9838faa637dde5f89f7520f2cb7df77120e1d2c9036e24911c30ba55b92adfb11a23aadfc39bbbc78206989de3a386fee2f33c8a3dc9d297b67bf176fc1c385a9d5de620bb5973df1238bbbedbf2b58e903ecad06e7e91ca2619b205288282f8121d2d34b4abc6cb6b245766030a37193cea7f20ff5ccbbd612987b470a172a459ac24da5dcfe02838c3d858597be2f2238f33c3094f3a5a80a44dc26f8ae24f7b2fabe136f57340f0cf9891ed49d7b7bb6f8598e242200dfda0a845b86896c4d4241bfe0157fc684e7e591edff56cc023229b8e3fd859a0e053a3704fa5ed03b938fe5d8865b06ac894b0091b4d244ac258dec57dc87ac3c157b8c7ee4c084b359d076e3a04e6fe8a760a1b0a3bcc2a9f615a0d33a19efd0418d405764a72c0c8e39584da2855005001d4f23bf87640bb0455ce8aea9c0de412e941a5f5a619bfa2024c3e7a9cb255725dba4facbec7b1ea36875bf5e4359d9760f5b29590d8f0e9b41052343e42482b8fe7178cc5a9b91fdf3661006a98a79cc06338ebe005cdd87b939462601f48f4682b968c3f3f26b73d87aa2ed5b76f669cc1e18c3df5bc622a902b40a15938ab4b44864dcb22f8b0b1c440d236fd263df9179ceba41f2920945adffcacf5a9b5ccc976f81d14dadc9e38285dfa8a08246bdfbb42134ac919f8c3f10a97e856aa0f6ee82add2d7144e2742d734cbf542f176b596619f2564655c56d9fab325c1a2c1a6f796dfeb7ce4488283faeee35c17bd54334dc29875210fe54cc86027eb624d7f60d8b97bad0904e1d03c1c345e9bbe48e52d60348e7583a64fd7809b232ff2eaea6b14d22e0e4de8b4d3790c1eab6b7a6136fdcea9ae57767dce1a8217952c772e93c03a90f25fc6c620b64cded512a214a6674d3cf8143b6623c74429cb7d4a0fb5b52ffd37bbcc62849240ff8a0997a3bf4b8943691890db79d55664cb3be739ed0f338c86964bcaf333b51711492a0143d17549a44b672da0fff6c7aafb0d8d77a512945d60e50ca4e35449480c588f551fc4cdb15c008cfa6f1043aa78d9cec1686e578741cce78a2ebcd1c5cc294a860394f7726e22c2428aa8a59fcf1ad52213efeda0c27f5a7299229197c833efac44339fb1f8c565f17a548dc1dd251cd9426745f8225f817c60069c0b4e941a50363be148f99e40224e31bf5412b31341c00e738832daf8477a76483298c0aef58a3e4cab855993ec9892468f8d28d13ea7e1a15abf6529d242e049140d32a9596cb9013617480f0cf73456e3d6e2e963b7a0c0b787b22878c94bf3ed83772194f78c74ade2515ee676641fa8a140c6a4a070d6681c5b77bf14d4fe6d0ce6db1178799aa809acd3922abd1b8f9856eba159b854dbf21ade15978572f2435b8aa5516154d1b57036e6a0ccbb78d7501d0f68a6b1f97da9813fc6101867eba08f89fea91b609badd99610a7dcdfd9668bb9eaa2a0c2669966ef7f1e5a0d51714c8729ae278a60954eb96b39e18276e1a2331856093c0aaea59342c7c7f2d28e569b01f266d321f8c70400ccea097c92f097f3ca0b2806dfd59761e746a13f6605f261298058519443bcca8b464107fa977ebd2d46512dfca76a6b8589e7d6e3ba4fb9670bb64aa2623c1b82925474ce126c0d12639dd8dbded2890c94d35323b6b2b0fb94a551a3c04165b91eeb3b5fca26f32bc7be34c73efed969a22a6d9e51c2851b229d727f9f08d921abf856d8adac98f4b58dc853b85565fcf000bf09997e9edb0f9ad194d96ba2fd2693b2dd57fb7094474d0b416a1e3bab05501bc5391f7d25970a32f315a71c0ac7be861ca7d78ff0374e7b811827f572771c1e5fd33bb548529e91a95941012bb0d0d6df7ef27f49d695027de6ae711ee880fe7a19570d15375f2280913c32828fe8f68c6ac67d2666e70b0d15cbfd57cdd9239919a7ddeac0adc0d83b13259e347ab8021566f91ce1b5f2f9722cd4b65f3ca1c6a71ab55ae586c9baa7aef282a118f1da6b4fd3eae89111288b7cc4453a24f3e7b59213d604ca35da02643d48a2cc3b6179cda1288a29a9b3335513fd9024f078276f7097c01180a53bcf96880b193b6329bddf2dfcd3b00ae1e8ad84252d6756564a2d5aba5c46e68164d5582e11a9407e8081d76eab6865f6155c15dd0daa4a2e893a58968e3cd828f338474ded59c9a1140bed9d45bdd05c32d304da50bead7f1fa512503247a535b6db66026ad88b0bcc40fd94f02f88e42ab5485be0c36cffe2231a907fdcaa68fd56f111342d9d03fde8ec9869b942fc5f33483cf2523539054fb55bbb0f5d08920ed6297febed700620bc338824c44d06e4a7e11f7399bb2f4933382b6fa8184295adeee3b52139a2ed421520b8cff4890bdc43933de4e12fec615ab4b2af1c238ebae6397e14f5e8932ef926f9b68248820e5fc21869b72347ba8d1bea0097bcf4db3c537253c3fb0263aec5c2602e96e9769b847f6a1d4837d4e02dae038437b545ca5e15738a40084742701281d7fd5ea868380b29da1e251168799a4b34d2b28278bd01539f28219d343076be03efea48fb88245846923a2fed8b155b2f8b4b35d528578bec55874d36829c3425363b6b18bde42a3f322186370300971a7ddb1e465aeb963af07cef5a2bbc5ac14875c1524edbdd2c36c5d773e683096de290347fc5990b438dfda88ac09cd3bace11d1a6f988a9ef00de38cdb33a74756c2dc1a4d914b662e0bd1f5b3bfabadd15fd5c602d889b6be01522a25b201928bb3971fadce368584b864956f42fdc1dd21986e789f636d2e21781e72fc70c77ffa826d4fc2ead20d8b0231834f882cf2c81d9543ac2907318995b1359d2e48a37fa2a046922a34b68327c39109db06d9ae2311fb5fe21acf8c6ccd6319cd5029345b99abc070888d21b6e9728d4a94be274a0989d740e1e5d516961399441ea45fc8c8147992979059e583f70de9fb51b69a60e5a669cf5eae6627529eb71f1a6f948b1b9e31b3e76f31cf79c006cb4d36708e4222bec2b1dead9596be8f97a163d60abe6a5a7ec36c1b4b3e96b157d7ae22f77f773b9eae3677bdb0246a921baa0175bb71316bdebd15c2debc169feff29ffc9a6f636b022a65bf1d45ebc01e2aca562d9751d81834c0f10047f207cd33c8dd20fccb49590f4e00e7270fa3cdc78a04ebbe893992388e96a07401d2b9059d643bd1511a0861890f64eec934d6863a596420c2b9b11b25cd43fd81d24f6d8b9afe31fd211a169902695c70489faaebbc468764883a71279c5ea13a9fb8f984b19e103e61a1855f2fca44cd54730c9fde7e55556e80903b9fe915b91ee21e5fda48a73a6f3f7f607ac29719f3fa13fa8c2dc2e4d6b94d882a7f9cc4010ec97125f1daf15924a2660d59b52977ad3c62f6e568136c2406f158daf633395863a099690896b5497eb0a0c948c4a0d49f475590478785fa7a498f34f41e3e901cad41a18d9a575b8caff1b378544f4a01158ab0186504680267276433773c3d054e47ecc80b01cc13f0ce0b80fd552c6dc57ec1f3acd301ef95fd7ac40ee0869731eebee6d16429c463bc35526eefadb5c0a41ef24e8bf90f725e97cb96af95a9639c2f98675c0b34d76f40aaeb0df7d90364cbb992b048122d802bb8fdda7552d48820e377e04c3809456281791045ee699909b73e877a43cce26966d1945b8a023ec8c368f79129e2d445b47c1417a9fd29f1cf58e0b4cd44c6bd496e49f1c56e306414c9a66fdc93460d19fcf65b4f778859259d696867a092ecb44faa51d5af8e883a8751ccd8c2b1699046c09e3b6b1670deff67c371805b39ce562527a4cf9f63e56dd2f5452352fdbcf4a76e4bfcf363609a496da4fc62048b3bccde7a589b322e500131ab559e590614ff72e62e8664c39c346b42091de479fb012f7751ef8f5b2d22fdce4844167302304954135eb5990442670ec61aaa836b2a8148a0fb090693ba60f0857ccb278157cfb7ce90ff81866bc87431106ce9b3eb52d2025ca9241467f2eac569fb875048476a864ac389ad5d7dfb0900c16e57d6e22325af37ced3ed473514720587562b313999aa8be72abb3774504ae35909bb4a394744a3dcf9c77a9b77b16e4be553209e36eb345c04e997605c347ff47d4071c351d673338d8931577c61da82c7cb880843d6afc31db5e0cbcecc24380ffdd638b21e8d83ff9401de1616c41ef31fbb6b045773365f9bc90c262726244a9ccf300d4565b9380e3e60cb9e6d8b78ea1686ea516c0d278af6af91bbc9cb99c39d386ae162c6e4a5845158e57f64f97b4eaa10b2e0bcb8ed2927aa107589a237b446495279e195b18ef56caa42e62b1d6ba813660b654a17b01dc4ac22aeab1be2b99bbcc81f158f7eb44c53a36d98e798b0f84a8dcee8d97b29f63ae8316d7df4f56fd3c3e912bf7ef13ea41f0bf52aee6a57d938aa681f51a66eb568d37ef356a601237f0a6a40cd9a64780adcac76eced433f7da7797adc20cda26a45133c92f0e7a7ccb8f69160844186507ae2a8ded3cd5a635a6db31469b3400844f4955df04a2272eb731b319ef7655e3414a29aa9961a3cba5d949c27403ed70f778a91a78f8a410bc4c8065ccd0dbe487f6343405c09b65ac13d6361bf6e766278dc98aa15ad75e742b05dc2332fe16109cd597f504021195904e3ced6e3b5879374c36d7865f07bcfc77e01e362d660fab0a3f3fc9ec203ab549c286267fdc50f9f2d5bfac3356c59c76ff81cbd29ca6e6900b22ffbdff723f0d8ffb7eac2b9813984f37aa04b80181f926dfd1ba40f9ae8d05295e4a3dbdb8d6f9e3800be0bf0bf80314deaef31ca3664c5973c569407b039307c7c642b19e3c97af4104677b10647711e216039a7c60b646fcd589848188a094b28db89a57b5a31e7bdea7c964e30f7e0dcb50cf431be7110503ab324f4ea129da8a765119b013385632ede0a8d324fbffa7c9ac9b8cd744bb62864af348d0ffd21b59fb18e78d1a45d6082d35a262f73b3c1e5e21fb52643c840c9fb1a59f84833ec54836b63623bb31715a508d3d7da75a90e9ecef1163f2d1c36ee0540a0eb0af9dc3210354616a36f85e4f26fdf1988ff4b5dcb9a09f69090047498a2227d40097a7ad95dd84affba2171a003425f38d08343749171640ecbd7a2197965486d0db98d000995ebc81a9d78ac78544530f1963f731162bf014da9a6eccd17cfe40b48247f3c4cd6a16caa8404f34c1db86b3f1b2df0845bd927e0bc0fb2faf3e9a2995c7bea7de5b3e2ea500b0cc74d569517c26c2a4a36910ef617ab00f4cf0c0406f73c97aa2223cab8ad6e083bcf5d57c75dd004d364020a0ed59fcfdb9f51342a2c034ebb6a917b03729a3864dd00c7476fd7c49f082207be59a353f8410badce78dc31a6182e30622a41ca5ec97a37c2a3408e464929a619422e4226cac04964fb187283985f4838604a5cc66f754a0e09284240febef77af08c33519b6e9f48ccf3be96a9b3d553733891990d39510e642edfab29add9d258cd09b7da5496ac8c416afb56f7995a048ab745d749d7bc938108ebf5df588b863a5fe529ebc0d8218d982ec61a64c647dc5aabced8aaa1978b2676c37d795aff0b05e15bfaed27154fbafdc149c3134c355e8f273579e2f7d278caa266be1a5a7787f275e92fd5870e71df5d0f22a770dbcb25b975c8e93d40be3df3b84ba85c73f650c456774fe8315b74d50d969c59d537e6f2fc3e80a0444cd77059555c6723d863b3a832e99ae00d413e5096654fb1c440babf77d527bebac07c4d5f9cde16025a6ba5368c8c3bf9e4a7d0a210f8e89255db4c211037357a3354641356921ca881a01bd326fdacfc444560cbede074bb969a1d986674c72c536c16e56e7f2c0756026e39e6c7ff3f183e73142e9bf699cd1512fe724595a478997b3db770de4c39f4fbaafddf4944427ebb480cb6d4b849b3e37fca87d6c0ceea2415602af9d603c8c4f3e516e59d798e4da42e9cc9cef7d74c2ff1cf75e2e3a45ec3d8620be7c17a9e6ed95ee37a2607cff141a4d86319f4f445ae945291fb4f282584ef23492a9a65840637314e9f3f8ad5b9a940ad0e98ede5a966cd4fe19ab011e60def9d41f6fb9ad0373ced9f13e70a0521face32bd1fab91ab7ebedc76595118bdc20490e91edae4685d07b8fe37802e98df0d5846a725e527e6f4dfd90eceb57859f5048431f91ae4deb595b2b4a8db78da0dc7643f8b6d6334f46ffeb9312e68c926ee85e836202c54207a388730b0addc66350077ac2f5b08df6b8a1c46eaa0715503fc635a06591b21c9c8afcd0c714270adec3abbd043210fc4d4ef143f57280f4bc9569edff90053f45f2b0110645bca96563234ab4d4474bc12546b29ffc31b15eb63550fce8068feea4cdb90c4fd6f1dbcd65f14c9fdd0775a15da83b0979246f2dcc7e1cbde363281bda0a84d1980abaa8514c3a86b2dbe44b6381752bf2a7e8e3f89776e025057f6c391c5a8af20aecc64c3599b0e693c1de0d78647e451f03d8a4d4545ddceea19fb23440d085c4cad7f60ca0b7c6b2e5235d80588d954af7278f7fd869ba82679c89e77a48f76b7d54729dffec9e6bd9f8e2228bd1f6dc7788a3b3eb79f0d1ee36a9a544f2cf3974a8a893a0aa34616b29c0457ecd147ce8327f4949b1429c1235ba68f8e09acf9355167dbf6996369871c0def8867a874cf9a81f24f807385affbfcb3c0dc54832120a19724718fc6f49aa08bb4ccf345c1b6b6980631cab9e5edd0ac3cd3034c7b06376b57a59c6283c0b42ee45050829021d041f3e974c633cbc9cb379361516ef9ca245b4cf86b0df1240ac129d86f703c4fc2f459501d3e4ae67219c46e77cdc16e13b57cba59223d7902342b058347c58452afe3c9e80e34e5d4b88054e50b4263c1c5571d9975d2e3c7151b245793ad1fc338cf01b31fc9f5179863e0a77fba56bbc2677ab4501ccbf4365a35d5331baea9ec895a4d314f7140cce72757f36453dc42f1c14a1436a1d90cd81cb1dfdad38dae88c6cfe125e86890c6d88f3bdfbc4d47438ca0b9e43bdb632faef184f8b151b1d048f97d30232181110152c6a6e50f3b430d700f66cdbb75382c3f60dbc03d454f985db218f97e2f95c55880f29c5de4360e4b817513d0759e23aa3e910e32664849146c659da678eed04390e127276063197bd80cc17e90cf074867a7fed908d2904cc6ef62e94c82aa897224e608b670491c808feeb89c247964dc3124ea3372e6713adee709103e0277c7d660558246bf78c7a842df6e94461e00defb64acca8562efb04eaf12902c282722e5ddd1612a43d50f81d4a003fe695543f3a62359f73daab966a4e86d14391e155345ba4bb42250b8cf6456b95aa2124f5e791ba34bf1cc4fdebbf516987162b9e6d2f1206e61700283155f36a36935a2c37bf89ebf370d60a3857c0472138e8d0b73aed5d91dd58cfa9ee3c3cfbeb395982aa37304e4fb91c43db752bfc45e92343778269b08fffb2bdc55e1549d5cbd4608b44200706096009b00c374f82d5630a767a20d7cbfeb79f0b50d5b132a4f875768b6f62783ccce173333e2935df15cc9dbd6a365111a0c540bb85fa5e61158ff05551210eaf2f5f3b726188364668c207b8b2ca9feffa6d7ff8314436305b61a28c55005178dde8c19dd530b3d9299fef1d5eed961ad112268ea7eb97e4c7ff3243d65c5f4f44a697501a45699ff324fcf407828f4bf47e51a9002044c18a444de8f33d9a212e22822744b0cb5e1f8eeda76a5487b957b4c5dfe3d4caed997dfb06e738ed93cf71da5896c5145efbb50372123d61d226d9cf8b809360c2ca6945c465450e34c0f7ef828dd04aa1b088f7f36bbbb1dfddc1a9084c74b78283f6322ff985073189800f635fdfb3083aeeb31e4d2640f6a1ee8e6b09f87120acbc5e31c844b47dec51485f06e21b142320d983f3a6aafc0268dd063028c129fcd62d3d34f6d14c854f3eb36fbb78ca3d396a192e5eb64fb05222e441d7bce1f686591aa8b0b244dbc68b01796f0e10b61ee0de319a92132a225bb600b4e7cd5a6fdff44de9fd4a6950606ade250f1255cca990eb5ad61c3e3116759cb9f7783de734e8ceb93671ec0caa9b57c90a73cd6d2a5d848f1b9ecb6356e2d7c3a5346c062187a5207901bfe3cb049f413d3666ff43741eef4f537a6ab4bd61d9efdca3c677d37b4dae03b43028e95db6df3843be31d648cbddb8a32a71141af855b0fa8f193bb056cf066ff89029888d9b98c6aa776174b636520f18f5ec2c9f8f2728c0f83b9440e03f6606c23c3f4a591c5c8c2d65a60cd7484cd0c8e2981dcf3c9f876693cf7ce1c40ecd9829d4a431d32ce093c6ca3377490296cf74c9b7045c1d17b914a4b7f8db68e05813d1fc82265c0a3cca76334b0c25f00b15b7526b78bc8468c541bce0aa91b821614a85c63c126754e5b8f8b73b93d1a0902d39aa1897cfea98a3b64112d1e5af5de47b0eb490de1fc33eab0e4616debeeac163428638d099dfd9a8e8dd354aee8dedd4805aaa66d1965691062b818f0d8bc6660130b900867ff2350f45476874649238927c01ad2dde0a3a45d99bb793cbf13f5f2fbf5992a29fddb2bbdd5bc07f54eed40896a4cf3615a129e3d3e5766bc3e6a06fdb2d53adfa7be98c5a60a8f3cd27577592b33b02b6982a11782902d9a669fbaa0ebf8af2efcc0d58102cd3cddfc3b52bcbaef2fc0adbc3410e5a7e218235f51acada0d2c18f05e46f860236a75b7618ef7b72fc0451673aa6c9e23806e196493d247321962a94f790352bf83eb7ae5a46f06cba64fa17843ab8580c6b34288c6cb576dda11279a8df67cadb5945f82bbce070b0d5fab987e781aec153a2fd78b4da2efbbd28fe0ce1bd23f0c48d6fd5e8b63205232723db8fdff9211277a8279eddffedab51bc292b409af68bfdc24ebb12fa7554f69612f6e75492f3262c5813f4997c57756216407ba685a5e03191c8c115d439634fcaf78205e4fd8c6b9d28694f9e9abd1defd35507f15f9eff61419f500719b507bf5c863a69b48ec45ea1e3ef4bdc71ff024e049187f9b2e37ff68cd053c0900848ae5a060a602168e32118a9c29cb8084ccb5904f59a55a89100dfb81036ad60281a2a7ce27053cf11bc8e82b69b87d8a71ca352eed3802e8b0b14f0990a6f29424999f093287a80b3cfa12c19d3dbdb68b0d396dac0f9cda94476561a30ebee0aa33d553efaebb819c94806e2309ade7a0fdfd50d7e401661a3fe08237e063b6a1ebe9fe8d30635a2e198304794fc6d772204426446590b4e71b4e5a17a38e30b1b478db8a8ff4950b5de11f04b87940afcde389c53a8657bcfac105316a61dcf4f1f4c2ca19e4032e54f835a83e96f28609fda7618c00f17e94c09ce847b93c0b03efc5a391baa72632e011849e59075b3965a4330ba8d44f26d1b296c1f7430a5c73555315ae33291986c117db004f5fbb66147a90c2b1ae9a5d73bbde23e661c64751784ded8227d728d0f01c6803de60500da4e698bbd31f0c417062e74d6ecd55752ad9e07dbf96009e0aa5518719e7ec1f572b13a1a113ab4b39c3dd12013b07ccfca3f50f9316c1d4e0b4af94b2eb965dd6ca7a5688c393c297aef948efa6818a608c296cfe4a99cbaf72a07f66db7ad6b5717d59950df83d31c543a80823dbc52c1bfef8be3307b18ca9aaa9b80b00d9e3a3467ce4771978609b2b95d5b3d3bfca8bb9c73dbfbdf4a9499d09a38b26cac4077bfaa079782af55a02275d874023a3e31bf04844ffc2cf384117ebb64b7ce94192314fd5882539609c029a35af779284e566c15ec8da7c523d334a2998c683dd72873950333424169ef4893f560b8504bffdd31a6a95ce9856607aaf0cb9fd5e1a6ca697451378efbee9cafec543b38862de353bfbe84475d315ff0a6ab62d1030047d6647580ad4b42dca0f720f66d21ddc83a0469390033dc843154431190b5b3d706d7dace230c3f76abe3957f099474569e64e2caf62fc1f2544a32545d2f9b3914309ac495c1aed35b8b8511892657a5e268186abebc864e39dbc5f143c8f2aea5ffa84d4b84a9fb83c082d63bc16e7663a2ea470b73936fdfac5e2d5dff44f12e81eb3b45e86dcb14bb884e9fbefb6f6ce48a25c3d9cadc62403a4a8bede26bf830de3fe8805272e6af9f77e822624eb95fe4cb2c55ba478db205c0483e386bac02d40b056238e16f0a8483d25c6c99b55925b8ea05ba18ae2d78307b7fafd87554db2bf28ae188a9fc3bfe5a9bc912d145e870e64f56493931ed29d4fd483b606e0f725aac7c98c6822d16d4645e8db87fcc1ca8af69b22565de3860682fa3c709fdb2f7a12367508a585a542c91643ec8e8d429bd77549ccfda935a4b1048c5855b45d358ad97a12edd93c34762b090718b0b2ee0e13e7ea58cde31eb254b3af553a223add5fb8ba5095ee90a1d426a5167b72d1ad5ae3c1bdb8f7e849db0ec0a086954c8dbf7696ca2c48598c98763f1e4251bb0c123cb24373876527922d535c37404fca22bb34e547b9164d1a83d0619f2fb3f28d0c93a440584c2c63b720f25fe81849215b1efe112f0844a2260c543466ead558bd15bd320c3d26cea916ab81f229573e46b3640bf511bddff8bcfe2fbb962758894b619345df80222c858c09f5e1f209d0a518605c3ede72c0e91fc510708a9f809f3c592d752bbeb5fdff08494623816f97f592d2a5376295cea3f72e025eda7d7baa94d97a864d5d76309ad793617af679e15f34448468bf4da2abe353b486fc0b7b31fbd356bd831c080356e74476d395785254fbd3542ba4aea4b552a960b1c751617c85f5a629b4c58fe73921ab0638c871aa258d94c129ac780a87d803a50b2d869bd6bc97407d4db99418fe42c1799366d8f80ca95df2b2a3cf366d939ca0e2841f9a6c66b69fbe2c6c886a8fd7ec02b503bc65b88aa6f845091711bb9fba4f698b994e28759d9ff281486189f335c2436befb7fc6a84b6f29d4635ba2d18127f6da26cfc5cd9e5105cbe83e9d9e2149bb6045bfe3b11097eef17a6304e16ea397b9f2e8c7559338a89009faaac0315c9c6d43df038c341a22de9c5dcfe90f49333bb9cf91140063db21c73c483a4de18ee310704836cc42b0e4105b3e94ac62f37038ae19be57e4324cbb4addd603094a677a9064a3cd3b9f4aa2f0c7f5726f49cd0d53ff8eb98556d25544032a3b4d29a219d3ace28882afde12bc9bb30f376a827d6b6c66a11220f35d1684dfd706d648645c6dbb1d431ff50608753d4e02c31f59b0d7808278ad86d650c61c38f0fb94ad8c427113fcbd14f1cde689fc858577339ece509befd5100b42eb48f6154793808e4b021b9ae33649403cb98fdd5910b1d7fb53434bdeadbbc1ca40065b3004e9dd09276f544a206430d749d28d68e41316b5940da038916c4ced0c2e632b183077637a84a18c8726849ca1a6363bf9aa555ec37c1ad1951cd2245c45837120669c755661c65bd331d93826180c0929a942da28e762239be71757cf583b99c4ef4539eef7bc7a6f3ec6e96de21bf23a7c81ae924ff68db7fce9bc781b5172e2338d06016091b1298f41537efe4e5c60c9407b9b5a6d8ad99fc079c533ea9c169873fc03872fc6bd9b28fb7427b0a92d57d61a1448d5e982963446550facd41f87a273a32acdb08c6e7372935f6fea628843adbd38f7b121cbe4f20bfda9b436813ee4c0751b3abd3de3175b97c5f36b5a6c9f35508662a761177666de0a040b5b5374d27ef9d851f30bd45dde822e0cf9942dab482efb5e82e4e207a3d69ceb751fcd3d3a5ce01a87861181759635a9d8b10f6698777281f07609294f47ab84add48ea116e69f7417133c5638435bc34fd9d83f056bec540b8e84d00daad05cbd7947264d1ee03241b518080c2c6974ef3bc0a904ad739f633eee3a1bfde7e8e43e347016b737495652b0033081edd6d707a9edcc5435df5b8133259ba96d48e9a702cb4bcf4128c8e4f69a0b4ef9584f4cad1f81790329bd6d18d476dcd6c52d835db9a864bca2565e2f77d29e3b77603a2dc63dc52395213db2975a9d047d2681593e15defec77471524138412cdd9b0796a46b2da6da488eff511c932e44d7acb267202a6ff07490be937675996735bc5e4815696e7902b4033e4a0a8a6758358bd88243391df9afb61f80a19390642ef9ab3c8c064e3ba234de328feeac7b9416828ec43b488331f07998a376666493fbbbd308f631037763e91b15a9f1b862dddbb7f81b8407ac398039f9ceb2a3e326ccfacc78941b053469a3d321f8edb48a546497c6e05281dd021cefd5e07b42dc27443d70c72b08e226bcd184bb7a6cd67c0f8489a763241da0a41db1e84e1a042f2968df4916b8873d1e0d9b08d7cbea13318c078e17c2dda80a5c90607a97b94d43e71bd97976bbf3b49f30efc6dfb3d7efb91b2ebfb143c05c25502a89df4a45d9c08b54d71bb075acc75c5eed1ef86532140ded661e08fa58de22dd58a60fef9f74ad1b9ea00fd8f122e2f6ac51de51085b99bbf8984eee3fe3cd0363c398327eaea78435dfcb71de6e4964a70bf63ad5e7598dd6b445b7a6a01cd2f914f89ea65f80e81ca50116b267a46d7b67a1e0587b9f9649a90808c9982ec12c4c0e9a4f658e0a865e28440cf194c3b6ba1bab81989bada4998ef884890ebbe0550057eaec693550b0588f9d02e43abe2ac481f54b8ea35d6a924c906aee7bd0b781054cf0be390298a31b7213d0f19754c3338f7446ced3adf3727cd58dd8ab9d23dcc179f56534f737a837caa4041c19417b908202450f7aa29be8c64f33dcae15b7cf913cfdad850ccb67d2be99910a6f1e6d9c0f120aaa4c38ecf893e48f79940fa661d28712122c6d398a6fadd4e06fedfb7e2ca1c1219b3f15ab638f1fb70e01a060fa65ca233210932099b6d49b827205b94a08defbd4ef6c65ae8e46a85f96410ea7b1f6decbe965c381ba2dad0efe86883aef5a25b348844734beb033b6c72441f6cf68b5e93f1a9cd9d36e5398602ea3064e67d80886c54eb2262164267d7e3f45a8e609aeb7ccb084d0d3bee6567a903ee7d48e99544ee0ec3f0616ba117cca2e7117cd57a6442481261d764546bff754b5a19f7a373e1c913f313d5340f72176cb071ca71fa29e260a670c6731f18d6d382747e6e1c351eb6de25e13bc8b570c42cbc1b05fc6fba000c2f4d31f3eec3f153ca1d24cfb0f9b194710a4e4f787314c7152e0af5cb716297697bfc3487eea7403e33e8a0df3ed7fd8b5adc744b1de3be62ecb4142aef47f018aa8ce5152ecabcd3df7553bf87e85fed2f143b0e2aa479a3ee311d7450014d5d372e6c6f39c698e653ad06fdc70a52a0521816dfedcefd4bf5cb60ed969db158ce5be93ae4ec909fb93b4add9c6adcb245424663d4cda2e500756c655dc68b67cb6152fbe4945fc52d433a8880da6374606077f93ec5068e22748e04e8558d9b7d769ec4e754afe020f52ce4d6082eb4fe069b61c05ccb5f8ec83cf1336c05d115663ffe1da7b255d452a04302715169e43d2e67db574db4583b7c4f3ecdff3ad678fcc0c2ec3cdd625eb11743ef23a07fbca54bbf6c6d52b59ff7f611ec29f7f859d35d38f1f121f63ecb95a9d34278fc3ddbf79fa13ea6754c6b0ece58b6db498c71060870e24456b7e848df1af5a9a63fe11aafe863cd6138cb2c6024177fcd3fbda28e7d87486e8591c3f48e0f27455c65724ca2093c3b185aabfde89acf570c963ebc03c230fe4672a1f8b2c3b2b36882c42b633699512a35086424d9feebbf48853264044fb70bf4669798cabf90619c9878fdbc0ea8eeed03cf0d9bb638aaeacd483f4e0cf2870528fc32d6b9b87243c1ef90d7fa9035563f58d2628c3e74d1181e356f3ddedbcc783c3c6b9343e1d08341786eaf4ae388f4477247f6795237e632bc8e9db00e6c50cca268baeb73181502704f84f40922aacb2100e65799832f8632b16462c155edb1a3cec4097b1d34ba36a3518ebc89ef0be7af68be670ee9d89b2124421df7e44a6e217a74d3e466202bd23cd1a7922800c5dd019e3d75f9a723dd77d0ed75f8388af1346fc344cf0935f97a46ac6761e3946ff7be69d6436721416698a892be5246c4d309453ce5e1d7dbf5f36eb8f5b460fa3ca98fee8323320b1fe9b532ab02b6410c6ef792ca994852eb8d7718a86c89d235acf68faac1c0bf4bc8e7db6bf1a7f424bd32ce9bf1c7efa1daa261ac8f3a5bc50b1e05d402d6e63a1a1bf6c6dd4f997f55cd3c9fafcb4ca48092595cfd12269e9c2b65524c112017607a49fef9408edf38dad0775bb4042a5b2071d2edf130de56680bc03454480f011fdf174bb7e0d8420a648011201240b8177233e60786a5287c06f7d81208c7cc87499f7bf110b4a4b9e85ba2d4e0759785f871ad114a83d3bbf4ef77c1a47481e1473de3be1d7682e1ceb8636bde0c344d3e4206a646f7dbc99991808e71961cea17f562f5e4131a927c451c63875ef8ccf215aecedbce7acf6abb15aaac316aaaaf957d53d8732c2bc3695534f00a6d88be852ed265178e6c548ca71a3ae7385f496823fc3084183bda6918f4e6417352f97c159fadb7e4b7d52dcb2d34a053ea4cf235d4b96cbd76a91480fc249e546c26f3acc5de4125f5157452f0355ad490cba0198a3dd9905147180876e4ba39e460b7610fb72769d2b7b4ffb6a2f4237500b94c6a3c145690683f3dd0754baa01b60a0aed3d40dde1fd179b2d7b7deb03d56b2314bf54c44e2e3c9d6de0ef09c08da44c5679d34930a6eaf130d0a3d5979982729c839de7df759e7efa90e6a6b8d1a951a4834e712cc8ed61f607179952039c884f3dad9d225cb5c4b57f367cc279eec21515ec424ed3cd365ebb34f465655ccfaff1445b3424863c5e3171ee3f5e5fdc6e9da067520ff7fcd0517700ac3acbcfa9cb6e52d3d456f936ed034b7c48c87d730f272e040c9c49ee8488d6beb0cb31b71d49631b0fbfcda5dc874895042c2b9ef5571129f96938887ac88021f627c4154470e8bf8327e325c1dfc27f9e3e9e9ce31e7dbcc579090a7bfcd1f6f97d4d4609a6c26a195a13cd64524db724a1200ec6d6d44f4f8e4c60b1715fdaf80fcae96d02765b3d531d532513700cf0a5826c2d0082976c6d85bda2f54c9d8a609d1541fc28cdc1cfbd011c26853bd421bc281feeb535900a10c6be3988e5f81ea6bf5b5319bb3d7ff6e040a7cbcce9783c5d089b3509a159840373aed350b3a1abbb3c8006486c39cc5e8517b550855857c9ac8ea1969b7b0fcaf8824d3ebaaae2283988bf5fd931137d3442b12e2360239b4078231a6f937509e12d5d42316371ce2372cad7773c952cdb163733276b4fbfd7c25944917ced39079bb93554995d5b2560d06814e82268240f4c0bfd579dc2c79ff3194a6b5e2f5b10038cf116c3e6190d0349ff41e8a469e0e5d5a75b33ae8af376ccdaf42ee592ad80e4ffe5ebd6476cf2ee0d7b4ab48979bb00dbcf5aa416f4353e287f4f1be855e2b1932a4edf08e79baa30fcf54b8e107ff0e286edad26a2c24d66b154de285048b637020d17a2dafeb824a1a248fe2e6e882becaf63d87114c5a12d1ef1ad221762f49f50790bad1fae7dff0359966439c9b75f577d57545274ceed2f9adb7795704754c431d3e1d6aa0194576ea5622eb87820651d84e23a2b403f20af58377bc5832002d399f1792b6ab77eb8eeaf2fb1d24c56ad5510568f4574c0faf6924aabb01e37acfa7528ea3baf3ab0e06b9e9a64c37e83788d37a3b69d092c8db59dba524fac2e50982e5f2d8859d976b90694ea7b52fd08c62569dcb25f690748753274a457ffb1f1f7825708402b3a4b1a141091b1bf800736adf393b0e3009db6542fe1fe522ae806835dff6f155f3c1d8a99c4efcea7cb24052621187107f3d7c86b614d9f9775b2a409e4dcb0d9b5e5414d643547c3040f56d2e42587b03a915092d44a0013e2e01c5a32d2e5ec6b41459b93e58f5241d3830e2e38fc9811e0c126da23d9785b4f6eef8332cf61c76c322fcc5d28e6e89dc96d9d9bbe5c3e3fe9e2d5ab77c3cb13de545ad104b4fd31cbf27c998f2ef31d3fae4bb3e2275401102223cb57d6c78b2f7946c65fdfa7cd82b89a8f69e29fcbb8c07274dbf020c1d26555bd10e5b278949b7e9fff8ca51fd8eeed40429e3f295bea6c38fb2cee0152bd3ce1be9c17b1044a0524258584a872ee095b13d3a495b7498a8f5262f4d58e330d3d272c4d779bab29ec63412bbad4056bfd594c7d9bc51cf3a25007cb70bf72b6ec59cc27ad248e28af656e4d35daa038e8ee71647e741d0d1bc043f0e975834c194b197b3ed058f1351a502952d1649a4b528f4d09033a720241164c8935e1a61e92c8f1a6d08e98997c1d8a60422bba35460da1905799675ac5cb44d73a772d677d81b4b8efb4133fd53b0f965a8a76e5115c0c06bb0e78d94173e6a3e43f6902c1c8ce1401b7e0eff1c748d18f0df0c21ff2bde42d4831f794305cef580095997d76a5332d99143d38c40e319b11fc9ca60ed5e405317fbbec83bd587971b5a24a41b2437d1aa0ba0565c038ba8f2a4c2c51d48660eb3d321b5ebb89b577369669a816c1724a66b06cb4b37d27b144d51b8f2a920ef956597bb1995c1673390c03aa5d34bc2c7df91f68ba34458c734c75fb42480dd602852d29784f0b906be5b3d84995958d1a948652a2eeaeaa9874a0b6e85a21c9b1602568bd29b5f4c8d9bf0ffc832ea6e8d36de51121a7d794b2b4b7499f074f668a086a41f2c999eec1e07a4d20f1b419303a2fa17767ff9ab4b8d7df1d464cd814b390f50ccaf0af4753d821941f8b351e944a4a540eb144ee7fd9b5029ee54d96d318df0a49541bdea1a543e5cc0a91e3228a5f4a284c1b30e896c11ea70648719c7aba7d863e209ac7e618dbbd069a579f992b709d1a987254704fbff22b5b79c9596915aa7c5006b47fa33d555348f7ee0a9a98e7cce7472670a905a31939816d7a967c31966530e20d4c8eafc881f5e82aa6ee43f9a8115440fe044c8517dd1d4714d801139acf74bf24a034f5f5a40dfe461c7f15a84e501ed10751c66ef3f7042179d799ff9c997ffb0cff0454d4dcf26107b25ddc553569ada6a364d92638dabd5e1cd7fbcfdee21d31805424875e73715febf593ab0ad0d63d3c3a122c5449b873d913eeac1ec262226f97ef175fe8a2a1149376cc544e6654677b2631e3ea3a8f5e6ef10061f07fc78b7238134b2b12685fb1795c669bfd70239251c0d927710759653a00ceddf78c1f409c257bb430dd72333881efcb8cb14c09d54ab79ad72a9292f84811e486246715790d17028951ddf781dbd774cb61fc5d43c3a499138dbbc9b33f6487dc9a3b6a4b98a8b9bf142332f6a041005538187d595a7614fab75be50f4b9fdc08d8d67bdc4f434cad6b8ba5ebbd5928959bbc0a03227d2301f8cc80a6ef5f3c1382c638d7262868d66bcb64c252216230385f521d459e4fdea2b45fcadec376b3fb9c17dc0cd8a791e80cfd5cd8dd442bbd735454c41dc5bffb4ed7842504759d14028b1400e738ca9216bbd7d516fbd17ca4e976f98b994d01a42f0bcbb84ab558b74b46d0442f9e9325f71aaed31748548a2b28d14b7b61d9cac505505cdf3a7457ee128cdf6ff542eef210a8f35bf9c35cd952a97f2c9e865f1b4fe158e9173c9ece9a2c5afd8b6e25191dc5a4c14cc6ab50a7034bfd550baf8e63254916e8158e0d7d2c1ee74c1c207924e5d1003023246397e213c6277ed0a974ff270063f9c18006ea556e0197137153f76939c40c96633e1b4cb8e12de8b59809b595708f6430cd318ae0a7d4af8ec850a57677963434cea30a11e48e68cfe7e66b15cac1949f6bcfe2d1a4431fc8791387f5d342891ee7622b8d04d1c599d77c5252cf1ab56f4ef0142a8f75fb9bd74474bc0fe8982a573b73477a02e06af35d61eb4bee53208f18e47bdee8c5ec590415555cecc24badd819d2685a6877fff806b0d87ccb5c92e425b2c2fdbf8e095b8b9d91fdeaab712fdcd4d3a07d887cc856d4683119867773667233135eb6615d93704bccb042a07e198d7e8447c4bf8abe11ce7d0e251465dc5da5c6c7daefda759ad0f4d9735c7ffb359b11c1a42757cdf2e4099b2b5014f9e44e3fea41177424310e28d2b1ce41b42f3e2128abf0e080222481ff92438a357ccdf197ad50b46e75da4760e4ee564e6a68108aecc308ecddfdad23446eae335b8ee4936c23bbc022f8b5aa4c600b53710d3f487700135fddf1b1f969c761b0361b36fe9398087f4e57140562d7e3790f3689f1e276eee3cef4489ba3aa59e8956b54881f830147f530011dd217d41901356b81b05b196b33e9e01667892803f44e6e8314857a63ccc6e47c249ad1f8473170d7d013362c9f7e042537c224bb67fe8968c4cca2bd78ce2d1489ff5bf621288a1087166e0ec1776c647090dc3cd19884a8f34a11510eec486a3d4b60820938dda1ad574fab1077eae7a2bf2387f02a710a78904f592a2208a7f181d61750bbfdd5d0afe39c86e7f4575bc5173a25d2c1c53b3d1f308d539e87aa3ef2e75b386dd9ddced2e04c2a14731ff88613f1d10a6fc267af55042981bc151889f552db47e89a46e9144a65148da5b4d0a8d1c9fe61662f8453e8bc4976cb0a30c09cb4967f8bb5a9e503800b511c05b54c8c4c0bedcef3e9c3ae86cc2ef35f20e5ddf4cfbd09f756a22a446c6a143161c708520e1d331a1be49a6f81890339ed8acb654b82ae640965f98a089e8444c63bbc46690ccee330f0f4e42ceb0b1f447d03185fc1c5d26ce5a917b72f056e449873dd12ad177f67eba8c2d97683c2a93d33def38bd48a7fccefbf0915941b1b989ca3330929738577320c724f82b0d782667c9c2e26f78a3e2c57888d2328b80327c2bfe65cd96ca635f3dc7bc14fb34d06ef1595641baf20f516df0942bbb1e48b528dbceed5db11a64261bce22f89661f3df1fa07f2ba2848a02bb265efe64aa76beca5ce2685fe862af23bcaad2f406891f8742ac34c055d299c94b8c8de55f045bc4aaaa7542d555728bf640ae3fd7bb4ef8bee15c08567f607e66fd1cf85e1b4cca35ccea48e0b4252d8d06afd3571a35ec254f1e939a17f1516f3d2977bdd20865fe9fe177856dda99893b62e8bb1edd87eb96a93489cd6a91fe0c18bbeba433dc5d314c2714a4ff6c07065d7ac44ca39a743f897b38eb1a1ca71f82050bed0f5ec75ab380f9f065c0207b19a78742b36868aa444ef573fc2b99679073ab6cbe322bd6e1654191b1c72f262c2328eeec6fbb6598b09164d03ab1a95c701e5782d736fa2f48c9cc1fba2214edf5bdd322605e1bcb74e6835e22eb3330d2b16d2cde00814f949a78d66b51f94cf16ea66d73775a14eac52ec3afcef098912d1dc433e94bb62742d69d76559b38fbaa6e312452792988b6facf7d681736cf0feeb0c949c922fadcee6321357b92c19870f89a6c0c92274a3765fbb95b169e2393774498b8f405de454e7a54c29bd4c062f4db0022212b86283ef76abbd82866d028bdc64b33cf1421bfa5924422d0deeaee3c77c8cafd450885263081a42754ebf97e6fbd2f04b613405db50ebb8b1734d49098237f291d636e9e622c92dfbad21529554e2406f69c2962643ece305b53e1f0e2e3d80c2b19498337d85d7a9d7ca35cf8674177cfc4f7db5820d72790133716ee911d9ad02b0b606a309527a28b18b62627db47491d5e77ff014414d471ef039bab88878ccfe53161b038695d72a99d4ece97620ea3c8d2c6440570377710fc340e6251e472404a2f30f1b5da74e3ff193b53287ee59fac4a3d99aa7b46b8137cde9adaf7ae987fc8e5f431630e35cb091a7ce7eb6af8c635b9f4b7a34fa26bc6156061b7c81b08d09640f6e176ef5ec8c1a80d42d4a0fbf60fe1e6ebc71fdb3dd939e213e1193a862199dc8a460807bb338ccb30f533ecedddb1c01f68d0adef1b74cd7f882dfc66962511c84582d3e10a0239ca2dda0378a81955595e6751fbfdf62d6de79a88b976c898863c2ecf377cf627b115ec02cda94e1e682c6e3417478558c1f610fa2ec65b58b62ef54cce06442b8130a0cc4b4f5b4e86cde4c6c9da59a0a22e24156a223ce30966f4fd0420427c207520196f7d4894192ee2442cbb7793471bce40a15a68171a1627a37695a9d625d1f1a0553616e3dd43a7c075a775e185f7943a9ca3247a816b46b0b3ceac24e6d51ba738c0ec030d03aa608356a587d6257cba992c24bba3b92cbd7d2ebbcc0a2893efa3c57299b29b688ebdfd030bdcb45b57af22549ba3ab625fd3e121b9a7f9e320d0d09ea224e38980dc4f2740c4e53a1f72ed562b509ff619a3e695ec951e563a20fb78ef6dc7dc3b58d42dbc4bd03b75277bff82b45226707b595656613e2109c4a8e430aa6e79ddd108034a098fecf710ca9557f35344dcf4d4be57ed9f33b03039d7d492f0e85c5370064dcb305e721fbd31ff30e891d8a0407a395beb1d5a8601c867cd00d1191a60db84bc6608e6ffb5790d05eb416c172425782e434fdeda8b70d156e9db9c4aa01112199338f89f879c1e4de2c5f8ced7dc7a42bb38b2fa26c5d2843a3fed880ec876f38fadd78789de73de2d32b2b37334cbb3b2bf6f79e3bfa8e1b3e516d9a68af4e3595fec2096c43c1866110f89306666985363130ba030a6226c1c8abb721e588e4c94a5c22df517e2fcb85b20c1ed10bee0bdbfcb2737fb35e23b44d84ed03eeccef5165b1066a4a592f3531af27a97cb928e31de61cb6085c8c29ba6cf74e94458be7c47fa58943acde8fab99e2002055941b96f9f55b5e87f1ba95c50087f2e66d43b8908005a75643bf30573d8aef42a36d26428a0512ed5b4840985542e7a49c26061dd81fa5537ab20ed6668ba8cc2d2f24ef4df5b57a69cf3645b24bc036814b4d7d46ff5ddc485abb9aff5a8c386c223649e488285708836365fdd2b54553a07e94b6392477611825f7aab42394c3e92611f20b8a37f69e70027f6d8652cac0ea71bf0265de7941c61c139e16f244225fe2933b229d123b90dae62c6088e753ae331660cb84182758af3b96fa78b2922321b8e29f92366b86dd4e1dccaacc84e1f72f5dccba0f7aadf5ebf890c2757cbb1ebad68e9924c8448bee7569ac99a813b272bee0ff8d9289657d5eb8ba484a7e01d204ca1dc873530b63ebfe127abbee0e418f1f2d8e1a5ed6f25f4e8019bf653eda6342c1134ccbd92b64dd08e4f1c218ccdddba6e30ab1f5b97e9bafff8658b05d0ea1320431f91efd4b390a23763bda41e03708a6f0e5fe6442a6be128257996d79ce6681bc0b10aa40aa4073b0e393127d831a7744df240e69ea0a4096395e0bb2fe41fc380e8152f9db6f772b49bd6b63d64a4f1f6053bb2723ef17abb2b09c51ca0f04411235cce713f872566ae87b1c8a9dddbfca3b2197671e2d78bac0d6f605b3f93869ae9663a7a017ae1272a7936f0de7114f115dc6b789465da36d8a30e5bfbbf6fcc9fbee4ae9b613270032d059669601b76d4243543a4712bda14d067e47c8f0e29d1add8dd62cc17074e831851bb651c274b520500a60a9ce81411e8f0b3ff0672aba247530ad2fc4f0555ddbe695110d8aa417a813e2fe922936842ea7bbcef409bc2487f8de6d2266948c0c3a7f7c9b48a659a1959c5f6020f9afced4a34c34256b0b3025c7b2f4ef92c101f3daead1a4f12afdbe7e0e96d05ec010fc9187a4384c94cc1711199369aba60c14f0e0bacc1787b146183dc48610030ee683bff987f198b7031c87d688dc7548a206683acc6038a493d17e7cd5815811f96677865414afef5abda34836961a27971823104ab7908f9afc5ae07cfc3dc59c3d1804b89677e51ef4dfb380533f77ca39bea54a94b657c6f1b548d3aef7c345d1bc887a8d46fab38acb22afd82cd802d32e910468a6bce4da382affe1ad4ef9d3c6667ea9bee5ba74f6070b469a1890c261c1cfbe4b27515709d2819a2a677169154b9db5567fb829a75ce7af540ebfa9022e247078f945b044ac63c63c5d671a982aa411b29f36255fadde84f308c5917005d8cfc3c6b0f3576ce79cf892ce6953637f353da3c1843da5dbfdb24f00bc6a9299d12855fc41e0dccc51b8b9a7f69e49d8ad67b883cd117f5c07cc5bd0b4b418820230e6098c95ccc7f3f2702f113aa3ff2f4809b0007fbf88acf58ebed39a16e44c27852807f137b7f318026d60f514e1aec49ccff4de42533e021d898658bef17fea5411d7c80f048f6655a2e2a7c7c5d10ff1e19358b912a43c6cad7aa6b4f0bde4f38e71415ccdea5db5593e305f930050db30f1a9fc0bfd2ae9ca0e846625d958e01dad03fab0c7afc961be25736446644025c2e3f730516f1bc4cc26b68693e02d22cf6b62d5738f2e9544ececf73aa85d55e97d8728729c60ca7094d1b15292ecf5dd6944eb35f81163c85cb2df4095cf503a44f07debecf90518439857eea5ef4bb97b7a87d4b46a97cde3a130d30a0e2ef0481517c1377a5aebd9bb0a2f5b40b9cde176fa282fb60f1e4aba8cbd2787fe522cb973b86508a99b850555051cb4e77ea575ed64a039c3d868c8ab44768d3b726f09b1b6baacec017c018d99b26b9fedeeab41aa47565a725c439d8712cb7bcbd7288cdf3ab3bd0e11e888a9954a4e7621aba1dac80facc2cfe3e9781f1c682c5cea28c3f214bca3a945b29442907ba2beeaee892fda2308c0fba98a1c03b0f67eba313b9f4eae70e2c5d10b9e736cc780ab6c8b08e289cbcbe11483a62f04b9dfc14d2ea2fabd16d89fb6704491ea592ffc693a3c64bfa86825a86359168195988e421f8b72f15caed7b0bdf8c9a52ce108702fed8d24164b60a30b43fe0c9f1a440fafaf1d7d48437d5f0ac0f08cf72ab9782dee04365ce3b5756ca847bba5dfc71cfa058c6722c2f2eb3d005e8305584184388ba84d3d80a0773cbdd108076b6b62bb238840e8d155810529b54f178c3854953913ac8174da9b47da67b9bceb4014dd86c5f789855b286b4004a3446e5a3c78250faf747fcc9a172f599c39a99af534ac0b368de5f2d5f481718ae4369f502a801b8835996f6e6367e73ae73e5780cc2f8a13b2ff58e39dc7fcc41d555c042ef1df6370537c1f993fdcf565d40050ef5c074056dae9decf5c0d2dfd906f8e71bfbe6de34d764832ffd0a5ecd6dad834741de5db10ab2feb3076ae550ba6809e7658558d63a164fbd8cf3bb560197e796b5d368cc3848536a59f73f8452113ffb3e119cc4b4908022cf9f26852ab61f01e6a59f34e1e5d815496e649bdb4b2e218b45da147319e0f9c047d69ba1dd99fee96b344df76a920d10756952d7053f413295bcfa48ad7860eb7b83f2f6b6d6576f840d744e5346b65b5d4ec12fcfa1763ae0e4e7d4c4f44765ffbae11ebc89179f0f947dead45d04c58844fabef30a5cf02ec039e3553eecf6abc5c84e4cb75fa40c3a378f5b825718e0e897930c2487858bbe240c550e0b555f86b6b6241e6c7415276de2577db6972cd35f506a937a27031ffb7a2eed4a7b2614b7fe2a1253f4a8d5a6cfe33478dfbb57fb564fd6226032d31e39fdccdedcdbf0910f50e3c0a6084ceaaa65842edb49c99be2bb36bb13c39b9e97256348c4932f7b2592677b20fdfcd8120bd6469510a79a9a8c38a937fee5e7bd4324198973661de680b8b9b40f52dd2daa2910db5af26fd554815bd85958cffa73e093e75a892d2472ddcf5037767443dde98dc309f9e6121c6a9caa346009b0cbdd79f74372d4f7619da7f0a87f730b6a5c3fb88ddaeffe42996dfbbacc8078edaf17cd07a566c1877202425dca1b28d6adf0d196de892275a9e970335f27ea450d3ddd9e9f394a1ea51c5b10600689ef50fad0bd95de47728bc426551f8a19ca312ec9e5b7b984f19b843805f81e85e178d753dc6d844b83ae8d5ec4df9ab785e5caf5b8159eda21a81fb3a5e920bb9aab8d438144f9c73ad2a26c3737a3c0236477afd6502b5d409eb7dfbe4d62c50670dd16557bbf2956e15f336c3fbe237139d147c5bcd3ef1fd8e3730ff31a20db693975f876b54d3c4063cd14f01abb14dca0d6de1d6226704edd828f57a2efa97a5b60de5a7c6d12402bb288ca556ef7378fd0016aa9f9021854e6cd6ad45506bbe726aa87deac4a784858c6a77011b1c87c3821d954bbe7fc27538df096eaa980be00d1769e7508cec0ad69948154073192b771c48e0c2b884e9e8420251a49692c4dc2242c8c079c1005a2032135c19f4496ea3a12fc55fbb0acb8dc6c4400b21104a2edf5b87a5461ead81a426415fef729c607a866d0c4aa81c4e45b564a8eafe9e47328e49b837a0416f59b52530ceffb3c3bbc33bd9f21eac0ddb5c02e0a4f11299a640b5b5632fad6b938fea6f263ef4b012cf0316007eb8e182365e53f33f49b2f77eacd8e28aa939b6f07afe22976b1abaca0bef0402f834905e03596a440389753ba06fdff9d93de80e9bc46520cc31f78154fcd7deeeec09f3cbb6dfefdb82e353adf453f697d9292ba7da421c937e7cc2e3df0c448c14e4f269e889027c6e9c41bddeadd9f0ae32bbd45b92859cdb1cf26a63d310759ba62b065353f6868daefa98f3d875391263417bdf053128febe8b106f0d0d1ec9acc098d6ff2f2ef0b609e31a16746de2070fdde0ed06a9f93661af0b2b61caa1c5339426154a4e8777c984c1b45000740d51fd12fdcae5870709c2d3fdd279bca9d9e259a6a001a0f6b6c6ab6d39e8e8da8ed50d92f6c7d092ba13da1021c9c9a2c52d8c5d9ed020eab178d8082a9a0a0cd23b732abe2b9986fbd3b8fc3a9ad6fb8b32a434f00727c78e52f783db86aa55d8a380af65e83c0650edbe0e225d2a267ce4119fe95275faa472ca2b7b2b8196488773b31beb7fd817f637f3bea9f33975668bc01e469e9d5ca493d50140ca9e0a9c03dd1da5fa72e92537f598dfbd668e95555198bc886385b7e197d9daf23f3649837eacfd14dbb70a8c01f5ad4e9a6222f28f37d8dc77762601a19a0fd7b602a71c380b55ee1e7f29db869adbcf221eae09045ef490d595866cef5b90aa1d388176d9b06ce7c106d352d6d9de948878555e1fa3306123044edc50d1713d4a6d5ca88b41703fab7f1bf55f3a836b75ee423a23bd9a65d1565972383817d7f22a82dc5a5777ea6be13ce93f4f0a8dd18f2f34b08eafefa951116e2bbbda7d94245e5afcce6c1d79e390dc1a551a2665c7ad93b98621c9859307bd32828d90042da52b7ee5076ea7e61ccd43241a2df4d309d97d20afef725b18c884957ea30b62af52ced31d560912772a6e13840447e754399a71012225ebb7e27babc4b77f32332615399ddc0002362833370e55f996a1a04677658473e67904c3a9a5a74730774dd3cdb5b0553e6de198d249fba8330e944efbf01a38b4f1724409547a13759842b9704a58ff930c7f843696c8a9a0d0fdbf93e7db4e8e70be4c0573590fac95af3eea3095c2a317b3f3c50b670d0e9b3c0ec44e734886879ae3cda9d7715c1c82b8cf1890b45431eaac08ec08fda0eff953e03bc6cee80d7e5be48290b3c556aa31d9bbf1f8b9465ed0e2d5db4829f3dc2ccb468518e3a4fdf54632ad5cee57fc8afa706d23229ea21ad97f74954e0ceec752e40206c169b3bc58e6f156b6145b21ac4e25b9e2faf608ec28ff1e6757052f7f852cd2156603fbd5ca669371ba76b42baa6351c2df0e97183d94de67c74e4389a997ea009275868af38f8166aea71404ed27dad3cc3fdf3b41389bf7d9a0aafeab08df1b629bd103c0b3cd312f4918dabff1182a14f4572a068b4e3d423e1bb64c5a6f6c9b011015be60dcd18bd485dce4138e6420d6d636d22b31d53130a3dc6782b43ca385825ed520ef4dfed689ac36d2c927008a595dddd7ca056debcf435d2b7a286b5a05e4fae06f8e6612dc2b45d413337d7b2e5c1de5c4229f6e58c5c1414100f26cdc8f140336b4923d9ba823f9e20f02980e7389d32cf2e429d7a3661dae6860f50a1e7864f32faa6145635bd581cb879c7672e68e13e045081b552de8ba1b765915985337ed5469ffcfbdd142bf117dbdc25f87e9290d2cf3e972b8fd41859704bd1a1b7024dea1d8badf91ff4f91efdbf38da5b95feb0a65b9e2f7d0785dab3bc8530f18697e8481c05c6014e0bca89c32a6adfbe52a89e988c34b438e44e945aab16841548d20a7fb1afae43cd05e2858f7d6ce7b8d1465e96a6371f5b11f4c0539f497891d77fd2c44e95ab86b3fa13564d882b819c3ab551091f3f5ee77bf61dee04832726ee3c1e3445a695553064abd56e21dab6d3860d9716b9075bbf3d3a763dc0729979ab8491acbd205c6767e1a18677c236cefb93e24349d2a6f7391d2bbd5a64a3f362d7b92c929597e7c3871212c994e7ac5f6fb7463c8d003cbb4d6d20b7bc9f140860307cb34ecfefa65954cfb6faa268b874beb78c141ae2205fac89067a6a5e22d84daab53354848e2d716d562b76866d3431c44d248b0964e3dae329eda561ec0e371fe5e7326dbf243a54fb671421ea8f00a200f32c6b5e593bf49fa1839ada3baf9ed4f264e1f5d5bdf4a69bf4c6e1354f4b4dd837615a835e5a3752f58e6ae5a2118fcc8f36275f3e117c105a31a4f4f87ff05d87d4746dcf378ba8f9ffb1cc2c2fae3dd55121c8386c1a46846b72eaae8457ef18db825cc60fce4d3adcef9c3de1ead137aacc43cccf7109e4879f6dbba4c2d930ef968b559926e29948b2c2300b573ccfbcad90c05e279b2590a195115d49e9cb6a2a482540f9e4c406548a1b1298e806aaa907f1d64447d8f9ad250809770d4e37897eb121f25b245e4fa3c2b761bfbe256bc1258546f699e717d575a9c98e0467ec262276b2470fa380a06037bea9ce05309e43ba233b5826e59538d783d151df79797abca8b00515a5b8e84e7eef681e29053b8aee661ca55c18c2b541a47cac69415d961ca68d32ece4097fddfda848cda44272ef185a1ed5b95e7465ee49d98804999d7be054416957cfbb02e8f09a38bc24e9fcb93520455161a87b0379e8174fb187d57586e5c70e111a2cde7146cfbdfb3bea35b7dd9e18e27c7612cf806f73e87643c9f5c0960583350e1209d5aece6aec9c0bb3e0da4ef9c926adf75a0c249487bf9eba2494888a19092f407442756f9e9ad562142fbdee9a3e113f0df6fbc2957a06be2072eb79972b52ac05f032d0ef483a00a9ecb11d969cf5a65d854567e0e4f63f2f82b0c656d2efba2b71d89fc65df4b5f26e2d66ec820821157fd51ec75113dd0ee442aeb378f4ace0bfa10744227dc4dc1dd132f99a7cfd8d6e79a87d95b3ac0fb42b9cd8edd2c261ead12c4295fb9f923d071245b25156c68d8f4e048594bcb5e87b518ea818ed7b2b7d94b9380dbd4c1ee013f977cbc25282a7fe5bd92cd490ce5c58019b96e71f95d943220aa563ce34b8383f0efe1eca2dc93e87348e77d25d756204806c1e357485ee8c4f4e699f1ce9ae498f21a53d8d57966110e5484b1339041c86dade5962f07dddc641caf194661475503e838d00193d7f98e5a15fc7d370d33c1574e75ac8bbe56c9b980fa50ed65fb1475382a3e1371b904c35dbf87d5f8a9d634c91cc0779a056a04dd24c6889e60cceb461eaa2021494ed9dc6a7f17339d6532c9a23933ac8bec2d47ef6cee7d78efb437319a1c49868826503417fc76b513b59409bb8194c71527a3257d6ec019c51bce03deca0b3c9190c8faae5f748523f3f5802923371bed9dd32d839fa1a48e4fd3da105b866532d31776a1756dfb7a105a9c3311b92d95a42197537ef20c02c428983742d28cfca0351d880fde34425875d57ef9db17a3bbb970b9c87a7fbea163c75950d8d36e0df155d6af577ff089e6415f4c339deb183d2b56817cdb188cd382114e9b55ca933490bce78c765742839b98e650a9f41de17dcb17f3972b70369297f379d6e465cfbd8b433bf6e9a5f43e18040c617b5016412f1db2a8b53a34a289b48334ea6a684700649cd5508f28566f6cb9dc0b80dc46cc94e4bb0e76ccb8a84f4dbd4999bd4bee93d54ff03c7923a154f8fa2cbba6310666af44f2d63cbc658eab802541647bad1913313ecdd3da699fb56949378e2aaa2bd9333c82955f950ac6491d7572d3435ae4482aab20f85d21984d5c1a349d0fd19d5f5c8c6c48433193feadcd977ce600b66629beb8fc688a777e3de256083ab90e20b684fe4356b49fb7d3df14ebb7057fd627b3ca9c0d4ca13fdbe64cef27c7273108fab505d3a7274c845c0d34788cfc5ba799e1baa16faa1a7fe403cac6527a218a5a19a989f4f191f4c2ee2284f1063b4a7a414f8a8141c634cc1a8fe1c67e8dd52d68a28a0a592968e93a2ebb8516bfd9a8a6b5d82f743eb0ba01459215cca7bf84fe7c2250c5eb9e1d15ae5ce91e99528e784a2f68ac83e7b50dd712eb712fa4abb2a8b81d9cf81252c14e77c6793ddcf6d7fbc88ba4104301390d9450582738afbffe674123cda9e4f60433e1b385831bbc419b8912285c65158a4ba18bad67cf44e62404123fe808c8830f98564ecce2dffd558c3bf744f2440acc06fde3b0c555dd0db287be1a634ffb401bcaeec44b6d567c5a9f424ce8fefa5e04ee2cb4a866bc84b11cad4bbaba0434dab43504b49bf418deadba470818009a6ed1b8de5af6abc4cef6f94a40511f4c8b29ef57f5ad36226dd5cae714846ad85f1dca76b1611c183da2e29a7af4d49406bd28a660a62133a3548eb02f1b5a9c39e60ae67b16c092259fc65248a1386dfa1fec66d29021dee5bb216deae658c307dc6ab13ea4b68e4ec9b16af89ff7b9c249ae914e72b39b4545b116ba2924ac4aa08b4a2bddf094c211cb08d15724beced85bed01f67d276c7233d6035753fefa4bc3321ad85ec602354e9488b0590fabfc1cadd52738bda158cb7a8d2c629168c1012a51fe98b427981073303109ae105e8da77c5af09882016f982d32ab2a5714b7e24ee3f078e7dbc5bbf7c2cc82c1d118a08339cf415c0e2771b892a0e18d1a204f2483b80a6c882ae6c1a7772e27ff8236f36ef3ca01182d44cc0bad59264d93e28d2972399f2df4df35893b41834b16d6328f7942584a85871b2ffdb0b22410e0e2b485693901c1d182a4e3e14b52847979dc6e6b05f6a1796ad11a1f89d09531b3e4924a9f6415fcc04cec51d7eff3cc1bec9b8f3f697e73d2dd5af0aaae5c1cd6eed55b554a681dc040f801f5cc30536c5794506f1c74c1ad1ba74a81462345c16a8644583024961c88d2e7795b07b651b03117f0f0396383c164fd1ce67f50b7490875d5b388f2064615f7d957489e012c4634f02aa5b3814f34ffeb791db8b20164f5980a002939bbcf2e889caa74bfad5099770a8a4018abc311d64a3474899951d8bc3cfcbeb55f8869449017d657fdb13dc659307fe6b3193213db67b30c3b02ea3259f34cdc30f2f99755c5d8195e50647f80176383b239a6699d600af49dfc02a9e1bdc4af6ff97bf96936b58e7400e8234d7d2db995ecd73ad4c087ec653b518544eecc7418c990544645568e647265d7a17aabe8fbe03eefbe809e1b5469ea4eb1571427ca26d9c4f3f7a9ad20dcf540da6833bc08bfcea4a08c6546c1e4ea9abf4704131dde6766b1311da64b811f1a41700f2d2a51752596562ba20118974834a3560e3ce18957c77cc3966c5ecb240d2c048a43aaba06abb6c853868c85c6e5c7d24697c19a07d23f207c21ca524b3f08ee2427f49527ffcb0b9708a2a12ce9ec377cd1ae8d1b4aa1761acb26cedb410bd40325c2448d8572e576a2414d075827cf233f567dc8b14e726df8174852c67301e053634f8a7ec336801e7442d87e36e8ebf7d17dfabfe70709f2831913e3c4f3b760ee28ecd63370b50e096ec0cc9567918eac690eb1a32c2a0f3cd63cd80042c3fa288d62118b2d2932d4a8463427fb5d5f6dd36d4f2db94320616d641f6e617c99a9cf59679e0d346e0e36fa4437481bb43c68bc1a56044ab4ecfd4f710b9d853a6d8f38cbaaa86b18365407f9290a1e5bc59efebb0f982e48c1a9b2af7025e2cc058e2c0aef3232d0accd32b5d17e23dead1e6d071c2ef79bb4e2a94ce879b3925efdf837ed30aca7556d54ebf7decd074d61f5fa019313b59dbe39130fca5f85d1b96085133f14a9a45271c8a0c8106f80a98235499fa0de4e1d1c2da7319e31fde39bb494ac49091a043c384b763bbb919eed7218d4546e84acb8eb36211b90198f8eb44db40943720761bf8993c09e22a5b509600b95d60e5ee34792039e1243f7d03af73f823cf591ac8e3675a06593af2c37c296f9d6e6d5c545e18b546ff89811a77064f4b6266e88af6d04ffae628e5f6e692f4265537a6703cbc0baf8d3619885838fbf4aecf9c32601725cda7e2425c408edd9aed8eea8896ea4860dfa0b8efdd9eca82c8a343e9c98274a1e7565504c6c2512e1c9cec5c69a3588cccecde4580670e950626a4d0d6dcbad934c9c593aa3e3fd7f75ec410b080b5221e17633f3b19cac92193a6fd727552286f58075043c5724e38c14c3e26f5b852399f64b75e9fdf2ecb47c312127070da6f79953305527341d171822bf1c7d8af6690afec90c2ddcbc2eaab321cd7ee659a5c3387b81fc149e053d624a5fdba85623bdcfa57005116844019b02639742540a71d3e949eb30dc4706510d1752dd5c2c9cb6e0fcfc2c0943dbc11a8ab4149289568f6163c68ef3684ff19defe4e5abba7c11a12646eac90874faec978983753f0dd18c86efb4d209e6101ac2248380a303187a89cc0e7a5b5877f43261ed4d82bfa78501edadf6288280ae2f79bcee11d9060e64b239b034c5a4629f1aadea918cb7ba05b160ea0438ceff7e26f42894f85745c00cc534bc5846b8254b0244959efd0adace4225e02cdd24066ecd31fc6d4dd3b8a9bd99b4e90c32b1573809010736707541193a25ea05e71e1b730416ac715fe415f9492bb08e028dbd4fcff34c2d098141fabea24c990681b172f1f12fb6c17d66f606cd5b8b97e0d88d90eb3894ea7862a629d530debacc5e7af2bb52f0412569e99eb334769f03aff7f7d6858309772903634334757783e92edf91ff789451870cac3411dbaaa01e1f71bb6abb57666e52a1a1bf4483c10ad029e8a392b682970f80c6fdd3b0e4467a41c0e4d3ee559cbbe3422be999d8299177e98512f9516df8d5973010667d17081c1b04e79422b54ac9758082a2ea89b6ffb6ce0f96130a08834dad12adbd067fe433c4dc448fcaa5fc968f975cf9e3ed0b31afaadd1e965d3ee78c9c2bb28d2d0f6a4beaa034b5abd20a8be3f9d548af0b0a5d7061e85b7f623d32d89b9dcb5844ced30fd96ee437cf69e44b171b7cb4d3a17e6b628134f86a13ae40b18767f6f03acfed7bda00d94a6f08f52b3639aac8e92949599c32979017f1568b98a21e0f8d1783b2a743eedec9d12a746a8859a19be215b0a49b4028c782588ffb334fca5ce7a73facbdcb214267e71a5884c4d9b61b70ff91cd12e316e072ea2c58d9064e7a339fab29f34afa6dbd1858b1438863a6fdd64c0b5dffad96d6d9596d4a442987c922f8d3225de434b5de56ea1709da1ac488920b4c324ebae3d0f46d053d645b5c2152b261f3fabbf0685bb7be1976f20c0978370a13386f1ed15b2b816294df353af870e55506c08d0089935b4518b775490e83f79104f9b0f886e6db52fbe95bec5d093f7cb0eccd28a89459ec801a32fdf0000ccd897fe530c60f7a705e5a83f812ebbd2ec042e19f11998f76c67b466e9fd44fd03a44b834f013398335e76bd360c61605e40d23b6e9b9e7a62c238762cc71d7ce50eceead0109f6acc163886b809b8d2a3cc529e27a71c9ecca64a316effcaeb3d23a3fff441d7de4d62b7d5a2db423fcc72780a976e1006644f05c49005b60c97586cb083018f78c5cfae64e7c744eca40d49f381f2af354c0149b1f6dfb3a48956f77d027728894621706fdd842d3b9e0f57ea6a0f0114ff584b8708c800b30a5e92f26bc77c659df796077b3c59193fe61185d6359a171c42a851c49f2f445e9655bfcf680826a3b7180728a485f21edd62d6c3952330020f6ad4b8587c140cedbdc988131715ffe3354c01e9bd216adba4d78c28a12ce0d1b5f79ec207fdf9ac4dec2b52a265625f8afe09db533c42fcd38e4217298e68e2f9bdcdf7abffce0d551c74c2c47dcf52cf307de607c4b09649d19c33178eb5b8fc6d79d467df55a64ec8ddc17552091500be0cf5d085d45b0dacdc3452ea0773d9ab0a790a26498c2b656b27d42ddb524445497b4d5d5eac6e4bbe40ead4d9c7c8a9d5b0bec5017a06de5b7ad461e8abdf82a1c634ada2fdd38e3ead2f0033dec9057e9ad53b65e331f4bf467b97a2160fef2bb4881797a26c370979864d8c4f81381df495a106cc0bf3ed85e06c4076b95048ccb6171fe8025ba5bc72e6c9791b5d6bcc3d3b642c4adf1372a409645d44c9da9ffd3da9622ccfb3a1f926f4fad4e593d94c8c8a4f00a10d2fae3a5dc5de2fe266e2c1b4b2d86ceb4c30b50f404abc32232c235919d30bf97602409b20cad934354ca3ef5466f84ab1b86ff52eb23344d2d0bb49c097c34e8078edffd36bb553c542608588d2fb57b15ff869c8a3969c96c8b6375d01af14c68e972c2a0c8cd6f5591cdf847fb0f85b7e08b36fadccb630a06cdd1211a7d31252ea6073a80fb49bcb4f63df6c584368d09574e6e7ee22ad5188868f7ae65e88fd55498dcd2e97604fbaba627bd05fa2e54322a7260a519b716e2fe546942d1d26d0d6a539be159261b9a1cc432cb0a4d0ec18d1915a241815b233389b6614a055b4aa8f464fb0c94be0439a9923abbe4edbab006d58a736cb25bddef4d3564d38a8912ac166e85b697549cda664dea57ca964a892823d28f2b05dfa951f7a5dc4292eac15866fa7622f04600ddc2745fd540ed0e946ecd22d64f6f419c5d820952bfbf7abc92cf2cbaa1de1582c2c9f84ae34365641c97ef51bf22b6c79c53a413872b6fe27c08519bfe30a973c7c434f241b21deda36a4ccf411abb8cd1416c14d814a6e79a73d917dd4d65702e77a90fedb29116a7f7613302849ac5fdab6752213bfe1c328c5bddeba71f8314f3973c575c36085b024f573cf067a2c9cddffcf33b4d708a059865f8655eea8783fbe4e065b20b876807eb233d10ddb8beb09be876023f25b60cec9f5d44c04b7ced39b3397badd0e130f93f0780634a7e4c4b49484cf829c3c0fd762a4065f906786e40e0edb7a8e1c0bafc11bf6a77d761d341dd0d098b79cfbc441bacc267ef56ecb7ec6ead08de67f370d3ff7f29931db19c4a16fd6c48606c5fa4f255edda5044b865e0c98658d8c3bf7024dcaed76da1ea9f140f016572297835ec5ce7f938977db058d7204dabbcb02126496dbc2c51016170ff0a3e57483b8b3a44fa77a43d71208c6162df7599f49e85d477ce323c16f9ab3ba59bcbf6f4b7423e9632ba256606839e5fcce718ed7b0b0b1b376ad044403896a19b2ab775e528993b8520326a10a53df45597349e58bd5c26f81f3dd6022d678676d68c2463870d31db92044c8c868570dd5fb906c043fc5513f9f64b249c8125694f60c55592fe7baf17deaffe0df6f013de2b0312e4704ea49f1f01293ae4291307f22cf43106c4617fa53f61bb1e6d335e00408e58a78924aab35e76ee777173921bdc80201ba7f931fc112b212d307f823d712cf99dfb9adfb61b2a083b9e0d326e300cb5396f12e0288a946282e01aea361571b150a5aaed0b84968087259bf4345e05370988fb7e3301d88c8aaea72cbbe39d9ccc9bbf29286058e490f4a5c1d251ab21ee6426658aa8989e3acab883f8b1c481a37e9433061846071015601a4dce10ff7785ddd92995bbfa48fd6f42ca8e8286fc98c9eb4c518b7cec2fdb4e2ff48ef5c31143ac002a5a2b2f125b7dc39a149e41c3513c75a790b728fb9efc9eea5069e10aff0973897ecfbcb27f77d4746877d24922179187303d6d4932d2b091347afddcb957e2ff7be543b1db7bbaa3c67f42406905c8136e6f54dc0c636769f346c77b84e7d242f992f63f20e8112476de40a349ec4d664852e80216f6e92c1f73d06c9f9533eb70645036a5c6ac85e08722e8cbf228731aaa51f6f60ad5636dbf01345a2c48723a70b8e54781d0127d2c14369919d9dfec5c244c559a5b10e8dd75a8b1f578c60866498864d4e415ec4fb194f7384fe676db81e94e4ba951b0548977d83d814320e333130ea0dfa070abc0f64be8d4646ad97a8bf6ab3725643acdf4169d98e744840f3f199f3687cf92fa0e1f951e2c65dced80134be10c43cba8bf2cb9bbaa3b083c4cfcca3f4fefa96e6a3bdec91f8eea5ea991de1bc999f78256212c819fb23f1486d1e6531fa55a8c193de29ecc963426592a21c2a9e902953fb2708de4c4369414b7da83792ef72e0aad410cf45d38c9b5a192662dfccb35b370e27a86455e8c7be72eb1b33f05f39f56743f1d212e28df49fbcdae91dac901fffd6477e1b9d9709ede59b7e3442a39d1c82259b83b38fb0a4da77aa8b768b117f19f5f69c100f6573ef25a6bd1917ee4781e9ea310b46542cc4267214c8568c8001b37ce46a2d9ba51be7ff313dee7392d39353493f8bced309d3a3db9b33faa493d10e8be8782df456d3266e1a3e8108cc164e2ae49bf5a12b451e180da8a4ab31a5964c86a1d97b6bcf86816b9b4e27ca840d9f0c09f6165c85cacc89efc0620289e67d7c76b0159ad775c2d24b7939eca2a05abd0dbc8df0eab23f3c66282df4b14bc5106327b29169507e2588760470ec6a2ee3c2f9f396bb4b2b28b8dcb6c648404d84a60586f0bd203d28ed2121003fd7a3d79367dc8efaf3226bab309c69d76e293a3167d7e11aedde3710c9b7af68e38cf0da11ef157b1686d5922de4522579dc41de399fbf2bf5b4ecbaa344060479a9c32970bc55e4b43f60398e591f482f76649dee02c3d544ae5e03fb2e04146da4dbf24b15bf5dc06c1f34ceb99ecc77fcebfb749bfeecdbd8ee82a8d9e25fe0701df14f9e32f3e6676d04465e767153af583c9dff9574fde5284d5b7ef39bbf757a74231deadc4b5ed04fb38f7d3b35f8ccef6cab99c7fcd71d3c6602a2d03e3634649506a07c98e66101830a87f30c5124f2d1aaa914ea6a70bad9a8a6beca26cc15fe686a18a23d75d1270d4d814f32bcbc37c20edaa3fa60c36edb2f02815d82dc08bec8bcb7610c57cefebeb246fa80d26702673becdc8de63b15270e5cfc45c3972f4f495db5d3267efbce5f68ffc061b3199535a4f609ea02d320ea5257a627e4ba235a15f6408abafdcc5793b63a514bef8c6ac5209a10b824f6e059bb23daebb9b867ce8efaff85b60a56992ca821e267c42a3f7f3ff77a1cfcb9a6873e165ce16b8826787dc12e3d48b24f0ea76fa48cb47f4257d28de5aa41e8d3c6fda343415cdecf1a8be6a05eb1a1382daf265f5117b9a39f14dbfb7e7d47b10380d96ff0d89a1d2004d8678463afc8a78f28ac3a60921b6e6787efc37652d95524449e76a2048687f6941b935754a787ead1816940e9434fe241b9dc7dd2219b5e5bb50e1e4f3842d591cd15a5f275c38b34ed114cdd23cb729dba541dbabc4450a6109a842d51a869524f0b7f9fc38e79c1d79985c6789588d59aaaa996c4efca26d044c80dacc57d324b4bd633c6bda24b29f348427fa4e4874f7fa961bde4d3ef362974e2c30b0babbe72d73435bed0fe26d6d5bed832b0dd25c08366354a96834ea35a5b10d32d0469cdaa57d0f28e09b08a9a46cf3316d3968842b55bc2e0d387c6d2edcc62423100ad7626edd10c86ad5a850b994b492fe12bde76f1f70323ff58637484b22cafa85b13645e9aa7d21c614fe3afa43db18668efc5465a37d8a6ba30eb0d4fa3f17e72e20703875b2d96168c87ac37f885b036347b25e50c4ac949bb914b135421adcd4482d5ffc7500b86bf68c18cc022a8859f119c7faf15d0c2cae5168e7b16b1b40c820902e691db0aa885397920c9b0554be1f2a788e3e6143d480fdb0d7b4bbb11bf361ddb57423abc09f91cb18b8682d931c1caaa4a6d7aa2b914727bcbd99fdb15c396d02f7800a64a3eb98797a09bd3f0c8262e34d383ea6c90a5b53b360c49e633b5fb945b0d9837afb07f8849f07d27d2c26930c6de4c49e2499995dcd745b1cf378abda3971158bb72f4840a0320e3388bea87335144c1ae73624c46779a0efa638000c82e99e9675d0e97de8d57e0dad726760489cb90271681ab9e82aa4e8150449de6bcb4125b1d655f6a77c217bf4de80faf8786d3b36ea15b7b8bc11ab0e2c7a434077e130a11b8cd4fb2eb7f505466eb3c28bf1c80d5480865e09d74e850048d4590441b5bc7f3c5f9ae40d936ec2ca7d14f32c35ebfc990ae40168e02aa5fd75fbba0c4d9f1e20dff320bef2b32667abeea598e48d8ca6c8e2f50ae627f422d8df59d3a15833e61da7222b32d066595861ca441add805faf6fead051dd75564936bcfc8569bffa2b52e499495301f2942b42a3160770833903f4def06d6e3b1a17ba03ddd954c86997e03776e7f8d49d8de1126a35cd59a64b80baebf1c943f2a4527ba5df81efb67020bf2164f9537f600a09ac9208ac0182cc7f205f79b33c7c54be89e306c3196e468b73530441bd2bb195c5087be8652dd1dadc3ce62622c20dfb87738d8c302eee4e84c99ba251010b483ac6ba2026f0c4b31350335616573e0ae2b399470dd810d2e9c89333a5a63c8f2b0e30603ecb8ac1d03f76604490da3b777faf468378565f0b18c20c4b5121156207910c87bb3c8ebc231c356b8434311520337f65a890cc5265e91ee02203dade7383f8b8e0823efbfda79a6710cf1d18d0cc65ce988c157d6944bd9ffc04e240df10f9e656a7b5f472c55156d82876951173afb77034a3289f80caf65feaebda8f25cdc2b2f8fb3b71ba7769ce65f710c2e7a2a8aa35924a33b15c8b53c7c1a41978af68772c5a101a6e90d7c456d4da6a02a8c96f8ba2e913f2625895d84b4420d2b761835aca2b825368e70f7e5fb6d745eff83a14ec92e5fdaec23832c164a80a623f8c28260f092b4a3c4fa7206050856448eca60ab1b2fffe233e99bb8327dcc3332a4332fa2f6b2c9c3971a414c842fedf725f06727d3aec3c39d5787b229640689d0eda05786db2b766265faec9d37580573e6a63f4076a775b9f123134bf5a1edadb3945e6abfa1c446984aca642487e21b41ec359a363aacd19f3767660c7d1bb19bb74eaee5a6aa4e9149df834b3a6b2f8b987be5e9ed7b1c80b146acbe0c57af17aa6aa0c6242515363a009e1f456f1d90289913b2a3563f2336a54965cc8f428fd89d091fb943be2c6251980008f137181931dd708c15650c9f5eb73a8a9152beabea1c493ddb05404ffd85a2f7985e075967e50a8148d66ada7d033bd342929b069a2ad2b5d60d6c3e34bc0902288cf40c3dedda6fae3828171b20a3a9360520ab4b24f4efa5cdd3e21c3b01da0629b4ed80cd98351446a1e9e6107a0df683a0b8744bbd0db34995b25bddf38361b236779f05376c5dee1b535296255aa5a13e044dd8512eb008a2b0fc61f527ab3cf5c343f6a8bead1b22619ac9ea3ca0e3ed768eb5710f1cb549fecb41cb4ec58cd9fd240ede75bd25b1ed508e91d06a53d94a78185e5dff173f07da230b9bdba5e4f9c3872c3739eb915ee9407dcda806fefb425c5016dfe9c2496057ab25eae57823e260c19d27f64a358921481253f26cf44917940d0e1ff0395611e90238ff01d2a86e348635cde5460956707fa8cae090548a7e954dd74b4a5b1406f1a1d6f5b7e8be230ff395ceace0ad011f299b54195d53be17737d096d370b8a66f8cd38052a19b4a1620a83e878169d46fc0498048088dffdf8770926c60b51544451b8a4f624710cac7bfcafc84aa796788d006c1ae3aa4f2458323e135cac205f435d88ef544573d0f000bff9f7af4890ba32bdd1bb6c3b91eab926032c44916858a5e2203daf303dcd60083e77768e8737ff697c3bf2063d73bce1403de293e8c0b7891468812a0288eba18e360b3f895beef972073a4bdd08a2479e53107cffeef47099046a1cfdad70c9823526e50e63a6285e2a26b61510c8b4f4daf64a9e704c3cf172423fd5a37c327cbdcbcd98bd9ce6e92e02a117e662d73d835922bb5dee39127f55739c12c48dbf74ee8d16d954b902e584f7450baecafb3771d6f82b4efb0d2950b1af19ab23e6591f7714099992fde43a5003b083375534dca61d1639229f0da9307d2c57bcb583bc9ca800d5902e5c1d58d87e5198938f9c046a775e134986b2534da80bb5f8f8543f5a5f243ba899fab0616b16958b333584898da915df2267b0382dcc735df0ee557498e7c9002d10b6e397cef543088e883b4589f5f3b441040afeace022994d79d0693dbd527c0d7ac4cb4fb7b7d34e9e36fb6873bc011397fce8e46c52689bc3a037994a62b868531f0ddbc0ac77cfd1d1b208d27d92b4f5aad024ae205a717fb659a73722e66f2b446ea43e66e7127601f5fe9ce1610caf3b5547e5b5e73e067c81a2647854c497ca0033d74a18ca5b07f061ed499a41ffd6b2a72e8bc1e207ba5bffd77549b31e2fb86326c4b320ec2b518507e8a660565cfa053b79b767e3d3a0b8db068b2c83108f373f8854da7826d7f815c2084cd061c664edc087dc35450667d71cc14b6d1be6a1d010e0cc242441743f0645089be4864c2e205b25646e9d04399759211ad8120739a4cd06fc2a9488afd411617f9545f22cc91831617e6d201e7e7c2dcfd175f0974ddf7569698d6755cfbac19770ef96c0855bafd026df78c0364bfe99c37ef510de9a0708f58711804c4a4f02a0433c87288d32402e670447a8bda2a8332070dd559674ec8740676d79ce10b623c8c2de668f172f9c26b7051b95692749f9f34f2ade23a0cb8325fe3258eb4ae7e61ff47aeefee834e2035b1ef45c9e6d7b1525ed4030ca74080d53d131decb3a80233fe43120aa9fcd85abf4239d0438623e4c8014c68e9d5300b22eee9d269a998d894a38f3a75e97233961471807b4cb91d69871cc89566dcd2c52cb71f7418d85f1760bd368aabb78d1ed7529dec7a39f76b8c2e8f79632fd2bb344920e1195034767f64358f3ddd66ede02fa66f86a7888ca8d9318c9463cccbe99506f4a9fc18c3a67ce81d68210f5e7b3e910e020493f9e923295e7dd1ee2ce0757e410b0835f0ee7c911c6bacefd432d9bc79fec8cf3db575f39d876d142096cfc892ec788793ed7cb68e8ef17f8b1feaa3fca45a4d1c836dbf0538e6c0a0bf8220f9ff2e306e06738871ff5f82480f418d88192499139162f0242975ec35e05fb81bdfd20c5c24fa05810ba4c818352c5e6f5377b1874f57042192e39f2d8f5bc83b8286eba05dad7803481727fdcee48871f3418fcf953b782c9e1139ec5d7ac6bf68c5c0a3f442363bb8ba6116340796e1f7594eada273f30b024d7d72df29c8b3f64f23628ccd00f394f715bd46725814b432598f9bd63a268003b0f7908a55835d7d514315fcc6fea12ca1968047f6a946d916323f315f373a067b023b00a0dc2f9368db2c341dde47ec5b83ede1a84ad154eb16edad67e194e66f606de5025837a1814ef19cd3ec103da29f7e7d12879a50ca33bc1be1fc025e5500abf96add3f8f282eadc8ec163307048dc8e163d85f94d2c7248d31eb8a119949c10f348a00b7021f36467ad099397015a817f8a729f516278a406e7335a78118a5d89870f75bd1a192241f976e5f08a649592bc7cd6d01af214497f8986c31864e518668c9b7eab42cf01d840894186fa1ff33b27d848ca59613891f9f524c12f2b6d801c86e86950918c984cfe29070a16d00fb8ef7a758971e71822eed61accdf62739b0eebad87d09c9a9401c4b6900c285d52f5b4ddfe9f43e311a980853c4dd218ad2e2964f2c145230cf951ea8132ed0d83951dabc42c47337bdeb3d49589a7f3ab9e3a4b2b1e2939d9161e8d7ccbef399c27002d34c858ab897fe8797de5dada3d79d4ca74e450bff4ce3223149ca67dd4c8a34da4001fbe32b30adab08e465db92f87ed646fb6e8a0aa315a44e506d45561a394e494550359983f998651046d4d1f73ebe6c151d538c5d26e38d9c165a1138f5b931a40fb1a844a1604f4f69523da3b762c71b27665ad847ca265213887e72727f5cd37ccad7d571bed01a315f81caca69eacf09df7521ac075a9c4eae6564be4960f7e070f20420c7faccaacc165c38bb40c3e80f7171ec5f86c9ba5c875fcea9b31423402f19246eaa745ea4338f3abeeb0fb382fa4b267212e8abf15f09821dd102d2ce7de032919816a492d4bc89fffeedbbbb39b0da4d069ef3e8ae61e36ce147b23771fc1c384b09a02932adbfc3235951e634c1840eedfc5d2463784bb3b16e4f1b45f79074fc0b8b6403f43a1ac4a323e79020f69996b1c3b349d8ac2945c29775764a2746a3bd75ece88e7d87c09328e80f92eb3a13eedf2f574d88ed09be2c42cf9929ce14d6621b81cb5d7a509c627fbab27868b6cebdcaa05bf57fcc8d90c4cbcd92ffcd166f5b84cbde63acec7e6b656b8380edb127815d27ff7500457fa7630e6fb1e4215e7b4df235842fb64e8bc112ad87af9f0627bbaca64fe1b582069248856fbc87f02da2ab7a6e0d28933b16855448d62a42cd417a12ab4173da27fa1cdb16c7356cd5cde84a58de86cb063e73c3452288f767b08bd5c6022ea6179df2c95d3a95f4c6ad276871e0f45bbfe6edc812847a1ad450689c552965da48344a72ea5e1512fa5b62d7c45e5ac6e6692d9c6dd4e56bf9e6c34235e38eff8e252791a0474047d047437733ca60717992e637b48c852bf07a71e29382c4ebdf6e333f6c416ee78fc4adc3660c59df7aec665640228d62fabe0d1efccd02eb9cf7e81cb4e1e81ba2353839dc41f574b9586e91e2579efb3addece989518a861ea60ee0072318a65247bdf40a0f056d3018411ce924d72f33bd546ec01edf9c505dd8b8cc0742a5585e89bdfaf5427888ac38e4f07a9fc6d33fe924e8013aa1e6ff320fac6850f9f1c85b173b2e57c95b2295c21ede7fa2d08eba30bd64947fdc64a270416651e2e3d37b47ae2cbc338c4c6008f8cdd6f248e35dd9f9301a3c86a7f8e8ec3ed463fcec59f36ef7776dc0e451bd1f3a3cb4d11365e1917a1fb1affc3c386ef1f1ed4ed5cd07b9bff06b9f45b0eb70f177fbe0476f68855ed9ef993c0c14d79cd0b58a6f7158762b632bd140daffe14e8cdf87b924affadfb8f4d2d8baecc819d035d04749f071de35981f4d14b7ba18e8e17c848e170fa879af29f54f480bc705c90084f24e242932050e62630999edeedfdae554c3a4c5dae349e1ae50d8ba2b8dd477266ba16805c51138c78ced7e71f942ff259f474f9d256dcd72608f96d34c80192a8614fe05dd43dbeed5fddafe00b683f0d5c5ffb872245ea8dccb8a633c5625d515cbc68ad7e1a04fdd02c7e492e7c1e6ae4b4a93032f823cbd2434a0e5b7ac0edec59f53d684801ed3a967b8b63e87e571edcef45fd19e85f9cd86c43b5d44e1bd0e8079597f3f7a332e4688e4778cf2646f9af65aa9b17dbd687c0fd6bb6d0797b00690351d224d72d54c98b913272b530cb17cd6b0639bd600d5fdb55eedeadc6a9ddbdaf43137713ff3e063a734c2ebb3d6899c9b49742759063ddbb14a15644a117a6fd9454254a0ebf173613f353be8e5fee3a4e96e11d0a16e0ec319ca24dc73f6cad22ec2be79de6cc484bc6f2d1f9512c826618ccfdc45fc4c11a31e252f45899c9edc29fc28ccf92b8f167c7724a48844cd379c08e5e083820a8ebec77666cf8b8ab0b71dba1429354e9c15810339322b5426413b6cd60c20faf2d7c697bb99e32cd078de049269475bc64158928ba9572defa8fe94434d59ba72f0508cff84cf8e7d8ce7a19e8e7d3647fd1dcf82288c76cb5f4e9be7b97366108a8f9153221871bdb4d76d2ef272ca1e64ce40f4a046ce9c4f5411d716faca91413c54cf5422c4ada5e5e43850799640fefd780d2e775bcd5929ad37d6724b0caeca22c67a199ba3b0b1e0eec50e15a1fe34bdd22b2f33191bb2836ba058ecb0d6d2f59e730c356525ed2d8e3c557ac6408c3e3d777d46dddca33ed8ff5d9b4cf475fb5f5fa2f848813b9eea096085c735ddc7770c3ef0c0d055c6af8b4e86e7d06cb6bbc0e5e5bd42e2e983dc4cf9ba4faf13286406be4eb20f86f9424e7bd06c8282058838f1381eec21dd03593a90104c5900737e26269de1bda39c32e7442365c1067c6d5c9306cc93a722435def9b93845769dce11ccdf057dfe55861fcbda9f56f10da79274b9efba1f8bbc59d1d3982e0f40e61887026619125f438be78392c50ccc8cbc981f63ea76f17c3ef8fc711d9327dab2a75f0756a74032908e5f752b882b0769974fb02aefbe9690b66962e4d04e9f6c3d6639fc41069dd6724edcc5b556413132211d3dae48acbfab750c5792065b42e1b6351abbc5c876f74b24d64e5402d80f4370500aeff2a0f471632d0d4c82162473bee993785095857c6e215b9892fd43c0b50743b75630d0aa04e8bb1e800bf290ffce7fc01272f423848a5cb2582af2de71f14ee4b8a8fe34d3268978542812d5c4ac6c0c97d5fece92c38c34fc2b746dbdb3318cb887c48119bbd530a929d39773bea0d5931fc2ec7842085b0239d3607919617394abbf2ee3d545fbb6e6caea89b283ec4f970b19ad7c19793b424ee727bc25a0beab6596ab92ad5e1445fb1615a64ac7e03261ed3b17103ed9b322c504e6de2f22c16f4a1c0aa69831d95ce8b39b40f3131f38c3ddeec5cd4ec5e546f60a3ebcf54d6abeebaf893bf07f27b384b38c4fde5acf52370ddea71b40c6348fd1a4e6d62d94b78c692c97d27c0e49bdbb4e424bd3889cee5162a585b9a66af384063ede05bbfd7367ad58cc7080c184170f94d9b2fe986ab2e57c0eeed2a7ddadd320b255c01d928fdb6b5ef8e3d968309cdf6542e7931c9b7277cf4e31db6bc260c05131b5130289ecf01e4b5b2d25b2aabc7a695fe7eb17463c3ceea53a97ddb6cbeec5160b3a399a307ecccacbfa717f1d87545b010f05739d5291481554eed14ea1248e6ffb03f713a2c837932480e426d1070b2bc2ecb7a916cdd56ec202e171091a102a95e9a76fc228d80362521e0a37c89834a08f9866ed4a8724d5e30490e5e844947f457649daddf22ca591d67efe82078b7d6f2895d79025653d677789fb28e94ad2d003b9fc19295639a0df40b01576c2c37aef7a78bc33c4ae10858a53949a1f033ca6ad5fd2944d01b4d0650f9afd81371240e15209807f61162a676f7d7024c14c96adf16f3beecfb171528ad6f96c27ec063b2b58760caa97bb6e374ab50985a42197cae872fcdaab4e66f9732cab8594f041f81d913060d11cba05537bdc564f464455ab4b144900d42b743f1b249a2495dfc106e7dfefeb807ec85599b3ef59e20304bf45c355bfc0ed8c1ea87b204611b097cf2864cbac92558859b39a64b5631483007daf562045ef7a426663cbf4255b731f662653f49ddb05f894188cd88c7b340690d22e5ef13d443f31d26191066421b4343350c26ec7b2a49b60beca6968edbf1599f7576879349802a40119ccd3be923beeff34af59aa68fe973e335aea6c8b44736366143b917c6cff9becd96d4044170b857a28c631889d114331f800b04f64e1b7fc3bc75e4c714989d6186a95a4b5b1091ee9451ef23ad96c5abb68132a41bf9cfac01869673dc23a29efa07d3f1282e2c8788e4995ead95aaf58e798bfe4705ff9284baea1ebfd81d7d9f33524aace89043c77df464e6042e9d044d8341eb542bb9adf1daf6c63943cb1d12036e1e6309e68d3142b1cbc9da68f53179b7a153b1f97da76f0bbe45346bda15272dbfca9c52119979adc4f94e842b81fa8bd1c9f590f727e3ad4185b04abbe16943d2285a826a5631210163bc93a21a43625af5f437710e6ed7ce7ff34e418e74caa69a1f26d88b4c281315490ffc02791d86e4f670e29e5d0dceed9f722132dadbfbd73ec706a301a34c1e15718d5dfe432086889756358cee6be3095bb2353ac4226e060957cc06b914f4d7e40aa68a36fb2f468dac353cc55035ae486c87919a0e84a23766c62600338e4393b621ce853957643d6b210ac60a0a06fbe576aaaf1a55f70fb2c3bd3271acf1d824f12f6a0d983823e6c44006690efb07389183347a948697021e95926905fe4d4c8b593499a49c73fda46401c12c34f96998c401453baae3e264fcb30eb9bdeaf3a9c988c97b1d8f3b55ee92dcbbbdcfb464dd6969c4e2c9b13e2841835a7aebff01d01eeac290731ad4942a36c57addb05c9ab5b140a07385790a171b90fe4994dbbe557097c57b318feccca3f47d17b87b9c44c754cf60c75166d372ea362db6af60626a039b785ab1d957222b85b31061655e259a5f1ee8f04231e9c703c2090abd9cda9b26266ad4dd2b9178dfcd7adf69017e0462cb1dd57105a18d8ec546ceaeff5845f08f7783a5d77171a3802e2755c1559f389d31ae7f9fa4ea8502eec759948d293206bc7cc6e75496013dd5030aca7527754772928ab5b30b65919299fe2f1a597abc46e0e881f150175dd5e31b07e50647105d6feb62bd0e5385f2c6a013da1063248c5a9b3c08d23d86e6510e2bc27f5a72fd94a2964ccd4e90845dd1048c3165e80a866ccf03bb2a2765cf6f8f6d8ccb8a32b9cd934bc4b541eff064638ef5ea7bb84eead205c94a510c735791a3def773604b96af0825f231568dc39fa429cb0979c1b9c8308c5db03404f1238c76d16236c490d7bf7da948f7aad74a8e2a5c8dcb20d6ebd18fec17d502558f3a27c0c99ba2302d5b4fcf7ac4f7e65a0e05dfb5e9df9536c5720da21de877cd9c3cdeb848cf6f2faeeb8e92dc3b03a5f3c6cdc60ca5e38ab4ee0c35db03778eb3890469af9827ba2bdc193b7c8c0e1ff2f8c0a7fc5c6e56348548b62cff7996774590f7b41dc85fe485fbfed4e33dc03fe8dc24f35d9bbce62c6ed28449926bd48cdbcdcfcef48f3bd87338d3a2f85ba5503c0cdb161159aec5b920368d46e1ca5da0df4c8b8e3bd0b150cb0a097df05665bbf4c9a3c7b292593d5e384d3e478900f7b92cbbf542ca78851b629de502145bcd360b0c39314c2b29e34278126c248a2322b0dd08ba34a6876cb8f72ac86511c8aff18f7759faac8e0db763f34d28e370baa64170be3fd1606966709276ecb39a7d0e5dde20554a8711b62f54891218f0114de6592577e75e006a50b7cf8cc12d3964f2f1b36aba8dc67d6ef3cf8422af3ac24ace11c70c1495101007470bb250d0d5f01a3afa09278606ba4666ab619c409d98d447926de36bec9a55fba66e73ec9805bd806f738a8d95d5c8e074fe898c965e6858647d6311e088764aff0f6ba37f5205dba464af466e1b8c8dd77d3eac8a782cd53afd71e4fb591803632b226ac940fe3596c8514870ce1cafc4aacbd6706fe3f58094df207a6185427a10489d1f84fe9854295f4073a95c5d4bcb4dab4e36103e1ad3677edc763ddd3a83f5b7e01727b189070602679aa036e159bf942719e3b38e41e9ef793aebbc03306fdb7dbb3864f1ea9d25d1993202be28b7fd6cc7b6a37c76eab8dda9c5b2a7d3a291cee84dff7425b027e765f9cc099d3a88b7633febf80d012a0306fc4365485fb02d5c1e2cb23e638957b330dc77e18e5906db0940e8071f06f3314033f71b29d82799877d9594cc8f86a28350af9e627c0c0f7467e7159d361102967421995fbc173f295220fe262431e5646aad8250af0aa639261b238573268034db4176610f67f8313eb46d6c7eca69d5ede81cb9876c7d8b64df80a0639301dfba7f90b9f755604ca20540e2ac4d85a56e09895e73231e3d099507808091d9c195bb1019812a2ac7f6ce1842a58e7b74d4788163e5c641eed2b68760f9f7f9374f9862c81655116e9835744bd750cbf6e22c1500ac2ab679ddda8d8916928141d43448ab8b509e4c548728bf93ac9aabccad1f84d2b3944b0eeb67662538d07340a401efb91c7b71cbdf7080509415109db41ddc6573a2065114e7051ce6574e6b9035ef871e6621889c2affec60acb71987630bdad0f03c4a7818501b2ec0d37d5cbe85050f5cc29170b337e2d9b251c3533b409fb1ac302162652300f6aac53997c353f7326f73f96df6f373fc1ce439be7c540dad7ef8fc89ee31fa0e815485ef2dd0c8a836f432cd7bac7c8d9548b2c1d728eac74179dbfb43bedec691776f3069305412f63abc46e6213c5dc999773bf9dddacf34f8e3ad973cba385be838cd1d1e9c27944abdd5a221949fece4efc6d1aeacb760cf2fda8a2c5c4042e13f73dedf3872a7d96f031d1f0a6e16b3e4c18705da2e86b5e7dfafe64b4a7b194d5958f914084f018740ba4412914536a9cfef1e8967d2ac8e6c08aa96c9cf2536c0694a643b2a84225322eea5d839ae310fa8e7d1ae69756593cdc47090069ad2d1dd9e5445dd5d862e29886cd376cf6d3329e032df05d7dca3bca34ccfc76a17f799b3ac74481c227352e32bd9e262f1d9cfc33e83880ba3740c908bcfa93166dfb379ad9df636eac75ba059cd1cbbfa7f4c3cb548a1761b3ea426e0ef1ce228ebd25ab3bff0b5418f10bbcb3fcbeafdddeaa645ee37eddd6936df309ec8326a99c307c6f7adbf615ccde48f6d8905a96befbfea5e52b8a2c256a4cb55957611b4498d9bd432c78208b7e2765b60367d0289a1dca02cff4fdf5b9735debfc66c077c25a91d0837c1ca1ca76fa8478898ec85eb32fe35feeb70a6b155869103a88cd7a6918eafe80b3cd57a2d53a2468b34ade672f082847170c3b295ad0422555dc01a89a9d7093d5533eb675df5ff863c30d25e99a7ddd954d0fa6cd616afd7a2f9279815a1563d8f5b7750475e74f96792b96ecdd6d2b33ba9357858b490ba2dea5dc853f9dab765367f940db689b4d7ddf3fc6afcc22c9f2d66ecfff97a89d064bade1f6ccd671b8b17fa3a4ea69a4b864cbcc08fedacf880bf69ae4b52456b62cdcf87c4e10e8b08ad3d7c79217e19d429d4e3b2a170c70251d97b03f9f7fa7940dd2d41417cdc09b58feb723d8ce44b07593c4ae2174cbd35bb24716265883652ad071d85055166bce9132a0a4f2be0b5e7fd23baf38b9ce58eb78ffc3d4901762adecffaf39e3f44b8520aa1203ff8c7bfb4192ac1f0d59d3596b97ab0868ab78a57f8d3847a138e7f759f84576d1d343c46ea6da2e7042a9b5bc3f513d2800b1d1004ca2792d126a50ef1108e1872a0acdf826fc4fd8a10bcf61f82937aefd59680c84097ae960c5ef6a0cc99a94d5f7e8076a41d1f94a2442eb5a74cb7e9ff7b669b2644563e77e5fa104be2c9558621ba500418eb0c43de8a9a15e374cb2cd7c54f80e0c96812778b126bf02189f014100c50fa4a822c6f62f4533f3f2574b4cb6de3e45abc397f36e0d2472243f8d1080e1afe3b21a5b0aa6b90ade1a41fd17d9b8425280d0b8e7e4c78e1e7432ed373ac1be25d6e37d1513aa43981e0f2c2498fede5b281cba84f3139e2dc05b0760433e74e98342368e3512ee3844646cd3a0daf4bfcefeb541fadf26c38df84a6ff370c47487e9e19b24177414fc65b5743b2fba7e9e748111eeb2ca9790b5c54bcf80a1779b2a238f5a2a49c58b6c13746ef699c1cf2998cc8082cd43ed25827a5b2f852fe51f24b48f0a1b8965d04d1d5fa6b3098a3c7cfbc9adab64628004a2dec70f2812161376420bd6a622185bccde752ab2d8e0e4b555d74250e82c7ebfb838502b764768933cf1797365ef681944a3e826a820949cbf0a00c47f34349a3deec489d9f9d51e59310a45d4040af571c9dba3beee06037c38c44fe36815c53c319e1b930817e12d78c519c84ab22d78ed43c46f7eed953ab8feed143c23f57ac0e4b5a9b2b5879e2f4b28d5baefe6afcac694a1aa7081d9a9dae01c6393dcd36cefc954014bed7b23df0ca60fe7d2716267d015a593d7910e869537959dd27eb78969438d39e1ba1bed5931042c575deea4c5504d603b97345ee481e58702f3d670948cb1d31d5d69cc1c035f1c87ab6d8fe683531d22023cb53e21c6972d24cc0d0739e993becd1a6358f9c475d5bc47512eb67d01c181c4d4727bb188d13fe743991fe8de115afb8d69f6d1edaf4c5c0c5c7242b715363f0a074b80b7912f26bfe4814d2fd97af99cbd2cd593595045deb8f718f6bcaef9ab228cc90e7454fdeaa0aab0c5745cbdd0fcef63ca90127d3788b4936446a76d2b8c98aa36194b83c62223774239ef8be0fca2e6041553e19653db70778d34045373bb380495ccce28c0764d326c5aef4c748eee80990c5ba6192dc9a98f36aa4c1ee3a2b98dad3c65adaa562f50c843651b4650a85e87e9604bd3cc23f7cd10f57c42bf93ee4a8f426f6eb5a14a501ab4a3b098cf660b45bf4d462a43a3cf6ad0c253f2cd921d68be12d3e9cff07062cbb7ab194cec2094241edeac2cd938adb1deffc5ffdc47a2219fa3494f4ba72e0b4a1d511c3df27a567b842163f58f87c20b950d1691fe9c78d87080d96a9ea6bfe41f6dd66f11cdeb6c2a793c3cc4527d95691352082bef7aaeb0d506160360b752b51142e4c998004facb6e2d2452f0720e53d845a19457bedc55898257d968c79dfc26bb92753d6b97b00bf3092dc6084eb21f14d9be3e63e463ebf8e796a35351e40a1fb78f5c293dc1f1fd2a9f6dd6feb89599a87b75132d710bc0f0a5b8ba67a46bab68792e7116daf71b998640646db035ad0439cbb9bd655d32c1ff6410f6677616004cf2210595ec378e1da5692c269cda4dfc526d7e1dcb86b41171e645a8afac5d426ebdfbf51daa4763a88511bcd7e9685dec242d74cc605b0cfe91c7e6d9a6febb9363c2210394a91fe00c3f80c555f220c17cc8f02d32377a549ab1c681c4a6e174d5882c1f2987eebdfc5d8ddc8f6dcfb717ae348d65b74b2888a3d2617b571c7d76c9dd356920fdf6e4c224495ce4af94e281e97c348c6d1f577b2c421c43076ce1a74a4738806e8260b7e7a89b36ccc08d6eafe8366f72811c181b6a25e3bf451e62c91c38c76c9ec01e5679b3bd2a7208858acec8c4088194a173b8baef985600a8c2897c7e3c278d928c5b83816bc445d11b6c1bd50dab7f5fe2ff641d2bb9dc3afa908e9ce4bf79b350feade7fbaa57f5266898b25bdb07a45f7db944b4991c9c8f4713de165e29a9f3a55eb2310ff4c4e8d912f48d443fad61ba1fe98950c2ff70fe5df9fce3e201866848204b82c0cd66edd55567bd4fe005833cc031c7177f40413bd244ab8a1c504311fced16879a679bfeadf7c9c66dbcb36cdce6e0c96ae1ca2479fc5341ad573b6e2a507957823ac4ab802e1f05e441c8e08c58fb2c28e1834c2819d1725adda5b3c89318d7c02a56be52d6e68c92b41e42be0405d84d4dc005f990a271e108c312d9c471544769f222a3b202b1c4280a36368fe5a71a0fbe3e657f4680f57d7e6657f6d5a5fcd8a1e7252e61615f094f93e286651d701cbcc9f3592ddb224edca30d8d5edbc078b9e0bc74d2017c55e0fe0820c65757c9c354ccf8694e482f893e7212560f0e05979c790e529cfa8f99dc130b5ab5a473a4c63bd2ee48543d2f47f42b0172b30e0efaa476944e77e48e00ba7cace9cb0157f87b81ec423973b575c00b456fe8c7ae9a697707c582617bcc6f0952bff897c271fbeffe2c847bac245f04abd7d3c4f046204d8a289b1cdc4fb999eace1bb37d67c86e6f14aa66b83abcc2ba2b5940e738847056709193871be21eb79f5b1953c0d1eb86d70f3e3af5c4e9072a44d0a0cc2141904b28d6cd2d918806a8c7be4feb497ed85eafa4b7096b75df9626b083490a1d31e8693979d7b11e1b02e3879eddf80601cc71d3aafc2d84b9147e907b2508b8ce41bfcd9c530deaf3c279bdca856ec059462fa2f4becbec50636dcedf43fe9fde2be14754417f484683d9a17dbf71ba7d19317544281985425fd66579b8b612dbc3162a25b7d61d0501593ec4d97540a9a6961abf310b326c87f5015d3927982b78ccf9995b8caab2341992214ca63b86bcb45c18ebc1f908df9af91846be247443830f79b91ab1141d40ae9457e713e9b0bb9ab1221885b1a2512d8f4d933a40b309cb59eede1f9d2eba50f55aa69dbe0fe4fdf357a4aa4b9c982110d845aa0443a265821b1c48d2f5f05c713cb4e2519bba62f24729011eb36d2f16f8727eddd38e9d06e730816c6e78612ea3798f3ce00c385d2dd6cec07b6032f4b2cb5357c9cce21452f5949dbc534853297aee87eda9f726f3b18636e6a21987e8b34ff900b816af4901e5ba143b151e43df0b068239655858f9d452b2f18e4bb5310f5946aab435e2cb4188a4789bb192ffd52a809b5276a22de2926c14e80a78507d979de7948e100f51629505bbbec7e09aca01e515444db3ebcedb867bcc81711f8357e657ae1e50faa08a32ca05175899c0f8e24a4a553223a7554e1d15a502cd11d5e5104fb47f3cd744e6fdd1f7209bfdfed47e9cada898e8ade4ff809663a199d9d237c42894f76a4c4e67a5068617496a42aa68379843c94336d57e6ce75771ef7ce59941a195d42585ead39f644a0d38c6aad7e967c21f1fb9caea51ee99a8b25c2d775a47f74a6a96b39ccb020b338cfe4f63411d1e2ab7440487c41ee3c378fcaee706a564c06b743885c338d29dd4408c458005d79677cf7da815f44e735505729d58c0b1bc2a8bc0850860e22f5c1a748c921889f760d9e16d70b9ca565f311ed0c95476dd4e65573e75383d469c12bfccadb94a90dc802add2d4b46f734d20b288f030bf7f8adf365f8d35bd5e774de9d296dbc623102ef62ff7c28620ed2670289dd9e061dfd08d03b6b20a48050a7fa7b89ccba4dba6685cde2d0fb8da6e462ec5317cba6446e1b1f07e89f9a8d59bce8385472f0f423b639817dc7b0de74c034423989dd9c4efe7189a214429cbcb29b0f280a17c6e3850081020e1fe3ae8e528dd614d77d4452d1729e7ee123fd9bad9a5fad1845ffb26e2e35dd6c84a18f34bea3ac784f8967776f147017a677ab2c7a329a56ba132e2158081fc49e0a93ec6e1dcf913b4c99f1e9a142f7a5a1d519dfcdfbadcefa90d37623723717ad16c906a7ef5e9a9d1d449868dff822801529c53518b9cc850124e7724ea1980d9a01ba51fc4af1d712f92ec9f886ee686bd576e2fa8fc78947793d3c7362b37c5e2b957556c1d2e5c59f699fae882474c3c00b573ca4426321565e24cb7f964411ead90ae28c2da3b5ba761f3b7bb452e38802e28555c8cf7f9d5f61dc66b76447f6032217282461c71edb8aeee946e7f03b14f76ef8848e9e96b080f0497815973264d883dd7d0b546cb3026b9a62433a2c6543bc675ae0ffbb6b5a28160f6f8df39c47ca4e553d3314a81e6161a508c293f4002fde71330572bdde7f7050b48403cf7e39f23acc92fa2d8591df3dd8ea5e31afcc02f540cf8f00220a7b6ddf50e90146752b318e3ec7f89dc18cba0fe21912ca2fe80281939e07932919deb7c39212758ee6c101982ff259cb198d0f49f5a783be01eb923fbd7480aad22a823db5f437c1f16983b9ff17f6ce24804bcc85e3b22c2cf1371aad4ba110ad77662094724f6123b1ff37054039083c0a6148d76b18910861309d720d6019c0c819c7038ec2d6340115974e3f77613acd324d071bba5b99f7f421a05cc0651367505b2c0b2b578e995a55d0a975b9cf12023b12187c9a0d648ae331b71dd0f35ef1d35e064f22ca2f39958022cd48168c29f913bf1fab4aa77939f85ed2edc839d2b4567014a96d014cbc757f3554fc9238f4c1e4ff5845a8ddf62ba90b2b4b2375157f668f902b8010e70e8f901d4ebd1e7909a6eea20fb44b8824759eb58cabde98b3963d473907e4b8726807a7898d7111aa7dda2af5f3307a40aabab40b844237e75abab86dfc14547a12d56ebca5cd5f6fd8622ac8e54a4aefacc3b687a8557c413202f28645843b167a20813e26bc7ea325addd40174e555200adf8f2fbac52705163228253f4b964e16aff02ac6d8d455b9f51b53d6927225fa7daa60481e258724fbdff61f67877ac8b0cdba2dfb2bfdb88bbf3b420b4e890e375e5db0a9fc3d1f65a265ccee4d2c0306688c3d8e5f061a3b01dc97ef55224ce3988589cbfdbef154e97820b03074ca0ce4acac949f93fa07bcdc600760aa184163464f74ea1137c581f38c72238927d84c54c94ece6a6c45785168ee06aadfb8158743645f2a030efec0d922a33f4934559093c9d72274d3a8926b55faf00a065ce5ba806265db50c04a9a6143265e9cebf340ad748f2b0abaf6ce24f892ccc94fd704a709cea8ef315cbfbd5cd8099c243f8df37a4d8f31a1a5367966115272a10d59cabfc86250f52f67ada7a81fbffff641f5f4f11d241537c883eb74487531262200f65e535d1f67eb1e10724ba912eeabdac72099906548225acfc487ec23b15aead4635bd0b637aaf32395d37b35148716443a4207067a0f05273bcf1a862b7aab343afc71c3470468c63ccc0a36332f09052e4817b19ab9646d754489c3110ffd89efd31518f41bafa19a885cec6e46a9e7206685af7e10c194d331a72304c2c8c2af57ab98b8732ac11b969f5402246afdc1f02398add69f6af78c1f7289ca64ce8a4914cc131276a7ef6487b31d540b181c7792a818ce0d1cb28fa7163f4c174d95efaa7944f7d99bcbc6301ec22af3a97e591b27ea57c400b9e52cd5c97ecd17276ccc5fa8e6c34bc138f7a39ec9689329107cbe28ea10e472b5629ff64f4d419e336c243738853a5e2ccf04542c44ad5ec1d8c6d25768e227665962f79443df59700e6594bef287a2b5a8d9b8fcc81a2dc1effa849053f88d9e0f2e8b5dc7fd6edb45dcd244f72e67253eb28f93cdccde4312c19ef9828e60b5b07239e53718dccdd3d927afc02bd3c8df25bbe093c75e976d83cec258374219979e548646fe8c351e1f23c798c7c8ddfa73b31e014861b1ad11d65c650cc365cfba56d883fa653cc8a9de1398271c0fccdaec0e5ec96fca8025e9d6229b1fb8023b924f63c200fbd674248bb6220c2bc85b57730d99b7fc162cc3909d64820b5103595b846544682c0d1a6b5af8cf4c9e5c94b96d5bd99abbb9bf100af4dc27d9b10162d2df63100dc66a4a738a1deb8a6dcfa9ab51d572c0f09038abb6046a5b9e6e44994fbd0e8132d8d4a34590b4a779be218311bc20ed2f8e88f1b5a37167ab3227a6f6534d31c38a8d2ece643f369cd96c4204b441afc8d2ce1d6b99431a5c5b303dea3fecd2cc0a63c44c2b5b6ab0181034827331a4b90022b63248e6d8921cb10d76f40180dc8c3e324456de1eaf7c347be60a594c44175f160c087c4f764005427bd4a867dafe05a7f2dade6125f79baec185226bd5b1391afce0b05c0ee5dd33935d519e88fc70ea1fd5cb02788a23aa56aa218397f2d90f6d196c20e826c4c1280ea6e80b9d680e0cca44ebd19776382c177cc3b0d307e1a3fc83b7be4ddc17f18e6693b687cb571ffa13e794ed2b8a1c6d9bf073cc3d495f254c972a47eabf55fc7f8c74965e759f2eae6fb8389d6ba13d39c11ca580bec16ee69790b1dd8416839cdfa9acfd8693d08dc3c93ce338c109c68d8828951ccb6242de9cb1f393a6b76c366c731160a160aa71649b1e0956cded10957568274eb216375b53b0d166442962399000e7439d174f3375cbfa1cefcb6a61101239cf089cfdd9f4924408a6051d9d17ca85e401fd4c705fda227bdb434f418c9ee49a0d4d2108fc091c1a5252f0003dcd5dea3b966362907a9092bb2b157ad7cddd0c8c6e84e051bb3999791ce16336b590386ac5e12aa0170171abe20a17446ce87e7935d98b5a765a96333df5953fcdf40949d137ef0048e4be3a9ea64a7853ba1867d33a1081edde7fda3883900e0818cbe3612dbd8cd32580072e6848cfb3ab612671d278853f41e66d1d2c99f2735c2f4603e3899aca9b8666571dad4a32d97b990574f836f691cb24eae1c243917f29c223df81b14085e8c6b0433d425055b75445d7cca7361a19bb443700f739bc71f3d6f4c098e4bc540709e7032c46f58128c7d45efa5969661f8569bce411005effd414e3266cacb993feee4ba716d47f6a2adf2ccd037ec6967fc490f578318886b8424b6a1f5ecf6ec89d665a211ddbf5fcfbd22671a3fe93b5ed8368b3c33674e18c539e27fcb22739f560626471b4b4662a14230d217541d1d9140ded1f7e0929c995176bed1951304a7f8079a0d99e1f1a3d90f3cbff095beaede4c9e4b41104409c5b5a69430fb71fba251c41451c64ff5b375b733b81dad07b27a8bb662ab8f7e18f37cb8031a939893c4c61ae70a73017753f8d1bfeaf9024ad9614f8c187006f9cde189dfee4395c7db924b3526bce99076b3791d6dad90bbf9f4cdb18af22dbb92e50dd5a7016b1b66a9eb798a0fea4c3764a9cf362000ac48513ba71a8c8332f88cc19471fbe388938d16d7bbd51775ae3a496704d0cff2842651ecc1ab2dd2e68f6d5abcdd8514864271b1d108258d5d36e850a1f7076cfe26b927ecced3de03ebb93f44c6c0d31bc2a46991dc2cfeacb0a77d540f28f2bfe62ac2ec2145dadf2d2d3d1d6b81f18e45c432516e8733244221e8b69edc5ac73aa9912183631e9f0212922e3ac94cbdcdcab94b1b3789f1bc2217a4038c91b6c04e9f33474bf2baea86d741d9d6aab4a5494ef92adf2764ce752035c12b263ef5956f62a2e3a8d8080501bb00d57da710adeb97d87a38ba0bdda5fd7fe3db9252e878a8a1a57618467949d06f330744555ae387a642bd0d607ca6e720c1d4c0e812a9bbd3b87327a5efa2000f1e9172ff89eeeccef140f37ac0e457b4ddaff0003203a9609071721b9d4e09097c44f3c2852789d24858185d7297e219bf24074c304e402226107c90037f289e0b2ea8f2dd601ff0b550fcc0976dccf806275a78353f248e2c58b81f380ef62d809f3106ef2e5cdafe02e33bba87a961652a018459684e409c35e8889f80fa18b401dfd488745996104df9c7ad3403a85cc80bd6bd005ffd9c5ad4c1d0a0e0452d33bc638fbc47e85ca50322f081c3f1f7a03e7273c2e6a2bb063c37c81e2874e12bf56436fbb65f2ef191667f99841b2a9a92bc42b108a6c0cb623f8268be58bd812674677380650f5fa1c164f17056c2801561b460ce6de2cc698656dd3a0e89496da816e87cd4e4555e63bc8a5dc92ee055a6e448c2c3f8eb09e8ce313daeb048352ef8683989712c41d07470892fbab5b9081f9bfe5a45fcd13891eea50614a66d6c215ad7f3bd19eca4c74643b8a51717320bbebb371600810ec5b08d4b89f423b8e97e7262ce301a5af8162638b85f9d907b896dee083a268a74b9d9735ecccde38dd47d0c49c50e83480844d0b61f24701e6f2cd0fdfe89dc93d5d862ce57ff3546660f1584b04bffb479d7758d60f8754115eb8f4a3bfd3185f2ad171d1034df6ac0b1d7302472ef14cceecf695349e260c81bb24f8b152a404d465103150dcd1045401ad8527d8e5972b0b6f85fd06c562986a99f937fb5d56ffc882c24ab32f0f29f158337e4987a48ec63c84326eb395cec9bc3d58fd9b98c7d3264f312939e3392a57f69a32c229dfeb294016a0bdc3565f6c6b9a9458d42a1b804de4be47442683683b847306b4f34280fe9de11ccabd932e469706a95aefa637576d261ebbb9104553b889cd85e42ba3603ed8aa4b3cf6af1afc3b24f3532323a6b7d14358c71f37fe4e05c50b1fd234beaa2376730a1f016e98bb2c90cf311322c34fbf726bdc477fd828892f7ba1ca645a609eb38e864634d951e91349348beeaa6be9631a67de5310581e1338deb1ac774712f3c5245a8566db7a68cb2cc498fb6ff5885d691bd1a7b75c4443a71ed5f431259ef265ed247ea26cbd5ad15848a5fd8bdbfb4d281480d1ab2b61d28e038540ca782de918dc458738ddaf872678a701455e65840ee3a6af9f572e96efcc8a266d6487d4ac97cadc5e3399ca6eed21407995664d00c81d3964e9bf9fac847addc42044289282bb007eb80d9a2b130ff61388bd83c9b3375071a5572d91bc87cb42c22c09eb10326e4ff75940f4c7516e7c14cb5802ff402420896e39f86d812712fec3d3bba48db9a3e3eb8e3755190bfd71883c3d16f019f83119741edfa9848649dcc8949d8b5fe20ab07f644f43694018553633d5423af3b04155fe51c0678e2c1582b132d5c768ec395b2a66d453d9cc309967686a5195c0f556c8905a3c6a97fbaabef0884f83f73d7daff6e0d1ec2998b4486a0d514bcd2ef5169b532a3a3b2da5e840f6996b43a73d71026db9a50b9760859e870888c29c83555b7ba6131b3b662fdc161054ffdd6f74def5b0db0fcd1ee87741cc763555be62da2bb6b97052b777d9ff4cb8ce8c8a80202c9cbccd3723cf320effafc1d6a2a5e511e2ced7a2b7d2cb33181632f011062a48689885389ccdad2617e56020c4deec4853c04c72a1c792b7b004b13065ae66fdfe8ea4b9c38761ba9d9ef17b31377ff5e099ad5d75cc33851a2c8f35ed6a0c21e7ab290dde0cc19c3230e185e4600f942a13b3e551ead5df8e990ad3522667715d1cd9110168db9dc4b328d5dad189eaaf3d9c1baf78b6d697c88a90940026b6607bf38203a9b5a05d3dfca6ec6e019f3e65ad581d4776e03fbf2b0199b983a5f0b9c8fd315fb9e9f2783a8fcdf8ace0a775028b67f8c86d5929b2796f4fa66bf1680841ab86bd154d19db34836f09cca57831c3ddd50420e3836035f399ea2b56aa1e3fa273d038a3abc6767f1a378032928824831f8aeb086b1acd902495d2ecef49e4348d87bc369e5e039c4d9278373b5dacbd2180ca0c0c0acf3a90e2f837cf643ac24e8fe1ee5c768c010e7c7133ac16ba0baeed80deaee1ef098775f1c403a5c7da2366cf89612fa0774a62dae2562ac37289ebc276684f2d16fcf996b2bfc478c97995a318fe409bda5ec846bf2c84cbefcf65c49c8bbb56ebb260e82f0f612a5a055668757f4faf09737b924debebc101c589bce5a3132ae4fc00a122e1b34c76b8eb48727f701144e86e757b8427065831b028477fd1c56619420f48b82e4831215bf85345a0c923a4da666f1073a5d67d46e647f8f32db49f4ec1778c337638c002ed939203576ce687d75aeb330d5be2050ccc97e148374d5081079aa327c4a2e4ee2ba7ea4b6221e0f4eb457d0a276b23d85ba3957514d4cf0cd5617ac1d9ae69466e856b4bd7d015716963cda2adc4acea077b2b03f218b47058d956b819cfe973d1b175711a7d294ef61d121ef247aa0b40625df75fe16a1a4c2dfd8bc0e0b4df10fb94b65ab8d45d823d6c3e6a6242b6f58dedf55d8c3f8fc3e273f9356676a88b90465238e26b0e3e6d924ad9d321fa5ab71f6108af84b0754d283efd2601f2b88fe298d0c8cbfbd7452673cd8f52087076456a961d14ce9ce591d53ec1ca7f7b4f40e3af56356a6e76d13d60080faba21cd3a71550285936342e0f1751635fe07691ce483c158573fac1cf40e25e2c8991b26efa91602a59d1939eba691cee6a933399afa6fac33048577ee04d6bac9db4fadfa665b767cad2c7e81640e6c50f3ff34aed08f8fa4ece4794efe7c4b33165f6d1bf963c0a6168ae00c97bc650273de01b59de305cf96c05c6928afe9e8c792300b34648fe0005acf729b2f87d165d36c332862de72e0e35dfd2bb25cae50e3881750e01476d47f304cbcc86617b797032df43418e5a021728d3d901d19a3b667b8e6bd4866be0b3fda62714c8f2a020db57c788e629a01f73a7a08abaaf647944c388f56c5dda6bf0f79321c1f37a294d18fc7811f56471a1772f1dded9be864fd68e9461cdc8365a76f0b36c88be610739e9e771d2ad2fdf739bc7b365533c1149dfa04778c95680e472c6c8f7bdcb7d3f66f99b8736649d1333fc900b54d97be49e20e60ec04b347599291c9ab1b368e81951df2c90305d9884583dc62ba2fe6baaeb1737bc1e5078c3f9d791a0a54b363167fff2867610d02e3aad11c4aca083fa70330f7130a78d8fbf6249227694d800e36cabbdc81bca98a3edf509c16962cf3eab5d61fdd0ac12d04f7ae7780452ca7965ce2265fe22e4f193b9b6dccddd4d1d54cb2a306e8e6c9638d5c0815aef8ffa7e35517f457468d185a15fbea479d18e2abde81e11719d2373d2b1d8db21ac962eca23daef11fa67c3cefc0f3080c3452bf250af666695f3d296584bbd538932bb5562e22832934e7f6cbcfe37f25786e5c2ea502b2dc949751de12f36b4006973994c5ac56b4da3d85122266257ae780737741dcb8ff48968ee5344999ad10173b4c7ef8210d225b68bb3085fc02c82db97a1447eff4e38467a570a32a8fe0903323f49ebe109181baa8f5af36526229340158626e690a57b78264dbf0a8c3f7d80e2019ecaf30c32c293034e54413f043f3a0fb757ca066137c0546e5c7f0dd637f4a0cc3e50533162e5d3f0dcfed610a08661cef22ab7685c76bc1d2ea00a8f49f446dddfe312bce7a7cbc99ee2d8493b9001e7db6fc77e63e898484d65b3266b1772de26bfa67e262c249483eabf90b8ad4cfb3f241136c7f9414d1f1aad5bc533a89b09b4445cb9b62022e4d6d0f1ce81c2c90797c845b5307222ccc5626a6495c5432187e4bae143bacace7a786bb8f48bbbd0a02cacffccf526ec91bb07d55b81e9bc4f8fd2999b42f532c2741c124b2bfc2db2d67609ce6e2ed611b7e0c514da7113f01b1e72a44574ef6132b6b32bc13663f2cddf2b3518e1e1bc0bce5ce796f960442ebc0cf7bf7062ca9b7a89e7923c357d28744d426f7ea90ae2b452f203ce9f74bad2e82e6856075edb670b48b45627305a7a17d0bcb26edd541d62ce138e69e02436caaee1e3803650456c52681614248e0f473c665f94d0c6aa6d492e68f9fa6fca02193c4f19af42af0410c8d5084cf65b81340e7965a7d5b1a6984a742bbb6e69895fce9504033af84d9eeea882622d81ea168639f648caaeefde06266dfbf6b229c55fb7bccf3669035e75ae10f39d5a3c4532149f83dad14c81db11245ecc1cc53029858f56ae794c398bc1ba7874ea85185b1c87991267487d54a5477232d1a5a8beee7fb209d7c1da002bc431042e728355b19b064e5929d2f74a7838a196071931ce14925f6b980943004bd21125c6432c699865c927ee4ea78e464e63338b86e995358af6c20f3959be371c713ce5a8b7e9b3f1db2c368134aa18205a567f1a927a3917e75cfc19d8337fe8e9ae60ca5fb2eaafbd4e099f5cd6d9b1a450e024371f184242a0ea8f2cf7e1779ec27915bbd1c135f01b8e9e75b82f40c6095b481e1479e033096ddc965ee36ac15807178390333333c010f6ad99d5ef6837f54de5ab3690c631f067609d0927d97179c890cca637ab43558b602b1958e7ea9887e682e7007a62d6d3211644bb75bc2fec9d4bb1a85edca0a6b3ffc8fc716a9eb1e7f6484a4f9d8a9acbcf2b970463a40e45254413f2b0a4b2ca3a7810a1f4f33581b5f6ecbeb2a4697206643940c5f739865087b07f1aed71be3d41e01d269cdd9d46b27c833096e730950eb5138a6fad9076b59bdca314540091c64a36ebf39423bd0eb6b485fcb91380b984220f2dbd78d7992a770a01e10d1fa730b840efa917e8b20cf33d09b06186857db8384fa20ee207676c05bb2d357cdedba547e9389c68e70a3c89fb8f8f60843d0b03af74163649f1bb23836dc703bfa8fa7dd9e65ab6eb89b40bedde46b7a5ce0d0d356f579f1b936652a7c4f9d804622d31a21a2ea814d78cbbb7d62dd5763ddd2c3b09a7079c68e79d358c8204acfb4a1f11a8b95973fb645420f630aa23ef2d87884194a68333944e78e96816bc580a3b3bd50d92ed2dd2cb62cfc0e1b9f9dcb7a9c4fbb70cd1031749869e964708b83aba55352b52c5670a6fee083be2951642ec07c7d2e4f01726977d3f80c11603233e1c58f26692c13d83600dfb654bd2a31642760d8d9962ca896fd2bc8f45f6470f472b565520ed6e8a16b89aad87e49892c664891e3c06022c4c1c0ee394822998dcd1d107eb9d95e6bdf5eb0161433aebe043253e508fbb142290038bbe99f13f368bdcb8a9b9f0c5b07c053bdaba4efc69dae24a957ef38fc245ad6324137b3049a8dae95cc5d0949db5f7ef8f33e9fce9f802deaf6de1adbca4c1e2f664c8fca59161891efd504fa03e48b99091a194a54f26fbeda6ae530ab21c9595e554a73a13acdc817132ef6bb9199abd47a175b37ffc4f1535a28754afef2787f00e8c3e2ca4766d0faa2e5e1986df6680d2420830c98daa735bcfb3d398182a90d83c66b9ec78d59daeef0de89d709155f2c7eda1394e7715f97a6f4c4d4f0fc3b3a39004462f33ddf84e34334a1e8c0afd358bb3831a36acb41fcf23c29317b3f4f9d6de82baf566ee5a7d174772911002a1d8f3a77c64614077c7345f1d75559a7fce8ddadf17a8e702860bf896e017b82a8fa48e981a8838e733f0d6b6eb5d69c84a905b9549567175dcc2fc295ca9531363b6dc373c50c119b5316c1a54420e0beec3f8f716d15dfb7f13341eefae4a953a4e35bbbe06bcb2d46ec08b045fe1dd3c934317b4b88c9593084cfe8fd007a9518bb997947b808d98cd07d58d137f311f15244ce883ab4a2fabbaa98c0f92c926559287120bbab20a365ddccde73acf3e2e8862807663596867b15b3b76128f19f18620c0ac1b4a64a6b0625c2a7eefc7d15299d9455a53c63571c3be6eada1e8daada433fe4e3de66c72c7b45bfc79f5d0c3490dd821774e1719d8d14a93c6b505286756ae7c1ea77ea10305a3b587f31b4ca2e581340d5acec492a755b6217344652e1aead83cef149d1cfabb5897b879b72adb325dd83a490ce57bc816b5d153e45ee7c1ab0b2705557ded19075c8db88def4ac703e1188224b284c1e01e0035d17dc54de0dbb72ef6a8e378f0ba172075353321df7cf0b5fc9f1a52e5d837518c6c8a3ab67360f5ee67b8304849a84318fbcd5c18b239ffb04f4d3784c1125c5fea7b6570ecd801e1a3b2e1f21dddf757998a5c20828e3670f7e7da7b29d8e4e3a97a16f19c18f9a5ab5bf73b53614512d6eb3e7f5408d8c76e98feaa31524d78a5db62e145fef5b1d022852877ad1559c69160270623e895a00437927ecf426c37f68dc7a2581ce6f69d67594622a63d6090c29cab2711fc86a74e33e88a3c18ed8ccbf38b2d85df78fa0b300b864fe4c7828470aa8c79fa75f26cc1aab596a6dc9ca1bf9703f8a2c3f70a8d6e434345e90c34d48b953d800d0c46186775087a251cab97559f80e0cd23b96716192ba637c05eb367714d00fa30fb99682eccf8b7b321b5ccd0de4feb0efbd210429533d09d4408e1aef8233cffa364a008f6e3f5b1e38f44a8158d4b5271d6ea6cc3962134a006a45203f5851af6fe7574b65eda073ed0d81ed1056d40152dd5add08b455a1163999479349cf96c525cc31745a3031a396608dad1705bcfa180763d09ada56f70afbde85178b6ebdcbc3c671443025e5048529b850dc9897a016b62cf6cb3fd469356be5d1aacf19bae6ab1b31a822cb56709348fd37e0bdc3b5aef192054c2ed02b92ce67118e0bc0fc12710575b66a2654e6f60f685b405c8864715b4be4a3642781fbfa1afd988d403623b888524b3a4da640829e7ac0a04b72fd6e84c3adbed43e2cc410180c84181107bb0ba402397cd1936e83c21fcd34aac930a1722ed57061e311e76da785e7b58e3d386837d09cfc3217e0c0cdbb34a38940cbca7dfcc647c70f0b0768337bdc420eb81990b77f860096e8cd03be86ad3d415e313fcc2d4ba04bc1c1432c65477073cfd8ee4bb4f6b4fb17c8d8d30152ef6e6f748c192fd5cd1897b9fa8272a50ff5324f1e4f5b6335f7a62c83b0fc83ba4b46c64f4c60a0a4d112cf19a6b9b61054aebe5df7bd55aec9e8f335c9fd7d5e78825e076e539f62dfd9f4f44ba1b57abfa102439e3e44bdc9cd23f653caedb13f7084286024ce17ed70422d48fbe3b3eb9fc3c0dd3c80f392f7b03ca5a80134c83c87e89268dd7df693aabd162df03c52a76a37d18688c23297f6410813550af20d8e30e899069eb267646092b1dae089dbb39e29812e2296108867485b76670b95ed2b0480b927fc405e2eee5846641f0700c9f90158a4efc649ee942d3b5074eacedd50f30caaaf04d213fbd74dc8a288f37070fae2582a13e323a34b82cc18ca69d1a6c8764680b86f01cc131c49af76d3cfeb4ce10c03b4bd3e74d3795e61955503bd2e8eb26e96833294900302494d24c1be93028493632075bfdaa5c2a888c33c56632a16137dce41d71be9efcfba6275ac1cae45a0fc66907bf50a67c0233f1374091c2640e4ea6e0bbc82477c4c7f24da765910670caa12b766a80d9d2b4888afbc57e8a9e76fa6d7669b940bcf711b79c742d7990c0517e4825136e06b215c8537705361879bcd11cea9d4fdc7b693ea21a0bea4f8954645f4317c00ffb15f0910d6c034bc7dde8ff3b8a24cea82a143fc59afcb7aa2740e52a51777d12f5bb2623e22547851d5a9c04b6cac68efe5874678f44da461044f22975f8c40166611ff782d49a44a2eac7e2024e3a3da9270eda16f1fbb8c51d26b1f78cce3143ba5eb2aef8526ae803e1369cadca9c47cd96afe6ecf2d475c174fe9d9d96d39275dbea8416d0dd6064417d0bc6af456dfa39e1f9023635c9f3fad8179ddf7079da9872673af7c2f78a4dbdcfc190e2bf8e54c2af739183d78d88c362b2d723efe2da96b5b0f03e4611b7633250150d23c91694d0745d27eeaa3bfa25cdeeac4bfc5fddc7a18c6ad8f663890f85ff96af3496d67adf508e9cb7eac42fc5e1874e6f266eafebe9e8c212a9099e38d88d41554e5ccd4e040ef8dffe3babd27a37028c7b7f12f13b6e1ddbb94bbed2621a6e34c5b614d2b67ad0587e289a59b0a388dd493688b7f1ef8a9891269520164156f2c72ecaac6168ea81a8ecdf7802eaa5bd37aa4451acd3abd295ad4bf4941abfd44cb08946ae3b947a0964b4cee5c3067cb06b45d97a327a6be1ca57d20c541f633d7a24e83cd73434d71aac054c1b427b6729d8948db1cc285c47f29c8b159a2cd60f042740cd7b9182956391af03f34902943f4da44550b6471ff47cd340f5c5e34d46086969f29152e80a9a42ec726aa7903c0259a518197c6683b0bf7eccd81b49c59f96479dc665566ec9e7765f25f0b3ca339af7557f64c035269fd61538000c1c3b98504707c5933a7d24e0567e746c34d746b356fb90005739122851510212820281b5eb32e4f63d64b73572c6f765cb3ae16ec6d62d3bd838d67d4728b20601b5dfd92f25ddd11c132ef6aee4d02bb295975f03d0e6a0b6b2a5797cdc56a0bdd1140424109b6e5d01df95fd3702f46aeb3b9dfdbe5f92fc068f298847ce1265533885d521aee0d93e1c8419eee004f2fafbc25264f9465217d4432b3dbd5fbe15dbe227234b6db423444e3f21f6a6127111b31ae4250996e094951ba3ba63e9cba147170932fdf3421fefe321453b04d8593bdfbc88d7f02867115ca1b9899657cf58150ff1ce087d9870aa232924b58c543c9ed678df3bf08fd127b527e3d787670dd8cc02833a1609e0a9ef52999d769a4ab7a3ed1e6f8fbdc206aa73fbd79b4e245692b5085591d9db1c5d7eba21de0b398600609248cd1c6f6d8f5cad8a9ee76c8a1f10675ab4ad29ae7d66ee99ce0b388f62e8f8f7d396899aa7c98227063efddd808a72e31d41aad863f0e0bc58566752293c9382527f21101fe385a83e9e8375ddd27adab4155db1816a13fdebcc072f0f7fec75f1ec7525206ea216e3fba82d02f83fbaf9cf9b5bc992356a271017e261db1a6ea5d98a34ffc02460bcf012cafde18ed9cbd50979223a782e46b85d6ccec76523b958be41193d298eae1a468cd08cda024121723976c57747a29df3f6232a72cad489c38c616c4ea8e14c925b96129a7b37a96c49923da38558e9e1ac7ae9cd1a3e2078ca5f6de052818fbab92f9098bf732abac9c324889b7c5dcd11a18895e63fa81695848b055f07a96d55e68e378399317b71b5dc11b3a1c1ade4adb7262cffc135ac95aef223f137b9765ffcacf6bcfd53bc97d71317e3cbf32b7d790c205d6f2b260dd28832ff9cd2bb6402a32563f855468d2b3a47c193caf70b8a482d42d20aed8457130a5cad29660d19c18b6e0c490e2844cbe52e7d240d399c8d33046f348410dbba413fa279eb0d1783edf618feeaa345eb5adbd0b5be6ef0e57b50c73ab8efd57a9fbb9742415453748a3df23726959ecae96cf2adfa5103011ecf6a86b8fff9f4fdc3949a4780ce5ed3d494c2ae26feae73d64dc6ece5b9f9f2467e259079f3f4c6ebbdf34bd4ce8f05f46cd37632afaca24520041262912e853f7178d554f1a45e4781ee5288442b41054d08edce196e84254ed28d1cce2059456b6b37e957afef54dead21147fd9747ebcae0cd67eb489e9fcea1b7dd8ebcce868aa53bd2d537bcdfe04e3a44e7b0fd2238f8ba9f8abe407e92039afb629fcd9b12febdff86e30a421baefee742c5f1501195cb119f308f170734c289eb53ba3e90f4833cac185ae8ab7cbcf6524a474dc7ce5edad00543b8bbaf39cbba57c849f58dbd2ded4df1d654e18a0b48000381810ef4f0ea0eb8cd8ca22116325e1a1949919c40feed536465cc4a5978652125a339ccbe7c24268946eeb89ab1b81c49694d677f5377758d3bec12434b77d14c1b15feebc282570df19b8b695f10d7d08eaad965bf758000386fea89deec8d6a9512f2e301dda5430c8ef3b870cb8f10ef8385c346e39c150cd9fdca784d300e8f24be00d14abc1d87013f8e52a01bf1aa48d04a73699b20d966ba0c811ef385b07541c83863852aa4c8f0a7d503625da68fb73e80151cb5b0563b989bdf57462e490b0df65f7c824f2499a459318858a6e3496c06d6d1c85625014155719b7795374f3b4ca6a5538c2543aa109294b58cbe56d60cdf9fb01f30ee4c34fd33fe5aa9effd131827b22decfa9f990c31e17a9b820ac04a5571a24725016aa560065d38352821528b8166ec7f227425c53f976071e2d3361694732085011061559e6b7ba83cb2f75cf0ed3a350a1cdac30afa37f3f3954523f64401ae6bb1677ae0bb7ca8385eea88d6fac24b5051ee77b1102f76b8a2cc1f32b7a1d98edc2220cea680365518f27e1a4619ee57474cb6926668b972982830655637f0ef7f8577cd6e48f5b1c57e3291acc36cd5cb90656014e4d04ad92abdefffbbd98c3241c1366b156f5afc2f03cb2e2f24d06df76bd8ad2366497e1403a543e56b61ab71d4388ce7fd59c10914b216362f54020dbc14d3f1b79e39623d14bf6a9f82071fac55278895ce8c889ecab0ac974c42b42779645caf78ff7321e301496d1df70873b38a9969eb4b2f3b452c245776b7c539c29c78bc3889e263ced0a27fd1720960b64f0fea2d6fa4576c5f8c53840e8f5c84b6915bbeb31ba35ff3bef936959ba825066ebbfc7d55787dbf0d2648441c0e53ab13743c2773a1803616a9729d14834c988ab4d68b88ed5ba8bba1b2ecdac010001054076d9e427d0227128f2b00e2b33fd79c458c8df71644fd032c3ab3481bdd1c38daf7e87786e04566f6a9616dd9e897f49d00577bd79c5a5b41dbec0b844acb8984d7b0ba1d058459ca27a2cbd6e6a2bd4096155435a568ab73229c217dd3115d7823bce3dd386ec6c6b49c1579e9d792cb496ab2eeb907bd6ec78a1e0103d3179657cfef5672c508fcce56d9ad8551d252193b8a6aa6e35d652f663b791a9ab98d8e5d4c1cff1b4fe0f16cae325b6d599bbf6924b2283a8a0720510db76d77853575a034cb1b56f8d359e7489d971ecc98b49325887323f3446965f8a8cff7ec60852a998d23431dd23aa49129f68c2f189f74915785b6a814acc6f7b24f35636c8eb693d9ae92aad8bcab1ee3322aa5bc9ac3164a3252ad3a3add89b59295a5aa2fb104099014ce8235010cdbbc9938a1109ffc15bd611320ce72dcd0f974f0bd7ed109fbfe9c369b080407e091294b27df0e37c47c3113e7a9c4a1ca3f4caada860a1cda9f1a57f01ed3b7757ba57c04fce85ca14f3aae941a3310b017bff125e242c461b951e23c0056ed4618d51373bdcc040e479fafb93f8ccbf11772f539c8a558d51370ec511cb0529e053b6343161398be0b55ee2df8491f6a47c606c60db87ca253d5b23b79cad97e62c1bf359685ddb3b6b977b59a5c3d1980c4d704c8f3f5e69a70e4e9dc2add5a7e8dbc57680b4f113c0b709ff0f81ef987d0de51e51ee7edc3baa41dcaeb615626a5abce39399511b3dcf3863b48cd2ec5deb104c791ffd81b94d948b0293bf672fee61d709b45a2b99933de699d063c1908402d09722d70d61747ff85b6b9a3eceba970bee0f93e6145a3265b7998d81dfea37e09da8b176f1352faee298a70be26ccb6336a0cf717bdae28516b337ab8d224821806a356fd92f7afbdf19b17fa3ab68e21584b39a41b6e7d023ed1901a780ec125da1ebc3634936614120924dc98662b5895c5ca6f7d721aac36cdabbbc8f4f6e29ef7502191e6335004a2354df220753ec7fe8d349a00395b5d5be94525ac053fa369cd585f4ace13de2b6f6a48f0875a276ee146ec23b63f63637b6aa69b6390121264bb1824ada6c81ebee579c8c4f3b4d090173822bb06457e84154aa4694b6976ba356c1f99ebdd4e19903c9aaaa9096936f8dfdb9dd14e47ac69b86f382c4099cd6d5a9ee2d019d771c2e460ec456c0e6a9277104be63844bd0f0d1d9194b6145a03a955af32c1ca6a5e5be79bbdf886cb503a4dab4a6762f43b27b9ff9300bfadc71e6403d6755f97c5d133d2b9a068a3feb4eb33fbb325e2d211a93a40270f4625da9a074bfe12954bc8d2991a5a95ba63a86b16a7dc238ec8eb9c41d75869c044a8aee901da243e84d704f73867706bfcfecff9852dd0ba7550acd9916b00d1f038afe6f406c66dbd9cb81e8d5b138bde7c04f473488be1b5a05ad8755c4112ebcdedc8a6397468bde3121dd450a58c65ab066144dcdaa333e1bfed9e517666247493d60d8a9ef85226f6ad3ce31775dbc8b952728fd34fb6e3e6ebd9d1c619488816dc737595dc0b35e94224cfe29fc84ac5891932943005203f2587d343f771a74ea3e0b08d3c9c7d6f10dcb626a1ec7f4a88b380651dbb57af8a24ff077b636cc215fc26a6b0e0f9303678733711caa5c48df9291204f75125cfde226f26cce01dbe728ce8f778d802686498d4dbf48fc10d0198205ec699e2f6b8305992f11df6497102707f169d6519c442afab44f2cc0a1bdd2db647de04cf83bdba9ba20bda0ec4ba5c3d9be7590b2feed6bde2b38e5472415489646d2d57e6f516513dd993c4fffe828f0b70f60ed8de3f9f54d6f1fdef57bb47125fb8a99877e72f0c1697129b9450e52770044296eb171c58767e1485ab567102a75c46b514dde969ac9d64bcd05bfa9e96206a9f12ceaf2018803f0cc9db9f7c6ff4be9c5e8868fe8e886cdcfee74e75b2e478ff653270231f73547b8315e8d7d8f9e4150f5b39bfb38b921ccdb3c5429aa3effd876c8ce2dbd1e808cbae07e97ef570adec69a95fde1d5ac5c1203c1efda93f3d3187e3cb7a5049dee1bdee1c61d2e76106e4af8a3c5e91848d14e5b94fb6314c823680f8b82efe9630273a7d6a4459916d180498147070b3c9df1133d59c570191947a09155be804e12c37ab0d66ce1f70ad81c629c5baedeae77143c5448fe11adfb428d5d5ff6455cd1d41a155d29d095feebb5b4eb98c3417f6b4c549337e996e046e9e723f82c99fae816f4e60cdec8a7fd4c08cacee7e4c244a301333c9b229afb221ed374528e3d88d16a9511be494c21e477338a53193d438a6914625f52b8111b75aa7ecbabd3e48783c86b721e9a619fd8d478390ae49c64d146063dc7e74878000371f550b7e6b354d2afd2b068853b7616ecd770498e0fa5f5bee66aa7b8f0390fb54e2b181ba3dbf03fdfb098ee68488b949438519da261fee277b284e97b8e8e93b5be90ba90b1012210ebc78f58d7c50c93eb7cf5c7c069548362eaaf9e187a790d2b32c6ce61f66f55b7f03f73acaadf722fb1da310efe5302c08972532558501c53de657f1a1703f8da522d5a60af31afd95ec4ee46df6f0d86597feec99294aca430d7d1ee5e9fb1619da034204fabdbce99c57b51ff739e79e75f7b8d06b0eed555a1b1351b940931281dc7c0d2ccc093aafc8696d2551832fb14fa377c8ea241f48f1fb3b48cb6484faa3e496379df95615f5d228ec348243c40ae8e8024c172754fe90b89a4fa9c5d717d1aa2f26f9bcac83cb6b429e577cbb8ba66c297d5879157505b80251592ccb94ffe513799c6dd3400044bf507201ec82b01045aa9887cf96cd81ff3d5c8e7bdad9437ca6b3902f10ae275b9afe4fc73937004522d3cd2fe44cae9466b3099052db76187b17db4b0672a358a1b3f1a889bbda5ac020181f8225285ebc114db9ee2843a5e0ae299d8a9ab1a018403750a396bc68c3afc24f027ced3738f768dd1a13c0bff210bade780014a2d09f358961cf45c288920fa39f077dc78e1918a1131f55659528f6e2f2c0f48d58e03dbd3a7a9b6ea9bc2e9470481a2ee93de880c65a6c9fff6a5d6ab10c7a2b407aaf61003dfcc71aa94783839e6b2aa04c62a3949812a3e74902cb21789ab6bd24152de865c75864e9cd271a6418da4843ec15212f4de5eebc6d9b46d77cfab22c3cddfb4a78e6962699381fefea15935a732eba3b7d3f89122619f8a4801a4be76026ce928c6b50c21706ac8ed1648b2255e2acbb1145c67396a489d94fad596689ced8673fc00c8498fd3ec78e861159b5806a77aa821930f03e9aff2fa9264ed537d920534325ea989cbc006078cca79b447b5ff711f72f910e7aad77ce4b5d398de6ee7460efcc673bf4213b2b314340731e9828619178edb70da35bf71ab0952baa25dfbd49ec9f16185635bd77f304ee43ba34ded61f9e6d3e93299f01beede497b7119da188b0331ac5e7f2b41aaa491e32987291c5104fb0309a45bd5c47c4dabca61bbb72e3badcaf6ac2eb90cdc3cfada7824bb058c14621797a2397fd67f03a43f33efd5013a5f1e1ce876e855b2b11947996d3607966d65ef58a017ec547ba2ae1d1b37c2b5ab3ca9066ae96c35b29dbc7b0aa46559ba41cdae176e5e6866a36a9f0d959865bd17837947d0c38a2bc2630a20b3dfd45dd1513fdfa11aa33888e0c3613c746273290e8ad2d3e5c10ac15ae8109ee4c3237ed2b611c0e67678867b89fd1a88b738604a338759c9a3d739e6ed9f65b735e6602a9cb5fcf577ba6d16286611973bd9545b98d21c68151c0ac76d6ed61c6b2503610b263f915f5ef87f9ab14604a7b442dd8a1c5d2fc43b3d2666ba9032dfbdd179ae88f63578eced018001ba62e97d7e80fa24fb0a2f0cbc93a10a90deb0c27485558310c1893db0d9777fb3c8f4a6d718c64b82219170e3310875f21c6d7bfe1c17d32b2ef04dd5fcd6c190c3256385bb78363661167ffdbca1e5b9468744b5ee719c1f6794e7d8356cfa57fa571a1044945079751398dc9da2890c3ef8014826e751983ddae02a47ee9c13c1c3294df753989069b0ca6f534f6f84c04975b7deafd51c5533eb87a808c6299b1893cc09f7e9903e90c82ae0b5b31b9e9f4168d550d76a0270e30edd80e1002b3e0413008548085b1f5b3093e8ad2aab972f3c46fc8aafc1f3161f4b7da9d7fcacb33b3764034b2000f4870c5dc32f7b1d68873750d371f3db79cb752099a9d9b02e3f5be2398f11940905947fc0ed9e23c78b5cb1a369ac6f56cc7d7d142b110bdb59a1d69e7ad02660cc9e152de9847a05ca006dc9a25500264889d086d8b7d1d3e99563c77f233068b0c884d271763105a80d3a297cec90c66596759ffdd316088ed581260236d774715426682d10f006f2bb1430bf185e04e385cd81436fd83b80abe17599b5ce53675ca49a5f0541a2f1f15c876eb613c98194ca77a88f9f1d1dae4bdb958c67803d61c23ac5672998978452ea7cff0f0950aa41420c9f1479c76094d883efb82dccc04905a3b529f2a1c6a8454415178068be9f164e5f15461d115210bdc191ca60f5e20510ed4b81e4cbe522987c97f6386c040ca094e3b7ff66476582dafc9cc9bd27eada1e21bd9e461fc0ca8c95d74be4b3b9a2e3832959e9be838e5ea366f2986b5cb4a606d8f89f3835eb5b763e07ab9d19ee26caf46e460cf455e66f604e5c6ce4e710e3ff132878b766587228ae3ad7bda3ab73332e6b4cf3a4a5af13f66b5489d62b68b38b8a685a6005eb6169c3699f7077e322affc70eb73e6e8e3755fdfce53ced3f0a3b1b018baa1ce3e98266f4983a5934767683fe53794137d27d7a77f3b9c3fa9217bcb01ffc549fd2c37946815daada4f483f348368877c7fdbc89db5fde997dce131820505d446dc8b1c1a5ca5de9719c06cf7d073abe70d26a044a79af7273d601f44b63a0439200d33c3c6c9295c674a4d3907e8556676f466973b2f1a6c3da09c02c7a4ec919a2a6e1680f4183722de86d9b54e5fcd4025155879c70f5539a6a443a63462d866c5f4238b09dd87884f930bed7b2423b66e714b3f6a534bc151569a843305e424587e58366b23013ea72624f9e9c0005f61cd191975b608aefbc4ac1ddca7e78d9b79813b62a5ec1bb741e979214c8548f485611cb446492dfd57de2782bcd8276d7bda004a4536449a262a13f5ac82bec74f9feb80a3dea1636d32e7b27c2e6886e00c9dd34b848304950193d9725bf51c949d2b1d8c540236c8929b99545c364e2010926cf5dc412c49bef76803cb70cc3390aa5b591628a0ff0dc2f558d641d6d5727ff3b8e6c4e37de56597108a4f666b1389e844d7c407adce9a2d256045a3b85e163a6af155e5fc98561f244e9958df94e4d5a4710f2f325491b93b22848e1d968f7bbc3ad6dea90afb5b861543e52197061f455389fb19a2291a07302a33fd6931af51635843b89b2beb6cb4df07de2367f418896ece6f89645d210a1cc5d32994567c43abe13ac8c83a5507986744298bb4e2884e66c0f61ad23ed4eefc26c0822a54f9d54475c38c70aedfa157a0914617bd581d6dc7722ebaf359a4e5fdcc43fd6b43af13db6758d86644cb78b87adebeb63a995205d5532689f20be54ed30e958c162efdd48ec7f94296b9f0c312432e20ef2d346a23d0fa0cfb155aa4b096edb08c2fc9948eb086e61936fd564ad6544953d53027d725ece5ef2a2e4735b552b924ee8784d1ba6d7f2788be097b7f862cae52670ac9b1e6ff150874b7fbd52f6ed325a91076c42321f7212529c31ec5243c903bcd0a718b9c675573c45278a58ac43346c53b7a815dc801061926d0501e1524b4684124bf5b143a89ab65d2b94708ee66586e4aed328304715e4609b5038840c41558bdfe14e996a38b66a494ce5cac81a5cb371d167344cd1e0214f37882a18b4853271a1b4727f38a0154900618a0ff64acf47c7aa617dc1f38b50644400c942ae5b734a1b353f9d4d331908ec916469e70564203a554b4147c0564a983ea5c73eee9d89712700d1f88c31f1e413897a3064811d5143b14998c9dc242b6ec6937cd41ecb11245e9882795baadb184b838b308bcdf412ebb2735554573e9367e4cc5ad1549a1977d3f613fb85ffa952af65b5eababbef7e7eeeeeba5dba8da8b3912cb33a94b7dddc0fabdbc77fee913c015d498f1ff26cd15a85afdf843e724fb0b4ed7d8adfbd50f624627edcb1a9ee6cab36f35667f4b4549b8be2ea310319000ef8891e9d06d60fe1fe9250c7489105949c9d17d5167fab92105383c1ad6ebe0fd83c7ea1b66dd5f669f3fb9d4d717c957d02c55210412a247523c37e2a53eac7ac036dad20a8276972d9eb758e8e1a49269eeb65b7d36c2553dfb351a298151121d74669a46dd60e844dd8d3ff4dfb7dc981a69b11e5e9ccd7b23cddfedad0f9573b7c87161fcb29135d13916d59d9d4c2c24c5699b2e038e713104caa82891d89208836768a4c6cfaa722af77c10680637866622f598d6c7073fcdfefea63fad1c20e2d958f3f057b87214bef71c3aba4704d3d16a59c797add38b7ea595a110ad592755a8b6f7b0bedbbd569e0108f204eefa0f2a16b82bb2b8a3b31db219585db069d713e0f1677b189f72713ca4e1ee28fb4991894e7aeab1431b3c7bbeab6c25f0eaf67387eea78c05fe043fd2b63c48b4420d27840a68777088a480dbfe248bff2bd677633716b4e95a1bf1b10d745a8fa2d43c200aabd9c6eca1ad642a2af81b86e2cfcf499b657efc36c2cc39e3c944a27f5c0f72b3bb1471f0b164af3821b0fc22374ff8957fcdbb8feb8e050b8232e82c2737610bd306cb1f13046bca8ebc976340cafa33dda618c0300aa061c8080a226ac1ee561a6dfc555f4a3771baa2b7482c91448ccf5722f2155bc5cf5c8a61544269b849cc34cd83807ca76bfe9127c435e539b5aa33345922704b4c7bdd672f34127b66c604d6b017af07d026d486f2eff23832286a5686057fcc75a62bd843cc56a9d6f211f0a25c15dda8b9b3da41d651b3ed6b391c22e7873c6b17e71e915d7fece4320be3c0851c5b13c1564abe9bc2889a0af986b9e31d89cd26180b3d99ea583f0d8f82f6a8f9247d24a217768b55c28d3d0dc3c1ff666a2bdbcc698c153aa3da7fe102c0fd124198a676cb44f3e003870878d5455c0cfc96592d2bf563bb88505422bcb02de5151490f44619930f4608a2c6bd54230632ddeb7cdf87c59faaac9a0567ec4f618db5d217c9cb6cc60bb582dab3b02e6aca971230f73bd820413fcab66f4cd30c87d9929d18a73b7ffbd42d570d5d372bb5ebe7f2d6206b5ad4beb2b94d6ef739de75bbfd26ceca3b492239b0d74219157a59e22a682dead68c16a734a9d757705f320b538f2ba1e1f714876ec04e87299c5d49c511988aab0718c3a3d8092aa64c386567ea56c0188c358b795d3f44c3f919ba7e77e956405f7dcf381c4b46ef8c3b5ac0b7942decaede14e918e56ebf0bd7ed7948c4c06e4677f5430b35e0a98ddc05a5349f327013fc50e1cb82c0688fcf9339a1b78f7256327d74dd5cf46403621bc05b7f6eb0d9d3303985b5e2184f62d1f3393e42b3555c08b215ee8271620a547eacd335d9b087795e012af8e2e55cdc124054dcd195610e74a563fb5559009a444eddde8d1eab300ab0d97a8bf76d8e724827f0afb9edcf8ce1e7b16dfe011ec8e287b039b28f4a1db4e57124e0f00fb60f550e0132eb158a4782d9dd061ef4a500805768e8d90e270364e181b6383478622f914d8ec2e1386d8eeac2a3a465adefe6eef77990ce99b8bb335c7d556a9a13f545a10f24e3b31399f1916746b0c76ec88ddf3f915f02d73658a5fdc96892255b9f42e2ed03a80d121354fa709c433b9bec3617e82216bbfbafa20193fbcfeb9d4e0985524bc05d711babb88bab7edfa4258785386eae5edc96eff84f20b6c1163fbbaf08cf08f7bff75d867f1a230f6172e1c6c051305f1eddcde9e1bcffa68b05c3daa1c165a0a68bd670630a9076d52cd9a5702c72292c54a56ac3199100639dba811cd2443b0b854e0aee6cade774f88b40709ac9d643cae907db4f95616b530155311b8522ee41de6c1c26a7f3c5be85fa1c885650726ec09f274ed9ea37fb1286613c0a921de729c206c1fe7dadf91d47a868744b78a7b7e1da2db73b53e7adcdf44c489a12506c7c41a3e392d0779453feed8546cd79229a3ca79c28067232ac1c84f89dfcc6aeed96c9689cf99215009adc559e00d149c84a44d925132e768aadf28507aa7cf7e6e97264ff22257729db2c42984c053be90fb2ee084996e8e33b042d10edd148c97b72c7d26b4f0568c0eabecff65a5bd7d725c625910c07d03d0d26bcbd6a8856e42be7973350dc4cc5d819585a421d5213e2361df482a0613e3c2f8435c326db116c2669eb923de2dadb24bea6d805891c75b7146ec997a03acf3589c7ae9abeda07ed71b56c2edb07cd498efbd1bc44c53fcc5e5563238cfd7c4c0113f42ec1bf7d71a2f87e6bcede1001b3e1e6b39a0e78aa8c1d77bc9735452d2fbea5da67c304a1ecc7cef8fe548f54919d4db9926fbc16d0555062a6f05dc285e6588e44dcf0e43f325346882ff88f96e13c4f176d0c8e56170ad2adbeef65df591fb89c76752a5e185d0522583aca80aba7eb3e593adc500a21edcfa101e2cc962efd63c72b24e41a64478d6a94fad836e108c842d6c5164040d57954fb7ee1c87ec314cd4a9ce7de88106a2c5eedd79e8d6698d251ee32dfc6f3affe1db4e723cceeb40dc4d5031d9256bdf9aa227f2b8b44c4fd3d2b54e02e7fd67cdf811f3e15cf1274780b951e900363cc0ab3dc7935a7655bcaeba658eb608e5c9e1a57bd70e081069746a5502fab2110e11a8453217317d87eac372f50391652aa0907f047835497affa4cce96a4e5ae77e18458318a62a5bee3b27fa8cbd3d6a074accad14567817cd0422191f1fbcb0046bd4d8982b6800bd641c8f626a7ec82d6246b535050af4bc85f3c8def2c35394ed281f3b75d1d14543f94e06d55baf5df9c8ec3e1aff36ddf6bf1740492460c04ed9b52d525adbdd9be02600efdcb855d566bf7b96362699477c2cebfacbbb82e5668d7f7b8cd5d442a921d7793e18bd33ab7154226120d1eaf15ab8e71a4de23f8557217420f9920d5c15857fa5ceeb1f14a6c96431b5093b10fb9632ceda7742a2e5881d2cbaa55e839113b0764557e7c092e0c2bdaa49dced626999a94e19b3945f1b758530734f61aeb3774f1ef63fb5a7944b8735684452837e8cc862f167c6c569f8a84f242cbedf13a693f92b5d060e6461909b2f78bb551beeef47c1f2d932159ff1aecdd2cad8184bb4186257e0a80e026c90207f901a7a0b6558a080b6b69d6990be32c54c3470f4c2b8c0fd554a26126fcbbfec2cead9ddf5262f27683bbd27bcdb5b2bdbb1ae68b881c2cd98710e9126118d47aeb53d097c357bd6d5035b39ae3acfcb82819305d8ab4721a5807bae272d39bf727b9a4833f30c77ef39b6d3f8f91441eaf785a9db52eea19a623956b2b681ef616dd2f5782b7c7ddedc6b49875cb98f68065c6de4a9dc5683118551bb9192ebebe49188b5e1a2ca6810fa5cfb92e1f16112ac17fe7ce1c115c89e14cb7a146caa2d7b76552d7c75419c179b7e764a3357c73915b62e3d3fc642269a1e7b548571acea377496e2cf370aa89a884e2db8f9c7c27df23a520ceca3fcb2b57dca4abc6ad17f2e2f263e11d0f2958cf1c922afaa1ac5e7ed0eb9fd45d63c3825ebee3096620dde3110ea600b191ddac862c4ab0a45906d430e06bdf25db447994584826581b0d0227a31670d6543cb877ea809e1f23ed1fb78f4f21551cdb77e782f3304a378a60365060fe14ba2c8457ab5243d928f0b32afc924fade4b02d40cfbb39ed2eafe52da371114c629cf906cc05ffe5d8c6413e87dcc0b5841b74e1d427684b214150b585a52cc2b2b5209c7046bed3f27e1b5f3b6e39ed942e64cbccbdcb85cafdf54c5a9a9ac912a89932a9a20aee2778121b78db26147c13b1124378d28502fea6c20020ef5f65786ace3794520434e8cbbb73862f0041f9bf55d74ab76add63cc5adcf389089bdec62dc451c1d321b4c87cb6216a0b33958a726e21b9e0e6ec609d105a9f592e54ac3d765194e2858a062ee63a5eb88d3885358da02b54b76c7b5b9dd267a2bacf1c8464ac510a15b53351762b786de67556497016f244f8279da7c10ddcb07ecc47832cc3a473fa69e3c0a350721128bc0f0b8107d4cdbfd3aec2686678ec1db2eeca01adb640ee375e3cada0b9576d2b7c8a8083ae5add13b7fc827a1b66cca983274e935fe44ab9aa3b0b7733b272fbe8e6bbeae707ab4dd5eed9316eca865933e6067b9b5f8f3e3e08d59eaf3450896a8ba0dc412051bd405a7919de9def2d3995e87102dca02b4d2bfda31e8c9770ed8533da34bebfd9d11b414643d3e1309ec39df170138b99f1b9a8e8e732af6b7e103c19eaf5f1e9f12ad7d98dc402583a6ece8f8fbf3e367bc37b6416ef06cb3765d11713e36b895ce97addc9bf9567c38a908386e82c54089f544d4c12c3ac279595ff1319a7fe7ca7591db310bff56f95dde4e434849ac54e44ece84d957206fce4b1ccd1dd978ee173a8baaec8ca6528bdb89eca11cfa5a8688ac38b1d43f68383960e272f961ee6bf54682e48cef11628a921e243ca274da0ca4b1ac2079833ff1057b6cc0bcf685c9b7338516095ae0c88bbab785270fb7f6730f46b8177f410a8a801fdee53b41671e3aaa1e5f78fd3ff0c0606f854400a22fd91b6964d03854eeb8c2c9b943fab7a190fdd12a896b3a0f147970d66d2217987fb74f848aaee0d3e2545967352a4da9aa624bf1ad812e46fda773f117ebd97734c952096fac698730da3f9e456fb5f2691165fa668aeeb721e1a22a2ea93e3b040945a9a934ef99f6c722a938f811292126900503ea39c464ff31fff6038f42edd9a1a9ffe2f0af6d0c6ff3270f6d1813d3bbefa0c08974892976a1edad565f0aceed264016a9dbefe8b13e21a365ac375689e89bde2055e21891c1ce1cfd97d5565a292b83022e956e5174952132353dd5b7028c95716daf7e426487b5a8301dd893ad4233447ea705c583b6608e6bb3ec862589add63fbb1093b01a075e0665feca747bf4fb085560e0310bb485fcd52c3ffc9ea96fee2252ef4395e85a2aa2e8e9190f6ee7a44b719a72bfd7846d37228ece7934a34fd204ee521c9651b87f88211c5c591f7641bca35d90cebcdc270e9144401a632f501d56264928e40194526afdee636936064f1570d5f49d64bbfe0482bbd8cb96de431577d0db1a5913c83e86427e1eb3d73ee6a646d764be701e988ee4a2e4466a26921b0dcb81767293bee0633bd67dcf2208c793f771d621c67083daff3ec1ba584829d8d00c1eae5591df0a772776908c683f00719aa2f2f4c38be0e428cb53093679ffe30df7815c9d13e333f97b730cac0208adfff611d9dc472485587d0e9775e1241a5668118f4c779c7b6ffba399221615a9908545935c15e21a221ff3bf7eb409bf57b6f40b2296a0f26d47ac17a64f221244bc71094838230b0ca0939b0fa5ad10b1cea271ffd1eddb0cb7639c710d8229f54cf3da678f0481681766c1af94adc9e3b41b32b8dea14cd36d1716c1d33d5cd3bff1ee8efc7e9b5d39bd87336ba3ed1d5a6112f6df2d2dba3575ddaa7f808d8fb8309b6b2bc369b9391603f56d14f7ab3aa0b19934a82e26a606ef7f4b51cb3ee2529d0057936beb341ca8e6db11c566b26420bb47a7fd9d4e82639a979febdfc15ccb3b4dc6524ec3b20019a01c33a0b419ae000b53120c18bc49eda8242bdcae8e271ad7846e1b9ca2def7736c6b8568a0a70772d0e7560889b765cdfa5d568df8aaa942067648e8c0cf7a30e38f517fd1ad8097ac8f9c0295bd1fba3c8b4f852860e0ce2b89682f82170fded9eab9044fb2a5cda4dfc5e0f3653810b9ebc79cd3bd3889b0cab0c8432e75ad295b4ec72e061a2a9658af50f549f4cd80a2171f5095e7a12200ea58abe3e1187e22b290fc502e9cadde90aca69ff165c35232ae26705d81974991ca8473063e640d13c2bcb575709526e99879b3ba89a9fa9bf59c663950095a4d3c2bd178de3c00b807c9babf3a9204b41c05d3862ae115678f9344ffd380604bdbfe113c96c1a25576db0c536b4eafa39b6db4f14d09cd57e1ee8883936ddc70f217b4878b3cf71c13c186db42bad3a4d591d4344195d62c502e43134e7f0e36294fdd8612b19d5280e863f8d294678c909261585f63ebf0a0cfba85821d2c79f856e17347b69c57f0ab29dde88c824a3ba3383a5e76232d8ad50725096e6337c25a660ad793e9abd2bd3bf8c2841d508be195de2df18b1b6fc3c5b3e122c8e27f9b2bcfab6a7af70fd6578ad76e98848c8fb33f13bba0927478c7a626d593cf8fc8ed8878658107354f6251cf6fb445c9c11be9542d628207e42f9c9d91096b5566693b0fec790716d1f3a05e9e9d2ed54ec7c2d3b8aa85bd546574378236574a783d1ebbfb5e9ca906523dae9ccadb94d9c3956bc9e3ed0c51a01372fe371f7f43c7ca822893efa63b2228c5168ee0bc5a42f7be5c43fd6d94c0a7d81717c440dc7bcfa1ace7682f0470d81b07523ba8d6c6e9a1b725acf1b6dc314142e09ccefb8b7a81b50b2e5e045053e8f23a49c15ac63b6d1c5a7f18af68e3cf36ab8bc890604e10a32ec18d871a2ac4c3f2e0ea43773057359890db365eefaf9cb6af258ceae71f02e29fd7149abdd0abbd7c1967f25d11a37724d8294c42d2bc5dd489803d03efbf61adbf0cbb9f58751733b6d26773d5b120c25b03f5189924e804c8eebd92f2cdf9a6875a5ccc3947f55fd1a618ba40fc24fbe2db825ec98fc06a9216525b7cb338488b2c64557a84ef35ecd718168c62ba4b7c3dca13aeb9a9a7bf127369c4a4b38cc13f7f64b71edf0b2517539198023a0e14de0368efd996319b3199051a490dccd6a8b6cae15e38d1b9c83af5f5862d4692f50773f0d20b8fdaa26d5be231db5226754ba3874b095ea9fc529adc74a77f21f92772336e5a94503749d087288dbb19cf5e6923142094782991dc33b3f212e03a86b0dd654f7ea4e3e19bb51804f762ac7e82da7e5fccc0f9cf1d063d3e21429db9cad22e3ef43760b32374ee31dff2d1d99ee16ac6ef2a79958dc112d47d01eb4ccfe66508bdef4fbb2f1d386fe0e67790096ade20cb059a054293a4239de03ed287c222fad34d3a1bc6d5c3102e6d0fb0fb08d3a9e37d2bd0ad63a2b65f53aaeacc585c9ff2da14bd57606fc934c6b0d7a0b8664c23a6ee5c79d3f8691bd5f1fee12af947343967e51ee75bed3cfe05a82939d1a8a96b45f67f047cc8fad1a0eea04c5ece766a4ba5be5fc0a5159cfbe6709b3d440b1de06fad87a880c1332970ded1bd064a0d4e20efc68a0ecc5e27da09834f8b4b4af0762cc43e8647cd41c12ab0d57055c328d778ffb05ea84397a96c7a20be7ae0a6db540e21027c82d848ef046f21480cb10120feb2ddfbb9375a6d1742c388e86164a493b80b1b42c3f55c0c320df413e54a336bb1a4c001899777373877ac54343d99ed2683b08aa8bc07e4ce92743ad066add6a6a7463611da1012faea278b3bcd8cee460f5c831674b3f84af21d39761013702b720599d9aee2bcf80750f0632ba96ef313839c39e26b826c992eecf182eda480301bfa5599ffdbf4b655a40be3d4c861acb37a1cf88f72923187b8678a89fa7433678d8aa422fb89a31e66c0472a23668ff4d8037869a4c7851af3c5606b6dab65eb966b66ff5bad412eaed9e3d738875ea4fdbe61f2708bab4eb68f902ce446daf14e1eaeb263e4511beb173f294ef3a67b694b7cb0f8cc00f3e7ef553d9494701df425557dc5abcb510b147916d448f520ae5b434e76be1efc14ac8d6c1fc33aad8480067860fddbb38b74b8a77ef24bbfcc4c7617456587986da1202a956bd7a1f1ce33e0c84c3dd36b40e4d6819446fd57180bc4ae9cf048479a55568df80887c282f89379007b9f851a2ac18075e71897922cda8a132112cd16cbfe381db017d5137edf075f5f4a7b9d38972c72ab125cec853b4538eece496b4bd8d723301b39c7b95707d620712121b3bc73ecf390a2e7d3d2f4e1013dd141908009cdcd3ec7d3b167125c7e4052a7c2551ecadf540876dfaaf4a72e9e0d31dc190409139d9a0d4e44d0d7bf5d729ebb768b15241a67fddb4573704d24d14651714bfdb9f54050ddc12e315d5e7e101c2bbcce1d38996920d50b6bef2c6d6c089e5b7a7c28f5bc1b4065083888cd384c5a0f5596d5be486f29211366ea4ecde19f5890eed67e9d426221ec83e20926956911893db18aeaae4e6f8215ac71c072347f2cdb5f7e452cda0e31205296f5029f676454d95b1109c4576e5a9d5e7c0d07d458c746d5a10d8d3a87c21be47c0cbac9d419775995df5b430a586401d1424bb14fe5dde073b5fbef34a5659b4e1fc5fa84c4688c85174c0707740a5f61ad83119bfe901ff67e6a246450ae53a98c9e70e693f349c53cc746d59441fe0c94f2fd445eba2b6b4f172455e2ab15b919faab5c6169ff575205771a044259e6d79b95f4da85a9c9068730f16a95f482ef66ed7823e4939d5f1040bd353b28a758756683767d2def0412ab33f02c877d5833c095ec412271d7fa76be52416c3159c6e400194bcec2bc57a25fd127671bff00254e55635c64fedbafaa4ca6c46c1f8af97ba6930b7aed31139db0024019fbd4581a5ee6230fb35cf61d85e2dad440f4a2acdf2d944bc3841337e2d71de9f9a3efc0089e7103db22d627e6003c6e547a0d8553fa11d4dba768cf992f27f4ff54ba27287e686893b1cd8510d5d354b6241818c6790df715064d27c0e929830ccd60ac090dd4e6421a7bf9dbfc78decbed3e4520486a5c1ed5fcfb4bd0f94b30d4c22cd7d0e42843f610e865ba547d53cf10848bac8e3458b9e1940df2d9918a80ef283c8be87539c259eb7acecaff5d93ed6ccd85ab0c964c33cfa6cf7b477b561a727fbd227fc3e4d77c4d6db6fdc2b3832b61df3bad642d5a652d70c349ea43bb66be71c0a2d4f6b83245d94e26c01b7b5314cc044a67d6172cf1c71bde6926c1cab2956ce494f20c8f91eff68e668b0a45f61c34d9bc66964c25f51cec62b23185f63e33b9982c6b72412b4464e618b05b39074ec6322da70bfe485183211cd707ddf033c0da74cb88129c452dfebba0213043aafa82f370be8b2d4248b82777efb4e7b6f92bf861396394e99af43609f12b6f77f72c1dd262df9bb787688e0f76fabd112a816190b6cc537ef056423d45a7d61cba245f4f29844fc1e8b6e55ba9d33bc6bccdcfab0b4ebd4c1599edd3cd424c4e196a1f7adfca9437d7c19187fcf5263278bec055ebb0ba56b1821a217d196b9f35475b2ac0fce1a436d607fc402bc0f35f31e9b60c4422abcb312834633210f708a969564077e5c43690b55311ac8022a0332b03dc16268cd9899602fbc24e9dde2c22dc369f8c0f0f522e6d325dd1446866d7288de846ab38700e3a60d8bc436eb1e8d17feef2196a0d8c374c84fdef948b1722102044237c06c27bccfbc0f31506694d841ee7e5aafd0d80eef9df6237c0db4d9f734d9da067ddbb4c6373990c4f2bfbd9f7b0cde429b02633d4e130865ea94a7920f38c3bf70026163f60ca321b0c55d04a751bb375ecc715d9e958906f934e2f297b27a7af824005305f6d7cf0b38dc47517703fa2e0fa6c061acd63c02f06f0c36433daa8f5a5ea6875ef0059bb3bdaffb5f83fed19454d910aa60a587d04b7384ae8f5b78e9aca6f6240df3f294fc9a08c2b2f6aca102528a8e0add0bd414fc0d25ba835cea8cb43c5a18cabf27d6719fa148eafa1aa37ff88ba261d0c2a97c404fffe469e0c9d0d748c5ed02629fba86b27da80df0fc2d9bb57d1471cec9a2774aaf3c0dbcf50d813d20682d6c13ef4b81c0db71ff2e84330e52d74139f51794836dedf2f5c5ba2d43d45d6cf4ad8d3b49643247b8be50509e0883bb3b37ec5db4d1a404431e2fedf4a7615f979c417cf2d7b297ec5206153042a97ac73b70409232389e4a9533b64a4987abb7d42ce1208a92f16569c4c346711ac1ea3ea2efdbf12fa677c8d4ffc055b7d4d857dcf87697925c6698d4ad04a635d906b0dc87c90b8785baf2aecb9a313d20806151e6ea18c44fd7e5365848f743c898764dbcf8a422de88e22c7c799e45da67e400c3a6b50f2f64c81396553894f4b033f1289c7aaed9ce499baca7a97f4396287e77292c11ef34ac2be6c37057b058346956dd386accef0f73860b997ed2df7536da72c681b359eecc387713fda159073efd657bfaba0fb5eb6f2d8417d6cda37c5652a4113d2c75e7757fb109e741d244c7b0507065704690d47e0f11ba6c701476acc526c978dc3b8f7692305f249d3f62d074e4ec8f6a2e95725efc5e6bfd8fd83b28e6c43a5c5ecac9f837d1a840cb1ac071d9d12989beb9dca6681528783162c5209251de049b0341455b253dda19fbbcd41df3e607f56792d3dea0aedbc4a44877bcf2ac37f35a06d9f0d6d9e87c75b1048acf7e144eb22cf6b994650d57ad961acfff89594e0fe2c585d777d2113f048149ff61a2b1246134d35ea938fc80626b224c5cf2fa740385e85be1a7556697170bc660fe4ecf129d61467136a802b99e02e151556ea726305bb055ed22eb5e35685bea1323e8d28d2f1385a727144c0cadc81c72ed6b94864b9de9dbe8cad320193127b1078495212baad040dc34d0cc7070d83e8bd7a1f5995b311cef0cd469a5bc512683aa1ce9b1a4cba7355ec22776218d3b0464ad50e883bbc4e74ddaf2eafc5ec1f152e22c27a0c5dcfa69c3bb0a519a92e0f48105b0fb958302e56f9c011caf66933b164f2ba1fb19a7f5f76eb18bb67c383548bd2648b3a9747c4544af13c1edb8eb68edd584eae6fae86e511c6cebf1eced52e936ba1fe2e8150943cc0f990ca5a1ae2d36738aa659bb55ebf17fec81c72720da4e3e146abb490e4c30f290685737f49aea34c510c2ce06a4bc9fb24a6a2cf5375b07ae8b3ba363d2e9d970b566dcfd9296a18446c0f9e7f901b0b42709d833a20eff8ded4f882bea4f7045f1c42473928672d20a24ee20617ff5e72b500e4f96768660f82d4db6788605d54ce3bc6ef0010363789b4c6f933e061c5843ccae348477b76a9975cbf28e9008a92a041ff5acc517d6c6945ee57b10d3a38c974c2022530493b598668d9dd1056311d97e14061cc1b7ba88ca1f4eef8a14eb8ce62c459efb54ebc204614d1aa12a3bc0b2fbbe22adf372ff582b4402b468cb6abc4950386dd7c650758c7c75aed9a8175f533d8ca4c986270ccf71766146c6170f0121defe12eb43feb9716022faf3ac174e2358de5efb8f7fcf77c9cffd9454ca3ed19f178fa10f00e9fe40effb3faa4888cc60f09a226fcc187a6573d6b3b7d2d829b340f951c6a87b48e2c228757acb27a657a5ef4d74f2425841ed683be90a5a438b17b6ae225b472c7bfd138dc958d4254f5965791009fd71589d839f83981a3cd8ab0de59a4f712582a7add0b406d66a59b092755cd552c9b44da77b4ac2ba2a58e6961dc7649dfecfbd643ed2b9b1fe7b8c3c41474c54cf7f4838d9261947965ce4d06be62940b0e49959928bc3c1e80fb1fe4d6bd438eda2b46a25917324ef016cee021bc30bc8f64e4b5e00ea9d2573a6c4001671be18b8a58b7b79ed115ccb91fd7e0cf31078e3df5001077820a2f4c79493cb727f39cc15236a4ab15ae630ddb3e38dd4deef830edfd763934c36df52769325aad296125e965811cdf3d9299b5ca6f34f354fd3a863523b317b341a66c2b9fbc0e1bc34a870fdf2f1b0300334f259a5f922183dde0765b9dafab2474fe49898ac7fa90f06f19eaaf3780f4528e90131d4319ac8490d190a236d57b8a8da63361d413f820a2b527c36a362f427cf41d339248bfa04c2bfa94ee0ad67ef1e1d19bdc2af17a6cc5a373641f02b7f2a355218894e07cdb457ce44a5b7186454c3781b48aaeacc42aee0aa70c021117de5d3a5cacc602e17e3341c79a44e396cea1fce5b1f0800442b7ae4d5950cb761099ad31530e8f262f256f962b3ca26583d619da940459a777ff506451e454631840d074f4ea536df962e18bf971996c674a051559f022d64fed00b4821f9050c3c386413289bf8dab7263d598ca98b241b74b15dcc9e4b8313aaa690a45cdd38f5c72f7e8883dd101c78fce7ad06868ea227aff22370fece1d8dd96c3dbb80f0fef68ec5dd6cf25a28e59f54936f417ba7265c768c92f1eab0eb270fffcb24fc6ebfdc24ac7bffb496a01e3c2c65f8ddbde1eaf3ee2c87eaffee707e3db537be6c5e047123625c476c297a9b98a0f1b8cd998d314bc10f2086913988b0bc7fc16c8ad16d77e2d92e0f306c193c86418ea98a23fb145d749626def797d76652025b736df4f36e60067d26a96d1e88be66d6bf106df9d6a108370c85617e0b819114f99f645ef423cd4ecf71062534c396814f2dd504dda0422abeccaeae3fa96fb772cbff6b8e0becde0ee1b269dca19fba09223ff07823eb6a1760a4e5a5bcc16491a89bedc45a4a1b5134e2af31c0f0b072cc40f0d0eec9a8e16f4d5beaa56574441e0c916e9fb29a7d41c5976eefff7bb2aff5f5128237028e7bbf2bf886c963a3166738ff3e22451d4ef2d6075f14463cf97e4fe6cac8578965dd3bc2753494d06a675173ba514aff83f7fca2cdaf76f0bd35d21ecce700b6cb80ea1e15e1a68b99ec04f1b5be01d45b85a48548b7e193b5e1e499a8f078c14e1160a5c29b7e46e24188350925220b2dd99f40ac93d736a696acfc41d275c2b78db39e862d1f2effa2bf6cf70a0f6dd67ce0f4823faf7e6f420179f3098bf86c08ec21a2291cbb0185cae13ecc640337d20b448f392bdbcc29370710645c7666e0605c06d46e87e93293422ac2aa76db539936ea20a5ec5ce3b2668db8ee559474ed72a14630b4c58e565ee459fc06b5666a4d348a281393c8177ee50318926b14c18ca32b82b516cd98ebd0ca8dd5956165eff3263bbb1c0f0e2a1b2459ac1994d9d9a009c7504dcddc2136c27366bc264347ebffd210a501cc90aae0e48def078bd3719f5609ed57da93013a996cb070138393e8e41dcd9d98651a140751f42a8818b72f289aa6586d47cc2fad8caf35ee5551f6519e7c7756f1c2d34d0114a8393bab0caeb19367132313a422e0c9a542c3ecc9b2b3bbd159f68c36729f5ac0903167b977068e45e36fd295060fe6bb29576e9a7a44a1415ac381c914f8b581346a3d9eff2ad826a18821449e75d638cc61341ccf0a506e1a7b58831cc8d53d3a7689a66435e07bf2f4782ed62757939389bee398ddd369c5a00a3ba96a39fb6acc67cdcc2520a75e72f57b11bc9ce75fa983fb4ed8ef8d29147b121c34c4d41693f542ab0b899133f492f8f4a5b758ee62c67aa06fd5d3984c19a6d278f62c8b944dd1fe6c8f1f22c385db301e0d20c46853d2e2dbe741e2616d55730aea89ac4ebd352f61a55d2ece6f69b71026d83078d68baeb416d3a7afb60b1f64820611c18b7a919057cca2f691c66767cee908f6863a9ebb9f50312d13c780a235df6ce465ffd94805ca9284bd5e74d796b0221075735b8d32da8c2a79e0a6e8adb83d07a590647a801089e44de1d16389653b81149932459f98b25d7bedaf010163da73558684199cec9e87cff04d49514307414a0d113f8c38252008b49279d659191cd0bbf78809ab25d6e2b2ac0ca67131fedff97daf3cb91a64c72853f3052c72b860def16393bb529127b2ea08c3f27c7a4f9d0bec30511c8fca8be1217b3e5651dee9bea20761d2c84c4861360b055003b2995ea9b5a0e7cc88e611e549ddd17caa8e13ed6657ed4bf1dd85115ed07f9184c7aa423a83a3c97467fbb2743500ae7a63ae2eba549f53c41c7892ae23292a6b206aec2600e34b8307b9cea17dd6ef8c935c961fa1a3f87ad4d75a9949d01eaa2d83b2e27ca56065bc26319a32a1ecf9a63d96dde2c45f3ab90ccaf2509756aa19a0fa64f7a575b5236ea266cdb4e082904c1e68ee8ea6896621f866010c908f27323b98979300f2ad3ee247e938200713731c8c35d366370d9aa46204faf15dd5b3d640af7df2071feb2ca689c7b5cf1dca6ca722a2aa9f745732a7cfa64c13f61ad509da42f2b394ff43837b3e62da2c2a3df3c01e9ef3a1ed95a54d2d70c5dd630cca5df8e49943a7cd0aceee4336ab5cb98f3a39aa256652fcce9039b7fca8ad39d870889e236def0cc456de6fa764d6439b7d788e67c8d9865728c58289a38569ea62d02f4d52c8928441ce3baf6aac543887b3df2d5f06b63cc5bb583c798ac489dd1c0b612e930951a8a63d432f9a78de32a009ea0fab906d6ea08b08bdcca309d9dc5828af23b52b0ca9cff6d0bd563ede0914e98aca3fb90e6a80e34e9f16dbf0b1607fa705ae54b63806efa96c94753efd5c77a0d587e608f880252bbd48b1a6b20e7c82035cfa94b31b2e7e8cea5f22508ca97643f81a2a68f35a3fde2c1f236057ec9e06dcaad5208c64f3a9bb1c7a0e25e6a5e5703a4a49c79d4aea7dd30efc4ac8a7ad5d6374d646c70a4c386d5dad7f0d7f0ec543ab26a25530b83a12bfd81188c1b748df2e401f71320cb7739da43818ae4ce2fc17af82252f4b66e2e66b0e3b6a7d6914aca800f1477fe9508e93448ae650fba710af812240893f8f9a8686bc6c223e88ccc05ab766ad82b7f3345bfbea3ff682de3ec798c75d7ae33ff7ef7ebe46f14340ff345fdcd8928245e869c3568ca2f73d57ac3ceda54946391ba5d99d951be73b42e9413d4068f1f56614a041245eca69d1f2596c4e6ee124a9be7e40bbc95037a91925593fc6b1981b4d394567856d248af5fdf0aba04206f2af43653b5a36008f8ff0608bb4a3618ffb2d54818dd45cee4d6921c879f9315df82244af1903d9ab42bd069cd5e33fdabc077003bbaa91c85ced50fc0b5f7618eb5b2404b0ac9ff939b5d4f7479029761b10f94adc321a88078b10cefe45f77908d3bca369d9896bb6e9304c3123bfdc7c8b41e8c17b58f194ab4760ba074b7d38de63de4da40106dcd3c1712ee67a12cacfe830623820943fcc6f3c9f973f7b432d98a66063c080471b15a4613ab9f7a0a9aedb3483d56aea1722798daa19f86ef3d20bf21857191152eaf908f9c676847ee0ab56a50f6ed0cb026dca27c7b60f52787e5b82c5b91b4f2dc2a09ce6b00d22da80e2e7960d0c55821c041698ee8487d9987c3197b8b5240975c836270e48c5b000fa07d438e74764e0eb6c850ced890d03b0b9c44eaf9a94f6eb77eb780fcb6e80b45edf0c96163965f4ab60bf421b6b69e2786b6a0cb866d8e67858995404f1d39ab7be274254463fa0f960ec17cc5e2cf86f5ed4c93d27dbb60b534d5589919e0e0828adf7c3b6d0ff2297be1accd9519796a32a17f4e524603a6cdc7750abec3942af8dcbbc789b958ec15051c3481abab31eb4c30253eb6ff0fe62b277e6613723826c08c5a1a67211a81700a9e2c4d4cdc261a148a73d11b91cc53e3da98a9e91b5816edf3ff531f1910ce17ca48f03d7b0a62dd2afb87621b603804e29ede3728df923e06ccdb9c381658e8d882375352ba5c3829480950d505abd5b1a569bf1a8b2ca40c6e742d69f82d8d1760bcd274c1fb38e2045773711c5d3106fde7c63f22ec114d93baad859bd3f0061ea35b29089e796c28509fb878070eb0c0f81335a1484b788321df64c20de84bfce6f3da18767d173bc28b1194d754d9d2d4eb042299862cd8e448d723a1ef6f5ea3bb2023fbc30223f0658cbdc9ee77c6dc63a900490ab3083cb031bb7ecf718d0a89c1542253959e83e959f24d810aec4611f6adafad2642e18b969468d94a8270e9f2c6a8134a112422b3514a14c9aca351d94de06849a57fdb3dac8ce0f5b6435df4176b84ef181847b1a5be63efb832d3cb29013bce68e32d6565c3707de79e31e1ae30a7f0c96c54d7083fa424cfd2a33d68fde3e43d1a00043a915ff4315f1a0e4a42e8b2edc084eccdd3577f4f727710a0cd50d5d36b519d79ff0543f6c578e9e74fc1e0c906063b602b5972069a0ca9237b186d23a19c2fd034125e6e0782fb4b2a103ca0220bb2e004d815504b4eb72897066ca559bc268f6e12a632ee46141ab411c59eedbd7d83d0cfa707f339e83cf5251ae6ab6b3b4c06772efa844e1873685309a15a2962ad31254f83b0f1c535a2e8ee36e153772d4f9273a5518135f116316a82991a5fca7f3cade9e87ad1d5aa7bc6580a43c181d654932cea986c30c5e5c738e47edde6fcda98eba0f2c5ea4d3fa4367f39f2c71f5307c12b9fcaa09c964a68eff1fc1307aaf7bb771f97af720f726685058220a715d3b788861ee483552cb62207135097e251342eecb0242fdf9e7f9e3c0c641f7df2feb95b8ac72c71dde5dcb3364520ca596d2623cc6d62f19049eaff9aed31cbf83afe4830c5645528ad18818b0f41b06f4b78aab56c0eae28dc838ba3e11564d84f983ffd8b441a55b75877934ab944844a97dce5978f85c78b6659c6e8f8b09c679c08558f9ab6dbbc62cde58ac072e4434175e39f46ebd1eef67fff2e50b3d3d8d63593c93a49f9309495b1a550fa19c5e872ff94b950b647abd5f3c20cbdc60ec20a3e7a5a9707d31e87e31e83b1a54f1efece12ba300a6ae0e1e36d6646a3da5feb8c7d07b8ee09e59dae45c51a00b7881e1a1605505d66729d1dcc990dde5f2e9b070391fa5508a788a0180ce050ec0369819b317a6b89e3a69444ec5e359f8ff2f196fc73da17ad9508d16b53f35a323133f7b9b288c345760b6c9dd7f933b6b4c00480c57b586bfde23dea68e3a81ad3acfa0d3f3e9de19a301e352020e12106e907c7f4e644d53da9706311f009c5ccd9b6ddf59fe4424025dfb334944e8e5078e15bff11bf217f7324463c669e1fb8542f4da0a53fec3e8911ef9308c99ccebba934061c86a790ba0bdb30b4c85248aa919863b853227c50abb8e8533df8f86ed6b4a45139e31c173c5c535888ae0bdf475540b1dc26471ebfad9204f9964918821046c3f4493f6455fd89a617e36bcc63c86be4f19380a6db3463e278e6a0941c948f1d2f863084133d7c2eb0cfc799ae86bb56d6c0b543b1b28cdfb2e5e9366d7c1f130ad9d584204dc592ff458096dcbfb867acc897fe41cdb342a70fedb92eeeb0803576b2db5e26b2ca83e23a6bb0718dab5b33b1dc4b9bf799e9030107141aa199905308dca58c9cd0a57fb539d05c4d050123949264b28217e373ab833bda228fa3b96130271763c89c3d35e0e6f1a2a16fc0b6536b16dd8997500b590cec5bf8af39ee13c6b49b15361564eedba5cd6b8365e9c823c01b0079526e603115060bd53c8ec357c4305b39ca774ffd36d9d69b5b2ad473171b5481b5fc7bb8c01f1690a70ac12c7bafe466bedcd7b65f0e8693e3905da6c6b9847566d3a8109ca6d805f5429521e18578ed838cd06535fee85b24bf2002394509547f8ee4fa8f397a15e8348f158fdfea03691050e964d7ffc627b785d1b35a4ebdd146f6b83ce61977ecbe18048c75a75dbe575e560a80c24a12167bd8b5aed337cb00c352a7994784ae9fae2a7791e1acafc1f0222797be4c8c87125e3edaeb4df320a656a6bccd7b6e2889425e4876e085e0c3d8e22436f1689fe448d4506374bfef5d00fcd289c65f01605d07333a8de1e6ddd6e9101b716797fcbea6af384f117a573f00b384e0a137d771cac207a5839483889d1d42698526864a12da312939e8f36521ce1b67419e596eaf8f66f8403e194c4c924aa1c3c3225b577ef2d771e35221205b61e7106dc39cd66d75466819866c4183036e2badcf5a008465618e866f0cd176c6babe53a6fb519ca95c6e151971c7f76a0e901158ef184cadadf75b4f3c1b9f5492ea25d0481ae0c8deda475692bce73adcaba1e06e18745cde5960de6c9729243536de5203d8a14c296bf14ef9e6045d7370e8a5b1bc7e8981d8d91a5b1eb91f8bb6573d77aaa73a709528432aabe8ef31f3bed5fda430c885bb98277b56799d721cb0cad208671dfc867861ad18574cacda956d7de4cec515731264a1a41ae0d18d0f7e6bcaa6dda4100feb9c07ba4c208e699e0b300acf9c3e4376c791dd8f195a7abbba4542a371e5ed21bd9834de688c3e673fcc8163135ea888e8a9f1fd65d80d7b379ffebfec8db8dd6e13b7e508aa6f4834c563032100cfb4c93835df7ed79d12c6425ca3a1944e71626247ca79e23602a57f1b093bcfb8590ef5857d540e3537d064818c942a3d579ea22f40384ea4feccc1df651f0d4934c6445e613538e09bcf559c1c387013bbc36896c4cbd8a80aa3619bd8be94b42728a3157abfc4e6802a073d20b54642154c5b5e1a57e7d8b593e8220a29d91416110fbc173d5c38dbb953219aa6ea3743d4f81666921e652ed2560e61834d357d407c3b828788b7766faf43905bca0daaa85d27931cf751238b57744cda64f9d5c2774d8a7feed43101b803f5ce25bc89a4fec310081f8aab00f2f986f5bdac5e018acff5aa97a9ae69e645685d34903feab16fe5eb3e25d6f8ee0063ba908741e8a3593d029db05ce32c89e8a557609fb3c473137c92a677ae2418a46a5c04474880a69e23d35d71c5ccbd3114a212f147a5b39439e7db4a8c560ba8e386ab7555623895e7915322e9ad1403f41b1ef1c427d3d1181169fac73a010c2ba0a5f183a4041934f54401fca4b64e591e89ed76a4530ed9be1372a48302a3a1035dc90454c30812c1b6bf92558aa56b7be3a3a9264080e231f694c4bdd88b343dc0580e08a7884666b5c0182886e580b4e3dc36b3043fb1da740ddacb1560abba4262ff3200a68717d27c40cd05566bdfb374ca787d3d9569f9840b176e21674ad4c60900790ed0d2526d0159e93db5a67226df255d549136f982a8236aaee3451046aa6530e9e8c95f7d4a68e711d58028dd2dd4ed964fdfeb574d625872f14660ffd7586d07d79d7f200e8a0aa8b026f93b9a4b3a6e9d9bbdf14a7d4bd2d7995cbfaf88da1dc50f990fb961177d89234dc71f45043d3b1a2324900a1556ad229c97258d7c60fec07338fb349e9776325698881142985505553799e04fdc0afaed87335fcfc9ba5818502b86fede5ba96f0c1dcfc4ce346c12e32442c16e830727a3747ba7697b1dd8ce4e2cf1abc8098e9715749a2ea159386de807674ec8198b62fe41115aad4da3bdad1a0228cbbe1b10dbd8df91242b65bf934a387f019d9c15942b65898ca291076e6c33b2b0ee8d886d9c65ae75518b6f552c84f41b309d3739574b9ec27f4fe0b0d722158db89675ef703ec11ac57b71889d261fb3d4a5885e2d3f7016a5f2ee015329a97b1709bcae932587ef8d98901e71e5b52d105a461d2e79f2469850cd4c76b4ae82ecdcd41fe58786232b96e9783b6178bc3208ffda358641b71287f7e4c09b7834716683651dd1fb949aae870ea1104395cea97b4eb876c2867d109ae31f16e1347ec5e55d01c67ea32cb46e05a6d7695581787b8584a688ca8b476fe1c59514bb13e6191659bdfd6b86fe90fc2a1bd029d7b8dbfe003ea9fd29f94df2de7b1b7caa79798283e712c1e5e589bde90a3a66aa40188b765bd556b5a506202004b3155036914a1d658e76d2a91c867072f0ac9235bc01a35bae410138f49e4dde3ebe717ac81fe7a60967f3f1987343942444db0f957e4d4358ed97649ee889108c6506bab5f39a823c58b01a1a1be8b2b979e5d944d1c80cc411000a6f8a86b6b65a4668fa6c1edb14c27247de8bd230fa2a94b02556fc0988bc77a15d603b6283ace3fd3b6dfd6d195947051044658a6c6f2a1f3a5c5ad539f767d00fe694a156ffdb85fcff379d21fa27fecd200e2985b3df97a062dde554a1828c757e40b6555a082bfe312197663e30a9f819b9c6ec79d3909b3a485954e7eeb83ac1880d927412f5ca6772851b4911d6169da0458e77638460340c01646d96c0d8b04435c7fb564c95eb8d34e522b6b402515c3d3f7619607ed9854e76147496b5cad536960bba0dc17dc9729f28db6afc4408f57adfe9e67a2e13234fe94b2ac46571d634512e402e9b69db6fbf07ddf5b5898410c038542d57e655e52d8727bb9b62eb6770912999ef044b80837f891e5117fe4469e419d25efb0d15a29b24a7e8ece7d1eb70dc2410ccef305bb6065c45938e2f6e37aad0f230928e13dc6ca012e7f216583506c6a7511c518c17a90b941405753f968626272220d3637ef5b2ddc875f6c43467d56a31c1cc6836ec31191180c70613a2ad9cb97d131d78456f7b8ab9673387388dc6b04ba41403cdb23708185f151b5afdd49591f4888d2c70dbd5c52f73a7ea1ef1e8230b3f4fc85bd84e1979d90600e02e49cd4a2fa83d0a4da70221c5e5b21bb627ee8b1da4b15b36af4d02f671c42f6613b348c19dd3bc3cd6ffb2758dcb8df6e7de8b50ed6bd793403457444023a0ea16913f3d628ca63ab4f95ce11677821c7b83ec90d59bfe5ecb2b9675eb6026845e8231a24278962b526c1c80065d355f14daa669964742eca3b858bbd7129ca40d76e3be64e96ad965f8db11a7433fe69df6a84a8c8fb270383e96fcfea25cc39335bd0e584d4dd7c67ac23883306ebc5f2e0defe6a9cd31778c23d27153f9bce2bf7f5e1abdb5883d0a53f8027aaca2eee8cbe4617a1530beb6d57f7fd0f39aa2096adce6672620fbdb2755919c8c71b0e7673454e0715a1fdacfccdbffdb4a059dcbded02c98dba638983250ae65a50a329097d0ca6c799352c1d5280a6a6f63f91533f45d0eee557f7098fe7eea3ec948aff810410e2b8e3f408a8f46b610445dd70e920518adc3163e40df061f134f51075314e23c7f20916453cf6c05a51411c79a80db732fc15b65735cb71507f487e9485146218195b4f5428944e9aa6eea2762cc58ccaa884586b1eff1a080958b7bbb474ae502cbe3b88fdae52632a4a9ab9cecb6881bef1de89adf5235ec48cfd7410e2e0ad71cc7010d904a65131633dad9401db79e6cc4d0337dfd1597c48d0a8b411656c3839acd40f0a50f76977cb550815eb57fa918978e090035a8ea656c5db0502a5e5d13270d6d599ee41cd524157a99c4570e9d757203d3a37f8095218cd4def33e1d07765023e5c38d0fa13f3be32627f4d61c05405e82856f5644c4f32154bbf7693c53c9a28074b84c55e0de93b9fa285f7844406678880c419232128ff64ab2bfc793a14c97b87f8a627bb9d91dc8e27e4cfe12a64e7c071a61d6851e60d49766b9c896540b0843b4e968a6467c624bc12515cfd1f645a7b38dc5f4dd9ace65567efd7456a8e5b0850c5c86a65abc7f5a290c3f04a86bbf2fb81c5da1ade316427eacf93239b27a76f89ebca7db71a4b07c0fd75b18a4768bf3dcd87398474f6f52440f6d1d9c47eac9d989bd4afe96d6323b4b1f86a83132957fb0e7992fb3944a739d739f391c7be3b817f0ed9df4ab40d92d8f1775eaea77013160ff5dd8f528cb5653cb89ada1415816c6a4808f4d83a983e341aede010c9cee7ce7cee2b16058afe4b3b9e142866e43da2b58d9866efb56be9f340a5a7a3d8e2f217c1beffea1f9567605449db43b428c56899506acd4c4f288ac1c0c8ca2a2d7bc5a03abdd59241886ab658748776b04149e5f5780e496847006e4e1980c7b0557ae4a3d92e70a642ff1a322e4f8157f8838e784e7d419964078ccfb8bb7003477e62dfb64ffaf9167be4f8da8ad16ac439f7c410fc7414deafd9d2538cbf9d347a5c7ca1f3302dd17023c1108040f1a929a3baf777313b5e7e90faa0e8d8ad24c3b4a2a36a9e5026ecedc9c30ed38f442b0b8b6439ff6d0ff402c686e48441ceb529e0cf57aca10510604a1d4e061e46dcdc4bf958aeb615af2383f095e794bade3f25f5599f3b0562f5002e433d52c92006da51ea740d1ab7dff65ed835da7e08d7d8a25a626ecd013b42b28b8aef6b7344858ffc222ac3995e2ea4774cc3de02cbc7e2a14f7580ef393987b7ddaec4726c3c423d39146cb87b0675e5eebda07e2361078ffd90051304c2b0383dcd7318db3a9df0b476e06e5f595b17fa660f28dd4a7d0d200376840e7914307d104beb9a4aa4e1ea6a63de9ebb826e5220480236c72862b737e356d36965b8726b1b79b587b7424880be96ff542f133ecb4a6f1f50a18ad5e08ebbe2a069ddee6ddd33ebc5ae1429d1050c4cb6fbd9e122c21f120b5be40a628e662d3afcc507356b4a16006f9240d1cd63bde06e0e72eae3a7722349f519dc651c3195920a81abd7f812eb2d16e35afc7740d60522a01576e92ebc99054631137be8cbb6f17063eb12f9d416cf4dd6926a20055d636727c9991827187982604a92d00228c88c3ea80501928551f78093c1039fe80961817bb4c3d91d53afdc71d6078a39c40a0de227a4bb322b1d6ff3965667feda4a4b593095ce5960ceb4dceee8bc1adbf2ae5cc73959ee82209a242734b307265fe433c389182d5da4f1bd5b5ddbf00a747c4101468e462391c7f19dcb280180ab089ef3aa8a54a69e6fadf0a643610fe4f51cdb337ae348131f5ad7c6af608d2af5ecef311c905b2db04886bacb218cad24d54484dc6ac461ae93fb953ffa15c89ebdeda17f1fb035dbada0440fcd0b3fa5a4e3d2b7cda932c49d2ff97454dc64ebaadbd0e1353bb4e335b9821531de50be38e75e716bf5586e7abc688cddc4fa74ac27f43ea2663ba0ef6626b656423d26c200787dd4f3c3c74a72ccbcdb3b57d789adc7dd1ba0e7bb2065a257859e65c6b5f92b103cc28541c2bb6a389c4b1519730883bc4bf03f39e8316d9c35f278a710ffb972b5f1b2812a2a1db14e210ba0f70f4e2d7324bfd3a4ad2d04b152ce39aefe201b102e18c78a315c72bcf49af91792e98865968c7d14ff62ded0d4d3e110c2054f8cc892766d1dcfead41ff09b2548bc512ab2f34ca13fb132686f77088011690d0f9e998cc17ea664dda113ab849ebbb246b89e0899cfb56bb80b11c219e46377f09f4944714ee9b1a913894d9fdecfe91fe1f8f8b027aba8ab565b16c4d9fb9ac20e6c5e2dd83dffacd9843b83ef48d3a705f89d241de922d50f429888c6a5e1dd42cccf4d3e9845101de64b66037338620654baeec8bf5a8760f9abf2f70033ca23987915f2291334feeb9e823d32364440088f10b974f71f36216a6fc31f2e86402e37c5a85300ed833e17b615c8360867670e91eaca9f809ad663dbe413340b2c71a30c46a38dda94e3161fa7b2cd6861c5b2e09dc51fd6ad950c2b7dc726bb9ec2ab67dcedb011265ff2d052413c2ca94a571016f239db4f47c9928bc836ac69ab5629a141b6c295790507707abce2f86d8ddeb3db15d363ab3f69c3f1819aa9f22cc9417bc24639d88c21d043dde0baca4493fdfe99fee482bf491c6389fa2c9bf44d4d88691f94a01f00ec9d45082980b1bd8d306a31ead6bdba6a93b6f2795df50a558a1b07ae4803f8c95e56252d35c73fc4ef593f39d3aecf2981d6e7ee73d9ec00e77335f358a31f50cc7f480f99f44f4a2b49de88094e34965edcfaa080746f2838dfe8fb0cc3d314ea5f98a3102d9f691dbd45abb8a7930df2bf6aef3dfb255d495a4af8f5b8cfe89febada5a89c7cff997160ccf3ecc83e53709a5f4346a1346e576a5eff1c8e36d4b72e60f51b598272fc2b8e0f10c266a7f964b8ebdf582d454668816f81abcca3f6a1380e581b8a212ae062f1e90b6cda77516d3976dba3b517670f34cf58269a7eb5aff0f9df24e939ce1c578710f9c4c3ed349b26a2e6dd0c36da2c5195f1549b7293e1011d4723c1db38858b0da1274c21ca0bfead8bf11f27ec45aa88a6424f771c4d44acf347cd816ee1825f8533ec0f7833cefd1991d71b6b8390e235e9eecc85848a7b90c2ff389d0eec1cd1e68daf4ce7180b94a2301c7a089f740b83893fcecf6e61e490b0c51b30d16f30f90b56951588adec79975ab754b1bfd7d4999b298c68924ea3e59e4fdf0a8ba5d3638aa84eea96c54fb87d047a7dc79457864bd306f0fd7a226fbe834ff023342394021160d7633f32e07a7006733f1bb92b6d6cd59ee9fadbc13932a48d77ad19afbf79c4473523426d5c15ffc4435121606d33a6cd8f7ae4db36828bae68597c1265bdcdc9123e4807a4f248a3225fbd7e82fb9b9b49b27e108d09fa417407988b6489cdd90e194a99a72f864adcbe519696718f3a5c70706838e869580607723c199931f78c392a0b34f2a509501a7278597ca04d3e1e77e88d6b9e5c7b8b16aaed92d49791b7399427fd31e497225f794a754c67e48ca76b9b66b0501ceed8942439fcfba37d2fcbbb5b37bf9e6d321f4a3bcc19686ce4595711f0ed4784162d6e0d25de89284c18f2216eb2135cec48a6e81dd7ed2293078dff6b21042e74f1128bb123d09c16a9a099d00cdd962fbfd0685bcb2db54191307c98bd313544a72ec4a3f0e9299c36bcf459de3951362f25b91fd8314f873db668e6b4a447126816e3cbcdf7b07b75a38365951b6e346b854a3be239bd08c5c90530b85673169c6db4755f743baff725e4bd3bcfed3766e1e60cd56b2e6aad7b50a7327a41ac71dc1a92bc138583eb7bc3fabeb4d53c3bfce3b0771fd20ecc37aa0905ac255926744426cb409c5afe531e38b4a3386075844b41ee3f0d9eeb09f696e4d079fc178c1bdb4e63b12deaa364bdfe26f383bf1b2dd7ad107a488ec5c47ea3caac091d1116ec02ff07e803eb35928f4355a5a16876d5f70fe1135f1c0482f9b43151b68f1589091f4cfb77be4b1372dd1807519b3851171be481cebb31c740625a144426edb113b4a0baacd0be854dd105b7790f9edabf18ff1a719c7f8ae17c75f84f839ea3e4eba945e3888ba2e9f801062cf5c5fe6105a573f18b606ea2c35051aad05be1729d8b71a74452fd826cb2ea7cd487028cedfb03cf44d3cec8bda9a445d68aeded453388d9c046f4d11bb42897ae321ad5d55a834df17b9e458c5124215991a8ed445aecc2660e9bfa60cd229b2540dc8a9349291173fb6b407caa534b83e8b247f0ee31d8d1d3e81709533e4fc9d70afe126546fb09d9229d36fc7e4382fa652f67d1ed2d2ddae2d8dfba4e3b096f5730a0328c09ea816f908cb572f63197f23032504eef6c16fec7f68ed17d5dceb31c41db20a2ff7e7a0373f1204281429cc3c4a219062bf16abfcd2d0fe556aaa7af996a2448b2c4029859adbb60569c8873ae93b5018d76a29fbd4f774f2e396050ec29ddc931729c8629fa02d4bf03b612a43433cc73d95bdb4382b6cbf0f4ead525879f2a7266a5a2b48c727dbebc1e42d09615daacbc53e6e7a02b2c977e2c1078ea6a5431af926ee66ed98efff77a88eb4ceb7f57fcac04638b9f7f663eb122e70f763d4a8723fa156db8db135bb7a470f34705c88df1303822b14bc79fef4429143dd962baaf34896b5bf10160e62574cc6114612b70d41761b3aa4becab6750c496e147477a15047a6eb941a1b2dda4bd126f7e3531a1391f1185cd131b1a43f9340ca3ea5a8fe7dd92a9a510f9f7098499dd060d7cea8c9dadda39a619654a4189e98ddc378980ba0dc8971a60ee2f9d5e11e4f1da152a4386f31ab93cabe9e0982bfb9ee5d6bcff6f62f000b2132128159b9ae668e97ee28bc69f5c61d58ca1b04835da40fd576debb7cf6c9a624cff5030bdb392fee95cbac0ec546a8cb061bd01ee5267d032902be35b44545e4e874f16e7ddb5fa59bd0f816d7c752c5126a5a582089b51b08895c9af509ba242345971ecaefdc6899541aa7daf91eda02691e799de03f2f5ecff8d27c8e57a747d2e6c90c461398829601bf7086263256e514ddf4d6b61d5eeed5b6a7f7be014ecde53b397b3877d17e1d43f62a9a53a376d998b79ef693d33c1f62a653b2a110db34715b390e373b2b37ed30e5ec6c35f0feb68cf0d81ecd9b32a9610b9ff3177337f494cd37b657bc42eb2e94099b2f2fcd71b4cd7e506c1266bc96619936a3596b93e5ce256a119028113f2b95ff6bdef863a30158e3d051878fb7e7277b2f1a4b64c8c00d58b19dc71e6f7613070b64796de964614f0bd230757386e47c167a81a472f37d6e66ba016eddaab116df2c897cf8af7223dcadbeb7ff14a487769e9087ed2374f567c118a5cbc4bf67f9018d4145e5e1b7d1f35a16e9bcd957e32bd690409126f9dc202e25fe14b51bc3bfbee04cc0bab1fe8e5dcd3764e9289ee3b271aefdc6ba2a5ecf4a90ab176cc11077c6ea45c46f32dc7e8b6ea7c36d467c2c0dace023efaaf4b56232613a700dcbf371b5d8e9a090266c51857e20d532e4a93c42fbd4ee7c90a139070c1c1df5d8017824ee9b221cfac64b38dc0eb7ac2e638cb42360b5edfb6e2af51a4b2128cd948ffa490c9b5298fad874c46d5aa74aa6f74910274e6ef89aad036edfa801dacf4d5a8b008fb0781527299df94e7549f91ce5c357d3de53e124e81ab359609f34450bd4cc8307da2d5395fff5e90001525020351c681779576d36b8c79831d0f067dfaec7edf7219fd908a6e86cd0cdf1ec3fd2f1432bf4cc00aafd7588ddf16f7ee45875eeed5b5022799c9404b77c50cea74ed1eeade91fffd55e5cdd59218cd3b5959b8a2f3bc987b85897c4749980c7e6a011fba7beb062b46e489d3e5074e8f9ea225c74883c527e1f903895556071b746d03f449f7ec065ac545740d77aed6c0e8ff90965f828c6cf404028292f65cf3606788d11f2584ae4cbfdc924b93212fca9abef8ef1e45f00f6ebec0aab364713e61f3f2f5d6823ce55bb7f54ac0ee892efbcdead6ecfe967ffffeda25a33395367dee8b24189b3ec5dd440be637f4de5125b5c72c1dd6ec8252cc497068208659326d9cb38384a8722aac1dc791706cd7418c7c6d28d04c66e6140a06e6a3663f71b6f5b0905dadd3970d4ddd0422e667f8e1fc2290991ddf3b69bada7bff8d6dfcdd7b6c6b1f18a9e46c20ed7575b0915af9cfa80c88fdff408da7bc8e58e590b5d92389627724033033e7485a96974ff95add2a7ed731e122c88e5454eda364a1958526d8cfc58d618dd2d9abdeabdcd6840d1abb702161f109e30ca10e63c8bced88fd1643002a7bac8373e9d9895e7027e35692667a6b9ff2d1d702d30efd60c44d833c6243c90ee7bc751735f8b4262a3261de35fcbe82db5ebafd2ae57a6724d519e2ee9cbf65ca7ba15acf15b355fbe91139d9ad9fabda08ec914eb9219fc422e68e60a18e67d155d9df45e8e9c5f07aa0697328a1e0b7cb1bb08234de51c890688d8610a326861a166beb17540018f9ecb6c7e5982474a511bd063e9a8547062f444151b8a7c972aa5f92456948e2c500e14336f1ffb3542458fc619a56d80e5e946e0a01e565728b6808800c4de3250aa75c4fb979bee80694165bb410d84dbd807b59f66103c44e27b6d074454552df4c3efdb2d76eb81fb8ab2b32e32d25d789859aa3cc900bd1cb13cb816b486f9511fa5726ca89ed12b17b3db5ddea970cd351e713cd6514c81ff5b4e7b95990c2adb6221c859f9d42494a8295bf227acc95b6cd65f2d1fe144cc951bfa234b04b48cb85052063d35534cfff4811013509a757eee443c761328a0dda5306094b76cc8d2ab362c7eb284c1620a013d54a243d07105e56232bf605522c0d8f5c79c9c8c28683404316d5f2ef8584df8ba47353f300b9c4f3b14a9dcb9e2206f14b506868401f9c80b3817e091942e429e338f0e0f5ffb9728ea5647ad578b86b6dbf02c856edb2d064a45ae7c4bff7e694e62df2d6819b17dc7b278cc5b746303bc78e64167765a42cb597946ed851624234fab4d92fcf3b61e5cc4b7bc0f543e93b6e97974877c1550a3ec291bd2977d7edc9d77ad83ac386fa76ebf4c55fb34c829692c70a3ae0eb20368d3dbb323dbb02ae07edcb2d2d86fb7c35e9ebdcd8e65747459cdc1a14d098c89950cbd81e66c2f4cdc59970d657b37c2a4ee3d5d9e4cfe6692e63224565210730f91ac8192175acfe74b80b2b7be938ebf207fb7c248956b705fc3bcf24795f590008b555958c314f1b8d1e583c6298df0c68e19300ae5b638c6c446729ccf099a7d222d599a48e66b18a56126160833a1fa2ec32e88b48e1909a0808ca8c11ddc027d541bd2293d8d12d835efa3e606156ae73cdd10823c68efb24864089dac5db5d1fb911f847085e5671663dd7beb0db0342cb537e0887f6a0abbac3b09c8f6a25618cab123e703f2b7f934882afa428815b1ce5093ba3b7c881b366bff15e4e95682323686039b552c2b02e498a5294131f9436225696685ed8f87efa6b22752fd1e37ea9f9e19ff21fcdec409d6baba9514bd3363ffd83ed94dda2e7c4b5b835a7c09af5e79dd323d295c8279d51ba400c0b90824cb196ba5555088d5bcfbde48013499b459347205ca88ad66194631717d1836d33a5f4f9fd6e030273352006a76ed5c513ffaa2a62cbb6d33d188ab0618e59c9899ff79cb932786bdb02785442d86784fbe3ccea17a07460a7ce79e19ef3f1b8c8c74130f1e86ddb265d1bbb4498f899e5e93dbf3e89185df2b864e5b31ba76ef3f157b2aadf5f91e2691467ff5c4c1bcdcf6986ae482494296ef80c3f0929351810b094e34704b668e882971f67f0c1347c6fb8051619a55d45f0c85d83b76bae88ce76966f55b55e5ad54c5ab2cfa1b54a23836ca92032a27da8f999885294aa7e61387d78c3214bdcc616edd6699e37129fbacd966ac19d1e73ecd996731761d4625d4e5597d901659e47efe1172276f6e82964e2d5b8327539f37a7103a607f1b7834ef7d88e3cf5c4cd4e918cdcb1d71456d347d96087c42ba84540ffd384e757839e9d729dd0fdc15f421f1c81a8133747319c8b5d462c9612762ce984c0fcd431ea397b72f36908214d54f9c77bd9a0f093361f8b72c766fe07883e5a47c8dbd366b1b3a2f1f30eab0fd0d5e93bd26a482de3e639ac8f4a446531308732c921c660d04ea512b8f958e32723cbdcf24f9eab68270dea9210fa85b740e91c26a06b40ed94ec163bde5182d9e7f72a86b101731944d60aeb023c95658a1ef6e3e0c6b1bd116bda7037d929be6bcf2493c252a034e8a0155ede19204b62561907db65c0919592f4482feb5d02d1227a3460ba669bd90eb484e0a94e79f4b09543039784218d13a2144a6f53f38c437a5af3723758c68228217631542454b55bbab8247522fafed756422fb0f9e0cee7363f31df01755670e7af8a4e5ad6b23faf8447437a9d80ba49002de0c4d6cc6f24266b5fc4efdced3e95145683e3fca2470bef8dc4fb0a8f9b8093aded3a25cd53c06876160078cfe3d0e0209300bf37d39b64114e676cae0516f581276ba3bea8e75560f439d645f5a7ff41f95bd47e0399f0126dba98a8acb56c50e74a7c0045c99a2109333cfb4e7fa09a71737c9013b17e768555777fff308ab0351dd2db54c4a73feb8ff42bc1005bc634dc993b2ed8a1ad6b936e33706c4132b2fe124be5699fa2516fd9883ac62eb3a5c3e15d3be47e2084e75385721fb2aa44636b0666d50b9414d69ec9b008526bc9594c9a1927fa7eeb011107378b1e7beb0c7e1ca244abb1f79df83a0f8eac70f74b4399bfad6cb8770d6b45c6d6ce360fb0314e1275de55fa281bea36eb227bf477a2d7d9b677c2a326b13b45b6109fe3839fdb7aefac382403c2e05ba49f88d6f4e24c36493b0cd0e4c4f31ca89c8337f1a05af6c18b27a50bbb3a0ae8713f655af234d9ba8bd76be6c02c94940e12f434c8899701f9ad34deb481fdb64155a37abf8a8eeea9085e5883e2a64a369de2aef3d86a6faeb2ed5198991cc15e3f61cc6d5320abef7fea9e2f061db66cdd032ac56a1bea825628b3279db39a5bb9a6612c2e9f863ee8355dafe4a00d0aa283ece92172b739e6cc9b6ab46de8d985dd83fd8dee4fb193893b9ce09176b4dc503d91e2dab2ed73ed57a275737ceda34ea94481eba7a4467f43d2b7723de4e8cd5f126e9e23ec1223bc9420230e9b61f8f57bfc16f3538b60f4786c56be8125fe770b6e12ab463ede286dd3003ee17c97f505e7daac05a9abfd2055cee172364bc04f513efcbdfa408d60549fbf9ce16ddc4648e2755fe95ff26c708ad24a6eefec9153c322661c78ab70e778d2d86d1cf054da7b46119a52ca4f95672e433f0b8e94e8442d5ea9dc3617951078731daad20fa5dfa24ca4152ca2524b5c20c3964362fa80a206e7daf7c2e34dce3759196eaecf4ad47c3e45e6581bb2d99fbe7adeefd93e6d5b60bc7cf393c874644d0abfd61aa73e392c0e286190bf7e4ef6542d754d843fd2ae1cbc074e03c6b8bd701a844547fa7d42503d640db51a6bfd6ae638d38bc022381b7f54676a316cd7afc0aedc7b15193056cf96479c118f85dae999c99b58f2664e821cdfa9ce08c8be679abf5e01ee65a0920fa093b76e6f7b3293cd335733dd602805cd7284abe9f2f0ef6b17c2f8a083d25a7ca5de312100f4ed641cc4dc90091a313d5ccc1f217ba6b610de2b16d885a8f51b2c3cbe3210b509ff7d19b9c537537dd081b4b8a07826e15847ab730faae63b63c2889256d01e7402ecc5e96e7d4494cf11cad3f36a589711a27ac175d09da140956f1f7293163ba2798f25e27dd63d815ba665d3cacf4488472dc048faed7f40e6162a03097c08c6b0dc2addbbc88ae1d21c1d0ae48e4b2eeeec5264ea7c5459a2e12f019acd9632fa61c9a0c97b61d1ba2cd6747ce6ef3d113acb42c817fc2839f630db4d9454e6a0ffa34e26c0efb00cc993021a31defb783e2d9699c52425ca64ce567722552062d50874015368661d2311f1f6117e5460e30ada869a636f551355ebe2cf6e9a2586bd5576c5997074382f927a54f017f25b8545949f73c5d26e8efe17dbf5cc491ee7197735d39daea7d11d93a252d9833fad1af20adbfa72520612963f9ede6dc22b4fb1110b932c8f9325b6675452bead45bb902ac3cf835ed0eb44c294337991342ab332459e73eeb0f64548cd42c3ab1b9c97e37b253041de5c23d8e24011ce5c3f70e100fb115db5cc2346ed6553c35b91ae139dbf731cb0fb1e66ca17721ba892b40d45a25add763ec327f1231426b06b3f45ed9b84a881475d641cbbf2243ad34c0b233a6ca54c148fef709deb463d3064660f75474635e9c6f7bbdad815d49c3fcbad1b522438fbdca2a764fdc95175f6cfb8e30a0c3504e511402c5bc910f081ccb6f2b080b9b496c8addecc581a2b4e61b2edba715cf43192aae34112dde3d7766253df3538c75de7962b24fffcafeff2957cc73304f209c8e006ada7c294df54e720a097f1b3665725a481eeffb5a6745ca2b6faee63551c29236a0911e578baa77c4dad2c55505eb3209978531461d6102e7107f2e44a69f8f516b8e9cf60b30e13db0f85403f4b05c7584adef4ad5b467e19d6b518e3e8683a4a6dd4f4f7f788237c07188da250a5c0b1e485f9a6bf93bf1867db339ecd668f903defcfc22f2c0cfc499b11324e5e63e79b2f6611cf58d1ba93c0605bb90be981f5af01e2d87dbeb99387f2f205f31df608ce38184be363b163d2a9fbd0136b63199f5cd37c3fb25d418d005a221fed7f0c3d79df56f93f32389cadf7348efbcc989bf0de2d31c7679a7c0edaa88a5f2a0371875d11f11ef07d9363418b3f3712fc3e44afbdcf992b8a40a806f6342f020e67157d0537e2f49483bac91f3c80d7e55984ff5659e1a25d8d68dfa5c5346c86615492a6fc66e7763e83eeb86ca9587d157bc8dff832167a6b8b6f0628487aae0fef6a9edd36d687f053f0beef4f5c11ef1daf5e143e3108a573da8fb59a4140a056cb85ae97811a05e96e45d1b6d7bd21af0478565f3c84d2ec3d541cec850b4266ada7061c6a78f140160c406797f27928bcb09c044c3291bedf3943d6791a32f4ea45eb7a5f12a3a2d27313425921d2cb7a17ab62c9c4490a40f2573904a76cafdcbba0927220ccaec526c48c8bbab38f00a7f4833d4b9773905e228f280b74f563b0e92f588256f1dba006f6f7229e134a5841a5180b3705ceb2886d399af896653bd1be5f78001394a238e9f7d962e360f827bf10a7e91e82a21048918199e2470373cb05df551ec08e1331e519e2e3f9764f74159fff63d61f1296351a58acb9f04b2cfce24f35f3b3491ab915d5969bb80e6297dde075fdbae623baf7598fa3d2050186e0cf144cebe1740c7655f85462a829373912387298e188f2a0323f020e19e6c6cd114a81bb3bb5790fca5135530f472edaab413ee747417033de9b25c62e2d6114f7b20c2c5f67965fafc1813c5b2acf3e93459ea91c5eb640ab4ced41cbaf869f260e5cbcc52b65fdbf21c1b1cc4de73c01d17dab87c3e2ad9850766afeefed5ce36e2548cb38b345ea873b3c63a793bfbf7012edfee31b6b493e164734528df92bff08ff49e29cbb51590cf7f55bd3f912bb4d20889a9698de664a2ec0a42af60bc437f49d6b70a45abb48c54e92c4de5f053613d1d3f7fb07235d45d55d6ab76b8c851b769177aec0c9c5e3a0bcf1d86c2ec8eb6f8e84dbf96b9dcefb09dc97bdf25b652ec088e2c6ff1ac07934bc78a481048c091bd638ba93acdf2cad04ccd425471fba889b60fe3338314800abd04bcd65b797ed6415a6211a499ed2eb070f7c82695f97e00b944ae2609b92223afd729d3d759363e5a6179cb6ea14ce3fec5ef115386c3d96e85df93a5b0521838189fa2e12e271776de492708c98a1302adfaf672e59f9124b518d9dff91b78d25663fe584b9f3555ee3c33c424d095b3bd6820ee8e5ad1690e93a47f802b095d5f3710b3c9c31e18d9a5de68a78757d80520ad51bc5a90fcb9bf9087a70f0586ea8115804287644fa0146e71e189a7cc068f955cb6c40ce0213edad6ed6cbb474b9430b6583a7dc89e0dd30830b80b8b8642ab89990416dee2353a7ec1a33c291b2f2112493b46196eecf4ae4f67699f37a46a75163b459075404e6a88c331a863808a2d1aca9bd4a54a83df5e2f9ac3faee6b6883021fda8caac85cf328cebc113f300fcc6d03e1d4e69e6aa51a908d590033e7fed05f3734bf164c5a757290e536ac19e14d16b2404a05b25ca2cd5b3957b87be62df7147862e246d792485dca7162ebb7ea54189f70298d516ffd55cf3b620699aedd4c0ef98cd84639083e7fa0a6572d84221e890597030bfa18871b77e436405f652f21d2bd61741c057a1561952ea604df90f36ef86d6f5e5049f6d3aec649efe379de0daa3688a098e8ac4a48e8b7feaaa2be61d83511d0e27ef8a5091d2a9c2f42918fa2ea1157ed2ca0983ee0a6ac9f33567628a4aeb17974ed4acb7dbdb99a3562ea2154445db68c6ce571bb50cef292ac6693e970f457e9b1300b1c8979163172f8b5b189892c40778ba6b6fbcaf5b656cb025eddbbfe19f473a65b069a0ce51858f11d86bbb827967f817ccc347db42bb86ec873542a6fd67a07092a9a019d467afd7908e447fe4f76f7ec2f94978e9ea923825aadddf9ecc86155122fd970de9a2faf53d972714237a69be46402234a828e57cd91d346709a2e53545461d1f8fe432470394ef42f808dd9afc3df2131b7b9916dc7ecbcc6db3fa26c16a18e75e6fdb95d9fc19dfbe19b11daee7355952168d38b3b0d5524ca8aef929fd90b5b3e9c86dc82768dacf2be5b8109679eb94e2a8e798d7e9f8bbcd26dec38d593b5530bfbf57f81d3da25e8f37e25b3fdc4a2f3be23fe1819c820566760ba627ad9fcc09e59f0c91d81d01552e4a0a82506f73d34a2c959dc1f25411ae4ca28356b4dc20c98d7887df7800fbc81d8c316c925dd6a582763f582e876bea9868d47c627a747a79f49afc4a8d795a58341b26e560665c6d47d80671694c55448e5a1a796d46df3ee5e1b328399db70bfdfb91913eeccd3cfe708ecf314df61ecaa3dbbb6ed0c9971b07207360994f9476d799825cb0d2899d4e4f84aa22a0e67e928bdd9eb510909b4d5046af32f72bde31af3d51a29f2f147cebe58b10bdbeb1da9614ac6127ecbb7bc31d41e664a3597e4507cb91b89966dd8f87c358738e82eb0a5fb703f2a41029beb9de01cf4808519f56ce27d9bad1180db5e2c5b2e5f1e57bb6fbef245c54dea907e3efc3f14f8872d268c1b5ff8a4aea46bf4acb62c8b78534e17c99632bbfbae5d9ceff3f359e82b8c627d67191b8a2116db2390f4e2f9e9b11f44a8258d64fc82c97533cb24cbca947a6c99bba67e843b3bdf3c0619476a98fb2baa61d1e00af2e7832bc01b981b9f588ab889634f38f32cb60a7262f490c13cdc6359b9160f3849d0fd2d04d0fcccc2fd036a3d4735da6f6a972ba7895d9c327434a4e00801407812d76c5eb7132531690fcca907b17471fba4cb6e94f6c0e17783d94747e426ff83cb640bfb3bde52b317ab35302e9ce96536a821af6c02771de90a6a6689aaad148587cc3ad47a45d290b7c4188e2f731c071d48d09a05a15c8765e1a661a929c51f71845f759e7c75955336afa2b797a4973fdc76b54d8230a7e57a11d7aafbc29dd43bcf78bf6699616ec872e348ee0325b89cef08e971658013ed1a8fa094d3f3a131c246d3324679c49412134ebc55152d099a6460bf6b952cc5e96c254599c473bbc7eb3d010d87804b4cc9176bd6d0b684530101238c2e68af0f59c2ee982c49817db66bbc2c61ba12caa7b57805e302677dc24652b3d59a73ccb2c0900535b09b9f1d89c09327f1cfba119f6bde1e65d7fcc6561c914b7c25eca35f58e54c8041e3b086dd26f6c9af215f626c6dbfec493fcabe93ac9a1b0d7f8f78c69bbe0576d09daea8c6e4f7f6fcb51a4daaaeb4d88c8223eb8717e71cf157315cc15c8d1ff9242ace5d5cb5cb7c23c3e2df1710ad8c04c670a3a5e5a656126c0095b5d4755b27b0caffb62df0919b4c037112de79baa3782f9005383ffe3d11b67735e4a93aac2f0504b189235909f40e71db04d629dd215e71577fb7f8a344e1f5502f2a1431ab41fa461748fac031cec9cc17b97d11af01c5b642030f2bc2b1af1b4c6eb128fe803dc313ff7a8cf2074e10f55b4dd1b793304993e7bda8e91de2190f4ded1a8f61250c6e237a54787107e611156929df606fc017a9f30b2a905ed878ad71952feb810403d9c41745dee0b04a3e02a5af07c7111bdc4da3028d40a0ed3f1dd8486741bbe271083c77fef31e0274603d48c0491524534e5eac9d03d46595698ac610020157ad95b4f05c6409890d93297ac1f40941ba7e0a5bcf80491ab39fb1a380a16c3c76ed348fe397506518cce2114df463a272164a41c8e4ec5d992173c9f32f7ef40d89ab1ac74feb121e8124cce9c32ee90fcf270357035c53668eb635c2ebae60875ce0c925afa73ace3c11a7ded03713e9c61a6431279ee3114649179dd003767cdb28cca044e99aea41619f994485cb0a0887a3dcdbbb24f2978e5b016ee41ab1dc5bd7d57db851e49560a2eea3e0b2b556446b1285bda56acd0e71ce81bb21c258d509edf6cd4d118cc5a4afa2715d3ebfbc4e9066e56990af735087c27b40ade5cb233e49267053cf6e088d79f521f5652614dce7e66d2f59b9fa089acbde30f580d28bbfd4a330feb9c00090e5991271d2cb1270d97f24a1e46c2ebd0518bca9eadb3029d450fccbc20e5d41e5efedfa2ddb5fa7fa061e48f0ca5ab2d5e17f27734526e3df205b562cc87c6cfae6681f5adc9b3e24ab2561f39961ac5cf1215ebf4a9e1ec63bd3afe4908e5097aac85ba2867885ffb99f838633955b60c8b5304c379bfb32b34e3806806169e25274e73e9788147216269d1fc29fdd2e28880a42501891d4e5000f05c4184d21dc5eb6c8f98426a4973357d99472e3441df9f27adbb0b574c80606eb7fd79539b3ea32f09112dfba40c1283e45e920f2da46ee00dc9135e26bfa5d38b10e6fa60c96a1d2b16df2f6a8d3a29cf0a54ef6b0e30950b8ef277f1c3bbe532f7f1cf9670edbb81a5f4d2d4b33dd2cdbf7197cc6a2be3a898f7476a98ec6c651c351e0cb7ee0140284fdd08ccf34c7e63c40ce31b8f04530fc16b7af9271fc4e47587c4af5eb287026d57041ef97718147677fd745b46e27b796e3954f7f190dacbdd73186b2cae9f073924ef367eaa0d3af2bc9823c2cf8a9bf20a36a9fc21a3ab69c5603e3457202765ffbb92a461e9734d488decae308fcea4e4f26688b6b811db2f5e4f812446feef32ec2c9fbcc5212e6ee4729529330e7037e6a7cb35245a49f78aca6793986869c67361d29c5bc19cff80db63bf2bb7ed4f5bd533f3c830e4268f51bbbd8fa3508bb1db3928dd4b5911eefa284350fb582ea264bac485d1e3965085084f8138a4999a72e8eee43d444ed4c9214e2aced6a353eb2d753b203d6ba7b6fca3e31748a21b6421568c9dd5b43d1827cad0c7f08aca93e1beb6b794433a90bec6e0168f847aa912c4f1a9215344ae48a274d6edd30925f87d4bc44509aff183a422245ccb7331fdf4b7782d0c908efbe1c810d87ec6f91253fed63d3d99bde693e93d14096dc693e4a2286e5553513d2d3dabb3b93070a23de2b6e1dc1e6ac56dc6fd9b00b8d0f0eb321765b741eeec8a6262e28b895d476ffb4134b83f5e9ec84d913926f2285b13f0cfb48c5a7e1d93bbc727623a14e1c101f1b7b2a9438d597dd3ad91727f633de412b1665470dea37601b3bcc271e12852031f74517dce07eb05cc5a20639f0e81e0ec6c05536257dfc751ebc3364217cb5210049c1cdfe4f90be10ef923c5a5785982587c081d634f8832a6010367fc3146151728ae89a03f3d93cb3d99100a87b31109bda5a08143dee4d735ba5fdd84d9938732862d42fb8d2fb12218b10047d555c4fdea4df7a409a6fffa93c24f5066e80078839526e1483a6c2e4fb58d7c645b565bfc434c54526e86fcecedb7c4dfc6b96a041189d861a951d08efd1ecd90310ef554979292b3766176fcdeeadd9d506d7a65a1e09b83a0327f6211cf02de153a423909e13fe47abe63db12d98a8a6b8d9a547f2163199bb90825f8ae6234e7669e1cc9596b295fcdb3f5485eedc7637e9ee578644189db0fec63b244919525c77f966a260ca74b3433a3cb6c9e488f625d60abd99744b570940352902c3380b03f373653cf171270cf1e9b7c1e5b07c3f42bdec27dadb81c71b96b387919465565a6d5831611acef95360482d0b7dc3298097d80efd3a51a939dff76e9afea95a338882cea1baa1f501e61bbcf8873b457894b7cc3c26aafba48bc929049095e9db4fc18f22287a0701c5822939f4e3bc430d6c6c3bce45d7ca1864169c0e30f9aa1ed839b0c17777b0a531ee807c716bdd3df357af1c4c656d670789e552feaf07f507df1df9d28fd4c2159300364558109aeb9113608a937a0621e144ec8f1e75331d8f25899fd177970a973d05763706f5cd32fb95cbd47c3711035b34392dc35a9f4be081a1e0d86225e943bb329b00bd3e071160e5f7893d53cad18c7e50f952b6c061634340cef48f6038ee2165fa2658a650d0f7da4e9f0a7b6b68b67339ec8884c6bae1a7799c0b96c8e4d99bbe270259f19c211e595cae5da8bb3aa7f0c66eb795cc9b61219ce8652831099f72c14236e0c5f65b238e83d89ea25c76c91e0a1ecbcf9a825d3167163a664de1fcce612e24f90d7b17edcfbdd3d8b120c29cf04a9cdc921676c56230ffe0153a2c2b7b308dde8906f2ea18fd8ccdd55fcd5cde20bb835ea27f506cadcede5e260e5ae5ee8592b6afc7a025ee784af4452af4a7145c5f5421203753a9e18a6f31c200706e5d5a30909ad092faf644e78bb130e0840277965711f38ebbdbcf1b3bf4e84a01c1f2e6bc8df7191edad8b0048ba1dea471f3c3f6f4179f1e4e38aa401bdd818cb834287efe7254cd287f3874231da3194179bdf1d444e8356d4c35713b32fde6abb2b9ad3d65f59cfb8aa2df1ceec61a1764f30764dcc2a8e4273e70f2ae91b305272b2c8cd6247e0ca17138e383d4064922748b1663218ca47ad11962ac28e64fa10b721fc02f6c10c504c51a39af99147ae81848cf102d746c0ad2a0c0742276dc4a1b805d5018f1c5087d983779f2dfe98af223cab02357f5b68b190671fc53b04890d8495018a3d110db0bc3709a0c97893535aa451d1e6f97ee87f7d70cc89454e4c4de4204f8ab338ed183cb2de7c2a0f7fb8d13d7b295578470fd108bd32ce35c4d1ff763fa44a0854ddc191ab8d4f08b8afd991b89a2ca5fa1bbfb9e42eec086b4b13ad2c43e354d62e21f7dea3c529d6dad309839df45dd0204f75d108c0a6b1049a30011e1edc7f0cfe70196fb9eb6cc33bbdc1438d799c30bb035f3886f68713be712737fe09c5ac694469a64283869c1ea9c9386c732f160307b8a49a54fbd973107fedd3f399c664ce46204bf51085e869ccda0c265c3a20b0841062752c054e409b06616f3eada5f68dd73b07a788e4f709cde2ab30c0e084d2df406bb7a6e29628f0930e26a41d6ce4f5f7e44010bbb0772afa904be6e8fc7fcedb5b616bbdb7c11a16ef2de707a3809c5b97f405949377531531d22c15f9e387eb7b6a74315e0408be6cc1bf1d2c427f224545a28c19d0d5e8e6dec7630f27521f38ca2e482130e30d5df47254f7ff7dad92ebf414f5e446ffcbdf36d03bf5f24b8a5d56d4b8ddc292177b9853b5d11d3675e7f3e8b86cbdab167d5d3a202ff755f41305ee142fa394132852d1f15e9de7a87bc8ae07637d6c2c818bb1f08f9688fa6551b952d2cf9643c0001a813b392c6085f720ef4915af8f9b69ec80bce8ed160ecad40c543cc8a5e2866eb488445999bc812423a5cbc40f2117c2c30881ab9a38aac188c0e27340b59e3e42fe52b386564b683e0838aed9f4eb648dabad8a531c696a290de0fc9839cf240c3205a5b04982d9eb5c824b67884b8ae4c8c56169a18812513212bacc756fe877a4ca4fac298a48be5df19fb8ebd7aab0d900deddfb915ae640904c9a2055b56b5d766896cf2b2ce7b9f00f717e86f1d7db2c9f519df28968e9b042de55d031368829c7972225bdd0ae8894edc88dfd70a0651bb945802808002036d042e3d1e4f863b40b359d27aef501af0dcdb703c28a0cc661097790fd0a5e583df92598854255e75dfd4cf35706fec52695552c0e1ff058a75ada5984051cc282f8f6116092fa156bbb4bca045f13c78a032213514c3c5a45b8506c0e57dcc0f2d20b0a47228425a7a5230fb8fa1cadccfdbff7138e089e2145584027410b3f846810614cd8ffadf844cd36f7cb774bb96de3758775c358bbbb3451374b3403f758fdd1561d9bf7d5e8bc354aa54f146987670ac9836d3be25e240215c5fd321f9a3e05c33143f6eabac4aaece8d9ed1d207696372885b55aa9e5fd9b81ea015c2b5a096f9e6d93359219fabdfa32ba58c7c5eaa3ebdf968514223e3820fef96bb8b7036f9032ea995785300b026f027ee1b820596baa11aac8c694b6633517ce317571594733594cefe13d268fc53c13dca71aa9e9e3878974bc3a705efa7459533e615fcee1f492b60ac395971c1c9c19871b9ff143457f826e87b25392c824874111d6437db16720e8602f4c436e3af9e1e39644035aa8d07270a4421f3eb5d6e76764ab38466929a8ba94259890bb856aa4ec7ed472f33b696017b898adcf0679088bc25782b4f1c4261588a33c782b851ddd0127ff5789ecdd583f4d7fe739544b598fb4be234821d3d86fd533a34c0f668baa3a65019263a5109ee59475d9337fb10bd653204f6f2b5afc5d631fadc87125a003150266262898997c5596209811f85e0a7d8c9f6994189879438fce29b7141ba5382513dd3664f0e01ab90c893125ca5d1dca1602907353f37273e853bc91ac63e75f4f84b9ac4e2b75fb0cea8b962ca01c38b60decdecccb2cddb7b159cfe2baaf8e796a2da01b140a7694e42e618c2b4c7aec4092cbe7eded942a5146df4add596b4442bd0df03276f4ab5004cced01ee370f40b65c47b97a4f00fb46b0dc09403ebfd0c2ece103353d26b0d94bcd3b448b450fdc9715184885af040f39ecc9bd59e5878f3ecc8428d1e782c9b2399f8bffb61d4eb1c21ea79c69912e54fc287af263ec6b64bffd07493a0f91d686e6cb5f15ad488a31aee7102c516564b392e10846c9fc18ca8cd4da046a0165e3d6c455602a1517d74c9cd72ef4463e045bfd9e847e8e57e061e1b3d549bdb9987f5b125c5faaf01578b52232730d09144a106e5c15de3f1973d1f92afe74bf88aec13ba29730dbb12ed9ab8069bc4853045b97acc982f2a728ee67415e48ebccb39fa7ce2f7e63cfd15733f1ae5716210e06cb7076f216c7e0f2369df2e6219d9a54510486d26ccbea6239cff7d7ddb57f58bda170b1cc4edce77a0e8fc4cce8f7f3a30ab2c3148d65c1c3b5d750c6ad9e095d9a9c13b93b6ba3bb0c9db73850dbb4e94a15954020b7870ba26590f3564ae2eb037377f590fa295523803776c2a6350c5d03a2ab9505cef78759c6c137b531d441b894d0e9b2a9a28260cafc2890e1fbc6168bf2047c49d9013469f2a35e1db85c2d24103d8652ab2b4577e16204e47f72c9c91c3449e2028777e5aaaa2d9de9de81eb1ab9e30393055d88dce30c278fd4f6aaccf502696bd967eff0cc03d7150ca271657d97bd6e9510ccfa4098b6c028613535413dc592eb81aee821c172558c1cc5782cb93593d98ae76dd695c1c637f4a7cb7ee638c708dae8ec5743b5e5d54b970f607af964dfed52fe0869e7dd8939706cb69d37e25d79e90b063a9b6813f09854708115fe5ada6bea0b88151b54d32ad229686899469f826bd547e0404317e579996ba4dd781f3beecb81a1ae517317028d8f8046f977c5198b8047e1f8c3e850c9d7047bac955dbfa2f71018d1db6a0d281baf373c927796cdb39e515d2d38d6d27c94d43c9aa47935038a0fd07df163cf16b79847771c722995a10efd281a3f55577cb787d51b95d0a731d33ea6c6d8b571b9df5fe6760fdacf9643beb35512a2068d1a5e4ec237ca3d68276141bf269ffddd8054276d199d94d99572334868b905fb97ccfaca1f514d5e26b1034d1805cc938f18cbdd5643566c1fe2b5de9f07e0eb11274a20f2dff8faf6b9853406b32d154947f18e2b16949e7853cdad34f2a0967560756c313a25737a5442c589e8da88f229acd8d9b56ca5275ebe803c9a49cda64812b72ad51dee6231eb49b4438c5e6198fbdbca23ceee94f24382a9d114767d15024fc382488a806fbbef522edf24c1ffbb8bdf7dd42a363ca75fdd33f2e57315de6a96d5dfc8549e69876a94711f6817d8aa3e69648fbafd2cb2c38a0ceec3e260e9cda0af7ed98f96dae1cf45761fc5f01a053d63aba277c8c15c3ef35e92499a47f189d77d3416b289c07c87be9891902804fb0e38ce99a9b649dd5914e34c0849e091aa5ce8e6305977634e63ecc15977a91c1b7751faa7caef560012b10ff8bf319d6bdcaae913eb1fe7e63e66df56c8d9dfcbebc1537ad964fa4f33b0dade4f329fb4963e3ab2ae7508d9abc40de810fb640ba412dff194a13222fc40a989b45b1324a69b2fafa42ebe3e3822d18bc4c4b05b9f0ac1b1c89e9e3407074cb4df7892351bcf1e771a211f43d832edb1abb39faaed82dfe1a500b12a6afc7921e347698f5d9720f75d033b83dd45ce216e910b2e6ea5fd1c820b3186ba36c46813c1cb5c80bcb0b514e4dc8e263595e6db55f9776f5f68d98b5ab7451133bba83e94053ee9b24e50ec9969244a19bdba15b61560a2d7c98299e5dd49df79f4c06084200af95c860ac82dc2ba1251fbe73bcd69371dc8f90f308662ae2c67633c54283f3070270845c945352e0ec694dec91480d6454291b376bab98c37d56f0d0f3f1fea5c7ab812a36ff3b307ad7bf6330af4521c2050b11c70d1a672af4922c627725bb0d95a9c94ba3a7a8fa85e9006f1b649d4716739be63fc343517b7ffeb978165482acdc50f894b89c3b7db585ac9683c3f8ae01d37757bc10c4157e5756a2d1b7f21bda93835de00df889fe844f72a8db897406cd4e20088409395ae9095fbd1206b4d110b93a66425b822e00e3f43cf8755729d6becf1314502209bd52952133fcd451de5ebc6f8b796559afa91e9cc4d8584779ff5fb490992b19291a0e4984d2feea50743b90c73a2bccee90d0e8365c1d9a95847e7a3302678a3c685558ff02eb4b93cc464511e5e58e63e1692d9e6a9512f39a652984a805376bc7c0e623a7bf63d6498e410c94bffdd59a246ddc9f06b3b46944c9f17a984b05663f508bfe3a16ad0805bf96a83c961a4db90535c89984c349003de5cedf35347f42e35e13715bfc4ca849c0bbf66d009aeda850146b7ca69858b33e9c1a219062a90a22f0eb7faf29b0a9ba9203eb447ee497b9a4c39d152080b442d9aea6da37bf0b17f0cc0c8bdb4dba2d1a32358996170b87e331b781c2f16127474b0b1fbf1f459cb11fd80c1b0e0527fe1da8934f848f387e690d88057c7f2bdc94613331fda7dd8704a167a1b399a37b16b25168e7f00784fd534d65a7ba4a5baf03b361dd6fc1601574c4f4d115cdc2fa0088e831d8a660eeae8dc7970dd18502d859ca926e2664f9f5b9a006dd84fbb29de2125ef55c5a1bdf2cc1ccce362214d9fc91b905c9683831397614bc93cc6edd7e60d61728df5e4b6c0a08e8748a6d70a7db7e815e2ccf8a7394fcf2ba6c73276e1ecbf05708d7371d32f352b3fe5f81eaa65140edbb1fb37063d2ae087ea0d634e02d1e989b6829f3aafd153cb4f6797eab530bb5cf0f32030d227bdd896d1f620fbf681244ec381d59aa17b76cd6b912748f86da5419d06914fe21bcc306025476ad697dfa2fb7d1ea2d8e5a85a45aea34f2a473d1242f52a9dfae29af25a3779ddd616770e8ab7e70f2472af890b10268aec2ad603096d9fb83b996a454df68b30a9a694f7c279075da5e5a1c4a8a30c066e9d2600fc0abb17ada862adcbec9cf22eba00b9416afcf156eb9b50db251d48958ba1cec8142129c564f1df64080e992135df6a8411a088444c577c05df76ae0e404dcf3dffc34e7ff5b1dd6a0909e03ec83a9be61ee28081e8e2d04ee45e575e4798d051c97f6c6a2c75fdc515dc9b41cd8bbb82eeff7f71bbf6d6fcdadcea31b6311febb95597403ceb865231800c8375abd976a54ded9f7cc1d8b230a5643a0a2b3f7ff3b799cbb2bb6cc89b79aa5b89c383d35a74130766d78e886fbf5914810a295ca8bc6f726af9c9ce680e9ac15a9b9a599e2849e216bb38ce9de2b39b8bb8b110e3590164d4ed3175d969f7ad21b9beccf2ef260c89776b9a522ca85fab237e21b481bc129511b6ec56e91a53fc7c554d6eb2d86ae5d47596fe2759b31a663f2afca2eb0980dbbdaef23e4060f23829c40438570df80a24d59ed8cdaf9db6fc558fdd8948a1ac3e12999b32c305869ff506be7fcf18d3576b7c7a79f2308202d999c2c2a854f52a6d354fc397ced09046b23d7a4694b3754a70bd84e03f26168c5c4e2cf9424897807b85d4d2d126f035dd707eda33088bf6d2192bc2029c8924dd4842c314d16f813fd1d448fcbabbc26b8c2222432479a2d0d7a0ede9efd289a6c7d3ba214f082153fce4ce4906e00593779b6f3bf1017133f62c146f6754d8524444dac05647b2718d08dfd6b60d94a1ae6fca4506b3ffd13ed9b0b796145720e565c73c097ca370bfea608e39d77d074a41dfa1228d82f52e160f8301de7437102c35d6ce0136aeabc4f8357ee546cbe7105b45c89c6abd62329ba8a05f5fad1ef59417f2580f4591dd8a6a70514d49b92fc0f602567368f895251b98bf609ade27f41a5287d9fbb747834f103ab3517c2ad3bec409ed9827974b389d3750ec9926ef245e29216ed2e06297b3defcef11cf86f6c6c333a5e32b163d8c667b900e0c8b1f2f811a4718ba967ec946ee274004129d78171fe7d4af3a590529fc7022739aa15ccc60a14bd567f5b6adebfab4412f575cada18e69f6ee2cd9d1298d9d0256938db096fa0b3e6e9ac3340485f08407eee0696c0945cef35118097f216e7d4f54f39b6ff0475fadb3971540428b86bb9e2341e62291cf53ffb271fec1a1a8959d899e56889dad818f6895cf787ae1a0d8e61afb4b2f77f99d1c5310ba4441aa4a48f9ef2f75078e3c88b0f64cc89205942e14f58976ccae3928921da7ed2f1916d5de1a930a8ecfeba71e07ca77037f1084c84ce7f677cf1d9848ff2d4d485cf416a5d3cdbf395ca097f403929b7aae0d0ecc3e10ad95b98e02d837fd1048d325abb5cab83a89dd0f2ba57034d06db8638c6b06762c90853dd4cb133f279461585a33def0e368772b922676915c12fe76bc7c36af43e6a20d858f4e9350f53b819f3c100447474491957fdc228a860811039a4ca2df612c85fd63b846379e425850105810cf456885cc51ad4ce056a6cefb64ead5fef38685d4ddb837fb208f57d4998c61414a0f2e59ee19494d494c19bad33a354b893c2d50829c5349987341961f16d1340b484426eed67bc7f9fe69c35646386c2bdddca9b5070d2e19f6ff4d3934a5adb2840cdb450bc9d579c3d03a5b3ee210338478ad730fb697423c3490ed9f3f17f4daaa91832745651939228e646c326cea2130ce739cddeb39ccf4ec13ddc3ec5bedb3bdf080a2a376f807bd4263bbeea41598ce85ab2a2dd5889bdf4d34517e6bb6ff1948f75badfedfc2758a03beaf3c2a1768de1777da93b2bb58eed0d671ace9506c849ddd8c4cf1e119e650c86215c0e517e71848553848b5b5fb030773ff11fdc8b803084576aff076498884e4541d49e490176a664c33eafa0dafcdf0d848c27ad0a75926643330e51adb988bf9458770bab11cf6bb0309f5af7025235ea8d6e5cb9cda75c6ca24516dad0a6adeb5be0fa78714013e5b3c551e8c4dd01c21c144e99d9ae05a5d819564f393cf3988ffa06d55553ee603c760cb0bf3c4da64cf184ce1529a174db2d8f23fb8209d7d739a3a76d6cd067c8a511dcaa6b1b551c20893484ddc88132dd889d279fadae3e3cdd6860fab1ffc76db1a3a614f21749bc616ec9d7105f5f832bc8e5ea9696d6c8e8bde99021cb0bdd9138cc582e806ffb49318c029a2ad15989c38c331a8fb5d86e71dda558a883797ffae24e016a7a826d38acb1c6ab8e111cd0afbabbc0da75516eafeeb4577b334cea5feefa8e67b2727dc518325dc4ac695291709442876f3322c1973ea42e3569f3161d923ec5f9da392577f77d685ecfce61e03cc4bd150c5aab6e1fd2d68dc7fff811b30e8cab69be4318f6b2fe88938952c97010f579b8ca7c2dc9ab4efb073308697975673022a8b852e2651b2a47935f74c994c9fba95d8806aed961698dea1872c4120e5f2e36276c5c3c89f720df703c2b3e433eef29bbe27a7d543500bbb5573eb78970818406899b5b8afce97e67802b5553b6a04012205bdf69d4f0c9bf403bb765ee4d2216c9113f954eb76e107219f23b05566ce530a78bc5b99d97ce6f1d689343ceead6f6a61bcbf167630266ab31a53fe355ffbac5d69a733efd6a6dbc86c9a6cac04e228753209ccb1d884c711dec7906edf762bd50a91664ce1d2e349ce1f1a9c82838549395d0ec1fa1172039140f7be02e02a4f2564cb442cfb366d0b2c388f47c474001a7919e61f908a8d973b8fbfad6359c60b9f2b1150eda793220fcbbe31f63318ed2089e8022a46e7b6f69477eecc0bdea412365be4b138b102cc3692f2014e03a03f97ecdf64f552c973386a66b463e504a9682985f24a99e8709dfc867abd5be32b8617ddd21538bf45a4e1b57a9f909c5f175942dbdab87c1dc4a1d0f8f2e2c2469bb6c429fc53c96e3005244e2ff363c20a97e74fc8e946a92501dc1fe189793ffaa5be62c88ea145f0dd415c93f5fa93247954ba1eefb9cd7ade5511dabfdd55ae1c94d5166749fad5b95701e976f8070402d0d99f449955c80c166e902d8ec7f38464126d1ec62c9689db6434b279edb644f8c72efdd67511c8f4b34f9e05b7dc0f5383ea7d12ca694296fcbd593d11a7d92f36693439b03dce6b8c0c2f325669c706acecf7841e2aa717645921814b956db15f62ee607353eb8d04b6cb041f88cc2d9552e9b09fc58da9c0d35257a5ddb2bc50421b75c70728ea44c04e96ed50368cbf377eb348acdee3b86d489488285aa657f3f478f4eb2ebfade81abfdc5fd2f68fda63092abd5dde6a55ecc2e5120772bb69665bc078ee3a45a892df4e0a6e9dbebde6d2e7b8ab089f86fe8c97ef790d76ff93fddd4740bc09b07d0c52303f53d29f9a422eca06073103ba2c43acfa0c3887138473ab8287a1ff7203f229ef875827799f07e9f8fb4930a5fc0fa634f3881a134ddd704c340d939509846f1ac69c981d0f894af95875f4b008871e9106b60e2df61698765b7bc18c6a215c286d8fdbf850945edde89b10ee3edc8b475b5e4b558bfca40ef98f16eb221cf12a3564e7cdcf7a29665d65b1c9a787d32dab39be0dd2bf4cc1853f2cad3d1879281c7733ae79e53dc364d16cf74ab964afa5fd868b8b25d246a54c8d41790e553df745dda3821961aa8049e58dc22e48ff89ccf1146b927ba44a6544ee401af151ff0e2519b8a0b68f707868929cd3a9aee31ee71e40156ef2157fa8e3d4ee9a7f8ecf410491dfaeeea1796a00fe4ce0105ca8c8a8a240d474740da93a27ff0030452b9c17bcf61d002fdafd3dc2929d384c87f7cb4cb685f4773113a6b1713d7e865271623eeaffc2f546c9b2993ffe0148af40c27e93611bbf08efd4b8348c219dff3a7af155bf5871c66961be3cfae0adff08f3165d3ac385a04d510f90ea93a31186df4ee6ec103028edb7c8e08c6579b7e1f725f9ed2cfcd46e4045ada761b377efdcae0a88225bca05ceb165acae29943098e2b79f872db001c33c96f871634787babbc9356ba875ddf51c20518c87990f2a462b53e4f0eb7264ba8cd07a2cc7efc2363da836ad43371a4b9e904b0514f1f782d5b64c1d6726729f2ac69e4cea48da587a66b178c4205e815f7a16f4dc41f8b06939c85cafefce73bfaf53ce74ad47fad7301605ea0781789c07c83ca956624bcb7793055fb1473c07bc8a204b5420c2a327ab4d50979f62b70889e291b9a8a8de92473bc119b49416b90c249737b2fd9495a7e4e59c62c92a42b806af49ebae8fae0468e2ed55450884939945dc97c9fa8b0f28128d88663f0dc7238b08a678f9aeb1521a560c52a43f9642bf4fed1fb7cbe0c2cbb564c571655536c4ff708c0c9e6d6ff83b6101f1092627f26bbcef92132583a8868f9da9f15335f04075ed60a8b87e10e03a819b22afa6b1e539abc19345748dc2d16fa95ab3df8dd8b4736c74f6bd3d0c5cff035503e77e5f41bf3e9213d3c307ff8fd20fb634c5d38be8f33a52c507ca10abeb31254054035ccfa4614279f2c59b4f9132b848237ba9013fdc6f86ad6fa3aa7e1d89eea607318ae04eb729cea4230c6c520e21bc868cbcdda3b7da209c1a239dee937a03dc7e5a1a471475fa1641285da5eab058bc562ad0745c71da0fef260ae5369e7060c9727e8e90c5e9c5173c252e7b312a00a3e8d9051b9749b8c540f382f57b576f2a75ac69053f489a560289587f76fb845a2e2ec14e4d3f8b4830f1d6cac5b84e0536988b5908fc5d4a6a92ea75e63f19f8917d9474acd30e6ab84c869f4996014a37073ab3822343a91f8e540109ff9958787124cdab00789f4bbefed3dc1f72784b87f2351db85a01c1875e456702fe2543051dbf24448eb84079424f7a3b1520cee95d47e9033ccf27c651337dac1cf8e23eb5ca01ff439ae2565d54c3dfb16a4acd7180b597c1c4e4a22c7e95ce1464cd1faf686ce07160f2f124646fccfafd4d167be46029504ae14ab934976137a66886fdeaf30420b7a0d73bb38fdaf3a1cdd644be44ffa3c4a1252155a45f0b17c51607c5a399125c659d7a6ffe2af90b5b66ea89d1292769933c678959690c95b36179b185dfca01ba5a436e1d5859895390d24e0e08e981c5920b1405c5f36cd159af88d6f4e491aa766b0e5350ab0687bbe93bc6c4d2d7c9f6ce3700342dc3b709520f33c34d823ab34ad932ddf4a68060840245c6fa9d4146ce6740c085c4b596f125709387e6ad8a45d814f646af475e8ed25cc8ac44ec750de02f988be00f8328e7ad5bb34545b27b939016e99fc8d2a1c74b6f7d5c1c9d620cefea01346e8bc9cf7b1af5d1ebfd85dac53f58a08300d8de84a6778d3aa2bd6fcd685d032e3eb019c0b24a928f6ba6680fc77329916523c8ab0b2008626aae3d669befb59eaf043459e93529386308e945b09846bc2bfd19d6d0f901dda89347cc6b484ad21dfc6cb419d76352cd026b55845877e63a8828d650cf73f62ff6f5ca50860f0572a644876641a2aabc5cdbf422cd2e23428c5b35bdd177c829a4e38058e2c4ab67f68d26c4e46676fc8021833e16b714c390b0def04b5e79133f9f3871a90f3171921aacbd2cc19e56b09e98b992abd09409066483b0efb5609324313e923f06275459b6df157ad56c99dbcb61dc9d80653fee2215f966b383bd6ec69468307693c5e68427efad25b19de64b3381a6622ab3709081d840b9e52e59fe059794cfbdf767d8bcd3767a68b4bd9ac6884d3dcbffd3b0ba1b686a897c3edd33b32c06b3026a797e05736a0748efa2cca8f57a8bede1e8fc0a32f6b263e8d46a5db2a888eafe7018277d8a58ae2ebe0ce22a17cb5a221fd72150e8fd75574dcd272d06a0038fc7e3b9e5df2f6daddc2990ba05d39bff9fe393dd94b4864a17d869d29af42740d84ad0beed3e7cfbf995769c52ceb3a81883589687c28ce49aeb5c4b7b69da2e30591f39791e2e92be6b77eefbf94f81a919ad9f607f2b170ad4db9a2174487349f7719763305006ea03035b916dc6a7464c883544914745c4d570f1a02774987945b18f1485fee1c645f24c0538c458edec2e481c5c861d24a33f9b8becf0c0b0271c63fb948d8711a0f02d04765785c269fcef3c824a6f79bd4ee5efaf0b8bab63a9eb14f4640b7bc6bcf1f40a5fb34bc86c2e618bc064462459220405a2767aa209b2644e4e96e18cd80891ee8363f70ea602b7f8c974da497c5ad0193ec21f5231f75ec30c94007cdca589565dbe2a7e4fb42adfe34d1ba82526dc261dc1a74d8256055fd2cb08749eec4a00ad6060d30b518142913b3f253ce23d3566679887a92f1f5a00e71f9a3fa1edf8039d16699af5c457b42fbf1509d0fc0628c7e8d6bde239dafa44c31ba33929855fff5c4ebce338e45ec1f6a3b772ba917ddfd3fc68196e11d52ca9c8f04655d19bd23626edb98c51ed891b84d06b1b05961b14275197f6d24a4abc9948ac8c7bef52575a1cefd9f6a0f7a08f79365c7f3982efe2ca12a1a0cfc593045eeb791d4a904c80c518cc6469e6dd9706851fa225b30ec16128476b5390c3c10a69679a4ac4913fe588e7358635d07d1a989c7b07a4809cb2c6ea81544259c994d3ed9fb7e519fb603339c00ff7cf4d7e5b08237c9e61b85c7fdd1d2b628477537671c30b1268b0896be0f0a7f626df7bf21088e8aefcb59f3234e4ec0384e50cc8e275c076c41d449466837208b05e190b8f48f68b77d2815f0b78d3afad6ac800e8831044f2d6b3d480049fccf227fd2b80e22ff68b5bf0f1fa4fca7c8c916547ac0d5a10e4d966412bcb6090d96caec91e4fd6593a08de0e0397dd49a1325ea8037ffb8b434a721d1db1609ce6cecdfd3fe28d9ce712026a3c0d05bcbe3f97deb99f1991f8eec3eda78dfb29f32462a811324a8d084a3f4011a42775820b2eb4fd27667e186fd1e54044b220f648926aee13545abeb3e6b96b4866120c0ed98d6683708799ca04839f1520f718f8734d6a9aefe6b3cbc51ca0a029c2599aba4bb6936b224cf1b12e77508e652f680cc626ffe6dba992561ca9018720b83c00c6f5df9955db6a05bfbc4852f1983e2b49b25b8707afdd4ee5fc97b51d5771b6d15d157eec56ed96ed3b9ec5b0a8cad58b32a24977c5292f1dcd62b024c3f35fc596f63536138cb9c5218c6c2e66ff8e77b0bcc3b58315cce2c8188cea49443928e01d024bcc1d9a872fe7a93a53bcacc1d16403d83df4211ae1dd2212c2ecaabfccb4cace764dcf44227b975a766a07847905aafee004dd7865051c48bbd290fae5d282628b02ab21b2af65a5d831f5f6cd41b9c389e8bb06084cb571af51eb2561a7b8a3f966e3ada0361b25fe070cef2b138d2e98e2124991b0cc5d8e056df2f7cad7b8c153e213af646d625e15286149fa797225e420342169cb9a286a5cf5a8e600932d7fd5e4ff7d0cf87f8f619ed8f81ef344576c7cb548ae8fc2201c688f02cc9fee2e2e2cf94c95c661145ab8d02a5e8f4fbf8c523e1530b224b6841e735a2496e49b3998f41aee3a528526405398bb7b530c040a8d0731367b8c31ea933c09dcb5b23a063d1a7751168168c9d85f92640b51ea91e2e3f8f0428169b16de1185f1f751e8f865b24e36f4a91a7f81650f1cabfb87e0cc95967bdbfed29f522a844706648622a7603c6dd8f4001aaf8a148b60a5676905665435c9de3c5fa7adfc901abfb9b12a84bdc375ad3997f51e578ac7118f512043199145270d966f99223b460aa1e2beb4c4e1db78169704d6f2be95e563d89b797e9473b03c07da0d7855b872a5dfbd329c5170d4097a412c4bfae6e8456f24ee55ae6048ea6a27cf8c248e79d9c99032d77b001e90d7c20f305840821ff40da27271b4916b0aebfe2040e7f8a547f32b7df6bb2ceca6674f1e7615f0ca7138c4b049f93e83e0373b8e8e1d594f0bd941ee48eecbe61653ef02a6cec1afc107b98e409a954e1fdc2d59541b3efa699296c19337d9374f67b5e5d71d7877e61d4667b96e66779f2215b67b6a5934841ed62cef5b8f00f4bd54ad582f3cdcb42888f337fd91c0f1b626323acf8c67575b41192745fb1acabf8343edb90c07899ec2972777addb1e4b82d760d57f191f84d00c876ec4effdf4eadc55f35deeae9c02b0883a8731a2b51e3eae1ab5eb82ec1ca7e56410e576fb0c27926803d0290e49c38befe6f940da18070be29db1de7ca72b6677c3a8f5ce9203cab045ac3309760271b82e7786e2d775b396f472d24bbec8a42020f5896e82daaecdf411d101391ea44bc129291d39f039f198a68bd1fc3350c32a06af77107f5af7384957fa6f0f3800b82c2f95b74d20f66c208adeee4a4601bbc1859702c2a8c3c95b60b1ac73873c1f9d7b2c16c2ad53cf813ac96bc3ffd56176dc8b51ff31fd2e41350cbfc9c70b3f6e9d23e0c09264d6880787ac0a62a8ba651226c62e22d5470c5cebdffe5035a50015f0c7ecea70a4cf8502cb3274bab8ff292b69f680b0aae334626f4cf575f03ab4f1b4108e0089e8bb8df7d398659ee94591e99eed7cac2f36972ae86c13f8c01c199cf4d9568f651cf27ad90b905cd927ca9cbc68cc5abf85eb30822a4ba5241e5995cb462883ad55b815ee75bebc2852d32388021d7b7a8a16a2f6d393ffadcbd9d65d8bf7643fc87f4f9740972f183c17d4c519a10f78e8dab184691f88c6385b302e5e2197c7b70644416b29e6c94de1d324fc790e2bfeffce588fa2115d885c9a89df79ab1f6262176ed276bdbe515595f4759b70abaac342a89696945b1d015b5b340be2c9ae1307eeab7a665b6dfaf3c9308ac0e5a68bee9f5cd3480b0ccd09e0b1e6d93c475f048836fb06d37ec34c03d3031c9e291381ecf7a981c618947f9db796d4f39c4bb1312ec60f58a12e2140445d1b2fc33a77168f7e26b3b971435f99b1baeb6a1e0772b55eabc99b3b3fd8e54c290c1c2486297730ea427c9d00138d20dd432edcef4a6a1d77e7cacab68346acacce0edb61e39e9abb427897e7d6560b75cf2ae27dd2341599abe393a7ec292a9c31032035f8139eba208aad82c85cf1954c0ffb297ff8ff689c633bf231e4b978b859146dbb1e7b0283c7489f1ba246f1e0a06ce5348e34da94e07e865a706564bc903c36229234d0c7a9f363ced61ad345e706156dee3550ba7dac343d2d3c9cf186e26274ef52e4a8c96def5f592e0edf364b53ed9d6a81c6fda8442c66a6535d8e9e68ebe9f5927e753f14535d719ddc8990185c3ff0a3db301ac6393a9f27e44ba39e81379db58cf65f90c5f57b38d9b657f9e2c5fa3dd80658340d1d321f6b255a72b2fbfde43a67f2e91f718bf3672aaaa722536dd79f3f5f54a673c8077a120907daddb55a9ec8ba5a47e79a715fc6598e75f9c9b4aa7737e9d569a6b45a15a83391ea8d78d1ac8fcb21ad230ee28e2c4b13ffb150c1a5a9d2209cffb3e4193be17a316baad39f33bc1e4fbe86efe9d9f5f6b2aa5f30b531a94ae69d7f388a8715dfe5ae859c0691d1956cf9270bb62fb2eec937833ac02d46a87a15ca55daa785794500bd6538fe0d48ea6fe383dd80bfb066e196cc31328d5cffb0effc924ac6035c0dfa2fa818554ef0d534f0df7beed38bf88964d60cb9fea460445b138646c55b43c2df2a78663f3a16a24900be0acd04cf5a8dabed8897046003367d5afeb771007d74ba98277b8d2546c7bc9d7c0b43718a8a92488ddd6bde1bf1f5ae29a07917a763a43aa3c689ab0a7fe685826d4ebda1de91a8342301066150dfb727373d7b334b8a933fc941d280a71cc01ce46d037e169c4662b2281dfd7f6ddd1b37c2d6af73e807378c738a9a808728c1e8180652e568ba39c641601deb3de35d216cd70cccaeb8a678dfa129d94804093671a2dcb121f402711ec547147392cb44b3ef3614eb78f7f97c010f470e50653e2edc2c84b66df0f8af7a3a9fe319616d3794209d145fb28bf06b3f58aa106eb27e6cdb72f62158309d736626d819f28525432ad87851207e5ca0ab377ddaa9fdb169dfce46aec8ca033dc3a09b37cc35a168b2662352dbefcfaeed7be9fd13d043a2b080d77b49540c65b43cd990fab3a26ad8057c040131fba846cade2692739a307c0a112037f34f8ec3be7554429f400b1238bc067d386436e08ba1731d4364169e216a0f8db73f78867193c92e72e70e86b43676d980cb8ca47c47ed0f48a780c88f7ee52b11b3018b24cae4b481ae041ff08e62e33c2eb088bd6f937eaf8ce18fa3cec1245c9f162e971e0865d477f951583985c8f62a5609580776322c6b2ee5dbfc5a5d0665204419c46e5c0672eb6333f801d2cdc2a7e706918b36e2bfabbc0122387cdb631e0d72d2093ae788e4d5b1ade34f2bbbcc7061684b19df35fd653050c6f344717c0b556d5901aba00bdee24d983f7a0293e172ff8a993116b7d5f461e861c7f088fcfdd19f980614e893d0f801d09cdca96a68022ca17a559b9ead9a527797c240c6cc07cc923b2070943ed1f84c50917cdec5afc2b083345a710bae1fefcde96f3453e9da5d7359d3acc8296b3a2e946322ed7bd4c2969a055f95563b7b8f6faf3ca41ba7a4487660f621a6ba5075fad33023b586e07356c978617301daa5edd9570cfde3578e03c0f96d6bc4cf6a08f06e9172306d020181c5366d8a255c7890154306bf54d1639441583804adf6c1e1bb708bcb825081f5be5bd5d20067c357a8b1583caa14714dba6e4afc89e21a7458245dfd4db1031a9191418fa82801d81287773f8a848ae0884c0737430e73d28db463e0848f2b2ed963a3af8a24f1291111105642c949846f363f51a33df8d6e08c0927cda83d4d04c5d6b2fc09805e0c64278b579a4c737196343c3f8ade9d171d9e58727e378e129e1923485a0ddafbbbe17caec91f3b4781c87401528c11a6e9a0359c6d8b1dcb7084b7d605234b7555051eeac13142ab24b40349d6d0e3e34a2ff6e7af7383fba3c962e0436f931cf1ef35b57d703b8cf492876f3e14afac29c7906c844e4bb344047d2ff58e4dd83f4f627d5c59e21d77a4235d4c2f78e89d13fc2819c2d4898cfc1057ecbd3525e10db61bb02621b3aee31b4c03a632b9515cd39d397f9fb4a20c42ba7ab6665249efa11224a78fbdc7f20bd9e14f367330fce3d0525554aca5f1c4a8fb3eba12bba809c99af5b17f09222c6c7c584a7c48f0680ab2d118d5a5f785506f172ae5993ca9766ce65e35bed5a75dfc4aa9b15e17243476011b9abcd4284293b50c09faf8ad4760884472190292bcbf90d50db998a58baee674369a7ac7f3c5ee9679d7ce63678f904801ea97c843d62bed5382cab13af9824ea697ae75739b3c6ac64c1f7ecba23aa177e66de20adf991462698c0c48c377a8f4902f274000148c1094ec88c77038859e710e2ff803be20dfa807cc5078a99f8ed0c9e209d9431dedb4fab073ee32c3059fe3f6923b1250f96f4afcd88546a8db748f3935664bb327655a8096784123334a4edf5ac62be74bb50074ca2da3ce0829b04326a188b3535de935d6e3a07902a52b3a4ac3c4a13c7e456e91a9252dfeb0b887a7619d313ef9337ce69bc1ae295872a4dd93d38cad9aad31c0c7bc7b1c9f6afc6be339fc984406e69bf5adf44389525f3be706c298b729886a88f9bab7096d64d15a3d638338d8b27b009e4850c76c06fc456695d8eb6f88a343cc2fae65a80abb1113a1730eaf6e6d0594249d835d32910791d34e5e5ae35a53204ba39ad402bf7b2b128029a74a2cd3887031d2d5d9414fba343fb9be4b245975b4084296248a69a8d94c484cf515445d91a8d3af886a40f47ae964e192b7978ac80174aa0cbfa4a9cbf617833fa2896159fbd58eed946e241f850da9d035990cb8d3a706a583e9dd2c0363b2f3bfdcd576d077057dcdf0c8ba9e2305f7fa61101a19a502314d830561ea56645a4943c89a81a9f7501694442cb1c0765491ac62d157f9fb55d6954f821bffbcb74996936a5b3d645e002d1f8262adea87689fcf760b22e0d33184a9b4ef63245beda1e2988fd899296ca10523b6deb2cb8cb48f74c129b419fd906836c88e076a62f8fbf8af5416847a5bee54f6301554f43d88d8673a60713d4df0ac72f6670c3d30352870c5cd3de901339ec4effa3b949fa3fa756e471081ed42f9208a162d268080f8820e9c16d2038faeca9a209432c2b7ec089a46e9fabb42b9b7cd76544c9bff88dcf604f9050dbe1c24c5f856ea29a0e925cd98ffa0f9b205a1cc8b929e6bb51242a23f8e32fda75fd464c083d7d4021169d157d0eeb46ed5eb32769c3c3b866674870111fb381a6bb1af22674961582adb6eb38f8dee449e0d9cf0be675963bfe6ce072bfb60c42f4a13a25424270cba04a7b6c8287cc0c76bc5c18b0dcb7434889eea97b7915904f75e0103f1dfcd6f619663f6fa6ff855406d2611e07b4c7ce8bf95b486a2e9b55751d034d33a2147b708f7d916a789f82d43c7ac86d0d13277337518d43c3218e7c49aaa0eb4cf9c399b611bc28d79dfb9b17468e6f784c6512915366eb7498c52ae5fbd79e6d245e5eddb576d75332c647a83514e547197854b4ca92e1645f4818d1e3244d5744f849c8ddbc1e417a451ca8de2485371c779b5502ec534e172f8d68de4328631337cc0b3f8f1b45c7e9b05efa83b0cfe494f8eb7d79f8cc20163774006396029185d925726031e5179933e0e13aae232d95281998128cb35f9af36a30d7d21f3ae376a7273e19899c2d069c8f8fc1d2438b153362f866153ac6cdcb416c3a28e5f0d375ac4148399de026d1b9a46c53d17ffd32c6cd05c6e8cab5f2b2f48269866528b4cca4e33521d988accf2caf179334baf8443312d8db8556fe3a9998913c682a7e1e7e9fa858020e05556040df6afe363e1c74d55f5c97085b4b9f9fdc1eb169c4b37e8a4797d477d5c68e96573e97005679f58b571e80e4028766a5ead5d6e92571dfabe564ecefb5c06f7eb38409d2efab9eab3116c16a6e6f1fc471aae41a5373616dded2f2d02d92584e671decfe43504654de5723aa026dc73f3ca87238af415d057bc73bddaabf4e47254f15f6cb3490501d1f92d53a620e69446d7fe7603d8653c3a40d439ecd48d5bf411900b04f9d06e5a445e030c81da1253c2539d922309c1f5a117a0a559957c6f71e96f50bfaae4bd896efd53819ae45631dcf68b4a0bd87242cd1bf89cdea4bd632b332610c92dc4d14971aec4c6341aff8ecbd5346abce8a7a42fdea94db20c30d9aaef6f4f79ce3731da663110d8ea59fc9a0f624557dbc76261536a28d302e8ac23b97def4dff4ec59045b8dadd7bbdcc9868121ad6d455932e322ac8776fed2320b6386d2ce15e456c44ba69f492ea361c98711a7c97f79fcdca425393a4e60d37ce5a6f3e8b964a82fdf0c69edbdc0dcf3497cc903765bed273ccef18220b6e71d0a9879de4548203cedd8d0d954d75350acb1fcae4507a269387539aeadd922a01d8bf541437be1215d55f5b941c8698b6bff82e38ebb98b6f689a61fa4142803ee54280c381cb984a0c41d5f12f6f139d5f764395a25d442eaf891b6e2ab70928cf4c04579bbade237950cbadc79b54e61619eec5865dab74c67f3bbc6a7ce1c53b2055456afedbae00f3386810497e51393024c77524f24ee3780f6643b0e7f1be5cd11e22055b373249e15c2e617542336a20399c0c1f87ebd8d718075dc717638a644456c7a493901491ed5fa5c06c6843e3df56349f2334a1611dd15ef3966ad4830bf0802cc1dd857edc80710c3af8cf20c8c2c2f65f5a254ee404a6135caf06a5932537917889d932b9999c7780ba3dd5f1781864e7b23410ef73cb738e23bedf81efe8a2568a49368746b13f5a594b3147722f6ea243bff18168a8568bdf6d9af186b91ef010e2f41e014b4c494743cd114764417c83d6f534c78792aa5aa1ef51277f196019ad38f9d1665fc8ef89700f71e9356507ed0ba90bc699fc93712a72f3f8e614cb71757c737a6057ce2b1c7ccf465b7a41d5ec0cc058ae5d5e0399148a04d3db8cd9d4fc2ec131196115979bf15ade6aaf5f507130f67226afa3496e352ee6e9b160cf02a212874bd802b91fae6bb334fb097e5bc056bb0ef1ea1b4096e978567fa25c9784aac886dd187a061ff07e67ea74beefa2ddd9f2f823dc9a13e7ac1631d3dd05fb5cc4b6f09ff48e699559a888954d257090dc9b2043f8a7b4e49893062797a380d325f362bf0a1e46af23ca6180a3ba4918168d189fbe90dabcb1451313835de4003db80e6a4abbb1df60a784b95407d3cc073b92a8b5bf87de92b9e4ea6a0655795efbd740b22cfdc33282f66df30631d3619465a05374ced61979ca69b16df1a137e0d88639b2305ed43c878bab64741520db902bd00ec47509d62d8dfdc996e32cc30e3208dfdb05d8be347bfb2d0789faea6b1bd8c0fdbdbe20bc722aeb67142cf007e45ef1a9fe820bdaff374aeec71040420e79a4e28921c76df74759978e638aa889816636d3bb39e51afbcf3a0be179d41dc5509b491cfa6f09ddb7dc4f041fb90ebebe5043f96cb0b06798cdf271950c42a4d76602a53a2d657247476f30edfc21ce946110365a1eb4e8aa7cca39954330c904e027462df9b4b35ae316030b88abc8fded043a0d2a5c210f6edd230f0dc732b824dfc4bd1bc6c26ea8368b689051ccd007aef137b9d6bc5ff58b047adcf2ac9b76e2335673e9a46f1841fb64478d054a29e8a0f73fba82accf1db9500f32d90d339e380ad7c56851a37114c317394b7486a5f6b46b52a0b643b745b785f367e2f03d6b2f83b09bef65fc8d25b7a8bf23f50443fb5e6dc22686455e7bba9bdc234cbc9087d10698675a939f0bf049e74de20cd39581d113a86e7dd73a083befc03380209dfadee079d3608fd195bee9c061008d2084c87855b5e45186af03963b36a57db73e7767db0170aacfbce455bd025b85eedf39fc1a82365a9f3d1576edd13f5d3107d8daeb55de0edf33bdda995cd6ff89077e486102fc030e9cd8d4ed754c2bbc8eaaabb28b14b18dbaf2e8c7a169461342114f67ac744fcb9f06fad9bc49c3c8a4f2b620ecd05ebce2847afe3a9797f4b8e1d593e0e9159f077909a0c9a1fd8aac8c3bd12b834f409b767f0fce668b3020f7c6daefed0d1145944417fa64bc89fa0eda4b65a7a63927620c6810d78ca158be68063ecec0972317bd9d469396d60d575b576565e2234cf77ee68044b75fd9515b474a6e30d58feb3817047aaba22719c01e38e5b78a89e2b37037424989fdf82bd0d1109097b7c1f99490f711179b2aa39567e9c05085bf40f6e0304fafb948e34d1ac58e80baaa63a1738a511c3f1dce1154949c0b267274fefb1ae85b4e6d9a044c0227b0c376916295ca2ae39d12a2c1cbd9ccf2623ee57e5e10c86c7ef2ed4a4b1a523c7d57c60525d834df740d3ea8f69cf1a271a2634560011285501e459773dc22ccbbe55aec8a205204cb2c4450e2f0370058e1d6435d0a85b25acf5753d450c1066defbbfb3e02a7b7e31a4fc523b72398ffd483c2ff6e4f8ad4986249ca6f42d080e5adc437dedd46888010dccf5d5ea6e1ce558777347445cf7cfbf167793afc8069151616b21e50dc14a0c250f92a795d54a61447bc82741ca27216ad9a40e27ea7bd2ccb27d83e0cb61c0d9342af54ab5a19af62af86abddea3d7043982b4cff53883b9b55c87c163a7c41d821a44219a152ec77c93504a3595aa4188deab51b1bf422a47b8d86d73b9b3dd5db55a11d7820745b8b80dc0ec746d3a66fe22801b69c1b31aa70b37f6b697ab2608f3abc794d8f5f4b58f6d15620e0cd80a5ef7d788bef8e0ae2ef7d34d309821f00eb7ee965601d737e4d17e3919b6141fcfe36d47b5e05da4acc1840770e73c666c3c0297f5fc094efffccf6d8fc841415afb774a7adfb8e28b76e8853e5a4424a1e8f3229f0621f877143a49e28990e7d271e0b8e2a3b0a6cd1a8ae7ad06bbe63701e4c877024ca54f1dfec6b938c375baed4b84d0b73676168c22efa48bbf39241ded7d7a76e4a6d65e2d1222f9f9ffc5c96e8da80c3866f238e44268c245df8beeb2b82e156e6d9a95098b923a9e60f108d26ce6f3283951ac14543829820a86468bdf235c2a5d21241071617938505aabddf7180d8b72d8419c82b8cac158c8296674a6df41a316967e73fef0b69ed8d8b5d6e9fced55b38a39bba45e1c547f08b47d7b8915dff11535df738071647ec907cfd025b1dd92c221b54edc1750ffec3b85d3ff69c1ca7570489a56b12d51d11abfc0cc43164acd9ff29105a3c74b8f23fb67de62bccdacbef2d7dabdd7b01f05d954303d05ad1bdf4beafe2a2e456b762481f48f808be41ea2383ae991216f743bb329b27c7a4b06ec845506cc71473ae0c22a18fdf6947bd665724a33ccd7f3e4d56e683cc183d2e658403c810da1d3ea9e3191d449a384e7b22f74f7077619abff204c60d11fcf0d8c481c57aa76cc9599e6ec463f371d6f8b18a3f1db39dc951c6595e8acc54e7cb62ba5478d41c2fb9bfcd27b37b186321adb3c70419af48e082aa765a46061766a1a8acbbcbf85364525118b5d2098e427cce6c09f817ffda046b0b50012a194d64c183c2bf4621d01c15f7b3627a5bd87a32332529583cfcf99561ea6c7c1ec17ab156804df1b1af2bf8e6843ff309717bb409556381066c34b7bf56b1b16707fa2994ded20d3c9db1819f4b8f8a4145827ee11149438fe54fc8cb46dbd00c1e2566adc38b499de1a55e0f6ececa0603975e1182c6c89f2bde078e291fb37e50962a14218dd86fefdf5aefbce41eee672cb76248012a19f559c819aa57c81c18376205f8c9d2591378071890e1680d4559f3a481653216a4cca7b922731c60d928ded9267c3f027081f64a01e42e7d1099a6191e40597085497b0eaef160e674df1f4eddd64c51f2e1f1fda9fef94702eca0975d6486114d7ea1de918ea23cee5d65195ce938d11ca0fc317393d64f0f804d92415f5140a48df7cae848e78d56d0282deb262f3162dc8db0779091802096b3f74d9ddac2f13cc822c8f7ce898d4949ea89f83a0492276a28d8ff8b38dd252411bd417af1e0819754d86ae338e52f8a7518dcdafb88fb58b262eeb87e1f0547a7a247f3edcbd8eb095f947d353922a1b941ca867bcf14515aabbc66d9bfab7e2174a1cd122816dce4284b22bdad8006f70efff2b1d052b7793b2bb9e9e0839cab1fa960b4326cc174220e5c735d1e3fbdf1a1f18a0b5b89e331a92c58aaa30c7fe79a7be6f4dca789b6ce0e10d1b3fa596c90001d54e8d47133e8f2255c8fec01334175b9440b4f16583a3c517679de143b4f4bddc5337158c3d6f12998d394f069f729d359fc7bb0350ba8148b7e02ac14059f5a138f5f029ece0728a1f3e5194b268df426f53afcf7a9a3a90257840a7eef1904e98caa42634920b8a2650b1399051ee06ace3b665446607aac2a8c0f33be9c5ee13572f2901dd6f9781a8104c653abb0d18ed701922c4b7377b5801da2f504ba000e3f24308963fe15c1cb32903ff3273d94f865a8dfb4fa5c20c31fa485833a7529523cdaa8506ae1801ec358b843b1511b3729274c4f3fb87668958a3c0007b1fa713d0bf6c85be9c08cb529f6cd0d824d39cee0afa0d792310f5d5de32d2523e1adc97a714ab1d75260fc609227ea4f7d2fb87c57b88786c2f9fe0e87d5f36552564e271be3ad81876974b0f2b992ee97db7cd33664a291a47b813d222b6b13c4bb8368c64f566adc8629e84807e61e245cd6d5af7ba53cf5124e87ee9a4788f5119088040a41c85e717f887fb79c6762f8e358632fb8222707fbc5d4611a948c3d156269c6dc8566d3e5ddf24116babca7b48cf6e51281e0c267d0a943e63449b6957c08bf0e8012d0509edf47ccc83be0665900525de0f18763e5dce1f3bf28e0dda89dc4c0a191d7f98caab8b592d0baed462ecb300fb844819c3c11c93df98ace50ac7d25a49a54fd5ad067322de0e0e0e393545c4a2257fe526c67144fce4d517670a59ed69e137615bc2838c70666e437bd1f74a73ea6eded175442cf839194c8e7e1f74aa0082c79699f7efb8d8e561873eedf168cf2ccaeadc58b2a1c2f3aea04854f2aca59e45915aeecbdbf75160727478cecc0109510bcda4b1717dbec104efa3d5f2bb2a939d185451617bb875d28b27882edf22a014fcb3a2245994213ab2c6ed9a64d4527be19cf6e68cb1ca3553434baca084218dac3798e13cd3be0b21a35dbe87757f053d77ad3197fe883256eed57a1f067c94a2f6d6ea1968faf0a5f871cb1b31c24814eac0e98610aacd0ff1383f9594e54955380bb8b5d38f716b9dda5929c6a39c2c0cb63e1086e173f92d937e3208bd21d1a4672bac8b454aa1729a7bf6185709d58531395e6162ee9777fd7225ed12c0fedb09941f139010ba53f1309cc2e7701817300d9df5ee6a4a71087a625120b2cf79ab5a6d750b93e580508faceac61c2c80d7e42816c5cd7a98c89f437df3e9d2d4b5031f792176de883d00c0e95e0b56c4e8674f5255d76fec43d7df9fd92d4440b3f30d43d6c4aad7ec547ea2e43a2c2b3d0562cc8f3c4e58ccfdb641ea6aa937f3d2db42a27409dfe54c47aeea31591aefc018a7a8ca689cb3ab5e71dc8962a01975ae8aff2b9ca4afbdefd50dccc4a42f139c4790dc120d7c68347465179c2dfb19be0a2d2babdd7172ef2f39e543eff0663ad1664360454181dd9525a93572125b1c0a1c2bc9b3460e9350652281833ae53d6ec9389aa4cfad251ba7c509487ad43bd53379d6b466d2a9fe80e936443fee0fb9e83eb25c4d4aceccbdfd7a06ddf98a5c387bdbd25ec06712abda967aa854b1a75d712e099c10f0df91e7a6bfcf0d353dc36f75c02ec67f53d4d4d3bf7cef5f27c5e73581c3d9b43226b42c2cfaf35c9a2c234d3b6b78f5817e582ee99ba0a42c2ad87cf41008400ee9d50253970b43afd69ddb1f1a7c8776cec747fa11d98dd5d27ae6e8325d90fbd250739c368e8d96c42c78c61a94da3d4f325f9824dd38d7e9df84bde9e6b29f599ea4d4ba9849f3427995de9405011ef733155e2e78e9172d5daaad2c9681a87399861847f5c9e112492bfcac506eeac35ea8ccd9af9acebae0c3bbcd8c777315cd068936cf20b26360621d66ca09d2a49f1cf299a3011535dd273ceb17380a23367fa4189668b0320987a783423e88d90a4d3f2954e9e431a930f9fc9fb8a9237fc493b3e1be15f3ae55857eb8d5600a7f2bf9d20ddad6e8a08c54098bdea03b81d7017ad3453d14cbf968d7c62af5296ce2dc5aee2d1a6e09967954821711dc9f3a0b04f4366ed7ca81155786fe4f3c3ba91f870adebf54494cd0213ff8b9a498913f63b71dfa0ba10671e7fa36bbdb7fe5a2cd8ccd491a81e5dccbf03ae046e156de19dfeec905f6f0266e28d6cb97cdfdd0e5155dcbc471fa8291f8adbabc600e1b7b677d0f501b8732db4d8c93e10208ba58c8f19d3a6096f20362d87bee10bdbb5aaddc76831cba68dbcd96740ed720002c3864d16079409f4b952dc78b99e60b0f7962210990dd0708cef6ddeb0c85ff701533c19e8ed9dcacca1b1ba7b2331143289b55e2b2090a208f1ce45072db0dea69ec799b6cc93e6c3a7f8ad304a00f96dde360b6151446b86ed67b086346318955a95504c5aa86fd878430dff8fcb0f2746b60db8c092c963a51bd3de9c707883296a011b1621d82539fecb27f401d65aaa8021f701c9c6850ed605036ff8c91a844618fec1f45119adad5c5f14cf218dc4ed2636eb35ca80919971279174c80b2ff84f7a2dcc2ee23414e89ad3e1991a57bdb5c75b62080d35800845a654ee56226c2e8b6bade47d68cdcf469da4fbc9ca1269dcd48c5dbdfc658e6cf5581290a75ac153ccba743ad1e1978b619a849b86994a6fcc4b45e7a4cf3aed491cc63e59728f96a71b9bdd887d7424d8e2c410c789e0fb1f50900d14e1b97605fc8b409ffd34367e95b78f3876958608a30fa9ed3403fd273333dbe0be1f0382b0b5908d8e6d7360e2834251be9260f86d81395288d8a7760e6eedc101d0264b2b9e8894aa060245937a96ec56b2095bf608f02e533c1b15d3eb14805aacde00db8cc940494ed5f912f08357662bb211ca9f20ac9e2c36d04bb7e5bf33c3f553d98616c4d1ffc338b1ec0d842ab8f1d2572ba7e8815fc688e2b9a1c8bd1e8bc41f2b1a197db402e9f7cfdafb5c6253ea293a67f6488e466fab690f7b602c4d16b93ce0a0e2d08b744e9b212dbb14366c7ac8263013deb59f93ad9a317b0a6e0eeae8a4d27b5b2a7243fe9c991d5b8fd83d321637d142a60fdc30c29d5479f9ca796427f8b76a767a563078858c892532b1b69d11f1c0c8a50c41da979b8f1c2c35469d6ceb00d71dbe49662f0e03803615a8d25c537208b3235cd2477a49db0f5a285affc1be92c4f7ea6c86508b8ede4a730f2914ff773b9a60db3d4ce4332da4c1396d6af092f0d6fcf93cfa931f052bd6d9bbb8b5023593909de0bca23d4a06cdf945a7ab926639e04153c85fc091480dd7519074e284f00f856c76e3a48d92640379df46b172628911758fc5718eddb26e7681e59b581af2d09d6171d832708e963cf093c17c34ba199129cd272ef20c4795943aba9fb7ff55affa44a6cff9e225a6c5680bd7f915ffef4d96fc0c07f7d5067e34836c285fdd97c6b2f8cf8e76fd4ce2176258780876a32ff5efece8e0e8f9fbe89ecae563af31e595f26eccc51fddea92b997f266b4dd93495a0063aa1804346a93808b286dfcd923f5ac8cc4432559f081f0d643b32d5f7644a90497757a8d1cead09e1c470d28fba5a58c319027b289b33008e1f1d3479c46230675ebc2395651518a5b4aeb7076bc4cb6356a7bcc48697f67a131e428fb14160ec5716c55473b8ce67383c53b13954f02491f6589de27713b6e991489a958dfb9860a68f54dd6e7905ea9c59e6bbdf83d53f7711a2b5d591f5188aa06ae094e3dcfd0b0357e5a55833f1e8b46226cca1a719578bf0f9bc93ddf217d476ded669fa23fe3810a1a671f63df04fd7b1632e0f3d0516db478390ff086fa57af1719c23d3f13fa2d561cd9398b0161ee242ce8dbcdfa4aa7aedb9999977e2d3628605b62ff9a03b13b93f203a85a8da6a4f69454885b96408ae3e9a3e6c3414c921e761806ef76962db747e3920b1430c04f39c7f96d98c7ca71bd764aa5cfa46ac71027dab63a87ced460edaa52714722ab26cea478d019e14161ec395bfe19310aca78682dd18c1d759b5fa161f08c349b21b934fb2dea0c2bae785dbb58f44ff778ec14bb929fb8ef5d866143e1253f6fdecb2c838aeefbe487e360eea3fec98f62cff6cdd74e05db37db673e08f357a43d8efd313f249f9516c11f6e50fccf40be6037464f1d9b555cf8c9f0aaff437b991239fb4fde43541032d5a06340847e1f940aecda339c850edeffc883292e4e3a43853e7b6ebc39cbc82c175cc86e9739d36ec9f5afcd605daeffa4510da1d822b8571bb08b983cf5d59adaf587431f24a1c01369f0701fd70e261b8f2638d4f3c00a2f0295f2f4256291dc54f19a54e47717f7a34e235a41296483b1390a51f8f0f58df34d0e625efc53442b7340d906bc275c3cc398122b4d7023721abb6144482961f8cc5c52b8967e2dfc2481f0b1b05482bf89e0e111669fa1642a288f6d64e03d1742f9ef25c6a860ee0bbe8f1be39941a6c4a21cc591ea60f2b6caaefd07dd48b4293a5d4c54bd465452458c14b4663981ff12b07f731e4bec635a8d1d5eea37f55493ba41aa1bd47b0970ee6e26639852421c76c2a42ef3ecce0179816e5dd9a48ce565b85e87b23afc65448842311608a4d5b26f31bd003b828883475c5ceb7bce6c5d6c1b9197f066afcbf94a9d568a3766a476c0f3d4cc2d62021e6d6badfb3ae076fb1e7e9c2b706cdfdb561c3cafffed78ad0ac896d8f4b15517f805d879d5eb892e4b22b2956ffbee965d2103a99b34f4c0a3048784090e35f9378780c20de3dbdd13a0849fdf3094ee8619105b911a98b132c566023ebe65af7ae3e35861a184354b1eb5880b6867de9adcebfde0eea955899a2e5e3de6db7f440f639e922ec39d8009b463646daa08fe0a99271131431e722121e548ec44c4fd53d1952f1ff26561e0c59903bbbbbcc8005c1f523f2fc51c9999aaf2a9e6c91655636321322c80476a569dd333c24c77b80087fd7350ef8ab622e7a3f4172feb241a24223802b4dabc6cbdcbfdec8649fee6e01712d43df2839c0b29286189e6d98f252fd5e1c1ccf81c5396d77efbf55b7a38197a459ad708bb654291363456cd3d3d907aefaa5c97fc0c66d7ce3f27df3f78cbc87b12e096275f0ea824b0e391fc32414ae42e2892fdc1332edd3b3b25f9c72ddae68702555e9a3ec946e0d6f2f00362f63da13dd1da8007c2546ac2a6bcacb7125ed31131108e377781ce1775eb2a62d2d7e30db582578c0a3d2b505a57715c519eaec591b6bbc79c4c718b94000dde218676352617a317e47a2c52ca9a19eff7f5f4a66f8a9e021ee7b9689d855beeb4a6319c6b8cc84d7a4dea9286ffb517ea61946354a3fc9173bb08590ba83131505efd81883e45b486e1fb15ca72687be3ccfec08f2bb0f48199ad7ae4d9c5fc1943d665ddb02b23e0eeb2e8ae89b6be353faa30c5051026055043dc618e7778216d586f1ebc83d5aa952d1c88f58f8cf7dd8f2029aa534d82fd4c2134191840d45c56dec458fa0d2f05755449b01b1a353c2712a12713edc8fd70ec9330c85048708d8faf9f3b66b25352a3c5fbc9a758effeb085a06e83a35b9d4f69057e9e5269c906d709f41e59d7249140fdd19c8e81595c5f7507df07aebb99cc5fb8e576b0405972e96f2d7b55155669d31a1c37ff48c2ae116d4ade9569d7247124a716e7a6ca058635353539f6d2c60fc5699b19692bf97fdbd297843113a8b5680f7f1159794234406f132f3039bbe9829367336c6fe693310872a5123dc5b630ae63e60580285d5bf8201ef515f4ce2e16b150a099eb02101367591f19c76f379dcc9e5b8710e6c5e6fcf5339ffc3295fe68729c27005ada720ea493c8e7f812b3ae333ce764d91da7669a3499c668f01ef587f896bf99ec786eba2f2ef12f33d86a9f04300040cf46e6a86d1017d1ceced46009532b1e578415469249c1b103b73446b365bbd0969ac3d98a086bd94ee0e872591de43112c0d254ef22800951f80368859c4fb3d9831cd78493255da754cf2fdd8ae9a654ea6fb9b8908df096970c0bc749e84c2fb33a1b29b7f35a012e5472f977766ad989d79b6662c85cc6eef077d7e380834702bdee0eed52c21529eade4677fd6be267027c176452907e9d251c5a8962ede8eb7659b1e5ab85dfced21601f5fde56aafa8a0723b6be624b823bcbe7da4405d974369e187017ff167613f4d1a7535b6d19dbe098effca62ad8e677938b5184c9aa5b23113921bd4d4410bdf5374224cfa19c828ec9f1500991397755e263ef9de4df70832cbc3113bc11c0f5c2fa6d369f68dfde5f1cc01fd2824a7b46634e6647a3ca27ef1ba74797b4baf50ab520a1499d7973da8fcd1088ecb0ece56632adf864ebbcf2df3734815ee324013f834ea6a5ecc399e91c417b9b60051a6f0a09a8800eaa47767d2958864273a0cf975aedc86b57a2a5409187d45b8b7a07fff51dc0b8800bd2d79e50b251ce087bc86a25a29b4af35fbe5ad5fa1ba89f4d2c29f1cede9220b6a1177fc769a7f1cb7a5f56a6f92348806333513f36844b634935894a86443f750e832b46eb2ff9d021ffdd413c868867d87b9adaff47d3684d9cd1eacf085d58eaf3e342e8065f2cf22b34ce78a136893f1d5363aa40d6f5e0c2dc2597aaaab74c5aec77513549f3e8a4ccdf1167fafba5a4e19207c6688aac868cc7a381db61ce3d5a4f40e33d96292d38112053440509a555c7856bff072c35d7b9be82bb4b99be913dfae8ee06f46ffd3be44bda6173d642460898f67118fe4a7b1725f8dc6ae3f3867123d7a4b6b45813b3732cf2e9ba809080c87539d6e51a3e2e7f7be820f5f38eaae01ef43f2364390e54a3324f730a31c57b861cf5a9f989a03c2809604a3204ca37c8d7a11c289a891274162c2f91a99c1ea22bbe867996bbaeef34d872b8462e4ea9fcc7ca54f5c5d2f8d2fe84e5f12392006ae7876d961abda91ab64309fdcd2d3e6b07444a4da46372d8bbed6a0e5eabf9ef18ab0df2432ec10c996df7dd36ae1bbda00ff60a1f1b9c2f71bc5aad701947df6aa13a10264d5f0764cf2b57804c282984f5b72b3e9a841a8588f772ff87b1148e0721c37028e52c9b6d93d0e4e00266cc040c20d659e03ac25eb48e2cf2f4bc64b78c49e7ed130287dc6485ff60634dc14d9349b3ef5d111b4f6963472a5a24dab728e4afa09c4b5a63d5c825a4c4dfe966b85397e184c00c955e8ede4d9504fa93da0737ed804f9d235aaa87296cddb25ec612394a6b32dec003df9f53148fc4fcdc451d5030b4be68fe77b583d6efb29d6796469f7d22ca19cf250a0b26e9dab3df74c9964c9c6e63d347ead93e0740bc12930e1bbf58d6bbbd9e2e8fb95a8fc313ac261ba2c327d90df0ed6540b316b66d7de3326e78296c70ff6c41c821a05fa73d635e8ae44e49e0652414aebd4686f73bea50c470633f65c4fb86688fc53de0b26e45a391bedbb8775b2e20b284819d56891db7208f58523d2170dfa7e41a7dfabec786021032b6937b3fd00583c4b25b819f1b251250c8f95ed367819556392d6d55213aa736d6188c9fe5dc055175c10e27125159c0826abda5cea06e01b0949d25d08ef7fa7f52c88b573ee7d78589afa33c0b4ab1fb260236b7a87da181daee57e7409ce4537144fd182787b8ecde7fd9207c11afd550e248b38ec497f3958454589b9b231450450770dba2b3e4f5b3e7f76cfbbaf34b977ee19f572d7ae4edd39c2c722a83c1e22d0ab344185a9d150a0a95d8f2200df66cff86bc2887f695971c3683475d8be20fbf80862a9d2341dab362dc06d10746f4d0990e14b265bfca1e5b25f277c17d9bb437d493c5d47a41cb622456bad08881b48a34ab9be26bcb3ec914d0e03968a97426d48fe4a8572cd4f54e58cc0f618e8b90dccfd7e55156b60ac8c812e7e3c22f0020c26e180ee6db3cb2a2aaa2e0b72328df71ef1e53369160e2d814e4a5c11736df3e7c88310c44f47c856bb0ee0a91cbd85f98f12fc8c9f2e0c724839f0209adead58bd05ae29766a18d06d2db3d20d785b983c07a4ad9591d08009e3bae9f6794c158815b2f117a3cdd7714f643a125a3565d1afead75a08323d92f9f5ee83689b99bff4e409baa7efbd55704aad750b31c7143a4f3c7e5ee0cbbb6d6f9164513ddc85b4d7f02bbf9a29536e97e75e7da08a6f62d8e7a56791731b36d66e0b74319dd0f54061571f73ddc6fbcd4826e96043b2061671be43252e9b7d2c59f39cdb7c540c3b0cbae4f1f7be5d30ccc616fd35a959a096bd32eab6228b6cd2b1a66a144977daf90691d7a50a4728566814f44044a1887290207b45403fbc88db534ead5ed32e366cf1bc1cabdb1f9e0a94f2517e7f7d01d1b40ddf7e87fa8e7e6ef08cf32a4ce52b6d796c252b30b0c8874c50ea7747816b4729ee94cb2b4e4e3777c8efe1fa498e7fe16c91fda7c2e6e637a6bb0a3768e2ca5971bf32ebaade7101c43eb51e34b65815b33b4ddde3b7b257fde251d2007f41a21c0a21f27355452f60d8c8e04934966cbe194b22b8711e7e3524f16f391fa5c90e6c1268063cc4e26bec4638e39d75e7bde836a4728ba905e716e03b532431f1fb18ce8f7aa39e4db98d0c67c61f480b6d988e2526ab42ba605de6c6c52d51655c417c1f75c9d648da14188757c25fddda7efbd256f74ed332de6ef17ab11aa1d3ef27ff9afb9737b8e4e858e4141174630262e1d08d02829e57d566b3205c76bda12a01d308e16f6998b9e0ef0c53ea8d8bd94e72e4f3e53dd948fe30a4a3fcfaa3bd57aa5de7dc3b7170e7dbe18bf8dc99f7d871a180fde74e441f3054f92a7bc27c8859f9e8ef69cebaf977bf2959999b629b754a79d631040f24023cb74f2d70396c415a9da29fa54537d6d8de2af525d87013a224a2a6b54bfe5800b0c974ab0012b4d8a127ff7622c2fcaef0fd2ff2a71a2affbbfacd426c2c11710852e966758279abd07d18844836afcfd5ef52882abe8f926f353f5d88d7ff1c33ae670a86f341ad1c5f503aa9ec646c87f6e1781c406e73b4c1218a103870ca294427852426559c4393e0d715192938c6f770914913474d8d1dcfe3ef583ef407c0af665a869e5dbd338ae81e49a88f43fe61d2b756dedcabbbf2fd4bffc7dfd3d496884f00a67d00732ff81a8b0b2128c1582a3753bcfdb23b780b949b1b9bdbdcfb67064eb11b4a04a4ed4a336b4420aa0492a8702ac5262ecc8defcc384abfd84f0e3f281e297602b13bd83c659838d78d607f23b248bf35bd545e8c4a0ce6c6045d2a9a0ead20d8e7ad262f456ded62f615d80ed034e484934d6e832109cd3e0e80764acd7a6c64e23c0033ecdce3932930d2c424522d98d248519c1b4f38ff3d350f077aee65f712a4119a8f8015792931a50f19aaf2046cd81a067a351f701d4de74a8a0ec577200d144cbd1708ee35cca9cced5d6057a38710824788c389f5dfdb0e2f89c4b7bb23d7eb5bc6455ffc9b4b4132686e739b40f1c938d99c574cecfd50cdba19ed954ad6452b3e75907b5982970492f35bcf3cee0b807e3e4c68e1acaba488c2074b072bdbddaa08402c61d8ac937d2e453413806cdf08de794d6fe867f4490a3b04103d49fa476ebf0fcf9de0685e206ae0e1c93bd10868ad7030254e75772b33541c369afaab8e45fd3139937e6ebb9593606d330dbd74b4f7985350be406adbe21de7e02018d5a78be99398e18d915e708091d4c379c57d3281372ef87c3daf77dd13b5bd648eaa80f938b9ab12a298df286f068081437567b78cba43cacd1f4fb17bcec0c410ab370fa158851f0f07c0d7434c01f75f5f626e27ea17a9dc6a197c2735963b94d75a0aab430c40d3781f540e1a184f697d08b0b68be9043be661616c4b98953de039cac036f1e9c921c163d750e23eff6d32d71f9caf8e084ee36667ad8e0fa776bebb7042f447fd1b91aeb96774cc4e8a7f9c2ce92dd9892bad1d571682d40755a8e5c8b2d30a9b77c5bf2c867d4d12a93bb06c72ff55f487c55b427b8ffbd9d95e04a6c3e55a0b76d43edd65d479da3a096730dc4183c3b49fdd0dc37e7c6806203d728a0c6548f480c04e29e03f8ddca74f98e3531778cb26e91c0e8de2c238df1a76c7f0ed4e95c320e07ecf934acee217223230317f8c5d509d6b3fd543491e6d11d5c6b8b8b5380b0e4c24ecb37d7941440453e013d3961a191da5fdf9b55772e845749aee9c6c117285d8479ffb84d440dd1d06721ebd37dead8c299576ff1c494f754dec60f5da9939b8e824c0e007a31eb28b717f5d1899792d2aa4537ecd7c389e09fe738797e56aec5acb8f15fc648fbd2e81291f7904e2588b88b367693d8cfa93391b45d33c12186522012fd3a1c26dbbe95202d8408595a12544061a5644e539ce6a56513dad4fba93f47e4d757a796ea7463190666c1991010d9faea7f064636946385a2ce3619a11b1233432076b6922e1566a68e63a302b3bae26e726bd9254ff46403df6d59adde256dc342a07c60fdeb0f798a4c87980f6b4fc24404b19f8a3ac5a93f596621101499ab4fda2ba8883b7d72343fe49813568cd4b1a620953c813887c480676109dc8feb79b5a277ea5883b4a85000d7bb491dfd790980d52af6b2242a8d7b80d339dea207a556569f61147c6995fa8d804c91090b9a80ec530ed7f5ee04c999d760ea768537029348d07d5e0f5fcfaf4a9b8b557e442b9266f54b7f5c9b6003f0dcf75de3df7bb4a20e9a7606d90a29a078565727d8f41691d3526dd547735e2b59212a901ccc00240cb295f220455afabbab665d81fbf4110669db07a3d67e3969bb7d9cf3e9a0e92376253eb3db8fa0c05bb41a9f11802d24d05eac58828d0dfecd3b0ada9c7ce1c48df78f5762dec78d653316bd20a9e23478b5491a20b8592e824a5c201ce361354617600ee21ab1b166b314dbf30de5107615ae6e3af3c308a3fdaa0f6c475ef37e3433314b11bedbda1ea5bf4e807a77428536d01908e04878397d095126e7ea33fabd1f5c5dc4bff6292be67e3950f3b2b26a21882edaebf6f7ee53f3796b2984f3b9a0c1810c04ea09a8958da4541a9551a4b44e066b6a22b2ec51d4bd5cc4b7b473d6a9b6d4c4101feb9e08b27f94e2b939650404f9d1abd2ae37d42e4544546d430555fc81a75c9fb36aa0b765ad45290a2fdc0d0c0f6873aad8bd89f11c3807aae75447a96d26ac64f2775b9afad5a7aef307d2adecc86e3e364fc610dc9a135299b128b6d7366ddd11541a94cc0413e91826cde457a8f7ff7669139bbf9ae2728cacbb29a41fd9350caa055dbc824f90dc162f180aba266b5f65f3817220ae62a31e4a2092bfb3b3f3ad2f5c458cf82f72ec79ce8305f6aeafcce6887927f0075b5b511c0d518a5d3ea2702066eb5913e465e2522c33d77f8cc97d8d236d1af6887dabeeb8ea7c51eb876d9ded4108685139fab6e296a0608b5a1b95867b3f72f9401bd6335cedcd1075c73f85ea4bb58ff85c4f05aa242f9ca1e6d51c20dae77ad0150f12d8f64471f68dae8a91507322d53aa1b0554af8c5cf29de7e677fd8de49f16e55c0bc985d70fff762345583a71d316658aaf1ba5240421db6b931cb36f9f9ffe0634fc006a9122346ce48a102e7694798338b4713a6b1f3b3f0cc18c8f048ae1ff54a1c2362862f00a52f5f05849458fe5f41224fd70ca6154b6fedb0e11b82017ff792bb201a7e3407fd22796973f96f3e0628b71a775aa74896b7a94f28260f74da83f78b984f21110382eb497139512220f94037bc68ae2ceea9d76f2618b5f93aff42c3721ef54a916171315e624646c7f3abe238aeff05534046606372cbbbb56b28e06d620a51828d41bf08146f412eab1a2af98ad365bf33081216a3217bd8216331696c82818d226ab5edadf679f98c51ee5210e7382f8b3d19089fb8973170e19dbecd9f1f11e4340ea88d85dd83090818eb3ed2245251b26d2b45de95b6c7c23b28a10282c795993ad9bfa20bd6146ba892dc6d1c8de723aa7d909b365a48fa37f61e62300b73b0f9382a41154922a70d619f5a3b13ff53352e256e2f42703a0f21b4530144ad88fcb9c1fcdb1b7f1e8bd6528cfc416e52579642a5199f2a9cd9cc62e7d89edfe3754321038a9e4829d95616524dbcc0d532397daed27e2c9f616cbb2bf3d6ab2b39477f31422636e31eefa4409251702ca47cb61a0369b8edf364ab731b86aa97376d292637dc84d3cf71da6f8f4ee2898ae0f5d4c27f7d57e62c8588e3ea98c4701d65799bedf6e467491d17f1ed97886d1ec59a9992beecc825d6132dddf85f27491f95376e1d1a4963322035a78d3ea0b85638bb2f4030f52a22721a760e30792c3aa788fae68c78e5a4227865c2b7f5ec12f1b078f7d7e0f7cf9abe07e54ec62f17e9dbf6afcc5ae7683f18df5a0eb0af403347ecd5ca0584e0d1dca2034459a7bf0365d7c1def10ebf9e0d199cc230b43a6acef73e68927a7b8a6ced9bc3fd12f09c92e159f54b928001b4a83c579dfb2e20cc291b671b7127eb9c6340d36016443c0d8da70376ed085165f778d2ab9ca4f948ed741a2b8a95882b8cb367bb00b906cbbaeba531221603ad4840b97baa95cedb053f001b11ecddd9f722ed6c7d3b36225403b84055d385b9ce36a373c1410c51bf982d177099a5d1c7144dd6c254fea7cc0e97d2b482ef3ea0bb0b4b632c970ada47dee841a1ad34131b1b851d66e3e14ca910ffd28c26205840ab505f8f6a5d2afbdf56a3001c496f6f1fae12f806066a3db6e540b7ef14769243604c09c6d949a051ab65a9009980ce72f1d518570732fa0fee48df7440cbe4c772cb8ac62e7f9f13ad01f9e4b3fbfefe298435e2af5526cf62a89f562037fcc5e165c5ff893a595de6378868f710511c166eae1f2dc1cd1056c20e29ab2e9705feb50cd898e0f449a55ee1ccdd6eca3159ba146cb595ed9da365628ce25d90136d9c6b0634fd86332a5d34269ed2e4d5a0ce94ca4947fea3a590a6894c8ca983ea32de31a797ad28f976e2f5f4eab082dc0dfc1f554fbaacba45f82f785cea7bfb44dec6e0023e308b2127fba68eb1d458cf746209723b7f501ce5c8cb686c6344dd16ff7eaacf2bc55e0383c77a576ae523fc08826717012399267b437e3b3f9c8b649f74820abaed3d44c9c5a781844437323711ffb1de9ef65142433691ec94111d70f1de5c8c90c540b5865cd74763c7128b29b4fbe76057bf1273f81a3f32c4423ec515aff1e03e2662b78d0305daee03c047458297d527b714441dd6d7363675330057dc41ebb90ca5afc7bd45693a1782bf60125ef3088f4f8782310fcf8c88e3f7eb72987b8e9b6323869d9bb2cd22012be6efda7a121d745c135c1a5e9b1b9cd0f362c790466f6176cd31944cf95943f4505344163ae1518c49859fe14afb2274d120efb347c71c815563af71574d13e6fbdbca0eb8ab65b4629c480bd899ab1b7d32f8a3d0e3a4b86434d1de4cc4a58c06527083d6e4de2ebcf25a85c37d644d4190df5ee7d75ff7c1c33ee302bdc32bdd712b20cf3c91bf40a6b4833f0572b14c045e6218ec3b1730351d652948db8963538afa29942064b649aeac2bd0010e331b11408f16e2db917a09624a0c7e3e449ec619f3b26c95f371b96313246e45a28f5f1a57141e88d9827c25451a30411326461bce7b95f394dcda0e3777af2e848f16104deea4112511cf8cd1905879762386da71f4a065f0a3076847bac80aaa5b68c698f2a827b89c352794d7d97f4ac3c82bff01bde01945441fdb6d7ea4b700ff5e245d55fbd044e3038872a3001f0cd57a3e1a45f5b676f969be77f6fae5a736cdde149130bb4dc5529b650cdddd5caa56df58d5cdb7b0341ef078dc5a35a901684ca025c98838e64315c44b7df307d4af4faac358227c0d84627f621a1bdf99a9f359c00e79858d6e7a9ee2cfc9fef92146b27767dedc2060fca230b51eb5ae57387e8c2256eba14b51c02540826bd5b1c6920f3138661247303b17db3e4ac64afc9637d88943742a66369e05ec3d15bd9deeb56119082361c52bffcd3e2211bfc0b2a8b80e53da0d6168bd87603c66ebeba0c49fe31c41fbbac90dd73f8aed9127e7ea27f415ae12e34081eb995106e751828ed04a9dd3a65af67e040819ba7f0b1fde5e7b614e01c1464c836f2f2033013c0468f9adf47ee242bbf5d968e22f51a0c3fb8f26de9cb9e675d6549eaa6993e9afba94d0138a979a54631235fff829ba6a42f0966ebc57b868d2ef9c07813f7ad3fb89f3043d441d5ba2a9fa61edd607efa2c99377a56576dfe55572349bbe89be6e5459109172ba44f75201a6bf224722594ad835c2438cb532ef682d883bfee1a3ad1fa868d72f0caf36ab2733c84dc6c2963aeeb7696c50cbb738a3bf8018cfc4ba37bf6aeb1571c6e99e1a0bd4687d160c1b299c7720be83437c479529236781866dc2606f95b0493300bc652da1ec985dcca5ded94b1b0603658b6167b06a38a46f1346a53b4bbe4b5d220a44adb3c0187c6f61bc77b57653218be3b0559090f5aae537f960f97313048d80a11fbc5051c198b504f2b669fb0a04686e70676336435c293cf98b2c3ee9049b69c382e97d2d69c747db874e9cd4c63bcc023401e62d976a695574135bc304f72d278c0717796bc0ef668b18892a3621bc1423049f2d314db14d31c2ca7914b33bdee75e7efcb213a700244615675632502b7efae68c0cd2ca64ea40d4c676443648d9215330d1a2bb0eec86cc6061144749197adbe8c4aa4bdd11cc7f984fedd9bd91308ab15ed02e6986f6ad06d0c2fcd368e61960346c727641df229ade5221ffef88a72efd9f14f118f33303a6423ce394b60a926998575fac755638851cf9c78a4a101ef6ca1b1e2de9f5d2e64dcd2c533048c7d372536091cdeb476383faa7003095adae1fb364c3c495061213e37c604de5d57c65280a13be721ca8b97b207d32c846e447dac167f4ccc0ba997f5ea393cca9e4f24997d4640fc2fc6664e94cd5eefe8c56958c4f7c7e54c65c91ad75d2139d8cd66b43650c039d01a8874f19a49dc8b55c15032ceaf9c304a0ceb8ea5bc4348609a257e72102ab22b24019dd762b5449d1c88618de1ff67ae90a3facba5ad35172e5bcfcdcf2a7a91a7b526af42a071b94bfe357b5ae07a996550d99fc8fb65ad1687fb89ecd971a04874519c75f69e889e2e8ae252cbf8ad1f845fe981ca193e16df8cec13753ca82bc1929209b49a360a646361b8b6b04ed0a423ef769a079fa26cf4782adf91ba6c3fc657ee985c088fa1e00c2e3d8b6cd6279268e5fee19faa526b75b8b4bbf17adb106a7359aee06872215c1f5d267bff197888f43c46fd256c8b38eb01b701047bbc08d2f70c6482a3a61e8af8bad5a4ccf4ee27ac7214de5b56589815ac76258a84ebd3a133348f922bd6afb7e44437329e3bd5c49d2b90d9be7d274de92c9c3ae312ecdc04acc3f1c14c8fb23c34596b3430a5440820db17222c358f8fe89b4893dcfca3bf08bc09eb628bd1ba4634840140ea138cccc7c4dd549fe1f0b6a48f0941577485d8c0df2cf25f3cb1e26289e85a6396437124e66df2464480ba21098cdbfed3ab61ff29de90bf5e52e223eae11cb942b4836b63b92d7fc5ff2a101a62aa3c6a24aa59d17c51db33dfcdf6d246d231be5fca39562b9d218632ace34c6a74ab44a3d9b0370c23c8692997e0c2dd00bbc7c10028538fb47ca438e7efabca8e2ce121127ef9b6f318b8423f316ca6f9b37a147bdec57511fd027a3e0bf32a836a851e63ff58368c24eb742ae63137105c8bc3baa281ae62146425426eb3ebddd37074ac703cc600b318e94e442c639f7fff8a5f6675f1b003e9fea226237129ce7645e39d8a9aa26e1203ad8115a40c3029b85781af6641e7bb5df2ddd0536934e52191112b5d2ee601f07361634f7b15aefeba5155662cbed3398688ec3eedc09a72536df792ab35fdab059abcacecdacfb88a1c7d0fe964310be2035800e3dd3990f22ea2db283e7efad993a7ac3c0b1fecbbacbee9f8a3318d5aec13547250bf237b896db588fa0f9d75bbc30afc183e7c976902363f9a5e3a971388a013ded37a7dd6910443e3c1c90e9ac341efcd175ddc87763a1ada16332fc502c1c82f4567824c593336355eed72e13d8541eb4075c308a97a6fc93bebc4e930404c0b639f7e2e66ccc43e9cf9e2b84160107006329c08e376c4f885e1d312e64f2b70463bff6cd4b88d9ef015b1f8f09a4d2afb7afd8abc9b2e13006b3a8746f9ea6543093a176b67bcc3bd3ba01cc9758a4575e8897ff396213d91c069ae87a0232ad570a37ca03ea23eabae1634180d805522e03234308b7071cfabe153d2c298e3426c2f7ee3b7372089199cbae3d57f757a789f0814b9cc6148b6f3011655bbb4ea0d86d56f6200b9af10316411410fe9df0d48290211920766225e15955194414eb3fffdbc3d0eb0f3dc1f92573ce9acf9d9619d7f93524a76d3b8e810db2c6b29cd83433c2e59a14688b1c46971150b63c3446a20eabcd11b0f09e9c159fe465e0a0b8ba5a96b46a9b9e340947bf52edae786329ae8a6d8e0e3cee482770e88c5c21694fabd017009a6794f297312d97c20a9f64fe67134ef5656faaca35e9c6b1cc656122bdd2efc1192a5320cf8d09ce320c7e06b52374f1704cff14526144173b3b92b72df97c544e41e2418d603be1a2553a1b4f43e0c77d04b0db78bd5418af5568d650fac46fa35040a4dd8813ee8a61321ac25b51b51389719fbe0c52417e62cb1480747c8aeb1514d1716da74fe6aedcb6375aae80df9705e3a8efd44f90357768117cf9a9e62bc7e45b210139d88e796fc86e8422768de3c611409a26e67c5816a84abe46c6df1150e6f4212c5f8e80eda4072cf4687114a1751ecf1d27885388dc1ed2d156a34dacdc8e455ee1510292df1f9c0fc24e5a520d89c8c06222526ffd33e80ecec96265c803e4a598a6db156b06f28b826e66232adecb7d00ded3fb9c23d1aa76a1e971c3cff2215b9945a01ec945f42d6b0ed5848e078dad7194162f8a75c7d59b09952d989a6a55a613f0c58db2c296f20f044e3ac1e6a46f401dac92e7bf4bc67e84139c9e96f4ab5cd02cdaebf9296a4d6ebe33ca6364ccf3368285abeb33b34dcbf61cb27a28cb27a3a5db799e2b8c698c2a6423eacafd774d308c6a5708fd8b4a9d66c7d75b7c54a27b1dee4de77c718d9275bf6387274c2513af1b78d23e6651031d08184a1b43f1ea7159da1e7b0403c077ba085070a4d5aa2ae0717dd5ba8333ad131dd086cef4ea9ab3abf53a72f52f10c9e71c2c711f20ed672fdc89a91a55158785b1c4e7dc3f702ed3f0d9d655e59a0b13eee3c33380f35353e7a0520e443d0b5562012e93b7e072eedd79065f571c9009e71b5791e76720583340137b7ea57280e21f8b07e735f16bd65e82a5fe6d37b2bc67dcaf7b460aa1f2a34295a57aee62139d5b17ab7f24d94b5686eaf580d532d3a2b34ce120e79e47018845d4d0ddd9be32e07196b5fece1863b771d8ceaf545950528e32d23f2d3171accb08882178a93a9f241a2ad35bb76b2c8026c3e0349a634d75a18edf5c8126f46d374677f8b186ddfb6435ef2489c1c7a1ff8c843825d0a1d90c961177afbe4ef5590832bf3a3f8ba50eb75d652c809f247297f3bada88b6259fb9260f59e68c3e894a2562cbaccc6693b2da8f3c8d01e01c3548589375800ad75e1946a0e29c8311a528a5316fb923f676cf196e29e3329907692eac69614911eb11c57bdce6184dd13b81a00d50180b0cd3f569b7663f382228812937da8a4538cd39afa3d8d2d0093dc08ede832311d6d874eb04a1083ff90c2cc2c52b99fcf83ffd1e663a98e57d47d9281869aeb6f2da865c92b2aa7cced0cec94d6aa733ad7d08cdae72c898e2f3a4c479466412da8de041c20fc3f5a0487005cbc713b1da864111d0154910036977b56ba8544205c2d7646496bc58c48871d510ceaa0f88e4a4950ce71a5ad20a948bd4a20e75c9dd2d9348c1f94a9892277d20d1156414553a0cf38af2e4ed86b1474c8d87dff5266933a3812b8ef6c5bc9e1438685664185dca56ecc60cb1641a9509d68d917bda792ae0b6744843613e3951cfed7bc1b5896c23dfb34c537d2865f95a25b672e34c7ffcf292c895cabd38c34d49ff4271ed05eff38d90074a6937b00dd372a3ccc317938a296f791d3cfff9184cea84bc318be234ea788eb8a43a7374d0d627f722d7c1f71d512b959f20ce4701384c8e6fd28f1e3180d337ac7718be1a2d9ca84b5bc34903fd6b50a9a85ee80d722611c53263c4dbdae00447265729f0454ff43ccbb2f92913adc6b848a5a781ce590b980d7e50de801db6e0f0ddac4ba7ab7ad52f888699ad6d3d0382bcc8a523d60e88c9e2ca5d3170e1f2df9e912d339463c660e1393e46e8c01503a190e2d47ab0cd9a60ac1fa176c02414be35917cfbd39cf94758af75f715e38f0a4642c7aa5ef4ffb546a31a2cfee07d4a84273c34a242ef3b416d226c99354296f00e1a5bfa5096a6ee66896ace1474705b880884d16789332cffdd88ac2aed02fc01596f30655850cfdbf77861260eac459f89ece6854cb451415a06bd87c6b570f344ee6d9fa2c2d45203d71c2c107d86d1da278019d82ede1386107b35cd7cd6883f6f79c57bc08a835dced99cb77a4fd85099a289df2c95ad48dd3eaa81bd817accd4895a0929f9d9cefd096abf6c54535ab29787bfc1a6898af58a174d8d838e8458472542921816801e02654efb9da3acc681a96f69275c033e373a41739d8524d1378daa6a703ed456e6b6c13b05adec6b21f61e3d2229e940a8e03d22be16c6880a6e801b2f5ae5c4fa77197ce96b3d3d348546984c8b3e4924b87c84aa354cdfa34049cfb1714bddbb0766366e5594351b074188a2096cf6566da849badcd3af3479cc4e44174ba1df454a0ba4f462b14a0a04c7c6870757197bf061be16991817c6c3613ec3473774c0a985bd4c083a823d97757dc5a82ab3996732cf5664460a78a9157a9932fe404d076a7257521e03199d7c97ebc003b3f3ed1e3b61a568ddb7b20effce0d35a93758c8e8256482b7c8ee9a1635994ea3b553ffd1ce03cf5a9b9b228ff81341aaecc088c63d382398f623be472ca2b34a065701242176111cde9e9efca036f29379d7540d485e95b90050bb107673f32b9272af67915399117f9f7639f37818222d5a08304a0c9cf2f8a554bf492d311ee4a203882e7a638821c1a80485712adbfe9a69c6bff16ab66fb949a88792964af247ec329f45afa2b7b693f065ef167efa492ce7d13a7b06f1c183c040266cd58a01ea7280b8b1fa34dee6699e5f6c29579eaf3173746117d5431709f88a1cf8aef6dccf9acf946017cfa2234001b19ff3d3d45a64138526ea644f9c76dbb12c59620dad9b623bf33864315bbf9dabb2013795e7605e5834f9be2ff7e5925723269b39309c776c9d173e397cd23db01bc8dcabd12bbb559a7147ec07abaa1d1974ac57221910d2439e1b96bb10f6cdde4c0eeff4598df4601b8593d50c5c7523f6303f1e677940367a2e9d21df30b17d943378b0b192e20fbdf016c2e2087b52eecb2eee2a826bea2171af4b4a161cfd4eefcc70d09761e6b9d8ce6b1116d44a1cb6766f5dfa82cd64bf9c15ec50ae547b65dc46115b0a963c3fbaccd537632d73a04ef37456f860a41b4b16128bd2559d61162fca1c283fff0f87d9943c4e6b084c93df6ec5232ee3fd2f8099b6d23b6fc34a01f86fbe2b03a4591262f2e73aaee9b590dfdcd2d3e92550547af21ea4992c804690db80b272fa5521c56091d9a15f854f994191f124f36f20eaf421778f4ac61c1a81a4efd6eb4f74fc94997c04cdf31e246a3d5ed4e4c53311ff589e2f26281d8634b88873da8db9dba7d3fa46565d59a00af984f4d914e00212155b350109b3f28bd38ac31237c3b15e7ee48fa0e54a87228e20bf25f031ae71f99beec118e39cbd978b5342ce67d98ec0050326ba78825d4d057e08fe6cfae697102aab19af8a3f8e0142b5ac227182122e1c0f547597f34a6451c7e1aea69127a433915e28d06768610a2474787b3e42f178008ac299602d7fce7b4f618598ca61d6c3f2e8f1d29cce5bcbdfc2fb609667260cf8155407a0831d8a00ffc89b9a7515e431542044bbd59b9acec84edacb2ed70fe67ae57c9b9c76782bfd9501ee62bfea10b2fca6b6b962344a454976b0906c501ba90a85d662890ace4ee60536aebe6dadbafab6748c6a8f3d1b463ba855e0c5ce52e72c74585f03aa6612752908aef358429a6ccded75118f7c60f9b71e943e6a4f5e0e1249c4a835e2fe9873076c8b2b276b308d97be3254305d1c19abd2a736c03cc324ba86fad755dab04be393fa73a3643a349c246f9b7965f3a1dae12ae40111ead3b7af95119f92daf8c0872960021b74f94f05ec91b60b54fd0bdcdbde4d3341fc7dd40e85226cdef9bd1ece0c4f83f5bdc6ed2c0a274a8eea0f2030ca688b9a30c4db0c7976d8b40a50a3732b92cef89e6d68e361331df2f44820fabcc1f7e68a673d69e69409f1980c299e759a1755481762f50309a9be177f8c5cfb295f990af93693c77d4826b5b047c8bdeb3b1bd4f9734401b0e81b9ab2e468b5cff852111de6d02582d7a4774b69155e028066ea558baa986cb6cdf0bce7ce4a14f6f2a22c9af8b0f3fe2a8a9b88ae3b0ec5a44f846f0c954cf151978cc7ae4c977639c98372e1d7dbf0091de67426c68befd0d532ac9be98664f4b2f91664893d62ccced08a44a2616a34dc66d94ccdeb735a55d56e08af5331fe898b77303cdc0ba85743fa57eb8aa18b5d5668f5ea2fffff7eb199b273077803468229e4df7303c94c2bdd68a5bfe3a661cb4f0c27e0d04af3257767c850fb69533ce527c4b78cd1b62ae0e5973c7f8c67da250d031ba57939070ce62a845782a344ea49283679b8de625ae85b8747340880cd4f34d9848374594c3267505cb8ff10a86f944febb5d9433b404f2de0cf62bb2ad7c983e366e89117f97f4e5c18687a33250cc3e7d71fdd2a62c7cce4db17bf7c6322cf37c5680b28f56d6dd8590c8feef288b3cc87f90a70d99cb44337d49ea2455bd5b5e10539d08474db97b4bb0b19983c8733792a14418e1b84d983502e6e7069e626a6e4bef0a3229afffedc862f37d73a06297c547599e632179e3e6146d04216072ab94390d1647eb5b2b904938f0ace33fde9105d5114727b499633ada928d02ee32dc52a8a6b3a0a261a3c490c6b0cb9d6520df8953a282e3589b280913ac1f1d2ca874fbaac2534cc1b7289693e2c14f893ff9c26be7ca512dc834b28464524d85746b4c397626115669b265f66b91ab64f5024af3e707335612267bd359c81062f7d2bfcf6f869b4330b7da4cb0f604a8c280e88411f9758f2d899285a576e3e1c189d3bf68ec468f54d17f614aee386e2133725683a09613fbc5f2aae4d77ce2cee4f68b4cddbec79b1a60ab8a6115fbcb48d3c97b2dfb2435608c1b7bc3d0956a31e0784933407f3f721cd8cf5ae87dd242556a29cab5a6c6cf29528b5cc0d2e13d646854c4efa371957ebb4bee240dd699e490ba808d13b4347b35881a283fca99ec95b6d0860e0403184c6e7987ebb91a8f85b0947d100ecf1a18e63efd2c24d895d704c703e0ae78422ef0632f005e57ee5e8533973bb8f4031123a6ca3611ec48c2803f4202e4f63cc484af8cd5d40ce9097295d46f457e33c486bb3bbdf53d9bceeae467e341766756ee5eb71ec65c2816779b4fe4876939d3e0533a8e545ab286b1162a80133ddea028a997ad52dc04afe72f9382ac8c4833ce4c2b195fc3a1015a28a578dad905190479ddd68a14d9b93ada4be44a1b62343d70fbd47d1611c52c6bd0769b3ca2eba14ca49b6a985acaac4273a1f1a0cc6d5c6350bfbd12f0f8765b6c9f853dc02c076199db2fed3d9747bde9663b9322182d105776f32e808b8db8f41e50109887785be513c6864b1e446ddf872245a382f0b26cadf04f0552b784adcb8899e9b929bb575d6aa7d3a4ec0dd1de83a95f165be48301faaedf0491949ec98a46dee4a41d54e043253af0258191e4774110d88b793fa7baaa7bee2c81820a5ca3bebd24c1f22b7aa658a7fb478861990b584f54492d9e86078ec47f08ba3b83e505b7641c0a845dd4761a043f7bb44e8dfe2f5cb23ea475df387de23163d78d15a377d415019b3a24778b7d422e79ab91c3eaf6a5da2190e51e5f024618a324bd6cf95b18893d6132b5cf835ca659048d9d2d4b853330a0a0747cd4b98c03a7fd9f5ce1e4ee80b45c1e15490025ef628956423c133e87ef339e7269f1ae35f9a7461e1d50571382235c298a9ee77559f5c778293da673b78b1918e7209f1ec1c885c955c6f14f674df53f5417369529676da8959d76447825928d4a619c85fda4100a4197a4786609e1e2d57a90e52c1d642271d73567cbd3bef74b51dbada77364aee078bb54a19489f6126659f653daaf8ad08da71a8dc43b8718afb800f17241d5d4635f33186a073705fe46cea5edf835fcc7a0c6e2e28cf072a58d1471c32f4481a5c8f03f4b093fbe604cc11de8e6092ecc638bb8832a06db32531930c88560863ea1cc862b1d534d4d9a119861cd6b7cc0eb68ec133fc83802ab2b028243b5e39f3ec666ac72cbf4df6863d86e8d11ac0b7f6f6a8825c3f51684998c8a067a52d35a5f4883e1ee3591929b017ad48a25f82aed229d0b0abdc06f543b7e2b5c7eadfb0ae7a38ef3620b5992515e290bb5362613d9efaea2ea56fa3ea3a8d00c768b1329b0388e4e06eff4886626d7708dbb1919dcdef0e1de41018cde90a82280bb926e565bb83e24b937a39a1a6fd404e2d2473846e385400291b6f6749e44c71fe49322dfc03eddc1c2ce7688eca20fd0db9de17d27592b504f2aabc331a0fe65e8e23926c4a663829caa6950b3e1183268939478865454b134c11a39b4ef591ef718d752c62d6dc4fe7d8c76c9a6ffc46ba724f598c518273f41d48692dd2304565ce940e5f40f91b1764edd82f1997ea51ca210d453fc48847793f2f3b61057e0aeb749a87a56a0921ae246711e58d7ecd83c8a8c2460c10a269ec282af034be9a10f8678afc2f7ea8e812ca2d6b95d8437377fdc6ae63105e53c43d7aa1d59eb73665569fceb38ef8f633e92c4815db0f92d33a40dfe4ea5b862fa07ca1743c2b22dae600945315925112a6164ba1adce947ef3a1d4e44a41a07a775a379b515bc3c7e6d7cc250e92b26c1baf43a5193e74167660fbe467b1e05a881dd6cb96bf30a98988e259115a80b301abecf03955568af842cf85e94b6818b20c5680e364ed6b5930796da1913e508d1bf100a169b1d6321f0384db93492618ed80190b4085623df78b879488965bf3cd6ebdc0f40bafd3bbe4f02752205df6b711b099c20ec099af3e9e4f2586b6d678293c9128d948618eba3bc469b9b39856f8e2aa1c0d26a27de12680fe887812939d1b29cfe0b46eb395b6ff1bb42d62ead411519e272988d80fe36a019b2301ee13170dc5676d00902b77c9925b33fd82f41b20fdd456534eb26a50f991854c212adf0b369a6d5391dd200ad6d91000746db7abdee7dbd0122a2826190231bced9e4f6796453588d98c9ee70cd88b9cc6407f62d5043618cfb1cb294ed56377ee357496dbdbd97095dff75566a3af6ad3aec62acbf462040bf4e05570c9fed4d82c5321e02a6453431e5d8fb96c65b1f7090349f14aabac37483c1c25f23bc98e6b624f8aa816c896bf55b5638e991248bfc7054e799ceb2535a6bedcf37142706dbb9cb477850e6b120377767d8185d9ecd8ed804ab15878346f2dde8cf8530be6a5caf605cf8ee80e3d78cc9f97a909dd1cbfbebd9cf51e21c04d2edf89a8e3ca0e0eb9a146d5130c9fbb190d629d415e98a1dfbab75a410484bdfe3eef8489e6554b8fef1019329a9efaf4730ec87a2c5f477d88373ac057307a681d79871789e889758bcf75a7186919a596a26b95f6c2c174089792b2ce83f20192a26e2f43e90e57586653a333ff16614dbf25ec3b370548e119526fd79c130237ecc6be63331ec086a346e5bb40f00b98493632ba3ba305cfb4b547302bc97a6a49af3c1440b89a3d950798886592475e2c2f7c3525d30a5c894392d3ee72a83537a9b300dca60050fc2abd047268dcade1549773836782206051f77bef8017673186f5506667bfc7737130a5aeee29e2820c03bf2a9e80910e942f25252dfeded320623bbc8af60bf0ca7897e54a95e54692b3bc832a9474856ab68ac2fac73555d9bd00e6124c14718b75e65684c413699cef363e5f1c84b16ccfbd8439648208254d59acae919dc7ee92f22a891f66a57417736450aa1858bd9fbf9f89f1f5f4c048d179cc8c2f5ce60b516af3e3ca6aaa2b44cee597ff8a97654eb649bba1a6897f1f025136039c0d6ff61d7844e471603febf3b273b024c0cf5f70d5b062b0d824a5885e9fcead3995dbefacbfdd8aa2b9b05dc4e674836c018e090423b49de4782cbfd515c77922c2dc3dd6e90984ecc089f3de5c3e97f89e45a626da98c32db72e74a97d745cf4933d0367e3be924228fd0077251c6205601fa9305f2fa56ba06cdc0c273d4e519eab8f13642ba5711f54f808bdbf4c5fa78c599112c16f719ed70aec3ee4c1bc3a8370fbc5ceafcf1d2972afbc4efc3ef283d9d876e47f327a95569e14c62283237075fa5741ad41e094a40f006910d849ce73ec764c917c532ac02722af706b51c5aa0944921ab9a4ff4ae3005b3e6d6011311432db1396d5e81b72194c089da747ee838f4f2dd74cccd31cefa09b916d058746452d61d7730d74a3612c5148a9620f934bcd6fdedb3b14561c35fca3ffedc4d60a542aa7d4faa34868e24e3247e92fad55b09630cf446d08224b7649e09e1b1b38422dd68970a386f5983626e789e6e5fe5eafdbccb24cbdd98af212105ac53e0855b0260a884559b3e35636ff8a5f59179f8ea52e3f71b88de9e3f8d107a8bbe8429bfc2f12f6808e4228a5ac022d732945b5d71596a4576d8aa1aee3f8b767b57da598ba0103f6dc606cfdd4f4501694f275a05496a64c7c6ba5d461b89ae83ed39bba52b0f50d7c52f99ffb2ec287663f79e543bf203f488fb98f60cdfa6b32c549e9ed1697ea6cdcfdd8a2e0401eb9927224bb064fda65c65aeb0a0f8748d756e4b051ba48280e90a64b24072b2051b0c87251aa3c6b0dbc1699eccc7e2427a08401c7e0755ef5c56b58e42297483dfa32fc0488793406223193423443f1c6fe9641471cb11e3583a5a7e7d27131d971a6c6e6c27287fde70aeb19ecdcede685f8f58b611b74d27808d0c899af937a1d89562fb01fb2d9454bf6c6880538e0197aa02951f5605cb93d124d7817f92abf205f830c0ac300b83a361891bde868dff7a4a3b9125aa06d1aaa7102356f52d23a331968f83252cebece2539ff730edb88bcdcf01e79cbdcebf5b1eef4b48c984ca346d863b3ccfa51c81410cfe95c7c8bc14dd6e6433c451fb420732955ee8132b0ed550bdab0e0cd228b516ed62ecdb489bf5b33b0f1d5ed45e49cb4dfa8143bc68dc265d93f9518790a7c49c915b2fbf2defe9b0cb656358bccbab080e4a2b135a13917fcc02ec9f59cbf5d5336ae841c972fdf72a8974a65897b8da9eaaead58c1203824ab2875bb95f5b6191de64c007f5eaedcc45830f8b8a2e1af58ffa0466fe377f4b0fa1cbe1f2b30cedd40142dae2a7b663e6c1592c1b5a43d236c442f062ce7368d38811bfb6d6bb6c76dcc11cff46d44edbb84b5979210044f96025329a9a04197d5a5c9958b756dfa2b8942b101ee3165161c4a515a4c4ee42f7f5eaf60463f1d6108502c61f0e10375f422d98295ff0c2274da222aa3b4ede33c80e2492a887b483374026b99f5a1aac061363eecb7738b8b60a49daa7720f327b788b9c074785a94146c4a52025217158030b522740ee8c13f4646df593b8e8bbc0fc821154402576283d635a8147f6315727fa1679d342951b22311b666518175a73a598a9c6f46ccecd6bbdf9f1f5bf92ffa5a551b3541b399745baed26ae0c91e3551daefbe15489cd31b2d89328237c60b4f4a5f857e2d7690dd83042ae446c7fa0cc8d70cc8939d79de8af57c32fcb86b3bac0efb36fba8f3e3d9b4fc2afd574555b9045f8733c1138b2c0202b5381a2fd5c73fe4312ffae7a64592a409f47b9bb458aa82d5469eb7fe35a333c74e595c086756d5af76770eac9b5d92d71705bf759d5fa0ce165010e04ecf159061d65ad346cfb26918092747260a32416ba632eeae7e4dc936b254adcf24a85adc2f9b931d3fdc9dada49edfbc924d4717ec529f8c6a4da786576585fa130337505f4beee0b9d09e269b9c9868d80aabc0706926f2f59fc140c607e0d977da229b831174458d312b36d447df4a25719b345f365104d88249a3fa762b2d8ddd4f01cb1b1b94bb10b17b543cb5db5cf58d632dd0440745ec094f8a86edfe63b51486733a3b936de01be1f55efd3975ad5688a5463a88d035795da6884f0bc6c8ba146b63c2e44058b77bb2a0ba9ca0f52944ac22fcf1f11f308af585c7450339192829ce95a7a43d1eb3dcecf3ebad95b1a0119ecd9cdc6461aa4b2b948b800eae6e66d790baf9bb53a58627695b03b0263b82884447b0c753511ea9d3c43e635b845af87e3c5cf675badc10a699b02b096aed65dd0fe456a271c8973c53c6a5fc8229c44944d34796324b7154cfef0d274d41dff43f5016f4333f1ada8f08a42ec7269879702f72c11bd264bb7df0c61a46377f6d7dc5b96192258d5cc0bf05f001e495c53c77c9e8731218d0b57312470e962f54b9c9daac36bde48b49171126077c2b08b7e0c157c91a32f53fae4889357ada70c5db01187db54520839bb0e0634b0ed2908f505eccaeee161d470e96a968f5c35b0edabc01b17bb7e0a2e87ee69c30175d35e5dcee928438c27c598b4b0cda4b87c10088d12fcc8ebf4d08a4d10d9218a7edd846e6c91dc4d18f524a9fbf41620bea1d9a62453559212ec55c523e9318ae95c0a97507d643169150389100855b5e09ee1ccaa06a94b4c614db8a7bef7bad1c0c254a6b3155b8548eccf7216f56e1c0003b09825d0a51fe56306d12a986b72c8e8a14e987d21e05e07cc24d0e88a2ed6df777c92c81693f1750d641b7478850218c0dddf307232f9231cf58a4abdd3153fbe72b106e419f8a74b945100b763c61be11b7c2fe8f5e82b2bc463dedf39b98b5752b4012399c6527764a1a305a2492088cda957f14ea233db8568d7b1932fb733d7283df43605cdcd1710a57447896dec12ea9d5bc8f1e89f318eab3e04183a9db8d65e04dfd4ca79b0ae794c048223c8a392136d491a0204d42fe6999aace17a7f8447b8a05b00b1f867568bcc9450b313e9f615adafd35a6585ce7e366fb4de076a516d8c0b0b4b45784d3118e0746ca5b08df159ac003cba69aa3995d19bb35204bd86112994d34f8d305e722deec03cccead1345a405646a43a58165e06591261371bd9f9c6b3c189804af1d5fc38dbee972b79a7794fdef3468170686f599b8c3061d946f280c6cfe8eead6d156f6f9a9e334d0be6bba10e3786bd7838e6c5da6fd3ff2619dfa5a9a014e6bde641f416696a9e23ebeada2c05d05f4dfb325b5b91b4a5947d0c8530ff7399d36b3560cafc81922c1a1eea642f1cd4665f77636e0d22bbd6eb0373cce876cfeb680a93ca4463805d858d9ee2e0ee4f340adc38e6b946331cb366d93d584b8b1e632d31c442490522f0cba79903c912acf640d607aa126413815ad2f242b52c74d9f0833cbaed765decafd0bebdc72d085f978c2f71f63cbcdef76149eed3d26c15ceb9da8298d9203ff81aa3eb8a7272de9518dbe6fb869434b1b46faf44e454407b72aa633b8668da528998a0a3f407471a74aa6ee454431b178554230cbd7cd4a4aca7aae0a68919fa9fd16fea0d59b8bd0189c067e8a9a6d10d875732b54d2aee1e22d5d6353eaa6bafa8aa2549dbf1232a49c6f71d589fdc84c3dfd165b90da29af10987a4b305f68a22273f1fbeca21158f8a48e66707168729a23a1195add9da421b1d56a2921efa1db9f9c5f9e6567d5e9dd982778279e6667176283eb0857e4a6763a52fe61a5a9dac6bebe3b55872b9fcf113415f93fc77b1bdd437128895a66ddec751b6f9a60b05a33a8467643465c8d2528cb4fbe00f5edf4a2ac42f06ca242142f828e1b10480a560a393681d3e37b7eefb714cc02b104b745036213655c4df572608c29a950f3aeaad403ddd7d4221fbb9064c4e33117a7e880b6408f14717546cd582d151691e2e1e53c88b250acd02938e96b6532526380af94441e3b072c94498abef13f6d4b709118401a8747406443fbe1ccbd8a93b3704a3eaa2a15d2f2386de5ca94502d4609c86cefdd065a47c31308c6dfe5b5b6dbabdcb91e78610698bbf4301688a10484b25030ecb1ba0fb65f1bb9e7a20697c1f6899353f2a176cf7c230df76b837ca831ee5a936fc62ae756199c99620131e9cfc9ba1b541df9bdb7d144cede9b00f3803a31204e9a0738d1a2b6c7305abde1da3489674b137bd8342cc84b55ec84c3c1470fdbac934a2355facf06c578a50db73afd98f9bb9f8e7b072555b69869e91e3055dcb36e95a185db3a353279e1fb700c22b901ff28c23be82b8bc223034161f341ca8abd83b5ce301f77177b968a9f3b967363d52a60acd62558684cadc9a71aba8783cc465fe693165273591b46680c17fb98367ae5f49accf496215c3801a6c0b00b64b29aee0d51b7a0ce610945891f2dd908f81ea56ef5371175b004591094584499da27e22e438ca8718a78788ffbae17d6ffccc25b178b1f8a5d08eef552bfba0eb51ae07a342afa33f04bfbb47b2b1103555a55d39081a6a562402cf77b8ba8a7df7a50ea83a6f69346cb63397030312827c9c9d18518c3ced4baa363362bd5b3d62da5d29cbdc4914ba009e452bae28217a64d2ec938df0d6e4731d3f028d0ec9061447233f9b7cae8587b91587773e5555cfeb4e978dd28948bc4375539db28e3146a30d60d177212d5204bf1cd04e395083c6ac37664470c4ad118d30eb550309da2852d00e59b071a1c8f2f3c36c9dbe916a491503f247e3f27697f0370babd8e68fa4749f3d225de5a15a937bfafb2bd9db5416177416d244d2394b1fde8a84fcb820c8a9bb94d2669778edd61e5a673d453afe654f7cb772da9674f0b8711e68fde056e75ee10f68d1898afe6005ccb10f76fe9370cc0cfbea6ced2258cbba7643fe8c41c92ef2a203045fede955dffc832f8a16048c93713073f00bd0dab63b4dbd7aeb20d8ddf2002e0225744b3607340077b26bc04fb98757173494095a59a1807a99aa7f2d3fe8ec1486169d927d1b47ad925df5d46b2c0f1b3998bf94592a44097d1e3e1c9adf617285acaa4c7c18abf4d9bd82e9846e5d31b3f055649e4951a1570199b8a39196d29c9c22fcea7f8a3dc2aa7ba8567c7d6d3a4b68e70e0d74ad5fb4888ea0b6b681ffc782b942734cf249e86de9319e2d2dfcbec96002df0e06e0547a9d03e83701cb4a3096511fd22865e57b74090e76beb0e642eee8201a7fc0eee2557d7172a40c2c8e29d10febbb4bb8bae1ea3f870f02119247d5e2d982a9e9d272eb67027a905bb3ea04b325901c6d5c4c9b2bf6ed24f38fa1912e23164128503f8e1d689a82e412113a6bfe745e08d319a98ddb39bcfc3f4c27b74b85aefbba47a729e49f2845c1ed370d24ba83d79db17c69f6083ee515afa17e93e4622a514218b48b283421b49844d51404654a3d66812fc3c8eb1568cc61b1b6ac02f765c5d94af97e5e5643bec8933ff0dc1c3ceafa259ee438ac68b17f0b2f78970d87d5a00ea3bb1f32b8ca40f8b6c7754a91803739b800948c6c9853c6f550cd48cd2d114475b8ba71fdd39746b4db7ca2f6188487cd14cfb3c00b7ba8f578ce4a630aaba71a10414287154d2a597e9cecf51695fac697ec6bede72df045cc35d01c04cf479abae3d84920271686a4d5a072fa232bed4b1e0badfbf0ef3de47f607e0825c5a37c01087c41d1a16c421d67ce38e87ba671fcc49fcb37904206c248da89e199ad42a2faf74e2601cffeda54e66f344afbdd4d54e32d0ed3d9d239dcfd7b762e9230473d12aeab25c0a16180d9de0b78429482044afdae84553f076cf86dc07200b96c5d4fe0da8248c66835d8ef4bbaf818cbf676f581b9b886b2b254fe420806094a82a074ad5c81f8bb82f958b2baeb49eda57cf5a5b1b9fa45ded60315c61ffb98c3dded9176e854727140d621a52659a106d58d9685cddf2e7ab2a277879ba115429a034587ee13518f3e2ef32fd93c5726609772948ba69f3787c019787c75f94eac3e60f7dc744e7c5578c9720df2cbc24caeb58e8152448e746e9dfef3df1fcfcecbe670b83d6d33be4c39a6f7abe51b801ff1c49bfa67a8a74a5ae0d6df120e6bcffc4f05133ed618ee29cecf3b3f47e12355a55c1522de49544d6464f1105b319cd8b9e832d27f5c09340b6103d6b0443be816875510413053107d943c54af0f397616a60ae24fc77f98c00f3817234372ea218abd254a173c865017d07b883f5570073627fab1bb19a11e660c0736d45b49c0e3582e7467de79c71dc4c6d331663393c7eee2060c88844ab9df074d208dc22629bd4841234591c63a3c85e7b8c74a0c4b9d3dd92085d47a0510de6f6a3c6d37abf6efb88bc889482fc1780374b6f6fbd7ecf5b726125827d9f7ed9a6bf5876147d75d56ae8c546d24a9744ae27647573fb7c79454900aa822f1475ecc20c12e37d99d4518044cae9d22249596eaad235cd21bd83ff1031bb4fca06fcddc17cba65edf298a250a871bebf789c56d8c67822bc164fa9223f4edda25a5bb0f8aa91510ce7abb2b17e195432a9083cf8e94147c189d2286eaeaee15985d7f08dc30a2c4073bc0c775fec8a476231e23ef7a5a1c4c5e01ee00e3f4ce365d1fd62ac55c6cb278a6c8aaf9b98b1e19adf240a0e6e3f2043004a727bc2d0984454f5d06166f6653db8ae34bac60e9515b9333b1b8e839171e2d5e8f7a6494ade1620782c26f474025c606881a8b15ff3d2cc6e4d19864e9eb12f6107699a95d32f9bdf9b1d4ddb4da4bd74bdec9b070929150111381ffe268a0b2ec77676225995e177292dcdf547bf67757543e6f7621d0da8230ed09336120158d56cdfa0761359ada75ade821ddc08639dcd4ad3d7beb590a2a6b95beb43d46e32af74ceb9fd73036c91e2e576299aac61d7a1f4da075973f6d0d3560c6d907e4c38177a2c1ce5ca5ddcb69ec4d9c2a25b11e06d03ec758a7072fb5d1b6b0655cc6183566b0b649d65e10f7716b61346fe88fbb10fcccb7a92f2101814c3bf1d2c77a1612ae42a241772480df57ccf39d20c32ca03ca81edcd05fa9236bfa925e3a06589786cbc94383d3cb38aefb3fc97373794faf3b762f6fcba4088e09afe230e6c45ff2e0483fa2dd2be1ec69569bd75a314b4d3dd5cc9d9f6e56d8ca0cc5fc38df89ede658590ebff1a94e24bd9003c98faafc2b5399c2360af3e89af980762fe059bd560e832de9963acd5356d3c55e4b3ddff1514b9f9503ff315838ca69e1f7977e88a6e23a295baec9f64610980b488846af2d63121c6cdec90da0e83d997c23c9665d94ad96a39c6a7024f1a2a5944ff8f414b4ac4a2e9773adb2f579f11d900c9d4a06419403f69100b9c3224668069d8a7d8ddf62ec6c1e98ec08ad9ac6849fbf78250c9910abd9425a20ad1598f6045d7510780a28808bf8c8c4add9e1ac38b03f303de364c4a1702580ea5f06b119ccdcae36bac7052416be6d257a3c24ea2dbbfcc45107632c19fcfa8ebdc6e063d3575e778c7b23462f255124a172a83b3ab5dce49acee490b1790b99d9abd66dca2993761c9180d35e08b97f85218a4727a6c3938556d2ccdbe5844d96f12d95a9d0b04823ed151059acba1ea609d2905f38057474e3e216e92cf7abd4d2edc5a0a06d62cb84f63d31bee5e264f4788553ea403145f48aa94c4c72d8caa9c2e60ab7273b2228aedb2eff3fd636e0213645ccc2128eabe529e4ce55e17385b7f226c8e20ebf9a863bc3d99fc77a5b046a75e696423f70d4317716b34bf25272adecde2aa24e1466636cf37d1b6d98ef05ca58f1a6a6e6e12d4f4ff9fabb62af4fcc621c96d0f2d0c8bc521d0218cb66dfc734b870cfac59caf506215f37d3c998aeab39699825a68866e11c316508e202f0346467f85cb41862a77a64e7a47bc1b38da299358b2a7806054421ee4be7695ade6c1b642847da0e9c0876653e8f69eb96676784ce11edf22cb7ef5bc4aa143e96b50f3013bdae54dadfccba49e11445f5526f22294e8e0f9a6d15a3d271472b7984032a69621e8c9b5e9383a7d4a9424dfba2834b1013a3158d5d8a172a0352046d14af9a427be36167d18b7e16ff35bbcf44d565f27b367e5c456371cd274f039996ce22127a6fd91a6699cf24665969bb43155c9e5ac1ae3bd49708c6234a525868abcb4f16acc59f4d6a2c4a8850b538105b3aee4dc56b01fd16525073f742a046b81981ddeed771f40812b8f4c9abea4c20f029cc21c05d1ddeb04e50c11a72300329737c6f822eebafa720b43a41242ddf0dbb178b350aee2dd4ca68a23a53c78bcf9ff993e9e029644fa924d921e4249813c540b1d49dbbeca6d17c49baded122fd6fbde9f0229d1b1611c7be2fe748576f10acb06c5f940c3b80483ad94cdefad6c6b7ec251fb688cfdafcc1e1742b49e3478b1938a31e3fcbda74894fab6f8776f8c0cf55515a21d6b793f2116ee32caecb8dcb0c3be47ce690ea0aaacf49969b0baedabe0b55c02780e9b787cf1b34aed537f046fa85632982b50e4406fd953ea01a7daaffb172754d847133fa58e57d9cabb29b35b78561240ec887c2371699b1f7fa9fe3f33d49b967dbd8097386e2fa067e6ac297e7d4629d3a16a3753bad790a444dc5a78eedd400fe1ca24fee71a07b56898365e62e47b8a40baf9279850f652693fbcd0ec92655399e5d71a26686a8fa2de57dd84f6282298db9b7420186bbe68dec2fb4aeda31cfa74bc957597305165760c2e8032e3e8dcbb0a46d529488c05c78f3bdd651cfd4701caf9ebfa658edddba6aad7def31e665198586108a8b1969f69bad425db157f121f7338f74e28f0252facfafa11869a94a3531f1c011d18bd5747d0c0ecf25eca69cfe417267004a1333bc2d673c551575a86e372c56c40c8b1595ed0359c90254c6931195a67e5b09deece7e38442c7391cb25842fd1fd529b31f9388646847a5e7182517b9d71f3b5572e3d68f44d4a56343582a8d388d5c067ab1084046650563ca8bac9529e719b6430468573e98900340c5d9d227d09dceafa40a52ddc1e6fd2f203ae322f195581f4f538f68866d5eb013b2a19f9c48a6851018255ae79090574f745bc8c664aadeac3adc7d9be3e71b546589116bec8cd8f318bda6adaddb08841df8c3a2fb36f50f3eeff7ee9cdd854067c81cff3e5204f1ae652cbfbf8da1ae6f00198e27c51f06bf2c655d764fd18d5b030a619cb5efe99fff9b906b5efc63f9eec400e435fd266747ebf022554926da71bad8d746c3c5d536d925cb17ba0867249b519fd63ef86bd14ef3263034a923ac9f21773a7f75baa7f4b7352cf0fa63a51056353f4a67ebc9797f85a64365a89d610538ad83b3c2d1522261cbb90887be29d4b40c529e255a391fdac35c8edeef601cd05b855c6e307abca8544ec51c4c14089f0894f9089587c807eb49afbb0c6ddfb14c912b309fa338d36f74538aae628c39a7e38fbf9ad74134c763bbc3ec73224b5c8819191e011e540644f585bf65dad1421518b9177a61b54c468f2a9fd85ece2c579df3e282b6fbb58257f8427acaf65bb4d58378a32bbbc4fbef8b686d58b3693de68916cf87364d7fd0a3224c79c4786240a058452daaae9b6688a05c7a19e507442d689fb053afc067b06b95260acca503b2f802a7b960dd87e9243aac9af8582863848922f7b5dfad2b73d02e7d22637f1c2cf026515a4e69e76940c4630a8fccd3b64cc2f0b2a28e539589b47460cda42048b6022411edc878bb0d6982545a3bcf8bf619fe67da78fd79562c5f14f408e45f08cc505ec406e24ab9ac3a2bf4a17c052b0da2d4462725301539c7d298084a1ad7858ac37b1f6aeb77e180135f57ca44ef929f25f2b497d34d39f95cd877a43574c7793fd920f0a2b00f157aa5d99b68ec8d66241829b809e20c244578e39042ac8b9e123d3c525a01018105a3c49724bb0caa3cf36cb2ef7b6df4aaeaceb70a90f0a9c9913c15851a87d734f8e328eb95165b1010b9b7d7a5b5e6cdf99bfd0cf7c3d05cc3eab3b4a9d25e78acd8de42087eeafc0459b6763890ebf5773f92d4f4399e16c8bd9a6b534706027c1cd0d87f804b1c215bc02fce329448e38de6aabc0522e1465bfbaeda7e2a40f32f6e852ca0ceda8b40b5d8db716aabee566c39d325aaea1c6f818f8f8d09b7fdeaf0b58317d23dfc6f0f495c0ce974b062c00b8212d6a5b1bec32c815860f0a7f1b73d6c90a1112b8c188af4d37d3eec19571ce8c2f64eac82fb63cfb4c73c4ee06815b7074b238be469c47c8728ee16e2b8ed5e20754ead02254de3152113acb7e34facb484ab1a3b8a05b81e2df008efd3a3565ac3d2abd934405fbb9f936db2bb206741b0ad1d449fbe2d651d1bd766c3a687f2e43bc6ae9b88c9612a43aefdd170140f58939ec863f4722de173f37ab4af94d262d368bf08a7a5a04e76fdac3477a8e2f73e8591280f3d0f6bb3b4c5738e263425222a7c9937506c40f26efee4b05444bc0734c796d92011df8dba4ffe0a6555edb470326540a6a4d351a080869bf25565c42671f5b827d37bc7396c46c034928d085e688045c1ff38a0688d5b568300ade78bd380cc51c54a467cdcb626bfc70f5786d967fb604cbb0c1c710545da30e7173e8c9a6ab206144abfbd2d6bb964ea34a31f24d2572cea44c120be0b3173a6d388c0c7fea2d4d7041e170e483c98ebf7f327697c11465487aae627119bd04ba7496de90b4700a251e6bf34d0a7f3cee5ca59b955c20ba753318d55a75a26c10ace024871436edda0ef37c582cd8cddd5cc694bcbb6d7fe9ca2e3e1b32a0ddf4312d6f0b9fa5e3912b24b0b033bc54f8711b109a4aca6cb63346eb4ad8a680555c7c976572483676986bff857608973f65e51d434b7a5e65f587936303d01833e1ffea75110b5186b29ff671b1414a36455b643f03b722054ef1989775db35cb11b81db598fca5171c6305d476db14e471ed1e9ba9711811da6234dc270928f94f39afde034d092ebbe90d5e68f602c61daaada27f8b6567fa14b528955990fbb8f7f2e8209a68f4d19969acda67cfa1dc7ff2eae65b4313ecc1c238c4bc0442e4ef2ad532dd272b42b533b16807fff95f1cc77ec896ed8cdba7e9a892b72aeaa0dc697a6bd0061553f07de376c17ebdc23eab6b7b4d2a7887a3176b91240f56b563fe84758b6c9f681d5f4560d7dd2950d7c08dc12dd89c69082b1e6a9655b44e4b4a3619e5795565cf969ec0f35e3713a9b8b2230ea8a228ac3bd08501d21164d9e5b61413858980b0156e701051089868734fc887e22ba6cb40e65c9b424b6b428d9021240ef9631c34d4719e28d795946dc6ad73d2b5dfac0b4835a88fd9a5d75a2073bfae787511e0555f0d4c03a8fd47f4f1b58121d05759987a9a5b12f8e5948ba2138e2be089526349e5ffe5503a54ce01d43d974dd3aa158379da7cf915343206b28a1fabe8b152acf0a46ae8422bf00012ba6f34353477c8f48aaae9a4cf855d0e5f870f43adc47235bc9029003e1915ae9be99f4df8ebdfedf2ba4c44796a56368884b28080abc53a403682251649aea3085fd664d5c210377ab108a3077c9915d95114765595b61d360bbe74df7a545868c96d449c64c18901049a8d79808165409a8f73f2a4552837f2b1ef5d2713c24bc8815dd4713f2ad6ffe3e451ed9d589ff72d2c8f472133ea9ca4</script>  <div class="hbe hbe-content">    <div class="hbe hbe-input hbe-input-xray">      <input class="hbe hbe-input-field hbe-input-field-xray" type="password" id="hbePass">      <label class="hbe hbe-input-label hbe-input-label-xray" for="hbePass">        <span class="hbe hbe-input-label-content hbe-input-label-content-xray">您好, 这里需要密码。</span>      </label>      <svg class="hbe hbe-graphic hbe-graphic-xray" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>        <path d="M0,2.5c0,0,298.666,0,399.333,0C448.336,2.5,513.994,13,597,13c77.327,0,135-10.5,200.999-10.5c95.996,0,402.001,0,402.001,0"></path>      </svg>    </div>  </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]>
    </content>
    <id>https://www.lynx3.me/article/53963325/</id>
    <link href="https://www.lynx3.me/article/53963325/"/>
    <published>2022-12-03T00:18:19.000Z</published>
    <summary>
      <![CDATA[包括 Markdown、数学以及标签外挂。<br>密码为 114514。]]>
    </summary>
    <title>加密测试</title>
    <updated>2025-02-20T15:56:24.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>LynxCatTheThird</name>
    </author>
    <category term="科学与技术" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/"/>
    <category term="计算机" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/"/>
    <category term="前端" scheme="https://www.lynx3.me/categories/%E7%A7%91%E5%AD%A6%E4%B8%8E%E6%8A%80%E6%9C%AF/%E8%AE%A1%E7%AE%97%E6%9C%BA/%E5%89%8D%E7%AB%AF/"/>
    <category term="前端" scheme="https://www.lynx3.me/tags/%E5%89%8D%E7%AB%AF/"/>
    <content>
      <![CDATA[<h1 id="Markdown-基本语法">Markdown 基本语法</h1><h1 id="一级标题">一级标题</h1><h2 id="二级标题">二级标题</h2><h3 id="三级标题">三级标题</h3><h4 id="四级标题">四级标题</h4><h5 id="五级标题">五级标题</h5><h6 id="六级标题">六级标题</h6><p><strong>粗体</strong> <em>斜体</em> <strong><em>粗斜体</em></strong> 正常 <s>删除线</s></p><blockquote><p>单行块引用</p></blockquote><blockquote><p>多个段落的块引用</p><p>多个段落的块引用</p></blockquote><blockquote><p>嵌套块引用</p><blockquote><p>嵌套块引用</p></blockquote></blockquote><blockquote><p>带有其它元素的块引用</p><p><em>带有其它元素的块引用</em></p><p><strong>带有其它元素的块引用</strong></p><p><a href=".">带有其它元素的块引用</a></p></blockquote><ol><li>有序列表</li><li>有序列表</li><li>有序列表<ol><li>有序列表</li><li>有序列表</li></ol></li><li>有序列表</li></ol><ul><li>无序列表</li><li>无序列表</li><li>无序列表<ul><li>无序列表</li><li>无序列表</li></ul></li><li>无序列表</li></ul><p><code>单行代码块 with Both Chines and English Text</code></p><p>分割线</p><hr><p><a href="https://www.lynx3.top/">链接</a></p><p><a href="https://www.lynx3.top/" title="这是标题">链接（带有标题）</a></p><p><a href="https://www.lynx3.top/">https://www.lynx3.top/</a></p><p><a href="mailto:email@example.com">email@example.com</a></p><p><strong><a href="https://www.lynx3.top/">带格式化的链接</a></strong></p><p><img src="https://s2.hdslb.com/bfs/album/335657374a640f1748c290003b8851caa7db114d.png@1e_1c.webp" alt="图片" title="哔哩哔哩图床"></p><table>    <tbody><tr>        <td>内容类 HTML 嵌入</td>    </tr></tbody></table><h1 id="Markdown-扩展语法">Markdown 扩展语法</h1><h2 id="表格">表格</h2><table><thead><tr><th style="text-align:left">左对齐</th><th style="text-align:center">居中对齐</th><th style="text-align:right">右对齐</th></tr></thead><tbody><tr><td style="text-align:left">/</td><td style="text-align:center">叫做</td><td style="text-align:right">斜线</td></tr><tr><td style="text-align:left">|</td><td style="text-align:center">叫做</td><td style="text-align:right">管道符</td></tr></tbody></table><h2 id="代码框">代码框</h2><h3 id="编译语言">编译语言</h3><h4 id="C">C++</h4><p>来源：<a href="https://raw.githubusercontent.com/argvchs/fastio/master/fastio.hpp">https://raw.githubusercontent.com/argvchs/fastio/master/fastio.hpp</a></p><figure class="highlight c++"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br><span class="line">441</span><br><span class="line">442</span><br><span class="line">443</span><br><span class="line">444</span><br><span class="line">445</span><br><span class="line">446</span><br><span class="line">447</span><br><span class="line">448</span><br><span class="line">449</span><br><span class="line">450</span><br><span class="line">451</span><br><span class="line">452</span><br><span class="line">453</span><br><span class="line">454</span><br><span class="line">455</span><br><span class="line">456</span><br><span class="line">457</span><br><span class="line">458</span><br><span class="line">459</span><br><span class="line">460</span><br><span class="line">461</span><br><span class="line">462</span><br><span class="line">463</span><br><span class="line">464</span><br><span class="line">465</span><br><span class="line">466</span><br><span class="line">467</span><br><span class="line">468</span><br><span class="line">469</span><br><span class="line">470</span><br><span class="line">471</span><br><span class="line">472</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cctype&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cmath&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstddef&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string_view&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;type_traits&gt;</span></span></span><br><span class="line"><span class="keyword">namespace</span> fastio {</span><br><span class="line"><span class="keyword">namespace</span> symbols {</span><br><span class="line"><span class="keyword">enum</span> <span class="title class_">symbol</span> {</span><br><span class="line">    endl,</span><br><span class="line">    ends,</span><br><span class="line">    flush,</span><br><span class="line">    bin,</span><br><span class="line">    oct,</span><br><span class="line">    dec,</span><br><span class="line">    hex,</span><br><span class="line">    left,</span><br><span class="line">    right,</span><br><span class="line">    boolalpha,</span><br><span class="line">    noboolalpha,</span><br><span class="line">    showbase,</span><br><span class="line">    noshowbase,</span><br><span class="line">    showpoint,</span><br><span class="line">    noshowpoint,</span><br><span class="line">    showpos,</span><br><span class="line">    noshowpos,</span><br><span class="line">    ws,</span><br><span class="line">    uppercase,</span><br><span class="line">    lowercase,</span><br><span class="line">    fixed,</span><br><span class="line">    defaultfloat,</span><br><span class="line">    reset</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setbase</span> {</span><br><span class="line">    <span class="type">int</span> base;</span><br><span class="line">    <span class="built_in">setbase</span>(<span class="type">int</span> n) : <span class="built_in">base</span>(n) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setfill</span> {</span><br><span class="line">    <span class="type">char</span> fill;</span><br><span class="line">    <span class="built_in">setfill</span>(<span class="type">char</span> c) : <span class="built_in">fill</span>(c) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setprecision</span> {</span><br><span class="line">    <span class="type">int</span> precision;</span><br><span class="line">    <span class="built_in">setprecision</span>(<span class="type">int</span> n) : <span class="built_in">precision</span>(n) {}</span><br><span class="line">};</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">setw</span> {</span><br><span class="line">    <span class="type">int</span> width;</span><br><span class="line">    <span class="built_in">setw</span>(<span class="type">int</span> n) : <span class="built_in">width</span>(n) {}</span><br><span class="line">};</span><br><span class="line">} <span class="comment">// namespace symbols</span></span><br><span class="line"><span class="keyword">namespace</span> interface {</span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="keyword">using</span> u64 = <span class="type">unsigned</span> <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="keyword">using</span> i128 = __int128;</span><br><span class="line"><span class="keyword">using</span> u128 = <span class="type">unsigned</span> __int128;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">constexpr</span> <span class="type">bool</span> is_signed_v =</span><br><span class="line">    (std::is_integral_v&lt;T&gt; &amp;&amp; std::is_signed_v&lt;T&gt;) || std::is_same_v&lt;T, i128&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">constexpr</span> <span class="type">bool</span> is_unsigned_v =</span><br><span class="line">    (std::is_integral_v&lt;T&gt; &amp;&amp; std::is_unsigned_v&lt;T&gt;) || std::is_same_v&lt;T, u128&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">constexpr</span> <span class="type">bool</span> is_integral_v = is_signed_v&lt;T&gt; || is_unsigned_v&lt;T&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">constexpr</span> <span class="type">bool</span> is_floating_v = std::is_floating_point_v&lt;T&gt;;</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span> : <span class="keyword">public</span> std::make_unsigned&lt;T&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span>&lt;i128&gt; : <span class="keyword">public</span> std::type_identity&lt;u128&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;&gt; <span class="keyword">struct</span> <span class="title class_">make_unsigned</span>&lt;u128&gt; : <span class="keyword">public</span> std::type_identity&lt;u128&gt; {};</span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt; <span class="keyword">using</span> <span class="type">make_unsigned_t</span> = <span class="keyword">typename</span> make_unsigned&lt;T&gt;::type;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">noncopyable</span> {</span><br><span class="line">    <span class="built_in">noncopyable</span>() = <span class="keyword">default</span>;</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">noncopyable</span>() = <span class="keyword">default</span>;</span><br><span class="line">    <span class="built_in">noncopyable</span>(<span class="type">const</span> noncopyable &amp;) = <span class="keyword">delete</span>;</span><br><span class="line">    noncopyable &amp;<span class="keyword">operator</span>=(<span class="type">const</span> noncopyable &amp;) = <span class="keyword">delete</span>;</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">istream</span> : <span class="keyword">public</span> noncopyable {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> base = <span class="number">10</span>;</span><br><span class="line">    <span class="type">bool</span> unget = <span class="literal">false</span>, eof = <span class="literal">false</span>, fail = <span class="literal">false</span>;</span><br><span class="line">    <span class="type">char</span> chr = <span class="string">'\0'</span>;</span><br><span class="line">    <span class="function"><span class="type">static</span> <span class="type">bool</span> <span class="title">isssign</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="keyword">return</span> <span class="built_in">isspace</span>(c) || c == <span class="string">'+'</span> || c == <span class="string">'-'</span>; }</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">todigit</span><span class="params">(<span class="type">char</span> c)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (::<span class="built_in">isdigit</span>(c)) <span class="keyword">return</span> c - <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">isupper</span>(c)) <span class="keyword">return</span> c - <span class="string">'A'</span> + <span class="number">10</span>;</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">islower</span>(c)) <span class="keyword">return</span> c - <span class="string">'a'</span> + <span class="number">10</span>;</span><br><span class="line">        <span class="keyword">return</span> base;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isdigit</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="keyword">return</span> <span class="built_in">todigit</span>(c) &lt; base; }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">char</span> <span class="title">vget</span><span class="params">()</span> </span>= <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">char</span> <span class="title">get</span><span class="params">()</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (!unget)</span><br><span class="line">            <span class="keyword">if</span> ((chr = <span class="built_in">vget</span>()) == EOF) eof = <span class="literal">true</span>;</span><br><span class="line">        unget = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">return</span> chr;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(<span class="type">char</span> &amp;c)</span> </span>{</span><br><span class="line">        c = <span class="built_in">get</span>();</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="keyword">operator</span> <span class="title">bool</span><span class="params">()</span> </span>{ <span class="keyword">return</span> !fail; }</span><br><span class="line">    <span class="type">bool</span> <span class="keyword">operator</span>!() { <span class="keyword">return</span> fail; }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_integral_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(T &amp;n) {</span><br><span class="line">        n = <span class="number">0</span>;</span><br><span class="line">        <span class="type">bool</span> f = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isssign</span>(<span class="built_in">get</span>()) &amp;&amp; !eof)</span><br><span class="line">            <span class="keyword">if</span> (chr == <span class="string">'-'</span> &amp;&amp; is_integral_v&lt;T&gt;) f = !f;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n = n * base + <span class="built_in">todigit</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_floating_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(T &amp;n) {</span><br><span class="line">        n = <span class="number">0</span>;</span><br><span class="line">        <span class="type">bool</span> f = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isssign</span>(<span class="built_in">get</span>()) &amp;&amp; !eof)</span><br><span class="line">            <span class="keyword">if</span> (chr == <span class="string">'-'</span>) f = !f;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n = n * base + <span class="built_in">todigit</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (chr == <span class="string">'.'</span>) {</span><br><span class="line">            i64 pow = <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">while</span> (<span class="built_in">isdigit</span>(<span class="built_in">get</span>())) n += <span class="built_in">todigit</span>(chr) / (T)(pow *= base);</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">char</span> &amp;c) {</span><br><span class="line">        c = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        c = chr;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">bool</span> &amp;f) {</span><br><span class="line">        i64 n;</span><br><span class="line">        *<span class="keyword">this</span> &gt;&gt; n;</span><br><span class="line">        f = (<span class="type">bool</span>)n;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(<span class="type">char</span> *s) {</span><br><span class="line">        s[<span class="number">0</span>] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isgraph</span>(<span class="built_in">get</span>())) s[len++] = chr;</span><br><span class="line">        unget = <span class="literal">true</span>, s[len] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(std::string &amp;s) {</span><br><span class="line">        s.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">isgraph</span>(<span class="built_in">get</span>())) s.<span class="built_in">push_back</span>(chr);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(symbols::symbol a) {</span><br><span class="line">        <span class="keyword">switch</span> (a) {</span><br><span class="line">        <span class="keyword">case</span> symbols::bin: base = <span class="number">2</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::oct: base = <span class="number">8</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::dec: base = <span class="number">10</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::hex: base = <span class="number">16</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::ws:</span><br><span class="line">            <span class="keyword">while</span> (<span class="built_in">isspace</span>(<span class="built_in">get</span>()) &amp;&amp; !eof);</span><br><span class="line">            unget = <span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>: base = <span class="number">10</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    istream &amp;<span class="keyword">operator</span>&gt;&gt;(symbols::setbase a) {</span><br><span class="line">        base = std::<span class="built_in">max</span>(std::<span class="built_in">min</span>(a.base, <span class="number">36</span>), <span class="number">2</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">ignore</span><span class="params">(<span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof);</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">getline</span><span class="params">(<span class="type">char</span> *s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        s[<span class="number">0</span>] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="type">int</span> len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof) s[len++] = chr;</span><br><span class="line">        <span class="keyword">if</span> (s[len - <span class="number">1</span>] == <span class="string">'\r'</span> &amp;&amp; end == <span class="string">'\n'</span>) --len;</span><br><span class="line">        s[len] = <span class="string">'\0'</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">getline</span><span class="params">(std::string &amp;s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        s.<span class="built_in">clear</span>();</span><br><span class="line">        <span class="keyword">if</span> (eof) <span class="keyword">return</span> fail = <span class="literal">true</span>, *<span class="keyword">this</span>;</span><br><span class="line">        <span class="keyword">while</span> (<span class="built_in">get</span>() != end &amp;&amp; !eof) s.<span class="built_in">push_back</span>(chr);</span><br><span class="line">        <span class="keyword">if</span> (s.<span class="built_in">back</span>() == <span class="string">'\r'</span> &amp;&amp; end == <span class="string">'\n'</span>) s.<span class="built_in">pop_back</span>();</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(<span class="type">char</span> *s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="built_in">getline</span>(s, end);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function">istream &amp;<span class="title">get</span><span class="params">(std::string &amp;s, <span class="type">char</span> end = <span class="string">'\n'</span>)</span> </span>{</span><br><span class="line">        <span class="built_in">getline</span>(s, end);</span><br><span class="line">        unget = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ostream</span> : <span class="keyword">public</span> noncopyable {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">int</span> base = <span class="number">10</span>, precision = <span class="number">6</span>, width = <span class="number">0</span>;</span><br><span class="line">    i64 eps = <span class="number">1e6</span>;</span><br><span class="line">    <span class="type">bool</span> adjust = <span class="literal">true</span>, boolalpha = <span class="literal">false</span>, showbase = <span class="literal">false</span>, showpoint = <span class="literal">false</span>,</span><br><span class="line">         showpos = <span class="literal">false</span>, kase = <span class="literal">false</span>, fixed = <span class="literal">false</span>;</span><br><span class="line">    <span class="type">char</span> setfill = <span class="string">' '</span>;</span><br><span class="line">    <span class="function"><span class="type">static</span> i64 <span class="title">qpow</span><span class="params">(i64 n, <span class="type">int</span> m)</span> </span>{</span><br><span class="line">        i64 ret = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = m; i; i &gt;&gt;= <span class="number">1</span>, n *= n)</span><br><span class="line">            <span class="keyword">if</span> (i &amp; <span class="number">1</span>) ret *= n;</span><br><span class="line">        <span class="keyword">return</span> ret;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">fill</span><span class="params">(<span class="type">int</span> n)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (width &gt; n) <span class="built_in">vfill</span>(setfill, width - n);</span><br><span class="line">        width = <span class="number">0</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="type">char</span> <span class="title">toalpha</span><span class="params">(<span class="type">int</span> n)</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (n &lt; <span class="number">10</span>) <span class="keyword">return</span> n + <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">return</span> n - <span class="number">10</span> + (kase ? <span class="string">'A'</span> : <span class="string">'a'</span>);</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vput</span><span class="params">(<span class="type">char</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vputs</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *, <span class="type">int</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vfill</span><span class="params">(<span class="type">char</span>, <span class="type">int</span>)</span> </span>= <span class="number">0</span>;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vflush</span><span class="params">()</span> </span>= <span class="number">0</span>;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">put</span><span class="params">(<span class="type">char</span> c)</span> </span>{ <span class="built_in">vput</span>(c); }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_integral_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(T n) {</span><br><span class="line">        <span class="type">static</span> <span class="type">char</span> buf[<span class="number">105</span>];</span><br><span class="line">        <span class="type">char</span> *p = buf + <span class="number">100</span>, *q = buf + <span class="number">100</span>;</span><br><span class="line">        <span class="type">bool</span> f = n &lt; <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        <span class="type">make_unsigned_t</span>&lt;T&gt; m = n;</span><br><span class="line">        <span class="keyword">if</span> (!m) *p-- = <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (m) *p-- = <span class="built_in">toalpha</span>(m % base), m /= base;</span><br><span class="line">        <span class="keyword">if</span> (showbase) <span class="keyword">switch</span> (base) {</span><br><span class="line">            <span class="keyword">case</span> <span class="number">2</span>: *p-- = kase ? <span class="string">'B'</span> : <span class="string">'b'</span>, *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">8</span>: *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">16</span>: *p-- = kase ? <span class="string">'X'</span> : <span class="string">'x'</span>, *p-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            }</span><br><span class="line">        <span class="keyword">if</span> (!f) {</span><br><span class="line">            <span class="keyword">if</span> (showpos &amp;&amp; is_signed_v&lt;T&gt;) *p-- = <span class="string">'+'</span>;</span><br><span class="line">        } <span class="keyword">else</span> *p-- = <span class="string">'-'</span>;</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(q - p);</span><br><span class="line">        <span class="built_in">vputs</span>(p + <span class="number">1</span>, q - p);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(q - p);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, std::<span class="type">enable_if_t</span>&lt;is_floating_v&lt;T&gt;, <span class="type">int</span>&gt; = <span class="number">0</span>&gt;</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(T n) {</span><br><span class="line">        <span class="type">static</span> <span class="type">char</span> buf1[<span class="number">105</span>], buf2[<span class="number">105</span>];</span><br><span class="line">        <span class="keyword">if</span> (std::<span class="built_in">isinf</span>(n)) {</span><br><span class="line">            <span class="keyword">if</span> (n &gt; <span class="number">0</span>) {</span><br><span class="line">                <span class="keyword">if</span> (showpos) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"+INF"</span> : <span class="string">"+inf"</span>);</span><br><span class="line">                <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"INF"</span> : <span class="string">"inf"</span>);</span><br><span class="line">            } <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"-INF"</span> : <span class="string">"-inf"</span>);</span><br><span class="line">            <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">if</span> (std::<span class="built_in">isnan</span>(n)) <span class="keyword">return</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"NAN"</span> : <span class="string">"nan"</span>);</span><br><span class="line">        <span class="type">char</span> *p1 = buf1 + <span class="number">100</span>, *q1 = buf1 + <span class="number">100</span>, *p2 = buf2 + <span class="number">100</span>, *q2 = buf2 + <span class="number">100</span>;</span><br><span class="line">        <span class="type">bool</span> f = n &lt; <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (f) n = -n;</span><br><span class="line">        i64 m1 = std::<span class="built_in">floor</span>(n), m2 = std::<span class="built_in">round</span>((n - m1) * eps);</span><br><span class="line">        <span class="type">int</span> len = precision;</span><br><span class="line">        <span class="keyword">if</span> (m2 &gt;= eps) ++m1, m2 = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">if</span> (!m1) *p1-- = <span class="string">'0'</span>;</span><br><span class="line">        <span class="keyword">while</span> (m1) *p1-- = <span class="built_in">toalpha</span>(m1 % base), m1 /= base;</span><br><span class="line">        <span class="keyword">while</span> (len--) *p2-- = <span class="built_in">toalpha</span>(m2 % base), m2 /= base;</span><br><span class="line">        <span class="keyword">if</span> (showbase) <span class="keyword">switch</span> (base) {</span><br><span class="line">            <span class="keyword">case</span> <span class="number">2</span>: *p1-- = kase ? <span class="string">'B'</span> : <span class="string">'b'</span>, *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">8</span>: *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            <span class="keyword">case</span> <span class="number">16</span>: *p1-- = kase ? <span class="string">'X'</span> : <span class="string">'x'</span>, *p1-- = <span class="string">'0'</span>; <span class="keyword">break</span>;</span><br><span class="line">            }</span><br><span class="line">        <span class="keyword">if</span> (!f) {</span><br><span class="line">            <span class="keyword">if</span> (showpos) *p1-- = <span class="string">'+'</span>;</span><br><span class="line">        } <span class="keyword">else</span> *p1-- = <span class="string">'-'</span>;</span><br><span class="line">        <span class="keyword">if</span> (!fixed)</span><br><span class="line">            <span class="keyword">while</span> (*q2 == <span class="string">'0'</span> &amp;&amp; p2 != q2) --q2;</span><br><span class="line">        <span class="keyword">if</span> (showpoint || p2 != q2) *p2-- = <span class="string">'.'</span>;</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>((q1 - p1) + (q2 - p2));</span><br><span class="line">        <span class="built_in">vputs</span>(p1 + <span class="number">1</span>, q1 - p1);</span><br><span class="line">        <span class="built_in">vputs</span>(p2 + <span class="number">1</span>, q2 - p2);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>((q1 - p1) + (q2 - p2));</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">char</span> c) {</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(<span class="number">1</span>);</span><br><span class="line">        <span class="built_in">vput</span>(c);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(<span class="number">1</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> <span class="type">char</span> *s) {</span><br><span class="line">        <span class="type">int</span> n = <span class="built_in">strlen</span>(s);</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(s, n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> std::string &amp;s) {</span><br><span class="line">        <span class="type">int</span> n = s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(s.<span class="built_in">data</span>(), n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(std::string_view sv) {</span><br><span class="line">        <span class="type">int</span> n = sv.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span> (adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="built_in">vputs</span>(sv.<span class="built_in">data</span>(), n);</span><br><span class="line">        <span class="keyword">if</span> (!adjust) <span class="built_in">fill</span>(n);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">bool</span> f) {</span><br><span class="line">        <span class="keyword">if</span> (f) {</span><br><span class="line">            <span class="keyword">if</span> (boolalpha) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"TRUE"</span> : <span class="string">"true"</span>);</span><br><span class="line">            <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; <span class="string">'1'</span>;</span><br><span class="line">        } <span class="keyword">else</span> {</span><br><span class="line">            <span class="keyword">if</span> (boolalpha) *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"FALSE"</span> : <span class="string">"false"</span>);</span><br><span class="line">            <span class="keyword">else</span> *<span class="keyword">this</span> &lt;&lt; <span class="string">'0'</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(<span class="type">const</span> <span class="type">void</span> *p) {</span><br><span class="line">        <span class="type">int</span> n = base;</span><br><span class="line">        <span class="type">bool</span> f = showbase;</span><br><span class="line">        base = <span class="number">16</span>, showbase = <span class="literal">true</span>;</span><br><span class="line">        *<span class="keyword">this</span> &lt;&lt; (u64)p;</span><br><span class="line">        base = n, showbase = f;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(std::<span class="type">nullptr_t</span>) {</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span> &lt;&lt; (kase ? <span class="string">"NULLPTR"</span> : <span class="string">"nullptr"</span>);</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::symbol a) {</span><br><span class="line">        <span class="keyword">switch</span> (a) {</span><br><span class="line">        <span class="keyword">case</span> symbols::endl: <span class="built_in">vput</span>(<span class="string">'\n'</span>); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::ends: <span class="built_in">vput</span>(<span class="string">' '</span>); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::flush: <span class="built_in">vflush</span>(); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::bin: eps = <span class="built_in">qpow</span>(base = <span class="number">2</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::oct: eps = <span class="built_in">qpow</span>(base = <span class="number">8</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::dec: eps = <span class="built_in">qpow</span>(base = <span class="number">10</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::hex: eps = <span class="built_in">qpow</span>(base = <span class="number">16</span>, precision); <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::left: adjust = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::right: adjust = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::boolalpha: boolalpha = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noboolalpha: boolalpha = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showbase: showbase = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowbase: showbase = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showpoint: showpoint = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowpoint: showpoint = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::showpos: showpos = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::noshowpos: showpos = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::uppercase: kase = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::lowercase: kase = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::fixed: fixed = <span class="literal">true</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">case</span> symbols::defaultfloat: fixed = <span class="literal">false</span>; <span class="keyword">break</span>;</span><br><span class="line">        <span class="keyword">default</span>:</span><br><span class="line">            base = <span class="number">10</span>, precision = <span class="number">6</span>, width = <span class="number">0</span>, eps = <span class="number">1e6</span>;</span><br><span class="line">            adjust = <span class="literal">true</span>;</span><br><span class="line">            boolalpha = showbase = showpoint = showpos = kase = fixed = <span class="literal">false</span>;</span><br><span class="line">            setfill = <span class="string">' '</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setbase a) {</span><br><span class="line">        base = std::<span class="built_in">max</span>(std::<span class="built_in">min</span>(a.base, <span class="number">36</span>), <span class="number">2</span>);</span><br><span class="line">        eps = <span class="built_in">qpow</span>(base, precision);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setfill a) {</span><br><span class="line">        setfill = a.fill;</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setprecision a) {</span><br><span class="line">        precision = std::<span class="built_in">max</span>(a.precision, <span class="number">0</span>);</span><br><span class="line">        eps = <span class="built_in">qpow</span>(base, precision);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">    ostream &amp;<span class="keyword">operator</span>&lt;&lt;(symbols::setw a) {</span><br><span class="line">        width = std::<span class="built_in">max</span>(a.width, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">return</span> *<span class="keyword">this</span>;</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line">} <span class="comment">// namespace interface</span></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> SIZ = <span class="number">0xfffff</span>;</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">istream</span> : <span class="keyword">public</span> interface::istream {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">char</span> buf[SIZ], *p = buf, *q = buf;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">char</span> <span class="title">vget</span><span class="params">()</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (p == q) {</span><br><span class="line">            <span class="type">int</span> len = <span class="built_in">fread</span>(buf, <span class="number">1</span>, SIZ, stream);</span><br><span class="line">            <span class="keyword">if</span> (!len) <span class="keyword">return</span> EOF;</span><br><span class="line">            p = buf, q = buf + len;</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> *p++;</span><br><span class="line">    }</span><br><span class="line">  <span class="keyword">protected</span>:</span><br><span class="line">    FILE *stream = stdin;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">istream</span>() { <span class="built_in">fclose</span>(stream); }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ifstream</span> : <span class="keyword">public</span> istream {</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ifstream</span><span class="params">(FILE *p)</span> </span>{ istream::stream = p; }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ifstream</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s)</span> </span>{ istream::stream = <span class="built_in">fopen</span>(s, <span class="string">"r"</span>); }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ostream</span> : <span class="keyword">public</span> interface::ostream {</span><br><span class="line">  <span class="keyword">private</span>:</span><br><span class="line">    <span class="type">char</span> buf[SIZ], *p = buf;</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vput</span><span class="params">(<span class="type">char</span> c)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="keyword">if</span> (p - buf &gt;= SIZ) <span class="built_in">vflush</span>();</span><br><span class="line">        *p++ = c;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vputs</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s, <span class="type">int</span> n)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="type">int</span> used = p - buf, len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (n - len + used &gt;= SIZ) {</span><br><span class="line">            <span class="built_in">memcpy</span>(buf + used, s + len, SIZ - used);</span><br><span class="line">            p = buf + SIZ;</span><br><span class="line">            <span class="built_in">vflush</span>();</span><br><span class="line">            len += SIZ - used, used = <span class="number">0</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="built_in">memcpy</span>(buf + used, s + len, n - len);</span><br><span class="line">        p = buf + used + n - len;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vfill</span><span class="params">(<span class="type">char</span> c, <span class="type">int</span> n)</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="type">int</span> used = p - buf, len = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span> (n - len + used &gt;= SIZ) {</span><br><span class="line">            <span class="built_in">memset</span>(buf + used, c, SIZ - used);</span><br><span class="line">            p = buf + SIZ;</span><br><span class="line">            <span class="built_in">vflush</span>();</span><br><span class="line">            len += SIZ - used, used = <span class="number">0</span>;</span><br><span class="line">        }</span><br><span class="line">        <span class="built_in">memset</span>(buf + used, c, n - len);</span><br><span class="line">        p = buf + used + n - len;</span><br><span class="line">    }</span><br><span class="line">    <span class="function"><span class="keyword">virtual</span> <span class="type">void</span> <span class="title">vflush</span><span class="params">()</span> <span class="keyword">final</span> </span>{</span><br><span class="line">        <span class="built_in">fwrite</span>(buf, <span class="number">1</span>, p - buf, stream);</span><br><span class="line">        p = buf;</span><br><span class="line">        <span class="built_in">fflush</span>(stream);</span><br><span class="line">    }</span><br><span class="line">  <span class="keyword">protected</span>:</span><br><span class="line">    FILE *stream = stdout;</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="keyword">virtual</span> ~<span class="built_in">ostream</span>() {</span><br><span class="line">        <span class="built_in">vflush</span>();</span><br><span class="line">        <span class="built_in">fclose</span>(stream);</span><br><span class="line">    }</span><br><span class="line">};</span><br><span class="line"><span class="keyword">class</span> <span class="title class_">ofstream</span> : <span class="keyword">public</span> ostream {</span><br><span class="line">  <span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ofstream</span><span class="params">(FILE *p)</span> </span>{ ostream::stream = p; }</span><br><span class="line">    <span class="function"><span class="keyword">explicit</span> <span class="title">ofstream</span><span class="params">(<span class="type">const</span> <span class="type">char</span> *s)</span> </span>{ ostream::stream = <span class="built_in">fopen</span>(s, <span class="string">"w"</span>); }</span><br><span class="line">};</span><br><span class="line"><span class="type">static</span> istream is;</span><br><span class="line"><span class="type">static</span> ostream os;</span><br><span class="line">}; <span class="comment">// namespace fastio</span></span><br></pre></td></tr></tbody></table></figure><h4 id="Java">Java</h4><p>来源：<a href="https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java">https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java</a></p><figure class="highlight java"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> me.weishu.kernelsu.ui;</span><br><span class="line"><span class="keyword">import</span> android.content.Context;</span><br><span class="line"><span class="keyword">import</span> android.content.Intent;</span><br><span class="line"><span class="keyword">import</span> android.content.pm.PackageInfo;</span><br><span class="line"><span class="keyword">import</span> android.content.pm.PackageManager;</span><br><span class="line"><span class="keyword">import</span> android.os.IBinder;</span><br><span class="line"><span class="keyword">import</span> android.os.UserHandle;</span><br><span class="line"><span class="keyword">import</span> android.os.UserManager;</span><br><span class="line"><span class="keyword">import</span> android.util.Log;</span><br><span class="line"><span class="keyword">import</span> androidx.annotation.NonNull;</span><br><span class="line"><span class="keyword">import</span> com.topjohnwu.superuser.ipc.RootService;</span><br><span class="line"><span class="keyword">import</span> java.lang.reflect.Method;</span><br><span class="line"><span class="keyword">import</span> java.util.ArrayList;</span><br><span class="line"><span class="keyword">import</span> java.util.List;</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.IKsuInterface;</span><br><span class="line"><span class="keyword">import</span> rikka.parcelablelist.ParcelableListSlice;</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> weishu</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@date</span> 2023/4/18.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="keyword">class</span> <span class="title class_">KsuService</span> <span class="keyword">extends</span> <span class="title class_">RootService</span> {</span><br><span class="line">    <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="type">String</span> <span class="variable">TAG</span> <span class="operator">=</span> <span class="string">"KsuService"</span>;</span><br><span class="line">    <span class="keyword">class</span> <span class="title class_">Stub</span> <span class="keyword">extends</span> <span class="title class_">IKsuInterface</span>.Stub {</span><br><span class="line">        <span class="meta">@Override</span></span><br><span class="line">        <span class="keyword">public</span> ParcelableListSlice&lt;PackageInfo&gt; <span class="title function_">getPackages</span><span class="params">(<span class="type">int</span> flags)</span> {</span><br><span class="line">            List&lt;PackageInfo&gt; list = getInstalledPackagesAll(flags);</span><br><span class="line">            Log.i(TAG, <span class="string">"getPackages: "</span> + list.size());</span><br><span class="line">            <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ParcelableListSlice</span>&lt;&gt;(list);</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">    <span class="meta">@Override</span></span><br><span class="line">    <span class="keyword">public</span> IBinder <span class="title function_">onBind</span><span class="params">(<span class="meta">@NonNull</span> Intent intent)</span> {</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">Stub</span>();</span><br><span class="line">    }</span><br><span class="line">    List&lt;Integer&gt; <span class="title function_">getUserIds</span><span class="params">()</span> {</span><br><span class="line">        List&lt;Integer&gt; result = <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">        <span class="type">UserManager</span> <span class="variable">um</span> <span class="operator">=</span> (UserManager) getSystemService(Context.USER_SERVICE);</span><br><span class="line">        List&lt;UserHandle&gt; userProfiles = um.getUserProfiles();</span><br><span class="line">        <span class="keyword">for</span> (UserHandle userProfile : userProfiles) {</span><br><span class="line">            <span class="type">int</span> <span class="variable">userId</span> <span class="operator">=</span> userProfile.hashCode();</span><br><span class="line">            result.add(userProfile.hashCode());</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> result;</span><br><span class="line">    }</span><br><span class="line">    ArrayList&lt;PackageInfo&gt; <span class="title function_">getInstalledPackagesAll</span><span class="params">(<span class="type">int</span> flags)</span> {</span><br><span class="line">        ArrayList&lt;PackageInfo&gt; packages = <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">        <span class="keyword">for</span> (Integer userId : getUserIds()) {</span><br><span class="line">            Log.i(TAG, <span class="string">"getInstalledPackagesAll: "</span> + userId);</span><br><span class="line">            packages.addAll(getInstalledPackagesAsUser(flags, userId));</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> packages;</span><br><span class="line">    }</span><br><span class="line">    List&lt;PackageInfo&gt; <span class="title function_">getInstalledPackagesAsUser</span><span class="params">(<span class="type">int</span> flags, <span class="type">int</span> userId)</span> {</span><br><span class="line">        <span class="keyword">try</span> {</span><br><span class="line">            <span class="type">PackageManager</span> <span class="variable">pm</span> <span class="operator">=</span> getPackageManager();</span><br><span class="line">            <span class="type">Method</span> <span class="variable">getInstalledPackagesAsUser</span> <span class="operator">=</span> pm.getClass().getDeclaredMethod(<span class="string">"getInstalledPackagesAsUser"</span>, <span class="type">int</span>.class, <span class="type">int</span>.class);</span><br><span class="line">            <span class="keyword">return</span> (List&lt;PackageInfo&gt;) getInstalledPackagesAsUser.invoke(pm, flags, userId);</span><br><span class="line">        } <span class="keyword">catch</span> (Throwable e) {</span><br><span class="line">            Log.e(TAG, <span class="string">"err"</span>, e);</span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">new</span> <span class="title class_">ArrayList</span>&lt;&gt;();</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h4 id="Kotlin">Kotlin</h4><p>来源：<a href="https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt">https://raw.githubusercontent.com/tiann/KernelSU/master/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt</a></p><figure class="highlight kotlin"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">package</span> me.weishu.kernelsu.ui.screen</span><br><span class="line"><span class="keyword">import</span> android.net.Uri</span><br><span class="line"><span class="keyword">import</span> android.os.Environment</span><br><span class="line"><span class="keyword">import</span> android.os.Parcelable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.Column</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.fillMaxSize</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.layout.padding</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.rememberScrollState</span><br><span class="line"><span class="keyword">import</span> androidx.compose.foundation.verticalScroll</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.Icons</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.automirrored.filled.ArrowBack</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.filled.Refresh</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material.icons.filled.Save</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.ExperimentalMaterial3Api</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.ExtendedFloatingActionButton</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Icon</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.IconButton</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.MaterialTheme</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Scaffold</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.Text</span><br><span class="line"><span class="keyword">import</span> androidx.compose.material3.TopAppBar</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.Composable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.LaunchedEffect</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.getValue</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.mutableStateOf</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.rememberCoroutineScope</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.saveable.rememberSaveable</span><br><span class="line"><span class="keyword">import</span> androidx.compose.runtime.setValue</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.ExperimentalComposeUiApi</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.Modifier</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.input.key.Key</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.input.key.key</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.res.stringResource</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.text.font.FontFamily</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.tooling.preview.Preview</span><br><span class="line"><span class="keyword">import</span> androidx.compose.ui.unit.dp</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.<span class="keyword">annotation</span>.Destination</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.navigation.DestinationsNavigator</span><br><span class="line"><span class="keyword">import</span> com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.Dispatchers</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.launch</span><br><span class="line"><span class="keyword">import</span> kotlinx.coroutines.withContext</span><br><span class="line"><span class="keyword">import</span> kotlinx.parcelize.Parcelize</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.R</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.component.KeyEventBlocker</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.LkmSelection</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.LocalSnackbarHost</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.installBoot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.flashModule</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.reboot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.restoreBoot</span><br><span class="line"><span class="keyword">import</span> me.weishu.kernelsu.ui.util.uninstallPermanently</span><br><span class="line"><span class="keyword">import</span> java.io.File</span><br><span class="line"><span class="keyword">import</span> java.text.SimpleDateFormat</span><br><span class="line"><span class="keyword">import</span> java.util.Date</span><br><span class="line"><span class="keyword">import</span> java.util.Locale</span><br><span class="line"><span class="keyword">enum</span> <span class="keyword">class</span> <span class="title class_">FlashingStatus</span> {</span><br><span class="line">    FLASHING,</span><br><span class="line">    SUCCESS,</span><br><span class="line">    FAILED</span><br><span class="line">}</span><br><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@author</span> weishu</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@date</span> 2023/1/1.</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="meta">@OptIn(ExperimentalComposeUiApi::class)</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="meta">@Destination</span></span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">FlashScreen</span><span class="params">(navigator: <span class="type">DestinationsNavigator</span>, flashIt: <span class="type">FlashIt</span>)</span></span> {</span><br><span class="line">    <span class="keyword">var</span> text <span class="keyword">by</span> rememberSaveable { mutableStateOf(<span class="string">""</span>) }</span><br><span class="line">    <span class="keyword">val</span> logContent = rememberSaveable { StringBuilder() }</span><br><span class="line">    <span class="keyword">var</span> showFloatAction <span class="keyword">by</span> rememberSaveable { mutableStateOf(<span class="literal">false</span>) }</span><br><span class="line">    <span class="keyword">val</span> snackBarHost = LocalSnackbarHost.current</span><br><span class="line">    <span class="keyword">val</span> scope = rememberCoroutineScope()</span><br><span class="line">    <span class="keyword">val</span> scrollState = rememberScrollState()</span><br><span class="line">    <span class="keyword">var</span> flashing <span class="keyword">by</span> rememberSaveable {</span><br><span class="line">        mutableStateOf(FlashingStatus.FLASHING)</span><br><span class="line">    }</span><br><span class="line">    LaunchedEffect(<span class="built_in">Unit</span>) {</span><br><span class="line">        <span class="keyword">if</span> (text.isNotEmpty()) {</span><br><span class="line">            <span class="keyword">return</span><span class="symbol">@LaunchedEffect</span></span><br><span class="line">        }</span><br><span class="line">        withContext(Dispatchers.IO) {</span><br><span class="line">            flashIt(flashIt, onFinish = { showReboot, code -&gt;</span><br><span class="line">                <span class="keyword">if</span> (code != <span class="number">0</span>) {</span><br><span class="line">                    text += <span class="string">"Error: exit code = <span class="variable">$code</span>.\nPlease save and check the log.\n"</span></span><br><span class="line">                }</span><br><span class="line">                <span class="keyword">if</span> (showReboot) {</span><br><span class="line">                    text += <span class="string">"\n\n\n"</span></span><br><span class="line">                    showFloatAction = <span class="literal">true</span></span><br><span class="line">                }</span><br><span class="line">                flashing = <span class="keyword">if</span> (code == <span class="number">0</span>) FlashingStatus.SUCCESS <span class="keyword">else</span> FlashingStatus.FAILED</span><br><span class="line">            }, onStdout = {</span><br><span class="line">                text += <span class="string">"<span class="variable">$it</span>\n"</span></span><br><span class="line">                logContent.append(it).append(<span class="string">"\n"</span>)</span><br><span class="line">            }, onStderr = {</span><br><span class="line">                logContent.append(it).append(<span class="string">"\n"</span>)</span><br><span class="line">            });</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">    Scaffold(</span><br><span class="line">        topBar = {</span><br><span class="line">            TopBar(</span><br><span class="line">                flashing,</span><br><span class="line">                onBack = {</span><br><span class="line">                    navigator.popBackStack()</span><br><span class="line">                },</span><br><span class="line">                onSave = {</span><br><span class="line">                    scope.launch {</span><br><span class="line">                        <span class="keyword">val</span> format = SimpleDateFormat(<span class="string">"yyyy-MM-dd-HH-mm-ss"</span>, Locale.getDefault())</span><br><span class="line">                        <span class="keyword">val</span> date = format.format(Date())</span><br><span class="line">                        <span class="keyword">val</span> file = File(</span><br><span class="line">                            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),</span><br><span class="line">                            <span class="string">"KernelSU_install_log_<span class="subst">${date}</span>.log"</span></span><br><span class="line">                        )</span><br><span class="line">                        file.writeText(logContent.toString())</span><br><span class="line">                        snackBarHost.showSnackbar(<span class="string">"Log saved to <span class="subst">${file.absolutePath}</span>"</span>)</span><br><span class="line">                    }</span><br><span class="line">                }</span><br><span class="line">            )</span><br><span class="line">        },</span><br><span class="line">        floatingActionButton = {</span><br><span class="line">            <span class="keyword">if</span> (showFloatAction) {</span><br><span class="line">                <span class="keyword">val</span> reboot = stringResource(id = R.string.reboot)</span><br><span class="line">                ExtendedFloatingActionButton(</span><br><span class="line">                    onClick = {</span><br><span class="line">                        scope.launch {</span><br><span class="line">                            withContext(Dispatchers.IO) {</span><br><span class="line">                                reboot()</span><br><span class="line">                            }</span><br><span class="line">                        }</span><br><span class="line">                    },</span><br><span class="line">                    icon = { Icon(Icons.Filled.Refresh, reboot) },</span><br><span class="line">                    text = { Text(text = reboot) },</span><br><span class="line">                )</span><br><span class="line">            }</span><br><span class="line">        }</span><br><span class="line">    ) { innerPadding -&gt;</span><br><span class="line">        KeyEventBlocker {</span><br><span class="line">            it.key == Key.VolumeDown || it.key == Key.VolumeUp</span><br><span class="line">        }</span><br><span class="line">        Column(</span><br><span class="line">            modifier = Modifier</span><br><span class="line">                .fillMaxSize(<span class="number">1f</span>)</span><br><span class="line">                .padding(innerPadding)</span><br><span class="line">                .verticalScroll(scrollState),</span><br><span class="line">        ) {</span><br><span class="line">            LaunchedEffect(text) {</span><br><span class="line">                scrollState.animateScrollTo(scrollState.maxValue)</span><br><span class="line">            }</span><br><span class="line">            Text(</span><br><span class="line">                modifier = Modifier.padding(<span class="number">8.</span>dp),</span><br><span class="line">                text = text,</span><br><span class="line">                fontSize = MaterialTheme.typography.bodySmall.fontSize,</span><br><span class="line">                fontFamily = FontFamily.Monospace,</span><br><span class="line">                lineHeight = MaterialTheme.typography.bodySmall.lineHeight,</span><br><span class="line">            )</span><br><span class="line">        }</span><br><span class="line">    }</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Parcelize</span></span><br><span class="line"><span class="keyword">sealed</span> <span class="keyword">class</span> <span class="title class_">FlashIt</span> : <span class="type">Parcelable</span> {</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">class</span> <span class="title class_">FlashBoot</span>(<span class="keyword">val</span> boot: Uri? = <span class="literal">null</span>, <span class="keyword">val</span> lkm: LkmSelection, <span class="keyword">val</span> ota: <span class="built_in">Boolean</span>) :</span><br><span class="line">        FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">class</span> <span class="title class_">FlashModule</span>(<span class="keyword">val</span> uri: Uri) : FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">object</span> FlashRestore : FlashIt()</span><br><span class="line">    <span class="keyword">data</span> <span class="keyword">object</span> FlashUninstall : FlashIt()</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">flashIt</span><span class="params">(</span></span></span><br><span class="line"><span class="params"><span class="function">    flashIt: <span class="type">FlashIt</span>, onFinish: (<span class="type">Boolean</span>, <span class="type">Int</span>) -&gt; <span class="type">Unit</span>,</span></span></span><br><span class="line"><span class="params"><span class="function">    onStdout: (<span class="type">String</span>) -&gt; <span class="type">Unit</span>,</span></span></span><br><span class="line"><span class="params"><span class="function">    onStderr: (<span class="type">String</span>) -&gt; <span class="type">Unit</span></span></span></span><br><span class="line"><span class="params"><span class="function">)</span></span> {</span><br><span class="line">    <span class="keyword">when</span> (flashIt) {</span><br><span class="line">        <span class="keyword">is</span> FlashIt.FlashBoot -&gt; installBoot(</span><br><span class="line">            flashIt.boot,</span><br><span class="line">            flashIt.lkm,</span><br><span class="line">            flashIt.ota,</span><br><span class="line">            onFinish,</span><br><span class="line">            onStdout,</span><br><span class="line">            onStderr</span><br><span class="line">        )</span><br><span class="line">        <span class="keyword">is</span> FlashIt.FlashModule -&gt; flashModule(flashIt.uri, onFinish, onStdout, onStderr)</span><br><span class="line">        FlashIt.FlashRestore -&gt; restoreBoot(onFinish, onStdout, onStderr)</span><br><span class="line">        FlashIt.FlashUninstall -&gt; uninstallPermanently(onFinish, onStdout, onStderr)</span><br><span class="line">    }</span><br><span class="line">}</span><br><span class="line"><span class="meta">@OptIn(ExperimentalMaterial3Api::class)</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="keyword">private</span> <span class="function"><span class="keyword">fun</span> <span class="title">TopBar</span><span class="params">(status: <span class="type">FlashingStatus</span>, onBack: () -&gt; <span class="type">Unit</span> = {}, onSave: () -&gt; <span class="type">Unit</span> = {})</span></span> {</span><br><span class="line">    TopAppBar(</span><br><span class="line">        title = {</span><br><span class="line">            Text(</span><br><span class="line">                stringResource(</span><br><span class="line">                    <span class="keyword">when</span> (status) {</span><br><span class="line">                        FlashingStatus.FLASHING -&gt; R.string.flashing</span><br><span class="line">                        FlashingStatus.SUCCESS -&gt; R.string.flash_success</span><br><span class="line">                        FlashingStatus.FAILED -&gt; R.string.flash_failed</span><br><span class="line">                    }</span><br><span class="line">                )</span><br><span class="line">            )</span><br><span class="line">        },</span><br><span class="line">        navigationIcon = {</span><br><span class="line">            IconButton(</span><br><span class="line">                onClick = onBack</span><br><span class="line">            ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = <span class="literal">null</span>) }</span><br><span class="line">        },</span><br><span class="line">        actions = {</span><br><span class="line">            IconButton(onClick = onSave) {</span><br><span class="line">                Icon(</span><br><span class="line">                    imageVector = Icons.Filled.Save,</span><br><span class="line">                    contentDescription = <span class="string">"Localized description"</span></span><br><span class="line">                )</span><br><span class="line">            }</span><br><span class="line">        }</span><br><span class="line">    )</span><br><span class="line">}</span><br><span class="line"><span class="meta">@Preview</span></span><br><span class="line"><span class="meta">@Composable</span></span><br><span class="line"><span class="function"><span class="keyword">fun</span> <span class="title">InstallPreview</span><span class="params">()</span></span> {</span><br><span class="line">    InstallScreen(EmptyDestinationsNavigator)</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h3 id="解释语言">解释语言</h3><h4 id="Python">Python</h4><p>来源：<a href="https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/yt_dlp/downloader/dash.py">https://raw.githubusercontent.com/yt-dlp/yt-dlp/master/yt_dlp/downloader/dash.py</a></p><figure class="highlight python"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> time</span><br><span class="line"><span class="keyword">import</span> urllib.parse</span><br><span class="line"><span class="keyword">from</span> . <span class="keyword">import</span> get_suitable_downloader</span><br><span class="line"><span class="keyword">from</span> .fragment <span class="keyword">import</span> FragmentFD</span><br><span class="line"><span class="keyword">from</span> ..utils <span class="keyword">import</span> update_url_query, urljoin</span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">DashSegmentsFD</span>(<span class="title class_ inherited__">FragmentFD</span>):</span><br><span class="line">    <span class="string">"""</span></span><br><span class="line"><span class="string">    Download segments in a DASH manifest. External downloaders can take over</span></span><br><span class="line"><span class="string">    the fragment downloads by supporting the 'dash_frag_urls' protocol</span></span><br><span class="line"><span class="string">    """</span></span><br><span class="line">    FD_NAME = <span class="string">'dashsegments'</span></span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">real_download</span>(<span class="params">self, filename, info_dict</span>):</span><br><span class="line">        <span class="keyword">if</span> <span class="string">'http_dash_segments_generator'</span> <span class="keyword">in</span> info_dict[<span class="string">'protocol'</span>].split(<span class="string">'+'</span>):</span><br><span class="line">            real_downloader = <span class="literal">None</span>  <span class="comment"># No external FD can support --live-from-start</span></span><br><span class="line">        <span class="keyword">else</span>:</span><br><span class="line">            <span class="keyword">if</span> info_dict.get(<span class="string">'is_live'</span>):</span><br><span class="line">                <span class="variable language_">self</span>.report_error(<span class="string">'Live DASH videos are not supported'</span>)</span><br><span class="line">            real_downloader = get_suitable_downloader(</span><br><span class="line">                info_dict, <span class="variable language_">self</span>.params, <span class="literal">None</span>, protocol=<span class="string">'dash_frag_urls'</span>, to_stdout=(filename == <span class="string">'-'</span>))</span><br><span class="line">        real_start = time.time()</span><br><span class="line">        requested_formats = [{**info_dict, **fmt} <span class="keyword">for</span> fmt <span class="keyword">in</span> info_dict.get(<span class="string">'requested_formats'</span>, [])]</span><br><span class="line">        args = []</span><br><span class="line">        <span class="keyword">for</span> fmt <span class="keyword">in</span> requested_formats <span class="keyword">or</span> [info_dict]:</span><br><span class="line">            <span class="keyword">try</span>:</span><br><span class="line">                fragment_count = <span class="number">1</span> <span class="keyword">if</span> <span class="variable language_">self</span>.params.get(<span class="string">'test'</span>) <span class="keyword">else</span> <span class="built_in">len</span>(fmt[<span class="string">'fragments'</span>])</span><br><span class="line">            <span class="keyword">except</span> TypeError:</span><br><span class="line">                fragment_count = <span class="literal">None</span></span><br><span class="line">            ctx = {</span><br><span class="line">                <span class="string">'filename'</span>: fmt.get(<span class="string">'filepath'</span>) <span class="keyword">or</span> filename,</span><br><span class="line">                <span class="string">'live'</span>: <span class="string">'is_from_start'</span> <span class="keyword">if</span> fmt.get(<span class="string">'is_from_start'</span>) <span class="keyword">else</span> fmt.get(<span class="string">'is_live'</span>),</span><br><span class="line">                <span class="string">'total_frags'</span>: fragment_count,</span><br><span class="line">            }</span><br><span class="line">            <span class="keyword">if</span> real_downloader:</span><br><span class="line">                <span class="variable language_">self</span>._prepare_external_frag_download(ctx)</span><br><span class="line">            <span class="keyword">else</span>:</span><br><span class="line">                <span class="variable language_">self</span>._prepare_and_start_frag_download(ctx, fmt)</span><br><span class="line">            ctx[<span class="string">'start'</span>] = real_start</span><br><span class="line">            extra_query = <span class="literal">None</span></span><br><span class="line">            extra_param_to_segment_url = info_dict.get(<span class="string">'extra_param_to_segment_url'</span>)</span><br><span class="line">            <span class="keyword">if</span> extra_param_to_segment_url:</span><br><span class="line">                extra_query = urllib.parse.parse_qs(extra_param_to_segment_url)</span><br><span class="line">            fragments_to_download = <span class="variable language_">self</span>._get_fragments(fmt, ctx, extra_query)</span><br><span class="line">            <span class="keyword">if</span> real_downloader:</span><br><span class="line">                <span class="variable language_">self</span>.to_screen(</span><br><span class="line">                    <span class="string">f'[<span class="subst">{self.FD_NAME}</span>] Fragment downloads will be delegated to <span class="subst">{real_downloader.get_basename()}</span>'</span>)</span><br><span class="line">                info_dict[<span class="string">'fragments'</span>] = <span class="built_in">list</span>(fragments_to_download)</span><br><span class="line">                fd = real_downloader(<span class="variable language_">self</span>.ydl, <span class="variable language_">self</span>.params)</span><br><span class="line">                <span class="keyword">return</span> fd.real_download(filename, info_dict)</span><br><span class="line">            args.append([ctx, fragments_to_download, fmt])</span><br><span class="line">        <span class="keyword">return</span> <span class="variable language_">self</span>.download_and_append_fragments_multiple(*args, is_fatal=<span class="keyword">lambda</span> idx: idx == <span class="number">0</span>)</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">_resolve_fragments</span>(<span class="params">self, fragments, ctx</span>):</span><br><span class="line">        fragments = fragments(ctx) <span class="keyword">if</span> <span class="built_in">callable</span>(fragments) <span class="keyword">else</span> fragments</span><br><span class="line">        <span class="keyword">return</span> [<span class="built_in">next</span>(<span class="built_in">iter</span>(fragments))] <span class="keyword">if</span> <span class="variable language_">self</span>.params.get(<span class="string">'test'</span>) <span class="keyword">else</span> fragments</span><br><span class="line">    <span class="keyword">def</span> <span class="title function_">_get_fragments</span>(<span class="params">self, fmt, ctx, extra_query</span>):</span><br><span class="line">        fragment_base_url = fmt.get(<span class="string">'fragment_base_url'</span>)</span><br><span class="line">        fragments = <span class="variable language_">self</span>._resolve_fragments(fmt[<span class="string">'fragments'</span>], ctx)</span><br><span class="line">        frag_index = <span class="number">0</span></span><br><span class="line">        <span class="keyword">for</span> i, fragment <span class="keyword">in</span> <span class="built_in">enumerate</span>(fragments):</span><br><span class="line">            frag_index += <span class="number">1</span></span><br><span class="line">            <span class="keyword">if</span> frag_index &lt;= ctx[<span class="string">'fragment_index'</span>]:</span><br><span class="line">                <span class="keyword">continue</span></span><br><span class="line">            fragment_url = fragment.get(<span class="string">'url'</span>)</span><br><span class="line">            <span class="keyword">if</span> <span class="keyword">not</span> fragment_url:</span><br><span class="line">                <span class="keyword">assert</span> fragment_base_url</span><br><span class="line">                fragment_url = urljoin(fragment_base_url, fragment[<span class="string">'path'</span>])</span><br><span class="line">            <span class="keyword">if</span> extra_query:</span><br><span class="line">                fragment_url = update_url_query(fragment_url, extra_query)</span><br><span class="line">            <span class="keyword">yield</span> {</span><br><span class="line">                <span class="string">'frag_index'</span>: frag_index,</span><br><span class="line">                <span class="string">'fragment_count'</span>: fragment.get(<span class="string">'fragment_count'</span>),</span><br><span class="line">                <span class="string">'index'</span>: i,</span><br><span class="line">                <span class="string">'url'</span>: fragment_url,</span><br><span class="line">            }</span><br></pre></td></tr></tbody></table></figure><h4 id="Shell">Shell</h4><p>来源：<a href="https://raw.githubusercontent.com/f-droid/fdroidclient/master/create_ota.sh">https://raw.githubusercontent.com/f-droid/fdroidclient/master/create_ota.sh</a></p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/bash</span></span><br><span class="line"><span class="comment">#</span></span><br><span class="line"><span class="comment"># Script to prepare an update.zip containing F-Droid</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">set</span> -e</span><br><span class="line"></span><br><span class="line">PROG_DIR=$(<span class="built_in">dirname</span> $(<span class="built_in">realpath</span> <span class="variable">$0</span>))</span><br><span class="line"></span><br><span class="line">TMP_DIR=$(<span class="built_in">mktemp</span> -d -t fdroidclient.tmp.XXXXXXXX)</span><br><span class="line"><span class="built_in">trap</span> <span class="string">"rm -rf <span class="variable">$TMP_DIR</span>"</span> EXIT</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="function"><span class="title">error</span></span>() {</span><br><span class="line">    <span class="built_in">echo</span> <span class="string">"*** ERROR: "</span> <span class="variable">$@</span></span><br><span class="line">    usage</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">function</span> <span class="function"><span class="title">usage</span></span>() {</span><br><span class="line">    <span class="built_in">cat</span> &lt;&lt; <span class="string">EOFU</span></span><br><span class="line"><span class="string">Usage: $0 variant</span></span><br><span class="line"><span class="string">where:</span></span><br><span class="line"><span class="string"> - variant is one of: debug, release, or binary</span></span><br><span class="line"><span class="string">EOFU</span></span><br><span class="line">    <span class="built_in">exit</span> 1</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment"># Parse input</span></span><br><span class="line">VARIANT=<span class="string">"<span class="variable">$1</span>"</span></span><br><span class="line">[[ -z <span class="string">"<span class="variable">$VARIANT</span>"</span> ]] &amp;&amp; error <span class="string">"Missing variant"</span></span><br><span class="line"></span><br><span class="line">VERSIONCODE=<span class="variable">$2</span></span><br><span class="line"></span><br><span class="line">GPG=<span class="string">"gpg --keyring <span class="variable">$PROG_DIR</span>/f-droid.org-signing-key.gpg --no-default-keyring --trust-model always"</span></span><br><span class="line"></span><br><span class="line">GITVERSION=$(git describe --tags --always)</span><br><span class="line"></span><br><span class="line">FDROID_APK=F-Droid.apk</span><br><span class="line"></span><br><span class="line"><span class="comment"># Collect files</span></span><br><span class="line"><span class="built_in">mkdir</span> -p <span class="variable">$TMP_DIR</span>/META-INF/com/google/android/</span><br><span class="line"><span class="built_in">cp</span> app/src/main/scripts/update-binary <span class="variable">$TMP_DIR</span>/META-INF/com/google/android/</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"binary"</span> ] ; <span class="keyword">then</span></span><br><span class="line">    <span class="keyword">if</span> [ -z <span class="variable">$VERSIONCODE</span> ]; <span class="keyword">then</span></span><br><span class="line">        curl -L https://f-droid.org/<span class="variable">$FDROID_APK</span> &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">        curl -L https://f-droid.org/<span class="variable">${FDROID_APK}</span>.asc &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        GITVERSION=<span class="variable">$VERSIONCODE</span></span><br><span class="line">        DL_APK=org.fdroid.fdroid_<span class="variable">${VERSIONCODE}</span>.apk</span><br><span class="line">        curl -L https://f-droid.org/repo/<span class="variable">$DL_APK</span> &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">        curl -L https://f-droid.org/repo/<span class="variable">${DL_APK}</span>.asc &gt; <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line">    <span class="variable">$GPG</span> --verify <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line">    <span class="built_in">rm</span> <span class="variable">$TMP_DIR</span>/<span class="variable">${FDROID_APK}</span>.asc</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    <span class="built_in">cd</span> <span class="variable">$PROG_DIR</span></span><br><span class="line">    ./gradlew assemble$(<span class="built_in">echo</span> <span class="variable">$VARIANT</span> | <span class="built_in">tr</span> <span class="string">'dr'</span> <span class="string">'DR'</span>)</span><br><span class="line">    OUT_DIR=<span class="variable">$PROG_DIR</span>/app/build/outputs/apk</span><br><span class="line">    <span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"debug"</span> ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">elif</span> [ -f <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-signed.apk ]; <span class="keyword">then</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-signed.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">else</span></span><br><span class="line">        <span class="built_in">cp</span> <span class="variable">$OUT_DIR</span>/app-<span class="variable">${VARIANT}</span>-unsigned.apk \</span><br><span class="line">           <span class="variable">$TMP_DIR</span>/<span class="variable">$FDROID_APK</span></span><br><span class="line">    <span class="keyword">fi</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Make zip</span></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"binary"</span> ] ; <span class="keyword">then</span></span><br><span class="line">    ZIPBASE=F-DroidFromBinaries-<span class="variable">${GITVERSION}</span></span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    ZIPBASE=F-Droid-<span class="variable">${GITVERSION}</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"><span class="keyword">if</span> [ <span class="variable">$VARIANT</span> == <span class="string">"debug"</span> ]; <span class="keyword">then</span></span><br><span class="line">    ZIP=<span class="variable">${ZIPBASE}</span>-debug.zip</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">    ZIP=<span class="variable">${ZIPBASE}</span>.zip</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line">OUT_DIR=<span class="variable">$PROG_DIR</span>/app/build/distributions</span><br><span class="line"><span class="built_in">mkdir</span> -p <span class="variable">$OUT_DIR</span></span><br><span class="line">[ -f <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span> ] &amp;&amp; <span class="built_in">rm</span> -f <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span></span><br><span class="line"><span class="built_in">pushd</span> <span class="variable">$TMP_DIR</span></span><br><span class="line">zip -r <span class="variable">$OUT_DIR</span>/<span class="variable">$ZIP</span> .</span><br><span class="line"><span class="built_in">popd</span></span><br></pre></td></tr></tbody></table></figure><h4 id="JavaScript">JavaScript</h4><p>来源：<a href="https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/js/search/local-search.js">https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/js/search/local-search.js</a></p><figure class="highlight javascript"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Refer to hexo-generator-searchdb</span></span><br><span class="line"><span class="comment"> * https://github.com/next-theme/hexo-generator-searchdb/blob/main/dist/search.js</span></span><br><span class="line"><span class="comment"> * Modified by hexo-theme-butterfly</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">class</span> <span class="title class_">LocalSearch</span> {</span><br><span class="line">  <span class="title function_">constructor</span> (<span class="params">{</span></span><br><span class="line"><span class="params">    path = <span class="string">''</span>,</span></span><br><span class="line"><span class="params">    <span class="built_in">unescape</span> = <span class="literal">false</span>,</span></span><br><span class="line"><span class="params">    top_n_per_article = <span class="number">1</span></span></span><br><span class="line"><span class="params">  }</span>) {</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">path</span> = path</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">unescape</span> = <span class="built_in">unescape</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">top_n_per_article</span> = top_n_per_article</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">isfetched</span> = <span class="literal">false</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">datas</span> = <span class="literal">null</span></span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">getIndexByWord</span> (words, text, caseSensitive = <span class="literal">false</span>) {</span><br><span class="line">    <span class="keyword">const</span> index = []</span><br><span class="line">    <span class="keyword">const</span> included = <span class="keyword">new</span> <span class="title class_">Set</span>()</span><br><span class="line">    <span class="keyword">if</span> (!caseSensitive) {</span><br><span class="line">      text = text.<span class="title function_">toLowerCase</span>()</span><br><span class="line">    }</span><br><span class="line">    words.<span class="title function_">forEach</span>(<span class="function"><span class="params">word</span> =&gt;</span> {</span><br><span class="line">      <span class="keyword">if</span> (<span class="variable language_">this</span>.<span class="property">unescape</span>) {</span><br><span class="line">        <span class="keyword">const</span> div = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>)</span><br><span class="line">        div.<span class="property">innerText</span> = word</span><br><span class="line">        word = div.<span class="property">innerHTML</span></span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">const</span> wordLen = word.<span class="property">length</span></span><br><span class="line">      <span class="keyword">if</span> (wordLen === <span class="number">0</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">let</span> startPosition = <span class="number">0</span></span><br><span class="line">      <span class="keyword">let</span> position = -<span class="number">1</span></span><br><span class="line">      <span class="keyword">if</span> (!caseSensitive) {</span><br><span class="line">        word = word.<span class="title function_">toLowerCase</span>()</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">while</span> ((position = text.<span class="title function_">indexOf</span>(word, startPosition)) &gt; -<span class="number">1</span>) {</span><br><span class="line">        index.<span class="title function_">push</span>({ position, word })</span><br><span class="line">        included.<span class="title function_">add</span>(word)</span><br><span class="line">        startPosition = position + wordLen</span><br><span class="line">      }</span><br><span class="line">    })</span><br><span class="line">    <span class="comment">// Sort index by position of keyword</span></span><br><span class="line">    index.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">      <span class="keyword">if</span> (left.<span class="property">position</span> !== right.<span class="property">position</span>) {</span><br><span class="line">        <span class="keyword">return</span> left.<span class="property">position</span> - right.<span class="property">position</span></span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">return</span> right.<span class="property">word</span>.<span class="property">length</span> - left.<span class="property">word</span>.<span class="property">length</span></span><br><span class="line">    })</span><br><span class="line">    <span class="keyword">return</span> [index, included]</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Merge hits into slices</span></span><br><span class="line">  <span class="title function_">mergeIntoSlice</span> (start, end, index) {</span><br><span class="line">    <span class="keyword">let</span> item = index[<span class="number">0</span>]</span><br><span class="line">    <span class="keyword">let</span> { position, word } = item</span><br><span class="line">    <span class="keyword">const</span> hits = []</span><br><span class="line">    <span class="keyword">const</span> count = <span class="keyword">new</span> <span class="title class_">Set</span>()</span><br><span class="line">    <span class="keyword">while</span> (position + word.<span class="property">length</span> &lt;= end &amp;&amp; index.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">      count.<span class="title function_">add</span>(word)</span><br><span class="line">      hits.<span class="title function_">push</span>({</span><br><span class="line">        position,</span><br><span class="line">        <span class="attr">length</span>: word.<span class="property">length</span></span><br><span class="line">      })</span><br><span class="line">      <span class="keyword">const</span> wordEnd = position + word.<span class="property">length</span></span><br><span class="line">      <span class="comment">// Move to next position of hit</span></span><br><span class="line">      index.<span class="title function_">shift</span>()</span><br><span class="line">      <span class="keyword">while</span> (index.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        item = index[<span class="number">0</span>]</span><br><span class="line">        position = item.<span class="property">position</span></span><br><span class="line">        word = item.<span class="property">word</span></span><br><span class="line">        <span class="keyword">if</span> (wordEnd &gt; position) {</span><br><span class="line">          index.<span class="title function_">shift</span>()</span><br><span class="line">        } <span class="keyword">else</span> {</span><br><span class="line">          <span class="keyword">break</span></span><br><span class="line">        }</span><br><span class="line">      }</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">return</span> {</span><br><span class="line">      hits,</span><br><span class="line">      start,</span><br><span class="line">      end,</span><br><span class="line">      <span class="attr">count</span>: count.<span class="property">size</span></span><br><span class="line">    }</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight title and content</span></span><br><span class="line">  <span class="title function_">highlightKeyword</span> (val, slice) {</span><br><span class="line">    <span class="keyword">let</span> result = <span class="string">''</span></span><br><span class="line">    <span class="keyword">let</span> index = slice.<span class="property">start</span></span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">const</span> { position, length } <span class="keyword">of</span> slice.<span class="property">hits</span>) {</span><br><span class="line">      result += val.<span class="title function_">substring</span>(index, position)</span><br><span class="line">      index = position + length</span><br><span class="line">      result += <span class="string">`&lt;mark class="search-keyword"&gt;<span class="subst">${val.substr(position, length)}</span>&lt;/mark&gt;`</span></span><br><span class="line">    }</span><br><span class="line">    result += val.<span class="title function_">substring</span>(index, slice.<span class="property">end</span>)</span><br><span class="line">    <span class="keyword">return</span> result</span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">getResultItems</span> (keywords) {</span><br><span class="line">    <span class="keyword">const</span> resultItems = []</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">datas</span>.<span class="title function_">forEach</span>(<span class="function">(<span class="params">{ title, content, url }</span>) =&gt;</span> {</span><br><span class="line">      <span class="comment">// The number of different keywords included in the article.</span></span><br><span class="line">      <span class="keyword">const</span> [indexOfTitle, keysOfTitle] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, title)</span><br><span class="line">      <span class="keyword">const</span> [indexOfContent, keysOfContent] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, content)</span><br><span class="line">      <span class="keyword">const</span> includedCount = <span class="keyword">new</span> <span class="title class_">Set</span>([...keysOfTitle, ...keysOfContent]).<span class="property">size</span></span><br><span class="line">      <span class="comment">// Show search results</span></span><br><span class="line">      <span class="keyword">const</span> hitCount = indexOfTitle.<span class="property">length</span> + indexOfContent.<span class="property">length</span></span><br><span class="line">      <span class="keyword">if</span> (hitCount === <span class="number">0</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">const</span> slicesOfTitle = []</span><br><span class="line">      <span class="keyword">if</span> (indexOfTitle.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        slicesOfTitle.<span class="title function_">push</span>(<span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(<span class="number">0</span>, title.<span class="property">length</span>, indexOfTitle))</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">let</span> slicesOfContent = []</span><br><span class="line">      <span class="keyword">while</span> (indexOfContent.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        <span class="keyword">const</span> item = indexOfContent[<span class="number">0</span>]</span><br><span class="line">        <span class="keyword">const</span> { position } = item</span><br><span class="line">        <span class="comment">// Cut out 120 characters. The maxlength of .search-input is 80.</span></span><br><span class="line">        <span class="keyword">const</span> start = <span class="title class_">Math</span>.<span class="title function_">max</span>(<span class="number">0</span>, position - <span class="number">20</span>)</span><br><span class="line">        <span class="keyword">const</span> end = <span class="title class_">Math</span>.<span class="title function_">min</span>(content.<span class="property">length</span>, position + <span class="number">100</span>)</span><br><span class="line">        slicesOfContent.<span class="title function_">push</span>(<span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(start, end, indexOfContent))</span><br><span class="line">      }</span><br><span class="line">      <span class="comment">// Sort slices in content by included keywords' count and hits' count</span></span><br><span class="line">      slicesOfContent.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">        <span class="keyword">if</span> (left.<span class="property">count</span> !== right.<span class="property">count</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">count</span> - left.<span class="property">count</span></span><br><span class="line">        } <span class="keyword">else</span> <span class="keyword">if</span> (left.<span class="property">hits</span>.<span class="property">length</span> !== right.<span class="property">hits</span>.<span class="property">length</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">hits</span>.<span class="property">length</span> - left.<span class="property">hits</span>.<span class="property">length</span></span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> left.<span class="property">start</span> - right.<span class="property">start</span></span><br><span class="line">      })</span><br><span class="line">      <span class="comment">// Select top N slices in content</span></span><br><span class="line">      <span class="keyword">const</span> upperBound = <span class="built_in">parseInt</span>(<span class="variable language_">this</span>.<span class="property">top_n_per_article</span>, <span class="number">10</span>)</span><br><span class="line">      <span class="keyword">if</span> (upperBound &gt;= <span class="number">0</span>) {</span><br><span class="line">        slicesOfContent = slicesOfContent.<span class="title function_">slice</span>(<span class="number">0</span>, upperBound)</span><br><span class="line">      }</span><br><span class="line">      <span class="keyword">let</span> resultItem = <span class="string">''</span></span><br><span class="line">      url = <span class="keyword">new</span> <span class="title function_">URL</span>(url, location.<span class="property">origin</span>)</span><br><span class="line">      url.<span class="property">searchParams</span>.<span class="title function_">append</span>(<span class="string">'highlight'</span>, keywords.<span class="title function_">join</span>(<span class="string">' '</span>))</span><br><span class="line">      <span class="keyword">if</span> (slicesOfTitle.<span class="property">length</span> !== <span class="number">0</span>) {</span><br><span class="line">        resultItem += <span class="string">`&lt;div class="local-search-hit-item"&gt;&lt;a href="<span class="subst">${url.href}</span>"&gt;&lt;span class="search-result-title"&gt;<span class="subst">${<span class="variable language_">this</span>.highlightKeyword(title, slicesOfTitle[<span class="number">0</span>])}</span>&lt;/span&gt;`</span></span><br><span class="line">      } <span class="keyword">else</span> {</span><br><span class="line">        resultItem += <span class="string">`&lt;div class="local-search-hit-item"&gt;&lt;a href="<span class="subst">${url.href}</span>"&gt;&lt;span class="search-result-title"&gt;<span class="subst">${title}</span>&lt;/span&gt;`</span></span><br><span class="line">      }</span><br><span class="line">      slicesOfContent.<span class="title function_">forEach</span>(<span class="function"><span class="params">slice</span> =&gt;</span> {</span><br><span class="line">        resultItem += <span class="string">`&lt;p class="search-result"&gt;<span class="subst">${<span class="variable language_">this</span>.highlightKeyword(content, slice)}</span>...&lt;/p&gt;&lt;/a&gt;`</span></span><br><span class="line">      })</span><br><span class="line">      resultItem += <span class="string">'&lt;/div&gt;'</span></span><br><span class="line">      resultItems.<span class="title function_">push</span>({</span><br><span class="line">        <span class="attr">item</span>: resultItem,</span><br><span class="line">        <span class="attr">id</span>: resultItems.<span class="property">length</span>,</span><br><span class="line">        hitCount,</span><br><span class="line">        includedCount</span><br><span class="line">      })</span><br><span class="line">    })</span><br><span class="line">    <span class="keyword">return</span> resultItems</span><br><span class="line">  }</span><br><span class="line">  <span class="title function_">fetchData</span> () {</span><br><span class="line">    <span class="keyword">const</span> isXml = !<span class="variable language_">this</span>.<span class="property">path</span>.<span class="title function_">endsWith</span>(<span class="string">'json'</span>)</span><br><span class="line">    <span class="title function_">fetch</span>(<span class="variable language_">this</span>.<span class="property">path</span>)</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function"><span class="params">response</span> =&gt;</span> response.<span class="title function_">text</span>())</span><br><span class="line">      .<span class="title function_">then</span>(<span class="function"><span class="params">res</span> =&gt;</span> {</span><br><span class="line">        <span class="comment">// Get the contents from search data</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">isfetched</span> = <span class="literal">true</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">datas</span> = isXml</span><br><span class="line">          ? [...<span class="keyword">new</span> <span class="title class_">DOMParser</span>().<span class="title function_">parseFromString</span>(res, <span class="string">'text/xml'</span>).<span class="title function_">querySelectorAll</span>(<span class="string">'entry'</span>)].<span class="title function_">map</span>(<span class="function"><span class="params">element</span> =&gt;</span> ({</span><br><span class="line">              <span class="attr">title</span>: element.<span class="title function_">querySelector</span>(<span class="string">'title'</span>).<span class="property">textContent</span>,</span><br><span class="line">              <span class="attr">content</span>: element.<span class="title function_">querySelector</span>(<span class="string">'content'</span>).<span class="property">textContent</span>,</span><br><span class="line">              <span class="attr">url</span>: element.<span class="title function_">querySelector</span>(<span class="string">'url'</span>).<span class="property">textContent</span></span><br><span class="line">            }))</span><br><span class="line">          : <span class="title class_">JSON</span>.<span class="title function_">parse</span>(res)</span><br><span class="line">        <span class="comment">// Only match articles with non-empty titles</span></span><br><span class="line">        <span class="variable language_">this</span>.<span class="property">datas</span> = <span class="variable language_">this</span>.<span class="property">datas</span>.<span class="title function_">filter</span>(<span class="function"><span class="params">data</span> =&gt;</span> data.<span class="property">title</span>).<span class="title function_">map</span>(<span class="function"><span class="params">data</span> =&gt;</span> {</span><br><span class="line">          data.<span class="property">title</span> = data.<span class="property">title</span>.<span class="title function_">trim</span>()</span><br><span class="line">          data.<span class="property">content</span> = data.<span class="property">content</span> ? data.<span class="property">content</span>.<span class="title function_">trim</span>().<span class="title function_">replace</span>(<span class="regexp">/&lt;[^&gt;]+&gt;/g</span>, <span class="string">''</span>) : <span class="string">''</span></span><br><span class="line">          data.<span class="property">url</span> = <span class="built_in">decodeURIComponent</span>(data.<span class="property">url</span>).<span class="title function_">replace</span>(<span class="regexp">/\/{2,}/g</span>, <span class="string">'/'</span>)</span><br><span class="line">          <span class="keyword">return</span> data</span><br><span class="line">        })</span><br><span class="line">        <span class="comment">// Remove loading animation</span></span><br><span class="line">        <span class="variable language_">window</span>.<span class="title function_">dispatchEvent</span>(<span class="keyword">new</span> <span class="title class_">Event</span>(<span class="string">'search:loaded'</span>))</span><br><span class="line">      })</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight by wrapping node in mark elements with the given class name</span></span><br><span class="line">  <span class="title function_">highlightText</span> (node, slice, className) {</span><br><span class="line">    <span class="keyword">const</span> val = node.<span class="property">nodeValue</span></span><br><span class="line">    <span class="keyword">let</span> index = slice.<span class="property">start</span></span><br><span class="line">    <span class="keyword">const</span> children = []</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">const</span> { position, length } <span class="keyword">of</span> slice.<span class="property">hits</span>) {</span><br><span class="line">      <span class="keyword">const</span> text = <span class="variable language_">document</span>.<span class="title function_">createTextNode</span>(val.<span class="title function_">substring</span>(index, position))</span><br><span class="line">      index = position + length</span><br><span class="line">      <span class="keyword">const</span> mark = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'mark'</span>)</span><br><span class="line">      mark.<span class="property">className</span> = className</span><br><span class="line">      mark.<span class="title function_">appendChild</span>(<span class="variable language_">document</span>.<span class="title function_">createTextNode</span>(val.<span class="title function_">substr</span>(position, length)))</span><br><span class="line">      children.<span class="title function_">push</span>(text, mark)</span><br><span class="line">    }</span><br><span class="line">    node.<span class="property">nodeValue</span> = val.<span class="title function_">substring</span>(index, slice.<span class="property">end</span>)</span><br><span class="line">    children.<span class="title function_">forEach</span>(<span class="function"><span class="params">element</span> =&gt;</span> {</span><br><span class="line">      node.<span class="property">parentNode</span>.<span class="title function_">insertBefore</span>(element, node)</span><br><span class="line">    })</span><br><span class="line">  }</span><br><span class="line">  <span class="comment">// Highlight the search words provided in the url in the text</span></span><br><span class="line">  <span class="title function_">highlightSearchWords</span> (body) {</span><br><span class="line">    <span class="keyword">const</span> params = <span class="keyword">new</span> <span class="title function_">URL</span>(location.<span class="property">href</span>).<span class="property">searchParams</span>.<span class="title function_">get</span>(<span class="string">'highlight'</span>)</span><br><span class="line">    <span class="keyword">const</span> keywords = params ? params.<span class="title function_">split</span>(<span class="string">' '</span>) : []</span><br><span class="line">    <span class="keyword">if</span> (!keywords.<span class="property">length</span> || !body) <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">const</span> walk = <span class="variable language_">document</span>.<span class="title function_">createTreeWalker</span>(body, <span class="title class_">NodeFilter</span>.<span class="property">SHOW_TEXT</span>, <span class="literal">null</span>)</span><br><span class="line">    <span class="keyword">const</span> allNodes = []</span><br><span class="line">    <span class="keyword">while</span> (walk.<span class="title function_">nextNode</span>()) {</span><br><span class="line">      <span class="keyword">if</span> (!walk.<span class="property">currentNode</span>.<span class="property">parentNode</span>.<span class="title function_">matches</span>(<span class="string">'button, select, textarea, .mermaid'</span>)) allNodes.<span class="title function_">push</span>(walk.<span class="property">currentNode</span>)</span><br><span class="line">    }</span><br><span class="line">    allNodes.<span class="title function_">forEach</span>(<span class="function"><span class="params">node</span> =&gt;</span> {</span><br><span class="line">      <span class="keyword">const</span> [indexOfNode] = <span class="variable language_">this</span>.<span class="title function_">getIndexByWord</span>(keywords, node.<span class="property">nodeValue</span>)</span><br><span class="line">      <span class="keyword">if</span> (!indexOfNode.<span class="property">length</span>) <span class="keyword">return</span></span><br><span class="line">      <span class="keyword">const</span> slice = <span class="variable language_">this</span>.<span class="title function_">mergeIntoSlice</span>(<span class="number">0</span>, node.<span class="property">nodeValue</span>.<span class="property">length</span>, indexOfNode)</span><br><span class="line">      <span class="variable language_">this</span>.<span class="title function_">highlightText</span>(node, slice, <span class="string">'search-keyword'</span>)</span><br><span class="line">    })</span><br><span class="line">  }</span><br><span class="line">}</span><br><span class="line"><span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'load'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line"><span class="comment">// Search</span></span><br><span class="line">  <span class="keyword">const</span> { path, top_n_per_article, <span class="built_in">unescape</span>, languages } = <span class="variable constant_">GLOBAL_CONFIG</span>.<span class="property">localSearch</span></span><br><span class="line">  <span class="keyword">const</span> localSearch = <span class="keyword">new</span> <span class="title class_">LocalSearch</span>({</span><br><span class="line">    path,</span><br><span class="line">    top_n_per_article,</span><br><span class="line">    <span class="built_in">unescape</span></span><br><span class="line">  })</span><br><span class="line">  <span class="keyword">const</span> input = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search-input input'</span>)</span><br><span class="line">  <span class="keyword">const</span> statsItem = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'local-search-stats-wrap'</span>)</span><br><span class="line">  <span class="keyword">const</span> $loadingStatus = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'loading-status'</span>)</span><br><span class="line">  <span class="keyword">const</span> isXml = !path.<span class="title function_">endsWith</span>(<span class="string">'json'</span>)</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">inputEventFunction</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">if</span> (!localSearch.<span class="property">isfetched</span>) <span class="keyword">return</span></span><br><span class="line">    <span class="keyword">let</span> searchText = input.<span class="property">value</span>.<span class="title function_">trim</span>().<span class="title function_">toLowerCase</span>()</span><br><span class="line">    isXml &amp;&amp; (searchText = searchText.<span class="title function_">replace</span>(<span class="regexp">/&lt;/g</span>, <span class="string">'&amp;lt;'</span>).<span class="title function_">replace</span>(<span class="regexp">/&gt;/g</span>, <span class="string">'&amp;gt;'</span>))</span><br><span class="line">    <span class="keyword">if</span> (searchText !== <span class="string">''</span>) $loadingStatus.<span class="property">innerHTML</span> = <span class="string">'&lt;i class="fas fa-spinner fa-pulse"&gt;&lt;/i&gt;'</span></span><br><span class="line">    <span class="keyword">const</span> keywords = searchText.<span class="title function_">split</span>(<span class="regexp">/[-\s]+/</span>)</span><br><span class="line">    <span class="keyword">const</span> container = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'local-search-results'</span>)</span><br><span class="line">    <span class="keyword">let</span> resultItems = []</span><br><span class="line">    <span class="keyword">if</span> (searchText.<span class="property">length</span> &gt; <span class="number">0</span>) {</span><br><span class="line">    <span class="comment">// Perform local searching</span></span><br><span class="line">      resultItems = localSearch.<span class="title function_">getResultItems</span>(keywords)</span><br><span class="line">    }</span><br><span class="line">    <span class="keyword">if</span> (keywords.<span class="property">length</span> === <span class="number">1</span> &amp;&amp; keywords[<span class="number">0</span>] === <span class="string">''</span>) {</span><br><span class="line">      container.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">      statsItem.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">    } <span class="keyword">else</span> <span class="keyword">if</span> (resultItems.<span class="property">length</span> === <span class="number">0</span>) {</span><br><span class="line">      container.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">      <span class="keyword">const</span> statsDiv = <span class="variable language_">document</span>.<span class="title function_">createElement</span>(<span class="string">'div'</span>)</span><br><span class="line">      statsDiv.<span class="property">className</span> = <span class="string">'search-result-stats'</span></span><br><span class="line">      statsDiv.<span class="property">textContent</span> = languages.<span class="property">hits_empty</span>.<span class="title function_">replace</span>(<span class="regexp">/\$\{query}/</span>, searchText)</span><br><span class="line">      statsItem.<span class="property">innerHTML</span> = statsDiv.<span class="property">outerHTML</span></span><br><span class="line">    } <span class="keyword">else</span> {</span><br><span class="line">      resultItems.<span class="title function_">sort</span>(<span class="function">(<span class="params">left, right</span>) =&gt;</span> {</span><br><span class="line">        <span class="keyword">if</span> (left.<span class="property">includedCount</span> !== right.<span class="property">includedCount</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">includedCount</span> - left.<span class="property">includedCount</span></span><br><span class="line">        } <span class="keyword">else</span> <span class="keyword">if</span> (left.<span class="property">hitCount</span> !== right.<span class="property">hitCount</span>) {</span><br><span class="line">          <span class="keyword">return</span> right.<span class="property">hitCount</span> - left.<span class="property">hitCount</span></span><br><span class="line">        }</span><br><span class="line">        <span class="keyword">return</span> right.<span class="property">id</span> - left.<span class="property">id</span></span><br><span class="line">      })</span><br><span class="line">      <span class="keyword">const</span> stats = languages.<span class="property">hits_stats</span>.<span class="title function_">replace</span>(<span class="regexp">/\$\{hits}/</span>, resultItems.<span class="property">length</span>)</span><br><span class="line">      container.<span class="property">innerHTML</span> = <span class="string">`&lt;div class="search-result-list"&gt;<span class="subst">${resultItems.map(result =&gt; result.item).join(<span class="string">''</span>)}</span>&lt;/div&gt;`</span></span><br><span class="line">      statsItem.<span class="property">innerHTML</span> = <span class="string">`&lt;hr&gt;&lt;div class="search-result-stats"&gt;<span class="subst">${stats}</span>&lt;/div&gt;`</span></span><br><span class="line">      <span class="variable language_">window</span>.<span class="property">pjax</span> &amp;&amp; <span class="variable language_">window</span>.<span class="property">pjax</span>.<span class="title function_">refresh</span>(container)</span><br><span class="line">    }</span><br><span class="line">    $loadingStatus.<span class="property">textContent</span> = <span class="string">''</span></span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">let</span> loadFlag = <span class="literal">false</span></span><br><span class="line">  <span class="keyword">const</span> $searchMask = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'search-mask'</span>)</span><br><span class="line">  <span class="keyword">const</span> $searchDialog = <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search .search-dialog'</span>)</span><br><span class="line">  <span class="comment">// fix safari</span></span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">fixSafariHeight</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable language_">window</span>.<span class="property">innerWidth</span> &lt; <span class="number">768</span>) {</span><br><span class="line">      $searchDialog.<span class="property">style</span>.<span class="title function_">setProperty</span>(<span class="string">'--search-height'</span>, <span class="variable language_">window</span>.<span class="property">innerHeight</span> + <span class="string">'px'</span>)</span><br><span class="line">    }</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">openSearch</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">const</span> bodyStyle = <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">style</span></span><br><span class="line">    bodyStyle.<span class="property">width</span> = <span class="string">'100%'</span></span><br><span class="line">    bodyStyle.<span class="property">overflow</span> = <span class="string">'hidden'</span></span><br><span class="line">    btf.<span class="title function_">animateIn</span>($searchMask, <span class="string">'to_show 0.5s'</span>)</span><br><span class="line">    btf.<span class="title function_">animateIn</span>($searchDialog, <span class="string">'titleScale 0.5s'</span>)</span><br><span class="line">    <span class="built_in">setTimeout</span>(<span class="function">() =&gt;</span> { input.<span class="title function_">focus</span>() }, <span class="number">300</span>)</span><br><span class="line">    <span class="keyword">if</span> (!loadFlag) {</span><br><span class="line">      !localSearch.<span class="property">isfetched</span> &amp;&amp; localSearch.<span class="title function_">fetchData</span>()</span><br><span class="line">      input.<span class="title function_">addEventListener</span>(<span class="string">'input'</span>, inputEventFunction)</span><br><span class="line">      loadFlag = <span class="literal">true</span></span><br><span class="line">    }</span><br><span class="line">    <span class="comment">// shortcut: ESC</span></span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">addEventListener</span>(<span class="string">'keydown'</span>, <span class="keyword">function</span> <span class="title function_">f</span> (<span class="params">event</span>) {</span><br><span class="line">      <span class="keyword">if</span> (event.<span class="property">code</span> === <span class="string">'Escape'</span>) {</span><br><span class="line">        <span class="title function_">closeSearch</span>()</span><br><span class="line">        <span class="variable language_">document</span>.<span class="title function_">removeEventListener</span>(<span class="string">'keydown'</span>, f)</span><br><span class="line">      }</span><br><span class="line">    })</span><br><span class="line">    <span class="title function_">fixSafariHeight</span>()</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'resize'</span>, fixSafariHeight)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">closeSearch</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="keyword">const</span> bodyStyle = <span class="variable language_">document</span>.<span class="property">body</span>.<span class="property">style</span></span><br><span class="line">    bodyStyle.<span class="property">width</span> = <span class="string">''</span></span><br><span class="line">    bodyStyle.<span class="property">overflow</span> = <span class="string">''</span></span><br><span class="line">    btf.<span class="title function_">animateOut</span>($searchDialog, <span class="string">'search_close .5s'</span>)</span><br><span class="line">    btf.<span class="title function_">animateOut</span>($searchMask, <span class="string">'to_hide 0.5s'</span>)</span><br><span class="line">    <span class="variable language_">window</span>.<span class="title function_">removeEventListener</span>(<span class="string">'resize'</span>, fixSafariHeight)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">searchClickFn</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    btf.<span class="title function_">addEventListenerPjax</span>(<span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#search-button &gt; .search'</span>), <span class="string">'click'</span>, openSearch)</span><br><span class="line">  }</span><br><span class="line">  <span class="keyword">const</span> <span class="title function_">searchFnOnce</span> = (<span class="params"></span>) =&gt; {</span><br><span class="line">    <span class="variable language_">document</span>.<span class="title function_">querySelector</span>(<span class="string">'#local-search .search-close-button'</span>).<span class="title function_">addEventListener</span>(<span class="string">'click'</span>, closeSearch)</span><br><span class="line">    $searchMask.<span class="title function_">addEventListener</span>(<span class="string">'click'</span>, closeSearch)</span><br><span class="line">    <span class="keyword">if</span> (<span class="variable constant_">GLOBAL_CONFIG</span>.<span class="property">localSearch</span>.<span class="property">preload</span>) {</span><br><span class="line">      localSearch.<span class="title function_">fetchData</span>()</span><br><span class="line">    }</span><br><span class="line">    localSearch.<span class="title function_">highlightSearchWords</span>(<span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'article-container'</span>))</span><br><span class="line">  }</span><br><span class="line">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'search:loaded'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line">    <span class="keyword">const</span> $loadDataItem = <span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'loading-database'</span>)</span><br><span class="line">    $loadDataItem.<span class="property">nextElementSibling</span>.<span class="property">style</span>.<span class="property">display</span> = <span class="string">'block'</span></span><br><span class="line">    $loadDataItem.<span class="title function_">remove</span>()</span><br><span class="line">  })</span><br><span class="line">  <span class="title function_">searchClickFn</span>()</span><br><span class="line">  <span class="title function_">searchFnOnce</span>()</span><br><span class="line">  <span class="comment">// pjax</span></span><br><span class="line">  <span class="variable language_">window</span>.<span class="title function_">addEventListener</span>(<span class="string">'pjax:complete'</span>, <span class="function">() =&gt;</span> {</span><br><span class="line">    !btf.<span class="title function_">isHidden</span>($searchMask) &amp;&amp; <span class="title function_">closeSearch</span>()</span><br><span class="line">    localSearch.<span class="title function_">highlightSearchWords</span>(<span class="variable language_">document</span>.<span class="title function_">getElementById</span>(<span class="string">'article-container'</span>))</span><br><span class="line">    <span class="title function_">searchClickFn</span>()</span><br><span class="line">  })</span><br><span class="line">})</span><br></pre></td></tr></tbody></table></figure><h3 id="数据与前端">数据与前端</h3><h4 id="XML">XML</h4><p>来源：<a href="https://raw.githubusercontent.com/f-droid/fdroidclient/master/app/lint.xml">https://raw.githubusercontent.com/f-droid/fdroidclient/master/app/lint.xml</a></p><figure class="highlight xml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;?xml version=<span class="string">"1.0"</span> encoding=<span class="string">"UTF-8"</span>?&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">lint</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- TODO bump our targetSdkVersion when we are ready for it --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ExpiredTargetSdkVersion"</span> <span class="attr">severity</span>=<span class="string">"ignore"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- TODO This should be handled as part of an overhaul of Bluetooth swap --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingPermission"</span> <span class="attr">severity</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Our translations are crowd-sourced --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingTranslation"</span> <span class="attr">severity</span>=<span class="string">"ignore"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ExtraTranslation"</span> <span class="attr">severity</span>=<span class="string">"warning"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- to make CI fail on errors until this is fixed</span></span><br><span class="line"><span class="comment">         https://github.com/rtyley/spongycastle/issues/7 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"InvalidPackage"</span> <span class="attr">severity</span>=<span class="string">"warning"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ImpliedQuantity"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"DefaultLocale"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SimpleDateFormat"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"NewApi"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"InlinedApi"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- These are important to us, so promote from warning to error --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"UnusedResources"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/drawable/category_**.png"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values/dimens.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values/styles.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/res/values/styles.xml"</span> /&gt;</span></span><br><span class="line">        <span class="comment">&lt;!-- keep a single strings.xml for all build flavors --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values**/strings.xml"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"AppCompatMethod"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"NestedScrolling"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"Typos"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"StringFormatCount"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"UnsafeProtectedBroadcastReceiver"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"GetInstance"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"PackageManagerGetSignatures"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"HardwareIds"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"TrustAllX509TrustManager"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="comment">&lt;!-- these come from included libraries --&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/apache/commons/net/ftp/FTPSTrustManager.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/bouncycastle/est/jcajce/JcaJceUtils$1.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/bouncycastle/est/jcajce/JcaJceUtils$2.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"org/apache/commons/net/util/TrustManagerUtils$TrustManager.class"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"\*/bcpkix-jdk15to18-1.71.jar"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"\*/commons-net-3.6.jar"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"PluralsCandidate"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"HardcodedText"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"RtlCompat"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"RtlEnabled"</span> <span class="attr">severity</span>=<span class="string">"error"</span> /&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- both the correct and deprecated locales need to be present for</span></span><br><span class="line"><span class="comment">         them to be recognized on all devices --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"LocaleFolder"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-he"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-id"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- Weblate doesn't handle these yet: https://github.com/WeblateOrg/weblate/issues/7520 --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"MissingQuantity"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-cs"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-fr"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-lt"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/res/values-sk"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SetWorldReadable"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/installer/ApkFileProvider.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"ProtectedPermissions"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/debug/AndroidManifest.xml"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/full/AndroidManifest.xml"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line">    <span class="comment">&lt;!-- these should be fixed, but it'll be a chunk of work --&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">issue</span> <span class="attr">id</span>=<span class="string">"SetTextI18n"</span> <span class="attr">severity</span>=<span class="string">"error"</span>&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java"</span> /&gt;</span></span><br><span class="line">        <span class="tag">&lt;<span class="name">ignore</span> <span class="attr">path</span>=<span class="string">"src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java"</span> /&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">issue</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">lint</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h4 id="Stylus">Stylus</h4><p>来源：<a href="https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/css/_layout/post.styl">https://raw.githubusercontent.com/jerryc127/hexo-theme-butterfly/master/source/css/_layout/post.styl</a></p><figure class="highlight stylus"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="title">beautify</span><span class="params">()</span></span></span><br><span class="line">  <span class="built_in">headStyle</span>(fontsize)</span><br><span class="line">    <span class="attribute">padding-left</span>: <span class="built_in">unit</span>(fontsize + <span class="number">8</span>, <span class="string">'px'</span>)</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="built_in">unit</span>(fontsize - <span class="number">2</span>, <span class="string">'px'</span>)</span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">padding-left</span>: <span class="built_in">unit</span>(fontsize + <span class="number">12</span>, <span class="string">'px'</span>)</span><br><span class="line">  <span class="selector-tag">h1</span>,</span><br><span class="line">  <span class="selector-tag">h2</span>,</span><br><span class="line">  <span class="selector-tag">h3</span>,</span><br><span class="line">  <span class="selector-tag">h4</span>,</span><br><span class="line">  <span class="selector-tag">h5</span>,</span><br><span class="line">  <span class="selector-tag">h6</span></span><br><span class="line">    <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-out</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="attribute">position</span>: absolute</span><br><span class="line">      <span class="attribute">top</span>: <span class="built_in">calc</span>(<span class="number">50%</span> - <span class="number">7px</span>)</span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$title</span>-prefix-icon-color</span><br><span class="line">      <span class="attribute">content</span>: <span class="variable">$title</span>-prefix-icon</span><br><span class="line">      <span class="attribute">left</span>: <span class="number">0</span></span><br><span class="line">      <span class="attribute">line-height</span>: <span class="number">1</span></span><br><span class="line">      <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-out</span><br><span class="line">      <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">  <span class="selector-tag">h1</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">20</span>)</span><br><span class="line">  <span class="selector-tag">h2</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">18</span>)</span><br><span class="line">  <span class="selector-tag">h3</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">16</span>)</span><br><span class="line">  <span class="selector-tag">h4</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">14</span>)</span><br><span class="line">  <span class="selector-tag">h5</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">12</span>)</span><br><span class="line">  <span class="selector-tag">h6</span></span><br><span class="line">    <span class="built_in">headStyle</span>(<span class="number">12</span>)</span><br><span class="line">  <span class="selector-tag">ol</span>,</span><br><span class="line">  <span class="selector-tag">ul</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span></span><br><span class="line">  <span class="selector-tag">li</span></span><br><span class="line">    <span class="selector-pseudo">&amp;::marker</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">      <span class="attribute">font-weight</span>: <span class="number">600</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="number">1.05em</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="selector-pseudo">&amp;::marker</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="built_in">var</span>(--pseudo-hover)</span><br><span class="line">  <span class="selector-tag">ul</span> &gt; <span class="selector-tag">li</span></span><br><span class="line">    <span class="attribute">list-style-type</span>: circle</span><br><span class="line">  </span><br><span class="line">  hr</span><br><span class="line">    <span class="keyword">@extend</span> <span class="selector-class">.custom-hr</span></span><br><span class="line"><span class="selector-id">#article-container</span></span><br><span class="line">  <span class="attribute">word-wrap</span>: break-word</span><br><span class="line">  <span class="attribute">overflow-wrap</span>: break-word</span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'text_align_justify'</span>)</span><br><span class="line">    <span class="attribute">text-align</span>: justify</span><br><span class="line">  <span class="selector-tag">a</span></span><br><span class="line">    <span class="attribute">color</span>: <span class="variable">$theme</span>-link-color</span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">text-decoration</span>: underline</span><br><span class="line">  <span class="selector-tag">img</span></span><br><span class="line">    <span class="attribute">display</span>: block</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> auto <span class="number">20px</span></span><br><span class="line">    <span class="attribute">max-width</span>: <span class="number">100%</span></span><br><span class="line">    <span class="attribute">transition</span>: filter <span class="number">375ms</span> ease-in .<span class="number">2s</span></span><br><span class="line">  <span class="selector-tag">p</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">16px</span></span><br><span class="line">  <span class="selector-tag">iframe</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span></span><br><span class="line">  <span class="selector-tag">kbd</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">3px</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">3px</span> <span class="number">5px</span></span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="number">#b4b4b4</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">3px</span></span><br><span class="line">    <span class="attribute">background-color</span>: <span class="number">#f8f8f8</span></span><br><span class="line">    <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">1px</span> <span class="number">3px</span> <span class="built_in">rgba</span>(<span class="number">0</span>, <span class="number">0</span>, <span class="number">0</span>, .<span class="number">25</span>), <span class="number">0</span> <span class="number">2px</span> <span class="number">1px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">255</span>, <span class="number">255</span>, <span class="number">255</span>, .<span class="number">6</span>) inset</span><br><span class="line">    <span class="attribute">color</span>: <span class="number">#34495e</span></span><br><span class="line">    <span class="attribute">white-space</span>: nowrap</span><br><span class="line">    <span class="attribute">font-weight</span>: <span class="number">600</span></span><br><span class="line">    <span class="attribute">font-size</span>: .<span class="number">9em</span></span><br><span class="line">    <span class="attribute">font-family</span>: Monaco, <span class="string">'Ubuntu Mono'</span>, monospace</span><br><span class="line">    <span class="attribute">line-height</span>: <span class="number">1em</span></span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'anchor.click_to_scroll'</span>)</span><br><span class="line">    <span class="selector-tag">h1</span>,</span><br><span class="line">    <span class="selector-tag">h2</span>,</span><br><span class="line">    <span class="selector-tag">h3</span>,</span><br><span class="line">    <span class="selector-tag">h4</span>,</span><br><span class="line">    <span class="selector-tag">h5</span>,</span><br><span class="line">    <span class="selector-tag">h6</span></span><br><span class="line">      <span class="attribute">width</span>: fit-content</span><br><span class="line">      <span class="selector-tag">a</span><span class="selector-pseudo">:not</span>(.headerlink)</span><br><span class="line">        <span class="attribute">position</span> relative</span><br><span class="line">        <span class="attribute">z-index</span> <span class="number">10</span></span><br><span class="line">      <span class="selector-tag">a</span><span class="selector-class">.headerlink</span></span><br><span class="line">        <span class="attribute">position</span>: absolute</span><br><span class="line">        <span class="attribute">top</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">right</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">left</span> <span class="number">0</span></span><br><span class="line">        <span class="attribute">bottom</span>: <span class="number">0</span></span><br><span class="line">        <span class="attribute">width</span> <span class="number">100%</span></span><br><span class="line">        <span class="attribute">height</span>: <span class="number">100%</span></span><br><span class="line">  <span class="selector-tag">ol</span>,</span><br><span class="line">  <span class="selector-tag">ul</span></span><br><span class="line">    <span class="selector-tag">ol</span>,</span><br><span class="line">    <span class="selector-tag">ul</span></span><br><span class="line">      <span class="attribute">padding-left</span>: <span class="number">20px</span></span><br><span class="line">    <span class="selector-tag">li</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">4px</span> <span class="number">0</span></span><br><span class="line">    <span class="selector-tag">p</span></span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span></span><br><span class="line">  &gt; <span class="selector-pseudo">:last-child</span></span><br><span class="line">    <span class="attribute">margin-bottom</span>: <span class="number">0</span> <span class="meta">!important</span></span><br><span class="line">  hr</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">20px</span> <span class="number">0</span></span><br><span class="line">  <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.enable'</span>)</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.field'</span>) == <span class="string">'site'</span></span><br><span class="line">      <span class="built_in">beautify</span>()</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'beautify.field'</span>) == <span class="string">'post'</span></span><br><span class="line">      &amp;<span class="selector-class">.post-content</span></span><br><span class="line">        <span class="built_in">beautify</span>()</span><br><span class="line"><span class="selector-id">#post</span></span><br><span class="line">  <span class="selector-class">.tag_share</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:after</span></span><br><span class="line">      <span class="attribute">display</span>: block</span><br><span class="line">      <span class="attribute">clear</span>: both</span><br><span class="line">      <span class="attribute">content</span>: <span class="string">''</span></span><br><span class="line">    <span class="selector-class">.post-meta</span></span><br><span class="line">      &amp;__tag-list</span><br><span class="line">        <span class="attribute">display</span>: inline-block</span><br><span class="line">      &amp;__tags</span><br><span class="line">        <span class="attribute">display</span>: inline-block</span><br><span class="line">        <span class="attribute">margin</span>: <span class="number">8px</span> <span class="number">8px</span> <span class="number">8px</span> <span class="number">0</span></span><br><span class="line">        <span class="attribute">padding</span>: <span class="number">0</span> <span class="number">12px</span></span><br><span class="line">        <span class="attribute">width</span>: fit-content</span><br><span class="line">        <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">border-radius</span>: <span class="number">12px</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">font-size</span>: .<span class="number">85em</span></span><br><span class="line">        <span class="attribute">transition</span>: all .<span class="number">2s</span> ease-in-out</span><br><span class="line">        <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">          <span class="attribute">background</span>: <span class="variable">$light</span>-blue</span><br><span class="line">          <span class="attribute">color</span>: <span class="built_in">var</span>(--white)</span><br><span class="line">    <span class="selector-class">.post_share</span></span><br><span class="line">      <span class="attribute">display</span>: inline-block</span><br><span class="line">      <span class="attribute">float</span>: right</span><br><span class="line">      <span class="attribute">margin</span>: <span class="number">8px</span> <span class="number">0</span> <span class="number">0</span></span><br><span class="line">      <span class="attribute">width</span>: fit-content</span><br><span class="line">      <span class="selector-class">.social-share</span></span><br><span class="line">        <span class="attribute">font-size</span>: .<span class="number">85em</span></span><br><span class="line">        <span class="selector-class">.social-share-icon</span></span><br><span class="line">          <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">4px</span></span><br><span class="line">          <span class="attribute">width</span>: w = <span class="number">1.85em</span></span><br><span class="line">          <span class="attribute">height</span>: w</span><br><span class="line">          <span class="attribute">font-size</span>: <span class="number">1.2em</span></span><br><span class="line">          <span class="attribute">line-height</span>: w</span><br><span class="line">  <span class="selector-class">.post-copyright</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">40px</span> <span class="number">0</span> <span class="number">10px</span></span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">10px</span> <span class="number">16px</span></span><br><span class="line">    <span class="attribute">border</span>: <span class="number">1px</span> solid <span class="built_in">var</span>(--light-grey)</span><br><span class="line">    <span class="attribute">transition</span>: box-shadow .<span class="number">3s</span> ease-in-out</span><br><span class="line">    <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">      <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">      <span class="attribute">position</span>: absolute</span><br><span class="line">      <span class="attribute">top</span>: <span class="number">2px</span></span><br><span class="line">      <span class="attribute">right</span>: <span class="number">12px</span></span><br><span class="line">      <span class="attribute">color</span>: <span class="variable">$theme</span>-color</span><br><span class="line">      <span class="attribute">content</span>: <span class="string">'\f1f9'</span></span><br><span class="line">      <span class="attribute">font-size</span>: <span class="number">1.3em</span></span><br><span class="line">    <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">      <span class="attribute">box-shadow</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">8px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">232</span>, <span class="number">237</span>, <span class="number">250</span>, .<span class="number">6</span>), <span class="number">0</span> <span class="number">2px</span> <span class="number">4px</span> <span class="number">0</span> <span class="built_in">rgba</span>(<span class="number">232</span>, <span class="number">237</span>, <span class="number">250</span>, .<span class="number">5</span>)</span><br><span class="line">    <span class="selector-class">.post-copyright</span></span><br><span class="line">      &amp;-meta</span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$light</span>-blue</span><br><span class="line">        <span class="attribute">font-weight</span>: bold</span><br><span class="line">        <span class="selector-tag">i</span></span><br><span class="line">          <span class="attribute">margin-right</span>: <span class="number">3px</span></span><br><span class="line">      &amp;-info</span><br><span class="line">        <span class="attribute">padding-left</span>: <span class="number">6px</span></span><br><span class="line">        <span class="selector-tag">a</span></span><br><span class="line">          <span class="attribute">text-decoration</span>: underline</span><br><span class="line">          <span class="attribute">word-break</span>: break-word</span><br><span class="line">          <span class="selector-pseudo">&amp;:hover</span></span><br><span class="line">            <span class="attribute">text-decoration</span>: none</span><br><span class="line">  <span class="selector-class">.post-outdate-notice</span></span><br><span class="line">    <span class="attribute">position</span>: relative</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span> <span class="number">0</span> <span class="number">20px</span></span><br><span class="line">    <span class="attribute">padding</span>: .<span class="number">5em</span> <span class="number">1.2em</span></span><br><span class="line">    <span class="attribute">border-radius</span>: <span class="number">3px</span></span><br><span class="line">    <span class="attribute">background-color</span>: <span class="variable">$noticeOutdate</span>-bg</span><br><span class="line">    <span class="attribute">color</span>: <span class="variable">$noticeOutdate</span>-color</span><br><span class="line">    <span class="keyword">if</span> <span class="built_in">hexo-config</span>(<span class="string">'noticeOutdate.style'</span>) == <span class="string">'flat'</span></span><br><span class="line">      <span class="attribute">padding</span>: .<span class="number">5em</span> <span class="number">1em</span> .<span class="number">5em</span> <span class="number">2.6em</span></span><br><span class="line">      <span class="attribute">border-left</span>: <span class="number">5px</span> solid <span class="variable">$noticeOutdate</span>-border</span><br><span class="line">      <span class="selector-pseudo">&amp;:before</span></span><br><span class="line">        <span class="keyword">@extend</span> <span class="selector-class">.fontawesomeIcon</span></span><br><span class="line">        <span class="attribute">position</span>: absolute</span><br><span class="line">        <span class="attribute">top</span>: <span class="number">50%</span></span><br><span class="line">        <span class="attribute">left</span>: .<span class="number">9em</span></span><br><span class="line">        <span class="attribute">color</span>: <span class="variable">$noticeOutdate</span>-border</span><br><span class="line">        <span class="attribute">content</span>: <span class="string">'\f071'</span></span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translateY</span>(-<span class="number">50%</span>)</span><br><span class="line">  <span class="selector-class">.ads-wrap</span></span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">40px</span> <span class="number">0</span></span><br></pre></td></tr></tbody></table></figure><h4 id="HTML">HTML</h4><p>来源：<a href="https://raw.githubusercontent.com/h5bp/html5-boilerplate/main/src/index.html">https://raw.githubusercontent.com/h5bp/html5-boilerplate/main/src/index.html</a></p><figure class="highlight html"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!doctype <span class="keyword">html</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span> <span class="attr">class</span>=<span class="string">"no-js"</span> <span class="attr">lang</span>=<span class="string">""</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"utf-8"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">title</span>&gt;</span><span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"stylesheet"</span> <span class="attr">href</span>=<span class="string">"css/style.css"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"description"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:title"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:type"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:url"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:image"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">property</span>=<span class="string">"og:image:alt"</span> <span class="attr">content</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"icon"</span> <span class="attr">href</span>=<span class="string">"/favicon.ico"</span> <span class="attr">sizes</span>=<span class="string">"any"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"icon"</span> <span class="attr">href</span>=<span class="string">"/icon.svg"</span> <span class="attr">type</span>=<span class="string">"image/svg+xml"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"apple-touch-icon"</span> <span class="attr">href</span>=<span class="string">"icon.png"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">link</span> <span class="attr">rel</span>=<span class="string">"manifest"</span> <span class="attr">href</span>=<span class="string">"site.webmanifest"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"theme-color"</span> <span class="attr">content</span>=<span class="string">"#fafafa"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">  <span class="comment">&lt;!-- Add your site or application content here --&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">p</span>&gt;</span>Hello world! This is HTML5 Boilerplate.<span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">script</span> <span class="attr">src</span>=<span class="string">"js/app.js"</span>&gt;</span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></tbody></table></figure><h1 id="数学">数学</h1><h2 id="单行公式">单行公式</h2><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>F</mi><mo>=</mo><mi>G</mi><mo>=</mo><msub><mi>m</mi><mtext mathvariant="sans-serif"> 物</mtext></msub><mi> g</mi><mo>=</mo><mn>1</mn><mi>k</mi><mi>g</mi><mo separator="true">⋅</mo><mn>9.8</mn><mi>N</mi><mi mathvariant="normal">/</mi><mi>k</mi><mi>g</mi><mo>=</mo><mn>9.8</mn><mi>N</mi></mrow><annotation encoding="application/x-tex">F = G=m_\textsf {物} g = 1kg・9.8N / kg = 9.8N</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.1389em;">F</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal">G</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">m</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord text mtight"><span class="mord textsf cjk_fallback mtight"> 物</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mpunct">⋅</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">9.8</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span><span class="mord">/</span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.0359em;">g</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord">9.8</span><span class="mord mathnormal" style="margin-right:0.109em;">N</span></span></span></span></p><h2 id="数学文字混杂">数学文字混杂</h2><p>让我们尝试证明一个稍微复杂一些的等式：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum_{k=0}^{n} \binom{n}{k} = 2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span></p><p>我们可以使用二项式定理证明这个等式。二项式定理表述为：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><msup><mo stretchy="false">)</mo><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><msup><mi>a</mi><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow></msup><msup><mi>b</mi><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">(a + b)^n = \sum_{k=0}^{n} \binom{n}{k} a^{n-k} b^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">b</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">b</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></p><p>现在，令 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">a = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>, <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">b = 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">1</span></span></span></span>，然后代入：</p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><mn>1</mn><msup><mo stretchy="false">)</mo><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><msup><mn>1</mn><mrow><mi>n</mi><mo>−</mo><mi>k</mi></mrow></msup><msup><mn>1</mn><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">(1 + 1)^n = \sum_{k=0}^{n} \binom{n}{k} 1^{n-k} 1^k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span><span class="mbin mtight">−</span><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord">1</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span></span></span></span></span></span></span></span></p><p><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>n</mi></msup><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow></mrow><annotation encoding="application/x-tex">2^n = \sum_{k=0}^{n} \binom{n}{k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span></span></span></span></p><p>这证明了 <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msubsup><mo>∑</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mi>n</mi></msubsup><mrow><mo fence="true">(</mo><mfrac linethickness="0px"><mi>n</mi><mi>k</mi></mfrac><mo fence="true">)</mo></mrow><mo>=</mo><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">\sum_{k=0}^{n} \binom{n}{k} = 2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.2em;vertical-align:-0.35em;"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em;">∑</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em;"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span><span class="mrel mtight">=</span><span class="mord mtight">0</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2997em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mopen delimcenter" style="top:0em;"><span class="delimsizing size1">(</span></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.7454em;"><span style="top:-2.355em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.0315em;">k</span></span></span></span><span style="top:-3.144em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.345em;"><span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em;"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6644em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span>。</p><h1 id="渲染器拓展语法测试">渲染器拓展语法测试</h1><p>这是 <abbr title="注释内容">被注释文本</abbr></p><p>上标<sup>示例</sup></p><p>下标<sub>示例</sub></p><p>脚注示例 <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p><h1 id="Butterfly-拓展语法测试">Butterfly 拓展语法测试 <sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></h1><h2 id="Note">Note</h2><h3 id="simple">simple</h3><div class="note simple"><p>默认 提示块标签</p></div><div class="note default simple"><p>default 提示块标签</p></div><div class="note primary simple"><p>primary 提示块标签</p></div><div class="note success simple"><p>success 提示块标签</p></div><div class="note info simple"><p>info 提示块标签</p></div><div class="note warning simple"><p>warning 提示块标签</p></div><div class="note danger simple"><p>danger 提示块标签</p></div><h3 id="modern">modern</h3><div class="note modern"><p>默认 提示块标签</p></div><div class="note default modern"><p>default 提示块标签</p></div><div class="note primary modern"><p>primary 提示块标签</p></div><div class="note success modern"><p>success 提示块标签</p></div><div class="note info modern"><p>info 提示块标签</p></div><div class="note warning modern"><p>warning 提示块标签</p></div><div class="note danger modern"><p>danger 提示块标签</p></div><h3 id="flat">flat</h3><div class="note flat"><p>默认 提示块标签</p></div><div class="note default flat"><p>default 提示块标签</p></div><div class="note primary flat"><p>primary 提示块标签</p></div><div class="note success flat"><p>success 提示块标签</p></div><div class="note info flat"><p>info 提示块标签</p></div><div class="note warning flat"><p>warning 提示块标签</p></div><div class="note danger flat"><p>danger 提示块标签</p></div><h3 id="disable">disable</h3><div class="note disabled"><p>默认 提示块标签</p></div><div class="note default disabled"><p>default 提示块标签</p></div><div class="note primary disabled"><p>primary 提示块标签</p></div><div class="note success disabled"><p>success 提示块标签</p></div><div class="note info disabled"><p>info 提示块标签</p></div><div class="note warning disabled"><p>warning 提示块标签</p></div><div class="note danger disabled"><p>danger 提示块标签</p></div><h2 id="Gallery-相册图库">Gallery 相册图库 <sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup></h2><div class="gallery-group-main"><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/f152f0964fe951b4e1fc84ef2f2460156d602454.png@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Kiki</div>      <p>Krita 吉祥物</p>      <a href="https://krita.org/zh/about-zh/kiki-zh/"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/b1eb70eabc81cef3c5821cda30de7a817e1dfbcc.png@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Konqi</div>      <p>KDE 吉祥物</p>      <a href="https://community.kde.org/Konqi"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/article/c33c0861fa58b53ab3b8f7361bb814aad2f08b3b.jpg@1e_1c.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">Sachi</div>      <p>Squishy 吉祥物</p>      <a href="https://docs.scsi.moe/mascot.html"></a>    </figcaption>  </figure><figure class="gallery-group">    <img class="gallery-group-img no-lightbox" src="https://s2.hdslb.com/bfs/album/3476724342a603a7c9b0a332d79c09e1be963df9.png@1000h.webp" alt="Group Image Gallery">    <figcaption>      <div class="gallery-group-name">An-An</div>      <p>AOSC 吉祥物</p>      <a href="https://aosc.io/"></a>    </figcaption>  </figure></div><h2 id="Gallery-相册">Gallery 相册 <sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup></h2><div class="gallery-container" data-type="data" data-button="" data-limit="10" data-first="10">    <div class="gallery-items">[{"url":"https://s2.hdslb.com/bfs/article/f7d418ca42cd207dc63d612cab02ea7526509b14.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/44635100ad10a7b0924258c318a523cda3d620a9.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/13545f598e000bcca782fdbe41c37df094d1c49a.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/f187d68789be25f3d72024956c80b8a27eaafa8c.jpg@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/a3f91dba6f7a5180a212de06bf2789027e1fb796.png@1e_1c.webp","alt":"","title":""},{"url":"https://s2.hdslb.com/bfs/article/10c656350a14eb8aa3fd1a861265dca77e3e2003.png@1e_1c.webp","alt":"","title":""}]</div>  </div><h2 id="Tag-Hide">Tag Hide</h2><p>哪个英文字母最酷？ <span class="hide-inline"><button type="button" class="hide-button" style="background-color: #FF7242;color: #fff">查看答案</button><span class="hide-content"> C，因为西装裤 (C 装酷)</span></span></p><h2 id="Mermaid">Mermaid <sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup></h2><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    flowchart LRA[Hard] --&gt;|Text| B(Round)B --&gt; C{Decision}C --&gt;|One| D[Result 1]C --&gt;|Two| E[Result 2]  </pre></div><h3 id="流程图">流程图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    flowchart LRA[Hard] --&gt;|Text| B(Round)B --&gt; C{Decision}C --&gt;|One| D[Result 1]C --&gt;|Two| E[Result 2]  </pre></div><h3 id="时序图">时序图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    sequenceDiagramAlice-&gt;&gt;John: Hello John, how are you?loop HealthCheck    John-&gt;&gt;John: Fight against hypochondriaendNote right of John: Rational thoughts!John--&gt;&gt;Alice: Great!John-&gt;&gt;Bob: How about you?Bob--&gt;&gt;John: Jolly good!  </pre></div><h3 id="甘特图">甘特图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    gantt    section Section    Completed :done,    des1, 2014-01-06,2014-01-08    Active        :active,  des2, 2014-01-07, 3d    Parallel 1   :         des3, after des1, 1d    Parallel 2   :         des4, after des1, 1d    Parallel 3   :         des5, after des3, 1d    Parallel 4   :         des6, after des4, 1d  </pre></div><h3 id="类图">类图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    classDiagramClass01 &lt;|-- AveryLongClass : Cool&lt;&lt;Interface&gt;&gt; Class01Class09 --&gt; C2 : Where am I?Class09 --* C3Class09 --|&gt; Class07Class07 : equals()Class07 : Object[] elementDataClass01 : size()Class01 : int chimpClass01 : int gorillaclass Class10 {  &lt;&lt;service&gt;&gt;  int id  size()}  </pre></div><h3 id="状态图">状态图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    stateDiagram-v2[*] --&gt; StillStill --&gt; [*]Still --&gt; MovingMoving --&gt; StillMoving --&gt; CrashCrash --&gt; [*]  </pre></div><h3 id="饼图">饼图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    pie"Dogs" : 386"Cats" : 85"Rats" : 15  </pre></div><h3 id="用户体验旅程图">用户体验旅程图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    journey  title My working day  section Go to work    Make tea: 5: Me    Go upstairs: 3: Me    Do work: 1: Me, Cat  section Go home    Go downstairs: 5: Me    Sit down: 3: Me  </pre></div><h3 id="C4-图">C4 图</h3><div class="mermaid-wrap"><pre class="mermaid-src" data-config="{}" hidden="">    C4Contexttitle System Context diagram for Internet Banking SystemPerson(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")Person(customerB, "Banking Customer B")Person_Ext(customerC, "Banking Customer C")System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")Person(customerD, "Banking Customer D", "A customer of the bank, &lt;br/&gt; with personal bank accounts.")Enterprise_Boundary(b1, "BankBoundary") {  SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")  System_Boundary(b2, "BankBoundary2") {    System(SystemA, "Banking System A")    System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts.")  }  System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")  SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")  Boundary(b3, "BankBoundary3", "boundary") {    SystemQueue(SystemF, "Banking System F Queue", "A system of the bank, with personal bank accounts.")    SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")  }}BiRel(customerA, SystemAA, "Uses")BiRel(SystemAA, SystemE, "Uses")Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")Rel(SystemC, customerA, "Sends e-mails to")  </pre></div><h2 id="Tabs">Tabs</h2><div class="tabs"><div class="nav-tabs"><button type="button" class="tab active">test1 1</button><button type="button" class="tab">test1 2</button><button type="button" class="tab">test1 3</button></div><div class="tab-contents"><div class="tab-item-content active"><p><strong>This is Tab 1.</strong></p></div><div class="tab-item-content"><p><strong>This is Tab 2.</strong></p></div><div class="tab-item-content"><p><strong>This is Tab 3.</strong></p></div></div><div class="tab-to-top"><button type="button" aria-label="scroll to top"><i class="fas fa-arrow-up"></i></button></div></div><h2 id="Button">Button</h2><a class="btn-beautify larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify blue larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify pink larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify red larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify purple larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify orange larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><a class="btn-beautify green larger" href="https://butterfly.js.org/" title="Butterfly"><i class="far fa-hand-point-right"></i><span>Butterfly</span></a><h2 id="label">label</h2><p>臣亮言：<mark class="hl-label default">先帝</mark>创业未半，而<mark class="hl-label blue">中道崩殂</mark>。今天下三分，<mark class="hl-label pink">益州疲敝</mark>，此诚<mark class="hl-label red">危急存亡之秋</mark>也！然侍衞之臣，不懈于内；<mark class="hl-label purple">忠志之士</mark>，忘身于外者，盖追先帝之殊遇，欲报之于陛下也。诚宜开张圣听，以光先帝遗德，恢弘志士之气；不宜妄自菲薄，引喻失义，以塞忠谏之路也。</p><p>宫中、府中，俱为一体；陟罚臧否，不宜异同。若有<mark class="hl-label orange">作奸</mark>、<mark class="hl-label green">犯科</mark>，及为忠善者，宜付有司，论其刑赏，以昭陛下平明之治；不宜偏私，使内外异法也。</p><h2 id="Timeline">Timeline</h2><div class="timeline "><div class="timeline-item headline">        <div class="timeline-item-title">          <div class="item-circle"><p>2022</p></div>        </div>      </div><div class="timeline-item">        <div class="timeline-item-title">          <div class="item-circle"><p>01-02</p></div>        </div>        <div class="timeline-item-content"><p>这是测试页面</p></div>      </div></div><h2 id="Chart-js">Chart.js</h2><div class="chartjs-container" data-chartjs-id="" data-width="70%">            <pre class="chartjs-src" hidden="">{    "type": "line",    "data": {        "labels": ["January", "February", "March", "April", "May", "June", "July"],        "datasets": [{            "label": "My First dataset",            "backgroundColor": "rgb(255, 99, 132)",            "borderColor": "rgb(255, 99, 132)",            "data": [0, 10, 5, 2, 20, 30, 45]        }]    },    "options": {        "responsive": true,        "title": {            "display": true,            "text": "Chart.js Line Chart"        }    }}</pre>                      </div><div class="chartjs-container" data-chartjs-id="">            <pre class="chartjs-src" hidden="">{  "type": "radar",  "data": {    "labels": [      "Eating",      "Drinking",      "Sleeping",      "Designing",      "Coding",      "Cycling",      "Running"    ],    "datasets": [      {        "label": "My First Dataset",        "data": [65, 59, 90, 81, 56, 55, 40],        "fill": true,        "backgroundColor": "rgba(255, 99, 132, 0.2)",        "borderColor": "rgb(255, 99, 132)",        "pointBackgroundColor": "rgb(255, 99, 132)",        "pointBorderColor": "#fff",        "pointHoverBackgroundColor": "#fff",        "pointHoverBorderColor": "rgb(255, 99, 132)"      },      {        "label": "My Second Dataset",        "data": [28, 48, 40, 19, 96, 27, 100],        "fill": true,        "backgroundColor": "rgba(54, 162, 235, 0.2)",        "borderColor": "rgb(54, 162, 235)",        "pointBackgroundColor": "rgb(54, 162, 235)",        "pointBorderColor": "#fff",        "pointHoverBackgroundColor": "#fff",        "pointHoverBorderColor": "rgb(54, 162, 235)"      }    ]  },  "options": {    "elements": {      "line": {        "borderWidth": 3      }    }  }}</pre>                      </div><div class="chartjs-container chartjs-abreast" data-chartjs-id="" data-width="40%">            <pre class="chartjs-src" hidden="">{    "type": "pie",    "data": {        "labels": [            "编程",            "音乐",            "阅读",            "游戏",            "健身",            "旅游"        ],        "datasets": [            {                "label": "喜爱指数",                "data": [                    30,                    24,                    19,                    14,                    9,                    4                ],                "backgroundColor": {                    "dark-mode": [                        "rgba(255, 99, 132, 0.5)",                        "rgba(54, 162, 235, 0.5)",                        "rgba(255, 206, 86, 0.5)",                        "rgba(75, 192, 192, 0.5)",                        "rgba(153, 102, 255, 0.5)",                        "rgba(255, 159, 64, 0.5)"                    ],                    "light-mode": [                        "rgba(255, 99, 132, 0.2)",                        "rgba(54, 162, 235, 0.2)",                        "rgba(255, 206, 86, 0.2)",                        "rgba(75, 192, 192, 0.2)",                        "rgba(153, 102, 255, 0.2)",                        "rgba(255, 159, 64, 0.2)"                    ]                },                "borderColor": {                    "dark-mode": [                        "rgba(255, 99, 132, 1)",                        "rgba(54, 162, 235, 1)",                        "rgba(255, 206, 86, 1)",                        "rgba(75, 192, 192, 1)",                        "rgba(153, 102, 255, 1)",                        "rgba(255, 159, 64, 1)"                    ],                    "light-mode": [                        "rgba(255, 99, 132, 1)",                        "rgba(54, 162, 235, 1)",                        "rgba(255, 206, 86, 1)",                        "rgba(75, 192, 192, 1)",                        "rgba(153, 102, 255, 1)",                        "rgba(255, 159, 64, 1)"                    ]                }            }        ]    },    "options": {        "plugins": {            "legend": {                "labels": {                    "color": {                        "dark-mode": "rgba(255, 255, 255, 0.8)",                        "light-mode": "rgba(0, 0, 0, 0.8)"                    }                }            }        }    }}</pre>            <div class="chartjs-desc"><p>除了<strong>计算机编程</strong>外，我想不出还有其他让我感兴趣的工作。我可以无中生有地创造出<strong>精美的范式</strong>和<strong>结构</strong>，在此过程中也解决了无数的小谜团。<span style="font-size:0.8em;color: var(--sep-secondtext);">I can't think of any other job other than <strong>computer programming</strong> that interests me.I can create <strong>beautiful paradigms</strong> and <strong>structures</strong> out of nothing,Countless small mysteries are also solved in the process.</span></p></div>          </div><hr class="footnotes-sep"><section class="footnotes"><ol class="footnotes-list"><li id="fn1" class="footnote-item"><p>脚注是指附在文章页面的最底端的，对某些东西加以说明的注文。 <a href="#fnref1" class="footnote-backref">↩︎</a></p></li><li id="fn2" class="footnote-item"><p>代码来自<a href="https://butterfly.js.org/posts/4aa8abbe/#Note-Bootstrap-Callout">Butterfly 安裝文檔 (三) 主題配置 - 1 | Butterfly</a>，采用 CC - BY - NC - SA 协议授权 <a href="#fnref2" class="footnote-backref">↩︎</a></p></li><li id="fn3" class="footnote-item"><p>画作由 TysonTan 绘制，采用 CC - BY - SA 协议授权 <a href="#fnref3" class="footnote-backref">↩︎</a></p></li><li id="fn4" class="footnote-item"><p>图片来自 <a href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly ReadMe</a>，采用 CC - BY - NC - SA 协议授权 <a href="#fnref4" class="footnote-backref">↩︎</a></p></li><li id="fn5" class="footnote-item"><p>代码来自 <a href="https://github.com/mermaid-js/mermaid/blob/develop/README.zh-CN.md">Mermaid ReadMe</a> <a href="#fnref5" class="footnote-backref">↩︎</a></p></li></ol></section>]]>
    </content>
    <id>https://www.lynx3.me/article/a36a68fc/</id>
    <link href="https://www.lynx3.me/article/a36a68fc/"/>
    <published>2022-12-02T00:18:18.000Z</published>
    <summary>包括 Markdown、数学以及标签外挂。</summary>
    <title>文章效果与字体编码测试</title>
    <updated>2025-02-20T15:56:24.000Z</updated>
  </entry>
</feed>
