["$ benchmark..G$ ","","HFYGV = Stopwatch.StartNew();YHHfor (int i = VBenchmarking Console application, 2 loops: C#VYYusing System;Yusing System.Diagnostics;Yusing System.Runtime.CompilerServices;YYclass ProgramY{YHconst int _max = V1000000V;YHstatic void VMainV()YH{YHHvar s1F0; i < _max; i++)YHH{YHH}YHHs1.Stop();YHHvar s2F0; i < _max; i++)YHH{YHH}YHHs2.Stop();YHHConsole.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) /YHHH_max).ToString(G0.00 nsG));YHHConsole.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) /YHHH_max).ToString(G0.00 nsG));YHHConsole.Read();YH}YYHstatic int _temp1;YHstatic int _temp2;YYH[MethodImpl(MethodImplOptions.NoInlining)]YHstatic void VMethod1V()YH{YH}YYH[MethodImpl(MethodImplOptions.NoInlining)]YHstatic void VMethod2V()YH{YH}Y}YYVBenchmarking Console application, 3 loops: C#VYYusing System;Yusing System.Diagnostics;YYclass ProgramY{YHstatic void VMainV()YH{YHHconst int m = V1000000V;YHHStopwatch s1F0; i < m; i++)YHH{YHH}YHHs1.Stop();YHHStopwatch s2F0; i < m; i++)YHH{YHH}YHHs2.Stop();YHHStopwatch s3F0; i < m; i++)YHH{YHH}YHHs3.Stop();YHHConsole.WriteLine(G{0},{1},{2}G,YHHHs1.ElapsedMilliseconds,YHHHs2.ElapsedMilliseconds,YHHHs3.ElapsedMilliseconds);YHHConsole.Read();YH}Y}YYVBenchmarking aspx file: ASP.NET and C#VYYusing System;Yusing System.Diagnostics;Yusing System.Web.UI;YYpublic partial class _Default : PageY{YHprotected void VPage_LoadV(object sender, EventArgs e)YH{YHHconst int m = V1000000V;YHHStopwatch s1F0; i < m; i++)YHH{YHH}YHHs1.Stop();YHHStopwatch s2F0; i < m; i++)YHH{YHH}YHHs2.Stop();YHHResponse.Write(GLoop 1: G);YHHResponse.Write(s1.ElapsedMilliseconds);YHHResponse.Write(G<br/>G +YHHHGLoop 2: G);YHHResponse.Write(s2.ElapsedMilliseconds);YH}Y}V","A*AssEBBa#+CCC|F4777F74F741CECEE(BX","Benchmark."," If we have a solid knowledge of how fast code executes, we can develop more efficient programs. This opens new possibilities.","Benchmarking, notes."," With benchmarking, we can make smarter decisions. Most of the programs we use every day have been benchmarked many times.","Example."," First we see some benchmark loops. This program is what I use for my experiments. Change \"_max\" depending on the code of each iteration. Start smaller and push the limit up. ","Use the two loops here to time code. The two stopwatches are set up to print out the time.","Note 2: ","Run in a new C# console application. Adjust _max higher or lower based on how slow your iterations are.","Note 3: ","Always run in Release mode, never in VS\u2014click the .exe yourself. Change the order of the tests.","Some problems."," The benchmarking code has some problems. The second block sometimes takes less time to execute due to unknown causes. ","Repeat and swap two loops if you are doubtful. The first program shown converts the results to nanoseconds.","For ","for","It is usually best to report results in nanoseconds or microseconds with the number of iterations used to divide the result.","Convert Nanoseconds ","convert-nanoseconds","Stopwatch ","stopwatch","An example optimization."," The Dictionary collection in the base class library is a huge optimization. But developers sometimes write code that results in twice as many lookups. ","TryGetValue ","trygetvalue","Summary."," Benchmarking encourages careful thinking about your code. It saves nanoseconds from your software. It also improves the depth of your understanding."]

%iVBORw0KG;)NSUhEUg?AO8?ABsCAM?AC1ihX9)YFBMVEX::32tr31NT+/Pz/+fmdm5tsa2t.UHSzs7HwsKqqKjg4OD/8PDw8PCIh4fc29v29vbm5ua5tbX/7e3/6en/9fUJ.n5+fn/3d358fH/5eX30ND/1tb56Oj77e344eHFNZQF?AJnUlEQVR4Xuyb63Lbug6FMwPedb/ZzqU97/+Wh4BAwzKjbk+zTdfZXTP9IRFp5iOwIEJ2XjJB1PF47Fc1TU86RgEpX+Ql/lnRy1OIkY77vFE7vBnwN+eFZ+QdUBWpi6o2uNvFqsI14W2a7f48I+9wyXu84h02vPCEvNAzkfCKR3lxj/fYoJ6Mt9mmt2t6YbperJpkX+Lthbd/Rt5qj5f0z7zfsF1teJvyvOXblfDCM/L2jHRzuxLe4+N4h2Ds4WCNHu/ernrGBbSv8PZ354Wlnt5QUx0OSQbu3K5y3qYAL9HOb6fTx8fpNLeHs7SCr7Yr4d1bZN6mIC8sU8T9iDq9UXaNd84H7RTcq13JIqxqkhIv3Du7J6zmHzbijooF8C+3q3yReY/CS4I78iq27jzVCtMbAL7SnkXHWxez08bxzuYl2qleFDbm19/1TnOFBLcuCi/pvrxqmSLtPCPuiNX829YZrnT7YmpXwnvn9M5rerE5Y1q+oyS988y4WM4Gvj8v4UZeF90bvjcuqHpKuGq01rr/CO8SedvI+/rd7VvPE5k3KuK2j7Xv0YW2bcfuHxv00HmNka66CXPQrdiXq1lVkXcsjwugjLWtivImqo3Sw+eBSmEdLl3QuiUZw6G5cPBxgBrN4cCJjPal9P60VxoKPRfw3w9rbajrqrXGJOIhh12WpY6ZWSrdsgxJQkHhw5X7r4m8mMbRHqJGBXTSOH2gTt5uZRTcmbcmXppB/cFaXzuDfvLeaSTWV7iKYJHXUQF4h4OHj8i23Uw+xIuH4whp6sXbA2lYeU/MO25gjQnIe+8RNNLinIIjt/3hkbbDclXORFVXuHU9Ia3yiOte1apX7LFuWzTrIO8ipK4MstrWKwXYmoU3iraXVcH9eeNUhrjTEu1lEHdEWMXAHvLkxvUOHT5QFDG4telI0bzx/6oj6Eo7NgqzByommCfBOdqii7y4D6z725c2G3mx8tZfrlbiHitMeC9wB8RtUuOSh4rYlwd5tC/KINKFv1N7BvB2U0R3ty/jzrU7oGynFhKmDTsRnGMVO3dRoLE/YaM+hzKvbCLhTrUlWqd4LefV9DtKSDJB5RwIt0IGzqLSkQJAvDutuMpToQPI1rzGSC28ZBHErdC3QisuYl4FEVcX411qcVKLvB42aSRewZ0m4n3FB3V/yavI9wDZmwsZbfPT1dkZvgCvDN2EOy3K0tS9cvHmt8IrtxeCc9R6Ei5FVgDbp6+MtnnXIF4ula4Yr2Ri6SJuSzmbLnl5MN3cNvE2pVcpxtWX7WoRXtxEC5C56PwrIETeYzneOeFS5ZEnawETCrXIbTzwBsBQljNYG9WFfdObqWbdxMxFwtuifaGUfYlXKu8V6F568cBNiCHOvCHydozr3KipBVsPIEWTNtHHlbBv30U15ewr575JKm/zosWtjpZ5FXmxnEUHVtsp+GQTdVzqfmVfV8i+WeUNZN8t77iONtLI6Zn6v8O1rHYKcTPeXfsmXsB21bw8wL5+zSU11zl7bygzzWl2B5ExbRg7JbS5fc2Ofc8Hl7ZcOeeVR/f4lmQnnfGJN+DOTHz0iIIElNvXfWZfEPvSiXV8eQSvITbiRdyUcp14KXJKnnQ7OZFQ4g0Smts3jR3u5QH2Vcm+lB0pZw9w/UjF.Dg1k08/NK+rqR9mU0qj+1LtzbNRi0cKZVw6yaavdMG2TcUHRbyygMGS9253fDuQ+zbV3/29J0T7yPtew?TnlK72Fg3vqK93b7+px3Yl6lqgfZl+AM8crD95xH4Z2F9wb75sOCnFxkWBgeYd+O7bvUCbfB9LrthHfmtXDrJlrY5RX7llFWeTILLpgbcm8+RynDWdu1L/PSJrafz75i38Dr5YeFhnhRiyLr2QZAspYwKDbADRNX+HzWn9gxC836Dh5p3wXFuFzNEsscaGzb7dpXeNtPh4Waedm+VTlesS8OC6ZTSUOLuEHBFoNBfloElsfI4IMJMnHlw8L+B6GlZ315y0SyJqBaumgVwPY9ZhSFBx6KKNZY3hvZROYd9mb9+UGzvrwk1odMo1KQR1P43GbRXoHYlw9ouIlh1741z/qFeVFvs90CUHHDp1+Ge39/j8Tb/bHt+FNt6x6J0BROwZ59F9UVnvUJ950nePPmtTZmrdRuk1xBYeCP07s2PP+GsaKZUOzLCeZ58XP7Tsm+TclXk6wJ7atrFL9eBfj11zv5yMmxt6eI346Jfdty9s2Hhbsqf/q+WmPG8rwyphbQxr62qH3zMfXOklmfTxuRty/Gm4+phVx0fvpqW+Lpuz+mlrGv8FprvOAOOqzi+b8J2+tBa91GmfZfGhZeyvGyfe3l4dklXr9ed2F77RKv/vqwUNC+wusjLwiv1wzcMV9gdef1FmXGL9iXeIei9mVe+kgxXPCGxDus1yNdyHVIvN3XZv16GYva9/JDVbLv+tfmjdYM3APeaUJSTwFNsq/pf9u+nF9+y1SYd7DWDom37zvNwCMQX8W0fN13X2xXk/DimKqKnTaYdyH7Cq/XDOxXXrZvusb19ovtinl/0KxbzL6JN5B9Uzn3o2a5ldcHllsDxsTrv9CueBCNKsU7kdKooSClt9dJw8oX5JoCEi62q6cW88qfSCFffi0BT85L2Uw8cMULW17CfXIxTSP5PAqv4H4XXki8G76ct3lC3r/6q7/6K/my/UTH4hO+NGXxZyD8XePdQI6b+VtRHIiR9YSxGEy6OJUpjHscrmAghXDwWEAYWWAeVycOoMil5ljRPP0hvDVi5OkV3l8GShwGSn4xVoAlvX8E77zDK+UsgbvlzIGSX4oW3D+Cl3KxY98NbxaY23yPd4v7WF5x5X6Z5oF7ccyLsQzMItw/Ib2M8f/u62A1YhAMAnDUPQostEXconn/t+wPEzoRHGxP6s55Lh/4D8npnPf++4r3zrnzPAvmSha9R63Uxou9qrXcUy0558d0b5TeAi+L2ts8Z4ArweR+LeH9BONS0FFxvrKInmHu5xvorZVacNGbP1euZVzeD3qboie377V2jiZmYjQtuPO8ASskvZihTlGfL70GjjetceFddq7KX+eq2vm2XoBzRKAld4Xz1V5Z9L/ny7mi1xIZaK21hPc1nisWO+uc+14G2uleXuVwrsbni6LyPsjde65KKe1ztjLSYulde650UZyveUUCuCt+bdAripyr9nw1OJC7+VzFuxfpYOd7R+f7r7k6tDcI7f5zRa8h6RTcrX6O9FzpHGskPXtJo2K6AsZGeXYTRHF7b+h7B0V6j7fwpune+ef7zt4wLG52vj+tefmZj0hxVw)BJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AIc?ACHC)?ZjBXW?ABpklEQVR4Xu3bwY2sQAxF0ZuT03FizskxOIhKwP8jNCq1QJrNiNc947tkddSL0oMG+ijcwPso2D1wxTz66HCUASIHYHU6EqQOyMNRAJ6rFa10gGrawLJ1pYE1yyFbWQJF98rWFrGafove1TEOM2t1EQHQ6oAfcoxjHOMYxziqqtW5++yPv+GYPbYyjkq7xyo4w0O4P4IdXipH8JKVxhFwgQgcxSVXOJxr+bxjcZM/70juWo87grvyTRzx4b9HVQkcP7nHirvW8/vDueaC/ZFcS4Gj48JwzR5zXrMl2mPBDnzJ9lgaX1lI7ysz3Mw88u3ub8cxjoz7nnYE9/0yxziqSuvYe0zn2I1jHN/tMbkjIj79HMuIcKljl3rHOMYxjnFAVWkde4/pHLtxjOO7PSZ3RMTsj7/jGMc4VmYG1/J/JX0etDO94/MdVaV17D2mc+zGMY7v9pjcERGfdI6NY/4nHMc4xjHv88/76+OY7yvnPB3HOFZrWwAG2doSDAdvbQ5OQrQ2g6Q9W9xya/osl4ZQp+TLkexOAI9cwV73h6sc5KvDRA6LE/APOHkbCvNB8rk)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?AIw?AB4BAM?ADS7QcC)GFBMVEX:/95cvSaspm/zr6ppPiuqvilofiMhfa6xS0c)fUlEQVR42u3XsQmAMBgF4V9x?OCfVxAdAEdQtwg1il0fsHS8IpIsLob4OvPnKy1V7WXWR9ER8oMs8hbZ6ImZUYTTTAwMDAwMDAwMDAwMDAfmX4T7Tl3V+o1iYieKifLYs5NFLOYxUQrDAwMDAwMDAwMDAwMzA/MFUSx0GveDtlxrtujxRk)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?ALQ?ACsCAM?ADllnb2)YFBMVEX::6lbiX3axHPiH97gb7q161sqeYPl3/8vyEj4Td4Ui83XZvzfH8x7VmbFX8eob7/rLW5sn+5NiekecRAw/8xzb/3/vw8/T9/87/yPnD6/iV2/D+/um0pwjKyMj/svb+8CR)JSUlEQVR4XtSZ2XLqOhBFkTzPEzMk+f+/vGobsUFSxaJj17neL3ldrFp2k2T3v979vtvezucNQrftBkW37eb6uLdte96eaLUNikYf2xG9oT5OEK22EeYTRG+mj+sNojfTx60k1e1z921AXyF6I6qvZalUt9uCvinoK92VDfVxKtVuIN6E6itBy+6NehN1lFK2W+kDouW76vMmRKut1MeRlqot/RhKWrdKH+nPY5dpx3HpuL/WQVulj8uPPfNzfPxBbprZUL1UHC7Yzz7HL6JpK/QBHPbsriDaUH1eXTR/g1o8zlS94FNorxFC/Ak6xr6rcehjpadQNDShxheNgbk9ryEazJig8UQDuscpX0k0gBnsEP1KvdgpP86LdrP7igZ0vxj0LDMPHsygXuyUHxnMHs1ANNYtdcrTmaC57GDG5FLQlxnRTHiXaCm7ZfpIF2XGhqFwQPuo5ov+K7MY4tykNr6BrPQU8hfFeRjmJjNtiT4uKzBHh5Dmhi7yHH0sKvovwBOxSiMMHcyyOEzL87xf/inkAx+ihg5LTuSYBPVj/b+OI4o0cDQ9hnFcvPUhLej2vKRobsQHpXgaiTb6kM/lD+a2XVA0C5iawIa4yHNAgxmqc+Z9OXLjsJswzOckXkWdm8xQzb0vlz8xI2LX06iwi8KChmqc8iVEMyI2gQ90C4tQ9wFmqM6ZpzzlxRGZEdupTKBjH4UTuuDdF34ch1+ByfwETcQ6ammOe8pTXhxEffg9FaGh89iAtqnP64oGJKDd77v4sWfUcinoI/8UhqEZMQZoRO2C7lh9XDhx6D4iI2InMxHTJQczXzVfNKCNiN3Q+qUnnes+h055zIAGsLlI4aKPMCyke+iDEQfjFIahiWyLRtRyIdUpJ2hMiW7mRCNqOaN6bdHoY1Y0opYzqj37OHKZ0YeP6JiI0Yc13cedLXqWtEoRPaJ2QHv30cH0SqKFEtCL2ahjD2hQ+9/ElBVHv6NVc1EPsRG1RNRu6jXj0J+4+jXq4R1azkS9suh0p9cLRD0LbfZh18G+K8JTNLAP7qiNP5VKqYgL9MEWfeTEIYzbVKEPQ7QFHUpccr5ozinsrcZau4+kEe/QRIaoXdD8153wF421Vh9JkAzjXpl/i5rzFILZ+ynEUuuSJ/v9vrGh8dJjiebHUdkCdNTQvFdLxj6yDMyyQB:XLRxyRNC1qqTGtAUdeGGZogGM6do8bzkQCbZgRgUf5KBGVFbdfBfdw2njv7tko9lBAqeyMl5k?aUS8pmlOH0Jccml8i.IVCOgQ9UKiRcOpo9JfT6EZ/EE2KNUZ8NAHR3TKisOuI8UfmqAZzochCYIAeO5L7iv6wmJuerdo6uNNMzmnDcO;GtAj5fcroN5V0TDqSPFry+m5qShPoYhU9SZEfViojl1pPqjBmFYv2kOkom9HsoagSBqhuijzcyqQzzNfoVf75ppRD+UJQJxRs2+K6Lh1FHBbB2G0Jw8+MdAyhKBOL+ecu+KaDh1VK8ncLzk0AzrWTkFgqiLN+iO+7prOHVUeE8k4yU3kHUgZSkRCKKG6DXiwN6ZcUKS6ZLbzE00BiIRiIKm8UWDmVFHjzLwptbIgK7HQGQ9qi7yCTkv/i66YdTRm1c7IdMWcxSNgUgZ1F8PYPMxvK/xFGJvR8W62ofwC7SApkDq4gGck+o36s5TNJe5ET2OiqFZkX2FoYs5+vr6Cmnqp46jYIhmxQFsYoZmnBMLOooOhwcvKQbwp6JTFjNWpXQIoRlXG79zGf+gOzxV19JcxxItPBVXVSX0hYltzfrrqUWsXefF9AYxxhItfPXi742NpTl5vvQAPPJq8lrVrwj1Ncc61l3xY3590blqxl/XDcOEHkVRTNdcjifGUzQ/DjCD2qUZ0BoYxLRql42qEQhLNP+L/7elGTsQJuKI9NT5CPaEGyMQf+gjOw6sdiLrqJ:II+wfvqsgR0I6ynkQH9bzBj+Qf4CPdVV7wMrkCsnDtZvK72FjEVKMW4h4qAFI272GsiJIdr3nFjQSTKdE2skGdCIgxbvR9wagdwYor1PtwENze6ZcejVAQLxruNox8Hp4xuaPZgjAFyNQPxEM5mb+A06mdFsxoHFAQLhifZnDvbZDouh2TMOqH7gTsZLj8cw5cUxBZyluC2keWbvzJh8DeS2Xhz6alcjdpdBs38cUJ0hkPL6sWh/zSg4ywLSPD+TGZMvgZzWEe3+DsqNg9Y9A9nv4/mnkMHs/A76CfTdwrjri6igg9Nnor2QA2BCMzcOqJ5uS6kU1AzR/ppxtZlxYOep57LMFPW3x1Poz5wAeaKGc39oJ8m9mwIpTxSIv2jhodksOAE0Nw6orhXvbfxlIvMVLWah4ZZBjTjcO3cqkBEXgfj+w1Bt/qi8wsA8Jw7s3irVEy4CmYnDn12/oaE68IVGHG7V5YiLQDxEu9n9AuEzA7q9leX+GUg3L9qf3R0IO2jsfr6WtwyBzD2F/uzMQHAKf9upvO5mAkEcn7KbgQRQzYoD1CeNWyMQQzR7pIO8+54YxDEDvdM948QYovkTirJGMwiEGwemcWPFHluij2qXaZ/z0wtVwLygQMQcdL/z2veEi0DcS2lHGj6HRyA/2PD4EILGigPTuEpETb14L537HBRI9oPRNTduEyMOBFLv4oAaRCEY94NcLtnoFgtAbbB/EgcCUcjE/L1bdBRIirDGD+Hq6tj3VaXi+K+dM1Z1IISCqCAIW6TwIbHz/z8zELuzRYLXAwbeLbeQ3eEwztxAEuYTIK3lkvYO/H+SmPudq+c7DP09vhd6uh6A3jQMCPXWkxb/BKu+yWiX8c7wf8TgmBYot7sBKaA8fOaUeTfNNFRQHjxRopmGuhGQ0SCzMmUHIJQZTx1A+h5AyvTmkfTp7Q5IXToIMvuAwAbXZcb3moBkArLi+ATLB4SUnykzfQ42eKjM8LkOyoO3tj81AEiNyBwHBJQbMvuACOFI7wOtC+FI?SUCzILgDBIBcORPxWAgHJOCRRXtzBeRjjyC6OQQT0HIeWUGSwdBogRjnxAhFvb3ygY4cjfKBgy+xsFT2a/MFYhHIkbBWEP6hfGKoQjHxAhg/obBWNB5wOCR4cCMhD1hXBkFEYrg/p9oGQh6ruFccqcxyWwYQEy8glBY+UHVyE2m4AIMutxT5HZB6Skn5sy0pz/eQEivnC1LJWQEQ)BJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEX/6Nn:/+VlZX29va5ksB5)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC$/9j/2wCE?YEBQYFBAYGBQYHBwYIChAKCg@ChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSgBBwcHCggKEwoKEygaFhooKC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KP/BABEIAF4AyAMAIgABEQECEQH/xABg?ADAQEBAQEB)))AQIDBAYFBwgQ?EDAwIDAwYJBg8))BAgMEERIFIQYTMRQiQTJRYXGBkQcWIyUmM0KhsRU2UmJ0syQnRVNUZHJzhZWisrTR0v/a?wD?AB?I?D8A/qk)QKTclVAoVybiyFkMu4XMsgzHcZrkMxzHkO4GwGWQZAI0AgeQrhYoVxXFcLiKuBIguIsCcgyC4y7gQO4XAsCHOaxquc5Gt6qt7Ih82XX9Ojk5faEnl/QgRZPwGB9UDh07UO2yzx8iSHlY/WbO3v4eHQBgdwhkqpKgJSHDcYyOMnOGh5P4WKyoouAtRqKOpmpps4GtlherHtvMxq2VN+l0MPiOzL85uKf8AM3f9HL8NEn8W+qf3lN/yIz1zpO/7RZWQ0a254/WeFOwaPXVUPEfEvMggkkb84uts1VS+x6XhGolqOFtHmmkdJK+jhc971XJzlYirdfFTl4pk+jmq/skv+xTPgx/0T0T9hg/dtKR1zTA9Jktuo2u26nNnsPPoVcMTyXM16q4s19mlapHFHSOgxpqmPOJ2USKu6bt38x3fGev0784NGqIWf0qj+Xi9aoneanrQw4fd9NOLP7dL+5Q9UxxVycTn0nW9O1aPPTa2Go2+w7vJ629U9p9K54qOOGL4UU5MUcfM0hz34tTvLzmpdfOp7G5KkqhtcVyLiRdyFUzL9pGZMj+8ck9QjXgikKqIduY8jgZN0NFlS3UY73OvMrM+d2pDZkm3UpCkPPaJp1PrNTqdRqfOquTXzQxskldgxrXbWbex6ulp4KWPCmhjiZ+o1G/geW4JlTla5df5WqU/1IfeqNTpqWPmVU0cEX6cj0b+JYzLTJPpHrX6rYPva4D5nCuoU+pcScQT0UrZqe1O1sjemzXXsAyT1hClEOuZuAlxjL0NL7GEj1su3dOd6jQ81x5oDuJ+GKzSO19jdULG5J+XzMFZI1/k3S/k26+J574vcZ/a45id/g0X/s/QJ7cvPwOFyuzbmid7oGVjdu54uo4e4oqaaanqeLo5IpWLG/5rY3ZUsvRx6nRKT8naVRUXM5nZoGQ528rFqJe3h0OpzFNmxfJ9PAtFU12QGKl13KyTJNwSNMMreH3lsjTFuxo3clzkPH11NrekcQanqml0lNqVLWrFnBzuXM1WMRuyr3V850UHHej9o7Lqrp9HrP5rUI1i9zvJVPaeoaxt3beNkM6ygpNQi7PWUsNTTu8qOViPb7lNLGOZ5iKZkvwtQcqRr43aE9zXNX+sN3RT27VS/U8roHA2h8P8Qu1TSKaSmklgdA6JsirFirmuVUat7LdvhZOux6h9mvbt3fHchxKuKkcnnJY5tr3RF9ZnUWa/Fqe0x3IsYudY1kf317x8+pajLYr1OvBThrHpdG2XZVuU1phK/bc0i8lAncuw6RUe1G2XYdVE7DKy7F2G1/cuCtTs/gXRu2ccvO+Swsp10Ma4Ltuo7GjJEc5LHj04b1mGor/nzslDVVktTyqWJOZ33X3evRbW6IfXoeC9FgYlRUQSV9Vb66tkWZ3uXb7j7ldE7lo5qeT1Ijqf4OkeK5dBoD5cXLkd+nNZHCkcTGsY37LUsiewC6FitiuAFs8lDqM3r6DQlxm7coyRFxOd6OxVmK+s61JsYOYCKc08Kup1a3rY4MJJZYsmK3Dqqn10JczcMDRrjglZuSxu51SN3IazqaYlZbGK233QnwQU8TGNduuXgOFq4IdKRoiZIc6yqq4qZuXc0iX0mEv12IN7kqG6RpY51lW52paw+7fqhg5VwUlE+TV1yOUiiWRTpVu40ZuRTv7iHSxpk6MbXZEY7kuhZe+Dd/QdGK3HgJEsXa5zNia1e61PYhasN8dysQKaljkWBl/Ib7i2tN1YLECuhOOw2wx38hvuNG9CrAPr1G1AGgAUMSlCEqAQCl2FYhWgQpDjWwrAjRnO5plKncdt4HWpCtGiAp8Zj++rpUX0IdMCrIi7Wsd+JOJu6RHeBi2NW+J8yoY6OVH2FGx002WK4n1MAwLSXbpuZrDv12OOWFXRr5zlydy1jxU+tgGHoG2S2yidFfdDkpo1YxPP1OtiFYF4kOdfcbWWJxNMR2KRDM1RCbDshQCKsTYWJYrAFhWGiD?G?Aw?AY?CsAhF?EWFYs?zsKxpYBgZ4hiXYPEYibBYuw7DFYiw7FAILCsUACG))?AD)P/Z!