["..H$ ","","ELDPYSingleton implementation: C#YDDY/Lc<L,>D/LcSample singleton object.D/Lc</L,>DYL*sealed L9SiteStructureD{YDE/Lc<L,>DE/LcThis is an expensive resource.DE/LcWe need to only store itLSone place.DE/Lc</L,>DEYobject[] _dataL_LXobject[10];YDDE/Lc<L,>DE/LcAllocate ourselves.DE/LcWe have a L0 constructor, so no one else can.DE/Lc</L,>DEYL-readonly SiteStructure _instanceL_LXSiteStructure();YDDE/Lc<L,>DE/LcAccess SiteStructure.Instance to get the singleton object.DE/LcThen call mLCs on that instance.DE/Lc</L,>DEYL*L-SiteStructure YInstanceYDE{DEEget { L@ _instance; }DE}YDDE/Lc<L,>DE/LcThis is a L0 constructor, meaning no outsiders have access.DE/Lc</L,>DEYL0 SiteStructure()DE{YDEELcInitialize members here.DEY}D}YStatic L9eL4: C#YDDY/Lc<L,>D/LcStatic L9eL4. Note the L-keyword usage.D/Lc</L,>DYstaticY L*L9SiteStaticD{YDE/Lc<L,>DE/LcThe data must be a L-memberLSthis eL4.DE/Lc</L,>DEYL-object[] _dataL_LXobject[10];YDDE/Lc<L,>DE/LcC# doesn't define when this constructor is run, but it will likelyDE/Lcbe run right beLae it is used.DE/Lc</L,>DEYL-SiteStatic()DE{YDEELcInitialize all of our L-members.DEY}D}YUsing singleton as parameter: C#YDDY//DLcWe want to call a function with this structure as an object.DLcGet a reference from the Instance property on the singleton.D//DYSiteStructure siteL_SiteStructure.YInstanceY;DOtherFunction(site);Y LcUse singleton as parameter.YSingletons used with Lberface: C#YDDY/Lc<L,>D/LcStores signatures of various important mLCs related to the site.D/Lc</L,>DYL*Lberface ISiteInterfaceD{D};YDD/Lc<L,>D/LcSkeleton of the singleton that inherits the Lberface.D/Lc</L,>DYL9SiteStructure : ISiteInterfaceD{YDELcImplements all ISiteInterface mLCs.DELcOmitted.DY}YDD/Lc<L,>D/LcHere is an eL4 L9where we use a singleton with the Lberface.D/Lc</L,>DYL9TestClassD{YDE/Lc<L,>DE/LcSample.DE/Lc</L,>DEYL*TestClass()DE{YDEELcSend singleton object to any function that can take its Lberface.DEEYSiteStructure siteL_SiteStructure.YInstanceY;DEECustomMLC((ISiteInterface)site);DE}YDDE/Lc<L,>DE/LcReceives a singleton that adheres to the ISiteInterface Lberface.DE/Lc</L,>DEYL0 LRCustomMLC(ISiteInterface LberfaceObject)DE{YDEELcUse the singleton by its Lberface.DEY}D}Y","A*CECfCB/B(C|F666966+B(BXBB1B~CPG7666(C*CEEP9G#(CEP66666966X","Singleton, static class."," A singleton stores common data in only one place. A static class is also used to store single-instance data. We save state between usages. We store caches to improve performance. The object must be initialized only once and shared. ","Singleton ","singleton","Example."," First you can implement singletons by using language-specific features, such as the static keyword. Our ideal solution is called the singleton design pattern. As you know, a singleton is a single-instance object. ","A singleton can simplify complex code. Singletons have a static property that you must access to get the object reference.","In the example above,"," the member called _instance is a static instance of the SiteStructure class. This means it only can be created once by the runtime. Static members only exist in one place. ","Readonly ","readonly","We use"," this static reference to an actual, regular object. The Instance static property allows easy access to the SiteStructure singleton. This is a public property and is also called a getter. ","Property ","property","A private constructor"," means that a class cannot be created anywhere but inside its own methods. So it must be accessed through the singleton reference. It uses the sealed keyword decoration to improve some optimization options. ","Private Constructor ","constructor","Sealed ","sealed","Static class."," You can make a static class with the static keyword. In the following example, look at how the static keyword is used on the class and constructor. Static classes may be simpler, but the singleton example has many important advantages. ","Static Class ","static","Differences: ","There are important differences between the singleton design pattern and the static keyword on classes.","Static classes and singletons both provide sharing of redundant objects in memory, but they differ in usage and implementation.","Using static classes"," for global data. You can use static classes to store single-instance, global data. The class will usually be initialized lazily, at the last possible moment, making startup faster. ","However: ","You lose control over the exact behavior and static constructors are slow.","Singleton."," Singletons preserve the conventional class approach, and don't require that you use the static keyword everywhere. They may be more demanding to implement at first, but will greatly simplify the architecture of your program. ","Unlike static classes, we can use singletons as parameters to methods, or objects.","Parameters ","parameter","Object ","object","Interfaces."," You can use singletons with interfaces just like any other class. In the C# language, an interface is a contract, and objects that have an interface must meet all of the requirements of that interface.","Reusing the singleton."," Here we can use the singleton on any method that accepts the interface. We don't need to rewrite anything over and over again. These are object-oriented programming best practices. ","You can find more detailed examples on the interface type in the C# language here.","Interface ","interface","Summary."," Singletons allow you to reuse code and control object state much easier. This improves code-sharing, and can result in a far cleaner body of code. With less code, your programs will usually have fewer bugs and will be easier to maintain."]

%iVBORw0KG;)NSUhEUg?ALQ?ABwCAM?ACAaqqi)MFBMVEWj05zv+O7o9Ob8/vze79v::j8uH6/Pnr9urg8N70+vP3+/bf79zG4sHR6M61269duYTT?ACd0lEQVR4Xu3a646bQAyG4fg4ByC5/7vtFqlqtsV4UcvaI817Bc8P5wtBeXx38h/KhZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oiZ7oid7wvTHQm3xqCPSrJET75uHQW5Hh0E+R4dAqw6G3IqOhty6SHe2T86OLDIh+joh+jYh+aGK0/5hUbkED0h2T13cibs870NR4hRvQP7H8ejxuQVf+SPtVtN9OvgddVt7Tchntdxca+VeVRkF3/l2DQdDK72kfAQ38R1jSo6nxX1VKjq58UIPU6MLH6ZIYjWyFJSu6s91aKSda+azWM6KBnXRJh6bGbkjJ0Mh+3CAVeuGvpT0RWvmrYcmC7nyhSinQ1PhKDTKgK19Ml3B0WflyWILRyEYK0E5OOwhtz93yEYkI1ZPTDkTrEejteJCNMA4Nhx5/xLlRCNqeu+qPOINc0uJel8/h3vMK2p47RHRGXOUSGuUkvIYubAXOM2uPQyMbNZI9MswoYejOVuCMeIlDKxup88xaJQwNbLV4cxeGpsZG1fkU;ShK1uRN3cx6H+buzg0HoOZG52POMb98aob10q1e3MXh1Z7Fs5HvEoYGuxr9uYuDG0MA5CIO3dhaHTfNFZr7uLQ0Nw3jV35oCUQLVRX73VMNeYuDH36668BGQ9LawlGiyx69qZRjbkLRovYp41gzF08WqjyhbpkQBunbaSSAG1sm9mSA/122n5VUqGFkN0aJUPv8+cEkg4t0pvzKcyIFoKV7Xo6tD9/KOnQ/mmXdGh:qpkRdvf7I3Sof3TBsmKtr/ZVdKh/dPu6dD+aaNkQ/unvZZ0aP+0q6RC+8HKjUZDC2EXox88iqN9rB8Rz)ABJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEXZ7::/+VlZX29vYl5th1)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AIw?AB4BAM?ADS7QcC)GFBMVEX::0qHKhmbLDvs74yKT4xaH4yqr2tYUVUWgb)fUlEQVR42u3XsQmAMBgF4V9x?OCfVxAdAEdQtwg1il0fsHS8IpIsLob4OvPnKy1V7WXWb+J9pQZZpG3zkRNyowmmmBgYGBgYGBgYGBgYGA+Mn0QHTl3V+o1iYieKifLYq4gilnMYqIVBgYGBgYGBgYGBgYG5gfm3ESx0GvePshxrr29cII)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEX/6Nn:/+VlZX29va5ksB5)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC%iVBORw0KG;)NSUhEUg?AMg?ABFC)?qHfZE?ADUUlEQVR4Xu3XzY3jMAyA0allC2ER6sF1CNDJN5egItgDa2AFrECH3LhDSACh8U9gJ9lZGPpODmEP/DRRnHzpO0NLf6X3QsC6NWRA2LoDBKwB+XADMiAFE0DMfHgK6otRjgAwpbQgMp+ACKYAEBeUXQhYSgFquewtFAbAw/WbbFK0hfaKesYEXeppAg+S9pXsF+EhBP3EvA0pCeAJJHe3Hg0inQPgGqRE8CDvQ/poCyIBnkKoneLQST1luApZoIuPIZkpgzVtQQI8h0i7B7/tvL7VCZ@8QyEbBRQtNQNkI8gQWyAYMm2FEKWXYhvkvUWcabTVhBhBost0ZWRfXmmHYg7tPgbaAWZ6OnjK/sy6OLHLoNQdiA+WyWrBTiAsN/Kars74xjSb5Jg9tW6op6E9P/b55DuorQBKXoM8bVbVsvoMqCrEPGlgukY4ls0bkqPIb5JJt+gtILLBUjycbfZn0PgGsQ3iR954vCTkMnG6bsINf48xP8PcfUUuQyBH6F+xbioqkSPVHPO8Ce2JsjfKUVPsjX7ANXCP1adPGxQ7MhmIUZ62DWxFd8JCaj/AgLfM4iRxPFvhKSEpOqQ2aMGmVvRIKg0exWy+KBCyBztugqxo1CHxFXfegNEvQZZlS1tsb2gvROej8WGokq2Hqrv2ey/ASk2ZFX09dj8+C1nP37lJAQNwpchTVA9orr7QMQTkGxjOgcp2ZLrkPaeEoOUjYVtC0lwAkI2TqcgDzQH6nVIJUjl9CFY7I4VZOqWfutr83MIs4gw1uNXICXXfIuIiN8PBGRaoLW1GQIxY6+p56f6QyZF2IX04eMViGJuidaWGNc/neIWBHd+WAn06dfODfWJvgSh3Co/IRL88Sz+PvNK2IYo/YSodQxB0dcg3ByoHcSSCWqpaHKIRzsQpQBePIIwEeaMJPr2HKIFU4CwkO4lmACmhKszCi2pfUcpegRR7xOQt/YfQgaEme8BiXG5DWRABgQRbwGxPg/5/QZkQAaEEG8A+dBzhIjvAVHr/pABGZAByRl/HzKeIwPSNyAicgOId3fIgAzIgCzz/AlImT1SC31QmTx7rNbig6wWzZ7Y4DF72P/Z+JkvjSV6FZJ90CDRaxAfNEj0KiR6DeKDAdnrL/qaa5m7OliY)AElFTkSuQmCC$/9j/2wBD?cHBwcHBwcHBwcHBwcHBwcH.@.@.@.@.@.@.@.@.@.@.@.@.@.@.@.n/wQARCACtALADACI?RE?hEA/8QAd)wEBAQEBAQ)))ECAwQFBgcIE?CAQMBBAYHBgQH))AQIDERIEBSExURMiQWGBkTJCcXKSosIGFFJiobEkM4KyNFPB0uHi8hEBAQE?gICAwE))?AERAiESQTEyAyJCUf/a?wD?ABAQIBAD8A/pEQ)?AILgDC5Ll3EZWhKQ8LWi9opOUVx3EU5wcUso35EameFL2yig9j1raMtyKMIvqpflNEwxMqwyXYzGpPGEpfl/cwpwlOOSdlwDFa7gOdRqR/4kUpyW6Qg2ASe4YG)?AEAC?QCAjC4rkNjGm2UrONnvTMXNGkXuQXpMus56alPskvZI556JXUumm4x34ved1zOrLqf1BLdFkzUKRojmizeJdTxrDWTxppdspfsbaf+TDvjfz3nl7SqWnShyhKfnL/qdlLWaaUIpVoRajFYylb9xZ0e9u+5z6iooY9+TLjOMleLi1zW88fVVs9bCjF/5cPOV/qA9e7B9Ve7vKIiyrkq07ibFci4YNaXGQmUgBiYCEYZDKZDAibIlIcrmE7vgi5GfKk5ZSS5ysdhy06byzn5HQTyv+DhL83+lXOTUzxcY+LOk87Uyyqv3YoOHyOd6VGpzN4zRwxOiJrZGUtaVaNHUJKpHK3B5Wf6HBU2VRl6FWcPbjP/adC1FGcnCFalKS9VTi38JTkww/J489l6qDyo14P4qb/TIeg0OphqVV1Ciowyd84vNuNuw9bNhn3Bg16MH1L8xtkQ9CPujZk19BsVxN7hIsrWiZqjFGqFVQxDYiFEySmQwBADE.FyQEFXPNl1pylzlJnbOWMJS5R3HnxuacP6R+W/WNLGWsk4aSvLtwkk++fU+o3jc4dpzUdOov1px8lvK1m+f0+yqmspyqRnGlFSwjeMnkyJ7N23pv8NXlJLsp1rL4amET6nQwUNLRS9aOfxyudDDRj4GptjbegkoamMXf0empWyS5Sp4ZH1+z9S9dptPqMcHWj6PHFqUoS/tPn/tTNYaWl2uVSo/CMV9R9Lsqh0Om0VG1nChTy9uN5fMGiT09ohlkNGWt7GbY4tikt4I19MvbeLNYmMUbRJrXibEyhNEKZMzlJ8zVxMpQfYXMRdZOrJdlyfvEe1S8BThLkYSQ8jPa6VXpv1rPv3A61NK+UX7N557iGIvGDzredV1HyigijOKNoofxE/N7UkeXtPrOEOUZPz/APJ6yM6lGnWXXjfk+DI3tWdOSnrNLhCHTQg1GKxlLDG0eG81yjJZQlGS5qVzz9RsehUTwqzg+/Fr6Tw9R9n9bBuem1ML+9Upv9MipU2PL27Vqanbul0lOXVX3WhL0eNSpnP5Zn6RpLucm+yNvM+B2XsLXUdow1WrjGNOjKpPfOM3ObjJR4Sl+LPrn3ukklOUfxR3eBPK/ofD7u8koRlK6bCxVhKLKsUi5yRgijVCRQ9VIbJYyWwMmZMtmbGipbIduRbIYJQ4Q5eRjOnjvXA6Aa3MWlmuZIpCGNC0ZqpC9ozg3yUomepnhp6suDxsvHceJS0k9TBzjKMUpWV/WJXr37mcj5+po9qUd9CrJrlCrb5Z4nn1dq7W0UlGvG9+CrUvStylDEepfWMcW0007NcDl0Wp+96ajqHHB1YyvH8LUpQl/adsUGk7oVVJdbczW65n5rXqVtVrqs1Kcn0soU0surBStBQij3NO9pUElN6mK/Nk18+Rn4z1yaznffHyfYItHi0NXXaWeMv6bfsenCvlxjb2DnGrnKV0oomLViioaWSymSyiZsllsloEVkxMtoLASLCfBlWFP0RG5gKaJBnjztqTxoKK4znHyW820UcNNRXOOfxyuedtaTc6UOxQk/OVvpO2hq9NKEIqrCLUYrGUrY2jw3iU7GfMfaOacNNT7XKpN+EYr6j6ZOMleLi1zR8vtSP3naVCjxS6Gm/GV5fLIkPd0VLodLpqfbGlT88et8xvWn0VGtU/BSqT+U1SOLaMsdHVtxnKMF4y63yiDyNg0P4rO38qEn4vqfUfaHgbEpYQrT5yjBeG/wCo98z5XtrwnSsIS4xi37oOEbrFWKQ3xK43s7Ji4LqliXAZqEsRQrDJLRDRpYTQxjJoVjSwrCTjOxE1uNrESQEwaJaNnElxEWOOtpqVdLpI5W4Pg/0PPnsmjL0Jzi+/Fr6T2miXEkPm5bJrweVGtG/PrQf6ZBo9nV6epjWrKKUMnfKLcm4n0NhYiBHnbSTlCjDsc5N+EbfUenYUoQmsZq67xDHDoK0aMOjmpJZXTXeevCpCfCX+hyrS0/VyRtGhj23IvhVTzjsj3DW9mMISRtBFcY03WqGIZrCAhgMEKxQgCbCsWKwEzsS0a2FYAysQ1uNWiZISWGNyXFnRbcZtEljndyi5IVgJIx2CxNOKNTOKNURY0iompnE0RfGGpDEhmkI?D)AQwAEKxQgCbENGgNCJi0S0bNEOIBg0KxtiGJKcY2CxriGIlYlI0SBIpIWHAkaISRRUgM?s)))?ABD?mwWKEARYLFisIJsFirDDAmw7DGGAhgAw?AD/9k=!D%iVBORw0KG;)NSUhEUg?AJg?ABZCAM?AD1qB0C)GFBMVEX:/+vr6/Nzc1kZGSNjY3k5OQxMTE?ABgpITo?ADeUlEQVR4Xu1Z23YcIQxbX/n/P273lMYJRSilM4d5qB5DwAIJe7y8NqEi+noeIttPpD6S1xvyMGLZOvKGACqyu19pHTccmfwyyR41L2JGJuwunbEz224jVlv2bWJ4/j4USHGlx454JO66la3g/3Ytr82w0ZAU0hGUWc2+x2ItpolTuZpu5pT/vndzfpSvM3BkMakbcQSGlPTDpTmBksRi9wMoedxiAZQ8bjFFSnqd4xFIKTm3mBwnFnPvxek0ZnOJ83U6jcmOxRTUUj5JKbFBMu34Tdi18JVBSJ8LG7cQz7cW8ir0SfVnhEFJbQv4JABMwlEUmkU1Fx20Ex2UlIZR4SsAcqJWCa5th8Gt4jQWpSxEjLNg42azcUEiYGJ1J62jdaQV/EuOMTMcoI2wfp1cVFWMtwkyH4/1PJEYhLdBBxsJhH2OolkDa2KAL0uvNicWU0ktZh2MLVd21AKzukG8IlDtsqmuiAk4Cf8uMVlZGIfAMfogTCKXERM8tCDmaBIpHNSLupB6qaXOhwRuBnqR98K4SkNiiebYdxsGZ8TIdw2Y6JsW4140EhsO+lTJwALggsZPFLsf6JxcAKJUsk5Htog5UB9YjKY7fqKcWAlGBCAWo5d2h1hyAbjF+IlyYuOY86zJLcZPFBNLsLL+lQC8YeEFhKcLGcNzAXhPzG83/zLxCr+RXoNITgqIL+LYoOReBc+9gmWLOLUqEGDfYryAkGzhWIB7LRYL74eZ6WUW4+mVe5/Hu99izvZ1v8UE0y4lOfwKi/GCpZA2FeAmi/FRLsC+xfjt5mF4+8AtRkLvbAtflssspmA2HlQNLEBuZxV+u2vQkRSmSADjku9X8E;Z?llBLjkvM8ZVjIJA81VEojJxYV?opQIiZZgLX47888BcXbjBrBbIeI2b0fVYJL/QbqaKjlLcIoeK+INYvUKgL8ErLoO+znJi2AezMCzJYrJA1pInfLLCUtVMcsgQZEYsNprxHVSZXFS7rLGA63lvBZGox08lOU8ltLwNAZulokcjP3AO3gFLUypMYVrwGhH8cuC/X6BHNg1Rw+Vgxnb/ViZUrR0R/a2OI+i/2kahvvI6j+oHD4N/n53H+pX+/BTxvsfbfYhst4KPQznufpddnwU97n/bgT81i9lQl83nZ9XnpItSH78x4ACnLNoPJcQ0B9HiWALhAzR98s0wlubKPew)BJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AK)CFCAM?ADrcAOa?ABgFBMVEU?AD:/9hY2IbHRqiqJZ7g3iPlIzu+9v6/ejz/ebv/N3+/vbn+s31/ej+/u/q7PT8/vP:vL4/M77/dtOUU64vp/7/frFx74uMSzc9dr3/fG4s879/OTI0OXN8sPy9PnI8Lzx+/Cn2Mzo+9jbxNbk6PPqycz77tP7/dTw/Mv26ej88t357uu/x+Lb+b3DzeKcweLE77zW3Oz99+vFvMf779bJ96j7/u/U1NTk+ce4w97f4N82PS89OkD4+fk+SD/C2afa4e3b5MTl6tnq8Nzq+ern1eX99OPK7ML:O/55LjV2cPw8fjw5e/M9rzr3+qq7MfT9s3x3t/L5uWw7M7k+ODE3trizNv4+8blv8PP+LDV6+rTtszH8Lqt2c/y2s7HrtWhx9zC8rG13tO37tK/8a33/Mud6Mrn/bv2+8SfzNr79PL9+O389vXy9Lzj8uL558Gi6sTlu771+73Qscn++/Hu09XOstLQ7sr44bDB88rCqdXm6rf19NbP+aX33KQ7zRWn?AGGklEQVR4Xu3bVXPrOBiAYRnDzFxmZmY8yMzMsMjw11eq9bmOJW3TZHuiOeP3JpPJzTOfLVV1UxRNRK1C7uJ+YQFuQR+v7kVuY87Cvm5RKBFKWIWY5uPx+DwXGOEWCPLytQiMJkTA+DzOzwcGOEUCPuJxFez+akAP6AE9oAf0gNs53VDX8xpCSNNW06ph6pncwk6xGIm0HxjJmauIn5Y2zJnlYrwYbB9wR8+jkzIVRSm2BxjQNYQkBp5fB0PaLC0sb49E/JGdne3zuYxuGqo9Wr1dwAwFqDM1JTvPrmLfFl47aQ1lsooSEQFXVlZWF7LZbhZIPwk2DdQtnrGsKCHMAyDT1nbAFxAuEoRbUBQOkH4SaBJIfWnMU+ab2AfPHJizxreGxwc6qYDbGtz+cb+UQBX2D5gfACNsBMjJ1yKw7C9b+aP+uqLlVCpDfGoW+5J1DYY5dYdJi0xORth2uYFBIVCUP5UcJBug1osHmBysK7zI8MB2hkC/C1hOZuAG9Nf7XoX5nS3Q7ypaHlCxL79GBuhqUNwbfpQxKPwk4OOHUuXUUWWm1BYMMOCaSfgqvyp++ZXpgEQZhQMmCvxc4IcGoJQ7n0mAMQwcc/f7DU4vblzBPWLqIlHGrS4mCrx/nR+iMOxjgGSJqNhXZIEvuBHmc6YuogQg628aaF3hGQzslhJIN8ELcIUlBBrYl4YrLCNwhZ6SA5IC/7JvQUmB5wmQHAMXZQTCGlmDNSIh0MS+VezLy;0YJuWFZjGQAMWcRPAddRsNUVpBJinJ4WgrECEK8EuIyFwhwBzLQDVdFo9jgDgPST65MLaWgPALbq6lHCbFwmA+Pv0GQK7GgQmBWUAOHaPbfL1FV7fiQ+sjU7wvjv09g6/DByn780x/X3l9XeiuphcQBjfcx7wPhO60wYg1BJQpwteXiCcFeZkBirSAT0ggOUFQg0D3wqygc/Y5h69E1biRxm3Z5;8PLeUfjFCt42CZx4ymti4unEH/woo+dHuwc0Cty7TdpjahHI1ijwAQQT/DaBNQx8KCkwIz0QDguXZAb2SgzcgANrVWbgAgZelRT4JwHmJAZ+gqdvBdmAkEafLNw8AyCpUeAPotYx0CTAl0xzXU0DqQrzemh1h4XLTGKgSp9u7Z4G+O4Y2NKThYt2YqCJgesYWGwSuNrKs5lGgDrCZbFQVqC9U3dICvxkb4TNAe2ekOBE/QDqcS2Si3skYDUCvLMCy1hWoEr/0tQpK9B+tvBMUuCGfRNKChxboc/5d2UFGhio1eAaywOExjbgOwuF1oDOw8IvUA:Z/FpJvjmZRoD81lFyZ7iNPOE6cgDE7wL9d3us4IJXiNdHKrT4bfoFZR0NbA4qSNchmyFHXVdGl8S9j3TkYcyvvwDnYMocLifNLzvDoBsGDhJlokWwyOstgs4/J/ADh3RM1enpMCONIJztaTADc0Wygm0LjIysyCUDIgzEUldxvdhVTrgQ5KBjjJjeIjVh0dxgaXS0tL4KAUyUcY5G/gb5AIO1wVAwT5ozctEVkZuTeksVMkEby2NHrdU0k01rSG9llU2R+8yObfjL7brC0SBRDY7u+9qeh8lRQ2EJ6tWmTwlaqo5s7D8uXD1eqUyvlTCMMNQV53fRO+t9DH9TKKMfts1C0OiwA/TpA/uphsBVg8MDdWlib7LH2scCAHQmhh2OjsRCG0AUZyGgdk2AKEDXWjUVEPPLcd6p6YqlfYAoQ3dUNN5y6nlrX/JKY1PbW5OVcZJFT6Q9hhsALTrx4sB1zoQunRrdJxJSqAH9IAe0AN6QA940om6gxcGcrLQbt5dAPY9PuesH6o76QPMAUxBZXfBgrDNKW6buGvChmad7Tv78JMVvDpCcVGJ4q6ozpi4Eab3ViPTZWdRZ4mQMDQvKhq5KRTGeoUNMVHn0Egd8LCuUMLqlEAcH9jbFDAlBiaaAXbunnKCMRLHB4knmBBOMGED4+5CxU5htQu8aqT37j7aRROijj1MxxM8A6BLeHgsOmwNCKu4USB0EtDZNwL0gB7QA3pAD+gBPaAH9IAeMP7:k7ykYIgx9uEsJBIGPoqEwTpYV0J5zjFE/wXzd93x5vnhJo)ASUVORK5CYII=!D%iVBORw0KG;)NSUhEUg?ANM)8CAM?ADLy3+8)MFBMVEX:/9/frjX1+inp81WUaW6udfGx97q6fIbDJDr+PfE7Onc9PLN7+zT8e/0+vu56eUR9Hoq?AEp0lEQVR4XryXzQ7DIAyDfc0fe/+3XTeph4YGI5D4jiSo2HMQA+TzRNDhzw7FD30uOjr6JsMf+czj4PATI1GozqsNYDsVpzS1fGQiOuplslOOaUIkN4nmVrhN3XKc04ScraFkq0JrzKx2UpMla0Zma10hXhlOaoIOJipSjZRqq3BWkwy8SSUyL7VTdlgTvHTcipngRUnJXNMkWCU7TmaiqMbAJ1nTZFgnjwabCV5uyaUlTYoNWuG4FmbTmYGNYlnBHiccPhpSu8YadCVCvpU84njwn2ncIao5lBwjydu8z1u/Fnyb48b1B/GbvsJ28V5A8E/AX3uaX6gq8Zv8M9lG+jts5hPy2iRxcYuS1SfaPpEl2FS4463LLv6i5g8n28PE45yyIFPbvqyX65brIAiFQckFCfb93/aUkIacrprRzuwfNWp15RPc0cLWMiGtK2EuO1QdzLzyVFdwx4PP3J@ekEqCpBoPfSw7JOBLCmuzlHjfl6014P+Y6rLiUSWfL2ZV1ybS+GvxN+duySYNmU0minNGbNuW2HoUd0OIlUxVfgzbS0muNWVSSxCFaAyi3YvuOh2EjHzONJ4oLjLhYNpAYMypgpgDQBR+uO04Eq5Qs30LNX4ffC0ZLr0vPCWbAmAE8QUqSLtM+49r4fcMuZBXy0XJtpzz5lUoMWUyep0GAqKqAXp7IgecFkt6jGFVabrsqWGMY9ezPjCNPkrYWIRhQbTKTrKSUy8fuhxBlwJ0erzyUTnjOTtyRrv/Dyk3RuxlE0EVxeK8A0TJdyLeTYu5JOJJmuJHmeYk/1E3bnRa9navciNNBo/S/LJpMIzORQJ3DAtsBypkqw0JuZrS3pf+JSz1YMJz83m7WjTdtmEDDimMQnX2WOV75jeepiFnenzGHMM13VZXE6TwKPVE6guY63XQJmVGxWNMJlqk6k6UTDF08slskV16rPzrf9sE0zgrzfE1IhT7JgELSZzCbL/1M7PLncHyo4CSbjWM8XDYNOvmMjft8mU3QfxLkzjx345woQrTinlsCwMD/vAVJ9yJpEGU7jK3GRa1l3z7W4av3EeTJH4tJy57rplkqeaTL4wuDaZYO+j++PouE3IzvQIpAQu8mr+yPTKODG1PSL5HNRi8hDmlnsNfnVDvp/m7GsaDnQc3KYPTM6yl6rK0GSChGYSYQPvTHVtOIQ+GuKB5FMx9YxgET319aUpcg+H7k+llynuQB1WqbqFylbhay2GRPUng9DhQL3cfFcHk4FcxPC1cpx278Kkb3urh8mhXAo/SQInBgwrrBX/NWsGKRCEMBAElmWJ0fj/3y7McZQapCeQ/KCwCZjqR69r99vYgRcGppzb1+/6si2znvPidJ8fCb4A4Xo+n2886xpfLEN/l6mBj0u6r2zSYQKTrjB0r+EbzCYzcXlGH85CbDinC0ypCoOzwJ2i@jyk4cGPUjz6kzn2lb3NB19vM50QxoG85amMeoU6UxjJpc+YMFBK0xh8pnCxPk2WLo6U8wUJt6sjYIyZKaWw8RhMBb8KtNMY8J40UP1uky0BhjZKjNBV5eYW1Um7i1xNr0yE3TfUR5GdaatP+OH6rWZ/usREj10r/sZ)AElFTkSuQmCC!