From e525c8c1850b8bc1636f13e01d0ba7dc8c2eb625 Mon Sep 17 00:00:00 2001 From: gladson Date: Mon, 4 Mar 2013 12:34:43 -0800 Subject: [PATCH 1/4] Jquery Flip Counter - 1.2 --- .../flipcounter/1.0/flipCounter-medium.png | Bin 0 -> 5319 bytes .../flipcounter/1.0/jquery.flipCounter.1.0.js | 409 ++++++++++ .../1.0/jquery.flipCounter.1.0.min.js | 1 + .../flipcounter/1.1/flipCounter-medium.png | Bin 0 -> 5555 bytes .../flipcounter/1.1/jquery.flipCounter.1.1.js | 426 +++++++++++ .../1.1/jquery.flipCounter.1.1.min.js | 1 + .../flipcounter/1.2/flipCounter-medium.png | Bin 0 -> 5555 bytes .../flipcounter/1.2/jquery.flipCounter.1.2.js | 724 ++++++++++++++++++ .../1.2/jquery.flipCounter.1.2.min.js | 1 + ajax/libs/flipcounter/package.json | 18 + 10 files changed, 1580 insertions(+) create mode 100755 ajax/libs/flipcounter/1.0/flipCounter-medium.png create mode 100755 ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.js create mode 100755 ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.min.js create mode 100755 ajax/libs/flipcounter/1.1/flipCounter-medium.png create mode 100755 ajax/libs/flipcounter/1.1/jquery.flipCounter.1.1.js create mode 100755 ajax/libs/flipcounter/1.1/jquery.flipCounter.1.1.min.js create mode 100755 ajax/libs/flipcounter/1.2/flipCounter-medium.png create mode 100755 ajax/libs/flipcounter/1.2/jquery.flipCounter.1.2.js create mode 100755 ajax/libs/flipcounter/1.2/jquery.flipCounter.1.2.min.js create mode 100755 ajax/libs/flipcounter/package.json diff --git a/ajax/libs/flipcounter/1.0/flipCounter-medium.png b/ajax/libs/flipcounter/1.0/flipCounter-medium.png new file mode 100755 index 0000000000000000000000000000000000000000..1f53b8e619f72e262a28a03618d0635d47b983cd GIT binary patch literal 5319 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 LS{l^qyT|?yC`-RW literal 0 HcmV?d00001 diff --git a/ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.js b/ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.js new file mode 100755 index 000000000..816ba5ba5 --- /dev/null +++ b/ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.js @@ -0,0 +1,409 @@ +/* + * jQuery Flip Counter v1.0 by Brolly.ca - http://bloggingsquared.com/jquery/flipcounter/ + * + * Uses valid markup and an image sprite to render an analogue clock / odometer effect. + * Clock image is easily customizable, default options can be easily overriden, can be easily animated and extended with jQuery.easing plugin, gracefully degrades if Javascript is not available. + * + * TERMS OF USE - jQuery Flip Counter + * + * Open source under the BSD License. + * + * Copyright © 2010 Dan Imbrogno and Brolly Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * 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. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * 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. + * +*/ + +(function($){ + + $.fn.flipCounter = function(method){ + + // Public Variables + var style_digit = false; // css style of digits + var style_character = false; // css style of characters + var obj = false; // reference to current DOM object + var defaults = { + number:0, // default number is 0 + numIntegralDigits:1, // default number of places left of . is 1 + numFractionalDigits:0, // default number of places right of . is 0 + digitClass:'counter-digit', // default class for the counter digits + counterFieldName:'counter-value', // default name for the counter hidden field + digitHeight:40, // default height of each digit in sprite image + digitWidth:30, // default width of each digit in sprite image + imagePath:'img/flipCounter-medium.png', // default path of sprite image relative to html document + easing: _noEasing, // default easing function, this can be overridden by jQuery.easing methods (i.e. jQuery.easing.easeOutCubic) + duration:10000, // default duration of animations + onAnimationStarted:false, // callback for animation starting + onAnimationStopped:false, // callback for animation stopped, + onAnimationPaused:false // callback for animation paused + }; + + // Public Methods + var methods = { + + // Initialization + init: function(options) { + + return this.each(function() + { + + // Set reference to this DOM object + obj = $(this); + + // new options override defaults + var new_options = $.extend(defaults, options); + var old_options = obj.data('flipCounter'); + + // new options override previous initializiation options + options = $.extend(old_options, new_options); + obj.data('flipCounter', options); + + // if number isn't set then try and get it from the hidden field + if(options.number === false || options.number == 0) + { + (_getCounterValue() !== false) ? options.number = _getCounterValue() : options.number = 0; + _setOption('number',options.number); + } + + // Default Options + _setOption('animating', false); + + // Bind Actions + obj.bind('startAnimation', function(event, options) { _startAnimation(options); }); + obj.bind('pauseAnimation',function(event) { _pauseAnimation(); }); + obj.bind('stopAnimation', function(event) { _stopAnimation(); }); + + // Render counter + _setupStyles(); + _renderCounter(); + + }) + }, + + // Render a number in the counter + renderCounter: function(value) { + return this.each(function() { + obj = $(this); + _setOption('number',value); + _renderCounter(); + }); + }, + + // Render a number in the counter (synonym for above) + setNumber: function(value) { + return this.each(function() + { + obj = $(this); + _setOption('number', value); + _renderCounter(); + }); + }, + + // Get the number currently rendered + getNumber: function() { + var val = false; + this.each(function() + { + obj = $(this); + val = _getOption('number'); + }); + return val; + }, + + // Start animation or resume paused animation + startAnimation: function(options) { + + return this.each(function() + { + obj = $(this); + obj.trigger('startAnimation', options); + }); + + }, + + // Stop animation + stopAnimation: function() { + return this.each(function() + { + obj = $(this); + obj.trigger('stopAnimation'); + }); + }, + + // Pause animation + pauseAnimation: function() { + return this.each(function() + { + obj = $(this); + obj.trigger('pauseAnimation'); + }); + } + + }; + + // Call public methods + if ( methods[method] ) { + return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return methods.init.apply( this, arguments ); + } else { + $.error( 'Method ' + method + ' does not exist on jQuery.flipCounter' ); + } + + // Private Functions + + // Get an option + function _getOption(option) { + var data = obj.data('flipCounter'); + var value = data[option]; + if(typeof value !== 'undefined') + { + return value; + } + return false; + } + + // Set an option + function _setOption(option, value) { + var data = obj.data('flipCounter'); + data[option] = value; + obj.data('flipCounter', data); + } + + // Setup the counter + function _setupCounter() { + + // If object doesn't have a hidden field then create one + if(obj.children('[name="'+_getOption('counterFieldName')+'"]').length < 1) + { + obj.append(''); + } + + // Add or remove enough digits to fit number + var digits_length = _getDigitsLength(); + var num_digits_needed = _getNumberFormatted().length; + + while(num_digits_needed != digits_length) + { + if(num_digits_needed > digits_length) + { + obj.prepend('0'); + } + else if(num_digits_needed < digits_length) + { + obj.children('.'+_getOption('digitClass')+':nth-child(1)').remove(); + } + digits_length = _getDigitsLength(); + } + + } + + // Render the counter + function _renderCounter() + { + _setupCounter(); + var number = _getNumberFormatted(); + var digits = _getDigits(); + var pos = 0; + + $.each(digits, function(index, value) { + digit = number.toString().charAt(pos); + $(this).attr('style',style_digit+style_character[digit]); + $(this).text(digit.toString()); + pos++ + }); + _setCounterValue(); + } + + // Setup the CSS styles + function _setupStyles() + { + style_digit = "height:"+_getOption('digitHeight')+"px;width:"+_getOption('digitWidth')+"px;background-image:url('"+_getOption('imagePath')+"');background-repeat:no-repeat;text-indent: -999em;display:inline-block;"; + style_character = { + '1': 'background-position: '+_getOption('digitWidth')*0+'px 0px;', + '2': 'background-position: -'+_getOption('digitWidth')*1+'px 0px;', + '3': 'background-position: -'+_getOption('digitWidth')*2+'px 0px;', + '4': 'background-position: -'+_getOption('digitWidth')*3+'px 0px;', + '5': 'background-position: -'+_getOption('digitWidth')*4+'px 0px;', + '6': 'background-position: -'+_getOption('digitWidth')*5+'px 0px;', + '7': 'background-position: -'+_getOption('digitWidth')*6+'px 0px;', + '8': 'background-position: -'+_getOption('digitWidth')*7+'px 0px;', + '9': 'background-position: -'+_getOption('digitWidth')*8+'px 0px;', + '0': 'background-position: -'+_getOption('digitWidth')*9+'px 0px;', + '.': 'background-position: -'+_getOption('digitWidth')*10+'px 0px;', + '-': 'background-position: -'+_getOption('digitWidth')*11+'px 0px;' + }; + } + + // get a collection of the objects digit DOM elements + function _getDigits() + { + return obj.children('.'+_getOption('digitClass')); + } + + // get the current number of digit DOM elements + function _getDigitsLength() + { + return _getDigits().length; + } + + // get the value stored in the counter field + function _getCounterValue() + { + var val = parseFloat(obj.children('[name="'+_getOption('counterFieldName')+'"]').val()); + if(val == val == false) return false; // test for NaN + return val; + } + + // update the counter field with the current number + function _setCounterValue() + { + obj.children('[name="'+_getOption('counterFieldName')+'"]').val(_getOption('number')); + } + + // format number as a string according to given options + function _getNumberFormatted() + { + var number = _getOption('number'); + if(typeof number !== 'number') { $.error('Attempting to render non-numeric value.'); return '0'; } // check is numeric + + var str_number = ''; + + if(number >= 0){ // if greater than zero add leading zeros if necessary + var num_integral_digits = _getOption('numIntegralDigits'); + var num_extra_zeros = num_integral_digits - number.toFixed().toString().length; + for(var i = 0; i < num_extra_zeros; i++) + { + str_number += '0'; + } + str_number += number.toFixed(_getOption('numFractionalDigits')); + } + else { // if less than zero remove leading zeros and add minus sign + str_number = '-'+Math.abs(number.toFixed(_getOption('numFractionalDigits'))); + } + + return str_number; + + } + + // Start the animation + function _startAnimation(options) { + + if(typeof options == 'undefined' && false == _getOption('animating')) return false; // if trying to resume from pause without first starting return false + + if(typeof options !== 'undefined') + { + if (typeof options.easing == 'function') _setOption('easing', options.easing); + if (typeof options.onAnimationStarted == 'function') _setOption('onAnimationStarted', options.onAnimationStarted); + if (typeof options.onAnimationStopped == 'function') _setOption('onAnimationStopped', options.onAnimationStopped); + if (typeof options.onAnimationPaused == 'function') _setOption('onAnimationPaused', options.onAnimationPaused); + if (typeof options.duration == 'number') _setOption('duration', options.duration); + } + + // if its been paused then simply restart the timer + if(_getOption('paused') === true) { + _setOption('paused', false); + _setOption('animating', true); + _setOption('interval', setInterval(_doAnimation, 1)); + + } + else // it is being started new, initialize the animation + { + + _setOption('start_number', _getOption('number')); + _setOption('end_number', options.number); + _setOption('time', 0); + _setOption('duration', _getOption('duration') / 10); // divide by 10 so 1000 duration = 1 sec + _setOption('animating', true); + _setOption('interval', setInterval(_doAnimation, 1)); + + } + + // Callback for animation started + var onAnimationStarted = _getOption('onAnimationStarted'); + if(typeof onAnimationStarted == 'function') onAnimationStarted.call(obj, obj); + + } + + // Do animation step + function _doAnimation() { + + var time = _getOption('time'); + var start_number = _getOption('start_number'); + var number_change = _getOption('end_number') - start_number; + var duration = _getOption('duration'); + var easing = _getOption('easing'); + + // apply easing function + var new_num = easing.apply(obj, [false, time,start_number,number_change,duration]); + + _setOption('number', new_num); + _renderCounter(); + + if(time >= duration) { + _stopAnimation(); // if animation has expired, stop it + } + + _setOption('time',time+1); // increase time step + + } + + // Stop animation + function _stopAnimation() { + + if(true !== _getOption('animating')) return false; + + clearInterval(_getOption('interval')); + _setOption('number', _getOption('end_number')); + _setOption('start_number', null); + _setOption('end_number', null); + _setOption('timer', 0); + _setOption('animating',false); + + var onAnimationStopped = _getOption('onAnimationStopped'); + if(typeof onAnimationStopped == 'function') onAnimationStopped.call(obj, obj); + + } + + // Pause animation + function _pauseAnimation() { + + if(true !== _getOption('animating')) return false; + + _setOption('paused', true); + clearInterval(_getOption('interval')); + + var onAnimationPaused = _getOption('onAnimationPaused'); + if(typeof onAnimationPaused == 'function') onAnimationPaused.call(obj, obj); + } + + // Default linear interpolation, override this function in options to replace it with jQuery.easing or custom function + function _noEasing(x, t, b, c, d) + { + return t /d * c + b; + } + + } + +})(jQuery); \ No newline at end of file diff --git a/ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.min.js b/ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.min.js new file mode 100755 index 000000000..d491aaab4 --- /dev/null +++ b/ajax/libs/flipcounter/1.0/jquery.flipCounter.1.0.min.js @@ -0,0 +1 @@ +(function(a){a.fn.flipCounter=function(e){var o=false;var r=false;var k=false;var h={number:0,numIntegralDigits:1,numFractionalDigits:0,digitClass:"counter-digit",counterFieldName:"counter-value",digitHeight:40,digitWidth:30,imagePath:"img/flipCounter-medium.png",easing:b,duration:10000,onAnimationStarted:false,onAnimationStopped:false,onAnimationPaused:false};var u={init:function(w){return this.each(function(){k=a(this);var y=a.extend(h,w);var x=k.data("flipCounter");w=a.extend(x,y);k.data("flipCounter",w);if(w.number===false||w.number==0){(g()!==false)?w.number=g():w.number=0;l("number",w.number)}l("animating",false);k.bind("startAnimation",function(A,z){q(z)});k.bind("pauseAnimation",function(z){f()});k.bind("stopAnimation",function(z){v()});j();s()})},renderCounter:function(w){return this.each(function(){k=a(this);l("number",w);s()})},setNumber:function(w){return this.each(function(){k=a(this);l("number",w);s()})},getNumber:function(){var w=false;this.each(function(){k=a(this);w=t("number")});return w},startAnimation:function(w){return this.each(function(){k=a(this);k.trigger("startAnimation",w)})},stopAnimation:function(){return this.each(function(){k=a(this);k.trigger("stopAnimation")})},pauseAnimation:function(){return this.each(function(){k=a(this);k.trigger("pauseAnimation")})}};if(u[e]){return u[e].apply(this,Array.prototype.slice.call(arguments,1))}else{if(typeof e==="object"||!e){return u.init.apply(this,arguments)}else{a.error("Method "+e+" does not exist on jQuery.flipCounter")}}function t(w){var y=k.data("flipCounter");var x=y[w];if(typeof x!=="undefined"){return x}return false}function l(w,y){var x=k.data("flipCounter");x[w]=y;k.data("flipCounter",x)}function n(){if(k.children('[name="'+t("counterFieldName")+'"]').length<1){k.append('')}var w=c();var x=m().length;while(x!=w){if(x>w){k.prepend('0')}else{if(x=0){var w=t("numIntegralDigits");var x=w-A.toFixed().toString().length;for(var y=0;y=z){v()}l("time",A+1)}function v(){if(true!==t("animating")){return false}clearInterval(t("interval"));l("number",t("end_number"));l("start_number",null);l("end_number",null);l("timer",0);l("animating",false);var w=t("onAnimationStopped");if(typeof w=="function"){w.call(k,k)}}function f(){if(true!==t("animating")){return false}l("paused",true);clearInterval(t("interval"));var w=t("onAnimationPaused");if(typeof w=="function"){w.call(k,k)}}function b(y,z,w,B,A){return z/A*B+w}}})(jQuery); \ No newline at end of file diff --git a/ajax/libs/flipcounter/1.1/flipCounter-medium.png b/ajax/libs/flipcounter/1.1/flipCounter-medium.png new file mode 100755 index 0000000000000000000000000000000000000000..f80f25b75d93ec018c957e3079566c25502a4999 GIT binary patch literal 5555 zcmbVQc|4Te+m|gQm3>JwhU~@+*~XT!%f1dOh8atk!Hk_GWZ%OeO2k9R@{lcCD(i^s zp|WO)B>VQ>^(^oE$M5s|*{EjQc#>J z1lq!Ml)zg>jLQf3a1k|8L^He-(GTs7rBK7*9k5_s541DZ6pO|Lcy(iyC@83$T+LBL zlz~3N5$^#-|Du8Vdw2re6ckFT{+?(@H!KnCfOU4oDML1zS|MOpj55SZ#sFsEsg8AV z)d}>*ngtq~I|jNrDqtY0Dqtml1R%fzOGJbHJ=}2wgugQ6w_F6!{xvKK0skf;x+z2c zG74p23|7Z`W5F^|n1mxt76z7uL*dfbLxWe8yDUsLe#G%)yAFpluIqX3sl`lCH1;ZT^QhsUpZ z{iY@mO|k!L#($(Hml0`scFc;wPawimsghqI5lBNSr}YiLrqOV8YT_X0ue=C#Z!DUK z_cq7l-T#RIV;4LTPjJC|g4NArzy@eXSKP1uujTn`wi;M(S6?hf%Ny?j{_S6c>wnM> zlb46V;d0kta(~TRO-2KTgv%&s!Zo#E>eAOBfAeDgKR%NLjFJ2m9RDX+{uu%y@K^KS z&<8sICJz<|WQ;eE8j2EXyA%|c=5#gG%>5_Va$V!u-mt&B6ca=L)c$fpSqwcr!z>5e zrD5UE%rYq!)XZ#x(GcOeds4AtqI3t;jB)2oqR!lWeNTM$tme;>$E+sI{Fi92aTiEO zOA5YSIR2`KNH-f9v6%K-yiHP}$Kd=%T8(lS?21bdca$qiOH0-HB3Vtls-U@hW3_H$ zsdKV&avWVW-eEVvR!l!GRUhtt3bl>VJ2y|+a2=W~M%@5z`rZ0SKreP-zOtYHG^g!$bZ)fs zY^TY;^q|ACMre7Bj!~&T!-T3C$e z3gym!VAZa$t`R(mmK4$_B@gd?|ML3iaYS&h#LMI_qMyqs_Z}$_n64;s#wrExeQ#`R zyrLY48laT-n7lS57*4iq2gAd`Hz4##ryt|>UIj}FuzHxK-B4+UUlzB-y(w#kD^;T;oC z$z}|guql&Gmr~CFr8~@?sq)8C0Ra|q*ij4&>c{2`r%YqSc8=RMNFUqC6(&v*ci)v{*}UW zylEt;#TQ1CB}tm<>pKudr8{r+WS@1vGAYp7$3$nt`uA=io%Sm|zaT-Vx5&9i4`|zM z79$#Aw@cD9XcNLWz)wCwA|o6ca9Zt zpy92it9@qT%gKWWw9mEG(`jQ(k@td+x5rLnB2@eK3Icx=n+zVO8L6DvNsybl*voQ% zK>8Ig(kWX;hn6FDveG=AxAyJV!Gi4;&M(h0Z+CzW%ev5aM1-?Xm;L{!G9du%QCQ)b+7 zp1G`PB+fE99jMm_na`hVjAG)gzE3&}^8b7WUNGf9m*9nyKGKY1Umgv=?5HikCzj}G z>(m*2=^(lulK6cvEAc>E=JXB7F7$ZYXLWR0RwzTBbZ1E|MSzAjlfu%9b0AxQR9Hi5 zSdL6#lcYj+Eyv|&NjnRQ+?>*K;hEQ{er@!foNjeHOIv90x;b1R$@4T$vPI|0N_!Ny z_|HB?HcD&iYv00RRqt+(Slx8#Bf*heVl{%&VrNq6ZoC6q^ijF|?yRO?ein7qv@xY$jq- zQbi}G!~|+5&1vTc-7X!-Ennyk2c>q7#GH0k;ofyQS)6mYUCWeUVheM zK|t{-p9SC6KE_n+Rs9uW{-h+B$!+Jwy#7MB5vW%*j&@DxC`^O4qYx zwKI(O(G;}i!YRMxgW8SPTMn!l2=QDTdN9_sv~l^SmD1;z`(`&Nx5`{Gs}3Evq-{iO z8PABZVXV9`9H4gFGG`0=;eE8S1pun&BjOeq8fBevR5M}9m zU)Xx_UdeO4o~jwv-q-I1%xOC-VJ(zPbYdZ+*3TFe*GfWfHv7XP2^Xat%SuWH4H85g zs;_%gy+BT&M60Efh#NE0rL8kR=F^PW<6WPby!ums^<1@>^u+Pjfa>C#?;j4fSLxg3 zKS$68UsGhz^#B((HrlL(CnsB81kHQRy-na%^!@(1eRl7uW?W~#H3(yBvLwh#6>)#; zli;F=ny=ts+WdFAxH2FU5Ie0zOqKn+kizwqk>}fPDPbgTj+z}}=0_FZw;h3cgf|w? zEhFF3-r~GlR(Qa}Zw5t2Jb%$*bAb_J*82SOb*K1)d9`jQQ74=iDu*6pqC()SiR&iq zb=XKhaEfh}Plmgmo*eUrSiHGax(1CQKYOwES-$FJcEY`IPVS~vLeL|sEID%b^>!kL z+#Il_lWv?lXb@^nb9r3I9PZV_>wKT(Q}9+lu!~y9-3$|_W3_mR{{-zxCh3M@!A#+M z-cQn?^_*>Q~?JsX&SOPcqC8 zXIJ%?3b0uvw)l6#Ij->cj%Q@BgU;*e_+t3Opx(^tLI$5zx}4-oW7|R{Mc6lkxu{bx zkkD$v)Yr<%v%D4cv$5tFFSZYK$h?pp>u9aeQvNP-IRBu6nCo3V&9{YeQ=YFs;#)n~ z=NcCb>b$`$Nb|_RZ~6)a1o#6P(5~(eN0)j384ocIuf2JE-g>&0?>nEB;qIDcF6T#H z2g}9pK);UUS3$cO8ZmQ8swZVNWW;7C%bQJn%l;zJ?_&J;5^u-CvcJFdI2537Jv~wU z*ruBf9MmPPCQXDT@}`J=D3CVpl|6<1{r#aQ`$DwKleN#S6Zb#oRO;P5-nPmRh|hN4 z7%k_?j5hM}9LQ5Xp&fi?^jM`aPmLY+n&R4Yo@IN8>e2UbRj1aw$3NSdP3kZ3Z|%|x zJ!)g?2XAt{X$zx@+~_01LezL{eE(oP}6j^&F-maCgyY!sfkyL%oNIybp(OU z%@2l(2}!V$3v{u|n+!#BOs>f>2;Vgwfj6;d&ViO6#^yQa1r*KD(CQl?pEDuqpPD;S zPSd;x2{7M5cOhZbDiKHM>lF5$Oe^k@)_Y$A9%rw|pBozFWjHRmYzP@OjSO5JQHjKq ztN}Rd zSE{yer`+r(uyAe90B*niD)5cAph0%wrzsbA_vXFXI9`$pg1`pdT*$P`F0OBck+GS# zie6qz=})mymI*yM`iN_iIH42l%J*d->yR233b|j)Cuv*fezdoV7^7mtJ3J9(SpBxT zvSL|=`r_(*CQnqQYO`0ewUB$_CyhrZS-;MIM-(%ZOn-}VJk0)%t#9rY*f~@p=mFl? zU+R{+x;pa*Y@Rf|-AzSISMna+zIt6f$ho|{d?X9E|6^gJdCPDyq_5CSA_Zln2I^2b z29RW}n^m$51)RszSV*xV6)mX?i{3`6jJ9=AG8BDmAQa;QEI%Q<+W0U3{Bw)fZ>qgL z2iMp=ndi@QQ8!rN^{(!b-9uxAAm2XE#6V3M`HY=4%C3q(<%I1KPHbWyE@hXanM_TD z6j|?`PzNk`eU$|u9HC-Vb;bOTqMrJ&?d{NfMB4YK*D7a(hm%ORz}hvvz-i|~-a@n% zuEd9QewXu@e3-CS(Xhy!;#d@DoTCC=P%--=kV`L0NkOeVpPik(NY1^%_y?%g+g2Z3 zP#AstF*W?1h1RTntie!mbKFn8qxM`SjFp`o9@_{c+N<;dhrs< z7b2+w>^im0C>GQW$6K~9aV1Po#Yc)Wa#PIZujW_&QPf}P;#R#C9PuLJ0-N-W9Ir~J z{%mtuT}>^r^6nJi_`~4oAw zYvWf{B&$@`o%ri7xmmqBG}NP**gRT*SToPv%tQ&JKxB>&9;vvJBFC&3tNWcSMx;dY zgPR?6978}{2W`BvQvI`2 zwl5XB$sSO1Y)1IpFwr0e9kOQlP$|~Tlvm9(>_s>!hR^azS4+s@{hQ+Q9i^zc3B_eM zi&--MtF)VLS}Y1JPx}-k_Z;a-UB6DV%Z_rXT$qBm=k!3gtR`(Yi&?{OL+;opeN8B! zj%dhwlj^%NToN#Y)mupo@{)orWb^jhq|!Ib+}6m8C;)|78_PRgKB-)Bmq3`7^RfHs zOO$kdS6Qe$Rdh5<;F?#1O1KQK(NNhmyiVvFm&4CA1NWKNQ5Qf;{+0Rp?HcSiBx<)v zvF>D0M|eb|y|ZS)#7sZW!;thXl`pYF4dr5rBts2~G(P=If+gRNpZX+uuUPWDnIy*jEr>sSHo`zE1iE@<(K788{5(Axx_kd~?YOa}&6 zda?l2VpIn1oDnXfD@~=|h{*7v%vx{sqiEfkbbFIjk(JXBdwaU;j_IJmnXAibXU5nZ zzci|Bb67fwljdpF(ooQZ0@Sn2BYqr5`W1eaZZ8 zMLd**-vdLZ5$a-!LmI{x20@P*Mz|E86mpAO^i4GotSWAb5R2lHa=X>r=X`v8l0~)) zO6BX^Cm>Q&EDG#ZLQgWVejG4Qt@ ztUMpBLX}@Ka)+l?psJAN?P}~vMqy>^L6>7&wyWS!HGH;B+^#RfDSod#q5(xY9E|R%jiGFP7q?JKMmK)dZ z1p#v>thRBOEhXBRI9ESwnyJ~ptyiZp5U8Jo06Eik7rR2~VJ$$%Xc(q^U z^k^%UbMgaN*V%*$+qu(R`{OAW72{A=4_t;Vrj@ZPdXGDpj4flXr_D8+3kzHs)CO&9 zTZVmER3tNjRHpQv;Bw{M$CK}1XwwTlgTRWhpUeyu7KHhm9tHV2SXgu@<^-ZH@W{FY z=-KiB{3NCUz;~Z|h*{@zi>u9oqx6KG`n6~~JUJhxCz<-(-CxK&^Ac*3F4OhheYC5R zcTV~i9HoiS?S+s>hlepF^UCma-72bghdbX^?GZ0!E^ECFDbP-GGXAzTb}MLmWqa7n zs6@`uVd?6PjE7cB{F0PiM@0-##MRMq^+Z4WdF?BlF*av-5yWWgt0Ix2+DkViU$N$n zFkH$tk@rEb$HemjC4*-Fg8nL9E56Z-3>%ZR=Q{Kx!pu^n$N6-el{ljwB^`?Lt=L=$ z*qjC6%44HErHNv9yhUzOa;|@G#m(mrhKNy?$2j+2MHC&k=q0GyM;()i-*i*Z