pax_global_header00006660000000000000000000000064126465675120014530gustar00rootroot0000000000000052 comment=8783cb24304c81062c7966766a5534e8fe95d9c4 node-backoff-2.5.0/000077500000000000000000000000001264656751200140525ustar00rootroot00000000000000node-backoff-2.5.0/.gitignore000066400000000000000000000000161264656751200160370ustar00rootroot00000000000000node_modules/ node-backoff-2.5.0/.jshintrc000066400000000000000000000114371264656751200157050ustar00rootroot00000000000000// Based on jshint defaults: http://goo.gl/OpjUs { // If the scan should stop on first error. "passfail": false, // Maximum errors before stopping. "maxerr": 50, // Predefined globals // If the standard browser globals should be predefined. "browser": false, // If the Node.js environment globals should be predefined. "node": true, // If the Rhino environment globals should be predefined. "rhino": false, // If CouchDB globals should be predefined. "couch": false, // If the Windows Scripting Host environment globals should be predefined. "wsh": false, // If jQuery globals should be predefined. "jquery": false, // If Prototype and Scriptaculous globals should be predefined. "prototypejs": false, // If MooTools globals should be predefined. "mootools": false, // If Dojo Toolkit globals should be predefined. "dojo": false, // Custom predefined globals. "predef": [], // Development // If debugger statements should be allowed. "debug": false, // If logging globals should be predefined (console, alert, etc.). "devel": false, // ECMAScript 5 // If ES5 syntax should be allowed. "es5": false, // Require the "use strict"; pragma. "strict": false, // If global "use strict"; should be allowed (also enables strict). "globalstrict": false, // The Good Parts // If automatic semicolon insertion should be tolerated. "asi": false, // If line breaks should not be checked, e.g. `return [\n] x`. "laxbreak": false, // If bitwise operators (&, |, ^, etc.) should not be allowed. "bitwise": false, // If assignments inside if, for and while should be allowed. Usually // conditions and loops are for comparison, not assignments. "boss": true, // If curly braces around all blocks should be required. "curly": true, // If === should be required. "eqeqeq": false, // If == null comparisons should be tolerated. "eqnull": false, // If eval should be allowed. "evil": true, // If ExpressionStatement should be allowed as Programs. "expr": false, // If `for in` loops must filter with `hasOwnPrototype`. "forin": false, // If immediate invocations must be wrapped in parens, e.g. // `( function(){}() );`. "immed": false, // If use before define should not be tolerated. "latedef": false, // If functions should be allowed to be defined within loops. "loopfunc": false, // If arguments.caller and arguments.callee should be disallowed. "noarg": false, // If the . should not be allowed in regexp literals. "regexp": false, // If unescaped first/last dash (-) inside brackets should be tolerated. "regexdash": false, // If script-targeted URLs should be tolerated. "scripturl": false, // If variable shadowing should be tolerated. "shadow": false, // If `new function () { ... };` and `new Object;` should be tolerated. "supernew": false, // If variables should be declared before used. "undef": true, // If `this` inside a non-constructor function is valid. "validthis": false, // If smarttabs should be tolerated // (http://www.emacswiki.org/emacs/SmartTabs). "smarttabs": false, // If the `__proto__` property should be allowed. "proto": false, // If one case switch statements should be allowed. "onecase": false, // If non-standard (but widely adopted) globals should be predefined. "nonstandard": false, // Allow multiline strings. "multistr": false, // If line breaks should not be checked around commas. "laxcomma": false, // If semicolons may be ommitted for the trailing statements inside of a // one-line blocks. "lastsemic": false, // If the `__iterator__` property should be allowed. "iterator": false, // If only function scope should be used for scope tests. "funcscope": false, // If es.next specific syntax should be allowed. "esnext": false, // Style preferences // If constructor names must be capitalized. "newcap": true, // If empty blocks should be disallowed. "noempty": false, // If using `new` for side-effects should be disallowed. "nonew": false, // If names should be checked for leading or trailing underscores // (object._attribute would be disallowed). "nomen": false, // If only one var statement per function should be allowed. "onevar": false, // If increment and decrement (`++` and `--`) should not be allowed. "plusplus": false, // If all forms of subscript notation are tolerated. "sub": true, // If trailing whitespace rules apply. "trailing": true, // If strict whitespace rules apply. "white": false, // Specify indentation. "indent": 4 } node-backoff-2.5.0/.travis.yml000066400000000000000000000002531264656751200161630ustar00rootroot00000000000000language: node_js before_install: - npm install -g npm - npm install -g jshint node_js: - "node" - "iojs" notifications: email: - turcotte.mat@gmail.com node-backoff-2.5.0/CHANGES.md000066400000000000000000000046701264656751200154530ustar00rootroot00000000000000# Changelog ## 2.X Those changes are not released yet. - In the functional API, invoke the wrapped function callback on abort and emit an `abort` event. This makes it possible to detect when abort is called. - Add a method on the function API, `call.retryIf(predicate)`, which specifies a predicate used to determine whether a given error is retriable or not. The default behavior is unaffected, errors remain retriable by default. ## 2.4.1 - Add support for specifying the factor to use in the `ExponentialStrategy`. ## 2.4.0 - Replace `FunctionCall.getResults` by `FunctionCall.getLastResult` to avoid storing intermediary results forever as this may lead to memory exhaustion when used in conjunction with an infinite number of backoffs. - Add `FunctionCall.getNumRetries` which returns the number of times the wrapped function was retried. ## 2.3.0 - Add four new methods to `FunctionCall` to query the state of the call. - isPending - isRunning - isCompleted - isAborted ## 2.2.0 - To match `Backoff` default behavior, `FunctionCall` no longer sets a default failAfter of 5, i.e. the maximum number of backoffs is now unbounded by default. ## 2.1.0 - `Backoff.backoff` now accepts an optional error argument that is re-emitted as the last argument of the `backoff` and `fail` events. This provides some context to the listeners as to why a given backoff operation was attempted. - The `backoff` event emitted by the `FunctionCall` class now contains, as its last argument, the error that caused the backoff operation to be attempted. This provides some context to the listeners as to why a given backoff operation was attempted. ## 2.0.0 - `FunctionCall.call` renamed into `FunctionCall.start`. - `backoff.call` no longer invokes the wrapped function on `nextTick`. That way, the first attempt is not delayed until the end of the current event loop. ## 1.2.1 - Make `FunctionCall.backoffFactory` a private member. ## 1.2.0 - Add `backoff.call` and the associated `FunctionCall` class. ## 1.1.0 - Add a `Backoff.failAfter`. ## 1.0.0 - Rename `start` and `done` events `backoff` and `ready`. - Remove deprecated `backoff.fibonnaci`. ## 0.2.1 - Create `backoff.fibonacci`. - Deprecate `backoff.fibonnaci`. - Expose fibonacci and exponential strategies. ## 0.2.0 - Provide exponential and fibonacci backoffs. ## 0.1.0 - Change `initialTimeout` and `maxTimeout` to `initialDelay` and `maxDelay`. - Use fibonnaci backoff. node-backoff-2.5.0/LICENSE000066400000000000000000000020441264656751200150570ustar00rootroot00000000000000Copyright (C) 2012 Mathieu Turcotte Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. node-backoff-2.5.0/README.md000066400000000000000000000260271264656751200153400ustar00rootroot00000000000000# Backoff for Node.js [![Build Status](https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master)](http://travis-ci.org/MathieuTurcotte/node-backoff) [![NPM version](https://badge.fury.io/js/backoff.png)](http://badge.fury.io/js/backoff) Fibonacci and exponential backoffs for Node.js. ## Installation ``` npm install backoff ``` ## Unit tests ``` npm test ``` ## Usage ### Object Oriented The usual way to instantiate a new `Backoff` object is to use one predefined factory method: `backoff.fibonacci([options])`, `backoff.exponential([options])`. `Backoff` inherits from `EventEmitter`. When a backoff starts, a `backoff` event is emitted and, when a backoff ends, a `ready` event is emitted. Handlers for these two events are called with the current backoff number and delay. ``` js var backoff = require('backoff'); var fibonacciBackoff = backoff.fibonacci({ randomisationFactor: 0, initialDelay: 10, maxDelay: 300 }); fibonacciBackoff.failAfter(10); fibonacciBackoff.on('backoff', function(number, delay) { // Do something when backoff starts, e.g. show to the // user the delay before next reconnection attempt. console.log(number + ' ' + delay + 'ms'); }); fibonacciBackoff.on('ready', function(number, delay) { // Do something when backoff ends, e.g. retry a failed // operation (DNS lookup, API call, etc.). If it fails // again then backoff, otherwise reset the backoff // instance. fibonacciBackoff.backoff(); }); fibonacciBackoff.on('fail', function() { // Do something when the maximum number of backoffs is // reached, e.g. ask the user to check its connection. console.log('fail'); }); fibonacciBackoff.backoff(); ``` The previous example would print the following. ``` 0 10ms 1 10ms 2 20ms 3 30ms 4 50ms 5 80ms 6 130ms 7 210ms 8 300ms 9 300ms fail ``` Note that `Backoff` objects are meant to be instantiated once and reused several times by calling `reset` after a successful "retry". ### Functional It's also possible to avoid some boilerplate code when invoking an asynchronous function in a backoff loop by using `backoff.call(fn, [args, ...], callback)`. Typical usage looks like the following. ``` js var call = backoff.call(get, 'https://duplika.ca/', function(err, res) { console.log('Num retries: ' + call.getNumRetries()); if (err) { console.log('Error: ' + err.message); } else { console.log('Status: ' + res.statusCode); } }); call.retryIf(function(err) { return err.status == 503; }); call.setStrategy(new backoff.ExponentialStrategy()); call.failAfter(10); call.start(); ``` ## API ### backoff.fibonacci([options]) Constructs a Fibonacci backoff (10, 10, 20, 30, 50, etc.). The options are the following. - randomisationFactor: defaults to 0, must be between 0 and 1 - initialDelay: defaults to 100 ms - maxDelay: defaults to 10000 ms With these values, the backoff delay will increase from 100 ms to 10000 ms. The randomisation factor controls the range of randomness and must be between 0 and 1. By default, no randomisation is applied on the backoff delay. ### backoff.exponential([options]) Constructs an exponential backoff (10, 20, 40, 80, etc.). The options are the following. - randomisationFactor: defaults to 0, must be between 0 and 1 - initialDelay: defaults to 100 ms - maxDelay: defaults to 10000 ms - factor: defaults to 2, must be greater than 1 With these values, the backoff delay will increase from 100 ms to 10000 ms. The randomisation factor controls the range of randomness and must be between 0 and 1. By default, no randomisation is applied on the backoff delay. ### backoff.call(fn, [args, ...], callback) - fn: function to call in a backoff handler, i.e. the wrapped function - args: function's arguments - callback: function's callback accepting an error as its first argument Constructs a `FunctionCall` instance for the given function. The wrapped function will get retried until it succeds or reaches the maximum number of backoffs. In both cases, the callback function will be invoked with the last result returned by the wrapped function. It is the caller's responsability to initiate the call by invoking the `start` method on the returned `FunctionCall` instance. ### Class Backoff #### new Backoff(strategy) - strategy: the backoff strategy to use Constructs a new backoff object from a specific backoff strategy. The backoff strategy must implement the `BackoffStrategy`interface defined bellow. #### backoff.failAfter(numberOfBackoffs) - numberOfBackoffs: maximum number of backoffs before the fail event gets emitted, must be greater than 0 Sets a limit on the maximum number of backoffs that can be performed before a fail event gets emitted and the backoff instance is reset. By default, there is no limit on the number of backoffs that can be performed. #### backoff.backoff([err]) Starts a backoff operation. If provided, the error parameter will be emitted as the last argument of the `backoff` and `fail` events to let the listeners know why the backoff operation was attempted. An error will be thrown if a backoff operation is already in progress. In practice, this method should be called after a failed attempt to perform a sensitive operation (connecting to a database, downloading a resource over the network, etc.). #### backoff.reset() Resets the backoff delay to the initial backoff delay and stop any backoff operation in progress. After reset, a backoff instance can and should be reused. In practice, this method should be called after having successfully completed the sensitive operation guarded by the backoff instance or if the client code request to stop any reconnection attempt. #### Event: 'backoff' - number: number of backoffs since last reset, starting at 0 - delay: backoff delay in milliseconds - err: optional error parameter passed to `backoff.backoff([err])` Emitted when a backoff operation is started. Signals to the client how long the next backoff delay will be. #### Event: 'ready' - number: number of backoffs since last reset, starting at 0 - delay: backoff delay in milliseconds Emitted when a backoff operation is done. Signals that the failing operation should be retried. #### Event: 'fail' - err: optional error parameter passed to `backoff.backoff([err])` Emitted when the maximum number of backoffs is reached. This event will only be emitted if the client has set a limit on the number of backoffs by calling `backoff.failAfter(numberOfBackoffs)`. The backoff instance is automatically reset after this event is emitted. ### Interface BackoffStrategy A backoff strategy must provide the following methods. #### strategy.next() Computes and returns the next backoff delay. #### strategy.reset() Resets the backoff delay to its initial value. ### Class ExponentialStrategy Exponential (10, 20, 40, 80, etc.) backoff strategy implementation. #### new ExponentialStrategy([options]) The options are the following. - randomisationFactor: defaults to 0, must be between 0 and 1 - initialDelay: defaults to 100 ms - maxDelay: defaults to 10000 ms - factor: defaults to 2, must be greater than 1 ### Class FibonacciStrategy Fibonnaci (10, 10, 20, 30, 50, etc.) backoff strategy implementation. #### new FibonacciStrategy([options]) The options are the following. - randomisationFactor: defaults to 0, must be between 0 and 1 - initialDelay: defaults to 100 ms - maxDelay: defaults to 10000 ms ### Class FunctionCall This class manages the calling of an asynchronous function within a backoff loop. This class should rarely be instantiated directly since the factory method `backoff.call(fn, [args, ...], callback)` offers a more convenient and safer way to create `FunctionCall` instances. #### new FunctionCall(fn, args, callback) - fn: asynchronous function to call - args: an array containing fn's args - callback: fn's callback Constructs a function handler for the given asynchronous function. #### call.isPending() Returns whether the call is pending, i.e. hasn't been started. #### call.isRunning() Returns whether the call is in progress. #### call.isCompleted() Returns whether the call is completed. #### call.isAborted() Returns whether the call is aborted. #### call.setStrategy(strategy) - strategy: strategy instance to use, defaults to `FibonacciStrategy`. Sets the backoff strategy to use. This method should be called before `call.start()` otherwise an exception will be thrown. #### call.failAfter(maxNumberOfBackoffs) - maxNumberOfBackoffs: maximum number of backoffs before the call is aborted Sets the maximum number of backoffs before the call is aborted. By default, there is no limit on the number of backoffs that can be performed. This method should be called before `call.start()` otherwise an exception will be thrown.. #### call.retryIf(predicate) - predicate: a function which takes in as its argument the error returned by the wrapped function and determines whether it is retriable. Sets the predicate which will be invoked to determine whether a given error should be retried or not, e.g. a network error would be retriable while a type error would stop the function call. By default, all errors are considered to be retriable. This method should be called before `call.start()` otherwise an exception will be thrown. #### call.getLastResult() Returns an array containing the last arguments passed to the completion callback of the wrapped function. For example, to get the error code returned by the last call, one would do the following. ``` js var results = call.getLastResult(); // The error code is the first parameter of the callback. var error = results[0]; ``` Note that if the call was aborted, it will contain the abort error and not the last error returned by the wrapped function. #### call.getNumRetries() Returns the number of times the wrapped function call was retried. For a wrapped function that succeeded immediately, this would return 0. This method can be called at any point in time during the call life cycle, i.e. before, during and after the wrapped function invocation. #### call.start() Initiates the call the wrapped function. This method should only be called once otherwise an exception will be thrown. #### call.abort() Aborts the call and causes the completion callback to be invoked with an abort error if the call was pending or running; does nothing otherwise. This method can safely be called mutliple times. #### Event: 'call' - args: wrapped function's arguments Emitted each time the wrapped function is called. #### Event: 'callback' - results: wrapped function's return values Emitted each time the wrapped function invokes its callback. #### Event: 'backoff' - number: backoff number, starts at 0 - delay: backoff delay in milliseconds - err: the error that triggered the backoff operation Emitted each time a backoff operation is started. #### Event: 'abort' Emitted when a call is aborted. ## Annotated source code The annotated source code can be found at [mathieuturcotte.github.io/node-backoff/docs](http://mathieuturcotte.github.io/node-backoff/docs/). ## License This code is free to use under the terms of the [MIT license](http://mturcotte.mit-license.org/). node-backoff-2.5.0/docs/000077500000000000000000000000001264656751200150025ustar00rootroot00000000000000node-backoff-2.5.0/docs/backoff.html000066400000000000000000000206131264656751200172650ustar00rootroot00000000000000 backoff.js
node-backoff-2.5.0/docs/docco.css000066400000000000000000000230761264656751200166130ustar00rootroot00000000000000/*--------------------- Typography ----------------------------*/ @font-face { font-family: 'aller-light'; src: url('public/fonts/aller-light.eot'); src: url('public/fonts/aller-light.eot?#iefix') format('embedded-opentype'), url('public/fonts/aller-light.woff') format('woff'), url('public/fonts/aller-light.ttf') format('truetype'); font-weight: normal; font-style: normal; } @font-face { font-family: 'aller-bold'; src: url('public/fonts/aller-bold.eot'); src: url('public/fonts/aller-bold.eot?#iefix') format('embedded-opentype'), url('public/fonts/aller-bold.woff') format('woff'), url('public/fonts/aller-bold.ttf') format('truetype'); font-weight: normal; font-style: normal; } @font-face { font-family: 'novecento-bold'; src: url('public/fonts/novecento-bold.eot'); src: url('public/fonts/novecento-bold.eot?#iefix') format('embedded-opentype'), url('public/fonts/novecento-bold.woff') format('woff'), url('public/fonts/novecento-bold.ttf') format('truetype'); font-weight: normal; font-style: normal; } /*--------------------- Layout ----------------------------*/ html { height: 100%; } body { font-family: "aller-light"; font-size: 14px; line-height: 18px; color: #30404f; margin: 0; padding: 0; height:100%; } #container { min-height: 100%; } a { color: #000; } b, strong { font-weight: normal; font-family: "aller-bold"; } p { margin: 15px 0 0px; } .annotation ul, .annotation ol { margin: 25px 0; } .annotation ul li, .annotation ol li { font-size: 14px; line-height: 18px; margin: 10px 0; } h1, h2, h3, h4, h5, h6 { color: #112233; line-height: 1em; font-weight: normal; font-family: "novecento-bold"; text-transform: uppercase; margin: 30px 0 15px 0; } h1 { margin-top: 40px; } hr { border: 0; background: 1px #ddd; height: 1px; margin: 20px 0; } pre, tt, code { font-size: 12px; line-height: 16px; font-family: Menlo, Monaco, Consolas, "Lucida Console", monospace; margin: 0; padding: 0; } .annotation pre { display: block; margin: 0; padding: 7px 10px; background: #fcfcfc; -moz-box-shadow: inset 0 0 10px rgba(0,0,0,0.1); -webkit-box-shadow: inset 0 0 10px rgba(0,0,0,0.1); box-shadow: inset 0 0 10px rgba(0,0,0,0.1); overflow-x: auto; } .annotation pre code { border: 0; padding: 0; background: transparent; } blockquote { border-left: 5px solid #ccc; margin: 0; padding: 1px 0 1px 1em; } .sections blockquote p { font-family: Menlo, Consolas, Monaco, monospace; font-size: 12px; line-height: 16px; color: #999; margin: 10px 0 0; white-space: pre-wrap; } ul.sections { list-style: none; padding:0 0 5px 0;; margin:0; } /* Force border-box so that % widths fit the parent container without overlap because of margin/padding. More Info : http://www.quirksmode.org/css/box.html */ ul.sections > li > div { -moz-box-sizing: border-box; /* firefox */ -ms-box-sizing: border-box; /* ie */ -webkit-box-sizing: border-box; /* webkit */ -khtml-box-sizing: border-box; /* konqueror */ box-sizing: border-box; /* css3 */ } /*---------------------- Jump Page -----------------------------*/ #jump_to, #jump_page { margin: 0; background: white; -webkit-box-shadow: 0 0 25px #777; -moz-box-shadow: 0 0 25px #777; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-bottomleft: 5px; font: 16px Arial; cursor: pointer; text-align: right; list-style: none; } #jump_to a { text-decoration: none; } #jump_to a.large { display: none; } #jump_to a.small { font-size: 22px; font-weight: bold; color: #676767; } #jump_to, #jump_wrapper { position: fixed; right: 0; top: 0; padding: 10px 15px; margin:0; } #jump_wrapper { display: none; padding:0; } #jump_to:hover #jump_wrapper { display: block; } #jump_page { padding: 5px 0 3px; margin: 0 0 25px 25px; } #jump_page .source { display: block; padding: 15px; text-decoration: none; border-top: 1px solid #eee; } #jump_page .source:hover { background: #f5f5ff; } #jump_page .source:first-child { } /*---------------------- Low resolutions (> 320px) ---------------------*/ @media only screen and (min-width: 320px) { .pilwrap { display: none; } ul.sections > li > div { display: block; padding:5px 10px 0 10px; } ul.sections > li > div.annotation ul, ul.sections > li > div.annotation ol { padding-left: 30px; } ul.sections > li > div.content { overflow-x:auto; -webkit-box-shadow: inset 0 0 5px #e5e5ee; box-shadow: inset 0 0 5px #e5e5ee; border: 1px solid #dedede; margin:5px 10px 5px 10px; padding-bottom: 5px; } ul.sections > li > div.annotation pre { margin: 7px 0 7px; padding-left: 15px; } ul.sections > li > div.annotation p tt, .annotation code { background: #f8f8ff; border: 1px solid #dedede; font-size: 12px; padding: 0 0.2em; } } /*---------------------- (> 481px) ---------------------*/ @media only screen and (min-width: 481px) { #container { position: relative; } body { background-color: #F5F5FF; font-size: 15px; line-height: 21px; } pre, tt, code { line-height: 18px; } p, ul, ol { margin: 0 0 15px; } #jump_to { padding: 5px 10px; } #jump_wrapper { padding: 0; } #jump_to, #jump_page { font: 10px Arial; text-transform: uppercase; } #jump_page .source { padding: 5px 10px; } #jump_to a.large { display: inline-block; } #jump_to a.small { display: none; } #background { position: absolute; top: 0; bottom: 0; width: 350px; background: #fff; border-right: 1px solid #e5e5ee; z-index: -1; } ul.sections > li > div.annotation ul, ul.sections > li > div.annotation ol { padding-left: 40px; } ul.sections > li { white-space: nowrap; } ul.sections > li > div { display: inline-block; } ul.sections > li > div.annotation { max-width: 350px; min-width: 350px; min-height: 5px; padding: 13px; overflow-x: hidden; white-space: normal; vertical-align: top; text-align: left; } ul.sections > li > div.annotation pre { margin: 15px 0 15px; padding-left: 15px; } ul.sections > li > div.content { padding: 13px; vertical-align: top; border: none; -webkit-box-shadow: none; box-shadow: none; } .pilwrap { position: relative; display: inline; } .pilcrow { font: 12px Arial; text-decoration: none; color: #454545; position: absolute; top: 3px; left: -20px; padding: 1px 2px; opacity: 0; -webkit-transition: opacity 0.2s linear; } .for-h1 .pilcrow { top: 47px; } .for-h2 .pilcrow, .for-h3 .pilcrow, .for-h4 .pilcrow { top: 35px; } ul.sections > li > div.annotation:hover .pilcrow { opacity: 1; } } /*---------------------- (> 1025px) ---------------------*/ @media only screen and (min-width: 1025px) { body { font-size: 16px; line-height: 24px; } #background { width: 525px; } ul.sections > li > div.annotation { max-width: 525px; min-width: 525px; padding: 10px 25px 1px 50px; } ul.sections > li > div.content { padding: 9px 15px 16px 25px; } } /*---------------------- Syntax Highlighting -----------------------------*/ td.linenos { background-color: #f0f0f0; padding-right: 10px; } span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; } /* github.com style (c) Vasily Polovnyov */ pre code { display: block; padding: 0.5em; color: #000; background: #f8f8ff } pre .hljs-comment, pre .hljs-template_comment, pre .hljs-diff .hljs-header, pre .hljs-javadoc { color: #408080; font-style: italic } pre .hljs-keyword, pre .hljs-assignment, pre .hljs-literal, pre .hljs-css .hljs-rule .hljs-keyword, pre .hljs-winutils, pre .hljs-javascript .hljs-title, pre .hljs-lisp .hljs-title, pre .hljs-subst { color: #954121; /*font-weight: bold*/ } pre .hljs-number, pre .hljs-hexcolor { color: #40a070 } pre .hljs-string, pre .hljs-tag .hljs-value, pre .hljs-phpdoc, pre .hljs-tex .hljs-formula { color: #219161; } pre .hljs-title, pre .hljs-id { color: #19469D; } pre .hljs-params { color: #00F; } pre .hljs-javascript .hljs-title, pre .hljs-lisp .hljs-title, pre .hljs-subst { font-weight: normal } pre .hljs-class .hljs-title, pre .hljs-haskell .hljs-label, pre .hljs-tex .hljs-command { color: #458; font-weight: bold } pre .hljs-tag, pre .hljs-tag .hljs-title, pre .hljs-rules .hljs-property, pre .hljs-django .hljs-tag .hljs-keyword { color: #000080; font-weight: normal } pre .hljs-attribute, pre .hljs-variable, pre .hljs-instancevar, pre .hljs-lisp .hljs-body { color: #008080 } pre .hljs-regexp { color: #B68 } pre .hljs-class { color: #458; font-weight: bold } pre .hljs-symbol, pre .hljs-ruby .hljs-symbol .hljs-string, pre .hljs-ruby .hljs-symbol .hljs-keyword, pre .hljs-ruby .hljs-symbol .hljs-keymethods, pre .hljs-lisp .hljs-keyword, pre .hljs-tex .hljs-special, pre .hljs-input_number { color: #990073 } pre .hljs-builtin, pre .hljs-constructor, pre .hljs-built_in, pre .hljs-lisp .hljs-title { color: #0086b3 } pre .hljs-preprocessor, pre .hljs-pi, pre .hljs-doctype, pre .hljs-shebang, pre .hljs-cdata { color: #999; font-weight: bold } pre .hljs-deletion { background: #fdd } pre .hljs-addition { background: #dfd } pre .hljs-diff .hljs-change { background: #0086b3 } pre .hljs-chunk { color: #aaa } pre .hljs-tex .hljs-formula { opacity: 0.5; } node-backoff-2.5.0/docs/exponential.html000066400000000000000000000132461264656751200202240ustar00rootroot00000000000000 exponential.js
node-backoff-2.5.0/docs/fibonacci.html000066400000000000000000000105751264656751200176150ustar00rootroot00000000000000 fibonacci.js
node-backoff-2.5.0/docs/function_call.html000066400000000000000000000511011264656751200205060ustar00rootroot00000000000000 function_call.js
node-backoff-2.5.0/docs/img/000077500000000000000000000000001264656751200155565ustar00rootroot00000000000000node-backoff-2.5.0/docs/img/backoff_events.png000066400000000000000000000203111264656751200212400ustar00rootroot00000000000000PNG  IHDR˰( IDATx]h\uT%&AnQo,_PQCC]\fn;RPSPJJ NJբ-=A *ﳖf֑3CF339^kvB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!RdBy2˴aJ<lgCQFM3mӴixJRH=4mʹl]v.B q{HiL;A^vh;tH R[4~9]qL1) ʰy9@$V5m1ҽ.e<]3eڎ߭`jKr&ͤg;clCf+B?o99q $8Lc(vroDYk[^ǎ8!ǜUq ~A3A4{rZeeV~2T^Fgb.tL NwimTW(Q1vn'x(8"%X١qkk9zi;cHs`Rp`^m-r;"(ΒrL"Wc^0~p^`i2*gv;K1阨K\:lbô#wr;u;yc;S1Q;q^mB57#xqsʘqȫpjHVXj%S'+yDې纼,u&jshWgN~{"<54Q^3O8ox(lyv.J'1^9#p?AsM9MCM%?pC׽3qzϔ]G:p ?F tתKܦ֍3#971ݕ޻eSܻXX'x&L۝Ƚ/-9W'!]( u_ZRΓ;'cr]zp9Q"k=V(6vw0!μYN`K:3B:Sҳg5ÇDrʍ8',VGMi6EK#Th k'iKH'٥se9y:r0&r9cދ֦0ƞW9>E殘\ n|,8+ef!ȠM B" :֎#sLDuG2^H[Q@^17v4:V/@es#-U>QAwɸk7Da/;"qet̊-8y>? &:ҩ'*~2$,u@ jX:u<]<&LpV,t)8X$ &Ǽe&k9UǼÈ>#a 0^=Nn;m簔96ѱJ8BN$ 1K;C+';0)g-yn# ZkyOܦG_PrE?kǣy+vm0;y& 1ulgS:|GmDF+FǬ-ѹM20HbrDHH[ Aз'SZ. 8!88nyJ^Wk-JnrE59{4>ĸޓn !7÷> bNx,&K"ܣ1a<(V(=.x"!G}w^v&&Ԇe؛ފz&9x޳@ǷD۞^vVc!Hc›+舶!҈[|7,x՘qѶnp7ռ.ꪻM-L#/ϧPxY.n4IߥWߙ8=kn;tƉ6^7TΤW}v`+rߪ93 ($i F̟rq"1M^XzZ&鲈LrA{p+n_+?FlF5} &ŝUPc'hNG ܉m16m w;"; :A}۹O]plGjh;bs^_$"aiEeM9"r9񌵇AqDDƂ^YBA㐟%XiQ*ngc^Mh|tDYO1Em<>jQI}Ω*EC/6 AiDԺ;ÝAd1yWulQh15Tj96QWnUG!ؿKq93BSt6I` &MA`B 9v 58DiM/YEF9yXHFg;ŎcMvIVJ(UNw֠b0i _ŭ0tDRïұEpDoUڌ/!B_hR# 1yBb=0fc|^ń&GoٴDe1Cg=#QK8jQi;:y::ur}_-Z%[Aı{VMWAT_A_5s9<= J`"c2yiCKĵN;'_s9b99 H 1oYї@4W"DvH"{}a.5*=Ocr^8.&YG-.?K'ILʳ()Nl{GoVt37lfkE<`23n D#0F}/t8(<^{GclW$:+̀)te3.#G(:?%$HXΔf).h+4BW[@C395؊-ipHwڛ0^~'nK!񏜌"YŮQҙav2iF6nlv=^ѤHP29: mDJ3vLSA7oc;~^I2[$$Y'X=+ř'$%(ݤcZlתawTZ/Pہt.ۙU&I QA_if#*@G%*S@B;>%RNWrWvb^s46^ ^'(sY^+M sXq׊c'{o~ljwB묭V$7_GpQ"Am^ :VA[ʆ){q!wwGK`wEЗ>qǷDi;$I.* {Fc=8n7I+YXZ8:#RgO]nIXDq1^GU #.t1QI Q:!!ۘF~!C-) ")γ@!B!B! 3PJ"A~vCi^5L岴C\~ Frry- X-B>Zima[ARjSF~Q-obimϥy}r߾ps9ŜbN1g9ŜbF1S)s9ŜbB\Qchoob^_ÝExw_)6-X{[}I1OO̱I \8\$/?+\(|1؛ 13E4{6b]fٴ;S{`Įx"t_Ͻi[O Ӎ?o5ǿ/xͷYYW?7_;Hobs?]_!8"i\=ﮘ:~o{ qMVPr|O~s)ب`?>}1Gwm ºGj_P̳smд3sqH&Pgul2n,uHCG )($ptW!*xޘ!:7R+ZqSyUySq N?C E >h;<s8nԾO ᙏe߃vkk)Q̛/ ~Bl5Z?R?R֎9l=cރN `Dzʩ/HGEW)*ҽDeiܴ76b#wNJ pĸ ~bNN[@9s_ѐr2~ILs.lֵ3s50;F5p~6*߰P߄UӞm\5ytCt;~_f9w\[E`rۆk] 1ټ]1mb?2b6UPrO!x)T|N\[z kKn*<-K1w#G\ hD"ppp8z] yl1mi;f\{t09>J!>1"}ϣVd^O:8 4ャ E/YShhD=bUus>$$WSncqx2Q~C :j*pn\w1}\7؈?B?/b192Jx { bFnW&𞎋#s:>b13mδQӺ8f.bNL8=a<7 3\X*3G];:+TSY3w-;Bq!k88=|/Gq}1.N1C5}~A}M§ߑau<}-|[9F86\7|WԈNN&Ԏ?pa?<_?bN1vtw%l5DgQw`^ػvX]{dLuLĝp1c,v~ 7^KL1? ہv`?xNu߯i Ϲ{'ߵrrOWstm;֛]{9IS բ+Kf|w";[:@EJV+̞ek aY<ēC35-rELtLd}O>;lLO ͙5/8ş %PHXVg9Y3{/fMd/)5O Lk@b[.+ yr̉O鸶όN Rʣ s4GT<5gK3+/iSe<晉`Q>c@M7Sޒ),Wsf܉?.t๰(-YjxO>O84:\̗^PPD\iGQnGģrh*!{ܗ5L>3{5ޛ;` Ew,sNJԮ{ruY>yZ:n9sK*czSiT,+7-԰mu˃bWyc4މbokXBS"S%i)\8vQx^v{4 8W&H 58*;Ų%HHY,m쬊'3>'UY:d4,ݔ-ȫ^֦,Fꏶ΋b򡒴k{<:rr<+4/gɓ(,cDf2J7MQX Cź=<+z\ ԏ|f'ߵR33d4-Xh'"<i'h:mR)Yڊł^uxom <"T}_N ^IYYKaS˹\ok'S]h3A9s5T:fl'L_\D\I3-clh"O (,gx]9$XxRn ڨ8 B_v%moV7 nmM;wLE>6tV,SK^[@h^oTC |6@p.Wri@谜yfېX9Hp*怜HpjtS|fDi'>,be(HnLEӧѤ}4Y2HPp[h "}flX(`Q:k³#Wm+eꄲs'kT| Bd[UaJnO¬SŮE Cii?:Zw<#s~{2[f¦KMW9%,RƬ#?{yF0 q;@m=DJWZ7u\<)8oT ` EE!dž݃[,+FuRpaGR@VƱ,:BU):vwB(>t]FYʵmt [*A;O Y){&O RYڱeO.!z?T j*(c3֧RQ.OBu|l(Bu.]&@E=y|ihwA[鯌x',V O&XTRϜ}RCgh_:膍 JXu|tQ\nwo[)+oaʒ0 έ< Hu&MSD~-_,+VS\wfi пRDf-4T|i94g߻aHھ\Oޒ uPzA?B,.&xY]fs=K2\ri)m9Q9 8khJiú2־Ơԝ.Y;T] M\j䗰u95Q&>W9hZ(GZݷ̯vۂ7.Q]Mwe_²%ゥ̒\ Bn#@(;ϢWs|0ˉoԜrT"DiJ^ lq(4mYm&Aьl&mK3ҵ2U?IPl·}^Ms钿Qp98foh'n#8+$E\(9똉*dZJm*0Hi+!N qb\$dmB茍 llHfSfY{#Wݡevͧ,=(݈ މ,> E~.NY^+` ]htYL8m.T5ٔfʲ ¹-IzEۻK,*ݶȵq_.Y2lAH;#,B2Z%ܛ+ιN5Ӓx7k);~rHY \0 *^2LdaO5 $dZp ӥq #GkhC!.!d\mqpigVn 84J)&ky"Xl;W[a ܾ`pQ{qaŞ|v>^3*h~i*FO"Kl*V TjՅ[K0Q &_$,c\%H@"֋ @eqimpXmKm` 8}Z}OV#ZKi71>4X%S?Ѩ/gsͶ%Lf0M !ݜn,lZUJsqu8bbS~qQiɶv i\.[ۚ{j  NM-X7ظq<Рޢ*ݚVyO>\gz/fz]+uD%!JK2c"󸭤~}ðU\6,͑IdivbHjiĽ'T$-8mѰc۱mN[4qhjм[t Ejk`B|>ɛcvҎX.KKȾ{fy}<Zj!XJp-X\ԙ*d.t@נ-`lɴXѡ70=s3A 6/U^з9B| m5TjoZ~#,gcf'2dbR+{mVw[n懹bQ N@#Ny*Ѥv_i5脮 ??a|:'A3=Ǻ+`Nz WsEaZ7-#C.00 Fذ}K“0&]KӪBEY.٠nm/Ba9/sZ]XHp ZVJYw3R5[츄OQ5\_ibp24)kw쵂~jNdX PAtgz5 QgƉ0aQ1D*kCjr|"gN TRD}"mY@ Tf}?Lovܕn񴐹ذ0tV6{캦7ofm|Q2%\cE!,kN gɚ A*mrWιzpLllc $ 7Y8/Zg-$oȏ]k70j xf<7-pr P-`ammƇZ;{Y65-tV`PDv6:'@`MԨ'lH.;t$ }9j׌+gsj SUS³ozZUN&jllXu %עB~)yGU Tߓ{ҊKXg&V?BG+ζjS*|چYZлWձj^0t3@U4<~Ke̮wWn:qۑWQyƅmfpʮˏAv+xξQyyBNQWUu4uMJ.JUeid՘r X鏑[E'Om#s|ߊYVI~! Mkw|omh`̶6H؞E 'Bk oP1!(Ғ[Ɩ сŲ74!9[6Gh}OQEQs Y%o%SgxJY8{/fzr=hjbS"V'HLpvdO_*Y`[n䣠4٪7>,f>-lnzЎdx`%%Զ%E7{>}owc}/$.4FQR|^utfZ{;uq9=G6j҄];fy[Im%tR_,Z瞓e|DlNFh mk6k@uZA@p&zY6 7cDtV/Ȳ@3km[55ntM.gnm)-:U MƢk؜refD Seo匄hTmk,єк۪֠5߳klu%gѼ9U7ʰh3XDHHd i%Fa[ctqglo&/\; NJׂ̩SФ\q{SI]seg-*< y5™`sWuZ ao!L6xAKm"? -Rݱӯx}DKȗgt2˜ Omsǂ9$4Wȧ Ta0I?e nƒYݎ Ν cł?9` h #QduHu3(Y+MpGNֳV84jZ-5(KT TD"-v՘xG.uP_0^D=c-:O χewq ƆYpYaZ8VHlhMB7_]IgHdz;]$8K>*ښ VN}1#Nɲn0DBV&Us1ysM&8bNXѳT鞨8O6pl8Ppj\@hBc^郢S3e@Jlmb 9.8%Tevץ(Ц>-,LԤu RV-[ λ^ݿ8'r<񽡇~Ζ">E,& U?\[ɸT?h? OĢI,HmsUL{ \^l^.c.TF^p*2FhB5[r I./dVUM,~rIeO"2L(s/8+{ڮ.˼P;r%h]/gے~ҰY;-^|ƃX4boBӘ_xvJwNNxf(TR)+W;L"C.4 U&s ;讉5;afEVSØTF}I=XZ3ԠBx=P ,%P֘1%?q{$0'7Byr愢}Mm[&'X-H$N:m;v[,4(IxZ4P֘_b@ilQgV;Qr- [qeJ^v.6%hA:m^b!MG6Ebs"؛6pfbDRtxר|6FhPxML\ 0i2|ݾ^+YaQsZ$0k Dkru4`pV -lpBKxryjX^vіݽ`һ i.47ashR7L\.7̅ӑFsr\O3{&heZ6göu@,es&?c6wm H4l#Ș.0Y67.]0w兜&ag3--pذv;5:0`MםAk;T3ʕFeљ}胃dQT!95W?@MZtǮ]eSVN~WռF cĭJ(+HIȕڕC j[jGk,rSrBnBC{]+:fOɢY{:Aȟ$M[.h@l&yPu:\3I554|* Odƅz}}[m.jgtmMjpQ ;K}f";(A SB"k^fĢT&3}Fʲy;֪`ܶj7A ay NxΩo&lbSr5kcEcl vsd h6d(_}OBsQ_g"{N({Uqddk%Mqҗ\">&$)x>r4)y.Z"484yۥ$tXS]S7DC X9o}GO,IIQM"6/VPVeBWZGSw(.֦JX1Y[df`|ZEߐEMhraq)s+|˙|fJ~8J($twfXѤu5gC<xN}MA{a#q. =HGB[囶r4yœ݄9OjY6yޕ{ } G͎wH~Hl\)]mG''+,/@r}OR} E4T8\& )d'[*fJIOJJPʿsyrу)\hr*MY7݊0R~M'+|҄7`J}\EgSOU䑻ZqK?t!uoz|K REg{IB6uà(wc]h:L{kxۿkgo{Qf(o~cyO914DqޣWwT)dAc/d +s;uo*6s]/ -U&6XTaz/kg??DIRKUŦ4Ow_!J!6M&bI 6M&bIAl"6)M&bDl"6M IAl"6M&bBAl"6!6qq0>^'!6 |t0Xg( jTo}ۙo_{݌bSA-9L{W*j:jRumv|6qYhW _eQpEb 9*|{lb|OW~v_תHHl˜a=، !MIXNDҳN^$N;W͵??zf6ru3MAEڳ.@{7?Sxן&_=ô&6ծxFl>Q{־w^}?m;oFrsf/>r~1Z= `N}T,CSG>_+|3iϽ?OLHi# ,P}Ytz7>q+mm,U&i-~/E=/PA?1o; Q=}^_*p/Gu;bS=^G*/GTGY|t/lq,9-% jmB?m"bScw ^7oݽLPlJ?kBu^ؗe °/cé~cd BgĢߧ~Ql>]E{ 7 ?wg ͏w_f^VُT~,7\^\lGOBle~đK%yȥ—}WN;'-Ѡ]7>TMMާ-?4;^>ֺ'yPmPT:Pl*ϏߜzPmϼowV[w>s?%5ɦwQzR}jڣwG7GQl^4NTǚ uOVoE6o}-"c?\xOMJd3XvyYr4Wj,8LHԄJ?磶1C4ѩ ʥF޸;& 6+6%^}=I ?-զ}k] Ŧ>]T/^Lcc~o-6eQ.=#koߐ{{%dbBg _^lk? p++ ?%Ҕ0K ΃fWw]I y.0}ߵ]~#\y{WE# y˩lbh-&B{KV*3O#6%N$R{`%Hh-54bewłHIPJjpTUI5(kib M/*T4i9gd֡Ŧd臣^V̹EP,h$0Ql.ebS"ҿE0jamh[[#5Y!zŦ&J!i(7&lϳ_cc2,+6g^DNԎ%S޿C?9YYXof fՂ,-6?M)V躡/%$ ~]Qg+e(4BJ3RNMXHVl߶'6BCL|nT}7ͪYĦNՑѿɷw<~vE'''X(Z oxî%TDݔ}*GZv@4T'-K?ZQ< 'z/7e_ӠGq5M `C*a~^S r ?ڶ8E_рEǎRl+NīIP |W%2ݗ%H%(k}R*6ÈMY38=(H:jDl^l±IcΡeӋP$VX Y/?YD,WFl2 T:zV3 eYŦ~x[f\lj߻bSBTj>B9X6D4Y,lsVGmoĦԈb B,5j`*K$B ~~`? 6 -ucӊ LNQIH T(6m4M?az 5)kTJ;Z) S8jlya8ؔżZ=YصIOcF &O,y-_럩qQ.EZHz1+MI$ {wO جϦ>+Js\q^}L.55ٔP'gv0o>q(~m{h+^_Mlʢ l>X|65Ր/bmI\JxӼ~J|Pl>fe귵5Jp$0%"׶P$wUL5~[Hk$6goQN45ٔ; _a|aݲrP; E>Dڠ|R,6gS,5Eƌ LFl.E56iѭ1O 9O?="ז۲\LBK~ج+7hW~9!boK򵜘`o޽HFl= Uυfz1YN?{_N gSQ;͔Ħ]UVHV#W5NM4޿3 BZQk@B~SV_ků-w ޹^B!.%Be .Hɪ\`lq7՟Q)qգP HGQlUG>;^;Mz}0e"DD>͌z=oGUl3c=/muiX1Cb3!-ec_4k$+Ha;91u_^{e_ K-/.1.he4=J/>&F)-j@DY3%ERyꥷFEy{w{i\BQV%fri=Z2TADu5$6۰BrWdl: ATE"Bg'W]QۦoTH z0PG3I*@1 R}~u}Nb _7TTXx ]ĩR #6{+Qh\u뭗MHpMN3>DM~~Cn~&5 T+Fl>QVWR;kuSW}>5{M0SڹԂ[cQ{V?QѿkΏc4v_hjs}u#S)PGM pK]/S?V|@e SI(JH*\SBR#zK$&Hlf\qWqPHqDl"6)M&Dl"6M&bI 6M&bIAlR(M&bDlRM blv<[VbJV*?WJ̛: *JIGYlfj|g;w6wg \hkwa˽ J| 1Ii$߹˧*2|e#H<\2{]4w>,D~zhs'X 1)CU4 EB@r 4'm<hC ͹bƣhJxMZW{U W:GttIC< h\r՘qXŚYhnZ$IB+4unp¡bY+E$wٱCq&m8isŲe?!AnW]9K <HHh.M-|0]'fwxBhލ]@=vAV Ur% r 'xDFV%mĮV+]p]c ` sd- Vф>FO8iÇj9[潶 Oh!Mm-`=Y:romuM}O}5f6v\ ݰEyT Kذ+Y2Ők8f 9G՗,aZJ+r$,eM-xTV,I=4ݷ`D'@v6gc9. x4)-N6yxRKGSMY݄zqWm{xŲ _~V9{/˘`vIU*Md}6%8[P{M`%ae#m6xT0[r׶1,:)DM6M Z҅Ӫ M44ins Y6ڜΆZk&8%436Q(´ͮ͸qcL&,b照Xt`W59,6)N$;bj4yl#XRYɾ )VynxY@g3ZM&^w ȐMqqʄ沉OεZ5-r& H\:@OHīBs AU"4#*ȱޕMogΕPglДixu& edDLm՗MhZ][  j7+_6G &BW HhjQM(@qֵMVA@zp{돭nPkѢg8x/K綵eGM0ad1lJ+m3iAsmj[=cec:┽fmџ1dIB6yݗX1-|TYVb#hjٲOtފYmNF˺ 륣,#{'MlJ짶qG5j{ZWfWǩ`Ds!$'l"-c&Vdcħ,i<Ԡ3c1!hgumNE)Ԁ![LآFR/!&[hKVLHh&V6]XK*(ǣk8~loGBaޕZ]σϲgMLbTBs134vЂH\"IBE3@dJxds=X & &L(.-`T{:i}N!{=/4v9ҬGD[PiךMBL<"Ju٘+vصI@s& +Jkm"aH/'<9[$N-x;`"0tʐb>Kv=J'M]z4xtSVBP+45\39ǫJ9eʜ-|V[-I(<$Zd1tA.yt +aBR(3T\)o-ΠS+'l<鷅P5}$}&\4Z@F>3:si*4jdm3|~q@fj;ґtZ#K8-.Ƞw7BphB[wcdT Oj|deʒ^u}j\46gmo!hk.#6QxMhtdM[VIl2Nvز Ngj:HS N!?/ ' %8e41rt:iC~\1wC璍#ύJܼa*$tR<ϫN!>gmQ;8y0_kalf4kgbsC<"|MOαEi.a.&$4 oSÔHwmc}`qYOl#*c MmwƮ+WdbL>>gjY[q@ 3SEhΙkMpB STZzKmM;>ٻƑTcuG@ˢ:>Ů5]/8Mp}lO?-,jA-FYkK6: u[.$&L!]S[A]WH?^[8x\ /`H K;&D~sam /,_#ãs&8}k&B0ؖMba\٢9ds Lۮle?aUWN Zv)>Ra&L҉"{CH`Ot5;B8wE7T;r&(1-WNLJswt@h= ӻgc9Ǐ *!kڱ2A=[:]WcKZ vuU*9{:䏕 jM.&$;@p#+EWBQ<؄B3Ρ8V0J6zGvWXupϹ]{}~g~4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4MӴg&r-pt-jpHto1鶶nAu-[Y#ݞ놺9СyuC[aĮwǏٳ/z^jiPUKCꥡ,k^n޽nǎg[nk۶mjt^:J:[t\N놺(]uVfwuj4>Dzר&6nW|ߨ3gpӉ'jAҠzij PVҝ,K)UzXe*a3B`l߾}{}̡EO:Hց*yrlBp3ڡ܏>9'4 9ւ֎;2= wttt2AѰ;ؽ{ZX6/,I%{ _{e˖J!.#GN/^\\] wE%|'+5kTlٲ.̛8 sΝ!=P)ϟ_ɋ☤;>tMb-|7|%ڄzAo6[)$oͣG{|4ɏ6r}#9}Њ|(v|2IIKeP`qg*R@JGAw(x6=<|H%>3"}?#{uKGqc#6O8Cٙǡu޼ygA2şI[ZK,a[@* 1]y޴Q ()v՛Z˽;Bk40!BiJD8t4/9B(s& ;2#OTȈiف=O -5sZT&boѹLچf#VC7۹[-dE j5lMjEE\T\co$Oʓ#qB"Xo&~lt~`8RӥnYޭZЊڵkk7f.tXb$>jPrV:cR(OrpXRP׎2Qq pX:΢||f[Rh)Wxӧ )Aj(Ӛ 3&r;!P^bbEĦ F5iXmj(= gVn*.e hQi)7ocF^Ĝ'NJ(y(!Gh~VܓpOջoùoMu9f!ZBrψp6z84TDP$*Ƀ=ZTp196 zT0 ,1K1ʌFΥڔw aB@9p>q֔^ Zt\'|ϴ oq.w÷A Ƀ{π0c'bph1\KGFTFf<|D%a;4݄37 !=@&6,$?Mor)?&|a rQT@+|h_LGko7݈%bUDah#\WUE`YUޕR=-򮔚Nhe'%RJh)-qogttt -%R3rA%RJhWWZBKMsZBK)w3Zto7=ZѕR+-&j+bJxg]bՇ'ҮhDVO@+ q;U|vRs^ѭ+bnO;0{ރ֊L}M)a/ȓ84hRJ -%RBKhiwg+ᡡ7BK)%ԅB+VZJ f.ZBKh)%ZBK^]h -ꙵZJ -zZNb9&ZJ -9-rʻh5ʻКv~+[;?yY\O]8Ui?xL=}A?a<>RϞSĈ ;-x샏Eل]梅 o=WcAS!"|HS>e= z/ _.7*τɛZLx?$?K'/D\VX7nX̝; Z_g_^K>FQ|2wp({v?>˻FH0]IK(qM(yQҰ#?eI~V|Yh A=9Q٩3R~d礡bFEdFzF1DТO``Fda ߠ)[ۡUޝAhуv8TXw#yjU`#tTw }S#9znUzFKh]-[v^ EJx{ZQϣӖD- `( P +rEV~8<#zdpEEVAtr=ܡ>Uh EQ!H'Z 2bllX|yCX\}?^nܹ1ڃZO^B+&:DA#@TtHMh BBb$4?6G%MzOIqyOZ8F~.H2Q L`A۷CCCqOkWȡB]ЊG}=hE{Yn-.*/ -Qhqb69fޅ9bH`7f/p*PbT fvOL8d[Tř_21cDG%{b޽wO?E؜\oe;f*Fbi=Y(#'"#@(J'tX9/-VGEo)SQJL%$4RxN}T!?"LsG`~b6_3sڋɏ2-΅<9ǘ ǤQ裏k֬0ǵsh1I>f/zp+}t&#Z& >Ͻq`SLZBbdEōsK!|tĕ>'LC46rt|E4<8' pfTƶHù SQ=L>~9_wq: }7m!m:C1Z78.o9N[k'N} -Z純R3 Z7]{/޽k\CGP+XݶmۼVB1RӯcǎEUSO?jj˖-Ŝ9sL넖Z'rʚ"RBKuvQZRBKuR>fͪ {k$꘎=Zp NT{jZ###kٲe^u!6e˖:5V֞k'OzgCkllk#|NK">'w;(vw%TOnի&>%Rݫ}MBk׮]^%Rݭ%Kg.\cRh -%T׋fƍ^ %TCU޹ *.H3/-^Z|y:ȄxʼnLsZ 9RQ?p7A*Vw1ZW-8VݰpE=g~?"R("w$4#RJZӽZBK)%.vZJ)57=^|ߚ1UޅRBk®;9jt^V'_nk<%ZxN'ŭ[/n}{q~x+d}zG''{je=Zxw﮿.~{ +>G(k;j׊BKހѱ Vmmb.n.}[_= /\z;&ayuk>R?T|ͪ#7U~l V Hq&R>%Ѯ\u~ΨF~u9{>^rU>9~+@bEzŵ0j{K  -Ъ/t1d I bC#69/T7ZBK)%j{GL 0HTrhis"l4Ph SzgIh Li8H+BH+hf}evU=od?ռ۱cǙW^yEh7gaԩ0E8A+׋X!DMb~+2 `S1.2r\wnVsk?)%.XcH_Ih9FcuO V:cp'281k3jz3 ZN*vľ>5M?T&hm#"8 C5̂"IqvBqV=gUAcccō7Ih͘xz~ѢG/S-@`؆Č4-?}?Z=b;3 م|箈! j H|8yhZ8R; Zswy"$T {G5kW^*MBۨgϞ}5ڴi_Q{!'Z$GFcC{MEx?=mGoZ9qqlc4ꀂ^Kx\ǖ)ii@'a!v !&l8''#Z9rPN*)FdH~ o߾ {s)8Sк*^{.1[C}Ĩ%F&7wC, ÃX1!my>k%fikD FWrr6)# i*V>viܟcW#*;V .^x:Ã}ʻršO˦Q!Tu!""#jEKivR^o9țIj'bY#Ogv{1rJL쟆bjqzbSZ'b۷2cܹZ3f\{RiT;H_+BH36Bi$h 5w# cC 3F0z|&oFc!@Z}BX2rdZ4I9b ׄgteؗwys\Fq@hMm?^LNy>WlذᑉZqvnEh] Z0YL1"C2FάtͲńj+b>#-8:P!Fh餏| zwgC|Y"e!-x-[8 PQ. yUkH-Bi<}4_%۶m;ˊBK)ի~q̺MYtZ@L4z/B/5kA+'aFYD8jIVhʻRB[5e˖xxUM *A5o.sʿ/^?RhU;?Œ -WPJhu rAF)twAT{xA"# ZBKh)zKH_ &ZcADzbBD>wlkZLH^{B|X @QA %ݗX/K_K/7-eɗ|bԘx5Q'ZJ)b ,x}b=BK)5кk}aBKhRڃB1R-qw%[ETfzZSRGmo7|ހ]Egknh)%RBK TBK -ӧ#G\C -5f -%RRBKh -%RBkZJh)U׭[/xB -%b%L;w|6C -%T/@1RBKsZBK -%TϬ!RBK -%Vѣ).;_.)Bk SS۷oZ -WyW=-Wy5kV]h;vk%|NK"]&VX5#KW -%TO' qi -%T̙3`]BKh)Nwqy->=A-zZ{O<酞+'5w^%Խ; 7zMօڼ_|w$-O=wRɆ!>/j/ce/l|+N3Z/~ѩusW{&Ckǿ}UZTBnn?ɘ2?"K-U+*Ir to% :9iHKEҡwV|~ֳ8Z1qx_Z\Ɛr" pQȃsEl'~r=v<9qroNYI5ڷzm۶CCC^9EORUV+pHKU,s:@b[t )lj>~LQ);Js~IF| q-+b1JCV>Sh\g_*o|GψGX~m@+P? S`<)ph @#3Gq6AӞ^@chHpNd{zsHxղeYv͚5zc0:(c@_hT(zQ Њ:E~seӟIV mFtϨ(HG,oSRh/~M!ZcJlA2RaKL¡TtK- _]ZV4LȠlp#1KvqL9ĹpǠyDcBgF{Z@`pp^ihA i}N4=./6?P>BhE,D/|%?KoBQZEh1Y{y!4TtPchy'b" u/g[0 >Az~ ,rFoMs7n\cV5F[dISKF_xq% XMsν(Т(:e5h7$9$M`FGsjZy>.݀>Pq-u@" >?P:cxvh<? xLʈ{HK^O{F0tTO*)7Q|H+F)4ՠ<rрp=S IكLq߽{w122R̚5EGr. -;ԝjŸuN .,F:mVEJ=N:T wg+ᡡ7N8!@+fqƒQV4|G D9HO>8 7 oL/O+'Ch(n j`r'=4ʂr>/*>w8 @T@cFȒL@G#I 1 !s<3SGe>ux饗;v+W쫑xRO݉e) $߇O-R\5-Ih1i+nz1 ZT,*@ "6* 4*ahهOi/~Nob9[h|g!t9P.FNHc3Bd[<87Hݡ~2 _ :#*|:h cT>>~~Lyyy]O+/?GyBsUDhXphxґօ.1*`.Ac -QF[pȒ)ubt -q_:hpZ:rQBKDA#B#M0 Ήي=肹XDOh)shfݻw0RJh -*BK)k+%rE @k˖-Ŝ9sL]'ZJsZBKh -RBKh)%ZxJ -%c)OygeapTJuV,iՅ:o޼ccc 3KמX뾕 ڵkWO.fzZ_hiߺQVZZkv(yǠ|g<͛_@7bT7pë+5ȑ#WK`[IăvTKCZIWںf:Y+m+oN9]:VY7c8[Jo(]ut֍ҵJj;T%ۦ Tk&=- pHtht{jYbvִQdlK*/y@qՄiS:rOpȞՑ6_ ~h_4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M4m wq H)sBi5Mf"h7_qziBۡcϪi63F7߇ ^{lB8d .ӏZ Y}EHuB2_Rmʾ[S܃#679.,Hyzihty3eC͈L-EhwL@_>ZU滨=mLZЫ5Ү.AB̠*X2X#%Y%%HYiFT@o$zҼl$bU`hD,naЊ`ݙlh9YmflveM`I5l{Zslz @ jշ+Jl߫ߝj Ѥf䵁FgrɈcO  ɑ@ 7ʴKKZ穲<@(0Qo#߽\^xR8ɵz揕y4MӴZHtAybWes)G6&ƒcߞVo8wļR4nL*/)!GGjwrqO9ʟNSe۳ki6l#viii9#F,zY6@O+GRp9jX5MӚ8TUWӴ~K h`XcD#.4.TO T&U16ui6u /`jidBK4Mi>ܪi]%4M4M4M4M4M4M4M4M4M4M4M4M4M4M4M2 "!@IENDB`node-backoff-2.5.0/docs/index.html000066400000000000000000000127731264656751200170110ustar00rootroot00000000000000 index.js
  • index.js

  •  Copyright (c) 2012 Mathieu Turcotte
     Licensed under the MIT license.
    
    var Backoff = require('./lib/backoff');
    var ExponentialBackoffStrategy = require('./lib/strategy/exponential');
    var FibonacciBackoffStrategy = require('./lib/strategy/fibonacci');
    var FunctionCall = require('./lib/function_call.js');
    
    module.exports.Backoff = Backoff;
    module.exports.FunctionCall = FunctionCall;
    module.exports.FibonacciStrategy = FibonacciBackoffStrategy;
    module.exports.ExponentialStrategy = ExponentialBackoffStrategy;
  • Constructs a Fibonacci backoff.

    module.exports.fibonacci = function(options) {
        return new Backoff(new FibonacciBackoffStrategy(options));
    };
  • Constructs an exponential backoff.

    module.exports.exponential = function(options) {
        return new Backoff(new ExponentialBackoffStrategy(options));
    };
  • Constructs a FunctionCall for the given function and arguments.

    module.exports.call = function(fn, vargs, callback) {
        var args = Array.prototype.slice.call(arguments);
        fn = args[0];
        vargs = args.slice(1, args.length - 1);
        callback = args[args.length - 1];
        return new FunctionCall(fn, vargs, callback);
    };
node-backoff-2.5.0/docs/public/000077500000000000000000000000001264656751200162605ustar00rootroot00000000000000node-backoff-2.5.0/docs/public/fonts/000077500000000000000000000000001264656751200174115ustar00rootroot00000000000000node-backoff-2.5.0/docs/public/fonts/aller-bold.eot000066400000000000000000000721541264656751200221500ustar00rootroot00000000000000ltsLP[ P 3і AllerBoldVersion 1.00Aller BoldBSGPDMMR"xZgicyR&c4o4Fw[ H-VbOGs!a6Dz''-A)GVvHKt.'&ǘngOc<ʛ\*[ ƼYg-$ts.K&M^|׆lLEO.kفUOD7ji`N-q*_A RsPΤ=w,8,F N` ł aF{#r`I\B _` _~p[XW/?G"PDB 5^ %Q'u.h&{q|  %Xn<YJ|vW1BD[tf;a~qÁ"DIk$emOL ٗx%K9]L^S,hnq>̈́ iCtX2B:pmVJ;$.J3#j$D`K }<+e@;h4)W$ޖ6c+$vpX6PO,̏,a2\5HRf3a4RZ" 4жW`Y%b 'JB)7̄yG{Nn%w^ ݱ*U5IU45Y:3Y:8 TbCcӛcݖG{-̐ bLDYM%Uf$/sGA4^v ahCI\ SYfOJ~qlBw2 SId FGB4 i;w iM)MבJ ]bZaUtVaGJ3aH XSj8*HeeմT@RرSl +d*hihׅ~4Рdֱř4,{!+wI&g[Y݅s~ )1YB! W%;56-G$(yu7|'e Mdl $Hi=ak aOr\axj".ͱ ?9XIɳ/'Lɛ@ nCCcY=~Tjo7$#ss;+>ǫ/JD@z/lLVSH[QŪNn~4'YGuCz~k?\-SKTAY`-GsDq0.zѼ(d4o2F(Bby1b[Y ʉ*5>>U?!rB,D2Lm҅Msjn%#k -2-3-?SAp6^ޠ7#God.M,;Au+l$ 31̓VaNeg P**BT,ʅll#qJB9Vf@B ,E%׀pL} c1MqO8_E9nRӑ6܉aDwp̮DpF\m1ӘrL# >%2"X,t9zŒƎ$Ą\Y* 0M%wq:/MOyˉߢU/䆳Mm b`JܺccƮG'9w90RF̆ E"=\$[(?MNAT V52Fa.P+%K)v{X_x9 FDȥcGJCEO5(-|ynCk)YG6{l%h2#Ǒx0B6h=V7T¹Y)Ͽ/}( eR; ^4,"II){p@.i(8XdbqDIVHIhW8Lh}Evo9ZGBd˔TNC0kWH3~ro.pec[F;wHƧţ{-SiO_Ҟ)8 P"i%LmDko;o{~>"0`!/OHB&mR`蒿:cDdT+ BB ɴ?>~aqQr"<ɹǟŅ6{rZP!5c?vifi߻``0$;eqꇓ:J8x  2|IdafBmG>)'_?,M#Yֲz̭$"yr#Gʌ &[A:s\,329bb\fai#nv"mͬ, #nAƖpƱq@t%3`o&Q#|3Hρ#X>Fz;(?X򠑬~h>`HNHK8:9$pˆM++'T[A*؀5F3cźUJ}r>9qm2M&ӷo3Qm2afg70)e҅)3}\" ΗS>ЀccbuB/]ɷgẖ[~6CMD~vHx_ׄ2љAtFA"vg)ֹ>h$ь 7c}H%8"CV~_۶-aDueGci.fzo3\̻`HR*i>7J$8Qo ,)ן7%F$m dLK$ c6m328J22mihD%u ÄPEiC!ҏA p|:VMG8S\A\Ƀ~g284.N#K^n4J8 žIʎ${1m:-&{ݝbҾfQTiAbGZ5Z' ؊GW>zXcK';v"l9vTX6Ɇ"yLko㜮- @Z,(}6 ==_گ1)6:QePS5 @xwbgIXCd l^V-Y@"u̓}30 PF60ż{^VgROz7Zq\;7p?(?BJ8 sݜ]=-DڦDdn)ZbE`YÒ9OV׌ چsxW a``Kh]v!͈(/PboR*awJe~\]k.4ƀwP 8OI m5X\X\`]}*Gq4l"CH7 =g#&CDA ̟2dޠ$DZ&HHHHCAHMR:R&HSI *ǜEkEI>8$nORĀ!)bEJcm=[t"!.`MxY8j!&XU/]9q!+x?S} YT٦E$L7gn̠@͸Ml崥pO&3 ! uU H;DsU #T -XNv,O%TRmqs FA 3.bY ') &_\bCӹK^%+]kƌWnoȆGߵUv~kUjYY /Fv*f `PT!K]w .6Q/Z.cR{O#Z(=%MP5G\tTi𥌛$ 2d)v`pMY@oY6@#7ЋF` q ȳ"О+J fܲ 2$H?H),ʦU O@kѸXMgF`X/) &a`4icE*D`t< ߆ {\HœLf2:!IA0 FF!SpQTۃG6vÎ*f=I-vWO{ B\0&0R/HDvzVU, Adf; MޓynfD+PmH*Th0ٙ{|s*8axJ"HZk\{!i0+-A#3Ljp[ԣj#.ʛ;/?(yLaBᄡcc:- J`@3+w1`Ҧb6 %-q$` 3ɏmMbQ gy3@j?}\rurYz2;"mAA+wPARjUXѧ[POS:kʼnr}0BFt&I0Y*jCq-[kp@)F.FBMѰ ɪၔI*Ec26ɐlDB'rn|_[WH㓜cݜ@Kz`xNaqQQ,ޞ4s}rv3:_Lsƫ(3{go|vQVh#xxwB'w3fH g¢0zT5zb'$%)ۼLURLxi'ΒXu>^w@Z$K 8]2$,;nv^wo?cJ|z\׳ ~gx K[;S;/qvowG#vgsotOER:/C|,tDnI6>h6Mڙ(*n8_q~N4pڙ5}c}6,tgWrT0<`p;CPbBPp :y3֢<6 t+N1> zBfD쇢J 7cHszBaD (v@-;͔ɪf)KBR'f4%RgճZwڭOg>Ree]>5}IF~]*} 3W { <ؘw"qVh1 @A"FTr0eU!^qF*>2%%3rUՏH( [(ݴm١N@%*V2zv: D>q"؏5tB)N"+9F7pVJy jD$e-1V9^&Ł"dL- lo%Os)},Fȋ9ϔ HYN|:Fk3`eEyI_{s9 y0ɛp&z .Ϡ@{IUyz3mQxHYb(b'Zou-S]K$\3u|~LzMKŏU"G) Lt*oӂʓ6X8i Y/qC*xSL  jgk3#9.S7qLe5MJmҳ0Z\`5mg!ypNP옧l4$M;~s*&A){+Cq%o(j{[9keY)qc Kfy FbW )z#xWfa~pFV4F-"NIƝW;O8v[IOuҨ Qf: 4,4E"t!?tanLIO.@N._b:M} X?NopD.}Ma$[8np!Rʀs.C$kAẂyObezOc'Bs1P{HGr:i;C[ }jyT`  fɞnB,3X@ 4~K=:R / ejU]۩(ȥ 4c.{);P_(gqJ1ŃRB2Ub>PM9ER' @HDHqTY>+#!; |*KUzUcB;0F 02hYAGZFALɡY_ qR,=kF| h9Jf{z)svrP\,g'rd8?/*I}h kQdy;7+BmXVWR=#k[E+M ,5Z`2_F|ȼY %Q2 j`Mm_'L*,jV!2 }!RJ*H4*iXeRWgܞN g ōPL:%n]6$#Xz:l͛%RIn"ߴDS9RLc΢6ș(}!'QNyf .ʶԅh;8V P.́YĢ@ՉtlmH7B¨PRGe!l<wU9.fXe21Y;H8dHLHsrV 29a/(',Y/.2# dQ'O(XO$TP 9dQc{R cfMJjh+ogkg*-I40Be*|VS'I$'BCk'R75>']bDxD TMĘ氷za7P L>Tf.Z7DNb"r4L9BP.L|:*o.NyagjO5U CxEz74W h>dG_YjW7 9,-Hut49&R<e%\\FE؏MQ9Oq7!q>aP!p?7"Oaʫ쨸p!bDJqQXubز^p5 3''r`qN\KHnqk}FU 61)t64Ip) ;9%~hPFKX2r Yʁ ce=wW@vU(l0NvQۏ]l l3JQsB (ʸ{̥=-8Up+2#ع{52M| + Lb1J6SH].ZeFemi:%`>{cy!4쫁-Iz!RwhiåoSEeGBe[D\PATZ TY*gc&زb$aJā\Xd+`^ #S E`nxvd|BELQV& (G ) "Dط&ΕN/i:@@haKsZTNNӝ]AV'4ߎW74'&up mF"x4f^"Qm>cX ; `@?:~1q?Z{Q)릱BDC"4K?qHpId)xÏ[Quqg6@ 5)kjaAT:AtE\Fihm)7xqS/q2 p8[HJ6 Ԕ:tK0MuM'z"tP2[#N`NaqI"!rM9'!d,w ZTݩ%*LՐᔉ7+:LO@ărWX^mU>~5N#s֍Qe}8 C$ߴ)kh& )Tא7b8rY<[d^tX w,%*G)cOܢUxwz0rV`)KïҎ5hljv+|3-rjTc QDƨJFewXoJzBSA5RɰIH~|g xqRT:O!lR4%ebBL@u8N5赮j$jHzV d`+9cHlɏtC&tmJ%7X ʀ^B \cST. |4yF_P ̨(@7>lsWjb)0~@&͡BjIA3s;"Kò%^\U51ht O;O\DѶ_x*fFc{s c;=߄Ͱ1Ugw-hH '+J1ɫ+Y-[s a_hٟIBru.-wp۞\V#JtNILHCq8Ǣv껉ks$Or !v@r{NFKCdMbtbd훸Xn!EAxClS2 'r\`Qy1(5r8RĎދ[d!-)/l0zĸFЬ m80X)'`,f!gVU&B` ٨}wbƻoaLkLl~7!N D;h~s2bSJ4|O7t16U N S 4G3;-1TDP݈ݘ\YN(6G.Y$6[ fGNIp7 %Үh@,54O$ʓ V`?gN'@lf_Ta![0 PM!OxPz#w5/})9c>q\qO:1C,\DWj-C'N\Q\-Dw !nD6 88]sѶQJJcPqS nU ]Υ.rGΔS=x{Q9M&=øS2GpYw =n}nF5oD =j/9INJ!*ANZE'F\GXaP:{\meӉ܆ E ɒH U[;Ebۏ5jP g9,Q'!E#O{a࠷Io1y~6*ƱQ l!"ݥXst vPLcX ((n+p͑4ܸTQr Ug "s?ID{5W!HznFg5e/ ShSqyY"!BC>\3W + jA2Nw<'2GrF -m5RPbJ-ö#L끳D=ʹ` K”9 I 3Õ\@|)]M{ؔ \+i`+&q#"nN1B)*tsZVsO41 .g@m*+Zp$κ.-S$čmi+ 8@iئry{1N[)aGs*M4;?)Bx5 >IIop,uV!ڝAjO9ff Z,^uշaFq%U?[9;45}R#劣zwFiߜG 6,@lSx+bl⟯"~1PTVeAr{!>3)''Fu"WeshmgE7\[ՐQ|ifEQLj \s>;f~>T͓2Hus:&v K04#/FDs~$ȶq.&ݡ 뭽Ӛ\T@X3tP]ENJК@ݝT<*a{T w'ZT`Q.3îY}:b\KHE IGXPJ-qF/C"@@#hFWa}eDWwG#b$ ]+-b] +9xPס,'&k ?g7ZP8&5suތwTAd *w#O$ |V׏G3@KdUs&~]+5RTM`W98FLf EVgV m63zVXM[׫]TW+=ٚ\Z y6BXx3r4I%9LpW m?4 ZfMb?DŽCU&9eYA]"Dхmdp>I 2~ulFbMʜ0s p Z/3ɪ<}MM'fJZx?h*AG5$:HaT<MA \Xr\:6@"NH6͢x5ektp< D$}dĶ3,Gѧrˬ.ljW^@azqy{n64xc_"RPJVJ,Q&_a ɳ%,v>O]" 'h+%vqa_»:o^d\b!e5Ur7Ufy!n,n]MH( *;sż]..o\߿zf?=I-%$;";ضx'C1@w!0 Oap<ýɾkNLhEr)>V -T ht:X] ,>T6N@  J[, Y,"iDFvUM_4 eK$,,0z.Y4%GұG#fTl" lsHž9RW c%X„ʇ?|'U*iU:mK X"y /&Jf<qцO(iVF'A^O,o`2E:B8m甆 6u!Mśfeۥa2ZxT8S7бH}S{iBNRmί!4΃3@iErC}K1P]FQHV52PIV*;jˑ^%Jt[n$ۥ`  /IgC7%P/(*K&)"`8650f(CC-Ő3 :<-T*@R :NDt㼆ϒRBwh>rx{jWJJ@VN|#J$DSh~*'rpGZ,B34S=jx\F286Ȃafn~8oV`HfiDTO$Ågoە|<@ML.?3(: k`&KKg ~'u!O8lI." zPPx[^KGIXO๐āSdt #@Y&V+; #nSUN(F/a 3,I@DLl#7l{Lfs[Gvɔ-fEAkZ1\&Y(h&O6z&,g^.c&ԡwkȉ=!*F'!,AL]}Jv9O6nlJ4U{gi2I˄ y}8)3:lޗ⍚G/ xʼnPirqu^*!I^P8jDEdȽ`|!(hYR\ah% ih@ "  ڴrs RÖCa76WqEL($[&A! CXnq4Ui4TeL~6Le_?85Qj0FndnNXB'kVw3o*~ ~F'>sq}Fqk E~«/hU^KvǙF3h_q.Jݨqtp뢘Fi1o?@PR+S&1 [B'Jk7![ aR3w!yTlpk i A.:ڽU<(2 Fq((MYG4qTI6k.BA4X&|y)[rF7)uU1E!f,Zj`0!#aAn  xl` NtR|!MԘS(k9HpI )X1 D@2LbRD41(ZcF+߄WB/~̞ {2xMS>)X 9t0J6;^&Nբ_ qZr26z( 8L z#D6߼ڄZ G pLkM5BCG H@6A8O*&l2rEjyI#ṰB.I"hӧ,*a@p2zc>qa[C$G1&c  BaY(- "ńMB$D"dRO Bd3OsGh2 ~QK)Ps}V[_lJm!nҎݎRЉ͎ ׌,H2!ȱq>&˿!:gkǫ9]mdOjNFh%c)Uni xQ*.3 9,#W$AlfW1SpH0ynR<G-n*$D' Q]TL /A(+<'\}hzp4ˎih7Z8%e-a) [Ti1VxD K#!/| "MBV>khY͓[TgZĪ,TT*TF5TTy(x r.'JҪī1 xw6rUzMMt(Gwt հ@aZ=9},ߡ7ӳ2pW82.[];/SE@50;Hjœe W3i+sEi4dj0d$1%#.=S C;B 0 ^O,(@X&BT0D٬DI >Yʰ!0*o\=׸*|B}D_΂FSeTQ3kEL$!!h2:܍3M5j`_K!+RV4{i]W` ٙ@K&qHbʳ 4K 8,k+q򠱆'šL ~]; ,As封?uSu˜ -t.}WM:?$^#e [; Zy(p#0!wYx.ߍRN;kZ,]WN9XE~qHNg D[_qJ90x# !`,#(E3ǏUd@ KKOn= `Rڋ, ǷdSkw>[E6aQn4V@!" ]p 厳 #x˖K@AUGb%@W5^u]T&03O¯|PiR:iTk}K.ŹBHR豝5ٲM&WFPiQO␤/ǨQp-n,Ǣfآh5tcDKC~B5@NeƊaPīLҳlO0;(SE`!mv,/dL[ӋJ]A@+# Ӽ`vCI/qw$1#rP諸yGpruhiO/[79(A,Jp~}y9Wg;$=?~1C O1+v0"j!Q aaRݣTum0A@ Fr[68`PqpCd7^~9>ǻÁO/? X/$q^Xs".A\ g4" 8CUC CN*7ͫX.r9Z>,|+1S R/1lns 0t= (tҧ=HT$~jC2Q0@W'X Z=d4FZA=2 !x OU*:WtN-hy–u(Aq{-C(w"A.+Gza iUYAH0=eREuҳ R$rPTEEaɯ!{Ɓu^= [ =" $#Q|ki#ku^%H6`%-3Ap8̂LhDq D 9dl0ݾvPDm2+U>D'xjՙZA:mfM%XEno*0Ji rW*!WG nα=NgΟ=pZWŗ71bq鼫ˈG"<,Uw ֓G:N*C 2o qǎPED!|d A\% wJaDaLmSqKd'خ4J,~tB89l0oƮF8215MyȒ~1C.xHGlMziRITSXP:ڙM&"x)2@*I b9YtʛE 4|db@= ;9xS)jmXܦZfĜhr . k+ t4oTA9A~i3+QpZ8P|}7>2^قtY=榣W*轭^*yjXeJCQ8dyOǪ $#v;]qD;8@6 _^\!\XQ \8d`$Н`sY|_d(Nk9N-HꡂBʕ }`Jqai+<ԧ3`"z/$qX4y4uzx$|n&Q>7nb7,9_q yR)+xAGM)6 ^{͘IC.$ xQOf]؈4ҁNzy4\ώ >kK*'Pf գN1 OFi:ARy#?ZPrY^U:ƺ^}26'#,U70Q}6t'4E45Tpv%01w1K^4&_ݟ=!7!gaiUIKfيJc@I/T&L>Q H?6F4@J4(# 2@b/8jPTD۶ɚX~Ua{"?XjЂt?T74a`5z>,5 b̀' 1# ъ,1KѨߨWV}4:r d?w\ ^joVXk ĬG@Vf$\ ύCtn!BYMrGT=%kqcǦUr=%"0iLo*JvY(\,#)VZ&Y{2oY0$_J2K&ᐚE?ImnlLa r([2&{K2I:zU Zem 1_" 0[A4=[; \u3dEXan r.6φ}I,ao}r8vjڍ_L2y)J` m g%}L҈L[W c RIgU%a?`c 8 5 E%fYD(?lꈋzvk01<3Ql0gWǥY$V 1M) )&DLJ\ۂLjrJiPDT=,)Y?+jh6Xw:PG,#@XズKYEc˿`?g&P\l! wI4UHˢk p?TO{P0DSp[Ϋ+:,LE:N%P0P gp*NaGI؎ F PD:N2M]cDm1xpL É" (x٢1ތ[nUoҿrK~~/!PmrOM *P_E@$)_Ch=wI oCPb|0*]JbRG "5ZVR4t_d INH_lzԢ('6˅ۡNvLS/4XRwb/$,z` Y iC?L+&Q7PPTG$ Ki  M@(8RX48nutEө G~H쾄f!V곋C\O͆]eR; <$e0- /xy 1]&Z} op9˭𢣂 ܹAT5Fb+Im4 c&D)&Ae{fH=J+5˼ud`` "oFD2Qz$rVKvMNɯ-z p 4Qc'=gZI!hH/;l?Ux M6'7%J4,wfPt/HF#;b9%XDH7xL!⽂+1v2w0 $3'ץ~anJ G`Arrt$,*2j*hN/΁+2FXΗ˖8d' ~Shc큰5x6Q:y ;OC?0hYJdISDb,>jCs"- t6JmzֳK(LJU<`M,hAЉL`  :.G?QzhCh(3$#plQ bK0>bFb[~fN( /OlIB5‡yӗkK}U!Sc= 硓[7%Wcmt~^Ɯuae{ggsF!)jQ5b|εbyA½DK]p)OU֝Plh Y$}ڷ-L,Ǒ:BW+K0sq|p?s"&~Bm3>5@pPUOy.KQOsqюIQm#hiG ˇGM:ͅ%BSD_ S'? T 28CdEo.l@uG\кME1#d]xuMf]$cSOྲ:$0(e 4εa mGr.Uś]t3\mՆ@mŧ( RQ"#UVc(E0'$[ $)Pa8>Mk9<\p_`g(faGU%& g`TX[Z=B#5V?+.I#ɂž/l& )j7;9-4 j4!$b&^z* dz"³@ [UK+?*Pw& ; dhm}8_TJ$(l}zA@aHYAIS |v9䚲^^S>Ay}|52'@_Y`gD^`uљ m)dVP CC:ldt&hf)!T,>`O&#up?=nvh]>7B Ëbڣ8)jai.1iz0cZSSl,Sd HC]nz )4d</K1PSD*W-4 rqE%.+W6HUr+0x0VӷdH>KiS& [>v/8]3`ќ3q,!q#6 Bu9nzbi5ЙGc0$ͅ_L=@& l((esM܆XɰגqR8U{d1BX#E2L $ؚԓa*`}wn oZܱ&Dl\8Nө >_LQ!~"}>Ė!w 6p $K<E' )?& m[1~.NJ]Rg`J!{ %bHj=]SHNt<-qAa P Zaw lvA1SURaڅ"ҏ"Kx=A3u6LW06+cqd wz6T^zW9ǿZЫ6e6hVlŌF)#)6w0sHwOD:4 &Ac¦4PyT/LX[>+^DVc~DO֓zSHJÚ-$szV)%#\C7P@%n6b}M) &}ڻ^X~A8yٱn(" Po7t0UF1SH2o7R6vo0µ89ຒN °;O'uXyeVqPsT0Kf-.87#pkzb) +k|i4OXߎJ5&Z&/~kCӈ ܖٳِ W ŨlaMxHv$a֯*LCOaBr0v;bpM p `djHw&'{VL2{3R)ouQN3bu8'Yޥ#ЙєQpCL8"Xe Aѩ>+lY۸~؀ḣ$7(M'p~FF@"&s)1Hkdsf w5{eÕ-P(á̈-IZ^\Y6Mk4 M5tz 4MvŻ5ަMIL1~s`كQy"ٮ O6 " f" \8f e4Jfp=r.EI;? ՐnSҳ<ʩ+]yX) &3x'HyS[ 44 $g͊o;ᅣÉ<]2Ѹo>ҡfWg>ɾHgfX .vRtp}<*L]!1!5(d$Ti\_7ϖ\ >TcbB`> ,#۽;35w q nfӏu?ۺeYfSڵA oq龃;#oʓBM<|3ffhm /B4RDa^i Ik\#)4 4V4b2|KOI|2õ7^FX>2ɧ6]|d]uf? ̍axm+]=xD]ڗY"&GDBo S@9Y;r:+PpZhC}2:~zI^Q(9T"@IE]FCT)@3'MSl (J"=ƻT)m,Ki ;U$v[NQEi YtՀv냝Ui'&(FnVL(J\ u"&gG%uB)e0MNɛ٤K* H(A/;f· 燙zag[P&DJ+\"K.΋x8r йGvTp81rrJUV A){(~Sv$ ^ijiȚ"k`Yix B,j} PuGC-=!@{6,;)AH!AEcXBWu@C)E{Z8W$UEթ2 #Hó#ƑGwL# E·K\ Ң@ZFjYn32<=7[n.ޞD.uf B>X- | Ģ0  ;%IC@W@+?3yW -\5p{98B9ړZm *)+br%' Jaz*R0\LbKPD&ECe\?6m D&II/jh0?<|gC$3F SCy,"JgMY."'ݕeĢ:U1-y-x>Qz1-V;^U FAm%7}MZ-tގ" Iګ*3$T-WeK-.z |9'+s;Z%LbM-vAߨ8SfqIs L L@-! 탏^q8(}P7dqZ@Ik4BH&_p:9'~6Ғyy’ $64!j(x ) G' /QZPbpqEKiB@qxՑ_tl R*I=mqTdȅẎ? $!aJ6_Ѵ!1 h Տ]Ks=lmgѕƠ9Lq.X̦Igbٮ~sŖʍ*B~]p#g`3k%L"WlJegށEZ(xbT+*NNP"s=AN +@(4L # \N㧭>K._XX2+A`9`RGA`ĬZĬi0 |VY&u :A -WTTB\X7,жdsGbCsGOITGp,P˱(BxNAJO%N0Rx 11z5P/_ jJ+|esѕ Z/*H2*NvXBaѐ< "c,]sFf MfF~g Hn2XՃB{BRL0gl67v+fwg&%.+ ~s@{4L%K(V ieS0,² 1`7C^n2hE!ti-J} lcJ4cZPFJBq=nuW ?IQ#.}ȂaFJ`;`+/mly^_'fJpl ۧM' 5:-.,V~$ m%9vp˦D`Gx2ڶT߁|ӕ6~$Q.dD:)Һviɭ,HLr;" C( Q|!v^h%j!PRb,\yCImImSN s2Ǎ 9_V,à)t]TRPәȰNK"_c9Y'`Mwph߈ 52$xtL2bVV?X<{SA<2 Xe!5'.X`ՋQߘx;$ ڝf*l JCW)W < .˩gC%O!a X"]2E`$"9rP m݉ aB@3  I5$HXRO2è*ہѦ+9 QSY .sG%My.]Ʒ^1O#ڬ36>x(R̠TdaLi,X`cmapB*>cvt Hh@2fpgmS/@egaspC8glyfC@head6hheas$hmtxXO<locan<maxp name?post-pprep7XwebfQ= =Іc^N }~ .Hlatn TRK casekern 6}:^p`<hV d ^ T 0  \L>V0.Vbh tv, < X !j""h"#.#f$b$$%%x%%&&P&&&'Z''(,(X(()V))*D*~*+$+d++,,2,t,--2-\---..D.~./ /2/\///0 0B1 1:12|33X344P5p556@6n667D7r78888j8#mo}uc@(2R=====q79:<IHRZ!qqq\' ""&&**22447799:: << ?? FF GG HHRRTTYYZZ\\mm  $$x$,  7799<<==]]% DL&&**2244DDFFGGHHRR TT WW XX YY ZZ\\mm  &@Ho""$$--7799::;; << == ?? JJ ]]}} '2"* (,rz13 ##$$DDFFGGHHJJ PP QQ RR SS TTUUVV]] )b ( 77<<LLMM*&-@H&&**2244FFGGHHRRTT YY ZZ \\ mm  .HP3y=H\q\ ""&&**2244778899 :: << ?? LL YYZZ\\  /@Ho""$$--7799::;; << == ?? JJ ]]}} 2BJ)q $$--;;==DDFF GG HH JJ RR TTmm  34<o""$$7799::;;<< == ?? JJ MM }} 48@&&**22447799<<FFGG HH RR TT   5@"*  666BFqqqq333HH3H3HH\\3HqqHqqqHqqqqqqqHqHq\qq7##$$&&**2244 66 DD FF GG HHIIJJPPQQRRSSTTUUVVWWXXYYZZ[[\\]]mm#}}$ !#$7F$JJ8~7q{{\{{{{- ##$$&&**2244 DD FF GG HH JJPPQQRRSSTTUUVVWWXX]]mm}} 9jt|2\H'##$$&&**2244DD FF GG HH JJ PPQQRRSSTTUUVV]]mm :>F &&**2244FFGGHHRR TT mm   ;Cq\333333\{33RR{RRq8 ##$$&&**22 44 66 DD FF GGHHIIJJPPQQRRSSTTUUVVWWXXYYZZ[[\\]]mm$}}%  ! " $%<<D&&**2244FFGGHHRRTT WW YY  =>FH""$$--7799::;; << == ?? DD  b (q ""??YYZZDD&. f ""??YYZZ[[\\]] E"* FFGGHHRRTTmmF&. f ""??YYZZ[[\\]] H:B3R==)  ""??@@DDFF GG HH RR TT VV]]``mm  I&. 5= FFGGHHMMRRTT  Jb (q ""??YYZZKl& FFGGHHRRTTN(YOb (q ""??YYZZPb (q ""??YYZZQ&. f ""??YYZZ[[\\]] R&. f ""??YYZZ[[\\]] S$)MT&. )J DDFFGGHHRRTTVV  U4VVV,W"* {FFGGHHJJRRTTY"* FFGGHHJJRRTTZz ( FFGGHHRRTT["* )FFGGHHMMRRTT\$, FFGGHHRRTTmm  ]b ( ??IIVVYYZZ4??&. f ""??YYZZ[[\\]] 4)qMM8@f=DDFFGGHHJJPPQQRR SS TT UU VV XX]]  H08qm.&6&Z08}}$=@"* ;,$8"8 ()D,4f`Hq$Z08}}B$, ;)Z08}}*"( `*2 Hmm8"Z08HR(0 \8 (X.6H6&f6>q}}8"<&f ??$?8":$ ??( > ( ??`$, );\ *"?( ?&2") $&4$ $6& \&. )H ( $$=M *"$RM>*"$=M^.&{)) ,4\$$&&**2244;;FFGGHH RR TT    *"32:H=qqH&&**22447799::<<YY ZZ \\  (0 q &&**22447799<<m*2 {$$--667799::;;<<== ]]  }@08*"$, \q&&**22447799::<<?6&. BJq3h"$$&&**2244DDFFGGHH JJ PP QQ RR SSTTUUVVXX]]   4$, \&qh ( $$--77;;<<== *"X$)=77<<IIJJMMc$J"qq7799<<MM*"`&f $$--77<<==#,$( ) ( *"r$, \ $$7799::;;<<==  8latn TRK case2case8dpng@fracFligaNligaVnumr\ordnb ,4<DLT\dV$>X\F 2< (H (HHH$2DR $D $D 2R 2R {tuILLIIOOILx9$%&'()*+-./0123456789:;<=DKM]08 {tu tu{~l|l|$2DRc33fP [DAMA ff& # ,  ~Sx    " & / : _ !" Rx    " & / 9 _ !"pL7   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkvjsgwl|cnm}bعyqz#!!'+DD,KLPXJvY#?+X=YKLPX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-DdU./<2<2/<2<23!%!!D $hUDc + 3+2+/ְ2 2 +/33 22+ 999901747632#"'&632#"' LIJN NHKL PNPPHAFEJM NGLL Lu  fy  ?+3 +2+ +2/ֱ++01>32#"&%>32#"&f#>"#@##>"#@w#>"#@##>"#@@@m3bBFA//78@$3'CD$2A +@A3 +<2A +@ +222/&EF$3  $2 +@; +16?222  +@  +2G/?ִ9 +9  +/ +9+ +6 0 +H+6?+ ?9?n+ 60??+?+ ?+99+66+00+&0+'0+/0+676+989+?@?+9C9+6D6+E6+9F9+09....@ &'/78@CDEF................@<90690146737#.54673>323>323#3##"&'##"&'#&%37#m!;#;#9#;!#;!!9!#;#9#55355/914gg/h?EA+A +@A= +:+'/ +F/ֱ, ,?+2; +2; +7 G+,9?9; '1999 297 "3999A9'"7$9 99017>732654./.54675632.#"#"'5#".h!VV';J#mDnP+ѹ+-+/RT 5@GZ:#G:$1>zNX1+---Dj`^3;yB#Xb1@(/?XwV #wr  !;/):' 3!A\e) g)=I(+9+A+++/G9 +/+ +J/ִ ++  + *+> +>D+4 +K+ ($9 &9>*!9D#/9%$9( &*4>D$9/ $9014>32#".732654&#"632#"4>32#".732654&#"g/`fdb//bdf`/EJJEEJJE]FI?N!HAF/`fdb//bdf`/EJJEEJJE TyJJyTTyJJyTmlo X TyJJyTTyJJyTmlod3@/+7 +>/ +(3!2A/ֱ4 4 /4<+* 2*< +@*% +B+49< /7$9*9>799999 9014>7.54>32.#"3!33##".%32>75!"d+FX-LnG}`;P?Dj%bV1P;]-Xjɝ_B}byFoJjL)p\\/ub \@#;+!15!@0js:^w?fyo #+ +/ֱ+01>32#"&f#>"#@##>"#@@fuB /ֱ !+99014>7>32#"&'.f'BV/L+)RNI88INR)+L/VB'q L))L!fuB /ֱ !+9901>54.'>32#"&fNJ77JNR)+L/VB''BV/L+)R)B?)LବLJh ';+#+2(/ִ +)+ 999!9901>77.632#"67%.J-TP#?%%))29MPT?#PB'K!?mT+L0L+/,A#N"o1b/U/3 2 +@ + +@ +/ְ2 +2 +@ + +@ ++0147!672!!"'!& A=>?>B =>?> ?>j  =>?>  j=F5 m /+/ֱ+/+6=+ ..  ....@ 9901>32#"&F#E!!N"#F !@ j -/ /ִ + +22 +0147!!&j  1B==@B==99 ++ ++22/ֱ   22+01747632#"'& LJJM  NGLL JM NGLL L- ++ / +013632#"LHFI JGF ? VLB+/ /ֱ + !+99 99014>32#".%32654&#"VBʌɃ=A͉ȁ@3|hhuuhjziigg^;2 +2 +@ +/ֱ+9013!!.5467!&'&L7%('9#9!9##9!9#e367s5L';&+! /(/ֱ )+!&9 9999017>54&#".'>32!!s+FnL'ym-C>;!'1TV];mJ)Jd>l X\ud4V^9x= /cdJR=732>54.#"'!&547!32#".R'NZBtV3-Jb5#J"> XPX/Z=aXZF?1 @bF3L1 =>B=#>dDDžC!}VL/32 +@ + +@ +/ְ2 2 +99017!>323##"&'!!CF9Z%#B"%J% #A#%J%P+-G;@Ahw57+Z'/ /2 +@ +/,/ ֱ" -+" 999 "99901>732>54&#"'!!>32#".h*HG\|M!;q9 ) %9duAXP\fL?|;)CX/ht=>B=7mhAu ,b+$+ * +-/ֱ! 2!'+ .+'!99 999*$9990146$7>32# %32654&#"ub1 s}P4G^>XyGXb1ub^y\fy=F !B"3:JyV3+;uw{@+́uyh7  / / + 90147!.'!&  J? B=I6/`=`m#/;t+' +97.54>32#".%32654&'>54&#"`+HX/PhEy``xFjP-\E.YcbX'ujoqbb{+dPRe\[ZZN}`E/iVb66bVh1C`}Poe--e`kjab{!!}?VddVHXX^fsL ,b //$*/-/ֱ! !'+2 .+! 999'99  9$9*99014>3 .547>7#".%32654&#"^Xbc q}N3H^=XyH/y\fzuc^X{@պ!B#1;JyV2+;uuyy/I + 3+2+3+2 /ִ$2 $2!+01747632#"'&47632#"'& LJJM  NGLL LJJM  NGLL JM NGLL L@JM NGLL L:/ +3+2/ֱ22 22 &+ +6=+ ..  ....@ 999901>32#"&47632#"'&:#E!!N"#F !@T LJJM  NGLL  zJM NGLL L47 &O j HJNP1#FC#I)PR{# // /+0147!!&47!!& _ _ ?>=>?>=?>=>?>=467-.5467&kP P#ED"J)TLHIPX"2o/+-3'+)2+ + +3/#ֱ+ +#+/+#+ 4+'/$9' 9901>32#"'>54&#".47632#"'&X5ZVV2Jho"HBD=/gV7h+D9< % LIJN NHKL }``; `5P!+ LM"!!"LM....!"LM....@)F,6322>54$!"3267#"$&%3267.#"X"yT׃N=gBrV3\x\N/LwP)qXsjI" %fwB{PB);#X'DhJ'u.T{N/'TX^JZTҡ҅=-`/  Z\R =e3+ 3+ +/ֱ+9013>32#"'!#"!+N/)N/TPNIRTJCLs\? ' +j)7m++5*) +*8/ֱ *2#+ 0  9+0999#9)9*95 9013>32#"&732>54.+532>54.#"BqȖV'BQ+/rcAd{^L+^R5)Lh@{[3XA%+CT)9( %XoBpT7.Xbc% 0TC?U3/P=;M+j =++!/ֱ "+9 99990146$32.#"!267#"$&j_b`)HoKLrH#jb[ݤs'=v; 9z='q1 B ++/ֱ + +  999013>3 !"&732>54.#"Vsglh9)^wFFwVL }+ss/X++ +/ִ + 2 +@ +2@ + ++013!!!!!D   V'  =@D=B=B?{=@D=@++ +/ֱ 2 +@ +@ ++013!!!!#"D   VNEL=@D=B=B? h$_ + + ++%/ֱ + &+ 999 99 9990146$32.#"3267632#"$&h_b\)HoK#7LHHMjV[ݤs'=v;  -'q?+3+ 3 +/ֱ 2+2 +013632!632#"'!#"LJJMLIJNNGLLNGL B ? }  !++ /ֱ  +013632#"LJJMNGL ? 3M+++ / ֱ  +/+ 9990174732>5#.547!#"&'.3#5#N@+ H}d#i/;^_ )OJC!B;qe-  # +3+3/ֱ +01>32#"& >32 #"&''J'#I''I%%J//P #V/m/X#!O2;9 ,++/ֱ  +@ ++013632!LFHM A#?!?# N+3+ 3/ֱ+ +999  999013632 632#"'#"&'#"9RLPNR\?NNHENEFC%=5B=B L ? L H+3+ 3/ֱ+ +9 999013632632#"'#"?:=B:JC?32#". 4&# hLKKL=ݤss礤ss^(L++% +)/ֱ 2 + *+ 99% 9013>32#"&'#"&232>54.#"^bfԪjjd/'I#!N+3bL--Lb3'% )qȠs)'>dJLh@h&|++&/"/'/ֱ ++ #+(+6&".".&#.#&.ɰ6@99 99014>32#". 4&# >7hLKKL=  ݤss礤ss+;33N;}7'K%+3+(/ֱ" "+ )+"99 999% 9013>32#"'7>54&#"#"&Z`q۰l)?J!#g)Z/NL1RL5t-%%J##M )hR}^C -D`Ay%H<j8++#=/ֱ( ( +3 >+(99 #.8$93 /99989#3$99017>732654./.54>32.#"#".H!VV#7F$}FoM+Grhd 5?HZ9#H9%1={NX1LӊDj`^3;A#"`b1B-/?X{Vhm7%#wr  !?3)8& 0A`eh{F 3V: ++2/ֱ  +@  + +@ ++0147!!#"&'!&3  %I##P) D?>=@D===#7+ +3$/ֱ + %+901>3232>5>32#".'J'#I'7dPPb8)J#%K'1դ1<}u88u}Ėaa=++ 3/ֱ + +99901>32 >32#"&'#Z#NVBE)L'%L(%+P-)M/ v?!Bf+3++ 33 + /ֱ !+6+ .   .. ....@901632>32632#"' #"'!J^%K%)F%=H?D)N%JON\1L-?J T q ? + %/ +3+3/ֱ +999013 >32#"&672 #"&'%C)P'JP3H"%H=PI'P)@/H%#H3 @ D0++3/ֱ + 9901632 632#"&'VWNM#LOJT5)I%#L' d MNo.+ +/+ 99017!&547!!!Nj F =?D>V=@D=fZ59/ //ִ + 2  +222+01!#3f 59>E=953 ++ / +01632#"'JEFNJEHJ ? fZ5C // /ְ2 + /  +/ 33+01473#&'467!!.f 9==:5s5f+/+01632#"&' #"&fDDEBI@)F#BɺDB & -3 + +/+01467!!.d,1,1% + /ִ + +01>32"&')L5dTDA)J  N; /j+&+   - ++0/ֱ!!)+21+!99) $9-&9014>3254.#".5>32#".%3267.#"NTR;H!9T4o|ZNH́h}C-@G=9duLbP#1># +5^B)%Vo5: Hd$`++++ +!%/ֱ2+ &+ 999!9 9017632>32#".732654&#"JFHI\\sAR-dg^7^qRh# 7HAɉӔP muT;%=!++&/ֱ '+!9 999 9014>32.#"32>7#".T?-LEF+=];w313# RNāBuɗV /u5 )mI!TT+(K++$)/ֱ  +2*+ 999$9014>32>32#".%3267.#"TL{%O%%H##I%`ǍmƘX+)Hb9#9#)3'DdAuϗX J<͓TuE a 7\}X);$]++" +%/ֱ  +@ +&+  99999 99014>32!3267".%!.#"XBoy=XFA ɓӅ@!eZfk u͗XMj'L{n)sA=Rbyr#7(B"++3&2/ )/$ְ2 2*+9  901467354>32.#"3##"'#.#;o\=T10)HZJFHI13bh8 Dl5 Dn-!51 F!5D9;O[+Y++7/?J/.&/S+\/ ֱP < +<+ +/++PV+!!2 BB/2]+P  99V+&.7?J$9!/0$9J?299.099&+99S (99 !PV$9901467.5467.54>32>3##"'#".732654.#'"#"32654&#"DXI/7B?HN>uhf:'rc ;siXF#+BZ{{l/tc 3+$#GNXVLLVXN\w-TBNb-3[Pd9?1333!B#9/Pb92!)Vc5'FfN7RE& '/TVccVVdd7&B$+3 +'/ֱ!2!+(+! 9 901>32>32#"&'4&#"#"&#J##I%/Fb@%I##J%ET#J;'%J"#H4/ ZXov;kV3 "y++ /!33#+22#/ִ +/ +/3  / $+  99990147!#"'#.47>32#"&'&3 JEDI^ #O!#R##P#!Q# 76 F;BG#C#!E#Fw1+ ///)3#2#/,+ #+2/ ֱ +/&  //3& )23+ 99&  ,99 90146732>5#.547!#"&467>32#"&'.d9!;+ Ļ3j'OR%%RO';i/+N@);76ŭ !9)  )9!9+  +9}3 /+3+++ +/ֱ+013632#" 632 #"'}FIJHHJJPRNI;TNHO ' 7  9+ +++/ֱ+ 99016323267#"&JHFI1%'!\'fs ?N+PL ;9k8+*33+330"2:/ֱ6+6,+((+;+6 9(990 99013>32>32>32#"'4&#"#"'4&#"#"9##5 5J\:E)sJGHI8T#C7#JHHI7T#F7!JGH# '+)>1Lp^ Vov7eP Vov;kV 9;&U%+3+3'/ֱ#+#+(+%9# 99 9013>32>32#"'4&#"#"9##5 :K_9JGHIDT#J;%JGH# '+)>1\ Vov;kV TN;D++ /ֱ + !+99 99014>32#".%32654&#"T?}>>}?'dqsddsqdu͕VVuuȖTTtf;#3n+&+3.!/4/ֱ$2 +)+ 5+!9 9)99!99.&9 901>32>32#"&'#"&32654.#"7#9< 5L^:Xs?MՇ#C'H"#H7H1L83G-  '-+!@1AɉӔP)?mM.'DZ3T);&a++ +$ /'/ֱ + 2 (+99  99$99014>32#"&'#".%3267.#"TPލsZ%H"#J%#I0hX/'D`9#9#/!uӛ\7}ȔTqC [/&M$++3'/ִ +2! +(+! 99 9901>32>32&"#"#"&7!; -b6 7#VN3%I##H% '++?e6#R%>{nRf;3k/++4/ֱ!! +*5+!999 $/$9*%999/9*$99017>732>54&/.54632.#"#".RDyAD9'<5sPP!1wAFN83t9]B$?yl1SKJ!7q5 +"1,%!5s++/-%#/FfJL`8X#X+2+ "2 +@ +$/!ֱ 2%+ !99 90133#3267#"#"&5#/'9'< ZaŅo15 `?N- 'S!}/?+ +3/ֱ ++ 9 901632327632#".}JGHJ8R7L3JEHJBuhV: Tm?> +!k P/!++ 3/+901>32>32#"&' 1T)R##M'P3n'UN"!  d/$!+3++ 33+ +%/&+6>v+ .g+ ..... .......@01>3263>32#"&' #"&'/T)N#?M5E#>'O1%TK#'TK#!   B'/  +3+3/+013632#"632#"'DQNPJHHLQLJPHHI# ) F/+;*++ 3/,/ֱ -+9*9901>32632#"&'&4546732>?#*'/H)V#DGE4tCVj>9\-=1/)#7)# d  Nf9 1Y) B;7#.+ +/+ 9 9017!.5467!!!7kB +9392fN:G0/(/ ;/5ְ2#2#5 +#+ +2<+#59(599015>?>3:#";"#"./.f7H-'\y!  #;D )A0/B) D;#  !y\'-Gd6;IcAjp:;67:@dF{mB?m}Fd@;57:9qjBbI<B  /ֱ +01672#"FEFGHCH  s fN:G6//;/ְ21$21 + +2<+1 9$299014732>54>7.54.+&'476232#*'&f #9E! )A0/B) !E9#  !y\%-G87H-%\y! 5;@dF}m?Bm{Fd@985<:pjBbI<6;IcAjq99/32 32/+6-+ ..%+ ++++ #9999............@999 901>323267#".#".)`/XXZ2-K6)5)`/]ZX-1H5%;b1H/)`11D/)ZV/V+3 + 2/ְ2 2 +/33 22+ 9990147632&'&632#" LIJN NHKL FCDGPNPJN NHLK  L   !/a(/ +/ +0/ֱ *+2& + 21+&*99("+9999999014>75672.#"32>7#"'5.7kl+-+/3_;=];w313# ;h6+---mk5j`  ?i1 )mI \u@3++ +>3 +3>$2A/ֱ +2( : :/( (: +@(/ +B+:=99(%99+349>:999 9014673.54>32.#"!!!!'7>54&'#. ;{qF!9kR?V3 @#N+;%05i5TN!/}A +BR';V+!50%FxH#?!?#%krm%!C#!5P$8x/*4/ 9/ִ% +%/+ +:+% !"$9/ 99$9*!$949  $9017&547'>76327'#"'.32>54.#"P;?Q8fywg/VF#P3f~f9L- 8K+-L8 8K.+K8 Nd{}g9L99M6m?u1/V;;T-M<##732654&/.7>54&/B=H^T)3}?mR78y\C;#$Lh)5?ox59e3>-3T%=@Dr5u+1+))J%NL@!R;NyR+:5u++7)#F){)6B>))<58o-7/&),$3  $2./ֱ  +#/+01467>32#"&'.%47>32#"&'&GG!!FI HH !GG 7=;=<;>;==RB'I+# +/ +E/<+6/-+J/ִ +(+9+9+  +K+9#-0BE$954.#"4>32.#"3267#".Rooo說oRދݚRR݋ޙR3c\F\;1B)ZbhT/>3;i<`c3ߢus餤uuߤ^^߁ߤ__TuE)f) uoun !b6Dqq1 /x+ +/&+-/ +0/ִ!+!)+2+1+!99) $9&9-9 99014>3:54&#".5>32#".732675.#"Bh@&XT)^0H<5^T`5#15*,LXLh> H()N3/#BhR%'3RN 672 #"'672 #"'R??KRO;PQJ@??KRO;PQJ@!  :9   :9 )R 3 /  +@  + /ִ + +@ + +0147!#"'!& k=@B= B= R=j -/ /ִ + +22 +0147!!&j  1B==@B==RB'J+# +/ +B/, +B, +@B7 +H2K/ִ +(+F+F?+/+/+  +L+?F#,;$9/37:99949B /$90146$32#"$&732>54.#">32#"&'7>54&#"#"&Rooo說oRދݚRR݋ޙRA9kBç7#@"3!/=9>)75ߢus餤uuߤ^^߁ߤ__ qFlgD1/; "/ /+ + +0147!!&   ?3651543NhN+ +/ + /ִ ++  +!+99 99014>32#".732654&#"N1Rq??sT11Tr@?qR1J55NN55J?sR11Rs??oT00To?;KJ<;NN/\+2/3 2 +@ +/ְ2 +2 +@ + 2 +@ +2 +0147!672!!!!&547!!& A=>?>B 3  3 ?>j  =>?>=>?>=>?>`=mqI+/+/ִ++99 999 901654&#".'>32!!m{B;5N5 DyPdT! k+R'3+^5b`#'7;)Z(L$/+/+)/ ִ+*+ 99$9999901>732654&#"'7#.547!#".!7`/DdV5-' 1-L71b:=/+ +,-/++=N)JnL'% +  /ִ + +017632#"Rf5L)J)B  L/+\+"+ +3)/,/ֱ%2+-+"99")&99 %990163232>5632#"&'.'#"&'#"&JFHIfa5H)JEHJ+!2 ;}_'G'F"#D ٤#=T1g #" HDfBA+3+3/ ִ + +/+ ++014>3"&'#".2fXD^XP#B``yk/'+^R?2 /++22/ֱ   22+0147632#"'& JEHI  JEGJ 1HJ JFHI J1H/ + / + +@ +/ ִ+ +9 $901>732654&#"'3>32#"& %: 9FA5Dg= myU%!P ## eNhkq6 /+2 +@ +/ִ++901%33!.54673.3  !&-)*-m:#R^N++/+ /ִ++ +!+99 99014>32#".732654&#"-`bb`--`bb`-HLNGGNLHRyJJyRRyJJyRons?N 7 672 #"% 672 #"?71XX/=B)d-)*-m:#R+ X !3'5/' { =+<37+ /+2 +@ + ' 0>/ִ+$+3+?+99$@  !-0=$93797!999 $*3999'-99901%33!.54673. 632#"%654&#".'>32!!{3  !&BFI?N!HAF4{B;5N5 DyPdT! k-)*-m:#R+ X 1+R'3+^5b`#'7;)(2L1+K/D38+?2K8 +@KH +8K +@8< +$/+/+M/ ִ+J+92F+>2N+ /1$9J*,348$9F.7998K391)/99947$9901>732654&#"'7#.547!#". 632#"%356323#"'5!!7`/DdV5-' 1-L7FI?N!HAFC3a+Ӄ1>71XX/=B)d1b:=/+ +,-/++=N)JnL' X !3'5/' ub/"2m'+)3/+-2 / + +3/#ֱ+ +#+ / +#+ 4+  '/$9 9/90174>7563232>7#"&47632&'&uIio"FDD=/gV7h+D99#%5ZVV2) LIJN NGLL ``9 5R:X\ 5s=IJN NHLK  L#";+ 3+  +#/ֱ$+9 "9013>32#"'!#">32#"&'!+N/)N/TPNIRTJCLs#b57m-JK#J%-\? '    j#"3+ 3+ +#/ֱ$+9013>32#"'!#"! 7>32#"+N/)N/TPNIRTJCLs\-l85b#%J"L? ' +j !*-\+ 3++ + /$322./ֱ/+9+-9 &(99*"999013>32#"'!#"7>32#"&/#"&!+N/)N/TPNIRTJCLZ97Z!O'#^`\ *--'H\? ' K ggjZ-0]+ 3+. +#/+( +1/ֱ2+9.09# +999013>32#"'!#">323267#".#".!+N/)N/TPNIRTJCL#yM'LJL)%?-D#wG+RNL%);-1\? ' -F+HT-A)%GcjN*-C+ 3++ +(/"%32#"'!#"467>32#"&'.!47>32#"&'&+N/)N/TPNIRTJCLGG!!FI\X HH !GG ? ' =<=;uj@;><==}&u+3/$/ +'/ֱ+ +!+  +(+999!99  999$ $9013.54632#"'!#"! 3274&#"+5no5)TPNIRTJCLs\Z3/b4//3!`Buu?c!B ' +;B}=BBVX+3+ + + /ְ2 2 +@ +@ +2!+013!!!!!!!#"!#>   V' JT^{ =@D=B=B?{=@D=/ 3jB+>+++/4 +9/# +C/ֱ 7+(+D+7 #+.=>$9(9994(1<999#=99 9990146$32.#"!267#"&#>32#"&'>732654'"'7.j_b`)HoKLrH#jb   =V9#_5%BJ;p=)PɇDݤs'=v; 9z='I5D'hm %N"  7 #!l++ +"/ִ + 2 +@ +2@ + +#+99!999013!!!!!>32#"&'D   V'  #b57m-JK#J%=@D=B=B?{=@D=  #!j++ +"/ִ + 2 +@ +2@ + +#+9 999013!!!!!7>32#"D   V'  g-l85b#%J"L=@D=B=B?{=@D=? !,++ +"/&322-/ְ2 + 2 +@ +2@ + +.+*99%999"(*99013!!!!!7>32#"&/#"&D   V'  Z97Z!O'#^`\ *--'H=@D=B=B?{=@D=? ggN,B++ +*/$';>A$3/25$2C/ִ + 2 +@ +2@ + +! /!8+--/8D+'998- 9999013!!!!!467>32#"&'.%47>32#"&'&D   V'  GG!!FI HH !GG =@D=B=B?{=@D==<=;;><==# )++/ ֱ +  99901>32#"&'632#"h#b57m-JK#J%6LJJMNGL   ? # )++/ ֱ +  999017>32#"632#"-l85b#%J"L:LJJMNGL?  ? !!L ++ /322"/ֱ #+999 99 999017>32#"&/#"&632#"dZ97Z!O'#^`\ *--'HLJJMNGL? gg ? N!7o ++/036$3 $'*$28/ֱ +/ "+-9+99"  99-'39901467>32#"&'.632#"47>32#"&'&JGG!!FILJJMNGL HH !GG =<=;V ? ;><==3+q ++!  +*3%2,/ְ2 $2 +@( + +@ ++ -+ 99 9901473>3 !"&'#&32>54.#"!! VsglhV 9)^wFFwVL  35W } 3+ss/5153Z0+3+ 3&/++ +1/ֱ+ 2+.999&+$9 !#99999+&.9#99!9013632632#"'#">323267#".#".?:=B:JC?32#".>32#"&'! 4&# hLKKL#b57m-JK#J%?=ݤss礤ss  hf#)O++*/ֱ + ++!%$9 $9 99014>32#".%! 4&# 7>32#"hLKKL@?=-l85b#%J"Lݤss礤ssf hf!+4y+.+3!/%3225/ֱ, ,0+ 6+,90)3$9 93. 99!')99+#999014>32#".7>32#"&/#"&! 4&# hLKKLZ97Z!O'#^`\ *--'H2?=ݤss礤ss gghfZ.7z+1+6$/+) +8/ֱ/ /3+ 9+/93$,6$9 !9961 99$!,999014>32#".>323267#".#".! 4&# hLKKL#yM'LJL)%?-D#wG+RNL%);-1#?=ݤss礤ss-F+HT-A)%G!hfN+4J{+.+3)/#&CFI$37:=$2K/ֱ, ,+ ,0+ @ 0+55/@L+5 .3$93. 99014>32#".467>32#"&'.! 4&# 47>32#"&'&hLKKLGG!!FI2?= HH !GG ݤss礤ss=<=;3;><==1X7'67677'&'.!--53-&'/5+'3--##+.,(!-1hf#+2t++.+ 3*3/ְ 2$ $0+ 4+$!990(*,$99.!99*'2$999014>327672#"&'#"&'7&%&#  4'hLuG>%/5-PMK{JA./LH@ JcP=#ݤs96T  f妤s>9\fN5Tkbu##0B+ +31/ֱ + 2+$9'+0$901>3232>5>32#".>32#"&''J'#I'7dPPb8)J#%K'1դ1#b57m-JK#J%<}u88u}Ėaa$  ##0B+ +31/ֱ + 2+$(,$9+901>3232>5>32#".7>32#"'J'#I'7dPPb8)J#%K'1դ1-l85b#%J"L<}u88u}ĖaaO !#;n+ +31/53+%(223232>5>32#".7>32#"&/#"&'J'#I'7dPPb8)J#%K'1դ1Z97Z!O'#^`\ *--'H<}u88u}ĖaaO ggN#;Qm+ +39/36JMP$3'*->AD$2R/ֱ $+0+ G+<3232>5>32#".467>32#"&'.%47>32#"&'&'J'#I'7dPPb8)J#%K'1դ1GG!!FI HH !GG <}u88u}Ėaa=<=;;><==# 5++3!/ֱ "+ $9901632 632#"&'7>32#"VWNM#LOJT5)I%#L'-l85b#%J"L d M1 ^-U++  + - + ./ֱ 22%+ /+% 9- %99013>326232+#"&32>54.#"'J#!M))fԪjjgV)M!#J%'3bL--Lb3'%)nɠo)=eMLg=>=++#7/?/ֱ;;2+  2+--/  &&/@+-;99 #*7$9#=97  999013432#"&'>732654.54>54.#"#"{d+9D9/FRE0%ZoLx>/T#?D/FPF/6A5#9+ZTJAHDj@TwZN-)1+/JnT3o\<7q6=7'4++?XDH^VdL5)) N ,;z+2$++   9 ++3254.#".5>32#".>32"&'3267.#"NTR;H!9T4o|ZNH́h}CA)L5dTDA)Jf-@G=9duLbP#1># +5^B)%V  5: HN ,;|+2$++   9 ++3254.#".5>32#".7632#"3267.#"NTR;H!9T4o|ZNH́h}CRf5L)J)B-@G=9duLbP#1># +5^B)%V  5: HN 4C~+:%++   A ++D/ֱ55=+2E+5!"3$9= %.0$9()99A:9014>3254.#".5>32#".7>32"&/#"3267.#"NTR;H!9T4o|ZNH́h}CH#^+T)/M#T#TRK%R-@G=9duLbP#1># +5^B)%V  5: HN <K+B$+,3772 )+   I ++L/ֱ==E+2M+=!:$9E $'57$9)/2999IB9)2!/:999014>3254.#".5>32#".>323267#".#".3267.#"NTR;H!9T4o|ZNH́h}CS#qL'GFI'#>+!, #sL'IHH$':+1-@G=9duLbP#1># +5^B)%V-@+#V+-;)%O5: HN 8G]+>+   E ++6/03VY\$3$'*JMP$2^/!ֱ- 9-A+2S HH/S_+-! 99H>E$9E>9014>3254.#".5>32#".467>32#"&'.3267.#"47>32#"&'&NTR;H!9T4o|ZNH́h}CfGG!!FI-@G=9du HH !GG LbP#1># +5^B)%VN=;=;==Ny ,;G+2+   9 ++*/? +E/$ +H/ֱ-!-+< +-5+2B ' +I+3254.#".5>32#".4632#"&3267.#"32654&#"NTR;H!9T4o|ZNH́h}Cffff)-@G=9dug7))77))7LbP#1># +5^B)%Vo{{oozz85: H5;;55<;NF;;MT1+73(A2+3 R2  N%1 +NN K+U/ֱ<<O+!V+<99O@  (17%DN$9!$+.999%(+3254.#".5>32>32!3267#"&'#".%3267./.#"%!.#"NTR?H!=T43y?ZNj<=fop8kF|B PVfBFpXsA+# 5^B=;7AMj'Jyr)sA-+)/%Vo5: +d9!9byrT;C!+?+++/4 +:/% +D/ֱ 7+(+E+.97@ !"%+1>?$9:4(1=>$9!9 999014>32.#"32>7#>32#"&'>732654&#"'7.T?-LEF+=];w313# RN  myU2 %: 9FA6CPbb/uɗV /u5 )mITeNhk!P ## `X))0g+!++.* +*1/+ֱ + +@+ +2+ + $$99. 99!&9014>32!3267".>32"&'!.#"XBoy=XFA ɓӅ@{)L5dTDA)JeZfk u͗XMj'L{n)sA=R.  byrX)$0h+(++" +1/ֱ  +@ +2+  (+$99" 99(/9014>32!3267".%!.#"7632#"XBoy=XFA ɓӅ@!eZfkRf5L)J)B u͗XMj'L{n)sA=Rbyr  X)18g+"++62 +29/3ֱ 3 +@3 +:+ 3 &$996 99"(9014>32!3267".7>32"&/#"!.#"XBoy=XFA ɓӅ@#^+T)/M#T#TRK%RXeZfk u͗XMj'L{n)sA=R0  byrX)5<R++:6 +63/-0KNQ$3!$'?BE$2S/ֱ**=+HH 77/ 7 +@7 +T+*6999=:9979HBN99  99996 99014>32!3267".467>32#"&'.!.#"47>32#"&'&XBoy=XFA ɓӅ@yGG!!FIeZfk HH !GG  u͗XMj'L{n)sA=R=;=;== N+++/ֱ2 + /+ 9 99901>32"&'47!#"'#.i)L5dTDA)J JEDI  76 F;3 M+++ /ֱ +/+ 999990147!#"'#.7632#"3 JEDI+Rf5L)J)B76 F;)   P+++!/ֱ +/"+99 $9 9017>32"&/#"47!#"'#.1#^+T)/M#T#TRK%R+ JEDI  76 F;$:r++"/369$3 '*-$2;/ ֱ  +/  +/% +0<+ 99%901467>32#"&'.47!#"'#.47>32#"&'&6GG!!FIi JEDIZ HH !GG 7=;=<76 F;;>;==T?-9~)+17//2:/ֱ. .4+$ ;+.$94 )$9$99971$999 99999014>32.'.'7&'&546727#".%32654&#"T;uo5f)K50 qFX uT,yFhH"=}}='^oo`ano^mO=o){G'J93#B 71nC)PDkךTNl9&B%+3*+23==8 /+3C/ֱ#+#+D+%'@999# 9*/8=$92599 9=%@9/'599013>32>32#"'4&#"#">323267#".#".9##5 :K_9JGHIDT#J;%JGH#qL'GFI'#>+!, #sL'IHH$':+1# '+)>1\ Vov;kV v-@+#V+-;)%OTN+]+#++),/ֱ &+ -+ 99&$9)# 999014>32#".>32"&'32654&#"T?}>>}?\)L5dTDA)Jjdqsddsqdu͕VVuuȖTT'  ITN+[+#++,/ֱ + -+ #'$9 &9 99#*9014>32#".%32654&#"7632#"T?}>>}?'dqsddsqdRf5L)J)Bu͕VVuuȖTTt  TN'3d++++14/ֱ( (.+ 5+(&99.!#$9 91+ 999014>32#".7>32"&/#"32654&#"T?}>>}?#^+T)/M#T#TRK%RZdqsddsqdu͕VVuuȖTT)  XTN/;}+3+3**% +932#".>323267#".#".32654&#"T?}>>}?#qL'GFI'#>+!, #sL'IHH$':+1dqsddsqdu͕VVuuȖTT-@+#V+-;)%OϠTN+7M|+/+5)/#&FIL$3:=@$2N/ֱ, , / ,2+ 8 CO+8 /5$95/ 99014>32#".467>32#"&'.32654&#"47>32#"&'&T?}>>}?GG!!FIdqsddsqd' HH !GG u͕VVuuȖTT=;=<;>;==## !4/ +//+"/ ְ2 2#+0147!!&4632#"&4632#"& _ cEFddFFbcEFddFFb?>=>?>=FddFFbbFdeEFbbTN;#,4n++/+*5/ֱ$ $2+ 26+$92(-$999/!99*'4$99014>327>32#"'#"&'7.%&#"32654'T?}^;')3m;8>s#)+bBA' V5^qdV1Nsd u͕V/)/JquȖTH-Jx1V#?B+L<}&^+ ++3'/ֱ +(+99  &999!9 9#901632327632#".>32"&'}JGHJ8R7L3JEHJBuhVZ)L5dTDA)J: Tm?> +!k  }&_+ ++3'/ֱ +(+9 "%$9!99 9%901632327632#".7632#"}JGHJ8R7L3JEHJBuhVRf5L)J)B: Tm?> +!k  }.`+ ++3//ֱ +0+-99 "(*$9#9 9%901632327632#".7>32"&/#"}JGHJ8R7L3JEHJBuhVe#^+T)/M#T#TRK%R: Tm?> +!k  }2H+ +30/*-ADG$3!$58;$2I/ֱ' /' +3 >J+'93 99>9 901632327632#".467>32#"&'.%47>32#"&'&}JGHJ8R7L3JEHJBuhVlGG!!FI HH !GG : Tm?> +!k=;=<;>;==F+7N*+/++ 3/8/ֱ 9+ 299*99/6901>32632#"&'&4546732>?#*'7632#"/H)V#DGE4tCVj>9\-=1/)#7)Rf5L)J)B# d  Nf9 1Y) B;  f.Z+! +)///ֱ22$+ 0+$ 9999)!9 901>32>32#"&'#"&32654.#"'H##G')gXs?MՇ#C'H"#H7H1L83G-9VAɉӔP)?mM.'DZ3F+CY*++ 3/A/;>RUX$3/25FIL$2Z/,ֱ88D+OOD+ [+8,(+$9D%99IU99 O 99*9901>32632#"&'&4546732>?#*'467>32#"&'.%47>32#"&'&/H)V#DGE4tCVj>9\-=1/)#7)GG!!FI HH !GG # d  Nf9 1Y) B;7=;=<;>;==b)%2+!+)++0! +3/ֱ& &,+ 2, +@ +2@ +4+,&!999,9&99-9014>32!!!!!!#".%3267.#"bR51'   V' ?DBR@J`))`Hݤs =@D=B=B?{=@D= s T;*6=&+ 3.2+ 34;27& +7>/ֱ+ +1+ +88/?+1+&998  #7$9999.&#9997+1$949014>32>32!3267#"&'#".%32654&#"!.#"TBu?;jjr<F}A Pe@ByB'lqsllsqltZPVfu͕VXTTXMj'L{n)sA]OVVTt+byrN+A~++3)/#&:=@$3.14$2B/ֱ +/ , +7C+&999, 997 1=999901632 632#"&'467>32#"&'.%47>32#"&'&VWNM#LOJT5)I%#L'GG!!FI HH !GG  d M=<=;;><==h + 2/+ 9017>32"&/#"#^+T)/M#T#TRK%R  u4+ 3 /+99901>323267#".#".#qL'GFI'#>+!, #sL'IHH$':+1j-@+#V+-;)%Oj 47!!&j  1B==@B==j 47!!&j  1B==@B==j 47!!&j  1B==@B==  / / +0147!!&  1=BB;?@?  / / +0147!!&  1=BB;?@?f h+ +/ֱ ++6+ ..   ....@ 9 901>32#"&'f#N!!E##?!!E# f o+ +/ֱ+/+6=+ ..  ....@ 9901>32#"&f#E!!M##F!!?  f5 m /+/ֱ+/+6=+ ..  ....@ 9901>32#"&f#E!!M##F!!? f +3+ 2/ֱ ++++6+ ..  + ..   ........@01>32#"&'>32#"&'f#N!!E##?!!E##N!!E##?!!E#   f +3+ 2/ֱ+/++/+6=+ ..  =+ ..  ........@01>32#"&%>32#"&f#E!!M##F!!?#E!!M##F!!?    f5 / 3+2/ֱ+/++/+6=+ ..  =+ ..  ........@01>32#"&%>32#"&f#E!!M##F!!?#E!!M##F!!?   #5++++/ִ + ++014>32#".1Rp@?oT11To??qR1?oT11To??rQ22Qr9/M+. *, $3"+&"$$20/ֱ +  +( 1+01747632#"'&%47632#"'&%47632#"'& LJJM  NGLL ) LJJM  NGLL ) LJJM  NGLL JM NGLL LJJM NGLL LJJM NGLL LRN  /ִ + +01672 #"'R??KRO;PQJ@!  :9 ?N ! /ְ2 + +9017 672 #"?32.#"!!!!3267#".'#&9   ^˅b`)HnLBZLsG#jbϓ_ 5#+'55#qJ'=u<}},1P+,1uk9z='D}oh9&/733"+2+222+ 2:/ִ + +@ + +4+4*+$+;+6y+ .*#$y+ +*++* #9#$*+....#+...@ 9949*9$ 9& $990147!##"'#&>32>32#"&' #"&' #"&Z532-#71#/6-!14!s#^1.B7/11 n)i/{ i 331!33#*m$+3+3( 2/ +/&ְ2"2&" +@& +"+,+" 99 999  901467354>32.#"!#"'!#"'#.#H}hfR#HwC'N='JEDJJFHI13bh8#Dr/'F7- F F!5#`<r+63++3:22%/=/8ְ24*24!+>+!4/99 99:9%"9 901467354$!23267#"&5.#"3##"'#.#7^Zc;1%'!\'#E-T?'JFHI13 ?N+NO!  )F7-!51 F!5#E?+1833 + '32+-33C4;22F/Aְ2=2A= +@A +=:+26,263+/G+:= 9936'99/$!99?$9 !901467354632.#"!54>32.#"!#"'!#"'!#"'#.#ݴDf2 *.%!7)}G}ifR#HwC'N>&JFDIJEHIJFHI1' Jh4 &F7!3bh8#Dr/'F7- F F F!5#W2+JQ33' + 932 ++?33UFM22X/Sְ2O2OL+2H>2H5+"Y+LO 995HC99" 9U'*9 6901467354632.#"!54$!23267#"&5.#"3##"'!#"'#.#ݴDf2 *.%!7)}7_Zb<1%'!\'#F-T@&JEHIJFHI1' Jh4 &F7!3 ?N+TO"  )F7-!51 F F!53 _<c^c^}fxDdnfmhfgdfffJSFjOEVsR!hu`^Oz:X Xj?XhfKI3XhhfH3^(^!%NfOfdf-NTT~X+#Dt3tG}TT7R}Z rEV7~f~fdPRRjRNmfO?ff{fuj????KKKKZhhhhhh^^^^-N-N-N-N-N-NNT~X~X~X~Xtt3ttTTTTTTT}}}}VVzb$T}}??jjjjnfnfnf f f fR?9f3#l## #,,,,6bR$^p0  > F  : l  0  ^\d:vb:2h2Zf"24t@xH*t , f !!z!""""#n$$%*%\&4&'J''(.(Z))B))*P**+L++,",d,,-.L///0J01B12r23z34V45566t7788~89~:::;;<\<==>\>?@@AzBRC CDzDEzFFG,G~GHpIIJJK KLRLM*MNN|O*OPPQxR RRSBSBSBSBSBSBSBSBSBSBSBSBSXSnSSSTTlTU?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a bcdefghjikmlnoqprsutvwxzy{}|~    glyph1uni000Duni00A0uni00ADuni00B2uni00B3uni00B5uni00B9uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni202Funi205FEurouniE000uniFB01uniFB02uniFB03uniFB04KPXYF+X!YKRX!Y+\X E+D E++D EL++D E4++D E$++D E+D E+Fv+D E +Fv+D E +Fv+D E &+Fv+DY+Q=node-backoff-2.5.0/docs/public/fonts/aller-bold.woff000066400000000000000000001007341264656751200223160ustar00rootroot00000000000000wOFFFFTM^qGDEFIVGPOS9n)y,GSUB859EOS/2Y`xqcmapB*cvt p22HhfpgmeS/gaspXglyf`_headz16hheaz< $shmtxz\DXOloca|֚nͣ_| x[}\u?{ogӻc?ͮcQ.!q6ȁIJh YJ4T$WքRDzT#Bt墤TZ*2֡jEQGs~}oػAHۙ3{wChfG﹋<>n}: }s S7?~]9'-Cm8YךĕZ/گn*q8qy$?5}sf{+;!to>flw{޶]r_Wg\wpKWܱ]j؆#C ^ػOnM7mzh {'7_2b7غ}[߸rʏ]Е0⌌3Ҩ3:>:7ѳ??vثRƷm{`ۙm=2Wg㟝MxhG׎v~j;er]4]wݽ)ojjꎩ8A-@w'^z~HoÊlx-4ΟiExwnb Eݴ;nt?i.ե/,ᝒ2_`m,E mbV8xG"s7Kǵy^4]˒_c2 g(# خϲu*+֢5,,X1Fk}Ł1&ѸѸ>mdTSx~{-ˆT8SR1F7,`g#FI` KxeWxWxY+bt; ^Wx%W@-b@- \@bݦ7`}h ,4y'gZ?-%\) ks`x i%<]R`3t=K8 T$X֑@lo Ay8yM;6Rq+މ-tK~% &f,Y1Gd^4ւwm4ؗ2`YF^dx,(Q;l`.lGo`ndoҞnN9[hyNGXKh$4X\_V"|^]X= {{?3{czv`Q8ugÃ\ |VpaЇD9>*lG _! x7;|Vz Scܻ"xq6 V.UڦaQu,y** 赣 PtB] y-}QjUe>F8`Fx5utSq6hG-ۃ8ߏ8xK !OzV؞6AK|$7]lTcMIw}9ly}ϐ{ >4Wz"ǐ]룄>rz-s1}Qj7GߕExOI ۧ` l al*V/{f^-YWWtV2-FY,dB1X( ]҆qhoVҁ.Y4X2m96jϠ#$3SBIJ%\=gL?Px/r?vqYZY^cL"3QEdX(vj$s.lI6̑3svydXvؿL ]`b7qqc-2G2G?2:/68h@3 4W y mQcc'xAA6"s7E:̿{2GjSTPRMfwP,+32BO+:YKsidc^\g ma]V*Y7s '#j9^܂ٱcoLiibSI :u1) Z2O͈Z/~㉿Wo N.fooX8b~蝱Msl._w`7a%7o y} 3vm3vEhּQ /EX!~ov7-oN-i E\%M,*sz&RuǮvlg-#ϼ?帬p#w1W7j][+rd g%˗y֡I:p"rWlc%ƈp֝n1J?Qϫk"0~]3^~F̊5'%i-U~\;^f1HEϗXX}Zf򠞿\ ̾G;ƭ!ŗ^oi/Qat-yr|0 og2ѨGuuT䶘ƶ1$OKoӮ d#3OT]4ǧ5o[mnw V x8k8JEN G]5؃Q 8XٸclTM5#ry;F\qV{U;:tec[s_k w?N9p}{RTʆW׬Qc|iwbiy.# {XB bz'M5]FFax ᑭgBSv}f'*-l|XY3nxײM-5 p1[]jG|#č]H+x:'5(H\:XU@4Y*-X%zl}=[#c[r/$(xk#cMjCj9Ԋ1AXӓ9GNk.G{+Y4v0URGS/#d$*F,H îz,H#YfAiC tD#q"K'H22GfDã¹bKg1ш^}7;T51xN|Is".<=ɖblCȢ"[z80v嫙F6]9WQ9]jN:_5~P<ȼQio#~ ̷60pQHcLqK9yoQޥ~q^]D<STD;-e~2 ک GU*CH y$09~?/LO|v@47(P#,2j^Dh2w00]ё,Ư\- )˩ʯ5v:uSH3@:5?\*:TgW+S?=hRN=FdYirUB~nn'ƭMFg6(b1ƥGhd0utB>)/{OojD䴬tj]f~p6MsT7:9Ia|[waV(ycgd^7Gz^S^yvl _uY_r#~E,fҤL1ܘk..[#xc`fIf:՘QB3_dHcb```b`fQ, 0(D3@#oi Ǚ&XY)fe 5xc```f`F1, d21g f`:tGKADAJANAIAMA_J!^a,[U͠ Um WT/W?8`}v?`Ã?)ԅDF6F& uV6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?аȨظD3-^d+WZv 7oݲm=c(JIͼ[ IYC,brrjVjLsk%5N?t[p=gyľ̙;B* xu#!!'+DDx]QN[A  9{ Սbd;i7rq@D گH!H|B>!3k4;;sΙ3KʑwkS$6NH덌Zlfu є;j=o)M;Z ;4: !qKͺb00.?R4j˰Ѽ34@Skm!qK˦6$tUS]`*́Vy &ҷ$, b 9@HƼIJ;ㆵƑ6O'ӿZxڴx/<3dy,%˲,cYVy,)"˶lvEziRcB iH4Ms|Y4@ie4cgdA)l(4Kyx.˲K۬wnVsɲ~k4󞿿sQ 5HQ̴Q2M=yUDܓ0pIyW?ߓ~5f \l.~d_ORǮG_оJRN*STP2D A- Q.J$ySINQfѨ\9C$"\4[M$laɑ ĻΦiXMvC&󹑍Y^3:g<}*rQ) t[판;-5 d=P7Fĺ h0iͷvEO'L?DzYYqM)1*M GI_vnluDCp Zz|1Uzw$8qV64ïٛ8%1sx7jŮBBO5&|\0*ObVzAv[yօ$ Mr-.h`IN>l:ϦN/uN?@ eSFkpVK~Oٺ .L.\tf:6O~'ZK~ f+A|Px_C7ZdVnphcRl3R$.xlH&GB ŋ&]BCto]hm?gu:oR$=.!^,DZ.z^p!xreX;cZWJnN4koMңx}?qaS)jzU˜f.?@d-/4T >,J9iINBROUf4FIszx\miR,q )i`RY$%%v 7jl-VGBjȎ>:튭`DCL?kC#:[㡛4:1yM?v 9|;PP{hyow6<_ ?t0 wnMK SvYt&xM? 7)5Q#5ϿYeqSZ+ P@}ʷ/ Q`)kuA\y&բ95-e'lѠ<3UOyg:7@vd,%UkoB4 b/PrmTs۪5}o[2V5}L4,62ԸN&pVA6qǧDqLf}J/Ry/p7|ˏ?/7gv:<yPKK7(O"jz\7 u\'f$/8 @ [cAJTz=ޒ{9_ՃWpw8M=fK$^e<꾸n3EDY2̎cAn6]x ;F%R pPNmKM MM£IS v䩹<7Ov1ӻЏgZ?[D{fi/$[|npǼ>wszww@lw*PyUQbDɿkHG. h-aNkM"k] [5(ȀY(a% kn9c`"N̞'_?t:.ogtop_i/ڋrJG05(t1+41:cuJL<2e3t9:du'Oࢶΰfb wԋv/Jl;%«8lbԮo3`d(qK,[l?0\SVd_'(.Jƨ椪HΠ-w;^2\S=I)7M6|#2᥍s*&5w#Zfo Ki/>Wpc'O;ًt_1җp}%ĂFCU/:ܬ^G PbI^^DT(@ҙdfuz\ЀT'#(?C^oAass~=Ew>F?ŘdAsWyDӶ1y&wNO(h_2E@LCכg0CGlP:]C`z%`W{*N+5$0*rqҿ͎ o( xO\fIMSZP.(kus%obQ+R֢X Tbj{^ꧣ_ܱcff/0_x۟)>x|n{f󍟽dOPUPj j"ys5jVurQրNR (M y um'lӲ:C&h 7! Ѯ8c/^҆tx Eَ (ЛPM [U€eHfgt0jJ K `gJzH& ]dmC߳z6^joyp:sϟ7vo`/ylPVS( Qb(7lCT}Qe2j$]"5Z1-A:?mm8J~wMDCi->Lڊ֏7?OOnNi?5͆Cgo_WXÃ_>3}^9>, *٢ZT֍ZG/B9T1=mT܆uE@R`P.A/nP _OsF_dC ?,|nЙ86S` q&IBE"y#!܈&Vj"PP$@5ҒH,KUQ%MVՏ\勛<ܓxx_3}rf`K\[gS_L:&s#Jz._8<;fw k7EjJ \ l* 6"yMVVTճ59yAOVnR%Y%GS5EJ733uf0ZJF5M>oM]3S[۲},= tK<3?{zރGtЕ8UM0a%^k)%J8hjC7©̑}a!}&[yKdiRjo<%G Ze'X¶VÜj:+@uoa2#7Xe-`ʽpSRy X:`jy 4TSeo6;hmIqtоS۶w u2&i{tjjpzt-ܼ>;m!}TWщvv`t_ =^&51vOOLN*i^𹊎I5lFMZAjn)9Wu p!_ce-qp`[I R Y)X%ާ5Cɯ>7ESt-?*ֺG>3Y#[{AFh 3l=D]*^(^x{_{B8Z$JEõ !Շ8WBI]+샄Osƒ~Q mxzTs3xvdC1?JY?kR Bт_s 8|n.8LL|$\ܬ1(k4BPOn 5Vպ"CI Ik&ي~ގIR+uY{2yb"2;v{&w=n߿upˤ}y[Y=ў-\-UAU]^{Ʃ#㧟;8/|L#N[ O{/_??6CDKŰY-c5zc{o=Belb(d/U.FXbDkQ Ӂ1Pb8L/^~=9~u|4aX?Y[h_ZUV%HhC u;TRE+Uc_o2HUm&.iqRa/ar~2bYمE_ġpݛߞc0ýD=vKJş -ۦ(R'v<+w 7 ms񝞁m޺:A QA~5E_S[EpUFXjCj/ kS}>E˾}`\a֨hYm-B`PC'eJOrdK~ޣGk|zttj%|Np0p@~fڙf+}H#66?%`IƲ,\ku@b#4zYmpf lf!7A@˶}P`}?aDw#Ը. xTM6`F<%Ұ5N:;\SVj(ƉީV(qBb]h<#mbVFb`;Bϧ9_/37ΆRd'q@Icz AX" _jQF@Zz]?3:W|+:az19O#>a$a8mB8xvTr*T %} nsȃ1-$jɅ=%MQn-ОMb,'dO3' oZ i_4g( YKuq CYgH6Zd1+nfٹ p-7a}ojᄚsm/f6s1JKv -X`ylL*\'6Rއ*xP'v*qӺX,ݐ- S;9eˣ{ƾӯozwyh랱iЬw#G{GSxl=``@nTJS٘4%[Bjѝ8iy&Ӈ?}0?qpGs?O{G[7o1̼䦿xv?g3wڏ~3.Eq@2i*Bn9J'"j(APU`jjw 31NWWTNeݏl:Gg`d3{4NsWrGv6~& ycnWiYzE=&$uI?VZR⢜dDqեmrQ&5l*QvozLRnX*W&Q]A?(G@S?/LXHA6sGz}cC65~Q3>q-ӨG_NRd9_taCt` "h.`sKVel0>=*d9~iL2q!2-}Zֈ?8@bK1p|f%z=P%Z#\0*x?&]fJOtdy0YŻZT:5L(s R *!3",4R4;iX0)g3ImXc(*IB!׀˔۰{y5;Ú5]W~9е;iS-&/>Oѝ?7yc>=`:ߘs_-ޗ]d`_p%1?|湷J_Hx= @w5:̏je@e.U%9uOfd!UJސdh-͍6G's#7i\8>$y1G?ԫˑ-ʟ܈n^q2:8 A]ڳ}OfdxV;yz;?|5 Yv4aM.AR$;N*HyKˬ@|'G A7! )sQ'_ @ktJGO;l6%;NP ޚ(ש@CE"JV1wBbnP\,{ g2G60=Vj=}粟^QPkrKքE&JAtb Iʌvv\jhxs4.oE۲l%,u`q`U f; ĆNbJzpك}}:Rz{̫NL<̏?_=v xon*JIHV`Rݡ.Bi6E z%7FG= 5F= 7`##Wh# WI ˫r8F `1Xvk76}=:||=pvmt} `?Ttl1iYUS]:DNĪиO07/Kr-\&ͤj@δpja٭JS➨Y)}_f-c ;E6D⢷WPwj~=@mOD5FVmRAVl  6#RPSe\&&tRr-DT@UD pzOٺxzG&rQD# 8=R6u+ں1kgQb׾Ao$R&N҇5Xʉ*^ {M-q悱U$,zO)pp̳kZg+ ܤXTz*:7L{b{`86ħҭ}O|&o|O`p[«M>C'ybgLL: 8;$Q d|VMh|!!*Jދ}'1R\ @R)YS];ЋV'| D `MGT͟{zi}#\O5r!h?' ] yS(Lъ +q&V%*V99Ӱv,b--̎n_xm|We<z1d{vh=zK9&J93+ոKrƄK?6=O=֋Ůqk)3^=7 JRQ"OE |=]<>s`g͟ (nZ/75pxVnrexݤEiO#Tł@ץFq g~rB}Sm߸۳Qxq{.Zⲙdg=jJTͳ4RUCIrjl{~ˍ>~ݓُe37 h |y] `cHZx`<A<,cCu(_k@%{J*(om`M SȰU&xۗ{?\7/%Āza1`FG 693'QWyɃL) +8CNX+EMv;VVjl1+E8]:Ku8v4cMPl_$ǜ'芺< +&'5N.GuS)SgIQc$dv dcB(QC#&֧IiҁxMLr-h͸=>2>5BrKu`Riߣ[Fkh=3Lne;O~IvŻkWHց~O2f{N^zjC\AtpĄԥcU><4~d[WK yT~/J&*#@֫Cj(& ԝоuėquţJ`g;Jn{_%  {PoH=fcày k9+Y8e^puzb?`z̟bc??4;1Q {ѵ)#b6p%2$DIsSRDI`N& ꟢Uo m,{F7)ꝔۋoZc~93-V{?~T}4]]AQtwB#G%S>Aq}0-4vhD5 e6cGpf:wlzLd=%y6uu05>L&Gz6Bc8zS gٱ~hkq9Z(ϫ#jT"!I*B-ˋ/U8b(u3o<#$qy={^YS},*,QDn]KOawO/>XxI+l:? a.g1~:_dM.#>v=NzyR 1gaK!ǰmǩ!]4r"%9LjkԢ%cmu-BSp)]&ɋ`V_\br%f֜#amIJԷkbɞR ClZ`zɰ9oַג7V"R5iOHf =k[1+%^ױةE8[NGـ3z k,۲.)f?fؗS?KȭѾwm>w8vfp00e|Gr?%sƂ`< tҖ@s%q-hvkIubXMW/ͭ~0Mr=bKh\X?c=^TRpk/FH3ղ^|k^l_1kqW{li3t˻w\3g~7ѷ{Gcs[mޒ4b_H޳[;ɓef~;'n=!xdflgvYeNu9{`Ml1>OüFЦ\DˈU8a#rN ^hSلp\8!DKufR*Aꢞ(_ޞW '1ɃmNW==uKbo յlZmNjgw5#Fs u8}(1%Q9{$9*ct*qKtrc-}xِb+@SrLS1*<0ɼ0)ՔҼmy^sYgC>lnRP߼ jrOpCq;VgX L\bYP0ZZTM>Ni}v-jK?*i ux騹vcI$Hq󔻿u>{}F-wn2zMp4:g  I]O(~ξqkO\[sJq&Yjy ӄ_ym* D{iv0h_#{'9}Ӊ(vq C#'Ԟ]c]c}-%XMEhѨYrHyM+P쵁k*{KR+dMX.fi>q/骅;=c>5r#<:c6 U,pawDB(6Fy@$=ZR-@jINVg:\ wh1^G|88=3<EVẄ́χqwί{}̡=sv`W\7ܙZjEõzil+H/7V߻hb :Zg i-Q` )xJr;()OوsZwTBxEP<܇J?`84qy&yfzE,8=7Ozm<[,,R=2h68SsX!Jj@Lj?ԏQ 8SB8Si(҄/pf$J-O\~lp1yШFHos8}g/99Mc }~y hP 9LbG Z>h ihfh}H瑇KۊT|S!O cjUpE5*ϛg5&' FrFu%+Ŷsu7'b}Wܟ(M} յQFsknZŗ_);EIbUܹ+h"ΨwJI|Q蓜V-$Oi--t@kwu c3nTgV[9ؖ?!C۾:5mжMM}u[?Fs8̗SK{{R^)x"U\FF1e76/uO's}h4S(gS(m"2(U}!>2k%Y!AZ 8xcRFʴ\ZsPx[Hi"7Yq,yp\Ss|8JUbwNi}1=W+ GB_E?<8Obo:P^Y> SB`bk5L?A~^=B\-\&ɏNK} U1 +=PgrlK#3p{M|*+pWg X7D+p5]U͚k`mZA|-D~*Fr*ME"c7Tk70aSL<&9ʛp_DΩaAġ!R\X:qTݵAU tQt mCō7AhcNY8JJP3)9p.*GDe#sV2]_:DPdznVKnT)8Ր~Z)8f` ,?CI C@ƳGf6ܾexbMBpXu6(6/oKVO K6RP/\@Y δK&4/NVʓU'Vˣd'([ӆVWwe6 _+fJ~\Bs|i0Khi0եY^g4t.)xޗiɮ0(~!$%z@**v)[rvN9"aR0`y.B ,aUW@pH눒Y%lN7{t:mWBȷ [^Ʋ } S^fXsSKQ^ \sݩr./=df.ܕ9xE/ڗl^sݧ}L6K녻rY_ _\a+4jr#㡁vV]{N:kK],zRi۹3Eƃd({s]z{ a2ǜ=fK6:}aYR2jV/*F1rsl|v*w+BnT['?av2j|BPjf*lps!nbXÝ{%~RY,$;fمS. |L[fSvyH-7בqK :8 6B0;w? Я/'F33{9P$zi4 K]'RCt Gcqp6OCy6xE)!Sq0:9R3#*O3@AEVC!Dy& >ΏJCy~TE-Nba&&DJK*AvJ6_`6[ml}hfH:Zk@uVoT5MЕxuh7uMKMDu1\K7duG3x9V;vU}iUF矽ppnC>QZQzFz{iRte_aUDg+{jv׭ [ae뭬ۖKR6/m5_.-*74;R]ZmGIU$nc^2 pgVdr>]I$MUb՟Y$Fb$|CUAUI {k-!Q^ v@ҵ!l!9u]o|>BX\Q+_y%O٩:D9D ".k 8*SLE䗏6.u6آmBiN7zZm#=^^|vl%L˻([-. f/M@Y<(Ig;V[v霾Hr+ON8Nq]"YEh"FY~S-FHHY:Y@[( j+Tbyy+cJjGu ܅p!CQW.id?5H5xz/xR J'"d_Zd^kU7m`Mûpá˫5:TK[FgUTL6zH9_^2-r<҉t#ihD詜 YF,.β;Wd^GGv.ɸNZ;̳Φ6`+(SӁGRd ׼v$mkw^;?[a,J27 g|M647a*1OTն <3?U6IV.\w"ɫLj؋RStWƾUrYlmkZ\'+VoN_Պ/]%N*K/ڼĦkڢ<'  ; lfawc7ӿ.>} *AIk ^)"Ӧsc̓wLdp@zI~&EJǡ[1dG[;heqrAϚp:ᬧ,odMKR뮉>4}Ԫ؛uya]I<˾|]XTBpcpYiVu k/V"Yx1/d(x돒xFrUQR?9ŸnUJhWf(:k?8UAJm%:\]`=pG׃8Ѓ&<5R?(.㞽<9捥J=}Cıi-4Ym]İT,M[i}YilxHJ_t ŅP !rIє3~Q;_MvAnCUʙ"u!E*ScpdM6y i/J~ FH}jCZ.u{D xŃ7 {B_лZ؛oiwnԼ.G]Pv4;9Zj=)1}PDWgt⏷ pj_EPdKH 2&\A,7gI5F̅:mcrkZƯ^GWVgy5κlr+OUFslSw}_^O=^?)W|*U)9Yo0.N%^[Jcǯ:l@LQ봭" !a&nDbRCy\_JyzB8{ݻK&cd)rlxN|%l My+p> NoLmaw)iIIJ&`fduo0GFZ,8/*3sf;HVYy=GA-wT}0¯d S#5}){z߾g؅;Nb̌>9~򳓏MGjafP }ؾ r8P(6Jo2>@f"Sh=P0 57T^KUK;^p<8E@A} b*`id]R@Po0i_0ܗ"ݽ&!WOLYɕ Wvh3Hh| R>^X;:)#=uc居7m۾R@&wN궊^b:el1b(A28!10A56G+aLr*.]vsWc5Ҙ(ޅUֿb/^ilsD\$Ȁ2ڑ oĵ74șĴםLY:b!Թ11B^BU qQjU+$0N$GG^ /qׄ 3^)űWpΩpR_Y:z߷8:6PXn>yzWxjF|5~ :kGJsrgr@y ;6^Me4K(ڛy3l>޷/ޫ} &PYzޗw((̫߁ZwDxJB ti@ Yn}' Cl0.b97sT7)CkTtkHd;'NL"S/OY bKɲ@{#řډڙHT}T#C\-fL8GT !x!HŬd*&L .Ј(  I+wѫJas(|WWQ_w; j.n~Pg_$7n߱ lj:Ӣq+ ' Y!6l:5/6GxCFJoفaQZGښkԤ T+PߏE!Ƶ*Z]\AP_,F$&L2n̜膓^ ]ԬHG Πہ3.:́9d+98; E /@n?| -?+o`d=5'3k68g3tu^4ۖ\jT/~LAH8Yt/6QBeA>-bVQiv; h]]0[!PQr;rXPMC*;lr2'N9Ό׳V%2e09 u1g zƧ˟Ag3;Y,f[*(eYg*[dVrNeWx V۰X>c9ȱ8&T1`Y͒ /C=]x`(43L7ͤ)6FC4S-b`f1! Ɯo(iu+c㨝8Z驭ʿF5RȗojA#q*S #$Il!Hu5r΄)`Bd=X*B0dz7O]~ɪ8I۳{m$)ɫ5'&P(yf!7nA{\,iIbcm50v?^70N!uFs?>Oo3s|v? D].PBFQϵGu6Hڝv4z(AE:-t_@aU#o 5IPe1(refHfL lW qň+v ֬eIQ-. U*KyC:vlN>9?D*0#K<Ǿb{ #DJ': T7'>WٻAðȽ1Va#1(H[EМ(a{\&A s3Z)Aے`f#MPbtKy]owh^˥{Tbf~UCca95bރ{%y]n" >1i$#FF9hcC?z?(0z/˘`r!Ȗ ̈́_%/ŔanQӯiQބBRfS "eDJ0F>3.wH1"BRnJGMhx;J ~m ML[wy W~^j &n<'߹yp 86-KD}b':~7҉`(\%/‰ |=~ rcJ$n2MZe[ ށK>.Oځ< hȍ<UnE['5OU0t3v0B1Ak`^4n Q^Q<lc߇ ^(I{b{_+!xc`d``iym2s0V?&!Z:&(+e xc`d``?G+8"('xm?hSQƿ{{C(┡蒥_!JD³`ۥB(oXk"DRPDJ"IACݗTC\=saBB3 &Fn;GmS[nJaF{'igkI$9pvE6܅9&(y<|7YbW_ J<x"MesQ7>Ӎ3Tozm< C9AUo"#4bRƀ,&Wͺ\FQ͡ Yd*\gt?{[BZwPt9A0_OS5|QoS-Nx|FM ]ڷia߼1FfgwR BQWǑerIa/|@ 5Ӌc?^6VCp Ѓ5 z bu-a'9Qa~6n^h8?/s X^xH5xS'||xi|gy+|+YD,:Zg) h$2"啬լe W8D3X,x[K$H$IHIdHdI68%.s \[9!9J$_ Pmjp]PӴ STP:.eyFdP+ CT%Re>꺽&*f|o8TVx>yGDCP:xuc/}ش#7Dzo 2"e7iD0l`Vp]us 6@9@ 䰪@889\w1pg`Vr\p.˭Fn!c4Q=node-backoff-2.5.0/docs/public/fonts/aller-light.eot000066400000000000000000000715051264656751200223360ustar00rootroot00000000000000EskrLP[ P z`Aller LightRegularVersion 1.00&Aller Light RegularBSGP$KKRxZgicyR&c4o4Fw[ HmVbN CzqڮNZR!AVښsL%ؿ.&Biȩo&픇_ $iAܖr,"Ȍ!"}?-DDJ/YqiI %>.=`5J:ꡂhU_0,H4 <&/k4qE,P f]ʿs14·?|A(A>O5.q:xCte i-٩"0PS3sxtz&="F cH^m7űH5_Ȁx,s׾1<loZz>jS缳Zh260j~QScOz/}i+Φ/ez]WW>4C.$r!;b#!#R܄C{䱎6Q3hKz1l)]rs>zXDCi Q>C;L5+U3-&0$ز@<2'r̞gM`?! g>O+^T杝?H!_ԃ5T;KIf@J"Vۆ ɠوR(7aw><҂vIp<."1CM !\8a(͎aŨ1di3pC,Q7&X9@`+kNE O,Jd˄OK"%>G ]2+@sH܂mb2Aט8YAd MArG#q/nԶm!'i ('$9hwBP`>(Hk"RNJWqR00rsG&B990P9#ڑ-5aY!aҦU6y₶l1]و|2Y[ʡ+'g 9"izhR{g`CO4!vV1 g*adn\cv=UcNp.a0Ձ F L=l [9fo~_Ҿ6Wʷx3י%G=q 8,p<T9k4.{-=7mGl#A ;mѿɪl%6ASqe3[TsK."]x$o闄?JFĺ3MIZ{I/g1#A5r7-bצc#`XϞR>9&2$g'\%߰A37+b>FI7J03fpg|Pۿ=-uz4LLg iQU Jߘ 5%R(J+:*"oTSդbh"(+ȇl4HzE󼏴׶F;C6V7?ܸU{{ՙ` 0*ѹg/d#!zT4U!S}(vUB`|Y2F+ "htX5s<4_>> T|#~ʂ%v@ygr󢙜*AQQfY ?JpM7iWV}:Z2L_5_[ӜJJJ NvNw R]Is ߲(b+EXcv\-aJ@\"n5u:SoWwSu:/\"t'~F`wDIƥ @Q33r#f51h^wLb3#/3Ff]!jj4Af%˙:9CDkwj8u9nYOW[}Xv.o@B 8˙ 0JtJpXV6(F:czygC8(DP"(.F"z:%Ч Soxn2>`ϮLd_ H4aF0"a^@ų=L k_B.s/Fr;w,כYۣ-j[۵ fjPu3b jwxݧE,YA(mA~/"TJzf`"`Q/ ̄?4ѕP!UF&nTCg@ڔ(mqBԉľAݕYU,0A݄K)O>i[z}\tO_W\>}F 'pܹ8csE$,ς5Z&NN=X6#_ch)*Z".t.-yʮ7B/fHيoh \i&AXUbG$1#28) I H2nnqͤ0ReJL< gʓ#R7%6aa&!IXx${J|#G~y  4!'e PrBPB5șuV= Ϸ; `n7"E8[XfV .X\ˎ\lռ],_L[V2ĊS1Jd4@M PM@ԨQDa5/G!pL#: wW|OVD |LG<@l6 @H BZz0nu sȒA-кꊣx,َww* ji2`EHp}2 ލ05WR:,Oi&6HB6lHTj)Vƛ%L+uM{D9:#tNNȄ]XM4M*XvIW6&Sl)߫8;$ixdf~6o6 TQ)@&BL#$;D V͈c!/hF\tqJ*I`-uJp43`\iAB3ȰQ"nx%h2$H ʳ@6ȚqjBC*8z8]bAay4V2=I]XaCYMNpgjIL KTt7- '*'"h-K!I_a d%9+1 Fn:f`[V1ij u/@ I* nXŐY X| P 9ZPv =8e.Bd`uB0doN#[l3 YF$B %!2"aV 2܇XYr5zVf.ngdhB^l"+MJ&4Pqv49\b:R"_ N4QM%.N;O9<-J|%9.n@(%yN,B; TH`JLI10ubd0֎ZVpXFd)")7 WWMmm(żL 7MF nיGOk̽G" mi4)ȗn0E nw$Xi#b@Zkr"/N7Ŗx#;QKZL;UY@c.$D0d @Ѻ1dciPq b/.q% Wao!B`4uDW: !MO z?8QPQ P/*=W>kUr3|#Au1QZją^)8 tMDf̥fSd gUbH: LgJ t'>r[>M3 )-78Bwa>^BR~Bk=* ,IOR\ @dAb3WvUwl&Mg%6t)r?PdŗK̥_w5F`sAs|fIY[;x[z8;lnׄXi \UgcF׷h&ÙW0񁊄fx+ 4UA(R_M4'i 4w$&sG!, "^@)-`x.&.P '#f0V /؛ټg/tdw r{H\ -3Lg$$b,+RD)ZEj ۤYe\W`r n-ڔK~9Tc P*` &2S}eb-q#<|l|G;M@ZQhMDMʥe lPViLn@٢-]\Ml PYdM,f9 % 3V(T e u?-;cFHjxU^Fig?E66oA]5{KCmF5fC#T7[v+cl/>߰h&Cpg@!wX3?];@e߹b &㼛 [Y={N#]3t۴|"0qI}@ _0BqE8`WHos쏺 yC~Y*ꈲ4n2kd*8!P,pp1TIۣ6T5 6*%!RTTfx1 w˦8/Ɨ,՘@T@㚸!y묥^;2N%3ߠ" >%f^R5Tn0A^' NsCHqcD09%w+&TQ,eωᎥ-dy&'v~ @͝돼 |O]dݿ!^5)7U)|ih$l6 MZѨZṚ Eqoq&lye)D/,,'Ok%٭`x0aYb~$f5M .6"#r4N^Lےwzj+ ;#)lֵ`dࢃqRBHVNN$#])Fo`6C*^N?S~\aCc@šu x]`=t{#gDy'#b坢 :u Dx R<n!蔄Ɂ1R"ȞapÝY(v[ J( G }v <p)lO:tijHg]u" )osNA (88y9=h.4Õ/|SuH $$%$xQtTOiw  8項G=@HtJFJ@czܗȒs ֮[ar?LaXOx`C$aYZ)LNԄukBh-cd$h91_/mXNU~R%*ճ-8ouxTUptr2Vax)jocy}GnPpbmÕ31oZn y_,g" MuvrixpR`%[Z%a.qVpW$y~ttةmַ]ݲ|yăQD&^ ?RGsB!BPERljBFBbhMpiZUؾ &Sr_|Ʊ/.C4Ga"ih?͝]]& $bQÕDn"cMΈ޺T<#M_|1B{>!TED踒+Cgux;v.q{[x'>ZMCyn1-voGO&R:,QI瞌TayDZU400E>jܓ}Aީo&)3_]29yK~TfsT"O Y2dSd7.n4M&h1`jil~cP'0"g_ V'ffri Ѐts6$yF93,C_?YNI<{:KGEc|ˣ>Z oA3Tʊ M"2P ?$հsM}Ũb dԄFVzn3ͳ!}Q6?QhW˖pyD#@]/K7అ<1@2;: ^>)B ?8J ^!6!ZY0.[' D*^oGB9@(->8@ۙd}6KB-@@ɛq4@ RhaYۺ!t*/v$*m4 A,%9 U}b Ŝ$b3ŐA a^]C9Nc0Ͷ~L=3&aIQFhx>R9;YmV5m "_I؎e.31o7EK(BJT 23Cz OtC1_ln )vRb#ϗG0}谱5LAB 1ٍ %gӹbc=&W8N@㵝,j"/h㡕a`i'F%"v^i|CC4JQ`'ZA*Y잮Qh꼀 }XsA"g1kaq&%( dJ74Z{Bw]U8\ "$`G,F$8UOr(4C|,^$z2 =%)aF/Ձ _QHCʟdU1UHSHSKʤth06dlzI@1HqSu&3dnj X2,sHHZa0a?PBzTܐ!;Nڋ iL.+MͲbi_]=BU2ʼn+-UtdSpāM-0|ȿ.zݜ, .-$w!wRqy4Mڷܿt>|, :i $@#Pu 1q";SiEeYڠIxt>H 0ed5L9]KaWZ>->MLa\̂ a[ 缵M8jk$f N48NMgTV"ڄv_gy9*'0M౑0ms! b),4N9n{05bM1a]ZX-nk쫰֞/e`&7G1+Ә 0lKk-mNyaA"hg_#B>`a;LNO)9~jvFrl>gYa}aQ(MZ,joQ2U0sPl#[ăUc<8xչ"Ad#LEc$a(' 0o!,& z2Ƌ QaݸȢ~DC 82lWDT!u:c׀1Z 0*rCSs_s츰J{šW!R$?Zd]#<]Bk}c#/;_f5|KoBb+"ؠ魆I` |( iK~,dZ=qLH-P"H~uXb: nz{=6X9G]9@(?Hr[ڿS5~U$ieJ4)T&$R`FGO/m7CڶgZ+hrz'L'8j17]7[ﳍ9H֔HÄCX@rn'S; WM=@B2© #ܩPfW%'Ҳ8^+u6phVedRU-rCӥjk/ȳC;7˜Jw!!׽ҥEȊh~D}rT"ȇw 8&B_LSˣzVLtu2kdu q18;k)֒qtuGlE~ 2zG  +* ".#\i%WCh,,0>J݆REV:~3 }& "i"#W!.!kh9s6#Fmbb*I$TlAS/\;8ZEclIc Hgڨ pLMMVM95W݅šAR[-ʷg%i d ԑ3 x1f4E^6BI % YSӰ)` 27@ &X}ifh7uUҞnDW_FQMp B',Bf?/4\j?Jz1«t=.籍{LB8$?O9M94!SK`TAP[oXK@Z:>='س_TZLGIJ IXU hl,lN!̱~r~F 򐫉8_ iD\ IhiV [/k;E`ov 3![rBC 7wXKȔKbD'J_VR?MNXNq*cVh3 iJbI<,U hF%v%z٪ۣ# O'@^@ $Ϟj*ow8" q,q4d@b;(9cJRJY& N"ei+Sxb~rzD~GapP@e rcf3Z- RJ{17:r|Lȝe`a"Ӫ2~+gU `3^9Ǐ4T]nrkR#_:9x\qE2<Η)7;H ]c0<4B-GeYSWvpy?Rv G))Lo Gk"Pw)̺0EH!0'~ OBؕ}[@8}ON T$-Aʆn $ߡH:3XQ諍qẃvdЄ-tAkݵ<򎌱]8bX5 mTqL:9sӍC#>> ]iA` a?rL1  Xw<:eOx3S7$UKmۃU!_fAB1hY!Ti|,nZd[7Q"!vE"r MQE%Z HȮHZBUh)~d,.EpVc\mqBWrL")+0->\0*Z _c=5 YM"6 ;Du: L@KX 8(p, h0)Z 0kѮUlCtMhZqnJeF$1|Kc0Dپ(an1[i,]3t~#7Bŗ6+5FȂU=Pgj[&c_sx.?x'F{  8RF G2r5aO(q&RXqXj(l20ry3=P3-p3γ0Iku4ƺ C'2(;/xS8&̧hnbSdrSiXqK>M 8eFeSJr-nHC^/b(^\[j%v6DWdJ6-)]QF08ʄhzGd_PqMQ[`Ì䍷Xa#^+5l *0Y7p^lg!%loRpc,T$`(1 3_랚: kFXBkА8Q* bamGd2!29:Aexak-u2}*_xJͧ/Pj^Q%vȀ8.rOs <ӖǢj*RMqdEuf6@X(L!];Ny'ddс̄-{:xu,-tU<._!o 6>In ZK#nM!ZӁ% .ə`h I&UHB% KytWtLU?idGa XvD 4H%Ɓ-N<Q֋`ky'PzQ#3 %BG4vEtAyOU58< e𖔩 E| ~Z04QD jiaXlzko3r9)`Q"ȍݲ3HB4oߊ)WɪMưHw! oݭUʾ@aXȬ(;s5.D#%R$ nhpj…x²X"P%WA (.M2n{6wԖPF2G2vq EaY qfj` ⣎Qxr鶶Nsaf7d ȕXhm$Gu]QX7Mw Q3oK嫗,!k`@a!}C`P7K GFlC_zKh t9$F^nͩߥ+l<:baa ?(UXlKDDׂj4Hc$2ОBUr'@!ā.S\콳RGAoUhAh8 "*O}Gn>sÜ ڊQ i*/:p2@kfh$l1F]O?+ z)|Xʿ1QɌGHj- qDĄ`d,*B,% $FCҕN`;$Yڕ)k lm T)QLS"XNoWĮ d>*J I.x4ʼn&&r23bchp.06,yL'滬-1ܘ$<&<=\4zY<RdaM-eT04Z|w :mDߴFA?xJ@]4Ҷi;SmLB$8:XS;0*rqCw }`5xmC"?&@@6{% -0=\+ HB@ђ r)=,fV;uDWJAii۸3U(+V^!_EW/.`)vl'1ek h/]p*pg)-)aE4*M+favCEFm*.ca}ETF5c؍OH=*AVH0\|aNlu"^o`ZDZ>J螩](2[1Ng kro.&25}MwlZ1H6`˿1˶Cx iw0Q7|CC8uo=4T?Ѐru $YH.=HG){@DF])awb]InHAc@Еl5S"T&%4h#3g6"CF $*̝:fFڕf\\Pt҄8%ܵ$yFBww6e#!R=jwv,"uXw`skAvr7Sዳg'@+N74C*VYQVVLQ  BpPV<=PwiPg3lTZ?NZdc6P0zP'v/⹡(@yl#j}lž*[5-Aπ,SxG3Qa+0a]'Ic. ğa)MBaOƧҲU45Vg3QΉW,|y$( ,@>?:ڭD13I&w+m1?QT8$ۡJ dCnHF*yD~R@l TbT1_itJ'=er/,@`оAb5G$ "ګtFlgD#h ˄3[l!&Ky)ic7.3Y"rd+-0, E-#v%ЗDM¾2y"값l!]֦N2J#ș1iRLv'^ .h*YK?H(X%7xN^r EzRCv>B@id0` l"!IWa\0ncںt!&sWU 8}竱|`OK=]׵.åjb.-`نd" '%@|Zfb-ز)%%S"%k.H46_K1=l[*%A,^q{'!unpb4ONJ-O 9)1ZM~1ڍKhi34`YjtijD >*3WvKnGB4eKColfj}~\s9n֯i8t9FAd+c0'< ?A&bsXm*-ˀf/•bytX4(OiWWRcɽ04eSe;jFvSL׳K0#z6kݎA%d20'0I~ M'adVlOS/)Q0 ;jASe@FD'+@rPZMj S 0B՞3pL_eAA  kbоq0a{YQ]|^M쓤]6hM Sz16bbbABiqdTڴd0L;EB1(V 74ij ,3IOBppq6|POهSe 4ż:beK-ԘK3Y0f3x WVژ*" `Q"'~!Vw$SlE[K'D tT),-f-oҙ78,q̦bC^@Njt|6ݖtg@ O ,pFhFWx_NAl&{d7#>|3V0Ntp+v(.dCih.S0QEbS9AOU"vƫ lHc(J)~I k&LF`iГ٫t!b^1K%"l ̝c&~B)!0v>Y/ddq@r$7໾xuz%TlC"F>HCx"]@'B̐YJbv❏"q ڤ&DDhGY+>Izm҆m>k%d\D' BN%h,T([SK#!BBG#B֟t*|L|;gni!pt;0|~MД|rb`ȁL }]2iX0~n^(PIeB$ṷـZ7rfWX^49'2 (S40BD- H-@*qEe GcٓGVDhUU@N#)Tc<!ЧA5iငS 7yeNE:+o?*AN%&ګUO8TfTsStMM&Eķ%BKbQ]lda9d?O,l=+m^yaH\VX &$ԥ?M"9;<B;Rj0E1ugyg}=)s[9+$$^2J`oJJ]ܟ]bZ#O~FzHk\!i^&#(n07;~;5LL^X63 OJF-eS>\ajZd#W>Icٔ2 `%"8N3$۟gA0&4p8F_ ǑD0F8S*-py&h\gN 0 ^`D顽CjlBPα&r<ٲ#3lskŘ됭/RBTOVH)skI:GBùi̵әL,b˜*]EdEzS&-#Ȣ ʔb/( y)bJX j6z4ZJݕ".V#)Қ@K2lTwe$M1bY|Ood$.EқDPV7xs 0y:()5z搥`a4󬃪R^}Ft Z6Յwp#S&؜1'zP?NH::D":j+e|4pn`׻CQqx恶6h4HSX3j!:/~J{M?w- [|  EƓHӸݠ X\ɺq)of3B0]E"߁<=ںŽ.Ex \{ؓi4)q AB*i 2Z^]rFFaX|f7|=3h(4{RB# >%p&l` :>=r,3G(Q$ A Ւ$qt`<6unEB ؀,No|^Y ϱ`'a3p8̂LhDq # 9odZ* (hحSvƆ *Jټ'} RS~F4AY8Vʷ RJ*1Uf#fU5x@;h΄}S]wn<ݕ3 0@΢5珹P \0̕iљ  ^}<+*p (2"&8WV%}$1S? 'C?xr [| he)<4n |AByTA ҄RYQ2n5_r3Qdpz> ^E'JFt&O@oxSWԅ ػhǮ(wYuҎ5qk_3#ёTaT8Fq$?2R؁etszp9A`^^e *\eCk+M?ߢ~&? j9ssP}<)!\"k%0z[Ow3R~|h1v`>)*O,H RYceQy GuIlk Wʢo#(!1u`%L>r)\tH#9 58,f`O؁L8ֶqb`4&Gӈ-(ǫ+dknt5);U ee_ex0dyZ.''n!149r`Q6UybV2Up% 'P!Ct I.8R0GhL^KBPPb92Ĝe`Y,'O~;咃8Q3 [k+'P?txLApF֊VƋn94>dd7%J0"o'𦍏=j.; vjI9UA?edC AjH<},C]%<ĭ!@r!@3Q.4^(k.6+A!7+9"zhĪ:< d9L^EGھTSJbG(~~s0&FLhiA)a|:a1ۺBoQ>)$S\u4XU (($ mkicGb(&;[Y7cƠ^d9B.1Yʹ(\(hH#)qyjXt&bZ`M'BӋ4$U<;OV8jwUYJ_1b{qҡRJ7Û,?rE)P:f M>!Z,j#KW -B2ju@j[9\`$lYR3aF,JH\: ;A' ize<,49P8ܓlpP䡟L@B[c*"OZ) ΝXãh*V}4xR0WYBv1@ra.C9y@;EhꑳL5Fqƪ[1@v\]M8 "tgm(T"8+@٣ O7)o sۏG0Fϕ\hF׷f:npk>ha#?@+zDò6 c῕,tnDF L9{F&"Ka ~{ q1|.<)X RT$/1]" +`l= "ˑ˼ZCXap57,<,2Glhe"]P /^{3zl32dlLkDtH L&ƃiݪP;p̥[I+Ɛj(,SO| 6V1M~85HW⩁*C) H4E`s;`L8ph^'4`:\$\P*`h#`ApA&Å3hL@^NAL,A-q#`hֆ-߂dUQ xF/a6sZ57̶=uGaĪ0cİ60MHm;ځaZ7>ES?xWCp+u.yKp\&+hT& f&mz"m-Jw D>0Ƅɪ$&h%̲@+J<7 ̐9AaΥb,Vl zo1:-S5C5-f$>OcwC9Wv>qp\TkCt^LeIcS1G1t=Y΋*? ^y r^[.*{ޘ< 't_Ib C RgSC}A`MH`]]`?iw<өNdѬYaLH= O2%s / rdOb62=ʢPF /ϑ_bA9ZQSsXD(ZD蕹3%CߪwXQɼ9GI 2.?^ƈI $r@vY0 -c*X"21Dnz绊"Bg?!ֵ3(X Ar,p,~=W k<0P2#U.`~^oNHx#ةȲ[ʝ" w lzc K |sNByy?+hJJY<nk9bߙXDH7Rm# Fl΁5BfPjb܄ #Bn'IཌྷUbt_1#VϿL[EiNoMNNl'(_D[8)L5 '2MR\7WeH,DU7!Κw>L&I&TpD+A :"ĨlT9[ cN|*bTwj'f.AOv%yN>8AHcH 6rv6_;FmeԙҜ0ɼ2]AЂW˜˲Е# UKB\rW^dL聘 !B0G\,frRcoڭ˞Ix._,;.#XT:Aд/3z ` LנH!G~ܰ(g`*Xm2'CNo1- #50L$Y$`QzzDCYi]+iZllퟀL+sYLAstޚv?,Og7V!:@e&'Ҍ6M7LY`R`iVX _yY״aٜ,6k2w xsHpyfL}&<,oq0˯MMȅn{ƭc/5u2Hmdi`5Lt~*(nD@B\([50Qf=β#{Vdp"; 5.9gdi.I '  ֤N,ԆKkp6=ErNd}Ay&/Hl@CƑ1^ǎ֖"Khv89i kEcV*6SAdR(i0 X 䄩J66L ="뇩LaI eMMOV^CD ࡁ5~-,RAMaRPd 'y_R|xJ%:L3G N621N*a@H6(Fnn\dm[.avDmZ/@ 3~F$ԏ@DY DxH-QN.tGcM&DM'FŘ~`gF<)̖VJ=-Ea?ʒG(Qkk(V`=U~HݵXy 0+ݹ71ۗᯌx im v﷉`1iuKrpR󓸅z1?pڄ#GbUz/ġl(GJ/;\2˝hؐk<♗&D)0S[;H: -^M>Ms88 "T"µojwt%N @hд+'5=bA]W/ܲQj;mԚ*Ie Iv -?A+C~8EA7oYYN8Q>>uVGؼIbBGi4vX[;$P\Hﮇl} ?gM0L(rV*!qF5lpȾ\A*$zaH (1T׶/e&/Z[@ `JMXdKIp^j-~w(.XP;IaсniB !͸CټJqb+fD$ fw)kώ'JE1$<,tf$%-x/9?>1<9H>'+҇"  "  M# ,2U5w/)@,OF Btc0"h?X/pX2IQ04J OI:YER3#D= ySt(?hi{I`>5t JJ!NHI;yT_ތMWVKsCl rNXт }Վcvc2QT|rqAXaR]>?DTX#ɳxH51:gRUa)Ȃ1tۚPgY@?7 DhhAU8b_ JE.PWň|T9zb4){$[ 6\tI|Q #NfH1=R+БQY( ksjcaR_1HNj;>t1LNįP, 0~- jaWHWEJ@L:D4WAlZeMÇ3؈Gޕȇ\4*XORYt$ZȍiKɀ FDq`Q(SH`DՁF&DdZ?Lt"D("uH'XCBRT4vnz#P2 +o ZƍȌт (5F;TlxIDE'H;utF  [ "0>1]ڼKl?xfh8H M A3Ĥ,cLxGhg%~3ˊ뵞OqBn '2w&iR@v%A~.y"*cɘ@7JR̈[xXuks>CN*qf}S PMFj?^`d*zvAdݝt. " M*vכqmX Dq@ 2 tٙ> Cǃi ]vWd'l@6V,w3:/K|5e6VmϞmx-~I fn+"&&**2244DDFFGGHHII RR TT VV WW XXYYZZ\\mm   &>F""$$--7799::;; << == ?? JJ }} '~08 FFGGHHRRTT(Lz53!##$$66==DDFFGG HH JJ PP QQ RRSSTTUUVVYYZZ]]  )j"*  ""77<<LLMM*( -DL &&**2244FFGGHHRR TT XX YY ZZ \\mm  . JR3y=H\3\)\ ""&&**2244778899 :: << ?? LL YYZZ\\  />F""$$--7799::;; << == ?? JJ }} 2BJ)  $$--;;==DDFF GG HH JJ RR TTmm  34<f""$$7799::;;<< == ?? JJ MM }} 46>&&**224477<<FFGGHH RR TT    5H$,   666Cqqqqq\qqq\q3qq39##$$&&**2244 66 DD FF GG HHIIJJPPQQRRSSTTUUVVWWXXYYZZ[[\\]]mm$}}% !##$%7>"88\q{. ##$$&&**2244 66 DD FF GG HHJJPPQQRRSSTTUUVVWWXX]]mm}} 9xv~3\H)##$$&&**2244DD FF GG HH JJ PPQQRRSSTTUUVV]]mm :<D &&**2244FFGGHHRR TT mm   ;C\qq\\\\\\f\H\ffff8 ##$$&&**22 44 66 DD FF GGHHIIJJPPQQRRSSTTUUVVWWXXYYZZ[[\\]]mm$}}%  ! " $%<@H&&**2244DDFFGGHHRR TT WW YY mm  =DL\3""$$--667799:: ;; << == ?? DDJJ]]  b (q ""??YYZZDD.6f ""??IIJJYYZZ[[ \\ ]] }} E"* FFGGHHRRTTmmF.6f ""??IIJJYYZZ[[ \\ ]] }} H>F=3R==R"  ""??@@DDFF GG HH JJ RR TTVV]]``mm  I&. 5R FFGGHHMMRRTT Jb (q ""??YYZZK$, DDFFGGHHIIJJRRTT N(YOb (q ""??YYZZPb (q ""??YYZZQ.6f ""??IIJJYYZZ[[ \\ ]] }} R.6f ""??IIJJYYZZ[[ \\ ]] }} S$)MT(0 )q DDFFGGHHJJRRTT VV  U< JJVVV,W$, {FFGGHHJJRRTTmm  Y"* FFGGHHJJRRTTZz ( FFGGHHRRTT["* )FFGGHHMMRRTT\&. DDFFGGHHRRTTmm   ]h ( ??IILLYYZZH ??.6f ""??IIJJYYZZ[[ \\ ]] }} 4)qMM8@f=DDFFGGHHJJPPQQRR SS TT UU VV XX]]  L4<qm.&D (mmZ08}}.&)))==B$, H/,$8"F"* )mmF.6\`HqZ08}}B$, )Z08}}*"( `*2 HHmm8"h2:HHmm`*2 mmF"* mmd.6\3mm6&f6>q}}8"<& ??$?8":$ ??( > ( ??`$, )y\ *"?( ?&0  $&4$ $6& \&. )H ( $$=M *"$RM>*"$=M^.&)) 08\$$&&**224477::;;FF GG HH RR TT    *"3:BH/ qH&&**22447799::<<YY ZZ \\  4<q&&**22447799<<FFGG HH RR TT   m4<3{H --667799::;;<<==YY ]] }@08*"$, \q&&**22447799::<<?6&. "DL3h#$$&&**2244DDFFGGHH JJ PP QQ RR SSTTUUVVXX]]   2"* \&qv"* R $$--77;;<<==II *"X$)=77<<IIJJMMc$$, R&&**2244778899<<MM 2"* h (f $$--6677<<==#,$ 8latn TRK case2case8dpng@fracFligaNligaVnumr\ordnb ,4<DLT\dV$>X\F 2< (H (HHH$2DR $D $D 2R 2R {tuILLIIOOILx9$%&'()*+-./0123456789:;<=DKM]08 {tu tu{~l|l|$2DRB33fP [DAMA@ ffj  ,  ~Sx    " & / : _ !" Rx    " & / 9 _ !"pL7   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ardeixpkvjsgwl|cnm}bعyqzrw{|pkgyumD,KLPXJvY#?+X=YKLPX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-DdU./<2<2/<2<23!%!!D $hUDJ++/ֱ+/+ 999901747632#"'&>32#"&'++-+++-+!' !V-+++-++ <+3 +2+ +/ֱ + +01>32#"&%>32#"&)&%))&%)''7AE?/-56>$3%BC$2? +@?3 +:2/$DE$3  $2  +@  +2F/=ֱ7 7=+  +@  +7+ .+4 4/. G+6?+ =..=7 ?+ 4..4.  == += + = +77+44+..+$.+%.+-.+454+767+=>= +7B7+4C4+D4+7E7+ .47=........@ $%-56>BCDE................@.4901467!!&'47!623:!623:!!!!#"&'!#"&'!.%!!##%#!!X%%!#V"RR !j !yy P%wDB+B +@B< +9+)/2) +@ +# &E/ֱ, ,>+2:2: +6F+,9>B999:)1999 296#&99)B99017>732654.'.546756322.#"#"'5"#"& =L^=öKeHc9-\RD 1L-Po?Vj>ʹ  y!G =WGB';Vy\ @k7P<1#H`^#V-AM++=+E+= +3K= +3N/ֱ + .+B BH+8 O+ ($9HB!3='$9+.8BH$93 $9014>32#".732654&#" >32"#*4>32#".732654&#"V/\`^]//]^^\/m{wrl{ws#'"%(/\`^]//]^^\/m{wrl{ws\uDDu\\tBBt\XX\uDDu\\tBBt\5D1+9 +32@1 +*3#21 +3E/ֱ66  / 6+>+2, "2F+6&..ɰ6++ + ++ #9.....@> 19$9@991!999014>7.54>32.#"3!573!!#".732>7!"%Fd@`DuV1uB+X9NoF" VՁqƖV_$.X`3=u^#XR) %- )?R)on{}{>4jAoP)@j' #+ +/ֱ  +01>32#"&)&%)'f9 /ֱ !+014>7>32#"&'.f-J\- !VR;;RV*-\J-o"C--D#f9 /ֱ !+01>54.'>32#"&fVR;;RV"-\I..I\-*-;:-DݙDu &D++/$3'/ ֱ(+  99#$9 9901677&7632#*677.u r335  L-7'J 5-E=:-+! C.X= </32 +@ + /ְ2 2 +@ +!+0145<7!>32!!"#*'!`!"`!!#!{!#{=9 \/3 +/ֱ + / +6=:+ .@ 9901>32#*=o%%n$#kX{ " //+ ++01467!!.XF+ +* )u/)++/ֱ+01747632#"'&u++-+++-+V-+++-++j ++ /ִ + +013632#"j!$ %?o^3B+/ /ֱ + !+99 99014>32#".732#"oAz{AA{{Addee/= +2 +@ +/ֱ  +@ ++9013!!&5467!. $;)L)(3y5%;%+ /&/ֱ '+%9  9999017>54&#".'>32!!y=mP/h= 7wdu@%LsKqBz{yA}5??-^aB~P%q^-)/2 //./ ֱ$ /+6%+ .+-+-,-++ #9,-+9+,-.....+,-......@$ 99)9 $9999016732>54&#"'!&45<7!6232#".q'7\Xp@-X/)m  m`+\q+^aX\;@!#Tg >#Jq=v8`JL/3 2 +@ + +@ +/ְ2 2+99017!6323#"#*'!`g= %!!"#$@L#!^-+//!! +@ +/./ֱ / +@ + +& /+99 !+$9&9+9&99901>732>54.#"'!!>32#"&7{`Vl@!RiB')bfxD\obh; #Rg=sZ7#\=qhv8X#5X+'1/ /6/ֱ$$,+ 7+$99, $91'$90146$7>32#".732>54.#"V͚b3ɉN{LRXmEH|\44VtBDz_73@-! bt)b5q}w{@>+.ZT\R'3]fL  / /+ 90147!.'!.+<5%#M  !wV'7Gj#+++EH/ֱ((8  /8 (.+B  I+B8#+3$9E+ 3=$9014>7.54>32#".732654.'>54&#"w?e{99eL+Bq\\qA+Ke99{e?V\\V5Z}FHzZ661Pf55gP1o\bB?VoHL|Z00Z}KHoV?Ab\j]++]yBhP;;Ri9VB--BV9my9;-#5V//)1/6/ֱ$ $.+ 7+.$$9 991) $9014>32&'<7>7>7#".732>54&#"yRZmEV ͚b3ɉNzL3VuBDz^8H|]3Fw{?=᢮%3 cu(b5q\R'3\R/Xu/!/++ /ְ2 2 !+01747632#"'&47632#"'&u++-+++-+++-+++-+V-+++-++-+++-++=R! z+/ֱ+ / + +6=:+ ......@ 999901>32#*47632#"'&=o%%n$#J++-+++-+k-+++-++w47 .X:/c#!3&#% b#  ///+01467!!.467!!.ii- .) )- .) )w467&547 &X9%#% #/!"3X!1^+ + +0/$2/"ֱ**"+ *+3+ &.$9$9901>32#"&'7>54&#".47632#"'&XZZZ{}#%&F3hT4Ş`s7  ++-+++-+ٻhd: =3JgC9-+++-++FT+/ +PB/9/'J2'U/ֱ4 4+GG,+ V+6>+ MN$##$MN....#$MN....@,G /9?B$99<9'9P ,4$9014>$32#"'#".54>3232>5!" 3267#"$&%3267&#"9u3qHǁV;NLvP)^yJ~DL!\d4z`^HJDžsbep1];37\wF{ϚZTy7'#2VrB`  kbJ!4)"\smJ)+33+3 +32/ֱ++6$3+ ++.....@99013>32#"&'!#"&!)2/ -)zt,,+ ?w3N+6y+ +362,+ +,7/ֱ ,2%+ %+0 0/ 8+90 $9+ 9,93 9013>32#".732>54.+532654&#"LVX#'BX/?w]7X!RTOp`5PwG=kRæ5`?iT93\aoj4 wFrVVuJ!wo'#++3 #+ 3(/ֱ+)+6& . .ɰ6+A+   + +  + #9 .. ....@# 9 999014>32.#"3267#".`'7F\=yIRp`5FjbѸ!h% %1# XJ%9#'c E +2+!/ֱ + "+ 99 9013>32!".732>5!"S_^'Z+b]Ps%d6V/m#h ==*D++   + /ֱ 2 +@ +@ ++013!!!!!y $'  #' #( :++   + /ֱ 2 +@ ++013!!!!#"&%( $'  #' 3,(++3 2 (+-/ֱ+#+ /# .+6& . .ɰ6=<+   + +  + #9 9 .. ....@(99(#9 "$9014>32.#"3267>32#".g5-uučPVp\~-)&#`mr8iѸ!h#%5##XJo3 _?+3+ 3 + /ֱ 2+ 2 !+013>32!>32#"&'!#"&)%%) '&+%(s?3\ ! ++/ֱ  +013>32#"&)%%(?=P>++ / ֱ  +@  ++9 90176732>5!.5467!#"&=F(%LB)9a{A=]9D+RC #' dZ{J # +3+3/ֱ +013>32#"&>32 #"&')%%(#)F/(??,++/ֱ  +@ ++013>32! '%u '# %l#+3+ 3&/ֱ  / +  '+#99 99 9#99013>32 >32#"&'"#*'#"&H 55 86H%' 8ko<%(+?LN+3+ 3/ֱ + +999999013>32>32#"&'#"&/-#' /-?#%/?9D'D++#(/ֱ + )+99# 99014>32#".732>54.#"L晚LL嚚L7pwws77swwp7qq馦qq]]鋋\\,R++) +-/ֱ 2$+ .+9$99) 9013>32#"&'#"&32>54.#"JX\%yōNXl/F-%('JuG7fZ5R 1kxr6LqZyI!J'/++#0/ֱ + ,2 +@( +1+6+ (./+,(+,/....+/..@99# 99014>32#".732>54.#"467L晚LL嚚L7pwws77swwp7^  qq馦qq]]鋋\\#9T#< ,L*+3+#-/ֱ' ' + .+ '$9 99#* 9013>32"#*'57>54&#"#"&-C@F/b\9\y@)'-Fd>Ũ+J3)%)dPiK 732>54.'.54632.#"#"&s =K_=b\-LdHb9-\PC 1K-Po?Vj>L}y!G 0Om@=XJC'=X{\ ?k7R=3#Jb^jp<#%$++ 2/ֱ +01467!!#"&'!.%u&' u% "' B #7+ +3/ֱ + +901>32326>32! *%+X^%*5r3yt'?=++ 3/ֱ++99901>32 >32#"&'? 02,0 626?J%"+33+333&/ֱ+'+6=+ .(+ . ..........@%9901>32 >32 >32#"&' #"&'J 11R 8:P!'/ :<9<##?3 +3+3 /!+013 >32 "#"& >32 #"&'3!,Rw*)T*+%G O1f0++ 3/ֱ +9901>32 >32#"&'1 -4{'- 2&'  b#F.+ +/+ 9 9017!.5467!!!A5 %/ &'  )# f5/  //ִ +2  +2+01!!!f T  ^ ++ /ִ + +01632#"'^%!%?hG// /ֲ222 +  /  +/ 33+0147!!.5<7!!.5h k l   + / +01>32# P,++P9`^ / / +0147!!&h) "+ + /ִ + +01>3:#"')1/%/%q{--u+$+ + +(32./ֱ '+2 /+99' $9$9+9 99014>3254&#".5>32#"&73267.#"q?q_Jj#}R6 5RH\ۇ3Rb1?o6#i/)RX- ?}FMDQ+  r9&M+ +!'/ֱ 2+ (+ 999!99017>32>32!"&732>54&#" , - +`q?\O/i;RpD1s`@Bh;#s5ow!Mcy-!=++"/ֱ #+9 9999014>32.#"3267# yA}N))}G\\-Ӵ=q- 3P uǓTE?s^F&Q++"'/ֱ +2 (+999"99014>32>32#".73267.#"JsD) - , ?fqŏT˺D{#)D`_/ӑN86{Ș Au{-'j++% +(/ֱ 2 + )+ 999  99999 99014>32!3267#".7!4.#"{7q{fm7N@ ;^};c!FnNsȘVF}f:AP?|\9H*8#++3(2/  +/&ְ2 2,+01467354632.#"!!#"&'#.H+H >#5R7 + . ! ] '1 ;kTV ! ^ R5-=O[L+0+Y+9/C&SL +&\/ ֱP +2 > P/PV+! F!V+4 4F +@4 +]+P 9V &19CL$9!2999LC4990299&+99S (99 !PV$9901467.5467.54>32>3##"'3#".732654&/"#"32654&#"RZH'5K@HV3gcT1>IN%>lSXB90 'E8 Rw\q=-Pj32>32#"&'4&#"#"& , - BVmB , - smH|Z4 + -y%L=%mj5igm{']++%+ (/ֱ  / / /)+ "99901467!#"&'#.467>32#"&'.m + - ?6216!  12663i+1+ /4/ ֱ  /( /(5+ 9( ".999 901>732>5#.5467!#"&467>32#"&'.D /H<5' 1Pf4?R6216C=< ! Vo?1266  +3+/ֱ +013>32#"&672 #"' , - - +w!'-)%$-+%+ /ֱ +017>323267#". , - %-1 G+VD)5<8 3X-Bj@+ 033++37'2C/ֱ=  22=3+- -#+ D+3=9-9#97@ 99013>32>32>32#"&'4&#"#"&'4&#"#"&:Nd@;V@+9J`; + - lmBbA# + - e^?kN+ + -%f)'J9#3E+!E7#fj5ZyD?s^-(I&+3++)/ֱ#  22#+ *+#9& 9013>32>32#"&'4&#"#"&BXsD , - mmH~\6 + -%n)%L='mj9mfy-D++ /ֱ + !+99 99014>32#".732654&#"y9uuut<32>32#"&'#"&32>54&#" % % +`q?Iυ1s/ - +z/eTPk=1s`@Bf;זPj3ow!Oc}-*Y+ "+&/+/ֱ +"2 ,+99&"99 9014>32#"&'#".73267.#"}P{9\PJ' . + 1sBmR8fTD)=Q9hg3ՕP  2xDžd^-! E 7+ +3!/ֱ  22"+ 9 9013>32>3:.#"#"&)y  + -%d)Li#!q--1l/++ 2/ֱ +* 3+ 9&/$9*99/9 *$90176732654.'.54632.#"#"&q -B{+HZ/3eN/P) +H}h"=mP7H1)@ZC};:XG'8' +FjPJyT--V#9++3!2$/ְ2 2%+!9014673573!!327#"&5#.-+7H5Jcu } ! X3} !?+ +3 /ֱ + !+9 901>323267>32#". - + -XPDj) . + Lb`}JSoP  %i5!++ 3/+901>32 >32#"'5 .2 JO *) ` !!yD!+333+$3"/ֱ + #+6=q+ .›+ .=+ ...........@!901>32>3:>32#"'#"'D '0 '$ #) %"'!%#' xl`)  +3+ 3/+013 672 #" 672 #"')7%#'*#")+%!%4)'%!! '!"++ 3/#/$+99901>32 >32#"&'47326?#"&'! -1 [S *) 5%\+XB);HT'/  qZ ?39N?w.+ +/+ 9 9017!.5467!!!?a?! ! y ! f4?,/&/ 5//ְ2! 2!/ +!) + 26+&/99015>=463"3"&=4.f;U3Rb3'C33C'3cQө3TP!CVmJ 'V\hgGGgi\V'  ѝJmVC 9 /ֱ  +01>32#"& '##%sh412//5/ְ2/ "26+"/99014672>=4>7.=4.#.54672#.hR`5'C33C'5aQө5T<;U5 'V\hgGGgi\V' ѝJmVC!!CVmJ 1/3 22 + 322/+6ª+ . . ¢+  + +++ #9999.... ........@ 9901>323267#".#"&1>HL"/]\\/)X1 3sN-^\]+1d1//+#!/7-5'/!V!4+/ֱ+ + 990147632"'&>32#"&++-+++-+!!(-+++-++*R // +/ֱ '+2$2,+$'99 999 9014>756.#"3267&'5&7om93 +33>%=22A/ְ2 +22:+( B+6+ =.%=+X+ =+%+%+% #9=9....%=......@+349>:999 9014673.54>32.#"!!!!'7>54&'#.3jsh)9yFPnF!k 3'B/'5! ! ?G\yD!%/"1VyFDA ! 5h6b' '# 0'^b`+5i5 ^o+?o%/1;/@/ֱ, ,6+ A+, )$96 "($9!$91%"($9;$9 99017.5467'>7>327'#"&'.32>54.#"^'+/)45GH5/)/-)-5JJ6#--PoABnR--RnBBnP--5HJ7#- %++'-7JH5/)++)1BpT11TpBBrT11TrL1\ +%/3)2,/3022/#ְ*2 2# +@ +2# +@#' +.23+#901>32 >32!!!!#"&'!&547!5!&547!L -3z(. wRhh%( jjNqV!!B #!# 9 / ְ2 2 +01>32#"&'>32#"& '##% '##%PXXAW?/(/X/ְ2B  + BN+4 4:  /: Y+6+  EF+ RQ01  + + #9 9@ 01EFQR ..........@ 01EFQR ..........@+9 (?IU$9:"%7999?9(%:IU$9"9017>732654./.5467.54>32.#"#"&>54&/.' 9`#;L)L`5@+#@n\jH9{_4E)\{A-&A{obCLN TN,9+-"`N%5) F9?J)Jt2W:?mM+ !5#TX)8$ PjgR{1U:DlN)9HV #+55BRT//32 /ֱ+!+0147632#"'&%47632#"'&'++)))-''++)))-'=-,+,-+++-,+,-++}m'I+#6+53-.2/E/<3/J/ֱ (+9 90++ K+6&30.03.ɰ6\+ 350.+ ./.0+5453+/.0 #94539/4.../45....@9#-BE$954.#"4>32.#"3267#".}ooo說oV摑VV摑V9iZLV) +M/+U# )t<\i7ߢus餤uuee酅ddbwB #- +=sT+/")/ / 32,/ֱ%+2-+6++ .   + + + #9 9  ....  ......@%999"9)901463254&#".5>32#"&73267.#"ɟ3[jk=m/ )H;N{)AR'3X+Q#}V'f[H  {1= #VqXc 672 #"'672 #"'qf%'')_%')'f%'')_%')'#@7@70 /  +@ +/ ֱ  +@  ++01467!#"&'!.H )- C-  )X{ " //+ ++01467!!.XF+ +* )}m'O+#G+,G, +@GM +:2/P/ֱ (+JJD+11+ Q+DJ#,6>$91<=997:99G 1$90146$32#"$&732>54.#">32"#*'7>54&#"#"&}ooo說oV摑VV摑V/a97o\9-: /71lL-- ߢus餤uuee酅dd8\H/I:) q )5#FFP { " //+ ++01467!!.2B # # $#VB+/ /ֱ+ !+99 99014>32#".732654&#"V/Pj<;kP//Pk;;kP/y`LL``LL`=kN--Nk==kN--Nk=NffNNff -C /-/#32- +@-' +./+ְ2% 2+% +@+ +/+017467!!.45<7!>32!!"#*'!i`!"`!!H- .) )d#!{!#{uD///ֱ  +@ ++9 999 901>54&#".'>32!!P`e\;R#;f<\^udP9H= @#{uZ\sp\#C!//$/ֱ %+99!9999901772>54.#*'!5!#"&dZ/V@%#7J' ?[97cPD_{n+@/';% $k/CN#DjJ'+ "++ /ִ + +016232#"+.1%/ )+O+#+ +3)/,/ֱ& 2&+2 -+& 9  %9901>3232>5>32#*'&'#"'#"& . + 1s`@ - , % ( +_ - +ܼ!Pb`DKBff;+3+3/ ֱ +/++014>3"&'#".2f@-8dyB -77yk/'1bJ?u/"//ֱ+0147632#"'&u++-+++-+5-+++-+++1B/ /(+ +@ +/ ֱ +9 $90146732654&#"'36232#"&+A!FQPA5 dwH  heX-3 /1-% bLbc uF /2 +@ +/ֱ  +@ + +@ ++901%33!&5473.y3#Z8\wB+/ /ֱ + !+99 99014>32#".732654&#"1_\\_//_\\_1uywuuwyuZuBBu[^tDDt^mX] 7 672 #"% 672 #"m^%&')g%')^%&')g%')^<;<;"> +93>/43'.2'> +@'+ + /2 +@ +2?/ֱ  +@ + +@ +<+(26-2@+99<"#$'$96&9'>#901%33!&5473. >32"#*%!56723##"&'5!y#'"%(V;9#jj !N3#Z8 X " "="+<3: /2 +@ +* +3>/ֱ  +@ + +@ +'+6 6' +@6; +?+"999' #03:=$9:"#9 '699* -99930901%33!&5473. >32"#*%>54&#".'>32!!yc#'"%(FP`e\;R#;f<\^ud3#Z8 XP9H= @#{uZ\sp#1M/+M/C36=2M6 +@MH +6M +@6: +!//(2N/ֱ K+72E<2O+,/$9K%+236$9E596M29/935$9%+99901772>54.#*'!5!#"& >32"#*%!56723##"&'5!dZ/V@%#7J' ?[97cPD_?#'"%(V;9#jj !N{n+@/';% $k/CN#DjJ'X " X!!1e$+0/ + +2/ֱ"+* *"+ / 3+ &.$9909014>75>323267#"&47632"'&Z{}#%%E5gT3Ğ`s7  ZZZ++.++,-+hd9 4IgC9%-+++-++)# #+33+3! +"32$/ֱ+%+6$3+ ###+"#+#."#....@!$9013>32#"&'!#"&632#"'!)2/ -)zt,,-710%#3% ?w3)##+33+3 +32$/ֱ+%+6$3+ ++.....@$9013>32#"&'!#"&!7632#")2/ -)zt,,+ -45/%3#?w3 )#),+33+3* ++32-/ֱ+.+6$3+ ,,,++,+,.+,....@*$9013>32#"&'!#"&%632#"&/#"&!)2/ -)zt,,%'#),01'-1 ?w;3)9144+33+32 +332-/,32-+3()25/ֱ+6+6+ ,..,)$3+ 444+>+ ++,*,)++,)+434+ #99+,)9*94*+.....@ 34)*+,............@%2$9(%099"99013>32#"&'!#"&>323267#".#"&!)2/ -)zt,,b;-\XT))7% !`=-XXR'/9##E ?w!?%+""#.;#)#%)R3) &)9+33+3' +(32%/43,2:/ֱ+*+22+;+6$3+ )))+()+).()....@'99*9013>32#"&'!#"&47632#"'&!47632#"'&)2/ -)zt,,-+1))/--- {'1+//)3'?w-//+/--3{-//+/--)} #/+33/3!"2-/ (+0/ֱ+$$*++1+6$3+ ###+"#+#.."#....@!99*$ 99-!'$9013.54>32#"&'!#"&!32654&#")FO!=V53W=#PD -)zt,,+ v=;;>>;;=uN1T=%%=T1LuDw3i;ON<;NN!%^+ 3+ $2"  +   + &/ְ#2 2 +@ +@ +@ +'+01#!!!!!!!#"!##`y/'+ $' #' #( yPE#+A++3-/632.#"3267#6232#"&'46732654&#"'7.`'7F\=yIRp`5Fl'  hgX# A!FQOB5 L͑PѸ!h% %1# XJ%9#'bdLbc 7 -1-%q#$L++   + %/ֱ 2 +@ +@ +&+9013!!!!!632#"'yC-710%#3% $'  #' #( #$D++   + %/ֱ 2 +@ +@ +&+013!!!!!7632#"y-45/%3# $'  #' #( 9#-N++   + ./ֱ 2 +@ +@ +/++99013!!!!!%632#"&/#"&y%'#),01'- $'  #' #( 9 *:|++   + )/53-2;/ֱ 2 +@ +@ ++#++3<+#'993+ 999013!!!!!47632#"'&%47632#"'&y--+1))/--'1+//)3' $'  #' #( -//+/----//+/--# %++/ ֱ +  901632#"'>32#"&-710%#3%?)%%(?+# %++/ ֱ + 9017632#">32#"&-45/%3#')%%(9?c# )++!/ֱ "+ 99901%632#"&/#"&>32#"&3%'#),01'-)%%(9?N -@++/(3 2./ֱ+ +&/+0147632#"'&>32#"&47632#"'&-+1))/--)%%('1+//)3'-//+/--?-//+/--+32i+2 +& +13*23/ְ2 )2 +@. +#+ 4+# 99#99014673>32!".'#.32>5!"!!+S^_'Z+c\PP%d5V/l#n # h #==* # #98+3+ 34/33!"2&!4+%3/029/ֱ + :+6+ 3.%.3"%0>+ "#"%+$"%+3130+230+#"% #9$9230919#$12...."#$%0123........@9)/$9,9999&/,799!)99013>32>32#"&'#"&>323267#".#"&/-#' /-?#%~b;-\XT))7% !`=-XXR'/9##/?9!?%+""#.;#)#%)D#'1G++#2/ֱ + 3+(-$9# 99014>32#".732>54.#"632#"'L晚LL嚚L7pwws77swwp7-710%#3%qq馦qq]]鋋\\D#'1G++#2/ֱ + 3+(-$9# 99014>32#".732>54.#"7632#"L晚LL嚚L7pwws77swwp7"-45/%3#qq馦qq]]鋋\\D#':G++#;/ֱ + <+(.$9# 99014>32#".732>54.#"%632#"&/#"&L晚LL嚚L7pwws77swwp7%'#),01'-qq馦qq]]鋋\\D9'B++#>/=3+,20+>+/39:2C/ֱ + D+6+ =./.=,/:>+ ,-,/+.,/+=;=:+<=:+-,/ #9.9<=:9;9-.;<....,-./:;<=........@(6$9# 99096A99+(399014>32#".732>54.#">323267#".#"&L晚LL嚚L7pwws77swwp7db;-\XT))7% !`=-XXR'/9##qq馦qq]]鋋\\l!?%+""#.;#)#%)D '7Gj++#6/B3*:2H/ֱ (+008+@@+ I+80#$9# 99014>32#".732>54.#"47632#"'&%47632#"'&L晚LL嚚L7pwws77swwp7-+1))/--'1+//)3'qq馦qq]]鋋\\;-//+/----//+/--}J 67   &'7 7'+33 3++49%'D!-9k ++1+ +):/ְ2" "6+ 2;+" 9996 &.$9)1 %9$90137&54>327632#"&'#".#"32>54&'HELwGP%##"JJL{JR#"#s(+7awp77bws7+/fqF?mdqHBq{P7>\v;@]}P#';+ +3(/ֱ + )+#99901>32326>32! 632#"'*%+X^%*-710%#3%5r3yt'#';+ +3(/ֱ + )+#99901>32326>32! 7632#"*%+X^%*}-45/%3#5r3yt'+#0;+ +31/ֱ + 2+$99901>32326>32! %632#"&/#"&*%+X^%*%'#),01'-5r3yt'+ -=\+ +3,/83 02>/ֱ +&&.+66+ ?+.& 9901>32326>32! 47632#"'&%47632#"'&*%+X^%*-+1))/--'1+//)3'5r3yt'-//+/----//+/--1f#!4++ 3"/ֱ #+ 999901>32 >32#"&'7632#"1 -4{'- 2&' --45/%3# b#3]++$ + . +1333 24/ֱ 22)+ 5+) 99.$9013>32>32#"&'#"&32>54.#"%( -F/mƖXXl/F-%('JuGGuI' 5ss5LqoLB@++#7/C/ֱ= =/+ 4+ ( + D+/= 7$94#,999  99#@97  9990134>32#"&'>732>54.54>54&#"#"&!Rm:G:1JVJ13X{HRp/ -\;%H7#1HTH13254&#".5>32#"&>3:#"'3267.#"q?q_Jj#}R6 5RH\r1/%/%3Rb1?o6#i/)RX- ?}FMJoDQ+  rq{-9+$2++ + +(32:/ֱ '+2 ;+99' .26$959+$9 999289014>3254&#".5>32#"&73267.#"6232#"q?q_Jj#}R6 5RH\ۇ3Rb1?o6#i/h.1%/)RX- ?}FMDQ+  r& q{2A+8#++ ? +<32B/ֱ3 3;+2 C+3999;  &,1$9')99?89 999#)9014>3254&#".5>32#"&>32#"&/#"3267.#"q?q_Jj#}R6 5RH\M/2##2/%3Rb1?o6#i/)RX- ?}FM? uDQ+  rq{8G+>+ E +B324/33"#2'"4+/H/ֱ9 9A+2 I+6(+ 3.1#%+ $#%+3231+$#% #92319$%12....#$%123......@97$9A "'/4$9*,99E>9 99'/,799014>3254&#".5>32#"&>323267#".#"&3267.#"q?q_Jj#}R6 5RH\GV=1PJJ+#9)!X;/PHJ)+9'#23Rb1?o6#i/)RX- ?}FM#9!'!%/3!7 '! !/DQ+  rq{.=M+4+ ; +832-/H3!@2N/ֱ'/'+ // '7+2 F7+>>/FO+7BJ$9;49 99014>3254&#".5>32#"&47632#"'&3267.#"47632#"'&q?q_Jj#}R6 5RH\ۄ'++)))-'3Rb1?o6#i/'++)))-')RX- ?}FM-,+,-++DQ+  r-,+,-++q{X-9E+$+ + +(327/=(+C/1(+F/ֱ .+:O+:@+4O+4'+2 G+@: $+71$9+$9 99C=4.99014>3254&#".5>32#"&73267.#"4632#"&732654&#"q?q_Jj#}R6 5RH\ۇ3Rb1?o6#i/Qq^`qob`og17922971)RX- ?}FMDQ+  rXyyXVyyV5@@55BBdV-<PY8+23B)2+3 W2Q$8 +K3Q2Z/ֱ= = +J2Q $2QR+ [+=99  8B$9QG99R)25$9 #,/999$B,=G$98 599 999014>3254&#".5>32>32!3267#"&'#".732>7.5'.#"%!4.#"d@p^Ho"|R5 5Q45{fm7.\fN@ ;^oC?pZh83K])!QRR###h-b!FnN)RV-A}F\iZkF}f:oc+A2;+B%N{XDQ+!5N)n?z^7y-@y +>++*/39/$(+A/ֱ 6+'B+6@  !$*-=>$993'0<=$9 9 999014>32.#"3267+6232#"&'46732654&#"'7&yA}N))}G\\-Ӵ=q- 3P(  heX#A!FQPA5 L uǓTE?s^FdbLbc 3 /1-%#{'3u++++% +4/ֱ 2 + 5+ (/$9  9999% 99+19014>32!3267#".7!4.#">3:#"'{7q{fm7N@ ;^};c!FnN#1/%/%sȘVF}f:AP?|\9{'3u+,++% +4/ֱ 2 + 5+ (/$9  9999% 99,29014>32!3267#".7!4.#"6232#"{7q{fm7N@ ;^};c!FnN.1%/sȘVF}f:AP?|\9 {2;~+#++93 +332!3267#".>32#"&/#"!4.#"{7q{fm7N@ ;^};/2##2/%c!FnNsȘVF}f:AP1 ?|\9{'7G~++% +6/B3*:2H/ֱ 2(+008+@@ + I+80%$99 99014>32!3267#".7!4.#"47632#"'&%47632#"'&{7q{fm7N@ ;^};c!FnN'++)))-''++)))-'sȘVF}f:AP?|\97-,+,-+++-,+,-++ H+++/ֱ  /+ 99 9 901>3:#"'467!#"&'#.1/%/% + - !  mM+++ / ֱ  /3+ 9999901467!#"&'#.56232#"m + - .1%/!   c#L+++!$/ֱ  /%+99999 901>32#"&/#"467!#"&'#.-/2##2/%y + -  !  8/N++/*3"20/ֱ+  / +(1+0147632#"'&467!#"&'#.47632#"'&'++)))-'o + - '++)))-'=-,+,-++!  t-,+,-++y;/;m++39//!232.'.'.'7.'&54677#".732654&#"y9uuL5   'dB 7|Cϓ {y9mM--  "o51d #+ Yr7^}LpѲ(B&+3++>/=3,-21,>+9C/ֱ#  22#+ D+6(+ =.;-/+ .-/+=<=;+.-/ #9<=;9./;<....-./;<=......@#)A99,49>$969196A99013>32>32#"&'4&#"#"&>323267#".#"&BXsD , - mmH~\6 + -5V=1PJJ+#9)!X;/PHJ)+9'#%n)%L='mj9mfN#9!'!%/3!7 '! !/y+T+#++,/ֱ + -+ '$9 99#)9014>32#".32654&#">3:#"'y9uuut<32#".32654&#"6232#"y9uuut<32#".>32#"&/#"32654&#"y9uuut<32#".>323267#".#"&32654&#"y9uuut<32#".732654&#"47632#"'&%47632#"'&y9uuut<327672#"'#"'7.7.#"32654'y9uu^7A%!}d)oG}L}/ sɓT93SsȔTV=Jtjl+/DƓi+W+ #++3,/ֱ + -+ 9#'+$9 9#)901>323267>32#".>3:#"' - + -XPDj) . + Lb`}J1/%/%SoP  %i+W+ $++3,/ֱ + -+ $($9'9 9$*901>323267>32#".6232#" - + -XPDj) . + Lb`}J%.1%/SoP  %i 3^+ $++34/ֱ + 5+ 9!'*2$9(9 9$*901>323267>32#".>32#"&/#" - + -XPDj) . + Lb`}JX/2##2/%SoP  %i /?j+ +3./:3"22@/ֱ  +((+ 8+00/8A+0( 99 901>323267>32#".47632#"'&%47632#"'& - + -XPDj) . + Lb`}J'++)))-''++)))-'SoP  %i-,+,-+++-,+,-++!".6'++ 3///0+999'-901>32 >32#"&'47326?#"&'6232#"! -1 [S *) 5%\+XB);HT'/ .1%/ qZ ?39N 9/\+" + +*/0/ֱ 22'+ 1+' 99*'99901>32>32#"&'#"&32>54&#" , + +`q?Iυ1s/ - +z/eTPk=1s`@Bf;זPj3ow!Oc!"2B^+ 3/1/=3%52C/#ֱ++3+;D++#"99939999901>32 >32#"&'47326?#"&'47632#"'&%47632#"'&! -1 [S *) 5%\+XB);HT'/ '++)))-''++)))-' qZ ?39N=-,+,-+++-,+,-++}):x"+%+/++6% +;/ֱ* *2+ 2<+2*%99"9"29*9939014>32!!!!!!#".73267.#"}P?7y9@L:tv?x55m?wy<q  $'  #' #( q]  \{-*6?&+ 3.2+ 34=27& +7@/ֱ+ +1+ 728+ A+1+&99#998  999999.&9#997+1$949014>32>32!3267#"&'#".732654&#"!4.#"{9uu53Õfm7N? ;_57Íuu9b!EoN sɓTqqL^:A{uTrkH{X31f '7S++ 3&/23*28/ֱ  + (+09+9901>32 >32#"&'47632#"'&%47632#"'&1 -4{'- 2&' -+1))/--'1+//)3' b#-//+/----//+/--F0+3+2/ִ ++901>32#"&/#"/2##2/% T/32+/ִ ++6(+ .+ ++ #99..........@ 99 9901>323267#".#"&V=1PJJ+#9)!X;/PHJ)+9'#L#9!'!%/3!7 '! !/X{ 467!!.XF+ +* )X{ 467!!.XF+ +* )X{ 467!!.XF+ +* )  //+01467!!.H##& '  //+01467!!.H##& 'f'b `+ + 2+3/ ֱ  + / +6:C+ @ 9 9 901>32"#*'f&%n#$jf'b `+ +2+3/ֱ + / +6=C+ @ 9 9901>32"#*fo#%n$#+jfb \/3 +/ֱ + / +6=:+ .@ 9901>32#*fo%%n$#kg& + +2/ֱ + / + + / +6=:+ .=:+ .....@99013:7.#"3:7.#"gn$#o%%bn$#o%%kkf& z+3 +222+33/ֱ + / + + / +6=:+ =:+ @01>32#*%>32#*fo%%n$#do%%n$#+kkf /333 +2/ֱ + / + + / +6=:+ =:+ ..@01>32#*%>32#*fo%%n$#do%%n$#kk#f./ + +/ִ + ++014>32#".$>T1/T>$$>T/1T>$ /T>%%>T/1T=%%=Tu/E+*33"22+0/ֱ+ +(1+01747632#"'&%47632#"'&%47632#"'&u++-+++-+++-+++-+++-+++-+V-+++-+++-+++-+++-+++-++qXs  /ִ + +01672 #"'qf%'')_%')'#@7mXo ! /ְ2 + +9017 672 #"m^%&')g%')^<;1A<+3+ @< +*3@/2 < +#32B/ֱ'' +@'- +!2' +@ + 2C+'?99@36901473&45467#&547332.#"!!!!3267# #&1/5'?N)Ti)`5Fk+1#+=!# % %1"!=+!ӿ%9#' ?oV;/ 3"22 +@ +)92232>32#*' #"&' #*?v'%!#%   m@5ZG1!H0m)+ 3+3.$2/1/,ְ2& 2,& +@, +&#+ 2+#&99 999 901467354632.#"!#"&'!#"&'#.H!7+2-99# 9 9014673546323267#".5.#"!!#"&'#.Hb-%-0 G+VC)%^.BeD#  + . ! ] %5<8 3XH=mTV ! ^ HdMF+4=33 +!3$2 ')3322+/33K8A22N/Iְ2C 2IC +@I +C@+2: .2:7+1 O+@C 997:&991$!99F&901467354632.#"!54632.#"!#"&'!#"&'!#"&'#.H+P <#5R7!72.|PV|.b8x@>0h 4 !!!"2"n""#`##$6$%p&&&'(()))*$*+ +^+,,l,--H-v-..b./B/01:12B234v556h67(7808l889\9:;*;<<==>R>??|@@^@ArBBCJD4DEFGGH.HIpIJJ|JKLNLM&MNhNOROPFPQ8QR4RS@STUU>UUUUUUUUUUUUUUVV8V`VVW@WX0XXYBYBYhYYZ6ZZ[j[\]v\ ~   @$ &d       0Aller LightRegularDaltonMaagLtd.: Aller Light 2008Aller Light RegularVersion 1.00Aller-LightDalton Maag Ltd.Aller LightWebfont 1.0Mon Mar 11 05:56:57 2013gf  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a bcdefghjikmlnoqprsutvwxzy{}|~    glyph1uni000Duni00A0uni00ADuni00B2uni00B3uni00B5uni00B9uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni202Funi205FEurouniE000uniFB01uniFB02uniFB03uniFB04KPXYF+X!YKRX!Y+\X E+D E++D Ew++D EH++D E++D E$++D E+D E +Fv+D E +Fv+D E f+Fv+D E 8+Fv+D E )+Fv+D E(+Fv+D E+Fv+D E+Fv+D E+Fv+DY+Q=inode-backoff-2.5.0/docs/public/fonts/aller-light.woff000066400000000000000000001005441264656751200225040ustar00rootroot00000000000000wOFFd FFTM^rGDEFIVGPOS;AS_GGSUB859EOS/2X`ncmap8B*cvt << fpgmeS/gaspglyf^없kheadyh16Lhheay $ihmtxy<[iIloca{e17maxp} name} rCpost~-prepҨwebf\jQ==љ cZxM@@D7+ Gs# '1\dn1TզI@c[ j\#M;>ͣ_| x[}\u?yyw]/]z6SΆ84ِ9XQ[LJ@PvIڀ" !$:#8t"1U "[F0MbQB4B(B?"٭Ryowι{,"J͐gJu-|;>~{\WKPe[Ek+~Ykܺݾ]h|MǓ'Rc;rN*YUo9a"Ct z]BFp޻[2hxuiX,bfFYbܷ ~N?"r{Xi?d/,]ŒY4Raq^۩,iK~R_XTg)?Y_,%oz۷YX@_M? h+Y'Y]WC,t;lս'X%7z7IEo}z)~n u-л/ijxmԕWeX61X=})[l+Y2,}%Gc0+3zrsCߢ$!Lh?͒ǸMAtK@סK=EnYL /[Xg ,''fK|XڴO{cuzY.Xܫ2,-68\8I\6d,]ΒcOo~"=b//6msZ\j uipY @1`D@$Db|Op2EKLjA͢]ܛIu9 5hQn\Q}Zξ) .@l#n80I.쐄RC(e,Y KӇX O>R`{ _e`gLÞ,9X5aռYd'NGnƶB4 fZ` ~AU1#%'`[C|C|YZgq~~E}SZjFl@Y?`G6⑃xC'QC^[Isu8J/x%W c*_#.Ed %d e؅lhBЃla55zY!>#՛j5Xn$$o Ÿ3`H Ƀ! Pux҅I9];#ij҇# d" 'Σ~:ǶD[w ǘB[śOh1|5#٭W㫏A{]s9jڟUcQ9#l)-E.lY-5`E/XV `E4ւ% >5F縖3Y"|%U-*W$1'>Җ#gO~m{A%T@*Ii~^ xGxG xG{/㰾 뻰~ OY#WfWٕ *E/|>X92j3gZ#!UÆk+sȨ3̟E,tB;52]mh,#TtW"#FU*afb; 9;w ~9(Qx wEd0M/}ROf(Z[fN-bK)/fkc`9P)Ys jTsޤk߲fI¹Z|Qr,rT›tjv(f.تa<=0*=&T mRy194WW-i.*g}1[H_ѱqI[Xx~OKYSwa_IY ~20UL2l\?f%>Oa?k_j@ 00;fجf{6Xk]68Ը57m*~G:x )2oh5Q=Pê^9hVꪁy'0K]cā1h pV4o!UK_a^ ڧrnX R9W{tlѶ]] ~_oؠ#~qυ~JġA @eEFTzw;O9_ZjU=h 76ҾhVh{;7U^_3; b,Cz>.>5TѡN +#+\56q>ʝXMg1dxougIY 3 osm1x[˜$mj4b͇\9OՍQذ{9hAm %Gn5| ŝ[U@53# j;IX"K$`1LoWEd%5=_Rd=[~D{o8ܲ2F"Zy˷ZZa_3-k\UYE:9j {:yS%'9  j`ESD3_єhG4KMBjAJQ2ŸHc3AH5ꀋڵѢQ)_-j5m~Ü1뚦mQT?\T?T?~ds'beeE+m+y=?M˰`-Â]MC]RNF%z[\V+I2Z(C#yk.4wIZHr8!.l|Xӡ}潛C1 Zj<}ベ[4W:E^twq:tj?u0`$Y{oҹ΁ᶹOUSj썬d:ȝGp^zFܕG79]<fٟncv]USVFs[ǰԾys@@b65VЬY_5c {sEVtsy L*P;9s?Z&1WNa,Ӿ$f̘3zmVV0֯Y~Ehב`j];*ss~sA1߾\6g_Xm@/U+W3W쒻Ucjl d8%J/l< .ft[ 9<3ISn-yg$wEqRrg|!Ӛ1+fe'yg!i9,P9߬ }2=rԡoR}&0l|X$RIVA_ZM.VSDZM2UwD'j}k9JsFS{@,8JNϝ]ԍYΛCjr= P$oH-5vqTԊ[HZ?ʃQ6٤G~UP6Eb/Qgny[cܗҹ}OW'LEx!?sQEÕǛk/xlyZ4" `^㒞Q\xڅKKTa-deBbtb)ADZL))&HJ#D>H y$09~?/LO|v@47(P#,2j^Dh2w00]ё,Ư\- )˩ʯ5v:uSH3@:5?\*:TgW+S?=hRN=FdYirUB~nn'ƭMFg6(b1ƥGhd0utB>)/{OojD䴬tj]f~p6MsT7:9Ia|[waV(ycgd^7Gz^S^yvl _uY_r#~E,fҤL1ܘk..[#xc`fqb:՘QB3_dHcb```b`eS, 0(D3@#oi ˘&XX)fNC xc```f`F1, d21g f`:tGKADAJANAIAMA_J!^a,[U͠ Um WT/W?8`}v?`Ã?)ԅDF6F& uV6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?аȨظD3-^d+WZv 7oݲm=c(JIͼ[ IYC,brrjVjLsk%5N?t[p=gyľ̙;B* xurw{|pkgyumDx]QN[A  9{ Սbd;i7rq@D گH!H|B>!3k4;;sΙ3KʑwkS$6NH덌Zlfu є;j=o)M;Z ;4: !qKͺb00.?R4j˰Ѽ34@Skm!qK˦6$tUS]`*́Vy &ҷ$, b 9@HƼIJ;ㆵƑ6O'ӿZxĽx7:3dYgFeYey,BX668qKB !B,u)R4IIhJ,e3ld4f7v4Ml 9d@{i,{P OR&B5j4%e,lgSJ3m3X8T[BA!ҏg7?y`_+.__J)?KedPQZUf&߸JY_T'<~A̰N{:4'#jE)jN( Oeᤚps)$<&-ԅ_X_+ }.j>8֣#QmL2Qb7AZ>Zy#-Oj~:J5ŝ> '4#‹uGG=LG2&:ReJ(C%[zdgC]k=LPꒄ+C6vr8M'h[V/h)=&3v?bGR&}nxhRmƢImU[*v<i/XQv^K9/"ٝvpa|WmnT}j3zQ]4gv3:n& 9Lp̏pȏW65D^cI_\,ό}r%7Q߶n_csY3T ܵ|9Zc3bYyܒ :uf8$%4sRE]%8s s椑61t}-t_ӧbH?cc~(D6PB ;C<}>%eIUdOv*=D~EScl 6T 5jtYQ&ڊ4NY+CU"Sw}(T*U_:$UdRm൥45<.bI n 9.2 ]]"fHϊ5V[DMC3DN!XJLJ%ȄMI`GM;Qx̹]pQeB^$ֵ?twiZ 6<:_{4ֿcȖN+```KNiU]a_;y.YߝoK=?U3L ^CyIhMcT& 4ʹ#aW'3f4<9Qi7DR8Un$ȺUlpjՂ.88] &f8Vq\Z]_Ik=@ J+U|˯UARF2]FidR2B:h5(AyKUo}hݺ/ my=;wnOx T+$̥?:Ybctu=pl_'>2B 4X3`?7$HL LfJ; ؝ꌗDEVMRb/FUB$HT[xՇNlxK(&&R Q5'2Ɨ`~=MYuOgnK3jV`Ng4_91M6-J4igTJk8N/NL5Iªj8geJ0/n(7B>`{cX1H[Wo9txOM! .SGػ#G_=mlqxu^𞡽;񑎁ȶ{ώf_q>gO~ftiS{mӑ-t{~,Q}p9L|.a{7eOҿҠNVwւ4`[r0@&Va6zc|5/ցA/HtKcý1fQfcSϾp|OzhIoN1K14a} Uv162M_kDkb7460cSҭK~oo}h!KpVLy*"Su[)ւԇe~A!`x q&* ĩT!kIy8)U91D 0E4އR c w#l)דO۽bRKr{?r𿶻%ُ^^/d9.{}CvBu-(5NG̖IՑޢ(%4hhI"{~(j]lNѩ`N*A\XgzkDz=Ġ^5 OQr{?~HY_vi*2jEy~_& DZ ~M _?7) v-/1?-d6 *4~+ _ fK<]0v]vY! 41 lYWɌ-! J\*eTNmTz>ɋJBx`-ό~o28~wϲϜw23kI#눭;;ԟ}١XΌV°PKd-)k^{.h0vY׼<\$/lCeiQkbT71,d1~!u3:OO0hCL+Ř܅6 J9DZ Q@Tu]v}A0 L@޶ԑᡣu ɥϲ)bnl[>:G}zhsAV,4 0L[:_5BVG>1uC'2>b[}}xj.*Sc/1N0 ̊5WQG RqY]mD k~ iяEkN=z)w'UI}G _RjT83/kAn28!Evv]ЪVA> i[TcUTJ.T^u*A!'9>EW'03.s2&W <kd2\pF\G /¥> ~obm89Z)}ڔs0uJ|vʶo?Y 5#`ۆ?)I Qjj's9 B 1qj-5iXKA0D0xRB4ݺ0Alb)U>g` >CY}e򃫿67p։=+kvmoxZbJvX`z=]l9FoYs ZDB` +!҇X+@ Me<)2k M\jšH*&o7̮ckQvz>GuQ oUL dgNyBM:n#z}D>!9؇ BGʪG *l¤ZFF97-/ 01P~3TǡTPp(ZgcV9Nbvv J5bIrQmȌSŚl4ÊX:Lnv[8Y1NJNJ(F_9 4qK,;ueW v)x I!!?`WH" ^Y0 sYQ0 Ø"QWNJmD" .z[Z-,hREt!N8鴕 O:Jٗ}*Xx]9 ]ΚA\:~UĪ0UY Ij Y-΋jv"^qIM]JF5VM:+1r9*9ZnnI |[ټH~ϛ%wHa+w.?%O_lfQ2 ξM!d- ބ2t{$ O3`«*! ~7?-ʽCWWjU5.޴v3" BYENwtʕa1-~'154엩VIenúiLFSF9`"j)'1o#'hNj{'VYd7w~nSCfV{Y}pNGqⷶWRvvh]f,=J];#NODHwfÔI Vx b Tjl)S3MP<ʖDC+j h_Rd~P†̎"g d²)6 \YZMՑVQ-R&!L<25Ẅ́䎝ўOݹ~ɯ?\[:Z.*~z׷49Npp7mYYbM߄iˆ*Lz[eNj%5Z'pd`ƑBj bst(]sgK*?nXI-%ŐuA%U s{IN)BbVCrhTiKI/F&֟aKu:yO%y/}nˑ60?|9d%`OM $aP.!VR<Ѕȏb$AlD8Q "R:>MӋX%+Hh_Zd nÈGFQ%2N -_\QmfJosO^3Hic%Ǐx4pI. }z.z;$ZBeʰ^T0 GTxy,R調b8^szCЃ *St*/ezPZ=p=筒#J|&Alָb?צ0ſl^,k}vh>'EDKB=\:8(t&-|GN4<>2tbz^ZŇe(ć/uyRF^6gY/-%ʄ߂+^ђP+x,5ĕ|xbBXYHA <58Ov1 Ws1d-#_PfAԖeA}R*E*#9bU ΌE jf^ *|IJVD;uׇ"w4e2r.xހ`ذ)vՏ+78[?: \deLG.B!A4v ҇`'\iƑ"}9`{؍Msp)/X^e~F2 qy_'D"+zװơ_eT#XKނ?1xU:GlLAz{_=Α#=c};sԎ;w/$?N<+۷B<8y[OM<'ONt*PZDb+pN!L XKpOK4Q:΄<& CʤX"٧8N83Yu$03LU> [aR'j9 4 #`v,xz ى0U8TycCbɇD|>by<0M0&DAX(;ZvC9RRˈ8nűңH=~g*& o:l7'lǡQ^/-V¬Em#+0ߓ_tM'IT3@omu<..-"/b(%PIi&c92(Uf+pW4:ԛ#z+m'S5?W.>j>;˗s;P3^ |ʷfC氊¾`bc…H$%Kx!I3l{|!kBF"}|WVz*c}gkǻ69 ~|irγoo{;G.2lQ8POjr3MB3SDeZu؋?fQpKԮe{aCRkd/^h9Ye_e*{65enczͻ=q^Z{ַFZc It´к [XRZ4w9in^;Vc6|6m5^9bTYm2Y]VJ]ZFϗL<[6ʣ0Ӡ!} 8*ؽ&q/<*|_|iةS̯Pz$c٩E' i<ِmQY ,7cSF?=7\Ɍ=VqHq0?GF;8ӛ|vs\8^,˟J7W.mG=Ɩ]Yŭ?Ϟ?k}-wdu;lp 1=xYhy fHaqp+ػv2ܒ6um#woy"}>kZq r7cQ &5qkA$9 #_5kbLرkQcЏJ-gO`P[/Oѣ$SN:['h%3M,cg ;LDW)覢 $+P 6Љrm4 ٣%0} Q" 0_T> o3f|B^YҊaF[ЬH!T*ÙZs`F=)s*PceM#i)xq&4ea{`jK:-޿c=Yr6j01H4qi䲄bt[lT}иVíEd |yK*i!m臢L cAPm,K%bEd?"ы~fYeTN|_RGa7=qVW+"2+$|z{mVQ"ǃMBoIʛ+)EU@d 0-ثq~h~xkv=''alHiN a(\]gYqꍝQѓ]q%lڰLuw w6E½iɯW>7IWǒkw~\+;Z7Q;# hTO@eP* (hEmm$ ׋A(_gsHPvɺv83x֞ NخpJo=izJ]C?\L7tt]udmm'N|'Ngl;^>fwkY++wlc߳{sM[_4}C8n\|~u?*8\Y"FZ%vy9b$*mT0$UтU+ $~(J b< gXDYJd`ĕ c;hߓtXzoyC awY[NyzHi ڜɥ_b؂dG^fm Qn4af׬_ns\=V "ӿbKD֏3@1ֶCRkx5eqUzǘX0F' 돹3_삶7o/dA]xv_Ah@S+._2 Rg@+X:Z+p%3"R Kӕfs_/}_毴XHil 9JMY-U^ĢhU甭`AiԪhgLu=&>\4] pA/15ݓ#i1/g}dG%DO܊8M:P(YQCpNe߃[1?K5 ECPwts$ 2A0^+ DŽs-ٻup9EӶ 0C;@94q9‚(9 eOY!>aD5}8ͤ[> 3vB *"Si} J%Q<ᄃ3H~ڠ'IR+6+ 6?V 2tZ w(\}=j`qUlI\8L`~ƈ4E8Zk._񙆹"'X:|O=., 5 _n;M[2tmb-r<v4)^Dʧ\]w-髑o#Cq_X[7|k41.doT}UޠMcIo/, NvCl};<)/1sx53mpoVw,FQ8z7hKs?e>:(\חq% ezJ/Z$ЬAD =v1_O%[6^ 3]Ģd`;>jA!$x]]+.Bm-eލj ۰>+i.^eog젶QjHjʈB^  <8L2aqG0nbM=ǝPTQ|'G"k^J<(Zt º":;ʑ|sXٗ<㗅39&+޿l9%^o[u@,6poW׽1:v"wE3|̫—X$?tݷ&_s_Wxr)v4xa*SLHV}1c(ZY!I.d8QD`DDF]~eLCBWȕRz/^t5ڳ;nWҊfnZ#u3ykR%M*tZx*@N |&-:x0ѳz')S+C6,ڂ_7<UV#! bTYM\o20 j8зI<\ψ][iME5~>2^RX\|ko+IS6GiS|e-zWx7kۤm*j7 7|c jס'·L%QQVf 0}5 [s1{X:CGOZ"oO;~'<ӣ]-=mմ~ךYOIJOաdo;z#$cMjO0Hk"k}~;FO.YqHdMTr6M]VYCo?5OG1Pp)(QSAݵu m. *99\rk`sDϼ%eeB>܂IFRbĽ +e n(2p$ &\p5j|7t)Mפ}ѧjī% nM r3nbhyJ ӥ^ZIlxJO\UT}cfs=Xnn#gsNwo{/mRccw_vpy_: ~ھk+$£xymRO|ed3wqfrK=KVcao![Ԝ,J7!PٍF0sI-׉!!")f/:pIn?Yۿ{p^;LKx %|] FMN{X1lHc_W>Us[ϬVF#Pi-lxӧk>6cg`=`㬴rB #=URx #oз‘g_2wfSGPp{gLS$~x&'#%"}Bl܍>Y v,C eFma ٧D'={fۊ l*L? _Հ_uR Zk)zAzy87qE/`(i5.hmd][K-AY _&B εE]ק^ԶtUlIoեߑx=}_]JOO<WxGaIĞ}eIJݖ|~ct`'fe KdZ/~ sZI%5;j#άڈܿ͠~YWbnWoڴv Ų!{Z߻ U&21'\,j( +hߋ2C!y 6kۿsA|mƫb=Ō8)4{ y h2drcϤУ(amδhYl%G(!~*ۿ0\릶C'׍bTtO)y#kdžwc; ()k.Zi \w.>4=84bfT)"qA) q&q<RaO|EkJR_q3zor5$%t9yjiŖް( \?#nψFqixe_,]~v #ڀxfj·=$u$XSd +ud1 PzZѕ0TՑ41'!kW~3{n{66[ z7vm\:ok2f|_- E.%~"-MbTQ& .PoZG_-m #AѱHfQkYe׶qgi|W1RfsXZifC߆ۋu{4Y\T7h,A{+%ho-FΘ['_V7<[Hු"5xc21ǧU*iAfmu?Pz_4X?p0~ჷɲ~?8k]#'?+V*}f[x:瓡mys6oT6)g ڶSmJ"k[3Z-a :a4C׸ӤeRKjr[ܵpK3|RS:i\_IԽw@S@̧ǩzz.Wq{"sS aMZK=H&]ZɓD>V%4Ҝp0&<_)I oM@DZ3ɹa%qPTzp}Z1W_XЯ}LddL6H02$5Y JZi2S2(@o*!M⮕7ytSIPH0ͮWs|MrL޹FGɶ^ 1j\nLئse| 9ئM˅KB!HTU ༈@AT3T;"PhD )$"H:"DjBDqL A>TOgx(MM4WEUTiU"t~Zi0J`)Ԕ68SC~`^r ZB\iIZ_Ekj$O7*EP 5kցaA wzW?.L,qBŸRu ǣ2%Gcxт3v7:25jb`Wт&uݙ("9ad",E:yMtL`(fȊC9*qyrʑ F"1Zۧ1wAIҩй%0}< Г7ʟK+ںtikkwdu|M{(Ծ&7⽴bžmWS._^0HsT+Ąqr:U' ȣnih Qzd &f$ɴǴG lgޒQz๦nsp82̺H0VR/[:5a"-Hv݅Hvi ي&6? j݂i1ƚ:^- TN|zWXϭkBś<7$9H.oϫ_+o%7Ufs*4A<:%*ZDO:"]誈tuAQ\n&@\nzy>4\'!5w+?cGt Hnsi=5C]}Wl_E!BƮ>\4Fr}~6"j ٫w$o:^m>'II󢸓IJ&!^ fGgv,DXץO T() &9('D*CDx`[Yu zsBh<5Dw9yM$}3.aC/ZWwo!ʈ;PFU f|WC U!X`#W"N.1bc$fl:oo Τf=?fư_ 2s\[c[(^+=ٿ.sOwQ3w\iWMѥ`wd/oCsN{*g6ݑymIic 2F|'/6|[v1x v'ڦ۝X}ɱe6k4,K#АV\727fƅ)=5g#3js%[dKYur @h .}'vn _#x6龲p{}kJLK* UĴh:g)-kR8EstQ*DsQ%{1{1mh#՜\06Y[_[ƃ2E+Qo[péxi ,qUEx/ B ~fEJTH -e9ԅKM{dq"9W&8pp3KV-ƕўdUn xϚxʶmknzO/߷Tg}{R t*Tbpw}wYOdžak58WANkO4'35Zg(SyR_UѢp(G6*H*Ex)kʱj7+rMxj_Yi> 8/_ZV[YH+Ev&f % @w΁$jLv ^ Q]xVC\{]𞦺|SJP˨/4[ 4fӬЬmf]f LɺAX-VH꺆N6-Aձx~I&9M Md+zOĄkl#!u A'7ǰL `=O=Sh֠Yȱ+ )r4 ]$%5V0l34v- .U.?g$:wgȑյQJ(qH-`7#jCF1[* eTH e:krErBZ-+n]0̲Y] UxooTJG|`UDa)q}<}UJAHVp:(O<}xMAK<\j!ԛ09."JDPT:-L0bBtWv<ɯI9;-gx˂Y2M3&[5|o 7qRysCM_I`1C81Nֵ!݅Fb߉%"u3|d mU, kK D9ן\W;/oGhmtaKy[[}ۆ҉D:>7]wLvv&]]h6^~dcTO)u,Ɗ|BѺd$&n]TQna \[%{-EPktHӲ="jހ0I$}xZH 2 k"Q 03/M(I𠕖oA{r0b*lՅg?{wk wBZ׳fgDnrDsyoo#m&٠C Ƭ ku),N, 1awh-Nlp˪bKȧ | [̵9hɎWﺨciƔg_^{3/ܯD;@ V5y}UGBV7/Y4 'BE?9Z}+*r(ZuWFb-fϡ_ `&GHax| ƅ4IP h"i(:MI[&J""M1g7C!TTEH0lǁ6aa9đ8kgHt DC7grA'amsWǁL?#QWsr !s!Ԁ`_ ~zkaj! W>Pգ!^VLAxn=y D&\ X*@xqLvB6]bdaug{W00Ns՛WP),d ܺ;Yu6wρ݌b3_._wx--5%+N#|`PYgr^9ÏͣsfM}v~ z.gax+g5g!D GHg'oC@A v|zIڸƮ7.gk{_G_=vjcWw~7b6W1_oZr'.I)Ϻ}d͞_]}l[~ql=ǎ888c;٤M(`*Ya릎A)06BhBSmmTAbC{aHXJЄmX}m{ν~NmO޳zϹ{~򯿞?pׁ$#{țUnRdLk%m[\C^H !=5=[Sz>B"iSz! 8 M#㈊FشZ"aG,l(֫/I<b 8YԭeC';qs p8kn~ZT#{|%[|Ud + f\l."Ւ r $i*,* '\rũ\ERbD >⏄L/1 )[A RVjdonQKzy7)#rY /'Z_,xJbmsj\'2zs֌@'r0L*c%ZNlbjUCbjO N)$"H24DN8Y<> ^Jc9`B)Pr|&M8//ų4r>2Lng+"F[jE qmsQxABAdvp.o 7XaT-g9trpN)hL[3n6Wqnw[ғ+`W$pı]+Oc?̱+5O$(C?9h-ц7uj!;wc熊;qJe:uj]:Nڑu_Q'vdg}J.MWs2 EjYV >UDTYaN< 8=V`;Aq?a5 :,rm}d#'n| m#p42yԲQP"TK%.<] <)iO9Qa]CQt Z|޵AZe{c=>s4'nV:Nw?w#3s ;ܕO9]ŚEzxÓF>q3dg+2z?1X˧FAO9ipM 4Dc8N\cEԧr~y~,&V|s{vP`GgM!qƏe!yfa)Fw͜yg맯~p'ɷ3BdKP<} 1:zG:h?pϝ \y;:זW:#%r 7m+b/]{Xʹ"J6"*k^ 1}y<͜.fZxk+,sOU]Z+8nm]&/ nn렓 Nw/}2#RL8d}K.F lOQL2H:۝k6 X8ds"oX ́EY@pdlXk ]D%ަ=J [$i{ FL I`mBMrM/ۄCDj & d? 6jyV6o y!摜)ذZs hpbDrG]]Vy\QD/]^Q"6aT4&)*a}yNѷ? DZJ1R-ndGw8g5|wRe" n v &|{ 7nIv_&IbtdlKo(XvK hPFW|m.@y2#7=E3ӷ[eHx9.e?LkJ2iØ:|>p4[xwR*~&Sw!&ƀwn}$t`,8u# Ҫ,,Nì Nk^dktS,­h*X?Omtdb ?I}ֱiV5`}s`3f\kM H4z΁*JM@cik9ż1&QEٛ͠3ߡOu"0TUITa{b`'F7>B'pB+gU龜9+$9R!@xc``Ё& LlLۘ XXXv`M`M-{G +4 \Z\Kqp7p~kĻπ$- I ]>%b$ETOFX,{Ra5ğHHIL<&e!5EBYY; rrMr3)(t(RP\HH)O?WʯTTqR?Is!Z*Zy㴏Le-='7EIC+}FNFʘve20aa`ce]Zsll~β=dd^Ɓ!c"g/O+Zeܗxy,<%Uλg2 _AvZ 2 Z|-!).tx#K@EXBتo" "D܈tŒ)S̢DΊ% ơ\xu1NQE8 b b' Kh("[2\K 0&c~r>pƖ jں8dD8Ⓓq vƧzai|.K7&"tɕd+RIbu-a'9Qa~6n^h8?/s X^xH5xS'||xi|gy+|+YD,:Zg) h$2"啬լe W8D3X,x[K$H$IHIdHdI68%.s \[9!9J$_ Pmjp]PӴ STP:.eyFdP+ CT%Re>꺽&*f|o8TVx>yGDCP:x== @llDB`< BkzFo.xy!jN(=izwxkxWkMO_ a6vw[J0,2=sd"|I,ł(X!8DV@>9\JQ=inode-backoff-2.5.0/docs/public/fonts/novecento-bold.eot000066400000000000000000000434161264656751200230500ustar00rootroot00000000000000GELP ?&Novecento wide BookBoldxVersion 2.001;PS 002.001;hotconv 1.0.56;makeotf.lib2.0.213250Novecento wide Book BoldBSGP0B0H5xZWh[qJx"cr,g,E&CĶ@*0VF&Sba75ɸύ P'>] "bex-|LfqpMMA*~Yx#SI@OjVnoa@"` ("zes PPyX`ZRة$V' 8H ҌCj"ułwa砕nyf0N^8iq B2HW7SDn OA W"y1T<0csj?F':,osFɚJ-ML M4>Cnw 2QaI=dDf`셂6D `1#R<:@PDsj{ڀ9ӈ\,X]vSq}^!`!UUÓ$LaH9za]@Lqe&H=AV:72n.)vIz9h GWyaeYieEճ`IfCJ;C%Ƞ4VI m+!Ca˙VU~K3:GG魆flZw][Z0G}D~C͘`8A@Z ƃ;h2Bкb3(M+R9; ӮVra hk3!5wq0LB831|2gE!`B!dh,:{SƢ r@ڥ xSƱ\!}Suo0\_f j"eXˡH 24OVA\¨zsh810( 0z4r62ni2eQG†vֶi;2J(\rFKrM L/IbfᑪVNUPjZͼt0cO$GVNq7RP!rF!H\0)le"ʥ?(&JqvqPtcjhh6ɐJvMc f"4"}sPvn"߀ , 6EfX@Ao u=dR-OX *xh|0^:RnfU[dh\K$ 5~=/(GV}1) ~xYi -2 l%?JB, v]GyA4e%S8Ԕi,5aI^ n/(Tp@OĨ 3]dMМ"~.ұsW_Ң}C]u e3QX=734"0XƜ;!顋1y3Hr3#"Ya :{zt ΁W]P}n4qŃ.@@ }1k% $K1ieFymE2YϠj|0*@m%l!h QǕbr= }ᄽ{!`.z6 %aָ vzUU] NwQ-o4BxZ%g 2do9f:$&_3nyxbC.J#g?KDՄ"֬:-F\Ώ!qiTpyf3*u #B,:&NAo|`rr(zC44V7nJZcPE@ g\dWOSx@>$JC$Y[iIDT~GmBx dR8LQq,́ ( :;gc)Y1Fڰ|ppF,JVsLNRLݼ%΅m&ށFDkQ $d9ʷ(<\̲f!#k,:?CklEڽ IaR")H-Ky>Uy<&.%?{kݯ[DekRA5 /M} le,0C2]aQ xAnao`Cҳ\ p}musey:jy+jI/sxtV4sā }RBgU,'Q8WA vdxauAϞ3oU4iGf}u?6Qu V:Ja1Ebx Wԍ1Yj5#w,'f|k'w*bg̚.,bmQف^`^[]:]&Ln j"wϛDo$9UmAt+ @򿠲(i0NN|6N`rO`puO(c3"F/zʘ; I.=Mz*KTXQ(s3ATCyLGibbAA0tOO.Je!EDe"yz&f?O=2/^VpA@1K^GChגXa:z~ o\ǨȪH0T)2u%|G^c݀Ue%T3@nVPR|,ǰh^ kO۝` p˶q :)ZD]{o34#t}!?A ys4*Cs H%Xڒ%;<TYʢLG0Kꯀ:FO2 w%Oi7NZIFN O43 %ܱ Δ+$,+Po#mDfG]t3Kz ma*%YL4CPn|9YrJ>Q V< f'|`_$ujl$טoɋt4'u5%`rlWJCjӢ j5 ڕ!VDzSu 6#R6DA}  لZyg~8 i/#` @1c] />0 GuVp52CUrH_Co0@I$4x$hs 4EaExqC/Ikn^Sp,hXi?iDU%8z4G(T7T}f#?5)*|>ȝaz2y T(-WLS}_@@L^2:iyPOEWʢ\~ mMOH D"/ܢdOd?JbJxp-r:-'YU;GF|9{'$."(5|DdD_((0֩7ʖCE@OnBJb+iv7zN#}}0QM*8ʖx=mB"xY_ݒE6S6ZFklBdf 增WŴNh ۉ碜(GKSGJ85jD)伧|zT/23Ebo_aӑY9Ir 5!wFϷukDt|sd\8\VV }dU]3lË@aZ./x]Bc &/k<%_^ɞ`TS:Ī'Y3J[_HٰS@6qhD4]o9M~Q/3TVnd:`b5"'l14UFjvG/[VuX:ɸ=ًA0sOJ*(A&W38ǔn9o*"[USa1VŖ bE~ -h/8 x$-ZՔ˚=cScT 'LYh Q 8%"i69-ʱų'.Na%T8 |VBu4J⩢ gHMc?s r}Eu[|"#[Ϧ60p}hSZkppO5E%jVD56CXZC{fhPJFΜ sE`3гܭD(Ҷc)e2< PcM`Zi0]x6bAMxs 3ܮ]ƖջL34F :̨z$*MռcWs"Mg+Ɛy Xhg(G#m H7ʞ"xu%^} 2z"Zւfj+Dy{Ȑ,,74o 6IK8zEh& v*a8B'<%CSVFIZ]nF-^~웒#DBHLz9|HN!φ5KL "9lcC'UᬈlFKʗ|l2C\bC*Bz_`i`s[8) . Yo)i9A60-oH2eTlabJtH_MZt`IY8!KwQ}Ɵ ?8fȢn$Z n YɁ&F6UtPr?ȸEsq] C%F [A`LvF*ƀMvUklap uje -6v@͉&oRG,`]oEHqh]]u@K1.rDZ) V;]U'%Sˉu5/x5>'ag9  UhVxfK (y^%qlA)PX.BS!]BF5s*^ R@duimN~firD(9ILmrDK!/c'9OǾ3u:)p*1l"O4<"T]n"2+K ^+^4$_NBR-KE  #m ZEӛfݏh@濰Zz`膖ʩ1] G4_⍤¶0f}kUwF{BKube(&vBOpJ+ LÜH蕱: 1AevHOU7Vdd VÂuR=_xz&$vۄ`tx0M\cM`bnBR!,W2A@6364jE(>b7)WZcdݯ8.@4z}5q5%-˜ɕdz0g)%;Q劼=5ejYZk'SSӓZ ww _e1{.gaK;+<`6Wk,;i^j3 &HRY8yy){Ov &\r *t:9}N@S0f;/+PLM&O%gg,CDN]f__!~h3\Og+ Hoi^A-OWg[NLc cD(5-[D|V^p7$eG't-!ALϡiC= = 7؆`5KPԘO䐹<٠< O. Σ{Gn> z5 O&'6aqxAp єis&Xvra.r'2w8<#UIɢ%f|s*qi8ZMVb-5,| HcSnf Įib l!B"Î$?tNX*l.1`$[LMB 3hZ|]cC(hBI;14zQNiM[ \eVc}ng10[_!Φ' ښ;gL(2IB,_RTb#cO4' x>3"Wu|$s!(iGv3 .EB|)h H׹vˡrs#g xkC:bMqvX`Ml7lD ?Pg3:#ꊑ$@A.K` =6`!3HTvdcJ"KNgζ޼Lez2Xﷵ1?fd22c bo¶#Kc_,zX\NUu+>/U+\$l'H:W1;ЧlcDl؋CsYhiT,ly6fho s wp45Γ5#[Y>IT (%[<0wU{j%\_6keOXL:A^YUcu>KԁqZjւ mmw@9&ʚ%qPf|(ENdI@hw* Eן9`6,[ѲqcÐ>AʻјP!J5ym@ I RLoM~4"DAQD^T'BԿ!* ^C 1 VDgwk9ىp*Ua/R!: !nܤ 5 rcsJK~LQR1LPU_ ?!4Q;lDŽŊEۜ8|jj]:)ҙ<01|Zt51 ]CN~mU.hJIK#Aa1zYx Y cgg]04?r0`:!8d:J6`P+v҆j[5$`ކGOAcZ1g~ƴ=n"S"8P4To$ј s'۽!DVLp]$F֎"<#IHNU-;0%$w "`@aHq|\,"'xL:7ʶ1yxcPX3vm r F$t˓ݧC(,Xi7'IJPQ裊dՊCDN!D6E3>ar\5W,3/$YfdOь8DVOSбʌk;HXdB0zJaоK0w n=;HW\ӄ<90+MҬT,K4h=7 . w*;2f-x/L7R-22$?U#J"J U&tG)h$d[i Ha^;=ɤ#D; J"8 #kE/W }^MR5Jels[/5nkg"A;_"m'^3#Tkbtq%]3T QC[=hA+box?h9!9ͭ:D)ܡW+aCф]4]o(0iz ؽm`KDFeW\ξuK3F=M]^U) G{kpz0@OrhhiA)s&oVp)@&ih{O aBP&N,f~"/;3A*>WFȎ~,UU/5[2Ma~d`J^QFIp2ZkغSl.Fp`'CMjXdgy ?5zHRYGꁭ{ gD=}<G^/|L6vqǞN}=O@F|`Y`ȴ_S"u)|0n( m8n12Fi{S8oXmBF?Wbl܂ yS_g` (*kd%OGe$|}@ܶбT%zCt &,21Z/Y} 9%^)<ɆϻPG=/o0$W:^8\ 5Ŷfq-z.ثז:dqJA9 DA ^t.L$hbe2\oⱆ-&UCtQ2bY%1aXT 1 ]~^=s~ xDD3d KYDW5Dxpt+; Vac1-*^z4i_y5fcp8tZmRz)I̓79f'cDЂb~E!1j_h;[}oadF(W֜ zܓ7дiZ`Aš@a&vTEC(fmb4Ull+A@3沀؅ imV)>5C.ka?GtBEU#Y|7>B'4%@LxjcYs`7'dp82Q`a_H0Xl&sf%A]4-9?ObjS-cV O3?)#4f&h{t@KP8fuxj.$sDr,P^4bspD[6T=̻k$yB6Ie \Lݑ[cz)@4~39 &8\;H؉BhvTF~mGټb2+ &ulbš@,$dEs b;F6ed]pT2:ȶq &G8#c8 xY+f‚5 3!Aj}7h@xc&Nj X)Ҙ( Mn0JXBr]?bUP5+Hfz.ݱcrdYk&A#TleU&)w'S|t9g.d7zg6~j[~ URqL('PdG<&2b)"Pb s+ JXAC{YYn%/ B$0Vvz G9E#b>1R%ˬQ$P=8)i,[:q P)z,JN} -Kxn<l/O92֚,qfŔ #b/1dp7+r٫?ճ@m5D,ڵV匤d6ʌ(hBϽPPd77 KV,RoE@l7B-* SG} 3BցvEiR3T?)hKQr nhfZ5jn_w>!C|5NxD %˹JKr=@F;DgLHU$̣+8/%&X+㸥vq/K.\Xʎ%+/GPP"8[eAMy x#n&Qe u 9e ' (f@HB ?R ?S:K +sRcRoT5 Mnt$ϙRxį6''XGurCa]w0i 5h&ʉ`ŭ3Ap8̂LhDq D 9!~^(ȥj.m@%S)x8ժ-PBMQ;k׆%s4ͭ%ը$C#WR[IMܺYh$Lz4<>˭ó1V1T Xmy>6AƮS a]UvE4K?~ Yc1%'AFh5  b|n6QID&=<>vnN-i&PBX.>/pъH " ńp ľ%|A#qaxaXlq)@yc1~y pQБYa@ [,z}hnyPmcYb&nNzEzu%^{%L{rcHI2Ԣ'':c%3etm,gS:Cbx;0GPtJ1-ަ]Ym8!0N. 3.żenz[XۙL EnZ3EElOgajz  ĝ4 %;9T[3op #ϴڲ,\)DlHa= *|\{/:a[Vi~6cUƿR/$ f-bj5)gXʊL7q:̗0VI‹9zBdNIr;[umq |tXuoYuy dѢߊŁ> A?!?֐D0P@/61M !9d W d!U L\.]# ئlGL HɣjE֯{agW!*/~+_mEFGmC>Tm彡1D,۰1 swX7ꎽu!H &Ply~'?up"G0KMOAMo B /CJ@IAFo ]7%pFf&f`g l(F| / +]›DW~ qT[̕<r RVxu Hin%5uωjEg6`T?,+\e4XI ^ զ&2bYa7?F|\iD- I@ᙜ9Sț,9VQ^qSc,h;L F1S$.cjcŎH|KC3Dt3#LvnPDMIȜSd|LYHd\ :& Bpr;-S#>uk~X́b/r,JaS~Qy]5 !Ak r?tp(@pP| 5Llԣ9%u, ר)-@lj9d[-NxR:GYeQ\T>b%t .xcGSsƱJ rBvD,6,#˴ טWt uTLPQ li wO/JsyL7nw[ȅ9Kl L.iDA/uDȔTutH$O h>D+I#O88xHDU= B>1Lf>h]yTIӴ["4Iԙ/4bR =&?4MH>N'nj+P0Ae$W!^z-G `^E0>uwdElΦGLjJ"_.ۍ#cERvRAaɉXWV]54S˯iO0TR( 'Q#|޽cE,~ ,P4E?p4#4L ݉k ʈ+cYxV'J${%x>sO|P'm/ YX'6V̍U,W32c+-Q>XGjljK8frWq4K`˿3d3|Z2'ŸlQqY:COΰVrI~F繪2zt= MIfjw`tŧ JR.#6)ZSVR|J){qkHn{uD /@;֥)gQz@Z@8lA adF!pFRM@lUd Bxۣf9Qaiw7!]hN /q|&s䀶jB}),)cB㞵W&8 aF< s} ,{wS/x@WS\w!˃aB`[X`);0~ 3`6[lEDfJ>F>xXbb&kRNÐ""G'$/dɞDsV5B9<w w1i8:2tj5AF*-R80=ѡ}>IiݐQvJ0HRZc1毳>n4|ʑcsӑK,M*o:   T9 LbcKv;S|nM9BԿ6(ApcO`*-#͍Nl9ŕK03!FFK6 ޣDKݍp`=XQix#k~ Dm܈DkxM`Q}YY?aV@2f|q8Ffb[ ]3~a?S3^vSVȥ{ϺwBB(E %ZER(3node-backoff-2.5.0/docs/public/fonts/novecento-bold.ttf000066400000000000000000001360101264656751200230470ustar00rootroot000000000000000FFTMd>v5<GDEFX GPOSTx GSUB-C.`OS/2vxS`cmap]tcvt `2fpgmS/egaspglyfs0head46hheal$hmtxpCIloca6 maxp nameg7 post~.prepP/webfhQ==ʝxcZ <JDFLTlatnPLK ROM kern aR$:P^^^^^bhn! )333)$ <?)D \glz3 H9):)<)Y)Z)\)g))))) 3$369):)<)?)D3VY)Z)\)g)3333333)3333333)))d)lzlz )3)?)lz3)?3 ?)RR??R)6V ) ?)q))$)93:3< D)Y3Z3\ g ))))))) ))))))) )\ $ D a #$')+,./0123479:;<>?DGIKLNOPQRSTWYZ[\^egko\\3)H))R 3q) 3 RR{q )33\)3\\))Rq 3\q))R3333 )q     J   ##$$%% &&') **+, --.1 2233 4455 66 77889:;;<<== DDEE FFGI JJKL MMNQ RRSS TTUU VV WWXXYZ[[\\]] ggkkoo      #= D](eeBggCkkDooEttFG^e| @ZDFLTlatnPLK ROM fracsups(4 yst337SVTD |  .  ~Sx    " & / : _ !" Rx    " & / 9 _ !"nJ5   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aqdeivokujrglzcm{bַwpxBE!).5<PTXX'RXcgnD,KLPXJvY#?+X=YKLPX}Y ԰.-, ڰ +-,KRXE#Y!-,i @PX!@Y-,+X!#!zXYKRXXY#!+XFvYXYYY-, \Z-,"PX \\Y-,$PX@\\Y-, 9/- , }+XY %I# &JPXea PX8!!Ya RX8!!YY- ,+X!!Y- , Ұ +- , /+\X G#Faj X db8!!Y!Y- , 9/ GFa# #JPX#RX@8!Y#PX@e8!YY-,+X=!! ֊KRX #I UX8!!Y!!YY-,# /+\X# XKS!YX&I## I#a8!!!!Y!!!!!Y-, ڰ+-, Ұ+-, /+\X G#Faj G#F#aj` X db8!!Y!!Y-, %Jd# PX<Y-,@@BBKcKc UX RX#b #Bb #BY @RX CcB CcB ce!Y!!Y-,Cc#Cc#-DdU./<2<2/<2<23!%!!D $hUD8+++/ְ22 +9013!!XXB3<+3 +2+ +/ֱ+ +01!!!AACC77P+3++ 3+ +3322 +33 22 /!+013#3!!!3#3#!!!!!7JJϛNjě+++)HR;8/ +"/ +=LL=>M-ˡˠM>=LL=>MXh괳MkkMOlmfh괳MkkMOlmH&1$+* +/$ +32/ֱ' '-+- +@ +3+' 9- $*$99/*999 999014675.54$32.#"3!##"$%326=#"Hu+XO2/$e].D$cc%BPz]~jmv*HqC׼Pf]0/EYygSH`m{f[/+ ++ +/ֱ+01!ACH/ֱ+014>7.H1KLbQcA'VV4UgrK2{ڧgZ82 ::"N] %/ֱ +017>54.'%V4UgrK21KLbQcA'V'"N] {ڧgZ82 :q(++/ִ ++ 9017537''7AվB}ur}B??8 R/32 +@ + +@ + / ְ2 2 +@  + +@ + +01!!!!!9+<JJJV+/ /+01>57'.5462V5g.I_\d!2N #".32>4.#"H\.]ɗ +"H:?f+zK%A@j)M+22+'*/$ֱ2$ +@$ +++99'!)$9016$3272>;!67654&#"j5"A.^/53{D !-?EW,ccrdRB'8gMT2K"%$T-WZWaaCaH+l)+ + ) + ,/ֱ&  +@ +-+"#99 &999 !#9999901%32654&+32654&#"%6$322#"$H7]Rtq]yyY]dRPk!0$6T^*yqVP`YLEW R@BOV^RBsI)H !l + +++   +3 2"/ ְ22 +@ +  +@ +#+ 9 99901!3#!2>;54>57#"H0P*,FrN)FF??4' <\]j#P+ +  +$/ֱ%+99  $99901%32654&#"%!!632#".j<:XsvU&ׁ/ 8jj^NTvYZsgR <\!x؇=fH(a+ ++& +)/ֱ#+*+#$99& 99 99014>7!>32#".%32654&#"H#MQAs o\bd}~cd}RyWo  ㉎yw[rtY\qs=)+++/+ 9901!!>?'##=JL*l! -4:XB-J12H+7 +5/#)// 8/ֱ  ,   /, &+2 9+, 92#) $999)#99/$95 99014675.54$32.%32654&#"32654&#"HnHF..FHnG~`b{}`b|mTUklTUl1Mt?ޥ?tM1zttȄOefNOef3BTV@FXZ) a + ++  +!/ֱ+"+ 9  $9 99990146$32!'#".%32654&#")ySxv=Lbd}~cd}˓wwu#PV[qsY\qs{{ - +//ְ 22+0174632#"&4632#"&{_CB]]BC__CB]]BC_B^^BC__B^^BC__{{,//ְ2 2+ 99901>57'.54624632#"&{5g.I_\dX_CB]]BD^!2NX#FxM\(. ";75\Ua-BH%CR?+2++++G? ++2&+& +@&" +P? ++S/ִ. +.+D+DJ+ 2# +#(+  +T+JD+2?P$9#8999(99928999G&99P (.$99014$32#"&/#"&54632353324#"32>3#"$&%326756.#"HV֡r5N{LRMѬHb(0wɍDsE2#Ok]p1c>5a30>eYr;tvX8bD9b๺HCEJCI%72#o\XPT6L$]1+3++ +/+9011!!'!!.+"=F>RRZf #" f#kEEk#  g++  +!/ֱ2+  "+ 99 9 99 9013!2#32654&+3264&+nnEeUfhSEZZEܟ`m!ZHJWMvLH3+ + /ֱ+  $90146$32.#"3267#"$HuYa1Vתf-\Z͟pί\=Hᴷ^JZW 8 + +/ֱ  ++ 9013!2#!2654&#!rRuҞfBӲ G+ + + /ֱ 2 +@ +2@  + +013!!!!!F# @++ +  /ֱ 2 +@  +@  + +013!!!!ZH*{++'+ + ' ++/ֱ+2 +@ +,+ $'$99'#999  990146$32.#"32>75!!!<>=##"$HuZb3VRU6>l͟pͰ\=Hᴻ'EI,+BPWh D+3+3+  + /ֱ 2 +2 +013!!!!!XX+f-&+++/ֱ+013!Xf0 +++/ֱ +9901%3265!#"$RMX߿RZ)ј5+3+ 3+/ֱ2+99013!;2>7! !X_?\dkNyg. c?[Ty%1+++/ֱ +@ ++013!!X7'X+3+ 3+(/ֱ'"2'+)+'9 999 999013!;2>7!!4?#"#.+C ->>- C:CC:MIkkIf^33atta33!Q+3+3+"/ֱ!!+#+!99999013!;65&545!!.+C1'sX7gf4ܠ0kHfL )ڃHD+ + /ֱ+ +99 990146$32#"$%32654&#"HuUvfԭծ͟pԟqWԵᵶ J++  +/ֱ  2 ++ 99013! !#3264&+#-dqqd4=ZZHW+ //ֱ+  + + 999 99 990146$32!&32654&#"HuUfԭծ͟pr79ᵶ3 [+ 3+  + /ֱ 2 ++  9 99 99013! !#3264&+ 6}=UWWUߐ;-gg)5\3++6/ֱ""+07+"9 )3$90990$901%32654.'.5432.#"#"$)JkX\*PBu'3J^@;514SJW'I(bGrxP3XZG8/ $(!5=Oh=ݬZZ`?-!"5PZ|G:++2/ֱ +@ + +@ + +01!!!LXBXw<++ 3+/ֱ+ +901! 65!! X X}뵫]&++ 3+/+901!;2>7!!y))yF;;Ff)?'8'+3+3+(/ֱ+)+6=**+  % #f+  = +   +  ++ +++=+ %$%#+  #9 9$%#9 #999@ % #$..............@ % #$..............@'99' $901!;2>7!;2>7!!.+!)o %B$ nN \9x77v;;v76z8f>z9z>jo++3+3+/+99013 !;2>7! !.+"5''5f5--6H77HA% \NM]  2 + ++3+/ ֱ + 901!;27!!GGii{{7!(+ +"/#+99013>5'##!!72>3!{C,08@D&'*4B=%BoF& 5///ִ+2+2 +01!!!jr'!f#f"/+2+ +9017!!!k rP^ +2/+901  ߓV++/+013!!V / +/ִ++017ub1+3++ +/+9011!!'!!.+"=F>RRZf #" f#kEEk#  g++  +!/ֱ2+  "+ 99 9 99 9013!2#32654&+3264&+nnEeUfhSEZZEܟ`m!ZHJWMvLH3+ + /ֱ+  $90146$32.#"3267#"$HuYa1Vתf-\Z͟pί\=Hᴷ^JZW 8 + +/ֱ  ++ 9013!2#!2654&#!rRuҞfBӲ G+ + + /ֱ 2 +@ +2@  + +013!!!!!F# E+++ +  /ֱ 2 +@  +@  + +013!!!!ZH*{++'+ + ' ++/ֱ+2 +@ +,+ $'$99'#999  990146$32.#"32>75!!!<>=##"$HuZb3VRU6>l͟pͰ\=Hᴻ'EI,+BPWh D+3+3+  + /ֱ 2 +2 +013!!!!!XX+f-&+++/ֱ+013!Xf0 +++/ֱ +9901%3265!#"$RMX߿RZ)ј5+3+ 3+/ֱ2+99013!;2>7! !X_?\dkNyg. c?[Ty%1+++/ֱ +@ ++013!!X7'X+3+ 3+(/ֱ'"2'+)+'9 999 999013!;2>7!!4?#"#.+C ->>- C:CC:MIkkIf^33atta33!Q+3+3+"/ֱ!!+#+!99999013!;65&545!!.+C1'sX7gf4ܠ0kHfL )ڃHD+ + /ֱ+ +99 990146$32#"$%32654&#"HuUvfԭծ͟pԟqWԵᵶ O+++  +/ֱ  2 ++ 99013! !#3264&+#-dqqd4=ZZHW+ //ֱ+  + + 999 99 990146$32!&32654&#"HuUfԭծ͟pr79ᵶ3 [+ 3+  + /ֱ 2 ++  9 99 99013! !#3264&+ 6}=UWWUߐ;-gg)5\3++6/ֱ""+07+"9 )3$90990$901%32654.'.5432.#"#"$)JkX\*PBu'3J^@;514SJW'I(bGrxP3XZG8/ $(!5=Oh=ݬZZ`?-!"5PZ|G:++2/ֱ +@ + +@ + +01!!!LXBXw<++ 3+/ֱ+ +901! 65!! X X}뵫]&++ 3+/+901!;2>7!!y))yF;;Ff)?'8'+3+3+(/ֱ+)+6=**+  % #f+  = +   +  ++ +++=+ %$%#+  #9 9$%#9 #999@ % #$..............@ % #$..............@'99' $901!;2>7!;2>7!!.+!)o %B$ nN \9x77v;;v76z8f>z9z>jo++3+3+/+99013 !;2>7! !.+"5''5f5--6H77HA% \NM]  2 + ++3+/ ֱ + 901!;27!!GGii{{7!(+ +"/#+99013>5'##!!72>3!{C,08@D&'*4B=%BoF&.G%/$ / //(ְ22( +@% + 20+(9 $(9901>=!"#23 54.'-#@*;VT-"" 1LG.&' +?zM6=4>?.=4.#23"O&' -#O.GM1 "" 1MG#T|Mz?*+?zM|ΗT &ArNxN}D--D}NyNr@& s={3/3  +2 /!+9 901>3232>5#".#"s Llq:@ci"(9  7J]\-R*)9 NPyC!(/()(L@iD.@?('8+++/ְ22 +9013!!XXXBHse+++ +/ֱ+22+ 9999  $9990175!&#"327!5&H{3J~n~~n@-/̄%/qNcR{/,x+#&*222 + +32-/ֱ +@ + +@ +2.+!%$9!"9999013>/#3'&>76.!!72>3!S3 {` GvTOT$%'6/>h3/ְ22 +01!!R=);R9+++$+S/ְ2<'<+F2622T+6Ž+  @D  + +@A@D+B@D+C@D+A@D #9B9C9  99@ D @ABC.........@ D @ABC.........@<99'$,9MP$96 !4999$ !6P$901%32654.'.5467&54$32.#"#"$654.')ZNP#&?5U6L]9(UM/vI>I;5d Lup=ؽ  5*Eh"0:8EJA[4' 39W4Bk$QxsJ@A+ # 2Je>7_k T 9%PR //3 2/ֱ ++014632#"$4632#"Y@?WW?AW@?YY?@{~YY~VV~YY~VH3+++2, +2+ & + +4/ִ++) +)+ +5+)9 #/2$9&,@ #$./$90146$32#"$7 54#"632&#"327#"HuUvʎf(-LBMMBY(#l͟pԟqW &mX39RIHTN5`w) W++/+ / +/+2+2+ 99 99 9015!3#'#3'.+")`Io  LVjj1-]//]- 7 '7 '33%%!%%J?b//+01!JH)2+++(* +(+(* +@(& +22 ++3/ִ++) +*2).+" +"+ +4+)9.'$9"$&999%9*( $$92"90146$32#"$7 54#"32#'#32654&+HuUvw}9^$$^͟pԟqW }i7{')T\//+01!1T% V/ +/+/ִ  + + ++ 99 9999014632#"32654&#"%~~A+/BB/+A>5+AA+/BBa+/ 3 2 +@ + +@ +/ְ2  2  +@  + 2 +@ +2+01!!!!!!5`9+<\J軻).B/+)/+//&ִ +20+99)!.$901>327>;!57>54&#")v~y%-:&*4Z%   /#* gtyj""   *-)(j + +&/+/+)/ִ# +  +*+ 99 #999 !9999901732654&+532654&#"'>32##"&)q+6:-GG$42"1:wh5Egu3b,"'--(,81kgI[VNnV / +/ִ++01uH O +3 ++/ ֱ  +/ ++ 9901$3!!#!#"H\!fV={9{ " / /ֱ +014632#"&{_CB]]BC_B^^BC__A +/+/ִ ++ 99  990173254&'#36#E; b+[GkDѲ/sxcOj* /ִ ++ 99013#4>?#"2#)l.$ )% h++ / +/+/ִ ++ ++ $9 $9990146  &5!32654&#"(#S?@SRA?SRȘCWVDEWW  7 % 7 5͸5͸%%!%%! 7+3++3+ ( +#33 +2( +@( +8/ִ ++)2 +2 +@ + +@ +9+ 999!299999( "99.2999013#4>?#"3%533##5'72>;54675#"2#)TTè P ^ m.$ )%f"s$ m >/+3-++3+9/ +9+?/ִ +6+ +.2@+ 9996$%0$99-/%19996>$999 99013#4>?#"3 >327>;!5767654&#"2#)Bvy%-:&*4ZN$/#* m.$ )%f!gtzj""B+- )-)=(,7N)+53)+*+*+++7?) +1:337+32?7 +@?/ +&) +&+ ) + +O/ִ + # +6+@25 +0256 +@53 +65 +@6- +P+ ,9996#*8I9995/+99?7.999&EI99 #999 !9999901732654&+532654&#"'>32##"&3%533##5'72>;54657#")q+6:-GG$42"1:wh5EguTT¨ P ^ X3b,"'--),92jgIZVNn f"s$ m Hq!U++"/ֱ+2  2#+9 999 $9014>7675!3267#"$!H,3wCQX1BUWas"!.rXFyM]). r)A<5]VaPB 6+3+++  +/+ 9011!!'!7!.+"=F>RR#ubZf #" f=#kEEk# 6+3+++  +/+ 9011!!'!!.+"=F>RRltZf #" f=#kEEk# 6+3+++ +/+9011!!'! '!.+"=F>RR/JZf #" fwV?#kEEk#R+c+3+++  +/ + +@ + ++ +@ +,/-+ &9011!!'!46323265!#".#"!.+"=F>RR5e>J(2 3c?K(2;Zf #" f(/(2&'0'2&#kEEk#R's+3+++ +/&3 !2(/ ֱ+$)+ $99$$99011!!'!4632#"!.+"4632#"=F>RRHZ@?VV?AZf #" X@?XX?@f{~YY~V#kEEk#V~YY~V*o+3+/(/++/ִ +%+  +,+999%99  999( "$9011.54632!'!!.+"32654&#"=CP~MB>RRZf #" 'A+/BB/+A(Q~~P*f#kEEk#{+BB+/AA_ +3  ++2  +/ְ 22 +@ +@ ++9011!!!!!!5!!#"?WE#:RZ"8J`/H0R+ #/$+1/ֱ'+ +2+' #+,$9 $ $90146$32.#"32676+73254&'#.HuYa1Vתf-\S!Z(EV2E; ͟pί\=Hᴷ^JZZxcJ(2 3c@K(2ԭծ͟pԟqW(/(2&'0'2&ᵶHR'1o+ +% /03+22/ֱ+"+ . "+))/.3+)%$9% 990146$32#"$4632#"32654&#"4632#"HuUv=Z@?VV?A0ԭծX@?XX?@͟pԟqW~YY~Vᵶ~YY~V 77''7H'l+" + (/ֱ%+ )+9% $9 9"999 '$9 9990146$327#"''7&&#"32654'HuLNvLLf-1B60'͟pIbeqDbb!sXR iYwG++ 3+/ֱ+ +9$901! 65!! 7X Xtb}뵫]dwG++ 3+/ֱ+ +$9 901! 65!! X X{u}뵫]EwM++ 3+/ֱ+ +9$9 901! 65!!  'X X}뵫]7VwR$p++ 3+/#32%/ֱ++ ! +/!&+99!901! 65!! 4632#"$4632#"X XY@?WW?AW@?YY?@}뵫];~YY~VV~YY~V : + ++3+/ ֱ + 9 901!;27!!GGVuii{  ]++++  +  +/ֱ  22 ++ 99013!32+3264&+X5[ee[P#^^\+`++++*,/ֱ+++ -++$9 99* $9013!32#"$'%32654&+5765'##!32GtJFGW[YdZ_}I~XJcKF^ 6+3+++  +/+ 9011!!'!7!.+"=F>RR#ubZf #" f=#kEEk# 6+3+++  +/+ 9011!!'!!.+"=F>RRltZf #" f=#kEEk# 6+3+++ +/+9011!!'! '!.+"=F>RR/JZf #" fwV?#kEEk#R+c+3+++  +/ + +@ + ++ +@ +,/-+ &9011!!'!46323265!#".#"!.+"=F>RR5e>J(2 3c?K(2;Zf #" f(/(2&'0'2&#kEEk#R's+3+++ +/&3 !2(/ ֱ+$)+ $99$$99011!!'!4632#"!.+"4632#"=F>RRHZ@?VV?AZf #" X@?XX?@f{~YY~V#kEEk#V~YY~V*o+3+/(/++/ִ +%+  +,+999%99  999( "$9011.54632!'!!.+"32654&#"=CP~MB>RRZf #" 'A+/BB/+A(Q~~P*f#kEEk#{+BB+/AA_ +3  ++2  +/ְ 22 +@ +@ ++9011!!!!!!5!!#"?WE#:RZ"8J`/H0R+ #/$+1/ֱ'+ +2+' #+,$9 $ $90146$32.#"32676+73254&'#.HuYa1Vתf-\S!Z(EV2E; ͟pί\=Hᴷ^JZZxcJ(2 3c?K(2ԭծ͟pԟqW(/(2&'0'2&ᵶHR'1o+ +% /03+22/ֱ+"+ . "+))/.3+)%$9% 990146$32#"$4632#"32654&#"4632#"HuUv9Z@?VV?A,ԭծX@?XX?@͟pԟqW~YY~Vᵶ~YY~VhD. ////ְ2 2+01!4632#"&4632#"&_CB]]BC__CB]]BC_JB^^BC_^B^^BC_^H'l+" + (/ֱ%+ )+9% $9 9"999 '$9 9990146$327#"''7&&#"32654'HuLNvLLf-1B60'͟pIbeqDbb!sXR iYwG++ 3+/ֱ+ +9$901! 65!! 7X Xtb}뵫]dwG++ 3+/ֱ+ +$9 901! 65!! X X{u}뵫]EwM++ 3+/ֱ+ +9$9 901! 65!!  'X X}뵫]7VwR$p++ 3+/#32%/ֱ++ ! +/!&+99!901! 65!! 4632#"$4632#"X XY@?WW?AW@?YY?@}뵫];~YY~VV~YY~V : + ++3+/ ֱ + 9 901!;27!!GGTuii{  ]++++  +  +/ֱ  22 ++ 99013!32+3264&+X5[ee[P#^^R !r + ++3+/ 32"/ ֱ  +/ +#+ 999  999 901!;27!!4632#"$4632#"GGZ@?VV?AX@?XX?@ii{~YY~VV~YY~VH +32+ 2  + !/ֱ+ 2 +@ +@ +2"+999 99 99901$32!!!!!!#"$327&#"HJȃE E#?ƧwQJ~M##H +32+ 2  + !/ֱ+ 2 +@ +@ +2"+999 99 99901$32!!!!!!#"$327&#"HJȃE E#?ƧwQJ~M##R !r + ++3+/ 32"/ ֱ  +/ +#+ 999  999 901!;27!!4632#"$4632#"GGZ@?VV?AX@?XX?@ii{~YY~VV~YY~V!/3+/+901 '3wVR9/+ +@ +++ +@ +/+0146323265!#".#"5e>J(2 3c@K(2(/(2&'0'2&J?b!JJ?b!JJ?b!J5w//+01!r5B5w//+01! 5By++/+014673"&d}5g.I_\-^O!2N57'.546325f.H^CD\dy!2N57'.546325f.H^CD\d!2N57'.54632!>57'.546325f.H^CD\dZ5f.H^CD\dy!2N57'.54632!>57'.546325f.H^CD\dZ5f.H^CD\d!2NERI * GQ[MV ++ 33+22++++2,/ִ + +@ + +@ +++ +++ +-++ '99!"$999999015!##337>?3#54>+"#'&+"ol""lP3T3L++ CC f+R#uMMu#R+1!fA ?_<cZcZ??Dv7) H&H&%7V7{&HHjHCHjH=H)7{\{HlHGH?MVHnE`H5`Hp)h){&CGH?MVHnE`H5`Hp)h){MsH3\HMC)`H)X`H%))H7{&X3p)H1HMMMML\HE`H`H`H`H`H`H31HMMMML\HE`H`H`H`H`H`H3HHMMoI|||K={jHM,,,,^8R 4RH.86r  b D 6 x j @ h 448xXZ NB~@ bdRd2``x\t J !!!"J"##<###$$|$%N%&'J''(,()))*h**+J++,,L,- -..d./b/00~011r12,2~238334F45>56 6V667`7778J89D9::r;;;N>?8?@"@F@@@@@@@@@@@@@@@@@AA?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjikmlnoqprsutvwxzy{}|~     glyph1uni000Duni00A0uni00ADuni00B2uni00B3uni00B9uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni202Funi205FEurouniE000KPXYF+X!YKRX!Y+\X E+D E++D E ++D EU++D E?++D E0++D E(++D E !++D E ++D E  ++D E ++D E ++D E+D E+Fv+D E+Fv+D E+Fv+D Eh+Fv+D EP+Fv+D E8+Fv+DY+Q=gnode-backoff-2.5.0/docs/public/fonts/novecento-bold.woff000066400000000000000000000501401264656751200232120ustar00rootroot00000000000000wOFFP`FFTMd>v5GDEF GPOS TGSUBl-C.OS/2O`vxScmap<]cvt 22fpgm eS/gasp glyf 70sheadC46hheaC $hmtxCpCIlocaEʮ6maxpGP nameGpOg7postM~.prepO/PwebfPXhQ==ʝxcZxc`d``b `b`@1 xڥMlTUsg:tZhA~o)EPj&H +t4*("D-QIMjՍƸ( W]߽3m?y{޹s=^&nvܿ%b\/;ٲq"ӛ7;:طn 5+l/tلMT%l1HaVpt{\hԚ^o5Sk_5[Cka1߂^?nbTT),s>T%UY=BA!VR 5# 6xE{;<;`'{`/iVJ/] 쁽p~'3 oMj-50& [QhWi X^C hR aX H]cR8,toffh$Afi˸{?liѵ;4zm9PQkZWfF'e \kG`l- my;a`|F3[-V1vg\GdN-foރzHQ=ZFk%UUԓ$g6h^fmV"M۵ۥTXRctH4&"Т>Ї:tJZsDht.}Fꢾ%}Ru&9iOPYox>jϒ=QgS\~ q`q\HuN>*+Jj.z?Lq 4/?ZNWXq.&LͦKp>LؓTD#YxrzY`賟1"}<}Ae/#wO?GCl0I?3 ~O+wYX,rVrz+O-\a)s?igܮRnWkucoh+et-1;΃w,ixc`d``bp`b`rq aI,ca`3|}$ SZQb2_qiA1XLe؀*ـ<&! # 3b>J.d(f(62xc`fŴ՘,,tќ! H 8,ąA@j&XgR Lxc```f`Fx1, 'd21f1.)9%5}+x5J Թa-6 z zK$>8`=v>`݃?N#\#`BW V6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}C#cS3s K+k[;{G'gW7wO/o_?аȨظDΉ,\hWXzu7n޴e];wa(LIͼ]6??QiC "trOs$54O=p7^ΰ{2o14u5vwL0i *f݉jBE!).5<PTXX'RXcgnDx]QN[A  9{ Սbd;i7rq@D گH!H|B>!3k4;;sΙ3KʑwkS$6NH덌Zlfu є;j=o)M;Z ;4: !qKͺb00.?R4j˰Ѽ34@Skm!qK˦6$tUS]`*́Vy &ҷ$, b 9@HƼIJ;ㆵƑ6O'ӿZx} ||cfdlM$ lH <$#B@@E TjѫVmUJҙB}?j_ԋVlkVmo7&{nw 2S=W8#Ӡ&9>g9KF𶀷sFCIi)*UE\$ 3?LJd_*R[EE"A{g Ux4]Jn3/El7%a_rʂQ@q5C MiؘN Gq^ (v4#ϫvJ} fMhn #l+Cs䂏>wݶreۜUy@rx[Coӽ4{vaS ؼ8T=9MqzeJ=!`9z(`aך}JGJ=!""DHЬa&n䚔@hCjHQS1MrPەsE7^]N9X/"*żd9u9)5N*[0RZmNگX_._2Oz}d_ןG~3 7,?%2r$S̷0Kg^]Xq3Dпqs-վ?٘uXvzxԩlR|޳gl:) {/*U{]}bT1{#6J=(ǿO1u7 .8slU 3 Cb?.8/z 3)3DX56!Y&~cvMzͧZrǺʕ|-޾1z XFf1GRւK™ap[Rٔb{P֘-_UKW_Pdg2SݥIEfj #p Pi&R R 4V!xF/R7`:ɖ^c%ׯ_܎QuHRSmn}^'{'%^0k|b:gޒG飭kfԲ÷}CXρN,L!MXV?-N3 O+#*5ټOj2xD`J_2+)X"Q)-P270q[J*1I%iqPT(hIejj |bbU)rJjmlKxjc@ ;)u/f\|mxĿbӷ_~JqNhG~ޛɴg/pKp+W=c|ӥaTږOZֶ2o9olxֹ&ҹiŕd&О xYءXbD(E2*adjݼUSCDd0&D7n=T ysOz<.@f{/mCu=KhPz,doRq"P-j'C i8Mc^P=p\Щ¸"\T<8\()RJp\M &8-x"իSʒct0g@:o˒L ٤T7 η.:5J ZՏpM"^l v#Z_biUq@bX wGSEqh-r0M>@B'OSJ؛#%GE3.FP;4̎18CZn)ΈԘm+0 ;G.km7} v笩h&|})-c{zMŸC,:ztijiGvrnAjPԗ-e Ky3SӀ6t;]F  ԗ$PS3 LZ­* ~մlE4^xa/3{ì$wkۏ߻}R/!{8eTw{lw=MvY֜9#@ysoϭޭ~x︵vY:mZqzp:$'v=Wi@aʦb?G,l+6Ϊt.FC˳ `,Ky! H2 vhLh6Hs{ѓ_\4;վ>Чg,O_pׄ-|§B ϜO mth A&k,.n-l;a6X&iuqbRPdM\w% Qd~',O m laʒtf6@M=rNcthHTN.vu/ݥ~@J}{-y_~asO9LӽfUwxISkvj=5Vsl~-_֢^ŻNac}-SV_nqDfc: 0crfݱX՜ڷu}} ݆ކc6hvSJPB>PQ$ D!;E%| $bPɅ8P&,*9I ~UA=@Щq!+kdR@Tuw|FIݪWSgD@vJhtĘ.D4fY(ʋV@9BO`F#CM#l F#$l{M)^SXc=Q ޠ;U| H5z({9z.bpO6RRdQoFt)7oD=c-\m{o{7#0xu< 6"&m+<,Uh%Z"@_{R^[ʗ3~;wZU/ק0P[ہE K6i 3:LΡ0+RLF>U= eQYNFA7`0[}5t#R5#zb1Ȳ,;ֽ<;#ܶ+KKW ݇%NWtZ=zzza UPPC̉9%KvUR Tct  )JΨ=k xB};|\A8$[g|]bsԪV}N$0aW:P*]\R"h -¥)f/(62J,UrK Yx?GR{Ԟ.u@AN_R^-13Le `ld8 f *'BJrA1b"ꗯK.9Wh:v-us~gQ&;@ b`#ю [FuN/)D!C)2FXj N>uW/ŦzH]U{|(e?j팗9S^sZCjsPP(c C6{/nE93M2ܶ—&;mc| x? ?;'**Fc`M)*^t_l3auLfSBXeàK @̨4;h+G]KyFZr a=UHnoCN\V|`xTmQ`]mb {?pw4_ ^ܷBŰv!&s*ITC;#E(,JPJPfi&(!u)F(nNwی 7oO:g$70Eێ2))M{)U TH6΢txܐqk?ei'W>o|\{oAxYoY'DGU `%"ijif3+LF騴7yt31eSY׍S2rCTqRԗ8w2lL*G=c,ףg^ȣK MaWK}$O^>=(FH|,r(՗ث j*Y: tY vⶨOk#X;Dȁ[X!IU[U3tռjj2O}H τ? =( ؏v ^3_ {yƛh,VyR]PFK.KugyM՜Las_s_s_s_s_)ߜ6'}6'}6'}6'}6'}6'}6'}6]8*Ts& 'kaWXʅk7v5 YVSC%_3?*l`K*EKK왍w XL$uͭ*|yG͚֠S)ٽ)rEQҨ>/\>)G+gzbU}42GoΠsÐ9C_zcᕯ2:XAibd 4r> &p@?V,R@aR6"]3. hTfku6kV]2vM˾QQTf%AsvE?)hegI֔fMƔĖ9^vtk:CPg3TSgh2P[;^EsK<#lAZA X"b JI7 YRj|$Π& h%tYX7a721sE7^tDR|'9r+J=^v7\۱A<;`\^TKRZJԓ7Şb\XzZzra (|/yP  IAOs%*^J hES3Imf$1)nfQqA3 \phkޫKKΙkrͬ5BV+Ism_۫8 ;5mQ꙳:_hPs< 2άe09bAģ=(rPnAٙAXxeTa)0|v/UIJڄ뺓a &s&!`ay!V%J`e%o麟>pwyޢpm~}~Ŷ-i'7:wԷzo~ ݍ=T>7cGAjb*_l|vϒ$I)%XS9 ߹.@?Ҹ7 bioHoR4G32M}6JuCJ&>"d߼_Mp}σ 7mrPܴv3ѷͱ-¾tpwZRhqS9'qc<5#SRJ#K0C_ޢ{NQ=L}%Oyt۝6x'ݓ&N89S6ɓrGf1qR"]mTC7)hmFsP\yt4)+abHiy}y#x,ȭ.D9 \f4zi_څXuKHM5gm!&~tF̹}s>~Apyn$VF:L%wJg,MG<˻o_3sDyI, I<ٳ{sVvTEdtu=Nntp&XS藆*7d\\i3͝)}zD*",RKl1黲ʴ`b-[,hhذqc֡CA-/C+셄|y5}Whqi .Z-۸_c1|Fu03O~ dk6T6$1Y3 b\o.8~t%Տ~/߲gg.y6ֽ7N"%ꭤz馎Μ}ୖٗ +t =L2Ot~DER SZ$Ӣ}-P H4Xx#lk"D,qݱxN z-wgO}7|xm'={,y+V~Tdrq}ALx˸ILڱ|B}\`'HzLND_`_>/-eׄEkWњp&\bRPl |&o՝s:}ߢaBz?uO9$[,GQ -F~.P  UxU>FפD5$4ջd-V{uĚ"M%5&9㩃w'PO0 ١YG`&fś5tcC V׍.]طPe F+ʬF޳vT$?[#2k糖K'-C YiEu =Zlĉ}"=!#唍q;ԪX u b4rK.I46rtbX/.L=g׮ߟ^:"^g}$T3b̨W]3Yv싾mFcLg6Çoꣅ/_d0ZZ;^1c1O4N7w.1YD9XD|ݯnۮ> .Jxr~ޑ m`  9EJطK/}{pb&n&Cπ";TV~[`qMzJeXm\65icCw1GǕęҷ7$|ٜuCPx iRsX 1z_I6cZa/6TMf_Jm< rL@Pة ?IRi Xa͚,VjݜѦ+%%Gc9.@y5J^!5/{;eZN;6;wjvL?mFq]E]$yFۇl2he~\H4=k^r.qa4NהS\,vLb'=zMm*nRp P+<3'h+.kX"RMUإxu`LrH9!1ϑ4ݴ7ehXޘhpCI$d붹s[jkǏ͒ik7oB FDGA jESGn.mfngrI-4Am $&Z -W񥔉C(tU#; > 6Iݾ`c޺v!aL#s tG" Eݕ:2n]{űҩ՟/|@ [0#Zg3Z9\[8.M̶pGjNZH-Is"_rʼBY 7t%]<1h7FrFL1@EG`dc HJ2$ޒk[Ւ2>KqEcl.yp_nc]uHM(ujR>mW%4e`re(}<\kjzL h&MyJ!*ha0rb/эf.]$盡7}Dɧ #Oji/6gtNY߶coSWNY<~)wurZt #2  4C4ݥ` 1 jFcd i9A#↟*ZUp3'; 3=0''c`NI0'5Պd&2:4sy]ɨ~ޖ,:`naV^,h 7~dNt֠WD?mFI9"-^kru1 a1.8`vݜ9yf&E,9HMj0PnUIU߸3>2\/=̚Cbh:U*J0#FKoeV$W nKUA<`1>}ĖyZ&:'tvL֜ZGz r- 놙:bjGZ&c@7r AerDc[V0MUP,YWIJg+g=ՀIQ6fXqhJ1W&u:lqbRsiw~ccnC54l#̤19a7inLLՒ,&ػOLbΨ sF)0ɧkj4 J4umM髻YYx# "̳OR{o/3t0 r,UO i+,;MpJcl@&:qP֤ߔi`|хjKÙ}9)]Bx/ kSq-)VXӾ.kXae"& Xr{7#-~9I Jь.Rxr}ݜxRmrhbҟs뀹yAz|ijC}88MޏOU6 kIŅMN&A`QĎ~$10ÄᚷP [(pHp=ʨ8CB[\FzQj[S?N'~y&۳(8)~ &Ѝ(=Ph=[Ӟ1bFO(:u%~]'0Ba2nq>;peH;7őRZh bn.L`iIC:Nz#~BZ03aT\jGV$9a~.#=2|6W1x\bU jiZy{B.K+ĬkM#TNtR NE+B =Z/.ZdF%PftZv]DܽEUw3he?m"lbg[_W6 .zԗeLy +_)f#z 7%FAUFF =wr h0n.IJ2LTl`ܪ a4"4RĚSS1}{xYлqsܖY _ZO.;8/:AE1>k裈=E`L鈭h־t!10R- pi:kRtiajgÁa3+!\Nל0&0s& 31f>6 [H*?,!YEN m,8.G>Fkk{"ULNB V0SUQR#Zm;[(C> \֬;kgmL)D\9T>%i Q'6a0!-y_fͳ:+OדݣZR8rǛq[3:5OaS>td; h^;&䣥e R<7̺vH.Xhzhp ;Qg~W2w8tSy5a'0(8}0Rqf citaUw8~dJhI% ]z,MrT? 01`4,ZЍg3tj7#fϣyp:oٗ_КN7x؎y*b̹;=Nh'=Z6bhQK({)Xb:|K'jA6d>"c9x YiaN ㄈv.M(}fhe ۙ!Ir қǫbB}~ɛ v/Xj&9e3X4Z릙.k&~zֶ+gܹsSOYU7{rdI?I?I?I?I?I?I?I?I?I?I?I?I?G_B?oGm'w8t7؈"H?G^Z+S40YIKhU,ObKħտOg9ckzk>F+RѪ px????ws::eV[XOYV$ 2=Vt"юI4ZFXԴ-ɐ)a+\ʩ8Xn=ꗺ̐:qp J;zG{H^S*oyo֖kôJś2TT6t9fZ  Jnk%-`إ{y} ᥅Y!ϒ/^;7xZnxQ촙|=b*GЎ7bWߕ~O/9Gx2,$e.'zScZkSšҏ/?Hds|Fo!"aip 'u̐g]6PGlFo:DR7z h|GHn̦k⦊M^(C~o=pmNF <tc(BWfy$0})6˭Z*~5]1ڵ0vTA[5h7UEZ3$ 0 &$%ބϳQ~-g,sus3QoLIDJtbN>]&!a/޻OUX[x==7=|y5AT'or}}˟Jtֵu$4Y1-ڳ0F/ fіxc`d```bpk8+<Mz{Þ"#P-]t 9xc`d``9"( ~Sxڽ=HQoVSH”"b%kH)"QlF$4)l&)$EBH * (,0~W7*!KwXEҌRpUSARu5w5_u?)'6 +OYoK[R{FU#Ǒ o*&Hʣ ue?>x|Mxωkwx?yw3Sγ Ղ3K*~S["70ٯKQtCBѲXi􌳝ZnMf#sgs.-GnOŅh/Lٞ{$X)o#|wtv6 1@[oMW [`_*}h[:Nzdᖆ wPbFtIxc``Ё8I ?,0bcbna>ń%e #Vlzl-qqql8񎓅3˅wW6iB> #'%rHINt51 1upf  xS8xXnWEPBdB~H% -loqB}^wzuվ@covH}Q"˻wΙof3gE.'eYo9O'S$yy5w˧˹|F>gQ˵e|qᒗ?_.9^C>xKr[Rٕɤ+mH! v_$ Fr_bhH"=bNeX*Rrx0!k#ǜ|z*/m3%Oe Wʙr9FԲ&֎Xv0|?D2eMBoؼL$7|"˲LA#h.3vZǞj6TD-?2ߧD,UJct.udrV-9ӹ=K1z{9uWRi e6cT&& G}w GLeΑQ⠂wSa +-/*:h3TcSܦ/i}KIu"VU| y,&,ธHYFoQXOj\[cJUČH[ec*}q jhsbƽ>*q-LVqqҺvyx5SM^sQYµz*똱tOJێ{K\ cN05lGcfvaν, p&}FjDJSz%]sh7u<'pH\gK؅,|3F{Lb+z9$)=Om" .?e2j/o"]t;.OfA-^ v@CsI*srT $=czlsTߨq#!Zc,dLE1 ^BWj2ZUic/8'bghK&o;\acZ9(XJŕcL({O(VP\=F(^ k#fB{Bqڱ@gS״]s=9o'kV8\x=sI $clȌdowTaz׆GSޱErU&9iQnjnǣG1T1b#QF=c/*ڛ 󦿐5s yoGQ#6evH7MBƶހ7h;]nؖ~lSDž2wEp>Z*rkA7G}|6q/y<>fBcn>狼xmIlqNg/vNE1{VۙښRčbb N==.yKH0X'+DM O$L NNzҋ!?Y ` 2@CF6vrpK#hXᤀ&2La*(b:3,f3c> X",c9Ŕi&#J{vY,gw($I'8CsRVL)xT,~p ^nVccT`-X6:6zqm|;9yn!V(8I$I.p+\.=vrJRmItISYW-*iARCiSuit.(u)veҡU nyZopd&W_U\@x=; @ly"B X٘4i $<6zxoG0>\_Y i{o]_- jH89j2y Bm@˻@6D;0!aL ^^>mFbg?p३^TGdf#41Ip!>LI32C?;HYSQ=gnode-backoff-2.5.0/docs/public/stylesheets/000077500000000000000000000000001264656751200206345ustar00rootroot00000000000000node-backoff-2.5.0/docs/public/stylesheets/normalize.css000066400000000000000000000153321264656751200233520ustar00rootroot00000000000000/*! normalize.css v2.0.1 | MIT License | git.io/normalize */ /* ========================================================================== HTML5 display definitions ========================================================================== */ /* * Corrects `block` display not defined in IE 8/9. */ article, aside, details, figcaption, figure, footer, header, hgroup, nav, section, summary { display: block; } /* * Corrects `inline-block` display not defined in IE 8/9. */ audio, canvas, video { display: inline-block; } /* * Prevents modern browsers from displaying `audio` without controls. * Remove excess height in iOS 5 devices. */ audio:not([controls]) { display: none; height: 0; } /* * Addresses styling for `hidden` attribute not present in IE 8/9. */ [hidden] { display: none; } /* ========================================================================== Base ========================================================================== */ /* * 1. Sets default font family to sans-serif. * 2. Prevents iOS text size adjust after orientation change, without disabling * user zoom. */ html { font-family: sans-serif; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -ms-text-size-adjust: 100%; /* 2 */ } /* * Removes default margin. */ body { margin: 0; } /* ========================================================================== Links ========================================================================== */ /* * Addresses `outline` inconsistency between Chrome and other browsers. */ a:focus { outline: thin dotted; } /* * Improves readability when focused and also mouse hovered in all browsers. */ a:active, a:hover { outline: 0; } /* ========================================================================== Typography ========================================================================== */ /* * Addresses `h1` font sizes within `section` and `article` in Firefox 4+, * Safari 5, and Chrome. */ h1 { font-size: 2em; } /* * Addresses styling not present in IE 8/9, Safari 5, and Chrome. */ abbr[title] { border-bottom: 1px dotted; } /* * Addresses style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ b, strong { font-weight: bold; } /* * Addresses styling not present in Safari 5 and Chrome. */ dfn { font-style: italic; } /* * Addresses styling not present in IE 8/9. */ mark { background: #ff0; color: #000; } /* * Corrects font family set oddly in Safari 5 and Chrome. */ code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } /* * Improves readability of pre-formatted text in all browsers. */ pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } /* * Sets consistent quote types. */ q { quotes: "\201C" "\201D" "\2018" "\2019"; } /* * Addresses inconsistent and variable font size in all browsers. */ small { font-size: 80%; } /* * Prevents `sub` and `sup` affecting `line-height` in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } /* ========================================================================== Embedded content ========================================================================== */ /* * Removes border when inside `a` element in IE 8/9. */ img { border: 0; } /* * Corrects overflow displayed oddly in IE 9. */ svg:not(:root) { overflow: hidden; } /* ========================================================================== Figures ========================================================================== */ /* * Addresses margin not present in IE 8/9 and Safari 5. */ figure { margin: 0; } /* ========================================================================== Forms ========================================================================== */ /* * Define consistent border, margin, and padding. */ fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } /* * 1. Corrects color not being inherited in IE 8/9. * 2. Remove padding so people aren't caught out if they zero out fieldsets. */ legend { border: 0; /* 1 */ padding: 0; /* 2 */ } /* * 1. Corrects font family not being inherited in all browsers. * 2. Corrects font size not being inherited in all browsers. * 3. Addresses margins set differently in Firefox 4+, Safari 5, and Chrome */ button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } /* * Addresses Firefox 4+ setting `line-height` on `input` using `!important` in * the UA stylesheet. */ button, input { line-height: normal; } /* * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * and `video` controls. * 2. Corrects inability to style clickable `input` types in iOS. * 3. Improves usability and consistency of cursor style between image-type * `input` and others. */ button, html input[type="button"], /* 1 */ input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } /* * Re-set default cursor for disabled elements. */ button[disabled], input[disabled] { cursor: default; } /* * 1. Addresses box sizing set to `content-box` in IE 8/9. * 2. Removes excess padding in IE 8/9. */ input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /* * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome * (include `-moz` to future-proof). */ input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } /* * Removes inner padding and search cancel button in Safari 5 and Chrome * on OS X. */ input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /* * Removes inner padding and border in Firefox 4+. */ button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } /* * 1. Removes default vertical scrollbar in IE 8/9. * 2. Improves readability and alignment in all browsers. */ textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } /* ========================================================================== Tables ========================================================================== */ /* * Remove most spacing between table cells. */ table { border-collapse: collapse; border-spacing: 0; }node-backoff-2.5.0/docs/strategy.html000066400000000000000000000247011264656751200175360ustar00rootroot00000000000000 strategy.js node-backoff-2.5.0/examples/000077500000000000000000000000001264656751200156705ustar00rootroot00000000000000node-backoff-2.5.0/examples/exponential.js000077500000000000000000000007261264656751200205640ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var testBackoff = backoff.exponential({ initialDelay: 10, maxDelay: 1000 }); testBackoff.on('backoff', function(number, delay) { console.log('Backoff start: ' + number + ' ' + delay + 'ms'); }); testBackoff.on('ready', function(number, delay) { console.log('Backoff done: ' + number + ' ' + delay + 'ms'); if (number < 15) { testBackoff.backoff(); } }); testBackoff.backoff(); node-backoff-2.5.0/examples/exponential_strategy.js000077500000000000000000000002571264656751200225050ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var strategy = new backoff.ExponentialStrategy(); for (var i = 0; i < 10; i++) { console.log(strategy.next()); } node-backoff-2.5.0/examples/fail.js000077500000000000000000000010661264656751200171470ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var testBackoff = backoff.exponential({ initialDelay: 10, maxDelay: 1000 }); testBackoff.failAfter(5); testBackoff.on('backoff', function(number, delay) { console.log('Backoff start: ' + number + ' ' + delay + 'ms'); }); testBackoff.on('ready', function(number, delay) { console.log('Backoff done: ' + number + ' ' + delay + 'ms'); testBackoff.backoff(); // Launch a new backoff. }); testBackoff.on('fail', function() { console.log('Backoff failure.'); }); testBackoff.backoff(); node-backoff-2.5.0/examples/fibonacci.js000077500000000000000000000007241264656751200201510ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var testBackoff = backoff.fibonacci({ initialDelay: 10, maxDelay: 1000 }); testBackoff.on('backoff', function(number, delay) { console.log('Backoff start: ' + number + ' ' + delay + 'ms'); }); testBackoff.on('ready', function(number, delay) { console.log('Backoff done: ' + number + ' ' + delay + 'ms'); if (number < 15) { testBackoff.backoff(); } }); testBackoff.backoff(); node-backoff-2.5.0/examples/fibonacci_strategy.js000077500000000000000000000002551264656751200220720ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var strategy = new backoff.FibonacciStrategy(); for (var i = 0; i < 10; i++) { console.log(strategy.next()); } node-backoff-2.5.0/examples/function_call.js000077500000000000000000000026411264656751200210540ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index.js'), util = require('util'), http = require('http'); var URL = 'http://www.iana.org/domains/example/'; function get(options, callback) { http.get(options, function(res) { res.setEncoding('utf8'); res.data = ''; res.on('data', function (chunk) { res.data += chunk; }); res.on('end', function() { callback(null, res); }); res.on('close', function(err) { callback(err, res); }); }).on('error', function(err) { callback(err, null); }); } var call = backoff.call(get, URL, function(err, res) { // Notice how the call is captured inside the closure. console.log('Num retries: ' + call.getNumRetries()); if (err) { console.log('Error: ' + err.message); } else { console.log('Status: ' + res.statusCode); } }); // Called when function is called with function's args. call.on('call', function(url) { console.log('call: ' + util.inspect(arguments)); }); // Called with results each time function returns. call.on('callback', function(err, res) { console.log('callback: ' + util.inspect(arguments)); }); // Called on backoff. call.on('backoff', function(number, delay) { console.log('backoff: ' + util.inspect(arguments)); }); call.setStrategy(new backoff.ExponentialStrategy()); call.failAfter(2); call.start(); node-backoff-2.5.0/examples/randomized.js000077500000000000000000000010201264656751200203560ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var randomizedBackoff = backoff.fibonacci({ randomisationFactor: 0.4, initialDelay: 10, maxDelay: 1000 }); randomizedBackoff.on('backoff', function(number, delay) { console.log('Backoff start: ' + number + ' ' + delay + 'ms'); }); randomizedBackoff.on('ready', function(number, delay) { console.log('Backoff done: ' + number + ' ' + delay + 'ms'); if (number < 15) { randomizedBackoff.backoff(); } }); randomizedBackoff.backoff(); node-backoff-2.5.0/examples/readme.js000077500000000000000000000015161264656751200174710ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index.js'); var fibonacciBackoff = backoff.fibonacci({ randomisationFactor: 0, initialDelay: 10, maxDelay: 300 }); fibonacciBackoff.failAfter(10); fibonacciBackoff.on('backoff', function(number, delay) { // Do something when backoff starts, e.g. show to the // user the delay before next reconnection attempt. console.log(number + ' ' + delay + 'ms'); }); fibonacciBackoff.on('ready', function(number, delay) { // Do something when backoff ends, e.g. retry a failed // operation (DNS lookup, API call, etc.). fibonacciBackoff.backoff(); }); fibonacciBackoff.on('fail', function() { // Do something when the maximum number of backoffs is // reached, e.g. ask the user to check its connection. console.log('fail'); }); fibonacciBackoff.backoff(); node-backoff-2.5.0/examples/reset.js000077500000000000000000000005571264656751200173620ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); var backoff = backoff.exponential(); backoff.on('ready', function(number, delay) { console.log('Backoff done: ' + number + ' ' + delay + 'ms'); if (number < 15) { backoff.backoff(); } }); backoff.backoff(); setInterval(function() { backoff.reset(); backoff.backoff(); }, 5000); node-backoff-2.5.0/examples/set_timeout.js000077500000000000000000000011521264656751200205710ustar00rootroot00000000000000#!/usr/bin/env node var backoff = require('../index'); // This example demonstrates how the backoff strategy can be used directly // to drive a backoff operation using direct calls to setTimeout(fn, delay). var strategy = new backoff.ExponentialStrategy({ randomisationFactor: 0.5, initialDelay: 10, maxDelay: 1000, factor: 3 }); var attempt = 1; function doSomething() { if (attempt > 10) { console.log('Success!'); strategy.reset(); return; } console.log('Attempt #' + attempt); attempt++; setTimeout(doSomething, strategy.next()); } doSomething(); node-backoff-2.5.0/index.js000066400000000000000000000022061264656751200155170ustar00rootroot00000000000000// Copyright (c) 2012 Mathieu Turcotte // Licensed under the MIT license. var Backoff = require('./lib/backoff'); var ExponentialBackoffStrategy = require('./lib/strategy/exponential'); var FibonacciBackoffStrategy = require('./lib/strategy/fibonacci'); var FunctionCall = require('./lib/function_call.js'); module.exports.Backoff = Backoff; module.exports.FunctionCall = FunctionCall; module.exports.FibonacciStrategy = FibonacciBackoffStrategy; module.exports.ExponentialStrategy = ExponentialBackoffStrategy; // Constructs a Fibonacci backoff. module.exports.fibonacci = function(options) { return new Backoff(new FibonacciBackoffStrategy(options)); }; // Constructs an exponential backoff. module.exports.exponential = function(options) { return new Backoff(new ExponentialBackoffStrategy(options)); }; // Constructs a FunctionCall for the given function and arguments. module.exports.call = function(fn, vargs, callback) { var args = Array.prototype.slice.call(arguments); fn = args[0]; vargs = args.slice(1, args.length - 1); callback = args[args.length - 1]; return new FunctionCall(fn, vargs, callback); }; node-backoff-2.5.0/lib/000077500000000000000000000000001264656751200146205ustar00rootroot00000000000000node-backoff-2.5.0/lib/backoff.js000066400000000000000000000041101264656751200165450ustar00rootroot00000000000000// Copyright (c) 2012 Mathieu Turcotte // Licensed under the MIT license. var events = require('events'); var precond = require('precond'); var util = require('util'); // A class to hold the state of a backoff operation. Accepts a backoff strategy // to generate the backoff delays. function Backoff(backoffStrategy) { events.EventEmitter.call(this); this.backoffStrategy_ = backoffStrategy; this.maxNumberOfRetry_ = -1; this.backoffNumber_ = 0; this.backoffDelay_ = 0; this.timeoutID_ = -1; this.handlers = { backoff: this.onBackoff_.bind(this) }; } util.inherits(Backoff, events.EventEmitter); // Sets a limit, greater than 0, on the maximum number of backoffs. A 'fail' // event will be emitted when the limit is reached. Backoff.prototype.failAfter = function(maxNumberOfRetry) { precond.checkArgument(maxNumberOfRetry > 0, 'Expected a maximum number of retry greater than 0 but got %s.', maxNumberOfRetry); this.maxNumberOfRetry_ = maxNumberOfRetry; }; // Starts a backoff operation. Accepts an optional parameter to let the // listeners know why the backoff operation was started. Backoff.prototype.backoff = function(err) { precond.checkState(this.timeoutID_ === -1, 'Backoff in progress.'); if (this.backoffNumber_ === this.maxNumberOfRetry_) { this.emit('fail', err); this.reset(); } else { this.backoffDelay_ = this.backoffStrategy_.next(); this.timeoutID_ = setTimeout(this.handlers.backoff, this.backoffDelay_); this.emit('backoff', this.backoffNumber_, this.backoffDelay_, err); } }; // Handles the backoff timeout completion. Backoff.prototype.onBackoff_ = function() { this.timeoutID_ = -1; this.emit('ready', this.backoffNumber_, this.backoffDelay_); this.backoffNumber_++; }; // Stops any backoff operation and resets the backoff delay to its inital value. Backoff.prototype.reset = function() { this.backoffNumber_ = 0; this.backoffStrategy_.reset(); clearTimeout(this.timeoutID_); this.timeoutID_ = -1; }; module.exports = Backoff; node-backoff-2.5.0/lib/function_call.js000066400000000000000000000140121264656751200177740ustar00rootroot00000000000000// Copyright (c) 2012 Mathieu Turcotte // Licensed under the MIT license. var events = require('events'); var precond = require('precond'); var util = require('util'); var Backoff = require('./backoff'); var FibonacciBackoffStrategy = require('./strategy/fibonacci'); // Wraps a function to be called in a backoff loop. function FunctionCall(fn, args, callback) { events.EventEmitter.call(this); precond.checkIsFunction(fn, 'Expected fn to be a function.'); precond.checkIsArray(args, 'Expected args to be an array.'); precond.checkIsFunction(callback, 'Expected callback to be a function.'); this.function_ = fn; this.arguments_ = args; this.callback_ = callback; this.lastResult_ = []; this.numRetries_ = 0; this.backoff_ = null; this.strategy_ = null; this.failAfter_ = -1; this.retryPredicate_ = FunctionCall.DEFAULT_RETRY_PREDICATE_; this.state_ = FunctionCall.State_.PENDING; } util.inherits(FunctionCall, events.EventEmitter); // States in which the call can be. FunctionCall.State_ = { // Call isn't started yet. PENDING: 0, // Call is in progress. RUNNING: 1, // Call completed successfully which means that either the wrapped function // returned successfully or the maximal number of backoffs was reached. COMPLETED: 2, // The call was aborted. ABORTED: 3 }; // The default retry predicate which considers any error as retriable. FunctionCall.DEFAULT_RETRY_PREDICATE_ = function(err) { return true; }; // Checks whether the call is pending. FunctionCall.prototype.isPending = function() { return this.state_ == FunctionCall.State_.PENDING; }; // Checks whether the call is in progress. FunctionCall.prototype.isRunning = function() { return this.state_ == FunctionCall.State_.RUNNING; }; // Checks whether the call is completed. FunctionCall.prototype.isCompleted = function() { return this.state_ == FunctionCall.State_.COMPLETED; }; // Checks whether the call is aborted. FunctionCall.prototype.isAborted = function() { return this.state_ == FunctionCall.State_.ABORTED; }; // Sets the backoff strategy to use. Can only be called before the call is // started otherwise an exception will be thrown. FunctionCall.prototype.setStrategy = function(strategy) { precond.checkState(this.isPending(), 'FunctionCall in progress.'); this.strategy_ = strategy; return this; // Return this for chaining. }; // Sets the predicate which will be used to determine whether the errors // returned from the wrapped function should be retried or not, e.g. a // network error would be retriable while a type error would stop the // function call. FunctionCall.prototype.retryIf = function(retryPredicate) { precond.checkState(this.isPending(), 'FunctionCall in progress.'); this.retryPredicate_ = retryPredicate; return this; }; // Returns all intermediary results returned by the wrapped function since // the initial call. FunctionCall.prototype.getLastResult = function() { return this.lastResult_.concat(); }; // Returns the number of times the wrapped function call was retried. FunctionCall.prototype.getNumRetries = function() { return this.numRetries_; }; // Sets the backoff limit. FunctionCall.prototype.failAfter = function(maxNumberOfRetry) { precond.checkState(this.isPending(), 'FunctionCall in progress.'); this.failAfter_ = maxNumberOfRetry; return this; // Return this for chaining. }; // Aborts the call. FunctionCall.prototype.abort = function() { if (this.isCompleted() || this.isAborted()) { return; } if (this.isRunning()) { this.backoff_.reset(); } this.state_ = FunctionCall.State_.ABORTED; this.lastResult_ = [new Error('Backoff aborted.')]; this.emit('abort'); this.doCallback_(); }; // Initiates the call to the wrapped function. Accepts an optional factory // function used to create the backoff instance; used when testing. FunctionCall.prototype.start = function(backoffFactory) { precond.checkState(!this.isAborted(), 'FunctionCall is aborted.'); precond.checkState(this.isPending(), 'FunctionCall already started.'); var strategy = this.strategy_ || new FibonacciBackoffStrategy(); this.backoff_ = backoffFactory ? backoffFactory(strategy) : new Backoff(strategy); this.backoff_.on('ready', this.doCall_.bind(this, true /* isRetry */)); this.backoff_.on('fail', this.doCallback_.bind(this)); this.backoff_.on('backoff', this.handleBackoff_.bind(this)); if (this.failAfter_ > 0) { this.backoff_.failAfter(this.failAfter_); } this.state_ = FunctionCall.State_.RUNNING; this.doCall_(false /* isRetry */); }; // Calls the wrapped function. FunctionCall.prototype.doCall_ = function(isRetry) { if (isRetry) { this.numRetries_++; } var eventArgs = ['call'].concat(this.arguments_); events.EventEmitter.prototype.emit.apply(this, eventArgs); var callback = this.handleFunctionCallback_.bind(this); this.function_.apply(null, this.arguments_.concat(callback)); }; // Calls the wrapped function's callback with the last result returned by the // wrapped function. FunctionCall.prototype.doCallback_ = function() { this.callback_.apply(null, this.lastResult_); }; // Handles wrapped function's completion. This method acts as a replacement // for the original callback function. FunctionCall.prototype.handleFunctionCallback_ = function() { if (this.isAborted()) { return; } var args = Array.prototype.slice.call(arguments); this.lastResult_ = args; // Save last callback arguments. events.EventEmitter.prototype.emit.apply(this, ['callback'].concat(args)); var err = args[0]; if (err && this.retryPredicate_(err)) { this.backoff_.backoff(err); } else { this.state_ = FunctionCall.State_.COMPLETED; this.doCallback_(); } }; // Handles the backoff event by reemitting it. FunctionCall.prototype.handleBackoff_ = function(number, delay, err) { this.emit('backoff', number, delay, err); }; module.exports = FunctionCall; node-backoff-2.5.0/lib/strategy/000077500000000000000000000000001264656751200164625ustar00rootroot00000000000000node-backoff-2.5.0/lib/strategy/exponential.js000066400000000000000000000026141264656751200213510ustar00rootroot00000000000000// Copyright (c) 2012 Mathieu Turcotte // Licensed under the MIT license. var util = require('util'); var precond = require('precond'); var BackoffStrategy = require('./strategy'); // Exponential backoff strategy. function ExponentialBackoffStrategy(options) { BackoffStrategy.call(this, options); this.backoffDelay_ = 0; this.nextBackoffDelay_ = this.getInitialDelay(); this.factor_ = ExponentialBackoffStrategy.DEFAULT_FACTOR; if (options && options.factor !== undefined) { precond.checkArgument(options.factor > 1, 'Exponential factor should be greater than 1 but got %s.', options.factor); this.factor_ = options.factor; } } util.inherits(ExponentialBackoffStrategy, BackoffStrategy); // Default multiplication factor used to compute the next backoff delay from // the current one. The value can be overridden by passing a custom factor as // part of the options. ExponentialBackoffStrategy.DEFAULT_FACTOR = 2; ExponentialBackoffStrategy.prototype.next_ = function() { this.backoffDelay_ = Math.min(this.nextBackoffDelay_, this.getMaxDelay()); this.nextBackoffDelay_ = this.backoffDelay_ * this.factor_; return this.backoffDelay_; }; ExponentialBackoffStrategy.prototype.reset_ = function() { this.backoffDelay_ = 0; this.nextBackoffDelay_ = this.getInitialDelay(); }; module.exports = ExponentialBackoffStrategy; node-backoff-2.5.0/lib/strategy/fibonacci.js000066400000000000000000000015271264656751200207420ustar00rootroot00000000000000// Copyright (c) 2012 Mathieu Turcotte // Licensed under the MIT license. var util = require('util'); var BackoffStrategy = require('./strategy'); // Fibonacci backoff strategy. function FibonacciBackoffStrategy(options) { BackoffStrategy.call(this, options); this.backoffDelay_ = 0; this.nextBackoffDelay_ = this.getInitialDelay(); } util.inherits(FibonacciBackoffStrategy, BackoffStrategy); FibonacciBackoffStrategy.prototype.next_ = function() { var backoffDelay = Math.min(this.nextBackoffDelay_, this.getMaxDelay()); this.nextBackoffDelay_ += this.backoffDelay_; this.backoffDelay_ = backoffDelay; return backoffDelay; }; FibonacciBackoffStrategy.prototype.reset_ = function() { this.nextBackoffDelay_ = this.getInitialDelay(); this.backoffDelay_ = 0; }; module.exports = FibonacciBackoffStrategy; node-backoff-2.5.0/lib/strategy/strategy.js000066400000000000000000000053301264656751200206630ustar00rootroot00000000000000// Copyright (c) 2012 Mathieu Turcotte // Licensed under the MIT license. var events = require('events'); var util = require('util'); function isDef(value) { return value !== undefined && value !== null; } // Abstract class defining the skeleton for the backoff strategies. Accepts an // object holding the options for the backoff strategy: // // * `randomisationFactor`: The randomisation factor which must be between 0 // and 1 where 1 equates to a randomization factor of 100% and 0 to no // randomization. // * `initialDelay`: The backoff initial delay in milliseconds. // * `maxDelay`: The backoff maximal delay in milliseconds. function BackoffStrategy(options) { options = options || {}; if (isDef(options.initialDelay) && options.initialDelay < 1) { throw new Error('The initial timeout must be greater than 0.'); } else if (isDef(options.maxDelay) && options.maxDelay < 1) { throw new Error('The maximal timeout must be greater than 0.'); } this.initialDelay_ = options.initialDelay || 100; this.maxDelay_ = options.maxDelay || 10000; if (this.maxDelay_ <= this.initialDelay_) { throw new Error('The maximal backoff delay must be ' + 'greater than the initial backoff delay.'); } if (isDef(options.randomisationFactor) && (options.randomisationFactor < 0 || options.randomisationFactor > 1)) { throw new Error('The randomisation factor must be between 0 and 1.'); } this.randomisationFactor_ = options.randomisationFactor || 0; } // Gets the maximal backoff delay. BackoffStrategy.prototype.getMaxDelay = function() { return this.maxDelay_; }; // Gets the initial backoff delay. BackoffStrategy.prototype.getInitialDelay = function() { return this.initialDelay_; }; // Template method that computes and returns the next backoff delay in // milliseconds. BackoffStrategy.prototype.next = function() { var backoffDelay = this.next_(); var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_; var randomizedDelay = Math.round(backoffDelay * randomisationMultiple); return randomizedDelay; }; // Computes and returns the next backoff delay. Intended to be overridden by // subclasses. BackoffStrategy.prototype.next_ = function() { throw new Error('BackoffStrategy.next_() unimplemented.'); }; // Template method that resets the backoff delay to its initial value. BackoffStrategy.prototype.reset = function() { this.reset_(); }; // Resets the backoff delay to its initial value. Intended to be overridden by // subclasses. BackoffStrategy.prototype.reset_ = function() { throw new Error('BackoffStrategy.reset_() unimplemented.'); }; module.exports = BackoffStrategy; node-backoff-2.5.0/package.json000066400000000000000000000015051264656751200163410ustar00rootroot00000000000000{ "name": "backoff", "description": "Fibonacci and exponential backoffs.", "version": "2.4.1", "license": "MIT", "author": "Mathieu Turcotte ", "keywords": ["backoff", "retry", "fibonacci", "exponential"], "repository": { "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, "dependencies": { "precond": "0.2" }, "devDependencies": { "sinon": "1.10", "nodeunit": "0.9" }, "scripts": { "docco" : "docco lib/*.js lib/strategy/* index.js", "pretest": "jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, "files": [ "index.js", "lib", "tests" ] } node-backoff-2.5.0/tests/000077500000000000000000000000001264656751200152145ustar00rootroot00000000000000node-backoff-2.5.0/tests/api.js000066400000000000000000000052341264656751200163270ustar00rootroot00000000000000/* * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ var sinon = require('sinon'); var backoff = require('../index'); exports["API"] = { "backoff.fibonnaci should be a function that returns a backoff instance": function(test) { test.ok(backoff.fibonacci, 'backoff.fibonacci should be defined.'); test.equal(typeof backoff.fibonacci, 'function', 'backoff.fibonacci should be a function.'); test.equal(backoff.fibonacci().constructor.name, 'Backoff'); test.done(); }, "backoff.exponential should be a function that returns a backoff instance": function(test) { test.ok(backoff.exponential, 'backoff.exponential should be defined.'); test.equal(typeof backoff.exponential, 'function', 'backoff.exponential should be a function.'); test.equal(backoff.exponential().constructor.name, 'Backoff'); test.done(); }, "backoff.call should be a function that returns a FunctionCall instance": function(test) { var fn = function() {}; var callback = function() {}; test.ok(backoff.Backoff, 'backoff.call should be defined.'); test.equal(typeof backoff.call, 'function', 'backoff.call should be a function.'); test.equal(backoff.call(fn, 1, 2, 3, callback).constructor.name, 'FunctionCall'); test.done(); }, "backoff.Backoff should be defined and a function": function(test) { test.ok(backoff.Backoff, 'backoff.Backoff should be defined.'); test.equal(typeof backoff.Backoff, 'function', 'backoff.Backoff should be a function.'); test.done(); }, "backoff.FunctionCall should be defined and a function": function(test) { test.ok(backoff.FunctionCall, 'backoff.FunctionCall should be defined.'); test.equal(typeof backoff.FunctionCall, 'function', 'backoff.FunctionCall should be a function.'); test.done(); }, "backoff.FibonacciStrategy should be defined and a function": function(test) { test.ok(backoff.FibonacciStrategy, 'backoff.FibonacciStrategy should be defined.'); test.equal(typeof backoff.FibonacciStrategy, 'function', 'backoff.FibonacciStrategy should be a function.'); test.done(); }, "backoff.ExponentialStrategy should be defined and a function": function(test) { test.ok(backoff.ExponentialStrategy, 'backoff.ExponentialStrategy should be defined.'); test.equal(typeof backoff.ExponentialStrategy, 'function', 'backoff.ExponentialStrategy should be a function.'); test.done(); } }; node-backoff-2.5.0/tests/backoff.js000066400000000000000000000116731264656751200171550ustar00rootroot00000000000000/* * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ var sinon = require('sinon'); var Backoff = require('../lib/backoff'); var BackoffStrategy = require('../lib/strategy/strategy'); exports["Backoff"] = { setUp: function(callback) { this.backoffStrategy = sinon.stub(new BackoffStrategy()); this.backoff = new Backoff(this.backoffStrategy); this.clock = sinon.useFakeTimers(); this.spy = new sinon.spy(); callback(); }, tearDown: function(callback) { this.clock.restore(); callback(); }, "the backoff event should be emitted when backoff starts": function(test) { this.backoffStrategy.next.returns(10); this.backoff.on('backoff', this.spy); this.backoff.backoff(); test.ok(this.spy.calledOnce, 'Backoff event should be emitted when backoff starts.'); test.done(); }, "the ready event should be emitted on backoff completion": function(test) { this.backoffStrategy.next.returns(10); this.backoff.on('ready', this.spy); this.backoff.backoff(); this.clock.tick(10); test.ok(this.spy.calledOnce, 'Ready event should be emitted when backoff ends.'); test.done(); }, "the backoff event should be passed the backoff delay": function(test) { this.backoffStrategy.next.returns(989); this.backoff.on('backoff', this.spy); this.backoff.backoff(); test.equal(this.spy.getCall(0).args[1], 989, 'Backoff event should ' + 'carry the backoff delay as its second argument.'); test.done(); }, "the ready event should be passed the backoff delay": function(test) { this.backoffStrategy.next.returns(989); this.backoff.on('ready', this.spy); this.backoff.backoff(); this.clock.tick(989); test.equal(this.spy.getCall(0).args[1], 989, 'Ready event should ' + 'carry the backoff delay as its second argument.'); test.done(); }, "the fail event should be emitted when backoff limit is reached": function(test) { var err = new Error('Fail'); this.backoffStrategy.next.returns(10); this.backoff.on('fail', this.spy); this.backoff.failAfter(2); // Consume first 2 backoffs. for (var i = 0; i < 2; i++) { this.backoff.backoff(); this.clock.tick(10); } // Failure should occur on the third call, and not before. test.ok(!this.spy.calledOnce, 'Fail event shouldn\'t have been emitted.'); this.backoff.backoff(err); test.ok(this.spy.calledOnce, 'Fail event should have been emitted.'); test.equal(this.spy.getCall(0).args[0], err, 'Error should be passed'); test.done(); }, "calling backoff while a backoff is in progress should throw an error": function(test) { this.backoffStrategy.next.returns(10); var backoff = this.backoff; backoff.backoff(); test.throws(function() { backoff.backoff(); }, /in progress/); test.done(); }, "backoff limit should be greater than 0": function(test) { var backoff = this.backoff; test.throws(function() { backoff.failAfter(0); }, /greater than 0 but got 0/); test.done(); }, "reset should cancel any backoff in progress": function(test) { this.backoffStrategy.next.returns(10); this.backoff.on('ready', this.spy); this.backoff.backoff(); this.backoff.reset(); this.clock.tick(100); // 'ready' should not be emitted. test.equals(this.spy.callCount, 0, 'Reset should have aborted the backoff.'); test.done(); }, "reset should reset the backoff strategy": function(test) { this.backoff.reset(); test.ok(this.backoffStrategy.reset.calledOnce, 'The backoff strategy should have been resetted.'); test.done(); }, "backoff should be reset after fail": function(test) { this.backoffStrategy.next.returns(10); this.backoff.failAfter(1); this.backoff.backoff(); this.clock.tick(10); this.backoff.backoff(); test.ok(this.backoffStrategy.reset.calledOnce, 'Backoff should have been resetted after failure.'); test.done(); }, "the backoff number should increase from 0 to N - 1": function(test) { this.backoffStrategy.next.returns(10); this.backoff.on('backoff', this.spy); var expectedNumbers = [0, 1, 2, 3, 4]; var actualNumbers = []; for (var i = 0; i < expectedNumbers.length; i++) { this.backoff.backoff(); this.clock.tick(10); actualNumbers.push(this.spy.getCall(i).args[0]); } test.deepEqual(expectedNumbers, actualNumbers, 'Backoff number should increase from 0 to N - 1.'); test.done(); } }; node-backoff-2.5.0/tests/backoff_strategy.js000066400000000000000000000056011264656751200210710ustar00rootroot00000000000000/* * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ var sinon = require('sinon'); var util = require('util'); var BackoffStrategy = require('../lib/strategy/strategy'); function SampleBackoffStrategy(options) { BackoffStrategy.call(this, options); } util.inherits(SampleBackoffStrategy, BackoffStrategy); SampleBackoffStrategy.prototype.next_ = function() { return this.getInitialDelay(); }; SampleBackoffStrategy.prototype.reset_ = function() {}; exports["BackoffStrategy"] = { setUp: function(callback) { this.random = sinon.stub(Math, 'random'); callback(); }, tearDown: function(callback) { this.random.restore(); callback(); }, "the randomisation factor should be between 0 and 1": function(test) { test.throws(function() { new BackoffStrategy({ randomisationFactor: -0.1 }); }); test.throws(function() { new BackoffStrategy({ randomisationFactor: 1.1 }); }); test.doesNotThrow(function() { new BackoffStrategy({ randomisationFactor: 0.5 }); }); test.done(); }, "the raw delay should be randomized based on the randomisation factor": function(test) { var strategy = new SampleBackoffStrategy({ randomisationFactor: 0.5, initialDelay: 1000 }); this.random.returns(0.5); var backoffDelay = strategy.next(); test.equals(backoffDelay, 1000 + (1000 * 0.5 * 0.5)); test.done(); }, "the initial backoff delay should be greater than 0": function(test) { test.throws(function() { new BackoffStrategy({ initialDelay: -1 }); }); test.throws(function() { new BackoffStrategy({ initialDelay: 0 }); }); test.doesNotThrow(function() { new BackoffStrategy({ initialDelay: 1 }); }); test.done(); }, "the maximal backoff delay should be greater than 0": function(test) { test.throws(function() { new BackoffStrategy({ maxDelay: -1 }); }); test.throws(function() { new BackoffStrategy({ maxDelay: 0 }); }); test.done(); }, "the maximal backoff delay should be greater than the initial backoff delay": function(test) { test.throws(function() { new BackoffStrategy({ initialDelay: 10, maxDelay: 10 }); }); test.doesNotThrow(function() { new BackoffStrategy({ initialDelay: 10, maxDelay: 11 }); }); test.done(); } }; node-backoff-2.5.0/tests/exponential_backoff_strategy.js000066400000000000000000000035141264656751200235000ustar00rootroot00000000000000/* * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ var sinon = require('sinon'); var ExponentialBackoffStrategy = require('../lib/strategy/exponential'); exports["ExponentialBackoffStrategy"] = { "backoff delays should follow an exponential sequence": function(test) { var strategy = new ExponentialBackoffStrategy({ initialDelay: 10, maxDelay: 1000 }); // Exponential sequence: x[i] = x[i-1] * 2. var expectedDelays = [10, 20, 40, 80, 160, 320, 640, 1000, 1000]; var actualDelays = expectedDelays.map(function () { return strategy.next(); }); test.deepEqual(expectedDelays, actualDelays, 'Generated delays should follow an exponential sequence.'); test.done(); }, "backoff delay factor should be configurable": function (test) { var strategy = new ExponentialBackoffStrategy({ initialDelay: 10, maxDelay: 270, factor: 3 }); // Exponential sequence: x[i] = x[i-1] * 3. var expectedDelays = [10, 30, 90, 270, 270]; var actualDelays = expectedDelays.map(function () { return strategy.next(); }); test.deepEqual(expectedDelays, actualDelays, 'Generated delays should follow a configurable exponential sequence.'); test.done(); }, "backoff delays should restart from the initial delay after reset": function(test) { var strategy = new ExponentialBackoffStrategy({ initialDelay: 10, maxDelay: 1000 }); strategy.next(); strategy.reset(); var backoffDelay = strategy.next(); test.equals(backoffDelay, 10, 'Strategy should return the initial delay after reset.'); test.done(); } }; node-backoff-2.5.0/tests/fibonacci_backoff_strategy.js000066400000000000000000000025361264656751200230720ustar00rootroot00000000000000/* * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ var sinon = require('sinon'); var FibonacciBackoffStrategy = require('../lib/strategy/fibonacci'); exports["FibonacciBackoffStrategy"] = { setUp: function(callback) { this.strategy = new FibonacciBackoffStrategy({ initialDelay: 10, maxDelay: 1000 }); callback(); }, "backoff delays should follow a Fibonacci sequence": function(test) { // Fibonacci sequence: x[i] = x[i-1] + x[i-2]. var expectedDelays = [10, 10, 20, 30, 50, 80, 130, 210, 340, 550, 890, 1000]; var actualDelays = []; for (var i = 0; i < expectedDelays.length; i++) { actualDelays.push(this.strategy.next()); } test.deepEqual(expectedDelays, actualDelays, 'Generated delays should follow a Fibonacci sequence.'); test.done(); }, "backoff delays should restart from the initial delay after reset": function(test) { var strategy = new FibonacciBackoffStrategy({ initialDelay: 10, maxDelay: 1000 }); strategy.next(); strategy.reset(); var backoffDelay = strategy.next(); test.equals(backoffDelay, 10, 'Strategy should return the initial delay after reset.'); test.done(); } }; node-backoff-2.5.0/tests/function_call.js000066400000000000000000000323051264656751200203750ustar00rootroot00000000000000/* * Copyright (c) 2012 Mathieu Turcotte * Licensed under the MIT license. */ var assert = require('assert'); var events = require('events'); var sinon = require('sinon'); var util = require('util'); var FunctionCall = require('../lib/function_call'); function MockBackoff() { events.EventEmitter.call(this); this.reset = sinon.spy(); this.backoff = sinon.spy(); this.failAfter = sinon.spy(); } util.inherits(MockBackoff, events.EventEmitter); exports["FunctionCall"] = { setUp: function(callback) { this.wrappedFn = sinon.stub(); this.callback = sinon.stub(); this.backoff = new MockBackoff(); this.backoffFactory = sinon.stub(); this.backoffFactory.returns(this.backoff); callback(); }, tearDown: function(callback) { callback(); }, "constructor's first argument should be a function": function(test) { test.throws(function() { new FunctionCall(1, [], function() {}); }, /Expected fn to be a function./); test.done(); }, "constructor's last argument should be a function": function(test) { test.throws(function() { new FunctionCall(function() {}, [], 3); }, /Expected callback to be a function./); test.done(); }, "isPending should return false once the call is started": function(test) { this.wrappedFn. onFirstCall().yields(new Error()). onSecondCall().yields(null, 'Success!'); var call = new FunctionCall(this.wrappedFn, [], this.callback); test.ok(call.isPending()); call.start(this.backoffFactory); test.ok(!call.isPending()); this.backoff.emit('ready'); test.ok(!call.isPending()); test.done(); }, "isRunning should return true when call is in progress": function(test) { this.wrappedFn. onFirstCall().yields(new Error()). onSecondCall().yields(null, 'Success!'); var call = new FunctionCall(this.wrappedFn, [], this.callback); test.ok(!call.isRunning()); call.start(this.backoffFactory); test.ok(call.isRunning()); this.backoff.emit('ready'); test.ok(!call.isRunning()); test.done(); }, "isCompleted should return true once the call completes": function(test) { this.wrappedFn. onFirstCall().yields(new Error()). onSecondCall().yields(null, 'Success!'); var call = new FunctionCall(this.wrappedFn, [], this.callback); test.ok(!call.isCompleted()); call.start(this.backoffFactory); test.ok(!call.isCompleted()); this.backoff.emit('ready'); test.ok(call.isCompleted()); test.done(); }, "isAborted should return true once the call is aborted": function(test) { this.wrappedFn. onFirstCall().yields(new Error()). onSecondCall().yields(null, 'Success!'); var call = new FunctionCall(this.wrappedFn, [], this.callback); test.ok(!call.isAborted()); call.abort(); test.ok(call.isAborted()); test.done(); }, "setStrategy should overwrite the default strategy": function(test) { var replacementStrategy = {}; var call = new FunctionCall(this.wrappedFn, [], this.callback); call.setStrategy(replacementStrategy); call.start(this.backoffFactory); test.ok(this.backoffFactory.calledWith(replacementStrategy), 'User defined strategy should be used to instantiate ' + 'the backoff instance.'); test.done(); }, "setStrategy should throw if the call is in progress": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); call.start(this.backoffFactory); test.throws(function() { call.setStrategy({}); }, /in progress/); test.done(); }, "failAfter should not be set by default": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); call.start(this.backoffFactory); test.equal(0, this.backoff.failAfter.callCount); test.done(); }, "failAfter should be used as the maximum number of backoffs": function(test) { var failAfterValue = 99; var call = new FunctionCall(this.wrappedFn, [], this.callback); call.failAfter(failAfterValue); call.start(this.backoffFactory); test.ok(this.backoff.failAfter.calledWith(failAfterValue), 'User defined maximum number of backoffs shoud be ' + 'used to configure the backoff instance.'); test.done(); }, "failAfter should throw if the call is in progress": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); call.start(this.backoffFactory); test.throws(function() { call.failAfter(1234); }, /in progress/); test.done(); }, "start shouldn't allow overlapping invocation": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); var backoffFactory = this.backoffFactory; call.start(backoffFactory); test.throws(function() { call.start(backoffFactory); }, /already started/); test.done(); }, "start shouldn't allow invocation of aborted call": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); var backoffFactory = this.backoffFactory; call.abort(); test.throws(function() { call.start(backoffFactory); }, /aborted/); test.done(); }, "call should forward its arguments to the wrapped function": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); call.start(this.backoffFactory); test.ok(this.wrappedFn.calledWith(1, 2, 3)); test.done(); }, "call should complete when the wrapped function succeeds": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); this.wrappedFn. onCall(0).yields(new Error()). onCall(1).yields(new Error()). onCall(2).yields(new Error()). onCall(3).yields(null, 'Success!'); call.start(this.backoffFactory); for (var i = 0; i < 2; i++) { this.backoff.emit('ready'); } test.equals(this.callback.callCount, 0); this.backoff.emit('ready'); test.ok(this.callback.calledWith(null, 'Success!')); test.ok(this.wrappedFn.alwaysCalledWith(1, 2, 3)); test.done(); }, "call should fail when the backoff limit is reached": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); var error = new Error(); this.wrappedFn.yields(error); call.start(this.backoffFactory); for (var i = 0; i < 3; i++) { this.backoff.emit('ready'); } test.equals(this.callback.callCount, 0); this.backoff.emit('fail'); test.ok(this.callback.calledWith(error)); test.ok(this.wrappedFn.alwaysCalledWith(1, 2, 3)); test.done(); }, "call should fail when the retry predicate returns false": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); call.retryIf(function(err) { return err.retriable; }); var retriableError = new Error(); retriableError.retriable = true; var fatalError = new Error(); fatalError.retriable = false; this.wrappedFn. onCall(0).yields(retriableError). onCall(1).yields(retriableError). onCall(2).yields(fatalError); call.start(this.backoffFactory); for (var i = 0; i < 2; i++) { this.backoff.emit('ready'); } test.equals(this.callback.callCount, 1); test.ok(this.callback.calledWith(fatalError)); test.ok(this.wrappedFn.alwaysCalledWith(1, 2, 3)); test.done(); }, "wrapped function's callback shouldn't be called after abort": function(test) { var call = new FunctionCall(function(callback) { call.abort(); // Abort in middle of wrapped function's execution. callback(null, 'ok'); }, [], this.callback); call.start(this.backoffFactory); test.equals(this.callback.callCount, 1, 'Wrapped function\'s callback shouldn\'t be called after abort.'); test.ok(this.callback.calledWithMatch(sinon.match(function (err) { return !!err.message.match(/Backoff aborted/); }, "abort error"))); test.done(); }, "abort event is emitted once when abort is called": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); this.wrappedFn.yields(new Error()); var callEventSpy = sinon.spy(); call.on('abort', callEventSpy); call.start(this.backoffFactory); call.abort(); call.abort(); call.abort(); test.equals(callEventSpy.callCount, 1); test.done(); }, "getLastResult should return the last intermediary result": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); this.wrappedFn.yields(1); call.start(this.backoffFactory); for (var i = 2; i < 5; i++) { this.wrappedFn.yields(i); this.backoff.emit('ready'); test.deepEqual([i], call.getLastResult()); } this.wrappedFn.yields(null); this.backoff.emit('ready'); test.deepEqual([null], call.getLastResult()); test.done(); }, "getNumRetries should return the number of retries": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); this.wrappedFn.yields(1); call.start(this.backoffFactory); // The inital call doesn't count as a retry. test.equals(0, call.getNumRetries()); for (var i = 2; i < 5; i++) { this.wrappedFn.yields(i); this.backoff.emit('ready'); test.equals(i - 1, call.getNumRetries()); } this.wrappedFn.yields(null); this.backoff.emit('ready'); test.equals(4, call.getNumRetries()); test.done(); }, "wrapped function's errors should be propagated": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); this.wrappedFn.throws(new Error()); test.throws(function() { call.start(this.backoffFactory); }, Error); test.done(); }, "wrapped callback's errors should be propagated": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); this.wrappedFn.yields(null, 'Success!'); this.callback.throws(new Error()); test.throws(function() { call.start(this.backoffFactory); }, Error); test.done(); }, "call event should be emitted when wrapped function gets called": function(test) { this.wrappedFn.yields(1); var callEventSpy = sinon.spy(); var call = new FunctionCall(this.wrappedFn, [1, 'two'], this.callback); call.on('call', callEventSpy); call.start(this.backoffFactory); for (var i = 1; i < 5; i++) { this.backoff.emit('ready'); } test.equal(5, callEventSpy.callCount, 'The call event should have been emitted 5 times.'); test.deepEqual([1, 'two'], callEventSpy.getCall(0).args, 'The call event should carry function\'s args.'); test.done(); }, "callback event should be emitted when callback is called": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 'two'], this.callback); var callbackSpy = sinon.spy(); call.on('callback', callbackSpy); this.wrappedFn.yields('error'); call.start(this.backoffFactory); this.wrappedFn.yields(null, 'done'); this.backoff.emit('ready'); test.equal(2, callbackSpy.callCount, 'Callback event should have been emitted 2 times.'); test.deepEqual(['error'], callbackSpy.firstCall.args, 'First callback event should carry first call\'s results.'); test.deepEqual([null, 'done'], callbackSpy.secondCall.args, 'Second callback event should carry second call\'s results.'); test.done(); }, "backoff event should be emitted on backoff start": function(test) { var err = new Error('backoff event error'); var call = new FunctionCall(this.wrappedFn, [1, 'two'], this.callback); var backoffSpy = sinon.spy(); call.on('backoff', backoffSpy); this.wrappedFn.yields(err); call.start(this.backoffFactory); this.backoff.emit('backoff', 3, 1234, err); test.ok(this.backoff.backoff.calledWith(err), 'The backoff instance should have been called with the error.'); test.equal(1, backoffSpy.callCount, 'Backoff event should have been emitted 1 time.'); test.deepEqual([3, 1234, err], backoffSpy.firstCall.args, 'Backoff event should carry the backoff number, delay and error.'); test.done(); } };
  • strategy.js

  •  Copyright (c) 2012 Mathieu Turcotte
     Licensed under the MIT license.
    
    var events = require('events');
    var util = require('util');
    
    function isDef(value) {
        return value !== undefined && value !== null;
    }
  • Abstract class defining the skeleton for the backoff strategies. Accepts an object holding the options for the backoff strategy:

    • randomisationFactor: The randomisation factor which must be between 0 and 1 where 1 equates to a randomization factor of 100% and 0 to no randomization.
    • initialDelay: The backoff initial delay in milliseconds.
    • maxDelay: The backoff maximal delay in milliseconds.
    function BackoffStrategy(options) {
        options = options || {};
    
        if (isDef(options.initialDelay) && options.initialDelay < 1) {
            throw new Error('The initial timeout must be greater than 0.');
        } else if (isDef(options.maxDelay) && options.maxDelay < 1) {
            throw new Error('The maximal timeout must be greater than 0.');
        }
    
        this.initialDelay_ = options.initialDelay || 100;
        this.maxDelay_ = options.maxDelay || 10000;
    
        if (this.maxDelay_ <= this.initialDelay_) {
            throw new Error('The maximal backoff delay must be ' +
                            'greater than the initial backoff delay.');
        }
    
        if (isDef(options.randomisationFactor) &&
            (options.randomisationFactor < 0 || options.randomisationFactor > 1)) {
            throw new Error('The randomisation factor must be between 0 and 1.');
        }
    
        this.randomisationFactor_ = options.randomisationFactor || 0;
    }
  • Gets the maximal backoff delay.

    BackoffStrategy.prototype.getMaxDelay = function() {
        return this.maxDelay_;
    };
  • Gets the initial backoff delay.

    BackoffStrategy.prototype.getInitialDelay = function() {
        return this.initialDelay_;
    };
  • Template method that computes and returns the next backoff delay in milliseconds.

    BackoffStrategy.prototype.next = function() {
        var backoffDelay = this.next_();
        var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_;
        var randomizedDelay = Math.round(backoffDelay * randomisationMultiple);
        return randomizedDelay;
    };
  • Computes and returns the next backoff delay. Intended to be overridden by subclasses.

    BackoffStrategy.prototype.next_ = function() {
        throw new Error('BackoffStrategy.next_() unimplemented.');
    };
  • Template method that resets the backoff delay to its initial value.

    BackoffStrategy.prototype.reset = function() {
        this.reset_();
    };
  • Resets the backoff delay to its initial value. Intended to be overridden by subclasses.

    BackoffStrategy.prototype.reset_ = function() {
        throw new Error('BackoffStrategy.reset_() unimplemented.');
    };
    
    module.exports = BackoffStrategy;