aorey@126.com 发表于 2023-7-17 11:11:06

SDCC 计算延迟的问题

我是用 SDCC 编译器,使用官方stc-isp生成的延迟函数时间不精准,如何根据晶振的频率计算出精准延迟,并在sdcc编译环境中。

zhp 发表于 2023-7-17 18:27:05

STC下载软件提供的软件延时都是基于Keil的
SDCC的代码优化相比Keil要差一些,同样的延时代码,sdcc编译后执行时间要长一些

如果要在SDCC环境下定义很精准的代码延时,你只能先编译,然后再看反汇编,通过数指令周期数对循环次数进行调整

熊仔 发表于 2023-7-17 20:06:29

本帖最后由 熊仔 于 2023-7-17 21:06 编辑

keil C51编译,优化等级8. 可以看看翻译汇编,计算下用了多少个指令周期
//keil代码
void delay_ms(uint16_t ms)
{
      uint16_t i;
      do{
                i = MAIN_Fosc / 10000;//10T
                while(--i);
      }while(--ms);
}
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAl0AAAGTCAIAAACd6jAlAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOyde3gTVfrHv9ML5SoKpYCLi65p2ZYguipqsoiXXdkU0S6LcUXduqub4CKmq9Zr11IN6s+6mnij7epqUXSNUOqlCd5L2XQFVEBKis0ooKC9cS/Q0sv5/TGTTJJOLm3TJmnfz5OnT3LmzJn3nDk977znnHlf7tVXXwVBEARBEACAhI0bN0ZaBoIgCIKIFrjKyso5c+asX79e9m+kxSMIgiCIASUugFJcv359pMUjCIIgiAElLoBSJHuRIAiCGGqQvUgQBEEQEpG3F5t5W61ZX6Tmisy89xFbmZor4LgCTl3me6jfqdV3l8eNrYzjCtTmkAsLLb9NX8BxBVyA60aMDWr1htCECthuIeG/PwBAs81cJPQKtbm5L5fpO7y5KOIyEATRHzDGKisrA/wdIKy6FSanZ0KVSrXG6mSMMaezSqVaYx04WULAukZl6o/8TSaVTztEHqtuma5fWr9KpXP4v2j3dmgy6daYrE0hN0+g8sOBQ4co65YEQYSByNuL/phtty/QKABAoUjX+hzkyziugNPXBiukVs9JRpjLIHOZbvwGvVo8qjZLRfmz23gP+9UWQgX85ZfSuSJ9CAaHzexhN7sK4s1FHFfAiWZcs1ldEMgkFQxWfZmaK+D0tTZ9EccVqN2t59EOenVRt0I2GEtmZGmE78KFhOoIbSu1kly7CfmL9PoiseVdF+XNRRz3aXWJhRObIniT8uYqR9YCgyZZESxnj8vvZfuk55oajWQyEsSgg0WrvSjhNK1QmZq8k9YAyxCSNeBlgVl1K1ymT5VKVeW+oNO6xvsS3ew26xqVziEmOB061bIg9p/f/FU6nXQhp3WNzqscOXvR6baQvAwUrxZzBrGNnKYVUFU5WZNJtww6h5M5dKIJ3mRSrTBZBZGarLpu9bKu8W7nJpPKjwzy8jeZVMtcTeHQeR3tmb1o1a3QmdaosAxYJrVtIHpgL/ayfaxr4NGLCIIYFESvvSjCm8uyHXPshmSvVMUCxvJZcXoIBSQbSlMshcJD/QZjzfRcjVDsDmXebLflodCkKy21AdbFbOWN2tx0Mb8iPVc7MfBV/eXnzTtKSl5wGTEFqZnbSxxBrF6+oipbzL++xiNdkzvdUiieayvcoc0N0hoq7WwFktMAXVa6AhMyxORkQ16KJVMQabUR2lKD99XrGoEJgUsOxoy8YqEp0rOUvS6kua6moSSnUevMZyzfnttcEW5DrTfto5mgqm5yhlcOgiAiTFTvR20264sK0y61h6T//KO4VFtTZQNsei9dGBEUaSkqUz5jHp/AtbOVpVom5DmFzAu1Ks+yZudhvZkH+A1GzDH0umKaBXaWz1i+07lQC0t26PuJBhyVabFYTUWyI+BzTDiJnfYhCCIcRK29yG/Qq6uQu7hYkww0m32W9EJdXxRINuTBaJaMRQAKw/Qao7THkrfV1mjTA2gWTVaKpdA1EPO1hZaGwJf0m1+TrrQUmUNZnxROrWtUKdNTFQCabeYqS7X3VXKnWwo3mEMwFv2zQa0us/EAoFAgDROVaV6HFWkpQJP3KY11vCBPUWZJby8rUNMsro/qizh9YPsv2VB6BXJEUYPer56X74+A7WNrqlZNSO1VuQRBRC0s0uuLDh2WweMjrN84TSvgle698c8a+vqiQJNJ1W1TpbNKpxIKX6EyuYoSSvb8uK7itIqLW1CtsVrXuEX1h9/8TofrustUqhU6Ye3K73WbTC4hdSaHSbXMZ0HLqguhHVyF66zMqlsGrDA5hWLXWFmVSrdGkkdm3a5K5d347nqpdA6TWJo/+d3Cr7EKosKVnzHGmqy6Fd2uK98ful86hFU92fLD2T4yK98EQcQ85B81xrHpi+pyF/d+EjWkSxSUZ+UXa4LnHGLU6rnaLLaAGoYgBhccYyxap1KJQNTqOYs4i6m6wmnv13XTDWo1Svv3ErEHby7KxkLfHWEEQcQ8ZC8SBEEQhATZi4MI3lyUmiO3IUinDe2dlhhjqNWXIIgBgexFgiAIgpCI6vcXCYIgCGKAidr3FwmCIAgiApC9SBAEQRASkbcX/cfb42vNYhyGkOJOBIY3F0VlaEOCIAgiqoi8vZis0KQbihfn6XzSm83Z65G1mLF8xuZkWFb3MdpthQUmZ/++/04QBEHEPgkRtxf9kWywL/Z7kC/jUrfTdnyCIAgi3ETeXgwIv0HNFXDcekcemXoEQRDEABD59cWAKGbbWb7TOR1G76XBHsRfBNBs1q/OwZx5pFkJgiCIIES5vQgAUChm52phqeh1AcmG4oUmrK+gTTcEQRBEEKLXXpTi3oGvLcxp8Ip717P4iwRBEAQRIpG3F2v1XAHHFWSWNOSkFnBcgVqMhz67tHRCeXYBxxVwqethXeIV58g5AIIRBEEQQ5Ah4x+VNxel5tCrGgRBEERgKJ4GQRAEQUhE7/oiQRAEQQw8kV9fJAiCIIjogexFgiAIgpAge5EgCIIgJMheJAiCIAgJshcJgiAIQiLy9qL/+IsCtjKOK9DbBkCSWKRW39egkoHbv9lmLlJzgr+FvobAlKPv8hMEQYQZxlhlZWWAvwOEVbfC5OyW6qxSqaqsphU668BJMnipUukc/o7JtX+TSbfGZG3qflt6UT5BEESMEHl7MQC1+uymPPvs1O5Hhop/1GazuoDjymyAy2GeZF3Z9AWcd4orf5FeX8QJRp6riXhzEcd9Wl1iEdJdZQaCN1c5shYYNMmhOAjqRfly8ruL26DmCjh9LVmSBEEMONG7vthsVq9H3gJN8JyDmGSDfYlJJXxPL2b5Vp10TFOcz5j7qGf+hhrMcbJ8xrTKmvWC1lEYFjN2hUqnZSyfsXzGgjes09GIujK1S78GVlG9KF9OfoIgiIiTELX2YpOjuqEks6BE/FmU4enaVLGAsQUREiz6mZFXnK4AgPQs5fq6XhbSXFfTUFICkzPfrgD4DWZzs8GQHEYpA6GYbWezB+haBEEQXkSvvZheLFoe+U7TRJ2V/H1HAJXJ1eyKZIeFZjUJghgKRPX6on+GyvqiQGMdD2FraGZJ0MwBqWnmAaDZrC/i9IH3lyYbSq9AjhgCk7fV1mjTgz+Z9KD8QAhLj7QJmSCISBD5eBq1es7iOdqrTPl2Q/ejE71CRNnKuMzt0GlZcXp/yxdxeFtZdub2akCl02phySmZaHIuNjjLuMztXvl0WlY8wax+IacawAwrWwB9QWYJPJqu2aZfnVnSAECl05aKc62B2t/z0q78AZAt3w82WfmFu1mr5ywluiWseKCmbQmCICSGTPxFImbgy7jsCU77bJo4JwgiEkTeXiQIgiCI6CFG1xcJgiAIol8ge5EIGd5clJrTIHNgaCz0EgQxNKD1RYIgCIKQiN73FwmCIAhi4KH1RYIgCIKQIHuRIAiCICQiby/6jf/Hm4tcwRmGjmubgNjKOK5AbQ4pL28ukg9VQRAEQQQiIbC9OACqMVmhSTZo0tNQ1N3Dtc6aXzy0A2p4oVnArFCH5Ai8ucICLw9BBEEQREhE3l7sFUPJPypvE4M9cWrvoIb8Br1aDGGoNg+JpiAIguh/ont9sSSzgAst/t+gxVaWXZ5eKoQWKU0vN7p9im5QZyPXLoQcWVyaVqs2995PN0EQBOEiiu1FhWGxK8htfmnG+kJPW0mxgLH8ofAuua28UZvrcsCtSM/VThS+8uYdyjzJg6hCk66U4kA1m/WrczBnHk2iEgRB9JjothfdKNJSanobYHfokWwoXmjC+oohamITBEH0hei1Fzeo1UVm0UasNRu3K9M8Dg6Z9UVNVoql0GUI8rWFFtENm8Iwvca4wa34Qo2PSBAEQQQh8vZirZ4r4LiCzJKGnNQCj/cQZttLpzuMwvrieod2idfGVOcACBYdaBaUZtVmC/tusmuz8mZU5whNNNteikLXvpvsunS7gaIVEgRB9B3yjzpI4c1FqTn0qgZBEERPoXgaBEEQBCERveuLBEEQBDHwRH59kSAIgiCiB7IXCYIgCEKC7EWCIAiCkCB7kSAIgiAkyF4kiFil2aweUqHE/NV3qLUD0e9UVlYyxvz9HQCanFaHSbdChRUmp8xRq2mFCsuAZSpT08AIRPQDDp38/e0bzioVlkFV5S7YqhO6CmPWNcAywPXTS5Jl8PjorO5EQcImk8rzkD+qVN7lBMvfD1jXQBf0nyLA/1eTSbdChWVQ+RwKV3q48Vdfr/Qe1Ve619LHozsRQxUw/0pxwFQjY4xZdbL9eI3J2kTdlPCH07QCWOFSSA6daoVK5/A8qjI5dDIjXZPJdxD3OtdpWuGtTWWp8rnWwOrF7lUIRPf/L88Uq26NNdzp4cZffeXTQ6uv+1yHDkJKlYr0IsGieH2RN1c5shYYNMkyDluGjH/UQYBNLzqrC2Gmq9kserbz/AQ5UWeaXlNeC4A3r0fedM/SKiwpeYb0LOWO0FyoT9divd4WPF83mYvMPBSGxaKrQn9xMT3S9eoil79DgK91pReozWVq9YaQhLVV5SgX9sGZUW15zXR3xJXUjMZyW3jTAQD8BjVXwIUlSJy/+obaDrJyJhvsPg6hZtvts3vfqMQgIYrXF52ORtSJIXmHbvzF2EdTnM/YEpMqlLzJBjGipOcnmCu7tNl5WG/mawstKVmeTnT5WovyUg2gyU2xVIQUnHJe8RwYQ1NLAiUWjnshp9ozyV9czGZz9o6MvCWM5TO2MEvZ4Mpfq8+uzSoVK1uahmqEQrPZ2GjKDadHXH/xasKV3jf81bf37UDxeQj/RK+92FxX01CS06h15jOWb89trvCMuztk4i8OMXpjL0LQfKnra7QLPNWirXCHMisZABTpSktVaHZgeq52R3boEZ51Wh+V7z8uZrIhL8WS+QLHFXDcaiO0pQZBytoa7QKNwp1/AQvFXrFV5SjnxIDnW8VsO8tnxX2O9OKvvrHSDkSMkRDYXozwVKrK5LIVFMkOSy1voCmOwU2ywZ5v6MV5igV25pNUW17SUFJSUOJOsC3QaBAUhWGhVl1VoQ392skG++KQMmoW2NkCADzfXFH4QrY53y5WtRnokcXTbDY2mkoX9OQUOaqbnID7H0qK4xau9LDhr749bId+l5MYNESvvZhsKL0COWU2HugeX5DWF4nA2GprTEukyVjnFcIaZAgkG/JgyWkInlEO/3ExN6jVYmdWKJCGieK4rElX5qx2GcTNvK1MzZUFMW35sBhJ6bkm1InX9ZyCDlc64Fpa7vmSrTf+6tuzdggkJ0H4wCK9H9V337znPkCndY34kobO4bVJTNiF77EbkIhSPN6XED/hu2tO0wrPvfXST589924ZVFXOQO9pLHO9qsGsumXB9qN6vKfhs4PRWaUTd/+vUJkcUn7dGle6d3+W8i9TqaqsQXZD9mwbasD/ryaTzqvW4U536LAshDdJAtOzbai9qK9V1y+dk4hlKP4iQcQQ/AZ1NkpjYs8kX8ZlT3D2UVR/9Y2hdiBiD4q/SBAEQRAS0bu+SBAEQRADD9mLBOEH3lyUKrsBR6eld4QIYvDCVVZWBjhMepEgCIIYUsRFWgCCIAiCiCJILxIEQRCEBOlFgug9ZrXexpvVfX11nSCIKCIUvcjb9GqO4ziOU+vNthAGAd6sV6s5jlOrQwsWGjC/Tc9xnNcleZtZFEit9zrBQ07bgLkZN4vXFBGrwHsndxOIt5nVas8ThJN61m79hiC9hxQ2vSCqcNSzP/DwrKxwn4Tc3iVECW7Ruvcfr1sWoqKzOZCR6nQgI9UztRf3Mbr7A0EMLYLrRZs+uy63VPACYM+dV2cJ5vDfps9Grt3OGLPb0wqDDzCB8vNmtTHD6hWLgTdnG5FlZ4wxlpdhyXYPGTZ9Zo3W6RTkhHPgnuClsHtOt6QKg92qk46UZhizpZrxZn1hXVqp0Kh2lyernrZbP6IwlJpUqLYUikLYymtUKp3VbgBg06caked0tX+q2swrDHZm1alMTiZEWtIUM6dJpXNKdYsaNMVOk0olujtx5iEn21PlSHeyOCQvYXxdjTINdTXKNI969vw+Rn1/IIihRTC9yJuNyDMo3P7+FQa755jB67s9XNvKa7Qecc5qhHhsrodxvc39zC4+BMvnF4rSZzvy7AavZ3EoDHa7QWbU4utqdG5JFSg3mrvn6Q8Mdqk9KizKPFlVoDCUamuMLlOy0JFVbNAovDMGaIfIoDNpBSF4sxF5oiNt3mysMdmLxQAQGoPdqswptAHQZCndahSwFVq0udGmE7uh0OSa4HD27mSbnuNSc6pLMlNzqksypX+Cnvb/mOkPBDFkCKYXu80R9RghzpnCYHeaVFABQGqGCiqd1Y8x4YqLxpvVRuT5eW4XhxmjI89diiJNWWI08zwA3mY2llQ7Bnog4c0WpV9vxIo0ZbUwBDsdNahzTwT7nfCNfHy4NEMejGbeVihVi6+wQDvPM5MmS1dTxwPQ5GrdY7fXmB618Lw52/uOlWT6m/fujqaYCUayYCn7tTCD9v+Y6Q8EMVTo474bRXHok04Kg92ZV5PJcakWrdMe9Byno7paGKdSc6pLMr2XWBQGO2NOpxZGKV1T7NRaUlM5jks1OrS6kOLghhO+IoBa9MhWV1NdklOjFSd86yqieO1Ik6u0pBprtCHdYIVBNIl5s7FGG3UzqB5U56RyHMelZjvySqWqKQx2t9vg0gxjYbgfq/z0/1jqDwQxNAimF1MzYKnoYZnVXlNTHnHOeGd5NVQqFRxOPmh+TbHHqp2sdalQGHK1nuK5RzZ7cRqQMbCBZIKoRb6uRuW2vFUmV3UUaQ5LhdgYftstciiK7cxulyIiKuZpffqDrbzEvbpmyFNaKni+wqLM600QxQFDWF90WpU1/rSfIk0ZzD6z6Tkus6Q6JzWzpDon1XMxoaf9P4b6A0EMCYLpRYUhT2mRbDLepld77keVWV/UeMQ585qCM6tTjbA67XZ7Hoyp7jL95feHWe2ebOJthTnVnuOOJKUxY4CH5sBqkbcVupYeFYZSE3L0rriS7hnHnrZDZFAY8pQ57htgM6sza0y5bkk1uUpLdrZFmRuVsvug0BSXamsyXZ3XrFarza55YLOxxFMP2bp3c3Fzkcrk2sfjMgB72v9juz8QxKCkMiAug801K6nSmbziw1l1gOc2Pnd+Mbsrzpl7o6bO6jrJ66hvis8FvA45PcXxkMa1bVXllTpAOE0qr1Zweu2hhY9ITqtYA+/0AO0woEjCq0xOz59CFd3SQ6XzFdRjt2dU4tGfGGNi3dzf/dTLqpO/J1YddFarDrpujdCz/h/t/YEghhjkH5UgAsOb1akWrbP7TL5ZrU8rzTAWpgVfLScIInYgvUgQAeHN6lRHXoibywiCiH0SIi0AQUQ3CoOdRVoGgiAGEPKPShAEQRASpBcJgiAIQoL0IkEQBEFIkF4kCIIgCAnSiwTReyj+IkEMPgZL/EXvuHoDGYBRPv6iIKefdvNX34jEj5RjSMZf9MwRqp4LT/zFqO8PBDG0GCzxFzXFnh5nnHnIzB6gOFPy8RcDtJu/+kYsfmR3hmr8Rbn+FoiwxF+Mgf5AEEOLwRN/0QfVQPlZlo+/6L/d/NU3UvEj/TL04i/K9jd/hCv+Ysz0B4IYMgye+IvwCJ+XmlmjHXjf1Z7xF0NvN1d9Ix8/0pehFX8xYH+TIWzxF2XzR2N/IIihwiCKv+g1oZnnyB7oxa0Q4y/6JdLxI2UYSvEXA/a3cNDD/h+N/YEghgaDKv6ixyFNrhZexfY73moxULv5bZ+Ixo+UZQjFXwze37wJX/zFGOoPBDEkGFTxFyV4W2FOsP1B4cXHWvTfbgHqG8n4kSEyeOMvBqI/4y/Gdn8giEHJIIm/6M6HbvkHBN/4i2KifLvJ1zei8SO9GKLxF32OO70T+zH+YrT3B4IYYlCcKYIIDMVfJIihBelFgggIxV8kiCEGxV8kiIBQ/EWCGGKQf1SCIAiCkIiDa7LU31+CIAiCGDrEzZkzZ/369f7+Rlo8giAIghhQ4gIoRbIXCYIgiKEG2YsEQRAEIRF5e7GZt9Wa9UVqrsjbI+UGNVfASZ+iqAvlF3WwzrajP1Qcq4+Bp5lms7qA48r8u5qp1Xe74zZ9r3vCBrV6Q9+6j4w8vLlIbW7uU6kEQUQljDHBr42/vwOEVbfC26FIlUrncH1vMqlWRLMXlUjT1dF6eNfq7z9esKtizq6KOS37Poy0RMFpMqnWdPMQFMpZPe4JVt2y7r6IwoFDh15UgSCIKCfy9qI/ZtuL013fay3KOV7eRvgyjivg9LURkCu6YJ1tR3av2Vu56IDjuc62/WJq3LCICiUhGP1uS6tWzxVwXIHaFUqwzlwkzAeoPW5lT+1C3lbmmloo0ssYcBuMJTP6EufEvzzpuaZGo6zJyG9QcwWcvpbmOAgiBomF9UXevEOZlR4839BCViPGJ40fP+OeUZOiZcPU7FLTRJ11seuZJr2YaXWqK0pFF9jbcxxznCyfMa2yZr1b62iK8xlbYgo1rtKGwvJL7SyfsXzGFuemVel94vfamqp16X3xVRNAHkVaSrWFlB9BDDISotZedNNcYUnJsnunKRYwtiAy4kQe1tl29If3D3/7hmQgAvFJ48eevWjMGVdz8UkRlM0XhWF6jb4Zmlo19ylMS+zzamu0l7os/xnW4nQFAKRnKdfX9ap83ryjpOTTkhKPJF16MaSnKL6uEbhUOmor4zK3exWh07LidL/pgdFMUGU2OQFfz6mK2XY2O/RaEAQRTSQEthejQDXytRZluj14viEB69zveO7onnLPtCjViC6SlTW1vK0JJq3SUmtGozItOYylK9JSVKbF9tBjMGn8PFH5SycIYsgRveuLInyF3CTqEF1fPPDNS55KMS5+5LiMpVMue+OUM/8QnUoRQHqWsqmwvFE7Lz1LucNiSenLUp8MmnSlpcjsf2OrIi0FaArrJT2wNVWrJqR2T9YXcFxBKJEdCYKIPiJvL9bqOYs4DVZSkAOoTPkej/9yk6gAnN1SiGglNaOxxDLdqYAiNyUzW9AizWb1CznVAAcrWwB9QWYJUFIE52KD02M+M7UgB3LznJ7pSC8uhT67gMsEAJVqojJvYbHGwyTVTFBl1tqKe7vE6Pe6AMDXNaqkaWE3teUlgG4JReAgiNiEq6ysjGp7kfCEdR5wPHckpuZRI49NX1Celd8PWqpWz9VmsQW+BfNlXPYEp312N31JEERMwDHGon0qlfAmlvbdRAcb1GqUhltR8eaibCy0G8K5XEoQRBRA9mKs4k87npr25zFnXB1BwQiCIGIashdjG1ntOOFXBdHzCiNBEERswVVWVgY4THoxJvDRjhPOfWjU6b+NtFAEQRAxSUKkBSDCABefdMqZfxhzxtUtP34clziajEWCIIheQ3px8MDFJ405Y16kpSAIgoht4iItAEEQBEFEEaHoRd6mV3Mcx3GcWm+2mdVB/XjwZr1azXGcWh1aSISA+W16juO8LsnbzKJAar3rBN4siugS1DYg3px9LstxHCcEi4iQPGFCkN7jbtj0UtW8+wMPz8oK90nI7V1CtOCWzV2dULN79Tf43OJu/xNdHQedrzR//XjHsb3hrQBBEP1NcL1o02fX5ZYKUansufPqLNXBT0Cu3c4Ys9vTCoM7wwqUnzerjRlWr1gGvDnbiCw7Y4yxvAxLtjBSKQx2qw7uMHulGcbsgXDDpTDYnSaVyh0R0OkSNULyhAmFodSkQrWlUBTZVl6jUumsdgMAmz7ViDynq/1T1WZeYbAzq05lcjLh5XlNMXOaVDonsxui7t12TbFwm1Qmq9ISXG1rij3urzMPOdme50hhHX29Bhz8duVhZ2nL3g/2rr9p3/qbD9S+cKL5S9bVHu7qEAQRfoLpRd5sRJ5B4RreFAqD3XMM4PXdHpZt5TXaea78qRk15TahHLX7uVp8BheNCfn8QlH6bEee3eDtf1JhsNsNwXyXKAyl2hrjgForNr3aLAgXHfL0GZ1JK9wM3mxEnlZI5M3GGpO9WCPcMI3BblXmFNoAaLKUbjUK2Aot2tyo04ku+AqLMs+gyVJaKnp0RxSaXBMcIfkg7Dp51P29/dgPR3a93bDp7u8/mt/4xYNHv3+340RDD0UmCGLgCKYXnQ5kdPeL3BNq6gCXYQUVAKRmqKDSWf0YEzViwCHerDYiz4/3LlHNGh15/kwSRZqyOrQhrO9U56RyXGZJwDwDKU+YSDPkwWjmbYUWpcvZN19hgdZra48mS1dTxwPQ5GrdzzRezzpRB19hUeZqAE1uzxQjz5uzpaYAgJJMf/Pkp6Vmdy+AdbYeb6zeX/P03s+u31eVfaB2Rev+r8iIJIhoo4/7bhTFcpNIfvIa7M68mkyOS7Vonfag5zgd1dXCuJOaU12S6b1UpTDYGXM6tTBGwxKWyuRkzKqLtBjhR5OrtKQaa7Qh3WCFQTSJebOxRht9M6gubIUWZZYCABReNq5/qnNSOY7jUrMdeaVSUygMdtcsKivNMHoXFDfs1FGTL/dM4eISPX+2t+w5suut+o13/fDRNY1fPnT0+3c9PTMQBBFBgunF1AxYKnpYprddpExzf+Wd5dVQqVRwOPmg+TXFrkHHaZK3LhUKQ67Wn3h8XY2qj5Zuz9AUB4wCOODyhAVFsZ15zgwr5vk2uK28RJkm3hpDntJSwQuzlAMqZk+wlZdUu+y8zJLqkvLgilFYX3RalTVGP2pUkaas8Q2sPHpKpudP1tUenzR+7Nk3j5hwERc3zJ3e1XnieIN9f83T+9b/qfXgdhAEEWmC6UWFIU9pkWwy3qZXe+5HlVlf1OSaUCfm95qCM6tTjbA67XZ7Hoyp7jL95feHWe2etOJthTnVHnpXgrcVWpR5kbBZ5LfrRk6eMKMw5Clz3DfAZlZn1phy3XdMk6u0ZGcLs5RRiq28xr1LijHmNHkvaMvuLRVQaIpLtTWZrqNmtVrtivtoMxtLuvXDEcnnJwyfILl4D+AAACAASURBVP7g4gB0tu1v+eHdU9P+8vPfvjvxwifGTP19wsjJ7vxdHcda928JTy0JgugLlQFxDR46cZulSmeyeowq4uShtC3PnV/M7hqC3Ps0dVZpxtHjqG+KzwW8Djk9xbH6XsD3QP/ic1l3FSMlT3iQhFeZnJ4/hRvttHp0B2e3U7vfxGjBp17dOpdV160PemSRinB/998OAge+eWlXxZxdFXN+tC/eve4q4fuedb870fylK0vXyZbvD39nqd94T8PmBzo7jvdX3QmCCBnyj0oQArxZnWrROsP4ckn78X37Km8EAC5u4vnGpm2Pd7UfBcDFJSafm0fu+ggiOiF/NwQBAOArLNW68M51J4782fBxMwGAdZ1s2TP5kufihycDYF3tTV8tO/r9e2G8FkEQ4YL0IkEAEPaXhrazuieMniIW2bLXljh66uRLnk8cNQUAwPbX/PPwt68DLNzXJAiiT5BeJIh+ZNTky+LiRwBob/m+7aAjYcSkSZc8N2ysuEnn4DcvHah9AawrojISBOEF6UWC6Ee4+OGjTr9C+N6y1wYgfthpky56Zvj4c4XEI7tWN3/9OGMdERORIAhvSC8SRP/inko99tOnrLMVQFzCqIkXPjly0mwhvWXfR41f5gmHCIKIOKQXCaJ/STpteuKoMwB0dRw/Vl8lJHJxwyact2y0K17micbP6zfdI+xWJQgispBeJIj+hht9huj7RphKFVO5+OQZ94w9e5Hws+1gTf3nhs7W5ggISBCEB4Mk/qLfOIj9D8/bbGa9Wu0dbDC24y/6lT9gO/e4n0SAXsdT7Bujf3aV4PKmdf+Wrs4THke406bpxqXfLvw4efS7nz5f2n58X1gvThBEzxgk8Rf9xkHsfxQKjcZQbM/zdhse2/EX/cofoJ173E8iQm/jKfaR+KTxpypuBjDq9N/ExQ/3OXrKWdcnn3O/oDg7jv9U/787Th6JrccoghhUDL74iwHjIEaKWIy/6ImM/N7tHKSfRCc9iKfYd05NveWMK9dMmPkgwHU/OnrK71LONwr+xDvbDtZ/bmg9sG1gBCMIwodBFX8xlDiIkSIG4y964Sm/TDv3vZ8MPD2JpxgOuPik8YJRKMvIFNXEWYVxCaMAdHUca9iUe7zBHnYhCIIIyqCKvzho4yBGGbHezr2IpzgwDB83c9LFz8YnnQaAdZ1s/OofLXvXDbwYBDHEGXzxF4PEQYwUsRl/UaKb/N7t3Jt+EjF6F09xYBh2ytmTL3lBjD/Fupq/fuLwd29FRBKCGLIM0viL/uIgRopYj7/oX36xnYP0k2ikp/EUB4yEkadPvuT5YWPOFn4e3Lni4M5icqNKEAPH4Ii/6DcOYv/jO58oBOeL6fiLzK/8gdvZfz+JGvoWT3Eg6Tx59KfqO4SQjbsq5jRt+7+uro5IC0UQQwKKv0gQUQrrbG3csuxE4+fCz5ETfz3hvIeFPasEQfQf5O+GIKIULn54yvnG0T+bK/w83vDfhs33dnUci6xUBDHoIb1IENELxyUkn3PfKWddJ/xs3b+1/vOczraDkZWKIAY3CZEWgBgQOJl3yYlYYRyH+Ot+fjD7LAAnjzjrX/vdxLyvExpawWgzDkGEH7IXCSLqYRhr+X78c3XCptT200f89NR5J6eOirRYBDE4Ib1IELHBmHU/pTzu4DoYgM5xw+oLz207WBNpoQhiEELzqEMMmnmLZUYCE/d/1Vhp6BoR3zUqoX7T3Sm/Khgx4eJIy0UQgwqyFwkilhg+/lcTH9gWf6QdAOtsa/jioWM/fhRpoQhiUDFI4i8C6B4ZMNxB9OTxua7aK6KffL1k0+XjOEYW33CLer1eqqN0UG/rnjeKauFLePtz9/7pL93zsn1qnCTn0Um5WxOa2gCAdTZtXX5k95q+FEgQhCeDJP4iAIOdmVQePm4GLgSjp8MXj2v6q5efdPk4jpHF5UrbKbZscXExs+pUsBQKsRiZ06RSmdx+490+iaw6lTItSp3ehbU/y/RPf+lmtRF5gtOg0gxLX6NxJu49PumeLYmjzxR+HnA8d6ju3+QrjiDCwuCLvwjerFabeSgMwWN2hAPPy1R4OBH1V68A9Y0VtFoYu43rCoNd8O3Om9XGjNIoDb4Yrv4sHJLrn/7SDXZ7sUYhXHSeNgxVSWhum3zxs0mnpgs/D/Er99c8A9YVhqIJYmgzqOIvCgH0UnMiFCmeNwfyeu4vPkOE4jb0iXnFefATZZk3Z1u0pVHrIT1c/dl//wzYb8Uc2RZtbjieG+KGnTLxoqdHJF8o/Dz6/btNWx9hXe1hKDood9+NvDwcONCzsx57DA8+iB9/9EqsqcHy5di/P4zSDRIuvhgvvYTW1j4V0tAQJmnCxA034Msv/R6tqsKtt6KxcQAFkqGP+1EVxYwVh5rXYHemqVM5DiqT049S9ECMv+iKfqvO8DxHYbAzA8+bC7PV5lSPdJ2VFaea1dk9rEZY4CssyqxBE0jWpufKs/xH1tTkao3Z5nml3c7KduTZi6NVKwalB/3ZX/8M2G8B3hzeJoqLH5FywWPNXz9+7MdPARz7qbKr/eiE841xq97GwoUYOVLMd/gwnn4ad9+NU07xW9a+fbjrLqxahYQQhoXHH8ell+LNN+FwICkpVHGPHcO//oVs73/Q9nbk5WHHDqxa1QMHFP/+N378EQ89NGh9VjQ1YeNGTJuGP/2pT+Wcfz6uuirQfQdw4gQ2bcLq1Tj7bN9Du3fjzDOln21t2LwZv/61lHLlldDpoNXCaERSEpYuxYgRfi/0/ff4z38QH4/XX5fPsHUr3nwTmZn4wx8CV6tfCfYPkJoBYwUMPYpoWO1wAu7/e3/xF91zWX7ya9xDFG9WF6b5i79oyfYVT2GwR0I7dVeL/trBb/tELU5HNXzEVBhKterCCs8JQcFSskfnBKpI+Pqzv/4ZoN/yZn22I6s0+DNhz+DiEifMzItLHHt0z1oAJ5q/bPj87ylPfBC/di3WrhUzJSTgkUegVKKhAbyfXT+Vldi2DZMmwWyWEpubkZSEMWN8Mw8bhhUrMHeu75s/W7Zg2TKsWoXRo2UukZSE8eMxbZpXojCM6nQ90HBtbXjsMbS04NprMWNGoJwvvIDZs3HOOaGWHD04nQBw220Y1jdP8R0dSEvD/fdLKX/8I+rr4RkxYt06lJTg7be9sgksXIiMDIwbJ/785ht89BE++wyzZ4spW7di61Zcfz1aWrBmDf7+90DCfPUVAOTn+83w5Zf4zW8iqxQRXC8qDHlKtdo8T/xf5m36bCPy3EtqvJ5LLYHO6mFYaHJN5RU8NAqI8RRFXcGb1akWpdVp1yhsenWquk58jvaX3x9mtdqRV1qsUbjiL1p7V/Mw000t+qtXT+sbIVIzVDVGs01j0IA3G0tU2lzfHApDHtSZ1TAJP4UJVJdWtOnVddEYIDp8/bmH8GZ9tiOjVDAUBY0ZziVYLm789Dvjh4095HwVQNvhnfW5p08ct0D69xbG1gsvxMiROHwYU6ZgxAhUVOD3v8eXXwZSLbW1uP56XHedvNKaP993JF25EgcPIjMTVquMaoyTW7jpxbj/6KNoa0N1NX7xCwBoasITT6Cz0zdbYyPefBOnn47qakyd6nWouhomE+x2NDVh5Eiccw7+/GfccotYTZMpyPjuZssWnHtuj+UPhR07kJSEWbP6Wk4o1r9ATo786RkZ0l0uKsLevZJSFDLMnAkAiYmYNAmJiYEu8dVXSE1FaioA7NmDL7/EggVeGaqqsHSp+P3wYRQWYtky3yps24bHHsNnn+HIEZx+OubNw333YcoU8WhY7t3giL/IGPPY/Ne9mH7H6bUX1p0oXy/ZdPk4juECED89wN3OUjP73g6rzi1n/8ofVvren31O6H7IN73b7ug+RQf1fzeP7C7bVXGZELLxh/evPrn3a/bXv7K6OtbRwQC2a5dX7meeYYsXB7lWdTUD2DffhCTYjh3swIFAGZYvZ9OmMcbY7t2sulpM3LuXAeyzz0K6BGPs88/ZlCmstpa1t3tdur6edYQWovKppxjHMYCdeiq74AI2ZYrYntdeK5b5zDNSIwf+bNkSqtg9ZckSplJJPysr2Y8/MsZYUxPr6vLNvG0ba26WL+fMM9njj3ulXH89mzPHK8VmYwA7cULmdLXa6/QVK9jMmV4ZJk9mb77JGGP5+WzuXDHx66+9hLRYmMHADAY2bRpTKMTvU6eyxET28cfsuefElCVLGMB+/3vx57nnMoDdeCPr7JSK+uQTNmwYA9j48eyCC9hppzGAnXIKs9vFDOG4dxR/cWjgftgnfzeDgIB389iPnzZtWw7WCSAucczEO9YnvVSBX/8acXHYtQunn47WVnG16S9/wYMPSisa//sfZs1CfLxXcZs3Y9Ys1NUhNRVvv43AaxQrV+Lii/H++152ocmE3bvF7198AYcDf/oTysuxfz9sNvz612hsxMSJ+OwzXHYZAKxbB5sNhYXydmRTE666Cq+9BqUShYXgebz4oq/MgfniC8yaBcbwf/+Hu+4SbZGKCtxwA44ehdGIhx6SOevii7FxI/LzsWxZD67VU7Zvx8svi9/feQejRuE3vxF/rl4NxrBjB8rKUFQElfeD1ttvY/RobN0qs7aXmoqJE3HBBVKKzYZjx7BwoZSyZw/Ky3HiBIYP9z19zhxoNF724osv4qOPMHw4xo4FgClT8NRT+OMfsWwZPv8c69bhxAlMn47MTDz/vHhWSwt27cLkyZgyBe+8g7lzvS7R2CjOYXzyCf7wBxw+LCOGQHMzpk9HYyPuvRfLlyMhAa2tyMlBcTF+9jN89518n+n5vSM/cAQxqBh1+hVxiWMaq3NZIrraj9Y/PjNl3FFpsDx8GEoltFrEx2PTJmnkAvDSS7jiCrz7rldxgtoQ9JxGg2nTcPbZGNXNZfmhQ9BqcewY4uKwbRvOO0869Mc/oqUFU6Zg+HA88QSam2EywWTCunXgeWzahJ9+AoDnnxdXQysrsXcvbrtNZna3pQV33YU33kB6Oo4dQ2EhJk7Erl0emxVCYMUKMIbrr8e990qJ8+bh8cdxxx0oLpbXiwPDjBn4059w1lk45RS8+iqWL8eiReKh99/HokU49VQkJeH777Fpk9eJW7dizhz5DS8ch6uv9prurq9HfT1MJill3TqUl6NL7iWf7okdHUhIwNy5KC/HpEkyE+z33otRo3DjjejqEnvO6NGYMQMffIBhw3D55fjgA1x1lXRiSgpSUgBg0yacf75fpQjgrbfQ2IhZs/DEE+Lpw4eLPWffPnz8MTIz/Z7bE0gvEsRgY8SECyf960jD7SldXCsbHt+455/J40aKqiwhAY2NuPFGXHwxAJw8KT1ir1sHTbc1T8EkFQyy0aOlDSzV1bjkEnFs+uYbaLWYOxdvvonx431LmDRJXspRozB2rLhS9dRTuPdecS1Nr8f+/fJLnqWlePZZnHYaABiNaGvDe+957ZaU5ZNPsHmzpBgOH8b48fjd73yzXX45APzwA1pbAw3N/c2vfgUATicOH5aMwvZ27Nkjtom/3b/+doG2h/zejuxkUns73n8f9fXiz+3bcfIkxo/H+efjd7/D5s2+evHll9HcjM8/l3l4eu89aDQYNgxZWbjsMrz/vq+hv2kT1OpAEh46BIUCWq3XRRMScOaZaGwM4xsppBcJYhCS9F3r5I7r6sfYOlubGTqbthR0ZZ4+Bt12YaSmYvFi3H+/ONB0H1uFsbL7ZorNm3HrrXjkEYwejVdfRXk5zjqrZyL++tc4eRJJSeIsqzApB+D4cWkPhQ9LlohfNm1CYSFWrsSZZ6K4GLW1fq/S3o6XX0ZbG844AzfeCACrV8vn/OEHABg+vAevnfQfX36J00+XVP5336GjQ9zHG/o+GoGOjj7lbGvDbbfhppswYgS2bMHOndixAwCuuw4vvoh167wy79iBa67Bm2/KF756NZ55BgCGD4dOJzP7/cUXuP12rxSnE2vWSM80Dz0kY83/+CO+/hpwPVKEA9KLBDEY6ehIjEuZfNFzDW9ktf9sBMD2L0ntbH7v1Im3emVraEBSUqAXJAS92H3ZxmBAVxe0Wlx+OT79tGeyHTmCV18Fz+PuuzF1Kg4eBLz1YmAT8NgxZGfj3HNxww0A8Ic/YP9+/PznklL/z39wyy3S6/AvvBCSVM8+CwC/+U1UvBC5aZPXCmJNDeLjxW2cPcXH4AOwZQuOHfPafbpnD+BHL372GU49VWrMP/5R/PLrX2PKFJx/vldzTZ+Ov/1NXoyXXsKBA+I8Z0KCeFZxMdLTUVYGAK2t2L8fa9fis8+ks958E42NOHkSDz/sWyBjaGjAhx/ikUfQ2oq//EXcFhsOSC8SxGCkrQ2JiQmjJk/K3dKwdtHJE7sBHGpc0zW8a5zPsO/zAoMPx44BkJ9X/Pvf8eGH4pDqyYYNSE9HcrJvOmNoasL332PuXOTn4847xfT6eiQkSPlld3948uc/4/Bh7NyJd95BVhaSk2Wu1VNefRVWK+LiZMbfiLB5s9c7fFu3Ytq0QO/LB6CjAwsXemlB2fXF6mqZB4KuLrS04NRTZYpNSMDOneJkadAniY4OLF+OsWPFNxePH8fLL2PlSqxdi1tuwR13QKFAYSFmzcKrr3qd6CmkDzfcgLfeEr/n5OCpp4LI0BNILxLEYKStDcOGoasr/nD7pKn3NzaVtO7/CsCR79d23p2ejE5pJAs8L3fkCIYPR3s7cnNlVqpaWnDKKb7vvZWW4owz8OmnkrraswerVuGVV7BrF37+c/z3v4iPx65deO01zJ+P777D1KmSGG1tgcbZxx/H8eN44QUsWCCzRtg7Vq/GX/8KAI89hgsvDE+ZfaGjA199haefllL68pbkunVem1Fluegi7N6Nw4eh0aCoyOtR6Ze/hMmEm26SUnbuxC9/CQCjRqGxESdOSDPP336Lf/0L113nq0oTEvDyy0hKgvCCw3/+g1tvRVaWlKGlBSUl+Oc/vc765htfFxCetLXh4ovxww/Ytw/PPosDB1BSEq45cNKLBDEYaWvDiBHCZsK4uOETL3yi6eFfHVclAzh2eUrX0ddSOs/n4ocD/vdrCBw9ikmTMG4c/vIXnHYakpO99OjixWht9Xqo37wZL72EP/wBLS2iXpw/H++/jwkTkJeHQ4fwxhviwtJZZ+HOO3HvvXjjDSiV0t7FkSP9egR9/XXs2IG1a/Hxx71vGR+KinDHHejsxD334L77wlZsX9i2DYC0p7erC3Y7Cgp6UMLJk1i+HIcPiz99nK51n0cVsNlQV4fLLkNlpaga4+Jw4oS0l6qwEMeP48MP8dFHmDoVzzyD1la0t0va6Oyz8bOfYcYMqFR44AEvXX7VVYEEzs1FUxOqqyXXqa2tePllrFiB226TP8Xty8lqxU03YeVKJCWhpEQ+cw+JxfiL8umRil/o/7o9brcowjeaot7GyyQLYVHc58RAfcVYLu5qde8r/vpbrHHsGMaNc+8w5OKGpTzuGHOq+Dryifad9Zvu6Wo/gq4uyYcqIOMy5ocfxCEyPR2TJgXf9PHEE6isRH6+tEao0+H22/Htt7jzTt91ylNPRUkJUlKwfTuUSnz0EQCMGYOjR2VK/vBDHDyI119HYmJ4XsPt7MTf/47bb0dnJx57DIWFYSgzLFRX46KLpKbesgWHDuHSS3tQwrBhuOUW3HUXnnxSfCtG+GRm4rnnRBftM2d6HTKZ8M03YAy7dnnZiwkJ0pNTbi7WrkVlJZ59FjNmYNYsmM1oacHkyVL+zExUVWHTJlx8sfTeagBaWlBfj7vvxv33Y8UKSZjkZHR2YuNGnDwZpAShUgD+/W9xrbrPxF78RX/pkYpf6O+6PW63qEJhsFt1klOW0gxjtt7mCovi4XtIugWxUV9NsYf8zjzkZHtpRn/9LdY4fBjt7Rg3TtxJIWi7Ljb+9FvGnnGdkKXtYE199dLOMZzXlFf3mVKex0UXhXrd/fuRk+M7azd/Pl58UcbDqsB//4t9+/DVV0hOxty5sNlwyik4dEgmp0oleQjrOy0tyMqCyYThw/Hmm3jggTCU+e9/47zz8OKLfS1n3z44HPjLX2Cx4PBhrFmDlJQeu3g96yz8/OdeDyK7d2PRIixdiiuvhEKBrVslkysA3Z+Exo3Df/8LqxVaLRwOdHT4vj961lniOxj+5sMZwwcf4I47cM89WL0aw4dDocDjj0sZGhthNqOkBP/6V0huAufNA4DOTtSFJzxR7MVfDJAeRQRpt1hDYSjV1nhHlrLp1WYh6CIQo/VVaHJNcDjdv2OgX4XIjz9i+HCMGyfqOWlakjttyqJx//pW+HHy2J6fnjqvfaLHuNN9ApPncckloV53/Hgvz5mh8OqrWLQI06bh/feRkYGqKpx+utdeHrcTc09vq320F48cwZVX4v33MWkS1q+X9lj2kQcewNatYXCI88QTqKnBRRehsBATJuDZZzF/vrxr2dBpbsY11+CCC/DPf4qtt2wZHnhA2rrij+667eyzsX27+P7rJ59g5kwZR7jTp8Nul+zOI0fw6ad44glcey0mTRKd0T/8MJ56CrfcIrOvZ/lyZGfLzKDOnYuUFNj8G1t99LHuIvbiLwaPbxcN9L3dogxFmrLapUKqc1I5LtNrIj8W68vz5mwpYmZs9KsQ2bIFM2ciPh7t7Rg7FiNGiENhVxc6Ok6xtyVPvhVcHICOicPrt+SePOIEgHPOgY/fx44OfP21b2IY+fZbWCzi22mnnILyctx4Iy6/HF98Ie6DdTjk/VD3RS92duKaa7BpE9LS8PnnYXDM7UYo6sSJMBSVnAy9Hps3o7AQx45h5Urcdlvv31tvbsaVV+Lss7F2LeLj0dUFxnDaaSgrw+234667Ar3jKKuPBdcKAFau9HX87cbTGP3zn3Hllfj3v3Hppdi2DePH47LLRB83Au+9J0267tmD9evlp7Xj49HUJLnKc/Paa6JUSqXfivSE2Iu/GCS+HdH/qExOu8GpV8dgRGUAgl7PAaDSWUvdinBQ9auNG3HddQAwahRqazF5sujNq7MTY8fC6Rw9dmzcvp83ffEwS+Q6Ow7Xf6ZLwR+Gv/WWr3Hw3/9izhxpEAw7Dz6IBx+U9hy65xvOOgvPP4/77kN5ubzjm77oxf/7P6xfj3HjsG5dkHdUekppKcaP9/KB10cOHsTTT+OZZ5CQgLvvhs2G7dvR1YWjR313zfC8X93mdCIrC5dfjmefFZUcY2IDZmTgvfdwzTWiMSe7v9ezSxw7hnXrsHUr5s3DjBkoL8euXX4ntz21uNmMa67Bn/4kliYoZk8uuwz33ou9e3HHHVi9Gi+/LL8d7J57YLNhzRo89hjuuw/x8WAMxcXIzQWAf/wjSDSPkAlmL6ZmwFLRwzKrPaam/MdfDJZfU8ykRSwP69JfenTRm3aLavi6GpWXRajxCiMVU/UV1hedVmWNsdA9IxMb/SpEPv0Ut9wCAMOHi3sihCXG9nYMGya8QT/S+J+JtjFxCaMAdCWyBu7t49kqbN7sVc6qVbjnnnAK1tEhjbNvv436enFE8+GZZ5Cfjw8+QHm5/Egn68nTTXu735Wt48fx5JMAcOAAfvELcJzMp7m5BzXyxOEAgJtv7uXpPhw8iN/9Dtdfj5wc3HEHKipw4ADWr0d7O8aM8d0yo1DIb+J9913Mn49HH8Xzz0uWX1eXtMFKrcbGjWhrg0aDyy7DqlXSLlY3X3yB/HzEx6OwEK2tuPtuzJiBAwewdCleecXrsclT2335pfRzyhRkZ3v5u/fZ4TVmDFasgF6PRYtQVobt2+Uffa64Ak8+CY7DQw9h0iTMmoXkZNx+O9racOedoYaXCoFgelFhyFNapJ2WvE2v9txnKLO+qMk1oU7Mbyv0mqdKNcLqtNvteTCmusv0lz+2CdJusQZvK7Qo8+RUhbjtNAbrq9AUl2prMqNcyl7w2We4+WZfP6VtbYBrW83Jk7jtNvz00/Bn3p50ybPxSeMAsASu8fqklkcWiuFwARw4gJYW37gNAps3Y/du7N2LTZu8trPK0tmJJ5/EK6+grAzl5eJa1Dff4IUX8O678qEwrrgCBgPmz8cXX6CxUb5MH2w23H477r8fjzyCp5+WfxUdwNatMuN+uPjsMzGOY9/ZuRO/+Q1uuUXU4gB+8xtUVOCCC8Rb6cOIEb5Ogg4dwh134L33UF3tO9XZ3u5lXCoU2LgRej2qqnDTTfjVr/Dee+Khv/4VR49ixQqMGCHG3MjKQmIijh/HggV49FGvdxBHjsT27di6Fbt3Y9MmbN3qdwuSjwBurr4aW7ZgyhT8+c+YO1c+T24uqqrw+9+D47BlCxIScO21+Ogjr2DafSf24i/6SY9U/L8A1/XfbgNOT+Mv+sQLdEVg7BZG0OvuR1F9/eHRbxhjYoU8bpm//hZdBL6bDz8sE4awpYV9/DFjjG3cyH73O/bKK+4j7cf2/fDZDULIxl0Vcw6V3SceeOIJ9u238pf4z3/Yb38rymCxBBf44EH2xBNs1CgGsOXL2TffsEWLWFNToFO6utiDD7Jhw9gNN8gcfestmXiBP/3E/vEPlpDAgOBxJfuD3/8+1ECVAWhrY//8J7v6arZtm3yG9evFW+lJa6vXz8pK9o9/sO++ky9h7lx27rky6dXVLC/PK9hhZSVbutQrziVj7Mcf2XXXMZd2kNi5k02dKnXOSZPY2rXyAiQlsdJS+UOMscOH2ezZDPDbAv0PxV8cGlD8xcFE4LvpGSLDkxMn8PLLGDUKixb5uAXpbDvQsDn35BFxn+rYX1x/2ll/xtryIBs1778fiYl49NFQxX77bWzfjltvxTvvYMmSkIIm7t+Pr78WI114snYtamvxwAMy86XFxaivxwMPhGtr4oBSWYlPP8UVV4ihKHsNY4F8Bv31r1CrxZn2nrJpE6qrceutfl+8CYULLsCLLwba8XT0KBYtwuuvS15zBxbSi0MDDqUx6QAAIABJREFU0ouDiX64m13tLY1fPth64Gvh5+gpmvEz7uG4nsT7JYjBQt/eiSEIYlAQlzh64oWFI1PEifCWvbamrx5mnXJLWQQx2CG9SBAEAHDxSRPOf3T0FHGz/vEGe8Pme7s6jkVWKoIYeMhv+BAjGmLLEdEKx8Unz7g3LnHskV1vAWg9sK3+c8PECwvjk/rtFUaCiD7IXiQIwgMublz64tOmiRtzTx7h6/93R8fxnyIrFEEMJKQXCYLwgRt79qLxM3IFX3Htx/f99L87Th79LtJSEcQAQXpxaCB4fqLPIPv0J2POmJdy3jIuLhFAZ9v++s/vbDtY45Vjzx6Z+Bt94dgx3HQT3n8/nGV25/rrUVzs9c746tXYurV/LxoRFixATU2QPHv2hMehKwZVww6e+IuAp5gDF4IxWNzH2IznN1jjL3oGYFSH1UHGYGTkpEsnXvhkXMJIAF3tLfWb7j7R+Ll0+L33MH06cnLkP+ecg+ef79n1Ro3C3Xfj2mvx0kthrYcHR46grAwvvojvv5cSL78cGo3k5GVwsGUL1q7FX//q12/qwYN45BEolcjODsMz1uBq2METf9GsNiJPcMpSmmHJHrBBOWDcx5iN5zdY4y8KblCdJpXKZFVaBjaCdUwyfPx5ky4yxQ87FQDrbGv48sGWfR+JxxIT8f33vo463Z8jR7ByZY+drp13Hm6+2W/giJYWFBX1pTr49FN0dODxx/GLX0iJ48fj5ptx3XXYsaNPhUcVr74qRszwCaB45AjWrMGNN2LKFLzyCubNQ1oafvihr5cbXA0bbD8qbzYiz+4dV8/zsJ5LLYHO6hFrz1Zeo831iKdYaINGA96sTs2pBnRWVgw9l1kCV1QN+fxCUfpsR569ONVs8RZKNt1gt7uFnKeFI+Qm6D/8yR97KAylWnW2mddILlJtenVdsd3V6kH6SXTBV1iUeXYNHMYK3hDT/sFl2bsXZ5whk85xSErChAk45xwsXoyrrw5USHU1Lr0UU6Zg9+5hY9MmXfJcw6Z7Ok40gHU1b1ve1X74lDMXBo9dsGiRvL+SpiY88YSMj1OBYcNQX+8bL0LAbscXX6ChAfn5UiLPY/lyfPQRGhsxdizUatx7r7xbVwBWK6ZNc48wEn/8IwoL8dVXmD49SKX6Tu9uUHMzJkyQL3DJEl/TvLUVq1bhwQcxeTKam3HbbbjuOnz9NZqa0NICngdj+O47TJwYSM6Ya9jwEUwvOh3ImNenK9TUARooDHYn1KkWQIy/qAwUf1EDVzw8uwbwfqj3l+6ZI9uiLbX7OTpQBJczplCkKavLnYAC7jhNKpMUYqzv/WTg4Cssylw7gFzl4FSMLi680MupN2M4fBg7d6KiAhUVeOghGI3yJx45ghtv9NRbiaPOmHzJC/Wb7mlv2Q3ggOP5zpOHT0tMREeHvAIDcOCAX8EmTMCtt2L8eCQnIz4e9fWYNMlvZocDGRl+j1ZXY+5ctLRgzBiccw5++AHvvIP33kNxsUxU2xMnYLHg8cdl3lY67zw88AAWLpRStmzBypV4+ul+fLWpRzdo06YelGyxIC4Of/sbACQl4Z13cO21+Mc/RKftDz6I9euDKMWYbtg+M+jiL/JmwUiL+GA3qOL5eRPb8RdthRZllgEAFFlKS6HNMEhiEXdn5Ur88pe+iYcPY8kSrFqF5ctx3XWYOVPmxL/9TQoS6yJ+ePLkS55t2Hx/2yEHgMP8a11jMsYPS4TJJH/18vJAq1aeqi4/Hzt3yoctbGvDSy/hscfkw1F1duKmm9DSggUL8MorOOUUdHZi2TIYjfjb33DFFV5zegBWr0ZcHLKz/RqsDzwgfV+5EgcP4sgRvPRSf43gPbpBGzcCwO23+w1S4YYxPPkkli4Vla7gCzc9XVSKAEaODBSIGLHfsH0mmF5MzYCxAgZDkGxeVDtEuwKA//iL7jk3P/k1bpXLm9WFaV7xF+XSIerErNLo0D8B5IxF+LoaVYbn2KQptnvok970k8hgKy+pLilxP68AtuLukz+DmLFj8cor+OQT1NdjzRoZvfjmm1i1CtOm4ZtvfI7EJZ4y6aKnG796+ETTJgBHhzm67lIkd7ULe1Zl8DdT6sOIEWhrk9evhw6hqAhXXCF/4qZN2LULSUkoLRUH/fh4PPoo1q3DF1/AYsH993vl//e/cd55GDYMI0fi1luRnIzkZJl49J2diI/3q+/7G383SNCLV14ZvISyMuzYAZsN992HYcNk/LOPHo2TJwOVMCgbticMmviLvFmvLkSuvVijAPgo3QwZswye+Iu28hrPCFJOU015NIrZryQm4uyzAciENtyzB7ffjjPOwFNPyZ7KxQ9POX/5qNPF0fmYanzD5vu6Oo7LXyhEvRg08MXw4fLpwlTtxImSJSQgGKM+m3c2bxajVbz6qpgnJUVm7Abw9tuYPz+SW0W63yDGsGkTOC6kOBvLl2PCBKSliQ3bXS+OGYNjAd37DdaGDZ1BEn+xW2BAX5n6jcBxH2Mjnl93BmX8RUl64W7E6s0Jwg8/iAHwamv9ZhgxggHs2We90js62OzZLC6Offop27CBAWzqVPkSujr315jcIRt/fFPTcc8SZjB4fcaMYY88EpLAS5eySZN8Txc+ixczgH35pfyJPM84jnEcc3rcv7Y2lprKAFZc7JX52mtZZqZX0Mo9e9iqVTLFGo0MYEuXhiR8L+jFDfrmGwaw005jN9/MFAo2ahQbNYpddBF7+WXW1eV1bmkpmzeP6fUsO1tKBNj//if9tFjY6adLPzs6mMnETp6UUmK0YcNHSHqRIIiYwd+w29bG9u1jb70ljm5Tp7IjR7wyPPIIA1huLmMsiF5kjLGug6//za0a91be1H683uv4OeewsrKQBP7rX9nNN8sfOniQTZ/uNTr7cMstDGAZGayykrW0sNpadu21DGDTprFjx6RsX38t5vEJ5nzVVezQId8yb7iBnXYaa2kJSfhe0Isb9NprUrzfs85il1zCfvYz8efChVIY6v372bnnssZGGb14/fXS08Y117Dhw6WfQojpa65hbW3SKbHYsOGD9CJBDC7cw26Aj1rNvv3W66yNG1lCAps5Uxwcg+tFxnj+SO0buyouE1TjD58sPHl0t3TUPfx99RW75hp29Kjv6bt2iV+6D6CydHSwDRtkEp98kiUledVu0SLW0OCVbf58tnEjq672Hb4LCthdd/mWOX06u+OOkETqHb24Qc8+y6ZMYeeey774Qkr8z3/YyJEMYA8/LKbk5LCtWxljQezF3bsZwPbtCyRkLDZs+KB4GgQxSHG/BtDaim3b0NqKhATcey8WLvTd/NnSgkWLkJCAVasCrfZ12204Boib9PNm5fcsjnW0Nv30ya0Tv/pF0uGRXmcJ+w8zM2G1eq1XLV2KpCRMmRJqdRwOfPop1qzBtddKiRUVKCpCWxtOPRUKBfbuRX091q3DrFnSLjCbDZdcglmzUN3N18Rvf4vLLsOdd2LqVDHl+HHs3Bl8z2dYCP0GLV2KpUt9T7/+ejQ344478M9/4t57ER+Pa66R32DswxlnICkJO3fi9NP95onphu07ZC8SxKBCdpquvp7Nn88ANnGizHKdMGlmNksp/uzFHTtYfb04cbdhgzCldrxp0+51cwWrcfe6ucebNock57XXMr1e/O45Neemq4vt3Cn9zM9nZ57pZXd+8AGLi2NxccxkYp2dYuK777KUFAawJ58UC3n4YXERzm73NWtOnmQjRrA775RS1q9nycnSzGR/0Isb5I/jx1liIgPYRx95pQe2Fxljs2axRx/1W2yMNmz4IL/hBDEEmDgRb7+NCy5AQwPmzcPevdKh1avx6qu46ioZi6Q7GRmYOFHc4nj33Zg2DVu3jki+cNJFz8R1DgPAOlsbN99/7KfPghfl6Z/ss8/wq1/5elidNw8XXogtW6RsY8d6WZwFBejqwt//DoNB2gA5fz7eeAMAHn0UR4+C41BQ4Pc9ucREzJyJsjIpxW7H/Pkyezj7mwA3KAAjRogG9089DAQ2ezasVr9HB1PD9grSiwQxNEhKwmuvISkJ9fW49VYp/fXXAeDDDxEXB44TP7NnA8CePeLP7lERjh0TnXvNnAkg6dT0yd/OSjjUCYCxjqYtjxz9/h0AeOMNfOZHR3rqxaQkbNni62FVq8WoUUhN9VsjQaoFC3zTr7wS48fj6FE4vN1BCn4GfLwNTJ+OvXvR3Cz+tNtlCvREeFevP+YD/d0gAMePY/du+ZcrhDcRR4zo2bV+/3v873+orZU/GpGGjSZILxLEkOGXv8R99wHAhx+K6hCAUok5c3w/554LAElJ4k+f99gAfPwxOjqQn++2GBJbR0/Kr0s8lgQAYPtrnjn09EJk/wlXXy2vGj3dqwo+WbozZozMpQUYE6NcJXTbJOE+5BNBSRi4u7q8EhUKDBsmXoUx7NiB3/5W/ooCDzyArVuxbFmgPL1G9gYBmDoVZ52FVat889fXY98+AJgxowdX+fFHqFSYNs3LzeyWLeKbhZFq2GiC9CJBDCUeeEB04nXvvTh6FACMRlRW+n6eew4AJk0Sfyq6uXR47jmoVKis9ExLiD9t0rVvJY2dJvw89MvmA9ueRstRXH65jCSer377m14L4BmA43D++QBg6eaW/5NPcOQIEhJwzjle6bLD94wZeOop0XXAl19CrfarpAVmzQK6KYYw0v0GAeLr/K+/7muTPf00AMyciWnTQir888/xt7+hqQkch/vvx9tvS0GgysrEuxCpho0mBlP8Rd5mFgUd0ACMAeSJgXiEAeBlAlr+f3t3Ht9Gde+N/zPyGtuJs3khCWmgI5MYsS8JEpBCoCCnLYaCAr1QtVwq0ZuCTIvb0grSULXc1tBKLVwi81AwPFCq8gO3XEthTwhSSAhQGsXmZw0kQBInsbM5jnf7PH+M9t2bNJK/7xevtJoZjc4ZjXV0Zo7OJyi+MObyJN/19Bhj/mKs+oZtkUFvbWEh/vhHAOjowPr149yJ243Nm/GXv+Dss6HTBV/fy8mfXbH8j4Xzzhcfdu95qfPj37LRaPHFwZnG/f0Awu8vPv88BgbiFeOnPwUAsxmPPRaY8POtt6DVAsB//ifmzg3ZXvzgDvv4Xr06cGP19deh0cR7RQBNTQCiz+Y6KaK+QffeC47Dli24917vhdPRUVgseOQRcFysyYm8xO8W//43vvUt/PnPePhh75jV734XF18MrdZ7UXTjxkDKR1oOrKQkHI9q1ynN/t/VejxmZaKpZOy6wPQhdl3ieWfibS8G5ZmVkTPqRCwXF3l3E5wRmApRyjPm4yYxdp1/lhtmNyv9c8IE5S967LqQqWKC30lJE9+u5Eobp76xz8+0SjidCmPs2msZwPLyWGtr9A3i/H5xZIRddhn75S+9Dx0OVl3Nnn2W/frX7IwzxGWjI4OHPnjA/6v/A9vrR4f7wvdz002B8ah2O8vPD9/gqaeYXB54uG4dO+ec8G0efJBxHAPYvHls+XK2aJG37ldfzXp7wzd+6y0GRFnud911rL8/5CDcd1/4NuKRaWyMuZOExvcGPfook8kYwGbPZhdfzCoqGMByctj//E+Up99xR2CqhPZ278s99BB7/nn29tuBzTweNns2mz+fPfssy80N2UPqD6yUZE/+Ih8IYEy1KOXJqDzCKASLyW12+mYGVxuc9lYuInqCV9ebTQ3Bk75nhvHmL4bXN4PzNS0WnHUWBgdx9914/fXE2wf7/e9RVIQHH/Q+vPZayOVYuxZvvomyMrz9NpYu5Soqys5bJ9tlPvHFPwH0dW4/sP0nFfKfy+YH5Q4G9xeXLoXHE/5CNTX4znfw2mtYuBCnnooDB6LMunn//bjiClgscDrxwQcoLsbKldBqodVGn7da/PfJJ7FzZ5Sq7drlvb0HgDH85S/o6UF/v/dypejtt3H22fj+9xMfqImIfIPWrsX55+ORR7BlCz76CPPnY80a3HsvLrwwytOHhgL9vMWLcfHFuP126PXo6YFSiaoqPPccCgrA83jrLdxwA267DQD27cPChd5npf7ASkmW5S96m1+lzp6ypKno5cmkPMIohBYbNE3BS9S1OlO7AHVwpJdg0doUxnQHXY7ZePMXQ+sr3XzNRYviBTyJqqoSXKK89NLoO3n6afzrX2huDvlw/OpXsXEj3nsPTz6Jm27C4cPgOMycOW9GoezbFcdXzwUwcHRXx3uGyqsacwrne58VHHV02mlRXqu8HAAWLsQLL+DPf8bx41gd7W/q0ktx6aVxa+sjvuLQEK6/HioVFi8OiT8EwqMeLNGutH/0Ef7+9yhjUpI37jfokkvw4otJvcTgYOAOaEEB3n7bW9OSEthsOPdc/N//6x3yet552LULjY144gl4PIF2ESk/sFKSZfmLvMHJDIJgadCqLPLURDtlcc5iLN5cYih19qbMCy8ce/5i1PpOw/cd//gHhofx179G/9XaihVYsQKNjfB48Mkn2LMHBw/O6erKeb/jyEXdAIZkRzq2rq24+OG84lMB4PrrYwZIBTvzTPz617jtNqxZM9FRoDIZ7r4bxcXIzw+/Q5a84N/kSVZ5uXfsjCi4lVq61Nv1DF4r3tAdt0k5sFKSaNyNvBq2ljHu09UafEUkVv5iou3V/knbPWalzh6SvxhteQDPG+o1Yy/2OEUvz3iOm4Twq8MPoKO5UVHlPdTiPTaPXeE2NcQacCLZqC9Hc6OrsUYcR1PT6GpMImYqan0Tn4fZ57rrcMcdCbJkOQ5VVfjWt3D33fjNb2C1zlr3z/nn/AKcDMBw38EDW+8aPN4OALffjiVLkn3pqip89FH0a4bJ+/rXYbEkjrXKAmaz99JoVI88MsnjhrLuwGZN/iIsKpXeIXhL2VDnCmqP0yBj8ghj4A1GRZ3/gDosqhq3uT70neHV1iaNuyaTaoUE+YuOyNM5IDPrKwklC79eccFvuZwCACODxw5sq+s//FHCZxGSNsnMj5oB+YuMMU9wMVOd/he1nFLPI0zAYw8qvrf0QfUUtzErAaU5IoUy2mmRdonyF+26iBMtVn2jrM+49zfV+o/s/Py11d5pVB1Xnex4J90lIiQ6blPoL3PDrFy5Ms5aQrKIYFHJbZppcJswfQZPfHpw+09HBg4DACebr/hJyakZPDyNZCua74YQAIDQYnPpjNQoTqX8mV895ZJHc4sWAAAb7drZcPzT54GM+gkTmQaov0gISamRgaMH3793sPtT8eGs09bMXaoXB+YQIgV0LhJCUiqnYE7lij8VzvUm6Hbv/lvXzt8zFnsqVEJSi9pFQkiqyXKLKy76fVGFSnzYs3dj5wf3s5G4Uw0QkirULhJC0oDLKSg7/8GSRdeKD3sPuQ6+Xz86HC1ikJDUonaREJIeHJcz/+yflZ6+RnzYf+TfB967e2TgSHpLRQi1i4SQNOLmLP3hnKV68cFg96cdW3803Ls/vWUi01w25S/GXz5VLCouJKIvqApR6xW2vX+ClTj7SRshrFB6vT5QtsBKvSNyW0mUP7rJPZ+TywENPzq+mYQIAKD09Fvmn/1T71xxvfs7tv5o8MSn6S4Umb4St4sOvba9vkmcBcBZv7rd5kr8BNQ7nYwxp7OqIXELFW97waIyVdv905SMe/mUCszr4gl+5Rj1MjhZeG5k/P2kEW9w+sqjszPGrFYrs+uUsDU4xJUes1Jp9oeMKQOz4ij9k6lKzaSez1HON8GiNaFWPG7GaptWbBl5g9OuC7zDTdUmLU0oF6JkUU35+Q9ysjwAIwNHDmy9u/9otMQiQqZeonZRsJhgNITmCAblD0SZH9XR7NasDspTFKef9H1f1jv8GejeL9/Rtxd3pde2Gp0GeXihxrp8ShmcgePRYlP4fxgep14iwaJSWQTw3h3E2o8EaTQwRXyq8wanOFOMYFGZqqWaszFZ57O4Ktr5xhucTkOiyvOGJo3bJN0udXoUVVxacVGDLLcIwOjwyYPbftJ7aGu6C0Wmo0TtoqcV1RNrZ9ztgBgyZVZCCXjzF2MmEIjb+/LtIj9ex7o8dQRLvFnPffUCADTWcJy8LkZPJf5+pGC11YgYn+qCRWvTNEm2UZ+s8znB+eb9GmhqNcaaVY6vUoTmyBAAKJx3buVyc07+bABsdPDQB7/s2fdqugtFpp0JjrvhrYwxllxjxBucHqO7huPkNo3HmfA53nw7juPkda7GGv+tnbEuTxmhJfnmTGePfbF0LPuZOg593Ju06nqN7xJh6LO0sZuCDDCG8znu+cYbnIx5PBqYJHyfVaLyS6sqL3k0d0YlALDRro8f6t7993QXikwv2ZO/mO48vMjmLOZxEPkvPCbaT/p5WiO6tryhSWNrCDk10t9jT2zyzucJ5oAK7W7lBHuu2SuveNEplzyaP/M08eGRtseO/v9P0DSqJGWyJ38xzSKas3HWSyrNorxa6TZZvPeGTY1RPsN5gxG2wLVg8QKqr1V06FWWVBV1LCbvfI4lqRxQwdEw7lvIbHSkv2vo5N7sbidyCudXrrAUzFGID49/+tzhnY+Ajaa3VGS6yJ78xbjLp5onZIypf2GUegVdPY1Sxqj7SRP/2x6Is4ySWOgLIwxPYAwKKZSaiZ/PYU9AwhzQsIvmiQJCR0eHh/oO9h9x9+x/6/hnfzvc+uihD9ftd/7wyzdv3G2/QowwPLjjFxM6CplgdLjvwPafivXd3bLy4Af3j44MprtQJPtRngYhaceOtD0+2C3IcgpHBo8O93eODBxJ2DeS5c1cfNU/sj6GgrHhro9/d3L/6+LDwnnnl19gEsesEjJFctNdAEKmuyOfWLt325LfPid/du6MytKvfifrG0UAHJdbds59Ofmzuvf8fwD6D394YFtdxUW/F8esEjIVqF0kJN1YlDuFXE5h3ozK3JJTcwvLcgrLgv6dz8nyU1/GdOJkc6t/JMuffaz9SQCDx9sPbL2r4uKHc2dUpLtkJDtl//dNQiRu7lK9f4CJHxvpH+zZM9TzZU5hecmCq4sXXFU495zcogXTrlH04mbzt81T/BjgAAyd/LJj69qhnj3pLhXJTjL4biLG+pcQMrU4WeUK84zyFZFrhnr2HP1kw5dvaw6+X39y/5tspD/1pZOOmYu/VXbeAxyXC2Ckv6tj690Dx1rTXSiShXKeeuqpzZs3r1y5Muq/S5YsSXcJCcl+HCcrrrhs4Jh7uO+AuKRwztkjQ8fBhgEAbLh3f++Bd058/tJQ735ZXknujAqx5zTd5M88rWBOde+Bd8CG2ejAyf1vFpSekVe8MN3lIlkl54orrojVKFJ/kZCU4WS5RZWX93d9MDLQBWB4oGv+ucai8ktGh3v9jSUbHRrs9vTs3diz77XRoZ7cGeWyvJlpLXUa5BUtmDH/gt6DW9jIANhwb8fbecWL/JMAEDJxHGMsTn+RmkZCUml0sLvjvbvFO2ecLL/iot8Xzjt3uO/gyf2v9+x9dejkl2HbF845q3jRNcWnXCHLLU5DcdNnqOfzg9vvHe7vBABw8840zPxKbZrLRLKFLO2NYpfgaLPoN6i4DeEzSQptetV6jlvPcRumdyZPm55br9K3JbFll0W1nuNein202vQRx9mh9x7ksc/kuUWl2pKy6T8FywaVpStVr5YusvxZlRc/nFt0CsSJs3fcN3D8k9wZFaVfvXXhymdOUT4+c/F1wX3E/qM7D+98+Ms3ru/814N9ndsYG0lf2VMqr+QrlcrH8koWAwDY4V3mY56ns3sOIJIykukvOvQb2uvvDJoZq8uiegdNNxh47/+vct4ggenR0qVNz7XVsmSOwPiOVZdF9SKa7hzTzGQO/frm2nUpnA81+YOQ6YZ793e8d/dIfxcAWd6sUy75U17JEv9aNjrUd2hrz96NvZ3bENoQ5hTMLV5wdcmia/Jnnp7iMqfFyODxQ+//bOD4J+LDmV+5fl71XdPhZ51kSqW/vxhPULbtofbgjonwEset55LqQmWHsuqQecS2qEJ6eG16bj3HrfdPSdpu2cCJS4IO0Vj7hYLjJRXn669H6ahtMTWeNc6ZXB0vcdx6lf4lFbee07c59BtCiipsCVwnUG0Immd1Wb35kClql1HYIu4qW7IrcosWVF78sCx/FoDRoe4D234y3Lvfv5aT5RVVXl5+4W9PXfXi3Oof5c8KzF07MnCke/ff9m+5ff+7P+je/eLI4NE0lD6FcvJLK5b/Ycb8C8SHJz5/ufNjExsdSm+pSKaTxWkUN2/enMaSzTcYYVJtUHEbVPp3WjU3Zm540RS4rMlcobP7u3fLrEyjU17ZZBAf7qxrXelh6xjTKNyb/a2g2rqOsbUxwq0ibWlovtzJ1jG2jrE766ve0YfNA+7odOmWjbPrpr7BY65wucua2FozbDVY6WEahbvNAQBdFu2uauNaxtYxdmOt4mDw8/iqcpctaxq/+PJKlvhDekcGDh/Yfq/YfQyWkz9n1pIbF1z6xILL/lJ6+pqcgrn+VYPdniNtj3755o2Hdvzi5IHNWdxUyHKLyi/87+JTviY+PLn/rUMf/GKa/6CFTFCudPuLQjuMzjvVANBl0bcJuCzQMvI3MHZD2kqWBvOrFIdquA1mj7ct5A1nuvVdULepuLdgXutc3ebWXO47PmfZrct4AFhWq9jcHnOf8QiWXY2NbzU2Bi3SLbNiWWCD9kPA5YG1jpe4mp0hu9BpmHVZzOWAUnMZD1QButplPLqqIfYX5xuM5aqax+oAoEKp0/gaewCAukxZ0+kBwr8j8Zc52WXjqqiUFZSeUX7hQwe317PRweHe/Qc/+MUClTXqzzPyZ56ev/SHs8/Q9Xd90LNvY++Bd9noIACwkd5Drt5DLlnezOJTrihZdG3B7GXZ9wMPTpZXdu4DsrxZJ774J4C+zvcPbLun4sLfiR1uQsYqN35/MY1NY1uDraze+5k4vwq7WoTLpnGXsavdXW4PubU2X+FuExydMGsUtjYLDimq5k/i6/FSAqs1AAAgAElEQVRV5UrznU5D4i291DG+qcRaHndXTnYDAEHoaml4TGtZN4ZiZJvCueeUn//gwQ9+CTYyeLx9pP9wTmHM95njcmaUXTyj7OLR4ZMnOzad3Pdq/5F/i6tGh06c+OKfJ774Z17xqSULv1688OvZNokaJ5unuCcnf/Yx4RkAA8faOt67u+LihtzCsnSXjGQe6d5fLKtGpy++uKvdXR6yctrdX4y0rFbR2dB8SLN6Wa1il81WPsmhjeplCtsGS+yBrXxVOdA5qS8p2qJSvSTmF/I8qlARkl/o6HQpyyLTfMVbp1k6aHlG+YryC0z5pVWlp98cp1EMJsstnnnq6soVf1r0tedny78njm4VDZ388mj7k3vfvvnAtnt69m4cHembsoKnHje76va51XeJD4Z69hzY+qPIX7YQklD6x6O26Tlb8OU6pdnXPxC26LVvNboAVOjsd4aMexSvzvmuyE0DUYZiCpYNctuZHudlvPASpy3zOC/j0WVRPVbnAnCWnd0A/fqaRgAVZs+dBs+Yr3NCaNNrbY0uAFAqKxTGG63q4E/lLSqu0zi+0aG+F9XZ19U2r69prDB7boT2sTrXWXZWZtJ3Ktw7va+r0zR5rwl7q6zFjU5DWOPQpudsjbq1zDqZPeaswvqP7OzZ92pvx9ujw73BK7icwuLKy0sWXVs499ysGcZ5cv/rnR//tzhSNye/tOKihvzSaOnQhMTAbdq0SZr9ReLXpudsbp3GKbEvAVL5nUbgawGJj4309x509ux7ta9rR1i+Y25hWfHCr5csujav+NR0FW8S9XW+d+jDdWxkAIAsZ0b5hb8pnHd+ugtFMkb6+4skc21RqdCUqgYpRmeRjMNIf1fP/jd69m6MjKQomL2sZOE1xQuulOVl9qCVgaPugzt+PjrUA+/AnPuLKi9P+CxCQP1FQqYxNnjc07Pv1ZP73xgZPB68guNyZ1QoSxZeM6N8uZhfkYkGT3x2cHv9yMBhQByY8+OZp34j3YUiGYD6i4RMd4wN9x3a1rPv1b5DW8N+6ZiTX1q84KqShdfkl8oz8Qcew70dB7ffO9S7T3w454wflH71O5lYEZJK3KZNm+KspnaRkOljdKj7ZMfbPXs3DhwLH+udV7KkZNG1JQuuSnJMrHSMDBw9+P5PB7s94sNZp900d+kPs2aQEZkKOd/73vfirKb8RUKmDy6noKB06cxTv1F8ypWy3OKRvgOjwyfFVaODx/q7dnTveXHgmJvjcvKKFnCyzLi+KsudUbxg1cDRXcN9BwEMHGsd7jswo+ISjppGEgO1i4SQcDn5pTPmnz9rybcL550DYKh3X0YnJHOy/OIFq4ZO7B46+QWAwROfDnV7iiouzZSmnaQYtYuEkBg4LrfolKLKy2ad9u28ksUZnZDMcTlFp6wc6e8SL6gOndw7cOTjosrLuZz8dBeNSE4yVxIEh17FcRzHcSq9xWFRJZxXRLDoVSqO41Sq5KIb4m7v0HMcF+Uloy8XHBaVWNgkX3tiBIv3yAT48h8i10SrhTSJ1Qo6gg59UNVCzgcBwUdBrKG4dareg7Hxly3wTiW5eaC+ACLeXwlWdRLJcmaULLymcvkfFl3xwpwz7gj+jeNwb8cxz9N7N33nwNa7Tnz5v/7rrhLEcTnzz64vPf0W8WH/0Z0H3jN4R6sSEiRxu+jQa9vrmxhjjDFn/ep2myvxE1DvdDLGnM6qhsRtQbztBYvKVG2PzICIvlyw6Bvaq5rEwjpTMZsqb3B6zEql2SMeH+YJFMngZGalzs5Y5CrJ4w1NZiVctgbvm+FodiuVOrvTAMChl5tgFCtsrLbJVRaBNziZXac0e5j4I3+1lXnMSp0nNe/B2Kit4nuhNNsVtsRtmdoa9P56jKjTBp4TeHMz6b2dmMxPSObmLNXPWfpD8cHgiU87tt4VnOFFCBK3i4LFBKOB93288bzByYJmOBH0Ef0gR7Nbs9q3vbza3ewQ96Pydyi838G937Cjby/uSq9tNToNEfNhRl8uWBpaa60GNZ+ez2KHXmUBb3BGTHItWFQqiwDe4Ezh1DCTQGfWiG+GYDHBqBEXChaT2+y0qsVjrDY47Yq6BgcAda3C34wCjgabpl5ybaKP0GJTGA3qWoWtZUydPF5db0ard1hj8NvZYlMYpfcVYCpxBbOXzVPcc+qql8rPf7CoXAkuR1zBRgdP7n/r4Ps/2/vWTUfaHh888Vl6CxpV6elr5p/9M3FI6nDv/o6tawe7P013oYiEJGoXPa2ojpyneSzc7YCvYwUlAMirlVDq7DE6E25vMJJgUZlgjGxKYi2Hp9WNdu8VPpXekcLLWq46OcfVNEZZ01jDcfK6RD1siaoyGGGyCI4Gm8I3KbnQYoNmdfBG6lqdu10AoK7X+L/ThHzXkRyhxaaoVwPq+rE1jIJg0QYORdByS7Sl00LmJiSXLFKXn/9rTpYHYGTg6IH37vZnjxAywZHKvJUxxpLrB/EGp8foruE4uU3jSdx38rS6XI01HMdx8jpXY43//k2s5UK729VY59Z4xAu+7S2pu+GjNHsYs+uirNHZM/oim7peYZOb3Jqk3mDeoHGbLILYp9RIt/vkaLApasUQy5A+bmyuOjnHcZxc22psivJFrWXaNosBmZiQXFShqrj4YVluMYDR4ZMHt9/beyhDv8KSSZaoXZRXw9Yyxn26fJeaAABBOUGCp9kFpVKJVo+QcHu1NejuTVDvMtZyAFCafQ/5qtYxXiSbKLU1Rkwgb3BK8D5bcnirkwVfGeZXa8LOB0dzo6LKWzuDUWFrEcSrlCkt5lg4mhu936s4rqbR1dicuGEU7y967Aq3KbIZpWYxRP7M0+cs/eGiK/9ecdHvixdcycl8oz3ZSO8hV+eH675884bD7j8MHGsFWFpLCgCFc8+pXGHOyZ8DgI0OHvrA2LN3Y7oLRdIvUbvIG4wKW2CsneDQq4LHo0a5v6iuN6Pdu33IJTiLSm6C3eN0Oo0wyf37jLX9WPGGJjPqvNdPhbRdyUtiuG4m4w1GRZ3/KrXDoqpxm+v975i6XmHTasWrlBLlaHb7R0kxxjzm0BvacYYN82prk8ZdE7aWmsVoxITksnMfOPWql+edVV8492z/KjEhucP1X/s2f/e48Kz4W/s0yp8lr1Q+mjujEgDYaNe//7t799/SWySSfpvi8n146LyXApU6sz3oU8V78TBo1KVve+/mvo8g/7VEnT1wxTFobfiSsBeIXBV9ucfuLahSZw/f05SIdo3UezSC1kRWS9oCtVKaPcEPxar5jzKUuvCahYzOlZqwekWcRHZdxJsVtElgF97/730cfvaTaIZO7jva/tSXb9+8u2Vl6H9f63iv7sSXjpHh3jQWb7ivc9873/OX6sgnVsZG01gekl40PyohIsGikts0noy96J0RpJuQPDp04uCO+waOusWHM09dPVfxY843zpZMK9QuEgJAbBZbjUkOIiMTI82EZDbSf+jDX/V1vic+LKq8rOzc+wO3SMm0Qe0iISRtpJaQzNjw4X//rmff6+LDwnnnlV9gEseskumD5kclhKSNLLeocI5i1leuKypXcTn5w7372ciAuGqkv6uv873u3X8fPCFwsvzc4gUpSMDgOFlRxaWjIycHjrUCGO470Ne1o6jyUlnOjKl+aSId1C4SQtKOyymcN6Ns+azTbiooPYOx4eHe/b7rq6NDPZ+f7Hir54t/jPR35eTPySmcO7UJHhw3o+wiTpbXf/hDACMDh/sOOosqlLK8kil8USIl1C4SQqSC42R5JYuLT7li1ldqc4sqRwePj/R3iavYyMDAsbYTX75ysmMzG+nPm1Epyy2auoIUzj07p2Bu36H3IMY1H9hUVHZxTv7sKXtFIiHULhJCJEcKCckFpWfkzTyt76ATbJQN957c/2bh3HNyZ5RPxWsRSaF2kRAiXelNSM4vWVI4R9F74B3Ghtno4MmOtwpKq/KKF07uqxCpyZ78xXTl4QmCw2HRq1Thr5jJ+YsRwZK+GW7i5E2O4zxJA8pTzFCcrHDe+fPPue/Uq16ef859hfPO9zeBo8O9PV+2HHjPsHfTd455np700KjCeedXrPhjTn4pADbSf3DHfSf3vzm5L0GkJpvyF9OTh8fzarXB6jSGTxueyfmLAG9w2nWBI9pUbdLqHXHzJsd8nqQF5SlmuLQkJBeULq1c8efcwnIAYCOd/zJ1f/7yZO2cSFD25C9KNg8vU/MXg/GGJm9Yhl9o3mSC80SaKE8xg6U4ITmvZHGl8tG8kq8AANiRXZZjnqekMPU5mQpZlL8YtIVkpnLO6PzFEHyVwp97EiVvcuLnSepRnmI2SF1Ccm5h+Skr/lwwe5n48Jin6fAuS9hkPSQ7THAcF29lzJrstganp0ol5zgozUlMQunNWfR9+qqqvc+JtdxPaLEpap1jqMQU0tmZVW5RadNdjsmlNHucBo9e1Z7ugoyTq07O1QFQ6uyx8hQlcv6QZIkJyUWVl48MHj25/82eva8Odnu/xokJyd27/5Y/S16y8JrihavEYKlxkOXPqlj+h84P7u/r2gHgxOfNM8qWF5VfMmnVINKQXfmLgASDfzI5fzFAaHcrQ3qEoXmT4zlP0obyFLPYVCcky3JmlF/4UPEpV0xekYnkZE/+oq9E9LE2BQRHQ4xbbt5hpwnOEymiPMXsNnUJyZwsr+zc+8svfKj8woeKypZPftFJ2mVV/mI68vDsYQNRfeF8GZy/yCJGZPryLOPkTbJ454lkUJ7idDUy1NP9xf92bL0rIgBy5d5Ntx7zPDPUeyDdZSRSQXkahJBpZLh3f8++13r2vTrc2xG6hiucd27JwmuKTllJs4RPc9QuEkKmIekmJJO0o3aREDJ9STMhmaQXzY9KCJm+OFlu/szTSxZePfPU1TkFc0f6u0YHj4mrRod7B47uPPH5y32d22Q5hfkzT09vUUM0N+Odd3DBBVFWDQ/jm9+EUok54/w5CqGrBIQQgpzC+aWn37zw8qcWqBpnLfm2OCGqaOBYW+e/TJMzLepvf4vGRgwPhy//9FN861toT/o3wY8/Dr0eDz0UZdW778Jux/e/P6FyBnv2WfzkJ5O2t0wwJfkshBCSmbj80qq5pVVzlv2w79C2nn2v9h3a6v2lo28mnQlpasLu3TjvPFx0UcjyTZvwyitYtgy/+13inQgC3ngDX/867r3Xu2RgAE88gR/9yPsSp5yCv/41sH1nJ3buxJVXhu9n40Zs3JjgtQYH8cQTGB7GrFlYty5x2bIC3V8khJCYRoe6T3ZsluUWFS9YNdF97dmD007DQw/h5z8PX3Xdddi5Ex4PcpJofbVaPPMMbrsNc32zFuzYAacT99yDX/4Sixfjwgtx3nmB7V97Dbt3Y+NGhH2eDw5i1y7I5SgpCSz82tdQWYkXXhhz7UZHsXIldu7EsWNR1h4+jIceQksL9uzB7NlYtQpGI5Yu9a41m3HPPUm9ykcf4dxzx1y2MaL+IiGExCTLmzVz8TcnZ19NTVi8OEoDcOwYXn0Vf/xjUo2i242//hUvv4wrrsB//if+z//B7NmBtb/4BX7wA5jN2LYNjY149FHMiP2bk/z8kOZzIkZHcccdePddlJZGWbt3L1QqfPEFZs/Guefi00/x3HN46SU4HOFNtTRkT/5iaDlTN9VKnNy+WPWKujxWjmM6hcct6vX6QB0DK/WOyG0lVItwk3s+J3d+huY++vMsyTTCGJ56Cr/5DQoKAODQIVx8MT7+GACefx6zZ0e5I2izgYXOxTMygttvx69/jdpalJZiyRLU1GB0FACOH8dnn2H/fvzhDwCwfDk6OnDLLVNeLwAHD2L1ajz1VMwNvvMdfPEF1qzBvn3YuhX79+MnP0FfH26+GT09AFBXB8ZC/lu+HADWrQtfPvWdRWRT/qJg0TZXe8vZVG1KYcsYI7cvVr1iLI+V45hOvMHpq5fOzhizWq3MrlPC1iBmMTKPWak0+wOl/PP62HVKRZVEp4Sd1PM56fNTbQ2eScdjRI3WEv4kkt1eeQVlZfiP//A+/J//wfvv45lnwBj+9CeUleHnP0ddXeC/227DmjX42c9CdrJ+Pa66KrCwthZbt+LDDwHg9ddRXY277oLM96l+9dV47bXwlnVy9fXhkUdw5pnYuBFFRdG32bwZW7agrAxPPundJjcXDz+Myy/HgQN48skpLN54ZU/+IgAEfRa721P0hTxWbl+sesWpb6bQaBD5vcM/PbpgUZmqo+RUSMJknc/iqrGen0GUQfPpk+w3OgqTCY8/Do4DgOPH8eijWLMGjzyC5mYcPYpNm2A2h/y3fj0A3HxzYCd//zvmzcNvfxtYctFFuOUWnHMOABQWYmAA+fmBtddfj1/9ajx3CmOJbGKfew733ovDh3HLLXjllejPstm8hSkuDlmu1QbWSkyi+4ueVlSvntAruNsBNXiD0wOV3AZ48xcV8fIX1fDlLDrVQGgDF2s5bzBCpVKZXIBOodA0WVPeXxEs8QKKfPVKdrmUrbYaW1UWQW2IXCVYtDZNk1OincVJO5/Hfn4CCIpHU5o9yeazkWzwm99g5UpceKH34UMPYc4cb1fpd7/DY49h3rzwp4yMAAi5O3juubjpJgDYswcWi7eVKi9HfT0AfP45ADQ2htykfOUV7NkDYBIuqAoCNBo88wwUisDCwkLccgvq63HeeXC7oz/xgw8AeK+LBhOX7NiB4WHkSmukSxblLwrtMDqdagAQLPoWASkOd8qu3D6HnmuuZTF7fep6jUlrWd0U8Sxtq9GZ+q8kk2UM5/M48kF1dt8BFRx6rcrSlAX5YyQJr7+OBx7AqlVYsQJz5mB4GO+8A6cTxcX4619x1lm48cYozxLbxby8wBK57xLEkiX43vewcCHmzg1cNd24Ec3NaGhAYWHgKWZzlD27XPF6aYKAjg7U1YUvf/FF7NuHK6/EW28FmsZbb8Wtt8auOQB4G+bIKWIWLwaAwUF0dOBUac0olKhdlFfD1AJDlI5BbK5WD+D/g4+Vv+i/lhVje7X/I0qwqBqqQvIXoy13NNiq673l5KtgaxEMKf3UiWwWYx2HmMdHsjytLoQVkzc0aVQNLZqgRYGeknRN3vk81vMzBK+u15gagndLstiqVVi1Cpdfjttvx7x5uOgi/PGPuPBCdHfDZsMLL+Cjj7BwIcrLQ54l/vY/uF0MJl47TVJnJ1pa4J/abMUKFBSA5zFrlve6brB//QuVlVEa1KhNbDKOHgWAWbPCl/t/HHLsmNTaxezJX5RXB+KOhXa3Iv7Wky4ity9WvSY5b3KqyKuVbpPFe2/Y1BiaSQxAvHBtq/OPWhEvoPo6mA69SpLjSibvfJ4QwdFQl2i8D8kaMhneeAMPPIBFi3D33bjoIvzXfwHAu+/iiSdQUIDTT8c3voE33gh5VmS76HKFDMwJ+89qBYD6+iirVq7E97/v3UAszwUXoLQ0SqM4FcSKBN/4FHGct3ZD4wmInlpZlL8YXMxUZ+hFze2LVa+oy2PlOKaP/3j60hcjD7td5y+n9Mof08TP57AnJD4/w49OJmZykgl7+ml26aVsYCDKqpYWlpvLnn8+sGT7dgawQ4cCS0ZG2I4d7NgxNjqa4IV6e9nq1eyjj8ZTyJUr2Zo143nizp0MYKWl4cuLixnA3n8/fPnoKAMYwHbujLK35csZwNatG09JJozmuyGEkKnnckGnw6ZNmD8fAHp7sX07Fi0K3FG69FJ8/DG6u73dOJcLKhWOHg352X7ycnJw6614+mlwHN59Fzk5uOSSpJ447vlu3G6cdRZKS8Pnu1mwAB0dePttfO1rIcu7u72TAOzdi4ULw/e2YgW2bcO6dfjVr8ZckgmT1iggQgjJQq+/jjvugNkMux3bt+Pzz8HzuP56nB6U0aHXY/36wLXNgQEg4vLj3r34wx+8P+RPqLMT99wDxvCXvyA3F5s2je2u5GTheXR0eIfLBvviCwAoKEBlZeoLFR+1i4QQMpVaW3HttRgdxc03Y80aaLW44orAOFK///gPXH114GFfHxDRLi5ahO9/H5WVmDsXOTnYvBlnnBG9XdmwAd/9rvfnj5a03uw//3xs2YIdO7w/WPTbtg0AzjsvqdnvUotypgghZCpVV+MHP8C3v43du/HMM1i1KkqjCEAmC2nhTp5Ebm6UH/addRbKyrxtiUKBVavw+utTVvTJcMMNAPDii+jtDVne1AQAGk2Up6QbtYuEEDLFHn0UL76IBQtCFu7bhxdfjPmUo0ejz8EdbN48/PjH+MY3Yv6mXgouuwyXXIIDB3DLLejuBoDhYdTXY8sWlJdDr093+aKg66iEEDLF/N2+nh68+y7efBM9PTjvvHi9pU8+SepXfTffjLVr8corIdPQTMSk/2qC4/D007j8cvzzn1i0CGeeic8+w6FDKCpCc3PMWVXTitpFQgiZSidOwG7Htm14913s3o1bb4VOh2XLwjfbtg2ffYaiIuTn48QJPPssamsT77y4GA884J0xx+XC7t1YsgTDwxgaivKTwVj+/Gfs2eN94o4dgVjEyVJVhQ8/hMmE//1ffPghFizArbfi/vtRJdFZTeh3GoQQMpUGBnDBBfjiC/zyl1i7NiQEONjQED78EM89h8cfx/AwZsyA0zm2fMTRUbS04N570d4OALt2obo62ee2teG++/CPfwDACy9gzZoxvG7WyZr8xaCAu9TOtBI1NzE8uDDlpZqo8DRFb15g3HqN+TxJg9AcRJU+/IQTHBaVSuoBkiTDFBTguefwwQf42c9iNooA8vKwfDn+9Cc89hiuuQbbt485NFgmwze/iW3bcMklePzxMTSKAJYtw8sv47rrYLFM80YRWZS/qLYyJsYB2hW2VH6kRc1N5A1Oj1kZmNPEE1kFaeMNTrsuMPFLU7VJq3fErdeYz5O0UFuDyu8xok4bmiPd0F7VJFaC5vQmk+iccwKzfiek02HjxvHfL5w9Gy4X7rxzzE/kODQ34+67x/m6WSSr8heFFpvCaFDXKmwt0vmu79CrLGI4YbpLMgG8oUnjNoV83QitV4LzRJp4db0ZrR7vI8HS0FprNah5ag8Jmd4StYueVkTOGD0m7nbA19GAEvDmL+ri5S8CvnSGyM/WWMvFZrFeDajrJdIwuurkHFfTmHjDDMBXKVy+JiRKvSZ+nqSeIFi0QfOAe1rdaPdeCfZdNyaETEMT/P0ib2WMJdkx4A1Oj9Fdw3Fym8bjTPgcb44dx3HyOldjjf92T6zlYtgBDwB8rcLWIIGbW0qzJ8qM0Zkv0+vlqpNzHMfJta1GfwAIhHa3q7HOrfGIF4LbW+j+IiHTVKJ2UV4NW8sY9+nvVwCInb+YaHu1lQVuYgX1LmMtdzQ3ettLjqtpdDU2S6BhBAC1NaOvoPoI7e7QrKnQeo3nPEkb8f6ix65wm0K/PinNvtOJr2qVxjUHQkjKZU3+oqPZHZzc4zG7pdIwiqQ5PDNZgqPBpjBGu/DtrVeC80SKeLW1SeOu8ZWSNzSZUecbdxty15sQMr1kQ/5iYFSkuFWsJ02JqLmD0cafpjwTciLCKuBLYIxfr9jniWQEnRqMMW+F/FGRHntE4iQhZNqh3/UTQgghATRvOCGEEBJA7SIhhBASQO0iIYQQEkDtIiGEEBJA7SIhhBASQO0iIYQQEkDtIiGEEBKQLfmLobl6qZz3OWr+YsxyZopszV9MX04nISRTZEv+otrqMSv9M694jKjRpuhTL2r+YsxyZopszV9MX04nISRTZFX+YjBl0Hzl6ZJMOTNDduUvSjKnkxAiFdmUvwhfnAYnr3Fr6tP8qRynnJkoi/IXJZfTSQiRlCzKXwyZwdrYqk3y5uZUiVPOTJfZ+YvSy+kkhEhK9uQvhuDV9RqE7Dblkipn5sia/EWp5nQSQqQia/IXQwmOhjppjvvITNmTvyj1nE5CSPplQ/4ii3JVLxXRi6El8b9wMuWXuqzMX0xrTichJFNQ/iIhhBASQPPdEEIIIQHULhJCCCEB1C4SQgghAdQuEkIIIQHULhJCCCEB1C4SQgghAdQuEkIIIQHZkr84rnJOqpDyxM0pzBQhx9M3I1FIzmX05ZKeCnaM+Yux6usjOCwqlfRrTQgZg2zJX0xz/l94eeLkFGYKh15uglGsgLHa5p24T20NqpfHiDqt2ByorYwxu05p9jAm6algx5i/GKu+AADBom9or2oSTzpJ15oQMgbZkr+Y1vy/uDmLoTmFmUKwmNxmp1UtHlC1wWlX1EVET/DqenOaZ2cfl/HmL4bWV7A0tNZaDWqe2kNCsku25C+mL/8vTs5ilJzCDCG02KBZHbxEXatzt4e2IoJg0U7SPO8pNd78xbD6elrdaPdeaVbpHXQVlZBskVX5i2kRpzyZnVMYm6tOznEcJ9e2GpsyL3h57PmLUesrtLtdjXVujUe8cN/eku4TkRAySbIlfzF9+X+JchZDcwozBL9aE3Y8Hc2Niipv1cT7bR67wm2K2awIqR73lKxx5C/GrK/S7Hu7+arWMV6UJYRIVbbkL0o+/0+qzUQMvMGoqPNfHXRYVDVuc33oO8OrrU0ad01GVStB/qIj8nQOCKsvb2gyo857hISQu+SEkMyWJfmLCco55cLKEz+nMEN47EGH03s0g+opbmNWAkpz1KvFkqtwovxFuy7iRItVX+8OfUfIl09JCMkClL9IiEiwqOQ2jYd+cEHINJeb7gIQIg1Ci82lMzqpUSRkuqN2kRAAAG9wsnSXgRAiATQ/KiGEEBJA7SIhhBASQO0iIYQQEkDtIiGEEBJA7SIhhBASkC35i2GBhymcxzksaVEVmkMUVq/YuYxjzAVMjfDi6vX6QB0DK/WOyG3TPm9tEhz6ZI62752RYI0sIX8xk/t3Gi3f1OKfJj3kCUGv6wg++5P9+ydEYrIlf5E3OO26wAwrTdUmbcomKAvM6xIyzU20esXOZRxjLmBq8Aanr5g6O1789NgAAAjzSURBVGPMarUyu04JW4NDXOkxK5Vm/7zxysCsOEr/ZKoSprYmM6u7751JQYHGxqGvUxj9kxBM6t9plL87waI1oVY8H4zVtkAOpUNf49Z4vNOnw+PfD28wRskmIyQDZEv+Yhje0KRxm1LSvBiCokFabIEPqjj1EtdH5jKONxcw1TQamCK+dfAGpzhTjGBRmaolnLMR3K1yRF0e3h+Kzt974lR6S9h1C++57X8Uaxd6juNUer2K4zi9Q3x9VdA1kMALqFQRO7GYGnX+yYQn6+/UW6wof1+8wek0RHlThXa3zv/KPJpNgXKq680p+iMkZFJlS/5iBL5K4UpxZK5giTfrua9eiJnLON5cwNRbbTUixgeeYNHaNE3SnUrNodc213q7VU21zSb/u2BpaK53Ml9/q6pBn+j6qnq1v3tW2+qbTpw3OO06pdl7AHhDk5ixEmsXVo9Z6XJXNzGPGTU1MHqYXeH/Jqm1VRs93oIqInp/jlZXoFmctL/TBH9f3obe1Gr0//XyVYpGk0UQAAgOi6nR1RpoYPkqhUvipzIhUVD+4qQRWpINA4meyzj2XMCp5NDHypUAAKjrNUGX0oKepQ36yJQgR7NbU6/2faSr6zXeS4WCxdbYKPffHZXXNDa2JngHhJYGrXdzkztoubpe43/3HA02TX2Cc0KpMfDgqwBdrZqHvNq7mDcYFbYasUhaE+xNoY2r0O4Gkm4Jx/B3Gvfvizc4GfN4NDAFlqutHo1NLuc4Tm5q1ehCrjerq5Wp/nZKyMRlS/5iBKHdrZzgN+ixiWwWYx4HAJG5jOPIBUwZT2tEd4U3NGlsDSGnRpI9eUniqxT+lAyv+BVx6OX+7hxr0gS3BrzB25v2Xtwcb5nUVu/dXU+TBjXauP3Xyfs7Tfz3xfOG+pB4Tt9taOa0VgHVGXkCEBIkW/IXwwiOhqBbfakQ0SwmWS/fsMG4uYBpIK9Wuk0W7xU9U2OU7xi8wQhbnb/BFC+g+hoTh146o2qDqWsVtgbfoEnB0eAfnaKuVdhUlqQPudDuVipWy3kAgsPSEDbIRV2vsTVYLEl0FmOzqHyjO3keVVCGfa/iqxRAoF2bvL/TxOWB4GiocwV/3w28qqnaGPxtz9HqSu23U0ImRZbkL4aNF0x5Hp5vxGbYwpjHIYjOnigXME38b3vgaEZJLPR1s8KvC4d3vyQjOFbS7o1cDFsBpdJX58gBq9732f+mKXVmu5jKGP6XkTCA0rdznd2f/SjuVmdnZqVOFyhPlPPZrAx/gYn/nUaULGiVJ3j3QXv3DVtVRhYyZOw1IRmD8hcJmQIOvaq9fmrvtDr0XHNtkjf300LyBSQkOprvhpDJ5P0VUk2jqy7KwKTJpLZK+mcQgsXkNo//OjIh6UP9RUIIISSA+ouETLEos/8FTaBHCJEYGXydwlj/EkImxP87hnB0640QKZKtXLly8+bNsf5Nd/EIIYSQlJLFaRSpv0gIIWS6of4iIYQQEpD+/mKX4Giz6DeouA0RQ87b9Kr1HLee4zboHV0TeIk2PbdepW+bSCkJIYRMD+nvL87n1csM1juNEfOKOPQ2t2ath61j7M56dE5g6N4yK9MoGtto8B8hhJBE0t9fjKWr3X2W0TDfl+vWZgqeb1N4iePWc2PoApZVSy9XlhBCiPSkv78Yy/wqxU6TpUsAILRZTDtdrXQhlBBCyFSTbn8Rautaje0xObeek29u1ZwV0t/jb2BsHbMuS3pn86sUh2qi3MIkhBBCgkm3vwhgvsG5jrF1jN1prQKqk28FI3W1u8vt7E4JJ+YSQgiRAgn3FwHfGFShTW8qC8l1G/P9RUIIISQZ6e8vtum59Ry3vqbxYJ18Pcet9+fZOiwvij/SUDWg3nlZyJRZnig7iqszMnGeEEIIicBt2rRJsv3FydKm52xuncY5hvuRhBBCpieOMSblS6mEEEJIKkn6/iIhhBCSYum/v0gIIYRIB7dp06Y4q6nLSAghZFqRpbsAhBBCiIRQu0gIIYQEULtICCGEBCTTLgoOvYrjOI7jVHqLw6LSJwpsEix6lYrjOJUquflI427v0HMcF+Ulw5dbvGUMkrCgkyP48AhJLM8EDn3wgfRXQIg8yipL9OVckm8+IYRIS+J20aHXttc3McYYY8761e22RBPHOPRa1DudjDGns6ohcdsUb3vBojJV280RGVFRlhuczKzU2ZmPJ/JZU8KiMsHoYYwxT1O1Tesvf6zlmUFt9ZiVSrNHPJRG1GktAgDe4AxaHnKQxYV2HcT3IEVHnxBCJluidlGwmGA08L7ptnne4GTWwJRsgj6iX+ZodmtW+7aXV7ubHeJ+VP4unLcv4u1PRN9e3JVe22p0GuThhYq13FdklcoigDc4reroW0wqg9NpVfMAwPOrNYmXZyBeXW9Ga9jcew69ygLe4HQaAPF/Q+Zkj1hACCGZIVG76GlFdYz2J0nudsDX0YASAOTVSih19hifm+L2YpcQxsimLdZyAEBjDcfJ69I0Fapg0do09ZEFi7U8UwiCRWtT1AYq4KqTc1xNYxqLRAghUyZ3Yk/nrYxZk93W4PRUqeQcB6XZk7gz4Wl1uRprON+nr6ra+5xYywEAOjuzyi0q7RirMQkEi17banRaw6sVa3kmcNXJuToASp29KfiLiNLscRo8elV72kpGCCFTJlF/UV4NW8sY9+kKueSmqPL/X8HT7IJSqUSrR0i4vdoadKcwqHcZa7lf5DW9qSZY9KqGqvqI67axlmcK8Zahx65wmxoibo+qrU5DtCcRQkhmS9Qu8gajwhYYWSg49Krg8ahR7i+q681o927vaAhcfxMsKrkJdo/T6TTCJPfvM9b2GUKw6FUNqBfvJQqBwbqxlmceXm1t0rhrYlQgk2tGCCHRbIrL1zHTeUcXKnVmu28sIhOHHwIIGgXq2967uW/gon/cos7ue1LI2vAlYS8QuSpyedAAyMjdTJmIUa/eYxFreaYIOr6MMW99lOZog3x9NfM/JQOrSwghfjQ/KiGEEBJA890QQgghAdQuEkIIIQHULhJCCCEBCX+/yKWiFIQQQog0/D9GptFvWjUPngAAAABJRU5ErkJggg==

keil编译 i--循环一次大概10T。
所以 i = MAIN_Fosc / 10000;//10T




熊仔 发表于 2023-7-17 20:15:38

本帖最后由 熊仔 于 2023-7-17 20:48 编辑

如果使用sdcc编译,large模式,汇编代码真的很长
_delay_ms:
      mov      r7,dph
      mov      a,dpl
      mov      dptr,#_delay_ms_ms_65536_18
      movx      @dptr,a
      mov      a,r7
      inc      dptr
      movx      @dptr,a
;      src\main.c:30: do{
      mov      dptr,#_delay_ms_ms_65536_18
      movx      a,@dptr
      mov      r6,a
      inc      dptr
      movx      a,@dptr
      mov      r7,a
;      src\main.c:32: while(--i);
00109$:
      mov      r4,#0x60
      mov      r5,#0x09
00101$:
      dec      r4
      cjne      r4,#0xff,00126$
      dec      r5
00126$:
      mov      a,r4
      orl      a,r5
      jnz      00101$
;      src\main.c:33: }while(--ms);
      dec      r6
      cjne      r6,#0xff,00128$
      dec      r7
00128$:
      mov      dptr,#_delay_ms_ms_65536_18
      mov      a,r6
      movx      @dptr,a
      mov      a,r7
      inc      dptr
      movx      @dptr,a
      mov      a,r6
      orl      a,r7
      jnz      00109$
      mov      dptr,#_delay_ms_ms_65536_18
      mov      a,r6
      movx      @dptr,a
      mov      a,r7
      inc      dptr
      movx      @dptr,a
;      src\main.c:34: }
      ret执行的代码确实很多,主要看中间 i-- 部分代码
00101$:
      dec      r4
      cjne      r4,#0xff,00126$
      dec      r5
00126$:
      mov      a,r4
      orl      a,r5
      jnz      00101$这里共需要9T,比keil生成的汇编少了1T。
所以 i = MAIN_Fosc / 9000;//9T

最终延时函数修改成下面:
void delay_ms(uint16_t ms)
{
      uint16_t i;
      do{
                i = MAIN_Fosc / 9000;//9T
                while(--i);
      }while(--ms);
}
改9000后,汇编r4,r5 的值变了,24000000/9000=2666=0x0A6A
00109$:
      mov      r4,#0x6a
      mov      r5,#0x0a

当然因为参数ms保存在xdata空间,导致外循环时间稍微有点长。导致延时稍微加长。



void main(void)
{   
      
    while (1)
    {      
                P3 = ~P3;
                delay_ms(10);
    }
   
}实测效果还是挺准的。

data:image/png;base64,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YBcn/oCdUlNTk+OOOy7/8R+XZubMmTn++Hd1BtSJJ56Y4cMPy7hx43LKKadkwYIF6datW7p06ZJVq1bmxRdfzHve857cfffd2X///TNt2rQ0NTVl3bp1SZLPfe5z+cEPfpDZs2fnZz/72XbPu3z58jzzzMqMGzfuVWcbM2ZMDjzwwLz97W/PwIEDM2bM2PTt2zfHHjs+mzdvzksvvZQkWb9+fVpaWnL66adn2rRp6dPHX8sBgD2X+AN2Sm1tbf7+7/8+48a9I717987JJ5+cjRs3prGxMfX19bnkkkvy+OOP5xe/+EVGjx6dPn36pLa2NkkyZMiQjBo1Kv3798+pp56WpUuXZv369UmSESNGZMiQIWloaMjxxx+fxx57rHOPZFtbW+65556MGTM6BxxwwE7PXlNTk0mTJqWlpSXjx4/Pxz72sSxZ8pt06eJHIgCw5/KbDhSourpLXnxxc+chlRs2NGXz5ubtTvaSvHwCl+rq6jQ1bUiSbNmyJatWrUqPHj2yevXq3HzzzZ3RtiO1tbV54YUXsmjRohxxxBGpq6tLnz5909bW1nnG0Orq6iQvB1nPnj3T3t6ejo6OVFVVvSLGnnzyycyaNSsTJ07sfNzOaG9vT319fS6//PI88sgjef/735+pU6dm9erVO71MAIBdnfiDAg0cODC9e++T++67L+vWrcsvfzkzRx11ZPr165eNGzfmrrvuyvPPP5+99toro0aNyj333JPGxsbMmzcvW7e25LDDDktdXV1+9atf5Z577snvfve7/Pd//3d69erVecKYbdu25emnn861116b9vb2TJw4MUly+OHDU19fn7vvvjtr167NnXf+JG9729uy//77513vOj4PPjg38+cvyGOPPZaZM2fm6KOPTl1dXTo6OjJr1qwMHz48Q4cOfV3f/5YtWzJlypR873vfS3t7ew48cEDnXkkAgD2V+IMC9enTJ+ecc07uvPOnmTBhQlauXJlJkyaltrY2q1evzvTpN2XdunWprq7OmWeema5du+bEE0/Mt7/97ZxzzjkZMGBA+vTpk89+9rOZPXt2Ro0alcWLF+fiiy/OvvvumyRZuHBRPvKRjyRJvvKVr6Rv376dz33++ed37sFraWnJv/3bv6Vbt24ZNerofPSjH8nFF1+UT37ykznttNPy3ve+N0mybt263HvvzEycOLHzRDU7q0ePHpk8eXLmz5+fY445Jt/85jfz6U9/+nUdSgoAsKur6tmzV0elh4AdaWg4KsuXL0tra0tOuP45p67+M773vZvztj+51AOv31lnudRD8uqXevC6hMrYb78DUlVVlTVrGre73esSKuPPXephV3ld2vMHAABQAPEHe4hnn331E6+w83r37l3pEQAA3hDiD/YQ3//+9x2e+AZqbW3N9Ok3Ze7cuZUeBQDgDdG10gMAb4yFCxfmrLPOrvQYAADsouz5AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKID4AwAAKEDXE65/rtIzwKvav9IDAK/JNgQqq6HSAwB/kV1le1nVs2evjkoPATvS0HBUli9fltbWlowZe1ySZN7c2RWeCsrUvXt9Bg06JEuXLqn0KECS/fY7IFVVVVmzpnG7220voTKGDWvIypW/TXNzc6VHeU0O+2S3VV3dNYcO8zdPAMp00MBDUl3dtdJjALsRPzHYrVRXd83gIcMyeMjQDB4yLNXVXfP4MnsiACjPO459V0aPPTYrnliWFU8sz4onllV6JGAXJ/7YLcybOzv/dPYnMnrs+HTpsv0O6z8c4gK8eWpqatKrV6+8pWfvSo8CJNlrr72T/PEomEOHNaS9vT1NTc/llpuvr/B0wK5K/LFbqK6urvQI8DfzpSkXZsiQwZUeYztVVVXp0qVL2traKj3KTrv0sivzxBMrKj0GvC5VVUnHnzlbQ3V19W79WgXePOKP3cKoY8Zl+bKlefjXD77isE9vamdPs2HDpLS0HFjpMbZTVVWVrl1rsm1ba6VH2WmPLV6QhQsXVnoMeEPst98BOeKokWlre2m7wz5HHfOOjDpmnG0jsEPij91KW9tLeXzZkjy+bEnn+/9qa+vS2tpS6dEA4G+mpqY2D86ZlUcenpu2tpcqPQ6wm3C2T3ZbfwhB4UcJnnnmmUyePDkNDQ056aSTcvfdd6fj98d+LViwIGec8aE0NDTkvPPOS2Nj4w6XsW3btixcuDBTp07NpZdemq1btyZJOjo6MnPmzJxxxocyaNCg/Ou//mueeuqpJElbW1vuuOOOnHTSSTn00KG56KKLsmHDhiRJa2trbr311kyYMCEjRozI17/+9WzcuDFPPvlkTj755AwaNGi7jy9+8YvZunVrHnvssYwePXq7rz388CN/g7UIe45t21qz8pnfCj/gr9J106aNlZ4BduiBB+7v/Pc9d/+sgpPA39a2bdvS3t7e+fmmTZty5ZVXZujQofnlL3+ZWbNm5eqrr86gQYPSs2fPfOMb38g//MMH8+53X5ebbropN9xwQy688MLU1tZut9xvfetbmTdvXtrb2/PWt7417e3taW9vz+LFi/P1r389n/3sZ3Pttdfkuuuuy3XXXZcvf/nLmTNnTm677bZcdtll6dOnTy6//PJMnz495513XmbPnp0f/vCH+c///M/svffeufzyy3PHHXfk7LPPzm233db5PWzZsiWXX355jjzyyNTW1mbLli057LDDcvvtt2fvvV8+acVee+213ff8ZnjxxRdim8ee4tX+L9teQmU89NCcSo/wF+nat2+/Ss8AOzR8+BFZsWK5PXsUp66ubruTHL3wwgupr6/Pqaeemv79+2fixIn56U9/mhdffDHNzc1paWnJ+PHjO792xRVX5LnnnsuAAQO2W+65556b888/P9dcc03WrVuX6urqVFdX59lnn8348eNz3HHHpb6+PqeffnqmTZuWbdteypo1a3PSSSfl6KOPTl1dXU4++eQ88sgjaW9vz8EHH5yvfvWrOeyww1JdXZ0jjzwyTz31VDo6OtK79x/PCvroo49mw4YNOfbYY1NdXZ3Vq1fnoIMOyv77759u3brtcB1s2NCU88//TA4//PAsWrQoS5YsyQUXTE6fPr0zderU1NTU5LLLLsvo0aOzevXqXH311ZkxY0YaGhpy0UUX5e1vf/srltmr1z6xzWNP0b///qmqqsratasrPQqQZOjQ4WlsfHqXv8i79/wB7OIOPvjgTJ06tfPzlStXprm5Ofvss0+amprSo0eP1Nf3SJLss88+qa+vT0vLK/9oUlNTs8Pln3jiiTnxxBOTvHwI6KJFizJgwIDU13fPxz/+sSQvn/ClpaU1ixcvzn777Ze6uroMHTq0cxkvvrg5q1evzqGHDktdXV3n7W1tbbn33nszevToHHjgyyex2bx5c+67777Mnj07bW1tOffcc3PmmWfu8Ky+GzduzFVXXZW5c+fmkksuyTnnnJPbb789t956a6ZPn57BgwfnxhtvzIABA/Lwww9nxowZmTp1aq6++ur079//r13VALBH854/gN3I+vXrM23atJx00kkZNGjQG778efPm5Uc/+lE+8IEPbLdXrqOjIzNm/DwLFy7MqaeemqqqqiTJ1q1bc/HFF6eh4fBs27YtZ5xxRufXkqSxsTEPPfRQJk6c2Bl3w4YNy+TJk/PjH/84V155Za6//vrMnTt3h/OMHTs2AwYMyMiRIzNw4MCMHTs2/fr1y/jx47N58+a89NJLnetl69aW3++1/Fb69u37hq8bANjdiT+A3URzc3Ouueaa9O/fP2edddYbfv3L5cuX52tf+1o+9alP5eijj97ua/Pmzcu0adPyhS98IYccckjn7XV1dbnwwosyZ86c1NbW5oYbru+8vlhHR0fmzJmTgw46KIceemjnY0aNGpUPfvCD6devX0aPHp1jjz02jz766E7NXFNTm0mTJv3+0Ndjc/bZZ+c3v1mSLl1s3gDgT9k6AuwG2tractNNN2XdunX5zGc+k/r6+iRJly5dsnnz5jQ3b06SNDU1pbm5ebtDL/8S69evz1VXXZX3vOc9ef/737/d3rvly5fnyiuvzLnnnpsxY8Zsd/vjjz+evffeKwMGDMjYsWOzcOHCbNr0fJLk2WefzV133ZUTTjihc96tW7fmhz/8YebPn/+61scftLe3p76+R6644orMnz8/p556aqZOnfqqZzwFgJKJP4BdXFtbW2644YY8+OCDueCCC1Jd3TUbNjRl8+bmDBw4MPvss09mzZqVtWvXZubMmTnyyCOz7777pqlpY+66667OGHs169evz7//+7/nrW99az7wgQ9k06bns2FDU7Zt25YVK1bkwgsvzGmnnZZ3vvOdaWramI0bN6WtrS3z58/PF77whTz22GNZtWpV5s6dm+HDh2fvvfdK8vIlKJJk5MiRnc9VU1OTdevW5bbbbsuqVavy0EMPZc6cORkxYsROrZstW5ozZcoXc/PN30t7e3sOPPDAV5zlFAB4mfgD2MVt2vR8Hnjggdx///1573vfm5EjR2TkyBG58cYb0rdv35xzzjm58847M2HChKxcuTKTJk1KbW1tVq9uzPTp07Nu3drXXP7TTz+dn//85/n2t7+dMWPGdC5/4cKFWbx4cR5++OF8+ctfzpFHHpmRI0fkzDP/MU899VROP/30nHrqafnkJz+Z973vfamurs4nPvGJ1NTU5IUXXsw999yT448/Pvvuu2/nc1VXV+cjH/lo9t1337zvfe/LZZddlsmTJ2fs2LE7tW569NgrkydPzvz5j2TUqFH55je/mU9/+tOdJ5cBAP6oqm/ffh2VHgJ2xKUeKNX06d/NUUcdVekxtlNVVZWuXbtm27ZtlR5lp3384/+cRYsWVXoMeEO41APsWnaXSz1U/eTabeIPYBcy+pTq9HI5ujfcQzPas3G9TR4A5bLnj12WPX+U6pJLLsnpp59W6TG2s7vv+Vu7dm2+9KVL3rATzUCl2fMHu5bdZc+f9/wB7GLuv39WpUfY48yYMUP4AVC8rpUeAIDt3XffrBx99KhKj7Gdbt265+CDB2XZsqWVHgUA2En2/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABRA/AEAABTg/wMIsZiF3hcPxAAAAABJRU5ErkJggg==




熊仔 发表于 2023-7-17 21:00:55

sdcc编译器,delay_ms函数形参加上 __data修饰符,ms变量就用寄存器保存。汇编代码和keil差不多。


C代码:

#define MAIN_Fosc                24000000        //定义主时钟
void delay_ms(uint16_t __data ms)
{
        uint16_t i;
        // uint16_t _ms = ms;
        do{
                i = MAIN_Fosc / 9000;//9T
                while(--i);
        }while(--ms);
}汇编代码:
_delay_ms:
        mov        r6,dpl
        mov        r7,dph
;        src\main.c:33: while(--i);
00109$:
        mov        r4,#0x6a
        mov        r5,#0x0a
00101$:
        dec        r4
        cjne        r4,#0xff,00123$
        dec        r5
00123$:
        mov        a,r4
        orl        a,r5
        jnz        00101$
;        src\main.c:34: }while(--ms);
        dec        r6
        cjne        r6,#0xff,00125$
        dec        r7
00125$:
        mov        a,r6
        orl        a,r7
        jnz        00109$
;        src\main.c:35: }
        ret测量结果更准一点。


data:image/png;base64,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aVOuv/76DB06NIsWLUpTU1M+97nPpa6uLrfeems6d+6cyZO/lD/4g5F57bXXcuutt+bRRx/N0KENuemmiTnllFPe7v8kHGDe5wDltLezdB7sHW4O6QQ4jHXu3Hmvt7e2tqVHj+7p1q1bkqSurjbdu3fLjh27H57b1taW1tbW1NbWJUmOOOKI1NfXZ+vWrUmS119/PTNmzMgVV1yZmpqavW7rhReasm3btgwfPvy/t92a2trajtnq69+ZrVu3ZteuXRkwYECampqycePGrF27Nq+88koGDhyY7t27Z+TIEamtrU17e3teffW11NXVpV+/o/a6zc2bN+ev//qvM2nSpNxyyy1ZtWpV/u3f/i3nn39+vvnNaWlubs4999yT+vr6PPvss7n88g9nypQpWb9+/T4+wwBQXk7aAsDborW1NQ8//HBOPvnkHH/8cXtdpqWlJT/60f/LGWeckb59+/7WdZ5zzjl59tlnM3LkyCTJpEmTcuKJJ3b8fWPjcxk37tL07t07f/M3f5P6+vq9rue0005L//79M3z48AwYMCCnnTYqffr0yejRp2f+/PnZtesXnwXbsGFDduzYkQsvvDBnn312evTosa9PAwCUlT18ALwtli1blvnz5+eSSy5Jp057/3azYsWKvPBCU8aMGZOKiorfuL729vZ897vfzYYNGzJ79ux8//vfz4wZMzJ37lMdy5x88klZsGBBvvrVr+aOO+7IsmXL9mv2zp075+qrr86OHTty+umnZ/z48Wlq+umvfRwAcKjynQuAPZRKnbJly9Zs27YtSdLcvClbt25LVVXVbst16tQppVIpmzY1J0nefPPNrFmzJt27d8+sWbMyc+bMjBo1Kqecckpmz56d66+/Pg899IsTabS2tubRRx/NiSc25Oijj/5f2y5l06ZN2blzZ5JkzZpX0r1797S1tWX58uU5//zzc/TRR2fo0KE5/fTT85OfLMjWrVszf/78bN++PbW1tRkxYkRqamrS1NS0X4+/ra0t3bp1y80335znnnsuF1xwQaZMmZJXX311v9YHAOUi+ADYw4ABA1JXV5snnngi69aty+OPz8pJJ707ffv2zebNm/P9738///Vf/5UePXpkxIgR+eEPf5i1a9dm3rx52b59R44//viMHz8+CxYsyIIFCzJ79uyMHj06X/nKV3LuuecmSV599dXMnftUzjrr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

soma 发表于 2024-3-13 11:50:52

本帖最后由 soma 于 2024-3-23 00:31 编辑

keil毕竟是代码优化最好的编译器

lzyor 发表于 2024-3-22 07:57:22

sdcc更新后代码优化似乎更好了
// sdcc --std-sdcc2x --model-large --opt-code-speed --code-size 0xffff --xram-size 0x2000 -c delay.c
#include <stdint.h>
#define CONFIG_FOSC 24000000
void delay_ms(uint16_t __data ms) {
    uint16_t i;
    do {
      i = CONFIG_FOSC / 9000; // 9T
      while (--i)
            ;
    } while (--ms);
}

4.0编译的结果:
;      delay.c:7: while (--i)
00109$:
      mov      r4,#0x6a
      mov      r5,#0x0a
00101$:
      dec      r4
      cjne      r4,#0xff,00122$
      dec      r5
00122$:
      mov      a,r4
      orl      a,r5
      jnz      00101$
;      delay.c:9: } while (--ms);
      mov      a,r6
      add      a,#0xff
      mov      r4,a
      mov      a,r7
      addc      a,#0xff
      mov      r5,a
      mov      ar6,r4
      mov      ar7,r5
      mov      a,r4
      orl      a,r5
      jnz      00109$
;      delay.c:10: }
      ret
4.4编译的结果:
;      delay.c:7: while (--i)
00109$:
      mov      r4,#0x6a
      mov      r5,#0x0a
00101$:
      dec      r4
      cjne      r4,#0xff,00129$
      dec      r5
00129$:
      mov      a,r4
      orl      a,r5
      jnz      00101$
;      delay.c:9: } while (--ms);
      dec      r6
      cjne      r6,#0xff,00131$
      dec      r7
00131$:
      mov      a,r6
      orl      a,r7
      jnz      00109$
;      delay.c:10: }
      ret

lzyor 发表于 2024-3-22 07:58:50

不知道对之前的代码影响大不大{:5_351:}

soma 发表于 2024-3-22 12:14:30

sdcc还有很大进步空间啊
页: [1]
查看完整版本: SDCC 计算延迟的问题