activelock-development Mailing List for ActiveLock (Page 8)
Brought to you by:
ialkan
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
(52) |
Aug
(170) |
Sep
(34) |
Oct
(62) |
Nov
(46) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(7) |
Feb
(2) |
Mar
|
Apr
(17) |
May
(14) |
Jun
(31) |
Jul
(59) |
Aug
(18) |
Sep
(3) |
Oct
|
Nov
|
Dec
(5) |
2005 |
Jan
|
Feb
(10) |
Mar
(3) |
Apr
(4) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: SourceForge.net <no...@so...> - 2003-11-30 05:35:06
|
Bugs item #786272, was opened at 2003-08-10 14:49 Message generated for change (Comment added) made by th2tran You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=526385&aid=786272&group_id=70007 Category: Coding Problem Group: Development Team Status: Open Resolution: None Priority: 5 Submitted By: Thanh Hai Tran (th2tran) Assigned to: Nobody/Anonymous (nobody) Summary: LastUsed property may not be working properly Initial Comment: Issue reported by Antonio Banton(?). ------ If you generate a "periodic" licence liberation key and you play around with the system date, the sample application works with no problem. Here is the test case: 1. Open ActiveLock2 Test App and go to Registration tab 2. Generate a request code and copy it into the Admin tab 3. Select Licence Type: periodic 30 days 4. Apply the key to the registration tab (click on register) 5. Exit the application 6. Move the date forward 31 days 7. Open the application and you get "License expired" message 8. Close the application and set the system date back 9. The application continue working without any problems ----- I think the problem may be LastUsed is not updated if "License expired" condition is met. Needs further investigation. ---------------------------------------------------------------------- >Comment By: Thanh Hai Tran (th2tran) Date: 2003-11-30 05:35 Message: Logged In: YES user_id=797792 Also see <a href="http://www.activelock.org/boards/index.php? showtopic=73">discussion topic 73</a> for more info. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=526385&aid=786272&group_id=70007 |
From: SourceForge.net <no...@so...> - 2003-11-30 05:12:14
|
Task #89741 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0 General Summary: Implement TODOs in discussion topic 72 Complete: 0% Status: Open Authority : th2tran Assigned to: nobody Description: http://www.activelock.org/boards/index.php?showtopic=72&st=0& ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=89741&group_id=70007&group_project_id=29689 |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:56:18
|
Update of /cvsroot/activelock/activelock/tutorials/vb In directory sc8-pr-cvs1:/tmp/cvs-serv32217 Modified Files: BasicTutorial.html Log Message: more correction Index: BasicTutorial.html =================================================================== RCS file: /cvsroot/activelock/activelock/tutorials/vb/BasicTutorial.html,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- BasicTutorial.html 26 Nov 2003 06:52:20 -0000 1.3 +++ BasicTutorial.html 26 Nov 2003 06:56:15 -0000 1.4 @@ -322,7 +322,7 @@ </pre> <p>Then, you handle <code>ActiveLockEventNotifier_ValidateValue()</code> event like this: <pre>61 Private Sub ActiveLockEventSink_ValidateValue(ByRef Value As String) -62 Value = Encrypt(Value) +62 Value = Enc(Value) 63 End Sub </pre> <h3>Authenticating ActiveLock 2 DLL To Detect Cracking</h3> |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:52:24
|
Update of /cvsroot/activelock/activelock/tutorials/vb In directory sc8-pr-cvs1:/tmp/cvs-serv31801 Modified Files: BasicTutorial.html Log Message: minor change Index: BasicTutorial.html =================================================================== RCS file: /cvsroot/activelock/activelock/tutorials/vb/BasicTutorial.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- BasicTutorial.html 26 Nov 2003 06:43:12 -0000 1.2 +++ BasicTutorial.html 26 Nov 2003 06:52:20 -0000 1.3 @@ -47,10 +47,7 @@ <center> <h1>ActiveLock 2: A Basic Tutorial</h1> -<h3>by<br> -<a href="mailto:th...@us...">Thanh Hai Tran</a><br> -November 05, 2003 -</h3> +<h3>Last Revision: November 26, 2003</h3> </center> <hr> <p> @@ -373,6 +370,7 @@ <a name="revhistory"><h2>Revision History</h2></a> <blockquote> <pre> +11.05.03 - Thanh Tran - Created. 11.26.03 - Dan Keeley - Added instructions for VB.Net - Some other minor corrections. </pre> |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:43:16
|
Update of /cvsroot/activelock/activelock/tutorials/vb In directory sc8-pr-cvs1:/tmp/cvs-serv30695 Modified Files: BasicTutorial.html Log Message: Updated with VB.Net instructions and corrections - by Dan Keeley Index: BasicTutorial.html =================================================================== RCS file: /cvsroot/activelock/activelock/tutorials/vb/BasicTutorial.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- BasicTutorial.html 26 Nov 2003 05:57:00 -0000 1.1 +++ BasicTutorial.html 26 Nov 2003 06:43:12 -0000 1.2 @@ -66,12 +66,12 @@ <li><a href=#step5>Step 5: License Registration</a> <li><a href=#step6>Step 6: Let's Get A Little More Advanced</a> <li><a href=#resources>Resources</a> + <li><a href=#revhistory>Revision History</a> </ul> <a name="disclaimer"><h2>Disclaimer</h2></a> <blockquote> -<pre> -USE OF ACTIVELOCK 2 TUTORIALS IS ENTIRELY AT YOUR OWN RISK! +<pre>USE OF ACTIVELOCK 2 TUTORIALS IS ENTIRELY AT YOUR OWN RISK! THE INFORMATION IN THESE TUTORIALS ARE PROVIDED "AS IS" WITHOUT WARRANTY, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ARISING FROM @@ -108,8 +108,8 @@ <li>Click the <b>Generate</b> button to generate the Product Keys. <li>When the Product VCode and GCode generation process is complete, click <b>Add To Product List</b> button to add/save the product into the product database, to be used later for license key generation. - <li>Make note of the generated VCode. You will use this code later within your application. - <img src="images/alugen.jpg"><br> + <li>Make note of the generated VCode. You will use this code later for the "SoftwareCode" within your application. + <img src="images/alugen.jpg" width="590" height="404"><br> Note that because of its length, the complete code may not be fully visible in the text box. You'll need to double-click on the text box and do a Ctrl-C operation if you want to copy the entire code. </ol> @@ -122,8 +122,9 @@ <li>Open your .vbp project in VB, and then select <b>References</b> from the <b>Project</b> menu. <li>Scroll down on the list until you see <b>ActiveLock Object Library 2.0</b>, - then select by clicking on the empty checkbox beside it. - <img src="images/addref.jpg"> + then select by clicking on the empty checkbox beside it. Note: If you dont have that exact library + then check you've installed the latest version of Activelock. + <img src="images/addref.jpg" width="449" height="357"> </ol> </blockquote> @@ -133,15 +134,13 @@ <ol> <li>Somewhere within your app, declare an object reference to ActiveLock2.IActiveLock. <blockquote> - <pre> - 1 Private ActiveLock As ActiveLock2.IActiveLock + <pre> 1 Private ActiveLock As ActiveLock2.IActiveLock </pre> </blockquote> <li>Also declare a reference to ActiveLock2.ActiveLockEventNotifier so that you can receive COM events sent by ActiveLock 2. <blockquote> - <pre> - 2 Private WithEvents ActiveLockEventSink As ActiveLockEventNotifier + <pre> 2 Private WithEvents ActiveLockEventSink As ActiveLock2.ActiveLockEventNotifier </pre> </blockquote> @@ -149,8 +148,7 @@ and add these ActiveLock initialization code: <blockquote> <code> - <pre> - 3 ' Obtain an instance of ActiveLock object + <pre> 3 ' Obtain an instance of ActiveLock object 4 Set ActiveLock = ActiveLock2.NewInstance() 5 6 ' Specify where the license file is @@ -173,6 +171,14 @@ 23 ' Specify Lock Type as Lock-to-HardDrive. ' The System drive (where Windows is installed) will be used as part of the lock key. 24 ActiveLock.LockType = lockHD + +And with these differences in VB.Net: + + 4 Activelock = ALGlobals.NewInstance() + + 7 Activelock.KeyStoreType = ActiveLock2.LicStoreType.alsFile + +24 Activelock.LockType = ActiveLock2.ALLockTypes.lockHD </pre> </code> </blockquote> @@ -187,8 +193,7 @@ <p>OK. So now you've got ActiveLock successfully initialized. At some point in your application's lifetime, it will need to check for a valid license. This is accomplished by calling IActiveLock's <code>Acquire()</code> method. <code> - <pre> - 25 ' Attempt to acquire a valid license token + <pre> 25 ' Attempt to acquire a valid license token 26 On Error GoTo ErrHandler 27 ActiveLock.Acquire ' Acquire will raise an error if no valid license exists. 28 Exit Sub ' Exit Form_Load() @@ -202,7 +207,7 @@ <code>RegisteredUser</code>, <code>UsedDays</code>, <code>ExpirationDate</code>, etc... For further information on these properties, refer to the IActiveLock interface in the API Documentation. <p>OK. Based on what you've done so far, if you now try to run your application, you should get this error message: - <p><img src="images/nolic.jpg"> + <p><img src="images/nolic.jpg" width="186" height="100"> </blockquote> <a name="step5"><h2>Step 5: License Registration</h2></a> @@ -213,8 +218,7 @@ the installation code. Let's also add a text box for specifying the registered user. This way, the registered user will now be part of the Installation Code, which means that the liberation will not specific to the machine, but it's also specific to a particular user. The code that re-computes the installation code might look like this: - <pre> - 32 ' Re-compute Installation Code when "Registered User" changes + <pre> 32 ' Re-compute Installation Code when "Registered User" changes 33 Private Sub txtUser_Change() 34 txtInstCode = ActiveLock.InstallCode(txtUser) 35 End Sub @@ -236,7 +240,7 @@ <li>Click the <b>Generate</b> button </ol> <p>Congratulations! You've generated your first ActiveLock 2 liberation key. <br> - <img src="images/keygen.jpg"> + <img src="images/keygen.jpg" width="590" height="404"> <p>Now back in your application, you'll need to provide a way for the user to input the liberation key for activation. Again for simplicity's sake, I'll fall back to my favourite TextBox and Command Button combination: <ol> @@ -244,8 +248,7 @@ <li>Add a multi-line Text Box and name it <b>txtLibKey</b> <li>Add a command button and name it <b>cmdReg</b> <li>Add the following code snippet to the cndReg Click event handler: - <pre> -' Register the liberation key + <pre>' Register the liberation key 36 Private Sub cmdReg_Click() 37 ' Be prepared to handle registration error (e.g. invalid license) 38 On Error GoTo ErrHandler @@ -258,7 +261,7 @@ 45 End Sub </pre> </ol> - <img src="images/keyreg.jpg"> + <img src="images/keyreg.jpg" width="588" height="274"> </blockquote> <a name="step6"><h2>Step 6: Let's Get A Little More Advanced</h2></a> @@ -274,9 +277,7 @@ <table CELLPADDING="0" CELLSPACING="0" border="1"> <tr> <td> - <pre> - -[MyApp] + <pre>[MyApp] ProductKey=AAAAB3NzaC1yc2EAAAABJQAAAIB9JNUb5AAI7xnlCRB2muU0PO/Q5jY/hVz1y..... ProductVersion=1.0 LicenseType=3 @@ -303,8 +304,7 @@ your encrypted value, and computes an MD5 hash for it, then saves it as the <code>hash1</code> value. <p>Here's an example of a simple encryption implementation: - <pre> -'' + <pre>'' ' Simple encryption of a string: simply multiply every character's ASCII code by 11. ' 46 Private Function Enc(strData As String) As String @@ -324,8 +324,7 @@ 60 End Function </pre> <p>Then, you handle <code>ActiveLockEventNotifier_ValidateValue()</code> event like this: -<pre> -61 Private Sub ActiveLockEventSink_ValidateValue(ByRef Value As String) +<pre>61 Private Sub ActiveLockEventSink_ValidateValue(ByRef Value As String) 62 Value = Encrypt(Value) 63 End Sub </pre> @@ -371,6 +370,13 @@ </dl> </blockquote> +<a name="revhistory"><h2>Revision History</h2></a> +<blockquote> + <pre> +11.26.03 - Dan Keeley - Added instructions for VB.Net + - Some other minor corrections. + </pre> +</blockquote> <hr> <small> ActiveLock<sup><font size=-2>TM</font></sup> is a trademark of Nelson Ferraz <br> |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:06:02
|
Update of /cvsroot/activelock/activelock/tutorials/vb/src In directory sc8-pr-cvs1:/tmp/cvs-serv25730 Added Files: Form1.frm myapp.lic TutorialApp.vbp Log Message: Source code for the tutorial --- NEW FILE: Form1.frm --- VERSION 5.00 Begin VB.Form Form1 BorderStyle = 1 'Fixed Single Caption = "myApp Form" ClientHeight = 3735 ClientLeft = 45 ClientTop = 330 ClientWidth = 8730 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 3735 ScaleWidth = 8730 StartUpPosition = 3 'Windows Default Begin VB.CommandButton cmdReg Caption = "&Register" Height = 375 Left = 7560 TabIndex = 6 Top = 720 Width = 975 End Begin VB.TextBox txtLibKey BeginProperty Font Name = "Courier New" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 2895 Left = 1320 MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 5 Top = 720 Width = 6135 End Begin VB.TextBox txtUser Height = 315 Left = 1320 TabIndex = 1 Top = 0 Width = 5055 End Begin VB.TextBox txtInstCode BackColor = &H8000000F& Height = 315 Left = 1320 Locked = -1 'True MultiLine = -1 'True TabIndex = 3 Top = 360 Width = 7215 End Begin VB.Label Label3 Caption = "Liberation Key:" Height = 495 Left = 0 TabIndex = 4 Top = 720 Width = 1215 End Begin VB.Label Label2 Caption = "Registered User:" Height = 255 Left = 0 TabIndex = 0 Top = 0 Width = 1335 End Begin VB.Label Label1 Caption = "Installation Code:" Height = 255 Left = 0 TabIndex = 2 Top = 360 Width = 1455 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private ActiveLock As ActiveLock2.IActiveLock Private WithEvents ActiveLockEventSink As ActiveLockEventNotifier Attribute ActiveLockEventSink.VB_VarHelpID = -1 Private Sub cmdReg_Click() ' Be prepared to handle registration error (e.g. invalid license) On Error GoTo ErrHandler ActiveLock.Register txtLibKey ' No error. This means success! MsgBox "License was successfully registered!" Exit Sub ErrHandler: MsgBox Err.Description End Sub Private Sub Form_Load() On Error GoTo ErrHandler ' Obtain an instance of ActiveLock object Set ActiveLock = ActiveLock2.NewInstance() ' Specify where the license file is ActiveLock.KeyStoreType = alsFile ActiveLock.KeyStorePath = App.Path & "\myapp.lic" ' Obtain the EventNotifier so that we can receive notifications from AL. Set ActiveLockEventSink = ActiveLock.EventNotifier ' Specify the name of the product that will be locked through AL. ActiveLock.SoftwareName = "MyApp" ' Specify our product code. ' This code will be used later by ActiveLock to validate license keys. ActiveLock.SoftwareCode = "AAAAB3NzaC1yc2EAAAABJQAAAIB9JNUb5AAI7xnlCRB2muU0PO/Q5jY/hVz1yF6Uvjyjm56QX6KxDYMGsOraAZZTGKX+i29P3dHT87ORyX8Cesb0/aicgA5ZBAyUEVHgYH20SqjtIOSZYTGyGfzrpecWXDKz0zWcNala+TA8jGasV2iKb5zsSdsG3Ces9kNPomLHMw==" ' Specify product version ActiveLock.SoftwareVersion = "1.0" ' Specify Lock Type as Lock-to-HardDrive. The System drive (where Windows is installed) will be used as part of the lock key. ActiveLock.LockType = lockHD ' Display the Installation Code txtInstCode = ActiveLock.InstallationCode ' Attempt to acquire a valid license token ActiveLock.Acquire ' Acquire will raise an error if no valid license exists. ' Do some queries on the registration status, such as who it's registered to, etc... txtUser = ActiveLock.RegisteredUser Exit Sub ' Exit Form_Load() ErrHandler: MsgBox "ActiveLock Error: " & Err.Description End Sub ' Re-compute Installation Code when "Registered User" changes Private Sub txtUser_Change() txtInstCode = ActiveLock.InstallationCode(txtUser) End Sub '' ' Simple encryption of a string: simply mutiply every character's ASCII code by 11. ' Private Function Enc(strData As String) As String Dim i&, n& Dim sResult$ n = Len(strData) Dim l As Long For i = 1 To n l = Asc(Mid$(strData, i, 1)) * 11 If sResult = "" Then sResult = Hex(l) Else sResult = sResult & "." & Hex(l) End If Next i Enc = sResult End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ActiveLockEventSink Implementations '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub ActiveLockEventSink_ValidateValue(ByRef Value As String) Value = Enc(Value) End Sub --- NEW FILE: myapp.lic --- [MyApp] ProductKey=AAAAB3NzaC1yc2EAAAABJQAAAIB9JNUb5AAI7xnlCRB2muU0PO/Q5jY/hVz1yF6Uvjyjm56QX6KxDYMGsOraAZZTGKX+i29P3dHT87ORyX8Cesb0/aicgA5ZBAyUEVHgYH20SqjtIOSZYTGyGfzrpecWXDKz0zWcNala+TA8jGasV2iKb5zsSdsG3Ces9kNPomLHMw== ProductVersion=1.0 LicenseType=3 LicenseClass=Single Licensee=John Q Public LicenseKey=AAAAB3NzaC1yc2EAAACAQpQF1xrjJcxyKJO8oO7fb2XgDMFwpHmYMSHKje/4tsj/WiOdqgrEm6qs0Vx0tnM8xco2VyPZRuuLYWRLShy1wkiAy01+Hh7l4QrCf6CP3qOcP+mTY9zymBnMOvlVGeBPCj24MC0MzieDEF2Byf7XprTiBZLG8eXS8SuIOtEmwjQ RegisteredDate=2003/11/02 LastUsed=2003/11/10 23:52:17 Hash1=8a5fc6a619c931b7509adc6da3cef35f Expiration=2003/12/02 MaxCount=1 --- NEW FILE: TutorialApp.vbp --- Type=Exe Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\WINDOWS\System32\stdole2.tlb#OLE Automation Reference=*\G{C3B56087-6690-42ED-8914-633AA166AB41}#1.0#0#..\..\..\bin\activelock2.dll#ActiveLock Object Library 2.0 Form=Form1.frm Startup="Form1" Command32="" Name="TutorialApp" HelpContextID="0" CompatibleMode="0" MajorVer=1 MinorVer=0 RevisionVer=0 AutoIncrementVer=0 ServerSupportFiles=0 VersionCompanyName="Karora Technologies Inc." CompilationType=0 OptimizationType=0 FavorPentiumPro(tm)=0 CodeViewDebugInfo=0 NoAliasing=0 BoundsCheck=0 OverflowCheck=0 FlPointCheck=0 FDIVCheck=0 UnroundedFP=0 StartMode=0 Unattended=0 Retained=0 ThreadPerObject=0 MaxNumberOfThreads=1 [MS Transaction Server] AutoRefresh=1 |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:04:35
|
Update of /cvsroot/activelock/activelock/tutorials/vb/src In directory sc8-pr-cvs1:/tmp/cvs-serv25571/src Log Message: Directory /cvsroot/activelock/activelock/tutorials/vb/src added to the repository |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:04:08
|
Update of /cvsroot/activelock/activelock/tutorials/vb/images In directory sc8-pr-cvs1:/tmp/cvs-serv25471 Added Files: addref.jpg alugen.jpg keygen.jpg keyreg.jpg nolic.jpg Log Message: Supporting images for tutorial html --- NEW FILE: addref.jpg --- ÿØÿà «àã(©·ðçEÙ´²wivÒúkyÖØJ'C}Þ¸4# õ©/VV¼òÔðÎõ=uøãXÅRfÑ·ÊÖkö/M|¾u}'uýÓ'¯[ºEÛnQû Sº¹©¢[§Ú³,{ÙBY9Ðܪ«½Ò!êêDLÖâéeC ºn÷ù1Yº5t1ô¦.M::¤Ú °«µG©û±O_Åûÿ úf«q§ò_«~4v!w3X¿>5¿¸¼=ÜYNÈ'Ó.l-Â**µ{SXö[Û ?çOQ5zâRÚ½~Æéßò¯´ã®_±ºwâüªÕªôe\íi©z}½@s#[®Öhâ²He£Ä@Ùäñ1ÙÖÞéFgÊfϦû¸Ðêæm¯HçDl4ou´bË2!ÜyÇaeRºµ§üÓîÖòTµ~Æéïò¨Ü`×Â1ر¶ôÚ¤î\òEÀåz=«Q-jcZ£híüôÛ}çÒytå´þÖ7ø[G´W~îÄ«e® MX»´VÖpßk§ÉîÁ$0ÁgÁÛéyÊ¢×U#eÃý¸;»9ìóÅüµÕ´ã^«_±Úâü«ìxÓªì}â?üªÖïô³3d5iÓÝÛhuc6çû)0Ù»ÖÑ',Èqç ®1¨#C¨.0íÒ:D(òj3ÛÐùª n¥Ê".S©kJöJø*àçN3jû`øÿ Ê2T<`ÌÕò]wµúÒÓñ1¯´âé~´´üLj5{*d¨x¾KkëÊýkjøÖA× úÖ×ñ1ªxÖQ¦Jfjù-înëõ¯âc_cîËõµ³âcU1¬¡Rv*&f¯Ô:Òê¿[[~(5öÆè¿[Û~(W Ê52t<S3WÉfM_s_íß ûMYr_íß«cÛYF¦Næjù,Cª®+ýÅ¿âóWØê{ÿ ÊÉÐñLÍ_$øêIëýÄÍ_c¨§/÷0~*5Ae :&f¯luÕþæÅC毱¾Ì_î¡|T>j Ê4ÉÐñ35|éz¿ÝCø«5nA.KFæûsBÙª¹zÔ³mûU¨©{_ö\¯Ëµû.Wk¡N)Ç^ìõªT©g{#îÛGÅøu[¿ê55¾Ù£½ä·suÈ à9µQw&Ìå;2\çG½ûuº_z×ÿ èoý9ë¯ò¨ßº~¾e<Qf&#ÿ ç_cÂí@^[>üÊì4§Ú;DZ¤ä#Ãú}wløCó+ìxg~O®í¿~euºS×ïÆF ¯©õÝ·á̯±áÅñ>º·|!ùÕiSWïÆF§¯iõÕ¿áͯ´áíé>º·ü!ùµÓéN+_¼{Nf:ò\ÀøCókìtá>¹úçæ×I¥8~ñìdi9Èè[º}qõÏͬ¡îÉõÄ/×/6º)Åk÷c#I@uO®!~¹yµö2èßÃýrójùJR¿xö24TÑ×4þþë_c¤nIýüO×/6®ô§Ú;DZ¤¥¸§÷ÑX¼Úû-pOï¢þ±|Õq¥8¥·±¤©ßFýbù«í4Üäþö7ëÍVªTâûDZ¤¬&ÞÇýeù«í,ûÆ?Y~j²RN¿ØÈÒWFÇ-?¼cõ毱²ÊOïý+óTý)Äëý$Ú$§³gô¯ÍY×!=_¥~j¥8±¤kéìÛý+óWØÀy=¥~j¥N%[ìdi4©ìôiÞ¬ó®1B3Û´=çÐ\TEDܤ¸LRa:úóÄÝ+{u\q»Ö\;<3xºÞ]ÇïßT|i¯áWàit²[¯ÓÊé>ã"\\à`͸ÚöëÛZ®u©¾.~ôwö²¢zD{5ôc¬ËÅ4¥)½+g»î^©È5û±¨ËÅÆ¢Ñ2íq{ "CT¶6¤EEUÂ"®jNåêü_»®k{z£MH°¿)Øñ¥8ÊIVÈ ]`]u ¢8Mª¢ööö.Z´4¦®î(Í_Ýþ9<íÏ[9Ý'!Y"ÐÌtG2I»nw&+jV°°FÜ·¤Jè¤üç$ >l°L:<¯8 ¢È dÜQ .V¡Q#µnÙv¸07Vâ¼ÊËüÕ>97//8Jkà.R8¢å ®xW ýijÕoz×6µ0ÝÎØ·Ø¹UÐVÁ"ª)®Ío¥5JÛ5¸¿{¾¶û<Ë}±i'lØÆ7(eTü#B¬AÄk@ê0ßuÔµ ²,¶å¾A#oJmäh*1Ð9ÍÙ±QÍËà®Øé-æ9qwºÑdt·ùÝm»Ïés¤l}®bs:wRn _ZÖÎÜ`['ÚXÔ6¶m·h@¹0ÅÃ'&cʰþÖp3\DØ+ ëëCTõ§_Û¥zøOÉôh8Üvû ºù° ,ª«(¨8¨¨[du5öñQ[,vK=¾á&lI2Ȧ\(6 v©V¦ áª_nLÜ.r¬·9k Èr°µ)Ôe·&ÍÄ´þ-ä m*6"nïÃØ÷ 4Å©÷ Kr5ê]ݸ[LR9È%XSMè#$|!ìE}&©FuÞvXÄKË@ÿ .'5þi7º®>1Â!Y¦$²"U#ò¹ª -:¨{v¯,Ó9D¶ðæ{UæØô%âÊ6§Ú ¸Ês%B9Eéj*©±ÂUUǧxtͦån¸Ø!;zJ6ìÖ0ËÂ1¤²¨f§$ªJj8AU"'ÒjkXØ~¤JìÌmÐtÉ«~Ñü11^nÌn"á@±u¥Þi÷Fàè¶ÓhëdpÞ BQ:J)bÎü«¢eL3¡cÑ· íÛ®õ:kîÁ¹0 ÍìÙ2Qtyf-ÐS-è¸Ú8T([7 ¡Ú-r E¤\o¢(ë#L6jóbãeºbó¤9éB¹hwª.ÔÒj¼[¯öÙïÂÉJiù¬=!eBz;Û& óoi* oÁ* ªÕ±®Ú¼å¥º[P:G%È´ºÓ÷táºÓ½Ñt#>j¦ ®]Ûbgº¯hÞ¾ã챡ôC®Gq|BÅ U£QA$Fúi a}bEìT¬½âèÁþÿ T¼(úA ³jàf<xÍ÷Ï!E¨ìMcÇ\ {]S}.\ýèïì-s¡¯û#Wÿ R ãO·K>°YOzÝÇ-ÖxPÝ%´H¸ÔvÛ<"6½[ p¹ëL/WevzÝ0Xë$yâÂã>%XIqÏEûà¿[|#øTô_¸þõ·É2? ]|¹¤|`|Êo÷4Vðjä÷Á~¶ù&Gð©è¿qüëod ºþøsHøÀùßîi2W ô_¸þõ·É2? OEûà¿[|#øU×÷ÀûGÆÌ¦øsHøÀù¼¹¢ýÇð_¾Iü*z/ÜúÛ䮿¾ÜÒ>0>e7ÀûGÆÌ¥àÕÉ~ø³ãéýHôû]ÆÚ²õ²jtCá6±ØD-¦¸Èg³(µÐu7ÒåÏÞþÂÖ¾¼âeð:2ÔCdwn%i²U%ÂeT»0N¼ev57ÒåÏÞþÂÓ©)¥)Z9{¾åêü_»¤ñêe}÷·û®×/TäýØÕ'_S+ソÜsuÑÓ Xì×+ö¢zãh·Ìq. $Bm:ºT}z=-LÛOUGvBLaë¹[ár98d£>6YÊ;×à ¹`¿é'®bB¹M¸2QaL=Ö½(Þ$M·1^·#G11\ø ®pô±Bf8ǹ²ãn½9ÄÆç¸¦KQ÷Q¶DÍS´Ãa´!¬SyÒÏj(/u¬ðApÂà\$DTREVüdÝÕ'ÁKÆ£Ô<.Ó·½RÔ$6ÝB;B¹ÒØl¹¦¦Ñ³""UlPz°KëEIJðûª»i¹[ºZa×löá²Û'ÛÍèl:4M²pQl¨EkCÎÐ'ÎÒºSP[$Jë?jfïÒ\¢Ù6,©Çh¡A ¶[¢áóòyú¢ÀÆ©ÙÀ Û£a%I2jÚ2¦¤jÓ ^¤Ç¹Ôz"úVçïHÎ^5[¹ÈE c° . òLIHPð¦J×®-\s;ºK¤jVd¾Ô¸Ñ* LÅyH ×#:?Àîb)&eºjIïHáìM¶3~¹mlq £m"¦i1Ãnå÷GiëŪÙkè±-.¶ñ¶ÌzEQhÙl£6áÔ\aq ÝQ«¤q¹ëFÌñÝÅ!Ü®Å2¢1ex\TwHVI¢!¡/¦8¨h*oÝß³Þo°ì]Ñ4c*tÍ¥-ù0âÉh45YHÙ ¡®åiGÈ[ÃÝ*òH.\Û¼GmuȺk2ö:Û,!ºm¼Ài2j¨D¯YnU ¦´Ü-Qí F pu§]e& ¦i£kj§$ììVö¨+bCLÐS´.:PÀÓìi¸8ì ¸+¯»¨i |ÄËBªâ ã\áÑ:ç¾{8 ZùBÚr/!Ò7w6PÈ(é;QˬM`x?ѳØà*étðÖèÍÒç{ f3¤ò¥_/î²7a{)ÕSðcENÕÚ(ܹݰ˱éÍM:Á6óÒ5òä³þaÌçYÙÞMç)»£n$BsÂ)J)J)J)J)J)J)Jk\½Nk÷[5 ª§ ®Èôó2H°ãEÉÁ<ó8EUUÿ µúíqѶ ÒµMÊKä@ÜÐ$yAD%É@IAU¼"¸¦Xû/äÝ.ѬLYvø!ÉÊ7Íj)´¼mCRÛôÞ¤CTEÂ"ØDØN#qÈïDM8fÜ ¾MY!¹þo5]ªÞí¢+¢-d·hí9o´%¦» #Ïq}2(²,T³à¤fSÂìëÎW7A[Ä;ZÛ¨N´l_e,3%÷ÝteÇó fÒ£Mö6/xK TS½ ~~Õ÷7䯏@k¸Ð¡Js¤Ü3pD*@@¤"¾ J&ÓÈÍÁ¶ Àq¤H(H=FM¦Aµ±vãoUoÙ4õÊûÛaòqã¸já8 n¸JJ»M÷HrDFªJ«M)J¥Ã¯UêÏùïܳSºérçïGaj^«Õóß¹f§u7ÒåÏÞþÂ×]R9<SJR´r÷}ËÕ!ù¿v5IãÔÊûïo÷%]®^©È5û±ªO¾¦Wß{¹+(æë£¦@¾Y·íDÍÆïoâÜ mQ[4+]ío¤ïP×ågÓ⫳Nõϯ;o&EÄyyËEÓ£"ïÁ/]²ËÄ85MúÝqͲϹ[îÏKN\ÐhÍÀÈTS1Þ!mT׸r(«@âU¥ÝUd³1jÔ«³RzÉ9q(Ѱ-Jʾ[[)ez§ `kã·i]Æmé#Üí¶»½ÖT·_éqL ó*ÅIQT+÷1µ³W²{SÞ/2¤µ{µM®cÚ¤ÚøIm¤"tÁ EU]¨ Þ4Þ½Ó×}-ûÓÙFØVAã Ò¾F¯r[Üb¥ém{u}ç'Ý´ü(Zt¯oÙXÅÈÓÙ:² ÷=ç$`5.ÒÛ9IãV4íö½[iкhFó¬Ï]´È¿ÉÕÊðëS Ûzrù(jóbôÀT`$E#êVD¨Ââ.ñ6wG (4ãÊ@Ê+Ûø \Ó)÷3ÛAã¢(0òÉYW®áJ¡éî+h«å©gǹ<Ù74Ù13ôtÓ°Ù !"ºâHl[RWx·¼Ðfl:ÇO^¦±Çús;êE èï¶«(â8Û $Ñ'I`MH]Q\ÐXéT;t¼È§1oÌaÇ[èmÛ`L%æN$i<Òa¶9(2Ê¢1´"=Bq.ÑzÓaë³üÖÝùKë <,¶à²Oí&2Wcn8¼Æ°®àèt¨=ª,ZÂÈÕïMÍYö×qÊ-/Iv7m,x¦& R R R R T}õÆZ¶:äE¶d{znÊúÉçÜ© ÔÐ!],¯Á¸Ã2+ØÐ¸¨h©$T^´EN¥ëDê^ÅI :êË2ç3íKç3K¯9Ï÷ýÅúWËPIÓ¸¢a[®w®.¬¦ãISG0Ãü%êERTO/_juXBè¬hí;Úűòcدÿ R ª¿Ãí/!÷~5Á×\%33ºÊ""Uʪª¹Öª¾½Z«g OûOÁÍV/ÐR}tÜ3~TüJzé¸fü©+øvèþáðEóS OûOÁÍKÊh¤úé¸fü©+øô9Ò?pÍùRWñ*íÐ'ýÃ'àæ§@÷/E'ÐçHýÃ7åI_ħ¡ÎûoÊ¿Wn?î?_5:ÿ rñ¾²JÓßÚúüÈ?ÒG¯É¿Nö¿òÙ½[³s¸dK²ê@²ÆÈWysâÜdg¨Ó¯MI\ &ö(½©lcMj§/vAqÔVgnÖþ|RXögZäÊ9ºÚ6RH íÑk»ÔQZ%§'³ñYËeÎõ¬Ü]K:ß{¶ÝgE>Øð? 9 '-rª¡¹¥xeÉ3HK9)í;dbØEÊ é.°É2ÃøÞ¨8vu¡t¬ªª¶ 8UÂëvB ùÍ9¯«Æ ºhH ©+aÛ¼NŧoéªXÔ:¦ûm¸ËøPÂÛk8M>lªâ8ûÊeímÂ"oÊSmÄsmöàÕn÷W¹ÚÚe¯¢H¹ÈDU¼<Ãc5 Yµv°êÍUh»ê+m¶ïÛd`>HmMóHêoÊ G!ìÊ£ÖÂÛéAI¹hnÆ¥ºrÞ¼^áÞ£ÇÜ1Ü4hLw"¸ ä "DPUQEÁÔmË Þì3¢ê2î7;°Ü§?)°Á"ÆO2Û\Ò !ª«¢N @Aé ç²ôÒ>²¸êý?¨!D»Lñ N¶í°ìh-8 Fê=b ¥JãôMý«le§zÊ×.NsXøî1äÅÛÀÔyF|y²LzNí«DÛ /-¸óeÝn±Yh[ËòÞ";³òålWb¦.d&Bm¥î¹Já÷.êm)Vn¶36jV-¬Í]^z:QL ÈêNDW £TSØÒ¯\~uà:g*ÉÌåOaÿ 9E2àUP©<»7Å壧ßåé+KPá£ú20 6ÞsòE2ÊúZõ ¨®3ÃNðöÕ:Û¥¢é{7I×/P¡³kl£«MÚEÑç4]EêêEÇ-Ãþ-Û,/f.·uî<¦cÄr)Úº Ì3I%Íü©°Ð«`«°ºÕ7%¶.©ÓÈfÑo¶»-¶¬[h¹SÇÛ¸ ´ñ6ÅHI^EÛ´ :Ð:U`Úæ[mLÅmHÌX]ÈÑÍy("M¥·Õ ¢ý´iû téÖ{¶Ý.äï:{ñbNJ<ït L²d¹,®I|«\·@ðîùm£í3ÚèÖ®çZç_¢dmÒvZl7¡©.ò§]ÜÜ*H%¯ÞhÖ¾»¬{ËsRÚ±®²ä»o÷IjMªÈÚ?#¬Tza#¢¯Dë!kÓîpî6½Þþiì§_jeÚt[xÐÞ'<¢-à¨H®g*+á¦*N×gÑ:\X[ÀõòJElmöàc¥:Û.¼JØ¢x-¶ñ"Ru¢uª"Ñõ^Õ+ æ.´ê #"KWÞ¸J¼Ûä+±ßr;ÈuYt¥Ôe£Àº¤[ë6ÞcÈsC\çÙb]þº RI)µ(· t \qÍæ*a9M#ß['½4#4hqômà Ù'S^»ÝêM7¦1 $Vðª(½/ ¶µÞïSúC¼Ë$¨ÑfQßôÉõzO.)I¼·o.F C0îúÕc 6Ìù7I«\Ón»Þmcp3+¬4@ * ¢¶ÔCµ,Ié}P±ûæÓV[ÚFBèýÑÔVìnÛ¼WnvqÛòU·XÛøf\1·Ynq§E°9h·êf¦GnEVظw¤¶J¨ ¨-ª¢£ Y¬é>ÝUÃ'KÞaéîQe? ⶨÂD®>\jD¯BlÐ IÁ]§¹±Â£©\ÇKXùüMº4Ì®uNÜ?/o"ç57r®òؾîW ]ÓØ+qÓ¨¥(¥(¥(¥(¥(¥(§sõ ¢úøLyr©Õîÿ Vì¡ÄXäI%lÈ3ÏÎñ+øsHøÀùl5©QS/CßÌm?*¶ÉÛã9¼ ÖÀQ0"Ïnz»0¹¨Z¸êmPíÂKÌpþàMÆ@§q$¢ªªD5ÂãÖÊÿ ©Ú$¦u7ÒåÏÞþÂÔ Gêo¥Ë½ý §9)¥)[YÃÝ÷/TäýØÕ'_S+ソÜv¹z¤? ×îÆ©<bú_}íþä¬c®¡ÚÕÎõ})r®^8hY¹>È eÖZÐ:D Aw}É}6H8û}ïËÊ>CC·Ñ ¯ XíMÕÅ)ÙÚ¥¦ÜUÉ B|Yg¸an6TËs¤¨XQÂ}µnÍ^µq%öµ& {P¤(a÷VÇÙeÂÓV·5À¤¢*¢åÒiEU]Ø, î&¹¿·ÓöSз¨¬ÜãNrCO» d0»FB¨I ä¢IqQIÕQ;u"ð+¬ök:jKnq]Ìv=£ìGCÍoEETÐKÖÅOÆÑëuÊV¯Ô®v÷\Fæ¼Ü1pã8±B8·Ê2a¢RAGQSÁpQU("ômm9këSN|ÎæqÒ(²ì®ËnæòDIå%Ü[R,³å*RëÇÛ ÒÇ1tdNâ.Â(¦ëapc=:<gHÑWÐ $£.£." ¨ ÿ ú@õäSáÖµè{C»D¯²}%$ÄÒ"G(u·µ^¯IS¨V{ªÔ·.Vk Ýas~ ÇnvD¹=A°ù£ø;·cUÉ+açí!nbw{×ónàÛÙ6ëÃ/Hg/zXïUäO"h2sí6ë>£aøÚÞnjdvvÝæ:O6ÍÌqæ£Su©ÇTJ/ ì7nש1]«;(6ØìI$XmE¤#( Iåpö·Ôh¤DA?çL×};K\÷<ÔлDqc¤kÍ2GùD×*hrÒðÁ7 f³ñB%êËf¹Y4®¦íê1M<b²®?éï .Ö4u£iw+(&ÕRE5?}jYñ§tËHÜ£÷$ù\¼EvÙ @õ*!uæ^±Ôj®h#gÑñ¦C±¶ó1$ºÉ9¼YFb1 R RµbË%ùMGËÎÆu ¸¬¢x¥°À°½x!^ÅJ ªR R R R R R R Ó¹úÑ}|&<¹Tê÷Ã!v.åiÜýBh¾¾\ªu{¿á Ï»$!|dòçóç?§>7»ÞËw¦ óÚ¼öÕ·Ù§_¯öݹö]¾\xÉåÏçÎN|ow;½ïM&æµyíª/o³N¿_í»sì»|,¹Â«T¥+&:ÞèÝ=Úêä+áfibû«» Öªª¨²'jª"*§à§5V©âÞǨ´Ák-d¢BuÅ´XU( Yp0{òÕú"íý«/òçûKT Ãû6ÔZùmpzN¤Òæ ÔßK?z;ûV9ÒÜ=ßrõH~A¯ÝRxÅõ2¾ûÛýÉWkªCò ~ìjÆ/©÷ÞßîJÂ9ºèëú{û_Qÿ ÆÇº:)((CÍBBëìZZ¯ZÂñ¦ãGÛÖÌlð G Ú÷F4%Wy*4ïRrÌWkM(h)ËM²ª³Kî·<!Êp`ã¸ûEV2[ÅÒ[QmUQ zº²E©8n¢µZÚéÓôüi÷ >wJ;º¶èÁ¦^Wܽ{Dé#\êý®õ]*ýͽY`¿¬e¿å ø÷Eb@Ùn®¨ó ²Á ×èyÖÞ.¯ª5`}µôãï#Jî&¶çÚ*&§³jm]Î'ê eUQU-å-k°X®>Ûæä«DÎ÷%¼ïª*¨d¨QÑSÕ«g¸Ã»Ú!ÝÏsáM`$GsjöÌP°¨EE¢-mTR?î?_5µ+g OûOÁÍN?î?_5,5©[=Ü2~¾jt ÿ ßF;øHÜTe·Í GQQÇÆÔUÏmokÚ.â5E¿¡ã¦áÆkyO~Ûw¨L¨%Ì&¶ââluuÌvg#´¯G¨^wTÚ5EÖë áK¶56Û2#z\l"¼m8ìtæ¶¶é ÉPATmÅWGI^^¾pçÞå]/pµ]eº$»Æd3NàÅMYH®m[Qw¢ª `V¨6]Zÿ 6\]ÉcÎ~ 8¼cøü¼´ÌsÃòõ°é» ê%!µ'pE}¥VG¤Ã¤Ù£+ÄÞ¨@¼Gíç£äê}"Ý»ëx[ê2-ºç>CJØrH ÙÝKåùGhØ×ØÕvvÕÌíVÛÈg<òWZo2Yð\_vø( 5¤t¥@ŪL¾ya,¢ÈÓpOH`úCøã¹U&À@~»Çún7þ§/±TÏý~^¶Ô iéÜ;MuÔÚ)èVûDvC 4õ¾ yÀym³FáËlSªÁ͵YÕz3CÅÔÒnÚZ颬°¢ô7ÒÝ õÜ^sñîÓêãñS{·Dt P<¡lÓ×Rì2eKr=¾<·åª0±Ýp¢FqçqÜM îDT"m-Õ«@[´Ö¥I×ÉH¶hð#Ì*< rSF.['¼Htl¢ª§¦ «xå¨)5?M}ÿ =ÝäqÆôÑy÷j#i ÂÞ¤*#ÄûÚ}ÌÖÚX;¬£:n¯|DAèͲ¶ý«NL Ñ-ä15MÊà§Õ¼=°Þx ªÒÅ}îl+uÚ{3M±b3$6-#&âHÝ] B@²¢&fñ§.WXGuåJÌÀÊÌÉÔ¯eQ·G ´è!¹20þNpÞj|OU¦oý¿/`krÐÒ5UÓ÷i¶ZÆÑ¯ ĶYVè¼b:à©su´hÓgGKõ*.$¸¥~jâ![oz*u9ëzrÔ)¤lßµ³0ií̧G®¶¨;¹ $ªØ¼ÙxÎíÃ|jKÞÓ·î]í3Ùã#£»äu!7 Ù<[T¾aBXâ@g*ºZqæàr# ï;UYV·ó7ÜM9ÛóêÛÑägÉÉs>!`þ±Ò,+¼íUdiZßÌßpi6lçoÎK«oG'%Ìø æ )À±yü~LïíùOÖ:E wª¬+[ùî &ÍíùÉumèò3ää¹°XéÞvª²4oæo¸46s·ç%Õ·£ÈÏæ|BÇóàX¼þ?&wöü¿§Ïë"»ÎÕVFüÍ÷fÎvü亶ôyòr\ÏX?¬t ï;UYV·ó7ÜM9ÛóêÛÑägÉÉs>!cùJp,^;û~_Óçµa]çê«#JÖþfûI³g;~r][z<ù9.gÄ,|HÔnRÚÔü·ävæ6N¡:(¹U˦Ü/õ.&i%1+®ýÎòøÕ9Û9Ñ$7··éj»qÍ ýÛµîÌò×à §ôT)MMëÛìî׿0îü½·ã'?9ý9ñ½Üîö[½4W^Õ綨½¾Í:ý¶íϲíð²ãÆO.>súsã{¹Ýì·zi0¯0½«ÏmQ{}uúÿ H($¢¨e"ºáôNZ ó0½bÏnh´C´ÛäBÀGÞå- åUUpUZÚ¥.¥l]¿µeþ\ÿ í"&÷édà0à)aiQI<%Dzªáî¡ rÓ¯ÝaÝ:d6-hÔÁiÌÑÍâ96ßËl/(ÑÜ)1ÒN°i»´kö¶ß!ƸÄj["ê"(H¨ LáWüjB¸' ô´æ^[zé>MþÙ:ÊÛ÷ßèßÐÁâÎð]o ë>¬§f»×nu¡âHñ¯.õOHãðü> "!UTTK;EIç)éáì sRQ\F<-bÇ![L½ u ¾«=z×sfëèajçorúåÞB>ëñ¸±£©¬FÀiHN´JÈ(¶¤.ª«¢ÈÎúeH·¯Q²fX½ØI!XÏÅÜxD\qÉuòSj+[÷86q{Õ*V¨¾G¸¼OBndεø+n$B\læ5±ªÑ½JÖÍj.ó0/ö)q´E[hÎìÛÑ6zY»,Xh@ÉlöÍÕF9¨i½¥¯S¹éàìÐÂ&u õ|T¶«y1䢿'h·½Qq :B¢¶¯z]n'¸jÓFÄ?éví²Bde5m|ÛQÖe¼QK `Ùé`UôPêvMÖ'8XäËlÓjÃÝ&ñläH n '#pÙ|{è¬d©óUÝõºï}«-1 5tí`Ñ2Úr@Ú8²XmH5DBXýJh¯^¥ssdT h©sõ£o'Üd[¤?&xe0^qdº hxë@tÁGp+R¡ >ü÷lÚáÐécnm4Ƶ3pÛw"X1J¸EUeÌmæ/óV{ÑØø«¬Ô/\ÛyÂnÜðȸCfÓ.*"flÉêðÿ ª~ÎÉ9rGDßêBÏHß.¾yUÌUå½)éáìÍ/èj7ä. J·Î h}1Ügb <ÖvmÜ êõ+i^¾¸©q¾ E죷Ñìºð[°Á!.£ª¦Aãsz²Íkj6©Je²Üô»uÁ¨+·K4àCpkiJ!³aQýØFûÙ*ÑtGØÖL2æ¬+R¸`¾ô÷¢5eU|'N$? 2¨ö )MXÄÊßBy¼mpïåï·<íÁ¦qº>{3ËsyÊÑô+i&£Ýdz$vmÜÎãÌ4£ ¸êsz ímȦYÛ_oªp²ßªdë9oÓu3v¸ÖÊÕS®NN¹$òo7ÅB~L áWD4µ5ÆåoÆEº¦jùré¬Ï´LPtË ÆôÕܫخTïÕ{[q´ìÍJS-ç¥Û® D¹\º\§Ë[HTI ìÄ0Vwhósѧ⩽ô YÉÖ× x`x=¥ÉB¦U§SÁæ'+»èaÑ©×86.(Ùvç L0¾ä3U} .ìngv9÷=~*ßBy¼mpïåï·<íÁ¦qº>{3ËsyÊ=ô YÉÖ× Â`ÅU³]¦×zÅiÜýBâ/¯Ç*^ïøasä.ÅΦÕ[ÃÌõÖX0ÍâÞ2ysùóÓÝÎïe»ÓI y í^{jÛìÓ¯×ûnÜû.ß.<dòçóç?§>7»ÞËw¦ óÚ¼öÕ·Ù§_¯öݹö]¾\ó4V©JVMó\ÄÇÙÔ[p IÌámXzK?pGýg<úÐÖ÷',ñî×6íw¡F3qb@7ÝD.½D(JÛ®0«_5ýW|âªèjÓ©ý"ÔÑ:ݲ*8ê9½Í¬&9QAL®Ô^¬ÿ þ(éyNcß÷ÐÛ¶À2KÌHÒy¤Ãls ÃdBEÒÎSÁSÁmQ,Xê3Ktþ.±©dAV£[ír¤ssÒ¥fHä4üëE:w_[#¥¬è±f2,Ë̦ ÖÝu´1ClÐÀÑÙ /j(¢§ZVÕ)@¥)@¥)@¥)@;¨M<¸Lyr©Õîÿ âët.qP¹sP¶á"T@|¬r ÆisØ ÙóP]#Wà ¢eq }·ðÛJéþöäé;`ZîNÅe·iõ2T6nx¢ÇhÔUEqGªÚ*¢¨¢õª\£âþ£r(Ø-O4¸ªØÈ¸¡b#`©Ö¨ÄªÆ°ÔzNëÍg{b[2,ÚGEºHµ<&¥ Ä®dö°EÉ2VÜRAêÚ[·ÛtÖ¶k'ô¥vö ë}ÂÛ§Ò`Äe7È(í´Ò*ÄÀ¢së¶@£î^¥îBªï@pµyq·dÚ/ºÖä/Rnv¢¥fºß×U]ô¾¢l. q&QË ¦ÖÜA¹ëV¹Z¬ð$ÿ ,©"dê9!ÐÆ»UÐDV\F:ãYÝmÚëP¬ÛÚ³èçJu¥ày¥Gx¦É±%:)Å=éaEÜ8½Â~°Ü,ò,³¬vÙVÉ.ÏÂz 9Í#&Õ6+¦ª©%ÝÛ×Z}äèÔéDÛìÄa-¬òãè¨ø6;pâ*¡¢a sÐseÄÍSdÓw-VËVg`Õºï5íìÎ4y×Ü:Vòô±mµy<5تw#u¿®ª»é}E"Ù:\1.2#ÙÚ6®®áX¤»÷áQÄM©·%$þÒï].G´ÕÙ×8Ë|¢Ò»- iÓQÉm%TÀ¢c©*M¸±{ÓB3A)æ§FÑ0% HVðv$ݼ#¦ÒÇE´Ywت&oz¶öºÕ¢óW(vÛeÒ%Âít³[líGÒ!Õ9dâ¶¢éA$ÛÊ áÉ-wÓ5F·Õs^µÚÛ½³ø3(×. Ay.1ä;¥H ¸ÁÅÚÙ ©ö§ô¦zépº=¦¬ÎιÆXåÙl(«NLDSi*¦IHúSKEµ ª.³1¸ÏÄ¡¡hX|i¢ã¨¨¸ §HÖ¦Îc¯;gz ÷l°O`a:Ì~XÃÌW)¼¢UQ¥NboE +5Lm¥õ¾¨µÃõnYƲGuÇÚ}Èí»±W ¹¤¶¸^t¬ÿ 4R.±ÊÈY94TA¶øãXæj0·pÂ}Âézõæ÷2EÂÖù*mpçK¯nMåÑ×cB=B»2ª õH×2 Į́&_aæÐÛt W¨ QU©QkBýiµÌz-Îe²ð7ô).°&ì~fÄl2;Ǩ2u*b¤\þ|çôçÆ÷s»ÙnôÒa^a{WÚ¢öû4ëõþÛ·>Ë·ÂË<¹üùÏéÏîçw²Ýé¤Â¼Âö¯=µEíöi×ëý·n}o 8Uj¥dÐ¥)@¥)@¥)@¥)@¥)@¥)@¥)@¨ýMô¹s÷£¿°µ!QúérçïGajÇ1âR»»î^©È5û±ªO¾¦Wß{¹*írõH~A¯ÝRxÅõ2¾ûÛýÉXG7]BÉ«eêú2âܽ>p:Ñ3m}à1èÌP<a$íõ«ê4ѹjøR#F¸,Ûå"Ì 9E2àUP©<óÚÕÎõ})r®^8hY¹>È eÖZÝ1 u±jÃÓÓéÑ¹ÚÆ×Ýñ¸ByÖc />²×µí¦CÌuVOTðô§A¿È²ð{·M"Ïf[ÛrÍ!ঠêc#¥6¬åT¹2¶»W_kRjµ B¦ql}\) 5ky#\ J"ª.]!&´UPEÝÀ®âDûmûVNÔ6+×h´Újùvæ\S&cFê=Òy(%Ëi0㢹mp9$ÜãBjÕ«kzk¾YlÉ~K3n,Âi¸:þÁ®qÞpGØ GµUÂ*¢(x;xϧæÄ;¶Ïy¸ZbÛFçs¸Æ(§ÞÇ:CF¦¼ýÎì(2¬¨H ¦9Â<\jÓsîú®Ôü¿Í³Ày$Deµ*SbÒ[!j2©«êÒ"£{T'îÌ^ºzs69¯ZcÙ.d\AÖ¦}Ø® 5ÚÖå¾ÈÅ!AÙQɯ8Ó{ ¸wïxi`shÎ'Xu}Ú-¾Áç-_3\Û`Q£»%CxM@^mø h{SmÁpÖ2¡Y8sÉi(ë©Û®ª[cËR0W[Þ4ÚÚ* ¦ErTs´ æ7ÐÒþi¶f^ZÑÅg `¥1lâ®t ®õ'vݲ÷ãqÒSn>ÚøJYPWÄÑHä2Ú*0[°iÔ]Cfnï·#®º,8@/¢ªN £h¸ 0/^Þ´¦¸¾ð/MhÁÑ78K¥ÈOt©p¹oØçCEh|üs¸qBQgN]µ]Ö4{DnQÜbW#0*MÂ¹Ò ¨®F¬lîRp[Qp9hî óô·½ê+ôÛv·+k¬I¢±Râ9nÌFÜ×zÃCZGQ ÖÜ\ ¯VÞ½øÜ*Xæ°ÜN"ðê3Dé6ÌÇqÒtÕ1"n2U"^®²%U^ÕUZÊ%ÚÓJR¸tR R R R R R R T~¦ú\¹ûÑߨZ¨ýMô¹s÷£¿°µcñM)JÝÃÝ÷/TäýØÕ'_S+ソÜv¹z¤? ×îÆ©<bú_}íþä¬#®â$Ëwªì×êt|²Ø¢[@{}|Õs[kvíÚYÝmhz<÷¢[\X^ïÊÑ!îI<TÂõ¦|¨©Ç-/uÖzá§l÷·måEiÑñNXå HÙö*ÿ xoÏe¶&ÉÛá¬w¥G·´ÔÍ; ÈÎQ3Ü© ÛïU·.o^¦kmK2ø½¢ÜÝ] É"<°Å¢ÈM+Ìê<¦ERÉrõH~A¯ÝkTÞЬGÐÖc%«õ+±®x`ãCÛtiÉ2¤¸.ª6lË*Ò c U3"à UÞ¨/Vý·#º[¹£s%;Îé3ÌBßÍé/î¹¢<ÏK@ÀãzÞÐɧeºÉ»%Öç>t¸1áÈzh#â4ìPú6§2#@D¨kÖtT®ÿ ór¨`¾¶áò¥Uø ª§¿.ͦáIr^^tÀ#o°-4N§-UME*Iuª(óÞ,èmA«x¡nv{«¶XÖ7%¿.{<àÝÈAm±\¡) .äPAݹ¨ W}>è¯|Ëÿ § $'Ò!®|@Lé¨E¸[,W ®ì})©hâe¢÷°[nÆãÀpa¿ÃmFÂWyÜDIxúj&2&+¡/óïÌ\mØ£å2#2rß&H5)æ AÂ4TÇvñ®ÔTìÂî#HòGT_îÏ4{©º9¼M¹ËÞß,ÚV <0ubGmb?DH/K|ºËrî_¶B ¢¢µyzxº]n_FT®H3! iE¦À6 K|²¤ITDD})«CRqCNiûíÊÏqGRLÊÚÔÎܸë ZUÐ^X¢¸ S7I-I%Ferø¸*(0ÎáRÁ+bDIÙkJéæb; cLFv\iËD@ìteQTAAHì¢ `|´\®f©K[e¾²1ÆÏ%£}é;²ã®®UW´Ì& [T¥±?÷§îù+É1¡DzdÉ GÃdëÏ:h dzUU{*Û«¬³äÇ tìÒ;6Ó*'5ÎSíy±Ï˪IEë!EZDõ«ÿ *>ÃuyäÈ è6ܹ1DEÞÃæÉ¯R¯Rd©î*ezªBÿ Ë)gÎbãéÞÌI1£6®e%îX» ÕVÐÄ0 Ú¤õûD=@chÒ_ÒCÐÞdÛfsßH2Ðâ«QQTU&Å+©RK8-óDê´kpáiIPÝÝìl[ÂÙη>ô¹·Ìqâ^H ,UhB¢æU[Å¡tSñìÜé:u.ªî¤:ëm'Zt§Ä7¦,vÑ4i@Iö_FÈDÏÅT.¥J\²ÂËSömÜíÇþ=æ úWôv]ó"ÃfBªÙëU¦¨¥)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J)J {oõ3ÿ --- NEW FILE: alugen.jpg --- ÿØÿà ßS2!¶õZåäÃX¤2ò°ÊxâF¢<OÑÑÒñ8ikcãw,e¥èN¦9sºfÿ §)Ó/Zëså/îÒEV{Pi¶å¿6[ÇlG¥Çxc%*3=gþã¿í|ó&׼îW®$Z2¶áQt£©Kk]N /ÜÈ^i+aÓqä½A`diÊH%]§8Á® EÙÒ-tÛöÝ%×VZßnºdgB±F¯bfgÖø\óÛ|«õIËV#øû£¯ÛìM¯æóõÇ"û£o$Úþo?\O(¶ËrîKÒtÓj^¼8ȰSZÖ>£6MeOn#EM¶m¬)WLzKx] ©0¡Ôd¶Ãsm§\R2IÄÉ$|ü£/ùÓè×ú¿&?t]ïäcÍçëE÷DÞÇÏJ¶<Þ~¸Þ£ÜöÝ5¶Õ%»Þ¬2IqöͺÔC$©E5:rгËÌÄc£>Ú±¡Û·=vMpD]6%9h?[N3qÇÜmji*[§«Q%8æRÏQÎ[¿qþîëª^·ÉÔÿ Ójw$ÃTt¸Ûm¶¶âH¹dIYø0ÈQû¦Û³aZ2ê¥:TªñÀUi¸ITfÖFê6(J£,OI§253¶t¹þþÙÕüfàZ{¼Où2ÛêëE§Àÿ ©<ã*GNCáñ%¤Zo»ù:Þêóe¦Û°ÿ Q/H®R2p:8_Ä-.\§ø ¨¤sN®CüFÔKÒ+ÄiÐøAÄêüifä?ÄhH½#iZã?ÄhH½"¾HÈ8N¯É`./¢õ"ôE¥+Ĩ½H½"C¡ñÕù'¥¥ÿ é¨ñþ¨@äW=@ÿ RO|Hȯ¯ûÓyT´]râµ^ËÖw!È´arxW²õÌzø½Ñ ª³SRv:_i±×yq(Ià¥`F¢3ÛÍ?0Ýû!;Çdÿ ®xaV{/XÜÇ"±+~UËV71ê^?Ǥÿ Ò«x w²µÐr+R¬_W{+XÝ ç?Á¡=#&}Sj^\pÇÇÜ5°k%*E¨(¢ÇMMY¡ùM$¦TîTrpqEiry$µz¾¹Àé)µj¾O¯vV¯ºEkÕ<_ì_tIÝÖQÑZUÏD*ZÝÔ¦o² jçæófØ{6ëuK3¥"«SðQTÈF»áòcÌÉÇfÌKòêÚ礣 Ù©ò}²µ}Ðr+r¥äë²µ}Ð]t[<Ó¸¨å îªÜ5½\ ãFÌÏ$eb:W ÔMÃÜ6lGÒ\Ên-+BráàKþ ì<Hê¾ àô9[Õ"/ü:àì_tߨòuÃÙZ¾è.ë´hµS'Uéª'äðG% Õ9I3%e,ªå`^Ôÿ ÊÍ+mÖË: Ô©*"2Qm#!Ê&¡gQjÖÉOaçI"ε6(ð- ´Ïa`Aêÿ îߥ}£º8äë ¥»F©Ï~µNÝ2E6°öâ N¨ÝmFDKÌI"ZTdD¬9ËQuèâð¬\0§T!U§¸tªk1QÚàÊmDo8·ÞCµ¹y£¼03<Hz2)çHÚ*»¢U^ªQ©ÞÅÕçÖk*PDä¡EæQT¥%F¢NsJ²¤ÈÈË^.$Ûða¯=¤ðO²1¦ÌL¾M+ïëK$¢"3,î-N,#ç 5°Ìn%Xbgc¶Ä ±R^¨ÉB¥È©ð52[Í)Çc>ãª7$¡´/2ó$µ©Fdó`£I¾FѼ´@®3LfeJ¸M-S$J[.-ÇV¼Ï¼FâÒf¦ñV§ÚR®åúH¾ú½'tåúH¾ú½'tûmT§cOjC2«LyN#³%Ħ:þõѧ³^R6ãöa\ÕÙ'dÆx£:§Ù}ê¼êL^i¾hÕGN f¶ÍF~Û<HO;Oé"ûêôÐ;Oé"ûêôÐ?¸O±ë³b!¹KDH&FxpÜ|JÑ«"FRÌ2Zó`^×PÔw,ÒE÷Õé; w,ÒE÷Õé; e¶à5Ë'ô}õzNèË'ô}õzNè%}¶à5Ë'ô}õzNèË'ô}õzNèö[íåø%WýIïòëhãýÛÅúSlØó!½Foµ²òÛÔR`eDÇq¦ÙqiôøÔøzC¾¤2Ê54£Ê%%Å3=\â×/rÛðåúH¾ú½'tåúH¾ú½'t¾ËmÀj;Oé"ûêôÐ;Oé"ûêôÐ+ì¶Ü£¹dþ/¾¯Iݹdþ/¾¯IݾËmÀj;Oé"ûêôÐ;Oé"ûêôÐ+ì¶Ü£¹dþ/¾¯Iݹdþ/¾¯IݾËmÀj;Oé"ûêôÐ;Oé"ûêôÐ+ì¶Ü£¹dþ/¾¯Iݹdþ/¾¯IݾËmÀj;Oé"ûêôÐ;Oé"ûêôÐ+ì¶Ü£¹dþ/¾¯Iݹdþ/¾¯IݾËmÀj;Oé"ûêôÐ;Oé"ûêôÐ+ì¶Ü£¹dþ/¾¯Iݹdþ/¾¯IݾËmÅA÷Nÿ ѵrÊ]J 6m'´Ïø#XÇ4z*øWvü+è[UAçÔ7OK-=ª#~KRÄ´²/n^òøWvü+è`w¯/è ÉT÷®?»J§¼ÝqýÜgi%SÞn¸þî*óuÇ÷qÆOyºãû¸dª{Í×ÝÆp2U=æëîá©ï7\wÀ,`ÉT÷®?»J§¼ÝqýÜg áÔ £$=%´¯6J3ÀÏTâM($æÅ8ü¸gt |dؽ% ó½ÆMÒX_;Ð'ÍéNÌryhXQIq ÇìþþvÖâTÛjÐiiÃÖ%&B¶ìê5FVÍBäügÀÈùð22=©2224l Ý*O¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñb Ý*¤°¾w 8ɱzKçzñÈ7J¢Þ¶µj¦Í2Z2cçm6J5+f'àØD[qæ! .q`V?y÷þbùeBÄÛè îߥ}£,ó/õåý#7ð®íø WÑ:2Àï2ÿ ïGjkú磷¦ÍX$ñTjÊ!$kRDÂ7[nEIUYT L$95è-)÷HIå/Oa`eÍÏ Ë¶¥Ë§{#z[ÉR<Ô¬XßÈD\ÄCxK9G&ε£ÇX[4ºrÒÔÊ«Røs)e´Sn#1BFfµ¼Ê]$ZQ¬Ìò`|RA§Ñ].¥Qöj#ª}·W2B£-j%!ÂLUºl!Ken5sh×qÇgtøò=`ãÎé/ñäzÃvÍ0ð/ÖfUUV£û;QØqæ+BÔàã|'3Îk$dÌ[RypIãjYÔdÐ-ØÔ¢rÙn:iÊKZÖ¥¬É8TæQàX`FgÎuvwHá#Ö8ìîÂÿ WÑ:2Àï2ÿ îߥ}£,ó/õåý"d°Î %"Þ¨ÝM^½iÕfZ:A^iCo{d';2$¨«Ôc\ÝñqiYÂÉ;O2çî7oKYû£¿¤ñN«ÚÎVÌÓK8-Dº®êL©ôÈtø2Dº¤¶Û-,úÝ`R£ÌDÿ 9·MäÊJå+níþ±»ªÞqãÌ¢$ð¤¡2gº%Xë2mµ(ÉDH3qXâ¬K+/Fx÷RyȤ:·OKjmj,äóyóe>BÈÉ$Y±fF8f¢Tý6ÄýBc𦢥.êÎHÇ)e,ØñbôÎô 5Jÿ uIÇf&Dyv2ã¼(¼2t#EX¤ÁA¸ë>ÃËÌ´ò-^.oyÂ[6Ø.2l^ÂùÞã&Åé,/èSpV+õwµ&R[+O¸Sá:¥¾¥©Ô[ÚRM%Yµ¤&Ïæà®Å¸£À+Ì9çRÒó#âàx¶A°ÄÌÔxìr8ɱzKçz¤°¾w w¼íÆduNqKÖ§ÜWV .)³7HÁв%,ÒeVS<¦"÷Ýs[o©³í¶ òiθîjim®SL3u:ÜéqÅ%_y,X^ÅmÊä7dؽ% ó½ÆMÒX_;Ð:Õªm6Ù§Kje:ä1Ãy.Òb¨r#|·B5«=ND«1§ZãDxveØËwM:bnE1ô¡2& M¶ëÅrÎJÊD¬¦c37Y$ã*>2l^ÂùÞã&Åé,/è©w«XóM¸´èÍ©Èó2Cn¥sVI? s8 BþÕ³\é¶ìÇ*H%uêKqXuu¥-³uJÊIA¬98E!½ã&Åé,/è2l^ÂùÞ Ï=ë~=MÅZçÔ¸ÝBª}¢S) mpÊQeYmVÅRÞºk.¦U«È¤¦]¹ 6Üu´¸)&ï¾<§TpIe3$7·nÎ`ä;Üdؽ% ó½ÆMÒX_;Ð:ÔûÕçíºÉ¦Ã Áa¸ÞUº¹QO&lÇ(£-¶Ý$ã}¨Þ®1oҦǷ§IYªTT´j[-³¶Q Di4á±3"ZÛ%aTÇ6/Ia|ï@qbôÎô¤û¦«"°å"í9Uj9´§ÛB ¥Ô:Ìr)%IÃ1Ü0W~mÕÚÝЩm¡Nºí2%Ô%¢Çï«J³a;Û(ˬx ¤°¾w 8ɱzKçzõVi^5uGOÑ#Hv2R dY¶M9ùXáÈ,p2ç>o~ò¿!Ð(u÷Ùsj0[¦#±Mî©M´J"{WÄËÒK Úã&Åé,/è2l^ÂùÞŦ|Y×/³¡±Ë/ED'Ôóæ³)r'iIÂdYæÕÏ,¬YM0ÕfD|$Äò¹³kQ¡H5¶âxbÎ2l^ÂùÞã&Åé,/èëi -.Dr«Nq®aÅ6ÒÐù0ò$iÌHpòá9¹ÈðÚ5õ{ìmWfeÙJÔ²óʦºlIBiÒÊÖ¼Ù¸íÖ\<1`ä$kÖÖTئR«LLú²¶ËD£R¼'àü¤qhµªûóg;B*ºM-½!ØoýíIRIJ4æ<ªBLÏa¥'à!<·- 3ßaùIÀuM¤)^J JÊ_ÌfÖ+ZeÀõÚp¡DrlÇ«¨m½bø;k5¾¼dxä,>mkìPr÷FãV_Go³TCÓ¾é$æ2<OÀC®u¨\éDj .\ßÏ"A:íe«¦6®E6Bå6Û1Ë9(D¬¦[K7Y$ãq¦Ýñ߯UcM6¢Sc!k1ÜÛkcêÎj4¨~æÀóa TK§Dñ'³P*ÄÆ#V¤5ãl`M¥dI%ÌIæügÆMÒXEò½åóiÚӫѤӥ´ù$áðEªA¥ÂÎÉ)Ìá¯VdJ"#å¶îÕ*ö¨ÏUªÐä@] 2d1&ûr2[éy$¥µ$Ø2$©£ÄË2#Ä6Üdؽ% ó½ÆMÒX_;Ð8]7Ý>Ûj_²KBN:_!,-J$DzkÊJÄÒø¶8sýáL¤Hv£\´ØCFN.¨ôGe°<ĦMí»I<½zKx¤²u@qbôÎô6/Ia|ï@ÕÓ¯z¼6ᬻ4yÝ^¥¥%Xhìºf¤g<9¶eçç>Ý}רЪvÀ*dìºÃÚuw\ãÂ% õ #l,äyömT 6/Ia|ï@qbôÎô+¢Pèòp[xU.*ÒP¯ºd_tYÚIææ3,1Ú8[×ú+-ca³nmMÖ9ßiJã:é¢tjNvð%tábf`l8ɱzKçz¤°¾w jïî¡B´®££IMäZ{fºia.â³Äù¬Qû\I9K21¡r×QtÄÒé =È®)÷ÍÂg¥íi%²ûùrMµ{CÛÊØÛ»ÆMÒX_;Ðdؽ% ó½1SÒDø3pW*¤EØÏÒ²¨ªmÃA>¯¾rµ¤HZHÐ$¸[U»·ï>_\&+íÜäSÜXiJ$½ÁU%|δYM+a)ÄñͬĽ©l%·\dؽ% ó½ÆMÒX_;Ð>Po(Ê¡ÁXsdi¹Ñ!<¨o%Ióq$¤²ÚË*k^+bÏ:ëb^©±37 q[mG!hCį q9öÌwònºj%¿&4ºÓ$OÁy´¼§CiÕ©H"p³¸3A$ÔYñ ¯ã&Åé,/è2l^ÂùÞµ}[4rs&É3ká%Á!$¥-Âm Ê#.Yà}§®\'HI¡ÈBêÌ*;È¥$ò¯+r¼hÛV8S4í2µ§ÆMÒX_;Ðdؽ% ó½ODºnZüâ¤Rªvþ±¤ºáVÇâNm¢ÅÒùeÁN©jË3Jæ3Á;¼g9B¶ª±©¨uuh®H\T£2§I2ðIÇØ|Á¶~2l^ÂùÞõG±Ö´¡$5)GÌÿ WÑ:2Àï2ÿ îߥ}£,ó/õåý"d°ÔlÓî¶®YU٪èêU:µ2Q6Ý$&EËÍ´öâxé[Vá&¤·éDUCÆ \ ¿Ý·¾ìåûcöØóóã¶i¥bÓµc¦¶h&µ9¢(«Q©MryfDfeááXØÂXÃl2r¶Ú )N'ì-ã( ¢¸nöÞBÒn ÁiÊFT0"Np«ú7ÿ д{PjR¥Ä¸#7²Z©¥Úyå!ÃY2²u$Ú²,ÈIsá$uêV%j¦õÒ¸Õ(´¥V""Õ"Ê%Åq¤d%.·x¶«77µð§ÂYñÿ £VeÚ iâzL"m%DÛm§#fâE¤âF³Äñ<H°"ð|B?Ês×ÏGùNzà8Ó?°_ùÈU£ à)3ªrçjX-1èlÖñ¦n2´©d²Ke[W9YÐÚÉh *-¤¬Îlùã ±¨JÒ FµMeñQ+iíÄ,W1´\Ò)2z½9Ê©)*1:Û1uF\<T¹ª|Ù4 ñp>BÌ4YÊdV#Ög7)X·SuÇy©»ûí¤0·5qõÇ)²#F<gp|B?Ês×ÏGùNzânÅf=G?e-eæÊK:î¾s§)qj%h$-e.'iíÀÈuKåL)J«V Æj¶N ºy¹\!ãJ'ÌÓ#*H°<«VÅ_³âþS¸p|B?Ês×Ä«gTª5Z¯Va{)ÙÊ )ODJ IKºì¦qÔZ¼ÊÄÕÉA§¼TÛÌã-ÅÝtÞ:]Ê! ÈÉMÆé¨óc<EÈG$]ÂYñÿ "ЬY·?\§´U§½%)¸©1eÇs\²²Äe6È£Y+Û ÜÃo»B]IÄÃva¼z¸èmdÙÄàÙD«V)IÂN½Ü\ݽi²âäôÞíëLý_ØÕÑ4lÔê$Òé«4< zHѶKIabgÔ¢ØXmǧHÑC1%ʹÜ!²eMRhå ³lÛyµ¨Ó^gTOÿ çÇÁþà¨^n.MËK®¨*Z<DQ¶`D{Lȱ,FH/¨m-²Y¨ 8(ËÄnrØ0»NϽYÈ'âbpÁ N),øòpÚfX(ÈÉ^Ó(Õ²ó©dVDj3ÀÏQíçÀb-Ò×û7®þªñ!)m-³zïê§ÿ îߥ}¢[yÝ57 ÜwÛ¶¶Ø=®SlÒÚVk¦g°5« gY÷XuQv]ô4ý'<_e$âóÇ #PM÷Òûâð5å,pÈxb4÷Õ^º-ÒÙÓ ¶bÂ8Î)Ķ_hÖ·µJ#Ê£ÊHIbÚx3 RíY±:˸e¶Ãç%²~Ǩ,òj7H¸6³Rf¢"<LÇÇ$ÚÖ\¬¹b×WTuÛUcÔ5ËI§!¤ÜàÙ°ËÉÃmÃ5ô:ÞjãR·h²è±Ê¬åÈmo ÃQ ÆIq9WQòñ<¤Þ âZùs'ÏÑMï&dƤ¶§'}ZÍÂm²-'ùiǦDlð³d¹¨hú²¸º`ì)æÚdJÒ (YHùȶôÝK2ÙiÜîµ59e¡Ë2¤¢|²åÁdqùE¶ã°° úXb¿+2éUxä· ÊÔ;-%.kc!(AFj7679ÔÓæ.RV.¤ Õ`»(¶ÚuE¶²Y£2ÈÚ3Q$Í IL3=¥ò,X]Gx±ßBÛu¶l)ÈJв"ZTED¢JHËÂDXóò*Öêòm.DBQI²ê$l¥$d ø7$¢"/xB¾KGû ä;˲5MÜ; ä;ϲ5MÜM²\$ á î¶ï>ÈÕ7pî¶ï>ÈÕ7pÛ%Â@?Ýl/!Þ}ªnáÝl/!Þ}ªná¶KºØ^C¼û#TÝúØ^C¼û#TÝÃl ¯·À9Ñ:¶ã;Ä-*4©*mÄ¥ddde´&&wÀ îߥ}¢ û°jç§O_}§îpH0ÒmÅ¢%-8IÚØx8)´ëغ½ZI¨©ðé0äª2ÔÃaå9%!JqiJTFÒRdµ$Ðe°ñaiJPÔªIªÔ[qnE\e!.¸ë¬¡æñn2âII57°>éÌm?V«Õؤ߰ªEÅy×ÙµjFm»&ÝBWI%e2###O$¶bfgL @Z\m#ÌãìÈué¤âRÜnKòÌí\ âDDX`Eâg+émµ¥KMû ¹ ×ËÕ$N2K6²yXâRRª,ìV´8´j4NÞX!oÄ+Z MÉqIKQEÖbDT©(Q$³$ñV2»ayòÿ }2Þ&çHMRNiÛRy&#(>K)Ë´lIbá©|åsã!¢ViTnÆF½%?%Få§S5gy庢,#sd_ÌE´Ï5-¥À#ýÖÂòçÙ¦îÖÂòçÙ¦î3¶K 'ÿ /Y¹Âe.5D²tñ%$ó!³l³a°2+0VäJ5È©§2NÄîZ MÈu¦Ò]pÓ#h#JT]©çÆWÝl/!Þ}ªnâLOà´ºØ^C¼û#TÝúØ^C¼û#TÝÄÛ+p )²©DxbG·ùò ã9T33QÍΤ¬ýÛ·ç_Y[m§P©.@yÖÑ-M¡jàì¥%YÕñ2ÅGí{KÎÜQ¶©³ª&Ý5ñä¨^·6,éYfJWDÑ©*A9*It×TÑbmª¥jM5ÚInö+0U!Mg8¶¬É3#ÅϳÚ:õ "#Y7Jp$5À)2õÈÃQ!*w:nbdÛfm£R z¼ü¡ÓËϤöc~=[È·¼´ÝòÖí÷Pô(Pk)±[S¯'ÛÓ¯FÓÈ(õÉZÒ£"Ò,Ëêu%µÁ)pµï4ë/¼\'Tc<X)ÂV)ö»HÄYøZE$¸ég¦àJq:òê0QçðµÏ¤J'6¥dDYj!«f=Ì{aÒÓ'Ùzs¬ª²ôík,5S)eêuJN²I.6j4©\¬I$/IìoǪô¶êÑkXÕHzÂeò>K ¤¥I=¦XÈð3-Ëhع{è¶EJ¤`Ù`åj9©j35)G±5àD[vÁ°ã7Fý?µ<ñ×ËϤñêq£~Úxëº7éý©çþ¸yyô~=RÐ.3toÓûSÏýpã7Fý?µ<ñ×/>oǪZ%Ænújyâ?®fèß§ö§#úáåçÒMøõKDBô_wÚ QÕ&uIqfÆ8§ýË!ÂÁÜø%8¶I#2öÄXòã7Fý?µ<ñ×ÊÍë¢ú¤ÊT§ôm!t¹1ø)fË`¬U´²º£ÙâE·åçÒMøõt´¯]¯ÓdUI¬=OMÝ~¶4Ë+)n6jÁÄ(õGn¬Ð½§ËfbOÿ 4ÈæÃÇhtoáý©ç=pòóé=øõKD¸ÍÑ¿OíO<GõÃÝôþÔóÄ\<¼úI¿©hº7éý©çþ¸q£~ÚxëI7ãÕ-]#]¨uhiñ){)]<H²Aͪ3Ú3ÀÇù¨ø.L>úF;jÒn0ÙÚ~xëµj^«ÕyUKã±krJRÑÔ¦ÂÁÃsâh#>QÕyyô~=[Ä]³HÜÒ~À©Ã¥¡ÜK÷ú[×eËj3æò9ñ<®¤Y¤V*òÂ*VóÂO òÉÍæ$ò3¯T¬Î)á(3uÑ4vß mã$ É̬RcgS®Üè´-¥ÊòãÉ0 ÄmØ/¾æStßò5ò,vÖjIö4; Ì»_JKGP¼í1E¨Ó ©-8ÚÐJYf<1<Û°wäÎÑ;)ÔØúS¦C£ÁÌeS¯ÅTy-²x¶KÖfZLM©DE òóé=øõ`ÑÅÿ )»:\KO5«^8àIQ)%ÌHúdZ5M5=qa·¢0ôF&¢©IK¨ñ7¬ÕäQ´Ú³d71NÅàfFòóé=øõJí)5Û®DwÉbuc±O8L®!YIJ#B_Τò±Ö°<¦Pm®¥!ƺæ&£=ûe1¡D&-S.¾_{7iNFV[T³ÄËÛhh3ôgEÂiÚdÅ-¥Ó¥¢¹,:á`yÔ²I<x¨Fp{S!O¯sUty>+t¨A´Û.³ì¤Ùª¹jTcÎ-õxßPN2£Ö ÒVx¯I¼¼úOc~=S ö¥ÊJ«4̶0V~*Ì 2N%·[C¤î)%&dÌË)90JÍÅqA¸áÑ{]®ÐÖü"N¢±6l[BuäjÒm¡fiÎn$k3#"ؽ/Ei9ìS´»OË©L mzvcº¶µZæÌXJJ}ªMfÚLy1IuRíÛtâkOÈeêZTÜ'ZEoPÒIBcy0BpäâXl<6IìoǪW^¹ê4[NnCÓiÔæØEn[º²Z õL-IJi¬G«",UÌ!Æôã7]Uú¢µ6Ñ ÈÃ6.ÂÇ +*S¬ÚrpVÏܸ§6°rkz©¦\ÝëiÕë2IEjdøÒÒP0á$£I§XYH+RDXà]7¨úU&$Vo[^%E£oÖãÕ ¢£Q$á¬)/ftÛÇÛæV<áåçÒ{ñêSïJòm¤:<æ[¬ªÖt/ïsÎ6Ô§W÷¥Ìò¶¯gVRpê¾k«xZ®R:eMSY¦RÑ7<èGk#ÇÁÜ&Ú%-ÒSȤyȰ0~÷<®©Dzõ iYI£Åº}AFErX"ÁÕ6df?jjVãÑt>ÔÔ»CÒ"ÞHÑ@¦U)¨_Kë)mm¨B+<UnnVÇIìoǪC|ÝõêDxã=rÓ¨T]i$9 . !D¢33IkÝÃbÇr[Ú3k´©5¹÷#S¡¿O\ôGiåËû±Úc3 6Ù ÜKX°ÔfjËͧzhç7Ýý Q$Äz#Q^«Ô ?«2<æn)¦yÔ¼ IÊF¢=\*nJ±:usJ+δô¨õ*nI¶u¦É©¼Î¤Z²Vµ YXËϤö7ãÕkXU9uKyQYª§ÅBxfy³ÁKÀYàH³aà4íݳHüH?`TáÒÐæ)ýþõÆXaÚf,qËÉÇO¯µn=Û-éhÓ¡Iq+LõHÆ`É8¶Ú&¬1W>'´G*ðtR/æÚ\êÝîVuv§ GV²Á'«/ü<¼úOc~=[Ú.f&WªO¯LS·ÖxTgVLÇo1#¬^©X¹µ<#f`õÙs&ÒD\6õ1tçûÚ5ëuNíN©:æMµå#ûßÃ6Ìu3îxz\7aW¬:Dfj .ªh2ÀÙ6ÁDæQÓ>çÕºõí5L¡®\StÌä">RúæxËϤö7ãÕ-¤ú[1aÌ H«Õ¢½,ÙÃ&RÉQ¥¯\ãjQ(Ò½J²$[1ÔX5Û56Ô¨Õksî.éY®;ìÆiQK>Zi S$)&3&Ϊ%®4Ú>=6×ÒU§M¡8M¢k§sÄÌm"S·£u4Ñ8hly$$ñ$$J-¹Z.£BDEé I¸Ñr«PRtä)&6M¤#ð%¯:±"2%,|¼úOc~=[&®ª½ét÷`.á²É OrKº¸.ÈqÈÊBû¡o÷RÉXrmár¨ù:é¶NwT2]q¨ÈSmAu´!×uIVG°ZÙÖ!(Yâi!=£¸0 3N±ÙNCD n;³[u£A©×ÛÏ}¾d}É Ír3st½U=³iÇ©ïÜQ]jK)·VµbêTJJUµ¡i,Rdj#yyôÆüz²\ÃL´èµvd¶ëîYsªï%ÖÙ,µHQØ"<ßÌXiná¤ßZo{·²N:séÔF&OxͶ Cq´OÁßîSèM+Ó+0í.,i¨(D8®R¶Û6RÚ¡²Ìâ¢ÈX&£>»ÑÉÔ¬7§T5\A¬ª"«J×< H6 "$'J|øIìoÇ«mqÝ7-éM2+ ãqçÓ£pf2$¥ÈÒTç)z¶ÉJShYíAS$àGò»|ϨÑïÚ1÷ã&C×EiæÖD¬3%fÊxy1I'¯«ÍÑAÒZb¦NÆ{1W§ºÆq²^U¡Mâ¢uf¢É>Ôê8gcDÒülMeMUÐÍf¯e kqnÆ´(ÐkSÏêuDZÃË Êòóé=øõl¯{ú¿Nº£D£eÀIýANµ[,¢)ö%ì$¥$µ§¬hËbYÆéÁ^¨Üj4'ª-ØÑµmØéÁe¦ÉEõUÌÍÃÂJêW÷?VëÌ×'×,3¨6rB'ÄK²¦MwaàjyËÀötÚc¸ëÓtͧ â*IÖà2ä&¤©Ih㥼qSm+Î|.cQ)åçÒ{ñêéÙA¨Å¸+ìÕjÕ:3NµúÕ8©²xC3!Hp±[¥)D&Ó"f"^e(t¢\·ªªµ8«¸®§ë8)C¦1o à:·#2é·%òW-jJ±y¬±äóº&hØ«¤º^Kê2'L«AÖÈu KdJJ -M¤%¥ÈÄR÷ôËÏEÔúV{B¶íQô>ù.³Ò%¤4DW6VÈÏO?ê/>ØßWb>m.ºÝ²ôÆHä§Ísb¬ÓyIÅ6êÖѱä¶ga ÃC"úGµü*ÑV¤QÝ©³1¦ü×IÉæ]qµ-HÖµ(BË23ç ³¢G'¡Çt»Ø %m±LUfi§$2ûbHÖ- Bâ×´ìÄu/*Å·Z¾£Ë§i&ϧP×6ÚsÆZ¥®+¨u¦Á¨»ÚPF ácJ°4©åçÒ{ñêSo©#XJx->¾ªV*^iYQ~ö[ÒÛ48GH,qÍ)ùEÒý©T¢½SjCL<¼qµ®¶i#ÒÚuMºò³£¶µç"3%bEUOC¾ÆU µ[Qʧ13Të5[!Iqµ7àÁ$$¨Q«Q(Èú°$h¦Û:hµ©Iªû(䩵J~±×uiFUhB 6ÙàÔ$ñÄËϤö7ãÕ ¨iJn©êp¡)×ãF¨XÔÉÂÍ·JuºÔ¨%7Ð9²à£ë]W=Ju±>±}rÙFql̦9/ðZi·}²`ÛqRe,Üo*ÈDëèÚ}Ãæ´µD*)H)tåÖ¡dûæn¬¨¬5kÖdâÔÄÈÅÉ:4rì+MLpÎ-uYE\§ª)[hhÐëy5I-[M ÒY6+,Ôòóé&üz¤z?~»qFrÔn9©m2¦Eö&;Q¸ 8¶R¢^¬Þ3<£=ic<98$£Vwµüy?ýBÆjcú,r1R¥iR9Ýb Í#k .½d¥/!¸iÎI2"Ê,6wµüy?ýBÇ-Lf#7ÄÏ$OïX¿úUþcûæªýËÖ¢'"=ù-kÍÚYKn_Ö$zÅÿ ###JÈhtííï£ÿ dFÌó =¸ñäu¶êP¢$Z"""&ÛBH°"j|NQxÆq?ÞÓ¿åÊÊ£õÔJírä³Kѱ|\=VCN.6FÍÅb¢<¦DfQûª2ã)u(Ú7#ˬ&Ý"Q¥X¨Cd¤d6ÌK gi:=ÁJÆÓØÍEÖd ²(Ù$ªN-çmFB°Ar¶¨qhsL5EJ4tlHqâEm²5µ×³3RùJ>}Á×GÆDåþ|¢¿¬~ÿ Öõà /t*OZc×/Ãü£¼V§Iì¬Y¼@i{¡RzÓ¸q¥î IëLzáÅøwÊÔé=Ú°è³-S Év¥1$¢KM~éay1R°Z°3^µ3ÀÊQĺ'1ëõ/Bºf§F¨ÇfÈZPÁ]Ï%I:ÖÜäýóaæm%´°3ÿ '#ÊnÌXíÝ5£5(¡»?FTú¤èÎ6£PuºóhsY©Y)ü¦W¶Q$25|ÈûJÑîÜry¹¡Z;T%´íJJõÎ%JQ8k9Ùób¥cÊÀñÚXç¯D^qÖ?Xj4æ?þÞU·êËQ'N[ˤFhÖhI2ZÇR5I2"ÖÎuû.ÏCÝ5r5µüc½1krðàÉÌ¥dæÕ+·÷F ÃVbÆbýÐTõEbiË¥ÒQ©1j$rHÜRÍ/6o°Mc34$ÌðÄwµ¾è¤Ôä¾íªô.ôÔª<ug{µ[5x{L¥0Ôø¾YÇxO.~3Ù\M´èª¸)ò©îëíô6éNw"ÓËDOì5gûâuNòv'e,ÆnÏ¥¤«t=Q¯d)å ê AQ2CÓîgi:öÍnRÖ<êÙí9ÈJX´¾é4S¤0ý"¯.kAǪHªçA"öÈaã{Ò¾e{l©ÄrjÊÓ£MºÆc×dwÏ¥ISÌ©ãiÕ-2SI'ÔÏeBHç´ÌVøÿ Cjy ´ZÏ1ÉD¦ðæQeV)4ÚÔ+IE ù÷ &¡XAQJÊN®:qóSRzÇ ZÍm;̰ÌxG«ú9Ó=ZZä#Fø!/Ïàïzd¢'uÈÇi¡Rg¥9XøùóÏÛît¦#Ûþw-Ê]§nÊ®MMëRÜí¦6Â}2kR~ðé/÷: 8òM.câ.6dKr¾©ñJÛaÛ!u%®cj$©M¶ËD¤æk,ͧ )5)KA`¤ÏæhóK³&ÍzN©nÅ¦Þ SÞÕ8ûzÌfáÒQ%×HÁ[SR.4Ϲ£liΨfkËnÇiÂ4´¥.êÔF)8¸ ¨[óñfóçÿ e¨.Y2> ¶ò±tÞqxfRX¤ÐDJV>LÎb}Ñô+ÔTªÂ`hZ#ª¤ÚdÒî·7ÈX«ÅããÎ1ÏÑKmEÑ]:¦\|n[©%$Â~BðÀæÄd.Y9$ËSÞqïÔÙ5ËìÐÝD 4J#Ôêd }ZC¹5Lïd&^yÖR´:îhã¨ó«ÉÀÍ8%#¹" i&JhVã4y\$åT^®©3ZBu²\vNAk9(#,pÌË6Ѿ4§Ø¦GDÁb$iiÕ²Ú¥¤Öúj'§Ôµ`¬°""--GBºfO¦AvÈt§2¶Z4ÈdÒ§VáY8¬Ë¶9qÔÚßþÉÆ~3Ù{G×-ªEÀË ¦ûqÚ$Å'ÌhIÚ$¹![Y7°ÚdfXOÜg9Tb£¯·NzTõ6b6jªy´-)JµNåRÀÈÈí>Ñ m³£( Ìuiqêd~èqÄ0ë-¹ÈÈ 5%HJpZP¯ -YIýIQ3%²Q¤ÔXecyÙädU²222®O#Çõ þ%eÅÜÿ WÑ:6úï·öê1¢øWvü+è}÷ÛÇûAõQîÏá` îߥ}£o¡ûxÿ îߥ}£o¡ûxÿ WÑ:6úï·öê1£ÝÂÀ jØï÷Çõõ+(¦ÿ --- NEW FILE: keygen.jpg --- ÿØÿà éwGô«'Å»BÓó®qÒÓ¤JJÛ|.2öc¤lÛÚÆÓ r}Ú¨ÒÚaJ´RîÌJR2ÖöHöÿ ±ºÔ4iwÙvçD¦TËí³,|D8¥9(=¾D(äTi#ÑkúcKÞ:°Õs¡ÀC=aæÍ³ &»ÆY)p«)NïÊsXëÎåW¼cå-®ÏöFù9_N¾Çò×gû#K|¯§S~´[®úªß¦´N¦µMwKÞb¤?ny¦&à¶àun/ e$$f£]ôobaI§¤qÞ5ìy,7{N PÖO<¼ä¤e±YÉÓ{d~Zÿ Ê8|½²IÍjÙg<U=-üʪ_Üå®O?éÏÓ¯¡ü£uÇú'Kü~O,ºe¹zZZµM±ö·ídÉ [k\GÔKJÊJÆ0rÝÏ5¢¶é2ÖªcÚWØ® ÆKl9Õ§6Ús£¹ *N@! ÷òRÙyÓèjõ{Æ?Ê/[ÿ OxÝö=?Çêöêfõ»Æ'ÿ é7½âF5uÌÿ Òtÿ H$¯ >ñ§kís¤s0èúü?©Þeï?S¯¡ /£úçöZñõ:êTízþÜéÂ4óË õû-xú} {ðï#ÿ m°JÒ£2UNÕ®ÆåL«Æ¹ÿ VÐwa* a&·IÑwAýbþKWѯL1ÅÏG½&cò\z KÑÕÆPR¹8 ç A Vg·U´¬þ¡²S¼nC¸Bµ¶¨ ÷)¯ùUéæÒ°ÛyÇPÄ¥+YJsÈ*ñªùOØö¥ÿ º?gÉJÅ8J£ðJyqÀ àg2ôi½f5Zõki÷f¡ ¶Ä1ä6â¹þ$ÁY ä§ÝÊ{Oå#]ú=§êö,ÊF»ô{OÕ*ýA§µiI1¬ÚÒë°fîÒv.#´0£¸êJZÏ$T;\±ËnåcɵëöØÑäİÅ6×X~3MÎyÑ)m)$op²!$!ÞþD H='ò®ýÓõJ{Oå#]ú=§ê,,ª[v1fuëó['%Ù®!0ûþÖ Ò¸ÃùÊÚ }ÌÂÂvEJÓ×ÕKV#½<u%N%ײCaíiì£~î]¤áRobÉü¤k¿G´ýRÅùH×~iú¥> ÅÐ÷XÝz&L{;òJ.ræ¾Ë¬ÈHO4 mÙìAq©,ï]%NSͲËÉCv!n!Im #!g CQBRåjuc¼df³eto¬DX¥úÓpu·a²néiñúTØJPA` ã'»QÑt¦LX£ô§GÚKro÷(7¸orå¦äÜØ`Äq8m¥a é á(¡´ì'=³Ñº¾GMJ×zy¶Ò«}¶¢Öß c¼U#¯9R ¡ qI¹*2V6d¥g#n íJd,PZ§Hô V¢cOYïrÔ¢ååøµa® [|T©ÅûYNÕ ¸«ßö¹tu©_éVuñø9 rð%C¸1>+M10SÃZÔ JWyAe;[PW5d^ô©±Ë±:Ööí]Õà¹S4Ã]sÛH/¡|5²TÈZ=¿MIôïFwv5f4ìÖlðïÌv=ÆT%pGW C©b:RÓYp$Þó _t«9~óÑIµ^å¨sn6Ùh¶U <)R¸×3V)ðTy¨dݺ?Ôò5^¦º re¥ûlî4tø"+ áè½ïFNFÆÐÞë«îÈXt¦gi>`Ú®¶æ \/JBJV¥¾² ¢[Ø3@ ,6ÚO2µ©:*Û÷׫AjýÓµXvß¾½[åöWîªÛVi·µH·¶ãéÝ;9ÑkîSÜ)oR#0+%I=®KG4§ï Z´ªÍ³TuWÐÓöñ|) ©Èn/|xR8¿ºl^ Ú3>£ÕWé²ê¦Í±¹Kf,#Å8¶Ëíî jиs89Írä¥WîëµÇXÜ´í] ÇÖeHmo !¢PKÚ½òo'ho '#cÑÄ«´öîRå\"ÈnRÓhp¤nNÀwáH^0ÉIÆ0w,.KéAJ ¥(F®:óGÛg=uú4y,¨¥ÆÖ¹$yIOuh´v¬ £tö¥»\Q®ë4CqyWµñ¼$pHå~øE\Ëv5þ2t/°¾wª2t/°¾wª¬ÈZÖÕ+\ß´©}¦]²µ ¸× Öt³k)MÁÏ 3¶!Rö$:wa²Uٱ˾·{ºímfåj|'Ó¹K¸;²$FAî4ÁIxÉоrÂùÞªüñ¡|å ó½Ujj}HýQXmbÅ.Syf2§ZK1Ï Åफ¥ ·ßPî8ïYÊÓjnvë=NË,EhöË@6¾#½øB¶$ùV)2»ñ¡|å ó½Uùã'BùËçzªöeĺÒN@ZB=}æ!(:ÎX_;ÕO:ÎX_;ÕWÆi`L¡¼dè_9a|ïU~øÉоrÂùÞª¾3LÓ2eã'BùËçz©ã'BùËçzªøÍ3LÉ?ç,/ê§ç,/ê«ã4Í0C&Pþ2t/°¾wª2t/°¾wª¯Ó4ÁCøÉоrÂùÞªxÉоrÂùÞª¾3LÓ2eã'BùËçz©ã'BùËçzªøÍ3LÉ?ç,/ê§ç,/ê«ã4Í0C&Pþ2t/°¾wª2t/°¾wª¦Ý&êKn.ûvp1û{ÂP67BR¢Ï¿ZxÇÓúã@j)ºNà&1:ÛuôÛVÀJÊ Ú-´äãíÉ R¥ R¥ R¥ 0+qmûëÕ¿ µ~éÚÌ© T=bó¬Öém°ùØ~"òT§@#eJQ* R ã2 8 [ÙêFä)ÒO4þú®®¨Ò^gØôó¶ÈâYÔò'$ãI$|¹çÏ5.¹ÙôÕÖ{îNÇ>c¸ÞüÅÇ Û÷׫AjýÓµ¥³ÿ ±nZª½Îo Ûvꥰyq¸ì¶VR©^6 m\D¸ ¤I4l»¶ ´\íºÆÑ.6çWyÎmh á÷ÂA Æ³Ï Êº ¤b¥y¦dÊÆN óÎõSÆN óÎõUñf!(:ÎX_;ÕO:ÎX_;ÕWÆi`L¡üdè_9a|ïU<dè_9a|ïU_¦i2ñ¡|å ó½Tñ¡|å ó½U|f¦dÊÆN óÎõSÆN óÎõUñf!(:ÎX_;ÕO:ÎX_;ÕWÆi`L¡üdè_9a|ïU<dè_9a|ïU_¦i2ñ¡|å ó½Tñ¡|å ó½U|f¦dÊÆN óÎõSÆN óÎõTÛ¤ÝImÒP%ßnÎ ²¿oxB2 ÆðHJTBy÷ãËPú\h E7IÜÆ#G[n¾jØ YA;R¥¶`¹ dg $[²fÃy_oqmÖÃ$p{¹s÷ÿ ÔæðßówÇrÿ ìãûÆG:ñk\éå\dÝLÚá1ÔK,¤À2[-+wº Rv«²qÐÁ¤¥/ÖÍ7£ÙÓÐ&iû¥®,X\Y,©!å!ç å»;srÒz²ípuÉQì#Ýf[§\Ô÷]\EÃy·ÛI,$<8IJ-mÞNÕm[ k=ÌJ®·õT¸µ,&Om-â1)ĽhFÞw-)Æå$75Æm]Îè9¸ºy¡PÒ¹IÛº*<î@M@EÞèÎùxÓö 9|fÉ,DL¸o-ÉRãµÖVÐJrTc¨8Ùí)i%*É»t}~»jæ/wT[¥ÄDÌS7©ñlÆuJCÑ|¯![]_µ[*jÝW£to/RêjKºÊÌN¤d·mD¤á ÊWÛPi»]éLÉ·Jt£% ãLï;QÅu ¶ÎãÉ<E'qä3@hº7ÒÇxµ·ujÒ-¶;³D~4ÇzXJÚë)¤¥¬¥¬ ¹¬n dØõ¿j]1eì.kÒ[YrPs~ÒÙ Rþæ²v´WÝRiÍëÀBÄû&ª<iëqM² +^ØÜA PÚHw9#?QI± iïªq|8ÿ >CQÊűpÐæªkH`ß-²ÛÒMÐeX}jb8#Úªâvªì7ß½C}Àé¢~m(zaΰã®?ÕÅʧxÀÛ½9况jó¯Ú§o(µéVµ$s'¸å´¡Å©-¶ë»Æ]ÁJÊH<÷$÷×¥ÿ À©37Ç\B]h¥ÆÖ¤Ètç1Ýþúf,O3LÔÃ2üw¾<3'ñÇ{éÓ4\IÎixfOâÿ Æö-¢¼ÅÓ>=ufkS>ßÿ R¥ R¥ R¥ XÊ´mÜW·qJ]{«Û Ïú¾¯ÿ Í.b_AQH°ÒÃdåkQI)¯{^:ú?óÓñʧ¾üæ´ücßò«¡6ÙwuvìæuO\ónx Zø)9KÁ"K㯣ÿ t£iq Ðã]!\¯&Iaëlf ÉwïóPÀ ¶9íò¹t TÞ¨°¸oÁ ÷¤V?ç,/ê®M3wV?lZyQìzc ¥Ê-µ±.´®M ¼±äåÈV,í7&OG;;Ö]ëz¥4½¾·ÜÍ)ð¬{°µÖì:ÎX_;ÕO:ÎX_;ÕK2èbkë ÚýQâ bÖÞô3Ï´ ³¹! ¿×ËG/ý][7@o®%VË((/£uje;¶íÔ¤´% çÍK¼dè_9a|ïU<dè_9a|ïU56ébÔq¯0¢xI0Q)#õ 0Áh©¶T R¥ñB¶äã¶¾2t/°¾wª2t/°¾wªüm?~²¼ý5û4ì;X¸¶ë-°ËªPZJ`FÄ/=ÞJ±-qz¶,=üN®Êß»¶3ü½óøÉоrÂùÞªxÉоrÂùÞªY¢[JxÉоrÂùÞªxÉоrÂùÞªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbèÒ¢^2t/°¾wª2t/°¾wªbä¶månbãÞ4I ;½% ¯SjëüKCpÃ(¹Bu°Ü§Y ©%~áÆ´4°w`¸vÙ¨´ZQ1¨µÁLªeáÛ.Ψê$¨Ú<ÍbHÒzZL¨Ò¤i+ÏÄh3× ´¥²ØÉBr7Ëüô¹¢ªÓZ¶í`ÒE_L'äKºµÕÒv0·ÔÏO·³%·}Ê=i·l4¾£Ô)l´¶íw;£hm««um¤ª{:8 ºcm xeJ[nl`Û¤FrÍLiµ¡® -°ÒÞæPæ-ÞÚ{ÆÑá^7=?a¹ÜbÜnVKdÙ°ÔLqÆ;BII9àÒå!õÍú nInظ÷oÂ×aqܤÆâ:¾&«~Ôð7uZêmca½ê|(PnóäéÒ-¢4Q·KO`¹¹Ü`©ÕBķݧ\¥]dÝ\¸0Xp $JIöÕ³XÇ,)Dy0kbÎÒ,Ä -cn4gúË "ÞÈCOröĸJùÐä=ê\XB£%rÒÜQRm% $R=ÑÉ Ú ²7H @ʹ«¸mÓs×ó/ÏXbËÓ1fÛ ±*bÜûÍN/;! áäÝù9ãà¹Tà· 5XÔ*ÕêË"b-6'DT4º×Z+ZxáAÄG¹5³VÕÌ\Õu¬ "ã2#Q®oȲn:´ÉKÉíë$q8ÜÞw¢°N`&Ñu¨_j<kóU!¸Ý|5n0 (%%[³ Ûq Z´@PA`§#C¯ýÝ!i-@Ƹ®w¥HÓ¬$7-Ç^.6µ é u +oBvÙl·´ÑÁ¼[ßöGt6å*êÝÂKÑ¡®;%Æ[hlºµ$.8R ÔAYRpB@3Tôe´Ù&K%=!ÅÏû1åÉu(Cêo¥ìE QX QÛ«vVí¹j]Y¥.æÅÊ- -¡¥)R£^Pä dÌmå¡Õ}3¨uc·i7bYyrVãþÝtÚôW- ϸ§¹-ðÎ6$gkr¦]® ºÒþ¿] º3¶Ô0c¾_mm-)Ô«~ÒO§§úRAB¿kfµÜD¦Ä ùÂyÄ)N½¨NÂÂI #Ã>°¹?j±Ê[ÂîUС©=¯wr9]Øê¾õ%NÈÓ:%tË|¹Ó¶ÉÓRqCr)â { náöß¡îQîÑíö#77®"¦Ü¤Ê:§V ·Ë¥ @SÎ`q´g*4×H÷Åh¶¦ðÎãGDe=¥|[®º®<Ôq»kl)[Ksg(;sÛQÞbA·Ú.zvT©w7¢F¿3 o[¦6Üd¾§Ze/䢦Pig=èNmã@ßo Ì]ÏUÅ<Gn5¾O¶ðÛCí¼!!Ðp©¤åMðSÍXHÈêF¼9Ëu$$jGç¹5ébÞâb.*"¡È£ÚF!yVpB@t^p»íå Ü#¡¨éRúâ:¶÷ µ´ÉRRIQ)Fô¤¬ Êèÿ öç'Èñ¥ Ñ¢¥ãÅgTÅMì1r2l¸&Sr[ÿ q½ -:ß1ÔíVåàÓqFÇ¢× Å ^üe=wè¦eÊÄÜ «5Ç !çu±6ä1ÛxÉÃÀBÂÂR\wki H4Ö·bt8b_ ùïÚÚzd6·ÐàQVJI®}£Èch(øÝVËÒbA³IfkÐæ¬pÒÈòX}Å/jIá¼ ´sÙ:5<²ºº[2ܽð¬)Ã=ÃÁ'qÎÎéÑ¥{q%¸VÖ-ìDÞRÛ.½{J%HZÁ=£@lú*ÔÒµ¨eÀvÞì2Ð"¼ÉiÖPÜ[B\A'k(NáuîêÖ£HY|g]¼IëseËß³f8ò\n2}ÏnsÏåVÞR ¥()JJRR ¥()JJRR ¥()JJRR !Zþ½ÿ ªÊÀÏ}´ ô ¢ôÔ¹vïÀ'§% -ä©N¥aC$9ûÀà+\ÅÒ%¦ç|éçÛª!ØW×pR^l<BY) !EJ 88 ú«ÙKüæÞþS±üqèï8á||¥Oz;Î8#éW j+V®µÍb$-PýõoÌr|ü¥²¦B\BUÚN R wr9ä=²k6aL~û¨æi×¢HñnkOáòv9µ-À ZH8AÀ$ge+_Þ"owë¿z;Î8_#éSÇóÇÈúUÈW>¯¶±~tjfΧ(G~Q+Wr¤$¥XI$9AÅÛCëX%(F¸1ç£Â ¦&ËR%¨¥ m¤HçÄ)Ç£öb\j/_ú]ïå:ÇóÇÈúTñÇ£¼ã ñò>rí:¦EưsR=-KJi\×\S¹N6[KÂÜ«8V3ûÒ¶=[}tî¯UU±Ä¡ön.LJò¥ì÷-´²+Ý´§<Æ#OÙI+çäMïå:çÇóÇÈúTñÇ£¼ã ñò>qõãr ½¨Êcõ³ kªîÛÖr%þ?º¥z¿Ak½/g~éqÖqÜa¹Ñà¶ó%Oºó(y;rá«'vRF ÀT²ã¨µk¿úEãGyÇãä}*xãÑÞqÂøùJ¹ûN¬©n6º±Q·2$I¸;&OWKEhBV í$e+BB¬¬Z×2Ù©\5/Äf#³^.Jyò[R6 $åj@; ç}¯Þíþ§]øãÑÞqÂøùJ8´wp¾>GÒ®Ka¿Åjc®t H,÷6ÈÚjANÀ=§¼¶H<ñÌàãÞlú¾-Ҫͪ$êyógTçKeĨA9B³ÙÉNì`U^ËOרo)×8´wP¾>GÒ§=ç?ô«l:wYϸN·ÝõRô´ÈH.5íùL<´puJ ¥µ+jPÚ$ Z¢¤µ*ÎsÝoû[_ÊvW=ç?ô©ãGyÇãä}*ãäØúLpÒÞ¥½áµ)ërd>ÙC4¼å;Ф¨«=£Z5+ú%z¤kÐÚC»¡¹*Z_ mHINK|=Çþ{°9äöMüÿ PÈI£öZNÎ~Amwÿ ' çºDcK"q/Îö¢ÉP,çal+¶9('f½)ª6dAÒ5;èÕ±Ðç¸âT ±=Àpäá¨àªýÖ~L»Ýÿ RVsÕòI(sÃj÷Ó»ÎnÔ5ôs¢Âp¦Lþk¤í#²å%!S³#ßòczùN°ñÇ£¼ãñò><qèï8¡ü|¥\±?Hê(2ç17¤ûc >â¤\0qÃä1»Ý© ¸!@¤káØ5ó\æ«êϪJ"BMzûëJVÚ)IÚT£ÞÆH!X/fEÿ .Ñhð·¬Í+áïÙÃûû=ûsÏv9׺թeÝvñ®`\í¦âÔ%K-%)ß¹µml¨(p$§³ÈÞËO\ü7¿ëÏz;Î8_#éSÇóÇÈúUÈ0mû³×lÃl´Û°å;.ZÑpJ×±´ÚÜY' ¤¤)%*JRJA½H·î±×1Võ½×Bq}FPhekA ! G ÃqíeDÏËÜy~jÈD'Ô«ÚR27>¨QþÉWGEJTeIÎ}±G9÷êA7úЧÉ~²húê/~<oIoéS¨½øñ½%¿¥Pme¸Bº®[ÍÇ,4Ì:ìÉuªp¶ýÙ cÝä.z5u+TÆúĶZ^øvDTq ä8)Ù¹Ò%B XØeÄg§ITxÂSÈfÝ!kB ÖÞÒ£!À¶ÖÖ7 e#)ê/~<oIoéS¨½øñ½%¿¥Pvµý˸ç¬ÌÁbR]LWµ©Ç^h°ZÜR¦qÃ#IPÛÙ5#´\¡Ý 7:ª[+ÈöÆÔ ¥I8RV ÈÇqç嬻oß^ý«÷NÖmIFÓP®©ºCÓ¶×6L¶ ¶BBBÒ w`cÉËÒÙ§ì6´Û,vÈ!/ª@â6ÞRv©}0¢Î{ÈåÝ[JVJiaiM/2SMÙ£&RÒäÐRIRT¼$n A<Á9è4ÖëoKð«¬?DuÞ¦Þ÷ ¦ÈyDyþµÕÌvÒNÚKØâ(!cí§õ2t"Óiñ_§æ|æøz¤äÞu75Ûîµ|\nýjGSJiÆ{Ú ¨¡%* Q*;Û_^àØbÍccWÀë+óz)y¶**d)1ÇeAk å8E|Z^q§í!'<vßv0v¤ËãBèý;y³\ÄåKun¸±q+!A·[*yi-±µnXP t6 kâ¶@B¶©g'jJ¥ÇDiï³"GãÙ¤%ë©ëMÈ+Y°¶ÚÚ§@K')#两Döf߯kªÓ.èÙñúµÚ-ðÅM¶ ÜÛÑU<@pöA â/jP¬'v #&¼ôþ¶°+¯?|.¦_6ÑàÆc´ô¥mÖRK`!8Ø G< y6Ñ´ flÏiÝU2ì3ò¤BreN9)+ah@Leö}©GìddáÚt&lÔ*ºÌ]¦æ¸¢íôu6Øâóá«-mÏ ñ˵٬ÚOøÈôÍ]UQ´¾&ÉçÄÁÂr<~6ß-¸CMµ-`ØHÈ Î«´»ÕukM^$4ÃwÄ%´4É6¼ °qÿ mnp°\¹sìá_²ô¥#Ú;°¯IÒÄØ±U) v+Î<Ë% ©%ðyÏ` À§QÏeF¸Ê»1wpaje©Ä!°ø#Ã%%N«ÖíÁæv%ÈÕ G/Ð^ikÿ J%+)JHq%h°FAq¬4Á©®-½øÌk^vÞü&[Èiô2áh¡Íáiöµ$UIlËáI¼øé×zZ5þæ÷/·kkÌ« -4ÂYÚâBÖÚv)Ä)$»°4µ¼[ÇÑ¸ì©æ%lÈ*)Û¸yAHByï9ʼ}EØX¹I·êKÌyR"7©ÖÄ´!øÉyR¸ FâÝp0-º5e¼K½©pæGü¨°÷K|7En6¦ð¤ïC(JÒRI8'¤^Ϻéý}üf¤Õñï6[m©P.=^+Z&èdð¢oFc´A÷*.¥¼Ï<Öõk릣rÃt0ç£)ÝÝ RÊT¥ \ Rw¥% íçr·hËx³»-»ûiwÛ$±Çd¾ür¡àLb³ñ);³´ ¹¾»éÞ¡]5,váêµ·e /uÊ>î)QÑÛNÇP TB ½¬áûëÌZMñ#êÕÖÆ¼,¸w«½)RDG\][HÐiÔ¼²Ïa QµJY!A[kæåÞwCY4¬fÇn{¬¾å¥Ö_|)jKG %²8IÂá´àkñÍ159«}ÙÖXÍ?æV¶ d4ÒФIKÀJHígLFV£CWn¥"2#Äeo¤-3ÉÁS¶uq±Ò1£¸QÀuêߨ¼ÍÛ\éÔRnªz[Ód_"Ë-Ëd²ðòsìR¶ ¶JUx øX:GnÃv~ãhsëV´ÛN5rG(KÀ·TYÃÙPÁHJç5hè®D̵3o?ãc±$ÁOê|$»% Ä@-á[È{ƶÇkKN¢4tÂýÅÇïLºÓ®ºµ%,²ûMÛßÃVÈGá¨Ï{7ázܶ©k¶¾X·ô~ÞfßxÜÈâ¥Wæès±¸=½¯VOu{£[ÙXÓñçÃ=½VÛy¡+ë0ÒÚY)!Iqµá¤îx<È)È ö¹è[+ÎÒ\¹õNº±ðú)^Ú¶ã)S{sêÆÓ½Nr6¾]R·ìW)0ÿ TBtÞÍÇ¿VfºF¬²-qa7§U³%ÇX9È.>KmÞ PÞHÛÔRwgvF3¢ô¶aßå¦MîèÔÉaÛ#:ÂÇWqÙ+8¼¬ga²síNh¹bĵ¢ç¹×yÑ_rUݶJ¦(ñPµde$íÁ; ¡ôíçSß³í7,65^m!*W«< ·° À ¼åxØÖvÓ*}ïJÛ§ô ÊC23) âÙXÀð íèk£Ð>§³=*zÇPj9êE?t"FzôG ê) Yö°pÒAÎA:_^ió¨\¸j87È<]m«·lyH!+(%\0¥©µÃnf¢Ñ Ý ¾eâéc· 9Í'mÇCm¬2CdqR²¢mÂNHÃÓÁ¯b[§OKycÆh.ZYéy´9±-©²¶ÒêOl'·j;J ÖìâÝÐׯ¬GÎìdÀð[¾ð:Ð=[ÅûÍÜMß ÄÛ[sζíkM$ÍÆÍ%){¶AzÅ_ZW·8¼÷uAµ@¼¿!»<[NsH5.KÓ MyàÛS$8u«vÊ+(BHR ÎHHlõÔz [uËÚZÛ¨·w!]i§Úêáêt- æ(ËäO,÷Jm;óêbò=mºÂÒÍÁÅ˱MT&`õZ"ÜRÌM©J<U2àZÖVæålÜVÝÂGÂ5ðEÖÜ/tÜÙ}®©yBv³ÂeÍñÖ\J®E¥$mtæ·HqD·WspEje¶d ÅÒâ)e.G.d)·2ÉÎ!G2~èÞ[øº·}õ% DøälÞÓH',严¨À '&±´åëRÚ\ÈÔÍWÝOF¶\#ÈYu~È%o)j(Ø2Ã!J\ß²w¤/k}åÝ<¤Àæ:RÐâ⨩M(oqJئÔÊÁ$ï¯z'£¨*Uê=Æôg¢Íjal¸¦]}`<T8IÜ%ØÊO4n*ZBJöGÓZew¸YMÚ0j³á=)µ¿µêFðÒRÒÜJHØRç²J#*»ÅóþÊÔÖ$©éoLtèSñÑa«ÌvPÏÇPÜ4¥'d k*-íf¾¿Ù[¸]ÄO"ÙeÜ˨ò¢»&â^iŶw(-°ä)XÚ@däÎsVèË\)Ó±uOT åvî2,§vn[R[JHi9òæ1gÐQb;¦®:®æË6k̶XcÊÚÈÁ!Æed)@-XæÒßftÆÍ'gjÔ&]® flgç·Äe >ZoÐ6¬(((r[=iª Ù_Õÿ YQ)Á)¯]+Òôä-rÔá'Ä9!¨Td%å¢ÂX+RDíÜqDhô®¨ä)®øITÆá0©ÎÃϬ¨ «jN02HIÊc·Fµ95¹"|@ÌûNÿ J¢s˪Íþô)ÿ ÀK1e ²ÞIüõhü¿XnR¯çh¼µl}ÈÝRJÜÇWqVZÊÀCqÂOvPyÑ|HÓ¬Tí¦Sèpâ¸üË:À)¢Éû+?RpFãØ\=õo¥3ÿ "°¥É)Éä Q÷ÔO:Ô{ç¾ô¦åSØ\=õo¥3ÿ H çVÓ[u4iìú?él¡è =IBØBJÈY=³ÿ +Êë=@ÍÉé±_ ÇÐÝn-º;¬'»,¡³Tvöµ¤å*P6%ϤlZ<8L¹H³ÕNz,öx&3.\qüáOöíÈ=Ãvâ*Q¦dô2ÍÏe®ßga?LCò\BRâ!KS%D«i%$¬%[@¬Oh¥üaAõ)8ÎüŦ}·ö..)Ékmóï-YÊÎ6§7¢B·vI$`×Ú·P9o¯ð¶¦ÝeÚ¢ßÜ÷¼° NàÚv(Ù*;ÀQìíÁ$zB¶ÜU¤lòÒöÕÉ3¡¦ÒÛæ0©C)B¥«!ÆÖ æN6§«GãáÐË©N¶¾"óðÓv6fCÉamØa! å$2¥ JOq×HZ¤KC&ÌÚeH\°ÂNJ´ûV[P £n R5g·Uí»ôH÷ «P%ø1JÓ¬ÅUÊZxyÙ4#iÎA*í(ãZm®C×ó.-[¬4hqMêk/ήqåÚÂQ )*ÆÍPFv×5VÜã%Ì®ãjÝCØm¨¹ºb(¨©·wv䯳{k£uÀ¬Ë®½Ô×9±æK~Ü]bJdÕ¦+HuÔ!N¡¶ÒJA8â`)XÆåfMmÛÚ©^»CÜgõÏäx2Ù·s*Úøe*JHPìç;ËÕ Ö§á¹¡ÐÊä]"¶2m&B8k!¸ÒRáL¶$¸ân[EChNjJVÁ_Q£+éºÿ ·ÈÄn´y0Ù.q ñ wíÆANv¥£õãKY/Z¥èÑ#]î7Öæºìe±:°£ÕZÞÚM÷´d¤/~,[×fX¢ôrõØ7w»Ã·MhfC¥BAu|RòÒV6póÙÜ,¶0I(qß2¸ë;ôøC«w´!¤4ûv¨ÍÉ@h q âáÖëp¸DkÍHRmvÖôp¶T¢õ¢#®8ZV[Þâ+sowh´ûAÃ^«¾+SÊÔjz*®¥JÌ&K/îÁP[;8j£÷ÝüêvßG¶ö´ôk;-òå5éè¶ç$--ÛnNÈʵa íʼÚÞ=È÷{FOÔþ5¢ï¥îø0ëF³*Ú©ÛTZn9(l)@pjHÉáÕ^½¢¹ ¾,DÖ4ÉRÒ¤¬a²àiIBJC*J@Ja% ìµ³î`¶Í3{¸tX.HOÃm¹1mÄ8ã*BÒâRðlåÒîJUÜ2NbFOð«h0çÔ_õ}êúão\Óiqä=Ç.·gË/ßqhh)À|¡YËYhéT&åt¹íjê%¬ÙâÛ)), îYHI*HQÉ AÎjäºXõKPG¶ùp¦c³ìR0SS ÆQl¦3NJJ Ôá '´¶áó`êXÝ"sú2Þ¨ Ñ=6FP6³( 8ëî,¥%)YYNOµî5éËU½p3º5t©¬ÛlYyN©Â4í¼©Ô8¢x åi%*>Ppk^u¨Òc$¹mq¸Ñ¶\´D[E´RÚØµU ¨ ÇhÕû3®×ëm¾ã£ìx4´ëÓe,EtrÛEAZZ)RB À$«WiÒÃÓPâYbÙ èfãÿ å¿&@u/ñZW0ßrOÂT òM÷Ô/_AÛâW¯ë=BíÆ<ã"ÂV²Õ¾;qûØJk*À *I* NIÀÇÊõ}ùmÝ\MÙ´3(*ßûZ1± åÒá8K{@ÚÅeÃ$;iµÞôä(we˹Éj8°G DrÚzÂw-ð+ Ú ;´ Ú).0^p¸´Ô[r Bz-¸ÈëVÈÒVÜ-´-ÖÔ´ îQ)IÁ*QÆI',t©úü;U®Ãq.5'ÀP¸»V¾W<À>è$ ´ýÇBËÕVU^ZKÏFoì¾±d!ÒÜU2V ¥ºÖì ½å'õæ±¥ÃtÖ©jEYµï%´!ƶ2U¹I<£#qRµÛPW 3àÙZ#]j4· ¤¹lÄC¶Ïbð¤¸×S¼¬F-óTZîN\b͹K}2©0#ÈKN§*i.¡Ih +t ¸p|àåí£¦*åP6VÊéT(¼xöÄ¢1 e6x<&U¹ hce9'jq;[_¦]Xº8mmKeN+|{DF¼A RÛi%CK@F0H3A9cF#Q5f°~ ½Xa¡|vÖèóa-cp[JI ç¶S$íBk+Qi+íï[i-ëJ?jbM´>QÂÜu,%ÇÓÜ¢ y¨¥Ô²\OËèRº¬µ{¤»{.0âÒR¤¥¤íkj $¶RR H5°Þ ·i«\ Æú%L_×K§´×Á² JRTAäH3ÞoK.D+Õ©èúe÷âHq ÆßL¥©yqÒâÐR+´íØ´¨ÝöÓº2|ÙúUÃHÍròü«r"À´4¸vçÎ4£ÚT¶ÜB¹$«yUfUè5<=y Þ×*¤ºO´µjtÁf#{{1mìF.$¸¦:G>k*æIòYª×zz·ÙcÓ#?wݽ¿;m[·nCJl¶nʲ¸©]ä³[MªÒz:^¤¶Xã*r /ý¶#VÜ¥2ÜB-à,nì¸úMÁfe³H¼]-»#!2KM:¤öYÞ«HHÈRB{ÑÓO}p*º Ò-ò]Úmº<×]Zj;1a³·pLu rËaµó=°I5 hÖªÍ_ß\OcJÊÉÝÆ-r7¨$îÊA r« 5ÍW]G¨möý)`ºÄÓmõ¦ä@°C)ÕZPÉ'Ô»rv¬ S¹[opýÊ35F Û,¨ël"4GÞ\Wh©GIÞ÷3à 8$ò:÷ÓP´am<F*ú²*ÎÖ賓³£õt¸Jm+ylíXo=§ÇqåßZµº}¦àí¾éL %4â %âÈàfU½®Û^uçÛj3-8ënq, Ñsz°HÛ+ÚjçiCÉTãÉM¶Ûæ Û¡È-åmiíYïÂR9^÷½_3bÊ #23ÑÚðÝAJ¶©!I8 r) åy1Wöá ]¹AiÔj2ÖÄ× '«HhбbH^TçnT¡îpdk+|æ/Ö¨-¨nL¸òë¥W(Du4ël-æDpx¥%(O5¡D檣µ¡úõ*ZØ],«Tñ®{ä¶cµ&2Ú[¨QÂT¡ÚÈaé§z>WFÒ-·+¥¥«ÌHZKÐÝ¡ð¥w)1]QÈJbChçÙ!jsÂî ôôkÆØ¶ÄSDi-/ºÌ¤v(j8ï2s¶/&L¯rîÔ_|î»7v(+ê âdÃ#v6sàkUVM¦MlßÖ&l¶Å6û&;3L¶àc ©Ã¢¢¤Jå^úù£¬zvÑqðeϬ¡öì¾Ìá*y"PHJöaÇ9 IRþi_éÑ@béíA*ÞÅÂ-æü9S ÄZÛqõÒ 0VOrAɯ[¦Ôö¨Ìºi˼̽Àué0m ¸@! RX àãª\¸êv´¡ñfE¥Û`u¸ò¦R^.¶ÉÂTÖ=¯%'ð@mGªtuþÿ |ï ©JÀÜG,Öèý\ÙÒ×Î$ÇVÔdx=Ð_qÞ ¹QN@Î0sV¦·/=] ÁS1nfÏ 5oºZí¨º¢Î0ØHmAXíHúÔKÜYDFõtȹÁòLy%8û+S<=åT¾ÂÞ(NÐÇ5^¬]<pR¹^Õ Û¥ÜW§/ Õ1.Aèj; )VÜ%@$ÈW]=d~ùÇsj¢§5ja²1§ -JTµejR¸Z¶üµtÓpcÝÒE¤.*ðsµ0õK¬Âu2TB.±¸á½ËYX qovYÞj^îKxÂ=JæÔD¼Î]º&z̶"8ã,àËHÚgköVÔQm¯lWF-²ÖFäWËÊVv,§jÁä <Y¶Ë¶°»~%ö$ªñe¨I@Im·§ °ÐHû[d« Z§îÚjG1¬ðï=yrÞôg^m28M¥3)Ú¦P¤e ÚâT Ú¤$+Ú*9i#ÔÜô~®¶H祯pèf#R :Ò¤8H OlåCÏxeÎû\÷ \áI 1µÖ$4¦ÜAÆy¥\Ç}Xrµ$YKú¥3ã;aSHR#ÊæK `º¥!+%)8Üp -ãO¢J!3x±&d+sXº\m [Vâ ml-y;ÐÈ#j¹-÷õÖ?¨p\f¼L¶JºÃµOL¦£M0OvõBsùȬùÚ;WÀbKÓ´ò+Q[Kõ½ÖÒÊHJJpH8'¿IL:m7yV-KÒ§%K \-NţɶKm¸Ø[²±îHÎ UgFÕ6.D½·³6äpHc©!¸TT¶B$§jÉí'pIÈ^ôÂ=H41©c^#Y¤éë»)IJãÃryäॲ2 pyäÿ ]PJÙ÷D)$$ó!Câ·%iyúyýHÃÈL²ÅÂ;/ìä²KÚâ»b%'óÆöÁ4ªµ¥rQDy·VçÄSñÁÚÐ vºsQt}d*µu©V·/Ñ®¯"©êî²×Ä,$m+CÈØÂ±ØÀĶº©YAßòeTãÔ¨eèmo¼%híBÁa Hwmy;Ë)äÏ*îòÕµá'ì#ÁÓ½ØÇUëA«Yãõ/W÷<,cí¸ÝøXç_h¾@:ØÞ·é{õ½ÙÊPôÈväÄBKâ0ûFâ·Nôä©@w¦¥¾(~Ä8ßFTt«®³ëZ{P@µGðAmf[èí ÉB·¶Ä|;¥L´$(þ3sÐ.ÃoT!+·;|lb, <c%Jí¥D/D ! ¤nHÓÚ¥§øØ÷k©T®×sDXR×nóÔ¤Cx° IÚ Ù# Á<ëpö×l¾ÑZ§TÒÞJj|(¶µ`§8IZr{áïØ\ãÙ|\Ú`3«¬ïNr%ØÈb`ZPú" sS!9OjWk»ÜN+o*n«ìn£UÛgÛµ¦Ópz4yITfÌ~aÆRO%(§hW¹æàl«Tv²ëÉý¢¹yúzÿ êàTÚGs¸þ°EX1o7NMÔ·mÊÃs2mðÌXí11 R¹g¥í.þ¢Ô÷ùîPã®ß5ÇÃ>ã¯%|e¦Õ2 |ñÔÕËÝ&jµé^oIÜ©O¶´6® AÁÇ09r=ê÷û7?~½ßÏ´ÛÝêCè¾R»²5n µHDwÊÍ¥JinÕðÝJ)aÉÁI:iÚ*çe¼:û&Û5QЪZ©¡o -)R¸{·N 槤Y ²j¨±âË;QÊCbbC¡ÄpTÑlYݼ`Þy¬t`ÈDÍ9|6x¶¶Úðê ,¾Ä Çßu¼n) 1$ÿXÚ*ð2¿c"(o»´wÛ)S¸iØÖæT²Ý£iɳ Ò=¹õxèµ.t×WǼ%ÌFÁaÖQíiJeG)IïB*Ô5ª,h2îZ/oÙK;xB¤´¶wìÚ÷oÛpýîcm7µcñ/ÐS¹²c¢{Á\Ûå^zlgú¤)Qݧ°Û* I ¤©'Îp+GI~áÈÚeOn yO¡qÖ²{N(´ Ûm!µ)2 ²P î)PÒqeèâmÒé>¿Ùb*#qÞK*D_ -º+!%+A!a!\À±ñwÕZrf¡ugN]ZR¥>â¯IãòTÛ(mÐFj "ÊÔíEháPáJfZK )Dð7ö06 {êÀç_mtpvé2ÜŧÔõ[b¾éiÀ,µí|T¹Þr¬îÀ$f]5üKå©:a7«¥¤HöÏ:CªA;{Ð¥§Váág×b<ç.J¥Mjî«ÌÄmKQIÃR\k(Oe% ÆFþ|¢{N?ø=côlûä\]Õ6(ÐUoDõHu©¥B°°{`©9=ùÉó3£yÑäËýCÐînÛä!®±ØSHS¹ÊAB ¸íÂR¬ù«¤ оÆ|Öî®#u!ÆÀâWî1î²ÿ igî¶´=·R8|5¡[R² 0 cû½GÌWl¼·R$ÝZqkîé*QNpRU ¹².`Oj7´ô¤Ü KÄôñä6VÚ)_j²Ò}Á ÚN9oj¾>{»Z^änaYì¸ÈijhmÇ)p'gzBr°) å8Íg{¹µ>l+t´¡o9JLØCªiÇe) Z\L¤ád}j½9l¾xkt ÌÜa"<÷!Jll(Þ É!£ÚNѤcXÀâ¿gô¶â9nKèßTqõº¡Ã-ÅË{¶·(8ç§R»)i ´Râlè²A¸Êî±ÓQÞbrà$8 >êsçpH8QåXR µCDöm+TØÕÒ2¤¶£ÖrÚC¥Îõ¨¸$%´¬öI8Oj·WÞºjGïoÙæ¿!í¸Ë¹cî ¶ÉVPA£ÜåîÁ ¬l1îgNÜúj ÛøwVÓ21SËuN Q.8ÆÐFằêÚþÅxr4JÓ2:Flí(\BÔTêTòZ*l¥%=8 )' ä9x9§/í&ÍpÔt²ä^´!:@in;)V{*=þLÖâÇÒèøniëÓȺµÕÛRo °Ê]iÔ 6;×½¡a FÐyÖT=ki~]¾~rT¹V¦í®InáÃCN¶ëE(ØqÐ߸®[K|óÙκà¿O)@Æ»hÀr F®ÓsXû,ºúh42· q¤ßØYQ)D ;G_Y¹» ß ëÐi¬»na×Ré¢ABVÄ´¤F»«ôúßtoFÏáÅZÊØ~ðBQÃÚËm®¶¬/B÷ sçaÖ6K&«}f½ÈTRïNqR·T·ÊJ ʰ °J2¥^×·éÔ¶z`³Ýg¾ëQµHn<¨O%ÄÈJJ}ÎÝ£$T|¶½èQ#[îVËãz¶Dàá(BضÙiZp¬`g ò¯eûLCÓw«Jì7Wpp)§ ݤRKAIêçyí¤+È[¶¾'D§l®ÛÖÐúìÑ/!¶ÚOe¦ök V2Iî)Ó|´_§ö ¸«¼6Ú$Yöê(+JäZØ}iih(BÒ¶Ð G±»nÓ½ s{&¸\c¼d\aZ¥±snØô)ÌÉLÝZTB2 ÎNáÃ9ç3[ªÐm)¦àÜov¨mÛg.C3-È\¹(m+m6àØC`¶+$îÂtMtÔkTø0íSØL·á%ið-;+<Gy¾â$¨©YJwm!ø*»L®.0\ͦÑ4DO*5öØX9p¶4ú£´Î2µ¸Úv¶÷YVý*{ÄGÔ"n:®C©,?³xiJ ádòh¸åÛ_XÕbm²éë¼.§ T8i{Lí"J^WGA+Ú¼pîÛÏæ¶Ó0ïöÔm5{iÛ3©¸è¾6 ËiÇ¿Ah\?§5 Huëͦã¶Ó¯©qHtá¥(R²FÒ{ùb¶Ö}&Y»5u»@Ó²íHKu-/¥Û[exæâÏ8Ç:Ùqf]¹sö+£ì9øÓÖíÝ*vB!2R¤¯ØXq É![@ÚNG³ÚãJ˸^¦ÌÒWD´a8Ô[ÚÛ)Gö7ÆZ»ÙF7)DrOº:CÓÐSPúô?²±~´v)]U]`?°Åì¨7äqzj½6Ã^mwg¤GbÞÜ*Ë!Ô¥ÖQ»)qç$ó¬\w£2S£GfBäKß1+fCå* ðÁlË;|µ$¼ôn»ËÓíµi»b .\.ÝaÅ1Ói@C (ÊFòp¼+%)Á)1½¡;Úêïíȶ#qô%àY§].ëEÙ²çJîá/fÖÃ_e@Aå%måôY"5Î-½ZÇM-é$BÊDÜ!Ö¸ã@ÈÈ%CÞ8ÊÕú»MqìÌ7r½ØÙ³³nui¹ñ-¾ãÈá¾ìd ¥S ÀNÑÈ_Kæ"øÚ^¹Lqb ó«Çd!(Ø[૲¸¯ðÿ 7wp9×4|Üm]-Î[Kádñz· $%J#ÅÈRá¸m;çO߬ºN6tÉnüì;»wãpÊP-n´à¤ìJFp¬Ö%»VÚ¸3nr×5/À\Wc7)LKn qÀéBR\Ê¡)ÂqIQÎUÛm-5+P±©¤¯é¹Ì Ý*ëÕ#¢[ÀaÇQÕÖ¸ R !iVTF{@bÑÚ½ÉöéMé[ã:-·ot¥l'.¤à nNUÌÞL×VF/﮺ã>ÙøOÚK΢+í®# e8Ô¸6¤oÚQ¸A@;Gå³P0 rýÞEÃ[eî±#ïqÅ$ $ )J¡ÈʹbUkáÀ(Æç[tb¯+þz½ï'Lÿ Û÷׫AjýÓµREB¥d¢¥ ð<0§°ZR Æy¡ë£iÒ]KJÔ68î YàçY"2xJy/¸¤²B(I!D ÅA!+)Ƽôvwql±ÚË0úªâÄ änÜJã9½jD½!XÜ3^ý^¶-Z2Qp~íxl4%&jZeîN}¤6IWÐÂÒZqA;Bx\¯CôgHªôíÆó6[6tMT(×Ú.¬È©HRãnKD¬nFyí' ãA¨tMkT[,"pDl.µ6Zp9´8PÖäpÉGÿ B!" çlu9U®)hñsÅWÃܼËÛ¹YæMb46»¹yÊ p6rú;RõõÓN5weÝÉu/ðJ\BKMCjNÈJJVs×'OÚ×£î/DneÎïìl= ìÆy¢Û+KE®!äÒ$JH çâ'H#qÛivÐ|Ú\±Âpp7nØ ¦ì«*$äIÎI¯¨ý"jÆ<#à $I;Ò Îç¨- NÖ-òG¶N¬ )J[lçØ%IQÂqÒTö§~¼þÁ8èÑÖÈï\¥¥Â%ñl}mqöá<XÊíèVÔãq«³£æ|¨lÐW+GJJÂÊÙ iH()aD%J8JTGä-s|·^n÷;iÙº,.;À´ qVHGp(Aò'±õþ¨bÝ*rmü9kã«]ª*Ý+p¶V7$¤rä9Vk® rþ×^f Ñh¥4¥ðÈÞ2¤LqK`+wݱ¼ìJOi#ygº³bhÛ-MÙO+ÂëmTÔµf¸JB^KiÞ§#¨´¬8{%'ð j%ô ©¥ªOvN°ëÃÀ°ÀRÇk ÊTv e'æ\¡{¤Láh=!íXLKðbÄë|Íæ2VZ1ud%QÇ`°pã!\ÊB£ª¾è>%åmDøÒY[×Ó ë¶¤*2C¬¤o*¸vå)G5-&¡êÔMÆÙ"KG¹JL¹EÈ)ÕºBT)ÞP* ÜM)e;»A8 h\ÖºÄÜ7ÏiÅÜy÷\VTâVé%ÒÚöîg~NàÙH#å_pµ¾ %Ûí½Mª41Ãyum¨$ [áÁ!µ%DmÚH*H\;RØ´õªÐ»«mÝÜfäëFÎ º l¥ <(öqÇ¿5øÆ»Ôí\a\:2ÞBÖÐ×7î (¡)IYD ¹6ÜeÇ~C¨õs½À®%* à¡Ñ0£Ü¯=îßiéé!j-1÷m[mpÂR2¢ Vâ0µ$ëZÕw´ÛdÀuèY\+\Ø,Iu%ÏvPë¨RÛ$¬¤§µÏ9çV«©^þer6±hm1.÷n´Éàm9Öå¶øR[Ih¸dî+ßÀÏ(¸ÒqáÜà¶ ´7mUº[o<¶ÊÛRC¬¶ËxÜ R )JP R¹s¤O¸Þÿ ä`®R®MäÉ=Ã!\Ó ªézéU¾Ímq¹òJXÂpÛ$N{ý*êîÇjv§{yCÖêy¶Ùn¬8gIm±ZL!¢Ãh(i¦R7Oh竹å$¢3©[M£¡k3,,G½ÜYeéÆ[RÛnCÅN¦@@qNÐP£BʲþÕÓaè:Zù%©.ÌV\Fâ´$¥ «$ci÷«^UÑqgKM¶Z·©)èa[#)D¥)pþ' nï#º¿K öN¥ÒõÔùnvä^öý)|·ô´«ÕÓ@ÆkrÁà£aCaÀĹ½ ðv'/)´ §µ¸íòàá\´õÆíª`¢ÏÑûÛÑ6¶7-f#Ü7RVêPVJµ*9çPÆÒÚMÈÛcé˻Ӻ¸c¢ªspC 9;kæ=úÊ:\LÎö¨º«Ü0ËÆØöÇ8%½ªÛÏqR@Çy yEMÝ)k5{[Ö£&×S@À{C7xlÔÑ%!Q6['£R w+ÜTºîʰD¹ZìújeÆê«[q¢ªÓ ºîÖJÒS½ÂòW=Ê us±ô+N5n¤nâÙc.åBÀ[1ò⺠îÂõB´^Æ57X·Æ:zïǹ·ÅÙæùhÆw61í9Niî}沨VàJñj½µ~ᣢµpj¿)Zuª¹KO;"Äm9Â8%]¥3±¼k±\X»²ÎºNÔª ä³kÂ*Aq ÒÒ#pX;Rà Á®×£õrÒ×ĪKëÂLAyä¶§*X)P)ÆÓË ÒÛ£õuÎTÈÝ/{&)mGë¾}§°{'Áä}ãUQI_>ÏæLCame¡oõ9»[ÔÉëL¸ÃÎÐJSÁâ$mtN¨¤Ù¥öÃH^Áî^aF±d&Ø>"Ú{ÁwhëGx8+ØT9ÇuhíêèÝéò#ÇêQ ¦Þ^»k®{V¢R09zÛÕwèt¥µÛÕÒ:\SÑQÔëÈJ𢥡äQ$à&k¤¨Í¼²¶¬+\Mý«¦-;k¶hËáaÀ&Fº²ÛÞZyͼmhd¤-Ið FSZÝÞ ª÷vbL*tu¹VFVá' $´WÃÂî %¥à¤í[q46¶¦QGêU!qݵåÊpa%IÉÄ{ëE!cÈu YC¸) Þ#"¢¤§Ó×0ånE¤tèÂN²L;ÕÕrQDUËkµiBc¥%JÏGbFüÚ¦<wºEl»¼u<fL\ n+ûÔÁDK.©KQær¢¬*¢VÕé©GJ_C ×á·»´GÆx¹ÛYÝÝ-y/©*S§nâEɾ,7 å#ÜÒvåÁyZË §£¨¹úâ\Ⱥ4ô'%ÙîúuzZÏ!ëe®?#OÆ+qqAxt²SiqXÊ¥à · Ý\#£(]öóÜôm;2e°Ò ¶¬%|B Ê ÷dsÂ46¶]Ív´èýB©í´\Qmx¼ÉÀYNÜqòÖÓµrtX®;ZÊ. êb"²AK§Ör±ÌâöHÉß5ëêiT·"Ïé/D6"/rlÒa]^]¶4Ç À¶¸äFÏ!*%^֢Ĵ/k§`\djKM^ìØÚns·ái(r^JÃð],Ò¢G(ÝÁcÛêfÕpåÂ3L^ãɸ!2ìP¹=Ùá¤UÞ=Î{Åa[,÷k¥ÐZí¹Ó§å@En=«°@òåå®»½éÛ?_s9ë{´=+ gHºÝ¢á6\G ï¶À¶5ÇBJ²_ µHJ(J\`a ¼ÄOr°¯Ú>þÞÖ«£e!j$.;ɳóeõ(ÙЬ§;FRyf¡,hmlüù6æ4~¡vlT ÈkÅÖBÁ(+HI)G>~õ`xûàé·!e¸õ(ðfIê«áÇs lqxÂ9Ôik¥EË×åà\·}f^²fçzÓw6ø³h½ 2Ò-¤,§j P`dw/ç¬Ëeøõ¿ìUQ®E±¨te®ÑÒ=ÂÎɹ¦ ºç C.*Ùgnjx¡´6xp§÷lêµÜü§-zb$aÔb*Eµ66[JRݤ[(ls ¹îuó:7X?-léKëdÇëL2{Ån³ËÛdÐÈî÷ëÓJÙõ²¯¯/JÚõ »[Vx¦ØÃ½b*¹¤ä¶7 û {¼¢ÃøøzêLµàM$h{غ®ëk³ßeB>z-ÎA ÆËjì)HRÒBwÉ#éö¥I½C-dzÕ»#Qö5lÉp¡£1-a¥aEíûy§iÎ6R+}ýÅ\nW7%©e«Ú^Q!J$¥Õ«¹d rV}.zzÿ qO%#zG%#kìö¸·ýd®;w8qÖtiKJJwÔàÚJ V9äÑptõþs¯µÉsãÓ)ä³k-²¤ %Õ ýõoÞlÏNÙ´ü;âÂÅ3qT6:ë|%i([jPQVHB²? ¿¥µ<«ï±´åáûJ¥ªspTt¥' %À¼>\ýêø¦õ¹p¡Å°Ýpd¿ ¦â8¥Èlg+l¤mW4òä}êô{¥}j^Íý4üÌ9x´îØ\Ñî g¶ý©2ã©2RêaIm3T°¨%A.0`ÖºÑÑõTß/îHPäy(HÔÑÃNS 3!j òSk[}´¬qIÉ]ÖÃ}´Æ&ëf¹@bAPaÙQVÚ)8PIP<Å{[4¶¨ºDbe¯MÞ'Géa£ÁuÄ:àE )N I$xù+¡eyõôÍ)_LKVhøç£EwµÄâõ&vc¸àKÒQÀ ^ôaI^NAWx*ñÔ½³f¶³"ÇcÔÓn»&¹OGKÑnHBT¾²Â8GÛ!APJHÊ åÔ[Séævÿ JÓê"/6çeêí/xwn6S«kP\CM¾8d%)X.æìÛÛ¶ªø7Û;û !OR!+ÒÖJ9§©%hÇ?r¡Þ}óY±ÖÚÓ#:Qø5¡ZCÒº«\JR᧹䬺rô¹rÒÅá¢tltZ&hó²eâÝ"ß&éemÇY;n Kd©ÜBRNÑ¡¹èç5VçLÜ¢Ý×izz·ÚZ¡¯ÛM¤-KlµÚ!)'¿AÈ%eY¿íí ÿ òcðÛíÁ®o¤)JT(¥)@)JP åÎ>ã{ýü:k¨ë:Dûïõÿ Bâ¹Ú %k mIïÇ}u î®PéÄýë\]fÃ,ÇÜ~Lµ©-£paO5))ÎÊFM{ý®®Ï>Óvì~Û5æ2.%ºJ|b¥çT!MªÛÄí>Ü&ò<_GwKr.Ö{ÒmÆi`ÉzÂd0ëÛm ¶¾Zp+U£êÝ2W6á"ÞÙC²G%j;ÛeI(ÃáI*Îñä Æí)8Íîæ×sK¬õ*dqÏÄ!Æ8¥(ÂTUÛn2GécNJÒ|W®Ë¼ú[ÖÁb×Kä-ydZíöâofGUq¤rTlVà9Æ0g²§_ôPÄ+ dg¶¶Ä+7v©Òçix\`2Tw¬íQ)¿kE:ì ÁEþΫ£PäÉz u¢ÃeÕ²¥¶ R¢0¢2 pZÑúµÙNDoKß!§ú³&ÞéZØW°{ «o~4T(·|ßzä¹¥Õ:r-Xø2ålºL¼^ä½ m¦[OÇaìeÄ´sISj rÎ|lÏh¶¤h«¬ÍgJ´¦qFí;e8ó»ÿ Ù¿·äDäù=CzÒ7ɶÅ=ªØiǸJ»Ü´0óëá$ ) ïᾦTñ lllÂvZý/©-vYú®åt¼Øïr\ËpCrÚiå%HRxÒ$%!a)) ¸1ÏÉ>+¥ºÊ][íºÛ{YYBt¥7´a]ç ÉX JÔPR´ Ð×+^£a: ûeÀJ^yMB¦Ò¼¾I÷8 ÖÊFoÉræ°ÒнMïTßH[káº0É)A/¶Îà@s³¤áä2CÖn¡´ÉÓr'.æÂgȲ¦Ö¨ F[n!Ñ)/ÔpÖ !ý}´]Y!==^C¤ÄéfcJÑRAR°´öv3W«zQ±<žۤéÔ":¤ºýÚ#Ì¥ $ãaqCrÂr¡Ë"J)/ÇúNWàXH¼h»f¢¸K´j«S6Å>ĦÙi«2p³µ÷"ºËM½»!öÓÙHÊD]«o¢×¡õ«P»:µÂKÒqìRPp=ÓR@׸¯:Uh]F·®in:=º:d;.$Wem´¸Ú·%¶Ô7íÀÎí¤b½ è·æih÷ö¯TîèªñCEU«Ú¶a!Ä+ QQ ä ÈT¨ÇW>×!y>]I»¦zã§&ÝW âcì>`±!¥ª+LÓÖñR©Ø×Üw æBû9Í?E»Ò¥ªíõcµ@9&CMÈSo»¹cÁd%{Jy% ¢²j-Ðr,ÜȾZg¿n¹·l\h\u夨÷2eiæAÊ%X0ôØÝ&À¼cÆ)~kVo«¡JJRT¶§;JZ @ fr$äµ#QÙQªGíĦO:7´ÑöêqIímBÈOe[dcFJÙkùDnKïñ³£ÔGuVn+¹Ç1£I.;(v«fÀDíR>ØHæÎ~}ªÍE\múÑrgP"´Ä ¤n}Çrx!% ($áDäòÈɨm9~mu·Y®ípÔ¤¿>4G½ T½£hÁåζïè; màN u½PÓH(}ÉÍîmnnÙà ZRŵ('#8Íu(¹þÄN] ´«7Zbè ÓæØäH·IÖÑ#îòïM)ÑÄæÙ)JJKì^õ½T«ÍôĶ*Ù,ÍÓñâÛÑN:ZZÐÒx[д°ê³µ'¡µ ¢5 ÇëEÜòî(¯!!+Kd¨R×íBBTAXÎ ¹©|Àæ©æe\£ßÓ¨tÓÐ/ú˹LÄÁ ÄÜÔ¸ân±¥I$d/¹UÑÄmÍ\Ôö8ÐnLòûÍ(m%a5Ç9p(ó>ø$seãCê5áPnqL8¢kÐÓsêÙZâê7±\ÜqH NvÌÕåÆÄ˦:Ç`OÓqR«\VíÏʳ#ÃRBxÈo¾3ÇÞ· ¬[Æ[¤ý Êä\®{±lrZ°ImB>RâV¤íJRÉü#qMÞ,7tbTs-yÆÖÀRã»xaÔ¥ maY@ÆÒ@#ìÐ2bËç¨ì6Þ5øL¹%oLuµÕ´ íï^5%{n÷7# @Zl>Úx]BÙÚ´q½h O%pÜÇÇ4ÿ à¶V9$©é $çO³Ë3b\µ~iNÚÞÔ»uTD©ku¥º¢'88Vß/2jrÒºÙijïrÓVç¶ð¥Èãl¯xÊpá B[ sä]NÉCñBPóÎáe×\OKRJ qCví\;Å ý:¶¦yv[Êi Ø\CjÙáñÖÀâ°¥!I8B2ݤã4ÞV§bÁøî?Ã`Íu¶¤-»jÝÀ H)or)(V QÚNB±àÖ]¾ø»¤D»âxÍ¥'yV[ÆÙTr2M¿Ö¿©T¥Ðí>1ìRWvzò¿?à#Õïy<¸Êgýãíöòÿ R¥ ØØ-ÁIZT¹jBRq®Úá ÞQîö{Õ<W\.¦;ÊBêÐÄq)QßÚ (í×éÔ6KÛùõÌùyT±$WK ÉÔ¬^îûü·ÚbZRò¯ÀÉiÉ-x²xl )E àíQÎãÌ_³ÛQ³L³øìÔ9Mo Bº´uðÜ<8¥«µBÓ´îÜÍèÆ¸ÙàêK~¡S·lÕmHê{§2¦Ød¸ÒË{RË*S)ÈÚ«NÑíÞcÀz%ôI¹n¸´ã)CrÝS¼%*F8¥©ÀØJ¹Çv ?Oó4óêeµÒu¤Þî7 zð©û{C8nbOAÁ¸îO$¬dÆïZÍ&×jnÓj»Z®6Ô4yT)¸ ÝKa+ZÆíÅÂG 26zw£¹7mÕ,3w®Þã0IÜ@Z)* á *ÚO"s´v6]¦dÝ-ÖÙ"î\KÁ9æå¶¼ÉBm<"Z-ñJ¶IÏ-_g ÚäKMèÍMÛ]C©Ü?ÕlîCzØ´2ëËyIC¼=©!n('Úð ìeaë¹HnE¹»dVãÝPÊRÈÞ¥0°ã¨và7úFté¥cÚ'^.qï$<'cävûO'N²µg;Nä¥@ë:,ÒQ\/ÑnÍ\àä[1îlÅö°æÕ8Ò÷/i%8$yr [>YÚß¿æ>4ísNu{qú=oJ[ ½Ó5ù&-ÖSu(ImÒlmi ínIµ&®w¶½£½pÄË£XZ]q8S°pÈQpçn.~ÃB!èLÜÔÖf!È·;sGIÜÓHt´áK!Å-*H \´ìeÜ)(HS*8Ú¼îw-ÊÉIBºÂ´Ü¾J{·H_b{L¥b*R¤),,£vô Í'ßÀÔg³b¿¶¤´ß3SiéÝ ¨®HÓ ËÄfSî) e¨ÉJ[êûØRØp¥ PZÊJr²úC¶HOnÉuqǧÜ$Juûº][Mm ¸x mVw áÞ§¥ø.ørÒmu¶Ê¡îRTÒT¢"98ï'Ú½6 cwZÎÓÒ.ìÞÔ O4ü y¤©A.®[! aÿ Iß(©[Æm÷BYÎÓ¬Pîj¼jX·n¬< :¬ ¤¶BÊ{JsíÇ!}Eµë«>º[u4ÄÜ-JJhÃyé-¡Õlm.4µm%°Ý°H°3Ù.> øÍo4ëÎá©cݸ6øÌ(0åÅZf>ÐÕÛä¶w- ó!#;GÕ²÷9®âé¨ú6êê©ÈeÐòS;ÛHØÞS½I^§o¬m§Û½®Å\ÖW8¶Èí7%r϶öæÕÄSJQmHÃeJAæÈNtÊ8zrÚÞíÛb4ãÂEy¶½¢¢¬¯Ãð:Ñ¥)·jµ=ñ«wX:*âܧî)¹\ºÂKÍ<øCÃIáyÎÊË¿2@!_W=E6}Ø©í | ÛÑpÛn;+@L°e¨hi ¹ 2ÙP'Û`Ò¾~ÿ TÄK-:m*Amg«"ÒÔ¾@ J-¾)[÷7gÞ!.kKãê¦ÜÐ÷%À½õ¥ÇaÈÌ:ä'd(-ÅqiÜ À9È ¬+f L hkÛ²05Hx¡· (K!´ lá¤n$¹Ör lUö Joñµ°ócvù¡r'ʲó4¡fáãCzÜñÂuÇ(q¢ÊÊÆçV0Qã µ:öÂ£Ë ]MÉSY2L¨IyKS@ _´bÕ°_vÍgøÚEæá)ãÝrfÈäAv$@¦^(/!ð¤9Â)J¸£9länò¨î4¦´h»¹sÑåÚs¨ÌÉÊ KHBÆîÕá ËpÖOq ²éS´#{¸y±»>¥v»ìÈðl[t.¡MÞÓ&4¤Ê-o´ë¬ã$´P£»j³±( N9S ln(êÃÒ R )JP R¹s¤O¸Þÿ sÍ<bºb¨kßߢýd¯ò"½=GNY%©Î¬T¤H 7K4!Ëv\t¢ÑÝtmY«÷·QÙNß}olÔWÛtKm¹»U®pÚ$niNÉ-þ3Æme¼ ²²ºW·w ¬@°k¦Es±¶l.q-ÊDVÒ¦Õ¸/*Pg.v¹öÊ3ïû·Ùuô)3ßMËOÉ7!RQ62QFB Pó*Jv 6 ;PG36íÂq¢³`Û:CÔ{½.Û[+TFâc ñY*t chp«f´N)Gí WØnð]Hdx]!Ç\5³7J¤Âì¨Ù´F!§]Vå(Î1Þµ;q´cë¸ut*^m¶nÜÃaA#`K ÌdmÊãÏOiEí §|WØnÐñûº4´NVEÚÚb¤*Ii9KP@9_qIá6Js·(IÆ@5!Ù¯i·EdiVfÁx½áDÆQ ìZ_ÜÛªJV ©%iç £E(ý¡QñKìÏÀ !]kÂ:h%èM@^Û\pK ¨) GÈÂNîJÊRrve.ÛªeÇÔÓ.²Û~¿$!ɨÁe)Ü¢ÂYG¼ $mu`¤s*¯ÚÎý>ìU³Çįäiýy"ÀÕwK ÓA©ÛŰ¢°ÚK!Õ#w=ªQ Pq8:¥E·T\Ø»¼_R+5](˳K·:ØK6Èí-!!°«Lp¤k >Öch¬Q¤T¾_MÏM¤ÎÆR¹K U³·° 9ê V´ (¨§!$ú kéûD[j#ýcpMµ"Kè(wc èÜSÙ# òcðÛíÁ®o´)JT(¥)@)JP åÎ>ã{ýü:k¨ë:Dûïõÿ R )JP R¹s¤O¸Þÿ K¦ð^u-)xjJÖSyÝÏûÿ x¦JT§=©æsµ9ÀdYòtþ°ä§PÈaGë&¼½h¬}âéAºÍõ-îëOÿ R¥ R¥ R¥ R¥ R¥ R¥ R¥ R¥ R¹s¤O¸Þÿ <të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÓÇNºø\/EM)@<të¯ ÂôTÖXëÝAªâ5ò¸®·Íí0Aº¡ÿÙ --- NEW FILE: keyreg.jpg --- ÿØÿà I¿èµÍévÝ´¨EØ©mÇ¥´ñoãÊ I)ÍO¶ïªD[°£ÇB"¦¤Óñ0ÿ ?ÈSë×Úuk$_ä4§×®v:È:¤½ :±¯òOÈë×Òu["_ä4'×®~:ûMÒ M^ÎTÈù/äIõëé:¥¯ò*_ÈëÕuu4>?X55{/ÕS~D^¾Ó©×ëüò$úõCd4^?X55{/IÔËõþGOù}zúN¥_/ò:ÈëÕuu4T:Âjjö]Ó©«ü£ò!×ÒuñT~F:¥²*au5{.ÔKÅþISùëé: v¿É*#SYM¦¦¯eÅ:t¿É*¿#}&r¿Éj¿#T_c©¢¡Õ55{-éܯòZ¯ÈÇ_IÜ/òZ¿ÈÇU!ר颡ÔÔÕì¶&sn¿Éªÿ ÿ äýZdM%¦¦¯dÔK)²e5é ¬PÛu]½>®·{²?®ÓþH¿íê"ÿ 8¢0áÞÿ ®¯Uq!ÁéÆ?+Zi¡Eó6¬÷9/Lï'uã}QG5ô£ÃêlÇn#@û¡¿|º1þ]yo°fµ·z"';_ú:ÝÒ\<Íá\SÍ©ajcÆ!ëjIÈQ 6ØÓø~]sÿ qOiù|l7õyXþçLùÆÙm˺ ¦å¾\ ®¾²¾u7*È$ßßßãó,¥pï=ÌÛåÄÕPSaOB½¦¤~¯äGû.ü¼ÂsÖhÎxÿ ãdlQöC¨ù¡=«ÜS¨ñ)ö·²aÚ.ØOyV\/Im©&Å»OGqPH}cE'µò>cìi)¼r¼þâÿ Mq§ýz_WA.mv/éüõ!Ù-BP] Kè~ßöõìí5=Á£¤ñKè~ßöõöÐ'ô¾éÿ mï³h¾ÔþMqº!zð¯µ"²£¯QkËÿ ðÙ**!¤ÜÑ\ø«ÇÓsó¨ß{úö~Þuï^ÏÛ×[ÃWñÜÿ Ì!gË<llý¿ ÖDÛÄöß´EÀHößd#Û¬]ßt×!æ³s:~á)Õ´wÝ%-®Ã±UhjSÈ»,UT%sã(ª·ê'<Ø^os+ª¶b,*¨ÎSÖ¿\ÄC#Ì5CdÑÎ-6ßFÔtiSsNu5AéÎY\{+öjÝ [2 ÄðÝ¿$FKÏBDDßÝøúÃRã2b¿ÜA¯Èg´®"7+q²yïú S6Ê-voeâ«tM5ËêDs_n©ÏtðZÀòþôl ¼ªâø>8 T{;öU6Nh¡û5©Ë2 رmîf[;*DµâlÀ¬f7¶ýðõ»Ä»ú ¸,]Ú5exî?%¸÷6¬ÂuÀæâ/¬;íºlYqIÓ-h¢[LHøæÛ1ÜGE6T;¢J/lJj ¨¨ìKMê´¦Öò4äì2|¶EÔU6ÌPStMöTÿ °PÁÂY/¾ô°^ »ª'Ââ§¶Å#!=6^ù8/ÎX_¥õiïüå ú_V¾Üê(×'§Ja¨%}êé-²Exp@tÅqx¶¤J¢* í+cV@~lwS¯Âa³ÒFÞ3ɱ"-ɧ=¨ª»'§Saïüå ú_Vù8/ÎX_¥õj:Û3v\ÙKOÐRUÀ\©÷ ÀR}çÙFUæ{&ÕKñTEËçj â¾_¾l»ÉpÑÕfJºÃ1}}·6ê!Hdâª÷Dø¨& n{äà¿9a~Õ§¾Nóé}ZÓÎzQIMsàuë8±&Er¾ACvDvtï £D£Ù4!CÝ}¿d4¶ã gà6VC´.óïF(ÈÛ@©¿Æï|R]øíü(ǾNóé}Z{äà¿9a~Õ¨9ù¥Luä|¯¶i©ð¢´@/ ½%¦GGËnØ8˼òô îy`f76!Ä2\×EYéæpd oIhÁÕBI¡¼¤*Åä°÷ÉÁ~rÂý/«O|ç,/Òúµ&6Ò^Î\£`HÑ+\²4^jo:@Â6¨»lÄ{§ðµ²¯´V)×ÎÇqíäµÎæ²$·eðN(EéFÍHîs$Q"EMM×¾Nóé}Z{äà¿9a~Õ¯¼Ú$K(±c#¢MÙµkRà¾Ã6ëN2¸". Èv?3!@%_i.\,ðÕÞVÎöUóØ©gÄÀ¹#²EĹv¥5ÍSbÙd]{°ø÷ÉÁ~rÂý/«O|ç,/ÒúµY´ê¿éþ]pp·¹¤:X¯Ý=·^^çÈÚAhÕÂEOÜòUf×n§©°©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ§¾Nóé}Z¶é¦Æê¾Nóé}Z{äà¿9a~Õ«nln©{äà¿9a~Õ«5+¦í+I02ÞTQÛÛûQ7Ûfû§ð.¶õ²çþTÇöîÿ ¨^nÇÛ}»qâÇö÷½þ)ýòï+¦¢¡j±,V¥§ZªÆi`6ó:èÆÓHfÑslSuõ WؾÙu¬ojÂTMÍÂF a¶FeEl¶Ü8¦É²¯Ë©]4±kk¢ø_ + ¶Èaã»a²z¡ðaê§£Ô5©îo÷AîÈ*¼çðoÄüN¶mËâú¾ßg£Ù©]4Lcxì3ìPU5æÜ¼Ë6ÇÆrå¿{døMùü·øËò®µ}ÄáQäþäh<·¿â|'³ÙïqãÜáÇ>>[o·£Súh113¾ëÚiÉ#¯"ºh"D©í^"#ºÿ õlÅT{ïJ'î+RH¸ "¨n¾©!=í!±y9HFíͲb>Ø7ØaØWº 0,zªl6êî[¢ß´Òåïéå®2Â.C_ É 3UYRdEuE è§4x}Vý]PzQQ'¤vÂÀ'VD¬scK$5 ÑqmÑ×á8îM«w×DÓKÉg!°Ãoï®KT,H'ÙÊq÷Ú`_?̶ÍZt$9ËsDlÀÈcºCÇo_·ókÌ+Y"7*ë7`_&ÍQ×C4V[Qô §ÉtÚÕ¦,£XáW6LO; ¯[¹.W+r¬0ØB²ZEe_"%S7¸ K/¸ËßùÜ_tmæÞ'ÀïxODZÝçñüÝùúÛñõ5tÓKwEÜÀfö@Ó÷l]-¤Yï°o2°Ò"©£* ¼fDá8JDÛÓÖÑU´°j\¸rçHu¨äÈHGå,¾Ðpdgy¯cú¦H·4¹e.§v¨Xí¿ÄõÓ2n0m£Kipzâªl ºòBËr¸ËUN± #pÀ\`Móm±Aâ§DqQÁ11. #Fz·é¥Ë9µJ¡Ã·õÕS!H©U!¬Xó'6ù4¤ä¹(ê«ÎìÒîh ªNz7ÛR´?YoOlì¿6,·;j.a¥âvä¨ß¦Tåí¢(þÉÿ ² [Ýxy¾»ÜD.ëÚkDÊ®jå1ÝJùòfYÜÅ*KOC» °Rç¹¶*÷5áÈZhG%fróã9@cx±bäG»kÚn aßÙ7¶ ®ûG¸vÕbfgqqâý6¿¡á§ÙOj`²&ã`åd³p[#Du#@SD><ÓúڷȦVÆ ¥éÍ_¬K¦L#î6ºÐ... [truncated message content] |
From: Thanh H. T. <th...@us...> - 2003-11-26 06:02:36
|
Update of /cvsroot/activelock/activelock/tutorials/vb/images In directory sc8-pr-cvs1:/tmp/cvs-serv25275/images Log Message: Directory /cvsroot/activelock/activelock/tutorials/vb/images added to the repository |
From: Thanh H. T. <th...@us...> - 2003-11-26 05:57:04
|
Update of /cvsroot/activelock/activelock/tutorials/vb In directory sc8-pr-cvs1:/tmp/cvs-serv24465 Added Files: BasicTutorial.html Log Message: VB Tutorial for ActiveLock 2 --- NEW FILE: BasicTutorial.html --- <!-- TODO's: ------- - make sure it's printer-friendly - Add a Terminology section at the end --> <html><head> <title>ActiveLock 2: A Basic Tutorial</title> <style>.dtcheading1 { FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN-BOTTOM: 0px } .dtcheading2 { MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 12pt } .dtcMajorheading1 { FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0px } .dtcMajorheading2 { MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 12pt; MARGIN-BOTTOM: 0px } .dtcMajorheading3 { FONT-WEIGHT: bold; FONT-SIZE: 12pt } .dtcsubheading { FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px } .dtcsubheadingindent { MARGIN-TOP: 0px; FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; MARGIN-LEFT: 60px; TEXT-ALIGN: left } .dtcbody { MARGIN-TOP: 0px; FONT-SIZE: 10pt } .dtcbulleted { FONT-SIZE: 12pt } .dtcnumbered { FONT-SIZE: 12pt } .dtcbodycr { MARGIN-TOP: 0px; FONT-SIZE: 14px } </style> </head> <body bgcolor="#ffffff"> <center> <h1>ActiveLock 2: A Basic Tutorial</h1> <h3>by<br> <a href="mailto:th...@us...">Thanh Hai Tran</a><br> November 05, 2003 </h3> </center> <hr> <p> <h2>Contents</h2> <ul> <li><a href=#disclaimer>Disclaimer</a> <li><a href=#introduction>Introduction</a> <li><a href=#prerequisites>Prerequisites</a> <li><a href=#step1>Step 1: Generating a Product Key for your application</a> <li><a href=#step2>Step 2: Adding ActiveLock 2 Object Reference to your VB Project</a> <li><a href=#step3>Step 3: Instantiating and Initializing ActiveLock</a> <li><a href=#step4>Step 4: Checking for a Valid License</a> <li><a href=#step5>Step 5: License Registration</a> <li><a href=#step6>Step 6: Let's Get A Little More Advanced</a> <li><a href=#resources>Resources</a> </ul> <a name="disclaimer"><h2>Disclaimer</h2></a> <blockquote> <pre> USE OF ACTIVELOCK 2 TUTORIALS IS ENTIRELY AT YOUR OWN RISK! THE INFORMATION IN THESE TUTORIALS ARE PROVIDED "AS IS" WITHOUT WARRANTY, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ARISING FROM THE COURSE OF DEALING BETWEEN THE PARTIES AND USAGE OF TRADE. THE ENTIRE RISK AS TO THE RESULTS AND PERFORMANCE OF THE INSTRUCTIONS AND INFORMATION IS ASSUMED BY THE USER. THE AUTHOR OF THESE TUTORIALS WILL NOT BE LIABLE FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT, OR SIMILAR DAMAGES DUE TO LOSS OF INFORMATION OR DATA, LOSS OF PROFITS, BUSINESS INTERRUPTION, INJURY, OR ANY OTHER DAMAGES, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. </pre> </blockquote> <a name="introduction"><h2>Introduction</h2></a> <blockquote> So you've installed the latest and greatest ActiveLock 2 release, and now you're wondering how the heck you're going use this thing, right? Well, read on, my friend. This tutorial was written just for you. We will walk through a step-by-step process of putting ActiveLock 2 to work in your VB application. </blockquote> <a name="prerequisites"><h2>Prerequisites</h2></a> <blockquote> <p>This tutorial was created using ActiveLock 2.0.4. Therefore, please ensure that you have the same version (or later) installed on your system before you proceed any further. For the latest ActiveLock 2 release, check <a href="http://sourceforge.net/projects/activelock/">here</a>. </blockquote> <a name="step1"><h2>Step 1: Generating a Product Key for your application</h2></a> <blockquote> <ol> <li>Start the generator application, alugen.exe. <li>Enter your application name in the <b>Name</b> text box. e.g. MyApp <li>Enter your application version in the <b>Version</b> text box. e.g. 1.0 <li>Click the <b>Generate</b> button to generate the Product Keys. <li>When the Product VCode and GCode generation process is complete, click <b>Add To Product List</b> button to add/save the product into the product database, to be used later for license key generation. <li>Make note of the generated VCode. You will use this code later within your application. <img src="images/alugen.jpg"><br> Note that because of its length, the complete code may not be fully visible in the text box. You'll need to double-click on the text box and do a Ctrl-C operation if you want to copy the entire code. </ol> </blockquote> <a name="step2"><h2>Step 2: Adding ActiveLock 2 Object Reference to your VB Project</h2></a> <blockquote> <ol> <li>Using ALUGEN to generate a Product Key for your application <li>Open your .vbp project in VB, and then select <b>References</b> from the <b>Project</b> menu. <li>Scroll down on the list until you see <b>ActiveLock Object Library 2.0</b>, then select by clicking on the empty checkbox beside it. <img src="images/addref.jpg"> </ol> </blockquote> <a name="step3"><h2>Step 3: Instantiating and Initializing ActiveLock</h2></a> <blockquote> <ol> <li>Somewhere within your app, declare an object reference to ActiveLock2.IActiveLock. <blockquote> <pre> 1 Private ActiveLock As ActiveLock2.IActiveLock </pre> </blockquote> <li>Also declare a reference to ActiveLock2.ActiveLockEventNotifier so that you can receive COM events sent by ActiveLock 2. <blockquote> <pre> 2 Private WithEvents ActiveLockEventSink As ActiveLockEventNotifier </pre> </blockquote> <li>Decide on a place within your application where initialization usually takes places, within main form's Form_Load() for example, and add these ActiveLock initialization code: <blockquote> <code> <pre> 3 ' Obtain an instance of ActiveLock object 4 Set ActiveLock = ActiveLock2.NewInstance() 5 6 ' Specify where the license file is 7 ActiveLock.KeyStoreType = alsFile 8 ActiveLock.KeyStorePath = App.path & "\myapp.lic" 9 10 ' Obtain the EventNotifier so that we can receive notifications from AL. 11 Set ActiveLockEventSink = ActiveLock.EventNotifier 12 13 ' Specify the name of the product that will be locked through AL. 14 ActiveLock.SoftwareName = "MyApp" 15 16 ' Specify your product code. 17 ' This code will be used later by ActiveLock to validate license keys. 18 ActiveLock.SoftwareCode = "AAAAB3NzaC1yc2EAAAABJQAAAIB9JNUb5AAI7xnlCRB2muU0PO/Q5jY/...." 19 20 ' Specify product version 21 ActiveLock.SoftwareVersion = "1.0" 22 23 ' Specify Lock Type as Lock-to-HardDrive. ' The System drive (where Windows is installed) will be used as part of the lock key. 24 ActiveLock.LockType = lockHD </pre> </code> </blockquote> <li>In line 8 above, we specified the path to the license file. We will now create an empty license file for ActiveLock to use. Simply start up NotePad or your favourite Text Editor, leave the file content blank, and save it under your application directory by the name of <b>myapp.lic</b>. </ol> </blockquote> <a name="step4"><h2>Step 4: Checking for a Valid License</h2></a> <blockquote> <p>OK. So now you've got ActiveLock successfully initialized. At some point in your application's lifetime, it will need to check for a valid license. This is accomplished by calling IActiveLock's <code>Acquire()</code> method. <code> <pre> 25 ' Attempt to acquire a valid license token 26 On Error GoTo ErrHandler 27 ActiveLock.Acquire ' Acquire will raise an error if no valid license exists. 28 Exit Sub ' Exit Form_Load() 29 ErrHandler: 30 MsgBox "ActiveLock Error: " & Err.Description 31 End Sub </pre> </code> When <code>ActiveLock.Acquire()</code> returns no error, it means you currently have a valid license. At that point you can continue to verify some other properties of the license such as <code>RegisteredDate</code>, <code>RegisteredUser</code>, <code>UsedDays</code>, <code>ExpirationDate</code>, etc... For further information on these properties, refer to the IActiveLock interface in the API Documentation. <p>OK. Based on what you've done so far, if you now try to run your application, you should get this error message: <p><img src="images/nolic.jpg"> </blockquote> <a name="step5"><h2>Step 5: License Registration</h2></a> <blockquote> <p>Your application must provide a facility for your users to request license keys. It needs to tell your users what their installation code is. This is an ActiveLock-computed code that is unique for that user's machine alone. To keep it simple for this tutorial, I will simply use a TextBox on the TutorialApp Form to display the installation code. Let's also add a text box for specifying the registered user. This way, the registered user will now be part of the Installation Code, which means that the liberation will not specific to the machine, but it's also specific to a particular user. The code that re-computes the installation code might look like this: <pre> 32 ' Re-compute Installation Code when "Registered User" changes 33 Private Sub txtUser_Change() 34 txtInstCode = ActiveLock.InstallCode(txtUser) 35 End Sub </pre> <p>Your users will then be instructed to contact you with this Installation Code in exchange for a liberation key to unlock the application. This contact can be done via either a telephone call or an email message. You can also add the capability to do instant activation by having your application connect directly to your web server, accessing an ASP on that server, which will use <b>ALUGENLib</b> installed there to generate the liberation key, and then return the key immediately for registration. But this is a topic for another tutorial :-). For the purpose of this tutorial, I will assume that your customer either calls or emails you the Installation Code. <p>So with the Installation Code in hand, you: <ol> <li>Open up ALUGEN <li>Go to the <b>License Key Generator</b> tab <li>Select <b>MyApp</b> from the Product drop-down list <li>Select a <b>License Type</b>. e.g. Periodic for a license that will expire after x days <li>Set the Expiration date if applicable <li>Paste the InstallationCode into its text box <li>Click the <b>Generate</b> button </ol> <p>Congratulations! You've generated your first ActiveLock 2 liberation key. <br> <img src="images/keygen.jpg"> <p>Now back in your application, you'll need to provide a way for the user to input the liberation key for activation. Again for simplicity's sake, I'll fall back to my favourite TextBox and Command Button combination: <ol> <li>Add a label to the form and give the caption <b>Liberation Key:</b> <li>Add a multi-line Text Box and name it <b>txtLibKey</b> <li>Add a command button and name it <b>cmdReg</b> <li>Add the following code snippet to the cndReg Click event handler: <pre> ' Register the liberation key 36 Private Sub cmdReg_Click() 37 ' Be prepared to handle registration error (e.g. invalid license) 38 On Error GoTo ErrHandler 39 ActiveLock.Register txtLibKey 40 ' No error. This means success! 41 MsgBox "License was successfully registered!" 42 Exit Sub 43 ErrHandler: 44 MsgBox Err.Description 45 End Sub </pre> </ol> <img src="images/keyreg.jpg"> </blockquote> <a name="step6"><h2>Step 6: Let's Get A Little More Advanced</h2></a> <blockquote> <p>So far we've done the very basic steps required to get ActiveLock 2 up and running within your app. This will prevent the very novice of hackers from breaking your protection. But a mediocre hacker will attempt to break it by cracking the ActiveLock 2 dlls, and since ActiveLock is open-source, this can be quite easily done. Therefore, you'll need to employ a few extra stragedies :) <h3>Handling ActiveLockEventNotifier_ValidateValue() Events to Do Some Customized Encryption</h3> <p>If you look inside the license file, you'll see this (note that the long keys have been partially chopped for better formatting within this document): <table CELLPADDING="0" CELLSPACING="0" border="1"> <tr> <td> <pre> [MyApp] ProductKey=AAAAB3NzaC1yc2EAAAABJQAAAIB9JNUb5AAI7xnlCRB2muU0PO/Q5jY/hVz1y..... ProductVersion=1.0 LicenseType=3 LicenseClass=Single Licensee=John Q Public LicenseKey=AAAAB3NzaC1yc2EAAACAQpQF1xrjJcxyKJO8oO7fb2XgDMFwpHmYMSHKje/4t..... RegisteredDate=2003/11/02 LastUsed=2003/11/02 23:07:46 Hash1=7c929f2389d5bf5f026ed4bb85b17add Expiration=2003/12/02 MaxCount=1</pre> </td> </tr> </table> You may have noticed the <code>Hash1</code> license property. The value for this property is an MD5 hash value of the <code>LastUsed</code> property. <code>LastUsed</code> property is used to detect when the user has set their system clock backward in order to continue using the app after its license has expired. To defeat this detection, all the hacker has to do blank the <code>LastUsed</code> property, computes his own MD5 hash for an empty string, enters it into the <code>Hash1</code> property, then he can continue using your application with no problem. To prevent this type of hack, ActiveLock 2 makes use of the <code>ActiveLockEventNotifier_ValidateValue()</code> event. This event allows you to encrypt the <code>LastUsed</code> value using your own encryption technique that only you know, then it will take your encrypted value, and computes an MD5 hash for it, then saves it as the <code>hash1</code> value. <p>Here's an example of a simple encryption implementation: <pre> '' ' Simple encryption of a string: simply multiply every character's ASCII code by 11. ' 46 Private Function Enc(strData As String) As String 47 Dim i&, n& 48 Dim sResult$ 49 n = Len(strData) 50 Dim l As Long 51 For i = 1 To n 52 l = Asc(Mid$(strData, i, 1)) * 11 53 If sResult = "" Then 54 sResult = Hex(l) 55 Else 56 sResult = sResult & "." & Hex(l) 57 End If 58 Next i 59 Enc = sResult 60 End Function </pre> <p>Then, you handle <code>ActiveLockEventNotifier_ValidateValue()</code> event like this: <pre> 61 Private Sub ActiveLockEventSink_ValidateValue(ByRef Value As String) 62 Value = Encrypt(Value) 63 End Sub </pre> <h3>Authenticating ActiveLock 2 DLL To Detect Cracking</h3> <p>There's a saying that security people usually like to say: "a chain is only as strong as its weakest link". Because ActiveLock is open-source, and hence its implementation completely exposed to the public, there is no way for it to employ any "good" anti-cracking technique. In this sense, it can be your weakest link. Your application, on the other hand, is closed-source and therefore a little more difficult to crack. <p>Hackers can either crack the ActiveLock 2 DLL or use the source to build an imposter DLL that pretends to be the real ActiveLock and does anything the hacker wants it to, such as fooling your application into thinking that there is a valid license in the system when in fact there isn't. Therefore, your application must authenticate the ActiveLock 2 DLL before use, and one way to do it is to use the built-in CRC checksum facility that's provided by Windows. Here's the general process of how to use CRC checksum to authenticate the DLL. <ol> <li>First, you compute the CRC checksum activelock2.dll and store it within your source code, possibly encrypted, as a private constant value. <li>Somewhere within your application, typically in the initialization code and before initializing ActiveLock, compute the current CRC checksum of activelock2.dll and compare it against the saved checksum. If they don't match, then the DLL has been cracked. </ol> You can find working code of how this is done by looking in the source code for the example application, ALTestApp, which is included in the ActiveLock 2 distribution. </blockquote> <a name="resources"><h2>Resources</h2></a> <blockquote> For the source code of the little VB app I created for this tutorial, click <a href="Tutorial1_SourceCode.zip">here</a>. <p>Your closest source of information is the API Documentation that's included in the distribution. I strongly recommend that you at least read the section on <code>IActiveLock</code> interface to learn about ways you can interact with ActiveLock. <p>If you get stuck, here are a few other places you can go for help: <dl> <dt><a href="http://lists.sourceforge.net/mailman/listinfo/activelock-users">ActiveLock Users Mailing List</a> <dd>This is the fastest way to get help if you're having trouble with using ActiveLock. <dt><a href="http://activelock.sourceforge.net/boards/">ActiveLock Message Board</a> <dd>You can also post questions and discussions here. This way any newcomers who have not joined our mailing list can also benefit from your discussions. </dl> </blockquote> <hr> <small> ActiveLock<sup><font size=-2>TM</font></sup> is a trademark of Nelson Ferraz <br> Copyright 1998-2002 Nelson Ferraz <br> Copyright 2003 The ActiveLock Software Group (ASG) <br> All material is the property of the contributing authors. <br> </pre> </small> </body></html> |
From: Thanh H. T. <th...@us...> - 2003-11-26 05:54:30
|
Update of /cvsroot/activelock/activelock/tutorials/vb In directory sc8-pr-cvs1:/tmp/cvs-serv24132/vb Log Message: Directory /cvsroot/activelock/activelock/tutorials/vb added to the repository |
From: Thanh H. T. <th...@us...> - 2003-11-26 05:52:05
|
Update of /cvsroot/activelock/activelock/tutorials In directory sc8-pr-cvs1:/tmp/cvs-serv23734/tutorials Log Message: Directory /cvsroot/activelock/activelock/tutorials added to the repository |
From: Thanh H. T. <th...@us...> - 2003-11-26 05:50:31
|
Update of /cvsroot/activelock/tutorials In directory sc8-pr-cvs1:/tmp/cvs-serv23489/tutorials Log Message: Directory /cvsroot/activelock/tutorials added to the repository |
From: SourceForge.net <no...@so...> - 2003-11-21 06:42:05
|
Task #89265 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0 General Summary: Include *.cpp files for ALCrypto in setup Complete: 0% Status: Open Authority : th2tran Assigned to: nobody Description: In the alucrypto project there is a ref. to the stdafx.cpp file, this file is not included in the source tree ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=89265&group_id=70007&group_project_id=29689 |
From: SourceForge.net <no...@so...> - 2003-11-13 06:48:51
|
Bugs item #841243, was opened at 2003-11-13 06:48 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=526385&aid=841243&group_id=70007 Category: ALUGEN Group: None Status: Open Resolution: None Priority: 8 Submitted By: Thanh Hai Tran (th2tran) Assigned to: Nobody/Anonymous (nobody) Summary: ALUGEN sometimes generates bad product keysets Initial Comment: Issue found in 2.0.4. It had been found that sometimes ALUGEN generates a bad product keyset (GCode-VCode). The license key generated by the GCode would fail verification using the VCode. Consequently the user is never able to perform registration. For details, refer to Forum discussion thread http://www.activelock.org/boards/index.php? showtopic=65&st=0&#entry188 ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=526385&aid=841243&group_id=70007 |
From: Thanh H. T. <th...@us...> - 2003-11-09 12:32:32
|
Update of /cvsroot/activelock/activelock/examples/example1 In directory sc8-pr-cvs1:/tmp/cvs-serv2927 Modified Files: ALTestApp.vbp frmMain.frm modMain.bas Added Files: modRegistryAPIs.bas Log Message: Fixed security issue associated with using tlbinf32.dll --- NEW FILE: modRegistryAPIs.bas --- Attribute VB_Name = "modRegistryAPIs" ' /////////////////////////////////////////////////////////////////////// ' / Filename: modRegistryAPIs.bas / ' / Version: 2.0.0.1 / ' / Purpose: Facilitates Windows registry access / ' / ActiveLock Software Group (ASG) / ' / / ' / Date Created: ???? ??, ???? - UNKNOWN / ' / Date Last Modified: July 07, 2003 - MEC / ' / / ' / This software is released under the license detailed below and is / ' / subject to said license. Neither this header nor the licese below / ' / may be removed from this module. / ' /////////////////////////////////////////////////////////////////////// ' ' ' /////////////////////////////////////////////////////////////////////// ' / SOFTWARE LICENSE / ' /////////////////////////////////////////////////////////////////////// ' ' ActiveLock ' Copyright 1998-2002 Nelson Ferraz ' Copyright 2003 The ActiveLock Software Group (ASG) ' All material is the property of the contributing authors. ' ' Redistribution and use in source and binary forms, with or without ' modification, are permitted provided that the following conditions are ' met: ' ' [o] Redistributions of source code must retain the above copyright ' notice, this list of conditions and the following disclaimer. ' ' [o] Redistributions in binary form must reproduce the above ' copyright notice, this list of conditions and the following ' disclaimer in the documentation and/or other materials provided ' with the distribution. ' ' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ' "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ' LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ' A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ' OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ' SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ' LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ' DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ' THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ' OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ' ' ' /////////////////////////////////////////////////////////////////////// ' / MODULE CHANGE LOG / ' /////////////////////////////////////////////////////////////////////// ' ' 07.07.03 - MEC - Updated the header comments for this file. ' ' ' /////////////////////////////////////////////////////////////////////// ' / MODULE CODE BEGINS BELOW THIS LINE / ' /////////////////////////////////////////////////////////////////////// Option Explicit Public Const REG_SZ = 1 Public Const REG_EXPAND_SZ = 2 Public Const REG_BINARY = 3 Public Const REG_DWORD = 4 Public Const HKEY_CLASSES_ROOT = &H80000000 Public Const HKEY_CURRENT_USER = &H80000001 Public Const HKEY_LOCAL_MACHINE = &H80000002 Public Const HKEY_USERS = &H80000003 Public Const HKEY_PERFORMANCE_DATA = &H80000004 Public Const HKEY_CURRENT_CONFIG = &H80000005 Public Const HKEY_DYN_DATA = &H80000006 Public Const REG_OPTION_NON_VOLATILE = 0 Public Const REG_CREATED_NEW_KEY = &H1 Public Const REG_OPENED_EXISTING_KEY = &H2 Public Const KEY_QUERY_VALUE = &H1 Public Const KEY_ENUMERATE_SUB_KEYS = &H8 Public Const KEY_NOTIFY = &H10 Public Const READ_CONTROL = &H20000 Public Const STANDARD_RIGHTS_ALL = &H1F0000 Public Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL) Public Const STANDARD_RIGHTS_READ = (READ_CONTROL) Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 Public Const SYNCHRONIZE = &H100000 Public Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE)) Public Const KEY_SET_VALUE = &H2 Public Const KEY_CREATE_SUB_KEY = &H4 Public Const KEY_CREATE_LINK = &H20 Public Const STANDARD_RIGHTS_WRITE = (READ_CONTROL) Public Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE)) Public Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE)) Public Const ERROR_SUCCESS = 0& Public Const ERROR_ACCESS_DENIED = 5& Public Const ERROR_NO_MORE_ITEMS = 259& Public Const ERROR_BADKEY = 1010& Public Const ERROR_CANTOPEN = 1011& Public Const ERROR_CANTREAD = 1012& Public Const ERROR_REGISTRY_CORRUPT = 1015& Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Boolean End Type Public Type FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _ "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, _ ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias _ "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As _ String, ByVal lpReserved As Long, lpType As Long, lpData As Any, _ dwSize As Long) As Long Public Declare Function RegCreateKeyEx Lib "advapi32" _ Alias "RegCreateKeyExA" (ByVal hKey As Long, _ ByVal lpSubKey As String, ByVal Reserved As Long, _ ByVal lpClass As String, ByVal dwOptions As Long, _ ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, _ phkResult As Long, lpdwDisposition As Long) As Long Public Declare Function RegSetValueEx Lib "advapi32.dll" _ Alias "RegSetValueExA" (ByVal hKey As Long, _ ByVal lpValueName As String, ByVal dwReserved As Long, _ ByVal dwType As Long, lpValue As Any, ByVal dwSize As Long) As Long Public Declare Function RegDeleteKey Lib "advapi32.dll" _ Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Public Declare Function RegDeleteValue Lib "advapi32.dll" _ Alias "RegDeleteValueA" (ByVal hKey As Long, _ ByVal lpValueName As String) As Long Public Declare Function RegCloseKey Lib "advapi32.dll" _ (ByVal hKey As Long) As Long Public Declare Function RegConnectRegistry Lib "advapi32.dll" _ Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal _ hKey As Long, phkResult As Long) As Long Public Declare Function RegCreateKey Lib "advapi32.dll" Alias _ "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _ phkResult As Long) As Long Public Declare Function RegEnumKey Lib "advapi32.dll" Alias _ "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal _ lpName As String, ByVal cbName As Long) As Long Public Declare Function RegEnumValue Lib "advapi32.dll" Alias _ "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal _ lpValueName As String, lpcbValueName As Long, lpReserved As Long, _ lpType As Long, lpData As Byte, lpcbData As Long) As Long Public Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias _ "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal _ lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal _ lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long Public Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" _ (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long Public Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" _ (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter _ As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long Public Declare Function RegOpenKey Lib "advapi32.dll" _ (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Public Declare Function OSRegQueryValue Lib "advapi32.dll" _ Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As _ String, ByVal lpValue As String, lpcbValue As Long) As Long Public Declare Function RegReplaceKey Lib "advapi32.dll" Alias _ "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, _ ByVal lpNewFile As String, ByVal lpOldFile As String) As Long Public Declare Function RegRestoreKey Lib "advapi32.dll" Alias _ "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, _ ByVal dwFlags As Long) As Long Public Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias _ "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, _ lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, _ lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, _ lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor _ As Long, lpftLastWriteTime As FILETIME) As Long Public Function DeleteRegKey(lngKey As Long, SubKey As String) As Long Dim lngRet As Long lngRet = RegDeleteKey(lngKey, SubKey) DeleteRegKey = lngRet End Function Public Function DeleteRegValue(lngKey As Long, SubKey As String, ValueName As String) As Long Dim lngRet As Long Dim lngKeyRet As Long lngRet = RegOpenKeyEx(lngKey, SubKey, 0, KEY_WRITE, lngKeyRet) If lngRet <> ERROR_SUCCESS Then Exit Function lngRet = RegDeleteValue(lngKeyRet, ValueName) DeleteRegValue = lngRet RegCloseKey lngKeyRet End Function Public Function WriteRegLong(lngKey As Long, SubKey As String, _ DataName As String, DataValue As Long) As Long Dim SEC As SECURITY_ATTRIBUTES Dim lngKeyRet As Long Dim lngDis As Long Dim lngRet As Long lngRet = RegCreateKeyEx(lngKey, SubKey, 0, "", REG_OPTION_NON_VOLATILE, _ KEY_ALL_ACCESS, SEC, lngKeyRet, lngDis) If (lngRet = ERROR_SUCCESS) Or (lngRet = REG_CREATED_NEW_KEY) Or _ (lngRet = REG_OPENED_EXISTING_KEY) Then lngRet = RegSetValueEx(lngKeyRet, DataName, 0&, REG_DWORD, DataValue, 4) RegCloseKey lngKeyRet End If WriteRegLong = lngRet End Function Public Function WriteStringValue(lngKey As Long, SubKey As String, _ DataName As String, DataValue As String) As Long Dim SEC As SECURITY_ATTRIBUTES Dim lngKeyRet As Long Dim lngDis As Long Dim lngRet As Long lngRet = RegCreateKeyEx(lngKey, _ SubKey, 0, vbNullString, _ REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _ SEC, lngKeyRet, lngDis) If DataValue <= "" Then DataValue = "" If (lngRet = ERROR_SUCCESS) Or (lngRet = REG_CREATED_NEW_KEY) Or _ (lngRet = REG_OPENED_EXISTING_KEY) Then lngRet = RegSetValueEx(lngKeyRet, DataName, 0&, _ REG_SZ, ByVal DataValue, Len(DataValue)) RegCloseKey lngKeyRet End If WriteStringValue = lngRet End Function Public Function ReadRegVal(lngKey As Long, SubKey As String, _ DataName As String, DefaultData As Variant) As Variant Dim lngKeyRet As Long Dim lngData As Long Dim strdata As String Dim Datatype As Long Dim DataSize As Long Dim lngRet As Long ReadRegVal = DefaultData lngRet = RegOpenKeyEx(lngKey, SubKey, 0, KEY_QUERY_VALUE, lngKeyRet) If lngRet <> ERROR_SUCCESS Then Exit Function lngRet = RegQueryValueEx(lngKeyRet, DataName, 0&, Datatype, ByVal 0, DataSize) If lngRet <> ERROR_SUCCESS Then RegCloseKey lngKeyRet Exit Function End If Select Case Datatype Case REG_SZ strdata = Space(DataSize + 1) lngRet = RegQueryValueEx(lngKeyRet, DataName, 0&, Datatype, ByVal strdata, DataSize) If lngRet = ERROR_SUCCESS Then ReadRegVal = CVar(StripNulls(RTrim$(strdata))) End If Case REG_DWORD lngRet = RegQueryValueEx(lngKeyRet, DataName, 0&, Datatype, lngData, 4) If lngRet = ERROR_SUCCESS Then ReadRegVal = CVar(lngData) End If End Select RegCloseKey lngKeyRet End Function Public Function GetSubKeys(strKey As String, SubKey As String, ByRef SubKeyCnt As Long) As String Dim strValues() As String Dim strTemp As String Dim lngSub As Long Dim intCnt As Integer Dim lngRet As Long Dim intKeyCnt As Integer Dim FT As FILETIME lngRet = RegOpenKeyEx(strKey, SubKey, 0, KEY_ENUMERATE_SUB_KEYS, lngSub) If lngRet <> ERROR_SUCCESS Then SubKeyCnt = 0 Exit Function End If lngRet = RegQueryInfoKey(lngSub, vbNullString, 0, 0, SubKeyCnt, _ 65, 0, 0, 0, 0, 0, FT) If (lngRet <> ERROR_SUCCESS) Or (SubKeyCnt <= 0) Then SubKeyCnt = 0 End If ReDim strValues(SubKeyCnt - 1) For intCnt = 0 To SubKeyCnt - 1 strValues(intCnt) = String$(65, 0) RegEnumKeyEx lngSub, intCnt, strValues(intCnt), 65, 0, vbNullString, 0, FT strValues(intCnt) = StripNulls(strValues(intCnt)) Next intCnt RegCloseKey lngSub For intKeyCnt = LBound(strValues) To UBound(strValues) strTemp = strTemp & strValues(intKeyCnt) & "," Next intKeyCnt GetSubKeys = strTemp End Function Function StripNulls(ByVal s As String) As String Dim i As Integer i = InStr(s, Chr$(0)) If i > 0 Then StripNulls = Left$(s, i - 1) Else StripNulls = s End If End Function Public Function ParseString(strIn As String, intLoc As Integer, strDelimiter As String) As String Dim intPos As Integer Dim intStrt As Integer Dim intStop As Integer Dim intCnt As Integer intCnt = intLoc Do While intCnt > 0 intStop = intPos intStrt = InStr(intPos + 1, strIn, Left$(strDelimiter, 1)) If intStrt > 0 Then intPos = intStrt intCnt = intCnt - 1 Else intPos = Len(strIn) + 1 Exit Do End If Loop ParseString = Mid$(strIn, intStop + 1, intPos - intStop - 1) End Function Public Sub alSaveSetting(strRegHive As String, strRegPath As String, strAppname As String, strSection As String, strKey As String, vData As Variant) alSaveSettingReg strRegHive, strRegPath, strAppname, strSection, strKey, vData End Sub Public Function alGetSetting(strRegHive As String, strRegPath As String, strAppname As String, strSection As String, strKey As String, vDefault As Variant) As Variant alGetSetting = alGetSettingReg(strRegHive, strRegPath, strAppname, strSection, strKey, vDefault) End Function Public Sub alSaveSettingReg(strRegHive As String, strRegPath As String, strAppname As String, strSection As String, strKey As String, vData As Variant) Dim lRegistryBase As Long Select Case Left(UCase(strRegHive), 4) Case "HKLM" lRegistryBase = HKEY_LOCAL_MACHINE Case "HKCR" lRegistryBase = HKEY_CLASSES_ROOT Case Else lRegistryBase = HKEY_CURRENT_USER End Select WriteStringValue lRegistryBase, "Software\" & strRegPath & "\" & strAppname & "\" & strSection, strKey, CStr(vData) End Sub Public Function alGetSettingReg(strRegHive As String, strRegPath As String, strAppname As String, strSection As String, strKey As String, vDefault As Variant) As Variant Dim lRegistryBase As Long Select Case Left(UCase(strRegHive), 4) Case "HKLM" lRegistryBase = HKEY_LOCAL_MACHINE Case "HKCR" lRegistryBase = HKEY_CLASSES_ROOT Case Else lRegistryBase = HKEY_CURRENT_USER End Select alGetSettingReg = ReadRegVal(lRegistryBase, "Software\" & strRegPath & "\" & strAppname & "\" & strSection, strKey, vDefault) End Function Index: ALTestApp.vbp =================================================================== RCS file: /cvsroot/activelock/activelock/examples/example1/ALTestApp.vbp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ALTestApp.vbp 13 Oct 2003 07:45:31 -0000 1.3 +++ ALTestApp.vbp 9 Nov 2003 12:32:28 -0000 1.4 @@ -1,12 +1,13 @@ Type=Exe Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#stdole2.tlb#OLE Automation -Reference=*\G{C3B56087-6690-42ED-8914-633AA166AB41}#1.0#0#..\..\bin\activelock2.dll#ActiveLock2 +Reference=*\G{C3B56087-6690-42ED-8914-633AA166AB41}#1.0#0#activelock2.dll#ActiveLock2 Object={BDC217C8-ED16-11CD-956C-0000C04E4C0A}#1.1#0; TABCTL32.OCX Form=frmMain.frm UserControl=atViewPort.ctl Module=modMain; modMain.bas Object={6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0; COMCTL32.OCX ResFile32="atDisplay.RES" +Module=modRegistryAPIs; modRegistryAPIs.bas IconForm="frmMain" Startup="frmMain" HelpFile="" Index: frmMain.frm =================================================================== RCS file: /cvsroot/activelock/activelock/examples/example1/frmMain.frm,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- frmMain.frm 4 Nov 2003 07:49:29 -0000 1.6 +++ frmMain.frm 9 Nov 2003 12:32:28 -0000 1.7 @@ -536,13 +536,9 @@ End With ' Verify AL's authenticity - ' VerifyActiveLockdll requires a public-creatable object to be passed in so that it can - ' determine the Type Library DLL on which to perform the checksum. - ' So can't use MyActiveLock object to authenticate since it is not a public creatable object. - ' So we'll use ActiveLock2.Globals, which is just as good because they are in the same DLL. ' Bypass verification if DEBUG switch is set #If AL_DEBUG <> 1 Then - txtChecksum = modMain.VerifyActiveLockdll(New ActiveLock2.Globals) + txtChecksum = modMain.VerifyActiveLockdll() #End If ' Initialize the keystore. We use a File keystore in this case. @@ -609,7 +605,6 @@ Next i Encrypt = sResult End Function - ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Key Request and Registration Functionalities Index: modMain.bas =================================================================== RCS file: /cvsroot/activelock/activelock/examples/example1/modMain.bas,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- modMain.bas 5 Nov 2003 04:53:07 -0000 1.8 +++ modMain.bas 9 Nov 2003 12:32:28 -0000 1.9 @@ -57,6 +57,13 @@ ' 10.13.03 - th2tran - Copied a small number of functions from modActiveLock.bas into here ' so that our test app doesn't need to depend on modActiveLock. ' 11.02.03 - th2tran - Added simple encrypt/decrypt routines to be used by frmMain +' 11.08.03 - th2tran - Previously, GetTypeLibPathFromObject() used to retrieve the ActiveLock2 +' TypeLib path using the TLI library (tlbinfo.dll). This was proven to be unsecure because +' tlbinfo32.dll is a non-system DLL and therefore can be easily replace with +' a dummy DLL, thereby thwarting our checksum scheme. +' Thanks to Peter Young (py...@vb...) for pointing this out. +' I have now replaced the TLI implementation with a simpler registry lookup +' implementation. ' </pre> '* /////////////////////////////////////////////////////////////////////// @@ -275,39 +282,14 @@ 'Public Const PRIV_KEY$ = "???" Public Const PUB_KEY$ = "AAAAB3NzaC1yc2EAAAABJQAAAIB8/B2KWoai2WSGTRPcgmMoczeXpd8nv0Y4r1sJ1wV3vH21q4rTpEYuBiD4HFOpkbNBSRdpBHJGWec7jUi8ISV0pM6i2KznjhCms5CEtYHRybbiYvRXleGzFsAAP817PLN3JYo3WkErT2ofR5RCkfhmx060BT8waPoqnn3AB7sZ0Q==" -'Commented out Encrypt() for now. Have to think about using some other means, -' because PRIV_KEY is no longer accessible to us. -'Public Function Encrypt(strData As String) As String -' Dim Key As RSAKey -' ' create the key from the key blobs -' ' NOTE: I'm being lazy here. We can (and should) use a different keyset for data encryption. -' ' PUB_KEY and PRIV_KEY should only used for license key signing and verification. -' ' i.e. PRIV_KEY should only be accessible from the Key Generator and only PUB_KEY is -' ' available in the deployed application. -' ' Also, we can't encrypt using public key because public key is openly visible in the license -' ' file and should only be used for verification, not encryption. -' modActiveLock.rsa_createkey PUB_KEY, Len(PUB_KEY), PRIV_KEY, Len(PRIV_KEY), Key -' ' sign the data using the created key -' Dim dLen& -' Dim strEnc As String * 255 -' strEnc = strData -' dLen = Len(strData) -' modActiveLock.rsa_encrypt 1, strEnc, dLen, Key -' ' done with the key - throw it away -' modActiveLock.rsa_freekey Key -' -' Dim strOut As String -' strOut = Left$(strEnc, dLen) -' Encrypt = strOut -'End Function '' ' Verifies the checksum of the typelib containing the specified object. ' Returns the checksum. ' -Public Function VerifyActiveLockdll(obj As IUnknown) As String +Public Function VerifyActiveLockdll() As String Dim crc As Long - crc = CRCCheckSumTypeLib(obj) + crc = CRCCheckSumTypeLib() Debug.Print "Hash: " & crc If crc <> Value Then ' Encrypted version of "activelock2.dll has been corrupted. If you were running a real application, it should terminate at this point." @@ -318,13 +300,13 @@ '' ' Simple encrypt of a string -Public Function Enc(strData As String) As String +Public Function Enc(strdata As String) As String Dim i&, n& Dim sResult$ - n = Len(strData) + n = Len(strdata) Dim l As Long For i = 1 To n - l = Asc(Mid$(strData, i, 1)) * 11 + l = Asc(Mid$(strdata, i, 1)) * 11 If sResult = "" Then sResult = Hex(l) Else @@ -334,9 +316,9 @@ Enc = sResult End Function -Public Function Dec(strData As String) As String +Public Function Dec(strdata As String) As String Dim arr() As String - arr = Split(strData, ".") + arr = Split(strdata, ".") Dim sRes As String Dim i& For i = LBound(arr) To UBound(arr) @@ -361,24 +343,26 @@ End Sub -Private Function GetTypeLibPathFromObject(obj As IUnknown) As String - ' Retrieve TypeLib info using TLI library (tlbinfo.dll) - ' Use late-binding so that the user doesn't have to add it to their project reference - Dim tliApp As Object - Set tliApp = CreateObject("TLI.TLIApplication") - Dim ti As Object ' actually TLI.TypeInfo - Set ti = tliApp.ClassInfoFromObject(obj) +Private Function GetTypeLibPathFromObject() As String Dim strDllPath As String - GetTypeLibPathFromObject = ti.Parent.ContainingFile + ' Read DLL Path using a Registry Lookup: + ' Second parm = HKEY_CLASSES_ROOT\CLSID\{7EE391B8-6A97-4AB2-9F69-35702E47D5F1}\InprocServer32 + ' {7EE391B8-6A97-4AB2-9F69-35702E47D5F1}= ClsID for ActiveLock2.Globals + strDllPath = modRegistryAPIs.ReadRegVal(HKEY_CLASSES_ROOT, _ + Dec("2E1.344.391.323.2EC.3F4.549.25D.2F7.2F7.231.273.21B.2D6.268.1EF.252.2CB.273.25D.1EF.23C.2CB.2D6.226.1EF.273.302.252.273.1EF.231.247.25D.210.226.2F7.23C.25D.2EC.247.302.21B.55F.3F4.323.4BA.4D0.4E6.4C5.441.391.457.4E6.512.457.4E6.231.226"), _ + "", _ + Dec("42B.441.4FC.483.512.457.4A4.4C5.441.499.226.1FA.44C.4A4.4A4")) + Debug.Print "DLL Path: " + strDllPath + GetTypeLibPathFromObject = strDllPath End Function '' ' Performs CRC checksum on the type library containing the object. ' @param obj COM object used to determine the file path to the type library ' -Public Function CRCCheckSumTypeLib(obj As IUnknown) As Long +Public Function CRCCheckSumTypeLib() As Long Dim strDllPath As String - strDllPath = GetTypeLibPathFromObject(obj) + strDllPath = GetTypeLibPathFromObject() Dim HeaderSum As Long, RealSum As Long MapFileAndCheckSum strDllPath, HeaderSum, RealSum CRCCheckSumTypeLib = RealSum |
From: Thanh H. T. <th...@sy...> - 2003-11-09 11:53:22
|
Well, Mr. PM/WebAdmin? What say ye? Thanh Hai Tran wrote: > Please add an item on the WHATS NEW section with a link that says > something like "New Tutorial for ActiveLock 2 is available", and when > they click on the link, it should popup a new window to display the > tutorial. Permanently, I don't know where it should go in the > NavBar. But you're the webmaster; you figure it out. :-) > > Cheers, > Thanh > > Michael E. Crute wrote: > >> Sure thing... just lemme know whatcha want and it will be done ASAP. >> >> -Mike >> >> Thanh Hai Tran wrote: >> >>> Hi Mike, >>> Can I get your help to update activelock.org site with new release >>> info and add a link to the new tutorial please. >>> Thank you. >>> - Thanh >>> >>> Thanh Hai Tran wrote: >>> >>>> Hello All, >>>> I know I said before that after Alpha 2, we were going into Beta >>>> but, in hindsight, this was not realistic (read the release notes >>>> and you'll know why :-)) >>>> Anyway, Alpha 3 is available for download on >>>> http://sourceforge.net/projects/activelock. >>>> There is also a (crudely formatted) tutorial available, and you can >>>> read it here: >>>> http://www.activelock.org/tutorials/BasicTutorial.html >>>> Enjoy! >>>> - Thanh >>>> > |
From: SourceForge.net <no...@so...> - 2003-11-06 04:11:40
|
Task #80351 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0 General Summary: Create a Tutorial Complete: 100% Status: Closed Authority : kingrikk Assigned to: th2tran Description: Ensure that user guides, quick runthroughs and tutorials are created for this version of ActiveLock before we continue. Follow-Ups: ------------------------------------------------------- Date: 2003-11-06 04:11 By: th2tran Comment: Done, and posted to www.activelock.org ------------------------------------------------------- Date: 2003-10-15 05:10 By: th2tran Comment: ...and by the way, I'm designating this task solely for creating a tutorial. We'll need to create a separate task for user guide documentation, later. ------------------------------------------------------- Date: 2003-10-15 05:02 By: th2tran Comment: Need a step-by-step "ActiveLock 2 for Dummies" tutorial that shows how developers can use ActiveLock 2 within their existing application. ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=80351&group_id=70007&group_project_id=29689 |
From: SourceForge.net <no...@so...> - 2003-11-06 04:10:11
|
Task #83282 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0-alpha2 Summary: ActiveLock Universal Generator (ALUGEN) Complete: 100% Status: Closed Authority : th2tran Assigned to: wizzardme2000, th2tran Description: Universal Key Generator allows the developer to generate/maintain product code and license keys for all of their products (not just one). More detailed specs to follow. Follow-Ups: ------------------------------------------------------- Date: 2003-11-06 04:10 By: th2tran Comment: Implemented in 2.0.3. ------------------------------------------------------- Date: 2003-10-06 06:10 By: th2tran Comment: Done. And available in 2.0.2. PM to verify and close. ------------------------------------------------------- Date: 2003-09-15 17:15 By: th2tran Comment: Basic framework and GUI layout are there. Product key (i.e. SoftwareCode) generation and storage is working. Next: Need to work on license key generation. ------------------------------------------------------- Date: 2003-08-16 20:37 By: th2tran Comment: Moved to alpha2 task list. ------------------------------------------------------- Date: 2003-08-08 23:35 By: th2tran Comment: Functional spec added in: http://www.activelock.org/boards/index.php?showtopic=45 For implementation discussion (developers only), go to: http://www.activelock.org/boards/index.php?act=ST&f=13&t=46 ------------------------------------------------------- Date: 2003-08-06 23:16 By: th2tran Comment: Make that ALUGEN...sounds cooler. :-) ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=83282&group_id=70007&group_project_id=31123 |
From: SourceForge.net <no...@so...> - 2003-11-06 04:09:18
|
Task #83818 has been updated. Project: ActiveLock Subproject: ActiveLock 2.0-alpha2 Summary: Setup program Complete: 100% Status: Closed Authority : th2tran Assigned to: th2tran, mcrute Description: We need an installer for ActiveLock. We will use NSIS for this(http://nsis.sourceforge.net) Follow-Ups: ------------------------------------------------------- Date: 2003-11-06 04:09 By: th2tran Comment: Implemented as of Alpha 2. ------------------------------------------------------- Date: 2003-10-06 06:12 By: th2tran Comment: Done and available in 2.0.2. ------------------------------------------------------- For more info, visit: http://sourceforge.net/pm/task.php?func=detailtask&project_task_id=83818&group_id=70007&group_project_id=31123 |
From: Thanh H. T. <th...@sy...> - 2003-11-05 22:36:52
|
Please add an item on the WHATS NEW section with a link that says something like "New Tutorial for ActiveLock 2 is available", and when they click on the link, it should popup a new window to display the tutorial. Permanently, I don't know where it should go in the NavBar. But you're the webmaster; you figure it out. :-) Cheers, Thanh Michael E. Crute wrote: > Sure thing... just lemme know whatcha want and it will be done ASAP. > > -Mike > > Thanh Hai Tran wrote: > >> Hi Mike, >> Can I get your help to update activelock.org site with new release >> info and add a link to the new tutorial please. >> Thank you. >> - Thanh >> >> Thanh Hai Tran wrote: >> >>> Hello All, >>> I know I said before that after Alpha 2, we were going into Beta >>> but, in hindsight, this was not realistic (read the release notes >>> and you'll know why :-)) >>> Anyway, Alpha 3 is available for download on >>> http://sourceforge.net/projects/activelock. >>> There is also a (crudely formatted) tutorial available, and you can >>> read it here: >>> http://www.activelock.org/tutorials/BasicTutorial.html >>> Enjoy! >>> - Thanh >>> |
From: Michael E. C. <mc...@so...> - 2003-11-05 22:24:17
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title></title> </head> <body text="#3333ff" bgcolor="#ffffff"> <font size="-1"><span style="font-family: verdana;">Sure thing... just lemme know whatcha want and it will be done ASAP.<br> <br> -Mike<br> </span></font><br> Thanh Hai Tran wrote:<br> <blockquote type="cite" cite="mid...@sy...">Hi Mike, <br> Can I get your help to update activelock.org site with new release info and add a link to the new tutorial please. <br> Thank you. <br> - Thanh <br> <br> Thanh Hai Tran wrote: <br> <br> <blockquote type="cite">Hello All, <br> I know I said before that after Alpha 2, we were going into Beta but, in hindsight, this was not realistic (read the release notes and you'll know why :-)) <br> Anyway, Alpha 3 is available for download on <a class="moz-txt-link-freetext" href="http://sourceforge.net/projects/activelock">http://sourceforge.net/projects/activelock</a>. <br> There is also a (crudely formatted) tutorial available, and you can read it here: <br> <a class="moz-txt-link-freetext" href="http://www.activelock.org/tutorials/BasicTutorial.html">http://www.activelock.org/tutorials/BasicTutorial.html</a> <br> Enjoy! <br> - Thanh <br> <br> </blockquote> <br> <br> <br> ------------------------------------------------------- <br> This SF.net email is sponsored by: SF.net Giveback Program. <br> Does SourceForge.net help you be more productive? Does it <br> help you create better code? SHARE THE LOVE, and help us help <br> YOU! Click Here: <a class="moz-txt-link-freetext" href="http://sourceforge.net/donate/">http://sourceforge.net/donate/</a> <br> _______________________________________________ <br> Activelock-Development mailing list <br> <a class="moz-txt-link-abbreviated" href="mailto:Act...@li...">Act...@li...</a> <br> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/activelock-development">https://lists.sourceforge.net/lists/listinfo/activelock-development</a> <br> <br> <br> </blockquote> <br> <pre cols="72" class="moz-signature">-- **************************************** Michael E. Crute Senior Applications Developer SoftGroup Development Corporation <a class="moz-txt-link-abbreviated" href="mailto:mc...@so...">mc...@so...</a></pre> </body> </html> |
From: Michael E. C. <mc...@so...> - 2003-11-05 22:21:37
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title></title> </head> <body text="#3333ff" bgcolor="#ffffff"> <font size="-1"><span style="font-family: verdana;">I wasn't aware we where keeping them there. I have not updated anything in CVS forever so I dunno.<br> <br> -Mike<br> </span></font><br> Thanh Hai Tran wrote:<br> <blockquote type="cite" cite="mid...@sy...">Hey Mike, <br> I thought we agreed not to keep the generated API docs in CVS. It can get out-of-date really fast. <br> - Thanh <br> <br> <br> <br> ------------------------------------------------------- <br> This SF.net email is sponsored by: SF.net Giveback Program. <br> Does SourceForge.net help you be more productive? Does it <br> help you create better code? SHARE THE LOVE, and help us help <br> YOU! Click Here: <a class="moz-txt-link-freetext" href="http://sourceforge.net/donate/">http://sourceforge.net/donate/</a> <br> _______________________________________________ <br> Activelock-Development mailing list <br> <a class="moz-txt-link-abbreviated" href="mailto:Act...@li...">Act...@li...</a> <br> <a class="moz-txt-link-freetext" href="https://lists.sourceforge.net/lists/listinfo/activelock-development">https://lists.sourceforge.net/lists/listinfo/activelock-development</a> <br> <br> <br> </blockquote> <br> <pre cols="72" class="moz-signature">-- **************************************** Michael E. Crute Senior Applications Developer SoftGroup Development Corporation <a class="moz-txt-link-abbreviated" href="mailto:mc...@so...">mc...@so...</a></pre> </body> </html> |
From: Thanh H. T. <th...@sy...> - 2003-11-05 07:01:25
|
Hi Mike, Can I get your help to update activelock.org site with new release info and add a link to the new tutorial please. Thank you. - Thanh Thanh Hai Tran wrote: > Hello All, > I know I said before that after Alpha 2, we were going into Beta but, > in hindsight, this was not realistic (read the release notes and > you'll know why :-)) > Anyway, Alpha 3 is available for download on > http://sourceforge.net/projects/activelock. > There is also a (crudely formatted) tutorial available, and you can > read it here: > http://www.activelock.org/tutorials/BasicTutorial.html > Enjoy! > - Thanh > |
From: Thanh H. T. <th...@us...> - 2003-11-05 04:54:53
|
Update of /cvsroot/activelock/alugen/app In directory sc8-pr-cvs1:/tmp/cvs-serv923 Modified Files: products.ini Log Message: Regen'ed new product key for ALTestApp. Old keys must have gotten corrupted/lost somehow. Could be due to that INI truncation bug. Index: products.ini =================================================================== RCS file: /cvsroot/activelock/alugen/app/products.ini,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- products.ini 13 Oct 2003 07:23:51 -0000 1.3 +++ products.ini 5 Nov 2003 04:54:50 -0000 1.4 @@ -1,5 +1,5 @@ [TestApp 1.0] Name=TestApp Version=1.0 -VCode=AAAAB3NzaC1yc2EAAAABJQAAAICnmn99k60EAqe3F8Kjt9oW1gjVViWRFXpfZ1fYEG7tz/DDHYv3y5Xmx71QsQafcIiQGG+/G6/g4KSax1LRtXHi4HWyf4SAurbYSMl0RrP5qIppkFIGZpO92zO8Iy08SChSHDjNXIFk6ajzLYixtoN/xT2k6qzJc1VbojfoiJd1oQ== -GCode=AAAAgA2W574S5IPI3SqFYs8BEa7TFXkU0p0PlEzstBhwCP6Ge04XJwZA8Hp+5dYcMPgruAuu9E3D+YDvnqTEDaJM+2VKMN+oiUoi/PyoNd88Dl2BgewXtYucDww02JWHn7tsOjBNnt60gsJT/RgHiTs4DaarUqPRiZviRMdX+wiIiS65AAAAQO/6vGkUQRoqZ8RUfmNoc5dSDPNqYDAbsq20y0UxN0EwZd5pntH7wzWGc+uRG+3qLdtW4+2qzlGo2x5IBgSYS9MAAABAssraTShX8QbvFIc0qUUE0/X8zdNBsb50obpnVUn9etTt1dJz2DjvqEZW5QW7apufqOuHOgt4kFw7RtfOmriUOwAAAEDuPPKFsFup1uQ0taiPBjHbdpbfR0tvq/hLg9N1+rar+Mx6lMOV5MhT/8VY5u2KMj+IMC9GSTkAVJgf7ckq1+BL +VCode=AAAAB3NzaC1yc2EAAAABJQAAAIB8/B2KWoai2WSGTRPcgmMoczeXpd8nv0Y4r1sJ1wV3vH21q4rTpEYuBiD4HFOpkbNBSRdpBHJGWec7jUi8ISV0pM6i2KznjhCms5CEtYHRybbiYvRXleGzFsAAP817PLN3JYo3WkErT2ofR5RCkfhmx060BT8waPoqnn3AB7sZ0Q== +GCode=AAAAgEpQt55fVvkLo44f/fi8OvV08J9btR6NaAYHZpA6qU4dDHnbnqdawfHaIXDuP5VB4DSoABTt4xUS3IRGKz9tp5CWt8irOeRSSrt8fLhe3D1UtQgGBqoA4fujQC734ajLUcCvEGsao3Wf/vUH0V3991EyI973hAahUUWCbjhm8CflAAAAQPeCV4CpJfEbr/V2C6tEb1Cpoeow1JFJLGr8l6XmuIt8LCEG8E01rFoJzIQIcORl/htC3UDZHvxJRG2yo+8/FB8AAABAgUW/rGg1+0i7bL0UarO1gdzKQBVlGmJIMHpfbV+bLLlvr4qS6+FQaErN8JRtyEPrwHJrafDAdKg3G0BI37mUDwAAAEAIW/5Jxi1GPBagOt4LLY17TfoQH3YwigXy13FgpRuYA1fxzHIgF/Z0lSgI5+64K7CTonz5xEe6+Sk3i0WNYvPd |