jqapi-1.7/docs/stop/index.html0000644000175000017500000001633611654657352015414 0ustar metalmetal

.stop()

.stop( [clearQueue] [, jumpToEnd] ) Returns: jQuery

Description: Stop the currently-running animation on the matched elements.

  • version added: 1.2.stop( [clearQueue] [, jumpToEnd] )

    clearQueueA Boolean indicating whether to remove queued animation as well. Defaults to false.

    jumpToEndA Boolean indicating whether to complete the current animation immediately. Defaults to false.

  • version added: 1.7.stop( [queue] [, clearQueue] [, jumpToEnd] )

    queueThe name of the queue in which to stop animations.

    clearQueueA Boolean indicating whether to remove queued animation as well. Defaults to false.

    jumpToEndA Boolean indicating whether to complete the current animation immediately. Defaults to false.

When .stop() is called on an element, the currently-running animation (if any) is immediately stopped. If, for instance, an element is being hidden with .slideUp() when .stop() is called, the element will now still be displayed, but will be a fraction of its previous height. Callback functions are not called.

If more than one animation method is called on the same element, the later animations are placed in the effects queue for the element. These animations will not begin until the first one completes. When .stop() is called, the next animation in the queue begins immediately. If the clearQueue parameter is provided with a value of true, then the rest of the animations in the queue are removed and never run.

If the jumpToEnd argument is provided with a value of true, the current animation stops, but the element is immediately given its target values for each CSS property. In our above .slideUp() example, the element would be immediately hidden. The callback function is then immediately called, if provided.

As of jQuery 1.7, if the first argument is provided as a string, only the animations in the queue represented by that string will be stopped.

The usefulness of the .stop() method is evident when we need to animate an element on mouseenter and mouseleave:

<div id="hoverme">
  Hover me
  <img id="hoverme" src="book.png" alt="" width="100" height="123" />
</div>

We can create a nice fade effect without the common problem of multiple queued animations by adding .stop(true, true) to the chain:

$('#hoverme-stop-2').hover(function() {
  $(this).find('img').stop(true, true).fadeOut();
}, function() {
  $(this).find('img').stop(true, true).fadeIn();
});

Toggling Animations

As of jQuery 1.7, stopping a toggled animation prematurely with .stop() will trigger jQuery's internal effects tracking. In previous versions, calling the .stop() method before a toggled animation was completed would cause the animation to lose track of its state (if jumpToEnd was false). Any subsequent animations would start at a new "half-way" state, sometimes resulting in the element disappearing. To observe the new behavior, see the final example below.

Animations may be stopped globally by setting the property $.fx.off to true. When this is done, all animation methods will immediately set elements to their final state when called, rather than displaying an effect.

Examples:

Example: Click the Go button once to start the animation, then click the STOP button to stop it where it's currently positioned. Another option is to click several buttons to queue them up and see that stop just kills the currently playing one.

<!DOCTYPE html>
<html>
<head>
  <style>div { 
position: absolute; 
background-color: #abc;
left: 0px;
top:30px;
width: 60px; 
height: 60px;
margin: 5px; 
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="go">Go</button> 
<button id="stop">STOP!</button>
<button id="back">Back</button>
<div class="block"></div>
<script>
/* Start animation */
$("#go").click(function(){
$(".block").animate({left: '+=100px'}, 2000);
});

/* Stop animation when button is clicked */
$("#stop").click(function(){
$(".block").stop();
});

/* Start animation in the opposite direction */
$("#back").click(function(){
$(".block").animate({left: '-=100px'}, 2000);
});

</script>

</body>
</html>

Demo:

Example: Click the slideToggle button to start the animation, then click again before the animation is completed. The animation will toggle the other direction from the saved starting point.

<!DOCTYPE html>
<html>
<head>
  <style>.block { 
background-color: #abc;
border: 2px solid black;
width: 200px; 
height: 80px;
margin: 10px;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="toggle">slideToggle</button> 
<div class="block"></div>
<script>
var $block = $('.block');
/* Toggle a sliding animation animation */
$('#toggle').on('click', function() {
    $block.stop().slideToggle(1000);
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/submit/index.html0000644000175000017500000001475411654657372015736 0ustar metalmetal

.submit()

.submit( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "submit" JavaScript event, or trigger that event on an element.

  • version added: 1.0.submit( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.submit( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.submit()

This method is a shortcut for .bind('submit', handler) in the first variation, and .trigger('submit') in the third.

The submit event is sent to an element when the user is attempting to submit a form. It can only be attached to <form> elements. Forms can be submitted either by clicking an explicit <input type="submit">, <input type="image">, or <button type="submit">, or by pressing Enter when certain form elements have focus.

Depending on the browser, the Enter key may only cause a form submission if the form has exactly one text field, or only when there is a submit button present. The interface should not rely on a particular behavior for this key unless the issue is forced by observing the keypress event for presses of the Enter key.

For example, consider the HTML:

<form id="target" action="destination.html">
  <input type="text" value="Hello there" />
  <input type="submit" value="Go" />
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the form:

$('#target').submit(function() {
  alert('Handler for .submit() called.');
  return false;
});

Now when the form is submitted, the message is alerted. This happens prior to the actual submission, so we can cancel the submit action by calling .preventDefault() on the event object or by returning false from our handler. We can trigger the event manually when another element is clicked:

$('#other').click(function() {
  $('#target').submit();
});

After this code executes, clicks on Trigger the handler will also display the message. In addition, the default submit action on the form will be fired, so the form will be submitted.

The JavaScript submit event does not bubble in Internet Explorer. However, scripts that rely on event delegation with the submit event will work consistently across browsers as of jQuery 1.4, which has normalized the event's behavior.

Additional Notes:

  • Forms and their child elements should not use input names or ids that conflict with properties of a form, such as submit, length, or method. Name conflicts can cause confusing failures. For a complete list of rules and to check your markup for these problems, see DOMLint.

Examples:

Example: If you'd like to prevent forms from being submitted unless a flag variable is set, try:

<!DOCTYPE html>
<html>
<head>
  <style>

  p { margin:0; color:blue; }
  div,p { margin-left:10px; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Type 'correct' to validate.</p>
  <form action="javascript:alert('success!');">
    <div>
      <input type="text" />

      <input type="submit" />
    </div>
  </form>
  <span></span>
<script>

    $("form").submit(function() {
      if ($("input:first").val() == "correct") {
        $("span").text("Validated...").show();
        return true;
      }
      $("span").text("Not valid!").show().fadeOut(1000);
      return false;
    });
</script>

</body>
</html>

Demo:

Example: If you'd like to prevent forms from being submitted unless a flag variable is set, try:

$("form").submit( function () {
  return this.some_flag_variable;
} );

Example: To trigger the submit event on the first form on the page, try:

$("form:first").submit();
jqapi-1.7/docs/submit-selector/index.html0000644000175000017500000001231711654657432017542 0ustar metalmetal

:submit Selector

submit selector

version added: 1.0jQuery(':submit')

Description: Selects all elements of type submit.

The :submit selector typically applies to button or input elements. Note that some browsers treat <button> element as type="default" implicitly while others (such as Internet Explorer) do not.

Additional Notes:

  • Because :submit is a jQuery extension and not part of the CSS specification, queries using :submit cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="submit"] instead.

Example:

Finds all submit elements that are descendants of a td element.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:45px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<table>
<form>
<table id="exampleTable" border="1" cellpadding="10" align="center">

    <tr>
        <th>
            Element Type
        </th>
        <th>
            Element
        </th>

    </tr
    <tr>
        <td>
            <input type="button" value="Input Button"/>
        </td>

    </tr>
    <tr>
        <td>
            <input type="checkbox" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="file" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="hidden" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="image" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="password" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="radio" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="reset" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="submit" />
        </td>

    </tr>
    <tr>
        <td>
            <input type="text" />
        </td>

    </tr>
    <tr>
        <td>
            <select><option>Option</option></select>
        </td>

    </tr>
    <tr>
        <td>
            <textarea></textarea>
        </td>
    </tr>

    <tr>
        <td>
            <button>Button</button>
        </td>
    </tr>
    <tr>
        <td>
            <button type="submit">Button type="submit"</button>
        </td>
    </tr>

</table>
</form>
<div id="result"></div>

<script>
    var submitEl = $("td :submit")
      .parent('td')
      .css({background:"yellow", border:"3px red solid"})
    .end();
    
    $('#result').text('jQuery matched ' + submitEl.length + ' elements.');

    // so it won't submit
    $("form").submit(function () { return false; });
    
    // Extra JS to make the HTML easier to edit (None of this is relevant to the ':submit' selector
    $('#exampleTable').find('td').each(function(i, el) {
        var inputEl = $(el).children(),
            inputType = inputEl.attr('type') ? ' type="' + inputEl.attr('type') + '"' : '';
        $(el).before('<td>' + inputEl[0].nodeName + inputType + '</td>');
    })
    

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/text/index.html0000644000175000017500000001634011654657404015404 0ustar metalmetal

.text()

Contents:

.text() Returns: String

Description: Get the combined text contents of each element in the set of matched elements, including their descendants.

  • version added: 1.0.text()

Unlike the .html() method, .text() can be used in both XML and HTML documents. The result of the .text() method is a string containing the combined text of all matched elements. (Due to variations in the HTML parsers in different browsers, the text returned may vary in newlines and other white space.) Consider the following HTML:

<div class="demo-container">
  <div class="demo-box">Demonstration Box</div>
  <ul>
  <li>list item 1</li>
  <li>list <strong>item</strong> 2</li>
  </ul>
  </div>

The code $('div.demo-container').text() would produce the following result:

Demonstration Box list item 1 list item 2

The .text() method cannot be used on form inputs or scripts. To set or get the text value of input or textarea elements, use the .val() method. To get the value of a script element, use the .html() method.

As of jQuery 1.4, the .text() method returns the value of text and CDATA nodes as well as element nodes.

Example:

Find the text in the first paragraph (stripping out the html), then set the html of the last paragraph to show it is just text (the red bold is gone).

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; margin:8px; }
  b { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><b>Test</b> Paragraph.</p>

  <p></p>
<script>
    var str = $("p:first").text();
    $("p:last").html(str);
</script>

</body>
</html>

Demo:

.text( textString ) Returns: jQuery

Description: Set the content of each element in the set of matched elements to the specified text.

  • version added: 1.0.text( textString )

    textStringA string of text to set as the content of each matched element.

  • version added: 1.4.text( function(index, text) )

    function(index, text)A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.

Unlike the .html() method, .text() can be used in both XML and HTML documents.

We need to be aware that this method escapes the string provided as necessary so that it will render correctly in HTML. To do so, it calls the DOM method .createTextNode(), which replaces special characters with their HTML entity equivalents (such as &lt; for <). Consider the following HTML:

<div class="demo-container">
  <div class="demo-box">Demonstration Box</div>
  <ul>
    <li>list item 1</li>
    <li>list <strong>item</strong> 2</li>
  </ul>
</div>

The code $('div.demo-container').text('<p>This is a test.</p>'); will produce the following DOM output:

<div class="demo-container">
&lt;p&gt;This is a test.&lt;/p&gt;
</div>

It will appear on a rendered page as though the tags were exposed, like this:

<p>This is a test</p>

The .text() method cannot be used on input elements. For input field text, use the .val() method.

As of jQuery 1.4, the .text() method allows us to set the text content by passing in a function.

$('ul li').text(function(index) {
  return 'item number ' + (index + 1);
});

Given an unordered list with three <li> elements, this example will produce the following DOM output:

<ul>
  <li>item number 1</li>
  <li>item number 2</li>
  <li>item number 3</li>
</ul>

Example:

Add text to the paragraph (notice the bold tag is escaped).

<!DOCTYPE html>
<html>
<head>
  <style>

  p { color:blue; margin:8px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Test Paragraph.</p>
<script>$("p").text("<b>Some</b> new text.");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/text-selector/index.html0000644000175000017500000000745411654657434017233 0ustar metalmetal

:text Selector

text selector

version added: 1.0jQuery(':text')

Description: Selects all elements of type text.

$(':text') is equivalent to $('[type=text]') and thus selects all <input type="text"> elements. As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':text') is equivalent to $('*:text'), so $('input:text') should be used instead.

Note: As of jQuery 1.5.2, :text selects input elements that have no specified type attribute (in which case type="text" is implied).

Additional Notes:

  • Because :text is a jQuery extension and not part of the CSS specification, queries using :text cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="text"] instead.

Example:

Finds all text inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:25px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option</option></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div>
  </div>
<script>

    var input = $("form input:text").css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/toArray/index.html0000644000175000017500000000514411654657406016043 0ustar metalmetal

.toArray()

.toArray() Returns: Array

Description: Retrieve all the DOM elements contained in the jQuery set, as an array.

  • version added: 1.4.toArray()

.toArray() returns all of the elements in the jQuery set:

alert($('li').toArray());

All of the matched DOM nodes are returned by this call, contained in a standard array:

[<li id="foo">, <li id="bar">]

Example:

Selects all divs in the document and returns the DOM Elements as an Array, then uses the built-in reverse-method to reverse that array.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Reversed - <span></span>

  <div>One</div>
  <div>Two</div>
  <div>Three</div>
<script>

    function disp(divs) {
      var a = [];
      for (var i = 0; i < divs.length; i++) {
        a.push(divs[i].innerHTML);
      }
      $("span").text(a.join(" "));
    }
    
    disp( $("div").toArray().reverse() );
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/toggle/index.html0000644000175000017500000002063311654657352015703 0ustar metalmetal

.toggle()

.toggle( [duration] [, callback] ) Returns: jQuery

Description: Display or hide the matched elements.

  • version added: 1.0.toggle( [duration] [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.toggle( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

  • version added: 1.3.toggle( showOrHide )

    showOrHideA Boolean indicating whether to show or hide the elements.

With no parameters, the .toggle() method simply toggles the visibility of elements:

$('.target').toggle();

The matched elements will be revealed or hidden immediately, with no animation, by changing the CSS display property. If the element is initially displayed, it will be hidden; if hidden, it will be shown. The display property is saved and restored as needed. If an element has a display value of inline, then is hidden and shown, it will once again be displayed inline.

When a duration is provided, .toggle() becomes an animation method. The .toggle() method animates the width, height, and opacity of the matched elements simultaneously. When these properties reach 0 after a hiding animation, the display style property is set to none to ensure that the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

Note: The event handling suite also has a method named .toggle(). Which one is fired depends on the set of arguments passed.

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />

We will cause .toggle() to be called when another element is clicked:

$('#clickme').click(function() {
  $('#book').toggle('slow', function() {
    // Animation complete.
  });
});

With the element initially shown, we can hide it slowly with the first click:

A second click will show the element once again:

The second version of the method accepts a Boolean parameter. If this parameter is true, then the matched elements are shown; if false, the elements are hidden. In essence, the statement:

$('#foo').toggle(showOrHide);

is equivalent to:

if ( showOrHide == true ) {
  $('#foo').show();
} else if ( showOrHide == false ) {
  $('#foo').hide();
}

Additional Notes:

  • All jQuery effects, including .toggle(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.

Examples:

Example: Toggles all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Toggle</button>
<p>Hello</p>
<p style="display: none">Good Bye</p>
<script>

$("button").click(function () {
$("p").toggle();
});
</script>

</body>
</html>

Demo:

Example: Animates all paragraphs to be shown if they are hidden and hidden if they are visible, completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
p { background:#dad;
font-weight:bold;
font-size:16px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Toggle 'em</button>

<p>Hiya</p>
<p>Such interesting text, eh?</p>
<script>
$("button").click(function () {
$("p").toggle("slow");
});    
</script>

</body>
</html>

Demo:

Example: Shows all paragraphs, then hides them all, back and forth.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Toggle</button>
<p>Hello</p>
<p style="display: none">Good Bye</p>
<script>

var flip = 0;
$("button").click(function () {
$("p").toggle( flip++ % 2 == 0 );
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/toggle-event/index.html0000644000175000017500000001274211654657372017026 0ustar metalmetal

.toggle()

.toggle( handler(eventObject), handler(eventObject) [, handler(eventObject)] ) Returns: jQuery

Description: Bind two or more handlers to the matched elements, to be executed on alternate clicks.

  • version added: 1.0.toggle( handler(eventObject), handler(eventObject) [, handler(eventObject)] )

    handler(eventObject)A function to execute every even time the element is clicked.

    handler(eventObject)A function to execute every odd time the element is clicked.

    handler(eventObject)Additional handlers to cycle through after clicks.

The .toggle() method binds a handler for the click event, so the rules outlined for the triggering of click apply here as well.

For example, consider the HTML:
<div id="target">
  Click here
</div>

Event handlers can then be bound to the <div>:

$('#target').toggle(function() {
  alert('First handler for .toggle() called.');
}, function() {
  alert('Second handler for .toggle() called.');
});

As the element is clicked repeatedly, the messages alternate:

First handler for .toggle() called.
Second handler for .toggle() called.
First handler for .toggle() called.
Second handler for .toggle() called.
First handler for .toggle() called.

If more than two handlers are provided, .toggle() will cycle among all of them. For example, if there are three handlers, then the first handler will be called on the first click, the fourth click, the seventh click, and so on.

Note: jQuery also provides an animation method named .toggle() that toggles the visibility of elements. Whether the animation or the event method is fired depends on the set of arguments passed.

The .toggle() method is provided for convenience. It is relatively straightforward to implement the same behavior by hand, and this can be necessary if the assumptions built into .toggle() prove limiting. For example, .toggle() is not guaranteed to work correctly if applied twice to the same element. Since .toggle() internally uses a click handler to do its work, we must unbind click to remove a behavior attached with .toggle(), so other click handlers can be caught in the crossfire. The implementation also calls .preventDefault() on the event, so links will not be followed and buttons will not be clicked if .toggle() has been called on the element.

Examples:

Example: Click to toggle highlight on the list item.

<!DOCTYPE html>
<html>
<head>
  <style>
  ul { margin:10px; list-style:inside circle; font-weight:bold; }
  li { cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li>Go to the store</li>
    <li>Pick up dinner</li>
    <li>Debug crash</li>

    <li>Take a jog</li>
  </ul>
<script>
    $("li").toggle(
      function () {
        $(this).css({"list-style-type":"disc", "color":"blue"});
      },
      function () {
        $(this).css({"list-style-type":"disc", "color":"red"});
      },
      function () {
        $(this).css({"list-style-type":"", "color":""});
      }
    );

</script>

</body>
</html>

Demo:

Example: To toggle a style on table cells:

$("td").toggle(
  function () {
    $(this).addClass("selected");
  },
  function () {
    $(this).removeClass("selected");
  }
);
jqapi-1.7/docs/toggleClass/index.html0000644000175000017500000002251611654657324016672 0ustar metalmetal

.toggleClass()

.toggleClass( className ) Returns: jQuery

Description: Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.

  • version added: 1.0.toggleClass( className )

    classNameOne or more class names (separated by spaces) to be toggled for each element in the matched set.

  • version added: 1.3.toggleClass( className, switch )

    classNameOne or more class names (separated by spaces) to be toggled for each element in the matched set.

    switchA Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.

  • version added: 1.4.toggleClass( [switch] )

    switchA boolean value to determine whether the class should be added or removed.

  • version added: 1.4.toggleClass( function(index, class, switch) [, switch] )

    function(index, class, switch)A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.

    switchA boolean value to determine whether the class should be added or removed.

This method takes one or more class names as its parameter. In the first version, if an element in the matched set of elements already has the class, then it is removed; if an element does not have the class, then it is added. For example, we can apply .toggleClass() to a simple <div>:

<div class="tumble">Some text.</div>
      

The first time we apply $('div.tumble').toggleClass('bounce'), we get the following:

<div class="tumble bounce">Some text.</div>
      

The second time we apply $('div.tumble').toggleClass('bounce'), the <div> class is returned to the single tumble value:

<div class="tumble">Some text.</div>

Applying .toggleClass('bounce spin') to the same <div> alternates between <div class="tumble bounce spin"> and <div class="tumble">.

The second version of .toggleClass() uses the second parameter for determining whether the class should be added or removed. If this parameter's value is true, then the class is added; if false, the class is removed. In essence, the statement:

$('#foo').toggleClass(className, addOrRemove);

is equivalent to:

if (addOrRemove) {
    $('#foo').addClass(className);
  }
  else {
    $('#foo').removeClass(className);
  }
  

As of jQuery 1.4, if no arguments are passed to .toggleClass(), all class names on the element the first time .toggleClass() is called will be toggled. Also as of jQuery 1.4, the class name to be toggled can be determined by passing in a function.

$('div.foo').toggleClass(function() {
  if ($(this).parent().is('.bar')) {
    return 'happy';
  } else {
    return 'sad';
  }
});

This example will toggle the happy class for <div class="foo"> elements if their parent element has a class of bar; otherwise, it will toggle the sad class.

Examples:

Example: Toggle the class 'highlight' when a paragraph is clicked.

<!DOCTYPE html>
<html>
<head>
  <style>

  p { margin: 4px; font-size:16px; font-weight:bolder;
      cursor:pointer; }
  .blue { color:blue; }
  .highlight { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p class="blue">Click to toggle</p>
  <p class="blue highlight">highlight</p>
  <p class="blue">on these</p>
  <p class="blue">paragraphs</p>
<script>
    $("p").click(function () {
      $(this).toggleClass("highlight");
    });
</script>

</body>
</html>

Demo:

Example: Add the "highlight" class to the clicked paragraph on every third click of that paragraph, remove it every first and second click.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin: 4px; font-size:16px; font-weight:bolder;
      cursor:pointer; }
  .blue { color:blue; }
  .highlight { background:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p class="blue">Click to toggle (<span>clicks: 0</span>)</p>
  <p class="blue highlight">highlight (<span>clicks: 0</span>)</p>
  <p class="blue">on these (<span>clicks: 0</span>)</p>

  <p class="blue">paragraphs (<span>clicks: 0</span>)</p>
<script>
var count = 0;
$("p").each(function() {
  var $thisParagraph = $(this);
  var count = 0;
  $thisParagraph.click(function() {
    count++;
    $thisParagraph.find("span").text('clicks: ' + count);
    $thisParagraph.toggleClass("highlight", count % 3 == 0);
  });
});

</script>

</body>
</html>

Demo:

Example: Toggle the class name(s) indicated on the buttons for each div.

<!DOCTYPE html>
<html>
<head>
  <style>
.wrap > div { float: left; width: 100px; margin: 1em 1em 0 0;
              padding=left: 3px; border: 1px solid #abc; }
div.a { background-color: aqua; }
div.b { background-color: burlywood; }
div.c { background-color: cornsilk; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div class="buttons">
  <button>toggle</button>
  <button class="a">toggle a</button>
  <button class="a b">toggle a b</button>
  <button class="a b c">toggle a b c</button>
  <a href="#">reset</a>
</div>
<div class="wrap">
  <div></div>
  <div class="b"></div>
  <div class="a b"></div>
  <div class="a c"></div>
</div>

<script>
var cls = ['', 'a', 'a b', 'a b c'];
var divs = $('div.wrap').children();
var appendClass = function() {
  divs.append(function() {
    return '<div>' + (this.className || 'none') + '</div>';
  });
};

appendClass();

$('button').bind('click', function() {
  var tc = this.className || undefined;
  divs.toggleClass(tc);
  appendClass();
});

$('a').bind('click', function(event) {
  event.preventDefault();
  divs.empty().each(function(i) {
    this.className = cls[i];
  });
  appendClass();
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/trigger/index.html0000644000175000017500000001572111654657374016073 0ustar metalmetal

.trigger()

.trigger( eventType, extraParameters ) Returns: jQuery

Description: Execute all handlers and behaviors attached to the matched elements for the given event type.

  • version added: 1.0.trigger( eventType, extraParameters )

    eventTypeA string containing a JavaScript event type, such as click or submit.

    extraParametersAdditional parameters to pass along to the event handler.

  • version added: 1.3.trigger( event )

    eventA jQuery.Event object.

Any event handlers attached with .bind() or one of its shortcut methods are triggered when the corresponding event occurs. They can be fired manually, however, with the .trigger() method. A call to .trigger() executes the handlers in the same order they would be if the event were triggered naturally by the user:

$('#foo').bind('click', function() {
      alert($(this).text());
    });
    $('#foo').trigger('click');

As of jQuery 1.3, .trigger()ed events bubble up the DOM tree; an event handler can stop the bubbling by returning false from the handler or calling the .stopPropagation() method on the event object passed into the event. Although .trigger() simulates an event activation, complete with a synthesized event object, it does not perfectly replicate a naturally-occurring event.

To trigger handlers bound via jQuery without also triggering the native event, use .triggerHandler() instead.

When we define a custom event type using the .bind() method, the second argument to .trigger() can become useful. For example, suppose we have bound a handler for the custom event to our element instead of the built-in click event as we did above:

$('#foo').bind('custom', function(event, param1, param2) {
  alert(param1 + "\n" + param2);
});
$('#foo').trigger('custom', ['Custom', 'Event']);

The event object is always passed as the first parameter to an event handler, but if additional parameters are specified during a .trigger() call, these parameters will be passed along to the handler as well. To pass more than one parameter, use an array as shown here. As of jQuery 1.6.2, a single parameter can be passed without using an array.

Note the difference between the extra parameters we're passing here and the eventData parameter to the .bind() method. Both are mechanisms for passing information to an event handler, but the extraParameters argument to .trigger() allows information to be determined at the time the event is triggered, while the eventData argument to .bind() requires the information to be already computed at the time the handler is bound.

Examples:

Example: Clicks to button #2 also trigger a click for button #1.

<!DOCTYPE html>
<html>
<head>
  <style>

button { margin:10px; }
div { color:blue; font-weight:bold; }
span { color:red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Button #1</button>
<button>Button #2</button>
<div><span>0</span> button #1 clicks.</div>

<div><span>0</span> button #2 clicks.</div>
<script>
$("button:first").click(function () {
update($("span:first"));
});
$("button:last").click(function () {
$("button:first").trigger('click');

update($("span:last"));
});

function update(j) {
var n = parseInt(j.text(), 10);
j.text(n + 1);
}
</script>

</body>
</html>

Demo:

Example: To submit the first form without using the submit() function, try:

$("form:first").trigger("submit")

Example: To submit the first form without using the submit() function, try:

var event = jQuery.Event("submit");
$("form:first").trigger(event);
if ( event.isDefaultPrevented() ) {
// Perform an action...
}

Example: To pass arbitrary data to an event:

$("p").click( function (event, a, b) {
// when a normal click fires, a and b are undefined
// for a trigger like below a refers to "foo" and b refers to "bar"

} ).trigger("click", ["foo", "bar"]);

Example: To pass arbitrary data through an event object:

var event = jQuery.Event("logged");
event.user = "foo";
event.pass = "bar";
$("body").trigger(event);

Example: Alternative way to pass data through an event object:

$("body").trigger({
type:"logged",
user:"foo",
pass:"bar"

});
jqapi-1.7/docs/triggerHandler/index.html0000644000175000017500000000727611654657374017377 0ustar metalmetal

.triggerHandler()

.triggerHandler( eventType, extraParameters ) Returns: Object

Description: Execute all handlers attached to an element for an event.

  • version added: 1.2.triggerHandler( eventType, extraParameters )

    eventTypeA string containing a JavaScript event type, such as click or submit.

    extraParametersAn array of additional parameters to pass along to the event handler.

The .triggerHandler() method behaves similarly to .trigger(), with the following exceptions:

  • The .triggerHandler() method does not cause the default behavior of an event to occur (such as a form submission).
  • While .trigger() will operate on all elements matched by the jQuery object, .triggerHandler() only affects the first matched element.
  • Events created with .triggerHandler() do not bubble up the DOM hierarchy; if they are not handled by the target element directly, they do nothing.
  • Instead of returning the jQuery object (to allow chaining), .triggerHandler() returns whatever value was returned by the last handler it caused to be executed. If no handlers are triggered, it returns undefined

For more information on this method, see the discussion for .trigger().

Example:

If you called .triggerHandler() on a focus event - the browser's default focus action would not be triggered, only the event handlers bound to the focus event.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="old">.trigger("focus")</button>
<button id="new">.triggerHandler("focus")</button><br/><br/>

<input type="text" value="To Be Focused"/>
<script>

$("#old").click(function(){
$("input").trigger("focus");
});
$("#new").click(function(){
$("input").triggerHandler("focus");
});
$("input").focus(function(){
$("<span>Focused!</span>").appendTo("body").fadeOut(1000);
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/unbind/index.html0000644000175000017500000002060211654657374015701 0ustar metalmetal

.unbind()

.unbind( [eventType] [, handler(eventObject)] ) Returns: jQuery

Description: Remove a previously-attached event handler from the elements.

  • version added: 1.0.unbind( [eventType] [, handler(eventObject)] )

    eventTypeA string containing a JavaScript event type, such as click or submit.

    handler(eventObject)The function that is to be no longer executed.

  • version added: 1.4.3.unbind( eventType, false )

    eventTypeA string containing a JavaScript event type, such as click or submit.

    falseUnbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).

  • version added: 1.0.unbind( event )

    eventA JavaScript event object as passed to an event handler.

Event handlers attached with .bind() can be removed with .unbind(). (As of jQuery 1.7, the .on() and .off() methods are preferred to attach and remove event handlers on elements.) In the simplest case, with no arguments, .unbind() removes all handlers attached to the elements:

$('#foo').unbind();

This version removes the handlers regardless of type. To be more precise, we can pass an event type:

$('#foo').unbind('click');

By specifying the click event type, only handlers for that event type will be unbound. This approach can still have negative ramifications if other scripts might be attaching behaviors to the same element, however. Robust and extensible applications typically demand the two-argument version for this reason:

var handler = function() {
  alert('The quick brown fox jumps over the lazy dog.');
};
$('#foo').bind('click', handler);
$('#foo').unbind('click', handler);

By naming the handler, we can be assured that no other functions are accidentally removed. Note that the following will not work:

$('#foo').bind('click', function() {
  alert('The quick brown fox jumps over the lazy dog.');
});

// will NOT work
$('#foo').unbind('click', function() {
  alert('The quick brown fox jumps over the lazy dog.');
});

Even though the two functions are identical in content, they are created separately and so JavaScript is free to keep them as distinct function objects. To unbind a particular handler, we need a reference to that function and not a different one that happens to do the same thing.

Note: Using a proxied function to unbind an event on an element will unbind all proxied functions on that element, as the same proxy function is used for all proxied events. To allow unbinding a specific event, use unique class names on the event (e.g. click.proxy1, click.proxy2) when attaching them.

Using Namespaces

Instead of maintaining references to handlers in order to unbind them, we can namespace the events and use this capability to narrow the scope of our unbinding actions. As shown in the discussion for the .bind() method, namespaces are defined by using a period (.) character when binding a handler:

$('#foo').bind('click.myEvents', handler);

When a handler is bound in this fashion, we can still unbind it the normal way:

$('#foo').unbind('click');

However, if we want to avoid affecting other handlers, we can be more specific:

$('#foo').unbind('click.myEvents');

We can also unbind all of the handlers in a namespace, regardless of event type:

$('#foo').unbind('.myEvents');

It is particularly useful to attach namespaces to event bindings when we are developing plug-ins or otherwise writing code that may interact with other event-handling code in the future.

Using the Event Object

The third form of the .unbind() method is used when we wish to unbind a handler from within itself. For example, suppose we wish to trigger an event handler only three times:

var timesClicked = 0;
$('#foo').bind('click', function(event) {
  alert('The quick brown fox jumps over the lazy dog.');
  timesClicked++;
  if (timesClicked >= 3) {
    $(this).unbind(event);
  }
});

The handler in this case must take a parameter, so that we can capture the event object and use it to unbind the handler after the third click. The event object contains the context necessary for .unbind() to know which handler to remove. This example is also an illustration of a closure. Since the handler refers to the timesClicked variable, which is defined outside the function, incrementing the variable has an effect even between invocations of the handler.

Examples:

Example: Can bind and unbind events to the colored button.

<!DOCTYPE html>
<html>
<head>
  <style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>

<div style="display:none;">Click!</div>
<script>

function aClick() {
$("div").show().fadeOut("slow");
}
$("#bind").click(function () {
// could use .bind('click', aClick) instead but for variety...
$("#theone").click(aClick)
  .text("Can Click!");
});
$("#unbind").click(function () {
$("#theone").unbind('click', aClick)
  .text("Does nothing...");
});

</script>

</body>
</html>

Demo:

Example: To unbind all events from all paragraphs, write:

$("p").unbind()

Example: To unbind all click events from all paragraphs, write:

$("p").unbind( "click" )

Example: To unbind just one previously bound handler, pass the function in as the second argument:

var foo = function () {
// code to handle some kind of event
};

$("p").bind("click", foo); // ... now foo will be called when paragraphs are clicked ...

$("p").unbind("click", foo); // ... foo will no longer be called.
jqapi-1.7/docs/undelegate/index.html0000644000175000017500000001405411654657374016543 0ustar metalmetal

.undelegate()

.undelegate( ) Returns: jQuery

Description: Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.

  • version added: 1.4.2.undelegate()

  • version added: 1.4.2.undelegate( selector, eventType )

    selectorA selector which will be used to filter the event results.

    eventTypeA string containing a JavaScript event type, such as "click" or "keydown"

  • version added: 1.4.2.undelegate( selector, eventType, handler )

    selectorA selector which will be used to filter the event results.

    eventTypeA string containing a JavaScript event type, such as "click" or "keydown"

    handlerA function to execute at the time the event is triggered.

  • version added: 1.4.3.undelegate( selector, events )

    selectorA selector which will be used to filter the event results.

    eventsA map of one or more event types and previously bound functions to unbind from them.

  • version added: 1.6.undelegate( namespace )

    namespaceA string containing a namespace to unbind all events from.

The .undelegate() method is a way of removing event handlers that have been bound using .delegate(). As of jQuery 1.7, the .on() and .off() methods are preferred for attaching and removing event handlers.

Examples:

Example: Can bind and unbind events to the colored button.

<!DOCTYPE html>
<html>
<head>
  <style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>
<div style="display:none;">Click!</div>
<script>
function aClick() {
  $("div").show().fadeOut("slow");
}
$("#bind").click(function () {
  $("body").delegate("#theone", "click", aClick)
    .find("#theone").text("Can Click!");
});
$("#unbind").click(function () {
  $("body").undelegate("#theone", "click", aClick)
    .find("#theone").text("Does nothing...");
});
</script>

</body>
</html>

Demo:

Example: To unbind all delegated events from all paragraphs, write:

$("p").undelegate()

Example: To unbind all delegated click events from all paragraphs, write:

$("p").undelegate( "click" )

Example: To undelegate just one previously bound handler, pass the function in as the third argument:

var foo = function () {
  // code to handle some kind of event
};

// ... now foo will be called when paragraphs are clicked ...
$("body").delegate("p", "click", foo);


// ... foo will no longer be called.
$("body").undelegate("p", "click", foo); 

Example: To unbind all delegated events by their namespace:

var foo = function () {
  // code to handle some kind of event
};

// delegate events under the ".whatever" namespace
$("form").delegate(":button", "click.whatever", foo);

$("form").delegate("input[type='text']", "keypress.whatever", foo); 

// unbind all events delegated under the ".whatever" namespace

$("form").undelegate(".whatever");
jqapi-1.7/docs/unload/index.html0000644000175000017500000000705211654657374015710 0ustar metalmetal

.unload()

.unload( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "unload" JavaScript event.

  • version added: 1.0.unload( handler(eventObject) )

    handler(eventObject)A function to execute when the event is triggered.

  • version added: 1.4.3.unload( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

This method is a shortcut for .bind('unload', handler).

The unload event is sent to the window element when the user navigates away from the page. This could mean one of many things. The user could have clicked on a link to leave the page, or typed in a new URL in the address bar. The forward and back buttons will trigger the event. Closing the browser window will cause the event to be triggered. Even a page reload will first create an unload event.

The exact handling of the unload event has varied from version to version of browsers. For example, some versions of Firefox trigger the event when a link is followed, but not when the window is closed. In practical usage, behavior should be tested on all supported browsers, and contrasted with the proprietary beforeunload event.

Any unload event handler should be bound to the window object:

$(window).unload(function() {
  alert('Handler for .unload() called.');
});

After this code executes, the alert will be displayed whenever the browser leaves the current page. It is not possible to cancel the unload event with .preventDefault(). This event is available so that scripts can perform cleanup when the user leaves the page.

Example:

To display an alert when a page is unloaded:

$(window).unload( function () { alert("Bye now!"); } );
jqapi-1.7/docs/unwrap/index.html0000644000175000017500000000532211654657404015732 0ustar metalmetal

.unwrap()

.unwrap() Returns: jQuery

Description: Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.

  • version added: 1.4.unwrap()

The .unwrap() method removes the element's parent. This is effectively the inverse of the .wrap() method. The matched elements (and their siblings, if any) replace their parents within the DOM structure.

Example:

Wrap/unwrap a div around each of the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { border: 2px solid blue; }
  p { background:yellow; margin:4px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>wrap/unwrap</button>
<p>Hello</p>
<p>cruel</p>
<p>World</p>
<script>
$("button").toggle(function(){
  $("p").wrap("<div></div>");
}, function(){
  $("p").unwrap();
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/val/index.html0000644000175000017500000002452311654657326015207 0ustar metalmetal

.val()

Contents:

.val() Returns: String, Number, Array

Description: Get the current value of the first element in the set of matched elements.

  • version added: 1.0.val()

The .val() method is primarily used to get the values of form elements such as input, select and textarea. In the case of <select multiple="multiple"> elements, the .val() method returns an array containing each selected option.

For selects and checkboxes, you can also use the :selected and :checked selectors to get at values, for example:

$('select.foo option:selected').val();    // get the value from a dropdown select
$('select.foo').val();                    // get the value from a dropdown select even easier
$('input:checkbox:checked').val();        // get the value from a checked checkbox
$('input:radio[name=bar]:checked').val(); // get the value from a set of radio buttons

Note: At present, using .val() on textarea elements strips carriage return characters from the browser-reported value. When this value is sent to the server via XHR however, carriage returns are preserved (or added by browsers which do not include them in the raw value). A workaround for this issue can be achieved using a valHook as follows:

$.valHooks.textarea = {
    get: function( elem ) {
        return elem.value.replace( /\r?\n/g, "\r\n" );
    }
};

Examples:

Example: Get the single value from a single select and an array of values from a multiple select and display their values.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; margin:4px; }
  b { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p></p>

  <select id="single">
    <option>Single</option>
    <option>Single2</option>
  </select>

  <select id="multiple" multiple="multiple">
    <option selected="selected">Multiple</option>
    <option>Multiple2</option>
    <option selected="selected">Multiple3</option>
  </select>

<script>
    function displayVals() {
      var singleValues = $("#single").val();
      var multipleValues = $("#multiple").val() || [];
      $("p").html("<b>Single:</b> " + 
                  singleValues +
                  " <b>Multiple:</b> " + 
                  multipleValues.join(", "));
    }

    $("select").change(displayVals);
    displayVals();

</script>

</body>
</html>

Demo:

Example: Find the value of an input box.

<!DOCTYPE html>
<html>
<head>
  <style>

  p { color:blue; margin:8px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <input type="text" value="some text"/>
  <p></p>
<script>
    $("input").keyup(function () {
      var value = $(this).val();
      $("p").text(value);
    }).keyup();
</script>

</body>
</html>

Demo:

.val( value ) Returns: jQuery

Description: Set the value of each element in the set of matched elements.

  • version added: 1.0.val( value )

    valueA string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.

  • version added: 1.4.val( function(index, value) )

    function(index, value)A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.

This method is typically used to set the values of form fields.

Passing an array of element values allows matching <input type="checkbox">, <input type="radio"> and <option>s inside of n <select multiple="multiple"> to be selected. In the case of <input type="radio">s that are part of a radio group and <select multiple="multiple"> the other elements will be deselected.

The .val() method allows us to set the value by passing in a function. As of jQuery 1.4, the function is passed two arguments, the current element's index and its current value:

$('input:text.items').val(function( index, value ) {
  return value + ' ' + this.className;
});

This example appends the string " items" to the text inputs' values.

Examples:

Example: Set the value of an input box.

<!DOCTYPE html>
<html>
<head>
  <style>
  button { margin:4px; cursor:pointer; }
  input { margin:4px; color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <button>Feed</button>
    <button>the</button>
    <button>Input</button>
  </div>
  <input type="text" value="click a button" />
<script>
    $("button").click(function () {
      var text = $(this).text();
      $("input").val(text);
    });
</script>

</body>
</html>

Demo:

Example: Use the function argument to modify the value of an input box.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Type something and then click or tab out of the input.</p>
  <input type="text" value="type something" />

<script>
  $('input').bind('blur', function() {
    $(this).val(function( i, val ) {
      return val.toUpperCase();
    });
  });
  </script>

</body>
</html>

Demo:

Example: Set a single select, a multiple select, checkboxes and a radio button .

<!DOCTYPE html>
<html>
<head>
  <style>
  body { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <select id="single">
    <option>Single</option>
    <option>Single2</option>
  </select>

  <select id="multiple" multiple="multiple">
    <option selected="selected">Multiple</option>
    <option>Multiple2</option>
    <option selected="selected">Multiple3</option>
  </select><br/>
  <input type="checkbox" name="checkboxname" value="check1"/> check1
  <input type="checkbox" name="checkboxname" value="check2"/> check2
  <input type="radio"  name="r" value="radio1"/> radio1
  <input type="radio"  name="r" value="radio2"/> radio2
<script>
    
    $("#single").val("Single2");
    $("#multiple").val(["Multiple2", "Multiple3"]); 
    $("input").val(["check1","check2", "radio1" ]);

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/visible-selector/index.html0000644000175000017500000000766311654657434017706 0ustar metalmetal

:visible Selector

visible selector

version added: 1.0jQuery(':visible')

Description: Selects all elements that are visible.

Elements can be considered hidden for several reasons:

  • They have a CSS display value of none.
  • They are form elements with type="hidden".
  • Their width and height are explicitly set to 0.
  • An ancestor element is hidden, so the element is not shown on the page.

Elements with visibility: hidden or opacity: 0 are considered to be visible, since they still consume space in the layout. During animations that hide an element, the element is considered to be visible until the end of the animation. During animations to show an element, the element is considered to be visible at the start at the animation.

How :visible is calculated was changed in jQuery 1.3.2. The release notes outline the changes in more detail.

Additional Notes:

  • Because :visible is a jQuery extension and not part of the CSS specification, queries using :visible cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :visible to select elements, first select the elements using a pure CSS selector, then use .filter(":visible").

Example:

Make all visible divs turn yellow on click.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:50px; height:40px; margin:5px; border:3px outset green; float:left; }
  .starthidden { display:none; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Show hidden to see they don't change</button>
  <div></div>
  <div class="starthidden"></div>
  <div></div>

  <div></div>
  <div style="display:none;"></div>
<script>
    $("div:visible").click(function () {
      $(this).css("background", "yellow");
    });
    $("button").click(function () {
      $("div:hidden").show("fast");
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/width/index.html0000644000175000017500000001621611654657334015543 0ustar metalmetal

.width()

Contents:

.width() Returns: Integer

Description: Get the current computed width for the first element in the set of matched elements.

  • version added: 1.0.width()

The difference between .css(width) and .width() is that the latter returns a unit-less pixel value (for example, 400) while the former returns a value with units intact (for example, 400px). The .width() method is recommended when an element's width needs to be used in a mathematical calculation.

This method is also able to find the width of the window and document.

$(window).width();   // returns width of browser viewport
$(document).width(); // returns width of HTML document

Note that .width() will always return the content width, regardless of the value of the CSS box-sizing property.

Example:

Show various widths. Note the values are from the iframe so might be smaller than you expected. The yellow highlight shows the iframe body.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { background:yellow; }
  button { font-size:12px; margin:2px; }
  p { width:150px; border:1px red solid; }
  div { color:red; font-weight:bold;  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="getp">Get Paragraph Width</button>
  <button id="getd">Get Document Width</button>
  <button id="getw">Get Window Width</button>

  <div>&nbsp;</div>
  <p>
    Sample paragraph to test width
  </p>
<script>
    function showWidth(ele, w) {
      $("div").text("The width for the " + ele + 
                    " is " + w + "px.");
    }
    $("#getp").click(function () { 
      showWidth("paragraph", $("p").width()); 
    });
    $("#getd").click(function () { 
      showWidth("document", $(document).width()); 
    });
    $("#getw").click(function () { 
      showWidth("window", $(window).width()); 
    });

</script>

</body>
</html>

Demo:

.width( value ) Returns: jQuery

Description: Set the CSS width of each element in the set of matched elements.

  • version added: 1.0.width( value )

    valueAn integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).

  • version added: 1.4.1.width( function(index, width) )

    function(index, width)A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.

When calling .width('value'), the value can be either a string (number and unit) or a number. If only a number is provided for the value, jQuery assumes a pixel unit. If a string is provided, however, any valid CSS measurement may be used for the width (such as 100px, 50%, or auto). Note that in modern browsers, the CSS width property does not include padding, border, or margin, unless the box-sizing CSS property is used.

If no explicit unit was specified (like 'em' or '%') then "px" is concatenated to the value.

Note that .width('value') sets the width of the box in accordance with the CSS box-sizing property. Changing this property to border-box will cause this function to change the outerWidth of the box instead of the content width.

Example:

To set the width of each div on click to 30px plus a color change.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:70px; height:50px; float:left; margin:5px;
        background:red; cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div>d</div>

  <div>d</div>
  <div>d</div>
  <div>d</div>
<script>

    $("div").one('click', function () {
      $(this).width(30)
             .css({cursor:"auto", "background-color":"blue"});
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/wrap/index.html0000644000175000017500000001641611654657404015375 0ustar metalmetal

.wrap()

.wrap( wrappingElement ) Returns: jQuery

Description: Wrap an HTML structure around each element in the set of matched elements.

  • version added: 1.0.wrap( wrappingElement )

    wrappingElementAn HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements.

  • version added: 1.4.wrap( function(index) )

    function(index)A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.

The .wrap() function can take any string or object that could be passed to the $() factory function to specify a DOM structure. This structure may be nested several levels deep, but should contain only one inmost element. A copy of this structure will be wrapped around each of the elements in the set of matched elements. This method returns the original set of elements for chaining purposes.

Consider the following HTML:

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

Using .wrap(), we can insert an HTML structure around the inner <div> elements like so:

$('.inner').wrap('<div class="new" />');

The new <div> element is created on the fly and added to the DOM. The result is a new <div> wrapped around each matched element:

<div class="container">
  <div class="new">
    <div class="inner">Hello</div>
  </div>
  <div class="new">
    <div class="inner">Goodbye</div>
  </div>
</div>

The second version of this method allows us to instead specify a callback function. This callback function will be called once for every matched element; it should return a DOM element, jQuery object, or HTML snippet in which to wrap the corresponding element. For example:

$('.inner').wrap(function() {
  return '<div class="' + $(this).text() + '" />';
});

This will cause each <div> to have a class corresponding to the text it wraps:

<div class="container">
  <div class="Hello">
    <div class="inner">Hello</div>
  </div>
  <div class="Goodbye">
    <div class="inner">Goodbye</div>
  </div>
</div>

Examples:

Example: Wrap a new div around all of the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border: 2px solid blue; }
  p { background:yellow; margin:4px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
<script>$("p").wrap("<div></div>");</script>

</body>
</html>

Demo:

Example: Wraps a newly created tree of objects around the spans. Notice anything in between the spans gets left out like the <strong> (red text) in this example. Even the white space between spans is left out. Click View Source to see the original html.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border:2px blue solid; margin:2px; padding:2px; }
  p { background:yellow; margin:2px; padding:2px; }
  strong { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>Span Text</span>
  <strong>What about me?</strong>
  <span>Another One</span>
<script>$("span").wrap("<div><div><p><em><b></b></em></p></div></div>");</script>

</body>
</html>

Demo:

Example: Wrap a new div around all of the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border: 2px solid blue; }
  p { background:yellow; margin:4px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
<script>$("p").wrap(document.createElement("div"));</script>

</body>
</html>

Demo:

Example: Wrap a jQuery object double depth div around all of the paragraphs. Notice it doesn't move the object but just clones it to wrap around its target.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border: 2px solid blue; margin:2px; padding:2px; }
  .doublediv { border-color:red; }
  p { background:yellow; margin:4px; font-size:14px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
  <div class="doublediv"><div></div></div>
<script>$("p").wrap($(".doublediv"));</script>

</body>
</html>

Demo:

jqapi-1.7/docs/wrapAll/index.html0000644000175000017500000001376511654657404016032 0ustar metalmetal

.wrapAll()

.wrapAll( wrappingElement ) Returns: jQuery

Description: Wrap an HTML structure around all elements in the set of matched elements.

  • version added: 1.2.wrapAll( wrappingElement )

    wrappingElementAn HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements.

The .wrapAll() function can take any string or object that could be passed to the $() function to specify a DOM structure. This structure may be nested several levels deep, but should contain only one inmost element. The structure will be wrapped around all of the elements in the set of matched elements, as a single group.

Consider the following HTML:

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

Using .wrapAll(), we can insert an HTML structure around the inner <div> elements like so:

$('.inner').wrapAll('<div class="new" />');

The new <div> element is created on the fly and added to the DOM. The result is a new <div> wrapped around all matched elements:

<div class="container">
  <div class="new">
    <div class="inner">Hello</div>
    <div class="inner">Goodbye</div>
  </div>
</div>

Examples:

Example: Wrap a new div around all of the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border: 2px solid blue; }
  p { background:yellow; margin:4px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
<script>$("p").wrapAll("<div></div>");</script>

</body>
</html>

Demo:

Example: Wraps a newly created tree of objects around the spans. Notice anything in between the spans gets left out like the <strong> (red text) in this example. Even the white space between spans is left out. Click View Source to see the original html.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border:2px blue solid; margin:2px; padding:2px; }
  p { background:yellow; margin:2px; padding:2px; }
  strong { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>Span Text</span>
  <strong>What about me?</strong>
  <span>Another One</span>
<script>$("span").wrapAll("<div><div><p><em><b></b></em></p></div></div>");</script>

</body>
</html>

Demo:

Example: Wrap a new div around all of the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border: 2px solid blue; }
  p { background:yellow; margin:4px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
<script>$("p").wrapAll(document.createElement("div"));</script>

</body>
</html>

Demo:

Example: Wrap a jQuery object double depth div around all of the paragraphs. Notice it doesn't move the object but just clones it to wrap around its target.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border: 2px solid blue; margin:2px; padding:2px; }
  .doublediv { border-color:red; }
  p { background:yellow; margin:4px; font-size:14px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
  <div class="doublediv"><div></div></div>
<script>$("p").wrapAll($(".doublediv"));</script>

</body>
</html>

Demo:

jqapi-1.7/docs/wrapInner/index.html0000644000175000017500000001624511654657406016373 0ustar metalmetal

.wrapInner()

.wrapInner( wrappingElement ) Returns: jQuery

Description: Wrap an HTML structure around the content of each element in the set of matched elements.

  • version added: 1.2.wrapInner( wrappingElement )

    wrappingElementAn HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.

  • version added: 1.4.wrapInner( function(index) )

    function(index)A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.

The .wrapInner() function can take any string or object that could be passed to the $() factory function to specify a DOM structure. This structure may be nested several levels deep, but should contain only one inmost element. The structure will be wrapped around the content of each of the elements in the set of matched elements.

Consider the following HTML:

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

Using .wrapInner(), we can insert an HTML structure around the content of each inner <div> elements like so:

$('.inner').wrapInner('<div class="new" />');

The new <div> element is created on the fly and added to the DOM. The result is a new <div> wrapped around the content of each matched element:

<div class="container">
  <div class="inner">
    <div class="new">Hello</div>
  </div>
  <div class="inner">
    <div class="new">Goodbye</div>
  </div>
</div>

The second version of this method allows us to instead specify a callback function. This callback function will be called once for every matched element; it should return a DOM element, jQuery object, or HTML snippet in which to wrap the content of the corresponding element. For example:

$('.inner').wrapInner(function() {
  return '<div class="' + this.nodeValue + '" />';
});

This will cause each <div> to have a class corresponding to the text it wraps:

<div class="container">
  <div class="inner">
    <div class="Hello">Hello</div>
  </div>
  <div class="inner">
    <div class="Goodbye">Goodbye</div>
  </div>
</div>

Note: When passing a selector string to the .wrapInner() function, the expected input is well formed HTML with correctly closed tags. Examples of valid input include:

$(elem).wrapInner("<div class='test' />");
$(elem).wrapInner("<div class='test'></div>");
$(elem).wrapInner("<div class=\"test\"></div>");

Examples:

Example: Selects all paragraphs and wraps a bold tag around each of its contents.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:#bbf; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>

  <p>cruel</p>
  <p>World</p>
<script>$("p").wrapInner("<b></b>");</script>

</body>
</html>

Demo:

Example: Wraps a newly created tree of objects around the inside of the body.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { border:2px green solid; margin:2px; padding:2px; }
  p { background:yellow; margin:2px; padding:2px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Plain old text, or is it?
<script>$("body").wrapInner("<div><div><p><em><b></b></em></p></div></div>");</script>

</body>
</html>

Demo:

Example: Selects all paragraphs and wraps a bold tag around each of its contents.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:#9f9; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>

  <p>cruel</p>
  <p>World</p>
<script>$("p").wrapInner(document.createElement("b"));</script>

</body>
</html>

Demo:

Example: Selects all paragraphs and wraps a jQuery object around each of its contents.

<!DOCTYPE html>
<html>
<head>
  <style>

  p { background:#9f9; }
  .red { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
<script>$("p").wrapInner($("<span class='red'></span>"));</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery/index.html0000644000175000017500000004224611654657326015706 0ustar metalmetal

jQuery()

Contents:

jQuery( selector [, context] ) Returns: jQuery

Description: Accepts a string containing a CSS selector which is then used to match a set of elements.

  • version added: 1.0jQuery( selector [, context] )

    selectorA string containing a selector expression

    contextA DOM Element, Document, or jQuery to use as context

  • version added: 1.0jQuery( element )

    elementA DOM element to wrap in a jQuery object.

  • version added: 1.0jQuery( object )

    objectA plain object to wrap in a jQuery object.

  • version added: 1.0jQuery( elementArray )

    elementArrayAn array containing a set of DOM elements to wrap in a jQuery object.

  • version added: 1.0jQuery( jQuery object )

    jQuery objectAn existing jQuery object to clone.

  • version added: 1.4jQuery()

In the first formulation listed above, jQuery() — which can also be written as $() — searches through the DOM for any elements that match the provided selector and creates a new jQuery object that references these elements:

$('div.foo');

Selector Context

By default, selectors perform their searches within the DOM starting at the document root. However, an alternate context can be given for the search by using the optional second parameter to the $() function. For example, to do a search within an event handler, the search can be restricted like so:

$('div.foo').click(function() {
  $('span', this).addClass('bar');
});

When the search for the span selector is restricted to the context of this, only spans within the clicked element will get the additional class.

Internally, selector context is implemented with the .find() method, so $('span', this) is equivalent to $(this).find('span').

Using DOM elements

The second and third formulations of this function create a jQuery object using one or more DOM elements that were already selected in some other way. A common use of this facility is to call jQuery methods on an element that has been passed to a callback function through the keyword this:

$('div.foo').click(function() {
  $(this).slideUp();
});

This example causes elements to be hidden with a sliding animation when clicked. Because the handler receives the clicked item in the this keyword as a bare DOM element, the element must be passed to the $() function before applying jQuery methods to it.

XML data returned from an Ajax call can be passed to the $() function so individual elements of the XML structure can be retrieved using .find() and other DOM traversal methods.

$.post('url.xml', function(data) {
  var $child = $(data).find('child');
})

Cloning jQuery Objects

When a jQuery object is passed to the $() function, a clone of the object is created. This new jQuery object references the same DOM elements as the initial one.

Returning an Empty Set

As of jQuery 1.4, calling the jQuery() method with no arguments returns an empty jQuery set (with a .length property of 0). In previous versions of jQuery, this would return a set containing the document node.

Working With Plain Objects

At present, the only operations supported on plain JavaScript objects wrapped in jQuery are: .data(),.prop(),.bind(), .unbind(),.trigger() and .triggerHandler(). The use of .data() (or any method requiring .data()) on a plain object will result in a new property on the object called jQuery{randomNumber} (eg. jQuery123456789).

// define a plain object
var foo = {foo:'bar', hello:'world'};

// wrap this with jQuery
var $foo = $(foo);

// test accessing property values
var test1 = $foo.prop('foo'); // bar

// test setting property values
$foo.prop('foo', 'foobar');
var test2 = $foo.prop('foo'); // foobar

// test using .data() as summarized above
$foo.data('keyName', 'someValue');
console.log($foo); // will now contain a jQuery{randomNumber} property

// test binding an event name and triggering
$foo.bind('eventName', function (){
        console.log('eventName was called');
});

$foo.trigger('eventName'); // logs 'eventName was called'

Should .trigger('eventName') be used, it will search for an 'eventName' property on the object and attempt to execute it after any attached jQuery handlers are executed. It does not check whether the property is a function or not. To avoid this behavior, .triggerHandler('eventName') should be used instead.

$foo.triggerHandler('eventName'); // also logs 'eventName was called'

Examples:

Example: Find all p elements that are children of a div element and apply a border to them.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>one</p> <div><p>two</p></div> <p>three</p>
<script>
  $("div > p").css("border", "1px solid gray");
</script>

</body>
</html>

Demo:

Example: Find all inputs of type radio within the first form in the document.

$("input:radio", document.forms[0]);

Example: Find all div elements within an XML document from an Ajax response.

$("div", xml.responseXML);

Example: Set the background color of the page to black.

$(document.body).css( "background", "black" );

Example: Hide all the input elements within a form.

$(myForm.elements).hide()

jQuery( html [, ownerDocument] ) Returns: jQuery

Description: Creates DOM elements on the fly from the provided string of raw HTML.

  • version added: 1.0jQuery( html [, ownerDocument] )

    htmlA string of HTML to create on the fly. Note that this parses HTML, not XML.

    ownerDocumentA document in which the new elements will be created

  • version added: 1.4jQuery( html, props )

    htmlA string defining a single, standalone, HTML element (e.g. <div/> or <div></div>).

    propsAn map of attributes, events, and methods to call on the newly-created element.

Creating New Elements

If a string is passed as the parameter to $(), jQuery examines the string to see if it looks like HTML (i.e., it has <tag ... > somewhere within the string). If not, the string is interpreted as a selector expression, as explained above. But if the string appears to be an HTML snippet, jQuery attempts to create new DOM elements as described by the HTML. Then a jQuery object is created and returned that refers to these elements. You can perform any of the usual jQuery methods on this object:

$('<p id="test">My <em>new</em> text</p>').appendTo('body');

If the HTML is more complex than a single tag without attributes, as it is in the above example, the actual creation of the elements is handled by the browser's innerHTML mechanism. In most cases, jQuery creates a new <div> element and sets the innerHTML property of the element to the HTML snippet that was passed in. When the parameter has a single tag, such as $('<img />') or $('<a></a>'), jQuery creates the element using the native JavaScript createElement() function.

When passing in complex HTML, some browsers may not generate a DOM that exactly replicates the HTML source provided. As mentioned, we use the browser's .innerHTML property to parse the passed HTML and insert it into the current document. During this process, some browsers filter out certain elements such as <html>, <title>, or <head> elements. As a result, the elements inserted may not be representative of the original string passed.

Filtering isn't however just limited to these tags. For example, Internet Explorer prior to version 8 will also convert all href properties on links to absolute URLs, and Internet Explorer prior to version 9 will not correctly handle HTML5 elements without the addition of a separate compatibility layer.

To ensure cross-platform compatibility, the snippet must be well-formed. Tags that can contain other elements should be paired with a closing tag:

$('<a href="http://jquery.com"></a>');

Alternatively, jQuery allows XML-like tag syntax (with or without a space before the slash):

$('<a/>');

Tags that cannot contain elements may be quick-closed or not:

$('<img />');
$('<input>');

When passing HTML to jQuery(), please also note that text nodes are not treated as DOM elements. With the exception of a few methods (such as .content()), they are generally otherwise ignored or removed. E.g:

var el = $('1<br/>2<br/>3'); // returns [<br>, "2", <br>] 
el  = $('1<br/>2<br/>3 >'); // returns [<br>, "2", <br>, "3 &gt;"]

This behaviour is expected.

As of jQuery 1.4, the second argument to jQuery() can accept a map consisting of a superset of the properties that can be passed to the .attr() method. Furthermore, any event type can be passed in, and the following jQuery methods can be called: val, css, html, text, data, width, height, or offset. The name "class" must be quoted in the map since it is a JavaScript reserved word, and "className" cannot be used since it is not the correct attribute name.

Note: Internet Explorer will not allow you to create an input or button element and change its type; you must specify the type using '<input type="checkbox" />' for example. A demonstration of this can be seen below:

Unsupported in IE:

$('<input />', {
    type: 'text',
    name: 'test'
}).appendTo("body");

Supported workaround:

$('<input type="text" />').attr({
    name: 'test'
}).appendTo("body");

Examples:

Example: Create a div element (and all of its contents) dynamically and append it to the body element. Internally, an element is created and its innerHTML property set to the given markup.

$("<div><p>Hello</p></div>").appendTo("body")

Example: Create some DOM elements.

$("<div/>", {
  "class": "test",
  text: "Click me!",
  click: function(){
    $(this).toggleClass("test");
  }
}).appendTo("body");

jQuery( callback ) Returns: jQuery

Description: Binds a function to be executed when the DOM has finished loading.

  • version added: 1.0jQuery( callback )

    callbackThe function to execute when the DOM is ready.

This function behaves just like $(document).ready(), in that it should be used to wrap other $() operations on your page that depend on the DOM being ready. While this function is, technically, chainable, there really isn't much use for chaining against it.

Examples:

Example: Execute the function when the DOM is ready to be used.

$(function(){
   // Document is ready
 });

Example: Use both the shortcut for $(document).ready() and the argument to write failsafe jQuery code using the $ alias, without relying on the global alias.

jQuery(function($) {
    // Your code using failsafe $ alias here...
  });
jqapi-1.7/docs/jquery-2/index.html0000644000175000017500000000465111654657376016110 0ustar metalmetal

.jquery

jquery Returns: String

Description: A string containing the jQuery version number.

  • version added: 1.0jquery

The .jquery property is assigned to the jQuery prototype, commonly referred to by its alias $.fn. It is a string containing the version number of jQuery, such as "1.5.0" or "1.4.4".

Examples:

Example: Determine if an object is a jQuery object


var a = { what: "A regular JS object" },
    b = $('body');
     
if ( a.jquery ) { // falsy, since it's undefined
    alert(' a is a jQuery object! ');    
}

if ( b.jquery ) { // truthy, since it's a string
    alert(' b is a jQuery object! ');
}

Example: Get the current version of jQuery running on the page


alert( 'You are running jQuery version: ' + $.fn.jquery );
jqapi-1.7/docs/jQuery.ajax/index.html0000644000175000017500000011576011654657312016625 0ustar metalmetal

jQuery.ajax()

jQuery.ajax( url [, settings] ) Returns: jqXHR

Description: Perform an asynchronous HTTP (Ajax) request.

  • version added: 1.5jQuery.ajax( url [, settings] )

    urlA string containing the URL to which the request is sent.

    settingsA set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.

  • version added: 1.0jQuery.ajax( settings )

    settingsA set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().

    acceptsMap
    Default: depends on DataType

    The content type sent in the request header that tells the server what kind of response it will accept in return. If the accepts setting needs modification, it is recommended to do so once in the $.ajaxSetup() method

    asyncBoolean
    Default: true

    By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: "jsonp" requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.

    beforeSend(jqXHR, settings)Function

    A pre-request callback function that can be used to modify the jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object before it is sent. Use this to set custom headers, etc. The jqXHR and settings maps are passed as arguments. This is an Ajax Event. Returning false in the beforeSend function will cancel the request. As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.

    cacheBoolean
    Default: true, false for dataType 'script' and 'jsonp'

    If set to false, it will force requested pages not to be cached by the browser. Setting cache to false also appends a query string parameter, "_=[TIMESTAMP]", to the URL.

    complete(jqXHR, textStatus)Function, Array

    A function to be called when the request finishes (after success and error callbacks are executed). The function gets passed two arguments: The jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object and a string categorizing the status of the request ("success", "notmodified", "error", "timeout", "abort", or "parsererror"). As of jQuery 1.5, the complete setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.

    contents(added 1.5)Map

    A map of string/regular-expression pairs that determine how jQuery will parse the response, given its content type.

    contentTypeString
    Default: 'application/x-www-form-urlencoded'

    When sending data to the server, use this content-type. Default is "application/x-www-form-urlencoded", which is fine for most cases. If you explicitly pass in a content-type to $.ajax() then it'll always be sent to the server (even if no data is sent). Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.

    contextObject

    This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax). For example specifying a DOM element as the context will make that the context for the complete callback of a request, like so:

    $.ajax({
      url: "test.html",
      context: document.body,
      success: function(){
        $(this).addClass("done");
      }
    });
    converters(added 1.5)Map
    Default: {"* text": window.String, "text html": true, "text json": jQuery.parseJSON, "text xml": jQuery.parseXML}

    A map of dataType-to-dataType converters. Each converter's value is a function that returns the transformed value of the response

    crossDomain(added 1.5)
    Default: false for same-domain requests, true for cross-domain requests

    If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain

    dataObject, String

    Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).

    dataFilter(data, type)Function

    A function to be used to handle the raw response data of XMLHttpRequest.This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the 'dataType' parameter.

    dataTypeString
    Default: Intelligent Guess (xml, json, script, or html)

    The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are:

    • "xml": Returns a XML document that can be processed via jQuery.
    • "html": Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
    • "script": Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true. Note: This will turn POSTs into GETs for remote-domain requests.
    • "json": Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
    • "jsonp": Loads in a JSON block using JSONP. Adds an extra "?callback=?" to the end of your URL to specify the callback. Disables caching by appending a query string parameter, "_=[TIMESTAMP]", to the URL unless the cache option is set to true.
    • "text": A plain text string.
    • multiple, space-separated values: As of jQuery 1.5, jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example, if you want a text response to be treated as XML, use "text xml" for the dataType. You can also make a JSONP request, have it received as text, and interpreted by jQuery as XML: "jsonp text xml." Similarly, a shorthand string such as "jsonp xml" will first attempt to convert from jsonp to xml, and, failing that, convert from jsonp to text, and then from text to xml.
    error(jqXHR, textStatus, errorThrown)Function

    A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and JSONP requests. This is an Ajax Event.

    globalBoolean
    Default: true

    Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.

    headers(added 1.5)Map
    Default: {}

    A map of additional header key/value pairs to send along with the request. This setting is set before the beforeSend function is called; therefore, any values in the headers setting can be overwritten from within the beforeSend function.

    ifModifiedBoolean
    Default: false

    Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. In jQuery 1.4 this technique also checks the 'etag' specified by the server to catch unmodified data.

    isLocal(added 1.5.1)Boolean
    Default: depends on current location protocol

    Allow the current environment to be recognized as "local," (e.g. the filesystem), even if jQuery does not recognize it as such by default. The following protocols are currently recognized as local: file, *-extension, and widget. If the isLocal setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.

    jsonpString

    Override the callback function name in a jsonp request. This value will be used instead of 'callback' in the 'callback=?' part of the query string in the url. So {jsonp:'onJSONPLoad'} would result in 'onJSONPLoad=?' passed to the server. As of jQuery 1.5, setting the jsonp option to false prevents jQuery from adding the "?callback" string to the URL or attempting to use "=?" for transformation. In this case, you should also explicitly set the jsonpCallback setting. For example, { jsonp: false, jsonpCallback: "callbackName" }

    jsonpCallbackString, Function

    Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it'll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.

    mimeType(added 1.5.1)String

    A mime type to override the XHR mime type.

    passwordString

    A password to be used in response to an HTTP access authentication request.

    processDataBoolean
    Default: true

    By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type "application/x-www-form-urlencoded". If you want to send a DOMDocument, or other non-processed data, set this option to false.

    scriptCharsetString

    Only for requests with "jsonp" or "script" dataType and "GET" type. Forces the request to be interpreted as a certain charset. Only needed for charset differences between the remote and local content.

    statusCode(added 1.5)Map
    Default: {}

    A map of numeric HTTP codes and functions to be called when the response has the corresponding code. For example, the following will alert when the response status is a 404:

    $.ajax({
      statusCode: {
        404: function() {
          alert('page not found');
        }
      }
    });

    If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error, they take the same parameters as the error callback.

    success(data, textStatus, jqXHR)Function, Array

    A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.

    timeoutNumber

    Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.

    traditionalBoolean

    Set this to true if you wish to use the traditional style of param serialization.

    typeString
    Default: 'GET'

    The type of request to make ("POST" or "GET"), default is "GET". Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.

    urlString
    Default: The current page

    A string containing the URL to which the request is sent.

    usernameString

    A username to be used in response to an HTTP access authentication request.

    xhrFunction
    Default: ActiveXObject when available (IE), the XMLHttpRequest otherwise

    Callback for creating the XMLHttpRequest object. Defaults to the ActiveXObject when available (IE), the XMLHttpRequest otherwise. Override to provide your own implementation for XMLHttpRequest or enhancements to the factory.

    xhrFields(added 1.5.1)Map

    A map of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to set withCredentials to true for cross-domain requests if needed.

    $.ajax({
       url: a_cross_domain_url,
       xhrFields: {
          withCredentials: true
       }
    });

    In jQuery 1.5, the withCredentials property was not propagated to the native XHR and thus CORS requests requiring it would ignore this flag. For this reason, we recommend using jQuery 1.5.1+ should you require the use of it.

The $.ajax() function underlies all Ajax requests sent by jQuery. It is often unnecessary to directly call this function, as several higher-level alternatives like $.get() and .load() are available and are easier to use. If less common options are required, though, $.ajax() can be used more flexibly.

At its simplest, the $.ajax() function can be called with no arguments:

$.ajax();

Note: Default settings can be set globally by using the $.ajaxSetup() function.

This example, using no options, loads the contents of the current page, but does nothing with the result. To use the result, we can implement one of the callback functions.

The jqXHR Object

The jQuery XMLHttpRequest (jqXHR) object returned by $.ajax() as of jQuery 1.5 is a superset of the browser's native XMLHttpRequest object. For example, it contains responseText and responseXML properties, as well as a getResponseHeader() method. When the transport mechanism is something other than XMLHttpRequest (for example, a script tag for a JSONP request) the jqXHR object simulates native XHR functionality where possible.

As of jQuery 1.5.1, the jqXHR object also contains the overrideMimeType() method (it was available in jQuery 1.4.x, as well, but was temporarily removed in jQuery 1.5). The .overrideMimeType() method may be used in the beforeSend() callback function, for example, to modify the response content-type header:

$.ajax({
  url: 'http://fiddle.jshell.net/favicon.png',
  beforeSend: function( xhr ) {
    xhr.overrideMimeType( 'text/plain; charset=x-user-defined' );
  },
  success: function( data ) {
    if (console && console.log){
      console.log( 'Sample of data:', data.slice(0,100) );
    }
  }
});

The jqXHR objects returned by $.ajax() as of jQuery 1.5 implement the Promise interface, giving them all the properties, methods, and behavior of a Promise (see Deferred object for more information). For convenience and consistency with the callback names used by $.ajax(), jqXHR also provides .error(), .success(), and .complete() methods. These methods take a function argument that is called when the $.ajax() request terminates, and the function receives the same arguments as the correspondingly-named $.ajax() callback. This allows you to assign multiple callbacks on a single request, and even to assign callbacks after the request may have completed. (If the request is already complete, the callback is fired immediately.)

Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks will be deprecated in jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.ajax( "example.php" )
    .done(function() { alert("success"); })
    .fail(function() { alert("error"); })
    .always(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.always(function() { alert("second complete"); });

For backward compatibility with XMLHttpRequest, a jqXHR object will expose the following properties and methods:

  • readyState
  • status
  • statusText
  • responseXML and/or responseText when the underlying request responded with xml and/or text, respectively
  • setRequestHeader(name, value) which departs from the standard by replacing the old value with the new one rather than concatenating the new value to the old one
  • getAllResponseHeaders()
  • getResponseHeader()
  • abort()

No onreadystatechange mechanism is provided, however, since success, error, complete and statusCode cover all conceivable requirements.

Callback Function Queues

The beforeSend, error, dataFilter, success and complete options all accept callback functions that are invoked at the appropriate times.

As of jQuery 1.5, the error (fail), success (done), and complete (always, as of jQuery 1.6) callback hooks are first-in, first-out managed queues. This means you can assign more than one callback for each hook. See Deferred object methods, which are implemented internally for these $.ajax() callback hooks.

The this reference within all callbacks is the object in the context option passed to $.ajax in the settings; if context is not specified, this is a reference to the Ajax settings themselves.

Some types of Ajax requests, such as JSONP and cross-domain GET requests, do not use XHR; in those cases the XMLHttpRequest and textStatus parameters passed to the callback are undefined.

Here are the callback hooks provided by $.ajax():

  1. beforeSend callback is invoked; it receives the jqXHR object and the settings map as parameters.
  2. error callbacks are invoked, in the order they are registered, if the request fails. They receive the jqXHR, a string indicating the error type, and an exception object if applicable. Some built-in errors will provide a string as the exception object: "abort", "timeout", "No Transport".
  3. dataFilter callback is invoked immediately upon successful receipt of response data. It receives the returned data and the value of dataType, and must return the (possibly altered) data to pass on to success.
  4. success callbacks are then invoked, in the order they are registered, if the request succeeds. They receive the returned data, a string containing the success code, and the jqXHR object.
  5. complete callbacks fire, in the order they are registered, when the request finishes, whether in failure or success. They receive the jqXHR object, as well as a string containing the success or error code.

For example, to make use of the returned HTML, we can implement a success handler:

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  }
});

Data Types

The $.ajax() function relies on the server to provide information about the retrieved data. If the server reports the return data as XML, the result can be traversed using normal XML methods or jQuery's selectors. If another type is detected, such as HTML in the example above, the data is treated as text.

Different data handling can be achieved by using the dataType option. Besides plain xml, the dataType can be html, json, jsonp, script, or text.

The text and xml types return the data with no processing. The data is simply passed on to the success handler, either through the responseText or responseXML property of the jqXHR object, respectively.

Note: We must ensure that the MIME type reported by the web server matches our choice of dataType. In particular, XML must be declared by the server as text/xml or application/xml for consistent results.

If html is specified, any embedded JavaScript inside the retrieved data is executed before the HTML is returned as a string. Similarly, script will execute the JavaScript that is pulled back from the server, then return nothing.

The json type parses the fetched data file as a JavaScript object and returns the constructed object as the result data. To do so, it uses jQuery.parseJSON() when the browser supports it; otherwise it uses a Function constructor. Malformed JSON data will throw a parse error (see json.org for more information). JSON data is convenient for communicating structured data in a way that is concise and easy for JavaScript to parse. If the fetched data file exists on a remote server, specify the jsonp type instead.

The jsonp type appends a query string parameter of callback=? to the URL. The server should prepend the JSON data with the callback name to form a valid JSONP response. We can specify a parameter name other than callback with the jsonp option to $.ajax().

Note: JSONP is an extension of the JSON format, requiring some server-side code to detect and handle the query string parameter. More information about it can be found in the original post detailing its use.

When data is retrieved from remote servers (which is only possible using the script or jsonp data types), the error callbacks and global events will never be fired.

Sending Data to the Server

By default, Ajax requests are sent using the GET HTTP method. If the POST method is required, the method can be specified by setting a value for the type option. This option affects how the contents of the data option are sent to the server. POST data will always be transmitted to the server using UTF-8 charset, per the W3C XMLHTTPRequest standard.

The data option can contain either a query string of the form key1=value1&key2=value2, or a map of the form {key1: 'value1', key2: 'value2'}. If the latter form is used, the data is converted into a query string using jQuery.param() before it is sent. This processing can be circumvented by setting processData to false. The processing might be undesirable if you wish to send an XML object to the server; in this case, change the contentType option from application/x-www-form-urlencoded to a more appropriate MIME type.

Advanced Options

The global option prevents handlers registered using .ajaxSend(), .ajaxError(), and similar methods from firing when this request would trigger them. This can be useful to, for example, suppress a loading indicator that was implemented with .ajaxSend() if the requests are frequent and brief. With cross-domain script and JSONP requests, the global option is automatically set to false. See the descriptions of these methods below for more details. See the descriptions of these methods below for more details.

If the server performs HTTP authentication before providing a response, the user name and password pair can be sent via the username and password options.

Ajax requests are time-limited, so errors can be caught and handled to provide a better user experience. Request timeouts are usually either left at their default or set as a global default using $.ajaxSetup() rather than being overridden for specific requests with the timeout option.

By default, requests are always issued, but the browser may serve results out of its cache. To disallow use of the cached results, set cache to false. To cause the request to report failure if the asset has not been modified since the last request, set ifModified to true.

The scriptCharset allows the character set to be explicitly specified for requests that use a <script> tag (that is, a type of script or jsonp). This is useful if the script and host page have differing character sets.

The first letter in Ajax stands for "asynchronous," meaning that the operation occurs in parallel and the order of completion is not guaranteed. The async option to $.ajax() defaults to true, indicating that code execution can continue after the request is made. Setting this option to false (and thus making the call no longer asynchronous) is strongly discouraged, as it can cause the browser to become unresponsive.

The $.ajax() function returns the XMLHttpRequest object that it creates. Normally jQuery handles the creation of this object internally, but a custom function for manufacturing one can be specified using the xhr option. The returned object can generally be discarded, but does provide a lower-level interface for observing and manipulating the request. In particular, calling .abort() on the object will halt the request before it completes.

At present, due to a bug in Firefox where .getAllResponseHeaders() returns the empty string although .getResponseHeader('Content-Type') returns a non-empty string, automatically decoding JSON CORS responses in Firefox with jQuery is not supported.

A workaround to this is possible by overriding jQuery.ajaxSettings.xhr as follows:

var _super = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
    var xhr = _super(),
        getAllResponseHeaders = xhr.getAllResponseHeaders;

    xhr.getAllResponseHeaders = function () {
        if ( getAllResponseHeaders() ) {
            return getAllResponseHeaders();
        }
        var allHeaders = "";
        $( ["Cache-Control", "Content-Language", "Content-Type",
                "Expires", "Last-Modified", "Pragma"] ).each(function (i, header_name) {

            if ( xhr.getResponseHeader( header_name ) ) {
                allHeaders += header_name + ": " + xhr.getResponseHeader( header_name ) + "\n";
            }
            return allHeaders;
        });
    };
    return xhr;
};

Extending Ajax

As of jQuery 1.5, jQuery's Ajax implementation includes prefilters, converters, and transports that allow you to extend Ajax with a great deal of flexibility. For more information about these advanced features, see the Extending Ajax page.

Additional Notes:

  • Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.
  • Script and JSONP requests are not subject to the same origin policy restrictions.

Examples:

Example: Save some data to the server and notify the user once it's complete.

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston",
}).done(function( msg ) {
  alert( "Data Saved: " + msg );
});

Example: Retrieve the latest version of an HTML page.

$.ajax({
  url: "test.html",
  cache: false,
  success: function(html){
    $("#results").append(html);
  }
});

Example: Send an xml document as data to the server. By setting the processData option to false, the automatic conversion of data to strings is prevented.

var xmlDocument = [create xml document];
var xmlRequest = $.ajax({
  url: "page.php",
  processData: false,
  data: xmlDocument
});

xmlRequest.done(handleResponse);

Example: Send an id as data to the server, save some data to the server, and notify the user once it's complete. If the request fails, alert the user.

var menuId = $("ul.nav").first().attr("id");
var request = $.ajax({
  url: "script.php",
  type: "POST",
  data: {id : menuId},
  dataType: "html"
});

request.done(function(msg) {
  $("#log").html( msg );
});

request.fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

Example: Load and execute a JavaScript file.

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"
});
jqapi-1.7/docs/jQuery.ajaxPrefilter/index.html0000644000175000017500000001032211654657314020470 0ustar metalmetal

jQuery.ajaxPrefilter()

jQuery.ajaxPrefilter( [dataTypes] , handler(options, originalOptions, jqXHR) ) Returns: undefined

Description: Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().

  • version added: 1.5jQuery.ajaxPrefilter( [dataTypes], handler(options, originalOptions, jqXHR) )

    dataTypesAn optional string containing one or more space-separated dataTypes

    handler(options, originalOptions, jqXHR)A handler to set default values for future Ajax requests.

A typical prefilter registration using $.ajaxPrefilter() looks like this:

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
  // Modify options, control originalOptions, store jqXHR, etc
});

where:

  • options are the request options
  • originalOptions are the options as provided to the ajax method, unmodified and, thus, without defaults from ajaxSettings
  • jqXHR is the jqXHR object of the request

Prefilters are a perfect fit when custom options need to be handled. Given the following code, for example, a call to $.ajax() would automatically abort a request to the same URL if the custom abortOnRetry option is set to true:

var currentRequests = {};

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
  if ( options.abortOnRetry ) {
    if ( currentRequests[ options.url ] ) {
      currentRequests[ options.url ].abort();
    }
    currentRequests[ options.url ] = jqXHR;
  }
});

Prefilters can also be used to modify existing options. For example, the following proxies cross-domain requests through http://mydomain.net/proxy/:

$.ajaxPrefilter( function( options ) {
  if ( options.crossDomain ) {
    options.url = "http://mydomain.net/proxy/" + encodeURIComponent( options.url );
    options.crossDomain = false;
  }
});

If the optional dataTypes argument is supplied, the prefilter will be only be applied to requests with the indicated dataTypes. For example, the following only applies the given prefilter to JSON and script requests:

$.ajaxPrefilter( "json script", function( options, originalOptions, jqXHR ) {
  // Modify options, control originalOptions, store jqXHR, etc
});

The $.ajaxPrefilter() method can also redirect a request to another dataType by returning that dataType. For example, the following sets a request as "script" if the URL has some specific properties defined in a custom isActuallyScript() function:

$.ajaxPrefilter(function( options ) {
  if ( isActuallyScript( options.url ) ) {
    return "script";
  }
});

This would ensure not only that the request is considered "script" but also that all the prefilters specifically attached to the script dataType would be applied to it.

jqapi-1.7/docs/jQuery.ajaxSetup/index.html0000644000175000017500000000606511654657314017645 0ustar metalmetal

jQuery.ajaxSetup()

jQuery.ajaxSetup( options )

Description: Set default values for future Ajax requests.

  • version added: 1.1jQuery.ajaxSetup( options )

    optionsA set of key/value pairs that configure the default Ajax request. All options are optional.

For details on the settings available for $.ajaxSetup(), see $.ajax().

All subsequent Ajax calls using any function will use the new settings, unless overridden by the individual calls, until the next invocation of $.ajaxSetup().

For example, the following sets a default for the url parameter before pinging the server repeatedly:

$.ajaxSetup({
  url: 'ping.php'
});

Now each time an Ajax request is made, the "ping.php" URL will be used automatically:

$.ajax({
  // url not set here; uses ping.php
  data: {'name': 'Dan'}
});

Note: Global callback functions should be set with their respective global Ajax event handler methods—.ajaxStart(), .ajaxStop(), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend()—rather than within the options object for $.ajaxSetup().

Example:

Sets the defaults for Ajax requests to the url "/xmlhttp/", disables global handlers and uses POST instead of GET. The following Ajax requests then sends some data without having to set anything else.

$.ajaxSetup({
   url: "/xmlhttp/",
   global: false,
   type: "POST"

 });
 $.ajax({ data: myData });
jqapi-1.7/docs/jQuery.boxModel/index.html0000644000175000017500000000437611654657446017463 0ustar metalmetal

jQuery.boxModel

jQuery.boxModel Returns: Boolean

Description: Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.

  • version added: 1.0jQuery.boxModel

Examples:

Example: Returns the box model for the iframe.

<!DOCTYPE html>
<html>
<head>
  <style>

  p { color:blue; margin:20px; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
  </p>
<script>

    $("p").html("The box model for this iframe is: <span>" +
                jQuery.boxModel + "</span>");
</script>

</body>
</html>

Demo:

Example: Returns false if the page is in Quirks Mode in Internet Explorer

$.boxModel

Result:

false
jqapi-1.7/docs/jQuery.browser/index.html0000644000175000017500000001705211654657410017357 0ustar metalmetal

jQuery.browser

Contents:

jQuery.browser Returns: Map

Description: Contains flags for the useragent, read from navigator.userAgent. We recommend against using this property; please try to use feature detection instead (see jQuery.support). jQuery.browser may be moved to a plugin in a future release of jQuery.

  • version added: 1.0jQuery.browser

The $.browser property provides information about the web browser that is accessing the page, as reported by the browser itself. It contains flags for each of the four most prevalent browser classes (Internet Explorer, Mozilla, Webkit, and Opera) as well as version information.

Available flags are:

  • webkit (as of jQuery 1.4)
  • safari (deprecated)
  • opera
  • msie
  • mozilla

This property is available immediately. It is therefore safe to use it to determine whether or not to call $(document).ready(). The $.browser property is deprecated in jQuery 1.3, and its functionality may be moved to a team-supported plugin in a future release of jQuery.

Because $.browser uses navigator.userAgent to determine the platform, it is vulnerable to spoofing by the user or misrepresentation by the browser itself. It is always best to avoid browser-specific code entirely where possible. The $.support property is available for detection of support for particular features rather than relying on $.browser.

Examples:

Example: Show the browser info.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:green; font-weight:bolder; margin:3px 0 0 10px; }
  div { color:blue; margin-left:20px; font-size:14px; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p>Browser info:</p>

<script>
    jQuery.each(jQuery.browser, function(i, val) {
      $("<div>" + i + " : <span>" + val + "</span>")
                .appendTo( document.body );
    });</script>

</body>
</html>

Demo:

Example: Returns true if the current useragent is some version of Microsoft's Internet Explorer.


  $.browser.msie;

Example: Alerts "this is WebKit!" only for WebKit browsers


  if ($.browser.webkit) {
    alert( "this is webkit!" );
  }

Example: Alerts "Do stuff for Firefox 3" only for Firefox 3 browsers.


  var ua = $.browser;
  if ( ua.mozilla && ua.version.slice(0,3) == "1.9" ) {
    alert( "Do stuff for firefox 3" );
  }

Example: Set a CSS property that's specific to a particular browser.


 if ( $.browser.msie ) {
    $("#div ul li").css( "display","inline" );
 } else {
    $("#div ul li").css( "display","inline-table" );
 }

jQuery.browser.version Returns: String

Description: The version number of the rendering engine for the user's browser.

  • version added: 1.1.3jQuery.browser.version

Here are some typical results:

  • Internet Explorer: 6.0, 7.0, 8.0
  • Mozilla/Firefox/Flock/Camino: 1.7.12, 1.8.1.3, 1.9
  • Opera: 10.06, 11.01
  • Safari/Webkit: 312.8, 418.9

Note that IE8 claims to be 7 in Compatibility View.

Examples:

Example: Returns the version number of the rendering engine used by the user's current browser. For example, FireFox 4 returns 2.0 (the version of the Gecko rendering engine it utilizes).

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; margin:20px; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p></p>

<script>
$("p").html( "The version number of the rendering engine your browser uses is: <span>" +
                $.browser.version + "</span>" );
</script>

</body>
</html>

Demo:

Example: Alerts the version of IE's rendering engine that is being used:


if ( $.browser.msie ) {
  alert( $.browser.version );
}

Example: Often you only care about the "major number," the whole number, which you can get by using JavaScript's built-in parseInt() function:


if ( $.browser.msie ) {
  alert( parseInt($.browser.version, 10) );
}
jqapi-1.7/docs/jQuery.contains/index.html0000644000175000017500000000353611654657446017525 0ustar metalmetal

jQuery.contains()

jQuery.contains( container, contained ) Returns: Boolean

Description: Check to see if a DOM element is within another DOM element.

  • version added: 1.4jQuery.contains( container, contained )

    containerThe DOM element that may contain the other element.

    containedThe DOM element that may be contained by the other element.

Example:

Check if an element is inside another. Text and comment nodes are not supported.

jQuery.contains(document.documentElement, document.body); // true
jQuery.contains(document.body, document.documentElement); // false
jqapi-1.7/docs/jQuery.cssHooks/index.html0000644000175000017500000001723011654657330017467 0ustar metalmetal

jQuery.cssHooks

jQuery.cssHooks Returns: Object

Description: Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.

  • version added: 1.4.3jQuery.cssHooks

The $.cssHooks object provides a way to define functions for getting and setting particular CSS values. It can also be used to create new cssHooks for normalizing CSS3 features such as box shadows and gradients.

For example, some versions of Webkit-based browsers require -webkit-border-radius to set the border-radius on an element, while earlier Firefox versions require -moz-border-radius. A cssHook can normalize these vendor-prefixed properties to let .css() accept a single, standard property name (border-radius, or with DOM property syntax, borderRadius).

In addition to providing fine-grained control over how specific style properties are handled, $.cssHooks also extends the set of properties available to the .animate() method.

Defining a new cssHook is straight-forward. The skeleton template below can serve as a guide to creating your own.

(function($) {
  // first, check to see if cssHooks are supported
  if ( !$.cssHooks ) {
    // if not, output an error message
    throw("jQuery 1.4.3 or above is required for this plugin to work");
    return;
  }

  $.cssHooks["someCSSProp"] = {
    get: function( elem, computed, extra ) {
      // handle getting the CSS property
    },
    set: function( elem, value ) {
      // handle setting the CSS value
    }
  };
})(jQuery);

Feature Testing

Before normalizing a vendor-specific CSS property, first determine whether the browser supports the standard property or a vendor-prefixed variation. For example, to check for support of the border-radius property, see if any variation is a member of a temporary element's style object.

(function($) {
  function styleSupport( prop ) {
    var vendorProp, supportedProp,

        // capitalize first character of the prop to test vendor prefix
        capProp = prop.charAt(0).toUpperCase() + prop.slice(1),
        prefixes = [ "Moz", "Webkit", "O", "ms" ],
        div = document.createElement( "div" );

    if ( prop in div.style ) {

      // browser supports standard CSS property name
      supportedProp = prop;
    } else {

      // otherwise test support for vendor-prefixed property names
      for ( var i = 0; i < prefixes.length; i++ ) {
        vendorProp = prefixes[i] + capProp;
        if ( vendorProp in div.style ) {
          supportedProp = vendorProp;
          break;
        }
      }
    }

    // avoid memory leak in IE
    div = null;
    
    // add property to $.support so it can be accessed elsewhere
    $.support[ prop ] = supportedProp;
    
    return supportedProp;
  }

  // call the function, e.g. testing for "border-radius" support:
  styleSupport( "borderRadius" );
})(jQuery);

Defining a complete cssHook

To define a complete cssHook, combine the support test with a filled-out version of the skeleton template provided in the first example:

(function($) {
  if ( !$.cssHooks ) {
    throw("jQuery 1.4.3+ is needed for this plugin to work");
    return;
  }
  
  function styleSupport( prop ) {
    var vendorProp, supportedProp,
        capProp = prop.charAt(0).toUpperCase() + prop.slice(1),
        prefixes = [ "Moz", "Webkit", "O", "ms" ],
        div = document.createElement( "div" );

    if ( prop in div.style ) {
      supportedProp = prop;
    } else {
      for ( var i = 0; i < prefixes.length; i++ ) {
        vendorProp = prefixes[i] + capProp;
        if ( vendorProp in div.style ) {
          supportedProp = vendorProp;
          break;
        }
      }
    }

    div = null;
    $.support[ prop ] = supportedProp
    return supportedProp;
  }

  var borderRadius = styleSupport( "borderRadius" );

  // Set cssHooks only for browsers that
  // support a vendor-prefixed border radius
  if ( borderRadius && borderRadius !== "borderRadius" ) {
    $.cssHook.borderRadius = {
      get: function( elem, computed, extra ) {
        return $.css( elem, borderRadius );
      },
      set: function( elem, value) {
        elem.style[ borderRadius ] = value;
      }
    };
  }
})(jQuery);

You can then set the border radius in a supported browser using either the DOM (camelCased) style or the CSS (hyphenated) style:

$("#element").css("borderRadius", "10px");
$("#another").css("border-radius", "20px");

If the browser lacks support for any form of the CSS property, vendor-prefixed or not, the style is not applied to the element. However, if the browser supports a proprietary alternative, it can be applied to the cssHooks instead.

 (function($) {
  // feature test for support of a CSS property
  // and a proprietary alternative
  // ...


 if ( $.support.someCSSProp && $.support.someCSSProp !== "someCSSProp" ) {

    // Set cssHooks for browsers that
    // support only a vendor-prefixed someCSSProp
    $.cssHook.someCSSProp = {
      get: function( elem, computed, extra ) {
        return $.css( elem, $.support.someCSSProp );
      },
      set: function( elem, value) {
        elem.style[ $.support.someCSSProp ] = value;
      }
    };
  } else if ( supportsProprietaryAlternative ) {
    $.cssHook.someCSSProp = {
      get: function( elem, computed, extra ) {
        // Handle crazy conversion from the proprietary alternative 
      },
      set: function( elem, value ) {
        // Handle crazy conversion to the proprietary alternative
      }
    }
  }

})(jQuery);

Special units

By default, jQuery adds a "px" unit to the values passed to the .css() method. This behavior can be prevented by adding the property to the jQuery.cssNumber object

$.cssNumber["someCSSProp"] = true;

Animating with cssHooks

A cssHook can also hook into jQuery's animation mechanism by adding a property to the jQuery.fx.step object:

$.fx.step["someCSSProp"] = function(fx){
  $.cssHooks["someCSSProp"].set( fx.elem, fx.now + fx.unit );
};

Note that this works best for simple numeric-value animations. More custom code may be required depending on the CSS property, the type of value it returns, and the animation's complexity.

jqapi-1.7/docs/jQuery.data/index.html0000644000175000017500000001731411654657334016613 0ustar metalmetal

jQuery.data()

Contents:

jQuery.data( element, key, value ) Returns: Object

Description: Store arbitrary data associated with the specified element. Returns the value that was set.

  • version added: 1.2.3jQuery.data( element, key, value )

    elementThe DOM element to associate with the data.

    keyA string naming the piece of data to set.

    valueThe new data value.

Note: This is a low-level method; a more convenient .data() is also available.

The jQuery.data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore free from memory leaks. jQuery ensures that the data is removed when DOM elements are removed via jQuery methods, and when the user leaves the page. We can set several distinct values for a single element and retrieve them later:

jQuery.data(document.body, 'foo', 52);
jQuery.data(document.body, 'bar', 'test');

Note: this method currently does not provide cross-platform support for setting data on XML documents, as Internet Explorer does not allow data to be attached via expando properties.

Example:

Store then retrieve a value from the div element.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    The values stored were 
    <span></span>
    and
    <span></span>
  </div>
<script>var div = $("div")[0];
    jQuery.data(div, "test", { first: 16, last: "pizza!" });
    $("span:first").text(jQuery.data(div, "test").first);
    $("span:last").text(jQuery.data(div, "test").last);</script>

</body>
</html>

Demo:

jQuery.data( element, key ) Returns: Object

Description: Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.

  • version added: 1.2.3jQuery.data( element, key )

    elementThe DOM element to query for the data.

    keyName of the data stored.

  • version added: 1.4jQuery.data( element )

    elementThe DOM element to query for the data.

Note: This is a low-level method; a more convenient .data() is also available.

Regarding HTML5 data-* attributes: This low-level method does NOT retrieve the data-* attributes unless the more convenient .data() method has already retrieved them.

The jQuery.data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore from memory leaks. We can retrieve several distinct values for a single element one at a time, or as a set:

alert(jQuery.data( document.body, 'foo' ));
alert(jQuery.data( document.body ));

The above lines alert the data values that were set on the body element. If nothing was set on that element, an empty string is returned.

Calling jQuery.data(element) retrieves all of the element's associated values as a JavaScript object. Note that jQuery itself uses this method to store data for internal use, such as event handlers, so do not assume that it contains only data that your own code has stored.

Note: this method currently does not provide cross-platform support for setting data on XML documents, as Internet Explorer does not allow data to be attached via expando properties.

Example:

Get the data named "blah" stored at for an element.

<!DOCTYPE html>
<html>
<head>
  <style>
div { margin:5px; background:yellow; }
button { margin:5px; font-size:14px; }
p { margin:5px; color:blue; }
span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>A div</div>
<button>Get "blah" from the div</button>
<button>Set "blah" to "hello"</button>

<button>Set "blah" to 86</button>
<button>Remove "blah" from the div</button>
<p>The "blah" value of this div is <span>?</span></p>
<script>
$("button").click(function(e) {
  var value, div = $("div")[0];

  switch ($("button").index(this)) {
    case 0 :
      value = jQuery.data(div, "blah");
      break;
    case 1 :
      jQuery.data(div, "blah", "hello");
      value = "Stored!";
      break;
    case 2 :
      jQuery.data(div, "blah", 86);
      value = "Stored!";
      break;
    case 3 :
      jQuery.removeData(div, "blah");
      value = "Removed!";
      break;
  }

  $("span").text("" + value);
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.dequeue/index.html0000644000175000017500000000616411654657336017342 0ustar metalmetal

jQuery.dequeue()

jQuery.dequeue( element [, queueName] ) Returns: jQuery

Description: Execute the next function on the queue for the matched element.

  • version added: 1.3jQuery.dequeue( element [, queueName] )

    elementA DOM element from which to remove and execute a queued function.

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

Note: This is a low-level method, you should probably use .dequeue() instead.

When jQuery.dequeue() is called, the next function on the queue is removed from the queue, and then executed. This function should in turn (directly or indirectly) cause jQuery.dequeue() to be called, so that the sequence can continue.

Example:

Use dequeue to end a custom queue function which allows the queue to keep going.

<!DOCTYPE html>
<html>
<head>
  <style>div { margin:3px; width:50px; position:absolute;
        height:50px; left:10px; top:30px; 
        background-color:yellow; }
  div.red { background-color:red; }  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Start</button>  <div></div>
<script>$("button").click(function () {
      $("div").animate({left:'+=200px'}, 2000);
      $("div").animate({top:'0px'}, 600);
      $("div").queue(function () {
        $(this).toggleClass("red");
         $.dequeue( this );
              });
      $("div").animate({left:'10px', top:'30px'}, 700);
    });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.each/index.html0000644000175000017500000001212511654657446016601 0ustar metalmetal

jQuery.each()

jQuery.each( collection, callback(indexInArray, valueOfElement) ) Returns: Object

Description: A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.

  • version added: 1.0jQuery.each( collection, callback(indexInArray, valueOfElement) )

    collectionThe object or array to iterate over.

    callback(indexInArray, valueOfElement)The function that will be executed on every object.

The $.each() function is not the same as $(selector).each(), which is used to iterate, exclusively, over a jQuery object. The $.each() function can be used to iterate over any collection, whether it is a map (JavaScript object) or an array. In the case of an array, the callback is passed an array index and a corresponding array value each time. (The value can also be accessed through the this keyword, but Javascript will always wrap the this value as an Object even if it is a simple string or number value.) The method returns its first argument, the object that was iterated.

$.each([52, 97], function(index, value) { 
  alert(index + ': ' + value); 
});

This produces two messages:

0: 52
1: 97

If a map is used as the collection, the callback is passed a key-value pair each time:

var map = { 
  'flammable': 'inflammable', 
  'duh': 'no duh' 
}; 
$.each(map, function(key, value) { 
  alert(key + ': ' + value); 
});

Once again, this produces two messages:

flammable: inflammable
duh: no duh

We can break the $.each() loop at a particular iteration by making the callback function return false. Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.

Examples:

Example: Iterates through the array displaying each number as both a word and numeral

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  div#five { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <div id="one"></div>
  <div id="two"></div>
  <div id="three"></div>
  <div id="four"></div>
  <div id="five"></div>
<script>
    var arr = [ "one", "two", "three", "four", "five" ];
    var obj = { one:1, two:2, three:3, four:4, five:5 };

    jQuery.each(arr, function() {
      $("#" + this).text("Mine is " + this + ".");
       return (this != "three"); // will stop running after "three"
   });

    jQuery.each(obj, function(i, val) {
      $("#" + i).append(document.createTextNode(" - " + val));
    });
</script>

</body>
</html>

Demo:

Example: Iterates over items in an array, accessing both the current item and its index.

$.each( ['a','b','c'], function(i, l){
   alert( "Index #" + i + ": " + l );
 });

Example: Iterates over the properties in an object, accessing both the current item and its key.

$.each( { name: "John", lang: "JS" }, function(k, v){
   alert( "Key: " + k + ", Value: " + v );
 });
jqapi-1.7/docs/jQuery.error/index.html0000644000175000017500000000316511654657376017040 0ustar metalmetal

jQuery.error

jQuery.error( message )

Description: Takes a string and throws an exception containing it.

  • version added: 1.4.1jQuery.error( message )

    messageThe message to send out.

This method exists primarily for plugin developers who wish to override it and provide a better display (or more information) for the error messages.

Example:

Override jQuery.error for display in Firebug.

jQuery.error = console.error;
jqapi-1.7/docs/jQuery.extend/index.html0000644000175000017500000001654111654657446017176 0ustar metalmetal

jQuery.extend()

jQuery.extend( target [, object1] [, objectN] ) Returns: Object

Description: Merge the contents of two or more objects together into the first object.

  • version added: 1.0jQuery.extend( target [, object1] [, objectN] )

    target An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.

    object1An object containing additional properties to merge in.

    objectNAdditional objects containing properties to merge in.

  • version added: 1.1.4jQuery.extend( [deep], target, object1 [, objectN] )

    deepIf true, the merge becomes recursive (aka. deep copy).

    targetThe object to extend. It will receive the new properties.

    object1An object containing additional properties to merge in.

    objectNAdditional objects containing properties to merge in.

When we supply two or more objects to $.extend(), properties from all of the objects are added to the target object.

If only one argument is supplied to $.extend(), this means the target argument was omitted. In this case, the jQuery object itself is assumed to be the target. By doing this, we can add new functions to the jQuery namespace. This can be useful for plugin authors wishing to add new methods to JQuery.

Keep in mind that the target object (first argument) will be modified, and will also be returned from $.extend(). If, however, we want to preserve both of the original objects, we can do so by passing an empty object as the target:

var object = $.extend({}, object1, object2);

The merge performed by $.extend() is not recursive by default; if a property of the first object is itself an object or array, it will be completely overwritten by a property with the same key in the second object. The values are not merged. This can be seen in the example below by examining the value of banana. However, by passing true for the first function argument, objects will be recursively merged.

Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. For performance reasons, properties that have values of built-in JavaScript types such as Date or RegExp are not re-constructed, and will appear as plain Objects in the resulting object or array.

Note: When performing a deep extend, Object and Array are extended, however primitive types such string, boolean and number are not. For specific needs that fall outside of this behaviour, it is recommended to write a custom extend method as this will be significantly faster from a performance perspective.

Examples:

Example: Merge two objects, modifying the first.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div id="log"></div>

<script>
var object1 = {
  apple: 0,
  banana: {weight: 52, price: 100},
  cherry: 97
};
var object2 = {
  banana: {price: 200},
  durian: 100
};

/* merge object2 into object1 */
$.extend(object1, object2);

var printObj = function(obj) {
  var arr = [];
  $.each(obj, function(key, val) {
    var next = key + ": ";
    next += $.isPlainObject(val) ? printObj(val) : val;
    arr.push( next );
  });
  return "{ " +  arr.join(", ") + " }";
};

$("#log").append( printObj(object1) );
</script>

</body>
</html>

Demo:

Example: Merge two objects recursively, modifying the first.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div id="log"></div>

<script>
var object1 = {
  apple: 0,
  banana: {weight: 52, price: 100},
  cherry: 97
};
var object2 = {
  banana: {price: 200},
  durian: 100
};

/* merge object2 into object1, recursively */
$.extend(true, object1, object2);

var printObj = function(obj) {
  var arr = [];
  $.each(obj, function(key, val) {
    var next = key + ": ";
    next += $.isPlainObject(val) ? printObj(val) : val;
    arr.push( next );
  });
  return "{ " +  arr.join(", ") + " }";
};

$("#log").append( printObj(object1) );
</script>

</body>
</html>

Demo:

Example: Merge defaults and options, without modifying the defaults. This is a common plugin development pattern.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div id="log"></div>

<script>
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };

/* merge defaults and options, without modifying defaults */
var settings = $.extend({}, defaults, options);

var printObj = function(obj) {
  var arr = [];
  $.each(obj, function(key, val) {
    var next = key + ": ";
    next += $.isPlainObject(val) ? printObj(val) : val;
    arr.push( next );
  });
  return "{ " +  arr.join(", ") + " }";
};


$("#log").append( "<div><b>settings -- </b>" + printObj(settings) + "</div>" );
$("#log").append( "<div><b>options -- </b>" + printObj(options) + "</div>" );

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.fx.interval/index.html0000644000175000017500000000617111654657350020137 0ustar metalmetal

jQuery.fx.interval

jQuery.fx.interval Returns: Number

Description: The rate (in milliseconds) at which animations fire.

  • version added: 1.4.3jQuery.fx.interval

This property can be manipulated to adjust the number of frames per second at which animations will run. The default is 13 milliseconds. Making this a lower number could make the animations run smoother in faster browsers (such as Chrome) but there may be performance and CPU implications of doing so.

Since jQuery uses one global interval, no animation should be running or all animations should stop for the change of this property to take effect.

Note:jQuery.fx.interval currently has no effect in browsers that support the requestAnimationFrame property, such as Google Chrome 11. This behavior is subject to change in a future release.

Example:

Cause all animations to run with less frames.

<!DOCTYPE html>
<html>
<head>
  <style>
    div { width:50px; height:30px; margin:5px; float:left;
          background:green; }
    </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><input type="button" value="Run"/></p>
<div></div>
<script>
jQuery.fx.interval = 100;

$("input").click(function(){
  $("div").toggle( 3000 );
});
  </script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.fx.off/index.html0000644000175000017500000000605711654657350017070 0ustar metalmetal

jQuery.fx.off

jQuery.fx.off Returns: Boolean

Description: Globally disable all animations.

  • version added: 1.3jQuery.fx.off

When this property is set to true, all animation methods will immediately set elements to their final state when called, rather than displaying an effect. This may be desirable for a couple reasons:

  • jQuery is being used on a low-resource device.
  • Users are encountering accessibility problems with the animations (see the article Turn Off Animation for more information).

Animations can be turned back on by setting the property to false.

Example:

Toggle animation on and off

<!DOCTYPE html>
<html>
<head>
  <style>
    div { width:50px; height:30px; margin:5px; float:left;
          background:green; }
    </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><input type="button" value="Run"/> <button>Toggle fx</button></p>
<div></div>
<script>
var toggleFx = function() {
  $.fx.off = !$.fx.off;
};
toggleFx();

$("button").click(toggleFx)

$("input").click(function(){
  $("div").toggle("slow");
});
  </script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.get/index.html0000644000175000017500000001707011654657316016460 0ustar metalmetal

jQuery.get()

jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] ) Returns: jqXHR

Description: Load data from the server using a HTTP GET request.

  • version added: 1.0jQuery.get( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

    urlA string containing the URL to which the request is sent.

    dataA map or string that is sent to the server with the request.

    success(data, textStatus, jqXHR)A callback function that is executed if the request succeeds.

    dataTypeThe type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).

This is a shorthand Ajax function, which is equivalent to:

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

The success callback function is passed the returned data, which will be an XML root element, text string, JavaScript file, or JSON object, depending on the MIME type of the response. It is also passed the text status of the response.

As of jQuery 1.5, the success callback function is also passed a "jqXHR" object (in jQuery 1.4, it was passed the XMLHttpRequest object). However, since JSONP and cross-domain GET requests do not use XHR, in those cases the (j)XHR and textStatus parameters passed to the success callback are undefined.

Most implementations will specify a success handler:

$.get('ajax/test.html', function(data) {
  $('.result').html(data);
  alert('Load was performed.');
});

This example fetches the requested HTML snippet and inserts it on the page.

The jqXHR Object

As of jQuery 1.5, all of jQuery's Ajax methods return a superset of the XMLHTTPRequest object. This jQuery XHR object, or "jqXHR," returned by $.get() implements the Promise interface, giving it all the properties, methods, and behavior of a Promise (see Deferred object for more information). For convenience and consistency with the callback names used by $.ajax(), it provides .error(), .success(), and .complete() methods. These methods take a function argument that is called when the request terminates, and the function receives the same arguments as the correspondingly-named $.ajax() callback.

The Promise interface in jQuery 1.5 also allows jQuery's Ajax methods, including $.get(), to chain multiple .success(), .complete(), and .error() callbacks on a single request, and even to assign these callbacks after the request may have completed. If the request is already complete, the callback is fired immediately.

// Assign handlers immediately after making the request,
  // and remember the jqxhr object for this request
  var jqxhr = $.get("example.php", function() {
    alert("success");
  })
  .success(function() { alert("second success"); })
  .error(function() { alert("error"); })
  .complete(function() { alert("complete"); });

  // perform other work here ...

  // Set another completion function for the request above
  jqxhr.complete(function(){ alert("second complete"); });

Additional Notes:

  • Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.
  • If a request with jQuery.get() returns an error code, it will fail silently unless the script has also called the global .ajaxError() method or. As of jQuery 1.5, the .error() method of the jqXHR object returned by jQuery.get() is also available for error handling.
  • Script and JSONP requests are not subject to the same origin policy restrictions.

Examples:

Example: Request the test.php page, but ignore the return results.

$.get("test.php");

Example: Request the test.php page and send some additional data along (while still ignoring the return results).

$.get("test.php", { name: "John", time: "2pm" } );

Example: pass arrays of data to the server (while still ignoring the return results).

$.get("test.php", { 'choices[]': ["Jon", "Susan"]} );

Example: Alert out the results from requesting test.php (HTML or XML, depending on what was returned).

$.get("test.php", function(data){
alert("Data Loaded: " + data);
});

Example: Alert out the results from requesting test.cgi with an additional payload of data (HTML or XML, depending on what was returned).

$.get("test.cgi", { name: "John", time: "2pm" },
   function(data){
     alert("Data Loaded: " + data);
   });

Example: Gets the test.php page contents, which has been returned in json format (<?php echo json_encode(array("name"=>"John","time"=>"2pm")); ?>), and adds it to the page.

$.get("test.php",
   function(data){
     $('body').append( "Name: " + data.name ) // John
              .append( "Time: " + data.time ); //  2pm
   }, "json");
jqapi-1.7/docs/jQuery.getJSON/index.html0000644000175000017500000002034511654657320017144 0ustar metalmetal

jQuery.getJSON()

jQuery.getJSON( url [, data] [, success(data, textStatus, jqXHR)] ) Returns: jqXHR

Description: Load JSON-encoded data from the server using a GET HTTP request.

  • version added: 1.0jQuery.getJSON( url [, data] [, success(data, textStatus, jqXHR)] )

    urlA string containing the URL to which the request is sent.

    dataA map or string that is sent to the server with the request.

    success(data, textStatus, jqXHR)A callback function that is executed if the request succeeds.

This is a shorthand Ajax function, which is equivalent to:

$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Data that is sent to the server is appended to the URL as a query string. If the value of the data parameter is an object (map), it is converted to a string and url-encoded before it is appended to the URL.

Most implementations will specify a success handler:

$.getJSON('ajax/test.json', function(data) {
  var items = [];

  $.each(data, function(key, val) {
    items.push('<li id="' + key + '">' + val + '</li>');
  });

  $('<ul/>', {
    'class': 'my-new-list',
    html: items.join('')
  }).appendTo('body');
});

This example, of course, relies on the structure of the JSON file:

{
  "one": "Singular sensation",
  "two": "Beady little eyes",
  "three": "Little birds pitch by my doorstep"
}

Using this structure, the example loops through the requested data, builds an unordered list, and appends it to the body.

The success callback is passed the returned data, which is typically a JavaScript object or array as defined by the JSON structure and parsed using the $.parseJSON() method. It is also passed the text status of the response.

As of jQuery 1.5, the success callback function receives a "jqXHR" object (in jQuery 1.4, it received the XMLHttpRequest object). However, since JSONP and cross-domain GET requests do not use XHR, in those cases the jqXHR and textStatus parameters passed to the success callback are undefined.

Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently. Avoid frequent hand-editing of JSON data for this reason. JSON is a data-interchange format with syntax rules that are stricter than those of JavaScript's object literal notation. For example, all strings represented in JSON, whether they are properties or values, must be enclosed in double-quotes. For details on the JSON format, see http://json.org/.

JSONP

If the URL includes the string "callback=?" (or similar, as defined by the server-side API), the request is treated as JSONP instead. See the discussion of the jsonp data type in $.ajax() for more details.

The jqXHR Object

As of jQuery 1.5, all of jQuery's Ajax methods return a superset of the XMLHTTPRequest object. This jQuery XHR object, or "jqXHR," returned by $.getJSON() implements the Promise interface, giving it all the properties, methods, and behavior of a Promise (see Deferred object for more information). For convenience and consistency with the callback names used by $.ajax(), it provides .error(), .success(), and .complete() methods. These methods take a function argument that is called when the request terminates, and the function receives the same arguments as the correspondingly-named $.ajax() callback.

The Promise interface in jQuery 1.5 also allows jQuery's Ajax methods, including $.getJSON(), to chain multiple .success(), .complete(), and .error() callbacks on a single request, and even to assign these callbacks after the request may have completed. If the request is already complete, the callback is fired immediately.

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON("example.json", function() {
  alert("success");
})
.success(function() { alert("second success"); })
.error(function() { alert("error"); })
.complete(function() { alert("complete"); });

// perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function(){ alert("second complete"); });

Additional Notes:

  • Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.
  • Script and JSONP requests are not subject to the same origin policy restrictions.

Examples:

Example: Loads the four most recent cat pictures from the Flickr JSONP API.

<!DOCTYPE html>
<html>
<head>
  <style>img{ height: 100px; float: left; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="images">

</div>
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "cat",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){
      $("<img/>").attr("src", item.media.m).appendTo("#images");
      if ( i == 3 ) return false;
    });
  });</script>

</body>
</html>

Demo:

Example: Load the JSON data from test.js and access a name from the returned JSON data.

$.getJSON("test.js", function(json) {
   alert("JSON Data: " + json.users[3].name);
 });

Example: Load the JSON data from test.js, passing along additional data, and access a name from the returned JSON data.

$.getJSON("test.js", { name: "John", time: "2pm" }, function(json) {
    alert("JSON Data: " + json.users[3].name);
    });
jqapi-1.7/docs/jQuery.getScript/index.html0000644000175000017500000000762611654657320017646 0ustar metalmetal

jQuery.getScript()

jQuery.getScript( url [, success(data, textStatus)] ) Returns: jqXHR

Description: Load a JavaScript file from the server using a GET HTTP request, then execute it.

  • version added: 1.0jQuery.getScript( url [, success(data, textStatus)] )

    urlA string containing the URL to which the request is sent.

    success(data, textStatus)A callback function that is executed if the request succeeds.

This is a shorthand Ajax function, which is equivalent to:

$.ajax({
  url: url,
  dataType: "script",
  success: success
});

The callback is passed the returned JavaScript file. This is generally not useful as the script will already have run at this point.

The script is executed in the global context, so it can refer to other variables and use jQuery functions. Included scripts can have some impact on the current page:

$(".result").html("<p>Lorem ipsum dolor sit amet.</p>");

Scripts are included and run by referencing the file name:

$.getScript('ajax/test.js', function(data, textStatus){
   console.log(data); //data returned
   console.log(textStatus); //success
   console.log('Load was performed.');
});

Note: Should you require an additional callback for errors when using the getScript() method, the global ajaxError() callback event may be used to achieve this as follows:

$( "div.log" ).ajaxError(function(e, jqxhr, settings, exception) {
  if (settings.dataType=='script') {
    $(this).text( "Triggered ajaxError handler." );
  }
});

Example:

Load the official jQuery Color Animation plugin dynamically and bind some color animations to occur once the new functionality is loaded.

<!DOCTYPE html>
<html>
<head>
  <style>
.block {
   background-color: blue;
   width: 150px;
   height: 70px;
   margin: 10px;
}</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button id="go">&raquo; Run</button>

<div class="block"></div>

<script>
$.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js", function() {
  $("#go").click(function(){
    $(".block").animate( { backgroundColor: "pink" }, 1000)
      .delay(500)
      .animate( { backgroundColor: "blue" }, 1000);
  });
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.globalEval/index.html0000644000175000017500000000333611654657446017755 0ustar metalmetal

jQuery.globalEval()

jQuery.globalEval( code )

Description: Execute some JavaScript code globally.

  • version added: 1.0.4jQuery.globalEval( code )

    codeThe JavaScript code to execute.

This method behaves differently from using a normal JavaScript eval() in that it's executed within the global context (which is important for loading external scripts dynamically).

Example:

Execute a script in the global context.

function test(){
    jQuery.globalEval("var newVar = true;")
}
test();
// newVar === true
jqapi-1.7/docs/jQuery.grep/index.html0000644000175000017500000001032511654657450016631 0ustar metalmetal

jQuery.grep()

jQuery.grep( array, function(elementOfArray, indexInArray) [, invert] ) Returns: Array

Description: Finds the elements of an array which satisfy a filter function. The original array is not affected.

  • version added: 1.0jQuery.grep( array, function(elementOfArray, indexInArray) [, invert] )

    arrayThe array to search through.

    function(elementOfArray, indexInArray)The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object.

    invertIf "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.

The $.grep() method removes items from an array as necessary so that all remaining items pass a provided test. The test is a function that is passed an array item and the index of the item within the array. Only if the test returns true will the item be in the result array.

The filter function will be passed two arguments: the current array item and its index. The filter function must return 'true' to include the item in the result array.

Examples:

Example: Filters the original array of numbers leaving that are not 5 and have an index greater than 4. Then it removes all 9s.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  p { color:green; margin:0; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <p></p>
  <span></span>
  
<script>
var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ];
$("div").text(arr.join(", "));

arr = jQuery.grep(arr, function(n, i){
  return (n != 5 && i > 4);
});
$("p").text(arr.join(", "));

arr = jQuery.grep(arr, function (a) { return a != 9; });
$("span").text(arr.join(", "));

</script>

</body>
</html>

Demo:

Example: Filter an array of numbers to include only numbers bigger then zero.

$.grep( [0,1,2], function(n,i){
   return n > 0;
 });

Result:

[1, 2] 

Example: Filter an array of numbers to include numbers that are not bigger than zero.

$.grep( [0,1,2], function(n,i){
    return n > 0;
},true);

Result:

[0] 
jqapi-1.7/docs/jQuery.hasData/index.html0000644000175000017500000000541611654657336017251 0ustar metalmetal

jQuery.hasData()

jQuery.hasData( element ) Returns: Boolean

Description: Determine whether an element has any jQuery data associated with it.

  • version added: 1.5jQuery.hasData( element )

    elementA DOM element to be checked for data.

The jQuery.hasData() method provides a way to determine if an element currently has any values that were set using jQuery.data(). If no data is associated with an element (there is no data object at all or the data object is empty), the method returns false; otherwise it returns true.

The primary advantage of jQuery.hasData(element) is that it does not create and associate a data object with the element if none currently exists. In contrast, jQuery.data(element) always returns a data object to the caller, creating one if no data object previously existed.

Example:

Set data on an element and see the results of hasData.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Results: </p>
<script>
$(function(){
  var $p = jQuery("p"), p = $p[0];
  $p.append(jQuery.hasData(p)+" "); /* false */
  jQuery.data(p, "testing", 123);
  $p.append(jQuery.hasData(p)+" "); /* true*/
  jQuery.removeData(p, "testing");
  $p.append(jQuery.hasData(p)+" "); /* false */
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.holdReady/index.html0000644000175000017500000000533311654657326017614 0ustar metalmetal

jQuery.holdReady()

jQuery.holdReady( hold ) Returns: undefined

Description: Holds or releases the execution of jQuery's ready event.

  • version added: 1.6jQuery.holdReady( hold )

    holdIndicates whether the ready hold is being requested or released

The $.holdReady() method allows the caller to delay jQuery's ready event. This advanced feature would typically be used by dynamic script loaders that want to load additional JavaScript such as jQuery plugins before allowing the ready event to occur, even though the DOM may be ready. This method must be called early in the document, such as in the <head> immediately after the jQuery script tag. Calling this method after the ready event has already fired will have no effect.

To delay the ready event, first call $.holdReady(true). When the ready event should be released to execute, call $.holdReady(false). Note that multiple holds can be put on the ready event, one for each $.holdReady(true) call. The ready event will not actually fire until all holds have been released with a corresponding number of $.holdReady(false) calls and the normal document ready conditions are met. (See ready for more information.)

Example:

Delay the ready event until a custom plugin has loaded.


$.holdReady(true);
$.getScript("myplugin.js", function() {
     $.holdReady(false);
});
jqapi-1.7/docs/jQuery.inArray/index.html0000644000175000017500000000632411654657450017305 0ustar metalmetal

jQuery.inArray()

jQuery.inArray( value, array [, fromIndex] ) Returns: Number

Description: Search for a specified value within an array and return its index (or -1 if not found).

  • version added: 1.2jQuery.inArray( value, array [, fromIndex] )

    valueThe value to search for.

    arrayAn array through which to search.

    fromIndexThe index of the array at which to begin the search. The default is 0, which will search the whole array.

The $.inArray() method is similar to JavaScript's native .indexOf() method in that it returns -1 when it doesn't find a match. If the first element within the array matches value, $.inArray() returns 0.

Because JavaScript treats 0 as loosely equal to false (i.e. 0 == false, but 0 !== false), if we're checking for the presence of value within array, we need to check if it's not equal to (or greater than) -1.

Example:

Report the index of some elements in the array.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  span { color:red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div>"John" found at <span></span></div>
<div>4 found at <span></span></div>
<div>"Karl" not found, so <span></span></div>
<div>"Pete" is in the array, but not at or after index 2, so <span></span></div>
<script>var arr = [ 4, "Pete", 8, "John" ];
var $spans = $("span");
$spans.eq(0).text(jQuery.inArray("John", arr));
$spans.eq(1).text(jQuery.inArray(4, arr));
$spans.eq(2).text(jQuery.inArray("Karl", arr));
$spans.eq(3).text(jQuery.inArray("Pete", arr, 2));
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.isArray/index.html0000644000175000017500000000377611654657450017322 0ustar metalmetal

jQuery.isArray()

jQuery.isArray( obj ) Returns: boolean

Description: Determine whether the argument is an array.

  • version added: 1.3jQuery.isArray( obj )

    objObject to test whether or not it is an array.

$.isArray() returns a Boolean indicating whether the object is a JavaScript array (not an array-like object, such as a jQuery object).

Example:

Finds out if the parameter is an array.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Is [] an Array? <b></b>
<script>$("b").append( "" + $.isArray([]) );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.isEmptyObject/index.html0000644000175000017500000000422611654657450020460 0ustar metalmetal

jQuery.isEmptyObject()

jQuery.isEmptyObject( object ) Returns: Boolean

Description: Check to see if an object is empty (contains no properties).

  • version added: 1.4jQuery.isEmptyObject( object )

    objectThe object that will be checked to see if it's empty.

As of jQuery 1.4 this method checks both properties on the object itself and properties inherited from prototypes (in that it doesn't use hasOwnProperty). The argument should always be a plain JavaScript Object as other types of object (DOM elements, primitive strings/numbers, host objects) may not give consistent results across browsers. To determine if an object is a plain JavaScript object, use $.isPlainObject()

Example:

Check an object to see if it's empty.

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false
jqapi-1.7/docs/jQuery.isFunction/index.html0000644000175000017500000000615511654657452020025 0ustar metalmetal

jQuery.isFunction()

jQuery.isFunction( obj ) Returns: boolean

Description: Determine if the argument passed is a Javascript function object.

  • version added: 1.2jQuery.isFunction( obj )

    objObject to test whether or not it is a function.

Note: As of jQuery 1.3, functions provided by the browser like alert() and DOM element methods like getAttribute() are not guaranteed to be detected as functions in browsers such as Internet Explorer.

Examples:

Example: Test a few parameter examples.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; margin:2px; font-size:14px; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <div>jQuery.isFunction(objs[0]) = <span></span></div>

  <div>jQuery.isFunction(objs[1]) = <span></span></div>
  <div>jQuery.isFunction(objs[2]) = <span></span></div>
  <div>jQuery.isFunction(objs[3]) = <span></span></div>

  <div>jQuery.isFunction(objs[4]) = <span></span></div>
  
<script>
    function stub() {
    }
    var objs = [
          function () {},
          { x:15, y:20 },
          null,
          stub,
          "function"
        ];

    jQuery.each(objs, function (i) {
      var isFunc = jQuery.isFunction(objs[i]);
      $("span").eq(i).text(isFunc);
    });
</script>

</body>
</html>

Demo:

Example: Finds out if the parameter is a function.

$.isFunction(function(){});

Result:

true
jqapi-1.7/docs/jQuery.isNumeric/index.html0000644000175000017500000000436111654657452017637 0ustar metalmetal

jQuery.isNumeric()

jQuery.isNumeric( value ) Returns: Boolean

Description: Determines whether its argument is a number.

  • version added: 1.7jQuery.isNumeric( value )

    valueThe value to be tested.

The $.isNumeric() method checks whether its argument represents a numeric value. If so, it returns true. Otherwise it returns false. The argument can be of any type.

Example:

Sample return values of $.isNumeric with various inputs.


$.isNumeric("-10");  // true
$.isNumeric(16);     // true
$.isNumeric(0xFF);   // true
$.isNumeric("0xFF"); // true
$.isNumeric("8e5");  // true (exponential notation string)
$.isNumeric(3.1415); // true
$.isNumeric(+10);    // true
$.isNumeric(0144);   // true (octal integer literal)
$.isNumeric("");     // false
$.isNumeric({});     // false (empty object)
$.isNumeric(NaN);    // false
$.isNumeric(null);   // false
$.isNumeric(true);   // false
$.isNumeric(Infinity); // false
$.isNumeric(undefined); // false
jqapi-1.7/docs/jQuery.isPlainObject/index.html0000644000175000017500000000477411654657452020437 0ustar metalmetal

jQuery.isPlainObject()

jQuery.isPlainObject( object ) Returns: Boolean

Description: Check to see if an object is a plain object (created using "{}" or "new Object").

  • version added: 1.4jQuery.isPlainObject( object )

    objectThe object that will be checked to see if it's a plain object.

Note: Host objects (or objects used by browser host environments to complete the execution environment of ECMAScript) have a number of inconsistencies which are difficult to robustly feature detect cross-platform. As a result of this, $.isPlainObject() may evaluate inconsistently across browsers in certain instances.

An example of this is a test against document.location using $.isPlainObject() as follows:

console.log($.isPlainObject(document.location));

which throws an invalid pointer exception in IE8. With this in mind, it's important to be aware of any of the gotchas involved in using $.isPlainObject() against older browsers. Some basic example of use-cases that do function correctly cross-browser can be found below.

Example:

Check an object to see if it's a plain object.

jQuery.isPlainObject({}) // true
jQuery.isPlainObject("test") // false
jqapi-1.7/docs/jQuery.isWindow/index.html0000644000175000017500000000401711654657452017502 0ustar metalmetal

jQuery.isWindow()

jQuery.isWindow( obj ) Returns: boolean

Description: Determine whether the argument is a window.

  • version added: 1.4.3jQuery.isWindow( obj )

    objObject to test whether or not it is a window.

This is used in a number of places in jQuery to determine if we're operating against a browser window (such as the current window or an iframe).

Example:

Finds out if the parameter is a window.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Is 'window' a window? <b></b>
<script>$("b").append( "" + $.isWindow(window) );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.isXMLDoc/index.html0000644000175000017500000000321111654657452017314 0ustar metalmetal

jQuery.isXMLDoc()

jQuery.isXMLDoc( node ) Returns: Boolean

Description: Check to see if a DOM node is within an XML document (or is an XML document).

  • version added: 1.1.4jQuery.isXMLDoc( node )

    nodeThe DOM node that will be checked to see if it's in an XML document.

Example:

Check an object to see if it's in an XML document.

jQuery.isXMLDoc(document) // false
jQuery.isXMLDoc(document.body) // false
jqapi-1.7/docs/jQuery.makeArray/index.html0000644000175000017500000000626511654657452017622 0ustar metalmetal

jQuery.makeArray()

jQuery.makeArray( obj ) Returns: Array

Description: Convert an array-like object into a true JavaScript array.

  • version added: 1.2jQuery.makeArray( obj )

    objAny object to turn into a native Array.

Many methods, both in jQuery and in JavaScript in general, return objects that are array-like. For example, the jQuery factory function $() returns a jQuery object that has many of the properties of an array (a length, the [] array access operator, etc.), but is not exactly the same as an array and lacks some of an array's built-in methods (such as .pop() and .reverse()).

Note that after the conversion, any special features the object had (such as the jQuery methods in our example) will no longer be present. The object is now a plain array.

Examples:

Example: Turn a collection of HTMLElements into an Array of them.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>First</div>
  <div>Second</div>  
  <div>Third</div>

  <div>Fourth</div>
<script>
    var elems = document.getElementsByTagName("div"); // returns a nodeList
    var arr = jQuery.makeArray(elems);
    arr.reverse(); // use an Array method on list of dom elements
    $(arr).appendTo(document.body);
</script>

</body>
</html>

Demo:

Example: Turn a jQuery object into an array


    var obj = $('li');
    var arr = $.makeArray(obj);

Result:

(typeof obj === 'object' && obj.jquery) === true;
jQuery.isArray(arr) === true;
    
jqapi-1.7/docs/jQuery.map/index.html0000644000175000017500000001743211654657454016463 0ustar metalmetal

jQuery.map()

jQuery.map( array, callback(elementOfArray, indexInArray) ) Returns: Array

Description: Translate all items in an array or object to new array of items.

  • version added: 1.0jQuery.map( array, callback(elementOfArray, indexInArray) )

    arrayThe Array to translate.

    callback(elementOfArray, indexInArray)The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.

  • version added: 1.6jQuery.map( arrayOrObject, callback( value, indexOrKey ) )

    arrayOrObjectThe Array or Object to translate.

    callback( value, indexOrKey )The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.

The $.map() method applies a function to each item in an array or object and maps the results into a new array. Prior to jQuery 1.6, $.map() supports traversing arrays only. As of jQuery 1.6 it also traverses objects.

Array-like objects — those with a .length property and a value on the .length - 1 index — must be converted to actual arrays before being passed to $.map(). The jQuery library provides $.makeArray() for such conversions.

// The following object masquerades as an array.
var fakeArray = {"length": 1, 0: "Addy", 1: "Subtracty"};

// Therefore, convert it to a real array
var realArray = $.makeArray( fakeArray )

// Now it can be used reliably with $.map()
$.map( realArray, function(val, i) {
  // do something 
});

The translation function that is provided to this method is called for each top-level element in the array or object and is passed two arguments: The element's value and its index or key within the array or object.

The function can return:

  • the translated value, which will be mapped to the resulting array
  • null, to remove the item
  • an array of values, which will be flattened into the full array

Examples:

Example: A couple examples of using .map()

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  p { color:green; margin:0; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <p></p>
  <span></span>
  
<script>
    var arr = [ "a", "b", "c", "d", "e" ];
    $("div").text(arr.join(", "));

    arr = jQuery.map(arr, function(n, i){
      return (n.toUpperCase() + i);
    });
    $("p").text(arr.join(", "));

    arr = jQuery.map(arr, function (a) { 
      return a + a; 
    });
    $("span").text(arr.join(", "));

</script>

</body>
</html>

Demo:

Example: Map the original array to a new one and add 4 to each value.

$.map( [0,1,2], function(n){
   return n + 4;
 });

Result:

[4, 5, 6] 

Example: Maps the original array to a new one and adds 1 to each value if it is bigger then zero, otherwise it's removed.

$.map( [0,1,2], function(n){
   return n > 0 ? n + 1 : null;
 });

Result:

[2, 3] 

Example: Map the original array to a new one; each element is added with its original value and the value plus one.

$.map( [0,1,2], function(n){
   return [ n, n + 1 ];
 });

Result:

[0, 1, 1, 2, 2, 3] 

Example: Map the original object to a new array and double each value.


var dimensions = { width: 10, height: 15, length: 20 };
dimensions = $.map( dimensions, function( value, index ) {
  return value * 2;
}); 

Result:

[20, 30, 40] 

Example: Map an object's keys to an array.


var dimensions = { width: 10, height: 15, length: 20 },
    keys = $.map( dimensions, function( value, index ) {
      return index;
    }); 

Result:

["width", "height", "length"] 

Example: Maps the original array to a new one; each element is squared.


$.map( [0,1,2,3], function (a) { 
  return a * a; 
});

Result:

[0, 1, 4, 9] 

Example: Remove items by returning null from the function. This removes any numbers less than 50, and the rest are decreased by 45.


$.map( [0, 1, 52, 97], function (a) {
  return (a > 50 ? a - 45 : null); 
});

Result:

[7, 52] 

Example: Augmenting the resulting array by returning an array inside the function.

var array = [0, 1, 52, 97];
array = $.map(array, function(a, index) {
  return [a - 45, index];
}); 

Result:

[-45, 0, -44, 1, 7, 2, 52, 3] 
jqapi-1.7/docs/jQuery.merge/index.html0000644000175000017500000000632111654657454017000 0ustar metalmetal

jQuery.merge()

jQuery.merge( first, second ) Returns: Array

Description: Merge the contents of two arrays together into the first array.

  • version added: 1.0jQuery.merge( first, second )

    firstThe first array to merge, the elements of second added.

    secondThe second array to merge into the first, unaltered.

The $.merge() operation forms an array that contains all elements from the two arrays. The orders of items in the arrays are preserved, with items from the second array appended. The $.merge() function is destructive. It alters the first parameter to add the items from the second.

If you need the original first array, make a copy of it before calling $.merge(). Fortunately, $.merge() itself can be used for this duplication:

var newArray = $.merge([], oldArray);

This shortcut creates a new, empty array and merges the contents of oldArray into it, effectively cloning the array.

Prior to jQuery 1.4, the arguments should be true Javascript Array objects; use $.makeArray if they are not.

Examples:

Example: Merges two arrays, altering the first argument.

$.merge( [0,1,2], [2,3,4] )

Result:

[0,1,2,2,3,4] 

Example: Merges two arrays, altering the first argument.

$.merge( [3,2,1], [4,3,2] )  

Result:

[3,2,1,4,3,2] 

Example: Merges two arrays, but uses a copy, so the original isn't altered.

var first = ['a','b','c'];
var second = ['d','e','f'];
$.merge( $.merge([],first), second);
      

Result:

["a","b","c","d","e","f"] 
jqapi-1.7/docs/jQuery.noConflict/index.html0000644000175000017500000001275011654657326020000 0ustar metalmetal

jQuery.noConflict()

jQuery.noConflict( [removeAll] ) Returns: Object

Description: Relinquish jQuery's control of the $ variable.

  • version added: 1.0jQuery.noConflict( [removeAll] )

    removeAllA Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).

Many JavaScript libraries use $ as a function or variable name, just as jQuery does. In jQuery's case, $ is just an alias for jQuery, so all functionality is available without using $. If we need to use another JavaScript library alongside jQuery, we can return control of $ back to the other library with a call to $.noConflict():

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  // Code that uses other library's $ can follow here.
</script>

This technique is especially effective in conjunction with the .ready() method's ability to alias the jQuery object, as within callback passed to .ready() we can use $ if we wish without fear of conflicts later:

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });
  // Code that uses other library's $ can follow here.
</script>

If necessary, we can free up the jQuery name as well by passing true as an argument to the method. This is rarely necessary, and if we must do this (for example, if we need to use multiple versions of the jQuery library on the same page), we need to consider that most plug-ins rely on the presence of the jQuery variable and may not operate correctly in this situation.

Examples:

Example: Maps the original object that was referenced by $ back to $.

jQuery.noConflict();
// Do something with jQuery
jQuery("div p").hide();
// Do something with another library's $()
$("content").style.display = 'none';

Example: Reverts the $ alias and then creates and executes a function to provide the $ as a jQuery alias inside the functions scope. Inside the function the original $ object is not available. This works well for most plugins that don't rely on any other library.

jQuery.noConflict();
(function($) { 
  $(function() {
    // more code using $ as alias to jQuery
  });
})(jQuery);
// other code using $ as an alias to the other library

Example: You can chain the jQuery.noConflict() with the shorthand ready for a compact code.

jQuery.noConflict()(function(){
    // code using jQuery
}); 
// other code using $ as an alias to the other library

Example: Creates a different alias instead of jQuery to use in the rest of the script.

var j = jQuery.noConflict();
// Do something with jQuery
j("div p").hide();
// Do something with another library's $()
$("content").style.display = 'none';

Example: Completely move jQuery to a new namespace in another object.

var dom = {};
dom.query = jQuery.noConflict(true);

Result:

// Do something with the new jQuery
dom.query("div p").hide();
// Do something with another library's $()
$("content").style.display = 'none';
// Do something with another version of jQuery
jQuery("div > p").hide();
jqapi-1.7/docs/jQuery.noop/index.html0000644000175000017500000000263111654657454016654 0ustar metalmetal

jQuery.noop()

jQuery.noop() Returns: Function

Description: An empty function.

  • version added: 1.4jQuery.noop()

You can use this empty function when you wish to pass around a function that will do nothing.

This is useful for plugin authors who offer optional callbacks; in the case that no callback is given, something like jQuery.noop could execute.

jqapi-1.7/docs/jQuery.now/index.html0000644000175000017500000000244711654657454016511 0ustar metalmetal

jQuery.now()

jQuery.now() Returns: Number

Description: Return a number representing the current time.

  • version added: 1.4.3jQuery.now()

The $.now() method is a shorthand for the number returned by the expression (new Date).getTime().

jqapi-1.7/docs/jQuery.param/index.html0000644000175000017500000001450611654657320016775 0ustar metalmetal

jQuery.param()

jQuery.param( obj ) Returns: String

Description: Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.

  • version added: 1.2jQuery.param( obj )

    objAn array or object to serialize.

  • version added: 1.4jQuery.param( obj, traditional )

    objAn array or object to serialize.

    traditionalA Boolean indicating whether to perform a traditional "shallow" serialization.

This function is used internally to convert form element values into a serialized string representation (See .serialize() for more information).

As of jQuery 1.3, the return value of a function is used instead of the function as a String.

As of jQuery 1.4, the $.param() method serializes deep objects recursively to accommodate modern scripting languages and frameworks such as PHP and Ruby on Rails. You can disable this functionality globally by setting jQuery.ajaxSettings.traditional = true;.

If the object passed is in an Array, it must be an array of objects in the format returned by .serializeArray()

[{name:"first",value:"Rick"},
{name:"last",value:"Astley"},
{name:"job",value:"Rock Star"}]

Note: Because some frameworks have limited ability to parse serialized arrays, developers should exercise caution when passing an obj argument that contains objects or arrays nested within another array.

Note: Because there is no universally agreed-upon specification for param strings, it is not possible to encode complex data structures using this method in a manner that works ideally across all languages supporting such input. Until such time that there is, the $.param method will remain in its current form.

In jQuery 1.4, HTML5 input elements are also serialized.

We can display a query string representation of an object and a URI-decoded version of the same as follows:

var myObject = {
  a: {
    one: 1, 
    two: 2, 
    three: 3
  }, 
  b: [1,2,3]
};
var recursiveEncoded = $.param(myObject);
var recursiveDecoded = decodeURIComponent($.param(myObject));

alert(recursiveEncoded);
alert(recursiveDecoded);

The values of recursiveEncoded and recursiveDecoded are alerted as follows:

a%5Bone%5D=1&a%5Btwo%5D=2&a%5Bthree%5D=3&b%5B%5D=1&b%5B%5D=2&b%5B%5D=3
a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3

To emulate the behavior of $.param() prior to jQuery 1.4, we can set the traditional argument to true:

var myObject = {
  a: {
    one: 1, 
    two: 2, 
    three: 3
  }, 
  b: [1,2,3]
};
var shallowEncoded = $.param(myObject, true);
var shallowDecoded = decodeURIComponent(shallowEncoded);

alert(shallowEncoded);
alert(shallowDecoded);

The values of shallowEncoded and shallowDecoded are alerted as follows:

a=%5Bobject+Object%5D&b=1&b=2&b=3
a=[object+Object]&b=1&b=2&b=3

Examples:

Example: Serialize a key/value object.

<!DOCTYPE html>
<html>
<head>
  <style>div { color:red; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="results"></div>
<script>

    var params = { width:1680, height:1050 };
    var str = jQuery.param(params);
    $("#results").text(str);
</script>

</body>
</html>

Demo:

Example: Serialize a few complex objects


// <=1.3.2: 
$.param({ a: [2,3,4] }) // "a=2&a=3&a=4"
// >=1.4:
$.param({ a: [2,3,4] }) // "a[]=2&a[]=3&a[]=4"

// <=1.3.2: 
$.param({ a: { b:1,c:2 }, d: [3,4,{ e:5 }] }) // "a=[object+Object]&d=3&d=4&d=[object+Object]"
// >=1.4: 
$.param({ a: { b:1,c:2 }, d: [3,4,{ e:5 }] }) // "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"

jqapi-1.7/docs/jQuery.parseJSON/index.html0000644000175000017500000000434711654657456017515 0ustar metalmetal

jQuery.parseJSON

jQuery.parseJSON( json ) Returns: Object

Description: Takes a well-formed JSON string and returns the resulting JavaScript object.

  • version added: 1.4.1jQuery.parseJSON( json )

    jsonThe JSON string to parse.

Passing in a malformed JSON string may result in an exception being thrown. For example, the following are all malformed JSON strings:

  • {test: 1} (test does not have double quotes around it).
  • {'test': 1} ('test' is using single quotes instead of double quotes).

Additionally if you pass in nothing, an empty string, null, or undefined, 'null' will be returned from parseJSON. Where the browser provides a native implementation of JSON.parse, jQuery uses it to parse the string. For details on the JSON format, see http://json.org/.

Example:

Parse a JSON string.

var obj = jQuery.parseJSON('{"name":"John"}');
alert( obj.name === "John" );
jqapi-1.7/docs/jQuery.parseXML/index.html0000644000175000017500000000513211654657456017375 0ustar metalmetal

jQuery.parseXML()

jQuery.parseXML( data ) Returns: XMLDocument

Description: Parses a string into an XML document.

  • version added: 1.5jQuery.parseXML( data )

    dataa well-formed XML string to be parsed

jQuery.parseXML uses the native parsing function of the browser to create a valid XML Document. This document can then be passed to jQuery to create a typical jQuery object that can be traversed and manipulated.

Example:

Create a jQuery object using an XML string and obtain the value of the title node.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p id="someElement"></p>
<p id="anotherElement"></p>

  

<script>
var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc ),
    $title = $xml.find( "title" );

/* append "RSS Title" to #someElement */
$( "#someElement" ).append( $title.text() );

/* change the title to "XML Title" */
$title.text( "XML Title" );

/* append "XML Title" to #anotherElement */
$( "#anotherElement" ).append( $title.text() );
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.post/index.html0000644000175000017500000002244311654657322016663 0ustar metalmetal

jQuery.post()

jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] ) Returns: jqXHR

Description: Load data from the server using a HTTP POST request.

  • version added: 1.0jQuery.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

    urlA string containing the URL to which the request is sent.

    dataA map or string that is sent to the server with the request.

    success(data, textStatus, jqXHR)A callback function that is executed if the request succeeds.

    dataTypeThe type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).

This is a shorthand Ajax function, which is equivalent to:

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

The success callback function is passed the returned data, which will be an XML root element or a text string depending on the MIME type of the response. It is also passed the text status of the response.

As of jQuery 1.5, the success callback function is also passed a "jqXHR" object (in jQuery 1.4, it was passed the XMLHttpRequest object).

Most implementations will specify a success handler:

$.post('ajax/test.html', function(data) {
  $('.result').html(data);
});

This example fetches the requested HTML snippet and inserts it on the page.

Pages fetched with POST are never cached, so the cache and ifModified options in jQuery.ajaxSetup() have no effect on these requests.

The jqXHR Object

As of jQuery 1.5, all of jQuery's Ajax methods return a superset of the XMLHTTPRequest object. This jQuery XHR object, or "jqXHR," returned by $.post() implements the Promise interface, giving it all the properties, methods, and behavior of a Promise (see Deferred object for more information). For convenience and consistency with the callback names used by $.ajax(), it provides .error(), .success(), and .complete() methods. These methods take a function argument that is called when the request terminates, and the function receives the same arguments as the correspondingly-named $.ajax() callback.

The Promise interface in jQuery 1.5 also allows jQuery's Ajax methods, including $.post(), to chain multiple .success(), .complete(), and .error() callbacks on a single request, and even to assign these callbacks after the request may have completed. If the request is already complete, the callback is fired immediately.

// Assign handlers immediately after making the request,
    // and remember the jqxhr object for this request
    var jqxhr = $.post("example.php", function() {
      alert("success");
    })
    .success(function() { alert("second success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });

    // perform other work here ...

    // Set another completion function for the request above
    jqxhr.complete(function(){ alert("second complete"); });

Additional Notes:

  • Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.
  • If a request with jQuery.post() returns an error code, it will fail silently unless the script has also called the global .ajaxError() method or. As of jQuery 1.5, the .error() method of the jqXHR object returned by jQuery.post() is also available for error handling.

Examples:

Example: Request the test.php page, but ignore the return results.

$.post("test.php");

Example: Request the test.php page and send some additional data along (while still ignoring the return results).

$.post("test.php", { name: "John", time: "2pm" } );

Example: pass arrays of data to the server (while still ignoring the return results).

$.post("test.php", { 'choices[]': ["Jon", "Susan"] });

Example: send form data using ajax requests

$.post("test.php", $("#testform").serialize());

Example: Alert out the results from requesting test.php (HTML or XML, depending on what was returned).

$.post("test.php", function(data) {
   alert("Data Loaded: " + data);
 });

Example: Alert out the results from requesting test.php with an additional payload of data (HTML or XML, depending on what was returned).

$.post("test.php", { name: "John", time: "2pm" },
   function(data) {
     alert("Data Loaded: " + data);
   });

Example: Gets the test.php page content, store it in a XMLHttpResponse object and applies the process() JavaScript function.

$.post("test.php", { name: "John", time: "2pm" },
 function(data) {
   process(data);
 }, 
 "xml"
);

Example: Posts to the test.php page and gets contents which has been returned in json format (<?php echo json_encode(array("name"=>"John","time"=>"2pm")); ?>).

$.post("test.php", { "func": "getNameAndTime" },
 function(data){
   console.log(data.name); // John
   console.log(data.time); //  2pm
 }, "json");

Example: Post a form using ajax and put results in a div

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form action="/" id="searchForm">
   <input type="text" name="s" placeholder="Search..." />
   <input type="submit" value="Search" />
  </form>
  <!-- the result of the search will be rendered inside this div -->
  <div id="result"></div>

<script>
  /* attach a submit handler to the form */
  $("#searchForm").submit(function(event) {

    /* stop form from submitting normally */
    event.preventDefault(); 
        
    /* get some values from elements on the page: */
    var $form = $( this ),
        term = $form.find( 'input[name="s"]' ).val(),
        url = $form.attr( 'action' );

    /* Send the data using post and put the results in a div */
    $.post( url, { s: term },
      function( data ) {
          var content = $( data ).find( '#content' );
          $( "#result" ).empty().append( content );
      }
    );
  });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.proxy/index.html0000644000175000017500000001313611654657370017061 0ustar metalmetal

jQuery.proxy()

jQuery.proxy( function, context ) Returns: Function

Description: Takes a function and returns a new one that will always have a particular context.

  • version added: 1.4jQuery.proxy( function, context )

    functionThe function whose context will be changed.

    contextThe object to which the context (this) of the function should be set.

  • version added: 1.4jQuery.proxy( context, name )

    contextThe object to which the context of the function should be set.

    nameThe name of the function whose context will be changed (should be a property of the context object).

This method is most useful for attaching event handlers to an element where the context is pointing back to a different object. Additionally, jQuery makes sure that even if you bind the function returned from jQuery.proxy() it will still unbind the correct function if passed the original.

Be aware, however, that jQuery's event binding subsystem assigns a unique id to each event handling function in order to track it when it is used to specify the function to be unbound. The function represented by jQuery.proxy() is seen as a single function by the event subsystem, even when it is used to bind different contexts. To avoid unbinding the wrong handler, use a unique event namespace for binding and unbinding (e.g., "click.myproxy1") rather than specifying the proxied function during unbinding.

Examples:

Example: Change the context of functions bound to a click handler using the "function, context" signature. Unbind the first handler after first click.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p><button type="button" id="test">Test</button></p>
<div id="log"></div>

<script>
var me = {
  type: "zombie",
  test: function(event) {
    // Without proxy, `this` would refer to the event target
    // use event.target to reference that element.
    var element = event.target;
    $(element).css("background-color", "red");

    // With proxy, `this` refers to the me object encapsulating
    // this function.
    $("#log").append( "Hello " + this.type + "<br>" );
    $("#test").unbind("click", this.test);
  }
};

var you = {
  type: "person",
  test: function(event) {
    $("#log").append( this.type + " " );
  }
};

// execute you.test() in the context of the `you` object
// no matter where it is called
// i.e. the `this` keyword will refer to `you`
var youClick = $.proxy( you.test, you );


// attach click handlers to #test
$("#test")
  // this === "zombie"; handler unbound after first click
  .click( $.proxy( me.test, me ) )
  // this === "person"
  .click( youClick )
  // this === "zombie"
  .click( $.proxy( you.test, me ) )
  // this === "<button> element"
  .click( you.test );
</script>

</body>
</html>

Demo:

Example: Enforce the context of the function using the "context, function name" signature. Unbind the handler after first click.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p><button id="test">Test</button></p>
  <p id="log"></p>

<script>
  var obj = {
    name: "John",
    test: function() {
      $("#log").append( this.name );
      $("#test").unbind("click", obj.test);
    }
  };

  $("#test").click( jQuery.proxy( obj, "test" ) );
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.queue/index.html0000644000175000017500000002073211654657336017026 0ustar metalmetal

jQuery.queue()

Contents:

jQuery.queue( element [, queueName] ) Returns: Array

Description: Show the queue of functions to be executed on the matched element.

  • version added: 1.3jQuery.queue( element [, queueName] )

    elementA DOM element to inspect for an attached queue.

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

Note: This is a low-level method, you should probably use .queue() instead.

Example:

Show the length of the queue.

<!DOCTYPE html>
<html>
<head>
  <style>div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:30px; 
        background:green; display:none; }
  div.newcolor { background:blue; }
  span { color:red; }  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="show">Show Length of Queue</button>
  <span></span>
  <div></div>
<script>$("#show").click(function () {
      var n = jQuery.queue( $("div")[0], "fx" );
      $("span").text("Queue length is: " + n.length);
    });
    function runIt() {
      $("div").show("slow");
      $("div").animate({left:'+=200'},2000);
      $("div").slideToggle(1000);
      $("div").slideToggle("fast");
      $("div").animate({left:'-=200'},1500);
      $("div").hide("slow");
      $("div").show(1200);
      $("div").slideUp("normal", runIt);
    }
    runIt();</script>

</body>
</html>

Demo:

jQuery.queue( element, queueName, newQueue ) Returns: jQuery

Description: Manipulate the queue of functions to be executed on the matched element.

  • version added: 1.3jQuery.queue( element, queueName, newQueue )

    elementA DOM element where the array of queued functions is attached.

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

    newQueueAn array of functions to replace the current queue contents.

  • version added: 1.3jQuery.queue( element, queueName, callback() )

    elementA DOM element on which to add a queued function.

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

    callback()The new function to add to the queue.

Note: This is a low-level method, you should probably use .queue() instead.

Every element can have one or more queues of functions attached to it by jQuery. In most applications, only one queue (called fx) is used. Queues allow a sequence of actions to be called on an element asynchronously, without halting program execution.

The jQuery.queue() method allows us to directly manipulate this queue of functions. Calling jQuery.queue() with a callback is particularly useful; it allows us to place a new function at the end of the queue.

Note that when adding a function with jQuery.queue(), we should ensure that jQuery.dequeue() is eventually called so that the next function in line executes.

Examples:

Example: Queue a custom function.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:30px; 
        background:green; display:none; }
  div.newcolor { background:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Click here...
  <div></div>
<script>
   $(document.body).click(function () {
      $("div").show("slow");
      $("div").animate({left:'+=200'},2000);
      jQuery.queue( $("div")[0], "fx", function () {
        $(this).addClass("newcolor");
        jQuery.dequeue( this );
      });
      $("div").animate({left:'-=200'},500);
      jQuery.queue( $("div")[0], "fx", function () {
        $(this).removeClass("newcolor");
        jQuery.dequeue( this );
      });
      $("div").slideUp();
    });</script>

</body>
</html>

Demo:

Example: Set a queue array to delete the queue.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:30px; 
        background:green; display:none; }
  div.newcolor { background:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <button id="start">Start</button>
  <button id="stop">Stop</button>
  <div></div>
<script>
   $("#start").click(function () {
      $("div").show("slow");
      $("div").animate({left:'+=200'},5000);
      jQuery.queue( $("div")[0], "fx", function () {
        $(this).addClass("newcolor");
        jQuery.dequeue( this );
      });
      $("div").animate({left:'-=200'},1500);
      jQuery.queue( $("div")[0], "fx", function () {
        $(this).removeClass("newcolor");
        jQuery.dequeue( this );
      });
      $("div").slideUp();
    });
    $("#stop").click(function () {
      jQuery.queue( $("div")[0], "fx", [] );
      $("div").stop();
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.removeData/index.html0000644000175000017500000000632511654657336017773 0ustar metalmetal

jQuery.removeData()

jQuery.removeData( element [, name] ) Returns: jQuery

Description: Remove a previously-stored piece of data.

  • version added: 1.2.3jQuery.removeData( element [, name] )

    elementA DOM element from which to remove data.

    nameA string naming the piece of data to remove.

Note: This is a low-level method, you should probably use .removeData() instead.

The jQuery.removeData() method allows us to remove values that were previously set using jQuery.data(). When called with the name of a key, jQuery.removeData() deletes that particular value; when called with no arguments, all values are removed.

Example:

Set a data store for 2 names then remove one of them.

<!DOCTYPE html>
<html>
<head>
  <style>
		div { margin:2px; color:blue; }
		span { color:red; }
		</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>value1 before creation: <span></span></div>
		<div>value1 after creation: <span></span></div>
		<div>value1 after removal: <span></span></div>
		<div>value2 after removal: <span></span></div>
<script>
var div = $("div")[0];
$("span:eq(0)").text("" + $("div").data("test1"));
jQuery.data(div, "test1", "VALUE-1");
jQuery.data(div, "test2", "VALUE-2");
$("span:eq(1)").text("" + jQuery.data(div, "test1"));
jQuery.removeData(div, "test1");
$("span:eq(2)").text("" + jQuery.data(div, "test1"));
$("span:eq(3)").text("" + jQuery.data(div, "test2"));</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.sub/index.html0000644000175000017500000001113311654657326016465 0ustar metalmetal

jQuery.sub()

jQuery.sub() Returns: jQuery

Description: Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.

  • version added: 1.5jQuery.sub()

There are two specific use cases for which jQuery.sub() was created. The first was for providing a painless way of overriding jQuery methods without completely destroying the original methods and another was for helping to do encapsulation and basic namespacing for jQuery plugins.

Note that jQuery.sub() doesn't attempt to do any sort of isolation - that's not its intention. All the methods on the sub'd version of jQuery will still point to the original jQuery (events bound and triggered will still be through the main jQuery, data will be bound to elements through the main jQuery, Ajax queries and events will run through the main jQuery, etc.).

Note that if you're looking to use this for plugin development you should first strongly consider using something like the jQuery UI widget factory which manages both state and plugin sub-methods. Some examples of using the jQuery UI widget factory to build a plugin.

The particular use cases of this method can be best described through some examples.

Examples:

Example: Adding a method to a jQuery sub so that it isn't exposed externally:

  (function(){
    var sub$ = jQuery.sub();

    sub$.fn.myCustomMethod = function(){
      return 'just for me';
    };

    sub$(document).ready(function() {
      sub$('body').myCustomMethod() // 'just for me'
    });
  })();
  
  typeof jQuery('body').myCustomMethod // undefined

Example: Override some jQuery methods to provide new functionality.


(function() {
  var myjQuery = jQuery.sub();

  myjQuery.fn.remove = function() {
    // New functionality: Trigger a remove event
    this.trigger("remove");

    // Be sure to call the original jQuery remove method
    return jQuery.fn.remove.apply( this, arguments );
  };

  myjQuery(function($) {
    $(".menu").click(function() {
      $(this).find(".submenu").remove();
    });

    // A new remove event is now triggered from this copy of jQuery
    $(document).bind("remove", function(e) {
      $(e.target).parent().hide();
    });
  });
})();

// Regular jQuery doesn't trigger a remove event when removing an element
// This functionality is only contained within the modified 'myjQuery'.

Example: Create a plugin that returns plugin-specific methods.


(function() {
  // Create a new copy of jQuery using sub()
  var plugin = jQuery.sub();

  // Extend that copy with the new plugin methods
  plugin.fn.extend({
    open: function() {
      return this.show();
    },
    close: function() {
      return this.hide();
    }
  });

  // Add our plugin to the original jQuery
  jQuery.fn.myplugin = function() {
    this.addClass("plugin");

    // Make sure our plugin returns our special plugin version of jQuery
    return plugin( this );
  };
})();

$(document).ready(function() {
  // Call the plugin, open method now exists
  $('#main').myplugin().open();

  // Note: Calling just $("#main").open() won't work as open doesn't exist!
});
jqapi-1.7/docs/jQuery.support/index.html0000644000175000017500000002457611654657410017421 0ustar metalmetal

jQuery.support

jQuery.support Returns: Object

Description: A collection of properties that represent the presence of different browser features or bugs.

  • version added: 1.3jQuery.support

Rather than using $.browser to detect the current user agent and alter the page presentation based on which browser is running, it is a good practice to perform feature detection. This means that prior to executing code which relies on a browser feature, we test to ensure that the feature works properly. To make this process simpler, jQuery performs many such tests and makes the results available to us as properties of the jQuery.support object.

The values of all the support properties are determined using feature detection (and do not use any form of browser sniffing).

Following are a few resources that explain how feature detection works:

While jQuery includes a number of properties, developers should feel free to add their own as their needs dictate. Many of the jQuery.support properties are rather low-level, so they are most useful for plugin and jQuery core development, rather than general day-to-day development. Since jQuery requires these tests internally, they must be performed on every page load; for that reason this list is kept short and limited to features needed by jQuery itself.

The tests included in jQuery.support are as follows:

  • ajax is equal to true if a browser is able to create an XMLHttpRequest object.
  • boxModel is equal to true if the page is rendering according to the W3C CSS Box Model (is currently false in IE 6 and 7 when they are in Quirks Mode). This property is null until document ready occurs.
  • changeBubbles is equal to true if the change event bubbles up the DOM tree, as required by the W3C DOM event model. (It is currently false in IE, and jQuery simulates bubbling).
  • checkClone is equal to true if a browser correctly clones the checked state of radio buttons or checkboxes in document fragments.
  • checkOn is equal to true if the value of a checkbox defaults to "on" when no value is specified.
  • cors is equal to true if a browser can create an XMLHttpRequest object and if that XMLHttpRequest object has a withCredentials property. To enable cross-domain requests in environments that do not support cors yet but do allow cross-domain XHR requests (windows gadget, etc), set $.support.cors = true;. CORS WD
  • cssFloat is equal to true if the name of the property containing the CSS float value is .cssFloat, as defined in the CSS Spec. (It is currently false in IE, it uses styleFloat instead).
  • hrefNormalized is equal to true if the .getAttribute() method retrieves the href attribute of elements unchanged, rather than normalizing it to a fully-qualified URL. (It is currently false in IE, the URLs are normalized).
  • htmlSerialize is equal to true if the browser is able to serialize/insert <link> elements using the .innerHTML property of elements. (is currently false in IE).
  • leadingWhitespace is equal to true if the browser inserts content with .innerHTML exactly as provided—specifically, if leading whitespace characters are preserved. (It is currently false in IE 6-8).
  • noCloneChecked is equal to true if cloned DOM elements copy over the state of the .checked expando. (It is currently false in IE). (Added in jQuery 1.5.1)
  • noCloneEvent is equal to true if cloned DOM elements are created without event handlers (that is, if the event handlers on the source element are not cloned). (It is currently false in IE).
  • opacity is equal to true if a browser can properly interpret the opacity style property. (It is currently false in IE, it uses alpha filters instead).
  • optDisabled is equal to true if option elements within disabled select elements are not automatically marked as disabled.
  • optSelected is equal to true if an <option> element that is selected by default has a working selected property.
  • scriptEval() is equal to true if inline scripts are automatically evaluated and executed when inserted into the document using standard DOM manipulation methods such as .appendChild() and .createTextNode(). (It is currently false in IE, it uses .text to insert executable scripts).
    Note: No longer supported; removed in jQuery 1.6. Prior to jQuery 1.5.1, the scriptEval() method was the static scriptEval property. The change to a method allowed the test to be deferred until first use to prevent content security policy inline-script violations.
  • style is equal to true if inline styles for an element can be accessed through the DOM attribute called style, as required by the DOM Level 2 specification. In this case, .getAttribute('style') can retrieve this value; in Internet Explorer, .cssText is used for this purpose.
  • submitBubbles is equal to true if the submit event bubbles up the DOM tree, as required by the W3C DOM event model. (It is currently false in IE, and jQuery simulates bubbling).
  • tbody is equal to true if an empty <table> element can exist without a <tbody> element. According to the HTML specification, this sub-element is optional, so the property should be true in a fully-compliant browser. If false, we must account for the possibility of the browser injecting <tbody> tags implicitly. (It is currently false in IE, which automatically inserts tbody if it is not present in a string assigned to innerHTML).

Examples:

Example: Returns the box model for the iframe.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; margin:20px; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
  </p>
<script>

    $("p").html("This frame uses the W3C box model: <span>" +
                jQuery.support.boxModel + "</span>");

</script>

</body>
</html>

Demo:

Example: Returns false if the page is in QuirksMode in Internet Explorer

jQuery.support.boxModel

Result:

false
jqapi-1.7/docs/jQuery.trim/index.html0000644000175000017500000000520411654657456016655 0ustar metalmetal

jQuery.trim()

jQuery.trim( str ) Returns: String

Description: Remove the whitespace from the beginning and end of a string.

  • version added: 1.0jQuery.trim( str )

    strThe string to trim.

The $.trim() function removes all newlines, spaces (including non-breaking spaces), and tabs from the beginning and end of the supplied string. If these whitespace characters occur in the middle of the string, they are preserved.

Examples:

Example: Remove the two white spaces at the start and at the end of the string.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
        <pre id="original"></pre>
        <pre id="trimmed"></pre>
      
<script>
  var str = "         lots of spaces before and after         ";
  $("#original").html("Original String: '" + str + "'");
  $("#trimmed").html("$.trim()'ed: '" + $.trim(str) + "'");
</script>

</body>
</html>

Demo:

Example: Remove the two white spaces at the start and at the end of the string.

$.trim("    hello, how are you?    ");

Result:

"hello, how are you?"
jqapi-1.7/docs/jQuery.type/index.html0000644000175000017500000000533311654657456016666 0ustar metalmetal

jQuery.type()

jQuery.type( obj ) Returns: String

Description: Determine the internal JavaScript [[Class]] of an object.

  • version added: 1.4.3jQuery.type( obj )

    objObject to get the internal JavaScript [[Class]] of.

A number of techniques are used to determine the exact return value for an object. The [[Class]] is determined as follows:

  • If the object is undefined or null, then "undefined" or "null" is returned accordingly.
  • If the object has an internal [[Class]] equivalent to one of the browser's built-in objects, the associated name is returned. (More details about this technique.)
    • jQuery.type(true) === "boolean"
    • jQuery.type(3) === "number"
    • jQuery.type("test") === "string"
    • jQuery.type(function(){}) === "function"
    • jQuery.type([]) === "array"
    • jQuery.type(new Date()) === "date"
    • jQuery.type(/test/) === "regexp"
  • Everything else returns "object" as its type.

Example:

Find out if the parameter is a RegExp.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Is it a RegExp? <b></b>
<script>$("b").append( "" + jQuery.type(/test/) );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.unique/index.html0000644000175000017500000000556011654657456017215 0ustar metalmetal

jQuery.unique()

jQuery.unique( array ) Returns: Array

Description: Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.

  • version added: 1.1.3jQuery.unique( array )

    arrayThe Array of DOM elements.

The $.unique() function searches through an array of objects, sorting the array, and removing any duplicate nodes. This function only works on plain JavaScript arrays of DOM elements, and is chiefly used internally by jQuery.

As of jQuery 1.4 the results will always be returned in document order.

Example:

Removes any duplicate elements from the array of divs.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>There are 6 divs in this document.</div>
  <div></div>
  <div class="dup"></div>
  <div class="dup"></div>

  <div class="dup"></div>
  <div></div>
<script>

    var divs = $("div").get(); // unique() must take a native array

    // add 3 elements of class dup too (they are divs)
    divs = divs.concat($(".dup").get());
    $("div:eq(1)").text("Pre-unique there are " + divs.length + " elements.");

    divs = jQuery.unique(divs);
    $("div:eq(2)").text("Post-unique there are " + divs.length + " elements.")
                  .css("color", "red");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/jQuery.when/index.html0000644000175000017500000001151311654657330016632 0ustar metalmetal

jQuery.when()

jQuery.when( deferreds ) Returns: Promise

Description: Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.

  • version added: 1.5jQuery.when( deferreds )

    deferredsOne or more Deferred objects, or plain JavaScript objects.

If a single Deferred is passed to jQuery.when, its Promise object (a subset of the Deferred methods) is returned by the method. Additional methods of the Promise object can be called to attach callbacks, such as deferred.then. When the Deferred is resolved or rejected, usually by the code that created the Deferred originally, the appropriate callbacks will be called. For example, the jqXHR object returned by jQuery.ajax is a Deferred and can be used this way:

$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){ 
     alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});

If a single argument is passed to jQuery.when and it is not a Deferred, it will be treated as a resolved Deferred and any doneCallbacks attached will be executed immediately. The doneCallbacks are passed the original argument. In this case any failCallbacks you might set are never called since the Deferred is never rejected. For example:

$.when( { testing: 123 } ).done(
   function(x){ alert(x.testing); } /* alerts "123" */
);

In the case where multiple Deferred objects are passed to jQuery.when, the method returns the Promise from a new "master" Deferred object that tracks the aggregate state of all the Deferreds it has been passed. The method will resolve its master Deferred as soon as all the Deferreds resolve, or reject the master Deferred as soon as one of the Deferreds is rejected. If the master Deferred is resolved, it is passed the resolved values of all the Deferreds that were passed to jQuery.when. For example, when the Deferreds are jQuery.ajax() requests, the arguments will be the jqXHR objects for the requests, in the order they were given in the argument list.

In the multiple-Deferreds case where one of the Deferreds is rejected, jQuery.when immediately fires the failCallbacks for its master Deferred. Note that some of the Deferreds may still be unresolved at that point. If you need to perform additional processing for this case, such as canceling any unfinished ajax requests, you can keep references to the underlying jqXHR objects in a closure and inspect/cancel them in the failCallback.

Examples:

Example: Execute a function after two ajax requests are successful. (See the jQuery.ajax() documentation for a complete description of success and error cases for an ajax request).

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1,  a2){
    /* a1 and a2 are arguments resolved for the 
        page1 and page2 ajax requests, respectively */
   var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
   if ( /Whip It/.test(jqXHR.responseText) ) {
      alert("First page has 'Whip It' somewhere.");
   }
});

Example: Execute the function myFunc when both ajax requests are successful, or myFailure if either one has an error.

$.when($.ajax("/page1.php"), $.ajax("/page2.php"))
  .then(myFunc, myFailure);
jqapi-1.7/docs/keydown/index.html0000644000175000017500000001315411654657364016105 0ustar metalmetal

.keydown()

.keydown( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element.

  • version added: 1.0.keydown( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.keydown( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.keydown()

This method is a shortcut for .bind('keydown', handler) in the first and second variations, and .trigger('keydown') in the third.

The keydown event is sent to an element when the user first presses a key on the keyboard. It can be attached to any element, but the event is only sent to the element that has the focus. Focusable elements can vary between browsers, but form elements can always get focus so are reasonable candidates for this event type.

For example, consider the HTML:

<form>
  <input id="target" type="text" value="Hello there" />
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the input field:

$('#target').keydown(function() {
  alert('Handler for .keydown() called.');
});

Now when the insertion point is inside the field, pressing a key displays the alert:

Handler for .keydown() called.

To trigger the event manually, apply .keydown() without an argument:

$('#other').click(function() {
  $('#target').keydown();
});

After this code executes, clicks on Trigger the handler will also alert the message.

If key presses anywhere need to be caught (for example, to implement global shortcut keys on a page), it is useful to attach this behavior to the document object. Because of event bubbling, all key presses will make their way up the DOM to the document object unless explicitly stopped.

To determine which key was pressed, examine the event object that is passed to the handler function. While browsers use differing properties to store this information, jQuery normalizes the .which property so you can reliably use it to retrieve the key code. This code corresponds to a key on the keyboard, including codes for special keys such as arrows. For catching actual text entry, .keypress() may be a better choice.

Example:

Show the event object for the keydown handler when a key is pressed in the input.

<!DOCTYPE html>
<html>
<head>
  <style>
fieldset { margin-bottom: 1em; }
input { display: block; margin-bottom: .25em; }
#print-output {
  width: 100%;
}
.print-output-line {
  white-space: pre;
  padding: 5px;
  font-family: monaco, monospace;
  font-size: .7em;
}

</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
  <fieldset>
    <label for="target">Type Something:</label>
    <input id="target" type="text" />
  </fieldset>
</form>
<button id="other">
  Trigger the handler
</button>
<script type="text/javascript" src="/scripts/events.js"></script>
<script>
var xTriggered = 0;
$('#target').keydown(function(event) {
  if (event.keyCode == '13') {
     event.preventDefault();
   }
   xTriggered++;
   var msg = 'Handler for .keydown() called ' + xTriggered + ' time(s).';
  $.print(msg, 'html');
  $.print(event);
});

$('#other').click(function() {
  $('#target').keydown();
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/keypress/index.html0000644000175000017500000001531411654657364016272 0ustar metalmetal

.keypress()

.keypress( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element.

  • version added: 1.0.keypress( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.keypress( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.keypress()

Note: as the keypress event isn't covered by any official specification, the actual behavior encountered when using it may differ across browsers, browser versions, and platforms.

This method is a shortcut for .bind("keypress", handler) in the first two variations, and .trigger("keypress") in the third.

The keypress event is sent to an element when the browser registers keyboard input. This is similar to the keydown event, except in the case of key repeats. If the user presses and holds a key, a keydown event is triggered once, but separate keypress events are triggered for each inserted character. In addition, modifier keys (such as Shift) trigger keydown events but not keypress events.

A keypress event handler can be attached to any element, but the event is only sent to the element that has the focus. Focusable elements can vary between browsers, but form elements can always get focus so are reasonable candidates for this event type.

For example, consider the HTML:

<form>
  <fieldset>
    <input id="target" type="text" value="Hello there" />
  </fieldset>
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the input field:

$("#target").keypress(function() {
  alert("Handler for .keypress() called.");
});

Now when the insertion point is inside the field, pressing a key displays the alert:

Handler for .keypress() called.

The message repeats if the key is held down. To trigger the event manually, apply .keypress() without an argument::

$('#other').click(function() {
  $("#target").keypress();
});

After this code executes, clicks on Trigger the handler will also alert the message.

If key presses anywhere need to be caught (for example, to implement global shortcut keys on a page), it is useful to attach this behavior to the document object. Because of event bubbling, all key presses will make their way up the DOM to the document object unless explicitly stopped.

To determine which character was entered, examine the event object that is passed to the handler function. While browsers use differing properties to store this information, jQuery normalizes the .which property so you can reliably use it to retrieve the character code.

Note that keydown and keyup provide a code indicating which key is pressed, while keypress indicates which character was entered. For example, a lowercase "a" will be reported as 65 by keydown and keyup, but as 97 by keypress. An uppercase "A" is reported as 65 by all events. Because of this distinction, when catching special keystrokes such as arrow keys, .keydown() or .keyup() is a better choice.

Example:

Show the event object when a key is pressed in the input. Note: This demo relies on a simple $.print() plugin (http://api.jquery.com/scripts/events.js) for the event object's output.

<!DOCTYPE html>
<html>
<head>
  <style>
fieldset { margin-bottom: 1em; }
input { display: block; margin-bottom: .25em; }
#print-output {
  width: 100%;
}
.print-output-line {
  white-space: pre;
  padding: 5px;
  font-family: monaco, monospace;
  font-size: .7em;
}

</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
  <fieldset>
    <label for="target">Type Something:</label>
    <input id="target" type="text" />
  </fieldset>
</form>
<button id="other">
  Trigger the handler
</button>
<script src="http://api.jquery.com/scripts/events.js"></script>
<script>
var xTriggered = 0;
$("#target").keypress(function(event) {
  if ( event.which == 13 ) {
     event.preventDefault();
   }
   xTriggered++;
   var msg = "Handler for .keypress() called " + xTriggered + " time(s).";
  $.print( msg, "html" );
  $.print( event );
});

$("#other").click(function() {
  $("#target").keypress();
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/keyup/index.html0000644000175000017500000001310211654657364015553 0ustar metalmetal

.keyup()

.keyup( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element.

  • version added: 1.0.keyup( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.keyup( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.keyup()

This method is a shortcut for .bind('keyup', handler) in the first two variations, and .trigger('keyup') in the third.

The keyup event is sent to an element when the user releases a key on the keyboard. It can be attached to any element, but the event is only sent to the element that has the focus. Focusable elements can vary between browsers, but form elements can always get focus so are reasonable candidates for this event type.

For example, consider the HTML:

<form>
  <input id="target" type="text" value="Hello there" />
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the input field:

$('#target').keyup(function() {
  alert('Handler for .keyup() called.');
});

Now when the insertion point is inside the field and a key is pressed and released, the alert is displayed:

Handler for .keyup() called.

To trigger the event manually, apply .keyup() without arguments:

$('#other').click(function() {
  $('#target').keyup();
});

After this code executes, clicks on Trigger the handler will also alert the message.

If key presses anywhere need to be caught (for example, to implement global shortcut keys on a page), it is useful to attach this behavior to the document object. Because of event bubbling, all key presses will make their way up the DOM to the document object unless explicitly stopped.

To determine which key was pressed, examine the event object that is passed to the handler function. While browsers use differing properties to store this information, jQuery normalizes the .which property so you can reliably use it to retrieve the key code. This code corresponds to a key on the keyboard, including codes for special keys such as arrows. For catching actual text entry, .keypress() may be a better choice.

Example:

Show the event object for the keyup handler (using a simple $.print plugin) when a key is released in the input.

<!DOCTYPE html>
<html>
<head>
  <style>
fieldset { margin-bottom: 1em; }
input { display: block; margin-bottom: .25em; }
#print-output {
  width: 100%;
}
.print-output-line {
  white-space: pre;
  padding: 5px;
  font-family: monaco, monospace;
  font-size: .7em;
}

</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
  <fieldset>
    <label for="target">Type Something:</label>
    <input id="target" type="text" />
  </fieldset>
</form>
<button id="other">
  Trigger the handler
</button>
<script type="text/javascript" src="/scripts/events.js"></script>
<script>
var xTriggered = 0;
$('#target').keyup(function(event) {
   xTriggered++;
   var msg = 'Handler for .keyup() called ' + xTriggered + ' time(s).';
  $.print(msg, 'html');
  $.print(event);
}).keydown(function(event) {
  if (event.which == 13) {
    event.preventDefault();
  }  
});

$('#other').click(function() {
  $('#target').keyup();
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/last/index.html0000644000175000017500000000517211654657440015364 0ustar metalmetal

.last()

.last() Returns: jQuery

Description: Reduce the set of matched elements to the final one in the set.

  • version added: 1.4.last()

Given a jQuery object that represents a set of DOM elements, the .last() method constructs a new jQuery object from the last matching element.

Consider a page with a simple list on it:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
</ul>

We can apply this method to the set of list items:

$('li').last().css('background-color', 'red');

The result of this call is a red background for the final item.

Example:

Highlight the last span in a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>.highlight{background-color: yellow}</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><span>Look:</span> <span>This is some text in a paragraph.</span> <span>This is a note about it.</span></p>
<script>$("p span").last().addClass('highlight');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/last-child-selector/index.html0000644000175000017500000000475211654657424020270 0ustar metalmetal

:last-child Selector

last-child selector

version added: 1.1.4jQuery(':last-child')

Description: Selects all elements that are the last child of their parent.

While :last matches only a single element, :last-child can match more than one: one for each parent.

Example:

Finds the last span in each matched div and adds some css plus a hover state.

<!DOCTYPE html>
<html>
<head>
  <style>
  span.solast { text-decoration:line-through; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <span>John,</span>
    <span>Karl,</span>
    <span>Brandon,</span>

    <span>Sam</span>
  </div>
  <div>
    <span>Glen,</span>
    <span>Tane,</span>

    <span>Ralph,</span>
    <span>David</span>
  </div>
<script>
    $("div span:last-child")
        .css({color:"red", fontSize:"80%"})
        .hover(function () {
              $(this).addClass("solast");
            }, function () {
              $(this).removeClass("solast");
            });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/last-selector/index.html0000644000175000017500000000545611654657424017211 0ustar metalmetal

:last Selector

last selector

version added: 1.0jQuery(':last')

Description: Selects the last matched element.

Note that :last selects a single element by filtering the current jQuery collection and matching the last element within it.

Additional Notes:

  • Because :last is a jQuery extension and not part of the CSS specification, queries using :last cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :last to select elements, first select the elements using a pure CSS selector, then use .filter(":last").

Example:

Finds the last table row.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table>

    <tr><td>First Row</td></tr>
    <tr><td>Middle Row</td></tr>
    <tr><td>Last Row</td></tr>

  </table>
<script>$("tr:last").css({backgroundColor: 'yellow', fontWeight: 'bolder'});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/length/index.html0000644000175000017500000000464311654657410015701 0ustar metalmetal

.length

length Returns: Number

Description: The number of elements in the jQuery object.

  • version added: 1.0length

The number of elements currently matched. The .size() method will return the same value.

Example:

Count the divs. Click to add more.

<!DOCTYPE html>
<html>
<head>
  <style>

  body { cursor:pointer; }
  div { width:50px; height:30px; margin:5px; float:left;
        background:green; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span></span>
  <div></div>
<script>$(document.body).click(function () {
      $(document.body).append($("<div>"));
      var n = $("div").length;
      $("span").text("There are " + n + " divs." +
                     "Click to add more.");
    }).trigger('click'); // trigger the click to start</script>

</body>
</html>

Demo:

jqapi-1.7/docs/live/index.html0000644000175000017500000002361211654657364015364 0ustar metalmetal

.live()

.live( events, handler ) Returns: jQuery

Description: Attach an event handler for all elements which match the current selector, now and in the future.

  • version added: 1.3.live( events, handler )

    eventsA string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.

    handlerA function to execute at the time the event is triggered.

  • version added: 1.4.live( events, data, handler )

    eventsA string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.

    dataA map of data that will be passed to the event handler.

    handlerA function to execute at the time the event is triggered.

  • version added: 1.4.3.live( events-map )

    events-mapA map of one or more JavaScript event types and functions to execute for them.

As of jQuery 1.7, the .live() method is deprecated. Use .on() to attach event handlers. Users of older versions of jQuery should use .delegate() in preference to .live().

This method provides a means to attach delegated event handlers to the document element of a page, which simplifies the use of event handlers when content is dynamically added to a page. See the discussion of direct versus delegated events in the .on() method for more information.

Rewriting the .live() method in terms of its successors is straightforward; these are templates for equivalent calls for all three event attachment methods:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

The events argument can either be a space-separated list of event type names and optional namespaces, or an event-map of event names strings and handlers. The data argument is optional and can be omitted. For example, the following three method calls are functionally equivalent (but see below for more effective and performant ways to attach delegated event handlers):

$("a.offsite").live("click", function(){ alert("Goodbye!"); });                // jQuery 1.3+
$(document).delegate("a.offsite", "click", function(){ alert("Goodbye!"); });  // jQuery 1.4.3+
$(document).on("click", "a.offsite", function(){ alert("Goodbye!"); });        // jQuery 1.7+

Use of the .live() method is no longer recommended since later versions of jQuery offer better methods that do not have its drawbacks. In particular, the following issues arise with the use of .live():

  • jQuery attempts to retrieve the elements specified by the selector before calling the .live() method, which may be time-consuming on large documents.
  • Chaining methods is not supported. For example, $("a").find(".offsite, .external").live( ... ); is not valid and does not work as expected.
  • Since all .live() events are attached at the document element, events take the longest and slowest possible path before they are handled.
  • Calling event.stopPropagation() in the event handler is ineffective in stopping event handlers attached lower in the document; the event has already propagated to document.
  • The .live() method interacts with other event methods in ways that can be surprising, e.g., $(document).unbind("click") removes all click handlers attached by any call to .live()!

For pages still using .live(), this list of version-specific differences may be helpful:

  • Before jQuery 1.7, to stop further handlers from executing after one bound using .live(), the handler must return false. Calling .stopPropagation() will not accomplish this.
  • As of jQuery 1.4 the .live() method supports custom events as well as all JavaScript events that bubble.
  • In jQuery 1.3.x only the following JavaScript events could be bound: click, dblclick, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, and mouseup.

Examples:

Example: Click a paragraph to add another. Note that .live() binds the click event to all paragraphs - even new ones.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; font-weight:bold; cursor:pointer;
      padding:5px; }
  p.over { background: #ccc; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Click me!</p>

  <span></span>
<script>
$("p").live("click", function(){
  $(this).after("<p>Another paragraph!</p>");
});
</script>

</body>
</html>

Demo:

Example: Cancel a default action and prevent it from bubbling up by returning false.

$("a").live("click", function() { return false; })

Example: Cancel only the default action by using the preventDefault method.

$("a").live("click", function(event){
  event.preventDefault();
});

Example: Bind custom events with .live().

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; }
  span { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Has an attached custom event.</p>
  <button>Trigger custom event</button>
  <span style="display:none;"></span>
  
<script>
$("p").live("myCustomEvent", function(e, myName, myValue) {
  $(this).text("Hi there!");
  $("span").stop().css("opacity", 1)
           .text("myName = " + myName)
           .fadeIn(30).fadeOut(1000);
});
$("button").click(function () {
  $("p").trigger("myCustomEvent");
});
</script>

</body>
</html>

Demo:

Example: Use a map to bind multiple live event handlers. Note that .live() calls the click, mouseover, and mouseout event handlers for all paragraphs--even new ones.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; font-weight:bold; cursor:pointer; padding:5px; }
  p.over { background: #ccc; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Click me!</p>
  <span></span>
  
<script>
$("p").live({
  click: function() {
    $(this).after("<p>Another paragraph!</p>");
  },
  mouseover: function() {
    $(this).addClass("over");
  },
  mouseout: function() {
    $(this).removeClass("over");
  }
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/load/index.html0000644000175000017500000002026411654657320015334 0ustar metalmetal

.load()

.load( url [, data] [, complete(responseText, textStatus, XMLHttpRequest)] ) Returns: jQuery

Description: Load data from the server and place the returned HTML into the matched element.

  • version added: 1.0.load( url [, data] [, complete(responseText, textStatus, XMLHttpRequest)] )

    urlA string containing the URL to which the request is sent.

    dataA map or string that is sent to the server with the request.

    complete(responseText, textStatus, XMLHttpRequest)A callback function that is executed when the request completes.

This method is the simplest way to fetch data from the server. It is roughly equivalent to $.get(url, data, success) except that it is a method rather than global function and it has an implicit callback function. When a successful response is detected (i.e. when textStatus is "success" or "notmodified"), .load() sets the HTML contents of the matched element to the returned data. This means that most uses of the method can be quite simple:

$('#result').load('ajax/test.html');

The provided callback, if any, is executed after this post-processing has been performed:

$('#result').load('ajax/test.html', function() {
  alert('Load was performed.');
});

In the two examples above, if the current document does not contain an element with an ID of "result," the .load() method is not executed.

The POST method is used if data is provided as an object; otherwise, GET is assumed.

Note: The event handling suite also has a method named .load(). Which one is fired depends on the set of arguments passed.

Loading Page Fragments

The .load() method, unlike $.get(), allows us to specify a portion of the remote document to be inserted. This is achieved with a special syntax for the url parameter. If one or more space characters are included in the string, the portion of the string following the first space is assumed to be a jQuery selector that determines the content to be loaded.

We could modify the example above to use only part of the document that is fetched:

$('#result').load('ajax/test.html #container');

When this method executes, it retrieves the content of ajax/test.html, but then jQuery parses the returned document to find the element with an ID of container. This element, along with its contents, is inserted into the element with an ID of result, and the rest of the retrieved document is discarded.

jQuery uses the browser's .innerHTML property to parse the retrieved document and insert it into the current document. During this process, browsers often filter elements from the document such as <html>, <title>, or <head> elements. As a result, the elements retrieved by .load() may not be exactly the same as if the document were retrieved directly by the browser.

Note: When calling .load() using a URL without a suffixed selector expression, the content is passed to .html() prior to scripts being removed. This executes the script blocks before they are discarded. If .load() is however called with a selector expression appended to the URL, the scripts are stripped out prior to the DOM being updated, which is why they are never executed. An example of both cases can be seen below:

Here, any JavaScript loaded into #a as a part of the document will successfully execute.

$('#a').load('article.html');

However in this case, script blocks in the document being loaded into #b are stripped out prior to being executed:

$('#b').load('article.html #target');

Additional Notes:

  • Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.

Examples:

Example: Load the main page's footer navigation into an ordered list.

<!DOCTYPE html>
<html>
<head>
  <style>
 body{ font-size: 12px; font-family: Arial; }
 </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<b>Footer navigation:</b>
<ol id="new-nav"></ol>

<script>
  $("#new-nav").load("/ #jq-footerNavigation li");
</script>

</body>
</html>

Demo:

Example: Display a notice if the Ajax request encounters an error.

<!DOCTYPE html>
<html>
<head>
  <style>
  body{ font-size: 12px; font-family: Arial; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<b>Successful Response (should be blank):</b>
<div id="success"></div>
<b>Error Response:</b>
<div id="error"></div>
  
<script>
$("#success").load("/not-here.php", function(response, status, xhr) {
  if (status == "error") {
    var msg = "Sorry but there was an error: ";
    $("#error").html(msg + xhr.status + " " + xhr.statusText);
  }
});
  </script>

</body>
</html>

Demo:

Example: Load the feeds.html file into the div with the ID of feeds.

$("#feeds").load("feeds.html");

Result:

<div id="feeds"><b>45</b> feeds found.</div>

Example: pass arrays of data to the server.

$("#objectID").load("test.php", { 'choices[]': ["Jon", "Susan"] } );

Example: Same as above, but will POST the additional parameters to the server and a callback that is executed when the server is finished responding.

$("#feeds").load("feeds.php", {limit: 25}, function(){
alert("The last 25 entries in the feed have been loaded");
});
jqapi-1.7/docs/load-event/index.html0000644000175000017500000001076411654657366016471 0ustar metalmetal

.load()

.load( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "load" JavaScript event.

  • version added: 1.0.load( handler(eventObject) )

    handler(eventObject)A function to execute when the event is triggered.

  • version added: 1.4.3.load( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

This method is a shortcut for .bind('load', handler).

The load event is sent to an element when it and all sub-elements have been completely loaded. This event can be sent to any element associated with a URL: images, scripts, frames, iframes, and the window object.

For example, consider a page with a simple image:

<img src="book.png" alt="Book" id="book" />

The event handler can be bound to the image:

$('#book').load(function() {
  // Handler for .load() called.
});

As soon as the image has been loaded, the handler is called.

In general, it is not necessary to wait for all images to be fully loaded. If code can be executed earlier, it is usually best to place it in a handler sent to the .ready() method.

The Ajax module also has a method named .load(). Which one is fired depends on the set of arguments passed.

Caveats of the load event when used with images

A common challenge developers attempt to solve using the .load() shortcut is to execute a function when an image (or collection of images) have completely loaded. There are several known caveats with this that should be noted. These are:

  • It doesn't work consistently nor reliably cross-browser
  • It doesn't fire correctly in WebKit if the image src is set to the same src as before
  • It doesn't correctly bubble up the DOM tree
  • Can cease to fire for images that already live in the browser's cache

Note: The .live() and .delegate() methods cannot be used to detect the load event of an iframe. The load event does not correctly bubble up the parent document and the event.target isn't set by Firefox, IE9 or Chrome, which is required to do event delegation.

Examples:

Example: Run a function when the page is fully loaded including graphics.

$(window).load(function () {
  // run code
});

Example: Add the class bigImg to all images with height greater then 100 upon each image load.

$('img.userIcon').load(function(){
  if($(this).height() > 100) {
    $(this).addClass('bigImg');
  }
});
jqapi-1.7/docs/lt-selector/index.html0000644000175000017500000000726511654657426016667 0ustar metalmetal

:lt() Selector

lt selector

version added: 1.0jQuery(':lt(index)')

  • index
    Zero-based index.

Description: Select all elements at an index less than index within the matched set.

index-related selectors

The index-related selectors (including this "less than" selector) filter the set of elements that have matched the expressions that precede them. They narrow the set down based on the order of the elements within this matched set. For example, if elements are first selected with a class selector (.myclass) and four elements are returned, these elements are given indices 0 through 3 for the purposes of these selectors.

Note that since JavaScript arrays use 0-based indexing, these selectors reflect that fact. This is why $('.myclass:lt(1)') selects the first element in the document with the class myclass, rather than selecting no elements. In contrast, :nth-child(n) uses 1-based indexing to conform to the CSS specification.

Additional Notes:

  • Because :lt() is a jQuery extension and not part of the CSS specification, queries using :lt() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").slice(0, index) instead.

Example:

Finds TDs less than the one with the 4th index (TD#4).

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">

  <tr><td>TD #0</td><td>TD #1</td><td>TD #2</td></tr>
  <tr><td>TD #3</td><td>TD #4</td><td>TD #5</td></tr>

  <tr><td>TD #6</td><td>TD #7</td><td>TD #8</td></tr>
</table>
<script>$("td:lt(4)").css("color", "red");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/map/index.html0000644000175000017500000001517411654657442015203 0ustar metalmetal

.map()

.map( callback(index, domElement) ) Returns: jQuery

Description: Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.

  • version added: 1.2.map( callback(index, domElement) )

    callback(index, domElement)A function object that will be invoked for each element in the current set.

As the return value is a jQuery-wrapped array, it's very common to get() the returned object to work with a basic array.

The .map() method is particularly useful for getting or setting the value of a collection of elements. Consider a form with a set of checkboxes in it:

<form method="post" action="">
  <fieldset>
    <div>
      <label for="two">2</label>
      <input type="checkbox" value="2" id="two" name="number[]">
    </div>
    <div>
      <label for="four">4</label>
      <input type="checkbox" value="4" id="four" name="number[]">
    </div>
    <div>
      <label for="six">6</label>
      <input type="checkbox" value="6" id="six" name="number[]">
    </div>
    <div>
      <label for="eight">8</label>
      <input type="checkbox" value="8" id="eight" name="number[]">
    </div>
  </fieldset>
</form>

We can get a comma-separated list of checkbox IDs:

$(':checkbox').map(function() {
  return this.id;
}).get().join(',');

The result of this call is the string, "two,four,six,eight".

Within the callback function, this refers to the current DOM element for each iteration. The function can return an individual data item or an array of data items to be inserted into the resulting set. If an array is returned, the elements inside the array are inserted into the set. If the function returns null or undefined, no element will be inserted.

Examples:

Example: Build a list of all the values within a form.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><b>Values: </b></p>
  <form>
    <input type="text" name="name" value="John"/>

    <input type="text" name="password" value="password"/>
    <input type="text" name="url" value="http://ejohn.org/"/>

  </form>
<script>
    $("p").append( $("input").map(function(){
      return $(this).val();
    }).get().join(", ") );

</script>

</body>
</html>

Demo:

Example: A contrived example to show some functionality.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { font-size:16px; }
  ul { float:left; margin:0 30px; color:blue; }
  #results { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li>First</li>
    <li>Second</li>
    <li>Third</li>

    <li>Fourth</li>
    <li>Fifth</li>
  </ul>
  <ul id="results">

  </ul>
<script>
var mappedItems = $("li").map(function (index) {
  var replacement = $("<li>").text($(this).text()).get(0);
  if (index == 0) {
    /* make the first item all caps */
    $(replacement).text($(replacement).text().toUpperCase());
  } else if (index == 1 || index == 3) {
    /* delete the second and fourth items */
    replacement = null;
  } else if (index == 2) {
    /* make two of the third item and add some text */
    replacement = [replacement,$("<li>").get(0)];
    $(replacement[0]).append("<b> - A</b>");
    $(replacement[1]).append("Extra <b> - B</b>");
  }

  /* replacement will be a dom element, null, 
     or an array of dom elements */
  return replacement;
});
$("#results").append(mappedItems);

</script>

</body>
</html>

Demo:

Example: Equalize the heights of the divs.

<!DOCTYPE html>
<html>
<head>
  <style>
div { width: 40px; float:left; }
input { clear:left}
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  

<input type="button" value="equalize div heights">

<div style="background:red; height: 40px; "></div>
<div style="background:green; height: 70px;"></div>
<div style="background:blue; height: 50px; "></div>


<script>
$.fn.equalizeHeights = function() {
  var maxHeight = this.map(function(i,e) {
    return $(e).height();
  }).get();
  
  return this.height( Math.max.apply(this, maxHeight) );
};

$('input').click(function(){
  $('div').equalizeHeights();
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mousedown/index.html0000644000175000017500000001230511654657366016444 0ustar metalmetal

.mousedown()

.mousedown( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element.

  • version added: 1.0.mousedown( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mousedown( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mousedown()

This method is a shortcut for .bind('mousedown', handler) in the first variation, and .trigger('mousedown') in the second.

The mousedown event is sent to an element when the mouse pointer is over the element, and the mouse button is pressed. Any HTML element can receive this event.

For example, consider the HTML:

<div id="target">
  Click here
</div>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to any <div>:

$('#target').mousedown(function() {
  alert('Handler for .mousedown() called.');
});

Now if we click on this element, the alert is displayed:

Handler for .mousedown() called.

We can also trigger the event when a different element is clicked:

$('#other').click(function() {
  $('#target').mousedown();
});

After this code executes, clicks on Trigger the handler will also alert the message.

The mousedown event is sent when any mouse button is clicked. To act only on specific buttons, we can use the event object's which property. Not all browsers support this property (Internet Explorer uses button instead), but jQuery normalizes the property so that it is safe to use in any browser. The value of which will be 1 for the left button, 2 for the middle button, or 3 for the right button.

This event is primarily useful for ensuring that the primary button was used to begin a drag operation; if ignored, strange results can occur when the user attempts to use a context menu. While the middle and right buttons can be detected with these properties, this is not reliable. In Opera and Safari, for example, right mouse button clicks are not detectable by default.

If the user clicks on an element, drags away from it, and releases the button, this is still counted as a mousedown event. This sequence of actions is treated as a "canceling" of the button press in most user interfaces, so it is usually better to use the click event unless we know that the mousedown event is preferable for a particular situation.

Example:

Show texts when mouseup and mousedown event triggering.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Press mouse and release here.</p>

<script>
    $("p").mouseup(function(){
      $(this).append('<span style="color:#F00;">Mouse up.</span>');
    }).mousedown(function(){
      $(this).append('<span style="color:#00F;">Mouse down.</span>');
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mouseenter/index.html0000644000175000017500000001352611654657366016620 0ustar metalmetal

.mouseenter()

.mouseenter( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.

  • version added: 1.0.mouseenter( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mouseenter( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mouseenter()

This method is a shortcut for .bind('mouseenter', handler) in the first two variations, and .trigger('mouseenter') in the third.

The mouseenter JavaScript event is proprietary to Internet Explorer. Because of the event's general utility, jQuery simulates this event so that it can be used regardless of browser. This event is sent to an element when the mouse pointer enters the element. Any HTML element can receive this event.

For example, consider the HTML:

<div id="outer">
  Outer
  <div id="inner">
    Inner
  </div>
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The event handler can be bound to any element:

$('#outer').mouseenter(function() {
  $('#log').append('<div>Handler for .mouseenter() called.</div>');
});

Now when the mouse pointer moves over the Outer <div>, the message is appended to <div id="log">. You can also trigger the event when another element is clicked:

$('#other').click(function() {
  $('#outer').mouseenter();
});

After this code executes, clicks on Trigger the handler will also append the message.

The mouseenter event differs from mouseover in the way it handles event bubbling. If mouseover were used in this example, then when the mouse pointer moved over the Inner element, the handler would be triggered. This is usually undesirable behavior. The mouseenter event, on the other hand, only triggers its handler when the mouse enters the element it is bound to, not a descendant. So in this example, the handler is triggered when the mouse enters the Outer element, but not the Inner element.

Example:

Show texts when mouseenter and mouseout event triggering. mouseover fires when the pointer moves into the child element as well, while mouseenter fires only when the pointer moves into the bound element.

<!DOCTYPE html>
<html>
<head>
  <style>
div.out {
width:40%;
height:120px;
margin:0 15px;
background-color:#D6EDFC;
float:left;
}
div.in {
width:60%;
height:60%;
background-color:#FFCC00;
margin:10px auto;
}
p {
line-height:1em;
margin:0;
padding:0;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div class="out overout"><p>move your mouse</p><div class="in overout"><p>move your mouse</p><p>0</p></div><p>0</p></div>

<div class="out enterleave"><p>move your mouse</p><div class="in enterleave"><p>move your mouse</p><p>0</p></div><p>0</p></div>


<script>
    var i = 0;
    $("div.overout").mouseover(function(){
      $("p:first",this).text("mouse over");
      $("p:last",this).text(++i);
    }).mouseout(function(){
      $("p:first",this).text("mouse out");
    });

    var n = 0;
    $("div.enterleave").mouseenter(function(){
      $("p:first",this).text("mouse enter");
      $("p:last",this).text(++n);
    }).mouseleave(function(){
      $("p:first",this).text("mouse leave");
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mouseleave/index.html0000644000175000017500000001354011654657366016573 0ustar metalmetal

.mouseleave()

.mouseleave( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.

  • version added: 1.0.mouseleave( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mouseleave( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mouseleave()

This method is a shortcut for .bind('mouseleave', handler) in the first two variations, and .trigger('mouseleave') in the third.

The mouseleave JavaScript event is proprietary to Internet Explorer. Because of the event's general utility, jQuery simulates this event so that it can be used regardless of browser. This event is sent to an element when the mouse pointer leaves the element. Any HTML element can receive this event.

For example, consider the HTML:

<div id="outer">
  Outer
  <div id="inner">
    Inner
  </div>
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The event handler can be bound to any element:

$('#outer').mouseleave(function() {
  $('#log').append('<div>Handler for .mouseleave() called.</div>');
});

Now when the mouse pointer moves out of the Outer <div>, the message is appended to <div id="log">. You can also trigger the event when another element is clicked:

$('#other').click(function() {
  $('#outer').mouseleave();
});

After this code executes, clicks on Trigger the handler will also append the message.

The mouseleave event differs from mouseout in the way it handles event bubbling. If mouseout were used in this example, then when the mouse pointer moved out of the Inner element, the handler would be triggered. This is usually undesirable behavior. The mouseleave event, on the other hand, only triggers its handler when the mouse leaves the element it is bound to, not a descendant. So in this example, the handler is triggered when the mouse leaves the Outer element, but not the Inner element.

Example:

Show number of times mouseout and mouseleave events are triggered. mouseout fires when the pointer moves out of child element as well, while mouseleave fires only when the pointer moves out of the bound element.

<!DOCTYPE html>
<html>
<head>
  <style>
div.out {
width:40%;
height:120px;
margin:0 15px;
background-color:#D6EDFC;
float:left;
}
div.in {
width:60%;
height:60%;
background-color:#FFCC00;
margin:10px auto;
}
p {
line-height:1em;
margin:0;
padding:0;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div class="out overout"><p>move your mouse</p><div class="in overout"><p>move your mouse</p><p>0</p></div><p>0</p></div>

<div class="out enterleave"><p>move your mouse</p><div class="in enterleave"><p>move your mouse</p><p>0</p></div><p>0</p></div>


<script>
    var i = 0;
    $("div.overout").mouseover(function(){
      $("p:first",this).text("mouse over");
    }).mouseout(function(){
      $("p:first",this).text("mouse out");
      $("p:last",this).text(++i);
    });

    var n = 0;
    $("div.enterleave").mouseenter(function(){
      $("p:first",this).text("mouse enter");
    }).mouseleave(function(){
      $("p:first",this).text("mouse leave");
      $("p:last",this).text(++n);
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mousemove/index.html0000644000175000017500000001524011654657366016444 0ustar metalmetal

.mousemove()

.mousemove( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element.

  • version added: 1.0.mousemove( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mousemove( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mousemove()

This method is a shortcut for .bind('mousemove', handler) in the first two variations, and .trigger('mousemove') in the third.

The mousemove event is sent to an element when the mouse pointer moves inside the element. Any HTML element can receive this event.

For example, consider the HTML:

<div id="target">
  Move here
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The event handler can be bound to the target:

$("#target").mousemove(function(event) {
  var msg = "Handler for .mousemove() called at ";
  msg += event.pageX + ", " + event.pageY;
  $("#log").append("<div>" + msg + "</div>");
});

Now when the mouse pointer moves within the target button, the messages are appended to <div id="log">:

Handler for .mousemove() called at (399, 48)
Handler for .mousemove() called at (398, 46)
Handler for .mousemove() called at (397, 44)
Handler for .mousemove() called at (396, 42)

To trigger the event manually, apply .mousemove() without an argument:

$("#other").click(function() {
  $("#target").mousemove();
});

After this code executes, clicks on the Trigger button will also append the message:

Handler for .mousemove() called at (undefined, undefined)

When tracking mouse movement, you usually need to know the actual position of the mouse pointer. The event object that is passed to the handler contains some information about the mouse coordinates. Properties such as .clientX, .offsetX, and .pageX are available, but support for them differs between browsers. Fortunately, jQuery normalizes the .pageX and .pageY properties so that they can be used in all browsers. These properties provide the X and Y coordinates of the mouse pointer relative to the top-left corner of the document, as illustrated in the example output above.

Keep in mind that the mousemove event is triggered whenever the mouse pointer moves, even for a pixel. This means that hundreds of events can be generated over a very small amount of time. If the handler has to do any significant processing, or if multiple handlers for the event exist, this can be a serious performance drain on the browser. It is important, therefore, to optimize mousemove handlers as much as possible, and to unbind them as soon as they are no longer needed.

A common pattern is to bind the mousemove handler from within a mousedown hander, and to unbind it from a corresponding mouseup handler. If implementing this sequence of events, remember that the mouseup event might be sent to a different HTML element than the mousemove event was. To account for this, the mouseup handler should typically be bound to an element high up in the DOM tree, such as <body>.

Example:

Show the mouse coordinates when the mouse is moved over the yellow div. Coordinates are relative to the window, which in this case is the iframe.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:220px; height:170px; margin;10px; margin-right:50px;
        background:yellow; border:2px groove; float:right; }
  p { margin:0; margin-left:10px; color:red; width:220px;
      height:120px; padding-top:70px;
      float:left; font-size:14px; }
  span { display:block; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>   
    Try scrolling too.
    <span>Move the mouse over the div.</span>
    <span>&nbsp;</span>
  </p>

  <div></div>
<script>
    $("div").mousemove(function(e){
      var pageCoords = "( " + e.pageX + ", " + e.pageY + " )";
      var clientCoords = "( " + e.clientX + ", " + e.clientY + " )";
      $("span:first").text("( e.pageX, e.pageY ) - " + pageCoords);
      $("span:last").text("( e.clientX, e.clientY ) - " + clientCoords);
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mouseout/index.html0000644000175000017500000001276111654657366016312 0ustar metalmetal

.mouseout()

.mouseout( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element.

  • version added: 1.0.mouseout( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mouseout( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mouseout()

This method is a shortcut for .bind('mouseout', handler) in the first two variation, and .trigger('mouseout') in the third.

The mouseout event is sent to an element when the mouse pointer leaves the element. Any HTML element can receive this event.

For example, consider the HTML:

<div id="outer">
  Outer
  <div id="inner">
    Inner
  </div>
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The event handler can be bound to any element:

$('#outer').mouseout(function() {
  $('#log').append('Handler for .mouseout() called.');
});

Now when the mouse pointer moves out of the Outer <div>, the message is appended to <div id="log">. To trigger the event manually, apply .mouseout() without an argument::

$('#other').click(function() {
  $('#outer').mouseout();
});

After this code executes, clicks on Trigger the handler will also append the message.

This event type can cause many headaches due to event bubbling. For instance, when the mouse pointer moves out of the Inner element in this example, a mouseout event will be sent to that, then trickle up to Outer. This can trigger the bound mouseout handler at inopportune times. See the discussion for .mouseleave() for a useful alternative.

Example:

Show the number of times mouseout and mouseleave events are triggered. mouseout fires when the pointer moves out of the child element as well, while mouseleave fires only when the pointer moves out of the bound element.

<!DOCTYPE html>
<html>
<head>
  <style>
div.out {
width:40%;
height:120px;
margin:0 15px;
background-color:#D6EDFC;
float:left;
}
div.in {
width:60%;
height:60%;
background-color:#FFCC00;
margin:10px auto;
}
p {
line-height:1em;
margin:0;
padding:0;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div class="out overout"><p>move your mouse</p><div class="in overout"><p>move your mouse</p><p>0</p></div><p>0</p></div>

<div class="out enterleave"><p>move your mouse</p><div class="in enterleave"><p>move your mouse</p><p>0</p></div><p>0</p></div>


<script>
    var i = 0;
    $("div.overout").mouseout(function(){
      $("p:first",this).text("mouse out");
      $("p:last",this).text(++i);
    }).mouseover(function(){
      $("p:first",this).text("mouse over");
    });

    var n = 0;
    $("div.enterleave").bind("mouseenter",function(){
      $("p:first",this).text("mouse enter");
    }).bind("mouseleave",function(){
      $("p:first",this).text("mouse leave");
      $("p:last",this).text(++n);
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mouseover/index.html0000644000175000017500000001250411654657370016444 0ustar metalmetal

.mouseover()

.mouseover( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element.

  • version added: 1.0.mouseover( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mouseover( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mouseover()

This method is a shortcut for .bind('mouseover', handler) in the first two variations, and .trigger('mouseover') in the third.

The mouseover event is sent to an element when the mouse pointer enters the element. Any HTML element can receive this event.

For example, consider the HTML:

<div id="outer">
  Outer
  <div id="inner">
    Inner
  </div>
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The event handler can be bound to any element:

$('#outer').mouseover(function() {
  $('#log').append('<div>Handler for .mouseover() called.</div>');
});

Now when the mouse pointer moves over the Outer <div>, the message is appended to <div id="log">. We can also trigger the event when another element is clicked:

$('#other').click(function() {
  $('#outer').mouseover();
});

After this code executes, clicks on Trigger the handler will also append the message.

This event type can cause many headaches due to event bubbling. For instance, when the mouse pointer moves over the Inner element in this example, a mouseover event will be sent to that, then trickle up to Outer. This can trigger our bound mouseover handler at inopportune times. See the discussion for .mouseenter() for a useful alternative.

Example:

Show the number of times mouseover and mouseenter events are triggered. mouseover fires when the pointer moves into the child element as well, while mouseenter fires only when the pointer moves into the bound element.

<!DOCTYPE html>
<html>
<head>
  <style>
div.out { width:40%; height:120px; margin:0 15px;
          background-color:#D6EDFC; float:left; }
div.in {  width:60%; height:60%; 
          background-color:#FFCC00; margin:10px auto; }
p { line-height:1em; margin:0; padding:0; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div class="out overout">
  <span>move your mouse</span>
  <div class="in">
  </div>
</div>

<div class="out enterleave">
  <span>move your mouse</span>
  <div class="in">
  </div>
</div>

<script>
  var i = 0;
  $("div.overout").mouseover(function() {
    i += 1;
    $(this).find("span").text( "mouse over x " + i );
  }).mouseout(function(){
    $(this).find("span").text("mouse out ");
  });

  var n = 0;
  $("div.enterleave").mouseenter(function() {
    n += 1;
    $(this).find("span").text( "mouse enter x " + n );
  }).mouseleave(function() {
    $(this).find("span").text("mouse leave");
  });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/mouseup/index.html0000644000175000017500000001052711654657370016120 0ustar metalmetal

.mouseup()

.mouseup( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element.

  • version added: 1.0.mouseup( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.mouseup( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.mouseup()

This method is a shortcut for .bind('mouseup', handler) in the first variation, and .trigger('mouseup') in the second.

The mouseup event is sent to an element when the mouse pointer is over the element, and the mouse button is released. Any HTML element can receive this event.

For example, consider the HTML:

<div id="target">
  Click here
</div>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to any <div>:

$('#target').mouseup(function() {
  alert('Handler for .mouseup() called.');
});

Now if we click on this element, the alert is displayed:

Handler for .mouseup() called.

We can also trigger the event when a different element is clicked:

$('#other').click(function() {
  $('#target').mouseup();
});

After this code executes, clicks on Trigger the handler will also alert the message.

If the user clicks outside an element, drags onto it, and releases the button, this is still counted as a mouseup event. This sequence of actions is not treated as a button press in most user interfaces, so it is usually better to use the click event unless we know that the mouseup event is preferable for a particular situation.

Example:

Show texts when mouseup and mousedown event triggering.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Press mouse and release here.</p>

<script>
    $("p").mouseup(function(){
      $(this).append('<span style="color:#F00;">Mouse up.</span>');
    }).mousedown(function(){
      $(this).append('<span style="color:#00F;">Mouse down.</span>');
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/multiple-attribute-selector/index.html0000644000175000017500000000442611654657426022100 0ustar metalmetal

Multiple Attribute Selector [name="value"][name2="value2"]

attributeMultiple selector

version added: 1.0jQuery('[attributeFilter1][attributeFilter2][attributeFilterN]')

  • attributeFilter1
    An attribute filter.
    attributeFilter2
    Another attribute filter, reducing the selection even more
    attributeFilterN
    As many more attribute filters as necessary

Description: Matches elements that match all of the specified attribute filters.

Example:

Finds all inputs that have an id attribute and whose name attribute ends with man and sets the value.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <input id="man-news" name="man-news" />

  <input name="milkman" />
  <input id="letterman" name="new-letterman" />
  <input name="newmilk" />
<script>$('input[id][name$="man"]').val('only this one');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/multiple-selector/index.html0000644000175000017500000000740211654657426020074 0ustar metalmetal

Multiple Selector (“selector1, selector2, selectorN”)

multiple selector

version added: 1.0jQuery('selector1, selector2, selectorN')

  • selector1
    Any valid selector.
    selector2
    Another valid selector.
    selectorN
    As many more valid selectors as you like.

Description: Selects the combined results of all the specified selectors.

You can specify any number of selectors to combine into a single result. This multiple expression combinator is an efficient way to select disparate elements. The order of the DOM elements in the returned jQuery object may not be identical, as they will be in document order. An alternative to this combinator is the .add() method.

Examples:

Example: Finds the elements that match any of these three selectors.

<!DOCTYPE html>
<html>
<head>
  <style>

  div,span,p {
    width: 126px;
    height: 60px;
    float:left;
    padding: 3px;
    margin: 2px;
    background-color: #EEEEEE;
    font-size:14px;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>div</div>

  <p class="myClass">p class="myClass"</p>
  <p class="notMyClass">p class="notMyClass"</p>
  <span>span</span>
<script>$("div,span,p.myClass").css("border","3px solid red");</script>

</body>
</html>

Demo:

Example: Show the order in the jQuery object.

<!DOCTYPE html>
<html>
<head>
  <style>
  b { color:red; font-size:16px; display:block; clear:left; }
  div,span,p { width: 40px; height: 40px; float:left;
               margin: 10px; background-color: blue; 
               padding:3px; color:white; 
             }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>span</span>

  <p>p</p>
  <p>p</p>
  <div>div</div>
  <span>span</span>

  <p>p</p>
  <div>div</div>
  <b></b>
<script>
    var list = $("div,p,span").map(function () {
      return this.tagName;
    }).get().join(", ");
    $("b").append(document.createTextNode(list));
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/next/index.html0000644000175000017500000001070611654657442015400 0ustar metalmetal

.next()

.next( [selector] ) Returns: jQuery

Description: Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.

  • version added: 1.0.next( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .next() method allows us to search through the immediately following sibling of these elements in the DOM tree and construct a new jQuery object from the matching elements.

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the immediately following sibling matches the selector, it remains in the newly constructed jQuery object; otherwise, it is excluded.

Consider a page with a simple list on it:

<ul>
   <li>list item 1</li>
   <li>list item 2</li>
   <li class="third-item">list item 3</li>
   <li>list item 4</li>
   <li>list item 5</li>
</ul>

If we begin at the third item, we can find the element which comes just after it:

$('li.third-item').next().css('background-color', 'red');

The result of this call is a red background behind item 4. Since we do not supply a selector expression, this following element is unequivocally included as part of the object. If we had supplied one, the element would be tested for a match before it was included.

Examples:

Example: Find the very next sibling of each disabled button and change its text "this button is disabled".

<!DOCTYPE html>
<html>
<head>
  <style>

  span { color:blue; font-weight:bold; }
  button { width:100px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div><button disabled="disabled">First</button> - <span></span></div>
  <div><button>Second</button> - <span></span></div>

  <div><button disabled="disabled">Third</button> - <span></span></div>
<script>$("button[disabled]").next().text("this button is disabled");</script>

</body>
</html>

Demo:

Example: Find the very next sibling of each paragraph. Keep only the ones with a class "selected".

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>

  <p class="selected">Hello Again</p>
  <div><span>And Again</span></div>
<script>$("p").next(".selected").css("background", "yellow");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/next-adjacent-Selector/index.html0000644000175000017500000000472011654657426020726 0ustar metalmetal

Next Adjacent Selector (“prev + next”)

next adjacent selector

version added: 1.0jQuery('prev + next')

  • prev
    Any valid selector.
    next
    A selector to match the element that is next to the first selector.

Description: Selects all next elements matching "next" that are immediately preceded by a sibling "prev".

One important point to consider with both the next adjacent sibling selector (prev + next) and the general sibling selector (prev ~ siblings) is that the elements on either side of the combinator must share the same parent.

Example:

Finds all inputs that are next to a label.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>

    <label>Name:</label>
    <input name="name" />
    <fieldset>
      <label>Newsletter:</label>

      <input name="newsletter" />
    </fieldset>
  </form>
  <input name="none" />
<script>$("label + input").css("color", "blue").val("Labeled!")</script>

</body>
</html>

Demo:

jqapi-1.7/docs/next-siblings-selector/index.html0000644000175000017500000000602011654657430021015 0ustar metalmetal

Next Siblings Selector (“prev ~ siblings”)

next siblings selector

version added: 1.0jQuery('prev ~ siblings')

  • prev
    Any valid selector.
    siblings
    A selector to filter elements that are the following siblings of the first selector.

Description: Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector.

The notable difference between (prev + next) and (prev ~ siblings) is their respective reach. While the former reaches only to the immediately following sibling element, the latter extends that reach to all following sibling elements.

Example:

Finds all divs that are siblings after the element with #prev as its id. Notice the span isn't selected since it is not a div and the "niece" isn't selected since it is a child of a sibling, not an actual sibling.

<!DOCTYPE html>
<html>
<head>
  <style>

  div,span {
    display:block;
    width:80px;
    height:80px;
    margin:5px;
    background:#bbffaa;
    float:left;
    font-size:14px;
  }
  div#small {
    width:60px;
    height:25px;
    font-size:12px;
    background:#fab;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>div (doesn't match since before #prev)</div>
  <span id="prev">span#prev</span>
  <div>div sibling</div>

  <div>div sibling <div id="small">div niece</div></div>
  <span>span sibling (not div)</span>
  <div>div sibling</div>
<script>$("#prev ~ div").css("border", "3px groove blue");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/nextAll/index.html0000644000175000017500000001074011654657442016027 0ustar metalmetal

.nextAll()

.nextAll( [selector] ) Returns: jQuery

Description: Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.

  • version added: 1.2.nextAll( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .nextAll() method allows us to search through the successors of these elements in the DOM tree and construct a new jQuery object from the matching elements.

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a simple list on it:

<ul>
   <li>list item 1</li>
   <li>list item 2</li>
   <li class="third-item">list item 3</li>
   <li>list item 4</li>
   <li>list item 5</li>
</ul>

If we begin at the third item, we can find the elements which come after it:

$('li.third-item').nextAll().css('background-color', 'red');

The result of this call is a red background behind items 4 and 5. Since we do not supply a selector expression, these following elements are unequivocally included as part of the object. If we had supplied one, the elements would be tested for a match before they were included.

Examples:

Example: Locate all the divs after the first and give them a class.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { width: 80px; height: 80px; background: #abc; 
        border: 2px solid black; margin: 10px; float: left; }
  div.after { border-color: red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>first</div>
  <div>sibling<div>child</div></div>
  <div>sibling</div>

  <div>sibling</div>
<script>$("div:first").nextAll().addClass("after");</script>

</body>
</html>

Demo:

Example: Locate all the paragraphs after the second child in the body and give them a class.

<!DOCTYPE html>
<html>
<head>
  <style>
  div, p { width: 60px; height: 60px; background: #abc;
           border: 2px solid black; margin: 10px; float: left; }
  .after { border-color: red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>p</p>

  <div>div</div>
  <p>p</p>
  <p>p</p>
  <div>div</div>

  <p>p</p>
  <div>div</div>
<script>
    $(":nth-child(1)").nextAll("p").addClass("after");
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/nextUntil/index.html0000644000175000017500000001073011654657442016411 0ustar metalmetal

.nextUntil()

.nextUntil( [selector] [, filter] ) Returns: jQuery

Description: Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.

  • version added: 1.4.nextUntil( [selector] [, filter] )

    selectorA string containing a selector expression to indicate where to stop matching following sibling elements.

    filterA string containing a selector expression to match elements against.

  • version added: 1.6.nextUntil( [element] [, filter] )

    elementA DOM node or jQuery object indicating where to stop matching following sibling elements.

    filterA string containing a selector expression to match elements against.

Given a selector expression that represents a set of DOM elements, the .nextUntil() method searches through the successors of these elements in the DOM tree, stopping when it reaches an element matched by the method's argument. The new jQuery object that is returned contains all following siblings up to but not including the one matched by the .nextUntil() argument.

If the selector is not matched or is not supplied, all following siblings will be selected; in these cases it selects the same elements as the .nextAll() method does when no filter selector is provided.

As of jQuery 1.6, A DOM node or jQuery object, instead of a selector, may be passed to the .nextUntil() method.

The method optionally accepts a selector expression for its second argument. If this argument is supplied, the elements will be filtered by testing whether they match it.

Example:

Find the siblings that follow <dt id="term-2"> up to the next <dt> and give them a red background color. Also, find <dd> siblings that follow <dt id="term-1"> up to <dt id="term-3"> and give them a green text color.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <dl>
  <dt id="term-1">term 1</dt>
  <dd>definition 1-a</dd>
  <dd>definition 1-b</dd>
  <dd>definition 1-c</dd>
  <dd>definition 1-d</dd>

  <dt id="term-2">term 2</dt>
  <dd>definition 2-a</dd>
  <dd>definition 2-b</dd>
  <dd>definition 2-c</dd>

  <dt id="term-3">term 3</dt>
  <dd>definition 3-a</dd>
  <dd>definition 3-b</dd>
</dl>
<script>  
$("#term-2").nextUntil("dt")
  .css("background-color", "red");

var term3 = document.getElementById("term-3");
$("#term-1").nextUntil(term3, "dd")
  .css("color", "green");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/not/index.html0000644000175000017500000001417011654657444015223 0ustar metalmetal

.not()

.not( selector ) Returns: jQuery

Description: Remove elements from the set of matched elements.

  • version added: 1.0.not( selector )

    selectorA string containing a selector expression to match elements against.

  • version added: 1.0.not( elements )

    elementsOne or more DOM elements to remove from the matched set.

  • version added: 1.4.not( function(index) )

    function(index)A function used as a test for each element in the set. this is the current DOM element.

Given a jQuery object that represents a set of DOM elements, the .not() method constructs a new jQuery object from a subset of the matching elements. The supplied selector is tested against each element; the elements that don't match the selector will be included in the result.

Consider a page with a simple list on it:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
</ul>

We can apply this method to the set of list items:

$('li').not(':even').css('background-color', 'red');

The result of this call is a red background for items 2 and 4, as they do not match the selector (recall that :even and :odd use 0-based indexing).

Removing Specific Elements

The second version of the .not() method allows us to remove elements from the matched set, assuming we have found those elements previously by some other means. For example, suppose our list had an id applied to one of its items:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li id="notli">list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
</ul>

We can fetch the third list item using the native JavaScript getElementById() function, then remove it from a jQuery object:

$('li').not(document.getElementById('notli'))
  .css('background-color', 'red');

This statement changes the color of items 1, 2, 4, and 5. We could have accomplished the same thing with a simpler jQuery expression, but this technique can be useful when, for example, other libraries provide references to plain DOM nodes.

As of jQuery 1.4, the .not() method can take a function as its argument in the same way that .filter() does. Elements for which the function returns true are excluded from the filtered set; all other elements are included.

Examples:

Example: Adds a border to divs that are not green or blue.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:50px; height:50px; margin:10px; float:left;
        background:yellow; border:2px solid white; }
  .green { background:#8f8; }
  .gray { background:#ccc; }
  #blueone { background:#99f; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div id="blueone"></div>
  <div></div>
  <div class="green"></div>

  <div class="green"></div>
  <div class="gray"></div>
  <div></div>
<script>
    $("div").not(".green, #blueone")
            .css("border-color", "red");

</script>

</body>
</html>

Demo:

Example: Removes the element with the ID "selected" from the set of all paragraphs.

$("p").not( $("#selected")[0] )

Example: Removes the element with the ID "selected" from the set of all paragraphs.

$("p").not("#selected")

Example: Removes all elements that match "div p.selected" from the total set of all paragraphs.

$("p").not($("div p.selected"))
jqapi-1.7/docs/not-selector/index.html0000644000175000017500000000531511654657430017035 0ustar metalmetal

:not() Selector

not selector

version added: 1.0jQuery(':not(selector)')

  • selector
    A selector with which to filter by.

Description: Selects all elements that do not match the given selector.

All selectors are accepted inside :not(), for example: :not(div a) and :not(div,a).

Additional Notes

The .not() method will end up providing you with more readable selections than pushing complex selectors or variables into a :not() selector filter. In most cases, it is a better choice.

Example:

Finds all inputs that are not checked and highlights the next sibling span. Notice there is no change when clicking the checkboxes since no click events have been linked.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
  <input type="checkbox" name="a" />
  <span>Mary</span>
</div>

<div>
  <input type="checkbox" name="b" />
  <span>lcm</span>

</div>
<div>
  <input type="checkbox" name="c" checked="checked" />

  <span>Peter</span>
</div>
<script>
  $("input:not(:checked) + span").css("background-color", "yellow");
  $("input").attr("disabled", "disabled");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/nth-child-selector/index.html0000644000175000017500000001416711654657430020114 0ustar metalmetal

:nth-child() Selector

nth-child selector

version added: 1.1.4jQuery(':nth-child(index/even/odd/equation)')

  • index
    The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )

Description: Selects all elements that are the nth-child of their parent.

Because jQuery's implementation of :nth-child(n) is strictly derived from the CSS specification, the value of n is "1-indexed", meaning that the counting starts at 1. For all other selector expressions, however, jQuery follows JavaScript's "0-indexed" counting. Therefore, given a single <ul> containing two <li>s, $('li:nth-child(1)') selects the first <li> while $('li:eq(1)') selects the second.

The :nth-child(n) pseudo-class is easily confused with :eq(n), even though the two can result in dramatically different matched elements. With :nth-child(n), all children are counted, regardless of what they are, and the specified element is selected only if it matches the selector attached to the pseudo-class. With :eq(n) only the selector attached to the pseudo-class is counted, not limited to children of any other element, and the (n+1)th one (n is 0-based) is selected.

Further discussion of this unusual usage can be found in the W3C CSS specification.

Examples:

Example: Finds the second li in each matched ul and notes it.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { float:left; }
  span { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div><ul>
    <li>John</li>
    <li>Karl</li>
    <li>Brandon</li>

  </ul></div>
  <div><ul>
    <li>Sam</li>
  </ul></div>

  <div><ul>
    <li>Glen</li>
    <li>Tane</li>
    <li>Ralph</li>

    <li>David</li>
  </ul></div>
<script>$("ul li:nth-child(2)").append("<span> - 2nd!</span>");</script>

</body>
</html>

Demo:

Example: This is a playground to see how the selector works with different strings. Notice that this is different from the :even and :odd which have no regard for parent and just filter the list of elements to every other one. The :nth-child, however, counts the index of the child to its particular parent. In any case, it's easier to see than explain so...

<!DOCTYPE html>
<html>
<head>
  <style>
  button { display:block; font-size:12px; width:100px; }
  div { float:left; margin:10px; font-size:10px; 
        border:1px solid black; }
  span { color:blue; font-size:18px; }
  #inner { color:red; }
  td { width:50px; text-align:center; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <button>:nth-child(even)</button>
    <button>:nth-child(odd)</button>
    <button>:nth-child(3n)</button>

    <button>:nth-child(2)</button>
  </div>
  <div>
    <button>:nth-child(3n+1)</button>
    <button>:nth-child(3n+2)</button>

    <button>:even</button>
    <button>:odd</button>
  </div>
  <div><table>

    <tr><td>John</td></tr>
    <tr><td>Karl</td></tr>
    <tr><td>Brandon</td></tr>

    <tr><td>Benjamin</td></tr>
  </table></div>
  <div><table>
    <tr><td>Sam</td></tr>

  </table></div>
  <div><table>
    <tr><td>Glen</td></tr>
    <tr><td>Tane</td></tr>

    <tr><td>Ralph</td></tr>
    <tr><td>David</td></tr>
    <tr><td>Mike</td></tr>

    <tr><td>Dan</td></tr>
  </table></div>
  <span>
    tr<span id="inner"></span>

  </span>
<script>
    $("button").click(function () {
      var str = $(this).text();
      $("tr").css("background", "white");
      $("tr" + str).css("background", "#ff0000");
      $("#inner").text(str);
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/odd-selector/index.html0000644000175000017500000000606211654657430017003 0ustar metalmetal

:odd Selector

odd selector

version added: 1.0jQuery(':odd')

Description: Selects odd elements, zero-indexed. See also even.

In particular, note that the 0-based indexing means that, counter-intuitively, :odd selects the second element, fourth element, and so on within the matched set.

Additional Notes:

  • Because :odd is a jQuery extension and not part of the CSS specification, queries using :odd cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :odd to select elements, first select the elements using a pure CSS selector, then use .filter(":odd").

Example:

Finds odd table rows, matching the second, fourth and so on (index 1, 3, 5 etc.).

<!DOCTYPE html>
<html>
<head>
  <style>

  table {
    background:#f3f7f5;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">
    <tr><td>Row with Index #0</td></tr>
    <tr><td>Row with Index #1</td></tr>

    <tr><td>Row with Index #2</td></tr>
    <tr><td>Row with Index #3</td></tr>
  </table>
<script>$("tr:odd").css("background-color", "#bbbbff");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/off/index.html0000644000175000017500000001622611654657370015177 0ustar metalmetal

.off()

.off( events [, selector] [, handler] ) Returns: jQuery

Description: Remove an event handler.

  • version added: 1.7.off( events [, selector] [, handler] )

    eventsOne or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".

    selectorA selector which should match the one originally passed to .on() when attaching event handlers.

    handlerA handler function previously attached for the event(s), or the special value false.

  • version added: 1.7.off( events-map [, selector] )

    events-mapA map where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).

    selectorA selector which should match the one originally passed to .on() when attaching event handlers.

The off() method removes event handlers that were attached with .on(). See the discussion of delegated and directly bound events on that page for more information. Specific event handlers can be removed on elements by providing combinations of event names, namespaces, selectors, or handler function names. When multiple filtering arguments are given, all of the arguments provided must match for the event handler to be removed.

If a simple event name such as "click" is provided, all events of that type (both direct and delegated) are removed from the elements in the jQuery set. When writing code that will be used as a plugin, or simply when working with a large code base, best practice is to attach and remove events using namespaces so that the code will not inadvertently remove event handlers attached by other code. All events of all types in a specific namespace can be removed from an element by providing just a namespace, such as ".myPlugin". At minimum, either a namespace or event name must be provided.

To remove specific delegated event handlers, provide a selector argument. The selector string must exactly match the one passed to .on() when the event handler was attached. To remove all delegated events from an element without removing non-delegated events, use the special value "**".

A handler can also be removed by specifying the function name in the handler argument. When jQuery attaches an event handler, it assigns a unique id to the handler function. Handlers proxied by jQuery.proxy() or a similar mechanism will all have the same unique id (the proxy function), so passing proxied handlers to .off may remove more handlers than intended. In those situations it is better to attach and remove event handlers using namespaces.

As with .on(), you can pass an events-map argument instead of specifying the events and handler as separate arguments. The keys are events and/or namespaces; the values are handler functions or the special value false.

Examples:

Example: Add and remove event handlers on the colored button.

<!DOCTYPE html>
<html>
<head>
  <style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="theone">Does nothing...</button>
<button id="bind">Add Click</button>
<button id="unbind">Remove Click</button>
<div style="display:none;">Click!</div>
<script>
function aClick() {
  $("div").show().fadeOut("slow");
}
$("#bind").click(function () {
  $("body").on("click", "#theone", aClick)
    .find("#theone").text("Can Click!");
});
$("#unbind").click(function () {
  $("body").off("click", "#theone", aClick)
    .find("#theone").text("Does nothing...");
});
</script>

</body>
</html>

Demo:

Example: Remove all event handlers from all paragraphs:

$("p").off()

Example: Remove all delegated click handlers from all paragraphs:

$("p").off( "click", "**" )

Example: Remove just one previously bound handler by passing it as the third argument:

var foo = function () {
  // code to handle some kind of event
};

// ... now foo will be called when paragraphs are clicked ...
$("body").on("click", "p", foo);


// ... foo will no longer be called.
$("body").off("click", "p", foo); 

Example: Unbind all delegated event handlers by their namespace:

var validate = function () {
  // code to validate form entries
};

// delegate events under the ".validator" namespace
$("form").on("click.validator", "button", validate);

$("form").on("keypress.validator", "input[type='text']", validate); 

// remove event handlers in the ".validator" namespace

$("form").off(".validator");
jqapi-1.7/docs/offset/index.html0000644000175000017500000001556411654657332015715 0ustar metalmetal

.offset()

Contents:

.offset() Returns: Object

Description: Get the current coordinates of the first element in the set of matched elements, relative to the document.

  • version added: 1.2.offset()

The .offset() method allows us to retrieve the current position of an element relative to the document. Contrast this with .position(), which retrieves the current position relative to the offset parent. When positioning a new element on top of an existing one for global manipulation (in particular, for implementing drag-and-drop), .offset() is the more useful.

.offset() returns an object containing the properties top and left.

Note: jQuery does not support getting the offset coordinates of hidden elements or accounting for borders, margins, or padding set on the body element.

Examples:

Example: Access the offset of the second paragraph:

<!DOCTYPE html>
<html>
<head>
  <style>
p { margin-left:10px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p>2nd Paragraph</p>
<script>var p = $("p:last");
var offset = p.offset();
p.html( "left: " + offset.left + ", top: " + offset.top );</script>

</body>
</html>

Demo:

Example: Click to see the offset.

<!DOCTYPE html>
<html>
<head>
  <style>
p { margin-left:10px; color:blue; width:200px; 
    cursor:pointer; }
span { color:red; cursor:pointer; }
div.abs { width:50px; height:50px; position:absolute;
          left:220px; top:35px; background-color:green; 
          cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="result">Click an element.</div>
<p>
  This is the best way to <span>find</span> an offset.
</p>

<div class="abs">
</div>
  
<script>
$("*", document.body).click(function (e) {
  var offset = $(this).offset();
  e.stopPropagation();
  $("#result").text(this.tagName + " coords ( " + offset.left + ", " +
                                  offset.top + " )");
});

</script>

</body>
</html>

Demo:

.offset( coordinates ) Returns: jQuery

Description: Set the current coordinates of every element in the set of matched elements, relative to the document.

  • version added: 1.4.offset( coordinates )

    coordinatesAn object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.

  • version added: 1.4.offset( function(index, coords) )

    function(index, coords)A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.

The .offset() setter method allows us to reposition an element. The element's position is specified relative to the document. If the element's position style property is currently static, it will be set to relative to allow for this repositioning.

Example:

Set the offset of the second paragraph:

<!DOCTYPE html>
<html>
<head>
  <style>p { margin-left:10px; } </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p>2nd Paragraph</p>
<script>$("p:last").offset({ top: 10, left: 30 });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/offsetParent/index.html0000644000175000017500000001001111654657410017042 0ustar metalmetal

.offsetParent()

.offsetParent() Returns: jQuery

Description: Get the closest ancestor element that is positioned.

  • version added: 1.2.6.offsetParent()

Given a jQuery object that represents a set of DOM elements, the .offsetParent() method allows us to search through the ancestors of these elements in the DOM tree and construct a new jQuery object wrapped around the closest positioned ancestor. An element is said to be positioned if it has a CSS position attribute of relative, absolute, or fixed. This information is useful for calculating offsets for performing animations and placing objects on the page.

Consider a page with a basic nested list on it, with a positioned element:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii" style="position: relative;">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

If we begin at item A, we can find its positioned ancestor:

$('li.item-a').offsetParent().css('background-color', 'red');

This will change the color of list item II, which is positioned.

Example:

Find the offsetParent of item "A."

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
    <ul class="level-1">
      <li class="item-i">I</li>
      <li class="item-ii" style="position: relative;">II
        <ul class="level-2">
          <li class="item-a">A</li>
          <li class="item-b">B
            <ul class="level-3">
              <li class="item-1">1</li>
              <li class="item-2">2</li>
              <li class="item-3">3</li>
            </ul>
          </li>
          <li class="item-c">C</li>
        </ul>
      </li>
      <li class="item-iii">III</li>
    </ul>
  
<script>$('li.item-a').offsetParent().css('background-color', 'red');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/on/index.html0000644000175000017500000005432211654657370015040 0ustar metalmetal

.on()

.on( events [, selector] [, data] , handler ) Returns: jQuery

Description: Attach an event handler function for one or more events to the selected elements.

  • version added: 1.7.on( events [, selector] [, data], handler )

    eventsOne or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".

    selectorA selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.

    dataData to be passed to the handler in event.data when an event is triggered.

    handlerA function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.

  • version added: 1.7.on( events-map [, selector] [, data] )

    events-mapA map in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).

    selectorA selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.

    dataData to be passed to the handler in event.data when an event occurs.

The .on() method attaches event handlers to the currently selected set of elements in the jQuery object. As of jQuery 1.7, the .on() method provides all functionality required for attaching event handlers. For equivalents to older jQuery event methods, see .bind(), .delegate(), and .live(). To remove events bound with .on(), see .off(). To attach an event that runs only once and then removes itself, see .one()

Event names and namespaces

Any event names can be used for the events argument. jQuery will pass through the browser's standard JavaScript event types, calling the handler function when the browser generates events due to user actions such as click. In addition, the .trigger() method can trigger both standard browser event names and custom event names to call attached handlers.

An event name can be qualified by event namespaces that simplify removing or triggering the event. For example, "click.myPlugin.simple" defines both the myPlugin and simple namespaces for this particular click event. A click event handler attached via that string could be removed with .off("click.myPlugin") or .off("click.simple") without disturbing other click handlers attached to the elements. Namespaces are similar to CSS classes in that they are not hierarchical; only one name needs to match. Namespaces beginning with an underscore are reserved for jQuery's use.

In the second form of .on(), the events-map argument is a JavaScript Object, or "map". The keys are strings in the same form as the events argument with space-separated event type names and optional namespaces. The value for each key is a function (or false value) that is used as the handler instead of the final argument to the method. In other respects, the two forms are identical in their behavior as described below.

Direct and delegated events

The majority of browser events bubble, or propagate, from the deepest, innermost element (the event target) in the document where they occur all the way up to the body and the document element. In Internet Explorer 8 and lower, a few events such as change and submit do not natively bubble but jQuery patches these to bubble and create consistent cross-browser behavior. The focus and blur events are specified by the W3C to not bubble, but jQuery defines cross-browser focusin and focusout events that do bubble.

If selector is omitted or is null, the event handler is referred to as direct or directly-bound. The handler is called every time an event occurs on the selected elements, whether it occurs directly on the element or bubbles from a descendant (inner) element.

When a selector is provided, the event handler is referred to as delegated. The handler is not called when the event occurs directly on the bound element, but only for descendants (inner elements) that match the selector. jQuery bubbles the event from the event target up to the element where the handler is attached (i.e., innermost to outermost element) and runs the handler for any elements along that path matching the selector.

Event handlers are bound only to the currently selected elements; they must exist on the page at the time your code makes the call to .on(). To ensure the elements are present and can be selected, perform event binding inside a document ready handler for elements that are in the HTML markup on the page. If new HTML is being injected into the page, select the elements and attach event handlers after the new HTML is placed into the page. Or, use delegated events to attach an event handler, as described next.

Delegated events have the advantage that they can process events from descendant elements that are added to the document at a later time. By picking an element that is guaranteed to be present at the time the delegated event handler is attached, you can use delegated events to avoid the need to frequently attach and remove event handlers. This element could be the container element of a view in a Model-View-Controller design, for example, or document if the event handler wants to monitor all bubbling events in the document. The document element is available in the head of the document before loading any other HTML, so it is safe to attach events there without waiting for the document to be ready.

In addition to their ability to handle events on descendant elements not yet created, another advantage of delegated events is their potential for much lower overhead when many elements must be monitored. On a data table with 1,000 rows in its tbody, this example attaches a handler to 1,000 elements:

$("#dataTable tbody tr").on("click", function(event){
	alert($(this).text());
});

A delegated-events approach attaches an event handler to only one element, the tbody, and the event only needs to bubble up one level (from the clicked tr to tbody):

$("#dataTable tbody").on("click", "tr", function(event){
	alert($(this).text());
});

The event handler and its environment

The handler argument is a function (or the value false, see below), and is required unless the events-map form is used. You can provide an anonymous handler function at the point of the .on() call, as the examples have done above, or declare a named function and pass its name:

function notify() { alert("clicked"); }
$("button").on("click", notify);

When the browser triggers an event or other JavaScript calls jQuery's .trigger() method, jQuery passes the handler an event object it can use to analyze and change the status of the event. This object is a normalized subset of data provided by the browser; the browser's unmodified native event object is available in event.originalEvent. For example, event.type contains the event name (e.g., "resize") and event.target indicates the deepest (innermost) element where the event occurred.

By default, most events bubble up from the original event target to the document element. At each element along the way, jQuery calls any matching event handlers that have been attached. A handler can prevent the event from bubbling further up the document tree (and thus prevent handlers on those elements from running) by calling event.stopPropagation(). Any other handlers attached on the current element will run however. To prevent that, call event.stopImmediatePropagation(). (Event handlers bound to an element are called in the same order that they were bound.)

Similarly, a handler can call event.preventDefault() to cancel any default action that the browser may have for this event; for example, the default action on a click event is to follow the link. Not all browser events have default actions, and not all default actions can be canceled. See the W3C Events Specification for details.

Returning false from an event handler will automatically call event.stopPropagation() and event.preventDefault(). A false value can also be passed for the handler as a shorthand for function(){ return false; }. So, $("a.disabled").on("click", false); attaches an event handler to all links with class "disabled" that prevents them from being followed when they are clicked and also stops the event from bubbling.

When jQuery calls a handler, the this keyword is a reference to the element where the event is being delivered; for directly bound events this is the element where the event was attached and for delegated events this is an element matching selector. (Note that this may not be equal to event.target if the event has bubbled from a descendant element.) To create a jQuery object from the element so that it can be used with jQuery methods, use $(this).

Passing data to the handler

If a data argument is provided to .on() and is not null or undefined, it is passed to the handler in the event.data property each time an event is triggered. The data argument can be any type, but if a string is used the selector must either be provided or explicitly passed as null so that the data is not mistaken for a selector. Best practice is to use an object (map) so that multiple values can be passed as properties.

The same event handler can be bound to an element multiple times. This is especially useful when the event.data feature is being used, or when other unique data resides in a closure around the event handler function. For example:

function greet(event) { alert("Hello "+event.data.name); }
$("button").on("click", { name: "Karl" }, greet);
$("button").on("click", { name: "Addy" }, greet);

The above code will generate two different alerts when the button is clicked.

As an alternative or in addition to the data argument provided to the .on() method, you can also pass data to an event handler using a second argument to .trigger() or .triggerHandler().

Event performance

In most cases, an event such as click occurs infrequently and performance is not a significant concern. However, high frequency events such as mousemove or scroll can fire dozens of times per second, and in those cases it becomes more important to use events judiciously. Performance can be increased by reducing the amount of work done in the handler itself, caching information needed by the handler rather than recalculating it, or by rate-limiting the number of actual page updates using setTimeout.

Attaching many delegated event handlers near the top of the document tree can degrade performance. Each time the event occurs, jQuery must compare all selectors of all attached events of that type to every element in the path from the event target up to the top of the document. For best performance, attach delegated events at a document location as close as possible to the target elements. Avoid excessive use of document or document.body for delegated events on large documents.

jQuery can process simple selectors of the form tag#id.class very quickly when they are used to filter delegated events. So, "#myForm", "a.external", and "button" are all fast selectors. Delegated events that use more complex selectors, particularly hierarchical ones, can be several times slower--although they are still fast enough for most applications. Hierarchical selectors can often be avoided simply by attaching the handler to a more appropriate point in the document. For example, instead of $("body").on("click", "#commentForm .addNew", addComment) use $("#commentForm").on("click", ".addNew", addComment).

Additional notes

There are shorthand methods for some events such as .click() that can be used to attach or trigger event handlers. For a complete list of shorthand methods, see the events category.

Although not recommended, the pseudo-event-name "hover" can be used as a shorthand for "mouseenter mouseleave". Do not confuse it with the .hover() method, which accepts two functions. There is only one handler function attached by the pseudo-event-name "hover"; the handler should examine event.type to determine whether the event is mouseenter or mouseleave.

jQuery's event system requires that a DOM element allow attaching data via a property on the element, so that events can be tracked and delivered. The object, embed, and applet elements cannot attach data, and therefore cannot have jQuery events bound to them.

The error event on the window object uses nonstandard arguments and return value conventions, so it is not supported by jQuery. Instead, assign a handler function directly to the window.onerror property.

In Internet Explorer 8 and lower, the paste and reset events do not bubble and are not supported for use with delegation. They can be used when the event handler is directly attached to the element generating the event.

Examples:

Example: Display a paragraph's text in an alert when it is clicked:

$("p").on("click", function(){
alert( $(this).text() );
});

Example: Pass data to the event handler, which is specified here by name:

function myHandler(event) {
alert(event.data.foo);
}
$("p").on("click", {foo: "bar"}, myHandler)

Example: Cancel a form submit action and prevent the event from bubbling up by returning false:

$("form").on("submit", false)

Example: Cancel only the default action by using .preventDefault().

$("form").on("submit", function(event) {
  event.preventDefault();
});

Example: Stop submit events from bubbling without preventing form submit, using .stopPropagation().

$("form").on("submit", function(event) {
  event.stopPropagation();
});

Example: Attach and trigger custom (non-browser) events.

<!DOCTYPE html>
<html>
<head>
  <style>
p { color:red; }
span { color:blue; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Has an attached custom event.</p>
<button>Trigger custom event</button>
<span style="display:none;"></span>
<script>

$("p").on("myCustomEvent", function(e, myName, myValue){
  $(this).text(myName + ", hi there!");
  $("span").stop().css("opacity", 1)
    .text("myName = " + myName)
    .fadeIn(30).fadeOut(1000);
});
$("button").click(function () {
  $("p").trigger("myCustomEvent", [ "John" ]);
});

</script>

</body>
</html>

Demo:

Example: Attach multiple event handlers simultaneously using a map.

$("div.test").on({
  click: function(){
    $(this).addClass("active");
  },
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
});

Example: Click any paragraph to add another after it. Note that .on() allows a click event on any paragraph--even new ones--since the event is handled by the ever-present body element after it bubbles to there.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; font-weight:bold; cursor:pointer; 
      padding:5px; }
  p.over { background: #ccc; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Click me!</p>

  <span></span>
<script>
    var count = 0;
    $("body").on("click", "p", function(){
      $(this).after("<p>Another paragraph! "+(++count)+"</p>");
    });
</script>

</body>
</html>

Demo:

Example: Display each paragraph's text in an alert box whenever it is clicked:

$("body").on("click", "p", function(){
  alert( $(this).text() );
});

Example: Cancel a link's default action using the preventDefault method.

$("body").on("click", "a", function(event){
  event.preventDefault();
});

Example: Attach handlers for custom (non-browser) event names.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; }
  span { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Has an attached custom event.</p>
  <button>Trigger custom event</button>
  <span style="display:none;"></span>
<script>

    $("body").on("myCustomEvent", "p", function(e, myName, myValue){
      $(this).text("Hi there!");
      $("span").stop().css("opacity", 1)
               .text("myName = " + myName)
               .fadeIn(30).fadeOut(1000);
    });
    $("button").click(function () {
      $("p").trigger("myCustomEvent");
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/one/index.html0000644000175000017500000001366311654657370015210 0ustar metalmetal

.one()

.one( events [, data] , handler ) Returns: jQuery

Description: Attach a handler to an event for the elements. The handler is executed at most once per element.

  • version added: 1.1.one( events [, data], handler )

    eventsA string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.

    dataA map of data that will be passed to the event handler.

    handlerA function to execute at the time the event is triggered.

  • version added: 1.7.one( events [, selector] [, data], handler )

    eventsOne or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".

    selectorA selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.

    dataData to be passed to the handler in event.data when an event is triggered.

    handlerA function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.

  • version added: 1.7.one( events-map [, selector] [, data] )

    events-mapA map in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).

    selectorA selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.

    dataData to be passed to the handler in event.data when an event occurs.

The first form of this method is identical to .bind(), except that the handler is unbound after its first invocation. The second two forms, introduced in jQuery 1.7, are identical to .on() except that the handler is removed after its first invocation. For example:

$("#foo").one("click", function() {
  alert("This will be displayed only once.");
});

After the code is executed, a click on the element with ID foo will display the alert. Subsequent clicks will do nothing. This code is equivalent to:

$("#foo").bind("click", function( event ) {
  alert("This will be displayed only once.");
  $(this).unbind( event );
});

In other words, explicitly calling .unbind() from within a regularly-bound handler has exactly the same effect.

If the first argument contains more than one space-separated event types, the event handler is called once for each event type.

Examples:

Example: Tie a one-time click to each div.

<!DOCTYPE html>
<html>
<head>
  <style>
div { width:60px; height:60px; margin:5px; float:left;
background:green; border:10px outset; 
cursor:pointer; }
p { color:red; margin:0; clear:left; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>

<p>Click a green square...</p>

<script>
var n = 0;
$("div").one("click", function() {
  var index = $("div").index(this);
  $(this).css({ 
    borderStyle:"inset",
    cursor:"auto"
  });
  $("p").text("Div at index #" + index + " clicked." +
      "  That's " + ++n + " total clicks.");
});

</script>

</body>
</html>

Demo:

Example: To display the text of all paragraphs in an alert box the first time each of them is clicked:

$("p").one("click", function(){
alert( $(this).text() );
});
jqapi-1.7/docs/only-child-selector/index.html0000644000175000017500000000454611654657430020304 0ustar metalmetal

:only-child Selector

only-child selector

version added: 1.1.4jQuery(':only-child')

Description: Selects all elements that are the only child of their parent.

If the parent has other child elements, nothing is matched.

Example:

Change the text and add a border for each button that is the only child of its parent.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:100px; height:80px; margin:5px; float:left; background:#b9e }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
  <button>Sibling!</button>
  <button>Sibling!</button>
</div>

<div>
  <button>Sibling!</button>
</div>
<div>
  None
</div>

<div>
  <button>Sibling!</button>
  <button>Sibling!</button>
  <button>Sibling!</button>

</div>
<div>
  <button>Sibling!</button>
</div>
<script>
  $("div button:only-child").text("Alone").css("border", "2px blue solid");
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/outerHeight/index.html0000644000175000017500000000601711654657332016707 0ustar metalmetal

.outerHeight()

.outerHeight( [includeMargin] ) Returns: Integer

Description: Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin.

  • version added: 1.2.6.outerHeight( [includeMargin] )

    includeMarginA Boolean indicating whether to include the element's margin in the calculation.

The top and bottom padding and border are always included in the .outerHeight() calculation; if the includeMargin argument is set to true, the margin (top and bottom) is also included.

This method is not applicable to window and document objects; for these, use .height() instead.

Example:

Get the outerHeight of a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>p { margin:10px;padding:5px;border:2px solid #666; } </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p></p>
<script>var p = $("p:first");
$("p:last").text( "outerHeight:" + p.outerHeight() + " , outerHeight(true):" + p.outerHeight(true) );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/outerWidth/index.html0000644000175000017500000000606511654657332016561 0ustar metalmetal

.outerWidth()

.outerWidth( [includeMargin] ) Returns: Integer

Description: Get the current computed width for the first element in the set of matched elements, including padding and border.

  • version added: 1.2.6.outerWidth( [includeMargin] )

    includeMarginA Boolean indicating whether to include the element's margin in the calculation.

Returns the width of the element, along with left and right padding, border, and optionally margin, in pixels.

If includeMargin is omitted or false, the padding and border are included in the calculation; if true, the margin is also included.

This method is not applicable to window and document objects; for these, use .width() instead.

Example:

Get the outerWidth of a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin:10px;padding:5px;border:2px solid #666; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p></p>
<script>var p = $("p:first");
$("p:last").text( "outerWidth:" + p.outerWidth()+ " , outerWidth(true):" + p.outerWidth(true) );

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/parent/index.html0000644000175000017500000001164211654657444015715 0ustar metalmetal

.parent()

.parent( [selector] ) Returns: jQuery

Description: Get the parent of each element in the current set of matched elements, optionally filtered by a selector.

  • version added: 1.0.parent( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .parent() method allows us to search through the parents of these elements in the DOM tree and construct a new jQuery object from the matching elements. The .parents() and .parent() methods are similar, except that the latter only travels a single level up the DOM tree.

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a basic nested list on it:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

If we begin at item A, we can find its parents:

$('li.item-a').parent().css('background-color', 'red');

The result of this call is a red background for the level-2 list. Since we do not supply a selector expression, the parent element is unequivocally included as part of the object. If we had supplied one, the element would be tested for a match before it was included.

Examples:

Example: Shows the parent of each element as (parent > child). Check the View Source to see the raw html.

<!DOCTYPE html>
<html>
<head>
  <style>
  div,p { margin:10px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>div, 
    <span>span, </span>
    <b>b </b>

  </div>
  <p>p, 
    <span>span, 
      <em>em </em>
    </span>
  </p>

  <div>div, 
    <strong>strong, 
      <span>span, </span>
      <em>em, 
        <b>b, </b>
      </em>

    </strong>
    <b>b </b>
  </div>
<script>

    $("*", document.body).each(function () {
      var parentTag = $(this).parent().get(0).tagName;
      $(this).prepend(document.createTextNode(parentTag + " > "));
    });
</script>

</body>
</html>

Demo:

Example: Find the parent element of each paragraph with a class "selected".

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div><p>Hello</p></div>

  <div class="selected"><p>Hello Again</p></div>

<script>$("p").parent(".selected").css("background", "yellow");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/parent-selector/index.html0000644000175000017500000000664711654657432017541 0ustar metalmetal

:parent Selector

parent selector

version added: 1.0jQuery(':parent')

Description: Select all elements that are the parent of another element, including text nodes.

This is the inverse of :empty.

One important thing to note regarding the use of :parent (and :empty) is that child elements include text nodes.

The W3C recommends that the <p> element have at least one child node, even if that child is merely text (see http://www.w3.org/TR/html401/struct/text.html#edef-P). Some other elements, on the other hand, are empty (i.e. have no children) by definition: <input>, <img>, <br>, and <hr>, for example.

Additional Notes:

  • Because :parent is a jQuery extension and not part of the CSS specification, queries using :parent cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :parent to select elements, first select the elements using a pure CSS selector, then use .filter(":parent").

Example:

Finds all tds with children, including text.

<!DOCTYPE html>
<html>
<head>
  <style>
  td { width:40px; background:green; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">

  <tr><td>Value 1</td><td></td></tr>
  <tr><td>Value 2</td><td></td></tr>

</table>
<script>$("td:parent").fadeTo(1500, 0.3);</script>

</body>
</html>

Demo:

jqapi-1.7/docs/parents/index.html0000644000175000017500000001322111654657444016073 0ustar metalmetal

.parents()

.parents( [selector] ) Returns: jQuery

Description: Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.

  • version added: 1.0.parents( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .parents() method allows us to search through the ancestors of these elements in the DOM tree and construct a new jQuery object from the matching elements ordered from immediate parent on up; the elements are returned in order from the closest parent to the outer ones. The .parents() and .parent() methods are similar, except that the latter only travels a single level up the DOM tree.

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a basic nested list on it:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

If we begin at item A, we can find its ancestors:

$('li.item-a').parents().css('background-color', 'red');

The result of this call is a red background for the level-2 list, item II, and the level-1 list (and on up the DOM tree all the way to the <html> element). Since we do not supply a selector expression, all of the ancestors are part of the returned jQuery object. If we had supplied one, only the matching items among these would be included.

Examples:

Example: Find all parent elements of each b.

<!DOCTYPE html>
<html>
<head>
  <style>
  b, span, p, html body {
    padding: .5em;
    border: 1px solid;
  }
  b { color:blue; }
  strong { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <p>
      <span>
        <b>My parents are: </b>
      </span>

    </p>
  </div>
<script>
var parentEls = $("b").parents()
            .map(function () { 
                  return this.tagName; 
                })
            .get().join(", ");
$("b").append("<strong>" + parentEls + "</strong>");

</script>

</body>
</html>

Demo:

Example: Click to find all unique div parent elements of each span.

<!DOCTYPE html>
<html>
<head>
  <style>

  p, div, span {margin:2px; padding:1px; }
  div { border:2px white solid; }
  span { cursor:pointer; font-size:12px; }
  .selected { color:blue; }
  b { color:red; display:block; font-size:14px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
    <div>
      <div><span>Hello</span></div>
      <span>Hello Again</span>

    </div>
    <div>
      <span>And Hello Again</span>
    </div>
  </p>

  <b>Click Hellos to toggle their parents.</b>
<script>
function showParents() {
  $("div").css("border-color", "white");
  var len = $("span.selected")
                   .parents("div")
                   .css("border", "2px red solid")
                   .length;
  $("b").text("Unique div parents: " + len);
}
$("span").click(function () {
  $(this).toggleClass("selected");
  showParents();
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/parentsUntil/index.html0000644000175000017500000001106511654657444017113 0ustar metalmetal

.parentsUntil()

.parentsUntil( [selector] [, filter] ) Returns: jQuery

Description: Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.

  • version added: 1.4.parentsUntil( [selector] [, filter] )

    selectorA string containing a selector expression to indicate where to stop matching ancestor elements.

    filterA string containing a selector expression to match elements against.

  • version added: 1.6.parentsUntil( [element] [, filter] )

    elementA DOM node or jQuery object indicating where to stop matching ancestor elements.

    filterA string containing a selector expression to match elements against.

Given a selector expression that represents a set of DOM elements, the .parentsUntil() method traverses through the ancestors of these elements until it reaches an element matched by the selector passed in the method's argument. The resulting jQuery object contains all of the ancestors up to but not including the one matched by the .parentsUntil() selector.

If the selector is not matched or is not supplied, all ancestors will be selected; in these cases it selects the same elements as the .parents() method does when no selector is provided.

As of jQuery 1.6, A DOM node or jQuery object, instead of a selector, may be used for the first .parentsUntil() argument.

The method optionally accepts a selector expression for its second argument. If this argument is supplied, the elements will be filtered by testing whether they match it.

Example:

Find the ancestors of <li class="item-a"> up to <ul class="level-1"> and give them a red background color. Also, find ancestors of <li class="item-2"> that have a class of "yes" up to <ul class="level-1"> and give them a green border.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<ul class="level-1 yes">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2 yes">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>
<script>
$("li.item-a").parentsUntil(".level-1")
  .css("background-color", "red");

$("li.item-2").parentsUntil( $("ul.level-1"), ".yes" )
  .css("border", "3px solid green");
    
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/password-selector/index.html0000644000175000017500000000711111654657432020075 0ustar metalmetal

:password Selector

password selector

version added: 1.0jQuery(':password')

Description: Selects all elements of type password.

$(':password') is equivalent to $('[type=password]'). As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':password') is equivalent to $('*:password'), so $('input:password') should be used instead.

Additional Notes:

  • Because :password is a jQuery extension and not part of the CSS specification, queries using :password cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="password"] instead.

Example:

Finds all password inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:45px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option<option/></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div>
  </div>
<script>

    var input = $("input:password").css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/position/index.html0000644000175000017500000000557111654657332016270 0ustar metalmetal

.position()

.position() Returns: Object

Description: Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.

  • version added: 1.2.position()

The .position() method allows us to retrieve the current position of an element relative to the offset parent. Contrast this with .offset(), which retrieves the current position relative to the document. When positioning a new element near another one and within the same containing DOM element, .position() is the more useful.

Returns an object containing the properties top and left.

Example:

Access the position of the second paragraph:

<!DOCTYPE html>
<html>
<head>
  <style>

  div { padding: 15px;}
  p { margin-left:10px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div>
  <p>Hello</p>
</div>
<p></p>

<script>
var p = $("p:first");
var position = p.position();
$("p:last").text( "left: " + position.left + ", top: " + position.top );
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/prepend/index.html0000644000175000017500000001674111654657402016060 0ustar metalmetal

.prepend()

.prepend( content [, content] ) Returns: jQuery

Description: Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.

  • version added: 1.0.prepend( content [, content] )

    contentDOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.

    contentOne or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.

  • version added: 1.4.prepend( function(index, html) )

    function(index, html)A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.

The .prepend() method inserts the specified content as the first child of each element in the jQuery collection (To insert it as the last child, use .append()).

The .prepend() and .prependTo() methods perform the same task. The major difference is in the syntax—specifically, in the placement of the content and target. With .prepend(), the selector expression preceding the method is the container into which the content is inserted. With .prependTo(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted into the target container.

Consider the following HTML:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

You can create content and insert it into several elements at once:

$('.inner').prepend('<p>Test</p>');

Each <div class="inner"> element gets this new content:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">
    <p>Test</p>
    Hello
  </div>
  <div class="inner">
    <p>Test</p>
    Goodbye
  </div>
</div>

You can also select an element on the page and insert it into another:

$('.container').prepend($('h2'));

If a single element selected this way is inserted elsewhere, it will be moved into the target (not cloned):

<div class="container">
    <h2>Greetings</h2>
    <div class="inner">Hello</div>
    <div class="inner">Goodbye</div>
</div>

Important: If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first.

Additional Arguments

Similar to other content-adding methods such as .append() and .before(), .prepend() also supports passing in multiple arguments as input. Supported input includes DOM elements, jQuery objects, HTML strings, and arrays of DOM elements.

For example, the following will insert two new <div>s and an existing <div> as the first three child nodes of the body:

var $newdiv1 = $('<div id="object1"/>'),
    newdiv2 = document.createElement('div'),
    existingdiv1 = document.getElementById('foo');

$('body').prepend($newdiv1, [newdiv2, existingdiv1]);

Since .prepend() can accept any number of additional arguments, the same result can be achieved by passing in the three <div>s as three separate arguments, like so: $('body').prepend($newdiv1, newdiv2, existingdiv1). The type and number of arguments will largely depend on how you collect the elements in your code.

Examples:

Example: Prepends some HTML to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>there, friend!</p>

<p>amigo!</p>
<script>$("p").prepend("<b>Hello </b>");</script>

</body>
</html>

Demo:

Example: Prepends a DOM Element to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>is what I'd say</p>
<p>is what I said</p>
<script>$("p").prepend(document.createTextNode("Hello "));</script>

</body>
</html>

Demo:

Example: Prepends a jQuery object (similar to an Array of DOM Elements) to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p> is what was said.</p><b>Hello</b>
<script>$("p").prepend( $("b") );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/prependTo/index.html0000644000175000017500000001001711654657402016351 0ustar metalmetal

.prependTo()

.prependTo( target ) Returns: jQuery

Description: Insert every element in the set of matched elements to the beginning of the target.

  • version added: 1.0.prependTo( target )

    targetA selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.

The .prepend() and .prependTo() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .prepend(), the selector expression preceding the method is the container into which the content is inserted. With .prependTo(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted into the target container.

Consider the following HTML:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

We can create content and insert it into several elements at once:

$('<p>Test</p>').prependTo('.inner');

Each inner <div> element gets this new content:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">
    <p>Test</p>
    Hello
  </div>
  <div class="inner">
    <p>Test</p>
    Goodbye
  </div>
</div>

We can also select an element on the page and insert it into another:

$('h2').prependTo($('.container'));

If an element selected this way is inserted elsewhere, it will be moved into the target (not cloned):

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first.

Example:

Prepends all spans to the element with the ID "foo"

<!DOCTYPE html>
<html>
<head>
  <style>div { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="foo">FOO!</div>

  <span>I have something to say... </span>
<script>$("span").prependTo("#foo"); // check prepend() examples</script>

</body>
</html>

Demo:

jqapi-1.7/docs/prev/index.html0000644000175000017500000001154511654657444015402 0ustar metalmetal

.prev()

.prev( [selector] ) Returns: jQuery

Description: Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.

  • version added: 1.0.prev( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .prev() method searches for the predecessor of each of these elements in the DOM tree and constructs a new jQuery object from the matching elements.

The method optionally accepts a selector expression of the same type that can be passed to the $() function. If the selector is supplied, the preceding element will be filtered by testing whether it match the selector.

Consider a page with a simple list on it:

<ul>
   <li>list item 1</li>
   <li>list item 2</li>
   <li class="third-item">list item 3</li>
   <li>list item 4</li>
   <li>list item 5</li>
</ul>

To select the element that comes immediately before item three:

$('li.third-item').prev().css('background-color', 'red');

The result of this call is a red background behind item 2. Since no selector expression is supplied, this preceding element is unequivocally included as part of the object. If one had been supplied, the element would be tested for a match before it was included.

If no previous sibling exists, or if the previous sibling element does not match a supplied selector, an empty jQuery object is returned.

To select all preceding sibling elements, rather than just the preceding adjacent sibling, use the .prevAll() method.

Examples:

Example: Find the very previous sibling of each div.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:40px; height:40px; margin:10px;
        float:left; border:2px blue solid; 
        padding:2px; }
  span { font-size:14px; }
  p { clear:left; margin:10px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div></div>
  <div><span>has child</span></div>

  <div></div>
  <div></div>
  <div></div>
  <div id="start"></div>

  <div></div>
  <p><button>Go to Prev</button></p>
<script>
    var $curr = $("#start");
    $curr.css("background", "#f99");
    $("button").click(function () {
      $curr = $curr.prev();
      $("div").css("background", "");
      $curr.css("background", "#f99");
    });

</script>

</body>
</html>

Demo:

Example: For each paragraph, find the very previous sibling that has a class "selected".

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div><span>Hello</span></div>

  <p class="selected">Hello Again</p>
  <p>And Again</p>
<script>$("p").prev(".selected").css("background", "yellow");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/prevAll/index.html0000644000175000017500000000707111654657444016032 0ustar metalmetal

.prevAll()

.prevAll( [selector] ) Returns: jQuery

Description: Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.

  • version added: 1.2.prevAll( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .prevAll() method searches through the predecessors of these elements in the DOM tree and construct a new jQuery object from the matching elements; the elements are returned in order beginning with the closest sibling.

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a simple list on it:

<ul>
   <li>list item 1</li>
   <li>list item 2</li>
   <li class="third-item">list item 3</li>
   <li>list item 4</li>
   <li>list item 5</li>
</ul>

If we begin at the third item, we can find the elements which come before it:

$('li.third-item').prevAll().css('background-color', 'red');

The result of this call is a red background behind items 1 and 2. Since we do not supply a selector expression, these preceding elements are unequivocally included as part of the object. If we had supplied one, the elements would be tested for a match before they were included.

Example:

Locate all the divs preceding the last div and give them a class.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { width:70px; height:70px; background:#abc; 
        border:2px solid black; margin:10px; float:left; }
  div.before { border-color: red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
<script>$("div:last").prevAll().addClass("before");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/prevUntil/index.html0000644000175000017500000001105711654657444016414 0ustar metalmetal

.prevUntil()

.prevUntil( [selector] [, filter] ) Returns: jQuery

Description: Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.

  • version added: 1.4.prevUntil( [selector] [, filter] )

    selectorA string containing a selector expression to indicate where to stop matching preceding sibling elements.

    filterA string containing a selector expression to match elements against.

  • version added: 1.6.prevUntil( [element] [, filter] )

    elementA DOM node or jQuery object indicating where to stop matching preceding sibling elements.

    filterA string containing a selector expression to match elements against.

Given a selector expression that represents a set of DOM elements, the .prevUntil() method searches through the predecessors of these elements in the DOM tree, stopping when it reaches an element matched by the method's argument. The new jQuery object that is returned contains all previous siblings up to but not including the one matched by the .prevUntil() selector; the elements are returned in order from the closest sibling to the farthest.

If the selector is not matched or is not supplied, all previous siblings will be selected; in these cases it selects the same elements as the .prevAll() method does when no filter selector is provided.

As of jQuery 1.6, A DOM node or jQuery object, instead of a selector, may be used for the first .prevUntil() argument.

The method optionally accepts a selector expression for its second argument. If this argument is supplied, the elements will be filtered by testing whether they match it.

Example:

Find the siblings that precede <dt id="term-2"> up to the preceding <dt> and give them a red background color. Also, find previous <dd> siblings of <dt id="term-3"> up to <dt id="term-1"> and give them a green text color.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <dl>
  <dt id="term-1">term 1</dt>
  <dd>definition 1-a</dd>
  <dd>definition 1-b</dd>
  <dd>definition 1-c</dd>
  <dd>definition 1-d</dd>

  <dt id="term-2">term 2</dt>
  <dd>definition 2-a</dd>
  <dd>definition 2-b</dd>
  <dd>definition 2-c</dd>

  <dt id="term-3">term 3</dt>
  <dd>definition 3-a</dd>
  <dd>definition 3-b</dd>
</dl>
<script>  
$("#term-2").prevUntil("dt")
  .css("background-color", "red");
  
var term1 = document.getElementById('term-1');
$("#term-3").prevUntil(term1, "dd")
  .css("color", "green");
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/promise/index.html0000644000175000017500000001241711654657344016102 0ustar metalmetal

.promise()

.promise( [type] [, target] ) Returns: Promise

Description: Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.

  • version added: 1.6.promise( [type] [, target] )

    type The type of queue that needs to be observed.

    targetObject onto which the promise methods have to be attached

The .promise() method returns a dynamically generated Promise that is resolved once all actions of a certain type bound to the collection, queued or not, have ended.

By default, type is "fx", which means the returned Promise is resolved when all animations of the selected elements have completed.

Resolve context and sole argument is the collection onto which .promise() has been called.

If target is provided, .promise() will attach the methods onto it and then return this object rather than create a new one. This can be useful to attach the Promise behavior to an object that already exists.

Note: The returned Promise is linked to a Deferred object stored on the .data() for an element. Since the .remove() method removes the element's data as well as the element itself, it will prevent any of the element's unresolved Promises from resolving. If it is necessary to remove an element from the DOM before its Promise is resolved, use .detach() instead and follow with .removeData() after resolution.

Examples:

Example: Using .promise() on a collection with no active animation returns a resolved Promise:


var div = $( "<div />" );

div.promise().done(function( arg1 ) {
  // will fire right away and alert "true"
  alert( this === div && arg1 === div );
});

Example: Resolve the returned Promise when all animations have ended (including those initiated in the animation callback or added later on):

<!DOCTYPE html>
<html>
<head>
  <style>
div {
  height: 50px; width: 50px;
  float: left; margin-right: 10px;
  display: none; background-color: #090;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>


<script>
$("button").bind( "click", function() {
  $("p").append( "Started...");
  
  $("div").each(function( i ) {
    $( this ).fadeIn().fadeOut( 1000 * (i+1) );
  });

  $( "div" ).promise().done(function() {
    $( "p" ).append( " Finished! " );
  });
});
</script>

</body>
</html>

Demo:

Example: Resolve the returned Promise using a $.when() statement (the .promise() method makes it possible to do this with jQuery collections):

<!DOCTYPE html>
<html>
<head>
  <style>
div {
  height: 50px; width: 50px;
  float: left; margin-right: 10px;
  display: none; background-color: #090;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button>Go</button>
<p>Ready...</p>
<div></div>
<div></div>
<div></div>
<div></div>


<script>
var effect = function() {
  return $("div").fadeIn(800).delay(1200).fadeOut();
};

$("button").bind( "click", function() {
  $("p").append( " Started... ");

  $.when( effect() ).done(function() {
    $("p").append(" Finished! ");
  });
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/prop/index.html0000644000175000017500000003153511654657324015404 0ustar metalmetal

.prop()

Contents:

.prop( propertyName ) Returns: String

Description: Get the value of a property for the first element in the set of matched elements.

  • version added: 1.6.prop( propertyName )

    propertyNameThe name of the property to get.

The .prop() method gets the property value for only the first element in the matched set. It returns undefined for the value of a property that has not been set, or if the matched set has no elements. To get the value for each element individually, use a looping construct such as jQuery's .each() or .map() method.

The difference between attributes and properties can be important in specific situations. Before jQuery 1.6, the .attr() method sometimes took property values into account when retrieving some attributes, which could cause inconsistent behavior. As of jQuery 1.6, the .prop() method provides a way to explicitly retrieve property values, while .attr() retrieves attributes.

For example, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, and defaultSelected should be retrieved and set with the .prop() method. Prior to jQuery 1.6, these properties were retrievable with the .attr() method, but this was not within the scope of attr. These do not have corresponding attributes and are only properties.

Concerning boolean attributes, consider a DOM element defined by the HTML markup <input type="checkbox" checked="checked" />, and assume it is in a JavaScript variable named elem:

elem.checked true (Boolean) Will change with checkbox state
$(elem).prop("checked") true (Boolean) Will change with checkbox state
elem.getAttribute("checked") "checked" (String) Initial state of the checkbox; does not change
$(elem).attr("checked")(1.6) "checked" (String) Initial state of the checkbox; does not change
$(elem).attr("checked")(1.6.1+) "checked" (String) Will change with checkbox state
$(elem).attr("checked")(pre-1.6) true (Boolean) Changed with checkbox state

According to the W3C forms specification, the checked attribute is a boolean attribute, which means the corresponding property is true if the attribute is present at all—even if, for example, the attribute has no value or an empty string value. The preferred cross-browser-compatible way to determine if a checkbox is checked is to check for a "truthy" value on the element's property using one of the following:

  • if ( elem.checked )
  • if ( $(elem).prop("checked") )
  • if ( $(elem).is(":checked") )

If using jQuery 1.6, the code if ( $(elem).attr("checked") ) will retrieve the actual content attribute, which does not change as the checkbox is checked and unchecked. It is meant only to store the default or initial value of the checked property. To maintain backwards compatability, the .attr() method in jQuery 1.6.1+ will retrieve and update the property for you so no code for boolean attributes is required to be changed to .prop(). Nevertheless, the preferred way to retrieve a checked value is with one of the options listed above. To see how this works in the latest jQuery, check/uncheck the checkbox in the example below.

Additional Notes:

  • In Internet Explorer prior to version 9, using .prop() to set a DOM element property to anything other than a simple primitive value (number, string, or boolean) can cause memory leaks if the property is not removed (using .removeProp()) before the DOM element is removed from the document. To safely set values on DOM objects without memory leaks, use .data().

Example:

Display the checked property and attribute of a checkbox as it changes.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin: 20px 0 0 }
  b { color: blue; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<input id="check1" type="checkbox" checked="checked">
<label for="check1">Check me</label>
<p></p>

<script>
$("input").change(function() {
  var $input = $(this);
  $("p").html(".attr('checked'): <b>" + $input.attr('checked') + "</b><br>"
              + ".prop('checked'): <b>" + $input.prop('checked') + "</b><br>"
              + ".is(':checked'): <b>" + $input.is(':checked') ) + "</b>";
}).change();
</script>

</body>
</html>

Demo:

.prop( propertyName, value ) Returns: jQuery

Description: Set one or more properties for the set of matched elements.

  • version added: 1.6.prop( propertyName, value )

    propertyNameThe name of the property to set.

    valueA value to set for the property.

  • version added: 1.6.prop( map )

    mapA map of property-value pairs to set.

  • version added: 1.6.prop( propertyName, function(index, oldPropertyValue) )

    propertyNameThe name of the property to set.

    function(index, oldPropertyValue)A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.

The .prop() method is a convenient way to set the value of properties—especially when setting multiple properties, using values returned by a function, or setting values on multiple elements at once. It should be used when setting selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, or defaultSelected. Since jQuery 1.6, these properties can no longer be set with the .attr() method. They do not have corresponding attributes and are only properties.

Properties generally affect the dynamic state of a DOM element without changing the serialized HTML attribute. Examples include the value property of input elements, the disabled property of inputs and buttons, or the checked property of a checkbox. The .prop() method should be used to set disabled and checked instead of the .attr() method. The .val() method should be used for getting and setting value.

$("input").prop("disabled", false);
$("input").prop("checked", true);
$("input").val("someValue");

Important: the .removeProp() method should not be used to set these properties to false. Once a native property is removed, it cannot be added again. See .removeProp() for more information.

Computed property values

By using a function to set properties, you can compute the value based on other properties of the element. For example, to toggle all checkboxes based off their individual values:

$("input[type='checkbox']").prop("checked", function( i, val ) {
  return !val;
});

Note: If nothing is returned in the setter function (ie. function(index, prop){}), or if undefined is returned, the current value is not changed. This is useful for selectively setting values only when certain criteria are met.

Additional Notes:

  • In Internet Explorer prior to version 9, using .prop() to set a DOM element property to anything other than a simple primitive value (number, string, or boolean) can cause memory leaks if the property is not removed (using .removeProp()) before the DOM element is removed from the document. To safely set values on DOM objects without memory leaks, use .data().

Example:

Disable all checkboxes on the page.

<!DOCTYPE html>
<html>
<head>
  <style>
  img { padding:10px; }
  div { color:red; font-size:24px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <input type="checkbox" checked="checked" />
  <input type="checkbox" />
  <input type="checkbox" />
  <input type="checkbox"  checked="checked" />

<script>
$("input[type='checkbox']").prop({
  disabled: true
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/pushStack/index.html0000644000175000017500000000433611654657376016377 0ustar metalmetal

.pushStack()

.pushStack( elements ) Returns: jQuery

Description: Add a collection of DOM elements onto the jQuery stack.

  • version added: 1.0.pushStack( elements )

    elementsAn array of elements to push onto the stack and make into a new jQuery object.

  • version added: 1.3.pushStack( elements, name, arguments )

    elementsAn array of elements to push onto the stack and make into a new jQuery object.

    nameThe name of a jQuery method that generated the array of elements.

    argumentsThe arguments that were passed in to the jQuery method (for serialization).

Example:

Add some elements onto the jQuery stack, then pop back off again.

jQuery([])
    .pushStack( document.getElementsByTagName("div") )
        .remove()
    .end();
jqapi-1.7/docs/queue/index.html0000644000175000017500000002143311654657336015547 0ustar metalmetal

.queue()

Contents:

.queue( [queueName] ) Returns: Array

Description: Show the queue of functions to be executed on the matched elements.

  • version added: 1.2.queue( [queueName] )

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

Example:

Show the length of the queue.

<!DOCTYPE html>
<html>
<head>
  <style>div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:60px; 
        background:green; display:none; }
  div.newcolor { background:blue; }
  p { color:red; }  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>The queue length is: <span></span></p>
  <div></div>
<script>
var div = $("div");

function runIt() {
  div.show("slow");
  div.animate({left:'+=200'},2000);
  div.slideToggle(1000);
  div.slideToggle("fast");
  div.animate({left:'-=200'},1500);
  div.hide("slow");
  div.show(1200);
  div.slideUp("normal", runIt);
}

function showIt() {
  var n = div.queue("fx");
  $("span").text( n.length );      
  setTimeout(showIt, 100);
}

runIt();
showIt();
</script>

</body>
</html>

Demo:

.queue( [queueName] , newQueue ) Returns: jQuery

Description: Manipulate the queue of functions to be executed on the matched elements.

  • version added: 1.2.queue( [queueName], newQueue )

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

    newQueueAn array of functions to replace the current queue contents.

Every element can have one to many queues of functions attached to it by jQuery. In most applications, only one queue (called fx) is used. Queues allow a sequence of actions to be called on an element asynchronously, without halting program execution. The typical example of this is calling multiple animation methods on an element. For example:

$('#foo').slideUp().fadeIn();

When this statement is executed, the element begins its sliding animation immediately, but the fading transition is placed on the fx queue to be called only once the sliding transition is complete.

The .queue() method allows us to directly manipulate this queue of functions. Calling .queue() with a callback is particularly useful; it allows us to place a new function at the end of the queue.

This feature is similar to providing a callback function with an animation method, but does not require the callback to be given at the time the animation is performed.

$('#foo').slideUp();
$('#foo').queue(function() {
  alert('Animation complete.');
  $(this).dequeue();
});

This is equivalent to:

$('#foo').slideUp(function() {
  alert('Animation complete.');
});

Note that when adding a function with .queue(), we should ensure that .dequeue() is eventually called so that the next function in line executes.

In jQuery 1.4 the function that's called is passed in another function, as the first argument, that when called automatically dequeues the next item and keeps the queue moving. You would use it like so:

$("#test").queue(function(next) {
    // Do some stuff...
    next();
});

Examples:

Example: Queue a custom function.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:30px; 
        background:green; display:none; }
  div.newcolor { background:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Click here...
  <div></div>
<script>$(document.body).click(function () {
      $("div").show("slow");
      $("div").animate({left:'+=200'},2000);
      $("div").queue(function () {
        $(this).addClass("newcolor");
        $(this).dequeue();
      });
      $("div").animate({left:'-=200'},500);
      $("div").queue(function () {
        $(this).removeClass("newcolor");
        $(this).dequeue();
      });
      $("div").slideUp();
    });</script>

</body>
</html>

Demo:

Example: Set a queue array to delete the queue.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:30px; 
        background:green; display:none; }
  div.newcolor { background:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="start">Start</button>
  <button id="stop">Stop</button>
  <div></div>
<script>$("#start").click(function () {
      $("div").show("slow");
      $("div").animate({left:'+=200'},5000);
      $("div").queue(function () {
        $(this).addClass("newcolor");
        $(this).dequeue();
      });
      $("div").animate({left:'-=200'},1500);
      $("div").queue(function () {
        $(this).removeClass("newcolor");
        $(this).dequeue();
      });
      $("div").slideUp();
    });
    $("#stop").click(function () {
      $("div").queue("fx", []);
      $("div").stop();
    });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/radio-selector/index.html0000644000175000017500000000736711654657432017346 0ustar metalmetal

:radio Selector

radio selector

version added: 1.0jQuery(':radio')

Description: Selects all elements of type radio.

$(':radio') is equivalent to $('[type=radio]'). As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':radio') is equivalent to $('*:radio'), so $('input:radio') should be used instead.

To select a set of associated radio buttons, you might use: $('input[name=gender]:radio')

Additional Notes:

  • Because :radio is a jQuery extension and not part of the CSS specification, queries using :radio cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="radio"] instead.

Example:

Finds all radio inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:25px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" name="asdf" />
    <input type="radio" name="asdf" />

    <input type="reset" />
    <input type="submit" />
    <input type="text" />

    <select><option>Option<option/></select>
    <textarea></textarea>
    <button>Button</button>
  </form>

  <div>
  </div>
<script>

    var input = $("form input:radio").wrap('<span></span>').parent().css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/ready/index.html0000644000175000017500000001211311654657372015522 0ustar metalmetal

.ready()

.ready( handler ) Returns: jQuery

Description: Specify a function to execute when the DOM is fully loaded.

  • version added: 1.0.ready( handler )

    handlerA function to execute after the DOM is ready.

While JavaScript provides the load event for executing code when a page is rendered, this event does not get triggered until all assets such as images have been completely received. In most cases, the script can be run as soon as the DOM hierarchy has been fully constructed. The handler passed to .ready() is guaranteed to be executed after the DOM is ready, so this is usually the best place to attach all other event handlers and run other jQuery code. When using scripts that rely on the value of CSS style properties, it's important to reference external stylesheets or embed style elements before referencing the scripts.

In cases where code relies on loaded assets (for example, if the dimensions of an image are required), the code should be placed in a handler for the load event instead.

The .ready() method is generally incompatible with the <body onload=""> attribute. If load must be used, either do not use .ready() or use jQuery's .load() method to attach load event handlers to the window or to more specific items, like images.

All three of the following syntaxes are equivalent:

  • $(document).ready(handler)
  • $().ready(handler) (this is not recommended)
  • $(handler)

There is also $(document).bind("ready", handler). This behaves similarly to the ready method but with one exception: If the ready event has already fired and you try to .bind("ready") the bound handler will not be executed. Ready handlers bound this way are executed after any bound by the other three methods above.

The .ready() method can only be called on a jQuery object matching the current document, so the selector can be omitted.

The .ready() method is typically used with an anonymous function:

$(document).ready(function() {
  // Handler for .ready() called.
});

Which is equivalent to calling:

$(function() {
 // Handler for .ready() called.
});

If .ready() is called after the DOM has been initialized, the new handler passed in will be executed immediately.

Aliasing the jQuery Namespace

When using another JavaScript library, we may wish to call $.noConflict() to avoid namespace difficulties. When this function is called, the $ shortcut is no longer available, forcing us to write jQuery each time we would normally write $. However, the handler passed to the .ready() method can take an argument, which is passed the global jQuery object. This means we can rename the object within the context of our .ready() handler without affecting other code:

jQuery(document).ready(function($) {
  // Code using $ as usual goes here.
});

Example:

Display a message when the DOM is loaded.

<!DOCTYPE html>
<html>
<head>
  <style>p { color:red; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
  <script>
  $(document).ready(function () {
  $("p").text("The DOM is now loaded and can be manipulated.");
});
  </script>

</head>
<body>
  <p>Not loaded yet.</p>

</body>
</html>

Demo:

jqapi-1.7/docs/remove/index.html0000644000175000017500000001072411654657402015713 0ustar metalmetal

.remove()

.remove( [selector] ) Returns: jQuery

Description: Remove the set of matched elements from the DOM.

  • version added: 1.0.remove( [selector] )

    selectorA selector expression that filters the set of matched elements to be removed.

Similar to .empty(), the .remove() method takes elements out of the DOM. Use .remove() when you want to remove the element itself, as well as everything inside it. In addition to the elements themselves, all bound events and jQuery data associated with the elements are removed. To remove the elements without removing data and events, use .detach() instead.

Consider the following HTML:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

We can target any element for removal:

$('.hello').remove();

This will result in a DOM structure with the <div> element deleted:

<div class="container">
  <div class="goodbye">Goodbye</div>
</div>

If we had any number of nested elements inside <div class="hello">, they would be removed, too. Other jQuery constructs such as data or event handlers are erased as well.

We can also include a selector as an optional parameter. For example, we could rewrite the previous DOM removal code as follows:

$('div').remove('.hello');

This would result in the same DOM structure:

<div class="container">
  <div class="goodbye">Goodbye</div>
</div>

Examples:

Example: Removes all paragraphs from the DOM

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; margin:6px 0; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p> 
  how are 
  <p>you?</p>
  <button>Call remove() on paragraphs</button>
<script>
    $("button").click(function () {
      $("p").remove();
    });

</script>

</body>
</html>

Demo:

Example: Removes all paragraphs that contain "Hello" from the DOM. Analogous to doing $("p").filter(":contains('Hello')").remove().

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; margin:6px 0; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p class="hello">Hello</p>
  how are 
  <p>you?</p>

  <button>Call remove(":contains('Hello')") on paragraphs</button>
<script>

    $("button").click(function () {
      $("p").remove(":contains('Hello')");
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/removeAttr/index.html0000644000175000017500000000657311654657324016560 0ustar metalmetal

.removeAttr()

.removeAttr( attributeName ) Returns: jQuery

Description: Remove an attribute from each element in the set of matched elements.

  • version added: 1.0.removeAttr( attributeName )

    attributeNameAn attribute to remove.

The .removeAttr() method uses the JavaScript removeAttribute() function, but it has the advantage of being able to be called directly on a jQuery object and it accounts for different attribute naming across browsers.

Note: Removing an inline onclick event handler using .removeAttr() doesn't achieve the desired effect in Internet Explorer 6, 7, or 8. To avoid potential problems, use .prop() instead:

$element.prop("onclick", null);
console.log("onclick property: ", $element[0].onclick);

The behavior of .removeAttr() may be updated to better handle this in the future. For the time being, however, setting .prop("onclick", null) should be considered the standard cross-browser solution.

Example:

Clicking the button enables the input next to it.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Enable</button>
<input type="text" title="hello there" />
<div id="log"></div>

<script>
(function() {
  var inputTitle = $("input").attr("title");
  $("button").click(function () {
    var input = $(this).next();

    if ( input.attr("title") == inputTitle ) {
      input.removeAttr("title")
    } else {
      input.attr("title", inputTitle);
    }

    $("#log").html( "input title is now " + input.attr("title") );
  });
})();
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/removeClass/index.html0000644000175000017500000001406511654657324016706 0ustar metalmetal

.removeClass()

.removeClass( [className] ) Returns: jQuery

Description: Remove a single class, multiple classes, or all classes from each element in the set of matched elements.

  • version added: 1.0.removeClass( [className] )

    classNameOne or more space-separated classes to be removed from the class attribute of each matched element.

  • version added: 1.4.removeClass( function(index, class) )

    function(index, class)A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.

If a class name is included as a parameter, then only that class will be removed from the set of matched elements. If no class names are specified in the parameter, all classes will be removed.

More than one class may be removed at a time, separated by a space, from the set of matched elements, like so:

$('p').removeClass('myClass yourClass')

This method is often used with .addClass() to switch elements' classes from one to another, like so:

$('p').removeClass('myClass noClass').addClass('yourClass');

Here, the myClass and noClass classes are removed from all paragraphs, while yourClass is added.

To replace all existing classes with another class, we can use .attr('class', 'newClass') instead.

As of jQuery 1.4, the .removeClass() method allows us to indicate the class to be removed by passing in a function.

$('li:last').removeClass(function() {
          return $(this).prev().attr('class');
        });

This example removes the class name of the penultimate <li> from the last <li>.

Examples:

Example: Remove the class 'blue' from the matched elements.

<!DOCTYPE html>
<html>
<head>
  <style>

  p { margin: 4px; font-size:16px; font-weight:bolder; }
  .blue { color:blue; }
  .under { text-decoration:underline; }
  .highlight { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p class="blue under">Hello</p>
  <p class="blue under highlight">and</p>
  <p class="blue under">then</p>

  <p class="blue under">Goodbye</p>
<script>$("p:even").removeClass("blue");</script>

</body>
</html>

Demo:

Example: Remove the class 'blue' and 'under' from the matched elements.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin: 4px; font-size:16px; font-weight:bolder; }
  .blue { color:blue; }
  .under { text-decoration:underline; }
  .highlight { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p class="blue under">Hello</p>

  <p class="blue under highlight">and</p>
  <p class="blue under">then</p>
  <p class="blue under">Goodbye</p>
<script>$("p:odd").removeClass("blue under");</script>

</body>
</html>

Demo:

Example: Remove all the classes from the matched elements.

<!DOCTYPE html>
<html>
<head>
  <style>

  p { margin: 4px; font-size:16px; font-weight:bolder; }
  .blue { color:blue; }
  .under { text-decoration:underline; }
  .highlight { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p class="blue under">Hello</p>
  <p class="blue under highlight">and</p>
  <p class="blue under">then</p>

  <p class="blue under">Goodbye</p>
<script>$("p:eq(1)").removeClass();</script>

</body>
</html>

Demo:

jqapi-1.7/docs/removeData/index.html0000644000175000017500000000766111654657336016521 0ustar metalmetal

.removeData()

.removeData( [name] ) Returns: jQuery

Description: Remove a previously-stored piece of data.

  • version added: 1.2.3.removeData( [name] )

    nameA string naming the piece of data to delete.

  • version added: 1.7.removeData( [list] )

    listAn array or space-separated string naming the pieces of data to delete.

The .removeData() method allows us to remove values that were previously set using .data(). When called with the name of a key, .removeData() deletes that particular value; when called with no arguments, all values are removed. Removing data from jQuery's internal .data() cache does not effect any HTML5 data- attributes in a document; use .removeAttr() to remove those.

As of jQuery 1.7, when called with an array of keys or a string of space-separated keys, .removeData() deletes the value of each key in that array or string.

As of jQuery 1.4.3, calling .removeData() will cause the value of the property being removed to revert to the value of the data attribute of the same name in the DOM, rather than being set to undefined.

Example:

Set a data store for 2 names then remove one of them.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:2px; color:blue; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>value1 before creation: <span></span></div>
  <div>value1 after creation: <span></span></div>
  <div>value1 after removal: <span></span></div>

  <div>value2 after removal: <span></span></div>
<script>

    $("span:eq(0)").text("" + $("div").data("test1"));
    $("div").data("test1", "VALUE-1");
    $("div").data("test2", "VALUE-2");
    $("span:eq(1)").text("" + $("div").data("test1"));
    $("div").removeData("test1");
    $("span:eq(2)").text("" + $("div").data("test1"));
    $("span:eq(3)").text("" + $("div").data("test2"));

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/removeProp/index.html0000644000175000017500000000770411654657324016563 0ustar metalmetal

.removeProp()

.removeProp( propertyName ) Returns: jQuery

Description: Remove a property for the set of matched elements.

  • version added: 1.6.removeProp( propertyName )

    propertyNameThe name of the property to set.

The .removeProp() method removes properties set by the .prop() method.

With some built-in properties of a DOM element or window object, browsers may generate an error if an attempt is made to remove the property. jQuery first assigns the value undefined to the property and ignores any error the browser generates. In general, it is only necessary to remove custom properties that have been set on an object, and not built-in (native) properties.

Note: Do not use this method to remove native properties such as checked, disabled, or selected. This will remove the property completely and, once removed, cannot be added again to element. Use .prop() to set these properties to false instead.

Additional Notes:

  • In Internet Explorer prior to version 9, using .prop() to set a DOM element property to anything other than a simple primitive value (number, string, or boolean) can cause memory leaks if the property is not removed (using .removeProp()) before the DOM element is removed from the document. To safely set values on DOM objects without memory leaks, use .data().

Example:

Set a numeric property on a paragraph and then remove it.

<!DOCTYPE html>
<html>
<head>
  <style>
  img { padding:10px; }
  div { color:red; font-size:24px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p></p>


<script>
var $para = $("p");
$para.prop("luggageCode", 1234);
$para.append("The secret luggage code is: ", String($para.prop("luggageCode")), ". ");
$para.removeProp("luggageCode");
$para.append("Now the secret luggage code is: ", String($para.prop("luggageCode")), ". ");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/replaceAll/index.html0000644000175000017500000000643111654657402016462 0ustar metalmetal

.replaceAll()

.replaceAll( target ) Returns: jQuery

Description: Replace each target element with the set of matched elements.

  • version added: 1.2.replaceAll( target )

    targetA selector expression indicating which element(s) to replace.

The .replaceAll() method is corollary to .replaceWith(), but with the source and target reversed. Consider this DOM structure:

<div class="container">
  <div class="inner first">Hello</div>
  <div class="inner second">And</div>
  <div class="inner third">Goodbye</div>
</div>

We can create an element, then replace other elements with it:

$('<h2>New heading</h2>').replaceAll('.inner');

This causes all of them to be replaced:

<div class="container">
  <h2>New heading</h2>
  <h2>New heading</h2>
  <h2>New heading</h2>
</div>

Or, we could select an element to use as the replacement:

$('.first').replaceAll('.third');

This results in the DOM structure:

<div class="container">
  <div class="inner second">And</div>
  <div class="inner first">Hello</div>
</div>

From this example, we can see that the selected element replaces the target by being moved from its old location, not by being cloned.

Example:

Replace all the paragraphs with bold words.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>
<script>$("<b>Paragraph. </b>").replaceAll("p"); // check replaceWith() examples</script>

</body>
</html>

Demo:

jqapi-1.7/docs/replaceWith/index.html0000644000175000017500000001750611654657404016674 0ustar metalmetal

.replaceWith()

.replaceWith( newContent ) Returns: jQuery

Description: Replace each element in the set of matched elements with the provided new content.

  • version added: 1.2.replaceWith( newContent )

    newContentThe content to insert. May be an HTML string, DOM element, or jQuery object.

  • version added: 1.4.replaceWith( function )

    functionA function that returns content with which to replace the set of matched elements.

The .replaceWith() method removes content from the DOM and inserts new content in its place with a single call. Consider this DOM structure:

<div class="container">
  <div class="inner first">Hello</div>
  <div class="inner second">And</div>
  <div class="inner third">Goodbye</div>
</div>

The second inner <div> could be replaced with the specified HTML:

$('div.second').replaceWith('<h2>New heading</h2>');

This results in the structure:

<div class="container">
  <div class="inner first">Hello</div>
  <h2>New heading</h2>
  <div class="inner third">Goodbye</div>
</div>

All inner <div> elements could be targeted at once:

$('div.inner').replaceWith('<h2>New heading</h2>');

This causes all of them to be replaced:

<div class="container">
  <h2>New heading</h2>
  <h2>New heading</h2>
  <h2>New heading</h2>
</div>

An element could also be selected as the replacement:

$('div.third').replaceWith($('.first'));

This results in the DOM structure:

<div class="container">
  <div class="inner second">And</div>
  <div class="inner first">Hello</div>
</div>

This example demonstrates that the selected element replaces the target by being moved from its old location, not by being cloned.

The .replaceWith() method, like most jQuery methods, returns the jQuery object so that other methods can be chained onto it. However, it must be noted that the original jQuery object is returned. This object refers to the element that has been removed from the DOM, not the new element that has replaced it.

As of jQuery 1.4, .replaceWith() can also work on disconnected DOM nodes. For example, with the following code, .replaceWith() returns a jQuery set containing only a paragraph.:

$("<div/>").replaceWith("<p></p>");

The .replaceWith() method can also take a function as its argument:

$('div.container').replaceWith(function() {
  return $(this).contents();
});

This results in <div class="container"> being replaced by its three child <div>s. The return value of the function may be an HTML string, DOM element, or jQuery object.

Examples:

Example: On click, replace the button with a div containing the same word.

<!DOCTYPE html>
<html>
<head>
  <style>
  button { display:block; margin:3px; color:red; width:200px; }
  div { color:red; border:2px solid blue; width:200px;
      margin:3px; text-align:center; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button>First</button>
<button>Second</button>
<button>Third</button>

<script>
$("button").click(function () {
  $(this).replaceWith( "<div>" + $(this).text() + "</div>" );
});
</script>

</body>
</html>

Demo:

Example: Replace all paragraphs with bold words.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p>Hello</p>
<p>cruel</p>
<p>World</p>

<script>
$("p").replaceWith( "<b>Paragraph. </b>" );
</script>

</body>
</html>

Demo:

Example: On click, replace each paragraph with a div that is already in the DOM and selected with the $() function. Notice it doesn't clone the object but rather moves it to replace the paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { border:2px solid blue; color:red; margin:3px; }
  p { border:2px solid red; color:blue; margin:3px; cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Hello</p>
  <p>cruel</p>
  <p>World</p>

  <div>Replaced!</div>

<script>
$("p").click(function () {
  $(this).replaceWith( $("div") );
});
</script>

</body>
</html>

Demo:

Example: On button click, replace the containing div with its child divs and append the class name of the selected element to the paragraph.

<!DOCTYPE html>
<html>
<head>
  <style> 
  .container { background-color: #991; }
  .inner { color: #911; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p>
  <button>Replace!</button>
</p>
<div class="container">
  <div class="inner">Scooby</div>
  <div class="inner">Dooby</div>
  <div class="inner">Doo</div>
</div>

<script>
$('button').bind("click", function() {
  var $container = $("div.container").replaceWith(function() {
    return $(this).contents();
  });

  $("p").append( $container.attr("class") );
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/reset-selector/index.html0000644000175000017500000000627411654657432017366 0ustar metalmetal

:reset Selector

reset selector

version added: 1.0jQuery(':reset')

Description: Selects all elements of type reset.

:reset is equivalent to [type="reset"]

Additional Notes:

  • Because :reset is a jQuery extension and not part of the CSS specification, queries using :reset cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="reset"] instead.

Example:

Finds all reset inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:45px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option<option/></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div>
  </div>
<script>

    var input = $("input:reset").css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/resize/index.html0000644000175000017500000000664311654657372015732 0ustar metalmetal

.resize()

.resize( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "resize" JavaScript event, or trigger that event on an element.

  • version added: 1.0.resize( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.resize( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.resize()

This method is a shortcut for .bind('resize', handler) in the first and second variations, and .trigger('resize') in the third.

The resize event is sent to the window element when the size of the browser window changes:

$(window).resize(function() {
  $('#log').append('<div>Handler for .resize() called.</div>');
});

Now whenever the browser window's size is changed, the message is appended to <div id="log"> one or more times, depending on the browser.

Code in a resize handler should never rely on the number of times the handler is called. Depending on implementation, resize events can be sent continuously as the resizing is in progress (the typical behavior in Internet Explorer and WebKit-based browsers such as Safari and Chrome), or only once at the end of the resize operation (the typical behavior in some other browsers such as Opera).

Example:

To see the window width while (or after) it is resized, try:


$(window).resize(function() {
  $('body').prepend('<div>' + $(window).width() + '</div>');
});
  
jqapi-1.7/docs/scroll/index.html0000644000175000017500000001255411654657372015725 0ustar metalmetal

.scroll()

.scroll( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element.

  • version added: 1.0.scroll( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.scroll( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.scroll()

This method is a shortcut for .bind('scroll', handler) in the first and second variations, and .trigger('scroll') in the third.

The scroll event is sent to an element when the user scrolls to a different place in the element. It applies to window objects, but also to scrollable frames and elements with the overflow CSS property set to scroll (or auto when the element's explicit height or width is less than the height or width of its contents).

For example, consider the HTML:

<div id="target" style="overflow: scroll; width: 200px; height: 100px;">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit,
  sed do eiusmod tempor incididunt ut labore et dolore magna
  aliqua. Ut enim ad minim veniam, quis nostrud exercitation
  ullamco laboris nisi ut aliquip ex ea commodo consequat.
  Duis aute irure dolor in reprehenderit in voluptate velit
  esse cillum dolore eu fugiat nulla pariatur. Excepteur
  sint occaecat cupidatat non proident, sunt in culpa qui
  officia deserunt mollit anim id est laborum.
</div>
<div id="other">
  Trigger the handler
</div>
<div id="log"></div>

The style definition is present to make the target element small enough to be scrollable:

The scroll event handler can be bound to this element:

$('#target').scroll(function() {
  $('#log').append('<div>Handler for .scroll() called.</div>');
});

Now when the user scrolls the text up or down, one or more messages are appended to <div id="log"></div>:

Handler for .scroll() called.

To trigger the event manually, apply .scroll() without an argument:

$('#other').click(function() {
  $('#target').scroll();
});

After this code executes, clicks on Trigger the handler will also append the message.

A scroll event is sent whenever the element's scroll position changes, regardless of the cause. A mouse click or drag on the scroll bar, dragging inside the element, pressing the arrow keys, or using the mouse's scroll wheel could cause this event.

Example:

To do something when your page is scrolled:

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  p { color:green; }
  span { color:red; display:none; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>Try scrolling the iframe.</div>
  <p>Paragraph - <span>Scroll happened!</span></p>
<script>
    $("p").clone().appendTo(document.body);
    $("p").clone().appendTo(document.body);
    $("p").clone().appendTo(document.body);
    $(window).scroll(function () { 
      $("span").css("display", "inline").fadeOut("slow"); 
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/scrollLeft/index.html0000644000175000017500000001174511654657332016535 0ustar metalmetal

.scrollLeft()

Contents:

.scrollLeft() Returns: Integer

Description: Get the current horizontal position of the scroll bar for the first element in the set of matched elements.

  • version added: 1.2.6.scrollLeft()

The horizontal scroll position is the same as the number of pixels that are hidden from view above the scrollable area. If the scroll bar is at the very left, or if the element is not scrollable, this number will be 0.

Note: .scrollLeft(), when called directly or animated as a property using .animate() will not work if the element(s) it is being applied to are hidden.

Example:

Get the scrollLeft of a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>
    p { margin:10px;padding:5px;border:2px solid #666; }
    </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p></p>
<script>var p = $("p:first");
			$("p:last").text( "scrollLeft:" + p.scrollLeft() );

			</script>

</body>
</html>

Demo:

.scrollLeft( value ) Returns: jQuery

Description: Set the current horizontal position of the scroll bar for each of the set of matched elements.

  • version added: 1.2.6.scrollLeft( value )

    valueAn integer indicating the new position to set the scroll bar to.

The horizontal scroll position is the same as the number of pixels that are hidden from view above the scrollable area. Setting the scrollLeft positions the horizontal scroll of each matched element.

Example:

Set the scrollLeft of a div.

<!DOCTYPE html>
<html>
<head>
  <style>
  div.demo {
  background:#CCCCCC none repeat scroll 0 0;
  border:3px solid #666666;
  margin:5px;
  padding:5px;
  position:relative;
  width:200px;
  height:100px;
  overflow:auto;
  }
  p { margin:10px;padding:5px;border:2px solid #666;width:1000px;height:1000px; }
	</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div class="demo"><h1>lalala</h1><p>Hello</p></div>
<script>$("div.demo").scrollLeft(300);
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/scrollTop/index.html0000644000175000017500000001130311654657332016373 0ustar metalmetal

.scrollTop()

Contents:

.scrollTop() Returns: Integer

Description: Get the current vertical position of the scroll bar for the first element in the set of matched elements.

  • version added: 1.2.6.scrollTop()

The vertical scroll position is the same as the number of pixels that are hidden from view above the scrollable area. If the scroll bar is at the very top, or if the element is not scrollable, this number will be 0.

Example:

Get the scrollTop of a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin:10px;padding:5px;border:2px solid #666; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p></p>
<script>var p = $("p:first");
$("p:last").text( "scrollTop:" + p.scrollTop() );

</script>

</body>
</html>

Demo:

.scrollTop( value ) Returns: jQuery

Description: Set the current vertical position of the scroll bar for each of the set of matched elements.

  • version added: 1.2.6.scrollTop( value )

    valueAn integer indicating the new position to set the scroll bar to.

The vertical scroll position is the same as the number of pixels that are hidden from view above the scrollable area. Setting the scrollTop positions the vertical scroll of each matched element.

Example:

Set the scrollTop of a div.

<!DOCTYPE html>
<html>
<head>
  <style>
div.demo {
background:#CCCCCC none repeat scroll 0 0;
border:3px solid #666666;
margin:5px;
padding:5px;
position:relative;
width:200px;
height:100px;
overflow:auto;
}
  p { margin:10px;padding:5px;border:2px solid #666;width:1000px;height:1000px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div class="demo"><h1>lalala</h1><p>Hello</p></div>
<script>$("div.demo").scrollTop(300);
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/select/index.html0000644000175000017500000001142711654657372015704 0ustar metalmetal

.select()

.select( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "select" JavaScript event, or trigger that event on an element.

  • version added: 1.0.select( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.select( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.select()

This method is a shortcut for .bind('select', handler) in the first two variations, and .trigger('select') in the third.

The select event is sent to an element when the user makes a text selection inside it. This event is limited to <input type="text"> fields and <textarea> boxes.

For example, consider the HTML:

<form>
  <input id="target" type="text" value="Hello there" />
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the text input:

$('#target').select(function() {
  alert('Handler for .select() called.');
});

Now when any portion of the text is selected, the alert is displayed. Merely setting the location of the insertion point will not trigger the event. To trigger the event manually, apply .select() without an argument:

$('#other').click(function() {
  $('#target').select();
});

After this code executes, clicks on the Trigger button will also alert the message:

Handler for .select() called.

In addition, the default select action on the field will be fired, so the entire text field will be selected.

The method for retrieving the current selected text differs from one browser to another. A number of jQuery plug-ins offer cross-platform solutions.

Examples:

Example: To do something when text in input boxes is selected:

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; }
  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>

    Click and drag the mouse to select text in the inputs.
  </p>
  <input type="text" value="Some text" />
  <input type="text" value="to test on" />

  <div></div>
<script>
    $(":input").select( function () { 
      $("div").text("Something was selected").show().fadeOut(1000); 
    });
</script>

</body>
</html>

Demo:

Example: To trigger the select event on all input elements, try:

$("input").select();
jqapi-1.7/docs/selected-selector/index.html0000644000175000017500000000657611654657432020041 0ustar metalmetal

:selected Selector

selected selector

version added: 1.0jQuery(':selected')

Description: Selects all elements that are selected.

The :selected selector works for <option> elements. It does not work for checkboxes or radio inputs; use :checked for them.

Additional Notes:

  • Because :selected is a jQuery extension and not part of the CSS specification, queries using :selected cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :selected to select elements, first select the elements using a pure CSS selector, then use .filter(":selected").

Example:

Attaches a change event to the select that gets the text for each selected option and writes them in the div. It then triggers the event for the initial text draw.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <select name="garden" multiple="multiple">

    <option>Flowers</option>
    <option selected="selected">Shrubs</option>
    <option>Trees</option>
    <option selected="selected">Bushes</option>

    <option>Grass</option>
    <option>Dirt</option>
  </select>
  <div></div>
<script>

    $("select").change(function () {
          var str = "";
          $("select option:selected").each(function () {
                str += $(this).text() + " ";
              });
          $("div").text(str);
        })
        .trigger('change');
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/serialize/index.html0000644000175000017500000001264711654657322016414 0ustar metalmetal

.serialize()

.serialize() Returns: String

Description: Encode a set of form elements as a string for submission.

  • version added: 1.0.serialize()

The .serialize() method creates a text string in standard URL-encoded notation. It operates on a jQuery object representing a set of form elements. The form elements can be of several types:

<form>
  <div><input type="text" name="a" value="1" id="a" /></div>
  <div><input type="text" name="b" value="2" id="b" /></div>
  <div><input type="hidden" name="c" value="3" id="c" /></div>
  <div>
    <textarea name="d" rows="8" cols="40">4</textarea>
  </div>
  <div><select name="e">
    <option value="5" selected="selected">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
  </select></div>
  <div>
    <input type="checkbox" name="f" value="8" id="f" />
  </div>
  <div>
    <input type="submit" name="g" value="Submit" id="g" />
  </div>
</form>

The .serialize() method can act on a jQuery object that has selected individual form elements, such as <input>, <textarea>, and <select>. However, it is typically easier to select the <form> tag itself for serialization:

$('form').submit(function() {
  alert($(this).serialize());
  return false;
});

This produces a standard-looking query string:

a=1&b=2&c=3&d=4&e=5

Warning: selecting both the form and its children will cause duplicates in the serialized string.

Note: Only "successful controls" are serialized to the string. No submit button value is serialized since the form was not submitted using a button. For a form element's value to be included in the serialized string, the element must have a name attribute. Values from checkboxes and radio buttons (inputs of type "radio" or "checkbox") are included only if they are checked. Data from file select elements is not serialized.

Example:

Serialize a form to a query string, that could be sent to a server in an Ajax request.

<!DOCTYPE html>
<html>
<head>
  <style>
  body, select { font-size:12px; }
  form { margin:5px; }
  p { color:red; margin:5px; font-size:14px; }
  b { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  

<form>
    <select name="single">
      <option>Single</option>
      <option>Single2</option>
    </select>

<br />
    <select name="multiple" multiple="multiple">
      <option selected="selected">Multiple</option>
      <option>Multiple2</option>

      <option selected="selected">Multiple3</option>
    </select>
<br/>
    <input type="checkbox" name="check" value="check1" id="ch1"/>

    <label for="ch1">check1</label>

    <input type="checkbox" name="check" value="check2" checked="checked" id="ch2"/>

    <label for="ch2">check2</label>
<br />
    <input type="radio" name="radio" value="radio1" checked="checked" id="r1"/>

    <label for="r1">radio1</label>
    <input type="radio" name="radio" value="radio2" id="r2"/>

    <label for="r2">radio2</label>
  </form>
  <p><tt id="results"></tt></p>
<script>
    function showValues() {
      var str = $("form").serialize();
      $("#results").text(str);
    }
    $(":checkbox, :radio").click(showValues);
    $("select").change(showValues);
    showValues();
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/serializeArray/index.html0000644000175000017500000001307511654657322017407 0ustar metalmetal

.serializeArray()

.serializeArray() Returns: Array

Description: Encode a set of form elements as an array of names and values.

  • version added: 1.2.serializeArray()

The .serializeArray() method creates a JavaScript array of objects, ready to be encoded as a JSON string. It operates on a jQuery object representing a set of form elements. The form elements can be of several types:

<form>
  <div><input type="text" name="a" value="1" id="a" /></div>
  <div><input type="text" name="b" value="2" id="b" /></div>
  <div><input type="hidden" name="c" value="3" id="c" /></div>
  <div>
    <textarea name="d" rows="8" cols="40">4</textarea>
  </div>
  <div><select name="e">
    <option value="5" selected="selected">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
  </select></div>
  <div>
    <input type="checkbox" name="f" value="8" id="f" />
  </div>
  <div>
    <input type="submit" name="g" value="Submit" id="g" />
  </div>
</form>

The .serializeArray() method uses the standard W3C rules for successful controls to determine which elements it should include; in particular the element cannot be disabled and must contain a name attribute. No submit button value is serialized since the form was not submitted using a button. Data from file select elements is not serialized.

This method can act on a jQuery object that has selected individual form elements, such as <input>, <textarea>, and <select>. However, it is typically easier to select the <form> tag itself for serialization:

$('form').submit(function() {
  console.log($(this).serializeArray());
  return false;
});

This produces the following data structure (provided that the browser supports console.log):

[
  {
    name: "a",
    value: "1"
  },
  {
    name: "b",
    value: "2"
  },
  {
    name: "c",
    value: "3"
  },
  {
    name: "d",
    value: "4"
  },
  {
    name: "e",
    value: "5"
  }
]

Example:

Get the values from a form, iterate through them, and append them to a results display.

<!DOCTYPE html>
<html>
<head>
  <style>
  body, select { font-size:14px; }
  form { margin:5px; }
  p { color:red; margin:5px; }
  b { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><b>Results:</b> <span id="results"></span></p>

  <form>
    <select name="single">
      <option>Single</option>
      <option>Single2</option>

    </select>
    <select name="multiple" multiple="multiple">
      <option selected="selected">Multiple</option>
      <option>Multiple2</option>

      <option selected="selected">Multiple3</option>
    </select><br/>
    <input type="checkbox" name="check" value="check1" id="ch1"/>

    <label for="ch1">check1</label>
    <input type="checkbox" name="check" value="check2" checked="checked" id="ch2"/>

    <label for="ch2">check2</label>
    <input type="radio" name="radio" value="radio1" checked="checked" id="r1"/>

    <label for="r1">radio1</label>
    <input type="radio" name="radio" value="radio2" id="r2"/>

    <label for="r2">radio2</label>
  </form>
<script>

    function showValues() {
      var fields = $(":input").serializeArray();
      $("#results").empty();
      jQuery.each(fields, function(i, field){
        $("#results").append(field.value + " ");
      });
    }

    $(":checkbox, :radio").click(showValues);
    $("select").change(showValues);
    showValues();
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/show/index.html0000644000175000017500000002054211654657350015377 0ustar metalmetal

.show()

.show( ) Returns: jQuery

Description: Display the matched elements.

  • version added: 1.0.show()

  • version added: 1.0.show( duration [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.show( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

With no parameters, the .show() method is the simplest way to display an element:

$('.target').show();

The matched elements will be revealed immediately, with no animation. This is roughly equivalent to calling .css('display', 'block'), except that the display property is restored to whatever it was initially. If an element has a display value of inline, then is hidden and shown, it will once again be displayed inline.

Note: If using !important in your styles, such as display: none !important, it is necessary to override the style using .css('display', 'block !important') should you wish for .show() to function correctly.

When a duration is provided, .show() becomes an animation method. The .show() method animates the width, height, and opacity of the matched elements simultaneously.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />
With the element initially hidden, we can show it slowly:
$('#clickme').click(function() {
  $('#book').show('slow', function() {
    // Animation complete.
  });
});

Additional Notes:

  • All jQuery effects, including .show(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.

Examples:

Example: Animates all hidden paragraphs to show slowly, completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
      p { background:yellow; }
      </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Show it</button>

      <p style="display: none">Hello  2</p>
<script>
    $("button").click(function () {
    $("p").show("slow");
    });
    </script>

</body>
</html>

Demo:

Example: Animates all hidden divs to show fastly in order, completing each animation within 200 milliseconds. Once each animation is done, it starts the next one.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { background:#def3ca; margin:3px; width:80px; 
  display:none; float:left; text-align:center; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <button id="showr">Show</button>
  <button id="hidr">Hide</button>
  <div>Hello 3,</div>

  <div>how</div>
  <div>are</div>
  <div>you?</div>
<script>
$("#showr").click(function () {
  $("div:eq(0)").show("fast", function () {
    /* use callee so don't have to name the function */
    $(this).next("div").show("fast", arguments.callee);
  });
});
$("#hidr").click(function () {
  $("div").hide(2000);
});

</script>

</body>
</html>

Demo:

Example: Shows all span and input elements with an animation. Once the animation is done, it changes the text.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { display:none; }
  div { display:none; }
  p { font-weight:bold; background-color:#fcd; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Do it!</button>
  <span>Are you sure? (type 'yes' if you are) </span>
  <div>
    <form>
      <input type="text"  value="as;ldkfjalsdf"/>
    </form>
  </div>
  <p style="display:none;">I'm hidden...</p>
  
<script>
function doIt() {
  $("span,div").show("slow");
}
/* can pass in function name */
$("button").click(doIt);

$("form").submit(function () {
  if ($("input").val() == "yes") {
    $("p").show(4000, function () {
      $(this).text("Ok, DONE! (now showing)");
    });
  }
  $("span,div").hide("fast");
  /* to stop the submit */
  return false; 
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/siblings/index.html0000644000175000017500000001155311654657444016237 0ustar metalmetal

.siblings()

.siblings( [selector] ) Returns: jQuery

Description: Get the siblings of each element in the set of matched elements, optionally filtered by a selector.

  • version added: 1.0.siblings( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .siblings() method allows us to search through the siblings of these elements in the DOM tree and construct a new jQuery object from the matching elements.

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a simple list on it:

<ul>
   <li>list item 1</li>
   <li>list item 2</li>
   <li class="third-item">list item 3</li>
   <li>list item 4</li>
   <li>list item 5</li>
</ul>

If we begin at the third item, we can find its siblings:

$('li.third-item').siblings().css('background-color', 'red');

The result of this call is a red background behind items 1, 2, 4, and 5. Since we do not supply a selector expression, all of the siblings are part of the object. If we had supplied one, only the matching items among these four would be included.

The original element is not included among the siblings, which is important to remember when we wish to find all elements at a particular level of the DOM tree.

Examples:

Example: Find the unique siblings of all yellow li elements in the 3 lists (including other yellow li elements if appropriate).

<!DOCTYPE html>
<html>
<head>
  <style>
  ul { float:left; margin:5px; font-size:16px; font-weight:bold; }
  p { color:blue; margin:10px 20px; font-size:16px; padding:5px; 
      font-weight:bolder; }
  .hilite { background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li>One</li>

    <li>Two</li>
    <li class="hilite">Three</li>
    <li>Four</li>
  </ul>

  <ul>
    <li>Five</li>
    <li>Six</li>
    <li>Seven</li>

  </ul>
  <ul>
    <li>Eight</li>
    <li class="hilite">Nine</li>

    <li>Ten</li>
    <li class="hilite">Eleven</li>
  </ul>
  <p>Unique siblings: <b></b></p>
<script>

    var len = $(".hilite").siblings()
                          .css("color", "red")
                          .length;
    $("b").text(len);
</script>

</body>
</html>

Demo:

Example: Find all siblings with a class "selected" of each div.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div><span>Hello</span></div>

  <p class="selected">Hello Again</p>
  <p>And Again</p>
<script>$("p").siblings(".selected").css("background", "yellow");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/size/index.html0000644000175000017500000000566211654657406015401 0ustar metalmetal

.size()

.size() Returns: Number

Description: Return the number of elements in the jQuery object.

  • version added: 1.0.size()

The .size() method is functionally equivalent to the .length property; however, the .length property is preferred because it does not have the overhead of a function call.

Given a simple unordered list on the page:

<ul>
  <li>foo</li>
  <li>bar</li>
</ul>

Both .size() and .length identify the number of items:

alert( "Size: " + $("li").size() );
alert( "Size: " + $("li").length );

This results in two alerts:

Size: 2

Size: 2

Example:

Count the divs. Click to add more.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { cursor:pointer; min-height: 100px; }
  div { width:50px; height:30px; margin:5px; 
        float:left; background:blue; }
  span { color:red; }
 </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<span></span>
 <div></div>

<script>
$(document.body)
.click(function() { 
  $(this).append( $("<div>") );
  var n = $("div").size();
  $("span").text("There are " + n + " divs. Click to add more.");
})
// trigger the click to start
.click(); 
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/slice/index.html0000644000175000017500000001530311654657446015523 0ustar metalmetal

.slice()

.slice( start [, end] ) Returns: jQuery

Description: Reduce the set of matched elements to a subset specified by a range of indices.

  • version added: 1.1.4.slice( start [, end] )

    startAn integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.

    endAn integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.

Given a jQuery object that represents a set of DOM elements, the .slice() method constructs a new jQuery object from a subset of the matching elements. The supplied start index identifies the position of one of the elements in the set; if end is omitted, all elements after this one will be included in the result.

Consider a page with a simple list on it:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
</ul>

We can apply this method to the set of list items:

$('li').slice(2).css('background-color', 'red');

The result of this call is a red background for items 3, 4, and 5. Note that the supplied index is zero-based, and refers to the position of elements within the jQuery object, not within the DOM tree.

The end parameter allows us to limit the selected range even further. For example:

$('li').slice(2, 4).css('background-color', 'red');

Now only items 3 and 4 are selected. The index is once again zero-based; the range extends up to but not including the specified index.

Negative Indices

The jQuery .slice() method is patterned after the JavaScript .slice() method for arrays. One of the features that it mimics is the ability for negative numbers to be passed as either the start or end parameter. If a negative number is provided, this indicates a position starting from the end of the set, rather than the beginning. For example:

$('li').slice(-2, -1).css('background-color', 'red');

This time only list item 4 is turned red, since it is the only item in the range between two from the end (-2) and one from the end (-1).

Examples:

Example: Turns divs yellow based on a random slice.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:40px; height:40px; margin:10px; float:left;
        border:2px solid blue; }
  span { color:red; font-weight:bold; }
  button { margin:5px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><button>Turn slice yellow</button>
  <span>Click the button!</span></p>
  <div></div>
  <div></div>

  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>

  <div></div>
  <div></div>
<script>

    function colorEm() {
      var $div = $("div");
      var start = Math.floor(Math.random() *
                             $div.length);
      var end = Math.floor(Math.random() *
                           ($div.length - start)) +
                           start + 1;
      if (end == $div.length) end = undefined;
      $div.css("background", "");
      if (end) 
        $div.slice(start, end).css("background", "yellow");   
       else
        $div.slice(start).css("background", "yellow");
      
      $("span").text('$("div").slice(' + start +
                     (end ? ', ' + end : '') +
                     ').css("background", "yellow");');
    }

    $("button").click(colorEm);

</script>

</body>
</html>

Demo:

Example: Selects all paragraphs, then slices the selection to include only the first element.

$("p").slice(0, 1).wrapInner("<b></b>");

Example: Selects all paragraphs, then slices the selection to include only the first and second element.

$("p").slice(0, 2).wrapInner("<b></b>");

Example: Selects all paragraphs, then slices the selection to include only the second element.

$("p").slice(1, 2).wrapInner("<b></b>");

Example: Selects all paragraphs, then slices the selection to include only the second and third element.

$("p").slice(1).wrapInner("<b></b>");

Example: Selects all paragraphs, then slices the selection to include only the third element.

$("p").slice(-1).wrapInner("<b></b>");
jqapi-1.7/docs/slideDown/index.html0000644000175000017500000001767611654657350016365 0ustar metalmetal

.slideDown()

.slideDown( [duration] [, callback] ) Returns: jQuery

Description: Display the matched elements with a sliding motion.

  • version added: 1.0.slideDown( [duration] [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.slideDown( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .slideDown() method animates the height of the matched elements. This causes lower parts of the page to slide down, making way for the revealed items.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively. If any other string is supplied, or if the duration parameter is omitted, the default duration of 400 milliseconds is used.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />

With the element initially hidden, we can show it slowly:

$('#clickme').click(function() {
  $('#book').slideDown('slow', function() {
    // Animation complete.
  });
});

Easing

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .slideDown(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Animates all divs to slide down and show themselves over 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
div { background:#de9a44; margin:3px; width:80px; 
height:40px; display:none; float:left; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Click me!
<div></div>
<div></div>
<div></div>
<script>
$(document.body).click(function () {
if ($("div:first").is(":hidden")) {
$("div").slideDown("slow");
} else {
$("div").hide();
}
});

</script>

</body>
</html>

Demo:

Example: Animates all inputs to slide down, completing the animation within 1000 milliseconds. Once the animation is done, the input look is changed especially if it is the middle input which gets the focus.

<!DOCTYPE html>
<html>
<head>
  <style>
div { background:#cfd; margin:3px; width:50px; 
text-align:center; float:left; cursor:pointer;
border:2px outset black; font-weight:bolder; }
input { display:none; width:120px; float:left; 
margin:10px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>Push!</div>
<input type="text" />
<input type="text" class="middle" />

<input type="text" />
<script>
$("div").click(function () {
$(this).css({ borderStyle:"inset", cursor:"wait" });
$("input").slideDown(1000,function(){
$(this).css("border", "2px red inset")
.filter(".middle")
 .css("background", "yellow")
 .focus();
$("div").css("visibility", "hidden");
});
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/slideToggle/index.html0000644000175000017500000002162011654657350016657 0ustar metalmetal

.slideToggle()

.slideToggle( [duration] [, callback] ) Returns: jQuery

Description: Display or hide the matched elements with a sliding motion.

  • version added: 1.0.slideToggle( [duration] [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.slideToggle( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .slideToggle() method animates the height of the matched elements. This causes lower parts of the page to slide up or down, appearing to reveal or conceal the items. If the element is initially displayed, it will be hidden; if hidden, it will be shown. The display property is saved and restored as needed. If an element has a display value of inline, then is hidden and shown, it will once again be displayed inline. When the height reaches 0 after a hiding animation, the display style property is set to none to ensure that the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />

We will cause .slideToggle() to be called when another element is clicked:

$('#clickme').click(function() {
  $('#book').slideToggle('slow', function() {
    // Animation complete.
  });
});

With the element initially shown, we can hide it slowly with the first click:

A second click will show the element once again:

Easing

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .slideToggle(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Animates all paragraphs to slide up or down, completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { width:400px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Toggle</button>

  <p>
    This is the paragraph to end all paragraphs.  You
    should feel <em>lucky</em> to have seen such a paragraph in
    your life.  Congratulations!
  </p>
<script>
    $("button").click(function () {
      $("p").slideToggle("slow");
    });
</script>

</body>
</html>

Demo:

Example: Animates divs between dividers with a toggle that makes some appear and some disappear.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { background:#b977d1; margin:3px; width:60px; 
        height:60px; float:left; }
  div.still { background:#345; width:5px; }
  div.hider { display:none; }
  span { color:red; }
  p { clear: left; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
<div class="still"></div>
<div style="display:none;">
</div><div class="still"></div>
<div></div>
<div class="still"></div>
<div class="hider"></div>
<div class="still"></div>
<div class="hider"></div>
<div class="still"></div>
<div></div>
<p><button id="aa">Toggle</button> There have been <span>0</span> toggled divs.</p>
<script>
  $("#aa").click(function () {
    $("div:not(.still)").slideToggle("slow", function () {
      var n = parseInt($("span").text(), 10);
      $("span").text(n + 1);
    });
  });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/slideUp/index.html0000644000175000017500000002016011654657352016022 0ustar metalmetal

.slideUp()

.slideUp( [duration] [, callback] ) Returns: jQuery

Description: Hide the matched elements with a sliding motion.

  • version added: 1.0.slideUp( [duration] [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.slideUp( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .slideUp() method animates the height of the matched elements. This causes lower parts of the page to slide up, appearing to conceal the items. Once the height reaches 0 (or, if set, to whatever the CSS min-height property is), the display style property is set to none to ensure that the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively. If any other string is supplied, or if the duration parameter is omitted, the default duration of 400 milliseconds is used.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />

With the element initially shown, we can hide it slowly:

$('#clickme').click(function() {
  $('#book').slideUp('slow', function() {
    // Animation complete.
  });
});
  

Easing

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .slideUp(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Animates all divs to slide up, completing the animation within 400 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { background:#3d9a44; margin:3px; width:80px; 
    height:40px; float:left; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Click me!
  <div></div>
  <div></div>
  <div></div>
  <div></div>

  <div></div>
<script>
  $(document.body).click(function () {
    if ($("div:first").is(":hidden")) {
      $("div").show("slow");
    } else {
      $("div").slideUp();
    }
  });

  </script>

</body>
</html>

Demo:

Example: Animates the parent paragraph to slide up, completing the animation within 200 milliseconds. Once the animation is done, it displays an alert.

<!DOCTYPE html>
<html>
<head>
  <style>
 div { margin:2px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
  <button>Hide One</button>
  <input type="text" value="One" />

</div>
<div>
  <button>Hide Two</button>
  <input type="text" value="Two" />

</div>
<div>
  <button>Hide Three</button>
  <input type="text" value="Three" />

</div>
<div id="msg"></div>
<script>
  $("button").click(function () {
    $(this).parent().slideUp("slow", function () {
      $("#msg").text($("button", this).text() + " has completed.");
    });
  });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/add/index.html0000644000175000017500000002155711654657434015161 0ustar metalmetal

.add()

.add( selector ) Returns: jQuery

Description: Add elements to the set of matched elements.

  • version added: 1.0.add( selector )

    selectorA string representing a selector expression to find additional elements to add to the set of matched elements.

  • version added: 1.0.add( elements )

    elementsOne or more elements to add to the set of matched elements.

  • version added: 1.0.add( html )

    htmlAn HTML fragment to add to the set of matched elements.

  • version added: 1.3.2.add( jQuery object )

    jQuery objectAn existing jQuery object to add to the set of matched elements.

  • version added: 1.4.add( selector, context )

    selectorA string representing a selector expression to find additional elements to add to the set of matched elements.

    contextThe point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.

Given a jQuery object that represents a set of DOM elements, the .add() method constructs a new jQuery object from the union of those elements and the ones passed into the method. The argument to .add() can be pretty much anything that $() accepts, including a jQuery selector expression, references to DOM elements, or an HTML snippet.

The updated set of elements can be used in a following (chained) method, or assigned to a variable for later use. For example:

$("p").add("div").addClass("widget");
var pdiv = $("p").add("div");

The following will not save the added elements, because the .add() method creates a new set and leaves the original set in pdiv unchanged:

var pdiv = $("p");
pdiv.add("div");  // WRONG, pdiv will not change

Consider a page with a simple list and a paragraph following it:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
</ul>
<p>a paragraph</p>

We can select the list items and then the paragraph by using either a selector or a reference to the DOM element itself as the .add() method's argument:

$('li').add('p').css('background-color', 'red');

Or:

$('li').add(document.getElementsByTagName('p')[0])
  .css('background-color', 'red');

The result of this call is a red background behind all four elements. Using an HTML snippet as the .add() method's argument (as in the third version), we can create additional elements on the fly and add those elements to the matched set of elements. Let's say, for example, that we want to alter the background of the list items along with a newly created paragraph:

$('li').add('<p id="new">new paragraph</p>')
  .css('background-color', 'red');

Although the new paragraph has been created and its background color changed, it still does not appear on the page. To place it on the page, we could add one of the insertion methods to the chain.

As of jQuery 1.4 the results from .add() will always be returned in document order (rather than a simple concatenation).

Note: To reverse the .add() you can use .not( elements | selector ) to remove elements from the jQuery results, or .end() to return to the selection before you added.

Examples:

Example: Finds all divs and makes a border. Then adds all paragraphs to the jQuery object to set their backgrounds yellow.

<!DOCTYPE html>
<html>
<head>
  <style>
 div { width:60px; height:60px; margin:10px; float:left; }
 p { clear:left; font-weight:bold; font-size:16px; 
     color:blue; margin:0 10px; padding:2px; }
 </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>

  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>

  <p>Added this... (notice no border)</p>
<script>

$("div").css("border", "2px solid red")
        .add("p")
        .css("background", "yellow");
</script>

</body>
</html>

Demo:

Example: Adds more elements, matched by the given expression, to the set of matched elements.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><span>Hello Again</span>
<script>$("p").add("span").css("background", "yellow");</script>

</body>
</html>

Demo:

Example: Adds more elements, created on the fly, to the set of matched elements.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
<script>$("p").clone().add("<span>Again</span>").appendTo(document.body);</script>

</body>
</html>

Demo:

Example: Adds one or more Elements to the set of matched elements.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><span id="a">Hello Again</span>
<script>$("p").add(document.getElementById("a")).css("background", "yellow");</script>

</body>
</html>

Demo:

Example: Demonstrates how to add (or push) elements to an existing collection

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><span id="a">Hello Again</span>
<script>var collection = $("p");
// capture the new collection
collection = collection.add(document.getElementById("a"));
collection.css("background", "yellow");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/addClass/index.html0000644000175000017500000001363411654657322016140 0ustar metalmetal

.addClass()

.addClass( className ) Returns: jQuery

Description: Adds the specified class(es) to each of the set of matched elements.

  • version added: 1.0.addClass( className )

    classNameOne or more class names to be added to the class attribute of each matched element.

  • version added: 1.4.addClass( function(index, currentClass) )

    function(index, currentClass)A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.

It's important to note that this method does not replace a class. It simply adds the class, appending it to any which may already be assigned to the elements.

More than one class may be added at a time, separated by a space, to the set of matched elements, like so:

$("p").addClass("myClass yourClass");

This method is often used with .removeClass() to switch elements' classes from one to another, like so:

$("p").removeClass("myClass noClass").addClass("yourClass");

Here, the myClass and noClass classes are removed from all paragraphs, while yourClass is added.

As of jQuery 1.4, the .addClass() method's argument can receive a function.

$("ul li:last").addClass(function() {
  return "item-" + $(this).index();
});

Given an unordered list with five <li> elements, this example adds the class "item-4" to the last <li>.

Examples:

Example: Adds the class "selected" to the matched elements.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin: 8px; font-size:16px; }
  .selected { color:blue; }
  .highlight { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Hello</p>
  <p>and</p>
  <p>Goodbye</p>
  
<script>
  $("p:last").addClass("selected");
  </script>

</body>
</html>

Demo:

Example: Adds the classes "selected" and "highlight" to the matched elements.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin: 8px; font-size:16px; }
  .selected { color:red; }
  .highlight { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <p>and</p>
  <p>Goodbye</p>
<script>
  $("p:last").addClass("selected highlight");
  </script>

</body>
</html>

Demo:

Example: Pass in a function to .addClass() to add the "green" class to a div that already has a "red" class.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { background: white; }
  .red { background: red; }
  .red.green { background: green; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
 <div>This div should be white</div>
 <div class="red">This div will be green because it now has the "green" and "red" classes.
   It would be red if the addClass function failed.</div>
 <div>This div should be white</div>
 <p>There are zero green divs</p>

<script>
  $("div").addClass(function(index, currentClass) {
    var addedClass;

    if ( currentClass === "red" ) {
      addedClass = "green";
      $("p").text("There is one green div");
    }
  
    return addedClass;
  });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/after/index.html0000644000175000017500000002024111654657376015524 0ustar metalmetal

.after()

.after( content [, content] ) Returns: jQuery

Description: Insert content, specified by the parameter, after each element in the set of matched elements.

  • version added: 1.0.after( content [, content] )

    contentHTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.

    contentOne or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.

  • version added: 1.4.after( function(index) )

    function(index)A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.

The .after() and .insertAfter() methods perform the same task. The major difference is in the syntax—specifically, in the placement of the content and target. With .after(), the selector expression preceding the method is the container after which the content is inserted. With .insertAfter(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted after the target container.

Using the following HTML:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

Content can be created and then inserted after several elements at once:

$('.inner').after('<p>Test</p>');

Each inner <div> element gets this new content:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <p>Test</p>
  <div class="inner">Goodbye</div>
  <p>Test</p>
</div>

An element in the DOM can also be selected and inserted after another element:

$('.container').after($('h2'));

If an element selected this way is inserted elsewhere, it will be moved rather than cloned:

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>
<h2>Greetings</h2>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first.

Inserting Disconnected DOM nodes

As of jQuery 1.4, .before() and .after() will also work on disconnected DOM nodes. For example, given the following code:

$('<div/>').after('<p></p>');

The result is a jQuery set containing a div and a paragraph, in that order. That set can be further manipulated, even before it is inserted in the document.

$('<div/>').after('<p></p>').addClass('foo')
  .filter('p').attr('id', 'bar').html('hello')
.end()
.appendTo('body');

This results in the following elements inserted just before the closing </body> tag:

<div class="foo"></div>
<p class="foo" id="bar">hello</p>

Passing a Function

As of jQuery 1.4, .after() supports passing a function that returns the elements to insert.

$('p').after(function() {
  return '<div>' + this.className + '</div>';
});

This example inserts a <div> after each paragraph, with each new <div> containing the class name(s) of its preceding paragraph.

Additional Arguments

Similar to other content-adding methods such as .prepend() and .before(), .after() also supports passing in multiple arguments as input. Supported input includes DOM elements, jQuery objects, HTML strings, and arrays of DOM elements.

For example, the following will insert two new <div>s and an existing <div> after the first paragraph:

var $newdiv1 = $('<div id="object1"/>'),
    newdiv2 = document.createElement('div'),
    existingdiv1 = document.getElementById('foo');

$('p').first().after($newdiv1, [newdiv2, existingdiv1]);

Since .after() can accept any number of additional arguments, the same result can be achieved by passing in the three <div>s as three separate arguments, like so: $('p').first().after($newdiv1, newdiv2, existingdiv1). The type and number of arguments will largely depend on the elements are collected in the code.

Examples:

Example: Inserts some HTML after all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>I would like to say: </p>
<script>$("p").after("<b>Hello</b>");</script>

</body>
</html>

Demo:

Example: Inserts a DOM element after all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>I would like to say: </p>
<script>$("p").after( document.createTextNode("Hello") );</script>

</body>
</html>

Demo:

Example: Inserts a jQuery object (similar to an Array of DOM Elements) after all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <b>Hello</b><p>I would like to say: </p>
<script>$("p").after( $("b") );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/ajaxComplete/index.html0000644000175000017500000000761111654657312017033 0ustar metalmetal

.ajaxComplete()

.ajaxComplete( handler(event, XMLHttpRequest, ajaxOptions) ) Returns: jQuery

Description: Register a handler to be called when Ajax requests complete. This is an Ajax Event.

  • version added: 1.0.ajaxComplete( handler(event, XMLHttpRequest, ajaxOptions) )

    handler(event, XMLHttpRequest, ajaxOptions)The function to be invoked.

Whenever an Ajax request completes, jQuery triggers the ajaxComplete event. Any and all handlers that have been registered with the .ajaxComplete() method are executed at this time.

To observe this method in action, we can set up a basic Ajax load request:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

We can attach our event handler to any element:

$('.log').ajaxComplete(function() {
  $(this).text('Triggered ajaxComplete handler.');
});

Now, we can make an Ajax request using any jQuery method:

$('.trigger').click(function() {
  $('.result').load('ajax/test.html');
});

When the user clicks the button and the Ajax request completes, the log message is displayed.

Note: Because .ajaxComplete() is implemented as a method of jQuery object instances, we can use the this keyword as we do here to refer to the selected elements within the callback function.

All ajaxComplete handlers are invoked, regardless of what Ajax request was completed. If we must differentiate between the requests, we can use the parameters passed to the handler. Each time an ajaxComplete handler is executed, it is passed the event object, the XMLHttpRequest object, and the settings object that was used in the creation of the request. For example, we can restrict our callback to only handling events dealing with a particular URL:

Note: You can get the returned ajax contents by looking at xhr.responseXML or xhr.responseHTML for xml and html respectively.

$('.log').ajaxComplete(function(e, xhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxComplete handler. The result is ' +
                     xhr.responseHTML);
  }
});

Example:

Show a message when an Ajax request completes.

$("#msg").ajaxComplete(function(event,request, settings){
   $(this).append("<li>Request Complete.</li>");
 });
jqapi-1.7/docs/ajaxError/index.html0000644000175000017500000000766611654657314016370 0ustar metalmetal

.ajaxError()

.ajaxError( handler(event, jqXHR, ajaxSettings, thrownError) ) Returns: jQuery

Description: Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.

  • version added: 1.0.ajaxError( handler(event, jqXHR, ajaxSettings, thrownError) )

    handler(event, jqXHR, ajaxSettings, thrownError)The function to be invoked.

Whenever an Ajax request completes with an error, jQuery triggers the ajaxError event. Any and all handlers that have been registered with the .ajaxError() method are executed at this time.

To observe this method in action, set up a basic Ajax load request.

<button class="trigger">Trigger</button>
<div class="result"></div>
<div class="log"></div>

Attach the event handler to any element:

$("div.log").ajaxError(function() {
  $(this).text( "Triggered ajaxError handler." );
});

Now, make an Ajax request using any jQuery method:

$("button.trigger").click(function() {
  $("div.result").load( "ajax/missing.html" );
});

When the user clicks the button and the Ajax request fails, because the requested file is missing, the log message is displayed.

Note: Because .ajaxError() is implemented as a method of jQuery object instances, you can use the this keyword within the callback function to refer to the selected elements.

All ajaxError handlers are invoked, regardless of what Ajax request was completed. To differentiate between the requests, you can use the parameters passed to the handler. Each time an ajaxError handler is executed, it is passed the event object, the jqXHR object (prior to jQuery 1.5, the XHR object), and the settings object that was used in the creation of the request. If the request failed because JavaScript raised an exception, the exception object is passed to the handler as a fourth parameter. For example, to restrict the error callback to only handling events dealing with a particular URL:

$( "div.log" ).ajaxError(function(e, jqxhr, settings, exception) {
  if ( settings.url == "ajax/missing.html" ) {
    $(this).text( "Triggered ajaxError handler." );
  }
});

Example:

Show a message when an Ajax request fails.

$("#msg").ajaxError(function(event, request, settings){
  $(this).append("<li>Error requesting page " + settings.url + "</li>");
});
jqapi-1.7/docs/ajaxSend/index.html0000644000175000017500000000732211654657314016155 0ustar metalmetal

.ajaxSend()

.ajaxSend( handler(event, jqXHR, ajaxOptions) ) Returns: jQuery

Description: Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.

  • version added: 1.0.ajaxSend( handler(event, jqXHR, ajaxOptions) )

    handler(event, jqXHR, ajaxOptions)The function to be invoked.

Whenever an Ajax request is about to be sent, jQuery triggers the ajaxSend event. Any and all handlers that have been registered with the .ajaxSend() method are executed at this time.

To observe this method in action, we can set up a basic Ajax load request:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

We can attach our event handler to any element:

$('.log').ajaxSend(function() {
  $(this).text('Triggered ajaxSend handler.');
});

Now, we can make an Ajax request using any jQuery method:

$('.trigger').click(function() {
  $('.result').load('ajax/test.html');
});

When the user clicks the button and the Ajax request is about to begin, the log message is displayed.

Note: Because .ajaxSend() is implemented as a method of jQuery instances, we can use the this keyword as we do here to refer to the selected elements within the callback function.

All ajaxSend handlers are invoked, regardless of what Ajax request is to be sent. If we must differentiate between the requests, we can use the parameters passed to the handler. Each time an ajaxSend handler is executed, it is passed the event object, the jqXHR object (in version 1.4, XMLHttpRequestobject), and the settings object that was used in the creation of the Ajax request. For example, we can restrict our callback to only handling events dealing with a particular URL:

$('.log').ajaxSend(function(e, jqxhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxSend handler.');
  }
});

Example:

Show a message before an Ajax request is sent.

$("#msg").ajaxSend(function(evt, request, settings){
        $(this).append("<li>Starting request at " + settings.url + "</li>");
      });
jqapi-1.7/docs/ajaxStart/index.html0000644000175000017500000000566311654657314016367 0ustar metalmetal

.ajaxStart()

.ajaxStart( handler() ) Returns: jQuery

Description: Register a handler to be called when the first Ajax request begins. This is an Ajax Event.

  • version added: 1.0.ajaxStart( handler() )

    handler()The function to be invoked.

Whenever an Ajax request is about to be sent, jQuery checks whether there are any other outstanding Ajax requests. If none are in progress, jQuery triggers the ajaxStart event. Any and all handlers that have been registered with the .ajaxStart() method are executed at this time.

To observe this method in action, we can set up a basic Ajax load request:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

We can attach our event handler to any element:

$('.log').ajaxStart(function() {
  $(this).text('Triggered ajaxStart handler.');
});

Now, we can make an Ajax request using any jQuery method:

$('.trigger').click(function() {
  $('.result').load('ajax/test.html');
});

When the user clicks the button and the Ajax request is sent, the log message is displayed.

Note: Because .ajaxStart() is implemented as a method of jQuery object instances, we can use the this keyword as we do here to refer to the selected elements within the callback function.

Example:

Show a loading message whenever an Ajax request starts (and none is already active).

$("#loading").ajaxStart(function(){
   $(this).show();
 });
jqapi-1.7/docs/ajaxStop/index.html0000644000175000017500000000604511654657314016212 0ustar metalmetal

.ajaxStop()

.ajaxStop( handler() ) Returns: jQuery

Description: Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.

  • version added: 1.0.ajaxStop( handler() )

    handler()The function to be invoked.

Whenever an Ajax request completes, jQuery checks whether there are any other outstanding Ajax requests. If none remain, jQuery triggers the ajaxStop event. Any and all handlers that have been registered with the .ajaxStop() method are executed at this time. The ajaxStop event is also triggered if the last outstanding Ajax request is cancelled by returning false within the beforeSend callback function.

To observe this method in action, we can set up a basic Ajax load request:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

We can attach our event handler to any element:

$('.log').ajaxStop(function() {
  $(this).text('Triggered ajaxStop handler.');
});

Now, we can make an Ajax request using any jQuery method:

$('.trigger').click(function() {
  $('.result').load('ajax/test.html');
});

When the user clicks the button and the Ajax request completes, the log message is displayed.

Because .ajaxStop() is implemented as a method of jQuery object instances, we can use the this keyword as we do here to refer to the selected elements within the callback function.

Example:

Hide a loading message after all the Ajax requests have stopped.

$("#loading").ajaxStop(function(){
      $(this).hide();
      });
jqapi-1.7/docs/ajaxSuccess/index.html0000644000175000017500000000770711654657316016705 0ustar metalmetal

.ajaxSuccess()

.ajaxSuccess( handler(event, XMLHttpRequest, ajaxOptions) ) Returns: jQuery

Description: Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.

  • version added: 1.0.ajaxSuccess( handler(event, XMLHttpRequest, ajaxOptions) )

    handler(event, XMLHttpRequest, ajaxOptions)The function to be invoked.

Whenever an Ajax request completes successfully, jQuery triggers the ajaxSuccess event. Any and all handlers that have been registered with the .ajaxSuccess() method are executed at this time.

To observe this method in action, we can set up a basic Ajax load request:

<div class="trigger">Trigger</div>
<div class="result"></div>
<div class="log"></div>

We can attach our event handler to any element:

$('.log').ajaxSuccess(function() {
  $(this).text('Triggered ajaxSuccess handler.');
});

Now, we can make an Ajax request using any jQuery method:

$('.trigger').click(function() {
  $('.result').load('ajax/test.html');
});

When the user clicks the button and the Ajax request completes successfully, the log message is displayed.

Note: Because .ajaxSuccess() is implemented as a method of jQuery object instances, we can use the this keyword as we do here to refer to the selected elements within the callback function.

All ajaxSuccess handlers are invoked, regardless of what Ajax request was completed. If we must differentiate between the requests, we can use the parameters passed to the handler. Each time an ajaxSuccess handler is executed, it is passed the event object, the XMLHttpRequest object, and the settings object that was used in the creation of the request. For example, we can restrict our callback to only handling events dealing with a particular URL:

Note: You can get the returned ajax contents by looking at xhr.responseXML or xhr.responseHTML for xml and html respectively.

$('.log').ajaxSuccess(function(e, xhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxSuccess handler. The ajax response was:' 
                     + xhr.responseHTML );
  }
});

Example:

Show a message when an Ajax request completes successfully.

$("#msg").ajaxSuccess(function(evt, request, settings){
      $(this).append("<li>Successful Request!</li>");
      });
jqapi-1.7/docs/all-selector/index.html0000644000175000017500000000634311654657412017007 0ustar metalmetal

All Selector (“*”)

all selector

version added: 1.0jQuery('*')

Description: Selects all elements.

Caution: The all, or universal, selector is extremely slow, except when used by itself.

Examples:

Example: Finds every element (including head, body, etc) in the document.

<!DOCTYPE html>
<html>
<head>
  <style>
  h3 { margin: 0; }
  div,span,p {
    width: 80px;
    height: 40px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>DIV</div>

  <span>SPAN</span>
  <p>P <button>Button</button></p>
<script>var elementCount = $("*").css("border","3px solid red").length;
$("body").prepend("<h3>" + elementCount + " elements found</h3>");</script>

</body>
</html>

Demo:

Example: A common way to select all elements is to find within document.body so elements like head, script, etc are left out.

<!DOCTYPE html>
<html>
<head>
  <style>
  h3 { margin: 0; }
  div,span,p {
    width: 80px;
    height: 40px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  #test {
    width: auto; height: auto; background-color: transparent; 
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="test">
  <div>DIV</div>
  <span>SPAN</span>
  <p>P <button>Button</button></p>
</div>
<script>
var elementCount = $("#test").find("*").css("border","3px solid red").length;
$("body").prepend("<h3>" + elementCount + " elements found</h3>");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/andSelf/index.html0000644000175000017500000000704611654657434016002 0ustar metalmetal

.andSelf()

.andSelf() Returns: jQuery

Description: Add the previous set of elements on the stack to the current set.

  • version added: 1.2.andSelf()

As described in the discussion for .end(), jQuery objects maintain an internal stack that keeps track of changes to the matched set of elements. When one of the DOM traversal methods is called, the new set of elements is pushed onto the stack. If the previous set of elements is desired as well, .andSelf() can help.

Consider a page with a simple list on it:

<ul>
   <li>list item 1</li>
   <li>list item 2</li>
   <li class="third-item">list item 3</li>
   <li>list item 4</li>
   <li>list item 5</li>
</ul>

The result of the following code is a red background behind items 3, 4 and 5:

$('li.third-item').nextAll().andSelf()
  .css('background-color', 'red');

First, the initial selector locates item 3, initializing the stack with the set containing just this item. The call to .nextAll() then pushes the set of items 4 and 5 onto the stack. Finally, the .andSelf() invocation merges these two sets together, creating a jQuery object that points to all three items in document order: {[<li.third-item>,<li>,<li> ]}.

Example:

Find all divs, and all the paragraphs inside of them, and give them both class names. Notice the div doesn't have the yellow background color since it didn't use .andSelf().

<!DOCTYPE html>
<html>
<head>
  <style>
  p, div { margin:5px; padding:5px; }
  .border { border: 2px solid red; }
  .background { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <p>First Paragraph</p>
    <p>Second Paragraph</p>
  </div>
<script>
    $("div").find("p").andSelf().addClass("border");
    $("div").find("p").addClass("background");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/animate/index.html0000644000175000017500000005144611654657346016051 0ustar metalmetal

.animate()

.animate( properties [, duration] [, easing] [, complete] ) Returns: jQuery

Description: Perform a custom animation of a set of CSS properties.

  • version added: 1.0.animate( properties [, duration] [, easing] [, complete] )

    propertiesA map of CSS properties that the animation will move toward.

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    completeA function to call once the animation is complete.

  • version added: 1.0.animate( properties, options )

    propertiesA map of CSS properties that the animation will move toward.

    optionsA map of additional options to pass to the method. Supported keys:

    • duration: A string or number determining how long the animation will run.
    • easing: A string indicating which easing function to use for the transition.
    • complete: A function to call once the animation is complete.
    • step: A function to be called after each step of the animation.
    • queue: A Boolean indicating whether to place the animation in the effects queue. If false, the animation will begin immediately. As of jQuery 1.7, the queue option can also accept a string, in which case the animation is added to the queue represented by that string.
    • specialEasing: A map of one or more of the CSS properties defined by the properties argument and their corresponding easing functions (added 1.4).

The .animate() method allows us to create animation effects on any numeric CSS property. The only required parameter is a map of CSS properties. This map is similar to the one that can be sent to the .css() method, except that the range of properties is more restrictive.

Animation Properties and Values

All animated properties should be animated to a single numeric value, except as noted below; most properties that are non-numeric cannot be animated using basic jQuery functionality (For example, width, height, or left can be animated but background-color cannot be, unless the jQuery.Color() plugin is used). Property values are treated as a number of pixels unless otherwise specified. The units em and % can be specified where applicable.

In addition to style properties, some non-style properties such as scrollTop and scrollLeft, as well as custom properties, can be animated.

Shorthand CSS properties (e.g. margin, background, border) are not supported. For example, if you want to retrieve the rendered margin, use: $(elem).css('marginTop') and $(elem).css('marginRight'), and so on.

In addition to numeric values, each property can take the strings 'show', 'hide', and 'toggle'. These shortcuts allow for custom hiding and showing animations that take into account the display type of the element.

Animated properties can also be relative. If a value is supplied with a leading += or -= sequence of characters, then the target value is computed by adding or subtracting the given number from the current value of the property.

Note: Unlike shorthand animation methods such as .slideDown() and .fadeIn(), the .animate() method does not make hidden elements visible as part of the effect. For example, given $('someElement').hide().animate({height:'20px'}, 500), the animation will run, but the element will remain hidden.

Duration

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

Complete Function

If supplied, the complete callback function is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, the callback is executed once per matched element, not once for the animation as a whole.

Basic Usage

To animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123"
  style="position: relative; left: 10px;" />

To animate the opacity, left offset, and height of the image simultaneously:

$('#clickme').click(function() {
  $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'
  }, 5000, function() {
    // Animation complete.
  });
});

Note that the target value of the height property is 'toggle'. Since the image was visible before, the animation shrinks the height to 0 to hide it. A second click then reverses this transition:

The opacity of the image is already at its target value, so this property is not animated by the second click. Since the target value for left is a relative value, the image moves even farther to the right during this second animation.

Directional properties (top, right, bottom, left) have no discernible effect on elements if their position style property is static, which it is by default.

Note: The jQuery UI project extends the .animate() method by allowing some non-numeric styles such as colors to be animated. The project also includes mechanisms for specifying animations through CSS classes rather than individual attributes.

Note: if attempting to animate an element with a height or width of 0px, where contents of the element are visible due to overflow, jQuery may clip this overflow during animation. By fixing the dimensions of the original element being hidden however, it is possible to ensure that the animation runs smoothly. A clearfix can be used to automatically fix the dimensions of your main element without the need to set this manually.

Step Function

The second version of .animate() provides a step option — a callback function that is fired at each step of the animation. This function is useful for enabling custom animation types or altering the animation as it is occurring. It accepts two arguments (now and fx), and this is set to the DOM element being animated.

  • now: the numeric value of the property being animated at each step
  • fx: a reference to the jQuery.fx prototype object, which contains a number of properties such as elem for the animated element, start and end for the first and last value of the animated property, respectively, and prop for the property being animated.

Note that the step function is called for each animated property on each animated element. For example, given two list items, the step function fires four times at each step of the animation:

$('li').animate({
  opacity: .5,
  height: '50%'
},
{
  step: function(now, fx) {
    var data = fx.elem.id + ' ' + fx.prop + ': ' + now;
    $('body').append('<div>' + data + '</div>');
  }
});

Easing

The remaining parameter of .animate() is a string naming an easing function to use. An easing function specifies the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Per-property Easing

As of jQuery version 1.4, you can set per-property easing functions within a single .animate() call. In the first version of .animate(), each property can take an array as its value: The first member of the array is the CSS property and the second member is an easing function. If a per-property easing function is not defined for a particular property, it uses the value of the .animate() method's optional easing argument. If the easing argument is not defined, the default swing function is used.

For example, to simultaneously animate the width and height with the swing easing function and the opacity with the linear easing function:

$('#clickme').click(function() {
  $('#book').animate({
    width: ['toggle', 'swing'],
    height: ['toggle', 'swing'],
    opacity: 'toggle'
  }, 5000, 'linear', function() {
      $(this).after('<div>Animation complete.</div>');
  });
});

In the second version of .animate(), the options map can include the specialEasing property, which is itself a map of CSS properties and their corresponding easing functions. For example, to simultaneously animate the width using the linear easing function and the height using the easeOutBounce easing function:

$('#clickme').click(function() {
  $('#book').animate({
    width: 'toggle',
    height: 'toggle'
  }, {
    duration: 5000,
    specialEasing: {
      width: 'linear',
      height: 'easeOutBounce'
    },
    complete: function() {
      $(this).after('<div>Animation complete.</div>');
    }
  });
});

As previously noted, a plugin is required for the easeOutBounce function.

Additional Notes:

  • All jQuery effects, including .animate(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Click the button to animate the div with a number of different properties.

<!DOCTYPE html>
<html>
<head>
  <style>
div {
background-color:#bca;
width:100px;
border:1px solid green;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="go">&raquo; Run</button>

<div id="block">Hello!</div>
<script>

/* Using multiple unit types within one animation. */

$("#go").click(function(){
  $("#block").animate({
    width: "70%",
    opacity: 0.4,
    marginLeft: "0.6in",
    fontSize: "3em",
    borderWidth: "10px"
  }, 1500 );
});
</script>

</body>
</html>

Demo:

Example: Animates a div's left property with a relative value. Click several times on the buttons to see the relative animations queued up.

<!DOCTYPE html>
<html>
<head>
  <style>
div {
  position:absolute;
  background-color:#abc;
  left:50px;
  width:90px;
  height:90px;
  margin:5px;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="left">&laquo;</button> <button id="right">&raquo;</button>
<div class="block"></div>

<script>
$("#right").click(function(){
  $(".block").animate({"left": "+=50px"}, "slow");
});

$("#left").click(function(){
  $(".block").animate({"left": "-=50px"}, "slow");
});

</script>

</body>
</html>

Demo:

Example: The first button shows how an unqueued animation works. It expands the div out to 90% width while the font-size is increasing. Once the font-size change is complete, the border animation will begin. The second button starts a traditional chained animation, where each animation will start once the previous animation on the element has completed.

<!DOCTYPE html>
<html>
<head>
  <style>
div {
  background-color:#bca;
  width:200px;
  height:1.1em;
  text-align:center;
  border:2px solid green;
  margin:3px;
  font-size:14px;
}
button {
  font-size:14px;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="go1">&raquo; Animate Block1</button>
<button id="go2">&raquo; Animate Block2</button>
<button id="go3">&raquo; Animate Both</button>

<button id="go4">&raquo; Reset</button>
<div id="block1">Block1</div>
<div id="block2">Block2</div>
<script>

$( "#go1" ).click(function(){
  $( "#block1" ).animate( { width: "90%" }, { queue: false, duration: 3000 })
     .animate({ fontSize: "24px" }, 1500 )
     .animate({ borderRightWidth: "15px" }, 1500 );
});

$( "#go2" ).click(function(){
  $( "#block2" ).animate({ width: "90%" }, 1000 )
     .animate({ fontSize: "24px" }, 1000 )
     .animate({ borderLeftWidth: "15px" }, 1000 );
});

$( "#go3" ).click(function(){
  $( "#go1" ).add( "#go2" ).click();
});

$( "#go4" ).click(function(){
  $( "div" ).css({ width: "", fontSize: "", borderWidth: "" });
});

</script>

</body>
</html>

Demo:

Example: Animates the first div's left property and synchronizes the remaining divs, using the step function to set their left properties at each stage of the animation.

<!DOCTYPE html>
<html>
<head>
  <style>
div {
   position: relative;
   background-color: #abc;
   width: 40px;
   height: 40px;
   float: left;
   margin: 5px;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p><button id="go">Run »</button></p>
<div class="block"></div> <div class="block"></div>
<div class="block"></div> <div class="block"></div>
<div class="block"></div> <div class="block"></div>

<script>
$( "#go" ).click(function(){
  $( ".block:first" ).animate({
    left: 100
  }, {
    duration: 1000,
    step: function( now, fx ){
      $( ".block:gt(0)" ).css( "left", now );
    }
  });
});
</script>

</body>
</html>

Demo:

Example: Animates all paragraphs to toggle both height and opacity, completing the animation within 600 milliseconds.

$( "p" ).animate({
  "height": "toggle", "opacity": "toggle"
}, "slow" );

Example: Animates all paragraph to a left style of 50 and opacity of 1 (opaque, visible), completing the animation within 500 milliseconds.

$( "p" ).animate({
  "left": "50", "opacity": 1
}, 500 );

Example: An example of using an 'easing' function to provide a different style of animation. This will only work if you have a plugin that provides this easing function. Note, this code will do nothing unless the paragraph element is hidden.

$( "p" ).animate({
  "opacity": "show"
}, "slow", "easein" );

Example: Animates all paragraphs to toggle both height and opacity, completing the animation within 600 milliseconds.

$( "p" ).animate({
  "height": "toggle", "opacity": "toggle"
}, { duration: "slow" });

Example: Animates all paragraph to a left style of 50 and opacity of 1 (opaque, visible), completing the animation within 500 milliseconds. It also will do it outside the queue, meaning it will automatically start without waiting for its turn.

$( "p" ).animate({
  left: "50px", opacity: 1
}, { duration: 500, queue: false });

Example: An example of using an 'easing' function to provide a different style of animation. This will only work if you have a plugin that provides this easing function.

$( "p" ).animate({
  "opacity": "show"
}, { "duration": "slow", "easing": "easein" });

Example: An example of using a callback function. The first argument is an array of CSS properties, the second specifies that the animation should take 1000 milliseconds to complete, the third states the easing type, and the fourth argument is an anonymous callback function.

$( "p" ).animate({
  height:200, width:400, opacity: .5
}, 1000, "linear", function(){ alert("all done"); });
jqapi-1.7/docs/animated-selector/index.html0000644000175000017500000000572111654657412020020 0ustar metalmetal

:animated Selector

animated selector

version added: 1.2jQuery(':animated')

Description: Select all elements that are in the progress of an animation at the time the selector is run.

Additional Notes:

  • Because :animated is a jQuery extension and not part of the CSS specification, queries using :animated cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :animated to select elements, first select the elements using a pure CSS selector, then use .filter(":animated").

Example:

Change the color of any div that is animated.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { background:yellow; border:1px solid #AAA; width:80px; height:80px; margin:0 5px; float:left; }
  div.colored { background:green; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="run">Run</button>

  <div></div>
  <div id="mover"></div>
  <div></div>
<script>

    $("#run").click(function(){
      $("div:animated").toggleClass("colored");
    });
    function animateIt() {
      $("#mover").slideToggle("slow", animateIt);
    }
    animateIt();
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/append/index.html0000644000175000017500000001655411654657400015672 0ustar metalmetal

.append()

.append( content [, content] ) Returns: jQuery

Description: Insert content, specified by the parameter, to the end of each element in the set of matched elements.

  • version added: 1.0.append( content [, content] )

    contentDOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.

    contentOne or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.

  • version added: 1.4.append( function(index, html) )

    function(index, html)A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.

The .append() method inserts the specified content as the last child of each element in the jQuery collection (To insert it as the first child, use .prepend()).

The .append() and .appendTo() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .append(), the selector expression preceding the method is the container into which the content is inserted. With .appendTo(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted into the target container.

Consider the following HTML:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

You can create content and insert it into several elements at once:

$('.inner').append('<p>Test</p>');

Each inner <div> element gets this new content:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">
    Hello
    <p>Test</p>
  </div>
  <div class="inner">
    Goodbye
    <p>Test</p>
  </div>
</div>

You can also select an element on the page and insert it into another:

$('.container').append($('h2'));

If an element selected this way is inserted elsewhere, it will be moved into the target (not cloned):

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
  <h2>Greetings</h2>
</div>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first.

Additional Arguments

Similar to other content-adding methods such as .prepend() and .before(), .append() also supports passing in multiple arguments as input. Supported input includes DOM elements, jQuery objects, HTML strings, and arrays of DOM elements.

For example, the following will insert two new <div>s and an existing <div> as the last three child nodes of the body:

var $newdiv1 = $('<div id="object1"/>'),
    newdiv2 = document.createElement('div'),
    existingdiv1 = document.getElementById('foo');

$('body').append($newdiv1, [newdiv2, existingdiv1]);

Since .append() can accept any number of additional arguments, the same result can be achieved by passing in the three <div>s as three separate arguments, like so: $('body').append($newdiv1, newdiv2, existingdiv1). The type and number of arguments will largely depend on how you collect the elements in your code.

Examples:

Example: Appends some HTML to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>I would like to say: </p>
<script>
  $("p").append("<strong>Hello</strong>");
</script>

</body>
</html>

Demo:

Example: Appends an Element to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>I would like to say: </p>

<script>
  $("p").append(document.createTextNode("Hello"));
</script>

</body>
</html>

Demo:

Example: Appends a jQuery object (similar to an Array of DOM Elements) to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <strong>Hello world!!!</strong><p>I would like to say: </p>
<script>
  $("p").append( $("strong") );
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/appendTo/index.html0000644000175000017500000001007711654657400016167 0ustar metalmetal

.appendTo()

.appendTo( target ) Returns: jQuery

Description: Insert every element in the set of matched elements to the end of the target.

  • version added: 1.0.appendTo( target )

    targetA selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.

The .append() and .appendTo() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .append(), the selector expression preceding the method is the container into which the content is inserted. With .appendTo(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted into the target container.

Consider the following HTML:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

We can create content and insert it into several elements at once:

$('<p>Test</p>').appendTo('.inner');

Each inner <div> element gets this new content:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">
    Hello
    <p>Test</p>
  </div>
  <div class="inner">
    Goodbye
    <p>Test</p>
  </div>
</div>

We can also select an element on the page and insert it into another:

$('h2').appendTo($('.container'));

If an element selected this way is inserted elsewhere, it will be moved into the target (not cloned):

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
  <h2>Greetings</h2>
</div>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first, and that new set (the original element plus clones) is returned.

Example:

Appends all spans to the element with the ID "foo"

<!DOCTYPE html>
<html>
<head>
  <style>#foo { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>I have nothing more to say... </span>

  <div id="foo">FOO! </div>
<script>$("span").appendTo("#foo"); // check append() examples</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attr/index.html0000644000175000017500000002446611654657324015403 0ustar metalmetal

.attr()

Contents:

.attr( attributeName ) Returns: String

Description: Get the value of an attribute for the first element in the set of matched elements.

  • version added: 1.0.attr( attributeName )

    attributeNameThe name of the attribute to get.

The .attr() method gets the attribute value for only the first element in the matched set. To get the value for each element individually, use a looping construct such as jQuery's .each() or .map() method.

As of jQuery 1.6, the .attr() method returns undefined for attributes that have not been set. In addition, .attr() should not be used on plain objects, arrays, the window, or the document. To retrieve and change DOM properties, use the .prop() method.

Using jQuery's .attr() method to get the value of an element's attribute has two main benefits:

  1. Convenience: It can be called directly on a jQuery object and chained to other jQuery methods.
  2. Cross-browser consistency: The values of some attributes are reported inconsistently across browsers, and even across versions of a single browser. The .attr() method reduces such inconsistencies.

Note: Attribute values are strings with the exception of a few attributes such as value and tabindex.

Example:

Find the title attribute of the first <em> in the page.

<!DOCTYPE html>
<html>
<head>
  <style>
  em { color:blue; font-weight;bold; }
  div { color:red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p>
  Once there was a <em title="huge, gigantic">large</em> dinosaur...
</p>

  The title of the emphasis is:<div></div>

<script>
var title = $("em").attr("title");
  $("div").text(title);
</script>

</body>
</html>

Demo:

.attr( attributeName, value ) Returns: jQuery

Description: Set one or more attributes for the set of matched elements.

  • version added: 1.0.attr( attributeName, value )

    attributeNameThe name of the attribute to set.

    valueA value to set for the attribute.

  • version added: 1.0.attr( map )

    mapA map of attribute-value pairs to set.

  • version added: 1.1.attr( attributeName, function(index, attr) )

    attributeNameThe name of the attribute to set.

    function(index, attr)A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.

The .attr() method is a convenient way to set the value of attributes—especially when setting multiple attributes or using values returned by a function. Consider the following image:

<img id="greatphoto" src="brush-seller.jpg" alt="brush seller" />

Setting a simple attribute

To change the alt attribute, simply pass the name of the attribute and its new value to the .attr() method:

$('#greatphoto').attr('alt', 'Beijing Brush Seller');

Add an attribute the same way:

$('#greatphoto')
.attr('title', 'Photo by Kelly Clark');

Setting several attributes at once

To change the alt attribute and add the title attribute at the same time, pass both sets of names and values into the method at once using a map (JavaScript object literal). Each key-value pair in the map adds or modifies an attribute:

$('#greatphoto').attr({
  alt: 'Beijing Brush Seller',
  title: 'photo by Kelly Clark'
});

When setting multiple attributes, the quotes around attribute names are optional.

WARNING: When setting the 'class' attribute, you must always use quotes!

Note: jQuery prohibits changing the type attribute on an <input> or <button> element and will throw an error in all browsers. This is because the type attribute cannot be changed in Internet Explorer.

Computed attribute values

By using a function to set attributes, you can compute the value based on other properties of the element. For example, to concatenate a new value with an existing value:

$('#greatphoto').attr('title', function(i, val) {
  return val + ' - photo by Kelly Clark'
});

This use of a function to compute attribute values can be particularly useful when modifying the attributes of multiple elements at once.

Note: If nothing is returned in the setter function (ie. function(index, attr){}), or if undefined is returned, the current value is not changed. This is useful for selectively setting values only when certain criteria are met.

Examples:

Example: Set some attributes for all <img>s in the page.

<!DOCTYPE html>
<html>
<head>
  <style>
  img { padding:10px; }
  div { color:red; font-size:24px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <img />
  <img />
  <img />

  <div><B>Attribute of Ajax</B></div>

<script>
$("img").attr({ 
  src: "/images/hat.gif",
  title: "jQuery",
  alt: "jQuery Logo"
});
$("div").text($("img").attr("alt"));
</script>

</body>
</html>

Demo:

Example: Set the id for divs based on the position in the page.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  span { color:red; }
  b { font-weight:bolder; }
        </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <div>Zero-th <span></span></div>
  <div>First <span></span></div>
  <div>Second <span></span></div>

<script>
$("div").attr("id", function (arr) {
  return "div-id" + arr;
})
.each(function () {
  $("span", this).html("(ID = '<b>" + this.id + "</b>')");
});
</script>

</body>
</html>

Demo:

Example: Set the src attribute from title attribute on the image.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<img title="hat.gif"/>

<script>
$("img").attr("src", function() { 
    return "/images/" + this.title; 
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-contains-prefix-selector/index.html0000644000175000017500000000465111654657412023351 0ustar metalmetal

Attribute Contains Prefix Selector [name|="value"]

attributeContainsPrefix selector

version added: 1.0jQuery('[attribute|="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).

This selector was introduced into the CSS specification to handle language attributes.

Example:

Finds all links with an hreflang attribute that is english.

<!DOCTYPE html>
<html>
<head>
  <style>
a { display: inline-block; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <a href="example.html" hreflang="en">Some text</a> 

  <a href="example.html" hreflang="en-UK">Some other text</a>

  <a href="example.html" hreflang="english">will not be outlined</a>
  
<script>
$('a[hreflang|="en"]').css('border','3px dotted green');
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-contains-selector/index.html0000644000175000017500000000471111654657412022053 0ustar metalmetal

Attribute Contains Selector [name*="value"]

attributeContains selector

version added: 1.0jQuery('[attribute*="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Selects elements that have the specified attribute with a value containing the a given substring.

This is the most generous of the jQuery attribute selectors that match against a value. It will select an element if the selector's string appears anywhere within the element's attribute value. Compare this selector with the Attribute Contains Word selector (e.g. [attr~="word"]), which is more appropriate in many cases.

Example:

Finds all inputs with a name attribute that contains 'man' and sets the value with some text.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <input name="man-news" />

  <input name="milkman" />
  <input name="letterman2" />
  <input name="newmilk" />
<script>$('input[name*="man"]').val('has man in it!');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-contains-word-selector/index.html0000644000175000017500000000461211654657412023024 0ustar metalmetal

Attribute Contains Word Selector [name~="value"]

attributeContainsWord selector

version added: 1.0jQuery('[attribute~="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.

This selector matches the test string against each word in the attribute value, where a "word" is defined as a string delimited by whitespace. The selector matches if the test string is exactly equal to any of the words.

Example:

Finds all inputs with a name attribute that contains the word 'man' and sets the value with some text.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <input name="man-news" />

  <input name="milk man" />
  <input name="letterman2" />
  <input name="newmilk" />
<script>$('input[name~="man"]').val('mr. man is in it!');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-ends-with-selector/index.html0000644000175000017500000000413711654657412022141 0ustar metalmetal

Attribute Ends With Selector [name$="value"]

attributeEndsWith selector

version added: 1.0jQuery('[attribute$="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.

Example:

Finds all inputs with an attribute name that ends with 'letter' and puts text in them.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <input name="newsletter" />

  <input name="milkman" />
  <input name="jobletter" />
<script>$('input[name$="letter"]').val('a letter');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-equals-selector/index.html0000644000175000017500000000477011654657412021534 0ustar metalmetal

Attribute Equals Selector [name="value"]

attributeEquals selector

version added: 1.0jQuery('[attribute="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Selects elements that have the specified attribute with a value exactly equal to a certain value.

Example:

Finds all inputs with a value of "Hot Fuzz" and changes the text of the next sibling span.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <label>
      <input type="radio" name="newsletter" value="Hot Fuzz" />
      <span>name?</span>
    </label>
  </div>
  <div>
    <label>
      <input type="radio" name="newsletter" value="Cold Fusion" />
      <span>value?</span>
    </label>
  </div>
  <div>
    <label>
      <input type="radio" name="newsletter" value="Evil Plans" />
      <span>value?</span>
    </label>
  </div>
<script>$('input[value="Hot Fuzz"]').next().text(" Hot Fuzz");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-not-equal-selector/index.html0000644000175000017500000000640711654657414022150 0ustar metalmetal

Attribute Not Equal Selector [name!="value"]

attributeNotEqual selector

version added: 1.0jQuery('[attribute!="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.

This selector is equivalent to :not([attr="value"]).

Additional Notes:

  • Because [name!="value"] is a jQuery extension and not part of the CSS specification, queries using [name!="value"] cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").not('[name="value"]') instead.

Example:

Finds all inputs that don't have the name 'newsletter' and appends text to the span next to it.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>

    <input type="radio" name="newsletter" value="Hot Fuzz" />
    <span>name is newsletter</span>

  </div>
  <div>
    <input type="radio" value="Cold Fusion" />
    <span>no name</span>

  </div>
  <div>
    <input type="radio" name="accept" value="Evil Plans" />

    <span>name is accept</span>
  </div>
<script>$('input[name!="newsletter"]').next().append('<b>; not newsletter</b>');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/attribute-starts-with-selector/index.html0000644000175000017500000000454611654657414022536 0ustar metalmetal

Attribute Starts With Selector [name^="value"]

attributeStartsWith selector

version added: 1.0jQuery('[attribute^="value"]')

  • attribute
    An attribute name.
    value
    An attribute value. Quotes are mandatory.

Description: Selects elements that have the specified attribute with a value beginning exactly with a given string.

This selector can be useful for identifying elements in pages produced by server-side frameworks that produce HTML with systematic element IDs. However it will be slower than using a class selector so leverage classes, if you can, to group like elements.

Example:

Finds all inputs with an attribute name that starts with 'news' and puts text in them.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <input name="newsletter" />

  <input name="milkman" />
  <input name="newsboy" />
<script>$('input[name^="news"]').val('news here!');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/before/index.html0000644000175000017500000001633111654657400015656 0ustar metalmetal

.before()

.before( content [, content] ) Returns: jQuery

Description: Insert content, specified by the parameter, before each element in the set of matched elements.

  • version added: 1.0.before( content [, content] )

    contentHTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.

    contentOne or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.

  • version added: 1.4.before( function )

    functionA function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.

The .before() and .insertBefore() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .before(), the selector expression preceding the method is the container before which the content is inserted. With .insertBefore(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted before the target container.

Consider the following HTML:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

You can create content and insert it before several elements at once:

$('.inner').before('<p>Test</p>');

Each inner <div> element gets this new content:

<div class="container">
  <h2>Greetings</h2>
  <p>Test</p>
  <div class="inner">Hello</div>
  <p>Test</p>
  <div class="inner">Goodbye</div>
</div>

You can also select an element on the page and insert it before another:

$('.container').before($('h2'));

If an element selected this way is inserted elsewhere, it will be moved before the target (not cloned):

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first.

In jQuery 1.4, .before() and .after() will also work on disconnected DOM nodes:

$("<div/>").before("<p></p>");

The result is a jQuery set that contains a paragraph and a div (in that order).

Additional Arguments

Similar to other content-adding methods such as .prepend() and .after(), .before() also supports passing in multiple arguments as input. Supported input includes DOM elements, jQuery objects, HTML strings, and arrays of DOM elements.

For example, the following will insert two new <div>s and an existing <div> before the first paragraph:

var $newdiv1 = $('<div id="object1"/>'),
    newdiv2 = document.createElement('div'),
    existingdiv1 = document.getElementById('foo');

$('p').first().before($newdiv1, [newdiv2, existingdiv1]);

Since .before() can accept any number of additional arguments, the same result can be achieved by passing in the three <div>s as three separate arguments, like so: $('p').first().before($newdiv1, newdiv2, existingdiv1). The type and number of arguments will largely depend on how you collect the elements in your code.

Examples:

Example: Inserts some HTML before all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p> is what I said...</p>
<script>$("p").before("<b>Hello</b>");</script>

</body>
</html>

Demo:

Example: Inserts a DOM element before all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p> is what I said...</p>
<script>$("p").before( document.createTextNode("Hello") );</script>

</body>
</html>

Demo:

Example: Inserts a jQuery object (similar to an Array of DOM Elements) before all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p> is what I said...</p><b>Hello</b>
<script>$("p").before( $("b") );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/bind/index.html0000644000175000017500000003526211654657352015342 0ustar metalmetal

.bind()

.bind( eventType [, eventData] , handler(eventObject) ) Returns: jQuery

Description: Attach a handler to an event for the elements.

  • version added: 1.0.bind( eventType [, eventData], handler(eventObject) )

    eventTypeA string containing one or more DOM event types, such as "click" or "submit," or custom event names.

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.bind( eventType [, eventData], preventBubble )

    eventTypeA string containing one or more DOM event types, such as "click" or "submit," or custom event names.

    eventDataA map of data that will be passed to the event handler.

    preventBubbleSetting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.

  • version added: 1.4.bind( events )

    eventsA map of one or more DOM event types and functions to execute for them.

As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document. For earlier versions, the .bind() method is used for attaching an event handler directly to elements. Handlers are attached to the currently selected elements in the jQuery object, so those elements must exist at the point the call to .bind() occurs. For more flexible event binding, see the discussion of event delegation in .on() or .delegate().

Any string is legal for eventType; if the string is not the name of a native DOM event, then the handler is bound to a custom event. These events are never called by the browser, but may be triggered manually from other JavaScript code using .trigger() or .triggerHandler().

If the eventType string contains a period (.) character, then the event is namespaced. The period character separates the event from its namespace. For example, in the call .bind('click.name', handler), the string click is the event type, and the string name is the namespace. Namespacing allows us to unbind or trigger some events of a type without affecting others. See the discussion of .unbind() for more information.

There are shorthand methods for some standard browser events such as .click() that can be used to attach or trigger event handlers. For a complete list of shorthand methods, see the events category.

When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound. After all handlers have executed, the event continues along the normal event propagation path.

A basic usage of .bind() is:

$('#foo').bind('click', function() {
  alert('User clicked on "foo."');
});

This code will cause the element with an ID of foo to respond to the click event. When a user clicks inside this element thereafter, the alert will be shown.

Multiple Events

Multiple event types can be bound at once by including each one separated by a space:

$('#foo').bind('mouseenter mouseleave', function() {
  $(this).toggleClass('entered');
});

The effect of this on <div id="foo"> (when it does not initially have the "entered" class) is to add the "entered" class when the mouse enters the <div> and remove the class when the mouse leaves.

As of jQuery 1.4 we can bind multiple event handlers simultaneously by passing a map of event type/handler pairs:

$('#foo').bind({
  click: function() {
    // do something on click
  },
  mouseenter: function() {
    // do something on mouseenter
  }
});

Event Handlers

The handler parameter takes a callback function, as shown above. Within the handler, the keyword this refers to the DOM element to which the handler is bound. To make use of the element in jQuery, it can be passed to the normal $() function. For example:

$('#foo').bind('click', function() {
  alert($(this).text());
});

After this code is executed, when the user clicks inside the element with an ID of foo, its text contents will be shown as an alert.

As of jQuery 1.4.2 duplicate event handlers can be bound to an element instead of being discarded. This is useful when the event data feature is being used, or when other unique data resides in a closure around the event handler function.

In jQuery 1.4.3 you can now pass in false in place of an event handler. This will bind an event handler equivalent to: function(){ return false; }. This function can be removed at a later time by calling: .unbind( eventName, false ).

The Event object

The handler callback function can also take parameters. When the function is called, the event object will be passed to the first parameter.

The event object is often unnecessary and the parameter omitted, as sufficient context is usually available when the handler is bound to know exactly what needs to be done when the handler is triggered. However, at times it becomes necessary to gather more information about the user's environment at the time the event was initiated. View the full Event Object.

Returning false from a handler is equivalent to calling both .preventDefault() and .stopPropagation() on the event object.

Using the event object in a handler looks like this:

$(document).ready(function() {
  $('#foo').bind('click', function(event) {
    alert('The mouse cursor is at ('
      + event.pageX + ', ' + event.pageY + ')');
  });
});

Note the parameter added to the anonymous function. This code will cause a click on the element with ID foo to report the page coordinates of the mouse cursor at the time of the click.

Passing Event Data

The optional eventData parameter is not commonly used. When provided, this argument allows us to pass additional information to the handler. One handy use of this parameter is to work around issues caused by closures. For example, suppose we have two event handlers that both refer to the same external variable:

var message = 'Spoon!';
$('#foo').bind('click', function() {
  alert(message);
});
message = 'Not in the face!';
$('#bar').bind('click', function() {
  alert(message);
});

Because the handlers are closures that both have message in their environment, both will display the message Not in the face! when triggered. The variable's value has changed. To sidestep this, we can pass the message in using eventData:

var message = 'Spoon!';
$('#foo').bind('click', {msg: message}, function(event) {
  alert(event.data.msg);
});
message = 'Not in the face!';
$('#bar').bind('click', {msg: message}, function(event) {
  alert(event.data.msg);
});

This time the variable is not referred to directly within the handlers; instead, the variable is passed in by value through eventData, which fixes the value at the time the event is bound. The first handler will now display Spoon! while the second will alert Not in the face!

Note that objects are passed to functions by reference, which further complicates this scenario.

If eventData is present, it is the second argument to the .bind() method; if no additional data needs to be sent to the handler, then the callback is passed as the second and final argument.

See the .trigger() method reference for a way to pass data to a handler at the time the event happens rather than when the handler is bound.

As of jQuery 1.4 we can no longer attach data (and thus, events) to object, embed, or applet elements because critical errors occur when attaching data to Java applets.

Note: Although demonstrated in the next example, it is inadvisable to bind handlers to both the click and dblclick events for the same element. The sequence of events triggered varies from browser to browser, with some receiving two click events before the dblclick and others only one. Double-click sensitivity (maximum time between clicks that is detected as a double click) can vary by operating system and browser, and is often user-configurable.

Examples:

Example: Handle click and double-click for the paragraph. Note: the coordinates are window relative, so in this case relative to the demo iframe.

<!DOCTYPE html>
<html>
<head>
  <style>
p { background:yellow; font-weight:bold; cursor:pointer; 
padding:5px; }
p.over { background: #ccc; }
span { color:red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Click or double click here.</p>
<span></span>
<script>
$("p").bind("click", function(event){
var str = "( " + event.pageX + ", " + event.pageY + " )";
$("span").text("Click happened! " + str);
});
$("p").bind("dblclick", function(){
$("span").text("Double-click happened in " + this.nodeName);
});
$("p").bind("mouseenter mouseleave", function(event){
$(this).toggleClass("over");
});

</script>

</body>
</html>

Demo:

Example: To display each paragraph's text in an alert box whenever it is clicked:

$("p").bind("click", function(){
alert( $(this).text() );
});

Example: You can pass some extra data before the event handler:

function handler(event) {
alert(event.data.foo);
}
$("p").bind("click", {foo: "bar"}, handler)

Example: Cancel a default action and prevent it from bubbling up by returning false:

$("form").bind("submit", function() { return false; })

Example: Cancel only the default action by using the .preventDefault() method.

$("form").bind("submit", function(event) {
event.preventDefault();
});

Example: Stop an event from bubbling without preventing the default action by using the .stopPropagation() method.

$("form").bind("submit", function(event) {
  event.stopPropagation();
});

Example: Bind custom events.

<!DOCTYPE html>
<html>
<head>
  <style>
p { color:red; }
span { color:blue; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Has an attached custom event.</p>
<button>Trigger custom event</button>
<span style="display:none;"></span>
<script>

$("p").bind("myCustomEvent", function(e, myName, myValue){
$(this).text(myName + ", hi there!");
$("span").stop().css("opacity", 1)
.text("myName = " + myName)
.fadeIn(30).fadeOut(1000);
});
$("button").click(function () {
$("p").trigger("myCustomEvent", [ "John" ]);
});

</script>

</body>
</html>

Demo:

Example: Bind multiple events simultaneously.

$("div.test").bind({
  click: function(){
    $(this).addClass("active");
  },
  mouseenter: function(){
    $(this).addClass("inside");
  },
  mouseleave: function(){
    $(this).removeClass("inside");
  }
});
jqapi-1.7/docs/blur/index.html0000644000175000017500000001036511654657352015367 0ustar metalmetal

.blur()

.blur( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "blur" JavaScript event, or trigger that event on an element.

  • version added: 1.0.blur( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.blur( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.blur()

This method is a shortcut for .bind('blur', handler) in the first two variations, and .trigger('blur') in the third.

The blur event is sent to an element when it loses focus. Originally, this event was only applicable to form elements, such as <input>. In recent browsers, the domain of the event has been extended to include all element types. An element can lose focus via keyboard commands, such as the Tab key, or by mouse clicks elsewhere on the page.

For example, consider the HTML:

<form>
  <input id="target" type="text" value="Field 1" />
  <input type="text" value="Field 2" />
</form>
<div id="other">
  Trigger the handler
</div>
The event handler can be bound to the first input field:
$('#target').blur(function() {
  alert('Handler for .blur() called.');
});

Now if the first field has the focus, clicking elsewhere or tabbing away from it displays the alert:

Handler for .blur() called.

To trigger the event programmatically, apply .blur() without an argument:

$('#other').click(function() {
  $('#target').blur();
});

After this code executes, clicks on Trigger the handler will also alert the message.

The blur event does not bubble in Internet Explorer. Therefore, scripts that rely on event delegation with the blur event will not work consistently across browsers. As of version 1.4.2, however, jQuery works around this limitation by mapping blur to the focusout event in its event delegation methods, .live() and .delegate().

Example:

To trigger the blur event on all paragraphs:

$("p").blur();
jqapi-1.7/docs/button-selector/index.html0000644000175000017500000000637311654657414017557 0ustar metalmetal

:button Selector

button selector

version added: 1.0jQuery(':button')

Description: Selects all button elements and elements of type button.

Additional Notes:

  • Because :button is a jQuery extension and not part of the CSS specification, queries using :button cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :button to select elements, first select the elements using a pure CSS selector, then use .filter(":button").

Example:

Finds all button inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:45px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option<option/></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div>
  </div>
<script>

    var input = $(":button").css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/change/index.html0000644000175000017500000001325611654657354015654 0ustar metalmetal

.change()

.change( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "change" JavaScript event, or trigger that event on an element.

  • version added: 1.0.change( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.change( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.change()

This method is a shortcut for .bind('change', handler) in the first two variations, and .trigger('change') in the third.

The change event is sent to an element when its value changes. This event is limited to <input> elements, <textarea> boxes and <select> elements. For select boxes, checkboxes, and radio buttons, the event is fired immediately when the user makes a selection with the mouse, but for the other element types the event is deferred until the element loses focus.

For example, consider the HTML:

<form>
  <input class="target" type="text" value="Field 1" />
  <select class="target">
    <option value="option1" selected="selected">Option 1</option>
    <option value="option2">Option 2</option>
  </select>
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the text input and the select box:

$('.target').change(function() {
  alert('Handler for .change() called.');
});

Now when the second option is selected from the dropdown, the alert is displayed. It is also displayed if you change the text in the field and then click away. If the field loses focus without the contents having changed, though, the event is not triggered. To trigger the event manually, apply .change() without arguments:

$('#other').click(function() {
  $('.target').change();
});

After this code executes, clicks on Trigger the handler will also alert the message. The message will display twice, because the handler has been bound to the change event on both of the form elements.

As of jQuery 1.4, the change event bubbles in Internet Explorer, behaving consistently with the event in other modern browsers.

Examples:

Example: Attaches a change event to the select that gets the text for each selected option and writes them in the div. It then triggers the event for the initial text draw.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <select name="sweets" multiple="multiple">
    <option>Chocolate</option>
    <option selected="selected">Candy</option>

    <option>Taffy</option>
    <option selected="selected">Caramel</option>
    <option>Fudge</option>
    <option>Cookie</option>

  </select>
  <div></div>
<script>
    $("select").change(function () {
          var str = "";
          $("select option:selected").each(function () {
                str += $(this).text() + " ";
              });
          $("div").text(str);
        })
        .change();
</script>

</body>
</html>

Demo:

Example: To add a validity test to all text input elements:

$("input[type='text']").change( function() {
  // check input ($(this).val()) for validity here
});
jqapi-1.7/docs/checkbox-selector/index.html0000644000175000017500000000723611654657414020031 0ustar metalmetal

:checkbox Selector

checkbox selector

version added: 1.0jQuery(':checkbox')

Description: Selects all elements of type checkbox.

$(':checkbox') is equivalent to $('[type=checkbox]'). As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':checkbox') is equivalent to $('*:checkbox'), so $('input:checkbox') should be used instead.

Additional Notes:

  • Because :checkbox is a jQuery extension and not part of the CSS specification, queries using :checkbox cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="checkbox"] instead.

Example:

Finds all checkbox inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:25px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="checkbox" />
    <input type="file" />
    <input type="hidden" />

    <input type="image" />
    <input type="password" />
    <input type="radio" />

    <input type="reset" />
    <input type="submit" />
    <input type="text" />

    <select><option>Option<option/></select>
    <textarea></textarea>
    <button>Button</button>
  </form>

  <div>
  </div>
<script>

    var input = $("form input:checkbox").wrap('<span></span>').parent().css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/checked-selector/index.html0000644000175000017500000000676211654657416017636 0ustar metalmetal

:checked Selector

checked selector

version added: 1.0jQuery(':checked')

Description: Matches all elements that are checked.

The :checked selector works for checkboxes and radio buttons. For select elements, use the :selected selector.

Examples:

Example: Finds all input elements that are checked.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<form>
  <p>
    <input type="checkbox" name="newsletter" checked="checked" value="Hourly" />

    <input type="checkbox" name="newsletter" value="Daily" />
    <input type="checkbox" name="newsletter" value="Weekly" />

    <input type="checkbox" name="newsletter" checked="checked" value="Monthly" />
    <input type="checkbox" name="newsletter" value="Yearly" />
  </p>
</form>
<div></div>

<script>
function countChecked() {
  var n = $("input:checked").length;
  $("div").text(n + (n <= 1 ? " is" : " are") + " checked!");
}
countChecked();
$(":checkbox").click(countChecked);
</script>

</body>
</html>

Demo:

Example:

<!DOCTYPE html>
<html>
<head>
  <style>
input, label { line-height: 1.5em; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<form>
  <div>
    <input type="radio" name="fruit" value="orange" id="orange">
    <label for="orange">orange</label>
  </div>
  <div>
    <input type="radio" name="fruit" value="apple" id="apple">
    <label for="apple">apple</label>
  </div>
  <div>
    <input type="radio" name="fruit" value="banana" id="banana">
    <label for="banana">banana</label>
  </div>
  <div id="log"></div>
</form>

<script>
$("input").click(function() {
  $("#log").html( $(":checked").val() + " is checked!" );
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/child-selector/index.html0000644000175000017500000000602011654657416017316 0ustar metalmetal

Child Selector (“parent > child”)

child selector

version added: 1.0jQuery('parent > child')

  • parent
    Any valid selector.
    child
    A selector to filter the child elements.

Description: Selects all direct child elements specified by "child" of elements specified by "parent".

As a CSS selector, the child combinator is supported by all modern web browsers including Safari, Firefox, Opera, Chrome, and Internet Explorer 7 and above, but notably not by Internet Explorer versions 6 and below. However, in jQuery, this selector (along with all others) works across all supported browsers, including IE6.

The child combinator (E > F) can be thought of as a more specific form of the descendant combinator (E F) in that it selects only first-level descendants.

Note: The $("> elem", context) selector will be deprecated in a future release. Its usage is thus discouraged in lieu of using alternative selectors.

Example:

Places a border around all list items that are children of <ul class="topnav"> .

<!DOCTYPE html>
<html>
<head>
  <style>
body { font-size:14px; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
                    
<ul class="topnav">
    <li>Item 1</li>
    <li>Item 2 
        <ul><li>Nested item 1</li><li>Nested item 2</li><li>Nested item 3</li></ul>
       </li>
    <li>Item 3</li>
</ul>

<script>$("ul.topnav > li").css("border", "3px double red");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/children/index.html0000644000175000017500000001637711654657434016225 0ustar metalmetal

.children()

.children( [selector] ) Returns: jQuery

Description: Get the children of each element in the set of matched elements, optionally filtered by a selector.

  • version added: 1.0.children( [selector] )

    selectorA string containing a selector expression to match elements against.

Given a jQuery object that represents a set of DOM elements, the .children() method allows us to search through the immediate children of these elements in the DOM tree and construct a new jQuery object from the matching elements. The .find() and .children() methods are similar, except that the latter only travels a single level down the DOM tree. Note also that like most jQuery methods, .children() does not return text nodes; to get all children including text and comment nodes, use .contents().

The method optionally accepts a selector expression of the same type that we can pass to the $() function. If the selector is supplied, the elements will be filtered by testing whether they match it.

Consider a page with a basic nested list on it:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

If we begin at the level-2 list, we can find its children:

$('ul.level-2').children().css('background-color', 'red');

The result of this call is a red background behind items A, B, and C. Since we do not supply a selector expression, all of the children are part of the returned jQuery object. If we had supplied one, only the matching items among these three would be included.

Examples:

Example: Find all children of the clicked element.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { font-size:16px; font-weight:bolder; }
  div { width:130px; height:82px; margin:10px; float:left;
        border:1px solid blue; padding:4px; }
  #container { width:auto; height:105px; margin:0; float:none;
        border:none; }
  .hilite { border-color:red; }
  #results { display:block; color:red; }
  p { margin:10px; border:1px solid transparent; }
  span { color:blue; border:1px solid transparent; }
  input { width:100px; }
  em { border:1px solid transparent; }
  a { border:1px solid transparent; }
  b { border:1px solid transparent; }
  button { border:1px solid transparent; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="container">

    <div>
      <p>This <span>is the <em>way</em> we</span> 
      write <em>the</em> demo,</p>

    </div>
    <div>
      <a href="#"><b>w</b>rit<b>e</b></a> the <span>demo,</span> <button>write 
      the</button> demo,
    </div>

    <div>
      This <span>the way we <em>write</em> the <em>demo</em> so</span>

      <input type="text" value="early" /> in
    </div>
    <p>
      <span>t</span>he <span>m</span>orning.
      <span id="results">Found <span>0</span> children in <span>TAG</span>.</span>

    </p>
  </div>
<script>

    $("#container").click(function (e) {
      $("*").removeClass("hilite");
      var $kids = $(e.target).children();
      var len = $kids.addClass("hilite").length;

      $("#results span:first").text(len);
      $("#results span:last").text(e.target.tagName);

      e.preventDefault();
      return false;
    });
</script>

</body>
</html>

Demo:

Example: Find all children of each div.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { font-size:16px; font-weight:bolder; }
  span { color:blue; }
  p { margin:5px 0; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello (this is a paragraph)</p>

  <div><span>Hello Again (this span is a child of the a div)</span></div>
  <p>And <span>Again</span> (in another paragraph)</p>

  <div>And One Last <span>Time</span> (most text directly in a div)</div>
<script>$("div").children().css("border-bottom", "3px double red");</script>

</body>
</html>

Demo:

Example: Find all children with a class "selected" of each div.

<!DOCTYPE html>
<html>
<head>
  <style>

  body { font-size:16px; font-weight:bolder; }
  p { margin:5px 0; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <span>Hello</span>
    <p class="selected">Hello Again</p>
    <div class="selected">And Again</div>

    <p>And One Last Time</p>
  </div>
<script>$("div").children(".selected").css("color", "blue");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/class-selector/index.html0000644000175000017500000000631511654657416017347 0ustar metalmetal

Class Selector (“.class”)

class selector

version added: 1.0jQuery('.class')

  • class
    A class to search for. An element can have multiple classes; only one of them must match.

Description: Selects all elements with the given class.

For class selectors, jQuery uses JavaScript's native getElementsByClassName() function if the browser supports it.

Examples:

Example: Finds the element with the class "myClass".

<!DOCTYPE html>
<html>
<head>
  <style>
  div,span {
    width: 100px;
    height: 40px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div class="notMe">div class="notMe"</div>

  <div class="myClass">div class="myClass"</div>
  <span class="myClass">span class="myClass"</span>
<script>$(".myClass").css("border","3px solid red");</script>

</body>
</html>

Demo:

Example: Finds the element with both "myclass" and "otherclass" classes.

<!DOCTYPE html>
<html>
<head>
  <style>
  div,span {
    width: 100px;
    height: 40px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div class="myclass">div class="notMe"</div>

  <div class="myclass otherclass">div class="myClass"</div>
  <span class="myclass otherclass">span class="myClass"</span>
<script>$(".myclass.otherclass").css("border","13px solid red");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/clearQueue/index.html0000644000175000017500000000706411654657334016520 0ustar metalmetal

.clearQueue()

.clearQueue( [queueName] ) Returns: jQuery

Description: Remove from the queue all items that have not yet been run.

  • version added: 1.4.clearQueue( [queueName] )

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

When the .clearQueue() method is called, all functions on the queue that have not been executed are removed from the queue. When used without an argument, .clearQueue() removes the remaining functions from fx, the standard effects queue. In this way it is similar to .stop(true). However, while the .stop() method is meant to be used only with animations, .clearQueue() can also be used to remove any function that has been added to a generic jQuery queue with the .queue() method.

Example:

Empty the queue.

<!DOCTYPE html>
<html>
<head>
  <style>
div { margin:3px; width:40px; height:40px;
    position:absolute; left:0px; top:30px; 
    background:green; display:none; }
div.newcolor { background:blue; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="start">Start</button>
<button id="stop">Stop</button>
<div></div>
<script>
$("#start").click(function () {
    
  var myDiv = $("div");
  myDiv.show("slow");
  myDiv.animate({left:'+=200'},5000);
  myDiv.queue(function () {
    var _this = $(this);
    _this.addClass("newcolor");
    _this.dequeue();
  });

  myDiv.animate({left:'-=200'},1500);
  myDiv.queue(function () {
    var _this = $(this);
    _this.removeClass("newcolor");
    _this.dequeue();
  });
  myDiv.slideUp();
  
});

$("#stop").click(function () {
  var myDiv = $("div");
  myDiv.clearQueue();
  myDiv.stop();
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/click/index.html0000644000175000017500000001135011654657354015505 0ustar metalmetal

.click()

.click( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "click" JavaScript event, or trigger that event on an element.

  • version added: 1.0.click( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.click( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.click()

This method is a shortcut for .bind('click', handler) in the first two variations, and .trigger('click') in the third.

The click event is sent to an element when the mouse pointer is over the element, and the mouse button is pressed and released. Any HTML element can receive this event.

For example, consider the HTML:
<div id="target">
  Click here
</div>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to any <div>:

$('#target').click(function() {
  alert('Handler for .click() called.');
});

Now if we click on this element, the alert is displayed:

Handler for .click() called.

We can also trigger the event when a different element is clicked:

$('#other').click(function() {
  $('#target').click();
});

After this code executes, clicks on Trigger the handler will also alert the message.

The click event is only triggered after this exact series of events:

  • The mouse button is depressed while the pointer is inside the element.
  • The mouse button is released while the pointer is inside the element.

This is usually the desired sequence before taking an action. If this is not required, the mousedown or mouseup event may be more suitable.

Examples:

Example: To hide paragraphs on a page when they are clicked:

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; margin:5px; cursor:pointer; }
  p.hilite { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>First Paragraph</p>

  <p>Second Paragraph</p>
  <p>Yet one more Paragraph</p>
<script>
    $("p").click(function () { 
      $(this).slideUp(); 
    });
    $("p").hover(function () {
      $(this).addClass("hilite");
    }, function () {
      $(this).removeClass("hilite");
    });
</script>

</body>
</html>

Demo:

Example: To trigger the click event on all of the paragraphs on the page:

$("p").click();
jqapi-1.7/docs/clone/index.html0000644000175000017500000001606711654657400015522 0ustar metalmetal

.clone()

.clone( [withDataAndEvents] ) Returns: jQuery

Description: Create a deep copy of the set of matched elements.

  • version added: 1.0.clone( [withDataAndEvents] )

    withDataAndEventsA Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.

  • version added: 1.5.clone( [withDataAndEvents] [, deepWithDataAndEvents] )

    withDataAndEventsA Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.

    deepWithDataAndEventsA Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).

The .clone() method performs a deep copy of the set of matched elements, meaning that it copies the matched elements as well as all of their descendant elements and text nodes. When used in conjunction with one of the insertion methods, .clone() is a convenient way to duplicate elements on a page. Consider the following HTML:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

As shown in the discussion for .append(), normally when an element is inserted somewhere in the DOM, it is moved from its old location. So, given the code:

$('.hello').appendTo('.goodbye');

The resulting DOM structure would be:

<div class="container">
  <div class="goodbye">
    Goodbye
    <div class="hello">Hello</div>
  </div>
</div>

To prevent this and instead create a copy of the element, you could write the following:

$('.hello').clone().appendTo('.goodbye');

This would produce:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">
    Goodbye
    <div class="hello">Hello</div>
  </div>
</div>

Note that when using the .clone() method, you can modify the cloned elements or their contents before (re-)inserting them into the document.

Normally, any event handlers bound to the original element are not copied to the clone. The optional withDataAndEvents parameter allows us to change this behavior, and to instead make copies of all of the event handlers as well, bound to the new copy of the element. As of jQuery 1.4, all element data (attached by the .data() method) is also copied to the new copy.

However, objects and arrays within element data are not copied and will continue to be shared between the cloned element and the original element. To deep copy all data, copy each one manually:

var $elem = $('#elem').data( "arr": [ 1 ] ), // Original element with attached data
    $clone = $elem.clone( true )
    .data( "arr", $.extend( [], $elem.data("arr") ) ); // Deep copy to prevent data sharing

As of jQuery 1.5, withDataAndEvents can be optionally enhanced with deepWithDataAndEvents to copy the events and data for all children of the cloned element.

Examples:

Example: Clones all b elements (and selects the clones) and prepends them to all paragraphs.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <b>Hello</b><p>, how are you?</p>

<script>
  $("b").clone().prependTo("p");
</script>

</body>
</html>

Demo:

Example: When using .clone() to clone a collection of elements that are not attached to the DOM, their order when inserted into the DOM is not guaranteed. However, it may be possible to preserve sort order with a workaround, as demonstrated:

<!DOCTYPE html>
<html>
<head>
  <style>
  #orig, #copy, #copy-correct {
    float: left;
    width: 20%;
  }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div id="orig">
    <div class="elem"><a>1</a></div>
    <div class="elem"><a>2</a></div>
    <div class="elem"><a>3</a></div>
    <div class="elem"><a>4</a></div>
    <div class="elem"><a>5</a></div>
</div>
<div id="copy"></div>
<div id="copy-correct"></div>

<script>
// sort order is not guaranteed here and may vary with browser  
$('#copy').append($('#orig .elem')
          .clone()
          .children('a')
          .prepend('foo - ')
          .parent()
          .clone()); 
 
// correct way to approach where order is maintained
$('#copy-correct')
          .append($('#orig .elem')
          .clone()
          .children('a')
          .prepend('bar - ')
          .end()); 
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/closest/index.html0000644000175000017500000002342711654657436016105 0ustar metalmetal

.closest()

Contents:

.closest( selector ) Returns: jQuery

Description: Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree.

  • version added: 1.3.closest( selector )

    selectorA string containing a selector expression to match elements against.

  • version added: 1.4.closest( selector [, context] )

    selectorA string containing a selector expression to match elements against.

    contextA DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.

  • version added: 1.6.closest( jQuery object )

    jQuery objectA jQuery object to match elements against.

  • version added: 1.6.closest( element )

    elementAn element to match elements against.

Given a jQuery object that represents a set of DOM elements, the .closest() method searches through these elements and their ancestors in the DOM tree and constructs a new jQuery object from the matching elements. The .parents() and .closest() methods are similar in that they both traverse up the DOM tree. The differences between the two, though subtle, are significant:

.closest() .parents()
Begins with the current element Begins with the parent element
Travels up the DOM tree until it finds a match for the supplied selector Travels up the DOM tree to the document's root element, adding each ancestor element to a temporary collection; it then filters that collection based on a selector if one is supplied
The returned jQuery object contains zero or one element The returned jQuery object contains zero, one, or multiple elements
<ul id="one" class="level-1">
  <li class="item-i">I</li>
  <li id="ii" class="item-ii">II
  <ul class="level-2">
    <li class="item-a">A</li>
    <li class="item-b">B
      <ul class="level-3">
        <li class="item-1">1</li>
        <li class="item-2">2</li>
        <li class="item-3">3</li>
      </ul>
    </li>
    <li class="item-c">C</li>
  </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

Suppose we perform a search for <ul> elements starting at item A:

$('li.item-a').closest('ul')
  .css('background-color', 'red');

This will change the color of the level-2 <ul>, since it is the first encountered when traveling up the DOM tree.

Suppose we search for an <li> element instead:

$('li.item-a').closest('li')
  .css('background-color', 'red');

This will change the color of list item A. The .closest() method begins its search with the element itself before progressing up the DOM tree, and stops when item A matches the selector.

We can pass in a DOM element as the context within which to search for the closest element.

var listItemII = document.getElementById('ii');
$('li.item-a').closest('ul', listItemII)
  .css('background-color', 'red');
$('li.item-a').closest('#one', listItemII)
  .css('background-color', 'green');

This will change the color of the level-2 <ul>, because it is both the first <ul> ancestor of list item A and a descendant of list item II. It will not change the color of the level-1 <ul>, however, because it is not a descendant of list item II.

Examples:

Example: Show how event delegation can be done with closest. The closest list element toggles a yellow background when it or its descendent is clicked.

<!DOCTYPE html>
<html>
<head>
  <style>
  li { margin: 3px; padding: 3px; background: #EEEEEE; }
  li.hilight { background: yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li><b>Click me!</b></li>
    <li>You can also <b>Click me!</b></li>
  </ul>
<script>
  $( document ).bind("click", function( e ) {
    $( e.target ).closest("li").toggleClass("hilight");
  });
</script>

</body>
</html>

Demo:

Example: Pass a jQuery object to closest. The closest list element toggles a yellow background when it or its descendent is clicked.

<!DOCTYPE html>
<html>
<head>
  <style>
  li { margin: 3px; padding: 3px; background: #EEEEEE; }
  li.hilight { background: yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li><b>Click me!</b></li>
    <li>You can also <b>Click me!</b></li>
  </ul>
<script>
  var $listElements = $("li").css("color", "blue");
  $( document ).bind("click", function( e ) {
    $( e.target ).closest( $listElements ).toggleClass("hilight");
  });
</script>

</body>
</html>

Demo:

.closest( selectors [, context] ) Returns: Array

Description: Gets an array of all the elements and selectors matched against the current element up through the DOM tree.

  • version added: 1.4.closest( selectors [, context] )

    selectorsAn array or string containing a selector expression to match elements against (can also be a jQuery object).

    contextA DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.

This method is primarily meant to be used internally or by plugin authors.

Example:

Show how event delegation can be done with closest.

<!DOCTYPE html>
<html>
<head>
  <style></style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul><li></li><li></li></ul>
<script>
  var close = $("li:first").closest(["ul", "body"]);
  $.each(close, function(i){
  $("li").eq(i).html( this.selector + ": " + this.elem.nodeName );
  });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/contains-selector/index.html0000644000175000017500000000455311654657416020062 0ustar metalmetal

:contains() Selector

contains selector

version added: 1.1.4jQuery(':contains(text)')

  • text
    A string of text to look for. It's case sensitive.

Description: Select all elements that contain the specified text.

The matching text can appear directly within the selected element, in any of that element's descendants, or a combination thereof. As with attribute value selectors, text inside the parentheses of :contains() can be written as bare words or surrounded by quotation marks. The text must have matching case to be selected.

Example:

Finds all divs containing "John" and underlines them.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div>John Resig</div>

<div>George Martin</div>
<div>Malcom John Sinclair</div>
<div>J. Ohn</div>
      
    
<script>
$("div:contains('John')").css("text-decoration", "underline");
    </script>

</body>
</html>

Demo:

jqapi-1.7/docs/contents/index.html0000644000175000017500000001125111654657436016256 0ustar metalmetal

.contents()

.contents() Returns: jQuery

Description: Get the children of each element in the set of matched elements, including text and comment nodes.

  • version added: 1.2.contents()

Given a jQuery object that represents a set of DOM elements, the .contents() method allows us to search through the immediate children of these elements in the DOM tree and construct a new jQuery object from the matching elements. The .contents() and .children() methods are similar, except that the former includes text nodes as well as HTML elements in the resulting jQuery object.

The .contents() method can also be used to get the content document of an iframe, if the iframe is on the same domain as the main page.

Consider a simple <div> with a number of text nodes, each of which is separated by two line break elements (<br />):

<div class="container">
  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed 
  do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
  <br /><br />
  Ut enim ad minim veniam, quis nostrud exercitation ullamco 
  laboris nisi ut aliquip ex ea commodo consequat.
  <br /> <br />
  Duis aute irure dolor in reprehenderit in voluptate velit 
  esse cillum dolore eu fugiat nulla pariatur.
</div>

We can employ the .contents() method to help convert this blob of text into three well-formed paragraphs:

$('.container').contents().filter(function() {
  return this.nodeType == 3;
})
  .wrap('<p></p>')
.end()
.filter('br')
  .remove();

This code first retrieves the contents of <div class="container"> and then filters it for text nodes, which are wrapped in paragraph tags. This is accomplished by testing the .nodeType property of the element. This DOM property holds a numeric code indicating the node's type; text nodes use the code 3. The contents are again filtered, this time for <br /> elements, and these elements are removed.

Examples:

Example: Find all the text nodes inside a paragraph and wrap them with a bold tag.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello <a href="http://ejohn.org/">John</a>, how are you doing?</p>
<script>$("p").contents().filter(function(){ return this.nodeType != 1; }).wrap("<b/>");</script>

</body>
</html>

Demo:

Example: Change the background colour of links inside of an iframe.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <iframe src="http://api.jquery.com/" width="80%" height="600" id='frameDemo'></iframe> 
<script>$("#frameDemo").contents().find("a").css("background-color","#BADA55");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/context/index.html0000644000175000017500000000605511654657376016116 0ustar metalmetal

.context

context Returns: Element

Description: The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.

  • version added: 1.3context

The .live() method for binding event handlers uses this property to determine the root element to use for its event delegation needs.

The value of this property is typically equal to document, as this is the default context for jQuery objects if none is supplied. The context may differ if, for example, the object was created by searching within an <iframe> or XML document.

Note that the context property may only apply to the elements originally selected by jQuery(), as it is possible for the user to add elements to the collection via methods such as .add() and these may have a different context.

Example:

Determine the exact context used.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { cursor:pointer; }
  div { width:50px; height:30px; margin:5px; float:left;
        background:green; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Context:<ul></ul>
<script>$("ul")
  .append("<li>" + $("ul").context + "</li>")
  .append("<li>" + $("ul", document.body).context.nodeName + "</li>");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/css/index.html0000644000175000017500000003143011654657330015203 0ustar metalmetal

.css()

Contents:

.css( propertyName ) Returns: String

Description: Get the value of a style property for the first element in the set of matched elements.

  • version added: 1.0.css( propertyName )

    propertyNameA CSS property.

The .css() method is a convenient way to get a style property from the first matched element, especially in light of the different ways browsers access most of those properties (the getComputedStyle() method in standards-based browsers versus the currentStyle and runtimeStyle properties in Internet Explorer) and the different terms browsers use for certain properties. For example, Internet Explorer's DOM implementation refers to the float property as styleFloat, while W3C standards-compliant browsers refer to it as cssFloat. The .css() method accounts for such differences, producing the same result no matter which term we use. For example, an element that is floated left will return the string left for each of the following three lines:

  1. $('div.left').css('float');
  2. $('div.left').css('cssFloat');
  3. $('div.left').css('styleFloat');

Also, jQuery can equally interpret the CSS and DOM formatting of multiple-word properties. For example, jQuery understands and returns the correct value for both .css('background-color') and .css('backgroundColor'). Different browsers may return CSS color values that are logically but not textually equal, e.g., #FFF, #ffffff, and rgb(255,255,255).

Shorthand CSS properties (e.g. margin, background, border) are not supported. For example, if you want to retrieve the rendered margin, use: $(elem).css('marginTop') and $(elem).css('marginRight'), and so on.

Example:

To access the background color of a clicked div.

<!DOCTYPE html>
<html>
<head>
  <style>
div { width:60px; height:60px; margin:5px; float:left; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<span id="result">&nbsp;</span>
<div style="background-color:blue;"></div>
<div style="background-color:rgb(15,99,30);"></div>

<div style="background-color:#123456;"></div>
<div style="background-color:#f11;"></div>
<script>
$("div").click(function () {
  var color = $(this).css("background-color");
  $("#result").html("That div is <span style='color:" +
                     color + ";'>" + color + "</span>.");
});

</script>

</body>
</html>

Demo:

.css( propertyName, value ) Returns: jQuery

Description: Set one or more CSS properties for the set of matched elements.

  • version added: 1.0.css( propertyName, value )

    propertyNameA CSS property name.

    valueA value to set for the property.

  • version added: 1.4.css( propertyName, function(index, value) )

    propertyNameA CSS property name.

    function(index, value)A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.

  • version added: 1.0.css( map )

    mapA map of property-value pairs to set.

As with the .prop() method, the .css() method makes setting properties of elements quick and easy. This method can take either a property name and value as separate parameters, or a single map of key-value pairs (JavaScript object notation).

Also, jQuery can equally interpret the CSS and DOM formatting of multiple-word properties. For example, jQuery understands and returns the correct value for both .css({'background-color': '#ffe', 'border-left': '5px solid #ccc'}) and .css({backgroundColor: '#ffe', borderLeft: '5px solid #ccc'}). Notice that with the DOM notation, quotation marks around the property names are optional, but with CSS notation they're required due to the hyphen in the name.

When using .css() as a setter, jQuery modifies the element's style property. For example, $('#mydiv').css('color', 'green') is equivalent to document.getElementById('mydiv').style.color = 'green'. Setting the value of a style property to an empty string — e.g. $('#mydiv').css('color', '') — removes that property from an element if it has already been directly applied, whether in the HTML style attribute, through jQuery's .css() method, or through direct DOM manipulation of the style property. It does not, however, remove a style that has been applied with a CSS rule in a stylesheet or <style> element.

As of jQuery 1.6, .css() accepts relative values similar to .animate(). Relative values are a string starting with += or -= to increment or decrement the current value. For example, if an element's padding-left was 10px, .css( "padding-left", "+=15" ) would result in a total padding-left of 25px.

As of jQuery 1.4, .css() allows us to pass a function as the property value:

$('div.example').css('width', function(index) {
  return index * 50;
});

This example sets the widths of the matched elements to incrementally larger values.

Note: If nothing is returned in the setter function (ie. function(index, style){}), or if undefined is returned, the current value is not changed. This is useful for selectively setting values only when certain criteria are met.

Examples:

Example: To change the color of any paragraph to red on mouseover event.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; width:200px; font-size:14px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Just roll the mouse over me.</p>

  <p>Or me to see a color change.</p>
  
<script>
  $("p").mouseover(function () {
    $(this).css("color","red");
  });
</script>

</body>
</html>

Demo:

Example: Increase the width of #box by 200 pixels

<!DOCTYPE html>
<html>
<head>
  <style>
  #box { background: black; color: snow; width:100px; padding:10px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <div id="box">Click me to grow</div>
  
<script>
  $("#box").one( "click", function () {
    $( this ).css( "width","+=200" );
  });
</script>

</body>
</html>

Demo:

Example: To highlight a clicked word in the paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:blue; font-weight:bold; cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p>
  Once upon a time there was a man
  who lived in a pizza parlor. This
  man just loved pizza and ate it all 
  the time.  He went on to be the
  happiest man in the world.  The end.
</p>
<script>
  var words = $("p:first").text().split(" ");
  var text = words.join("</span> <span>");
  $("p:first").html("<span>" + text + "</span>");
  $("span").click(function () {
    $(this).css("background-color","yellow");
  });

</script>

</body>
</html>

Demo:

Example: To set the color of all paragraphs to red and background to blue:

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:green; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>Move the mouse over a paragraph.</p>
  <p>Like this one or the one above.</p>

<script>
  $("p").hover(function () {
    $(this).css({'background-color' : 'yellow', 'font-weight' : 'bolder'});
  }, function () {
    var cssObj = {
      'background-color' : '#ddd',
      'font-weight' : '',
      'color' : 'rgb(0,40,244)'
    }
    $(this).css(cssObj);
  });
</script>

</body>
</html>

Demo:

Example: Increase the size of a div when you click it:

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width: 20px; height: 15px; background-color: #f33; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <div>click</div>
  <div>click</div>

<script>
  $("div").click(function() {
    $(this).css({
      width: function(index, value) {
        return parseFloat(value) * 1.2;
      }, 
      height: function(index, value) {
        return parseFloat(value) * 1.2;
      }

    });
  });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/data/index.html0000644000175000017500000002367411654657334015343 0ustar metalmetal

.data()

Contents:

.data( key, value ) Returns: jQuery

Description: Store arbitrary data associated with the matched elements.

  • version added: 1.2.3.data( key, value )

    keyA string naming the piece of data to set.

    valueThe new data value; it can be any Javascript type including Array or Object.

  • version added: 1.4.3.data( obj )

    objAn object of key-value pairs of data to update.

The .data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore from memory leaks.

We can set several distinct values for a single element and retrieve them later:

$('body').data('foo', 52);
$('body').data('bar', { myType: 'test', count: 40 });

$('body').data('foo'); // 52
$('body').data(); // {foo: 52, bar: { myType: 'test', count: 40 }}

In jQuery 1.4.3 setting an element's data object with .data(obj) extends the data previously stored with that element. jQuery itself uses the .data() method to save information under the names 'events' and 'handle', and also reserves any data name starting with an underscore ('_') for internal use.

Prior to jQuery 1.4.3 (starting in jQuery 1.4) the .data() method completely replaced all data, instead of just extending the data object. If you are using third-party plugins it may not be advisable to completely replace the element's data object, since plugins may have also set data.

Due to the way browsers interact with plugins and external code, the .data() method cannot be used on <object> (unless it's a Flash plugin), <applet> or <embed> elements.

Additional Notes:

  • Note that this method currently does not provide cross-platform support for setting data on XML documents, as Internet Explorer does not allow data to be attached via expando properties.

Example:

Store then retrieve a value from the div element.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    The values stored were 
    <span></span>
    and
    <span></span>
  </div>
<script>
$("div").data("test", { first: 16, last: "pizza!" });
$("span:first").text($("div").data("test").first);
$("span:last").text($("div").data("test").last);
</script>

</body>
</html>

Demo:

.data( key ) Returns: Object

Description: Returns value at named data store for the first element in the jQuery collection, as set by data(name, value).

  • version added: 1.2.3.data( key )

    keyName of the data stored.

  • version added: 1.4.data()

The .data() method allows us to attach data of any type to DOM elements in a way that is safe from circular references and therefore from memory leaks. We can retrieve several distinct values for a single element one at a time, or as a set:

alert($('body').data('foo'));
alert($('body').data());

The above lines alert the data values that were set on the body element. If no data at all was set on that element, undefined is returned.

alert( $("body").data("foo")); //undefined
$("body").data("bar", "foobar");
alert( $("body").data("bar")); //foobar

HTML 5 data- Attributes

As of jQuery 1.4.3 HTML 5 data- attributes will be automatically pulled in to jQuery's data object. The treatment of attributes with embedded dashes was changed in jQuery 1.6 to conform to the W3C HTML5 specification.

For example, given the following HTML:

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div>

All of the following jQuery code will work.

$("div").data("role") === "page";
$("div").data("lastValue") === 43;
$("div").data("hidden") === true;
$("div").data("options").name === "John";

Every attempt is made to convert the string to a JavaScript value (this includes booleans, numbers, objects, arrays, and null) otherwise it is left as a string. To retrieve the value's attribute as a string without any attempt to convert it, use the attr() method. When the data attribute is an object (starts with '{') or array (starts with '[') then jQuery.parseJSON is used to parse the string; it must follow valid JSON syntax including quoted property names. The data- attributes are pulled in the first time the data property is accessed and then are no longer accessed or mutated (all data values are then stored internally in jQuery).

Calling .data() with no parameters retrieves all of the values as a JavaScript object. This object can be safely cached in a variable as long as a new object is not set with .data(obj). Using the object directly to get or set values is faster than making individual calls to .data() to get or set each value:

var mydata = $("#mydiv").data();
if ( mydata.count < 9 ) {
    mydata.count = 43;
    mydata.status = "embiggened";
}

Additional Notes:

  • Note that this method currently does not provide cross-platform support for setting data on XML documents, as Internet Explorer does not allow data to be attached via expando properties.

Example:

Get the data named "blah" stored at for an element.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:5px; background:yellow; }
  button { margin:5px; font-size:14px; }
  p { margin:5px; color:blue; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>A div</div>
  <button>Get "blah" from the div</button>
  <button>Set "blah" to "hello"</button>

  <button>Set "blah" to 86</button>
  <button>Remove "blah" from the div</button>
  <p>The "blah" value of this div is <span>?</span></p>
<script>
$("button").click(function(e) {
  var value;

  switch ($("button").index(this)) {
    case 0 :
      value = $("div").data("blah");
      break;
    case 1 :
      $("div").data("blah", "hello");
      value = "Stored!";
      break;
    case 2 :
      $("div").data("blah", 86);
      value = "Stored!";
      break;
    case 3 :
      $("div").removeData("blah");
      value = "Removed!";
      break;
  }

  $("span").text("" + value);
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/dblclick/index.html0000644000175000017500000001233311654657354016171 0ustar metalmetal

.dblclick()

.dblclick( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element.

  • version added: 1.0.dblclick( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.dblclick( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.dblclick()

This method is a shortcut for .bind('dblclick', handler) in the first two variations, and .trigger('dblclick') in the third. The dblclick event is sent to an element when the element is double-clicked. Any HTML element can receive this event. For example, consider the HTML:

<div id="target">
  Double-click here
</div>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to any <div>:

$('#target').dblclick(function() {
  alert('Handler for .dblclick() called.');
});

Now double-clicking on this element displays the alert:

Handler for .dblclick() called.

To trigger the event manually, apply .dblclick() without an argument:

$('#other').click(function() {
  $('#target').dblclick();
});

After this code executes, (single) clicks on Trigger the handler will also alert the message.

The dblclick event is only triggered after this exact series of events:

  • The mouse button is depressed while the pointer is inside the element.
  • The mouse button is released while the pointer is inside the element.
  • The mouse button is depressed again while the pointer is inside the element, within a time window that is system-dependent.
  • The mouse button is released while the pointer is inside the element.

It is inadvisable to bind handlers to both the click and dblclick events for the same element. The sequence of events triggered varies from browser to browser, with some receiving two click events before the dblclick and others only one. Double-click sensitivity (maximum time between clicks that is detected as a double click) can vary by operating system and browser, and is often user-configurable.

Examples:

Example: To bind a "Hello World!" alert box the dblclick event on every paragraph on the page:

$("p").dblclick( function () { alert("Hello World!"); });

Example: Double click to toggle background color.

<!DOCTYPE html>
<html>
<head>
  <style>

  div { background:blue;
        color:white;
        height:100px;
        width:150px;
 }
  div.dbl { background:yellow;color:black; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div><span>Double click the block</span>
<script>
    var divdbl = $("div:first");
    divdbl.dblclick(function () { 
      divdbl.toggleClass('dbl'); 
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/deferred.always/index.html0000644000175000017500000000576511654657340017507 0ustar metalmetal

deferred.always()

deferred.always( alwaysCallbacks [, alwaysCallbacks] ) Returns: Deferred

Description: Add handlers to be called when the Deferred object is either resolved or rejected.

  • version added: 1.6deferred.always( alwaysCallbacks [, alwaysCallbacks] )

    alwaysCallbacks A function, or array of functions, that is called when the Deferred is resolved or rejected.

    alwaysCallbacks Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.

The argument can be either a single function or an array of functions. When the Deferred is resolved or rejected, the alwaysCallbacks are called. Since deferred.always() returns the Deferred object, other methods of the Deferred object can be chained to this one, including additional .always() methods. When the Deferred is resolved or rejected, callbacks are executed in the order they were added, using the arguments provided to the resolve, reject, resolveWith or rejectWith method calls. For more information, see the documentation for Deferred object.

Example:

Since the jQuery.get() method returns a jqXHR object, which is derived from a Deferred object, we can attach a callback for both success and error using the deferred.always() method.


$.get("test.php").always( function() { 
  alert("$.get completed with success or error callback arguments"); 
} );
jqapi-1.7/docs/deferred.done/index.html0000644000175000017500000001003011654657340017111 0ustar metalmetal

deferred.done()

deferred.done( doneCallbacks [, doneCallbacks] ) Returns: Deferred

Description: Add handlers to be called when the Deferred object is resolved.

  • version added: 1.5deferred.done( doneCallbacks [, doneCallbacks] )

    doneCallbacks A function, or array of functions, that are called when the Deferred is resolved.

    doneCallbacks Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.

The deferred.done() method accepts one or more arguments, all of which can be either a single function or an array of functions. When the Deferred is resolved, the doneCallbacks are called. Callbacks are executed in the order they were added. Since deferred.done() returns the deferred object, other methods of the deferred object can be chained to this one, including additional .done() methods. When the Deferred is resolved, doneCallbacks are executed using the arguments provided to the resolve or resolveWith method call in the order they were added. For more information, see the documentation for Deferred object.

Examples:

Example: Since the jQuery.get method returns a jqXHR object, which is derived from a Deferred object, we can attach a success callback using the .done() method.


$.get("test.php").done(function() { 
  alert("$.get succeeded"); 
});

Example: Resolve a Deferred object when the user clicks a button, triggering a number of callback functions:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
 <button>Go</button>
 <p>Ready...</p>

<script>
// 3 functions to call when the Deferred object is resolved
function fn1() {
  $("p").append(" 1 ");
}
function fn2() {
  $("p").append(" 2 ");
}
function fn3(n) {
  $("p").append(n + " 3 " + n);
}

// create a deferred object
var dfd = $.Deferred();

// add handlers to be called when dfd is resolved
dfd
// .done() can take any number of functions or arrays of functions
.done( [fn1, fn2], fn3, [fn2, fn1] )
// we can chain done methods, too
.done(function(n) {
  $("p").append(n + " we're done.");
});

// resolve the Deferred object when the button is clicked
$("button").bind("click", function() {
  dfd.resolve("and");
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/deferred.fail/index.html0000644000175000017500000000564511654657340017117 0ustar metalmetal

deferred.fail()

deferred.fail( failCallbacks [, failCallbacks] ) Returns: Deferred

Description: Add handlers to be called when the Deferred object is rejected.

  • version added: 1.5deferred.fail( failCallbacks [, failCallbacks] )

    failCallbacks A function, or array of functions, that are called when the Deferred is rejected.

    failCallbacks Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.

The deferred.fail() method accepts one or more arguments, all of which can be either a single function or an array of functions. When the Deferred is rejected, the failCallbacks are called. Callbacks are executed in the order they were added. Since deferred.fail() returns the deferred object, other methods of the deferred object can be chained to this one, including additional deferred.fail() methods. The failCallbacks are executed using the arguments provided to the deferred.reject() or deferred.rejectWith() method call in the order they were added. For more information, see the documentation for Deferred object.

Example:

Since the jQuery.get method returns a jqXHR object, which is derived from a Deferred, you can attach a success and failure callback using the deferred.done() and deferred.fail() methods.


$.get("test.php")
  .done(function(){ alert("$.get succeeded"); })
  .fail(function(){ alert("$.get failed!"); });
jqapi-1.7/docs/deferred.isRejected/index.html0000644000175000017500000000452211654657340020256 0ustar metalmetal

deferred.isRejected()

deferred.isRejected() Returns: Boolean

Description: Determine whether a Deferred object has been rejected.

  • version added: 1.5deferred.isRejected()

As of jQuery 1.7 this API has been deprecated; please use deferred.state() instead.

Returns true if the Deferred object is in the rejected state, meaning that either deferred.reject() or deferred.rejectWith() has been called for the object and the failCallbacks have been called (or are in the process of being called).

Note that a Deferred object can be in one of three states: pending, resolved, or rejected; use deferred.isResolved() to determine whether the Deferred object is in the resolved state. These methods are primarily useful for debugging, for example to determine whether a Deferred has already been resolved even though you are inside code that intended to reject it.

jqapi-1.7/docs/deferred.isResolved/index.html0000644000175000017500000000452611654657340020320 0ustar metalmetal

deferred.isResolved()

deferred.isResolved() Returns: Boolean

Description: Determine whether a Deferred object has been resolved.

  • version added: 1.5deferred.isResolved()

As of jQuery 1.7 this API has been deprecated; please use deferred.state() instead.

Returns true if the Deferred object is in the resolved state, meaning that either deferred.resolve() or deferred.resolveWith() has been called for the object and the doneCallbacks have been called (or are in the process of being called).

Note that a Deferred object can be in one of three states: pending, resolved, or rejected; use deferred.isRejected() to determine whether the Deferred object is in the rejected state. These methods are primarily useful for debugging, for example to determine whether a Deferred has already been resolved even though you are inside code that intended to reject it.

jqapi-1.7/docs/deferred.notify/index.html0000644000175000017500000000436011654657340017505 0ustar metalmetal

deferred.notify()

deferred.notify( args ) Returns: Deferred

Description: Call the progressCallbacks on a Deferred object with the given args.

  • version added: 1.7deferred.notify( args )

    args Optional arguments that are passed to the progressCallbacks.

Normally, only the creator of a Deferred should call this method; you can prevent other code from changing the Deferred's state or reporting status by returning a restricted Promise object through deferred.promise().

When deferred.notify is called, any progressCallbacks added by deferred.then or deferred.progress are called. Callbacks are executed in the order they were added. Each callback is passed the args from the .notify(). Any calls to .notify() after a Deferred is resolved or rejected (or any progressCallbacks added after that) are ignored. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.notifyWith/index.html0000644000175000017500000000472111654657340020342 0ustar metalmetal

deferred.notifyWith()

deferred.notifyWith( context [, args] ) Returns: Deferred

Description: Call the progressCallbacks on a Deferred object with the given context and args.

  • version added: 1.7deferred.notifyWith( context [, args] )

    context Context passed to the progressCallbacks as the this object.

    args Optional arguments that are passed to the progressCallbacks.

Normally, only the creator of a Deferred should call this method; you can prevent other code from changing the Deferred's state or reporting status by returning a restricted Promise object through deferred.promise().

When deferred.notifyWith is called, any progressCallbacks added by deferred.then or deferred.progress are called. Callbacks are executed in the order they were added. Each callback is passed the args from the .notifyWith(). Any calls to .notifyWith() after a Deferred is resolved or rejected (or any progressCallbacks added after that) are ignored. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.pipe/index.html0000644000175000017500000001047611654657342017141 0ustar metalmetal

deferred.pipe()

deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise

Description: Utility method to filter and/or chain Deferreds.

  • version added: 1.6deferred.pipe( [doneFilter] [, failFilter] )

    doneFilter An optional function that is called when the Deferred is resolved.

    failFilter An optional function that is called when the Deferred is rejected.

  • version added: 1.7deferred.pipe( [doneFilter] [, failFilter] [, progressFilter] )

    doneFilter An optional function that is called when the Deferred is resolved.

    failFilter An optional function that is called when the Deferred is rejected.

    progressFilter An optional function that is called when the Deferred is rejected.

The deferred.pipe() method returns a new promise that filters the status and values of a deferred through a function. The doneFilter and failFilter functions filter the original deferred's resolved / rejected status and values. As of jQuery 1.7, the method also accepts a progressFilter function to filter any calls to the original deferred's notify or notifyWith methods. These filter functions can return a new value to be passed along to the piped promise's done() or fail() callbacks, or they can return another observable object (Deferred, Promise, etc) which will pass its resolved / rejected status and values to the piped promise's callbacks. If the filter function used is null, or not specified, the piped promise will be resolved or rejected with the same values as the original.

Examples:

Example: Filter resolve value:


var defer = $.Deferred(),
    filtered = defer.pipe(function( value ) {
      return value * 2;
    });

defer.resolve( 5 );
filtered.done(function( value ) {
  alert( "Value is ( 2*5 = ) 10: " + value );
});

Example: Filter reject value:


var defer = $.Deferred(),
    filtered = defer.pipe( null, function( value ) {
      return value * 3;
    });

defer.reject( 6 );
filtered.fail(function( value ) {
  alert( "Value is ( 3*6 = ) 18: " + value );
});

Example: Chain tasks:


var request = $.ajax( url, { dataType: "json" } ),
    chained = request.pipe(function( data ) {
      return $.ajax( url2, { data: { user: data.userId } } );
    });

chained.done(function( data ) {
  // data retrieved from url2 as provided by the first request
});

jqapi-1.7/docs/deferred.progress/index.html0000644000175000017500000000403511654657342020042 0ustar metalmetal

deferred.progress()

deferred.progress( progressCallbacks ) Returns: Deferred

Description: Add handlers to be called when the Deferred object generates progress notifications.

  • version added: 1.7deferred.progress( progressCallbacks )

    progressCallbacks A function, or array of functions, that is called when the Deferred generates progress notifications.

The argument can be either a single function or an array of functions. When the Deferred generates progress notifications by calling notify or notifyWith, the progressCallbacks are called. Since deferred.progress() returns the Deferred object, other methods of the Deferred object can be chained to this one. When the Deferred is resolved or rejected, progress callbacks will no longer be called. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.promise/index.html0000644000175000017500000001135311654657342017655 0ustar metalmetal

deferred.promise()

deferred.promise( [target] ) Returns: Promise

Description: Return a Deferred's Promise object.

  • version added: 1.5deferred.promise( [target] )

    targetObject onto which the promise methods have to be attached

The deferred.promise() method allows an asynchronous function to prevent other code from interfering with the progress or status of its internal request. The Promise exposes only the Deferred methods needed to attach additional handlers or determine the state (then, done, fail, always,pipe, progress, and state), but not ones that change the state (resolve, reject, progress, resolveWith, rejectWith, and progressWith).

If target is provided, deferred.promise() will attach the methods onto it and then return this object rather than create a new one. This can be useful to attach the Promise behavior to an object that already exists.

If you are creating a Deferred, keep a reference to the Deferred so that it can be resolved or rejected at some point. Return only the Promise object via deferred.promise() so other code can register callbacks or inspect the current state.

For more information, see the documentation for Deferred object.

Examples:

Example: Create a Deferred and set two timer-based functions to either resolve or reject the Deferred after a random interval. Whichever one fires first "wins" and will call one of the callbacks. The second timeout has no effect since the Deferred is already complete (in a resolved or rejected state) from the first timeout action. Also set a timer-based progress notification function, and call a progress handler that adds "working..." to the document body.


function asyncEvent(){
    var dfd = new jQuery.Deferred();

    // Resolve after a random interval
    setTimeout(function(){
        dfd.resolve("hurray");
    }, Math.floor(400+Math.random()*2000));

    // Reject after a random interval
    setTimeout(function(){
        dfd.reject("sorry");
    }, Math.floor(400+Math.random()*2000));

    // Show a "working..." message every half-second
    setTimeout(function working(){
        if ( dfd.state() === "pending" ) {
            dfd.notify("working... ");
            setTimeout(working, 500);
        }
    }, 1);

    // Return the Promise so caller can't change the Deferred
    return dfd.promise();
}

// Attach a done, fail, and progress handler for the asyncEvent
$.when( asyncEvent() ).then(
    function(status){
        alert( status+', things are going well' );
    },
    function(status){
        alert( status+', you fail this time' );
    },
    function(status){
        $("body").append(status);
    }
);

Example: Use the target argument to promote an existing object to a Promise:


// Existing object
var obj = {
  hello: function( name ) {
    alert( "Hello " + name );
  }
},
// Create a Deferred
defer = $.Deferred();

// Set object as a promise
defer.promise( obj );

// Resolve the deferred
defer.resolve( "John" );

// Use the object as a Promise
obj.done(function( name ) {
  obj.hello( name ); // will alert "Hello John"
}).hello( "Karl" ); // will alert "Hello Karl"
jqapi-1.7/docs/deferred.reject/index.html0000644000175000017500000000451011654657342017450 0ustar metalmetal

deferred.reject()

deferred.reject( args ) Returns: Deferred

Description: Reject a Deferred object and call any failCallbacks with the given args.

  • version added: 1.5deferred.reject( args )

    args Optional arguments that are passed to the failCallbacks.

Normally, only the creator of a Deferred should call this method; you can prevent other code from changing the Deferred's state by returning a restricted Promise object through deferred.promise().

When the Deferred is rejected, any failCallbacks added by deferred.then or deferred.fail are called. Callbacks are executed in the order they were added. Each callback is passed the args from the deferred.reject() call. Any failCallbacks added after the Deferred enters the rejected state are executed immediately when they are added, using the arguments that were passed to the .reject() call. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.rejectWith/index.html0000644000175000017500000000474611654657342020317 0ustar metalmetal

deferred.rejectWith()

deferred.rejectWith( context [, args] ) Returns: Deferred

Description: Reject a Deferred object and call any failCallbacks with the given context and args.

  • version added: 1.5deferred.rejectWith( context [, args] )

    context Context passed to the failCallbacks as the this object.

    args An optional array of arguments that are passed to the failCallbacks.

Normally, only the creator of a Deferred should call this method; you can prevent other code from changing the Deferred's state by returning a restricted Promise object through deferred.promise().

When the Deferred is rejected, any failCallbacks added by deferred.then or deferred.fail are called. Callbacks are executed in the order they were added. Each callback is passed the args from the deferred.reject() call. Any failCallbacks added after the Deferred enters the rejected state are executed immediately when they are added, using the arguments that were passed to the .reject() call. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.resolve/index.html0000644000175000017500000000376311654657344017666 0ustar metalmetal

deferred.resolve()

deferred.resolve( args ) Returns: Deferred

Description: Resolve a Deferred object and call any doneCallbacks with the given args.

  • version added: 1.5deferred.resolve( args )

    args Optional arguments that are passed to the doneCallbacks.

When the Deferred is resolved, any doneCallbacks added by deferred.then or deferred.done are called. Callbacks are executed in the order they were added. Each callback is passed the args from the .resolve(). Any doneCallbacks added after the Deferred enters the resolved state are executed immediately when they are added, using the arguments that were passed to the .resolve() call. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.resolveWith/index.html0000644000175000017500000000474111654657344020517 0ustar metalmetal

deferred.resolveWith()

deferred.resolveWith( context [, args] ) Returns: Deferred

Description: Resolve a Deferred object and call any doneCallbacks with the given context and args.

  • version added: 1.5deferred.resolveWith( context [, args] )

    context Context passed to the doneCallbacks as the this object.

    args An optional array of arguments that are passed to the doneCallbacks.

Normally, only the creator of a Deferred should call this method; you can prevent other code from changing the Deferred's state by returning a restricted Promise object through deferred.promise().

When the Deferred is resolved, any doneCallbacks added by deferred.then or deferred.done are called. Callbacks are executed in the order they were added. Each callback is passed the args from the .resolve(). Any doneCallbacks added after the Deferred enters the resolved state are executed immediately when they are added, using the arguments that were passed to the .resolve() call. For more information, see the documentation for Deferred object.

jqapi-1.7/docs/deferred.state/index.html0000644000175000017500000000473011654657344017322 0ustar metalmetal

deferred.state()

deferred.state() Returns: String

Description: Determine the current state of a Deferred object.

  • version added: 1.7deferred.state()

The deferred.state() method returns a string representing the current state of the Deferred object. The Deferred object can be in one of three states:

  • "pending": The Deferred object is not yet in a completed state (neither "rejected" nor "resolved").
  • "resolved": The Deferred object is in the resolved state, meaning that either deferred.resolve() or deferred.resolveWith() has been called for the object and the doneCallbacks have been called (or are in the process of being called).
  • "rejected": The Deferred object is in the rejected state, meaning that either deferred.reject() or deferred.rejectWith() has been called for the object and the failCallbacks have been called (or are in the process of being called).

This method is primarily useful for debugging to determine, for example, whether a Deferred has already been resolved even though you are inside code that intended to reject it.

jqapi-1.7/docs/deferred.then/index.html0000644000175000017500000000750411654657344017142 0ustar metalmetal

deferred.then()

deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred

Description: Add handlers to be called when the Deferred object is resolved or rejected.

  • version added: 1.5deferred.then( doneCallbacks, failCallbacks )

    doneCallbacks A function, or array of functions, called when the Deferred is resolved.

    failCallbacks A function, or array of functions, called when the Deferred is rejected.

  • version added: 1.7deferred.then( doneCallbacks, failCallbacks [, progressCallbacks] )

    doneCallbacks A function, or array of functions, called when the Deferred is resolved.

    failCallbacks A function, or array of functions, called when the Deferred is rejected.

    progressCallbacks A function, or array of functions, called when the Deferred notifies progress.

All three arguments (including progressCallbacks, as of jQuery 1.7) can be either a single function or an array of functions. The arguments can also be null if no callback of that type is desired. Alternatively, use .done(), .fail() or .progress() to set only one type of callback.

When the Deferred is resolved, the doneCallbacks are called. If the Deferred is instead rejected, the failCallbacks are called. As of jQuery 1.7, the deferred.notify() or deferred.notifyWith() methods can be called to invoke the progressCallbacks as many times as desired before the Deferred is resolved or rejected.

Callbacks are executed in the order they were added. Since deferred.then returns the deferred object, other methods of the deferred object can be chained to this one, including additional .then() methods. For more information, see the documentation for Deferred object.

Example:

Since the jQuery.get method returns a jqXHR object, which is derived from a Deferred object, we can attach handlers using the .then method.


$.get("test.php").then(
    function(){ alert("$.get succeeded"); },
    function(){ alert("$.get failed!"); }
);
jqapi-1.7/docs/delay/index.html0000644000175000017500000001011411654657346015514 0ustar metalmetal

.delay()

.delay( duration [, queueName] ) Returns: jQuery

Description: Set a timer to delay execution of subsequent items in the queue.

  • version added: 1.4.delay( duration [, queueName] )

    durationAn integer indicating the number of milliseconds to delay execution of the next item in the queue.

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

Added to jQuery in version 1.4, the .delay() method allows us to delay the execution of functions that follow it in the queue. It can be used with the standard effects queue or with a custom queue. Only subsequent events in a queue are delayed; for example this will not delay the no-arguments forms of .show() or .hide() which do not use the effects queue.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

Using the standard effects queue, we can, for example, set an 800-millisecond delay between the .slideUp() and .fadeIn() of <div id="foo">:

$('#foo').slideUp(300).delay(800).fadeIn(400);

When this statement is executed, the element slides up for 300 milliseconds and then pauses for 800 milliseconds before fading in for 400 milliseconds.

The .delay() method is best for delaying between queued jQuery effects. Because it is limited—it doesn't, for example, offer a way to cancel the delay—.delay() is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases.

Example:

Animate the hiding and showing of two divs, delaying the first before showing it.

<!DOCTYPE html>
<html>
<head>
  <style>
div { position: absolute; width: 60px; height: 60px; float: left; }
.first { background-color: #3f3; left: 0;}
.second { background-color: #33f; left: 80px;}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<p><button>Run</button></p>
<div class="first"></div>
<div class="second"></div>
	
<script>
    $("button").click(function() {
      $("div.first").slideUp(300).delay(800).fadeIn(400);
      $("div.second").slideUp(300).fadeIn(400);
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/delegate/index.html0000644000175000017500000001733111654657354016177 0ustar metalmetal

.delegate()

.delegate( selector, eventType, handler ) Returns: jQuery

Description: Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.

  • version added: 1.4.2.delegate( selector, eventType, handler )

    selectorA selector to filter the elements that trigger the event.

    eventTypeA string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names.

    handlerA function to execute at the time the event is triggered.

  • version added: 1.4.2.delegate( selector, eventType, eventData, handler )

    selectorA selector to filter the elements that trigger the event.

    eventTypeA string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names.

    eventDataA map of data that will be passed to the event handler.

    handlerA function to execute at the time the event is triggered.

  • version added: 1.4.3.delegate( selector, events )

    selectorA selector to filter the elements that trigger the event.

    eventsA map of one or more event types and functions to execute for them.

As of jQuery 1.7, .delegate() has been superseded by the .on() method. For earlier versions, however, it remains the most effective means to use event delegation. More information on event binding and delegation is in the .on() method. In general, these are the equivalent templates for the two methods:

$(elements).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(elements).on(events, selector, data, handler);        // jQuery 1.7+
 

For example, the following .delegate() code:

$("table").delegate("td", "click", function(){
        $(this).toggleClass("chosen");
});

is equivalent to the following code written using .on():

$("table").on("click", "td", function(){
                $(this).toggleClass("chosen");
        });
});

To remove events attached with delegate(), see the .undelegate() method.

Passing and handling event data works the same way as it does for .on().

Additional Notes:

  • Since the .live() method handles events once they have propagated to the top of the document, it is not possible to stop propagation of live events. Similarly, events handled by .delegate() will propagate to the elements to which they are delegated; event handlers bound on any elements below it in the DOM tree will already have been executed by the time the delegated event handler is called. These handlers, therefore, may prevent the delegated handler from triggering by calling event.stopPropagation() or returning false.

Examples:

Example: Click a paragraph to add another. Note that .delegate() attaches a click event handler to all paragraphs - even new ones.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; font-weight:bold; cursor:pointer; 
      padding:5px; }
  p.over { background: #ccc; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Click me!</p>

  <span></span>
<script>
    $("body").delegate("p", "click", function(){
      $(this).after("<p>Another paragraph!</p>");
    });
</script>

</body>
</html>

Demo:

Example: To display each paragraph's text in an alert box whenever it is clicked:

$("body").delegate("p", "click", function(){
  alert( $(this).text() );
});

Example: To cancel a default action and prevent it from bubbling up, return false:

$("body").delegate("a", "click", function() { return false; })

Example: To cancel only the default action by using the preventDefault method.

$("body").delegate("a", "click", function(event){
  event.preventDefault();
});

Example: Can bind custom events too.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { color:red; }
  span { color:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Has an attached custom event.</p>
  <button>Trigger custom event</button>
  <span style="display:none;"></span>
<script>

    $("body").delegate("p", "myCustomEvent", function(e, myName, myValue){
      $(this).text("Hi there!");
      $("span").stop().css("opacity", 1)
               .text("myName = " + myName)
               .fadeIn(30).fadeOut(1000);
    });
    $("button").click(function () {
      $("p").trigger("myCustomEvent");
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/dequeue/index.html0000644000175000017500000000576411654657336016071 0ustar metalmetal

.dequeue()

.dequeue( [queueName] ) Returns: jQuery

Description: Execute the next function on the queue for the matched elements.

  • version added: 1.2.dequeue( [queueName] )

    queueNameA string containing the name of the queue. Defaults to fx, the standard effects queue.

When .dequeue() is called, the next function on the queue is removed from the queue, and then executed. This function should in turn (directly or indirectly) cause .dequeue() to be called, so that the sequence can continue.

Example:

Use dequeue to end a custom queue function which allows the queue to keep going.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { margin:3px; width:50px; position:absolute;
  height:50px; left:10px; top:30px; 
  background-color:yellow; }
  div.red { background-color:red; }  
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Start</button>  
<div></div>
<script>
$("button").click(function () {
  $("div").animate({left:'+=200px'}, 2000);
  $("div").animate({top:'0px'}, 600);
  $("div").queue(function () {
    $(this).toggleClass("red");
    $(this).dequeue();
  });
  $("div").animate({left:'10px', top:'30px'}, 700);
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/descendant-selector/index.html0000644000175000017500000000506311654657420020344 0ustar metalmetal

Descendant Selector (“ancestor descendant”)

descendant selector

version added: 1.0jQuery('ancestor descendant')

  • ancestor
    Any valid selector.
    descendant
    A selector to filter the descendant elements.

Description: Selects all elements that are descendants of a given ancestor.

A descendant of an element could be a child, grandchild, great-grandchild, and so on, of that element.

Example:

Finds all input descendants of forms.

<!DOCTYPE html>
<html>
<head>
  <style>

  body { font-size:14px; }
  form { border:2px green solid; padding:2px; margin:0; 
         background:#efe; }
  div { color:red; }
  fieldset { margin:1px; padding:3px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <div>Form is surrounded by the green outline</div>
    <label>Child:</label>
    <input name="name" />

    <fieldset>
      <label>Grandchild:</label>
      <input name="newsletter" />
    </fieldset>

  </form>
  Sibling to form: <input name="none" />
<script>$("form input").css("border", "2px dotted blue");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/detach/index.html0000644000175000017500000000524111654657400015642 0ustar metalmetal

.detach()

.detach( [selector] ) Returns: jQuery

Description: Remove the set of matched elements from the DOM.

  • version added: 1.4.detach( [selector] )

    selectorA selector expression that filters the set of matched elements to be removed.

The .detach() method is the same as .remove(), except that .detach() keeps all jQuery data associated with the removed elements. This method is useful when removed elements are to be reinserted into the DOM at a later time.

Example:

Detach all paragraphs from the DOM

<!DOCTYPE html>
<html>
<head>
  <style>p { background:yellow; margin:6px 0; } p.off { background: black; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p> 
  how are 
  <p>you?</p>
  <button>Attach/detach paragraphs</button>
<script>
    $("p").click(function(){
      $(this).toggleClass("off");
    });
    var p;
    $("button").click(function(){
      if ( p ) {
        p.appendTo("body");
        p = null;
      } else {
        p = $("p").detach();
      }
    });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/die/index.html0000644000175000017500000001430611654657356015167 0ustar metalmetal

.die()

Contents:

.die() Returns: jQuery

Description: Remove all event handlers previously attached using .live() from the elements.

  • version added: 1.4.1.die()

Any handler that has been attached with .live() can be removed with .die(). This method is analogous to calling .unbind() with no arguments, which is used to remove all handlers attached with .bind(). See the discussions of .live() and .unbind() for further details.

As of jQuery 1.7, use of .die() (and its complementary method, .live()) is not recommended. Instead, use .off() to remove event handlers bound with .on()

Note: In order for .die() to function correctly, the selector used with it must match exactly the selector initially used with .live().

.die( eventType [, handler] ) Returns: jQuery

Description: Remove an event handler previously attached using .live() from the elements.

  • version added: 1.3.die( eventType [, handler] )

    eventTypeA string containing a JavaScript event type, such as click or keydown.

    handlerThe function that is no longer to be executed.

  • version added: 1.4.3.die( eventTypes )

    eventTypesA map of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.

Any handler that has been attached with .live() can be removed with .die(). This method is analogous to .unbind(), which is used to remove handlers attached with .bind(). See the discussions of .live() and .unbind() for further details.

Note: In order for .die() to function correctly, the selector used with it must match exactly the selector initially used with .live().

Examples:

Example: Can bind and unbind events to the colored button.

<!DOCTYPE html>
<html>
<head>
  <style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>

<div style="display:none;">Click!</div>
<script>

function aClick() {
  $("div").show().fadeOut("slow");
}
$("#bind").click(function () {
  $("#theone").live("click", aClick)
              .text("Can Click!");
});
$("#unbind").click(function () {
  $("#theone").die("click", aClick)
              .text("Does nothing...");
});

</script>

</body>
</html>

Demo:

Example: To unbind all live events from all paragraphs, write:

$("p").die()

Example: To unbind all live click events from all paragraphs, write:

$("p").die( "click" )

Example: To unbind just one previously bound handler, pass the function in as the second argument:

var foo = function () {
// code to handle some kind of event
};

$("p").live("click", foo); // ... now foo will be called when paragraphs are clicked ...

$("p").die("click", foo); // ... foo will no longer be called.
jqapi-1.7/docs/disabled-selector/index.html0000644000175000017500000000414511654657420020003 0ustar metalmetal

:disabled Selector

disabled selector

version added: 1.0jQuery(':disabled')

Description: Selects all elements that are disabled.

As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':disabled') is equivalent to $('*:disabled'), so $('input:disabled') should be used instead.

Example:

Finds all input elements that are disabled.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>

    <input name="email" disabled="disabled" />
    <input name="id" />
  </form>
<script>$("input:disabled").val("this is it");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/each/index.html0000644000175000017500000001342411654657406015322 0ustar metalmetal

.each()

.each( function(index, Element) ) Returns: jQuery

Description: Iterate over a jQuery object, executing a function for each matched element.

  • version added: 1.0.each( function(index, Element) )

    function(index, Element)A function to execute for each matched element.

The .each() method is designed to make DOM looping constructs concise and less error-prone. When called it iterates over the DOM elements that are part of the jQuery object. Each time the callback runs, it is passed the current loop iteration, beginning from 0. More importantly, the callback is fired in the context of the current DOM element, so the keyword this refers to the element.

Suppose we had a simple unordered list on the page:

<ul>
    <li>foo</li>
    <li>bar</li>
</ul>
  

We can select the list items and iterate across them:

$('li').each(function(index) {
    alert(index + ': ' + $(this).text());
});
  

A message is thus alerted for each item in the list:

0: foo
1: bar

We can stop the loop from within the callback function by returning false.

Examples:

Example: Iterates over three divs and sets their color property.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:red; text-align:center; cursor:pointer; 
        font-weight:bolder; width:300px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>Click here</div>
  <div>to iterate through</div>
  <div>these divs.</div>
<script>
    $(document.body).click(function () {
      $("div").each(function (i) {
        if (this.style.color != "blue") {
          this.style.color = "blue";
        } else {
          this.style.color = "";
        }
      });
    });
</script>

</body>
</html>

Demo:

Example: If you want to have the jQuery object instead of the regular DOM element, use the $(this) function, for example:

<!DOCTYPE html>
<html>
<head>
  <style>
  ul { font-size:18px; margin:0; }
  span { color:blue; text-decoration:underline; cursor:pointer; }
  .example { font-style:italic; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  To do list: <span>(click here to change)</span>
  <ul>
    <li>Eat</li>
    <li>Sleep</li>

    <li>Be merry</li>
  </ul>
<script>
    $("span").click(function () {
      $("li").each(function(){
        $(this).toggleClass("example");
      });
    });

</script>

</body>
</html>

Demo:

Example: You can use 'return' to break out of each() loops early.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:40px; height:40px; margin:5px; float:left;
        border:2px blue solid; text-align:center; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Change colors</button> 
  <span></span>
  <div></div>
  <div></div>

  <div></div>
  <div></div>
  <div id="stop">Stop here</div>
  <div></div>

  <div></div>
  <div></div>
<script>
    $("button").click(function () {
      $("div").each(function (index, domEle) {
        // domEle == this
        $(domEle).css("backgroundColor", "yellow"); 
        if ($(this).is("#stop")) {
          $("span").text("Stopped at div index #" + index);
          return false;
        }
      });
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/element-selector/index.html0000644000175000017500000000427411654657420017670 0ustar metalmetal

Element Selector (“element”)

element selector

version added: 1.0jQuery('element')

  • element
    An element to search for. Refers to the tagName of DOM nodes.

Description: Selects all elements with the given tag name.

JavaScript's getElementsByTagName() function is called to return the appropriate elements when this expression is used.

Example:

Finds every DIV element.

<!DOCTYPE html>
<html>
<head>
  <style>
  div,span {
    width: 60px;
    height: 60px;
    float:left;
    padding: 10px;
    margin: 10px;
    background-color: #EEEEEE;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>DIV1</div>

  <div>DIV2</div>
  <span>SPAN</span>
<script>$("div").css("border","9px solid red");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/empty/index.html0000644000175000017500000000615111654657402015553 0ustar metalmetal

.empty()

.empty() Returns: jQuery

Description: Remove all child nodes of the set of matched elements from the DOM.

  • version added: 1.0.empty()

This method removes not only child (and other descendant) elements, but also any text within the set of matched elements. This is because, according to the DOM specification, any string of text within an element is considered a child node of that element. Consider the following HTML:

<div class="container">
  <div class="hello">Hello</div>
  <div class="goodbye">Goodbye</div>
</div>

We can target any element for removal:

$('.hello').empty();

This will result in a DOM structure with the Hello text deleted:

<div class="container">
  <div class="hello"></div>
  <div class="goodbye">Goodbye</div>
</div>

If we had any number of nested elements inside <div class="hello">, they would be removed, too.

To avoid memory leaks, jQuery removes other constructs such as data and event handlers from the child elements before removing the elements themselves.

Example:

Removes all child nodes (including text nodes) from all paragraphs

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
  Hello, <span>Person</span> <a href="javascript:;">and person</a>
</p>

<button>Call empty() on above paragraph</button>
<script>
  $("button").click(function () {
    $("p").empty();
  });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/empty-selector/index.html0000644000175000017500000000506711654657420017376 0ustar metalmetal

:empty Selector

empty selector

version added: 1.0jQuery(':empty')

Description: Select all elements that have no children (including text nodes).

This is the inverse of :parent.

One important thing to note with :empty (and :parent) is that child elements include text nodes.

The W3C recommends that the <p> element have at least one child node, even if that child is merely text (see http://www.w3.org/TR/html401/struct/text.html#edef-P). Some other elements, on the other hand, are empty (i.e. have no children) by definition: <input>, <img>, <br>, and <hr>, for example.

Example:

Finds all elements that are empty - they don't have child elements or text.

<!DOCTYPE html>
<html>
<head>
  <style>

  td { text-align:center; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">
    <tr><td>TD #0</td><td></td></tr>
    <tr><td>TD #2</td><td></td></tr>

    <tr><td></td><td>TD#5</td></tr>
  </table>
<script>$("td:empty").text("Was empty!").css('background', 'rgb(255,220,200)');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/enabled-selector/index.html0000644000175000017500000000413311654657420017623 0ustar metalmetal

:enabled Selector

enabled selector

version added: 1.0jQuery(':enabled')

Description: Selects all elements that are enabled.

As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':enabled') is equivalent to $('*:enabled'), so $('input:enabled') should be used instead.

Example:

Finds all input elements that are enabled.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>

    <input name="email" disabled="disabled" />
    <input name="id" />
  </form>
<script>$("input:enabled").val("this is it");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/end/index.html0000644000175000017500000001451311654657436015173 0ustar metalmetal

.end()

.end() Returns: jQuery

Description: End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.

  • version added: 1.0.end()

Most of jQuery's DOM traversal methods operate on a jQuery object instance and produce a new one, matching a different set of DOM elements. When this happens, it is as if the new set of elements is pushed onto a stack that is maintained inside the object. Each successive filtering method pushes a new element set onto the stack. If we need an older element set, we can use end() to pop the sets back off of the stack.

Suppose we have a couple short lists on a page:

<ul class="first">
   <li class="foo">list item 1</li>
   <li>list item 2</li>
   <li class="bar">list item 3</li>
</ul>
<ul class="second">
   <li class="foo">list item 1</li>
   <li>list item 2</li>
   <li class="bar">list item 3</li>
</ul>

The end() method is useful primarily when exploiting jQuery's chaining properties. When not using chaining, we can usually just call up a previous object by variable name, so we don't need to manipulate the stack. With end(), though, we can string all the method calls together:

$('ul.first').find('.foo').css('background-color', 'red')
  .end().find('.bar').css('background-color', 'green');

This chain searches for items with the class foo within the first list only and turns their backgrounds red. Then end() returns the object to its state before the call to find(), so the second find() looks for '.bar' inside <ul class="first">, not just inside that list's <li class="foo">, and turns the matching elements' backgrounds green. The net result is that items 1 and 3 of the first list have a colored background, and none of the items from the second list do.

A long jQuery chain can be visualized as a structured code block, with filtering methods providing the openings of nested blocks and end() methods closing them:

$('ul.first').find('.foo')
  .css('background-color', 'red')
.end().find('.bar')
  .css('background-color', 'green')
.end();

The last end() is unnecessary, as we are discarding the jQuery object immediately thereafter. However, when the code is written in this form, the end() provides visual symmetry and a sense of completion —making the program, at least to the eyes of some developers, more readable, at the cost of a slight hit to performance as it is an additional function call.

Examples:

Example: Selects all paragraphs, finds span elements inside these, and reverts the selection back to the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>
  p, div { margin:1px; padding:1px; font-weight:bold; 
           font-size:16px; }
  div { color:blue; }
  b { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
    Hi there <span>how</span> are you <span>doing</span>?
  </p>

  <p>
    This <span>span</span> is one of 
    several <span>spans</span> in this
    <span>sentence</span>.
  </p>

  <div>
    Tags in jQuery object initially: <b></b>
  </div>
  <div>
    Tags in jQuery object after find: <b></b>

  </div>
  <div>
    Tags in jQuery object after end: <b></b>
  </div>
<script>

    jQuery.fn.showTags = function (n) {
      var tags = this.map(function () { 
                              return this.tagName; 
                            })
                        .get().join(", ");
      $("b:eq(" + n + ")").text(tags);
      return this;
    };

    $("p").showTags(0)
          .find("span")
          .showTags(1)
          .css("background", "yellow")
          .end()
          .showTags(2)
          .css("font-style", "italic");

</script>

</body>
</html>

Demo:

Example: Selects all paragraphs, finds span elements inside these, and reverts the selection back to the paragraphs.

<!DOCTYPE html>
<html>
<head>
  <style>p { margin:10px; padding:10px; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><span>Hello</span>, how are you?</p>
<script>$("p").find("span").end().css("border", "2px red solid");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/eq/index.html0000644000175000017500000001000511654657436015022 0ustar metalmetal

.eq()

.eq( index ) Returns: jQuery

Description: Reduce the set of matched elements to the one at the specified index.

  • version added: 1.1.2.eq( index )

    indexAn integer indicating the 0-based position of the element.

  • version added: 1.4.eq( -index )

    -indexAn integer indicating the position of the element, counting backwards from the last element in the set.

Given a jQuery object that represents a set of DOM elements, the .eq() method constructs a new jQuery object from one element within that set. The supplied index identifies the position of this element in the set.

Consider a page with a simple list on it:

  <ul>
    <li>list item 1</li>
    <li>list item 2</li>
    <li>list item 3</li>
    <li>list item 4</li>
    <li>list item 5</li>
  </ul>

We can apply this method to the set of list items:

  $('li').eq(2).css('background-color', 'red');

The result of this call is a red background for item 3. Note that the supplied index is zero-based, and refers to the position of the element within the jQuery object, not within the DOM tree.

Providing a negative number indicates a position starting from the end of the set, rather than the beginning. For example:

  $('li').eq(-2).css('background-color', 'red');

This time list item 4 is turned red, since it is two from the end of the set.

If an element cannot be found at the specified zero-based index, the method constructs a new jQuery object with an empty set and a length property of 0.

  $('li').eq(5).css('background-color', 'red');

Here, none of the list items is turned red, since .eq(5) indicates the sixth of five list items.

Example:

Turn the div with index 2 blue by adding an appropriate class.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:60px; height:60px; margin:10px; float:left;
        border:2px solid blue; }
  .blue { background:blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div></div>
  <div></div>

  <div></div>
  <div></div>
  <div></div>
<script>

    $("body").find("div").eq(2).addClass("blue");
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/eq-selector/index.html0000644000175000017500000001256311654657422016646 0ustar metalmetal

:eq() Selector

eq selector

version added: 1.0jQuery(':eq(index)')

  • index
    Zero-based index of the element to match.

Description: Select the element at index n within the matched set.

The index-related selectors (:eq(), :lt(), :gt(), :even, :odd) filter the set of elements that have matched the expressions that precede them. They narrow the set down based on the order of the elements within this matched set. For example, if elements are first selected with a class selector (.myclass) and four elements are returned, these elements are given indices 0 through 3 for the purposes of these selectors.

Note that since JavaScript arrays use 0-based indexing, these selectors reflect that fact. This is why $('.myclass:eq(1)') selects the second element in the document with the class myclass, rather than the first. In contrast, :nth-child(n) uses 1-based indexing to conform to the CSS specification.

Unlike the .eq(index) method, the :eq(index) selector does not accept a negative value for index. For example, while $('li').eq(-1) selects the last li element, $('li:eq(-1)') selects nothing.

Additional Notes:

  • Because :eq() is a jQuery extension and not part of the CSS specification, queries using :eq() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").eq(index) instead.

Examples:

Example: Finds the third td.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">
  <tr><td>TD #0</td><td>TD #1</td><td>TD #2</td></tr>
  <tr><td>TD #3</td><td>TD #4</td><td>TD #5</td></tr>
  <tr><td>TD #6</td><td>TD #7</td><td>TD #8</td></tr>
</table>
<script>$("td:eq(2)").css("color", "red");</script>

</body>
</html>

Demo:

Example: Apply three different styles to list items to demonstrate that :eq() is designed to select a single element while :nth-child() or :eq() within a looping construct such as .each() can select multiple elements.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul class="nav">
   <li>List 1, item 1</li>
   <li>List 1, item 2</li>
   <li>List 1, item 3</li>
</ul>
<ul class="nav">
  <li>List 2, item 1</li>
  <li>List 2, item 2</li>
  <li>List 2, item 3</li>
</ul>

<script>
// applies yellow background color to a single <li>
$("ul.nav li:eq(1)").css( "backgroundColor", "#ff0" );

// applies italics to text of the second <li> within each <ul class="nav">
$("ul.nav").each(function(index) {
  $(this).find("li:eq(1)").css( "fontStyle", "italic" );
});

// applies red text color to descendants of <ul class="nav">
// for each <li> that is the second child of its parent
$("ul.nav li:nth-child(2)").css( "color", "red" );
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/error/index.html0000644000175000017500000000725311654657356015562 0ustar metalmetal

.error()

.error( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "error" JavaScript event.

  • version added: 1.0.error( handler(eventObject) )

    handler(eventObject)A function to execute when the event is triggered.

  • version added: 1.4.3.error( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

This method is a shortcut for .bind('error', handler).

The error event is sent to elements, such as images, that are referenced by a document and loaded by the browser. It is called if the element was not loaded correctly.

For example, consider a page with a simple image element:

<img alt="Book" id="book" />

The event handler can be bound to the image:

$('#book')
  .error(function() {
    alert('Handler for .error() called.')
  })
  .attr("src", "missing.png");

If the image cannot be loaded (for example, because it is not present at the supplied URL), the alert is displayed:

Handler for .error() called.

The event handler must be attached before the browser fires the error event, which is why the example sets the src attribute after attaching the handler. Also, the error event may not be correctly fired when the page is served locally; error relies on HTTP status codes and will generally not be triggered if the URL uses the file: protocol.

Note: A jQuery error event handler should not be attached to the window object. The browser fires the window's error event when a script error occurs. However, the window error event receives different arguments and has different return value requirements than conventional event handlers. Use window.onerror instead.

Example:

To hide the "broken image" icons for IE users, you can try:

$("img")
  .error(function(){
    $(this).hide();
  })
  .attr("src", "missing.png");
jqapi-1.7/docs/even-selector/index.html0000644000175000017500000000607111654657422017173 0ustar metalmetal

:even Selector

even selector

version added: 1.0jQuery(':even')

Description: Selects even elements, zero-indexed. See also odd.

In particular, note that the 0-based indexing means that, counter-intuitively, :even selects the first element, third element, and so on within the matched set.

Additional Notes:

  • Because :even is a jQuery extension and not part of the CSS specification, queries using :even cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :even to select elements, first select the elements using a pure CSS selector, then use .filter(":even").

Example:

Finds even table rows, matching the first, third and so on (index 0, 2, 4 etc.).

<!DOCTYPE html>
<html>
<head>
  <style>

  table {
    background:#eeeeee;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">
    <tr><td>Row with Index #0</td></tr>
    <tr><td>Row with Index #1</td></tr>

    <tr><td>Row with Index #2</td></tr>
    <tr><td>Row with Index #3</td></tr>
  </table>
<script>$("tr:even").css("background-color", "#bbbbff");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.currentTarget/index.html0000644000175000017500000000371611654657356020402 0ustar metalmetal

event.currentTarget

event.currentTarget Returns: Element

Description: The current DOM element within the event bubbling phase.

  • version added: 1.3event.currentTarget

This property will typically be equal to the this of the function.

If you are using jQuery.proxy or another form of scope manipulation, this will be equal to whatever context you have provided, not event.currentTarget

Example:

Alert that currentTarget matches the `this` keyword.

$("p").click(function(event) {
  alert( event.currentTarget === this ); // true
});  
jqapi-1.7/docs/event.data/index.html0000644000175000017500000000321011654657356016447 0ustar metalmetal

event.data

event.data Returns: Anything

Description: The optional data passed to jQuery.fn.bind when the current executing handler was bound.

  • version added: 1.1event.data

Example:

The description of the example.

$("a").each(function(i) {
  $(this).bind('click', {index:i}, function(e){
     alert('my index is ' + e.data.index);
  });
});   
jqapi-1.7/docs/event.isDefaultPrevented/index.html0000644000175000017500000000335711654657356021347 0ustar metalmetal

event.isDefaultPrevented()

event.isDefaultPrevented() Returns: Boolean

Description: Returns whether event.preventDefault() was ever called on this event object.

  • version added: 1.3event.isDefaultPrevented()

Example:

Checks whether event.preventDefault() was called.

$("a").click(function(event){
  alert( event.isDefaultPrevented() ); // false
  event.preventDefault();
  alert( event.isDefaultPrevented() ); // true
});  
jqapi-1.7/docs/event.isImmediatePropagationStopped/index.html0000644000175000017500000000510211654657356023535 0ustar metalmetal

event.isImmediatePropagationStopped()

event.isImmediatePropagationStopped() Returns: Boolean

Description: Returns whether event.stopImmediatePropagation() was ever called on this event object.

  • version added: 1.3event.isImmediatePropagationStopped()

This property was introduced in DOM level 3.

Example:

Checks whether event.stopImmediatePropagation() was called.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <button>click me</button>
  <div id="stop-log"></div>
  
<script>

function immediatePropStopped(e) {
  var msg = "";
  if ( e.isImmediatePropagationStopped() ) {
    msg =  "called"
  } else {
    msg = "not called";
  }
  $("#stop-log").append( "<div>" + msg + "</div>" );
}

$("button").click(function(event) {
  immediatePropStopped(event);
  event.stopImmediatePropagation();
  immediatePropStopped(event);
});  
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.isPropagationStopped/index.html0000644000175000017500000000474211654657356021727 0ustar metalmetal

event.isPropagationStopped()

event.isPropagationStopped() Returns: Boolean

Description: Returns whether event.stopPropagation() was ever called on this event object.

  • version added: 1.3event.isPropagationStopped()

This event method is described in the W3C DOM Level 3 specification.

Example:

Checks whether event.stopPropagation() was called

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <button>click me</button>
  <div id="stop-log"></div>
  
<script>

function propStopped(e) {
  var msg = "";
  if ( e.isPropagationStopped() ) {
    msg =  "called"
  } else {
    msg = "not called";
  }
  $("#stop-log").append( "<div>" + msg + "</div>" );
}

$("button").click(function(event) {
  propStopped(event);
  event.stopPropagation();
  propStopped(event);
});  
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.namespace/index.html0000644000175000017500000000423511654657360017475 0ustar metalmetal

event.namespace

event.namespace Returns: String

Description: The namespace specified when the event was triggered.

  • version added: 1.4.3event.namespace

This will likely be used primarily by plugin authors who wish to handle tasks differently depending on the event namespace used.

Example:

Determine the event namespace used.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button>display event.namespace</button>
<p></p>

<script>
$("p").bind("test.something", function(event) {
  alert( event.namespace );
});
$("button").click(function(event) {
  $("p").trigger("test.something");
});  
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.pageX/index.html0000644000175000017500000000406211654657360016603 0ustar metalmetal

event.pageX

event.pageX Returns: Number

Description: The mouse position relative to the left edge of the document.

  • version added: 1.0.4event.pageX

Example:

Show the mouse position relative to the left and top edges of the document (within the iframe).

<!DOCTYPE html>
<html>
<head>
  <style>body {background-color: #eef; }
div { padding: 20px; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="log"></div>
<script>$(document).bind('mousemove',function(e){ 
            $("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY); 
}); </script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.pageY/index.html0000644000175000017500000000406211654657360016604 0ustar metalmetal

event.pageY

event.pageY Returns: Number

Description: The mouse position relative to the top edge of the document.

  • version added: 1.0.4event.pageY

Example:

Show the mouse position relative to the left and top edges of the document (within this iframe).

<!DOCTYPE html>
<html>
<head>
  <style>body {background-color: #eef; }
div { padding: 20px; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="log"></div>
<script>$(document).bind('mousemove',function(e){ 
            $("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY); 
}); </script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.preventDefault/index.html0000644000175000017500000000454711654657360020537 0ustar metalmetal

event.preventDefault()

event.preventDefault() Returns: undefined

Description: If this method is called, the default action of the event will not be triggered.

  • version added: 1.0event.preventDefault()

For example, clicked anchors will not take the browser to a new URL. We can use event.isDefaultPrevented() to determine if this method has been called by an event handler that was triggered by this event.

Example:

Cancel the default action (navigation) of the click.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<a href="http://jquery.com">default click action is prevented</a>
<div id="log"></div>

<script>
$("a").click(function(event) {
  event.preventDefault();
  $('<div/>')
    .append('default ' + event.type + ' prevented')
    .appendTo('#log');
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.relatedTarget/index.html0000644000175000017500000000345311654657360020331 0ustar metalmetal

event.relatedTarget

event.relatedTarget Returns: Element

Description: The other DOM element involved in the event, if any.

  • version added: 1.1.4event.relatedTarget

For mouseout, indicates the element being entered; for mouseover, indicates the element being exited.

Example:

On mouseout of anchors, alert the element type being entered.

$("a").mouseout(function(event) {
  alert(event.relatedTarget.nodeName); // "DIV"
});  
jqapi-1.7/docs/event.result/index.html0000644000175000017500000000417211654657360017057 0ustar metalmetal

event.result

event.result Returns: Object

Description: The last value returned by an event handler that was triggered by this event, unless the value was undefined.

  • version added: 1.3event.result

This property can be useful for getting previous return values of custom events.

Example:

Display previous handler's return value

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button>display event.result</button>
<p></p>

<script>
$("button").click(function(event) {
  return "hey";
});
$("button").click(function(event) {
  $("p").html( event.result );
});  
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.stopImmediatePropagation/index.html0000644000175000017500000000741411654657362022555 0ustar metalmetal

event.stopImmediatePropagation()

event.stopImmediatePropagation()

Description: Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.

  • version added: 1.3event.stopImmediatePropagation()

In addition to keeping any additional handlers on an element from being executed, this method also stops the bubbling by implicitly calling event.stopPropagation(). To simply prevent the event from bubbling to ancestor elements but allow other event handlers to execute on the same element, we can use event.stopPropagation() instead.

Use event.isImmediatePropagationStopped() to know whether this method was ever called (on that event object).

Additional Notes:

  • Since the .live() method handles events once they have propagated to the top of the document, it is not possible to stop propagation of live events. Similarly, events handled by .delegate() will propagate to the elements to which they are delegated; event handlers bound on any elements below it in the DOM tree will already have been executed by the time the delegated event handler is called. These handlers, therefore, may prevent the delegated handler from triggering by calling event.stopPropagation() or returning false.

Example:

Prevents other event handlers from being called.

<!DOCTYPE html>
<html>
<head>
  <style>
p { height: 30px; width: 150px; background-color: #ccf; }
div {height: 30px; width: 150px; background-color: #cfc; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>paragraph</p>
<div>division</div>
<script>
$("p").click(function(event){
  event.stopImmediatePropagation();
});
$("p").click(function(event){
  // This function won't be executed
  $(this).css("background-color", "#f00");
});  
$("div").click(function(event) {
  // This function will be executed
    $(this).css("background-color", "#f00");
});</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.stopPropagation/index.html0000644000175000017500000000543111654657362020733 0ustar metalmetal

event.stopPropagation()

event.stopPropagation()

Description: Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.

  • version added: 1.0event.stopPropagation()

We can use event.isPropagationStopped() to determine if this method was ever called (on that event object).

This method works for custom events triggered with trigger(), as well.

Note that this will not prevent other handlers on the same element from running.

Additional Notes:

  • Since the .live() method handles events once they have propagated to the top of the document, it is not possible to stop propagation of live events. Similarly, events handled by .delegate() will propagate to the elements to which they are delegated; event handlers bound on any elements below it in the DOM tree will already have been executed by the time the delegated event handler is called. These handlers, therefore, may prevent the delegated handler from triggering by calling event.stopPropagation() or returning false.

Example:

Kill the bubbling on the click event.

$("p").click(function(event){
  event.stopPropagation();
  // do something
});  
jqapi-1.7/docs/event.target/index.html0000644000175000017500000000702111654657362017025 0ustar metalmetal

event.target

event.target Returns: Element

Description: The DOM element that initiated the event.

  • version added: 1.0event.target

The target property can be the element that registered for the event or a descendant of it. It is often useful to compare event.target to this in order to determine if the event is being handled due to event bubbling. This property is very useful in event delegation, when events bubble.

Examples:

Example: Display the tag's name on click

<!DOCTYPE html>
<html>
<head>
  <style>
span, strong, p { 
  padding: 8px; display: block; border: 1px solid #999;  }
    </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div id="log"></div>
<div>
  <p>
    <strong><span>click</span></strong>
  </p>
</div>
<script>$("body").click(function(event) {
  $("#log").html("clicked: " + event.target.nodeName);
});  </script>

</body>
</html>

Demo:

Example: Implements a simple event delegation: The click handler is added to an unordered list, and the children of its li children are hidden. Clicking one of the li children toggles (see toggle()) their children.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<ul>
  <li>item 1
    <ul>
      <li>sub item 1-a</li>
      <li>sub item 1-b</li>
    </ul>
  </li>
  <li>item 2
    <ul>
      <li>sub item 2-a</li>
      <li>sub item 2-b</li>
    </ul>
  </li>  
</ul>
<script>function handler(event) {
  var $target = $(event.target);
  if( $target.is("li") ) {
    $target.children().toggle();
  }
}
$("ul").click(handler).find("ul").hide();</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.timeStamp/index.html0000644000175000017500000000472211654657362017507 0ustar metalmetal

event.timeStamp

event.timeStamp Returns: Number

Description: The difference in milliseconds between the time an event is triggered and January 1, 1970.

  • version added: 1.2.6event.timeStamp

This property can be useful for profiling the performance of certain jQuery functions by getting the event.timeStamp value at two points in the code and noting the difference.

Example:

Display the time since the click handler last executed.

<!DOCTYPE html>
<html>
<head>
  <style>
div { height: 100px; width: 300px; margin: 10px; 
      background-color: #ffd; overflow: auto; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div>Click.</div>
<script>
var last, diff;
$('div').click(function(event) {
  if ( last ) {
    diff = event.timeStamp - last
    $('div').append('time since last event: ' + diff + '<br/>');
  } else {
    $('div').append('Click again.<br/>');
  }
  last = event.timeStamp;
});  
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/event.type/index.html0000644000175000017500000000303411654657362016520 0ustar metalmetal

event.type

event.type Returns: String

Description: Describes the nature of the event.

  • version added: 1.0event.type

Example:

On all anchor clicks, alert the event type.

$("a").click(function(event) {
  alert(event.type); // "click"
}); 
jqapi-1.7/docs/event.which/index.html0000644000175000017500000000455211654657362016647 0ustar metalmetal

event.which

event.which Returns: Number

Description: For key or button events, this attribute indicates the specific button or key that was pressed.

  • version added: 1.1.3event.which

event.which normalizes event.keyCode and event.charCode. It is recommended to watch event.which for keyboard key input. For more detail, read about event.charCode on the MDC.

Example:

Log what key was depressed.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<input id="whichkey" value="type something">
<div id="log"></div>
<script>$('#whichkey').bind('keydown',function(e){ 
  $('#log').html(e.type + ': ' +  e.which );
});  </script>

</body>
</html>

Demo:

Result:

"keydown" 74  
jqapi-1.7/docs/fadeIn/index.html0000644000175000017500000002023011654657346015604 0ustar metalmetal

.fadeIn()

.fadeIn( [duration] [, callback] ) Returns: jQuery

Description: Display the matched elements by fading them to opaque.

  • version added: 1.0.fadeIn( [duration] [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.fadeIn( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .fadeIn() method animates the opacity of the matched elements.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively. If any other string is supplied, or if the duration parameter is omitted, the default duration of 400 milliseconds is used.

We can animate any element, such as a simple image:

<div id="clickme">
      Click here
    </div>
    <img id="book" src="book.png" alt="" width="100" height="123" />
    With the element initially hidden, we can show it slowly:
    $('#clickme').click(function() {
      $('#book').fadeIn('slow', function() {
        // Animation complete
      });
    });

Easing

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .fadeIn(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Animates hidden divs to fade in one by one, completing each animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
    span { color:red; cursor:pointer; }
    div { margin:3px; width:80px; display:none;
      height:80px; float:left; }
      div#one { background:#f00; }
      div#two { background:#0f0; }
      div#three { background:#00f; }
    </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>Click here...</span>

    <div id="one"></div>
    <div id="two"></div>
    <div id="three"></div>
<script>
      $(document.body).click(function () {
        $("div:hidden:first").fadeIn("slow");
      });
    </script>

</body>
</html>

Demo:

Example: Fades a red block in over the text. Once the animation is done, it quickly fades in more text on top.

<!DOCTYPE html>
<html>
<head>
  <style>
      p { position:relative; width:400px; height:90px; }
      div { position:absolute; width:400px; height:65px; 
        font-size:36px; text-align:center; 
        color:yellow; background:red;
        padding-top:25px; 
        top:0; left:0; display:none; }
        span { display:none; }
      </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
        Let it be known that the party of the first part
        and the party of the second part are henceforth
        and hereto directed to assess the allegations
        for factual correctness... (<a href="#">click!</a>)
        <div><span>CENSORED!</span></div>

      </p>
<script>
        $("a").click(function () {
          $("div").fadeIn(3000, function () {
            $("span").fadeIn(100);
          });
          return false;
        }); 

      </script>

</body>
</html>

Demo:

jqapi-1.7/docs/fadeOut/index.html0000644000175000017500000002245611654657346016021 0ustar metalmetal

.fadeOut()

.fadeOut( [duration] [, callback] ) Returns: jQuery

Description: Hide the matched elements by fading them to transparent.

  • version added: 1.0.fadeOut( [duration] [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.fadeOut( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .fadeOut() method animates the opacity of the matched elements. Once the opacity reaches 0, the display style property is set to none, so the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively. If any other string is supplied, or if the duration parameter is omitted, the default duration of 400 milliseconds is used.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />

With the element initially shown, we can hide it slowly:

$('#clickme').click(function() {
  $('#book').fadeOut('slow', function() {
    // Animation complete.
  });
});

Note: To avoid unnecessary DOM manipulation, .fadeOut() will not hide an element that is already considered hidden. For information on which elements jQuery considers hidden, see :hidden Selector.

Easing

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .fadeOut(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Animates all paragraphs to fade out, completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { font-size:150%; cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
  If you click on this paragraph
  you'll see it just fade away.
  </p>
<script>
  $("p").click(function () {
  $("p").fadeOut("slow");
  });
  </script>

</body>
</html>

Demo:

Example: Fades out spans in one section that you click on.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { cursor:pointer; }
  span.hilite { background:yellow; }
  div { display:inline; color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <h3>Find the modifiers - <div></div></h3>
  <p>
  If you <span>really</span> want to go outside
  <span>in the cold</span> then make sure to wear
  your <span>warm</span> jacket given to you by
  your <span>favorite</span> teacher.
  </p>
<script>

  $("span").click(function () {
  $(this).fadeOut(1000, function () {
  $("div").text("'" + $(this).text() + "' has faded!");
  $(this).remove();
  });
  });
  $("span").hover(function () {
  $(this).addClass("hilite");
  }, function () {
  $(this).removeClass("hilite");
  });

  </script>

</body>
</html>

Demo:

Example: Fades out two divs, one with a "linear" easing and one with the default, "swing," easing.

<!DOCTYPE html>
<html>
<head>
  <style>
.box,
button { float:left; margin:5px 10px 5px 0; }
.box { height:80px; width:80px; background:#090; }
#log { clear:left; }

</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button id="btn1">fade out</button>
<button id="btn2">show</button>

<div id="log"></div>

<div id="box1" class="box">linear</div>
<div id="box2" class="box">swing</div>

<script>
$("#btn1").click(function() {
  function complete() {
    $("<div/>").text(this.id).appendTo("#log");
  }
  
  $("#box1").fadeOut(1600, "linear", complete);
  $("#box2").fadeOut(1600, complete);
});

$("#btn2").click(function() {
  $("div").show();
  $("#log").empty();
});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/fadeTo/index.html0000644000175000017500000002064011654657346015625 0ustar metalmetal

.fadeTo()

.fadeTo( duration, opacity [, callback] ) Returns: jQuery

Description: Adjust the opacity of the matched elements.

  • version added: 1.0.fadeTo( duration, opacity [, callback] )

    durationA string or number determining how long the animation will run.

    opacityA number between 0 and 1 denoting the target opacity.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.fadeTo( duration, opacity [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    opacityA number between 0 and 1 denoting the target opacity.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .fadeTo() method animates the opacity of the matched elements.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively. If any other string is supplied, the default duration of 400 milliseconds is used. Unlike the other effect methods, .fadeTo() requires that duration be explicitly specified.

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

We can animate any element, such as a simple image:

<div id="clickme">
    Click here
  </div>
  <img id="book" src="book.png" alt="" width="100" height="123" />
  With the element initially shown, we can dim it slowly:
  $('#clickme').click(function() {
    $('#book').fadeTo('slow', 0.5, function() {
      // Animation complete.
    });
  });
  

With duration set to 0, this method just changes the opacity CSS property, so .fadeTo(0, opacity) is the same as .css('opacity', opacity).

Additional Notes:

  • All jQuery effects, including .fadeTo(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Examples:

Example: Animates first paragraph to fade to an opacity of 0.33 (33%, about one third visible), completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
Click this paragraph to see it fade.
</p>

<p>
Compare to this one that won't fade.
</p>
<script>
$("p:first").click(function () {
$(this).fadeTo("slow", 0.33);
});
</script>

</body>
</html>

Demo:

Example: Fade div to a random opacity on each click, completing the animation within 200 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
p { width:80px; margin:0; padding:5px; }
div { width:40px; height:40px; position:absolute; }
div#one { top:0; left:0; background:#f00; }
div#two { top:20px; left:20px; background:#0f0; }
div#three { top:40px; left:40px; background:#00f; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>And this is the library that John built...</p>

<div id="one"></div>
<div id="two"></div>
<div id="three"></div>
<script>
$("div").click(function () {
$(this).fadeTo("fast", Math.random());
});
</script>

</body>
</html>

Demo:

Example: Find the right answer! The fade will take 250 milliseconds and change various styles when it completes.

<!DOCTYPE html>
<html>
<head>
  <style>
div, p { width:80px; height:40px; top:0; margin:0; 
position:absolute; padding-top:8px; }
p { background:#fcc; text-align:center; }
div { background:blue; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Wrong</p>
<div></div>
<p>Wrong</p>
<div></div>

<p>Right!</p>
<div></div>
<script>
var getPos = function (n) {
return (Math.floor(n) * 90) + "px";
};
$("p").each(function (n) {
var r = Math.floor(Math.random() * 3);
var tmp = $(this).text();
$(this).text($("p:eq(" + r + ")").text());
$("p:eq(" + r + ")").text(tmp);
$(this).css("left", getPos(n));
});
$("div").each(function (n) {
      $(this).css("left", getPos(n));
    })
.css("cursor", "pointer")
.click(function () {
      $(this).fadeTo(250, 0.25, function () {
            $(this).css("cursor", "")
                   .prev().css({"font-weight": "bolder",
                                "font-style": "italic"});
          });
    });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/fadeToggle/index.html0000644000175000017500000001405111654657350016456 0ustar metalmetal

.fadeToggle()

.fadeToggle( [duration] [, easing] [, callback] ) Returns: jQuery

Description: Display or hide the matched elements by animating their opacity.

  • version added: 1.4.4.fadeToggle( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

The .fadeToggle() method animates the opacity of the matched elements. When called on a visible element, the element's display style property is set to none once the opacity reaches 0, so the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

Easing

The string representing an easing function specifies the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

Callback Function

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

As of jQuery 1.6, the .promise() method can be used in conjunction with the deferred.done() method to execute a single callback for the animation as a whole when all matching elements have completed their animations ( See the example for .promise() ).

Additional Notes:

  • All jQuery effects, including .fadeToggle(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.
  • Because of the nature of requestAnimationFrame(), you should never queue animations using a setInterval or setTimeout loop. In order to preserve CPU resources, browsers that support requestAnimationFrame will not update animations when the window/tab is not displayed. If you continue to queue animations via setInterval or setTimeout while animation is paused, all of the queued animations will begin playing when the window/tab regains focus. To avoid this potential problem, use the callback of your last animation in the loop, or append a function to the elements .queue() to set the timeout to start the next animation.

Example:

Fades first paragraph in or out, completing the animation within 600 milliseconds and using a linear easing. Fades last paragraph in or out for 200 milliseconds, inserting a "finished" message upon completion.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<button>fadeToggle p1</button>
<button>fadeToggle p2</button>
<p>This paragraph has a slow, linear fade.</p>

<p>This paragraph has a fast animation.</p>
<div id="log"></div>

<script>
$("button:first").click(function() {
  $("p:first").fadeToggle("slow", "linear");
});
$("button:last").click(function () {
  $("p:last").fadeToggle("fast", function () {
    $("#log").append("<div>finished</div>");
  });
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/file-selector/index.html0000644000175000017500000000700511654657422017153 0ustar metalmetal

:file Selector

file selector

version added: 1.0jQuery(':file')

Description: Selects all elements of type file.

:file is equivalent to [type="file"]. As with other pseudo-class selectors (those that begin with a ":") it is recommended to precede it with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':file') is equivalent to $('*:file'), so $('input:file') should be used instead.

Additional Notes:

  • Because :file is a jQuery extension and not part of the CSS specification, queries using :file cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="file"] instead.

Example:

Finds all file inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:45px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option<option/></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div>
  </div>
<script>

    var input = $("input:file").css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/filter/index.html0000644000175000017500000001674611654657436015724 0ustar metalmetal

.filter()

.filter( selector ) Returns: jQuery

Description: Reduce the set of matched elements to those that match the selector or pass the function's test.

  • version added: 1.0.filter( selector )

    selectorA string containing a selector expression to match the current set of elements against.

  • version added: 1.0.filter( function(index) )

    function(index)A function used as a test for each element in the set. this is the current DOM element.

  • version added: 1.4.filter( element )

    elementAn element to match the current set of elements against.

  • version added: 1.4.filter( jQuery object )

    jQuery objectAn existing jQuery object to match the current set of elements against.

Given a jQuery object that represents a set of DOM elements, the .filter() method constructs a new jQuery object from a subset of the matching elements. The supplied selector is tested against each element; all elements matching the selector will be included in the result.

Consider a page with a simple list on it:

We can apply this method to the set of list items:

  $('li').filter(':even').css('background-color', 'red');

The result of this call is a red background for items 1, 3, and 5, as they match the selector (recall that :even and :odd use 0-based indexing).

Using a Filter Function

The second form of this method allows us to filter elements against a function rather than a selector. For each element, if the function returns true (or a "truthy" value), the element will be included in the filtered set; otherwise, it will be excluded. Suppose we have a somewhat more involved HTML snippet:

<ul>
  <li><strong>list</strong> item 1 -
    one strong tag</li>
  <li><strong>list</strong> item <strong>2</strong> -
    two <span>strong tags</span></li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
  <li>list item 6</li>
</ul>

We can select the list items, then filter them based on their contents:

$('li').filter(function(index) {
  return $('strong', this).length == 1;
}).css('background-color', 'red');

This code will alter the first list item only, as it contains exactly one <strong> tag. Within the filter function, this refers to each DOM element in turn. The parameter passed to the function tells us the index of that DOM element within the set matched by the jQuery object.

We can also take advantage of the index passed through the function, which indicates the 0-based position of the element within the unfiltered set of matched elements:

$('li').filter(function(index) {
  return index % 3 == 2;
}).css('background-color', 'red');

This alteration to the code will cause the third and sixth list items to be highlighted, as it uses the modulus operator (%) to select every item with an index value that, when divided by 3, has a remainder of 2.

Examples:

Example: Change the color of all divs; then add a border to those with a "middle" class.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:60px; height:60px; margin:5px; float:left;
        border:2px white solid;}
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>

  <div class="middle"></div>
  <div class="middle"></div>
  <div class="middle"></div>
  <div class="middle"></div>

  <div></div>
<script>

    $("div").css("background", "#c8ebcc")
            .filter(".middle")
            .css("border-color", "red");
</script>

</body>
</html>

Demo:

Example: Change the color of all divs; then add a border to the second one (index == 1) and the div with an id of "fourth."

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:60px; height:60px; margin:5px; float:left;
        border:3px white solid; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <div id="first"></div>
  <div id="second"></div>
  <div id="third"></div>

  <div id="fourth"></div>
  <div id="fifth"></div>
  <div id="sixth"></div>
<script>
    $("div").css("background", "#b4b0da")
            .filter(function (index) {
                  return index == 1 || $(this).attr("id") == "fourth";
                })
            .css("border", "3px double red");

</script>

</body>
</html>

Demo:

Example: Select all divs and filter the selection with a DOM element, keeping only the one with an id of "unique".

$("div").filter( document.getElementById("unique") )

Example: Select all divs and filter the selection with a jQuery object, keeping only the one with an id of "unique".


$("div").filter( $("#unique") )
jqapi-1.7/docs/find/index.html0000644000175000017500000001672311654657440015345 0ustar metalmetal

.find()

.find( selector ) Returns: jQuery

Description: Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.

  • version added: 1.0.find( selector )

    selectorA string containing a selector expression to match elements against.

  • version added: 1.6.find( jQuery object )

    jQuery objectA jQuery object to match elements against.

  • version added: 1.6.find( element )

    elementAn element to match elements against.

Given a jQuery object that represents a set of DOM elements, the .find() method allows us to search through the descendants of these elements in the DOM tree and construct a new jQuery object from the matching elements. The .find() and .children() methods are similar, except that the latter only travels a single level down the DOM tree.

The first signature for the .find()method accepts a selector expression of the same type that we can pass to the $() function. The elements will be filtered by testing whether they match this selector.

Consider a page with a basic nested list on it:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

If we begin at item II, we can find list items within it:

$('li.item-ii').find('li').css('background-color', 'red');

The result of this call is a red background on items A, B, 1, 2, 3, and C. Even though item II matches the selector expression, it is not included in the results; only descendants are considered candidates for the match.

Unlike in the rest of the tree traversal methods, the selector expression is required in a call to .find(). If we need to retrieve all of the descendant elements, we can pass in the universal selector '*' to accomplish this.

Selector context is implemented with the .find() method; therefore, $('li.item-ii').find('li') is equivalent to $('li', 'li.item-ii').

As of jQuery 1.6, we can also filter the selection with a given jQuery collection or element. With the same nested list as above, if we start with:

var $allListElements = $('li');

And then pass this jQuery object to find:

$('li.item-ii').find( $allListElements );

This will return a jQuery collection which contains only the list elements that are descendants of item II.

Similarly, an element may also be passed to find:

var item1 = $('li.item-1')[0];
$('li.item-ii').find( item1 ).css('background-color', 'red');

The result of this call would be a red background on item 1.

Examples:

Example: Starts with all paragraphs and searches for descendant span elements, same as $("p span")

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><span>Hello</span>, how are you?</p>
<p>Me? I'm <span>good</span>.</p>
<script>
  $("p").find("span").css('color','red');
</script>

</body>
</html>

Demo:

Example: A selection using a jQuery collection of all span tags. Only spans within p tags are changed to red while others are left blue.

<!DOCTYPE html>
<html>
<head>
  <style>
    span { color: blue; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><span>Hello</span>, how are you?</p>
  <p>Me? I'm <span>good</span>.</p>
  <div>Did you <span>eat</span> yet?</div>
<script>
  var $spans = $('span');
  $("p").find( $spans ).css('color','red');
</script>

</body>
</html>

Demo:

Example: Add spans around each word then add a hover and italicize words with the letter t.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { font-size:20px; width:200px; cursor:default; 
      color:blue; font-weight:bold; margin:0 10px; }
  .hilite { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>
  When the day is short
  find that which matters to you
  or stop believing
  </p>
<script>
  var newText = $("p").text().split(" ").join("</span> <span>");
  newText = "<span>" + newText + "</span>";

  $("p").html( newText )
    .find('span')
    .hover(function() { 
      $(this).addClass("hilite"); 
    },
      function() { $(this).removeClass("hilite"); 
    })
  .end()
    .find(":contains('t')")
    .css({"font-style":"italic", "font-weight":"bolder"});

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/first/index.html0000644000175000017500000000520011654657440015540 0ustar metalmetal

.first()

.first() Returns: jQuery

Description: Reduce the set of matched elements to the first in the set.

  • version added: 1.4.first()

Given a jQuery object that represents a set of DOM elements, the .first() method constructs a new jQuery object from the first matching element.

Consider a page with a simple list on it:

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
</ul>

We can apply this method to the set of list items:

$('li').first().css('background-color', 'red');

The result of this call is a red background for the first item.

Example:

Highlight the first span in a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>.highlight{background-color: yellow}</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><span>Look:</span> <span>This is some text in a paragraph.</span> <span>This is a note about it.</span></p>
<script>$("p span").first().addClass('highlight');</script>

</body>
</html>

Demo:

jqapi-1.7/docs/first-child-selector/index.html0000644000175000017500000000501211654657422020440 0ustar metalmetal

:first-child Selector

first-child selector

version added: 1.1.4jQuery(':first-child')

Description: Selects all elements that are the first child of their parent.

While :first matches only a single element, the :first-child selector can match more than one: one for each parent. This is equivalent to :nth-child(1).

Example:

Finds the first span in each matched div to underline and add a hover state.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { color:#008; }
  span.sogreen { color:green; font-weight: bolder; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>
    <span>John,</span>
    <span>Karl,</span>
    <span>Brandon</span>

  </div>
  <div>
    <span>Glen,</span>
    <span>Tane,</span>
    <span>Ralph</span>

  </div>
<script>
    $("div span:first-child")
        .css("text-decoration", "underline")
        .hover(function () {
              $(this).addClass("sogreen");
            }, function () {
              $(this).removeClass("sogreen");
            });

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/first-selector/index.html0000644000175000017500000000572311654657422017370 0ustar metalmetal

:first Selector

first selector

version added: 1.0jQuery(':first')

Description: Selects the first matched element.

The :first pseudo-class is equivalent to :eq(0). It could also be written as :lt(1). While this matches only a single element, :first-child can match more than one: One for each parent.

Additional Notes:

  • Because :first is a jQuery extension and not part of the CSS specification, queries using :first cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :first to select elements, first select the elements using a pure CSS selector, then use .filter(":first").

Example:

Finds the first table row.

<!DOCTYPE html>
<html>
<head>
  <style>

  td { color:blue; font-weight:bold; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table>
    <tr><td>Row 1</td></tr>
    <tr><td>Row 2</td></tr>

    <tr><td>Row 3</td></tr>
  </table>
<script>$("tr:first").css("font-style", "italic");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/focus/index.html0000644000175000017500000001361111654657362015540 0ustar metalmetal

.focus()

.focus( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "focus" JavaScript event, or trigger that event on an element.

  • version added: 1.0.focus( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.focus( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.0.focus()

  • This method is a shortcut for .bind('focus', handler) in the first and second variations, and .trigger('focus') in the third.
  • The focus event is sent to an element when it gains focus. This event is implicitly applicable to a limited set of elements, such as form elements (<input>, <select>, etc.) and links (<a href>). In recent browser versions, the event can be extended to include all element types by explicitly setting the element's tabindex property. An element can gain focus via keyboard commands, such as the Tab key, or by mouse clicks on the element.
  • Elements with focus are usually highlighted in some way by the browser, for example with a dotted line surrounding the element. The focus is used to determine which element is the first to receive keyboard-related events.

For example, consider the HTML:

<form>
  <input id="target" type="text" value="Field 1" />
  <input type="text" value="Field 2" />
</form>
<div id="other">
  Trigger the handler
</div>

The event handler can be bound to the first input field:

$('#target').focus(function() {
  alert('Handler for .focus() called.');
});

Now clicking on the first field, or tabbing to it from another field, displays the alert:

Handler for .focus() called.

We can trigger the event when another element is clicked:

$('#other').click(function() {
  $('#target').focus();
});

After this code executes, clicks on Trigger the handler will also alert the message.

The focus event does not bubble in Internet Explorer. Therefore, scripts that rely on event delegation with the focus event will not work consistently across browsers. As of version 1.4.2, however, jQuery works around this limitation by mapping focus to the focusin event in its event delegation methods, .live() and .delegate().

Triggering the focus on hidden elements causes an error in Internet Explorer. Take care to only call .focus() without parameters on elements that are visible.

Examples:

Example: Fire focus.

<!DOCTYPE html>
<html>
<head>
  <style>span {display:none;}</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><input type="text" /> <span>focus fire</span></p>

<p><input type="password" /> <span>focus fire</span></p>
<script>
    $("input").focus(function () {
         $(this).next("span").css('display','inline').fadeOut(1000);
    });
</script>

</body>
</html>

Demo:

Example: To stop people from writing in text input boxes, try:

$("input[type=text]").focus(function(){
  $(this).blur();
});

Example: To focus on a login input box with id 'login' on page startup, try:

$(document).ready(function(){
  $("#login").focus();
});
jqapi-1.7/docs/focus-selector/index.html0000644000175000017500000000553011654657422017354 0ustar metalmetal

:focus selector

focus selector

version added: 1.6jQuery(':focus')

Description: Selects element if it is currently focused.

As with other pseudo-class selectors (those that begin with a ":"), it is recommended to precede :focus with a tag name or some other selector; otherwise, the universal selector ("*") is implied. In other words, the bare $(':focus') is equivalent to $('*:focus'). If you are looking for the currently focused element, $( document.activeElement ) will retrieve it without having to search the whole DOM tree.

Example:

Adds the focused class to whatever element has focus

<!DOCTYPE html>
<html>
<head>
  <style>
.focused {
    background: #abcdef;
}
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div id="content">
    <input tabIndex="1">
    <input tabIndex="2">
    <select tabIndex="3">
        <option>select menu</option>
    </select>
    <div tabIndex="4">
        a div
    </div>
</div>

<script>
$( "#content" ).delegate( "*", "focus blur", function( event ) {
    var elem = $( this );
    setTimeout(function() {
       elem.toggleClass( "focused", elem.is( ":focus" ) );
    }, 0);
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/focusin/index.html0000644000175000017500000000666311654657362016100 0ustar metalmetal

.focusin()

.focusin( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "focusin" event.

  • version added: 1.4.focusin( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.focusin( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

This method is a shortcut for .bind('focusin', handler).

The focusin event is sent to an element when it, or any element inside of it, gains focus. This is distinct from the focus event in that it supports detecting the focus event on parent elements (in other words, it supports event bubbling).

This event will likely be used together with the focusout event.

Example:

Watch for a focus to occur within the paragraphs on the page.

<!DOCTYPE html>
<html>
<head>
  <style>span {display:none;}</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p><input type="text" /> <span>focusin fire</span></p>
<p><input type="password" /> <span>focusin fire</span></p>
<script>
    $("p").focusin(function() {
         $(this).find("span").css('display','inline').fadeOut(1000);
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/focusout/index.html0000644000175000017500000000740211654657364016273 0ustar metalmetal

.focusout()

.focusout( handler(eventObject) ) Returns: jQuery

Description: Bind an event handler to the "focusout" JavaScript event.

  • version added: 1.4.focusout( handler(eventObject) )

    handler(eventObject)A function to execute each time the event is triggered.

  • version added: 1.4.3.focusout( [eventData], handler(eventObject) )

    eventDataA map of data that will be passed to the event handler.

    handler(eventObject)A function to execute each time the event is triggered.

This method is a shortcut for .bind('focusout', handler).

The focusout event is sent to an element when it, or any element inside of it, loses focus. This is distinct from the blur event in that it supports detecting the loss of focus from parent elements (in other words, it supports event bubbling).

This event will likely be used together with the focusin event.

Example:

Watch for a loss of focus to occur inside paragraphs and note the difference between the focusout count and the blur count.

<!DOCTYPE html>
<html>
<head>
  <style>
.inputs { float: left; margin-right: 1em; }
.inputs p { margin-top: 0; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<div class="inputs">
  <p>
    <input type="text" /><br />
    <input type="text" /> 
  </p>
  <p>
    <input type="password" />
  </p>
</div>
<div id="fo">focusout fire</div>
<div id="b">blur fire</div>

<script>
var fo = 0, b = 0;
$("p").focusout(function() {
  fo++;
  $("#fo")
    .text("focusout fired: " + fo + "x");
}).blur(function() {
  b++;
  $("#b")
    .text("blur fired: " + b + "x");
  
});
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/get/index.html0000644000175000017500000001106711654657406015202 0ustar metalmetal

.get()

.get( [index] ) Returns: Element, Array

Description: Retrieve the DOM elements matched by the jQuery object.

  • version added: 1.0.get( [index] )

    indexA zero-based integer indicating which element to retrieve.

The .get() method grants us access to the DOM nodes underlying each jQuery object. Suppose we had a simple unordered list on the page:

<ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
</ul>

Without a parameter, .get() returns all of the elements:

alert($('li').get());

All of the matched DOM nodes are returned by this call, contained in a standard array:

[<li id="foo">, <li id="bar">]

With an index specified, .get() will retrieve a single element:

($('li').get(0));

Since the index is zero-based, the first list item is returned:

<li id="foo">

Each jQuery object also masquerades as an array, so we can use the array dereferencing operator to get at the list item instead:

alert($('li')[0]);

However, this syntax lacks some of the additional capabilities of .get(), such as specifying a negative index:

alert($('li').get(-1));

A negative index is counted from the end of the matched set, so this example will return the last item in the list:

<li id="bar">

Examples:

Example: Selects all divs in the document and returns the DOM Elements as an Array, then uses the built-in reverse-method to reverse that array.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  Reversed - <span></span>

  <div>One</div>
  <div>Two</div>
  <div>Three</div>
<script>

    function disp(divs) {
      var a = [];
      for (var i = 0; i < divs.length; i++) {
        a.push(divs[i].innerHTML);
      }
      $("span").text(a.join(" "));
    }
    
    disp( $("div").get().reverse() );
</script>

</body>
</html>

Demo:

Example: Gives the tag name of the element clicked on.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { color:red; }
  div { background:yellow; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>&nbsp;</span>
  <p>In this paragraph is an <span>important</span> section</p>

  <div><input type="text" /></div>
<script>

    $("*", document.body).click(function (e) {
      e.stopPropagation();
      var domEl = $(this).get(0);
      $("span:first").text("Clicked on - " + domEl.tagName);
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/gt-selector/index.html0000644000175000017500000000735511654657422016656 0ustar metalmetal

:gt() Selector

gt selector

version added: 1.0jQuery(':gt(index)')

  • index
    Zero-based index.

Description: Select all elements at an index greater than index within the matched set.

index-related selectors

The index-related selector expressions (including this "greater than" selector) filter the set of elements that have matched the expressions that precede them. They narrow the set down based on the order of the elements within this matched set. For example, if elements are first selected with a class selector (.myclass) and four elements are returned, these elements are given indices 0 through 3 for the purposes of these selectors.

Note that since JavaScript arrays use 0-based indexing, these selectors reflect that fact. This is why $('.myclass:gt(1)') selects elements after the second element in the document with the class myclass, rather than after the first. In contrast, :nth-child(n) uses 1-based indexing to conform to the CSS specification.

Additional Notes:

  • Because :gt() is a jQuery extension and not part of the CSS specification, queries using :gt() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").slice(index) instead.

Example:

Finds TD #5 and higher. Reminder: the indexing starts at 0.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <table border="1">

    <tr><td>TD #0</td><td>TD #1</td><td>TD #2</td></tr>
    <tr><td>TD #3</td><td>TD #4</td><td>TD #5</td></tr>

    <tr><td>TD #6</td><td>TD #7</td><td>TD #8</td></tr>
  </table>
<script>$("td:gt(4)").css("text-decoration", "line-through");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/has/index.html0000644000175000017500000000670611654657440015200 0ustar metalmetal

.has()

.has( selector ) Returns: jQuery

Description: Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.

  • version added: 1.4.has( selector )

    selectorA string containing a selector expression to match elements against.

  • version added: 1.4.has( contained )

    containedA DOM element to match elements against.

Given a jQuery object that represents a set of DOM elements, the .has() method constructs a new jQuery object from a subset of the matching elements. The supplied selector is tested against the descendants of the matching elements; the element will be included in the result if any of its descendant elements matches the selector.

Consider a page with a nested list as follows:

 <ul>
  <li>list item 1</li>
  <li>list item 2
    <ul>
      <li>list item 2-a</li>
      <li>list item 2-b</li>
    </ul>
  </li>
  <li>list item 3</li>
  <li>list item 4</li>
</ul>

We can apply this method to the set of list items as follows:

$('li').has('ul').css('background-color', 'red');

The result of this call is a red background for item 2, as it is the only <li> that has a <ul> among its descendants.

Example:

Check if an element is inside another.

<!DOCTYPE html>
<html>
<head>
  <style>
  .full { border: 1px solid red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<ul><li>Does the UL contain an LI?</li></ul>

<script>
  $("ul").append("<li>" + ($("ul").has("li").length ? "Yes" : "No") + "</li>");
  $("ul").has("li").addClass("full");
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/has-attribute-selector/index.html0000644000175000017500000000405711654657424021016 0ustar metalmetal

Has Attribute Selector [name]

attributeHas selector

version added: 1.0jQuery('[attribute]')

  • attribute
    An attribute name.

Description: Selects elements that have the specified attribute, with any value.

Example:

Bind a single click that adds the div id to its text.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div>no id</div>
  <div id="hey">with id</div>

  <div id="there">has an id</div>
  <div>nope</div>
<script>

    $('div[id]').one('click', function(){
      var idString = $(this).text() + ' = ' + $(this).attr('id');
      $(this).text(idString);
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/has-selector/index.html0000644000175000017500000000564411654657424017020 0ustar metalmetal

:has() Selector

has selector

version added: 1.1.4jQuery(':has(selector)')

  • selector
    Any selector.

Description: Selects elements which contain at least one element that matches the specified selector.

The expression $('div:has(p)') matches a <div> if a <p> exists anywhere among its descendants, not just as a direct child.

Additional Notes:

  • Because :has() is a jQuery extension and not part of the CSS specification, queries using :has() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").has(selector/DOMElement) instead.

Example:

Adds the class "test" to all divs that have a paragraph inside of them.

<!DOCTYPE html>
<html>
<head>
  <style>
  .test{ border: 3px inset red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div><p>Hello in a paragraph</p></div>

  <div>Hello again! (with no paragraph)</div>
<script>$("div:has(p)").addClass("test");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/hasClass/index.html0000644000175000017500000000675511654657324016173 0ustar metalmetal

.hasClass()

.hasClass( className ) Returns: Boolean

Description: Determine whether any of the matched elements are assigned the given class.

  • version added: 1.2.hasClass( className )

    classNameThe class name to search for.

Elements may have more than one class assigned to them. In HTML, this is represented by separating the class names with a space:

<div id="mydiv" class="foo bar"></div>

The .hasClass() method will return true if the class is assigned to an element, even if other classes also are. For example, given the HTML above, the following will return true:

$('#mydiv').hasClass('foo')

As would:

$('#mydiv').hasClass('bar')

While this would return false:

$('#mydiv').hasClass('quux')

Example:

Looks for the paragraph that contains 'selected' as a class.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin: 8px; font-size:16px; }
  .selected { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
  <p>This paragraph is black and is the first paragraph.</p>
  <p class="selected">This paragraph is red and is the second paragraph.</p>

  <div id="result1">First paragraph has selected class: </div>
  <div id="result2">Second paragraph has selected class: </div>
  <div id="result3">At least one paragraph has selected class: </div>
<script>
$("div#result1").append($("p:first").hasClass("selected").toString());
$("div#result2").append($("p:last").hasClass("selected").toString());
$("div#result3").append($("p").hasClass("selected").toString());
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/header-selector/index.html0000644000175000017500000000535511654657424017474 0ustar metalmetal

:header Selector

header selector

version added: 1.2jQuery(':header')

Description: Selects all elements that are headers, like h1, h2, h3 and so on.

Additional Notes:

  • Because :header is a jQuery extension and not part of the CSS specification, queries using :header cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :header to select elements, first select the elements using a pure CSS selector, then use .filter(":header").

Example:

Adds a background and text color to all the headers on the page.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { font-size: 10px; font-family: Arial; } 
  h1, h2 { margin: 3px 0; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <h1>Header 1</h1>

  <p>Contents 1</p>
  <h2>Header 2</h2>
  <p>Contents 2</p>
<script>$(":header").css({ background:'#CCC', color:'blue' });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/height/index.html0000644000175000017500000001615611654657330015673 0ustar metalmetal

.height()

Contents:

.height() Returns: Integer

Description: Get the current computed height for the first element in the set of matched elements.

  • version added: 1.0.height()

The difference between .css('height') and .height() is that the latter returns a unit-less pixel value (for example, 400) while the former returns a value with units intact (for example, 400px). The .height() method is recommended when an element's height needs to be used in a mathematical calculation.

This method is also able to find the height of the window and document.

$(window).height();   // returns height of browser viewport
$(document).height(); // returns height of HTML document

Note that .height() will always return the content height, regardless of the value of the CSS box-sizing property.

Example:

Show various heights. Note the values are from the iframe so might be smaller than you expected. The yellow highlight shows the iframe body.

<!DOCTYPE html>
<html>
<head>
  <style>
  body { background:yellow; }
  button { font-size:12px; margin:2px; }
  p { width:150px; border:1px red solid; }
  div { color:red; font-weight:bold; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="getp">Get Paragraph Height</button>
  <button id="getd">Get Document Height</button>
  <button id="getw">Get Window Height</button>

  <div>&nbsp;</div>
  <p>
    Sample paragraph to test height
  </p>
<script>
    function showHeight(ele, h) {
      $("div").text("The height for the " + ele + 
                    " is " + h + "px.");
    }
    $("#getp").click(function () { 
      showHeight("paragraph", $("p").height()); 
    });
    $("#getd").click(function () { 
      showHeight("document", $(document).height()); 
    });
    $("#getw").click(function () { 
      showHeight("window", $(window).height()); 
    });

</script>

</body>
</html>

Demo:

.height( value ) Returns: jQuery

Description: Set the CSS height of every matched element.

  • version added: 1.0.height( value )

    valueAn integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).

  • version added: 1.4.1.height( function(index, height) )

    function(index, height)A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.

When calling .height(value), the value can be either a string (number and unit) or a number. If only a number is provided for the value, jQuery assumes a pixel unit. If a string is provided, however, a valid CSS measurement must be provided for the height (such as 100px, 50%, or auto). Note that in modern browsers, the CSS height property does not include padding, border, or margin.

If no explicit unit was specified (like 'em' or '%') then "px" is concatenated to the value.

Note that .height(value) sets the height of the box in accordance with the CSS box-sizing property. Changing this property to border-box will cause this function to change the outerHeight of the box instead of the content height.

Example:

To set the height of each div on click to 30px plus a color change.

<!DOCTYPE html>
<html>
<head>
  <style>div { width:50px; height:70px; float:left; margin:5px;
        background:rgb(255,140,0); cursor:pointer; }  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div></div>

  <div></div>
  <div></div>
  <div></div>
<script>$("div").one('click', function () {
      $(this).height(30)
             .css({cursor:"auto", backgroundColor:"green"});
    });</script>

</body>
</html>

Demo:

jqapi-1.7/docs/hidden-selector/index.html0000644000175000017500000001071011654657424017466 0ustar metalmetal

:hidden Selector

hidden selector

version added: 1.0jQuery(':hidden')

Description: Selects all elements that are hidden.

Elements can be considered hidden for several reasons:

  • They have a CSS display value of none.
  • They are form elements with type="hidden".
  • Their width and height are explicitly set to 0.
  • An ancestor element is hidden, so the element is not shown on the page.

Elements with visibility: hidden or opacity: 0 are considered to be visible, since they still consume space in the layout. During animations that hide an element, the element is considered to be visible until the end of the animation. During animations to show an element, the element is considered to be visible at the start of the animation.

How :hidden is determined was changed in jQuery 1.3.2. An element is assumed to be hidden if it or any of its parents consumes no space in the document. CSS visibility isn't taken into account (therefore $(elem).css('visibility','hidden').is(':hidden') == false). The release notes outline the changes in more detail.

Additional Notes:

  • Because :hidden is a jQuery extension and not part of the CSS specification, queries using :hidden cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :hidden to select elements, first select the elements using a pure CSS selector, then use .filter(":hidden").

Example:

Shows all hidden divs and counts hidden inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:70px; height:40px; background:#ee77ff; margin:5px; float:left; }
  span { display:block; clear:left; color:red; }
  .starthidden { display:none; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span></span>
  <div></div>
  <div style="display:none;">Hider!</div>
  <div></div>

  <div class="starthidden">Hider!</div>
  <div></div>
  <form>
    <input type="hidden" />

    <input type="hidden" />
    <input type="hidden" />
  </form>
  <span>

  </span>
<script>
// in some browsers :hidden includes head, title, script, etc...
var hiddenEls = $("body").find(":hidden").not("script");

$("span:first").text("Found " + hiddenEls.length + " hidden elements total.");
$("div:hidden").show(3000);
$("span:last").text("Found " + $("input:hidden").length + " hidden inputs.");
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/hide/index.html0000644000175000017500000002150411654657350015327 0ustar metalmetal

.hide()

.hide( ) Returns: jQuery

Description: Hide the matched elements.

  • version added: 1.0.hide()

  • version added: 1.0.hide( duration [, callback] )

    durationA string or number determining how long the animation will run.

    callbackA function to call once the animation is complete.

  • version added: 1.4.3.hide( [duration] [, easing] [, callback] )

    durationA string or number determining how long the animation will run.

    easingA string indicating which easing function to use for the transition.

    callbackA function to call once the animation is complete.

With no parameters, the .hide() method is the simplest way to hide an element:

$('.target').hide();

The matched elements will be hidden immediately, with no animation. This is roughly equivalent to calling .css('display', 'none'), except that the value of the display property is saved in jQuery's data cache so that display can later be restored to its initial value. If an element has a display value of inline, then is hidden and shown, it will once again be displayed inline.

When a duration is provided, .hide() becomes an animation method. The .hide() method animates the width, height, and opacity of the matched elements simultaneously. When these properties reach 0, the display style property is set to none to ensure that the element no longer affects the layout of the page.

Durations are given in milliseconds; higher values indicate slower animations, not faster ones. The strings 'fast' and 'slow' can be supplied to indicate durations of 200 and 600 milliseconds, respectively.

As of jQuery 1.4.3, an optional string naming an easing function may be used. Easing functions specify the speed at which the animation progresses at different points within the animation. The only easing implementations in the jQuery library are the default, called swing, and one that progresses at a constant pace, called linear. More easing functions are available with the use of plug-ins, most notably the jQuery UI suite.

If supplied, the callback is fired once the animation is complete. This can be useful for stringing different animations together in sequence. The callback is not sent any arguments, but this is set to the DOM element being animated. If multiple elements are animated, it is important to note that the callback is executed once per matched element, not once for the animation as a whole.

We can animate any element, such as a simple image:

<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />
With the element initially shown, we can hide it slowly:
$('#clickme').click(function() {
  $('#book').hide('slow', function() {
    alert('Animation complete.');
  });
});

Additional Notes:

  • All jQuery effects, including .hide(), can be turned off globally by setting jQuery.fx.off = true, which effectively sets the duration to 0. For more information, see jQuery.fx.off.

Examples:

Example: Hides all paragraphs then the link on click.

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p>
  <a href="#">Click to hide me too</a>
  <p>Here is another paragraph</p>
<script>

    $("p").hide();
    $("a").click(function ( event ) {
      event.preventDefault();
      $(this).hide();
    });
</script>

</body>
</html>

Demo:

Example: Animates all shown paragraphs to hide slowly, completing the animation within 600 milliseconds.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { background:#dad; font-weight:bold; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button>Hide 'em</button>

  <p>Hiya</p>
  <p>Such interesting text, eh?</p>
<script>
    $("button").click(function () {
      $("p").hide("slow");
    });    
</script>

</body>
</html>

Demo:

Example: Animates all spans (words in this case) to hide fastly, completing each animation within 200 milliseconds. Once each animation is done, it starts the next one.

<!DOCTYPE html>
<html>
<head>
  <style>
  span { background:#def3ca; padding:3px; float:left; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <button id="hidr">Hide</button>
  <button id="showr">Show</button>
  <div>

    <span>Once</span> <span>upon</span> <span>a</span> 
    <span>time</span> <span>there</span> <span>were</span> 
    <span>three</span> <span>programmers...</span>

  </div>
<script>
    $("#hidr").click(function () {
      $("span:last-child").hide("fast", function () {
        // use callee so don't have to name the function
        $(this).prev().hide("fast", arguments.callee); 
      });
    });
    $("#showr").click(function () {
      $("span").show(2000);
    });

</script>

</body>
</html>

Demo:

Example: Hides the divs when clicked over 2 seconds, then removes the div element when its hidden. Try clicking on more than one box at a time.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { background:#ece023; width:30px; 
        height:40px; margin:2px; float:left; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
<script>
    for (var i = 0; i < 5; i++) {
      $("<div>").appendTo(document.body);
    }
    $("div").click(function () {
      $(this).hide(2000, function () {
        $(this).remove();
      });
    });
</script>

</body>
</html>

Demo:

jqapi-1.7/docs/hover/index.html0000644000175000017500000001547211654657364015555 0ustar metalmetal

.hover()

Contents:

.hover( handlerIn(eventObject), handlerOut(eventObject) ) Returns: jQuery

Description: Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.

  • version added: 1.0.hover( handlerIn(eventObject), handlerOut(eventObject) )

    handlerIn(eventObject)A function to execute when the mouse pointer enters the element.

    handlerOut(eventObject)A function to execute when the mouse pointer leaves the element.

The .hover() method binds handlers for both mouseenter and mouseleave events. You can use it to simply apply behavior to an element during the time the mouse is within the element.

Calling $(selector).hover(handlerIn, handlerOut) is shorthand for:

$(selector).mouseenter(handlerIn).mouseleave(handlerOut);

See the discussions for .mouseenter() and .mouseleave() for more details.

Examples:

Example: To add a special style to list items that are being hovered over, try:

<!DOCTYPE html>
<html>
<head>
  <style>
  ul { margin-left:20px; color:blue; }
  li { cursor:default; }
  span { color:red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li>Milk</li>
    <li>Bread</li>
    <li class='fade'>Chips</li>

    <li class='fade'>Socks</li>
  </ul>
<script>
$("li").hover(
  function () {
    $(this).append($("<span> ***</span>"));
  }, 
  function () {
    $(this).find("span:last").remove();
  }
);



//li with fade class
$("li.fade").hover(function(){$(this).fadeOut(100);$(this).fadeIn(500);});

</script>

</body>
</html>

Demo:

Example: To add a special style to table cells that are being hovered over, try:

$("td").hover(
  function () {
    $(this).addClass("hover");
  },
  function () {
    $(this).removeClass("hover");
  }
);

Example: To unbind the above example use:

$("td").unbind('mouseenter mouseleave');

.hover( handlerInOut(eventObject) ) Returns: jQuery

Description: Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements.

  • version added: 1.4.hover( handlerInOut(eventObject) )

    handlerInOut(eventObject)A function to execute when the mouse pointer enters or leaves the element.

The .hover() method, when passed a single function, will execute that handler for both mouseenter and mouseleave events. This allows the user to use jQuery's various toggle methods within the handler or to respond differently within the handler depending on the event.type.

Calling $(selector).hover(handlerInOut) is shorthand for:

$(selector).bind("mouseenter mouseleave", handlerInOut);

See the discussions for .mouseenter() and .mouseleave() for more details.

Example:

Slide the next sibling LI up or down on hover, and toggle a class.

<!DOCTYPE html>
<html>
<head>
  <style>
  ul { margin-left:20px; color:blue; }
  li { cursor:default; }
  li.active { background:black;color:white; }
  span { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
    <li>Milk</li>
    <li>White</li>
    <li>Carrots</li>
    <li>Orange</li>
    <li>Broccoli</li>
    <li>Green</li>
  </ul>
<script>
$("li")
.filter(":odd")
.hide()
 .end()
.filter(":even")
.hover(
  function () {
    $(this).toggleClass("active")
      .next().stop(true, true).slideToggle();
  }
);


</script>

</body>
</html>

Demo:

jqapi-1.7/docs/html/index.html0000644000175000017500000002100011654657324015352 0ustar metalmetal

.html()

Contents:

.html() Returns: String

Description: Get the HTML contents of the first element in the set of matched elements.

  • version added: 1.0.html()

This method is not available on XML documents.

In an HTML document, .html() can be used to get the contents of any element. If the selector expression matches more than one element, only the first match will have its HTML content returned. Consider this code:

$('div.demo-container').html();

In order for the following <div>'s content to be retrieved, it would have to be the first one with class="demo-container" in the document:

<div class="demo-container">
  <div class="demo-box">Demonstration Box</div>
</div>

The result would look like this:

<div class="demo-box">Demonstration Box</div>

This method uses the browser's innerHTML property. Some browsers may not return HTML that exactly replicates the HTML source in an original document. For example, Internet Explorer sometimes leaves off the quotes around attribute values if they contain only alphanumeric characters.

Example:

Click a paragraph to convert it from html to text.

<!DOCTYPE html>
<html>
<head>
  <style>
  p { margin:8px; font-size:20px; color:blue; 
      cursor:pointer; }
  b { text-decoration:underline; }
  button { cursor:pointer; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>

    <b>Click</b> to change the <span id="tag">html</span>
  </p>
  <p>

    to a <span id="text">text</span> node.
  </p>
  <p>
    This <button name="nada">button</button> does nothing.
  </p>
<script>
    $("p").click(function () {
      var htmlStr = $(this).html();
      $(this).text(htmlStr);
    });
</script>

</body>
</html>

Demo:

.html( htmlString ) Returns: jQuery

Description: Set the HTML contents of each element in the set of matched elements.

  • version added: 1.0.html( htmlString )

    htmlStringA string of HTML to set as the content of each matched element.

  • version added: 1.4.html( function(index, oldhtml) )

    function(index, oldhtml)A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.

The .html() method is not available in XML documents.

When .html() is used to set an element's content, any content that was in that element is completely replaced by the new content. Consider the following HTML:

<div class="demo-container">
  <div class="demo-box">Demonstration Box</div>
</div>

The content of <div class="demo-container"> can be set like this:

$('div.demo-container')
  .html('<p>All new content. <em>You bet!</em></p>');

That line of code will replace everything inside <div class="demo-container">:

<div class="demo-container">
  <p>All new content. <em>You bet!</em></p>
</div>

As of jQuery 1.4, the .html() method allows the HTML content to be set by passing in a function.

$('div.demo-container').html(function() {
  var emph = '<em>' + $('p').length + ' paragraphs!</em>';
  return '<p>All new content for ' + emph + '</p>';
});

Given a document with six paragraphs, this example will set the HTML of <div class="demo-container"> to <p>All new content for <em>6 paragraphs!</em></p>.

This method uses the browser's innerHTML property. Some browsers may not generate a DOM that exactly replicates the HTML source provided. For example, Internet Explorer prior to version 8 will convert all href properties on links to absolute URLs, and Internet Explorer prior to version 9 will not correctly handle HTML5 elements without the addition of a separate compatibility layer.

Examples:

Example: Add some html to each div.

<!DOCTYPE html>
<html>
<head>
  <style>

  .red { color:red; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>Hello</span>
  <div></div>
  <div></div>
  <div></div>
<script>$("div").html("<span class='red'>Hello <b>Again</b></span>");</script>

</body>
</html>

Demo:

Example: Add some html to each div then immediately do further manipulations to the inserted html.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { color:blue; font-size:18px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
  <div></div>
  <div></div>
<script>

    $("div").html("<b>Wow!</b> Such excitement...");
    $("div b").append(document.createTextNode("!!!"))
              .css("color", "red");

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/id-selector/index.html0000644000175000017500000001006311654657424016630 0ustar metalmetal

ID Selector (“#id”)

id selector

version added: 1.0jQuery('#id')

  • id
    An ID to search for, specified via the id attribute of an element.

Description: Selects a single element with the given id attribute.

For id selectors, jQuery uses the JavaScript function document.getElementById(), which is extremely efficient. When another selector is attached to the id selector, such as h2#pageTitle, jQuery performs an additional check before identifying the element as a match.

As always, remember that as a developer, your time is typically the most valuable resource. Do not focus on optimization of selector speed unless it is clear that performance needs to be improved.

Each id value must be used only once within a document. If more than one element has been assigned the same ID, queries that use that ID will only select the first matched element in the DOM. This behavior should not be relied on, however; a document with more than one element using the same ID is invalid.

If the id contains characters like periods or colons you have to escape those characters with backslashes.

Examples:

Example: Finds the element with the id "myDiv".

<!DOCTYPE html>
<html>
<head>
  <style>
  div {
    width: 90px;
    height: 90px;
    float:left;
    padding: 5px;
    margin: 5px;
    background-color: #EEEEEE;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="notMe"><p>id="notMe"</p></div>

  <div id="myDiv">id="myDiv"</div>
<script>$("#myDiv").css("border","3px solid red");</script>

</body>
</html>

Demo:

Example: Finds the element with the id "myID.entry[1]". See how certain characters must be escaped with backslashes.

<!DOCTYPE html>
<html>
<head>
  <style>
  div {
    width: 300px;
    float:left;
    padding: 2px;
    margin: 3px;
    background-color: #EEEEEE;
  }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="myID.entry[0]">id="myID.entry[0]"</div>

  <div id="myID.entry[1]">id="myID.entry[1]"</div>
  <div id="myID.entry[2]">id="myID.entry[2]"</div>
<script>$("#myID\\.entry\\[1\\]").css("border","3px solid red");</script>

</body>
</html>

Demo:

jqapi-1.7/docs/image-selector/index.html0000644000175000017500000000627311654657424017326 0ustar metalmetal

:image Selector

image selector

version added: 1.0jQuery(':image')

Description: Selects all elements of type image.

:image is equivalent to [type="image"]

Additional Notes:

  • Because :image is a jQuery extension and not part of the CSS specification, queries using :image cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use [type="image"] instead.

Example:

Finds all image inputs.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:45px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option<option/></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div>
  </div>
<script>
    var input = $("input:image").css({background:"yellow", border:"3px red solid"});
    $("div").text("For this type jQuery found " + input.length + ".")
            .css("color", "red");
    $("form").submit(function () { return false; }); // so it won't submit

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/index/index.html0000644000175000017500000002301311654657406015524 0ustar metalmetal

.index()

.index( ) Returns: Number

Description: Search for a given element from among the matched elements.

  • version added: 1.4.index()

  • version added: 1.4.index( selector )

    selectorA selector representing a jQuery collection in which to look for an element.

  • version added: 1.0.index( element )

    elementThe DOM element or first element within the jQuery object to look for.

Return Values

If no argument is passed to the .index() method, the return value is an integer indicating the position of the first element within the jQuery object relative to its sibling elements.

If .index() is called on a collection of elements and a DOM element or jQuery object is passed in, .index() returns an integer indicating the position of the passed element relative to the original collection.

If a selector string is passed as an argument, .index() returns an integer indicating the position of the original element relative to the elements matched by the selector. If the element is not found, .index() will return -1.

Detail

The complementary operation to .get(), which accepts an index and returns a DOM node, .index() can take a DOM node and returns an index. Suppose we have a simple unordered list on the page:

<ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz</li>
</ul>

If we retrieve one of the three list items (for example, through a DOM function or as the context to an event handler), .index() can search for this list item within the set of matched elements:

var listItem = document.getElementById('bar');
alert('Index: ' + $('li').index(listItem));
We get back the zero-based position of the list item:

Index: 1

Similarly, if we retrieve a jQuery object consisting of one of the three list items, .index() will search for that list item:

var listItem = $('#bar');
alert('Index: ' + $('li').index(listItem));

We get back the zero-based position of the list item:

Index: 1

Note that if the jQuery collection used as the .index() method's argument contains more than one element, the first element within the matched set of elements will be used.

var listItems = $('li:gt(0)');
alert('Index: ' + $('li').index(listItems));

We get back the zero-based position of the first list item within the matched set:

Index: 1

If we use a string as the .index() method's argument, it is interpreted as a jQuery selector string. The first element among the object's matched elements which also matches this selector is located.

var listItem = $('#bar');
alert('Index: ' + listItem.index('li'));

We get back the zero-based position of the list item:

Index: 1

If we omit the argument, .index() will return the position of the first element within the set of matched elements in relation to its siblings:

alert('Index: ' + $('#bar').index();

Again, we get back the zero-based position of the list item:

Index: 1

Examples:

Example: On click, returns the index (based zero) of that div in the page.

<!DOCTYPE html>
<html>
<head>
  <style>
div { background:yellow; margin:5px; }
span { color:red; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <span>Click a div!</span>
<div>First div</div>
<div>Second div</div>
<div>Third div</div>
<script>
$("div").click(function () {
  // this is the dom element clicked
  var index = $("div").index(this);
  $("span").text("That was div index #" + index);
});
</script>

</body>
</html>

Demo:

Example: Returns the index for the element with ID bar.

<!DOCTYPE html>
<html>
<head>
  <style>div { font-weight: bold; color: #090; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz</li>
</ul>
<div></div>
<script>var listItem = $('#bar');
    $('div').html( 'Index: ' + $('li').index(listItem) );</script>

</body>
</html>

Demo:

Example: Returns the index for the first item in the jQuery collection.

<!DOCTYPE html>
<html>
<head>
  <style>div { font-weight: bold; color: #090; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz</li>
</ul>
<div></div>
<script>var listItems = $('li:gt(0)');
$('div').html( 'Index: ' + $('li').index(listItems) );
</script>

</body>
</html>

Demo:

Example: Returns the index for the element with ID bar in relation to all <li> elements.

<!DOCTYPE html>
<html>
<head>
  <style>div { font-weight: bold; color: #090; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz</li>
</ul>
<div></div>
<script>$('div').html('Index: ' +  $('#bar').index('li') );</script>

</body>
</html>

Demo:

Example: Returns the index for the element with ID bar in relation to its siblings.

<!DOCTYPE html>
<html>
<head>
  <style>div { font-weight: bold; color: #090; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz</li>
</ul>
<div></div>
<script>var barIndex = $('#bar').index();
$('div').html( 'Index: ' +  barIndex );</script>

</body>
</html>

Demo:

Example: Returns -1, as there is no element with ID foobar.

<!DOCTYPE html>
<html>
<head>
  <style>div { font-weight: bold; color: #090; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz</li>
</ul>
<div></div>
<script>var foobar = $("li").index( $('#foobar') );
$('div').html('Index: ' + foobar);</script>

</body>
</html>

Demo:

jqapi-1.7/docs/innerHeight/index.html0000644000175000017500000000521511654657330016661 0ustar metalmetal

.innerHeight()

.innerHeight() Returns: Integer

Description: Get the current computed height for the first element in the set of matched elements, including padding but not border.

  • version added: 1.2.6.innerHeight()

This method returns the height of the element, including top and bottom padding, in pixels.

This method is not applicable to window and document objects; for these, use .height() instead.

Example:

Get the innerHeight of a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>p { margin:10px;padding:5px;border:2px solid #666; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p></p>
<script>var p = $("p:first");
$("p:last").text( "innerHeight:" + p.innerHeight() );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/innerWidth/index.html0000644000175000017500000000520211654657332016526 0ustar metalmetal

.innerWidth()

.innerWidth() Returns: Integer

Description: Get the current computed width for the first element in the set of matched elements, including padding but not border.

  • version added: 1.2.6.innerWidth()

This method returns the width of the element, including left and right padding, in pixels.

This method is not applicable to window and document objects; for these, use .width() instead.

Example:

Get the innerWidth of a paragraph.

<!DOCTYPE html>
<html>
<head>
  <style>p { margin:10px;padding:5px;border:2px solid #666; } </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p>Hello</p><p></p>
<script>var p = $("p:first");
$("p:last").text( "innerWidth:" + p.innerWidth() );</script>

</body>
</html>

Demo:

jqapi-1.7/docs/input-selector/index.html0000644000175000017500000000664411654657424017405 0ustar metalmetal

:input Selector

input selector

version added: 1.0jQuery(':input')

Description: Selects all input, textarea, select and button elements.

The :input selector basically selects all form controls.

Additional Notes:

  • Because :input is a jQuery extension and not part of the CSS specification, queries using :input cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :input to select elements, first select the elements using a pure CSS selector, then use .filter(":input").

Example:

Finds all input elements.

<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:25px; }
  </style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form>
    <input type="button" value="Input Button"/>
    <input type="checkbox" />

    <input type="file" />
    <input type="hidden" />
    <input type="image" />

    <input type="password" />
    <input type="radio" />
    <input type="reset" />

    <input type="submit" />
    <input type="text" />
    <select><option>Option</option></select>

    <textarea></textarea>
    <button>Button</button>
  </form>
  <div id="messages">
  </div>
<script>

    var allInputs = $(":input");
    var formChildren = $("form > *");
    $("#messages").text("Found " + allInputs.length + " inputs and the form has " +
                             formChildren.length + " children.");
            
    // so it won't submit
    $("form").submit(function () { return false; }); 

</script>

</body>
</html>

Demo:

jqapi-1.7/docs/insertAfter/index.html0000644000175000017500000001010511654657402016675 0ustar metalmetal

.insertAfter()

.insertAfter( target ) Returns: jQuery

Description: Insert every element in the set of matched elements after the target.

  • version added: 1.0.insertAfter( target )

    targetA selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.

The .after() and .insertAfter() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .after(), the selector expression preceding the method is the container after which the content is inserted. With .insertAfter(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted after the target container.

Consider the following HTML:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

We can create content and insert it after several elements at once:

$('<p>Test</p>').insertAfter('.inner');

Each inner <div> element gets this new content:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <p>Test</p>
  <div class="inner">Goodbye</div>
  <p>Test</p>
</div>

We can also select an element on the page and insert it after another:

$('h2').insertAfter($('.container'));

If an element selected this way is inserted elsewhere, it will be moved after the target (not cloned):

<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>
<h2>Greetings</h2>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first, and that new set (the original element plus clones) is returned.

Example:

Inserts all paragraphs after an element with id of "foo". Same as $("#foo").after("p")

<!DOCTYPE html>
<html>
<head>
  <style>#foo { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <p> is what I said... </p><div id="foo">FOO!</div>
<script>$("p").insertAfter("#foo"); // check after() examples</script>

</body>
</html>

Demo:

jqapi-1.7/docs/insertBefore/index.html0000644000175000017500000001013611654657402017042 0ustar metalmetal

.insertBefore()

.insertBefore( target ) Returns: jQuery

Description: Insert every element in the set of matched elements before the target.

  • version added: 1.0.insertBefore( target )

    targetA selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.

The .before() and .insertBefore() methods perform the same task. The major difference is in the syntax-specifically, in the placement of the content and target. With .before(), the selector expression preceding the method is the container before which the content is inserted. With .insertBefore(), on the other hand, the content precedes the method, either as a selector expression or as markup created on the fly, and it is inserted before the target container.

Consider the following HTML:

<div class="container">
  <h2>Greetings</h2>
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

We can create content and insert it before several elements at once:

$('<p>Test</p>').insertBefore('.inner');

Each inner <div> element gets this new content:

<div class="container">
  <h2>Greetings</h2>
  <p>Test</p>
  <div class="inner">Hello</div>
  <p>Test</p>
  <div class="inner">Goodbye</div>
</div>

We can also select an element on the page and insert it before another:

$('h2').insertBefore($('.container'));

If an element selected this way is inserted elsewhere, it will be moved before the target (not cloned):

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>

If there is more than one target element, however, cloned copies of the inserted element will be created for each target after the first, and that new set (the original element plus clones) is returned.

Example:

Inserts all paragraphs before an element with id of "foo". Same as $("#foo").before("p")

<!DOCTYPE html>
<html>
<head>
  <style>#foo { background:yellow; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div id="foo">FOO!</div><p>I would like to say: </p>
<script>$("p").insertBefore("#foo"); // check before() examples</script>

</body>
</html>

Demo:

jqapi-1.7/docs/is/index.html0000644000175000017500000002606611654657440015041 0ustar metalmetal

.is()

.is( selector ) Returns: Boolean

Description: Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.

  • version added: 1.0.is( selector )

    selectorA string containing a selector expression to match elements against.

  • version added: 1.6.is( function(index) )

    function(index)A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.

  • version added: 1.6.is( jQuery object )

    jQuery objectAn existing jQuery object to match the current set of elements against.

  • version added: 1.6.is( element )

    elementAn element to match the current set of elements against.

Unlike other filtering methods, .is() does not create a new jQuery object. Instead, it allows you to test the contents of a jQuery object without modification. This is often useful inside callbacks, such as event handlers.

Suppose you have a list, with two of its items containing a child element:

<ul>
  <li>list <strong>item 1</strong></li>
  <li><span>list item 2</span></li>
  <li>list item 3</li>
</ul>

You can attach a click handler to the <ul> element, and then limit the code to be triggered only when a list item itself, not one of its children, is clicked:

$("ul").click(function(event) {
  var $target = $(event.target);
  if ( $target.is("li") ) {
    $target.css("background-color", "red");
  }
});

Now, when the user clicks on the word "list" in the first item or anywhere in the third item, the clicked list item will be given a red background. However, when the user clicks on item 1 in the first item or anywhere in the second item, nothing will occur, because in those cases the target of the event would be <strong> or <span>, respectively.

Prior to jQuery 1.7, in selector strings with positional selectors such as :first, :gt(), or :even, the positional filtering is done against the jQuery object passed to .is(), not against the containing document. So for the HTML shown above, an expression such as $("li:first").is("li:last") returns true, but $("li:first-child").is("li:last-child") returns false. In addition, a bug in Sizzle prevented many positional selectors from working properly. These two factors made positional selectors almost unusable in filters.

Starting with jQuery 1.7, selector strings with positional selectors apply the selector against the document, and then determine whether the first element of the current jQuery set matches any of the resulting elements. So for the HTML shown above, an expression such as $("li:first").is("li:last") returns false. Note that since positional selectors are jQuery additions and not W3C standard, we recommend using the W3C selectors whenever feasible.

Using a Function

The second form of this method evaluates expressions related to elements based on a function rather than a selector. For each element, if the function returns true, .is() returns true as well. For example, given a somewhat more involved HTML snippet:

<ul>
  <li><strong>list</strong> item 1 - one strong tag</li>
  <li><strong>list</strong> item <strong>2</strong> -
    two <span>strong tags</span></li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
</ul>

You can attach a click handler to every <li> that evaluates the number of <strong> elements within the clicked <li> at that time like so:

$("li").click(function() {
  var $li = $(this),
    isWithTwo = $li.is(function() {
      return $('strong', this).length === 2;
    });
  if ( isWithTwo ) {
    $li.css("background-color", "green");
  } else {
    $li.css("background-color", "red");
  }
});

Examples:

Example: Shows a few ways is() can be used inside an event handler.

<!DOCTYPE html>
<html>
<head>
  <style>
  div { width:60px; height:60px; margin:5px; float:left;
      border:4px outset; background:green; text-align:center; 
      font-weight:bolder; cursor:pointer; }
  .blue { background:blue; }
  .red { background:red; }
  span { color:white; font-size:16px; }
  p { color:red; font-weight:bolder; background:yellow; 
      margin:3px; clear:left; display:none; }
</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <div></div>
<div class="blue"></div>
<div></div>
<div class="red"></div>

<div><br/><span>Peter</span></div>
<div class="blue"></div>
<p>&nbsp;</p>
<script>
  $("div").one('click', function () {
    if ($(this).is(":first-child")) {
      $("p").text("It's the first div.");
    } else if ($(this).is(".blue,.red")) {
      $("p").text("It's a blue or red div.");
    } else if ($(this).is(":contains('Peter')")) {
      $("p").text("It's Peter!");
    } else {
      $("p").html("It's nothing <em>special</em>.");
    }
    $("p").hide().slideDown("slow");
    $(this).css({"border-style": "inset", cursor:"default"});
  });
</script>

</body>
</html>

Demo:

Example: Returns true, because the parent of the input is a form element.

<!DOCTYPE html>
<html>
<head>
  <style>div { color:red; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form><input type="checkbox" /></form>
<div></div>
<script>
  var isFormParent = $("input[type='checkbox']").parent().is("form");
  $("div").text("isFormParent = " + isFormParent);
</script>

</body>
</html>

Demo:

Example: Returns false, because the parent of the input is a p element.

<!DOCTYPE html>
<html>
<head>
  <style>div { color:red; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  <form><p><input type="checkbox" /></p></form>
  <div></div>
<script>
  var isFormParent = $("input[type='checkbox']").parent().is("form");
  $("div").text("isFormParent = " + isFormParent);
</script>

</body>
</html>

Demo:

Example: Checks against an existing collection of alternating list elements. Blue, alternating list elements slide up while others turn red.

<!DOCTYPE html>
<html>
<head>
  <style>li { cursor:pointer; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<ul id="browsers">
  <li>Chrome</li>
  <li>Safari</li>
  <li>Firefox</li>
  <li>Opera</li>
</ul>
<script>
  var $alt = $("#browsers li:nth-child(2n)").css("background", "#00FFFF");
  $('li').click(function() {
    var $li = $(this);
    if ( $li.is( $alt ) ) {
      $li.slideUp();
    } else {
      $li.css("background", "red");
    }
  });
</script>

</body>
</html>

Demo:

Example: An alternate way to achieve the above example using an element rather than a jQuery object. Checks against an existing collection of alternating list elements. Blue, alternating list elements slide up while others turn red.

<!DOCTYPE html>
<html>
<head>
  <style>li { cursor:pointer; }</style>
  <script src="http://code.jquery.com/jquery-1.7rc2.js"></script>
</head>
<body>
  
<ul id="browsers">
  <li>Chrome</li>
  <li>Safari</li>
  <li>Firefox</li>
  <li>Opera</li>
</ul>
<script>
  var $alt = $("#browsers li:nth-child(2n)").css("background", "#00FFFF");
  $('li').click(function() {
    if ( $alt.is( this ) ) {
      $(this).slideUp();
    } else {
      $(this).css("background", "red");
    }
  });
</script>

</body>
</html>

Demo:

jqapi-1.7/css/main.css0000644000175000017500000001745211460407074013715 0ustar metalmetalhtml { font-size: 16px; } body { font-size: 62.5%; font-family: "Helvetica Neue", Arial, sans-serif; color: #333333; background: white; overflow: hidden; } #loader { background: url(../images/loader.gif) no-repeat center center; width: 100%; height: 100%; min-height: 300px; } #feedback-overlay { background: rgba(0, 0, 0, 0.6); position: fixed; top: 0; left: 0; display: none; z-index: 13; } #feedback-overlay a { color: white; font-size: 1.4em; text-decoration: none; position: absolute; top: 30px; } #feedback-overlay a:hover { text-decoration: underline; } #feedback-window { position: fixed; top: 50px; width: 920px; background: white; display: none; z-index: 23; } #feedback-window iframe { width: 100%; height: 100%; } #topnav { position: absolute; top: 5px; right: 30px; } #topnav li { float: left; } #topnav li a { background: #ffec86; padding: 5px 10px 7px 10px; color: #333333; font-size: 1.1em; text-decoration: none; } #topnav li a:hover { background: #ffe25f; color: black; } #topnav li #home { border-right: 1px solid #cfba5a; border-radius-bottomleft: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; } #topnav li #feedback { border-left: 1px solid white; border-radius-bottomright: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; } .item li.sub { background: white; } .item li.sub a { text-decoration: none; color: #333333; } .item li.sub a span { background: none; margin: 0; padding: 5px 0 0 25px; display: block; } .item li.sub a span .highlight { text-decoration: underline; } .item li.sub a span.desc { color: #aaaaaa; font-size: 0.8em; width: 30000px; overflow: hidden; padding: 4px 0 5px 25px; min-height: 12px; } .item li.sub a span.desc .highlight { text-decoration: none; font-weight: normal; } .item li.sub:hover { background: #dfdfdf; } .item li.odd { background: #edf3fe; } .item li.selected { background: #3875d7; } .item li.selected span { color: white; } .item li.selected:hover { background: #0069c1; } #navigation { float: left; width: 20%; overflow: hidden; font-size: 1.3em; } #navigation #search { padding: 4px; background: #e8e8e8; border-bottom: 1px solid #dddddd; border-right: 1px solid #aaaaaa; } #navigation #static-list { overflow: auto; overflow-x: hidden; border-right: 1px solid #aaaaaa; } #navigation #static-list li.category { border-bottom: 1px solid #dddddd; } #navigation #static-list li.category span { background: url(../images/arrow.png) 0 0 no-repeat #eeeeee; padding: 7px 0 7px 25px; display: block; cursor: pointer; } #navigation #static-list li.category ul { display: none; } #navigation #static-list li.category:hover span { background-position: 0 -27px; } #navigation #static-list li.open span { background-position: 0 -54px; } #navigation #static-list li.open:hover span { background-position: 0 -54px; } #navigation #static-list li.cat-selected span { background-position: 0 -27px; } #navigation #static-list li.sub { background: white; } #navigation #static-list li.sub a { text-decoration: none; color: #333333; } #navigation #static-list li.sub a span { background: none; margin: 0; padding: 5px 0 0 25px; display: block; } #navigation #static-list li.sub a span .highlight { text-decoration: underline; } #navigation #static-list li.sub a span.desc { color: #aaaaaa; font-size: 0.8em; width: 30000px; overflow: hidden; padding: 4px 0 5px 25px; min-height: 12px; } #navigation #static-list li.sub a span.desc .highlight { text-decoration: none; font-weight: normal; } #navigation #static-list li.sub:hover { background: #dfdfdf; } #navigation #static-list li.odd { background: #edf3fe; } #navigation #static-list li.selected { background: #3875d7; } #navigation #static-list li.selected span { color: white; } #navigation #static-list li.selected:hover { background: #0069c1; } #navigation #results { border-right: 1px solid #aaaaaa; display: none; overflow-x: hidden; } #navigation #results li.sub { background: white; } #navigation #results li.sub a { text-decoration: none; color: #333333; } #navigation #results li.sub a span { background: none; margin: 0; padding: 5px 0 0 25px; display: block; } #navigation #results li.sub a span .highlight { text-decoration: underline; } #navigation #results li.sub a span.desc { color: #aaaaaa; font-size: 0.8em; width: 30000px; overflow: hidden; padding: 4px 0 5px 25px; min-height: 12px; } #navigation #results li.sub a span.desc .highlight { text-decoration: none; font-weight: normal; } #navigation #results li.sub:hover { background: #dfdfdf; } #navigation #results li.odd { background: #edf3fe; } #navigation #results li.selected { background: #3875d7; } #navigation #results li.selected span { color: white; } #navigation #results li.selected:hover { background: #0069c1; } #content { float: left; width: 80%; overflow: auto; } #content h1 { font-size: 1.8em; font-weight: normal; } #content h3 { font-size: 1.8em; font-weight: normal; } #content a { color: #0000ff; text-decoration: none; } #content a:hover { background: #ffec86; color: #444444; } .entry-title { background: #ecf3fe; padding: 15px 30px 10px 20px; } .entry-title .entry-meta { display: none; } .toc { background: #ecf3fe; font-size: 1.1em; padding: 0 30px 10px 30px; line-height: 14px; } .toc legend { display: none; } .entry { padding: 20px 40px 20px 40px; } .entry h2 { margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid #333333; } .entry h2 span.name { font-size: 2em; } .entry h2 span.returns { color: #666666; font-size: 1.1em; padding-left: 12px; } .entry h3 { padding: 14px 0 14px 0; } .entry h4.name { display: none; } .entry pre { background: #fffce8; padding: 10px; line-height: 16px; margin: 0 10px 20px 10px; font-family: 'Courier New', 'Terminal', monospace; font-size: 12px; } .entry p.desc { font-size: 1.3em; background: #eeeeee; border: 1px dotted #cccccc; padding: 6px; margin-bottom: 10px; } .entry p.desc strong { display: none; } .entry .signatures { font-size: 1.3em; background: #ebf3fe; margin-bottom: 30px; } .entry .signatures li .arguement { position: relative; padding: 10px 0 10px 200px; line-height: 16px; } .entry .signatures li .arguement strong { display: block; position: absolute; left: 10px; top: 10px; } .entry .signatures li .arguement-odd { background: #dfedff; } .entry .signatures li .options { margin: 0 20px 0 20px; border: 1px solid #bfdcff; padding: 20px; } .entry .signatures li .options h5 { color: #143e6f; border-bottom: 1px dotted #bfdcff; padding-bottom: 4px; margin-bottom: 5px; } .entry .signatures li .options h5 span { padding-left: 20px; } .entry .signatures li .options .default-value { padding: 5px 20px 5px 20px; } .entry .signatures li .options p { line-height: 16px; padding: 0 20px 1em 20px; } .entry .signatures li .options ul { list-style: disc; padding: 0 20px 16px 80px; } .entry .signatures li .options ul li { margin-bottom: 14px; line-height: 16px; } .entry div.longdesc { font-size: 1.3em; line-height: 16px; } .entry div.longdesc p { margin-bottom: 1em; } .entry div.longdesc ol { list-style: decimal; margin: 0 50px 16px 50px; padding: 10px 10px 10px 40px; background: #fafafa; } .entry div.longdesc ol li { margin-bottom: 8px; } .entry div.longdesc h4 { padding: 1em 0 1em 0; } .entry div.longdesc p.image { text-align: center; border: 2px solid #eeeeee; padding: 5px; } .entry div.longdesc p.image img { vertical-align: top; } .entry .entry-examples { font-size: 1.3em; } .entry .entry-examples h4 { margin-bottom: 1em; } .entry .entry-examples pre { border: 1px dotted #ffe0bb; } .entry .entry-examples .code-demo { border: 2px solid #ffe0bb; padding: 2px; margin: 0 10px 30px 10px; } jqapi-1.7/css/main.less0000644000175000017500000001303211460407074014061 0ustar metalmetalhtml { font-size: 16px; } body { font-size: 62.5%; font-family: "Helvetica Neue", Arial, sans-serif; color: #333; background: white; overflow: hidden; } #loader { background: url(../images/loader.gif) no-repeat center center; width: 100%; height: 100%; min-height: 300px; } //#feedback { position: absolute; top: 0; right: 30px; display: block; background: #FFEC86; padding: 5px 10px 7px 10px; color: #333; font-size: 1.1em; text-decoration: none; } //#feedback:hover { color: black; } #feedback-overlay { background: rgba(0, 0, 0, 0.6); position: fixed; top: 0; left: 0; display: none; z-index: 13; a { color: white; font-size: 1.4em; text-decoration: none; position: absolute; top: 30px; } a:hover { text-decoration: underline; } } #feedback-window { position: fixed; top: 50px; width: 920px; background: white; display: none; z-index: 23; iframe { width: 100%; height: 100%; } } #topnav { position: absolute; top: 5px; right: 30px; li { float: left; a { background: #FFEC86; padding: 5px 10px 7px 10px; color: #333; font-size: 1.1em; text-decoration: none; } a:hover { background: #FFE25F; color: black; } #home { border-right: 1px solid #CFBA5A; border-radius-bottomleft: 5px; -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; } #feedback { border-left: 1px solid white; border-radius-bottomright: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; } } } /* --------------------------------------------------------------------------- navigation ------------------------------------------------------------------------ */ .item { li.sub { background: white; a { text-decoration: none; color: #333; span { background: none; margin: 0; padding: 5px 0 0 25px; display: block; .highlight { text-decoration: underline; } } span.desc { color: #aaa; font-size: 0.8em; width: 30000px; overflow: hidden; padding: 4px 0 5px 25px; min-height: 12px; .highlight { text-decoration: none; font-weight: normal; } } } } li.sub:hover { background: #dfdfdf; } li.odd { background: #edf3fe; } li.selected { background: #3875D7; span { color: white; } } li.selected:hover { background: #0069C1; } } #navigation { float: left; width: 20%; overflow: hidden; font-size: 1.3em; #search { padding: 4px; background: #e8e8e8; border-bottom: 1px solid #ddd; border-right: 1px solid #aaa; } #static-list { overflow: auto; overflow-x: hidden; border-right: 1px solid #aaa; li.category { border-bottom: 1px solid #ddd; span { background: url(../images/arrow.png) 0 0 no-repeat #eee; padding: 7px 0 7px 25px; display: block; cursor: pointer; } ul { display: none; } } li.category:hover span { background-position: 0 -27px; } li.open span { background-position: 0 -54px; } li.open:hover span { background-position: 0 -54px; } li.cat-selected span { background-position: 0 -27px; } .item; } #results { border-right: 1px solid #aaa; display: none; overflow-x: hidden; .item; } } /* --------------------------------------------------------------------------- content ---------------------------------------------------------------------------- */ #content { float: left; width: 80%; overflow: auto; h1, h3 { font-size: 1.8em; font-weight: normal; } a { color: #0000FF; text-decoration: none; } a:hover { background: #FFEC86; color: #444; } } .entry-title { background: #ECF3FE; padding: 15px 30px 10px 20px; .entry-meta { display: none; } } .toc { background: #ECF3FE; font-size: 1.1em; padding: 0 30px 10px 30px; line-height: 14px; legend { display: none; } } .entry { padding: 20px 40px 20px 40px; h2 { margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid #333; span.name { font-size: 2em; } span.returns { color: #666; font-size: 1.1em; padding-left: 12px; } } h3 { padding: 14px 0 14px 0; } h4.name { display: none; } pre { background: #FFFCE8; padding: 10px; line-height: 16px; margin: 0 10px 20px 10px; font-family: 'Courier New', 'Terminal', monospace; font-size: 12px; } p.desc { font-size: 1.3em; background: #eee; border: 1px dotted #ccc; padding: 6px; margin-bottom: 10px; strong { display: none; } } .signatures { font-size: 1.3em; background: #EBF3FE; margin-bottom: 30px; li { .arguement { position: relative; padding: 10px 0 10px 200px; line-height: 16px; strong { display: block; position: absolute; left: 10px; top: 10px; } } .arguement-odd { background: #DFEDFF; } .options { margin: 0 20px 0 20px; border: 1px solid #BFDCFF; padding: 20px; h5 { color: #143E6F; border-bottom: 1px dotted #BFDCFF; padding-bottom: 4px; margin-bottom: 5px; span { padding-left: 20px; } } .default-value { padding: 5px 20px 5px 20px; } p { line-height: 16px; padding: 0 20px 1em 20px; } ul { list-style: disc; padding: 0 20px 16px 80px; li { margin-bottom: 14px; line-height: 16px; } } } } } div.longdesc { font-size: 1.3em; line-height: 16px; p { margin-bottom: 1em; } ol { list-style: decimal; margin: 0 50px 16px 50px; padding: 10px 10px 10px 40px; background: #fafafa; li { margin-bottom: 8px; } } h4 { padding: 1em 0 1em 0; } p.image { text-align: center; border: 2px solid #eee; padding: 5px; img { vertical-align: top; } } } .entry-examples { font-size: 1.3em; h4 { margin-bottom: 1em; } pre { border: 1px dotted #FFE0BB; } .code-demo { border: 2px solid #FFE0BB; padding: 2px; margin: 0 10px 30px 10px; } } }jqapi-1.7/css/reset.css0000644000175000017500000000176711460407074014115 0ustar metalmetal/* http://meyerweb.com/eric/tools/css/reset/ */ /* v1.0 | 20080212 */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } /* remember to define focus styles! */ :focus { outline: 0; } /* remember to highlight inserts somehow! */ ins { text-decoration: none; } del { text-decoration: line-through; } /* tables still need 'cellspacing="0"' in the markup */ table { border-collapse: collapse; border-spacing: 0; } jqapi-1.7/images/0042_04_01.png0000644000175000017500000000613411460407074014625 0ustar metalmetalPNG  IHDRa?5tEXtSoftwareAdobe ImageReadyqe< IDATxMHTmǝH)U3lJ\,pr HEZP#.ڙLPc*-4"HЬ Z98O|~>u纮1Xb U!===1?~'WqܹVt5ý1ݯ^=<_E[[[}}}]]SQ1;;m6}g]:Lʎc[l:EFsss8x :w~~^謰ݻVgNRv:*@=b}hjjb2̲dwvvjm{{ 94ȈFSNSn#"%t" =ikcUȈPER`1H$ Уl sr Ԕ? vtɵ( ErR _ CqDiappP FzUՅFqDɡTB*eD"X# "yEwwwކVk0_PFWtVJYԀÇoܸTCaBŽT>d,ɤf@!PlnqnufU򐾾񚚚ӧO3YtFyx]56AᙽPe-&D_~O 7(6Z^Dl%϶{9-B :ӌ2oVtEt#3kRض EӶ >d.Xh߂ӧ?~E߽{g`ff&맢UrQQQ]_we浡xx8Ǐ[nݸqcEŸGSPAIϟ?z@# L<|@#`ĴFqĊbq@Irt:xm+nn *(]!iصkW@#4@# QΘoDS y#$ [lCSSSTZuW 5Zd2zMy!V8"󼳳kg̯99]Q3G[n:wԇqD"'ONNc?C sd(״⋬577wttDF+5[zЫg%J 8~;h.0@# y.˄zZBS1@= '<*G^ء,v .-ۭF9D#Ƚ"}Tʭ\n@aL,㖽 Βk"[&''u5X*fh?^"(г@@w z`=!@^G66&caa9!#G89A#GرcLd(8@#kDee 4 FP@#c% hH (FP*{nnn.=WTTF ?UUU(Ex-w4zh`` y#ROghFhFhhv>kjjFh*P\\\FGhFh"fggݻsNnd?~b*JT#L&UZ5FjWƘvIENDB`jqapi-1.7/images/0042_04_02.png0000644000175000017500000000644111460407074014627 0ustar metalmetalPNG  IHDRa?5tEXtSoftwareAdobe ImageReadyqe< IDATxMhTWg^Ţ#$A%AA#: BRwaݴR'EBd+*"u ~/>033ks>>44T}k׮}BmXh_K`rr5*`bb܇x<<Sy0%в\>%FH¿p\B077:}gϞH۫Y~-W)qjɓ';v(RO?Ftz4u<(â0| MoZɣG/oݺU$Ѫ(]}zXQ_vaf2܏4@#4@#44@#4ָA?G{{† t knnntt4ZXXXP %Zl6ĎnnnVyWlòv1]vv7항ZU&*inMokTSy<;;k~KKߕr h {bbyCCC_mmddseD4"Oq A[m\]50@#V\/, ŒZ#r {UAm![(7oV%~0 jy?aH^Xֻvo 6CI0 ZܪG#ɤR)-# DI(Zݰ m@upk:_$w6E8 mԂ;*$ p=*ΛX/4xl =6H !n[󫀫2g}QRW d2@z[*ї˰#-R,J-4ba'b0gϣfA\&1/F,3Z :X|4v隽ZU ٖ䤛J?0>kVo΂R#2(nN?7lVQFU/'x^?daw}'e?LzwR\E)[.aWkGD,lHӪ"CUTʒ#B(;߹sH[p/;A#CFZ*FƎR 4ȃm1 zȳ݈@# ~6YM@p޽ǏJlmmFFFW_}NooojP# a}֝BP hF@" hFhhE<=zPA^~~S0g /DkF  @:"xIENDB`jqapi-1.7/images/0042_04_03.png0000644000175000017500000000776211460407074014637 0ustar metalmetalPNG  IHDRa?5tEXtSoftwareAdobe ImageReadyqe<IDATxOlUhcWJ1$t@.X֤q`t+ ,t\i",tUI7&11gSAC% M QY~O8No[z{-nNϜ933skru'O$ob100pa^:;;[ 6l߾g5/<{g}7x_}Ϟ=wt:khhhQnC:55j;ݽutJrCD]<]窇͛7u{333---z zDe M6!TըxT!Թ uF<3Qg<22 U|;w~D ,!;#GԀ&lѣnllL5A;zzztX 4@[56`>Y*(~|B?~b|F4$~tHm3m;^m](Z{pW!fY-s4Um$ap,<(3zk3ݳFZ-ճUGZ^|9-oYvO j°YJ]P 3Mp-t~mtKnL-]P^X;I" (mO;2r -THAb^.K>,:~{D`RvqKښ9ғTޖfOP';Q>Otwbet_qW/ix hQϞid~;ރ:K^2||Y#믿֧4"!2bp78/Oa+wbX„&(2s d!+4b1#\LG}ja( 1e|}nb pN #jQIsX&)/kh>;#~~DHBce=KNSeAKw*õBԣ*:|E2AmJnG6a9z5rhB K}d|u#\N$5p9Lh="Aw)8ȧrR'폈y8`)T&(_$fM)3C}-駟 ̭@fggyC#%ܹs[ꫯLLLhh4LFIP|O[t5\.Q)))iE~8GGͮۍáы/lpFmtF?)+S[>`oפ3 p3y'j)XePȼ\Q̒&ˑL$,$2XJbʹ` \͋O>DkWv2{,]yh&T*<&hUK{+tk k\ [VrK(9u|5E\^WVYktuu>|xxxֈ?(W^aV!q٢:TЏni-/<:zGnhGڵ+4۶mVFԬ7n%Ԩ'ĘW0xq`0 ^ZZ_hǎXQFD jYzkDI2,2[&v$SSS՗2#8qď?(oS<Ⱦ}rs:vpFԧV;PF#2;]E7B*=p ¼;*ȼu-loK *}U[%•:V ǏgF@j#V9ot4˒ G,8Gu%wC ϢU I/<B# ػw}YhlFYG.1 ʹ@#^?Z"^۲t3H,)<|@#VNrAg~Z;h~&y_ȫ|GAuXk5g"\~l]]]a;Y8p`Ν.]!HzwmkkS^PD\?Fy2Wf )bƍZ!*Ѕԕ[V*hUZm$,__|?<d'"q`sDefeN1===>u&}}}!;kttCz!\_xgԗ7nܽ{F#ׯgԗ@#4@#4@#@#4@#%ı5 =ꎃDaӦM}}}CSSS###MߪU7oFU}RQ={?LO֭[>4!G;Ϗ=.k1B:KGU#٧{ӏ:f:w<?~ʒ'''=] ӧ ;<66 aI޺92**J4~C 8AK-Bx+ y|>=e"~H-WoTf74bE288*/#FFFEm% 2yPm۶y݀f{Pf矼pWy&C +]syY:j d%j'2͋^ Ltbnc@r֒0,9Ve8Lu OՍG¡noY^GKOO-SF"|T(Y};]$RuõC7#T \߆>ԕx`099[fA X^2vbbBDXB:U74PP)pnnm54`hN/TXK1g&!NՍw^4bYrx!^.cɸ%m8\ ؝,^ TٓyRդO9} UWP鋢˃\! jd :;62iGJf:ySZխnfI(y sCĪ ـLuo$;d|!a̅4U/p2C2ᠩ8u! '&&7yGˬ;!f hFhFhhFhFFhFhFFK˺ _rQ4@#4@#(:Z:433B{{{KK˙3gx&|y2x}eHBGGx;v]v@2ie[[ %y饗N:O~@r`Fg}xyCIoo+Wܹ 6;wի閯$۷$A#HH.\٩ɓ'Ϟ= w=44ēď 4T*m~OfՈP&? HSO9裏><4 ەvZPUB`_tO?~&2 Xm3 ݻ700מ 2;wnٲL._#<* `af -VF2¾P+`; s`IENDB`jqapi-1.7/images/0042_04_04.png0000644000175000017500000000552111460407074014627 0ustar metalmetalPNG  IHDR%hStEXtSoftwareAdobe ImageReadyqe< IDATxOHT*DMDR誔,)݅2V.jbġm"U((?MZ)AfH{{8Mvy{3wy蛿o\[( x_~ݹs'):::Z[[Hv_;{,)jjj>`]tEȫ+x\v,{QRR" GFSSSYYF:wqqQ2Β=88hGm0lo߾h4,C-GvWWIHOe(ut"FЉv7~Љ\mzl@ՠR1>>nNE4FGG-ܢa/NH$if%N \寸\KP!C~)guU<:u dGRd2OR["2&QbI$RHDBRGe4 $I\wwyf%ܼy#?zzc2<쐡D42B]]ݣGeŢ%L7w{,x<+ CVaTcua7~w5b@nݺ544499YQQqOݶLӯnb1I5f;UQ#wʕ+4hHIf"*.JGiFWidΓn>!bӯDNʏ攡6:]z:j~ͩ|i-NWUU޽{\Kmqӿ`A ${D6/lU#Mlϟ7w5vޮ3YyMKKKOU+e9sFONN8qrȗ/_=X{<;vhiii楥C/_ \qCC .^(C6ԩSΝ{e"V=̩Sӏ&tGn %V RjK$ÄqAqpL0C%u*d!XX˹n6ve'@&=̾|)AŘ[Smf}NCCCee{;$Ev.]R_---0$?_^t_I;/ Wj6KBE-<:lb!yd-Z4:$k$OW^#kycGȔε;-j`lŌOI&lwˈbƕ&^ ނW&|lO>-//#}vN"` @0 @0 @0 B$=~Kxp ӿ~JBJJJVQ/+CN嬩q$fh6a6a6aՕ;BO Bg~XTT`"R-SK8@P# 111q gnnݻmmmeee:JLg'O>{,vJ$>...;_l%Ǹyݻ ?Eii#G~)7իW{^xQUUEX:ծݳgr=t („xCg D=&}9߫/`ٙ㍍eee366G93ge՘`JHbpppzzZF4=\dLdboBA_RRbPSSO/J,.hѥb3b1?&;Q777!UءZ%l-PfUaV H *+KwH$/4RQoFwwlΆ B 1+Th9ەmMMMfK]){.)=L F:QbjQѥD#JareDiVt‚&Q%8mOJ/:*QE"e1=Fj`[2=$@E[U>EqLIENDB`jqapi-1.7/images/0042_04_05.png0000644000175000017500000000604211460407074014627 0ustar metalmetalPNG  IHDR%hStEXtSoftwareAdobe ImageReadyqe< IDATx;hFb(h!4"9J! PI 4A+CZi"_i4*IŀAs;u߹''sN~fϞ=ǙZkω{" YaI˗ruxLqz__~֭Ϟ=9x >S߿|۶m? _"rv9NNe744F"8~`MM ;44AtTqĆ dwvvz;4X|oߨaA*!ϖ*fcc yZ'2***S!jd[$Brae  Ç(/קFwwŋClQ7Tѩ$cd&RA!ъg\㥊x|()gtVZ+MR 5M<@dfA!d@$$0T$QI`0 e\D|2 #kiiQRyO I6/^~]F(wܙӍaIK~O*nv;EN:n;@^01¼KF|rҥ={${&zm=_ɷ_544Иzo]۞pEFDӧqiW 9Sx/"θT*566EѯBBRnvk 3^Ov۷o!Hbѯ"d(>Q6ݳŕl}]c7*hX[l ߹իo޼&>$Gh A$ip?xU=-6ӧ]͍7Rf3A FuPd)Ҍx%rʬNJ3[nª*]).YWHFѯ:Ďzݥ (C#%PQZt njQ*ZB$j zxӔ`:#lMq(w)Ÿ|Z? :VQqcǎkfmS&9 Uqds@'tp<78p~z&/͛7׭[!x=)٢1^RE9ݫB+صkWbȗ/_oߞX2=kj+V۷{iϟ?o޼Mr<!ǕWWWpvquuݻw:ɓq},7F9Bٳga8ǎ^Z2\ԪP_fmqdh("iGfJ޸Dj*C&W_A Q1 {mhЍd $NR)%CWWnB{i)'+.>=]fC)c*~X2KaA{}c5NΝ; 0ۧN1fs7mڤ޻эs'N.R}Q$ bix?ő7]/*[Tų#$c5N3N@Kt|ݹs3g*++0IatJxX3kXb ϘqIr O hWW& 3I $Ça,]w2ir ` ` @0 @0&u$z.u2o')RHQQ5*2օ2tZaقѼ(nޕ嶁3}ss_:~ƺ6^H T=6tlOar9ܺ$d^͋%$f!=8d6U Hh|IP@0Q#Pl8RV\[-6B5E?$9}I;u:W&p +xzd L>Jz|hw"( 1hSH]U:h0"v^L!|Iēnt֤`t;H9DAADI L'ZOː+zpƕ13/e jTg<5}.zRq!;EKRެ Ќf !ٹ344t}ِbҏ,yX6r``.de= ȏY nM'v}ҥ{i\Krҿ` 6M$֌ xA"oEK;vII0&%r]7܇֡4dl+Ο?-ݻw 6ٳ?ׯWy :Ss$V6h% QZpg£*yWH 1[T;wƚ făeB4e%잩 ؒs/+c|ꭷھ}{h%2F$0FeX84P(88fn4k?qpev$7vZccO0VwI0 R%u"Aa({H~rr0C>|ocw'ټyÇ5<z~k&|Y{paCl{4GOe*yQ(7J/B ~裏pG~fM+:T*6҅3g!x/302npGY3:->^п5S0&anatt4 `o2@9v̌~| &~ >?B,x n{i*fOw 0q˟}`1ٷoΝ;s,ϱc>Eh|a0.mjLa_e|EotnR߂5z@,N2@J=/ooSaB0=|-C+K;-H`8b_!Y晴fhJL$WB)nQ~{^xz######``````LH{XS z觎&ZӿKBoElQj-Ɨ5Hn[TtO}foQ؋(!PްlcSB&aօB!NN><"ɓ'BTV$j2DrƍoO>ECm&2P Bss={2L{{{4Z3??Oĉ/2ʘopႉg֭2S__766Džf|}ǎ0ի  8|>|~`fnޥmP<v%2RfggM$\n]֞sʕ{ΝG-$\.711@P& D>c~ǿ$|j j>ժJݼysdd~D{Y<-Y@>7="#0qb׃u.lCCk:::LMMMf譭hS,ָXTIѕo%h 288ۋt:ahh6l !(cZ&uyFvhgB >y vjDsȂ?ωH&D* k j- 64؀]yfxx3sEy떱Bu -A\T]Q= I`-noXgXlf!;ah,X.5hBfFUTZ(Y3`ʸ[+;:#Zj| S!Y|nl TBo0'Nظq +.:_C6-xb*օ{/]/ f\.,㚙W޾}[)IB1dm:tȷl~*X;ldd}62VX9US,jFs?Db͌柮K6+ )o#744^'&&rơ{9of+WA6ך,vK'stN& 1?t;۠SȬaXE`LgٷS Xd\:]p:ld<|'Af6ږZ\@{gB%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATxql[}ǏYQiD6ʺHXD +C,rYf (& ]SfBm 0B*:y%:0٩"tRbiHˤDIפG#i, ~sw(JL& E1'%۳S@3 g @b` 8 Y=;? {nN- Ώj7U(#<y@@dW`آ?7@I @JAIWN@ p%ŋ $+'}  PREpr>()\I"8@9 @I}x@ p夏AJJ8>ooRd^I^ols\I,z{ }dta&"P[a6w=Qkxe"R"t;ˉG|Yfby= GދfQ ]L?c2 +:=uRwllI&{$bV- x%G`PQIZts&J`+/FN&R>66< 슽2Z-vRjwXZ[og72Vn^''FN-qS2qmm3댭N vIfͻqcox $˗/罞F;39"og`g;dtMyaԬj`%h`9 ٽ1u;BM.+m)ܒ1cLXq?ؔ L3{# NWpؤ 3o9r[돪ο?L&N)ee:xۆXb:yбs;d _zLC:s9p[?qw3d*E# Ss_a,byƦ[/o2C ?>xu*>"P&j 3}tHݡ0lJEVUe]U0ta>zczjMT NuK( ;}ps7|Nϸ%`#ZW}+`x7ʥMd/7ңeVqvF&(ޭHJ.wI8p{!q>gNN}3~No.,./s Iˮ#2ghV$}*Œ?Ssh9d<7* K=ˉĪDG\WU3c=ks@]sǥ_ƅ#]hO]Y|yy q,3az]H訍8)BK C73T=NˁΑOD]%q&bi 9vC]8&Cjձp*oR{26\sқota*Ul`"jdSرz>W}@3u]_]5()\I"8@9 @I}x@ p夏AJJWR PNrG %%+)^('\9o/7@I }ca?dUVF?\8K{?xq|6RD,ƴẐf;.V_kQ,~WuKV+%V9@pύ}|7b Upon*n=vk|k> G#Vt^[u52>z-v*,AK`+8W}^T ;|ʹys3ٳĶcT1/!Yc ^K$jut^[DSA]k(lcf 34Wpjz7 {M&̼e 27ljUTM]^7~jTZ'M9uqRiwXv~S{l3|Kbakzc=?a߮h4&dMjO?Z.f@)P^oW{ի6)A/uK䶭l{]a`d󮊫`WkzhIEأ P ɼyg.GtrS a'g4[}Š`?k%:=/kɤ$OfqO'G%EY z#0;stR:Tbq +tan{~-.81v3v[xMQ$3HuN` FFH Qoߌ$c<)rQSNd:@^'e9NoJJ ӔE1>KRgt%pKzZ<'.cb'%.F:(zT[KNd44\ƣRpLԲ5I%+W`TL̝Zj`>&ߋPR̬8=Ƌ  ]U!E[?M.?BǧkǴ/cmzX}9{BFe_#tD<:F:S hu\Ëw''RQ?<#jkHyI8=&}'j41qIy܈@  1݌|rxPֻk=-ziWpIo/߉fXC~^rFm~L{{${鿕 n.’tġV`j|YLU)v& =JgeQ( VOd;o'WVoO t?iF:�NsKX˴ztX׆F_. ;L-D':;o2vM3 Sw -ZĖow ɓ _۵Dtyfү_F @d6z>mO|I?)U fWvhL F=%BNvM ϛEfYdvf. _*F';w}Inr3ZYziiNlNzɡ>{QO󹺑26w2aS{26\?[ۯdG'{}o̝[f_< ܓtW .Xᕥp !^(Kn]-%J ģ2DזBVYPk˙.Q(@e/Jv\7\ >2W3;|;m;Ox/yQԦR֏jNf,ۉG[[[zVOF[]'{*Rbv>2<;ܕ!>22qr :޾pS1LJX UL^rѿtϞpml+)Ei"b(]3H@ p&x nL(6\"!5SD@MWl k@vT b(]3H@j?< #]R^@ -j` L8e(H0P&2 Y@W$(NA +L@IyC  & $S!k@ e)sސ5@3enhzIENDB`jqapi-1.7/images/0042_05_02.png0000644000175000017500000002422011460407074014623 0ustar metalmetalPNG  IHDRqA0iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATxql[}ǏYQiD6ʺHXD +C,rYf (& ]SfBm 0B*:y%:0٩"tRbiHˤDIפG#i, ~sw(JL& E1'%۳S@3 g @b` 8 Y=;? {nN- Ώj7U(#<y@@dW`آ?7@I @JAIWN@ p%ŋ $+'}  PREpr>()\I"8@9 @I}x@ p夏AJJ8>ooRd^I^ols\I,z{ }dta&"P[a6w=Qkxe"R"t;ˉG|Yfby= GދfQ ]L?c2 +:=uRwllI&{$bV- x%G`PQIZts&J`+/FN&R>66< 슽2Z-vRjwXZ[og72Vn^''FN-qS2qmm3댭N vIfͻqcox $˗/罞F;39"og`g;dtMyaԬj`%h`9 ٽ1u;BM.+m)ܒ1cLXq?ؔ L3{# NWpؤ 3o9r[돪ο?L&N)ee:xۆXb:yбs;d _zLC:s9p[?qw3d*E# Ss_a,byƦ[/o2C ?>xu*>"P&j 3}tHݡ0lJEVUe]U0ta>zczjMT NuK( ;}ps7|Nϸ%`#ZW}+`x7ʥMd/7ңeVqvF&(ޭHJ.wI8p{!q>gNN}3~No.,./s Iˮ#2ghV$}*Œ?Ssh9d<7* K=ˉĪDG\WU3c=ks@]sǥ_ƅ#]hO]Y|yy q,3az]H訍8)BK C73T=NˁΑOD]%q&bi 9vC]8&Cjձp*oR{26\sқota*Ul`"jdSرz>W}@3u]_]5()\I"8@9 @I}x@ p夏AJJWR PNrG %%+)^('\9o/7@I }ca?dUVF?\8K{?xq|6RD,ƴẐf;.V_kQ,~WuKV+%V9@pύ}|7b Upon*n=vk|k> G#Vt^[u52>z-v*,AK`+8W}^T ;|ʹys3ٳĶcT1/!Yc ^K$jut^[DSA]k(lcf 34Wpjz7 {M&̼e 27ljUTM]^7~jTZ'M9uqRiwXv~S{l3|Kbakzc=?a߮h4&dMjO?Z.f@)P^oW{ի6)A/uK䶭l{]a`d󮊫`WkzhIEأ P ɼyg.GtrS a'g4[}Š`?k%:=/kɤ$OfqO'G%EY z#0;stR:Tbq +tan{~-.81v3v[xMQ$3HuN` FFH Qoߌ$c<)rQSNd:@^'e9NoJJ ӔE1>KRgt%pKzZ<'.cb'%.F:(zT[KNd44\ƣRpLԲ5I%+W`TL̝Zj`>&ߋPR̬8=Ƌ  ]U!E[?M.?BǧkǴ/cmzX}9{BFe_#tD<:F:S hu\Ëw''RQ?<#jkHyI8=&}'j41qIy܈@  1݌|rxPֻk=-ziWpIo/߉fXC~^rFm~L{{${鿕 n.’tġV`j|YLU)v& =JgeQ( VOd;o'WVoO t?iF:�NsKX˴ztX׆F_. ;L-D':;o2vM3 Sw -ZĖow ɓ _۵Dtyfү_F @d6z>mO|I?)U fWvhL F=%BNvM ϛEfYdvf. _*F';w}Inr3ZYziiNlNzɡ>{QO󹺑26w2aS{26\?[ۯdG'{}o̝[f_< ܓtW .Xᕥp !^(Kn]-%J ģ2DזBVYPk˙.Q(@e/Jv\7\ >2W3;|;m;Ox/yQԦR֏jNf,ۉG[[[zVOF[]'{*Rbv>2<;ܕ!>22qr :޾pS1LJX UL^rѿtϞpml+)Ei"b(]3H@ p&x nL(6\"!5SD@MWl k@vT b(]3H@j?< #]R^@ -j` L8e(H0P&2 Y@W$(NA +L@IyC  & $S!k@ e)sސ5@3enhzIENDB`jqapi-1.7/images/0042_05_03.png0000644000175000017500000002422011460407074014624 0ustar metalmetalPNG  IHDRqA0iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATxql[}ǏYQiD6ʺHXD +C,rYf (& ]SfBm 0B*:y%:0٩"tRbiHˤDIפG#i, ~sw(JL& E1'%۳S@3 g @b` 8 Y=;? {nN- Ώj7U(#<y@@dW`آ?7@I @JAIWN@ p%ŋ $+'}  PREpr>()\I"8@9 @I}x@ p夏AJJ8>ooRd^I^ols\I,z{ }dta&"P[a6w=Qkxe"R"t;ˉG|Yfby= GދfQ ]L?c2 +:=uRwllI&{$bV- x%G`PQIZts&J`+/FN&R>66< 슽2Z-vRjwXZ[og72Vn^''FN-qS2qmm3댭N vIfͻqcox $˗/罞F;39"og`g;dtMyaԬj`%h`9 ٽ1u;BM.+m)ܒ1cLXq?ؔ L3{# NWpؤ 3o9r[돪ο?L&N)ee:xۆXb:yбs;d _zLC:s9p[?qw3d*E# Ss_a,byƦ[/o2C ?>xu*>"P&j 3}tHݡ0lJEVUe]U0ta>zczjMT NuK( ;}ps7|Nϸ%`#ZW}+`x7ʥMd/7ңeVqvF&(ޭHJ.wI8p{!q>gNN}3~No.,./s Iˮ#2ghV$}*Œ?Ssh9d<7* K=ˉĪDG\WU3c=ks@]sǥ_ƅ#]hO]Y|yy q,3az]H訍8)BK C73T=NˁΑOD]%q&bi 9vC]8&Cjձp*oR{26\sқota*Ul`"jdSرz>W}@3u]_]5()\I"8@9 @I}x@ p夏AJJWR PNrG %%+)^('\9o/7@I }ca?dUVF?\8K{?xq|6RD,ƴẐf;.V_kQ,~WuKV+%V9@pύ}|7b Upon*n=vk|k> G#Vt^[u52>z-v*,AK`+8W}^T ;|ʹys3ٳĶcT1/!Yc ^K$jut^[DSA]k(lcf 34Wpjz7 {M&̼e 27ljUTM]^7~jTZ'M9uqRiwXv~S{l3|Kbakzc=?a߮h4&dMjO?Z.f@)P^oW{ի6)A/uK䶭l{]a`d󮊫`WkzhIEأ P ɼyg.GtrS a'g4[}Š`?k%:=/kɤ$OfqO'G%EY z#0;stR:Tbq +tan{~-.81v3v[xMQ$3HuN` FFH Qoߌ$c<)rQSNd:@^'e9NoJJ ӔE1>KRgt%pKzZ<'.cb'%.F:(zT[KNd44\ƣRpLԲ5I%+W`TL̝Zj`>&ߋPR̬8=Ƌ  ]U!E[?M.?BǧkǴ/cmzX}9{BFe_#tD<:F:S hu\Ëw''RQ?<#jkHyI8=&}'j41qIy܈@  1݌|rxPֻk=-ziWpIo/߉fXC~^rFm~L{{${鿕 n.’tġV`j|YLU)v& =JgeQ( VOd;o'WVoO t?iF:�NsKX˴ztX׆F_. ;L-D':;o2vM3 Sw -ZĖow ɓ _۵Dtyfү_F @d6z>mO|I?)U fWvhL F=%BNvM ϛEfYdvf. _*F';w}Inr3ZYziiNlNzɡ>{QO󹺑26w2aS{26\?[ۯdG'{}o̝[f_< ܓtW .Xᕥp !^(Kn]-%J ģ2DזBVYPk˙.Q(@e/Jv\7\ >2W3;|;m;Ox/yQԦR֏jNf,ۉG[[[zVOF[]'{*Rbv>2<;ܕ!>22qr :޾pS1LJX UL^rѿtϞpml+)Ei"b(]3H@ p&x nL(6\"!5SD@MWl k@vT b(]3H@j?< #]R^@ -j` L8e(H0P&2 Y@W$(NA +L@IyC  & $S!k@ e)sސ5@3enhzIENDB`jqapi-1.7/images/0042_05_04.png0000644000175000017500000002535411460407074014636 0ustar metalmetalPNG  IHDRp3iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATxl[}O9QXl[MD ;CR-j 15 SUB $V:BZS.:$uO]RMՑP6eI~E!)Y&e|yw>'~}%I O#_{'9'SK.-& SK.-& SK.-& SK.-& ɍn6@/@GGGyF5@@pZPp PLbGl/@ p $+&}((\A9@1 @IA JWPp PLbGl/@-pbIl=mxf͸TWkL|Mf/9hwY~d|~.k}x&~ Z@J.{TḇïtlU w^On\ ze:X,xGw5ӗb/`áiT@J@_'q-0}N'Yv?c4>R)M N;v}"hSm9esit>\K/mɶ q*Z |WJ,5:@Jwp\OK0hf?MmOt^[QQ-kZ\oSӐr77dD-#Zjʚo.)S3e7n,ntKb#f4&>>^&%TߴG544ίr^^~2X}͔ߥa[NYkȒã[SYYÍ(Ou5&Ms  $s .O&c~#c8,na'FW&;Ye/8@IIȌV j %%Ǝɠ,No 0i5Qdk*VrcoPt]>IQ`{xkIp[@'>\72țYks!fw,sɃ'A#*S`=  3;|퓡՞q ]y厐wFKK>/IF_h9I$V\̮$Ϭ"pb-n2d,%$_.²I1 tb`le$M&.Gd:e䋀DruqIHpeT7¢d]rr+l@^RN#Z}\}l*DgۣvQc/j6gj`lˊ-cLstR}1b:(j޾4،2g_=I_:K;F;un2;/ɗ"?o,OR.H贋$9W*S5KuTv^|[s[ڗ"[u?61;2&R§rPm>0-&<$-Cxt薗 ܞZ4K/92y__-^A E@#ߟ[3Nk&&ƕh":?Nc73U_]`` ^fW;52/0#5ʤ_^L$F͍O4LCfP,3Ism ^TvKFe q/)^Lo5ln UO})3jlëNumɶ&{vch3f,D"lvz7*KP:ZKnʵY  PhIUej/1;bm :PVVV5;Y|J55Z{g.nKi`|͏6u RS _%1gXCQ w5iڲy*ΛܮnV%_mͲޑ%i7;7bknQ)/i{T@ Y.\?4I5DFb !8 'j3{~wdRpHfuOA> 3U퓡 %D%vD: O9[(џś2g5IvlpvIuQr0&}A 5:xh8 MR4sh Lre j8c+L u 9 *jޢM,.x7w:lR[׿mactKt,ȒFCG&MsIq#tT)8L$s{Zje4Kۣ N'2Z]{Ȅ}eniyzX@w-oN/.͍u?%`5#:|OMp9wiiu{V43|ּ)Gt'ٌ- ySBw#&&|4xsF;݇LgumWg>n@ F`ݮq#- ވtݓ?G<[O|2M{{^qr~葪+&c~{L $#>X?E -,,#V̸#^-%F Rb,O&B͖wEuC Iy*sU]q9}1}c Ӆ~|D^}/OoxoykܒUVjjjR]edt5{T@ I (Zs?0=}gdvn ﻶF:k{O0'5_ FI塆o5S^[q %S&  6D@d@Jf) pj?!+@" jM@JdM6Q(Y $ 6D@d@Jf),Nx@v2K;/kd   [M@ $ۙ놬A6A H0ؙ p;sݐ5&@6 & ;ng& @`guC  $Ln@` pI\IENDB`jqapi-1.7/images/0042_05_05.png0000644000175000017500000001755511460407074014643 0ustar metalmetalPNG  IHDR<iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  jIDATxQHwFRc8R6ҌF*j0_YV3>66XFdlB$/ c*SB1\פ$/Q1\x]$2 @@HpL8dp=80@ YdO- @=HV'Spx@@I yqVBP`ppH<G, pZQ4)R}C@UCB G@EpE8!7 PQ\Ey8 NH} TTWQ^4)R}C@UCB G@Ev'bP1Yv4V젓sn5:3`$q r |v=Pp@ O`.2cߧzgwԝPJ/O8߉wOyn&p8 =]'@dKi*4>&3mT3]Z rd՞3vdZTr[Cv[)TVUM_Hry-6AR(w.&6;M:׶ִ+8k.Qw:ej5ʆ}{ !WN kncpZ+60uMM酲}>FHtU>w7<$)}=Ìb VߵVGea3Eӛ'qBm8qfS5{ַ8i9LGwi}-/qN¬@W{8* M2k$arafnMmo  T3TpaL_>x꯶bj.-73]}6-k.SScǟ}V籘>8t1?!)8CuGYk>wG?24 !IpMH<"2̎>[SGyS-;v[D_Iu|@!nc^ʪ:hQݝk;~k>_h˖tFz-ݎxI r_o;CPpDO.%3:2ׂ6aݕ,fDf#}u^v&?b0م׻\I|9#|C܀7|5^o),; Mzm0,]t|UU'`"z碼=j^$6n6U7o9K'"u'm u  9dwʹ'ytnEj#拳Υ{lͿؤ~zg`D˗ WW.U5/M+Dv/;znW\>'r E߇ w @ "G+W60X:ۻOɋm'KNQh$RjD։V.GMkrZ*iTq;Lj J{pBB@NgxpD(*ø!^/  z0n@WK@@89@NgxpD(*ø!^o_H <C P.QKB >F (+ ep;g1 PD(A@a@PO'sC% JB >7&hGIENDB`jqapi-1.7/images/0042_05_06.png0000644000175000017500000002552611460407074014641 0ustar metalmetalPNG  IHDRyiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  SIDATxqLw~VӒ\S&bTQFsRBoSMʤꦆh[l6J^pKn V)揙Dm?tf+Ԓ bg?0~>?&G=y~}^s@N$, fxR p9@M+@mک@lZnN-'@` pvj91 3V۴Sˉ!@nr ؋dP6W 83y$C HW`ܢ՟@ \&96UK+/#@&LslHV^GL p V.  2ϱ@ \Zy2)@eRc#@Z28dRˤ>F z{QNt):Vuip2y`0{@ ([4E.w^qtup ^?  @2\Rr_x|`KhB/?{b߅G:ksM[x”F6&+v!M+&wozǂ=chI?o9zBE\[\okbWpzS^@ ly={,-]͞Ο0~]gUTKyMh|\T=m[ug%3pM* 䓻W@`90I7[Ra̬O~so]Kr?7+(XL-yz[ɼsyI$u D5e^" ~󎇷Y‚DkV@E} A pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( (i"˖&ɲو)@q7dMi~}L/0@E5DS ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D <0e fx?ۖ+dʹ A2pBl۷D2@`S  b*Ggg=G[]_vwןkvѷ^֛EۮMʍ*{}gCnu G;MyEGU8'|^[V{F:lޖ QKtȀ{xŰ_Wvmz946qs ΅|gG3GuB9ox Pa_ ]wp+R7fGuߛ_؆Zx^؁w]WTZF|UIo< wD7~k|l'coXPld?#I <EM}.ݾ!DD( ܞ >zZ"!o q\xr\|ɣ畳D`ME͋+WD~_o.r%]$&\*7vL[ʊ[ʴ&:Ƈ^ "ףQHbBU]Ti_%Vzށ#ko^=7囷!hobV@Qx?׼OGO6@V>" N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! 4fu2 f\mm+ H[TE  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E Xw2[c7kT) D"6nQmƨR R!dm3F 2 @ l1Eh&@eیQ/,@LEC6.fz@ eUN+eI"@jkku=O24@ z-jZ2)@eRc#@Z28dRˤ>F piepȤI}i  I.*@@ \&96UK+/#@&LslHV^GL DVmm/DEɯ7?iu~CMgŷ("/Od1nq?cJg1}|l4J5B_ӛ~zӏ.D7obՖoR~"? r{SȔ]Ӳ^+\m5jKZYiX#Z6xg>1/+|]zPuz}iOKHEm-zzBml6am1Ќ n ^% ݏƯVU==E9E቞3 =A?Zu,''L}[k9GQ/ˍ99Z;z\m&vӽUN֮״%4=|KhaYWpܥK4{cU+Vz[~Gj4[rȈU#K ]#}NCr!m946qY%WΆy=N51Ƣ5rUYGV-]{_׀잘訓./^c`sFntj<ة4 w thE.^E͠-R{p6b P"iȪݗ 8KÀW{xrOłibhLF5Ȩ")zP$$jqY1%hdž7hZlH`7|h1mRz$-+~jCVayp ]og*=.X7wXC*Wt'~.<;;;3?B~ʕxۢW6zdO&>a٩? Ɂi=.\o vikNef=?_lVyyɥɹ^yZyh/[sojEy{xr\UK /jCd qXǛh4 ?ko],Wp<~eqy|!5|awq[`7k 6z{-%e V/|1K&VE}"w\Ti\p1m)+n)6Yܗ_;`/*nrQQܶvcn&ZLeGwߗu\^}+pԋvj#|{C۫eJFbX!r6LorVj3T OV}OGW!j' xߐ)jt fgff}?X2/B>_@\yYhQh*gd+U %Ziw␬ @K$Q}eWu&~iϒ+fRZ"^xBv1-u}ʯf*粖+,,}W]+>ٓwJ S`PPyc}ϾZ[20U'~\eO kRy~FIco"w>oVB6*SԍB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Y@ r]ʾHA[h)@eQ5 @DN.;獪@ .$ @v p9oT)p) SyjHAK& Id{fLIENDB`jqapi-1.7/images/0042_05_07.png0000644000175000017500000002552611460407074014642 0ustar metalmetalPNG  IHDRyiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  SIDATxqLw~VӒ\S&bTQFsRBoSMʤꦆh[l6J^pKn V)揙Dm?tf+Ԓ bg?0~>?&G=y~}^s@N$, fxR p9@M+@mک@lZnN-'@` pvj91 3V۴Sˉ!@nr ؋dP6W 83y$C HW`ܢ՟@ \&96UK+/#@&LslHV^GL p V.  2ϱ@ \Zy2)@eRc#@Z28dRˤ>F z{QNt):Vuip2y`0{@ ([4E.w^qtup ^?  @2\Rr_x|`KhB/?{b߅G:ksM[x”F6&+v!M+&wozǂ=chI?o9zBE\[\okbWpzS^@ ly={,-]͞Ο0~]gUTKyMh|\T=m[ug%3pM* 䓻W@`90I7[Ra̬O~so]Kr?7+(XL-yz[ɼsyI$u D5e^" ~󎇷Y‚DkV@E} A pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( (i"˖&ɲو)@q7dMi~}L/0@E5DS ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D <0e fx?ۖ+dʹ A2pBl۷D2@`S  b*Ggg=G[]_vwןkvѷ^֛EۮMʍ*{}gCnu G;MyEGU8'|^[V{F:lޖ QKtȀ{xŰ_Wvmz946qs ΅|gG3GuB9ox Pa_ ]wp+R7fGuߛ_؆Zx^؁w]WTZF|UIo< wD7~k|l'coXPld?#I <EM}.ݾ!DD( ܞ >zZ"!o q\xr\|ɣ畳D`ME͋+WD~_o.r%]$&\*7vL[ʊ[ʴ&:Ƈ^ "ףQHbBU]Ti_%Vzށ#ko^=7囷!hobV@Qx?׼OGO6@V>" N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! 4fu2 f\mm+ H[TE  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E Xw2[c7kT) D"6nQmƨR R!dm3F 2 @ l1Eh&@eیQ/,@LEC6.fz@ eUN+eI"@jkku=O24@ z-jZ2)@eRc#@Z28dRˤ>F piepȤI}i  I.*@@ \&96UK+/#@&LslHV^GL DVmm/DEɯ7?iu~CMgŷ("/Od1nq?cJg1}|l4J5B_ӛ~zӏ.D7obՖoR~"? r{SȔ]Ӳ^+\m5jKZYiX#Z6xg>1/+|]zPuz}iOKHEm-zzBml6am1Ќ n ^% ݏƯVU==E9E቞3 =A?Zu,''L}[k9GQ/ˍ99Z;z\m&vӽUN֮״%4=|KhaYWpܥK4{cU+Vz[~Gj4[rȈU#K ]#}NCr!m946qY%WΆy=N51Ƣ5rUYGV-]{_׀잘訓./^c`sFntj<ة4 w thE.^E͠-R{p6b P"iȪݗ 8KÀW{xrOłibhLF5Ȩ")zP$$jqY1%hdž7hZlH`7|h1mRz$-+~jCVayp ]og*=.X7wXC*Wt'~.<;;;3?B~ʕxۢW6zdO&>a٩? Ɂi=.\o vikNef=?_lVyyɥɹ^yZyh/[sojEy{xr\UK /jCd qXǛh4 ?ko],Wp<~eqy|!5|awq[`7k 6z{-%e V/|1K&VE}"w\Ti\p1m)+n)6Yܗ_;`/*nrQQܶvcn&ZLeGwߗu\^}+pԋvj#|{C۫eJFbX!r6LorVj3T OV}OGW!j' xߐ)jt fgff}?X2/B>_@\yYhQh*gd+U %Ziw␬ @K$Q}eWu&~iϒ+fRZ"^xBv1-u}ʯf*粖+,,}W]+>ٓwJ S`PPyc}ϾZ[20U'~\eO kRy~FIco"w>oVB6*SԍB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Y@ r]ʾHA[h)@eQ5 @DN.;獪@ .$ @v p9oT)p) SyjHAK& Id{fLIENDB`jqapi-1.7/images/0042_05_08.png0000644000175000017500000002552611460407074014643 0ustar metalmetalPNG  IHDRyiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  SIDATxqLw~VӒ\S&bTQFsRBoSMʤꦆh[l6J^pKn V)揙Dm?tf+Ԓ bg?0~>?&G=y~}^s@N$, fxR p9@M+@mک@lZnN-'@` pvj91 3V۴Sˉ!@nr ؋dP6W 83y$C HW`ܢ՟@ \&96UK+/#@&LslHV^GL p V.  2ϱ@ \Zy2)@eRc#@Z28dRˤ>F z{QNt):Vuip2y`0{@ ([4E.w^qtup ^?  @2\Rr_x|`KhB/?{b߅G:ksM[x”F6&+v!M+&wozǂ=chI?o9zBE\[\okbWpzS^@ ly={,-]͞Ο0~]gUTKyMh|\T=m[ug%3pM* 䓻W@`90I7[Ra̬O~so]Kr?7+(XL-yz[ɼsyI$u D5e^" ~󎇷Y‚DkV@E} A pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( (i"˖&ɲو)@q7dMi~}L/0@E5DS ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D <0e fx?ۖ+dʹ A2pBl۷D2@`S  b*Ggg=G[]_vwןkvѷ^֛EۮMʍ*{}gCnu G;MyEGU8'|^[V{F:lޖ QKtȀ{xŰ_Wvmz946qs ΅|gG3GuB9ox Pa_ ]wp+R7fGuߛ_؆Zx^؁w]WTZF|UIo< wD7~k|l'coXPld?#I <EM}.ݾ!DD( ܞ >zZ"!o q\xr\|ɣ畳D`ME͋+WD~_o.r%]$&\*7vL[ʊ[ʴ&:Ƈ^ "ףQHbBU]Ti_%Vzށ#ko^=7囷!hobV@Qx?׼OGO6@V>" N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! 4fu2 f\mm+ H[TE  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E Xw2[c7kT) D"6nQmƨR R!dm3F 2 @ l1Eh&@eیQ/,@LEC6.fz@ eUN+eI"@jkku=O24@ z-jZ2)@eRc#@Z28dRˤ>F piepȤI}i  I.*@@ \&96UK+/#@&LslHV^GL DVmm/DEɯ7?iu~CMgŷ("/Od1nq?cJg1}|l4J5B_ӛ~zӏ.D7obՖoR~"? r{SȔ]Ӳ^+\m5jKZYiX#Z6xg>1/+|]zPuz}iOKHEm-zzBml6am1Ќ n ^% ݏƯVU==E9E቞3 =A?Zu,''L}[k9GQ/ˍ99Z;z\m&vӽUN֮״%4=|KhaYWpܥK4{cU+Vz[~Gj4[rȈU#K ]#}NCr!m946qY%WΆy=N51Ƣ5rUYGV-]{_׀잘訓./^c`sFntj<ة4 w thE.^E͠-R{p6b P"iȪݗ 8KÀW{xrOłibhLF5Ȩ")zP$$jqY1%hdž7hZlH`7|h1mRz$-+~jCVayp ]og*=.X7wXC*Wt'~.<;;;3?B~ʕxۢW6zdO&>a٩? Ɂi=.\o vikNef=?_lVyyɥɹ^yZyh/[sojEy{xr\UK /jCd qXǛh4 ?ko],Wp<~eqy|!5|awq[`7k 6z{-%e V/|1K&VE}"w\Ti\p1m)+n)6Yܗ_;`/*nrQQܶvcn&ZLeGwߗu\^}+pԋvj#|{C۫eJFbX!r6LorVj3T OV}OGW!j' xߐ)jt fgff}?X2/B>_@\yYhQh*gd+U %Ziw␬ @K$Q}eWu&~iϒ+fRZ"^xBv1-u}ʯf*粖+,,}W]+>ٓwJ S`PPyc}ϾZ[20U'~\eO kRy~FIco"w>oVB6*SԍB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Y@ r]ʾHA[h)@eQ5 @DN.;獪@ .$ @v p9oT)p) SyjHAK& Id{fLIENDB`jqapi-1.7/images/0042_05_09.png0000644000175000017500000002552611460407074014644 0ustar metalmetalPNG  IHDRyiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  SIDATxqLw~VӒ\S&bTQFsRBoSMʤꦆh[l6J^pKn V)揙Dm?tf+Ԓ bg?0~>?&G=y~}^s@N$, fxR p9@M+@mک@lZnN-'@` pvj91 3V۴Sˉ!@nr ؋dP6W 83y$C HW`ܢ՟@ \&96UK+/#@&LslHV^GL p V.  2ϱ@ \Zy2)@eRc#@Z28dRˤ>F z{QNt):Vuip2y`0{@ ([4E.w^qtup ^?  @2\Rr_x|`KhB/?{b߅G:ksM[x”F6&+v!M+&wozǂ=chI?o9zBE\[\okbWpzS^@ ly={,-]͞Ο0~]gUTKyMh|\T=m[ug%3pM* 䓻W@`90I7[Ra̬O~so]Kr?7+(XL-yz[ɼsyI$u D5e^" ~󎇷Y‚DkV@E} A pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( pM "@d"( (i"˖&ɲو)@q7dMi~}L/0@E5DS ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D3DP ԛ2"D <0e fx?ۖ+dʹ A2pBl۷D2@`S  b*Ggg=G[]_vwןkvѷ^֛EۮMʍ*{}gCnu G;MyEGU8'|^[V{F:lޖ QKtȀ{xŰ_Wvmz946qs ΅|gG3GuB9ox Pa_ ]wp+R7fGuߛ_؆Zx^؁w]WTZF|UIo< wD7~k|l'coXPld?#I <EM}.ݾ!DD( ܞ >zZ"!o q\xr\|ɣ畳D`ME͋+WD~_o.r%]$&\*7vL[ʊ[ʴ&:Ƈ^ "ףQHbBU]Ti_%Vzށ#ko^=7囷!hobV@Qx?׼OGO6@V>" N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! N"c !8CN E! 4fu2 f\mm+ H[TE  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E  7'T8E Xw2[c7kT) D"6nQmƨR R!dm3F 2 @ l1Eh&@eیQ/,@LEC6.fz@ eUN+eI"@jkku=O24@ z-jZ2)@eRc#@Z28dRˤ>F piepȤI}i  I.*@@ \&96UK+/#@&LslHV^GL DVmm/DEɯ7?iu~CMgŷ("/Od1nq?cJg1}|l4J5B_ӛ~zӏ.D7obՖoR~"? r{SȔ]Ӳ^+\m5jKZYiX#Z6xg>1/+|]zPuz}iOKHEm-zzBml6am1Ќ n ^% ݏƯVU==E9E቞3 =A?Zu,''L}[k9GQ/ˍ99Z;z\m&vӽUN֮״%4=|KhaYWpܥK4{cU+Vz[~Gj4[rȈU#K ]#}NCr!m946qY%WΆy=N51Ƣ5rUYGV-]{_׀잘訓./^c`sFntj<ة4 w thE.^E͠-R{p6b P"iȪݗ 8KÀW{xrOłibhLF5Ȩ")zP$$jqY1%hdž7hZlH`7|h1mRz$-+~jCVayp ]og*=.X7wXC*Wt'~.<;;;3?B~ʕxۢW6zdO&>a٩? Ɂi=.\o vikNef=?_lVyyɥɹ^yZyh/[sojEy{xr\UK /jCd qXǛh4 ?ko],Wp<~eqy|!5|awq[`7k 6z{-%e V/|1K&VE}"w\Ti\p1m)+n)6Yܗ_;`/*nrQQܶvcn&ZLeGwߗu\^}+pԋvj#|{C۫eJFbX!r6LorVj3T OV}OGW!j' xߐ)jt fgff}?X2/B>_@\yYhQh*gd+U %Ziw␬ @K$Q}eWu&~iϒ+fRZ"^xBv1-u}ʯf*粖+,,}W]+>ٓwJ S`PPyc}ϾZ[20U'~\eO kRy~FIco"w>oVB6*SԍB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Z@0aB@@Y@ r]ʾHA[h)@eQ5 @DN.;獪@ .$ @v p9oT)p) SyjHAK& Id{fLIENDB`jqapi-1.7/images/0042_05_10.png0000644000175000017500000002372211460407074014630 0ustar metalmetalPNG  IHDRnixiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATxL[ǯ', iHD#& bvU֥55@ LJM)ԠH%f ? F`l&Jը"[ ,F)5I.v,y羇)W0?Ws=s| @ג$O  4 d"JB ,@4+V @H&ЬdZ-  k@ @i+@Fxz>zA@ Y?Lht@"po+R؃l%hV fJ [I16@Y=Vfm%}  +hV` Y[IcJ+1؃l%hV fJ [I16@6Y憆=]= n`300`$5 kxR^,~hƶ?uhk阺Ocr ذf)*)Ӌ]g/R}ļgrf۲)׻PPH*,&ݚZuoJ!T7U3&yƺlҜy纪J'A&K_^blqJ!5㭆BRT6s^ljn-U(]37\,.4+  |a˹s| -czS1$cQc O0Ty6cՓ)Z*6)\Oj0ګfq^ΚV4}{Ƀ2u4l[)7VitJɌW!QsXT#f" 3F(Er4嘢햦sby'ݨ=E@s1q=$US&-z0e2u=@iF2\(v>\ѽ5"Qs6~oHR)=yX&Qxwx+u*mF֑լWK֎0wnQ[)=e|ʞ8,WEd,4HJ^E;R=4s@Pl6MDTu/ZͬZ坒DzU;* 8cluc3/+nGQeUT0sT_/=] ur k|%|Q`l;+  lbTi2sk8V1&f=TYz_^zN0b4ufh툯v3ig(s{@7z,1M&yތhw^!-ɤh2AY{Rտp 4t 6* guUAj EaUswWsCodԨPw ִO˭scܖJiYn77TSNM|Wŋwj3cOa#6*J{lN&{͍/2[)/`Uirj4$/B-,m[Ł*9RMࢴljnǗQA;w.l٫ 4hxzE O߼^Mm wk O0'әF'{e'+EqXy:5e鬤~ T4 v?StRcui! n̪ Vj4!cQћgl3&?qj魧N>hSr47\>'E.0ԛ)AlBҏ@DaDYjݨ+u+)ٶ5:58qKk->\e$!ZO${;WJ5buNM.pѸsۆntO%yrȚez.n)1jVW4kiDMO̔?Ǧx 5'zZv=5.o]qǞ|v+!RTۦXOΠ K5k=0зSlsJT54 @γ"ܾs]:W?UH޼F[c}{jliyzGAkn\o5Զa$U)ʧx'i*5دr(qڬ&su,f{T@Bf^oH_z?n?aBѯ..M4o踜e=TYz_\Xz38S^}Φco^j"sO^sd[4xU_T0vM#MSu蘖 _sy.W>kd{StU~az^o9PT~n@b!fosm&8%?'pgùS J!V{^U)QV98(M&(WS<(%۵RWuu ~^_ZN< _!~ASzjɸZ#\ '91_P[W[@Ox Q<,^qb4>҇瞰SsTD}~~ >._2tM\K@7%`wH 66T< Hg5'xcݧXQާii?۫卂nXt0i~YRG߲ڝ-*U-0NV^^򓌬dyJF+Q@yšg>JWcQ@0j:j3'œ&N#CjٙWgu+:: &͊7QLЬͤ &͊7QLЬͤ &͊7QLЬͤ &͊7QLЬͤ &͊7QLЬͤ & zsH HI@po$$ hV,4+ H0HЬY $ hV` 0Y H@ Ь( @ a@f)@YQ@ @?VuIENDB`jqapi-1.7/images/0042_05_11.png0000644000175000017500000005423111460407074014630 0ustar metalmetalPNG  IHDR7iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATx}TיŖ-lp-NcNcugfMF9aqNvO ova[OB5]6X&=RHDE4İI 6Ē-Hd}f4H?[swh~ܹ3K0!"XcBD"DX ]C$8 E nZ" o@V-HpvD "j@[ Ԅ7ZD`I8qĒ􋝮," I+kh{zzn͛].IHHHLL2 >oݺuƍ+t"#9 nm"䕑m۶uAc76o߾t:&D8y 7аIqYRRҵk׀`P%A&ݣU^dX;v I!H<K Jx|vLnP" y$8"DD ."Dh4[AO.41a+ $L=bMVO*h09_Z؄<WO$UW >#!n /|'c"4Xl>?fi-;o%#3VWOeT nuE͂ 5PR9Xxݸj+;G 77PR ѩgv$TuVRŢaz<.I<{̜ݑ€z%ȋ [ELpF.ᱜj]˹KǾ] Wb0LǙ~4:O+.!!0]- XzW.!}c+Y!.9 OIɄ$Fg?!;Pjr8jat6e[BKI4fr~fg͛p`߰ad[Y< `G~BR'v0+GGeICgge @HWC;)XgU~IUC%4MH8P3_˲Lk΢r)g79M4M,TN=cm#&Hshڍ}T'uRc͍̰otU:D[mֆ)\Ohgn쾰zŧ09Qed`m#837Hk&˨u5ZpjKqݯm$Epz`)_g+JpjO1+npN&+;2u\CWsi|QOp8irʀꭌ5)m6,V7 (M|i[ =}ِgR&mX!5z37u}S>Ir6B5vJVSvj1O0 td[uԨvۭS 0x$gC֚`(@m8ӝ ?ɷG{蟾~8ŋ0ZE SO/)[+M زivdʃD+ZvNW"[-x1WMz*%ʁMLa{ͅ{ғɧ^!Jrg Kh|ܵ:pN{VZdW/K>@{7Wz)}|V!5ٞ_R-=NOSro|Jh3s歹0ܣ̈́$|6d;uޘ|m㻮N9IldTlݜx9_.x D F7kiZ595xNOg{`uNt?11vM4汍_ߚ2̨,FC}#u'Ro'9eX_Osa.\͙BHzJ hrOrh_6m%S8,Չ)6h鹴O{ za% *~'IM$) Jm*٤ܓagJ[?kWm&''c/ZĀ`*Vo{|ä. IEttjrCtWC n~d۴5ӔWG ~u]׈<-;15%It'̮6sa9ڱOK4pMb~kqM+Ly_>U3L߶޻!Z F-H˽#KIdr`}͕S'hgms1o2oL՟K#N"oPlMV~<9w$UL` .xHXH"0oN{j>VgG|e=X=`Y Bl$;" Cym̄'3dC$l7+*;vF7uG˻d^wN "hy(M!;}F{4(Qi kgЩ?E{46b<|+Ь;}P/.y6 UЩE-e?y`|մWA^ S`A~gxU}JG+j*.>wCA+ㆿufҤlGb>_xqˣ΍9!S7S[TTJ"5t \k]KvQ\Roku["7;}d?x>-FHȌt|gӥ"SeVp JKg?\3Q22C _NҕB0DVS?4q" NЩS+| {6^nKZ#u9`[^[p75 'púMX~&׽!-u (M7D>Ƌ& 5@[nކe6ϭ7nݺq6ܸw r)>.YꚀ p G,(ݦ(Qk @踄 ׊= <ކ  n%o$ p7$?3K+Be!>\۰u*P^rSZ7lH7 +DEOxPmmpk}<&׼3tr ou*J%z#7,G8V2W*4xJ^h W߭k6̄`ٰTO1lC hay u*T8?]zatet[6o  #j Yw"m@D/Pf=?k%jeI[=^o^EA4|^`X5-鼳Ȱ @sO{leD%x;u SuDTK"1Mv.MHo:Fr8[POo~oGeySgGm]DNi`AN#j;tGgPRIum!15]+O(iyƪW )Um>NO9"cU]:(߂pSH!! OTg ̗뽮"J n=n%A ̤3 ,"G*oF; |Fȯ_^YФ5B)<փDZgXTNR2 bAT h[fypd0u+3e6ӢQ;Dm0d/<- %Kêh1[#Zt^q\0 azC @򘷘L}LCXvg0,g9aF;V aۋ5}O*uP j?~߾F&wFHyR7vwV1뭷P2: B}T\?o}5"Y* rMv&-Mډa02 Ra*rG0 /釽nK^Oe#I4fI{WrO \,m^'S?GpazC)@^WTWFC)d"I2?#\dw3E)lIj& *W^y/}po~UQz<^>~ddҥK(Y h!58 y5Om?t5r(IPUn$,y}J՗3 ~-oj/uaEͿ붙ːˢETiweqk|Ϝ:UA*Z  T Y~Z0XaN4|77j Zk)9P bSLуj\i?{/Ю mCp~\OSIyk !6~|$TLr=δ .b \H+ܰ# qnN]7lئMRRR` T3a[5V[^= W- we2EYGMOLT=ƎF3c W|dJM] :aaCa d^ \$Oi\&6gnC7ᄅ0RCʨ?&F!7$<~;>< _ޙxbv bN~q1?oXJLLUkǎj:''g׮]p ,jhX ]!Ac_;Qgs)ߞwxIRtYmD];mcϖA"99p2+[olH!1&t>xdN[y'D"lQ6LK!Lw'(=򝮑imG8:[&s(,, :TJrh!âcf;Sr 3R.>#HJԬǿK2>mKkw] 7(J ;7:J@sOy=@WNj ^dEo4-wZWE>zOZ0*>+Vq$[ڊv-k ]':xO{X.=t i TK#a!Ÿ412ԯn7-Vk y^_dQaaX{w}^^HB峾ey&4 5VpΘ41)ןpRis1>g#{fH35sGKD5^{l6?p '$A˗gG񳌦OYDP׊R9>--#MXYmɷffpkl59i׬v):_ [`F=K)]ޝB&"@, 暄}Ʒ woKg"=&)hX$|ǭTvKjw)]EL 7OH 6?;-3S8`:HOFE_it6~]>-p>5VrHɔPU-֠]+R$g aBZ0]!H "0E8^*uphOhu+ΒBcv Ah#JJ18~Wq!E`kpnx_LaagFUoMnn txH{4/bsD`O: +8yBǨ7&$ZᨐcSZ 7+P {$|-0﹀CJl )WEoh,d9հ.j{@S;rFPn?P :4yjN 0hT5TB1W ײ,ms{}I3 OwtTvtpEUg8oPBNsQIÙ&:{I׭{(N]EX_mmrwz@?+'j`:Q\HZ\tLie#mG{IJ&D`)'Q'"'zub1ԃ,uD}I)_ :vkt*ڸjA'dbTτ SLz&,Bvc_;#A_(yd5FF+ ppZޒvF=vhF},_'vRm5/ M7qZ >&^Teh7Ntw=%j "Iw6iR X hгޛ}cSCs'T JX)7ϦGqf*;>yo&=1"qvhkSv>l29zyhD|O@'Ʒ >:}ZޒҺȬG73s@pNJp>-n AMS],&zbBLQ:$G(@fCb%g̃Fz#y6cI28s$0`ռX)sD/mрD4;{j#4Uփu#+!,pruA\J '''ȓO0BB*47%W:|Xꃜ GpSEM6D`qX 2s(`?c}59/\Ku ӓlxϥ?H)_(Q}ᱍ_ߚ2aNYG~?([XJ!>_Dqx~zƗȪJ;WAaby.@%qJkf`olCmU7J>CҀ%%݅~|.U H, $8_ԑAO2]0cq :IElW0fyҝ0_ g΅$~u]׈<-;d35%Ih"Q:s4[|Sy-o~t_Ka'rG?HJws IDAT}o)_)#giN}kޥ#D$ypfMɥv}ز;B%A mċ HͽF-f/FTXͽOW `4qTܮױ5o/.u>OYIckyKt95fXS:M dZ}%'cl 7^f^G {$|mI@y18"$wע`8 ,H;'nyjFGռh_ZwLOýk))3n<9#CtF7 홞q䭙">'7۔O-v P>^tYDVr㟯DdP<_C #k > +t*\ZAR!/Q9,L 𳋲'UZ,b"JXK+_]7Kv䯖22jˆ3[^˛mHyUn"DΥHA5 YNv;e UOs@\ 5ĕ\婲MF#e%N/D!s DXLm @$E;CD n1ƾD`QX(y&A:'m9蔔4yiH PP$VGF?yuX9,\ WB{% YAV2;ʤd('q+'qG&7y oPY͜n}a7+-dK4sfy3!OݻqyFQ!A`PNu!(5-!*o瞺ҵ 9 <m),Sf\JFr8ʶ[Ն=ӃEόQ-`H3 mUL-َrhc 'C>U EUc `"f7&D`9"qֈ;x$|c2jj,l%2DȗLFPzT`Ce>}O7b!n%u>F3ysqQOCu谑J_A baԶ -z (ZFZ)\fN#H@_~ۢ0'zL5%zaJo|~Aa,TW8`F} bVPT$z(V׿,KWeTRǫuZ  RHHJ*r#sjàg0Zn'f┐ 6Rd7@e\<&T ҭp5"d01?,5.&31HTY2f."-Bt @NQ=3^Z bGA6I"}L;Zw˦ pA *,* a (R'$9 j8ץF!uVmxZqV\ =PxADL85hb'|z]8E:076lSma-fD4h6e=D5a$s-n#X7-;eXtm}׷D,oEv$_h^D38s4d %$nau:ҡ|ɗrm5٩R}wEl6K; hAwJI:po@̍/_\Bw}E%D:f?e@ .icLuʾ䊃[7~miȫ#eei;&=鮆ƒgp$جjGH}]!|-j7}c) A<49=t &,t߀*8ǚ:bF4?1ryl]ǪYҢʒ1Ä{D[^Eq8GVQQċ B49zaF*j*~_lv-K.-Uf=XL}p ^( *A(Y)aI}]$AJ}wnJ+ s ^; aZdahvOhj(jߋ8 o.2U-g.}rkpokX.^xet:o޼fƍׯ_zjğbV(rS%4x-YrV{mzITi* I[93!fn놯eqH /R6'8tW}*hH=gJ ˕i Uqٜ$E%T>.۴)PW:`z4)ޠao qp3,<;CƧuݾ})O-&D 1q+Tb!WYJZx4ҶF#aRl6P[ DZD!7W1q|M{Cs1R $dddzyw ˈ |`E߅ Iq0}k.t֭s>M6$dlFHgix骃'̤CG`c. ygpU7QY eتOSb/jWey(b&n  Hpkm/¼ qA|BPLr n5GdqS./m.:\$"c\OapD n@p#===&=Z+`pCUxGs܅T؄fffYW0ĥD`O2xƛKVR[ExOCIUIڨ:g#C,I`j^rn.0elSSS p3%5vX09/o\yg%3h_5\Tg/\seN2# _;AGi#vI(,C9ڦM׀ˀIK.A>'&@|˻{ =~|*'T7C%9-E&Qfliћ%%CȉsyHF\,7mK D{pe>Aq7l0667xN NZ͛7{;w<;Y,x xta~etGUh@*ftT7uvr9:QWc/o[@vtT2ܢ3|n<.D")Pt 4t t54O(i\]UEE]pbHHocMXlmmzoN Am#UrsBL N߹k΀uT {*W;!u=M X)eNQa+qpzSzG/:t2vշ(]"G~UaR䧚&xL$NV-TǗn5Zez߂PLAu6:.~Kr }&UIߣ뾦F;ѵvrz}_7טB$$/T[7[DSa05 *$,y ^kT-^QaCoVb0la 9,xy_a,x*U?ew9o1q!@sw\X؜R5ىPy6{I\J/GTe1ބ=#\=:: Yϯ{OQ tlf'+I߫&}wѼ=ky H\W}iJtڻB&5,HWrf_jњO'?T5]Z*w$$©.ܸLX3iu7@Z-H˽#6=gݟ>?b8'Nf|[R)Wcil+QEpyM>QHWm:nُ<jAzzۡiXcA"^8@VQϸ3}ێ{/|_3vp9[qcp $7p,b`g&Kuk0zT)jT0Qix+*! @a&"Hp!B@(#/xw,AA~1>VK~ :by! %]j;F"݈JżhW}y}O4Dg@88>Zmۯd'9KtE c5z[D\ǡ-~#}k-[F>E;2@8vDXD&8TR]{#G8 8F8|DXD&8]a#D`""ê80D`# Wh] D`y"@pyQ!"j\]`-" O.1*D@#E@dC{WNʉ#]D&8\C(W2x~%;7",\`@%A ܒĄ""\7&@'"H ' !@ nuG"H ' !@ nuG"H ' !@ nuG"H ' !@ nuG"H Q-xD#,BD`y pĉ0D 8h}X @\8SԸD`)@[JoD+Hpq#R"c߈"W /:GD n)ǾD  ^t KR}#@\@+@$DF"Wx9",%HpK> qE awu5~w( Q*8Not]Ξc|I̿=.Q(`0c#ZxOU'OybrD8s_߿'Yz_51N˹szEͻW*4h3)ͯU..\sbsueCs &[,G"?Lt=P7Ӟ^o\LL&9BDB44xdh7V!bLJpk9ݓ(aň"o8s`Y~,iIȩ:]`i(9STPY^E L%&$hh*J+-1j7U_V EtFgqRۆ$^*ryBNS8g ƕҭ 䪶5Y_~L-Z~U'tIc(ls˛~'[RsTR9fcUE MUÁ3" aBE SFިij )scdO;QBdh,՚FknDgnHaC}!dkF@շ|v Gns#5&ōFӘBxF?jk|Ǡm3Zʠv 74-, YJ&fs_ ŠL:U5wG# "E6Fl7 8=->bө)!괍&nXOkntY:<4RBfzJYCwy|luZNn02.r:ʵ,mrk4D'8h;0Xl0t+F@@Dv ѹ-65޵lrN0ݗ{xgNȸ IRm%97U~u_̓;˳{NA=,ډ:[t#! %Z缱ϋKkT{ u7?WzɖsU'˪fBt!D j .2t\(9 c; `ägfotN~qsNAdMiF~j gmf\vҠ)HЮ3͙Bb,hq:خ/XZl&c@b@;=ލ4Ĝ3cӶ'p=(+,&z:J@H#0`3#t& y{ܼ 7`_k^B^1oBaļM`[a)&wJky'r s"7f=)NIBNN0O?lxzw=`Ѫ~CHSoR58eou\}$-T.?ފVeC!9z|-(]Jzsvݿߟu,4e5eɃO>Jy@ pjs}ѬR0..֘ n m׍/ܣ}-U^zP93D ~U/^jv.^m xFzY^Eemfmv'= M,3B$N uBU ]b@D "A\aPW{둂 C\p¬Vˈbwyu9B $Sey$L0xQddd6d(R22Cٸߕ3"O"B,jyDn 鳔%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATx\_h[UEl2*JpҧMK_ a}L}` =,҂Dp-HC V\ w0RX"K$97f'-~&w~/|Mjb 1F `H $Ҁ*H0"0 4*L! bC (9g`bb  FXQbl-J7:tB}:Fg\t Fѧc$}E^`t}:Fg\t Fѧc$}E^`t}:Fg\t Fѧc$}E^`'ctd2Ǩ*Eļ,oqޗ,Q9qDkƮGưGSO+D0E/t80BAr8""enͽ4O7>'*㟦bx>3 ('  #/#9 9W?43:_+gX22,K\y֚MN^uK4(wt@E6i;L>3f9ɪXl~~'l/wq3KvwHھ?Ɍ.~90#d8܍&fS?f6b5]91:&1?Pcn{w^[orFM⫲ʵkZARpz.yvklgy^ZH|mY]s,&V3o$ ,'e \!Ų`+ 8 O*zEs,Xbn;aDI8>cR&FD-ILZ 2 .>MJc̏E1a)$+-`q.)`nUsL`g!ǀ4;ϧ &|+xS8Z)BN`~br\S_~;_F. Ӱ}~yGq*5@FRr*=,&"Q[/qLv$ْ}RfɶQw1>iutF/->ry᣽Pjжxse&3@!!b.`H $Ҁ*H0"0 4*L! b.`H Z,̀I|HӒ:dH0K$hɦl` d-HђM" Z.%E1@\" FK6 `c kaIENDB`jqapi-1.7/images/0042_06_02.png0000644000175000017500000003013411460407074014625 0ustar metalmetalPNG  IHDR|T3iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  YIDATx][Wzs%kWh+Y)7RdE2(Zb?!GE`)6ÂeHY[pɶ]F+{! 3K{f0t}N[7Uy,PEQ mUSE 4 )@d@` (&@0 4I:(( mÇwT8pW5hdn|AR[S߲@ӿە)-kwa 4˛]M߲@ӿە)-kwa 4˛]M߲@ӿە)-kwa 4˛]ٺf9"4M_KmbX8wL~q֍]C'{ygv߻3G9o{VgDugG0kxvL:S'x^G8s]i/= 8}fGr~ZāoPpS PjDؗw?*/ɮՑ #W oòlDVhh0ĤڶaBW; "iJ'HӦc{3^K X7]o>nD,Zۍ]_Ŏ38WiL"4sŶ|tKYa#:=Ǟ'ケb9 5Umݔ>f~oV]_QujWNmގyLy'Bj^qOy5awa7WٟO.]:vx?WlcC>%7.SwiƼ[S-tWPFxlOA ŻHLMCޭβW{{~+ok^q;}isjR?egjSx,)z;LzSRc 9Yp@ivb2<ӳ%ކwɐcᄊ(CxWzJ8āHED~`S©ҫ2"([|]}{>|?޳7%X/?ĞF[eۭ[/>6Hx_4(/v,!)bؾ4b;Wh|LyomXҤ7ߦyҷ[vIo![mxicͲ_y+}[jq=;{4-ELwUp`bλu_U]vq٬W\'7%審kl5u-=e%>uǷUEu֠Ķ_扥0 4 )@d@` (&@0 4I:(( M` 4 )@d@` (&hۧ?*>$ɾDuuJ==jx 4G} 400Q_ͣ@3L~ԗ@):) %*Z6ⓢgƓc\*3*ˊc#̯EC11lD1l-J"3:[(9f5@NzpPD =ATBBsa Z, s?ץ/^k(l%E~O&ɌP⩑1DL:4tE8b&@\F!<3t:laf5Rv2p" k4K] 6F("j/v@Hu!x[(MB26DH;8Uio&MJW'x Hn#)m̈́+:JqyJEϡ (3W#0:Ua J JO(4դq6ݨŮhR:X4 0u+ ,_J<ݾN/Y+yנ˺Ȕ[^_-Iaf) uiPЖﲥ rNf{.r%]:c"IU[4̑2 ~#U?FPa~o !|f eA@%%g=%F 9'_M>$spH}*iSnUzD@FI%Yx+IU坓1,oϜ,by߈o9;:Q hV.k-UڷVKjtV}{ 4cX(h^ :꾞9?"XV/u tXfuSMٓ`Q' 4?gΉN.wĒqRr{֋|}dd9MKz[ulo% ]P+$;\& <޿fI0T\'Xw*h'^4P.M4߲82>>GՙGZ8O9r[*@\\BC$(hOR1Ҷ#I<ٗjU]k%l8X ė< 79 9{|'҂07MmC0[JGMUMn%\"/aZ|o6º3&ҫ՞{PmV}>V t?yR7WE@P D.X(@pk4꧊q:hLo=ubJ==</\i7=h 4O@3 Wyx le$3 C IENDB`jqapi-1.7/images/0042_06_03.png0000644000175000017500000005545411460407074014642 0ustar metalmetalPNG  IHDR_${iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxi$yꮾ91c% גeRaa*lXG,p@Fl܅6()H}_GuWwwoV`8̠1S LWU|IŦ֚;o5ò=-ഀpW3]M[S 8- sWN w5-մ:|_}?Zm}njv'ﳷ73pġŪ{.kmYBZy뾹px.kmYBZy뾹px.kmYBZy뾹{k/닟zT=W7^^/y]+9^ߙoy^{e޽w{W׉W^ /U}|e-^}{U~%75]KF/P7 :g}USUxN3?Q=q=?_o<#uϫ&ۆP{nk{O?STTqϦS՟LWjVf~V^֟<囬*~o)G@)}˿,kyF_KvL~=/~JGǣ+oqԣ?s3ܧm{d{;7{k:L&{m^Mng }:zZ_;kgFҖ{dZg܌YjJ|n^0 g^^,}_Ǟ{{ի?,Xjz?~cl97?f~-;Au'kl6۝ zړW: pf^߿l7.k/ޙ/>g^0}p$?u~ब>ae0]fK㘬M:p^8Lk,W_,Kz vj:?zH۷+?|'5-)wzfg{kԌٟH` "իUЉO&|럦wG_DzT_u UoS~RQğޜ_fi};o-2`}Hl6_ʯ/Hxc;LeAZz]/YM=z9>|,zS/Mjp+Fz_I391}7^Wg&zV/~VʳWz//K*q'?iݤ8o~⟡Jk{coKѧo7z|Bl}B(gG]8o al?}>93}F^vor9j?KFDzRs/ٲ98t(;]cCsAS k}}ۿ6GKb{ݾ7~NJm1w6nhw㿇rDgP[8.kݠ=-ഀpW3]M[S 8- sWN w5-մ:]@ 8w5mN-0pW3]M[S 8- sWwZ5{&pb XսՇ`pEνՇ`pEνՇ`pEνՇ`pEνՇ`wu9|~n??.}\ɻ}n}}A|H[꾄Q-kt_^a 8Fs_.Q-kt_^a 88u__ibP.~r\U{D\*xZtZJ|ZqX*| uU>{ʄ"Z5,o[FFq tTRc U59]V%ZlQWimh[U~bX`ګRҼ<|W8ʪGjNwwtȹu)hg+~BbQGQWcr|?<86F=DYKś=ra*5:9IUGTFmBA~ut czS[r$~v,q{;k;d)m Z=ZtNg, z'584rU jYSZV_k Ug(Q_C?%cK_8ਬ9 99)aNiЪ=ޣS;b!-_dz 8i-C0n-'PKrF7PQ#_ʶ+<0A>@sVEu4\Ѝ_S|o\PmcxZNzg|:hZͮ*ͪR+U-#ڈ1OQʶ:=:W-TJ몬ʀT&O:!O[I0 v/B% V2J mSf)[.FܼCr_yVIQ (U_0+a cP%wza}Y9ˊ[UYG4:6(GM(񖲳[>5~H^m^ծc'Nh/Ɩ/(pMAdIxL5w3'˪TȨVq}Qnv_MlREn,l-W!_9X66Sz}m 6V)\w0(˯a4;2Af\m¤Ta;'vFK=A9"n؂;vnPwUWYS VҪ|֮n+~cU.o2c'UR_"x¡ ,*;eu!_U(Z r8V*,d?grsʝ8]]PvcQMBJu)r{OUW4 wA0ޮbЩNsj5n7[vyG-yy14IH[ZPB̞B<᰸]^DZS"/R\yX`ţC,yC*hTShs&(~98~7ob#8*j&JkKWFUXXUW>_ rWvV\0/P낪Bk(TɝTwN'JB#ƭaj6wv*TiQ<74i`|- ?.jU& &rn0:>lSP:|AE9j%%y+U֦N@}a} :ܑkpX9ԧrlYR ;Og\vfpuFJMEV4Qs)_|K^ jN,_\־?4<)އ 62È  [rT+i!ҫhL|y&ɧ5sRL'?0lԮtP#Ծ2B+ WQO|HOm>vkiūU@ݢ},]TsGzGu-  ˭2)Ő ! tabhQql15AP:>%exJ!(u(/oƣ^ Bb) U#>AuMu=R/XeUSYd ud=.Yc&IjoHGꆍYƦfk$kP4r>+AEawZu=Ak\VDRx}@#Rzz,bYKV*jϐJ< Te+cJb\`6̖wY1y63<]X?*Bwӱ>]Xэy@AgAWkTZ^P0{F0._@SPq0t)(Tiiӥ$4yJ(.6T*4NOsD;{ ݩIukT#Exj'}w䘶Aj<_.ٿv3}1MW]SeW. 8 Պ0J'O+W!*㵩}icPoqG!\=֪bP8vrא+Vʒ)Qp܋UߐA?~)\ E@ҩ=aaCOc S!ܚ 8Uڑ3 # ak_ҠV'pDƞ]{BZptKz 7rPuyOTkX} ځ8oj<`]v%Xnr u6٦ǩ6L| #`T rk1 ,ˁuc+*ȉu}&xp?M/3A6O4d#X'F^%O?",iR[a+^O>*a oblcgв0"bɽPiV&q Xr5kS^vJX]]x3>F D5VԆ\㶊 );0ЄŠ@.(wPӡEJ*Zcqv(Quyn |u Nn> t\[B?h+}qEdЖ.^o(MMw (8m)Nޱ1wK=#XիS|Aƞ.+׃0= 6;*vwI"w J Yo 7R!8VŶ.;"TE/<0j.pM,\m=%KiqM>gjk:rKN\O@)e&{W Y&ҋr#_;Tgv cΣnaN;)Tmm)D{h9ۦpl2p̤X/ԃE•(/KNfQb,Za͢cS2S¢ JUD+#$0rK J~mM«,[cἏlqrX.s ^}V0fG۱]®L̈7@4AcXg9BKws@mwTࠍcqe){XnJɀW|>q8r@\vUF0N+P/ ٣! UEaA%OWjdJ; a# 54&3n;V#SZ+gFu;P[:{uf܏eC^B5=kG:W|Z. 4FK'ŨFǏhעJ]Qוyۚ \4D>vFǎ;<"OV6̸-(6԰$ ٪l. DQr{Y"ēbf#B.I~>DbWcSr|{{ښYP,0xL7u݈UQ;Dui#`NKiukAYU_R\Sa^ 2Z暶8!1csp&&tllH&O4\IeG4>>G C3ˋPPDoFH+X>>62m9*:!X1FUK]'4N N1v ;0ʹSl^]*  %[ꌮځYE<n ,_>⚣mJO 9 I6mW rp7P1nO+AXFo ,e@8zl\c huCOYuP}XQkˋڼޭvdA޺]R2[TH[+txnBYxz1d $VmwG.*]^_@u4?!f](Ʋ0ǯ]=&SbJuees$"bX̤&NQ5{}1K‡U732`+˝a+HS,1\ѬUV:LpW_2Ad5'Oj-X˰Nއqk.pggob0+"`g5-dI{t*'F;\ƠFVn!wB`zoy aka؆I2P*-#z&M7kT5ܫNM.cpGVu\!>uZrk^U \w0{J;(eƭ1/؋ IDAT3U}Wі0W<_OƵv X <[n|uC-6QA>OSd17%3ќ"D/Oi8Ʌ @07ƭ1,H"?c ۔ּBB !X<9=]ްOfEuxu(c$W/SU]` vn<أpM* EEWW*#-Ї\W%8 7(/.^栚ɹ9eg#Cc> a_upqb>(ޏu:r 1v`sqk.pX4'o6ޡ+[{F{`_1w=eJ;>l;N<[Tpb8h[Rc6\.#UN&7chPd<5\+Eqk.pn1e4sJ^U#3TDeG%$q0mO~sj<IRX.S%E(#t"Dpe %ug miY(5yZit!W*6,Ԗpd#z *~(MJL]$y jK%R_G`jzSP8&!qʃ܎i!Ec<[s2*'hjRS, pha~dTvgVE($4S'+a>m|)Ok@,pig(j e(l0`Ƅ¥RZ:AQRl]Ey"HPMȏA.JJL;N'B$ܤ86ϫ3tFd'4zw@!MB,† 0Ucf;D;<BVk^BJpæ;[s)lʅ: 8XǖҥUdq fǦHgQlq XUEpg'Ix ǖ @!®ZH*pC(`﹢cC'hiNIl)q>pV)9ƶ(6ӱ*"F U\ ԺAXK<_(y51b;9d1 l5IrߗS r˨)ptXn|a[I;v)n4eEW }'en\O!\ ;Tի)!5+SLPl$tmC^ygUѣSm@0**te{A+H[Szݩ6==fGngbjq_~A92 S G"PA" a5 Iv9w֪E"6)#P j:+:h"9jpc=lB!91SyBQC58LJw Md{d9*ȁ)>9U9fe}]Ic`*-T X%MPi]PN^l1N,)hQTP, tS$B -ǴA^RDz׏ks{c ՋAZ4aMB"q -dj!TD9)Y*It\LLĔ}:=>ɺgayb,B*#I/0 *czaޟ&W|P ohM-ֲԘqU̓gubKUm&<"Px ,5uN Zyn`d45v<\5y0eV֗(E7 zjRM&(N2 ,R]Q(H4a=ηM=2!ܚ &ȉ$ eɑ6'*/`U=,rH$<'>sMmEkIpZ@ bziǽH kB1Ꙥ4F zL"p"$6H-,R8n{˰o,ސOJ؅8Ś X‹TsbX5VP4,Ϥ9TISg c'aܚ#rG]Sd'F;hũ>?ZP9Q+AâD 2GC1cmm'I!:HS)W-/mX U@®GP&JhQ]BKhYn8<*\zѴb.lЭ6B9PΗ]P3BG ӯӏ)K4Q.·qk:p,nJm!j01,LDMql~XύxY"wUO6RAZxzYA_UBC}PF#8!Wسˑxf'Z@Ţ6E(MV9..20 WH;)/y;]#/[x+0)-!S<s1ۿV /R+ xO DT`C@!r`ޏ`QeLV9C[*%U=gLExO`]jJEҰj"Ԓ=Y&ƫ I_^Tbvuxu(]SQ4WkpŤs=|c8Fw% &]֥2{@fV8ͻR6L9Cĝ}?HȃSن6IdFa,'-a\<[ P;it~Y]hV  Qs# vdE{ {N~d~ A&ݤ&dq">1N*^gYJec)kk2*L?2F?e e$4Dr &hǵ W 9'G!&s@Q-,#6ysa1`#kq4:AeLTN0='x",4p, к! Y|<1T!p987nW,8r9΁EuӜ5ϼ/DԷƧU~s ZLP_ɤU6>ClOJ詽0`h ժ(vʲHk3gӜ,t]>Ļ ikiiJR-ZئbWs;n/>uێCi1Sh׼Xf{*y$ߺ5yFƱw4} ilug7~g>yc44f<"h<:6[h3wx;ϱ~N{i[><p꺐F#41u}Fz?s=vo>o5-nn8]9otL1&gL=g18ulnvPl%؍8~yM̩w3v]GS~&S >:#GJLJe^&6̇Y!>1P>cykC!nٚǟ~Zgxg]5MW39˱7~a|LNMD+^F~EiNȻw,pXrY6mb$p袄 jLMR$Z\"ϊ8A^<;ZXXЩ'9W@0ul2 o!€-JSVe`e6I%W:2}Dcs9=`l*p̽^5ND Q>8afguGIΝ=ӏkgyF.]g4??WOR) ,X7`0F'_;oK/~wuIڕkz3(`0cǎQ>ԗ5iz~D~7~= ,.|QB^=~mV !U>7˸u؜}k2pp7o_il{aFp6lXMuȚUXQc|g%<&;a%b`Iz1l 5x?lh .nMkCF2 5+WE<v *s-9@|jd6vJt⫯̦4N|c榩'CpĄ5؞c&dwE8n[=0iVklv~'ɟ@Z.\d=Ab5A57^vXq7`@o]33ٱ9nخ1T\ 3t+60fنSZ60Lh|t?}f1YoFj`hg^QEH>`)8h!>lpfLC+vR̓aҥX4Sc^`Üπ7{KQ%Dۮ@{\aߚ {Y ,yWI-:Of62Py4͗frQ;g[#VҦ 3Ta*t4]RKȃ/a5 \ܓ,}f6xmosEqT+7L=ɴ6x7/v3O^ehf3 e}c73{>v=mMbYT~Rզf~04v ŎƾGsӘww[6۟?l5ldߍ[ASG=mi`i?h+:|7s߷67>xcC٠n3N3g!hyH1vv ַ=t??yB ݼېkt4fѴknX-FC?{~73>֭4~cѷYƸQM)8ʼQ*^c|=oZ[Ϭal+M9R>7G0 10GxEm3MLOښwܰ՝fQiE`( 7J1G`Pv_֦li_gJ0iacL6j.15r:u߾cyp@0 6".ҎpIc3F[3/Wyk*pΔ;p[,:fGk\N.L s1BXcr%FgQ#h>lz'{o)|(##5ƛ-([π~]jBHi]ݖS}WZ0Lkk@ 8w%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxxu.Nwީb5,Yq\N6+߽{Ļ>qnHlLQdGl*&)")`I 0̾INq(a"13?{ 2|a㵱qX0 Cx_+a8k6a86V`pײm|ip6l}Ἧe҆lZSO=n>;|򕯼+xW={9{uuw։lΝ_0VY'a8w~}`vp>0[qgȆY9 lŝu"sgl7 w։lΝ_0VY'a8w~}`v ;r_=@ƕřW/X |81g'O}pXñ]xe8z8= YlvK7mHF8+N9||+cm_w-x׿*9?+x}A&͇8d؇:L uӗ|D4\.璷~?O}PE$b1~s#߸ _wO]F*?o;BHP( n[#'C{x#H$Z̕=șE[A-:{_}_~9}mu˿u}}-Ň3%d|3&? s=D&eۑ3O03<їyf9sљ9ȟd}ϭ~Ox~f?2̍_̜[wf?}p懗2}4gL;Ge0_堝:ptp߿Y|dan'y_?'f3߉}?s`֠e6GfN=dAe8G>Fǧg^5c_MN{CU^u=_+ß=sd<t_[ _W=78T"[o~}ٟ{<7tRHt;CP%ޟd?CAWVll٭Q߸X/<ų>^%kAE5[gx_Ņ'8~_q/9[?d2_b4eY/ zd"8潍zGG<|tP_@ن7n8GqIo&mN&;+M76ݯo؅@7o@e -0o/8?+ˌ_a~N<οKSw7BKO?o[f݁_?Qۻ 5e[?6H? gë'%.wS'F2y꿳x%sq>coE$zobO2Uli~2C8|=κ_z} '8?|79cq#,?|(wrcb^_r~G8Bo.?+9 %|?8۸0 Cx_+a8k6a86V`pײm|ip6l}Ἧe҆lZ y_˶ ٰmKak6 }-ƗuuNX z%n\ZFZUsp>a8kcnG`7 g-V#p lZ\Ū~a8M^K0XՏ1Ua^{yݻ2첽~4u9llκ-m·k?j6 gݖ6 õv5nKEu Yp p]ͻfZGS r1~j "8cb&]iR%zuZ %pDSfN$#>DEBrhrLPKPȗ s!s l0&ZӐYrB0|B3HQ݅4|e'E-UNaPjtz׼!.CCT^x0p_/b|J<@<aE'uKFBgĩXT5It9ph}aA "r2$-KP(B*.H|&ο ?߸6SA"+H8\E"M(H @E*%q3Հ AQ2gi= 0f4 4܏ZEɎ,&^z9+n "fB{"Q4"ж>T7`o^2214%>9/Xaɨ^}9Xh=k܇6oIq&CU &. 4TBBU BɓJ!ycd!uރTr mS8Pc'ӃCX띘3Dr$2JЋoANZ ݏKX7á@4µ~Sȡg($*p%76[QN*jAB m*r.>-izr j((b4Ī<.`[׸ Rɤ 1{+ uRSfԊ8Go'8 ~P( 'zzqK!|} H HnmH5m.rKaYE?DŽ j61G !ՉaR $q jiIr8]B *_Ǖ<;a9XRRKL1"`ٹ ~~ný"Ű6>w+!i9p,1۽>۟A%Kqkr5Q3`KE5L"p՗a ǀީQC |3Lt#CP?=6󳜐DP %rd3FgơNpcA6@!~ 7&K<"ނ/G maӦ"tw(t&HDPu^DLJzWLٓ/pN,80BPb9B29i3s7C.C֊#m ݑ"5#^fФ2ck֋/Lbt+Z^i8 Lk 1^7a  )UZaހB{1J MuQ^ ?smH%}^C) ~Cr;`ꡗu](ii-{LWnqӖA"?2bFnJ3fU~SaJM;,ZHu #LS@g?y@,A@cϬ0w1bDJ63= ~a9F|X48b)s*?L54~tfn(=w(߁txjD :XIY%[R݊@dn#W I=_!URUCJ} ᵟ"&-V8 p_^)>CXN2YSvnێ\t&6Puh QYRS8 | 0FHvTAA\;k1WGB!1#SgxRz;9AJ@JeAG&ZG}62=`nϧ 3K(]<VQ5ufQIb.3 A"1Q$DN6"iq>AVْԞ&kZ7Ihr5}SЧxנZہ[ 00?BA)}Ǝ.^x'aĠ%04#@hh#c(LŠB[uX ߣF#-[ay +jeDO(Gam r[af5]>=>% HE/K 4!<"L30 >b(05a 1zAS^5$LXp 2 0Ifp^bE(aǣ&3(LX'qYǫK!YM4s .6pF=>}m^q k߼S,4;硕ShH&pVlmDPz^\^h:9bI*"!LKNFA0` D YPJ ݕйH wZ>RJ$ sR51qADaPe:惕MH廒+#9혠RŮf@Ē˜̏olRX=>O=Okb9f8YPDpd.]C&]K|ɴ܄i>m6tO. zB5KFSHM2ɭs .X$M֛&q(]F%kb-f )`΂yYa&>/,̓Ih$a ~<@r XMHྥRu _#o>߆迢xR T,ʼaFLބ@,B|K)b%&٢يBtm\G׵x P Tދ“aL`sB|9>?@?IvA,z )1|QeVfOn40Af+sYWAI)@Qߛ8Vh4:~I rNdN]R˦{H5KTLWlU砠ۘފӣi[f4 9ڍ?KbfƗ1X_kUpT7Gfx: ,{1{ r!n)3#^؋?-w pkͅNm2q|Q#Bu]=o`z~7Q ^N%tNyf2#`ʝ&T21ӑΰ<`#0gyɞ;^ƭ{I1֑瘩oE73z+d.D\mp\ +;JHƥ2b>x2|`?oz Oݢ䀙nbK]~z AH_?W` s݇(!f\QxB@ ["I5 LoIYȭ RY"&0:M,F)2sr&r}O'!'Vh.7+P_= wȍ 5>ڂR(IL޺5"$!f9KUrG*dSӓP1-Vq,B_ˊ|Tǯ_]߆1, cxI^LC4t$ wsIr 1Wn4MT 絘IrYgJ [Q"J:tz"R 斠gQFHq)oGf% w U9 w& $qa3<ڂ<?]kvQz [ XQU7 0cJdII"wW.351 )XXq"wjܢȈDs Rr`)cUhl5?&s+]g#B%QRZP2Y"u7䆪xvXHYV }pu\>C - b)=zs1Uk]uCMXmgx*zm%q?S?@b +R &ܓ[Jz1uN^1t2zp>y!" /=Cf!alنqM{?t܌{)$fG%Ն[2؏"YrN{aԩ{PgIg$V R4 ÏX7uOq@ɐD !Yjqrgq*ZwXO&xI5i(+L&agVrH65g^)<[AvYT \AgF٬W:ϖ0"HJŻ?[:H LBNr,6{gJH&h4nQ夋("j{/b,|'j(z 6nG a)BFQEbnlSR Y AyHzoPNyY|5b"Ef8Tlja ڀ# fN[98TRM4: 1%^@ȻxʍW@U,K0lBnF,oG[a gVU967#N9۰1ah%7UwIgu+ԚϺy,KW cF#H3mu1bp>in%4ȵ1ۅ||N$~>em4WaŔG\$'SLN͘oOTyS3Yiωi|XBkg"'PM+L^E.8Ga? Fla,n%4^cLEDو g°`av&xMa_6;3F:ZY]$J# XH`PJRQ^1:Gd?b"=(bgךvBq^7K"WS64\8&F=N61xGq(p,,,Ĕ2p> c*+-ͰX ֗A!2#ja(;(;C(gDkvkf"DB1hQBq-fc "+bd2[qƎGNw>L VR7-F9 zF4TO,3˛e*@)gaM(ha c1E=^?CRjaNs[)!M3q-2ހ{jAj}WI(>L*NE1w82_#(:dEɟ7fH2\?(@oŌc)'RBb D,0M .v;\8/$0r!㦸vbRT bLD91'VPSF5n5fkTa((}MQ]:=7ɾaWc` cm<`CA@6X+Wɸ9uJ^X^yO e:䦥86V\L}3h$qK)֧A!S MyrK+CQ'q DӅ~r1j=K,n'Te<$RpME!֢20C pY5W_kȇ5%JF6bvb: ϳXHMc5!ey졢8D){7uͱ2% @);w KETz3jstr]}-$lS˅7/4gzZ wb%,,$Qi%Tƒ^ X. 4fv%l 1Ip˔S9` gpL-1,&v ̾YcSJY`m͉3?R4| 'ƖaTgMj}QIԓYF0Ɩۛ=Xzhe^eL^?C % 1tQ1bOn%l72z/0/3x nV%shdt"YyCZ\e9-=ּc%\%q?B;5XPxq'z ȧP8iE3!jCeu?_4`?ia.8WBFɆB4}R2:!aXm cLomz )CankOLu#jj_κyJpUs.&f6 VQz7NFePEzy$V(|"khS z`<}l1Mo6;6ogO.!8>b~l,c qrEC}A0MR ɂ! +7tfLeLmbzn^wʘhXl*Bg <"KEJp?J5di Fglm`b}fW1gz)ԚfpFtm̓rg0rE5v(4ƍ9J j9Ŏ;:NgN|]l>Ki05z0Գ}ؾ/ULh -Y ÇcߧQ ;+ga--CrɇTFs SMp0$t1˰2v[!q\.Dt e}x:6|$;I䧩{yK$ۉRKb&(ŖX;u1Rv!kX}꿇<1 1]H jbE䞌/b/i_X+G) "?O0 F]6x b6̂goJI3TojgPоV;ϝqA|bY6sa0fT,kA ' Ef$El f遪9) :OJjg"oAB3cv!F SH0We]A0[a%Ӟ*qv^I92f*` Ōrք"3ØauiJq%L簎fՕDB,voj ,: MJaM6fgj2&-4~my:Ì"ɶʌV<)tmh ULO`zz <56H>n-9 ~3ls[+SC8/V/$!USt˟<ZZl+D )RAz]"#'p=br\o,dVLdS-+hi)]$`dǐp80˹P|j @o͆7ϿA C:BVM5gc,=Ͻ@'a:7U]H Þ6}lfOR\!'0 &fUezd!B1Af~ah1IQA뉀Na@9{^ ʬ}}i$z&87+bz7W$f(hRQ"O$Mxdf[} gYi2Kjcښ-;4d7x0DH̑ 2m!fIX$d[B@Nh9(`V;' z@B2Ér2 fs39AjԖw+2/KWk>/CT H:!mͻ1>LX hyZ׺J4qhi(]h|v_c>UNTԉQ쎠={"݆uWDJw5!MZHS؝tDfI!L 9\lR}vN$ˊYJ(kg" St $"5p]sQ^ le*![J`v4Ī2aO0)h),9X䬓,`OimM$)E4c S1ost C! AMvaOlC)cnwa=!B PF%19N#Sc^g8 Iڹyhơ4pK4 aZMDy>D8[hHPORl@= wwog$|VHI xeϿi Ųma IfQQv\q.B)[Y|ge)!5DY5D2G3{r,[wa\OAfNun-+Κ CEE{.3.ōg1vȴ[Pa C1@;Ei5ZqVR 58f`xDq%yIlڐ#P*fg=yW'((_׺N\|ŋ.g6H UsOM #(;)KgGB}M0;+Qר7|:Uhz4!$)fM<,ߦzf 6MwcstlAͬB/&4$",8C&?a5!N^d*[.?KW˴(.Ñ-/1w@Z# GP)dy0COyYC>xzQ  XI$#zV̩ ) ph(GL3fD)dIk} J]Ūri\Q'r+HBlD̺R"[|;9X:H#%z~PSBcϒ*GjO*G-cn{B(i4=YEr(*fJqc+te> }#9`fU~l3ԅw82`5)tQuBr'ĥmֈSeqD7H=Wb /Zv)gt 6hME͎-n["7,CeEO8&>E>GJZpFCIRkH!˨RL^Y@ta4AxܙeVm4+6֋|CHXDH1\]"q1];HŘv'v9Q°zC3~ eIpR@&%81f!|_&KO>E7 Z`LE^vVY"1qcGxJV1^`6EW!`Piq,?=8[]aY  Yq#uμ1QP3Icw/p$\?ʁ*>óX,#rd[*% 53}3.{YqpM#<\aIT1`U"8e<Y /cu%CG2 I90ǧHr

p5}7Cd9FQ灻 ՃFjʲ5zs" C!ŊwgO'Dl1"mȥC4a'3~˘6SQq}s DZR$w={ 5i~EdG;18S1D@r/.vM~e$f@@Z?I#g9ODڼy5 в2 ~ .!\"vUERR*R #9٩ &3:98rŇl̛717T"`XT6RVi^BH#'m=Ѳ9`)8="tߍ!rSlRCdDlY׺*0ffgb\R -bnb g #7A/wk3T4& {c8ʊU /ȗ+q2Wbԍ !XE=)B[Jy <NI[a|ah[VAF>--5/C4 1aSL'D%ȷI !%Gzn01H<DFCz;4:8ۙ<]Q-I5ĢIsNp$9&#=skuN)5n~7Fnbe& İXsV5u1 }xJTqZb8qfr(hK9lUzz : [~}(&b7{M ac3/*R7Y'6~|B︁kJ@[[ 9-(|opxd>%A,<m!Ǵ>r΢Majk^ P N`J9:@cctn J VfK{ʡ,gE=\^VjD8 rz؋ rWShڠQg'A\*.GU̲jDL @ r (JCPrH3TIf} %]pEͥ`Wvegs*n\cwS2fY@ aĬ8_{j޹2\ |ETUb-4nuo y?Iy(s%l;}TǘpГika4 =^6EU}}!6Q̔;y;{³"4)e8w0R2Ɖԩ8Z0CosxS }wu2ZsrMheKM6>:$Ւ+dud>ˣJ1ՆhyUCƏPC*^#N,Ɇ{db}yJ&S8!aL8ؼ)`Oy@ w*[ؘe˜ A6|$U0P!YLF48ʫn=8O@Rlc+n)6qQG?C7q6,H 2Ƹfx24]d 93 oIn=PȘUАQR[E4 oF1TkJ# a.JgW`$`[IC.Y}:&fK7Q.p?{>?s).td;^Ax&MDq ÷fmEV L5ܒljUUvv!ڴ w_F9wƼB7"B'˔m T1CT3"Yar*8HV+h+eʛ籹|;}l Pء48~}56;qA@ʜ:Ɂ˜<^~Av]F+~,K9iXY^(g/ȉ+pPXA* 9 CtftgTJ^q|bf<I^@vZ=+rپ!da!jY)\YS<0#lc ;~ ,[q#-UDa$7ilVjwp@FA´҅r6qp+ lt. .66 Ϊ{!"*sVx%9un_bN.)6fVefQ)2y)f%I-iUgR梧93*6i2z R)b'%_&rA1,=߅ԮGߤlM{a]2)sBǒ{)]wYfwSl1wrD,q [#QӌfNғg9I]N0 'UTY# >)rJX!Gէ!z);ʿKY~Z*^]gqqyk-r*`'Aw`޺=iq@Ua2}sVK邈}t=а_$&#]?x - {K݀MnNhɪ2 FCr-Y]k6CyǙ(Xjb ޔP0UO;> 9 OΥ T/5po~=6->Y d/:iya%dm灃0Y]{HFXC\0)FޫyB)MRr1ZZJHgAIq{ ߂ gtFnG@ԟN7hvᢠXsd9ZMV"ā._DSifEZERG׫]@4騘!7pDJjy͖Tqu%K(@.&ج7o,G˞F|*:k'IYVf`ҌptH>Xhcy/AYu >E`Ca 4ϵ|Ng:o"wγWܔL4nrlPHo"8I^> g%C0,gF0[a=JxԩW+#vNUG6Ź *W5ǝp!`LuupI+YN@]I4M_^-$E%PtΌxXl;/ EbR߅s&LKpd9/KC$%ۧ,", .Is{b@!I-pSrP*kA+UGJ v}QZpfo}G>-pXI-nxI.N qO+&u t $;j7݅ƏzEsA373%՘l ff9zƨ+ u95JZz*U#]K3C@C;b>?=‚$?4'I/PŢbHLrvٮY>O#k>|#fFyS2lx~jƬh޳ylC)c Z](;l-6,,dD<5G:E6 A3g*E%װ6DXQF~ Һ` u~<׮!^a<v<̎@E]<+f9#Msqkϯ$i鷃fR݄=}ch?ʊYv/j߳u,3s7z  C&q0'\ϡd2;kq 7/G`3Zu SR *n9# ƃ` <8^:T1Y^ ;[<Š\88SIq9) `HP>3FdraaҏQ,Uרq"^ʰ`z DY&wuHC&[$uXy>B*sA'qp &QhNaT|f NJ1.Y7~RO? * X e4v8urS9T?‹zơXJr<9|)[m!Ef3| Ժ|=778sxI&<-46nOA \bPɐe0'6?c#,.b1SCo3ɞ- LCJ!X9ٍQvi&)&O9w.`-+LgI3)U f+8LIGPl'Qz65!CNhkqSW+`S#i]g}xS Nk߅oﲛpYCO'8}r&k4߳e8-&L,&YU*[KdzKJ-[1)ԗHH~Z4b%Sc٫by u8 qq}'JÚ5BV=0{eZF6,y$PaglU"SekAjCi.ʬڿY'~NR$ lhTV̗تn~69)]m 񅨈 GRrD7+;6/"4t40v ^i0.] լIk}M*,rF~$Pro?HC#Q][rdT ((3*PHԟ k}qU=y H׃ZZ?l8Q-dg#˼b]y/(V84zýgم`-n:Ugy^`rv?A"۞iNdT禳mlY )+Yz+Q"^W%VV C״z,cF"u;(ʊcbZ!a.qP?]@V^U`%Z DH1Ȗs,I ].t4[#$30b cb}:@oB7Cb˥J6=̤2h9Y@PY(ORϰs{D $*iLtTs'i8Yߊuލjkn`f"5yXeַYF;y2:$,](l2r(a+!2|EFb1 bVKN6!0DvܨAYu[Yd~(HjL'=7 4sߝnTnNhk8t n ݽ;_ҧI tiG(K.j,|I*8RiWB*ksب[0'[0B̄€h6 I%pM_˶q/;YOOYE0? Q[dߐ ~gd TZA(e"8{e<§h6 FeC +,>E>LUiga b\=dqa)q鴴SfCu 4q3H-`uF3AT7t-R‚dJB+6R$;܌;(2s^RACTTc׋|ηvCY@w Ik1q!IXp%՘IoH39N@ V4$䠺e%;[1ZFWR =sLlJg7"qTS6Ry%-/GnXce@].dA#9ـy[GXT׆Zj$mޕh`NlCbW<M%v[ՈTlcexg\̤N@ƥb/B\̀<|ydl@L5zL=}w~R_]Y3j"cTb3/QKE1kS: A S@ԀDH2w[J TՈP?kteٶG| cˌP1TM].d&<-Sst7cLM:BmҴk%~! >!RϢZIKװnc S~<2@ uPEXFjnc54Gqk*ŢLdIRkL+{jgjL趶G^FK%b/%mXNbK##*Fbc+c\Ҽ..S29& >Dظ|O3[wbfc&^rd'3Z\%G62WpEJ[8ޏF֒}<h8EJArwFםH{1)5'{ɘo&Kk6"Lo %~s`Qh 񳆃qlpT*ѡ#ͱ~dfە8y ʴ8=H_ekY۠Ŷ/vSxCp M./fC=q[+K8pBz6-c/ ]M5?*_oK%b:9, @ g͈USE,BZjz3Ռ7"h=` jȻrN٩'fJ3o/]GXc뾶KhUJ-66?f3J菵[-uE6ܜoN"ޤ iuߍ2f%JnT %IehkxF&vƽQ|64O_0f0FR7*ƄvfW8>V&܅&ȋF /yoQࣔ?/DžUR~[wuUZO0,6*._O^W"6j!,G"l#4ĵ֣L\:0 JO;>kW"HQP@IКIM޲C4x+[7-|C :T| |cI;A]2Q)"EDM]s\+C` WyFj{ FlM=߈/jhQg݈yxiJX p"71gp~n(HsXI5=k'[,ouM9C:Z ЌR&Aago:G*洛"ML< p衐$ruqD9KruSp k7qZCM w3K ݁sYtHLAjBZ4M \NࡓC-LmYwVB\WL=Oo8~e64}w,]o计۞Q˨Rr droεr@;R90teNN R螒_-2}nN'}]tvYospd6=_>_ƛ/߅ 8eJ3;  w6c>YFv +}>V|v4q0v^5}?WuX4L~o>* TpI^ ecx6,QPii+3i{ۏ>V:k轺$."цN7 l~ْ+tϳfҠ5MMSZOU?MCNoDFzIf;O<矏-L84ܩB UQQ!\{̘>]9}V~( ҚoFʸdLmfPA}"5N7!L* g=bc״5tQ?V#Ϊ`hOaikr'2 C $p9߹6YV9Ji.$3N(Q]q\1 ä_> SOR[~?A/@Lr y [>7>03LRSSJuߺY*DTws|+{iP: :W8sͱ+WM7,׭SB^(}7pie7-j 3J8@~򓟘tzq~@k Pn,o&GxWK ΒO|ʱ ڼkȺ%=m.ZHAAqR,نj. 4 dM}Py7es~<̳rs ^.r Pgb<Uw}&N(߿nyeѢEr&EF4bq8nO$77״H'n鴔YYYw9ξ*B\GIDATyT}lxDL;x0a*)1qj z-T"rjēOm+֖M;-QY*kaX:nv)}jݖsdG˰Riho6kp-')vYf A }{Z [!tm&''%¶ M[Z%M4c>fXywAZvcKdn޴Ya).eϞ=RX]rfOBKi,^[[ўaJ rL^tw7^@3P~GEH7*pB(lxDy?˯"g},|1c t 1~(ڪJ"vF&r?Z+x'-tPu59%-UR/~Ox .&EA]f(ň#W_zP&L 얢"'ʯK;bG+@Jr?Fsr%ȇK3taO q(LȐwȻi-ǟM΢[T~D2nAc_m אq4ޒ¢BN:"|Mip=sϲeh ߏxm\kl;w_lقEPpf{wcb<`n-noP Iht6u6XT eƌtC`0J횫FsNYr;w.cHywBoQ&-6g #m1gO^4Z1f}qlJG>w`v*֬uTX=dQʕQ ]w~{}^?eO^ X M>Q9'-tuFΎ3Ymӡ teװ_N[h|] IWeg\Sƴw6#z8kBkAEEi fӡW;S?:MG[l0Ӷwe]@fpk$ ƮT#-NOdjow;Kgx?w6S1?ts*2&8(%|8 1QsR!GȀcT|U8kl?`=ZWxpwx'i`_`3;ϑ,?@`gu5 ֺm ͬ f CUoLшVhVu#Q)[~3!_ˏsYKP{+#iSKPR:wh^)=CB%IeUê h0'm74hPt{ {VzJNh#:?J|ռykwG7!5 0ͰneToQ}9E=A,QVDSZpWhʲ0ǃا%#ԟߜCPbPb@402t4ZtmƧr|Ƚ}#G㹪qo! thTVNX&[dQY͟n~ġʹpmߔGWn6Q>m`Q+Há_iU-CZ)BGkE#CiiQj^[abIP^FdŻHJjrH`E-L L$1mhpap?WQƪq ؍yfEPz^ W%C°; F 0o@NE3i1Nr'm42>Sdy_bA*\;+1G;-v(P ]ЩH @/(n" 8!%)~ل>.g :;c|9@>QF>cہªBLBw pl(:AanɌ hYwVbCWMU%iiZw}rhDIc\ì%Il/kxdbTc;0f _q: LjC>]X*_OHB biaQ8Ņ])A5l"+U i `gh K 6IEU܀d}f&ʡKJ|lT@?G2}Yf*LQ@(gzH 5es)[41!jpɪbLG!-@r!-.MO^^o:9֚#,HaTiUO:miMf ѻp+UP{u=01 }0Ce~0a! Vw]F`@}"i?]ju aM57 }+~{PU#v~m-#S]MˣݰG5hii)'fd{SpfjE*M燻dij y摸{|K8^kUYR>hbAJ׭߇Dh*BȐviPF& o#+m}V:T;RٱϢHb0kIj|GIˎ{!a }L px4Kk Ղ }:|5i95}<ʝu)͎(cY 0KǢoC9$}(KdY vXppa9pt]>9<9N.Ne5- p8wpzʬ0Icdևǹ{]ˁң(݉q$BˁSwR]JւQ|1&xZ0BnkY7olQW't4}&;#7Ïك ТݚN6 Cqb [k ӌa5*L>>Rԯ: pAsgcK<3P.ޭ%VTȐ@SIGGU؇GSHTyCwץˁsLBaqbW /0 N܀uh7LDlVT뫨Uv1E4Ja&-aҦj44 u(1(>meEW.ڎ6Bv|%Jfl?DR?w,} pW` ~%f>B rhH*m%˱n7!Q:DMq7Dtpi{۫Ɗ/"qY!2tkdH0FuXTH$تPpH\S WS㿃\g>6&[>8SdҒ6F"F(mo`"i;@mW|q\@ŷCL;tCH "s1@UPk8˚bT@_7yeh?\|FBaɫZdlShSڙ~_v5$1|oThds_!X, 덐HM"Wj\k_U=m-c]F pL~iÜax߶{ zK>;EmYA z' U.؝ 03.Z,2NqiB Q,a@yHG-85$*CEh+|W\˚AֵXr\EA| 1!cv0ӍyKl6Zb@޽}hXW&~ZL.Rm3&H}P=[a+.nR*WoI9m#tIZ z:Fֈ{H:U0 3Voqn ߧX17cn趴Vs! fWkZN 8S!qQ2'xT*tڍ*syդ*k,Rc:exvYj2ًdƕ8It2bb)d-/cHXAJ+^D&H >x\vi3%W_&}-Y)n)2y%2CGշ+Ob7<ɊBmH'&Hb[wo<#˓IKM/]+VϓIS1RCmr%O3^|_Na6W>-KHʇ ˍ.a㫪 /|TirIj-i)lr{--g&Jʒ'QҲ%+F_Ffɬo@HuޖeYv+ R<{_*׬ʗu'e6H)rӎ9t9jVd?&FFaIH/?ܷL^gZOZJh*7Y$_Rޛ,z )j$_> /s}\xd[|I+L-Ԛ-T˒I/˺kO`dk#K!_Y%oks; 2vv-O}M3$e3A8W&11jFbMRx8:_(10Q L;ퟂ]IŰܘG$YE?:Ι!DG ۾6|Ty|)\(7̕ "?[=2k=_&U2,S,s򢊕N䐀WK_­S#gZ^+ݟ;3hLd)O:N{tG[']:̹Ͻ$ݯaw$\JP3ssrȓOy2Sk%'tp.Hu%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxx\u-tt`;@YdɊ8vrsߓ˻Ź#Nbʎ";e;T1IEI HgL>@P4g>$13>{|!ʮ\|X]d C@p>Բe5 |·Z엲YP˖Rp6V@|+zgoc+/}閯 'sr[6+AC6T6[wgHpm6k8VY'5;knmw։d گlslŝu"Yù9۬6[qgHpm6k8VY'5;kn]3 —k@ X?K3.rG^|o} {ql& Lǫ6$N"%^ďu {ه~hQoWe{2g[4i2|Oځ8o!AɤP7}~ D" w.y32(2?N$ȟw??tB>{{߃}s8 Ad>}? UΗ@B?7?| ?x_~߽h'_~ A c ;>[>h"3Ǿ_~n5>x?p9eZ~G~~bKt'?9񧿹_H{O_#vt3O_|nN_[HӾW?g?Ƚ3i|pZeq`|O{>!~Z}{_ӽ?yP{ӽ_L7gt;Gd30_8طn8;h8_M/J{&}vJ73[ݼ毞}Ù{{g Ǘ>| cPGs'p 5x=#әOБwtGq~*{C/ۥϟ? 2?:s-XE/+ߟ[,׿_p̛>:) CO$2񭧠eHPX|Ro{]}A+CU& PT&V߿[n8Fyë??f+'ZkPQ`~qn6L"q,_{_ _=S %̗M?z1eAtxgw_p k8rs(~#xGf|am=fW)ʃ?F2U@W:p_54AYm G>|gqɑ֭UWG y)X{_x% {v<]?[ 4 [>H2;GG_%8΀GW1NK\<gO?Y=_gJg.`xqd e./zo`OiUli~&M8{qۿA>wzaa- ~3?0Q^^X=[;~ݿAxM1FA_r~G8Bo.~?k8+N> d C-[KYZ|e~)k8YP+5l/e 'kj-dmC@p>Բe5 |·Zn:ARf7{=o%fn-V bUcf .䵸ĬŪ]kqYYU 5`z3k8w&%f g-V.8fpM^KZ]p̬5XջYù 6y-.1k8kw1slZ\bpbUcf .䵸ĬŪǼ%zV~X/K_<^d8C}گ~vZvڽ;\smtYùv:Au;jpnݸ%k8wfN5i7sYөf vڍ;\n9k*+܏&Sihb#P5HFDpDO8aIцI$%JH97FR(å40s ""BCcZE2CT! lkݏwjR'G5,Wj\,j ZѠQ4O}D g/B"tط$ ,!01 PQu eȁ y;B:=DՈ g r,VTRFq"G8@T~]|ܣ}~  ~?ԑ(r2$,MP(B*.Hl:WϾs?_ʌE2W_vB`ڒM0-P!(TNBDA4|X"S~ (LC}x lͲaאPI)IԹq.A* m㸦G|# U@#-OA^ũE,:lsJ囧ÍhPFߍƽތ!,CPՂAr ~P5Cw8o|y1x|Fv#*U\gItQ}AHl?HTX xr (a)sVk!PÕ~7p8I&qoBIгH Jb`m('y2BYS 9D45oM9 Z5.Jq>҅zbUcyjA)BKSdR ]ރBa92 ʍ+pބE"/F}Vs`+cBx{u݄~\ꆧs 9\lŒ0o2E 0JT'J%4VxsĖWPK-L! `V.M!qKD"VZ@RaAKy$'W} ?u35I>\gqp0$-}!{vScFΞ{S."&3*tlIxz"397| .]y('؊nunT"Q Ln:P#cPǹfPȐhdTqFzn 6?)S: |\Dv%":ΣE~\+*WQeW1@Wb9B/R29h3r7B.CrƊ"t$Ԩ{kFʌ-/>?r[@M T`JcY/N .1] /LBҢ [GTJAt3`^)\ڇ97p5(Gnz rZ+߉"ٴKt :liT*(/"Za4#`^$qRvҲ=yCH'Rx0<   Wq;1q @t%G??"_ ފ\>Z,`m\VY&2tfnB(=(ߎThh{D :XIQ%[R 8K?ֺ1$u|l\*UzXU: 94Tʋ^1I`brA+G{9CLr;nCE~.u:Dqai4(EɮI| z_B#q;V*WN H`Z{]01ُHy2$E|^9CJo'9qHAh4CH'3CTC!=!v$a  c 3T1]U A2"1DJ6"in1T?j̖\$wo6E\׺NFģ@>;]XqP 3-Dgl%5|M:]^;0<:dʴAİ^p?y.Th 0ܲW0\DtX=DMBY&bNYAz jb@OIFD9za_""F o-g`#ñ$Tl܏1ttu68osiGނIf|p+ ZzɚD$H( ׏~{Nr2؋Y7J=̬ah'}+˷ɆCxÍISH1s6fT\չ, p1[7LBHbO\`WENz | FęMs^hG~D!6oRaJhha-B+X chX`]utV)1f I%`H!+ "4Z ,ELg""ÕH ZN^ #7ZS ix fu^[=0OnLy{+R,`db40An2ܱ>`v#B>^DY:DS7!'wSuC^̼%#I\s.#2OHUonRUN 24XtNQkݍ~ y-u\ ' B^2`^@ܼ%e>2mX#I3KJ .@!xGnݎϡ[Fn~k6B,l؋7'p)TvliT@BA&z5 Ugݎ1I ̈́$r-CxGURޅI@kM&su1m?qIx!iUA"Ta1z MY^bba&0kCmWe0p:$hd4 3 㺡Jhr `*΅B QH s{ы(bۤRbC.kEcM2v(OT(j!Q?2Δ\!rR5/o!gת`S$Sp +(#PS2$Gkv5ҁeO9=_m^9MzxkT'! R4~/BsCo1rq ˑRMf2b2ׂ%;@S΃?8JȁpԏE M^b0 Ԡߺh34 -L\f*# t>H| 7>(N,B5]vmetasn"fS!"MR2DZh?*&Xyo/9o|7~i&;‹Џ/HŐywR $ױTPw` Eid6Wabn<(/hF5Z!V!\ACPmLe(퓐͎  AP ÿnf,Am(e֣G;TN/ 8nj^ϻo48[Ԃe V^{-\,yVHz뻎(OFń(),b yHcql8Q1"xri@Sz׬f_a!D3di#_[Z>*sV 0@cZ݅Vjg%FyXn/6E8n!EM;> c¹)!gLMx *lWQb'T#EOh4e$蘋 zWPx=eIЪ;#]L3lf|AE G VA9sd;b6Þ|Łn\YJvȿ,`nl =`vC\bs!z9Q[鼈ٹ1's#P]WkMf7 C"K Rb:aUE*Łg`",ql&K AH Rjt<22mN|LBnEOmO7oz1)b1+[G1硐k:5za _x; yQ(;6*I\<}l+_̝W kXH7"Tҋu@!kTo߉ͱ fx&2 sGVĉKfOI'1;*6ٴ>Qϐs-vN kA:zD ǡ)א(~ AJ$RɕNS+y;ӇCT1ֺpĺ7@ #@ECYa00; rC2aȰx&G=YuNٴ _/ -$> 0x`fjUEp!Bޢ ͈-> 6 5d x?ƖzȘ;3f'S\q66 ʿ6 U1t7Nsş]Y7uI~WS?RLE9 @[ 96|LGw"x@A_%&|g'FnWfu*7M!UX_c!&oFFf)q18N4EVK| 1VPڙbATqc 3ty>O#MF1 [=MG$Sl+g6"ͪ)c>0,Xdre:7i_`-̬eU'0F(f(CYGxчn3BM; h?Л%/Lxy߲ 玭dnI %dh*<}g q ~ pal,1 ,^xʈ@E,bb*nPg鯌Z$ ",ΐ0o 9bǐƚ`%ZPuXH&J#H #lÕSLRcǐ=֭䔐y+o59b?$Q'#=yzo/}3p$rT'bưP)fOP$ a.bqS\|RP 1u)*QQ L+()~Cp`W9D25*cFSK0VШ.]z Y;d_wR0髱v06IYtI!ydŜևv w*%uf/\?EZۃdrSRFns.e^u ]LW8x%$|ytPS{!*YQ=?1h^|'JF >b>l,Ó 1rEA0ER ɂA +7tfLeLmbz.c1Ѱ8 gw;MUlmCxp~ SkTQS@K/8W8=̮XcJM0DS54:ښqOaj ꩁ:I(41h;kWsr2 wzu6OϜ< sTe2|ar!g%luymؙvZ彟DͰ^? ki,K>:8+l: q7QY2wKB䰪LOWPˌoC珣z}30A~gDI -*fr^Ptq?a.F.Wq-ZvOg>=A )AM2ܓE&7- k\9Srɨk Oa5ܼ,؆X,#Q4`#i < 0<vG3Ns")3ln5XgC`+[bmL;xX"x H dwvB>Usnr-RZqU( ΄9U=,fF B̆ ( C˿'Kg 6/1*`2̎K=UcLL=sdMWA4َ~ 0bJ(aͪ+C‰i`X&X]H/x z^)Er4Ij73;S̐6ik˫ >ؠq2V?κtͼintB؏O W2Xok-[e} Z~ >:,l{.b +^kZ7D*ʹ`݊܋0x_.IֆsGJ͛ 51%cdt*Ϸ!K{Fϒ#BSp]F2q!Han(2m-d Xغ#R{p~(Q^9b6QJ> q_0 3s.`ҫFl?flx080dZ~6C+HwB(a:^o~#ZՅkX=O3f3ߞF$zi `k"yi`V%> XY׺NF"d*Nc?=0d*> s7"ڗDgyls-Gqse[H`&,D , (ـgU7qv+lS[i;|~0)Y5 3qK$Y4v)=BH;ҚY`:'uR M]8E&!^CHH9QBNx*LpvR1Ǔ1` U\zbEaahdmعqw=qkBW!bvyZjn#$E3~J'` }WKS;+ub¨1xn.7x +tlR$*dMz#Rbv2]f"(&wA.6ޏ@oLefgbO%iTеlk) oabXѮ乨o6ղѐ)%0;dU~eqZĔv,rR) 0Ѵ6pє"6٩V79:EBxMdžǦR7MoŽyS0m7һ,BsPF%19F#Sc^g8  ٩9hǠ4p]4 fZMDy>D8Sh{QORL@= wwo{$|Vn8II x%ξ) 2m~ fQv\r,@)[Yge)!DX5D2Kgc0ZX\AZW(1 ,@S\f\k/09cV)%i7L˽w 1 Pk-j^鏡Vs!iC@bg^-NҲH~^f8#dZwr/V脞`"ndC@*cl/V 59v )|J[ؔ7ՅEѱx7 Hc`S8OX   8F9ְۆU{5vl ;p\-2f@L G/TɢjDyBr d xAyc3'da%Y1FM/d\ P]1%&'V1n(u"JVȥ1)G)dW# !Nz1*H\l` XACNL o=K|= 98?1 t hz&cS dyˡ '*ōбKT$y Mg9dCTTQ-4R8;0'Y?G rnFF/ zˆ* i=JGHxYC}u-;ꫫer(Ai\gքξ9]٢)r3Q2D)i\\.2D,k} 'c44 2*TyJO~L)LehiX1ΝYbƌ!Ac rmcȫ:E4$EޅJ($Ziwa.% η9);#8ȀZ>dRZceJ{}Stp`YȡE֍TUmcU%S79vO}nq-LyfSdUK߁=^0U\ǨiQ8܈Um9 qF.כ s8:ɥfB8 Hj95¼ &WQ{8:8cu,|h,SX׺='0[xwtw@Sa)R\.vz4=෌ii#I97=Kـmnxꞏ:k< >\c} ;(}Wa)zܷRzWvxz?A<M $LfKb /99r3 ę)GP@-+`:<":Y![uX$%.U0`bq?!#W:Ƽ9SpC%" E% Lls iU%dx 7r-pSc"t׽$7&5TNBVzcAlf=,."&J_1r3+$r4CEcE\ @|<k(|]-F*$@Vԣ"t 4E8EedshؒB\sN8C 1t{"FKd|d\|lFCC1Kl48yH3 S%,вZo\^H,<'Jj2҃>*Y*Z攘B^,u_G U p=`ªzܳF.9w!(zY"5>AK'nHc{(<J \OV`ρ|>b|Oq=L>lEE:DCbԏB9|p_ؼ˖F_\:[8<2 }6cZB G~u:f5o)'NBRDз112 VfK({ʡ,gE=\^Vj9tz߃ rWChڠQf&\(.Gḛ{jDL @4r (Jofo@!P%eY#2t¹Z61ׇmOeL#v]1)A^O&K̊E?E7{Xy+coNOSWDIY*v (B^wq79ğ"*17P2fEu =2FðeRtPշdCL#.'<#BOr\s)(`=<&ZFu }QooR60XUr\iތ\kZR *A Yh忶OR bA8m^8Fp; ߬8q2*™;f_gIrcShlއ6v \<^ w*[ؘeK A6|U0P!<,YLF49n}Ѿ8{MCRle+n I6qQ'>E71"[7, 0Ffx24d 93 oIn}SkHUАQR[E"4 oF2Tk'J! b;NJgVg$`;IC.Y}::ئK7.p{:s)N;Fx&Exq C7ڊ-l`jE3蛷Aa'[A`ﺈr*y)oD\OF') $e+?4{DKDer쉑­V2V2kSR;*m[(vi0Be`c Hr%+8?pQ8)}8:.q&zPчuyݬo^fYBIb2`8jG1g>;NX2 y# 3Iwlq@wNE`~l㐴dUн"B"Ffao%n7`!& :C}boaPZAa+n( &Ψkb^vHGl? ,;dC`F ܉e$ƈkFiD'8$R)/<C@ߏ:% K6!O v_o@HB:AB ,vF#d*-ni(ze)LjXP?&?,4;=G`P*j|"Ja)"&+z(T B8!SY׺xgLov7r?!fR!6 Kq" ,eke7xuo9"ݤézqoՎNb{UUb9Q.bZ] "RmA~"dėt40L~ Nu68ݢ:4RC[(`szʵduVB7g`Ajc$xGBT=9$7(+0H9P{V\ut۴(1D<('sb:CW$>兕x5XdAKW a qUͤ`n U{ 36AHi)"dg~%Q2~Rc~Pӝo[kyQ:g8]cىrzb͒hYYA?@% u%RL1+*8^pLG  GPRkfo,#ݨ +هG9uɷ5f9(g8?dgm\bI!E]K= J6NU>2 fC򱙅Va K5'Zļ6<NM\KTyL"-Py6g9mPB#8 鍓62 PĹ@py̨'pzݬG 'O2NQZpҙJȦ8W ݗFAQ|>)x%+~(8IT@ܓbU9Lͫ*a @F 9@9gGF·"\Y`c Iɶ)f+3H- 0)K|(PH||4.>ZA}J'jbx̟;u]Bc覝|EGr7<gKHMOiP:v`:w |Gi"Y\VjS63S=IcssaefB*ƑP%@tZ\N! NQ #RgA`$mbQ1p$&wEN{mƌa5~>I3.Dh6ȽV4ކR b9{1Z̺\uAtX>!Qš^kff5'Xyaݻs#&$Ū{i|+&=F·?gtW KNҀfξd/h㜌*S)%sjVtԽ#os*`sj' cd7(%| ѹwi;f}*S TЁo 3loi$MoN iAeK;a($~GL"L@"GG4-G9r"#>C)“ Z];l-6,,dD<5K:I& 3g*E%װ޺4`;9ݥuWb\bC (Æ!p&03ݘ*0<]UYQ51(iڗ _+|~žgNK5&IK}-(F`fVV̚YScc9s%wې^X`7p8ac#5C3啙P+܈(ȥ?s 1 3!>hdOv-'iF/!8khR%pN4;RQNnz';A/qgD1ThihBf_E^wo#9qbiGw|̵̩"LJ R|R^)8e#+ƏkCAE}A#,FyN.#gRx1aV8kUqVǶd#G/e^Gi_@o*3\d} B"QJ)õkd9c8ޫH/棆Ux%5Y1zb1LKix sa.53%eƍy uqCejA r]gyvAJ% YnbyO"j VH?s2awu8$5@:>3- LCJ6߿B7)X>u #LPL\Fw&uuٓI4I6MWV"\e(.sqp(+WGzhE6-PнM4M4['!Bi3ɡ9o>=g? ,HAg` ͵g0{+)hnb (\fqքVWqe ʥ,;dg VZ[rt_qfS]4J,O֕:P(R;d ?^ŮSac0Y˞e1{+kyKeԸ,7d,0K0q{4N|8F_f "YYVwvzK&] W@  򧭲^`p>BL㇎p5TkK+Q~Ė,yJ% .تG"v̰=r6hWl]J_dQWNfykj5q"wjͦa9AW{`uv[g-°Iu8wU+N/GEL- Yi޷s ۧSg-ĸHd&U*&UyLA]7`c#mϏi9 GZ^$؊2.FONE0F{D̮K'eN-Kuh%G_>+-ml0})A w*.A6[%9~l+33]e.Lq6`ќVY#Tgم/g1Z;~R`unmi˴0+YNӾjD+jYtr;[)[Z,lD@ (bv+UhW5mosYr6g#Êt={w}Naw ESL,F,1ɺRqT6a ]VrhMl FRg>oV2iݭB簸Ū;2)FޘcX~g0LV܁VamMND2+r8VN9 %#/z;W99&QULUk;EWFλ}+]m M8`[f}{l/~hٱVQ;sU?&ܦw^eg[5l"؂o8\vW'i#o6Yb+E4ZZgnAqleU2 xY 6Dмy'@_6)I pC҃vYhE&]k8Rco>hU)X+B@em55t 0FȘPf"`V8Ѧ#V{l eX/j,:_(Bݶw_;#KႜQ@p~ZO9P|:NXe%1Y ”[J_$a 2Wڒؓ(rzם=lr=F-7ρs-\/uO[>ԽM ,:4R:{M",ga~݈q>ʸnm,@6Gj2h2X9IWj8B &!JcYk9\"A%7^Ҧ7f˾v{ֲJW nfc1˞`K>ks {GlDx'ԭxMa8Ԕ-4f?Besщ-(Ha S)- wl-[d} /`9eǁv76"\%?m/UVzy64϶ͳ8:<?z 1t@6Q}Xƒ"L b[ 5qhlGd#>Mk5n(*aҐr7zIRόhe܁(s[Wb b /^!LZx%!Puf݉b0vԣ6is@e7y FB֦DiX/b*e?͵ Yz)s8A)(NYTc+Z_g)ĸ#t/ ,V;V+^/@tD+B`+kmǂ.Y|ůzf4/ZMN}z٪Qݲ5#-udĭz{Zw8zhzw=ba ?5=φY .iߋu]gbS+hBpnc7 [cs_~0xtN6XncͪiSٖf9LjD|pf,Tz+*bykkL7i5/ |&B͖b8GHj=AڀL2 ;8|A?\㒡}tqV1!V"&xџ!\s3CC3X~#;9h\o/~c;|c,)XuYGZqp֝T'o{J|= {Ř౏꺒 88y0Z,`iܸZ`yWvy ʴ;8=?O$#.6h#ض 7>[Q4=辘 LU9$(XA2K8 sA=2|t*kϷ`.d@x63 bҳf|&"!c==:L3c!)Z؂ 7P:1+8P32>7Nȫ+ #80*?Ve0  "ZF-֝*o :+oxEda.Rp1jp(\JȘbmR*U97JϾFjA]6[-X.٥PuewJ<cl҄#Xdut-_&0lѵ̾\DvHid-a-#`T`gJp\XFouR;BLfRYZ#MbLO!VTgV#f iF _GhLF닒vwBdFf~GYd l*8D~g/@D{7 PYܱ)X:Dz/&imqi;_FVᜇ]SZ K`LJuEDMSf])EԗQ>p^"]Db*)VKk=wNz{|_j`ۨGnļrE %`]|̙. uىkpiiǛkoZ`zn L$1+.SG*tsb/n?NuSz( ɽ]c*w??66dעkf 8"2Ďo?B>Kv #7s..GٰMNlVyU5,špgꕒu pT[[}m6}} tH+..ƴO!6G>6sDυ&V!m۶w[nj,BCgzi.`kE:"qBa7}v(&هiXTJ[, *0!NnIDATص^k(/@U-꺡UVožۺu쪫͊uqQ8+?1Z8aóVSS8ҹ㺵ᔕſ[;ξҵ ?jͼy4`cSH?2!s#kQ wC=qF 6TBǖu)/n~nq~J2g#]egg-Y|wg=%c\@_򗶿~?'-zvyi4ZQGn44ݻ nܠcw 5sV3lJ5*gP.n;6wٚ5 5[ x `/?K؆;7W_X({QO~ʟȨ_ ^4P:򪁳w򪫮ۼg??kLnxgh+!NYuSDьD~t[.A4+QeVEat1RLFn,d-ZH *skt4q OQfrt8g[3&_A\NLݗʤ p]g{ucOYTn5 Yn[)K*́ *^+2("@?[w]w׳*0ٟݿ˟OO V0%œsRR/?w=}(t@qi+_~& 8)"3 黿޻H?+U-ZBO_:ɯTO&?CC{򳟶/93D?r6Q2+'YI$fJD{őRfZXxƾ731ܟ49 4pTj2H'SI. ?Lq9Rozb}$~G=˛6^wW"2?^wν߉G/|" ϞO?^=ny~TD`w݋\1F=MCjfUC3 «PQ7b7H["Tw@P4ǵg)>^儵?eFz|$x 8t\@+?iɃ)wާDވΣOA X*Kw'J p ҚW$.?ɝ@PN HbH _P,D1ʑ(lǺv^% `v|EG(8'h2-D;vZb↳CvZA6={~|޳Q0kIEdQ!u-#vAUVD?6 Q.qcayQW ]q{guКz6(}@X*߶]< Q %(ʃ5bQ$])C5lvV1q8{+ ( [6!kZ)⪊f&ʡZKIAvcwj ;-l1@,*L}@( [{_ mp]A cf 2b6:B𜪀=UqI@R8.6f?u0spܚ<#mjahEb̰fŨ;¬!z݃Ž& Zo6"f} f{@Y$D^NtYu2BQc"cGR_}"?A _~f>mMak4yiRaUtiכIGsnX-N<`uOQ"'}+dvս{mRRF=tS,tJϣ!=?.*bsoi8Hr@ FF4 įKzӶ&|<.#]q&ƃ \x{+!nDt}a-/^$8ތ+SMV1KD 3g[ɏ#PN)Dg22sr&( {׉]jB1=S./eL/ XAA{"_f %Rr  8?)Jy{T$%z}jR0T'dz$(W~hݽXO}?{J?'@#祭wCQ )7?z" 1hOVpi1O=e9Y1P#TOAs4'y^zbTT (z}u^h^8P1AWN/qv9'x" .6Jɒ:U^ɩ,։|JS)i,@H'qQ`8qe'菅~ovBt>G kҽVf1crCI~aOu>M8p|ٛ7E(2?ٝ8 Dh2R'8U+y ꯢk0ISӫ#>/[[77XYv׫{Notqhɏnq{P(ҤG]n*s"*%cK&6VKKS`Oi'\&͙xqd^Z'ά M}#׾ ` C%-@^25YUP(ý0&0w촻0lR8w#ˡo0m֬Q']\f4 yVa*"? *tRx/=d)C`K9+> Z-iM%DTJb==N>ڇ/YfӪ-]K?Y f8"aA._ZFq"n,a*(む&uElVƠKjTv1:,@tJi.T#L ?9Y]>a^:RLBoRA Ƨ -rEgmZZ|}R@@] Ci1绤?q3_o6+Ͽl6Gϖڈg9kV62pŠIp]fҹH$z{:NQEŌ3aAnME ,ڸvUKEjqD+PYZ+v+-pxق-sbO.F c՗Ƣ͢~m!8S u␸r67 L!rm֬u&G>gf/ -7Y!l׻|#HZUYk fZJ2`}Oao1/[X1' ā۳$@H 1k##b 3P vT ~TqB)SA==A+՜!LĦLo#}ϛeE$,uBs .[%2ƴV e!`,[at4~F| - VX7|ZݕS lqyȵVYﰧɘBvBn7Zn@NѼzEp̃pBu18߬SCK!l+xSdD9Â^I."L>$`y懜\SSG&Vb48krAdRWu5#3̶Hï'@2^c3,]6$/ۇVv5EQ( ZcSVWc5 Rג >-vL j Hv܈8up7 ;? zc;AxRY!1CUӪu)7l%7>*6#^ǔ1Pf>[|n&_KXܺ45uytuT;2ǽ7-F_ІZ"A4nkn{  bQ"VmH:s^:8Og1q JtOڹ HzuaEpGYŸ%ot^a`_W%nΏo *ӘMI#^1_T.p-wKAٝ#g*ʸ/P(`J1?h –@/ 3)OSY"ɥgQ4JP(}Ҝѣ}RA QΏaA=zb(c4K9wOZQ9A@U6Xkqq!m- q_Bgŏ36cFS.BI: .8{uFMOʀ#$V '.r 7}?~9 a_uKo]U>(W .O@́N#.&@B&v%?W(D ܉xd^OOf~q!`48} s4Kia0. 3.(θȖN@8"[:P8i r,4+Mlqh#})pzHwUGICa\Hg\dKJ'qQ q-( 4E4pEt4pҁIc`\Hg\dKJ'qQ?-Pi'IENDB`jqapi-1.7/images/0042_06_06.png0000644000175000017500000006326311460407074014642 0ustar metalmetalPNG  IHDR1+iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxYdy}b$H 58"CB(Lc?@~0ca9LEX"aHcdĘb$[6"@ꭺkߗ̬ʥrܬj[P-U]y{9; jGmnr7YV645UL nijsKU\ 斆V05pL~7SV瀏4oUط#pHFώf˾U `ώf˾U `ώf˾U `ώf˾U `ώf˾U `ώf˾mWNfY'lr{ z?ԓ/);{c~Mڝ0K>ƣ?逞O}W~KZ?5SY_|O%7{?|J[jfEil*UߚyZ?5e>ڭܴ{M8 Ưq&N̓GT&+^ 'ҿWds䲝^|LcT%^٧|[WOX$\'xg|4{>}LGQUrlz$+s|{g+QsWJf'&lr\\vO^T?TbOV^}MYyXʕ+/Tekֽx;Z_3\F+/rҴO+yA/9|q~ <r}1οSYRaݯ?^y+/3Y_~֤3;5;yw*kw2Lc~R1\`33OqOUyrm7O͘\שQ=]:7;{NGb*c?`:sm,<z~5an&@Jw ;Ɏ4~UaHe\rշg6ֽ?~H!m6!{gݿ9g o/f}S+0! Tm=;jBk}WwhZ2\0G'w^0XU`U2z'?\sl=9~A $%f^O~u 0-q/~g?RDK뉯돘ѯ]_aӑW7'%^S 1xC]jyO.ɗ_/FS7{?o/ #zϾ/|Zai+tWo>4/*!}|Jw؛o̧a0gw8*?5LoZ<^x ;Ϩݧ&`6F+_5w^ ?y֙<#O1+m1< J%1SwޟW`w>αAylc76TH*3[{Xwu*$>\R-vf괜uV/xo#ҩW {|bGa45UL nijsKU\ 斆V05- Wr `j0pK#P[Z`F04\7m,!dC|?u{95yU;`kyU;`kyU;`kyU;`ky??㰯?(~o_C$4};?HҾёy7̾ёy7̾ёy7̾ё'|7jRYzȩnH_MUeؕv4E&lʐ}QlkC%d`wm.u[4UȫcArHiV{w6"뚿zEW:u(W4ѥKo)I cX2cWf,{PP-VjG.R`WdTa3Y{Ul$+U{J޲9IV3Kˊ"*$J x|p_phaz_xׂ 0ua;٢C[Q$[ɺv<%ri&7_.ge?R.Q~|!5CԳ8{O>vEYaϼHū߯yiס-sYuΡ"Sx)ŮKo*Ho@'O*=76oxeELpErV%cj&U|(g599"ʤdq*K5 t螻>YW\V ^K';Tv4Ͽk?dAŜu*ril<Ų\ua=&ӧr*T+Y-A(/h|å^\;۠+݇4ɊLM*Ut" .ro+)uV˪G4u8_ݍmjoJGKj\TGCMZfL=T|RdJ<QGm /cZn=9ykDcΆ[mj'Op^tBڨg Aj򛬮ހu jcUzM/3pl}r]rwL$V}\{N녌nu45 v*+uTEN/isw.y._*p?(ϵ2;͂|/oWikKKKsrlnQ})MmZ&7䫙{=#[_PfF֧u+ҭ0m2+-u# |#X21gJjrHn|޷rc` f4YW륿;`E!;HrSM@HG'Up frTJVk3M:ݐY}yƶ^>#\ޥ֑SaN7R :(;ċ൧UҙfDLˣWuq"{#8]{&-lHL}s m,#;uQ)͙eBϢ , 9)!ifdl`90zN]/bb 3O?:t'_Dו0b9:mBF*z0QE#nm<',Wq7֕hhݟQ&z pVy0 !5SU+_]&5vAOkr6ABs12kJU %I*_UvRs}R>:"J-`To13Ջg;4[T}4W޷=}s^,z r9K,#Y59"! S8=gj] 3#!9ww*P<)ogQeXfi(*D-z$?1 }]t*`޵ 0Uփ2M3QBr/nhQCϰ)a[gI.hh z=ii)ˊ ?`/ؓPVITECHe%C%t@ BZ9z[p)IVgBQaJoXu% 6^CC4AmCybc֑[trEP $ɋʭ+ڪ9danz &Bʧ7!=w!D*8)MmkiyZ sq#ߡ;.z:l% Y0HsC(sË! ceA%z2nfvKK\!Au I2&ɮ @wuoGY[:G:!"i5mp"03.]YMũ;SmlS]~$Ns E,hGUڵig1"›XX Qwh A_4%7wȍYU7 sjq(f%F:S>/ʎ8ҡJGeGA:U͸VRP]BʽY\5 ZlL4f]&> `ۣvw A PCj2٥+TAln }XQѣd0*!5c7.*>YFR-imS2M%tm;E0 (!iLl4Brz~t}@sc*'"fw4/c"JWzJg)hW?^ڻ: zu-<0ՠxh;ܥsƤќN2y9tʎl|l`nKGN&hD8׌ /=R0 x 1!4]<0  `a疯I/z =hwؒ< Ia]N7`//fĩdjxq^ !v1-bQ$dm|~Y޷!2`, OR/@ 1.  `hC2nr@L0@vlF0Llkqz^+P,Œx .73(154zt/@tN}CCz>K͆͠$vZ/Z7V?>$tbx-,_ʽw˛Wd VmD~T3YP]Dv2* 4Vf+O㮗Z^#c:+*@nh-m W4QmA]P1660 3#}0G% <:,dnvfg0n|+'tJ^EVԺf!y!Rf']JJd[*( 3#z|mڻ4v9Җ~֚Y,_2]\o`Mб >;,B(i;S i-d }4AF@H e^: _0C7|X3X 's0+*'n`pZj[CU;#cb_*_yS8I(-/ΨsM~"Ѭu6QJ+Bx {2WB _(#նī/X[4-cwvV`75gv ޭx f2MhW ₱Yuε7ڸOyFBMjFwv6RFh}t3|]4·Pgz_Oeş+hsZKYO8>uB[Tk6DxcҎݨmX\X54tw!KMo8T9!kh.}C-3!qEںܰbn ؐ F/d{>G-`A1L#G-vdjFs4FE t4zDs\'pĖW'msviVW!N:qRhhMO6Eaࣻ-8݅R-(hxt,w*^Td1(FI]_z״n1?b\D7WC˼QY]Amj0[YMhϪedP# qX=c#'!Ym *Dv䑇\]tsy-kf?z{rE {d\ݖ@&qqlC0oε2ws&*~'C Ii$|w PB=tIDo%1AD:>ʯkQ>Mu ヮɐk]hq Y'P>@9 Hأ,{0 +uŇ(/j%c-Ŗ6Ձ#x!;gW9}J奨zXUA r_{' Fk@2ɍ@O9ޗz}:^S oWa5n_%Ӳ]‼xVs (Up+30Oz,\*g`fQyVU9'] 녩:"q +:K;6NT Cj3?W$̞%U56/SZ^7^E #`Sf)=n3u=S=PbKJ@Af/e ?_ff4n^L\O[at$6ڕp\QyTC(Y3Quynb3}_1f_"Oǧi 1vh;HTDoB`20շ̂"/B:[i98 A:` $)̪wɋߧxI IDATo]P?]^ / 9a,"s^>jS. `06mM}?[,G.rhI[)y5*S8)dlcBp z(tL؄J5e]\|YE87݅fen"/5uC7CԂְl<>$+x331 !Q\P Jʹ)^Sk{&8 HͥlMd_J3s8[Nj%7 cx4heP9pz0M0I;F~4ÇGz۔jWh3*fm*Z!f~sv|m(V'1`+0[e%qI!MYG4nVЛ:.d0=7TءE# 0YUL{s"!R;hC.7amZv4MYp{ %״{Q=33ٍK4gH)uP!,iBa77 FC2߃ijN TmmıfkgwčJv,@`):}EDZk -Mǃxl=Fkz3E/:rDf"J\nTl{'`y=x^~:cZfy<:#7!r7 zW%,."$CLߴ?K)`#,Gc3QIk{uuc8S C+H2 i"zkJ SK.J+sCOG!.bgU獣&ȪE]pX.L60%duк)ˏ*coJOpNPW;bp`pƿt9Xa&HDgPVc|?VA 5V. ?{oYyB:݃V8tRteDCaf*ts\ #<FYdJ:/. Yk }iD;l"bK!EhzfIÃg ũYt3~A ^V/]UHǞa1{6"]4#$I4E?U|Ri%X: _ ~mGaFłJn? jY hg,unbuECw;͔6͢M R#}R&z ul*ڜ3vx_Aa) ڡC``(ڊ(?gi-HF15> Y*3\Dh=Ϫncʔty]vO>%?`3qD!w,ӿK>J&`6d9 i'L)!7 Cj%Ãh+tɥ,~Z\[qmbWJ.Uh-)7&pbRcSb`\LAԉ UDZ+%0ƥ.ެ!\:RI ϝ@ ! y91$.2IM2ƻDx+ӫg^RUQջn F"F+7JFuv!fW|}j J;4y1G9|TCs3:{ x5yB]/Z>U&.oSNDcq,_0M7G(/GV2a+-! v((kV"Y ,BRe4&d1ұc0LAm$:|E3HJд\8 \DQafxV# e!] p8*/e0I9fTAVg?<% pMZ|y?f8;0cw#5i-"ԊWЫdB"{1ã4" CYQ܈+SUW_R ^uQǻ4u<&t`FO~Rw"!:H$&Pkӈ+WUoڽL+F,آcqŔx27A>%VWU:ФvPN" {^{8琚 GaWQ%.hɽb.3-Y@+Š94bL _B=IЎٍ#E]sm!ig>-0{MooP׋eHA,UTdbV6M"B ^-G4a|^н K-^Ҕ!w |>n#E^ տ)/^p 1 0cg15=ft[[r1Y#fq@:39g^%D pjvViIq Pmp[/0v0k0gpZ7w~;90SwO%'j%{erLF:71* zm@£&ԙA_@hy} d / >kg8<:r2vғuMnYTC,턴淁*2o]k>LҚZ%P{ͥ2//ȽI[kE60E+1K3ޟ]ѱ4^De'%TL ”a=oL90_(| `h໚4\IaxfTA auJ(-LX i ̀]m`M; {0U= 6#j헔Gt = G?+~uN]! ?a΄1~'\W y4AKkj[|C% QҐEal@ɜ73-Օ6xvSMݗQ FAg#. 6BRorL:ZWU<B;:(5qɅ3$"k':ITk蒚apiNKIps:HǞƳxH>a_t\.u: b뱱K$vӚHǞ;+oh_d"KCn|[8?g k4\Cp+id|80M&'>0Ka@~[Mm+>Ӓ8U,a0U;Q7FŏcedsI3`->9NˊG>unӯjD"r8 Y-0b8u)BS,B`;>6Ӆ([W͑&JLq;]e!6N\9hc|c:|bA8B?Pi61kW|$q]!9YKP!N,5Ҋwn+9V]k&=vN8~g%cnx98{0f07Fr!l?u GNC-4%x'躙g?o21}ڄpC91nM`gr f)]&[Y.Wg%sHH`j1lbK8JXCYG?d)>nt9D+chGI EAjj`|b1t\!:! }0վ4ñʬƷ:!)P_q=PK,bez]dsbFpk(5v B7h9n'Iyzv 2[гp$]0#}K3*$%٣|(t,آYErW lHp9,MgoRw Lmu}V:$n 6o^l=FvwBF7TRBP8^>+)>hc ,0^ɑg 3M/JP<,v`Xұ31@mHDƒf"(:Ny[ʍG!y8w>fD: Lq]`hZm _n%YXhD^4lGz7L/iq:Gv=EА{،r)DSh,sc|^ɫBC L7p`voHJ|k;~00I}`bw2 8ZO=Wh{$p]L/m61ai0:&)2z<_ mfқo+ʉW[Ԧe$S BM2?H 5imp ߖ ZE"! e@9gp>l@Мv8xqrPG*(l,s$)p] ^|b^.-~%쁀1pXzFUa-Fx:yo v!;"%bqnpr+K^s]H3_ <2`!5畟a_zMU unE.<YdC\X@Y(DÑ4oyu_eh,{DʳYR&kԘbhѤ;*lc؇ xu F1Gl%4"6JN SF @_53| ՀF XPW@H2AA:`T.ݚou}`.*@Yi%'b0q wgBb8^U%;RX BRWP"vf+WL.Cp{$1.#8JȯG~= HQX| աRG1(^h?"vä~%,ֱL6.?u wb!y;+ E 0v$D'U̿jo#:LV|{9f9+ vx?*ۏ6Ey,@A?揱bZOaTdʶϮR7 lguFWlAŴ#N5^pﮂ3JU:9{cÂr.I\/?qv)ar= uZe|{ijEo f o} ̰ \l+6˖̷c3ea.$J !ֿ};LH^{=֊FkГZ|ccm3|gvν_s:Wzyw<eOߝl#T-c "*3PZCeEsZ~L%%mUU'gіZRuvLG&2T(TֳnlyvV6S-֮-PdMFS0fM|XdSFZ旹5guvzi#1Ѳge^{0m'm001xy&΃qN~p4`GC{^|Ec3`z! 3Ü8~B˸ رczgg0>5̽a0L "CtIDATSS߬2Jtd@L6Ǐ닿dhhpH'[対*f"ܣ:v]ݐKlru駕N`IseeRŏ}`]_t[0?չ'>Tbq-..V<R@bE:`CzAc%plLX`C )L%sn0N:E6]tY):R 2Cu 94٦2C~[W ivm\x ;.\zfމǕ%OoӃm"o M&SztE IȬ8 yz YdY!+/a3o2;B2<̙3Zٷ E` S\PoX`phP++}Pv$y elXla: H<heo]f4(ssh׳|lcDJn !_c5TNNNkP.?ms#]tpſ5T b90w#G69ܲBDMK{[i-Pwj ? bOD/ U˼ `b= 4}3vnU4`bfs\w`\i @f랁7s8` `X&i6G^ qwGXĬj|݋/동GV|@{ʪsF Cv,N;W)xW#=ֱ3']mx6oOp'VNɳ0Qt{včn]﹛)Tn|ؽmeT;L5f3; Un3+e}Tw׻^=YaXvcI۩>[vɞdjk h`1<{zܚS4spLN;\Tޖ)yfIsA}ߔscjus\?uv޹u `Q`LxD#okA5:f)t}f[PN:K{Az&.lo uHP(Wۮn湊HӞLU/̱ Nw> 1gY}&Ya %ljV97=7gͷ19T?(5sz >{o3)m:Y! HYqIO2)67멣ZS7{kYg"̀;HBf\^|$x.1fBtg<<9G &G/[xoDhozyVBnҦѴ܋ow P%Şp}m#.Xnz@M|o oB̞ cc?WMh,iW\ 6xmYuT1i7 Ni LTn޶)iwu83fBwx+A:]Ec HxB\ nYez~=6'?;s:߽52m5#mmPbhN4s{U1ҮwܖoqG=WZ~Xvw̽}~~s~ֺOF0d"J7>6I`:hҕ c̯>hkdg[A79v DՒ]NENީq>6wy1ݑa's}b3Jjjj k\-zrɝ*XI1cP-k ΀Sq稾b3jOwUUƙPH z{WV̜kc"ߪn))M)*1\iʱǀގzjocsXͤ-N]F"P_d2QL-^UP |%Gh*yoI>R*m$UC:3ۓ~*8I&T&a} U2X%RLD7QU;yo{&'ouZd/m4 d`7:fce1-ld'9@9 ^v3}`f̊ģrf5.g7 )Vk&}|/iMuudCdc#m9+/3꘧eDj*W`*ƺY`wV{:C5 3&%r<ZҮ.ԟNM‡=MeU8'l׼tjcdr47SŨz%5>˞L,3Xٺuv9XX+^Oà\Ҕ268/Un"&9QZ :c3)`rTPNw2ۙ&GJ5PHf+AwU%fILfidqh>B>e*'5kc/-a p,z5@m@2 z7+ɭ2'Tw)ReU0mĺ =7QcQbz`dܳJͳ^^~WiJoHj_4nM$a-}) %Qt:O- d-Ar05#o~UVRvM3l'ov /vN\T1նw0 8v @C&ުOz$մma.mA[Edv 0~{HvX{um΍m6>wsa`cST}en\ސt|l}nwR{1S7Z;1S7Z;1S7Z;-;f0dc3WZL nijsKU\ 斆V05- W63 zIENDB`jqapi-1.7/images/0042_06_07.png0000644000175000017500000002561111460407074014636 0ustar metalmetalPNG  IHDRrX1iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATx][Wz>=7.vaY>yEi~H! 3`E)"R֖q!"+eހdy_\aOS]VvN6txN N7)4"n14"n14"n1O>)pرF@kw4]y)z g߆^hY)n]o0sݫ&QL^e-fpQ\nw.Me<%Pg2Ʃ`r".F1q鞰ݟ?|^8s~uCƿ9[gU^ctomHdOFAZ.'Na+82L.uWܦy/d{Qa IdY8w*To]‘q/W0I$7qb.7[jw?3s]Ƒ'ʝb}?ħD  5fɫq҇~ZXx_S7*jRU? U-aUS3y.u}ɛ/u0>Jk<8)χIux]M>;ðl|rZݼyUc= *ɨ۞<*VLJ|L}|W/=E\㹛=J/uc!觬W zV:}x\}12olp='?kXu-NOV]<{PEM`M)v(N h5f ?+Cܜ:ϱjH"'7<Wk]yTōމl֫s??LyϜGQK! hK@t1HL~[ Jڇ|#z]~z{7UBdtaV'?!M??JpbмWI%-rqǧociKvS:bU3eoU೩)|喕.ʚ,X ,T^xEc(ROd8=8%ܙy;_`ncϞxtXP|>\_ؙ"WĎ?LNkUܴ=I{|%C\ ~D-Ux/GO+nyg.[ڹ~,[Ƭ荶e\(҈[6PoX)C-[%kzx/b BhH}So--z^Tz2= :1Er\JODu ^  3ARnh He1<90=Ge :/ׁGq#+ ?K|ΠGISS (W8e>hD XiHRAj8uET a0@ITDJ?J30vTeqj`POT_ď#,^^Ub[4)a(u).jV DӌYƵ0Yry?}W+Kjz)H l,'?6%'}:u-i/\3+phd EF Aui75)rU>sX¬Q@|Fsƭq񓂆?ϝevI$H((}P(ET_&%ɕM/^Z"(Sm6@I 8f!Thd(ql;tѥש)SQsQxKm e(S/&snB&ڈ*#{{7 Yqiu#$-CL 8ҽOP~j2-KvSO.vN4(w'UUQ9+ETU6RNARb3qYIQ QWC0aIө)K&4vSжQ\12<`DEFAƅ3(FWݧON* $׾&8#]yAot8K)+ ,r4&R%Z7*p46G]~E7A(SŘS$_@, $|t/sOC&4AS^Dήouݙ@WYR.]EQoҏH8Cl,:PvhHTWCH+bofһ8Qؾ;2:UxA?./I̥w644ݣxO/.He5X`!;HL<=FHT aD"i 1E$Y.?\ ym'LRiA{\W>CCIԪK$Z)(52`5D5$Ɉs Ԡ~Htryg@QDB~jٴhYch1$:Yj&)-OՈʉ?ޠZ)@Kb E,IK}"ó`Z뷼-S%ZF>%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  %IDATx] PT@ p ZKLm!iMGtm Әtv,fZ IHPQSa:Y tb Y ow ޲玻o߻|(T@6aTX,, X4Sņ,րfX,bC k@3,Ta' rss=Usa`͚FQ,ƒVGzc#fBeH "olCb.$b鐱X X,F:d,B"/ E "olCb.$b\,gːv;Wچ<mr ey`:ڌDu8q`&6oP yen\pĤ`{LKP\ X&FV8͸vQ'#g eؽ<10(hvǶ"XGr%~˦,F^ !P;@hhz:d;4ΓC&.;pwԗlf{#.wf!y72I[OCZ@0hJC!!/ņeːԐ: 04#8v죾Zo_ Z VwS6ec߾U{ĢX*¯D;CGobLKG;SU%_TX,dO+YFRR)P,5`9C?Gis,;\Ūc;Eh:(;;IN\.>in֪@ꊳ~a gːX ;.G_3yRB 48Ȁ' Dz[Bk%a;;!*4M{cw=vg E$c,gﶯ;Ժ)Ѵ ,1bC2m\z}~ ^[gw DӦyqh>\X3Szy2C`z31爘EA3 [ c޵dt4X,sL,AQbc hhmGkCҢskJ]_"Fs>X6bk'Պcs~%'3O.7(vJkaaqx=;QB&gd岯 1?9`cԟuZw"㩚Fzө6bShXI87+ -֕E ľJ4m.,JkoT6gI.T%V'׆ĞdzEQKԽRxBۛ1Y-8nTZZ6$Q6z;:ZTLȖ:S{ob|E~n4a2m 6Wp_0YBƴ,c%fؐE3Ulba hfŢ*6d43bLXX`h Y, X4Sņ#7͐ kC^|ŤaA}5D?,?b~AY,bX Ⱦ"WL?hZyj˖-y i Y, X4Sņ,րfX,bC k@3,T!5fؐE3Ulba hfŢ*6XƟ"4<llقlF#ј0[Cliو\zxz8cHs,\ au5|VۖH~EW]htZ"Bї`h[WWF}%#f^ګ:(1lP͔/"$&D;x6QMSgyWd;_t] K+r<4,bzZ[Pw0Ux [t‚age`0iB lM8҄c)0Ex{Sމ~Uh@Fe'Ny 组 g EY\0?JG"摿jʩ^\r-iMxzvz{As2H[*=>.ʀ\,y| w2„aDr贩$(y'Iӊ5et,}S^3V#&*"`-z5x-j>4W tQ"֖$ |5O|(=|PGwEȹ 0Η/+)8uα頻{Ȍ5"P.FJPGmC8n>t/_P6qǎϥP>?jQ DMōb[R߃7 Y۫+_Uf~Ϛ*2[yƬu/XQv=VLa5sL5m2ם%]4ڏn;@:\ I߽} . Ҋ7X7(oxyh&qO—G;v5 !9νG ^=ٻA/jPN"gȧAnt+/u_ +"&wZ|~(3'ocu%pK[US*?Fˉ|IL;1E|GpJu_m5 ɏASa[N9LC0g#Ĥ2bGbDѺgky ."2X 5z,UԎ & -^~X}J0j s"EF,o=a&K4hs)>ԖXi詷`|ݍ2J@Jgl9Gz`Y 8iq Hߛ8U{1ڐb]C45Am Kc{]:'/h qo%݁t|ֳc6Q-ڏ~b=@^^5[yqnB4SU>҇ަlaXrX g'*:]#WާX(%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATx\_h[UEl2*JpҧMK_ a}L}` =,n  K[qC&=$bH1c,+p|&w~/|Mjb 1TF ( `H h$Ҁ&H0"0 4&L! hbC 9g`bb T FXQcl0,j7: Bc:F1f\  ư1c$cŰ^` c:F1f\  ư1c$cŰ^` c:F1f\  ư1c$cŰ^`'td2)Ǩ D㐖7Q\8Kᨔ8{c^zޣ"ԢGNa:tR0`e >|s/ғF𴴏GC~(f'"9 x)J |yA|9{gȋ~GO( ʙ106`BRn7_*lCmͥJ sQU&@dE,6iϻ%v$mߟdFWW?Y\"AL?Fp} 3uMWKW*^(F*Gw1;W/ՎQo7]|j&Ufڵk ~90¿zkgli56v/X~-(ˬ9_Yeu+[IǘK<Wev,Kb~08%"0)l+JKx|/+Kq|?t͍~;[`Vab]}ޛƘ͋ZcRoWHV/[?b\0dnUuw1ouP;^9`՞ou[TO(*<ƪE9y+؋J#r%I 1`O6d6R592+J]#ʕJ"qaw*IpݾA( 8ZHɝjX];-YXlMZc JGzG`|\:fɤs,ǧ3-ywT]mwZ݇Z`ph/{eAoo%,^e) `H h$Ҁ&H0"0 4&L! hb.`H h$Ҁ&H0"V/Dik3`h%d$=l[$6K$f"A\" FO6 I0zH0md=Hѓ6/= 5IENDB`jqapi-1.7/images/0042_06_18.png0000644000175000017500000003072411460407074014641 0ustar metalmetalPNG  IHDR[C'viCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATx]i]}}}x!xi4! NҖ* RP/T:R1PRUBI;!{ųϼ}ߌD?yp8&8Upi8`iUNE,YTt`i8`iUNE,总kSc΁'|r4p#BK.{43Ÿ|ebُ˲#e?,^DgX,H,{-:`Y>X#qE|ebُ˲#e?xj6hfv=ob'pQ 3Um>^\lcc)ro,ŁW#y׃xH?>C'q興byxJ%YRKܓQ^Sq(4Mv%^ 侃-i5#y?v0-Cǯ"_a=Uu~y\vrr͒?:#xj( L|܍=Gvlf"vi]xՑ"(۱OGʀ(1|]<xmxh;]l[0&NM4 1rz /6OI{/}˦G1{cv1&䟯ַu*v:y8pZy?U[^Pi-v9RנqP$s0cϾzH%?{rHcݳ5>ّa@Rס!9*N,7@ C y<]jMy 9pCb`/._IZMɿ?ڟO#p}CF:E):Z{]}8cx{Ua\|/KB>?+7fUGK0>xmYCe]_f<m%gR68@hXfS9iV98hXfS9iV98hXfS9iV9~n;ooh}{Z + VMK88`YBn+ VMK88`YBn+NS~'տ)ȚFV;oY63tʿ3kZ4su׬Z">7 +5h )͇|=u@a5TJۃRg'.Rwna=$"&0| 2?K+[2I{j%xѻ^TVhFwc$g~(({E &1^"ME.=6T;\!XR\UNQ 1MDRY*]%rFCNgnA{MN61pݢLL15-:/5 o* fBh™44TȄ/7̅9C{ .*Ah"OMWli"ӤYdY3w$7>?wM= <#!D/,Qg*Z[hYE$CqU(Tn['Lh}zfcfE RCx\*$,NFoD%ia[wq2^4f(e45k%t}"j,3#98 ]tc]U r>F:Sp› B)޿@a"2)xC P6@ͅbo~5LT<ry >LF} zSf-,izӾ z]Gt&x żFN02t.3s! =jHM{@n z5:z,di vb440*rEK&Np!Vɢ;Bu,#"tkthedRJYd;}$ \qDypmY ½w Du su;x,t23yh6u 6(|a~RK-n"Qjquˋ<BJMH!jPH%d8#28s79& ӈWIV-MFzmROu*Ԋ(Ƴ` 6p2r?x\4>tQiqhrp霟`42h9[S7癃 #kY^YIYھk͟[r Ցug7G?1|\ {,'cbvL`m{ łO t Cs V߶n##?2>{}9Oiظi~K P8#xaR{ObY8?&2+d31wƩS^[j <ǟH1AF]qv؁`BY<[P{z~e<3z!,FP&@ YdA'&d%\* G^'H7bdh3gE+nnn&HgttNaڅ+Pd }LZG3g1C>W4xiR3}4{|+||362S |&G0595 qJOS&Ƥ&2=qv2:˓nV@c댆h`Z6oΟEn+ {h1Z(Jmd&;<9:.`%j2y&<,e<3X 꼗DyVXƬ0ꌜKҗFP'!12饟%5RUr/m- ;n/ mI״`&?{|.Aj"ˍfdLvC_߸2EK]4#k{r@RX.ڢ@ u m-0ZID#INǎo:x*˴k 5{c}?ұ4l@pb3%#d[0Ҿ_Ic f9MJ 44.< ɼnr'7Y8+KDU?dYStjv`<> ˩&P#>->k6^00M`VnBƶGLIIL[/1FH60/8r|D3]cHj$ G򣇯7`&'cPUie0D>N,U_b+&3`PҤVEP<2 :v;q<0/YKquMs"+k E˼FnK;}=Bc 핋7`|~ȰaOH h;1;>ļMLI\ JOf`|dwݹ;Q;!ބ`IrnscڱN&;290B&42`a"h~^yZ3r/mBڍ9|W\mLn7K2V4wH_lGaA31FiL)y|97d7>Stܻ lgF&z ʾP~#쯙bܹ`Ps=;u;xα9T輲Y~[q],WùYXSv\f)8`Y;Npr;8e)8eWpڠ=iIENDB`jqapi-1.7/images/0042_06_19.png0000644000175000017500000006753511460407074014654 0ustar metalmetalPNG  IHDRr+RiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxdWu:F $@H?6z-쿍bxml{m5A2HHIɚ{zsΩ:TwWuWﭞAa6-K'T{{߽{gqhX[\_2X!BX!B+B5+r]ôRhPVhF`PkV  \د#u*yW.cF୘ʷ+;ByLBy{ c i}P1SvtPǴB(z{;B(ocZ_!wT]!w1e} X,>w LP/<=v[}o2f~=/虶߸l3s7^F# !}*}ezɧwԷ[Ko3]f l׿[7"]oVh/6+&խ\G p;_ê K2w~XHUK =~.}^篩>`0,۽pޱq5e.ypXa]K״pPb9+DrevnNjvOWOC-=g>w暔,߭?8rX6ï7v T}/'o>G[3ӻ )}k_[yzw"DؙWOov)gbS~W? >i[c~.{}!N~2{3+>;^wt,:OxJ7P~W R|JoPk>t4v?tßO],3ur%P ~B=v!'cCvs7@(]x NS:N O~o~Ko5KV2S G= 4μ9V\17+;(v=oΜޠsq &Ey&ؑ`LǕpX) ׫RVz`r,~-̢7꫽_䄒]ۯzZK߾W`lTQ s_26=/i_bV Du_krTpa[w֙ϯ2\Tp}ږ{EZ6+Q>$:ɧ? ,9+>+o>УoiOͮOIuWxV~_~\ I.'TV'?+}_sY+7"jyxD/|!UZ]IBo>?q<@ A}ϽVz6зڿ~_GF!Ya(F8Qݭu|㿍rwrh0_+B}W^#\S.~&j}:.ڟgޕ[ͱaoyU%oTAhog&17<<xe)?{Wj;Vs ŢIi=iY^>»(Zy !\u JBYBaZ)B(+4p]#B(5L+VekV庆i u \0Z!X!Bm=~+CGxw?-l=K1:V=0K+cPB(K1:V=0K+cPB(K1: _#˻P0Y%a|w?[1=Kt+dChPdOB(K6V=Kt+dC-ƔvW[%ӣtP9.+?j%ʭR55ԯ!۬XHW̄Nْ&+%"e;JT,H5տMJ*d,|U(,_Θ]4NӞ2}?$k%'Uw|$+KAŜ.Ҵfӣ &jWF_JOӋsvn i5&Vec"3 @] ʶ4UBcn N>2%Bx9tz:'uo@-2]>yUɗ")yj=2A6%Rdߕ?R_I5><|f*TS>mt&=JoctDIEcSUDS~,CI7iߕ%+W{\@kLE՟mgޒڮ:6? nК-dMEͺtcF5GU{Ƈ d$yRF(ЀlZddԕPP>?'+VUV]4\ߨgk:!QBU*P˞5*{^TjUGgTSgK7tb=sᨲz=Ѣɭ9t4:(/ x5~NUv6?9iuuv^0A]<{T[Τ`6c[ߩ&9+Ge)JVĬڞ{B7(6Wת_>+O 45ЫL[Gbl7-BOym[S9Dr& *f! N.N%ڊ,E"ȜQEmy=IRNB2lmN(:'>ZT"_RVܔeNMi;62AݻW/:5%SwhJ-*~f)~ uyUΪ3U*V*:"ב#jg u;۷b9Uh&0=$ύla EwuTQ3=lХce;3== tz\NrS hITKa,Sj)4)~'b҅Ku:;;t)1IT-הVeȺVEX6(jwd *lvU4?O >4]`U{QECW(5˭{z3z>k\EN%]սIim^S"Eئ|ր{\RO^ykt+:}HN;7' m5F4<\>jjFȯ+5/I-N-NxKϭUYH6WƔ83"K89}h*cu֕*qdH$&"B۲˔RtƯ+%:PXxLbTdSj7463U޺S=ih"_mMOQSzҐ 7xQ}YY&arZ-kt#Ϳ&o)ɋٛGLW`'/+RڵVIGT "j;`UhR秕rBݩ0 *Y1X05ٌЍme **A8.tO/DjWdSJZy)UaIwӫњ-Nh[a)Ą$mo&69Ը_Ioµ% =8>fYf[%AFuץܳ$,bBu$b<3YvL\0@]y/R`2|+{-Sݾve^Q,ڂV`P?Z] hЕM]%.V4oLx4!]|:x^3Lh.wi,nsԟ(VCJbR rQ82f)'&)V,]=0ۣ65)jGn_PnvsbK7LtEK6%пpPY|ZA.Cm]5*ElKTnF#koPPN9fe!x7y=*7*-#grBS9{Qṗ*"rf(iEFO'i83jflեtiIfka(^`ЕUhWU`9*VƁ @;IT0v0xI)c7W)+Ph:f4 L=e^V&ܪ ˇtKIGA W*OlfU|FK?N9HaGtm~PlDYO*L˷m*G-/-ԁhx0ōF34!hD l{|̓  \*[s0'噜PBvl.^M)Y#^R`at\P;tU6&ܳ~&X򁉸ܰNԮz<j)ݤcJ9}RO93lA D-MۘԌ䆰{E1nfw)dG% "x'fgjZY.w գODpvü#G'փ";9< P,%TLv=)D ;VoԶ 8lKT,ES"8R_\PXDȼກEt"kn6lb6V%*68MGKp,cV6f wzR4kWӲTM:Ղ*E4;_XAk +JILӰCeoJ9H}3k_Qf\]}`3ajnVôIOne8ufUՖKu~|@u ,莞mdֽ2%Jѭ?"G NϫOf(A&T64Ầ ʤ@f{XcFXcyY*lsxqYrȉf$;M[*M@]<|`'Og +S]ۻtJ4qQ߁)jS2尫 edskc*@ڬzˏ`@sr$hb8[5mD}B3)Y%cV򲘴DK46:laIWddBn*+O)dQ~t( 8lAn 0\%K6p71v!̖ja mGz0=XY]lali!eܼ04ݾQu6D 0(QCioUj`e6 '5 `T;4Lͬެ\Ƞu,lf&HP>VN%C h}mϸf@(WE^|0Q\^a3@TeIuj+DxU;DXji 쒟-(MϽ~*\9 UH߼ΘLPR':=R~&&kXH%Zae%";g'X~kl8[HKd a'U͍*VQh@4⥛ޥse#( tcwmݮL4Kvl[Wiv}21 F_~ZWvSͫyziTDb)A;Fl.sd#> t#({> ꁊuMP7@"Uz? A-&LM d144ESؗ$/v2؆Ƴ՝V m޽lbĪyd㡙/˖>?"sPi3y~jC90tM +zTMԂ: ͪ~=Aؙ:S `신zt-sؾ1!uՆ?Э'O-vk2hN>^2Y=UUgȪUEhfC ٻMfȏTH1A\gIoE1' *i 2W*0֨c ͷjC NAԤDh?q%A|3%斀`'9[VCǞSv9?w7BRa+A=?U<лa1D 6EQӪ6fAJ`|Bإ ` 0lT0cTr養/i`njcrL !s~R]Պwlؠܜl%?41 cgIӶQbvݤ(ٌЭ1j 9/)yZѭŕ CfB ́^:wZ Q @cK\sp|Oijm2Kes6oO{Tmx5JVztZljټQݰڭXjOZ8 z>αi}Jx1%!H{2=+_}6"NMnQn>9Nyؖg7Zv \WԆ_В˲qـϢ"b:2Kt[eJSFYk69ެ 4ܔ4qXdjnmZFA--Y# ^eMJa 3[Rsǝz(`Fd Ԋ9yeVQ.V]wOL`^߮J/KK(vͭ <⌋"I/4(a΢çrD\~NE`"l;͚<yg/IJjV' IDAT:uݬ<]J/ȍ&ikmպVoy Չ,|E(Wl n]#P1ؓmjS;}@չjx2/$oX|B7nS?X X{w(%Z=:8Tꃵj6ݤ`"n9 N(٤~ҧ.wi8 CkE6d\PcԐ!5nv$@e(GPTkj=h`j~~%V$0S!7 e iʀ+ZQuO&.yjp8+7՟T¡ыX9o7h/q5?? \c8 t"',ŹJ0EpmH6zҚָLlөQ]NbFkŴj 4rsͼaפ-_JlUfHw)$S,A}a䥡dUv b922ƤЂ +\F-2;FGCZU}֮Vի[BR<5:GƢ6>ѫ3˾SX 4T H9 AP!'r oSxVI ΓC n9pۇt>ϸ/ű|c [Eks&{땵ZQ)^W SZRfEƽn {w@S $_4W'B`߬Mn" ]5L:ЅT'~p??䃝A\0!q /cfr 9'k:G4Ls\'- z.ߋePy}vk&{W9" G ݧI4!p= =gu%lKǵ[t;:daLlQz%;`Fj)h$^DzzڻN QMsg5^Pz$*hT(!:Tɀ]QPH?vNJR&y;i+7N\l3 ;vܩ[wݢĩY v:@(2fy~Tx~B\Ja8:FNhKStс=eH_N*7)!%Iu(ۃzj9*2ՃCʩ Qe-c~V8db4s:1yI͗9*'vhx9uOcTC)0ZsؔrpZc: \:qZK'1ZdVUW!̆Q[O(Р'c gfjXY{4?=64oRRpR 4YnP*>@D]޼R3p76vY9c5_Q1PȻ#47"J1DfymɝPKG'3 sim!&Gu w5՝BrU.Ϗ+aQiYEKX?+ZT$M/VhMxs`NhL cPпq0hIf{L!DZM Y{;Npĵ[n0bAV |<,S{Bvc Y^|À^cF&b-FdBwV9]ثdg†2AVqͳgzRyj*ߖ && Z;VVM '$ ?w~ SlYh+U"ksXمڲmP ;n[*5 f83cOs.I8pV)zB|9rc  Z]1S$%(R2qK/.ѱl% b`+wݧM;M(rQlg~cl&)8vBuh0k:,|\X6B1~׎ƴ %fc˰z=DZ`[α!gi߮Y^E(⸌KxzpLw~@:t龨ܡAYGz"޵A=mm" BԋA$V BDndiCk8~Avd:kPDrP7JGJR?f&iʁy~kDW WGERGfp3#A!Ss)p IKկ|Z|8T'+1U>v0x3$wO2=Li01@/ "8&.i]NًjZTLG HEu`KP|}j[Ѻ8AyBiٚz=qIn%bb+ ef,3R'B㢘wެd0kfs Y /.=C;Vvcci];ȩCa !S`ŷ8sdq ‰i>7ءf4T;1d?Ѻ3Dfި*,/#^:&4p á\Ԥ@(n&At^p di4JѕU1.?O*L$ܐMc@t`w+ .҅C{\I=ʅ!8KnxHQ`[;uyÇ6@ݗFGe^XhKT"JjoPxV b 5o^ȱrt_#'DP.aюۤ9s⴨-D27 ncnV -DNhg3., GaG{=?4{`CKÏÊ}o,Id&\?ʊ5s^&Ҷ߮24Q4AN Zm;TKb{Jb!,5뱳 (r~0Ú?I!L|滻U 'fW 4U{xMmqrNjQ 1xHFIfp8F.CuM{ϳ>47ɉewٺIPD0ـ@m 8=Mgg#NBe c=~ Dd efX~ka&]Gs{2q0Y: @,g@DY*ɀaeae0s&h'𪄁&7* "S5Vb_GF?C~sW^^Okކ[5>R寪8 3}.cKBUVgqQhuJ:u̧ b٪Bh5ӽR[AVY{C:2 ?+^v7#JF_ `&:/>0v-P-pjmJ8oS}Aٿ-m*ۨTDzJdžqשm.V{q11v=?e57Xk),JY @cXD'_ (D3H>H+BUNi'Q5ۂM+A(  \%-AT_$+!;@pK_ ]Z4E3:G6К$p~2.*륮=s_R+a}qC B㛯*"r [VgBPVOT^ p𓋣i#Y ,'y8?5S9B4N۔9\تS:~oQk[[Xn{U @[9^&%@jUT'{otƋ'4}рwަ 膵a:Ђ#yQ6RՀnWڹMD\jU죘*mNlFuC)Œ> w*,>| v%"ef/X Ĥpdk 6>ҬgYu8REFX%(&R!C5 nRʚ-:_-:S\9 -k=OݝNe%`] k꟞Wު_gU2B{9%aN8 VB88چuJ*]5Q;獀kzs4b 2."~6-wi&g= ގ7i؋} Ck!›oR +v aT2q k6!!4l Z7Lo7tj ۋA2otB?A)Wz}6ZH='o#b@$I+\lGk~U!IbBI}שŻJ6מFg8?Čl)/ w['VgQ3ppД 51:^yY* FdSj2It"_ibz֥h[O)9Dg:0%j?pU7ᑗ>g^QvEܑ/+sꋸm'GO&p=d"Z"JY6B1, ~PQ%ihuZ7)N?w4@|=*)OD,{f@؄t81W,m3^x4JH`?7FrjsoױWZo;]b!^ ]ؽ]4.{~ԌZ+0Br}F94 $Is΍n\%T66A7E^4rs`7p 2N5ݐ@By6߆卵ø>ՃvRBv6%׊ q5&C˧ ևmYR%"ezLanum<%E?C[p |px`4glN8@0NA*m0lj2jqUˇP|1u'(zV)͔I.VGU}74g,j Y\<X4b6l'X'##ulnpX D8HC@(&8Q_NB2ИZTWc/Z56xVzk`VI)33dIPn}:Y~p*^HG+r|\Jf'hLhZKu,GA]@ aṛ,V?^`İLìd/nrC`٠)N Vf\ǍO1M5ῚVcG}HddzMXӥXs!Qi?U9QRxeUЎ.WJ 9l.$f/j?*RI{f"nkUuJIL0ٗ tIlMYiB|~B>7E,E.˔Fq{t;Yh])*?.m `ESp, ,x THR1Xaچ:|Mv*]-rN^F#`GК#R<aGxÙ&#`@)1+ \tJP2jv屔*U(9Ls5Ϥc ^ކ>v4kg`5)y0S4Mԑv *+'@k274!,@ 5(Ws J<}IIf2iV}1Pּ,"0,.ձlb:Fm4+??rE Y +W_GT~5o%pu ?can;Ts53A7BC.Hkj49t3JYKӸ]N-@.9ճ"Xq2#ܴ\= tp}>GX|.yXä߸ Az@tݬD ԗCGL?&W ;d/-Uұ`=̳rb퍠"?8@)<x.8աPn)<12~ v܊~.}bR"?jqY±,ʜ\c ʼnO"`x(6땟Bt"jzAYFnPJ+ _Vظj}:;?ӯّ͊%j_wޤWdK:7ʪUju!d hKjoh>y[  GPl j/$΍n7Yɒdr"W$3?P룻d xn7~W Y&Vr&A~RX{ ?4 جYpX[#lSkW) o3hq03YaLܞ[=~=Y *Fq7Qۉ3`e!"ڬ<"Q}iInhRʌC@0cD_s@HA/3deK`: i|2eIqaŦ}^xʫnd-p;hmrtr/yۢ`߳JH}튑}<KJEuw`u]ތBR&E>#. p1n/@߂ |Sn|*^Y[QQ.ݞn 1f^ :"m8+rBIDATLE-d]b-$W[12 y@~Fh8ŒKĩm3٬h&59_AnYY0pwBs?uW @F(f㾀 واècXi#6eI3q.}nRr*^@/[jm<|BFQZQm%\ sDf=`V7~ydh/F[1l; ,lpn0¹\6suFA 6$}!xX'>~.kKu, G1E?hu]Ǒ |fǧ9ΩVNޜ7'Jx 3PZ(xkZfD3:JNSިFrYĐ{b]L>bx{J/I]8VcV.bb0-8U X/߹.-yO<ıkg! 1uZN|eEb t2è k,t]{L0e-Gïfb]}m,B7R\[k=Sos {>,>)G!4g,o|BsMϼ뿸,Fyx'ao}\OK^?_׻vz^}nϫ}ߗP^]}yz{?+7wF`Y jfzw3=zeg[ִuX׵sߋoV}m Q+ͧQ^8FX4W,7b#U:;^Um߯][6.7qustkYǴx:O\J߮-fnZlgq L;?mlbY` 98x#a??& uQ d({`Sn7Yo3kJF6w6͟9bw[P!O3K"Tӗ_˿*8ٛH?8E۷U߈/0v=oK=}>#?C=[[w&Gʑ#kq گ_O=aM7ި|t-7//`i^n8l :;;};{^/yaf^>YgA 70o4dg_I̋2?яڸC 8$NyL?я~gNg~gu8ǹ;UX\'|R~A7~X/D'\ yTH^Ee%Zv&kĿqZnN|oe%%-%k=7~ nk|Ї_|#&nto~%.jX j uk )"Źyз`#9JJߴYIabice5VSs8-FH4єlSy)s#4αͧٮ:9gg˕Myv`5dnLѩӧV/猠RͿ4ožߦ/ϙg10}JDشysuvvbQô1O.'M=.nML&냃>,ze(Wwh VajCnV9v9ˆ%r{ܔcہLA3f\P+ChWTk < ObW6gBp [=$ف@p8]ߘ~0F_l{B6c3WObΛk?M朙(#Hq4݅ ~bovn-#GӋu]]뵽X\vBY~svz}ˢxΕ._ʕ-?}/Οneӿ{u\]ߗm16 /{4ovŇ3Vg).iJ/ ,\Y1Q]n[jjf>/6g+[,0Fo=הg5x+1M{վxui>Pi ˊx$Pm\$#8M/`_`3ƁFRs :gaZFm49ah$hF6q:eECѴd&|[wn+gAC!lS?O icH+I4%(ϔmC%F/@E7ӛ֬z9624c3 fܷT l$zR <>I ,cH \thlCSA < j?Pm&4\RN${J-=#2^AX\7/HKjp`urd'EKkU2&im4\I{9II4*(}1+Ù "Tj14uƴ|'<Sy{aHɫoCpC³-:MJ*ɋ{ 48KOL,~A98qDNCQ\Ec7ca-. , c[D « 2SF# $#., Ƽykmvf"fTz:8dY 6 Z) M튏9o>际tub2\fq0~!P7(h8\31`.H7pyn]4G<5Uim3l5˓yn󌗆Hd3-Tx%wY%>` 4%~͙< xfHɱppj"~p>OڰZ b|7D!#o,5Lǜ3ƿ ͛뭢)`S^*( Ġ^/x~oFo4&`0!`ZT=ge[OiЙ@ww晙gsfvS&Kp;yA+GUcY(:5B2 Al mǃ V(%i`vP;, "t2gc"eiehK&s&U(O9ѿ(ήCI!Fly3y˓RdIȊl,*UDMKRl|1 ;(LDIJcE:z]bKcV%Eq<2JG@h ="s;kq * E9[ecc=HW0iC0aeU,Aacpr}l3l9jlo $^fYD4ȦP[G/?LɃ?4kDw?^igG S -j>3^FN„xe;ϔ_61M> =(\f}7|ueo9?yW u:LϯE{N[_xqt[8na<ҼV"S~V?Kݱm6lxtj:h¼ N]54q]WDޭ( l/3gj:KZm{s򦙻9.a`jZGxF//j w^gjX޳O4O7(i4g~aMN< hsv7@/{x=a?O1@.` =ȧHfÀ92yT& =KJk7/ndm8()$Mol{t^ /4w6kޜmc}@<2&ʵy̕Xqm@iC<սGxT!Z!j[akd**>3=Cdłx_Y8wO昦<}Er :"cL*V2 IA=AքL' i\K|M7x~D.U@=JU6_ 8{,ĵf1dĹHkwMvTbwp%ckQ̰aCb.h\lV+P8`GDTm2Eꮷ`OzBEźlqc)]ruUą.Vi#- R2NI!UPD6B<ԥ1!'/(Q1Ug|hlr!Z",ڤ׫(O[i v7rf2=נ8yU E\77Bc5ځܧ?"Dݤf,+Y (}aR7WzPznJ,gvXD+)l^ _l^+hYDI@H@I8 (]) %$ te̔P@JWfJBcmRIENDB`jqapi-1.7/images/0042_06_20.png0000644000175000017500000011305511460407074014631 0ustar metalmetalPNG  IHDRQ?PiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxx\u-tt`;@`TEJǹ7|_/M)77vSvّ-ۡIJ,H$X@>L>@8ě@( 98{G xo ʺ! -- eni 喖iC놲nrK˴!{-SO=^YC_*P~oX_[q; ؇;, ߢ; ؇;, ߢ; ؇;, ߢ; ؇;, ߢ; ؇;, ߢ; ؇;,C@ 9qi6bDq9D|o$.딴ᙯ~&o䱧Oλ0ݏo-#Gq乧װǺ f[̏jC7o$w9~ocnzSyí[[#'k4i|܎=8#ɤP7}W~IDI~.y?oW>+ePdL")cm/W~GkQ=.Sw࿺ۣsEqvC  C!谽C_ /<*NE|okCl໽/W=YvtՏw!۝@߷}L&2q$۱i~ǙቾsO6͙k~p${n3xH+Gp#/\뻖91?Z}'33<ᳫ=~qf~|/wLsO$~V_rw{]~~_wx?;KLdғW2If5;7;8~';k(Y:p9N~o~z8|ߜkz~$]s!# <ԂUXƁώ~{ Ⱦ: g/#j+kj(GqIG_lƗ&mN&;!+M7/m"?>}z wo_J# Z`_pK~oˌߤ!~ËL˓N/'sAe!(|9f~`6 N^(Y,ppd:9A0їXbx;7"ndߊ g6H, nyb_O2Uli~2C8|g]n '8?,9}J/n(kcG` e-V#puClZ\⺡*~n(M^K\7Xŏ1ޓ_?VK|wdXUފ3X=_+[75] ûkze놲=غ|xvMlPt9?[7ޮ镭ʚ.`5[bfo7ZGS r1~j "8cb&]iR%zuZ %pSfN$#>DEBrhrLPKPȗ s!}[>V4dr>#9ebUVwEab`W[p&׊.9s'8{-@T-w!4 _pAfx 4 lʰPQm#NC37مvuzʫEgX dd)H8K JR]:.I/L#u!\A$:CXł=I RH")$~~{~O +D2D&Vp 0cEP@(ˁRKz:B!bdzFa>h/A$i~7>m۸96L2rV.)E6:EhVEm}t oD޼  ddbi=K0}8u⟱dÒ QCIü|4rms33{P׸=mH_LL\|hlr|CvF$B0z1:ږq`v?LW;1gHHe /߀2A24/޸-Bǀh*+l C!QHP/TR:9nd0qU›..ATeM-\}Z,|5,hոQP*h7ixUy\MhqA2> /O#JI/vcz/V i2 ʍ+pނLFP_\(ƹc =qK!|= H Hn€MH.5m.rK`YE?DŽ jv61QiHubػ.@T*`7CܱZp|q4jW qi:3X 0*Sb2Xv. 5:_l쯷PPF8r'pCp2,' {;w'?YTXtgϽ)Q:6UT$ ?})r [j9D7<N߂u~Hx*AS24l8 nd8٦m2"Fp1]\-`T>Ń݀(B/`80{%nގc^JLu"GCZ&0WbbFbHXr-w;sF}ċ> TflzI8Q nFK 5 %TPi?fb(Y!еøĐr-20J2lPHWz=R)sa.8+!gÁNi s(ᓯjHpGS=!BWE: = i7-t2TQ_EMhF̹W/a8J`E inݼadiy z4E"h\Ueqs69F yf!/L=¨"`4}&A,0"bNIάÍpGEې/;o²FVR2 6wK[Ånt ?CLOazrUTaU`Ѐi/Cx爥I:ܗW;5SL#["?#:qT?Cl`օTF#_>? e҄+!+Ps"Vj?zzack*bˈT^Ls;iCHI.vMgLh|;S2# IUs8ra#*$f2!Et@.oLBtatk#QH  @lx-Hmb()Vƣ Q[K w;|"fs4Z9(O6{ Ko$,tfv -`dl#BcsK;W>ݨ`e3 ׯ`vE 2 E=H#MAu`1H2_B`ʧkgbYbz! c@}\7Y;fUTl܇:;qJ;\#7 vHoAo32Q$\-`Mj"OkG4@9OSW>P)UcO~&ˆVd('܈ =s10ocfDP)煫νPq0؃$!e܄WxB ̌2(u+x@n0"lG9@@0}G$ 1߶˅y(aMF@B,,3H`ioωj~.rFĸтqEZ"P`TB"dHh-1]ŊTK ?3i$i)yz,@kM)͘afyO<ՋzPw3An܌+K \^8a_>MTg }R(Do#Cb )=Fݣd;t1#^ eC'S{g<@BIr ?sS!,ʢ! 9r,^`fd-#Mˁ? wW}!x HUA쳈T0j|#:.wSyEp]yXii?~ uIN>Z?"C@"QJ\X2vB/Ѩ$(mΙ hQELk P^Tь4fڽBA. |6ݲX )F!iF3߃Ҟv2Wjѫ]N*'CcF]'x'gxQc2,Òg눑ii[L˙!aZ൐dC'OfY 1ƒ̠1c%f,E`7lX*Ȯŗ {{>}ڽГ=W^ƭ"윇VjFO"@W A]xqypfͤ vNofPc_P1k< _@ظj΋%Ә k{@Z.Qk(4m&"4Fo\|2F;3/9glg%5$Jf)))tC6#OC"KjEXJ9V*$%sZEYVtwC JfES蘯U6! .x6?c^F CDMJKs^?2?B CaoA >?Cn"&sJE0Zw`1O墿 DO>Loy(|pqX'X2GMnalMnE+(r"^3ɔ;8>WD2R,Ykُ4k0i̚ts 30P'eigCK$Ilmk@EN9{OX@ Lk >]AG&bw)jDařvUa xjȔ#B™9[oE`?dT4TB>bQM$!.<3qu͌${PO2 ;"cHB@>ƌ0Zi1WT_W.؟"=77c2+gO1?O0*v~x3md*xT <&lmÕiiAQ!h=V ^rcc3ob|2axRy)$@_Bhqn7ښP]sgO\b&lٱߥ)DHv`Ź>\톸a2m v>B%KLci݄c [1AeAB`}! deYkWh7V7D!Iʜ8-e$iLȩhQC K5wjQ̇<+6qy/YXuA!$Juiz$d쨇 3$CQV>[ [߳ ffS.E>HIXyǍM/%DXL?RLJLf9Y+gY@D?'#Ø$r}0F| S7KP_>wȍ %>ڂR(IL85"$!fyKQr7*Ѥd]SӓP1,VQ,B_ˊuCǯ^]OCPh1\$hidee T!etֽ;V88˄ jTt @r~*VZRӤBA %i@:F= S{r<-FsKF#$ϸ|7"3_C!L4Zu 2$͈R@k bwюaF H&%)`DD6Xe_4WaŔE''RLN͘mODy3iOi|XBkO"'PM+L^E.8Ga? Bla,Pn&3^a8LEDو `a*/ _a*¬eU,$}0\(f(#YZ@d.skM!8K/[%$@ 玭dt[ %IȀNTd38 iE0>C}b`Gaj'X٦"k4^^ 3rª=枃v5),'AӦ鱙#g`.߀lRzn sסez)a8p wr24-9+|Duh=W0մ C.A5nЩػ +_eBLOVnjV珣z=3[4A~]DG -*fjr^PlɁS"J]\tƪsόax=BJ*S +$dl{V- Z9WN`xy*a&ꚷ[X  g22)c62#< Ϡz-_k{pfهERgҮk`΅-nlqNR-,DRw/$1ɞQ㚃|T>UarRVqU( ~ԎD<^U=,B̅ (@ǿJ`J631*2Ž>%ULLmGsdTAA4Ձ嬩Df1 ܕJ(aʪ+C…idR&Ytd[eF^+[26bq4*'fz0] b<Br~{~|[ %K V3ls[+SC8Ğ/$!USt%RHUɺ9ҏ!a)a390K9P|j @oʆ7ϾA C:BVM0Ocg^Dre0Y 3jѪ.8rãv?6^&)uÓOcNBQ2ZndB1Af~`h1IQA뉀jEAa@){^ ,zyI$zǦ+7+b2n,KYIPC !Ic%}̆ ?NmeF35QI,k`0e#d]CEͰ!I2mTԔdȘS4@<3A >@Nf(7aVˆDyN6ɓp“t b`9a@۵%0]Ŋ%ĚP; NH'cN2{BBcZj~u[ E@%E8e$. ?d;1*S z{*(vGPcfK]\PnwV芫ٞ G;QȚ-Gf)Dez`$OA.6䞏Aw;LefxfhT k) ]Y乨o6ղА晽 j2@lxL -ZhTbJKx9L4 HZy8HJTE!NHcuc4k]awQे/iGY GF=XsPĊ`TrIhŬ(IX1$]<4KPa%l 0ͥˡ\@ GaX!>S롥 'Ig,Rd0O7^J0)r/ߵ 1MaT6s-,!,'Je%"퐲~\R̾ $ʢ%9jّ#hؼZ 6reLǭsh!(^rd** Ls)=YOj@݄Z6& bhŽה㘁OVřs؛%hC@⣘J13{`':iYO&PP b(Y"dpq/N䂞`"adB)cl.W =5O;pO:_ziQΐ#8]l#^њD͊-n[.KI;䲄gxwi#o$bq-_£dƒVtfCxȽ S\ߓ:3[T=l[& )ι#ˬ ۈ4+6[|VDCHѽ_]̦j>D 9m!g{a` 7˹x>7h aǭf˩B! H}j92"4Ib-U]#!b E F)kz )fJ-V;{:!bˆiC.BzA;=EGEZ4$Rcc778}q5E?>6>'A߈L I=%;ډ1}%p%bC}lAVvٌ4yyGr=3ye5kxee[gA:\B*E*fLUYrS/AH"_*,urߊ)g6obJlD4gSҠ7SUiMBH#')*<ѲW9P'8="gtߍ!rClBdDl=Yn(@'NЙvWylJ1T;Nws(,{b Px,iy%+V_=C_Ct/eŨZBtzTSrK1As>~ɃДn|J13 [<[Kε_ <{ibz;NF3hKPnlB]ӕKBzn01H<rgcE K (aAMkԺ$yC@"D9d]*ITWnT8é!pu \G U p=HªzܵJ\be%KkF8c#9OF+lNgUƣNÖh] mu{hH퇊uYMŨ_y4pe@٬hkk5leC5˧$4Ïq&r<(.,؄©tCS4F9F疠t`e6繬rVKEȯF <||nU;ă~*fW?; ue Bq9ʷ߇/c-?RS6+$=A3XM)KZίclZ6WQ.ocsO3H} ]pCͥ`Weg3Ӻ*殝cwS2[&ͮĂ}+YXVdi3LcwGrsj"B*̪|TQɮdKzӥkHDFm0,1f#jÀZ FMAb_ `2ΣjΞj B^΍˧Q"m1u53,oA_ek` ܆\kZ (I5 Y^ۿO !8c^许ǐP ПldOuEw];<%?)м0Ghlދvٯr1 ؓ8`6+6fA2'-BCPM &ߢ"=I$+XC1y"LjC\zCCm۟0'59vQbyQ,Fe# ˂ Ce)`&J3E@0v߃%Y mU/ApmDE5{vԱZ牜9iq% r Y >q4b5)~smz@!A] bV:rq fz&I>Q\MY[Q,Sqb}.`}V6`kB;QNE1午kD"~$ߔc ]P7U'CuX10RJswC+ܡYl,ߊql*9J[Cal{YcG̉T&zX S /$Fc1gy13w] '2AE^SsF|rNLj" juH(VkO6Hww=dy(aFQ1 &@v Li4YvF;80щInج &6ncczF,bY5)p"@(.,:P3'.ќP?gVb?h8 ~v/!ϡ vb@o@F^>,qV#dj+nihvB'['  K~E^Smc\0Ԉ(}4RN1Bܓfя1ѸZhМ?XH=L*$kz=Jd08ڜ'cӺMBҜd'R]R!(+kD~9ɞ d(}`;H'Gs`e?%S#RQ@CP50*jXlL?}nUAq+l4ꚏ߂ΩW2u.r @Rpia-{QC&e{3d IDAT`W}σx'i +l2VƩy=Kb<ml@U CV+y2quLxLN(j,D )$+4(uO .$ճ14q^v-_PZReg9rpL{K͇ +"JXt˒KM:|7/Q&aOqZ2 n鵔w&ٳSwsӜ+[q4_)7]xD;fS8Bj#DblƊSYIݰ.g JdycIfedaGyƮ{,Ђ)x9e @lVh84M[iF3.I6l ɜT-`INGqˬe鼜!yQH6c ͻ_`Q_v1`Y"b\EZ  ݾ;0^ÉGlܚ4sYxJzΆ9=EKRke)_D*<ho\DLhR]ån7_gՕFVlΡֶʸԗ`R\-z|XS[51DmoJhcة'cV'~87͊׿E'sC Nf(OF}~,ha֍^$!.JxQžjP>3zJG ﱒNfz'PR#w *HY 5_" *D k04;p^PN£9&kFOb}TEQr(4"jUT"m-`z(f8W ZT3{{f!mE]|^.QoJ 6601a;kK%Jai:mIRp확4#%6&.m܍jr@nxnxO:B8=s-b?sp& b (S fz_:u< lf603'it'wHINaǬT`h{&Gk¹3%T"6UVc%,ґ;y&9;6-XE_#|FֱXӹSDp?o]*VȰVc16Ns>'IQ5NQWRjz7W1i- bcԒral9lp> xӜ4P`Cp 1ɴ, ]cWgXp 8 Oye&oo  +r)KtF%М,!u C8g D ?AknNl"08SR \ƣx'Ce40*iK@#bW/l=:~- KQ3+H+Ǫٴ^ĉu$ۏI9B2SDd?6 R sFVԠӏ4=?.BdGYd0sT3Φb>e-_?FXI:8*w)[7!Ef3| T<378=qxIȦ<-5lOA ["Ne,o':6?c#,.beSBoYRZ1Zo(ٓ讫x-WUx j8W1 {,+$Rv;~`gZL8BKiq{ *$00>#}8hC%DW7ڹo>}݈E%C@Ǩͥ(;%ZU26 ^~dYJ Pa-LgHS`(R{B+wc]IShLY /1>™oj5v>UDAU #ё i MȐZ~J#H@&@inZ ׃Jo. p;k !!;B7YDD*S[{_}.u[+"UE @@B{'?C*dhgb2.09D%ԕp #Vv b[&9-=ZVaSr;Z@"Lva70UH\47ts&vֶɖ(%}ۤ7-529;i8Sbe)߄uDzt=p4 _NիŅSL{RQL_NOl)9gIXZ بNMeʖ2 S}" %;ț;Fsh&VR'O!gҝ3WQQVPK匓c"w8-듊Q$D$nVroZFXvidSa!#8Yz!vX%؅DVIl==2>aƢp > xSѓR%^6 ̪g?E yQaDنgfŲv9LԔK`i#k'i@v?r Ke2c+ďs0۶B3Yld򼍴J?g:Xe4vj6T>F: soIW; ˶Iij=T3mh6{rHz ?[0+={e Ёx)8@ʊCw!$ )K-߲muVj02/il秥d3n(Pʑ&kg2&z*Yx aPP/9{}?ߖ̻%u*6~ RV\$cqlQv,cN'.xǚ")Z¨#µ*nhH[u_`SeWgZ?y@SF2r5(V{f`Y? 1!.brR--o.Bܵ Z,Ws-˟\㊖tYْVX"6FvLRLmفٕ?x#$*[$>Ab)&]>4f(jF%R SÉ]b<{G{=/y[ ya|ZV5IZWA`ezSe5,cwVT Kͺh^]ӆ|aW(/ ǏY" ~acm;z\Mašv4莘4p$MlrC8g8cʕ @L3f tQ7|I!>P, QYf)LQ-5STLkSӣT+܈LrJ%}!/;e~*P8qhRE:굘?f"OptšVt ̜=nI"ޔq hU݅&f HGY%IgflgqS9N |[s/9-dFp7Liɿ#<Vaa` L7gx_Nݓ ? Ve*rgK2Ǝb;yjm%`;gxB6vqr|6O_0f1Fԛ5ӥ~蕌~pyԏE' ^ު@G O3^6ηp.zRa3WUkjNQ+zZ5VБ o0HGzqmuh+5L62,c5NU4- UI^=߆)b!/َnWV@6ui+`ɜֆ<ĕL>FfqE{#cF47iIZ 4i[~#eYUeܵo3Aoc:3"(UU&4](d<5S6PKe]LS#"ϼHXvwCW f]00-[K8rZ&>Ώ e)~]0iCǓ~s` [t?e* (|1?qqtnK»|Aqފ8τ~= =ld_.Bt*DLJ{Mß|'HX!4oZXUi|DxɢG:&fB&WZ5ml?/^:qe? |8P~ۭK'2~gJ0َ?};;`qm:;~iQ^#跲ב1͘{x9%@roεp@;C9P:eA9AHpO]ݓ븽i6˽: ~N;r""|Q\KP&#ڈ}o ~g3BN>~docg NlES-PǺa~~?wѴ~WMWnp}%@Qx9چqC!SS&m?2[ͬbT DF4 o65Y$//[? e\gΜAMiX}ޫӫ:;{߄ v~5x;[̧qhE|E3AR>m}3,P5nmQ:9` 57rB qgeqp30f:M{СR[vv+X!^D P06 Fz-lM[kKYZZMCi>4:m-w-'n貁_>MnU}6Lj'8PjR0mK`_.Ͻ0O?գsC?A`}*;94u ׿#@!ϻN̗ 4(vr7n+]ʽcZ7-9̿@BL9sLdŊrM7ɺkeʔ3ǹG?o)o]o~FZw|',kؤ5^cv+x78B^m|Xew\ Θ*QixuIԢ_Lw㏙`VTu^z٥Pg/6n. 噧뮻$$$Tuݦ[0a| E]tmS8N{MPae>|Lt馦~Cُεjygtu,xXgM?x0+;K.IDATLh|i =re(EB-]B-)D( <}.O>EMbS_=,p)0 YVm7^X<㤞.Ȍhm+Bta+%JވԔTSv!iVK7]>' ̥nj+r,HZînboB46nؽ{mXb<"y@-ZhvchW0r)&/:n 0ϧU(wdJ[e4N /Gy嬳Βo4;fWr"%ZHFoָd'p^Wk]/G4-D+hMMH={ޕ\˱IQhN?Bk0bHy镗ˮݻ 'i)303Qh?+_||d g1[I+:ʒɻi6-GUΤS~2Ab_mv5cͨvR\RI:),mnqYE0~}_ 6'Ͽ`f,fPwΛg}[K:hnolZ2ȌCg;]g;Y bڀN .@OFr@DR`]}Uh!\&sa,+,X`vm)}eEfWiՁ‹/.Ho*+{V\Ѻ $ną5eN/A1v'50]ͽIe^VjWa)õEg33 }3Ç6[(amK I7rU:i[g4J|mŴH3͓ҦcG~(կLLɋ[+Ҭ4n(^`pdRJ..RQfgu;}zn_՟?-{ZZHh!0vvzoב T`kk\vi+]vqJĻ;ye2g?ֳ;xxԿ]c%N_ &J]7q8i:ڒu g~{;m_pz'}2PFZx|I$Iۅ G'C]֢tGf N㻎~Oc<O$E9ݓirғK iw҅I9@ɥׅw Po?oԣgMcVgW 2;^w<ξ/V@d>[~>ml枟yg9GUW}zaZzȼTfM7IZ+7$qZM@ <15.x$@c(1Ĩh>YY4a_V]H9 阀&vC/JװWh{6xt/W͋gFE(iUDoiXU7ZĨpPxpK U AfPDׂRGcUE^TA. ,\ u-D:ڠѥ&!8=Тk#>՗`#&p %rUGC+QDrj2q(J%(htP7&k ׮My~5f.CSی 2V2 R`8PߺD^8{3<G7I_0TZ w1# R䖜$7z1V 3XIՓY}Xqm%vIaٝ((xڏ0~Th*va^=m1T3k|h?rɐ(\`ً9AHF sSh[ɻ4MYVDPJMAJ$ F)apJ.Rq jC<DlDB/̳W^؀1nt'('n'k[NAAQ1 Hk"^/mP(Aehj[E(UCdO5j*aR6*\20c)mmrLtl'|`o5ƑM˹ynW).hP X+ɴp)m_=O\TuFɿ&Jv Bk0~u"ң]Q5 U߳2 % d D:QRINHUm쇰[1 !t pRLG-0t]ZPNt7/Gsxv#ŕZ]F+SMk5]v/iCoڂ-XGOC4uA4`,K^{ 2\^,;(7YͿvQ>sCƄGWhjE9iDh[#*kk@Etm]a'5V?!I\CK8!%۪3;WOoF<%KJTR 4ĭݵ\q{zS5VdnGxɴ*=n/g5f{[~L-GT}I%v@fȍD=}N45(kA"ZV44 j;hЁ+TRo_e1 ]~M|17ENQdEr {|'CNg nCt:.@ xM"a8P`2Te;evo0xP ^Dh*Hvi@F & o#,B3) ż0lw^WSe9+~yҙV@@Dx+:˷Ύ;By櫶2LEb'@Q΀LYUk TCS6;#Y C &#q[~5I0i1%@9p0&PgVm/|3@is+vt8i w2j x Qn,c=XBMk>sXX-W3v3v?Vn;*_MG!ݧ>r;=-iЭ4ρ̣s] عoF${QXwtXM薀nv{ Gp1iu$qL?v +Pt ]`q^ Ì(OjʎUS)YHƢj _<@Lh$';a qX0*ȣ̅EMpx@kOoVMIˏi^&.L ,`HR'͝qJ-Lu5cI) n)D*4a9= [􆸛"74^ ǽqc˗v/:Wu{WD$yG*j*}ǻE´z7Cit`v-ϥ=1a׆%"k֌13i/z%nɢ~h+B$`n ">|f;ڢ_V2+C[gO\*{ؚ<@+ΔF(fCLh!'Cg3DJğxxRSSU[Bt> mDd AĶT`)iRWlwƩm}(6V" &Qc EFf54`.WW\W2&P;Xj:YrP a);i;T)"YP1 r$XZֲ/ҎքM"ȖxB)wW0m-K]AQG(~:1'ҷ޲hJQCzABy6kupA :q,tקcjBO<ͤNEO+LtLBcUwE\etA!z=+ΕvS̿]Rd,weE|BvxO$p0 01 @y; GGI%_ԀR3_ՌvJ vS ّ7tCZknyQZ֪(;oDM-{dT-ʳOV23|ʍ ]Ob,LƢjF41Vт SyТT.0aRTm>~5=tMhjj+a5֨7cqV:8P>202f%3SNߙ_Vl]QST^<3ix K5 cEu_4~uE?fN#1F&a }J D`f_FJ;?*)hZLmX@{eބi8wLdx5NZ"l75:Z.o՟Y&Gn;ǗEi:|DkyaDfOa}[S̲bѯF ʰJ ̊=1ZQc(aa`ߤݒSJxT2X01Cڼ|ZS@f/Mt_S"TҒimUש$fV _Lt P ʕgjfP̳z4Gaj0~>l?j^'^awᗁ\X|87kNAŀD[)ZPc6@.R"ᵫS*hvaJKMIFs89t#p $8@ M'(Bxr` $8@ M'(B@H+jq`@7 pp !qJHlr<9@q0&Ǔ!qJHlr<9@q0&SK?HfSh7c#n҇wI`[niY*K,K-&Lxw;'M O]5W&NNpBteӷ7 O>^+MU:6?$cU쑏xJ*)\"àW]%k?'5\*-yY%S M{~Cv5-ȧ'HXxRF;d%6ɖX;8#icӥO*N1HfW^5N6^'i_;[\;Y2rS%'V]͑l WɈڗe}QL~zE]Y(kwMwKﭗiEsW<(rƥiԜV}"24,Z$wtFik,Bj3\&_P>_[C; Yh)$ԺC|RX gpYzyd//5Lkj$R#'$k_,>Yu~ (6d^--re$\,/=Z25Y$AX,OݰT>X"CPC3PdK婻7Mڸ3 :{DW0(Ϭ+:2RIL,C|ȰIXǨ@x䂓49}7M6-Wal`nxd5JJ+La@Ε:K[_<.>$f9h 77c9+ƝvBٽ$Fr'NG@5n<.́dڃ!ͧ$V$iu<,{>/{IδhJ& h9o-#[*׮ k2ӶGM_O/5 oaib !L]tC̵j7/1.Jjavlf.$S.k0͹`خPvmIڿN7Oϓ+P|aj6/'aNފx4SV2p XU2!Dji!ZSW4K*4-e5ܵH Oɓc_,I@nj9/̑cLdB`>3Aj(ŇMpSMإ7--idƼ<+i-3N&[q/sjϿ$P+ >bER{L+@zR7N@ӾBrXh;.Svi1RػAt˻`+3yK՟V2/5Mz9?Sٰ#3kdhJ,62I28/H/Hx mUse2?rEO232̋Λ?aIcHҞzI19g5lOʗ>F?3@{5z'g-ΜZt8;rt =i3?ⓛPbqaWksG%,/|~mS8TP=.U(=Ⱥ`(WdC{KJ+!JǥY{Ru㊬{v=|q:@qE=;@T"t{\Pz\uP=.U(=Ⱥ`(WdC{K5qs/\zL0Q:}9t=_R@D_(|K5yr~te,JeʗT#'(`1J(_R@?S:LIENDB`jqapi-1.7/images/0042_06_21.png0000644000175000017500000010663411460407074014637 0ustar metalmetalPNG  IHDR)K iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxu%x+ʝs91)RK׻KzGڵX[&=K%ӔL   FhsU]+窽դI9Pu_ | ȮmV@x׳/gW`u5;Z2eߔ5 d 厖)dmV k(wL7e %kwYCeʾI|'Ks۲W+_;2̧A>3Ȇf+?ʇwͷg ٪D]YCk=Ѭ||{PpO4k(5ߞ5f>ʇwͷg ٪D]n>n@ Xs_Ƒ˳̞Ǘp׬Y†e?ǟ?_wtZCce8r| ZwLf 7lHxGB(AË7a{{Mw29\|XfpLJN EoѤ|q/q8n~9<=nҧ|(S?oGz7;otxh:C闞m濛ח;p{ѴWH^OBVgԟS顡K|G?o0ݻOәx7{tsKOnoA#t|޹|ߟ9zzg³s#WӇIf5K|1_ȁMgl8OkHM|PONMg޽jCG"S+yɫv{@FGG&aq %};7|iI!/FS_xQУ ^G%}yg:o:A[YsCWu?Ǵ<4{iܣ۱4u3o$kxOMI]cǞ{TfŽ!/f%.}NL?>X.gF|xid^ e>/n: giUli~6M8[gm; sg6>y>-//}N{yaa_vVf;?ۇ+%Q?Cq\;?+9 ~ӟ[5(u+A+5! d 厖)dmV k(wL7e %kwYCeʾ)k(Y-SMYC@PhoJhrG˔}Wo750+ ~b׭ dCZ=p?1k(k1rlZĬ*=kx#k(&OZ=p?1k(k1rlZĬ*=kx#k(&OZ=p?1k(k1H\Vdawd(CgVv z5k(M_5i>sʇwWg nڭ\!.YCvC<׬|7}uP;=DzR|k2V.=V Zd$ALGT m6DRDNc {Ci$\GI S>a/""! 949&% Xd (1KE9~),rZsr(wE`bw`W[p6׊Ώ%}3'b8w4A??-@Dþ!8o` fgxs4Il0_Qm#7w@3;6uzʫ AX = !3d4p2Kty:'B~#QeHX,؛P,T(]Ĺt{Wo@f @$ Cx|e'da-H e9rQ HqD@(DD,DJO(̇i1 4ԇZ D_{9+. "jDk4ж>yT7`O^821|E}^>Xbɨö=a^u9Hihݨk܋Hx2 U-:$P >U]3 !|'N &_+͇Gㅐ!aZ7R%u&l^D{w?<d:\ցv-^$G\*CTf)WW}Manx:ǐEnV, #<.Z$Aݰ&)Hub;/BT*IcCly49)Ү`>pFa.Tbg_A4!Aan)bU$GrrV;z} { Ea7u2  1KqAڮO~|,ùocEdF΀M0OoRz&GwO2ޅ+}ҷfHz *A814lqnd(y2#FDq1U\}OcT>݀n (w{B/`80s5nفŕeE=@ЋL!Č܍ Đܸͱm]" 5ڦѤ2cKKO@=PPMf(!LӵB̐r=<0 J2lPHW=R)c~N,WB<\[9*z8Rr j}`Cĵ^X'xi|'tz~f,5[+谥Q􏾌hЌwvQJM-ZH5 !Hݓo@g?y@,A@JM(;1q @t$G>?_ ފ\W,`\VY&2tfnB(=(ߎThj{4 :XIQ%-n?v}_7C>nCBJJ#W=Jy?v«?E4 LXX.Cyr/:GCpҘ\NbmŰNH|#>.U??(q"5s0BWNC AYh4nJP*ԩ ڎ.szN"/CJo&9qHAh$CH'3CTCΫ=7 v$a  m T1]U )2"1DJ6"i n1T?j\$wo6E\ǺJF@>+]XyP 3س-D'le5|M:]^?0<:dʴAİ^p?y.Th 0ܲW1^B]tX=D#MBY&bNOAu eb=HFDja_""F /-{*`#ë7ظOattu68osiGނ^Ifdp+ ZzD$H( ׏>g'L9Z\E۬BWEf>0CZ [ֻPOiz 2 :?\um+n$4g (87P<1l`fF^rqf;*̹sD'黌c?%Q۰TDX $438zf"UJ-H ]$R F%.B$KSH>-9BWM֔BނYkfx̓=jz7S-(O遃^Xu#lل`҃O~ җ IF;#^Ę:/\ywG'eG_|@  JB왆Ŀq&m\!0;ƻNbDck(܀hN*t˱pBn~ٻp$eD S S@ iAXP獻cQ)fG*u7}Hr(1 r4d${X2omj04zbI$,q*)߻H;u;n\9|U(ǰa/ޚÁ[Q1Ip\*Ra U4Loݶ4ưa#DPeqJ*л0 _6d. ?:# &0_TyH*0.V55 PLBq} ƍ@Q_'hfa!0bRM$TŹPh# i`RbXyz B\\TZlم|h !I.Ãt)x[]eC-9jGƙ+:DNM02*I.}E8sB ʈ"}azCnc5;@ '_-x x6˯A&zJ ^S=*S4q|Sy 92C7srHՈئ`31kAɒ aNE)mvA?r'?bHӼV9tyH)5nbz،4+vD0WBC.=!]O"JPMm][kn!x0F\ۀَCȽbyHq,bB+O !ϣU 48,Fhev!JG7l݋T".-` ;o,4^(&oqh|!NumM>y'qߗ7 O7dYEPbMW;+J)kXF{*b(;]ˢ4* Jkzc;7DLQU`4#Erk "t6ݲhIfG iE73ύ62WjѣN*'McF/'XT_|+pF{ <+$=@LWFbB^ΔW y\&cRx,m4*'Py<Kn"rxJX8(Lr0ċf",d`UojAz2g `?q&I7;栕]hH&UlmD@z^]h:2YhIH_23B ʱ Uy |D;&\2I\ 1JV +G"ONf.By;iF8˅'{d=Q|FwYRPCdBwt.3y1dNVBc \2,QTcek@7ԠaV43 ZeR;t,b9:QDC%fF@Ƭ̇ 5߸8, H,M#AF&70:""XU^b 7X` "?ti)E@5 fM: 9fiXJ4³'%W 6ڷy7k@wN%{O$Y@spOĂs $xu'5S>\_L.eU Г(8{ S1'<:l$OvS yBAcrI88gmH쇘~;y!]腊JU",::ӅǯM_yr} $Ͱ#k-<~4>+ dY3h67Q6L%YHXqh}IR޳c8v6~1,p"sW5[Igc ă)h#CGiۤcy4a[Kf6u?Vca~َ_I ިn3 Gיr2Λs7Ygf˪[Xbf+f#J\E[B;ۇcU8`,,Bwq3.}AC-Dq $HAJݒ_B 23IYmmRYϢ02E,E)Sr&n {%J@N#R3pӝ9n~#J3lkF +x*|O SYǺJ*ӫ q3*6lb gUr)>s2bVf5~b|nr 9 r Ke tvWq> AS@p5PhHYf[q8 .#o0|iP>taZ SbN$e&%j(qHSQiړSn1[.z>8+N~S=,Y_!t$Z^u 2͈PHk bWΙ!F H&#)`DDͰYǘ7[Z0JwEzr=YDEUEY9T@FLg#BGBK@3Gfy1 [lGKa 2˂*O-00"7SwAE=Ndh IDATnYe酳 0Y'mAdtAԛQWKT)bdy&i$1^#MpB@CIvSg::(P vclP4M=ͣ*/I*xᦉ_ťh %áFfNGfRK 36 c-V7ݰn&HecWۖ0q*| ,ُ," 0{Zv1<F/adTГxwQpZ-B %P G7HsK/ r0YeR!C_yphß@,l;K XB !Ⱦ4`45:~qwT!_)*֦Pe,AޥR"Fߠ'p# (#\9(nF6lIsB>UqgNԈ51u(++\hM< :*$Wvɠ(d% IPCFRgEцXBcu{`Bmvlƞ]]ӃX{P Oʏm)(hM j0,70),,,icuӃu(hCCD$7UAWI %[V篧Aw^<ϳQqm˙,Fax!0ii1u5j 鄑#)(1h8rr2 w[6M9 sTear!%luymo-K OxfX7ZZEz6g咏j'&!H\% :c{`eLbmDR9:7ӓ042#`Ѕ̖F&Ln-l#QBK-?(S"JU\tƪs=Obx=BJ* +$dl V-˟Z9"WObh|> u[)d3aeJWoh牏^PPV;m(ͅϰ! [o݊w0ZbY A8H-0c.=e9 |:4kP( {=zY ,ۅ Pn,E)ڜxo 0;T&13P)Α6]IUcd;-f4LsW+7u( % 'jgp}KUcr9#Ey+Y]Lɑ$YIM>mAcזWas{٬ؠ]V-~u1vy*^|ύ"1܍=ٗ;}y %C Vl߶ͭX} 4&xD%:젛!6jiaI4!⼊,%I]e/k=?bw [0EUsГ!Nh沦H69iFKƇ]1{mc T-"PM] k=F lŽ)B[U<};z/xz7ŸP)L٨'";r=Ao){elS9pm> W2Xj-eH}Z~O >,l-zd"KnEGGWFAI1Hĕ3bDG|a̱Vu34B8,&h ,-&)*6{aP6H#,H9#RB nDE/16?xtbX+^͔e(k~vl!i xTsA$sadسP!|gVb6LmǦT18}BLgIFאQ3l-yHL[$>?3 5%i27E)Rz( w45pgt@O0xM!^M$Ӝ8 '3;g6; *XN0o*m װ"tp0N]dҶqܸ ӻ¸ kй u^TO ?:4B=)zE lT։V؅(J b<_6TӳlJgŐS~^3m9w82I֟tAuBrĥѷ'9DtްTݕ!_I42 /8?=WbZ(gq6hM{~ff͖W-NQ|rY34O{ϒ7иV1XԊ.Pl0V`j;krXarK:iˤ!8wda}fezWu2ՊhIKʶ\ n9*Pb;I(xQ#\NJ))Cl|#A`Ɨtu,RJ^ \,rHMDlu#gUXf-S(![\GxSg߂Y-ipu>-İhb; ^f9 =ۋ1-$LtVg9čBSRy 02R|۶ 爯v_ *Ѩ>³M8ĤՏ|>-ANLhq]^7W=uLzY TRip!XS#asE`GSC? Fـ$, ~cS}t $8KKƟ"a6șXrZ䱋NN+thT23r^c!]tlp:&PFV *iN_2d#\chՆ- r(  'P{8`887u,›h,Cc] IfJV;; bˆ)C.BnzA;=EGEZ4$R[ec78uGq5>6+AL  I=E;ڈ1<$p%bC}lAFvٌ4ye'Gr5839e5kxeeS^@:B8+D2bLUYr2S/H "_2$䠿/,RΰlĔPHF0A nӚ wFNRbUxeqN`j Q/$ʉ^zVu1U #Rū<6\%*ԝDI˻@9@Bn=u[fh<G]/1q7bԍAhE=(BKJ9?[NSA!h[V7_F>--%.$Aq=41!L'"iDF!(I6!.%F |=7vg$I"̈́%NUɦ5j] r@"D9dUTsQU_ɺQ47nr.LJ ;BZagك$}kd)b(s{򪖕,"]cþc⎍0>ֺB9Uzz:[~#(&v`s. a#*R7Xg2~j!S_~%gV`QsV~~qo_簿|JbH?m"dz.>t̠Mh!jKSL L88@ccdvef"Ql{}lfeZWE5 XIҭfWb>M,,+j`ezWs89MZa!rfU>dWEu$nq"#67ECbnd['(35e@b-`Gˤ̠jm70sQ 5G\agOqFt!x4SP({0y-3,o@{]ek`ڼ&#fB/Qj:2mQD7Y4Hqڼ]q"}GvT?Y'ldO}3W];%?)мؼmT_b'9^ ^*ؘ۬J> A6|UnlH^@|~,Fb#qM!Bxh#^ĦgCytM^bT#OGMr '֍4,  Qnb+x'Z]Ngo;l”x.:f4Wz]VQp U %IbPjsN瘓RP⦅?Y5Xn&xѐf֤`b麁ikd*z2@!A] bN7V:tr if绑"I>^\-ld JXk0\*4k#mmք6ػ.2c^!z&גщEJ}6I)Fn@M??aP 2r簱|l T T;f)m r]afCo'Op'P?ԃҏ>ʮ[f%G}2i~!'149΃Ŝ8aTU057k$h 't8,&Qǁș:Σ_#3Y'B҄'f @"h2XZ{ utzݼB&8C}`bnaǔVAakg ঌΨkbXv6a$"XC g v`ae?1QIa%˯ Đ(M7Iجj? گ\Gh$L%Lsg42J&N]$f_FX+u: aa䇅Fc'( 5!JB) XcE e445GfZ=ţdN6c*, {1 {26K؄-,ʼnKv ^*$e~e8o]7Ӣ[Lص Lp3b ha,crI9@{m IDATԈА1T͆n`O= cSmߏ_ZU<%> ['.#,`sL 3kA4fPdX>Ԑ n,gc]^bJD9 8tqj^}.7GpqX7gzcU:͐Jt}ĹC #+K*Qz2ɾj8 JB(c)CAw 9Mi]ǺJF Qʘ*6͝|!T3q(PZpb1TO23V YgqZ+gndX[1N(ݧg8wG'C-4u)5JZzU"xZKF1(dCM^?G> ?' P"\EL2$v_'ڮ>I#k&!&!Dh6V4ކR b91Z̊\eAtX>!N!1߽$|9jrCLp9ºw+_@MYIyU?iC Hyk&WLxg 7z6͜}R^"+IȜ'8RλQ=nKP[հM{@aN;TnBy38!N^ mQTKx['6CVhP&EI} -  gR2HwZ2Ri1 f8iz.xPMQnr7\WAhD7,Pjԁ2֔t=9qʹBLCjnp`?M~\RNPZL)q Kی0K w9m`ӰٽX_~ee6K2 gak93ÛgbOνCQuU3a}pdw9VH|Z٧/a􍷡郙YS1kF3[dL}wdF9TeBo~Ua?Ho#@ qsl+HIN$}:fptwS>5`Iǰ#]f,-x `#53<啙P+\K(ȥ,Csʓq 3`|odOo-i/!8ihLI%pN4Sè(x/޼s0"4,!GyN"aۂwq$;oR gz'JqPz'P\˜ yl0b#=6m>TQ,ٷ$ <"cqow&.kXB+geulAvqT&)RnC.% V'DyjoPyvvqzТM_9x2Sk ΫꛄHE!L˂Y~Ntl~FSYX1LE!o&*xެeܚYf];-s*ngg10p/J6*9ikw% l%>`WTN-*1VA35`j-QFz?x oE {xrː;)CdN"fl^V1r"R+쫱c\`dXY&y=;@$Q\jFHcKP!Ɍ 8FH.!:x~mLmFD-(9Nm.EI9|  d#$pHj*/uoa=CG-2l~pQ{DF9? ;kA!ޙU]ybeɒ,ɲ-+^t}L{:IBteҐtB$04$Ӏ–`0&ݖlYZ}-U|ɅmL׵Uサ{nc V~ b,U/ub6-L!c˗X=e5jY|1홢6ΖJ7j8QN7P;r# "V. _YOY\*1c tzX0 Բ˯â&(A'*ڮ:9fp3/}HhNf[pX`e{" hX0*Bv,[ng9;[aCFMd8X>CN>EO;kpV)dG#ˡg_y\v[


0J;m"FaV*rcNA?zی/E;dU.[41 {%Qv mKǰTc#h]p(ϯ&+갹fksw<jܻJzE{( |Ah8WA*Dk9ͻt#]bMGL7#H\…6e7CvxI;6xodӭրK92y?/cp9T!iރK-%^egIϙ5G8dd"p0}6Pڱikڃe1%Foζ瞏%#ۻG:#p@CBȡzN;EȥP6X&c HظB6Z:ȏ>şc= ,*ymڳa&6}tuZK*8T1aSZlg`>;t8ϲ:'Y1!A^۵FrkX ;VJ!l ؈0r夹euϾr0lFECRƨ2B\V(C+$KNTyFl2BWk&ӆ8v9Ӄ e+V!Tvt~g%q,c;!=vrWO ]#dMd-!@sl q84\=p5 U0 !ypb9=?@dCm6[e=Gfv0}Bw.#krn}_F̧g6b`UHDɐw+?i.UMͬ"0,˿wam}bחe|\ET8G,/ EW;jtXM?/[ NxjQ9}iuf(:}yj#T쥳tYE$/K\jBW"nEMVENaLJ9/K`v+ o ӷ,s؃t,ac7ַv`C 텬nlop^FE@%܅n>ZdY9Y\TZk?/WJQ _3ˆ]l7͈]NCg>ry Ş nҁ?ϻKYٽbML?_T?h- ,mCCm[zpopA } t,Z'!xVdEG]>px|SF(&YA[PpvUe6aŇ4A =6v{1)7Ylgyj-bhgfW|ULv<Ġ}M6йضZzd{8:+"_!(7mfA]uvh:6e9Z ݯ- r:BG-7hbqS hÏ|!z<Z,wr-ƽ&{k+Fl!8?_۵+Xa+$Uyh^k/~k+r)8n 3G[i @TщyԄ'w[o=yDhYྰi}ZvU,ܕmuDuHCbgKƏʀлd%{ 0N*5+P^ @ùOy" qɰ@O/1iaq$ pjerd:7̕ E)_ 8wc3“wgqX,]MUɗLk;a†:**< ށڳgz.6b#?][Dd[l uwc98T~Bnd?N{jw6No:5,Nz!S5( \T?jX)Y &5jzmg#ņ,mylnB|zL]xo3C+m}g}J -bno6\w F$y؅%0频,2X:pqA漏,Ь+!d(u]Yc,Bv#6|mΰX|VW*d,ws:Xpy~#3,N"}D!"\?Q*GXJemz(!Ke+C(H{YMpwvF[-١ 405cA{ō >zлam?ױrs 6rX*8 d#AKw [p ?N,Љ"iA.)X|ϕ$Hk7 +eU3x0S& e;oj0#RZ!QHb˥Pu'trZ  A -N|L؍4NwPܥ+ 4tQwg߆uEw$sZ.?ְJG6É.yZ>Yλ0|i͉8ԠF&3Jx 9+aY'U_ eQ- ;8"Kpҟ' x`ZE :2iq槚9Lpx&r2E$2iEޕO“|ގx~:0ueaj,|`UJ܉@<8ẊӿV~7B~zU,sj16Bш๱#|`@ae0pJ d(D2 a C(BS&RZ Eg2:#&}S$'M ^/t&O~~<}x^+6>dkn!$ s":a~>";'_ׅm}(??mrHpR[SO.%L(\aһﯧ~M|O)DmX~rj$5'$~}Q3{].I+AdMp??)mVJzjWC9y7]tFSZ V]NO?!秓+W:D/[3\GRJVqiGQۇ>a[uv+;,SQs!S'G]s< x+z/F7Tlٲ} SU+ns,Sͳ6ߪ ?w }DD bG2jld!W}TJ+'nng \gߣ *B(~Eիd=B/AU\c\{C?~绮ZoٸG{0_7nl۲y *;4u O?c?V[8o||+//0/>>i:D.p4brnjӹ̿y;5 O|/9看<-S~nQN{n4*ح Z>A|_u|{SAxȇa2"z+hm &s9~mIH^^׻;p'ݨ꫐.̶nFܯ>۾c?~HW_mYH.BM7솕+Voɾoښ5k[uIDAT+E,_CB:qV.c[9sga8auu}o֎s; r[}j{q\nZQO;n( Dxw~Nj"ývQoq.(~ s hy]Cċ_DMo\_r٥3Oc !Zs*v^n: 754ԣuVP5Hh= *ZbV\Zxɒc!ǂewxaNu on/c*&!q=cÆvoGQ[v#dq cЮ,hv|\if,lBB(i(BTgwγGyetG[w:{\&{QGh_#<`֮Y&J/`DW0{}^y W={ÕKho̴W !JK ;4HЊAN ܐ! IZ5zWjP9!\_$4Jc͢/Fbuс!q;EZ~|q1q+ GW:`woy.7,)?uQV;"&"6}@oRUNN%\6BB@{o9[ӷ] ?SUAHrA@{6jd9QZy&݇o< op]i_+_(?ťP2U,!b[y$G ~'WC0p}2?Qr*Gl|:xǻ PKnwL$od_*}H+Gy3*7\r'}=zzՐv'C(oK#BI#Eezi=mO$хGy?EԻs2']^|'._?/^Dr^DL/~sx~^?<:.l,ҟU @|$D T5KH`/֫W R^/y[r w @<8Wpq< 8\tt ')? qH4@_^l]]W2Rː*%tySvT!SJBd8neqj#8 !&> (|U vRuӿr2;ѐ=h^Zq6d1JcЩiꌣB]|0&pzi˦"4銡(`sKBX  s@NE# 9$Řz *uMq+ P֜i] ¨ - ZU/і|(+b$M?.F42?2uέ ۊN&p1wb ;n ZK_fDQ]A݃tbulK.2.ZxZ3dqYCAě(q8u6^[旇/j)?(j8ʊB; SVUf4y3C[$:t!n,o? cb6w*B5{)`+k蓃ÈSa(6B:cW܀>|}i<w34pأ;¶]=1?lL}YV /iCoڣ(w"z@Z6'aea= !a6tDnE2&p'=QC 1fA9@h.>j@# qq:iI(wmNɟrd89ViHR+* )<Y{QڕB6ݪ:k/{'-y+5VTaGzezDIrgx|Hcz%PIcPrB+,(_p?^}ޒ@ַJA!L ܏z< 9lVxpe96B9؎0CLy'^iR{ Dr2S O׌{4#)gT"GaUn^xK=x_J dc;I~&+ iq B9%2 d`BHel93.H9t x 2pN )'WeFD(V4nD&&5KҷdKReJ`}nCasܫ{^U9ʇ1D `)-A$gQJ˄t/eab+xޝH?rBkÌ'DumGTp61ҤXT7<]kS @H=$j,ONZu+J#As:>*a@U`q,]SʊcW兩9Ðg5#TŕT;+#L aIdh6jS M!c8a㌧ 1Ω˖XZpv/%O#rBC 5XAT(b6qb+$@^ ,9nM?®`yi8=1V:ߕXv1;!F=F~9&jZ 4S`LN@G==ͣurCP1*k$\p"A,'C`'F/ۚQy>b]֞m ;D1p;k/=fWex6w^'H5S!DEH3: ΅a4̳h:wKH>,R!WXk ~ЂX]a]kCk~Ҭx!Gӫ5k yw0r6vhS:-n?b6~עu Q-gKd#K,{-Z6E5m؞0Uw"k1\b}k!,L['ݣY[^hY;`͛++BPwlFMWJ=gZi8bܝ^ uh֥ "b&ϵF̰pz zbpٗVDDlYrixV V,l7ZA L= =4T|6V} ܩ!rE\q $<ioi'Dz-ظa}}h4 {8y*hN1x,@1 cl!l]?gG_TLmX|]KSh ">lŧk ujU!kGR(lGK~6j>%D!,Gme-*1Ms`Q?!SDL(C3&4q:n{XG0z[r4vL vg>Mc>/ C굼kC /D\8VNY= א8j9&cL06.SY̅ڶ2jN`tU԰7;2<؁Mry8ϷjeCCTU#,RȢ|W)wi!7ۇ9!\}JdA~]Z!ثxN)~ Og.3WZ<׵?Ŀ?3VSQ>t'(,)i"rRj9\C1*+AL !ë#L,<t:'mwT. 'Irߊ^e?{:O{Y"I)<y6c5ɉhx8KdA"v%KȜ8P' 1'Qt)'6L^o 0˸ N G` C(222!4e"e%C@P&L dh`BʄД! LޙtHq Ʉ&0! )LB22 a C(BS&RP240! deBhDoEzIENDB`jqapi-1.7/images/0042_06_22.png0000644000175000017500000007017711460407074014642 0ustar metalmetalPNG  IHDRb0iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxtdyBshtιDQ q5gkjgd;ز=kJcIlY6)D&9'3 @PU@BlQؔAl#U}/YlZږFGz-4X"%BxW#D0jN^"%xW#D0jN^"%xW#D0jN^"%xW#D0jN|_Ӗ>g n`L+7;m鄛vn),v oΎ-9/7m榝cKssM۫%iܜrj`nک9;D07ܴZ"vjnΎ-9/7m榝cKssM۫`ƛsbI=_k>w+ܽ_XsQ_g|?翤?^~KGi%e__xJO=guk-zLeT}R_;ޯ=͗O>_tνg( [:ˏ nf qFk͕ԝٷ|Eo)3Eik?Doi>p8*51q[}O'pmvGZ|=?@? }\ͬ=—S?{?H9}=bqv#7wty>9&y/?,7h&&d w<9}_J/=X/=wfroӧ.[N__)o~8qƮH|v%nl"P$ߞ8H$BmO<ĺǿhjO|u^81|6qj %NǟNަcO%NԟHe?ޡDo'֙v.yGus8xF3-Aq:ߞ8 ?uߟHw)Җc'^k9xzǒH _;2 Oa鄡|cJ|B#uiÔ5D;ni^|T^Da~soh9wh벹&ǒǾp%"Ɉ6V>jKl cx@]֭Ͽ4s8]5u0y;'ܮ/}s=#cP?RO|QO>'S/9 v-UC DO=^Ӫڮ} IzT'{w{+ϫD'G*y&˟=myZqoH9@_O'iJǤ/<::_zQal+}yҧ5G?WУ7O ~{Ͷ|xM4bf1>z^>ap)'__jC٨O|ꚮDGBo4-bvLH5%Qr^rO"o{.;џu'Pwޗۍαahcom(%:}qp#dnr}i͏{Ӳgw Yyź^T\\n}{0ۑZz,!X"w5\K'/ X"w5\K'/ X"w5\K'/ X"w5\K'/ X"w5\K'/ X"w5\K'pF,. {,~ĥ[XI 90 Khk`>D0 90 Khk`>D0 9n(4Px#/Q!1u#}07Ds߳Z"lhߟ /s^߳Z"lhߟ /s^߳Z"lhߟ ߰Y}_UQ y]ރ˕THN7Sq&KKng?ԯ[QڬQ7'[=G5Kf{FR^epMå "+Hf)95\:-J˫dbF9EE𪠪D],۷Ҿ*=Q]u%:|4R"ũ[6"[`TЄmۥʻ2{E;gΔm!gU\֋^,{I˖+ j DgMP4\:%VM77+dwCʑs6<%b ip_S gĔcwhgjS=Ev,}Ͽ|;`~^G&';QNM+Y)j7ش_vXF'OQL.Wi.DV0ݭR|R+ E jQ_juio@W:}J7ԐS]T(5š8T1׋O|S)++K<)dйV^NrBQmpazhh}lT޲Z]iVFgK˕uVۤ,rHW䤨\[Z&W.줶oӺeܪ]>~X!QsX3ib˾ai67Xl?o:~F0Є,LѸ\y Df;>3aZUYQK*4tUΝtjfتb-+.SE4Sӣւ2E/JBl'WW];cu:>z3)O^-%Q* rWȵv%hwd2 nݱ[Wu䵽 L55{t!Qӭ p6m y=(*ԩ<fս̕_f ľ;"sfjj*&wU֩%vHYڙӅِj'&2r5YZA`6C4a `58^f$xErԂtR#ϫ,W>ҩZeQr4X\ve޶S)^}};eSK'yHQڵJE;>lyr:9|ewufLw~_+TYD\ǏGt[W[kRk{”tG^ySSPTHXkB֡^&Gd+TE\J+׫鶇#z&㯳UG(*P~f nQ8EKv57'Kv.M2O_<Tݝ۳ʂ{GlN.'_u5W]mFmvXhL6j ULL(̪US:qu i+>^ G]Q]l-֮5+oW!|2;7_er}ܯw|D##Ym>+OzCk,g=وɗOk/*P?2d5NQ ?+:6%HYG#rUlf劥($oGWΜP_7)tJUN9iji,4#>eC뛎ޠ2)mQi~6GFҧhF )/ Ѭ+E5\xօog[D(u3r!mgN|U!<5xSͥ^j5pY\C b_ ~crLMؙ=Z:,sy)~J^^<wIY9P5<Ю)b(A7ÓAo,: pʸEظ2 JUZЁ:SSW[&Sd֧ڲ,ǣ_NH}5ةM*GrtoU#Gyk<.|Kg?q6R''2B^n(}Gg(6;g'߱gQAk=٢LwJ=}RQG:<ެ*(KVǦ茆Mrh!F:b/W_TJêlTiKRnpPu2t)3C뚛TmٳG2]OS5L #S)(BiMSm_}Ut,w3z&XbI_ =$_Yc*ZXAK \,[]ҷ9t6N @gXh\VVv&EIIV?(e*ƪW,Swq]Ud7AޚZml uMLi?ZR*!*!3 Mnt˕N%fTף6iE*W_pH!,UqT)͛!0kN 6,&WPWDÿ}ЭfU=ҧ%NT%MPnUJj6E'Rˀr8yWk 瓎+J_Y[ݑjה'a]߯KǢjn<-\du[eqDH<](eeL񺊜-:D;. X8>w0'esZ&A%~YWoR>2 LB9j5 ۯ2bz] PMmk+,}V%wa=1,_V~ipMa+ًxxVRyӐW(w `*A?m?c'XtXLQijrX/a|9G(͊2}:z_ģ&9+J4NһZ-[gqඥj{F;^]Pg\nQ@X^LqϼYG/!e;רj&52zFW*Y9h嘰plfߘ.2(çu^~Q^&K>q#[+N<C7C9(cxsjӢs'5^uVmҥ50pDa8oQǹX`~5 73N forCL㴳V[]+N|J'7N6{w܈WWrnECZZ5қ>ىkU>N"٬xHU;0^k25]YBtwVjNz*RIxTnDjd$sgpZYXS"%*OkjLLܭϞWVa BoF0IA$5рj*oBvem۵]' '?Aei_i9~3%y8J=xUT2ڛis5}Pe8$llVAe*]龢~Zqedsd sweDD՗lT6xDc{׹,ÌF['5jQ.zSQ)J+jUQVm"$A_6Ȍie8ĸRb3J}?f(:|e2NtLe-Wjդhgy2XYt -'SS c/\k#Wf'd)w߫JE?uTp2{&vƔ+ 1$rrnڻztj"N^6U gN 29^JRwʹAxH}Ҁ_[IPjՐP/gkz*IUȔCr튧wD+uZO)N귖# ֌ lUᬃʺy&=µ;Rq5/`-+Vo@/7\Pc9xQ۶`V -~P[S=[_XhzYD0: LK3߆>Z#ko?}5 VNo_jqշ4YdƠFgЃaOW%J4'ؘ<ˊ M56#N=Ԣޙmە [NțcPc)&|ABwmO?ٸfiSyYtT ߖfQg]>-xNb ώkԓ@&h'"efZkjR. .6)QAFlKgh|~C)eEJXȭV~'#Ʉb| 4Ó'5M&JrTk| sYCjo+2hZ ջ#`PYL.o `TiFnu^s(PBbl rV8txasqdOJj;_mrI?c-g L+ ?;Iܺ+z,ŠˢYGCMZn XWǎ*~(3.}b:Y~5lW՗ԅ7*+`g\KיF8m* ՒR\/2jGB#L^G$2\% 6Pk3pP"T '`x[5`EC/4|]-PZN!BբPg t4/ۨL|* θ7Un|44C֚ U.Op'([ZN:MqՅm:4E&4\\+;ltZ/)Blv&pήPBhVeVޖ IDAT*/ pzQ*Gg[VZ8Z0O^kx[q94SVWN8g5 !9o ?LaǃI/,T89v@+µ [^{ :NLE^U?ကoJyr wh5J' Xp~#^fۡz_ol *x[41]-6v(Nϑ˝:0 Ը9Hg va9yJ-x]Jx*l|MOrۦ+{R @ՠ"Qh|I1Y*YC7/$\$Ԣ9aHxc(.\n疮^4b?uO'Kϕ疍X3%,X3YZmѳs 0Dh1;mq58S a. r\{U)!t~܏h+4g{P=f~b,|3 ],Pƭ[F=``6jG,:ʕ{u> <ØAYO)kMF2rut{I4֊ !>Ge%j_  `bbpUaa!YD L5qz"3 f/v:!,Y3p 1,zǑNe B)9ՄQK:e:[hۭT@=jmRxࢦ)}үsk¥P@QjmkZQ7ѯ>pSg:4R[RjfvuXm8,^GyrکwXb!-7K8td@_ֹNnA\T=yTvtš)LSJML4҇ѡ̛XEu*i.dTĺ&T,c⠊1whExG/RbOs/hcA:{4oyꝊh^'U`5%glPR/"L4,L5~c h hV3Z5rZ Faݗ|#iךsp,:ItTۤr _`'׏TPj+C#B@Y(Ȅ&: T@}Zm8 3@qÅf̌լR1ᄏB\-K?) n8I1&*#% ߓC(౼Lz[4^2"GG['iNddkLD' ]8 ֠ުKP`Bj aE< +aE/7Hp,Wwq5^X)AxE5GCp2bpvk Plݗu&4\1f!?&o,d[w.C Bٹ`}Y=J3%%@+ٲY)Exש{| M59M*Ag+_yda C«2k"VŢԕB\td0 BoC0C<\#`I%@$m FFJ&|BhX/> cܛ\4.T^ }[mp,Yii ZV4 KXvE6O= Wڬr\8NP/%X=֊4 ꬎA^OPPSsSڌU\FTNJG3c3BH۾Gu+WsJn~n~'2.WC'Mqa1@ M ƦXl6|>d('C+L; ݼHAiMn n(sX3b%N•Tc8Z$3Ld~bL;(Ob%#Ʃ\nUEY𫜌UvL_*[wA\aV_%<>`O\ T͹- ~uJ=L`2A,iZ22 ؗ>erG0ܧ3/E?OE5-X\vy Nj;VO!:emRx pr(ȫP\rpG XOՕS^+Nd> Cf_m[|]$6wGլ%NF6@2yab/on%n n(kIG<؅mDv,\QWY}8.ᣱ}ѐΐ|/]܋Gv>>`FIHT#R|$\)!N +`26!xڵm%u8}G٧@]L>{B^$84`1RXQBafŌ,t`f{It*[ ̀VF5֔uh8ZR_2@$ΪgCa{MevzLs8xx,(@/68uҺM$dCMu#rjKH]G [v!PqNݮJme:2 g&ee\ufPBJ `g%/"%h{oQJj(j>ALub;]c6 ֙VLk ON*ZVU(·Z5EA'p4dHb=9@Š,,8|CXNUe*e.QWBil^$?uD~)in\CދGu6_v!΍u7qDnR{8^,SV@\U nng"H2)vx4`JRؾJH#bxHfzP15pcDq=%fYZ_'~oΩ1 E1!V,p dr&hi^Z LrxBeR s)) {]FA$`R `[V-ScVe&4xtzK2FTc٣A@NlR^Avv^^̱k#x@>Yu_+:}Q W[g)R?7k?Z`Y:=~Ub4ArpMX#:rpʬ"+U_J9byJ5A`'SR6AqM09#^a"8 U'i +NW!&,:/)+yj#vWh&˗4ҿ[@q/%;ɤۂWyS^Z/A* 6y\c},3zR5!z[<-duQX;6*4\ һ)^K&Fd Gؠa<ks(~(vQLiinj>#O(Aɍݛ^2FUˇ/f׭\;U &PGWO3jDzاg.I_6YJ=(>0#K>:J*Q;Ї5 WTeخeP>.@fu=R*؊+!NcYpJXAzZNQBby =]Yr{D]Sv'л" ܅ -M g x!W~ 䮕%TCΚ/k ,`5J \ƉtQ?R+6LL?qE g2lmW!&`p_^ dE%#ӊ SJ$\IE0bQj3)j^^KwւͥH#0@Q Z)Y%(Q~&*hn͔FW)]F Uȣ $q-N[݃CUjfBTT[&x ZCBK-x? %!ZMTMpUh֫ s2 G4xZF˱ʱFf ǚi }1AlN%$`\ '8NPi!yDu}~hv|( _Ezc+9 aØL-Z k .L$CNV,wU](/!I+)!LjvQ5ۤ`](c|'h"sTSwP{WӔ[u>GsFU 6xLQ@Ô/[Fnur ߩ#ĝ,8H +m@)ي(ƃY8 D`W% u|&/Ƞ)BT9a.,}v2pC\e91 euCH8aN1!?)|OjtWގNbsҨ3j:8 PPH: r*ǩ>* izgS4RT#T }$*7Do#]6К 8ޕO[T֬t"?A~;~*wx|j~z8e<5i,|tDM;sG 4E wXN oe8 ںI񷁿uS+ET|R]%LAL"9340XVPnOq)*' ?+ulG* aDh;ژXщ=vuuŮWŹW(*kr@z`[t<%Wn 6^#-, κ+J"}qP)fea! Pr&JN'@y|g1LXߕ<V͙cyIQf7!ygz*^hU~򕺗{ lvHa優[H5uKFm9f\[KDT_ZJF/mԉ]k4_8Q 4tG"SME(wF]<cD.@{$x * ۢ %0"V<8?7Rk|hBnmfJ)$Ǥޤt3 `R'A 8ypooq I?QFck4d @=VV,J%$Ə1z wSYZa j*;a!k.痌 eR; hr8G}j}{go1U Hu.Pz8D\DߠVL0lVtpnkb rqeu;$lH%ﺍA [P#粗8Ɩe!PwiX]#\FJq5[+Tv2 toH]tL΁8L2raIf]ā˿Ne$9)/XuL_F&~7ŽS;&MS 8#jDexFl<Īu4,<)aoY!88[ H_%b}Fx읝qw]9}BK#fi|~la PV{-~b8)JD}|-(ģM n`<k gmҎq&&a8s-7)ܓL sȴys?ڹLo۴k0 wr\oھn\lux{;<~s(ƌWS }ff~\3a^퍍AOnf=)d?̞g?}s3h~_?s}~󿱮ils-]sdMϷ8?{`WL0sc۝;};?>9wl/ϝy"?;yϹzuu{]>}x&itq Q@}ɚ8Vҝw97h3>p7Ο{p_-ܢBW^>:<74?N=CH%lds>51VL^kz/`?ЃǕl'銁Hq?s]wˎ%鯹 )fq$ϧ>hϞ=z+R3^.?E- a}=I\)'O6ȖEca&'TbUWڵk-TPk*Zyb ꘌ2- $YiwllTЯ_XO? ?C=jkkU19Sm߮˗X1鿦frp_41|7nLklȽl2>} ʢ}mM3FTxfsÕnmQ8Új- !=S;_U}>\zخodNY֭*zW9)-G?c׾j}_:KU5U7 ᱙SL^)/]&zI!z |Յ5"qiD9_c}n\w;sz4e? ]zsL[r? L.lۘb(fnift3YfY ]¬4CFa4||6fĊ9 '04IyDp)=Ŝg{I/DRv-L[(B32e9>ܰyc[s{k>3&po/1^׌i\X0H2!iM@sS; 2ECo&7xs<2牋p[15ʀ߽DbIdP 1pyфs/ (_בNiS1)*fbT& )",Tx01xeoBcLn*NUPL{Zm޼cDoB[Jx+7CxA_,]B;Ji5e7Rr6J2yչ7is>jTeeQX;筷)3}0GJP*R㆐Cw/Iu0cCImkdq чicz0QޓmQƬ 1]ebxEf\( =N^ 8L\Ia4 F[N"&YLB?6>'"hNWR8(`2dX& sOqE 5&Eդ4qȼu|lw̠/H-<7\Ҭx\ UeI|Sje (MӦYQ6IO!^dch'Ι5\ȳ8(~pۢ-NhVmDr?1eC(Rk~(8>-J1E+$ÃhQ}lF(1&F ؄BQR =swoeo]e̙3gΜ;g 2rRGiF^ I ڹz?EbvJ|ΐBb-TrmS?qret*ϲA kj_:sD*G&\rh,E^ry-* "0!4f;bg (A&APC$4>4]BKW틦pNV|<)]_9VoNUQV`4y1pX|l<)&wdKVZ"c#0]LSkQ%',Z/ wX+R<>OQnKxNXCO98{h]i5aIq{l=&js+)_n* %es‹,X6\jVYWR.q'Z)KXM2+W+%xeZLփf.0FV˅VZ4p.\;G< oPO(F^!}%wi:;v8._Bu^X,yYv:[n(]`xKRa/ĘvN&@('(1ۊ#PbNx\Bc<}'SF<9ܳھ=MiBW4E{u_INuRHw6cAsx=Y6^d/u+͊ ͇ &Z?lkpw/nNJE2:٦ۆc 87Nuﭻv7xӑt%R=G\sLzu2'7!CS I A3wb{ u[\|(vvӑ(<梱ׁs.ڸ3B@B"SO_bqNHmȌAFufXG.Ć]= W.vX]Q7w -V2Gq,N+0[ 3hpywu6f3͘XsN3R}-'n_tD}Œl,L>q+[VCF$#Žzю yl27Қ!fz p{3]4s'O[uV(/3kbcfU*q(0VGNGc6#1&N?s%81ۜ7xaM\`_f.OG(.'_K{BUHI9a{~4k\7č~7cgܛ8^n{i▶H Ȫ_iOt];ҟ,8] ERsgC>8F~?ծVSx_".Y>27Yx ע5ƙk0%78Ev.#v1( Fl)&S L.ai#wFJ{';yT9,POy/ANohoa?{ZtxӲiUb\!jR*́Z`*=#I)S=j^TZ`*=#jY(C6BmD́BBlj 8P L!6@NBjZ`'{!SM5P߃h?SIENDB`jqapi-1.7/images/0042_06_23.png0000644000175000017500000004114211460407074014631 0ustar metalmetalPNG  IHDRo3XUiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATx}y]ՙ}߻_["0 darM ة*$NWņc&屫RI=6l ZzQ--@hy-BT{{ι||9>EeB35)p .syIM4@iLBM41@iLBM41@iLBM41@iLBˑ駟\xK@ڗkwh^hD4Uφg`(Mlxm61{ʆg`(Mlxm61{ʆg`(Mlxm61{qE~ O>h< OWQk|Ϡ0:kÅKЩ_:^_<Ǟy jⵛW.EuJg~r2^zi^xz+ Y߄QYų/\]/>,W.U^?7^xbK4׼(6 ?+`o)5ށ}8?&8v}󚯠Pbճʞwj~3]b0`}xu(_7\*%w[=f{a5|STObjzϿ>V_c5U͓@1aT1wgU7V ӯ*y+7|N}>+^^]O,yR.9;Iw{=e{ߤU5?<~{ؠy[=9g|Q+_R*P!У~?SvCCCoOd9<]K cݧ:I{DTƠ:Ƌni{g5cKFYks56c{c<~J_k<>F~$>ƬOlR#W\R v~U^ܱ8XʡՎWAׯNIi C/=5UmAڧP)|_GƱ7NB3kaŁn/`P!SBXgk)4hT`O*|Ίُ[7_i׾u_/U0zwc]Һ/?<~|ŋ։-uן3Eccy>^yHlXL. Jy쥗pk۪,j֡8˗AN@1 |/?Wv"p7;7ߋ ϶{o80^i9V|ң~RԂ;"t+QGpbDy-Oow1 ~ -t]N6F\}UR @F5ˡn Y1Nl8$vZO:FcbP}dՖ?iFfȥjWWwgbWNQ˚mt?Wi|,S#<Q|H#jS|*gH${k}j<˲|$vhX<"7YXroKʂP(cY~]m%(J Q ,J Q ,J Q ,J Q ,J Q ,J Q ,q#o lME$|zPzփAM\L^!6Th:`z uF(cM6@Cle=xq~3|C܏w](B5r};FAS||#ke]m!{.XZSn& _RaIby)Ϊ*˔uFL]fSؕ*ZM*}Ĕ*Kd;W8^ؒqT˜l; }( j >xݭ/Ρ O3C߭wailS| cU;0PEN "=7OoىjK+WPBTCo6R@?ɕ,b0ǑO&KpPeiEkeWa2(߱Vw2JspjahAZ"|tY -0ZmG0N n_ r$/FF`9;dYNEPÖ`;=;0gJرk F!evMƛ,poQA^ŗ`@4QQ2YfJVE XuG3Q220 <gF6۽8fQSGeL΍ହ{|C@+r<~ *ofAᤚTMxnvۃ}bH) wViݻݲXY\&sDvRl+n, b39BD2-&0`bvnuzNcaEeo "jr L/b%z c eAa[s5=(( [q%IPGD N?L8k4n <&I`BdB"]JwzlG(” f8| N삟!آcX&`x~{x[C0೎~WwbӃ{itSQU 1 P(>޴2f'GbkUc{q %zJZ{8\"]IEz DW\L9SfơOj ɌNzF+4giSlFXE@~N# fI, Enyag:`~'r-lq3=@ l&QѫJӹ+.rd ]Hx Xo7: JTsH+CȦQՇ0?JVjEaxo- 67|ڷB0ʉb>sqr|m tU"~{ކ$g 0g*3ܽ{1:MDۨZ1wm3 vbO,nժGJgBw Nd9d:m{"G醦MAC69 K!8Q2v[(0͙eF3(=LE] JtoQ[^IgE1 GC2ѶzRٍ]wb)z,ȢV-`^RY^U~in@SRTUTnb#7C;ՔC ^VDaK&X6@Y©(27U"TaMb0Y-(ϝe#ӕIDtd+$cTf$0]_EQK"ҴWVVL4Z Ș:%uh>KoK#pKK N:>GFUe()sy,8͙]v` :Pˈ &. l &+3%=-q +t{Bo G0PnV  :ehbfzJ&_l8 Ow6GAB;FE S-Py9OBaNGڄezY뙮 P*'_S0NBuat`>]:6@qZ]Y tf|L8W>~MNt& ޤsWHS mUvhVEB5lfVBY.Jwv,@CqQMzU؆'eY>]%e*BIdPAho.Lp8(d(ɖ*)7ތJ (#cc0l;j荁Zv qfó(0T46Qi^Z٘h(Г)9Nj&g뙮 PT 6;vn X k#6 `8Z|)Ő:O:$heIY)Nw0l˥߻qթTR\3-0T+nQ_ΖbMA8mf(0*ғsVX4OqP7i4 hW:+JIŔ6r Ld:2D*XPGRf,AsRW9XyR@0c0Q{a$KLo0 sL$YtU"7"gjk";/xa1h ?o bO5x9j56NVLRʤK/9S R+^\D:1f*y #u_:?AJ<Ad>7Ѱ-S-.:{1zz1F;aNc@ڌ^hxН5fҖȵ=cˣ-T[Pel&59>tP툏O z| L_q2_Ѽm'gb%x(yt`?KM ๑)\ EU~~iAhKL/!c@w~䩂$=I5a3We\#D8)x(9xQx: Oe!.#$v %2cDQсʉfd4c,zuȕ]$16]T%vc 6&5Gú֑i& +]EYim%MzZ 䙡N3`tעD%6k1{(ahu,,`D,ԁ~oh11>Ũo/gѿ8sJEp7ux6`[nC;|-UJ\f0/Ӄ<%VwcGg<]r UTɐ} }(ȨS ٭&lW3 ±蹲kaF2C&E Nsuz i rIzl\4!U!^ u/;A 6ҦU݁'u k VG*Ks,,Na +2zNk` x${Nf0 y@ ;wAc ,2&QkXg0M  *T+2)Cug K[kІ 5؜G&G>P8t{ wM7SǯP4̓7 SIDATH]Ғy$PAA. :Q\nt 9,1lwx;r9099͍R\w%Nea{ ؾ+P;紾vOSSSes\k[6oF$B#fH,hvEW>Ynlټ ??q "9^mB8vb( g:ܯ`ofLQ={vp|w}7ڷ۶mG;~}a{ÏN| ۷k C_DwwwJ#6pw6<ȗi:m݊;_W_fk]شiwlÁOߋPG'v܉}sum?/} :ԝ8p`?>Oa ]{_ðFjqq]`dX~U Ciz4]]]0ض}6@MA$Z] ^A^M_RZNA1a.!g,ɅB F`8yl Y$ȂFP[7_ /%YH)3L .8R)db? n݈2D$F;ݖkˆbMJqKi+\i.NRZ)Q^K2K)zIwX?N5$sQ5t ~E1Ɓ$*yjjZcZ1e>`u $Ms}}<}=ڀ/!^#kzhKоu.&#僄)r\`{WO{{ȸ*Vl5Q]?) 5铞RWT}@ۄex.w{Vy$b5CbjIWEҮ5N5&@Y#_R敖| %_)zQ=ϢZ#u_˨ 0UL,$@[F)leacq{?R|CkQZS1C˅!,`Tg|^P Zfu?)W`?=I<]-+yU" K!$a6(>e`|E@#[A݌helZ&eIXZ>Ssp(qF]i@NEsNWlo#zrv0ľRe]-(>b9X$y$%_%W݋Y.)\ thŴq-%l f7"Ү`fv,@⃓ӫЭIè~?E:)%Gbɑ/sL$ pT.[֋4FʁҀ-B
˔.[Z{D`IZkO+ˏ*%?:WkdjH9+'? ?]zgZuXWh]{X/\L8?߭j{}-b//ze[zHJj|#m~̺7x_6= FεyoK!-i'<7wkS+ڱ@/VMD9#+d~Eu\ ճ_ ׵s9jE`C:率 iR'|:rO貹̈́͛2V$ڄux&'" h#CI>jPds#5_h#UMtSk<,VW1c2Mhqv. ʮtFgUnD)Cn:Vˬ/р)/ DJ.^)LqO/`yK-̾9>ʉp$̪i,tdr֥AfZĠkJ Au#CK І-:Z`<`2T^"i]R7>O $2>{,I S/C9Xj$ѦU?;dZziXO[UQG/U 5-QWWfw~H,aY/-q|?|ȋRtJ21umH*jc0=hsâW"+P,zJ@}m4)φ]Cn5;rE(p+rfcG&P>_swmcG&P>_swmcG&P>_swmcGu'B;IENDB`jqapi-1.7/images/0042_06_24.png0000644000175000017500000002345111460407074014635 0ustar metalmetalPNG  IHDRtZ iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  &IDATx] PT@ p$ ڤC f N4OM4LcG҉B NiiGt$MMCDM fM$f.+݇amg玻o߻swwY"Q7F>`0T!DQ 1Q`(U0QTBL*Hc#y1g(b7%cj k1G7Q&:E7Q&:E7Q&:E7Q&:E7Q&:E7Q&lsDHHPm}`QU o?M3W'J6mBe2~lٖ"l(7uc枱t.´ l KyK a߽KP&BBkY1^< Wx\cHgp_yrZݛ?Ë:3PՌm+̰ٟG$1r%~˧-AoY#ԻBddz9!;4#%.\p!a3N5\|I<(N];>?*,zOCVH8hBQakĆˑԨ> ,#tk^I/-^2x$9NJRiTjNd^J&d20K_f!!"j%KБ.j}J3[RS +m8[sdLid;R*% 5v~Wi|)RCL\DyID%^HBi0,=)iΓ\pHuYsAdI*mG %b8)kTGnQ.₯|1ޞH瑭L1ޑX tF 3ɒZEn1tN;-B33NőO cwbh AT|,& os[w|#mψGla!Hwr<(3nG%zf l't;-e[P) U[[q */c(t_-ț$G* ZQ 9:p lY+sb%y'hy\ 8QL KƆ*ٍΖ:ec+a֌JN]0`ۈ@__'*[ŵ! ̞9_<؞G(̀EDĭ+mU/bEN>ZQ.뚔mzl,ڃ.8:5n95OHFDPEL,DaB &b0T!DQ 1Q`(U0QTBL*(`b!{Wkyk{<@ [O P L r D AA(@1t0Q ȁ"%(&J9Sd СO `M[.UD0mٲ%8 YWJΜpEA^`x;( |+<ܩ DQW(^N&"D w*0Q$&WxSA G0QÝ F!G Do-; {7_}F`b˾-kmt֞Ǎ($ fRn]M? ։ז?da] ָH mքKUѣ4("sARf$OěDˋow#jdQ<Ac ShGofB]YgV#do#a?~3~@voۿDOlEUc^.S&֊C+-8s\OMI1pQ7l&`A*7w|Ce#X<"s{#ڗOo'څj7KxĖ9oكs{ZX.*C-' Z>^O_XuJM%@'㲢$ZS3UU¼ͩ3qpj$_039Sl-pTNį ѧξaXٙ_Q3qD^')`;5 kK 9ix鳌 @3'18˄ҔapU"Ddkxs̏ {C<,;6L\Z}t nZs_DĊW׻IౚӴ P8%k!7E|yxS"m}2D1 t\Ĭ0H%bC&l"p \JLw5螧X񷇭8 *`-lT x']4Dc ~/?< Ł.wBZIp @t#Q Z_Pu?l ǐؿX*)Wl®u5hؾ ۦP}˥q~L5`. s̼5 ]1ם%sc_ hBsw$0gu@"SQQpUz2cuրo酃fkTEp{b( N[v"D.;׈}콈3T'e| !lu܏^ XMDЦlg"0kA*W$R=&?1s銡H+y:"b`+~th$OQۧoM.6vKj= `5put6lǴWgn|Tq lF8v kŮ ˫D(& UZcXR(¢sW2ֈO?GKwQ)3VyByȐ ?|&K4x{?O߰ 1lî(7Χ^ /Com.'Fn' {o6Rde3nYOļ{a l@cUz(Wol*I߁R K gCqמm[Gz݁8|(:sⱞƭ`D*~Eaaa{f:w^};KG^G Briz^9N#Z]F ð}aیۧO)}+RW/ĭ=FvEȇQJKEQɔieLQ>3S4sd"%&w"NKegL|ҳJۤL$ƎwyIJb^uSI2z|7Jm1g_TWSp#=GzV!=$Xs]d۸ PS5[1.گR&ULM^ل&0Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]F(&3Q4]FU]W=M=URlp"[OpY3Q,80Q3~Ϛ7d9q{L! N(ݷIENDB`jqapi-1.7/images/0042_06_25.png0000644000175000017500000010666611460407074014650 0ustar metalmetalPNG  IHDR iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxx\u-tt`;@`TEJ8.sol'7=/~/~_8Rnn$/(#[CXDI$z}`f0ϼ58g"fg^{A/d^X G2+cšW c,k^3ƒ5@XּTf%ck^y2KּcYRe>(^p;c]x%8z8 Ytz7m{FF0ZOM y>C}?8uBq[XDa͇OK"EѠIqxO?PO˝/8_{//~G~~KaTg?K}Rٞ|?KBc}שgIl#ݘԞ:ȟ =/~K~{?Rԍ_HL=z:58x9>{wz|~&/z.jL/wֲ }po^]˷vKуﯧ?8Xl,M:̍:V7?Ŀh=;oicLѱTڎciԷ]4'{pTӫ2x /)?X{ʩ{v{.|HC{E0'eq CE՟wГ!H3|D£HyZ!D 9ǹ72 Ù5On{X,\~OL}N/|jPVIG8Wqa&t1,x=|_?/8Cޏ%i˗ 鿿~9MAςTh֜t^hީ8v (GeݍE\$? ߜx?b׸?vޣzoφ7o@J-0oo8?+2ci_j/Sg313/|/cGֆYw?kxJ}?@_!MW1K\>|N\>>X=Nп=,_Z%B㿏3b9Χ1}n'w*V4>"|e.r_tו⟥,---õ4zNk;~\Yk=Uby}yXYɑd_ϯ;f\E@X2˚*dl`+15/UcW c,k^3ƒ5@XּTf%ck^y2KּcYRe>Zf{i=ï%fnV k%dČJ=ucY1{`3Ʋ^+y'c,&%feV8NXM^Kz=p^1Z{8c6y.1c,뵒q2rlz]bXk%dČJY`;#־,5K@+2 + CwN!1;d#ݰKw9fو42r7rcC6n8 tcXN#c,w.!fw[RlM$S*Rk _%I'(ѭ"Xľ` `l¤ׁxȃHBM jJRdvV[vf$dR>I:9%bWwafcw`W[p.ۊ΍%ǣ8 -@Xm!0 ~fQpKiDŭS.a, z.4ffKV"#ӍUM)Ͳ@XVIDLgĩH DUUՐsILT"bYD^ÝUwijQH EpqaL|7@h0>7QTTbk𙫈ǢC݆Z~.‰w%n>]9Īe6$WE6E۰( #Ҙ j66&!ՉaR $ѥTӈd%qX9x +9âoňWcH¢cǏuC[P$RK];d9f1`$1۽>A% zq[p6Q3`KY%L"Pԓ/ˀaE <3u"A@/mYgC%JDŽ( 1<5 uca~ Go\yL`<>/|?lsS4#7Eae$7K""J]Ƅ ""L| [wbae 7>%&{ڑ% )cr,1c>{31An/!CgH@ڐ=)4ؚsp,_M>74@^&5ێ7XҸCqFh >aBy9%ئ7 nzR0"X*-yT>1$T? ́O9m=Nt](iQ-{H7mY^A-reDʌ܈F|r+ RjRaBZ=cxz:F)αpbXjvjW#unnDK~H>hs/0c" ߡE HhQya.AgV0cHwpiQJ^Zy qUX%f,b>psvzȲU(WaU`gшIFBx$qKy5x(_AH2Y K ܶemFg{byHtN|83{P!ٱPAu2 k%ol=:pI2 w)ҫyD Rz)4 }:4ΰ9܁ð̐)y3|lM X)!<*CH0 U,N eF'nËڿH GX6ѥIBK!E*ET":Aዬ%;=;qaƒhj<vO/Bro]B(Œ^.F " ;o?uEN7N "?2eDQla!ԇڊGe< 5m5LsQ"~]PM]EX!Xs;0z[{ᓈ@>@Û@3sP+C6tyC1d @oAo35Q(_-aUb"WkE8²LJswLYZ\A BWfD2ļ+|wp3R (g8;`6ܒ(70cƔB r1fA*+?@P'?%ٖXAkA gyڿ]dVj3}xkoAHs *K\NthwQ8u|y(CeBRJF**C|dCҷ6X# F`$ kבlP܅4WjiaZHv>in [V&BRO 4|Xʱɂ0 -7QcD>L@A,m@o@ lJ[RMYQB>2Ix=I/0+렬8K pFUAFQ^I LK_ͳ t8BJ" ћp;l80"pIo[ޟ/ƻY\y(ce" P[TALi^л~#mЫ FY\_}ocl. D/<(Lb*E>kDg\bz2H hAʽ˥B䒡3<1ə(H#},?!Q2{IHr:\dSh^)JE9dX YΨ(K"֌BChz$wU`ٱeKl|a"lr%3:&;f^xe^x#<5=~|ć~~Ì%Mʉpūwv K92-u$r`rc \G ĢP$=‚є>dqr #Nr,u]C(pq1A AbZHA$YI֠ BdZe?s(s xvdJػ1SR2,PR#+!ɵ0T݊$CQ#ُy^o>eM zeCǨQ709;'Ĵmvq nERb4fSE; ӝJZ|'|z4)Vkg| a<4õ~,%*`5q/)I+:Sd&R4uq=y!A$^,lm1t5CFE$ <\LOn0Cmc:39n|όgUȌ# .dVBGTT@x+qE9XZBWa#.(\]-xa$HAJݚ[|qBIY}詍MR^B!0} 2fEVf=~\nt9Wz΀cS%|bh󊡈1~̾* ͅ7EJ9hXxMLC0`EPCDZX}5+ j~ws~@S#AKC+)/ m,ij 'qA&g($`(UӨ&7mCP1b f]')j(HqQ1]zMF=tӧ`}n \IV6. Opռ6d_& ]Ӄ#p:O6T--X(7S\86J{UaDMI܊YTeTAFc$LrDB3K~j;10[hC/ !"ͼ OM(1N(~ IDAT$wSvBEj>FnI K%rU3`"OOۄH?5Pej6.2³KPS lT AuP4zG?φEՒ5HSZ*á۠1i:u|mga% = R(;6+I=1\>ãW,)[ɧ̞BkFmH6[ C֏!ەNܱ 7Әe 1Eb2ΦmgܴB xrGnS7e?(ZM&$ZܽF׿u|^fqb_(AW !eQ$ 7L+A& {v"unƱB?>? ;r"!Ȑ$KA?=%XX] e;d7_DE[IFa:F<4j=)| %TӴ} Ari8ST0/ͣp&oG)P}- gQE~?TK2 .2\|3#}7*e8Ra&}'/LRJd^+IҀ003)"XeSsF8DxGg:$n0B n$(ǡJl"Fɇ 1D)qy$"GNYZp+"~\`r'by= ϼ % 83ѷZ"=@ַQ2O߆a C(>/KSݭ\`6̳Y8$"/A),H!.2+t+*uf|6x)VCXX%.f1gvqI!9'c]ce ,OZ/5=aXPL V!fce,Q(37`.1bj~ r >49{yAA;,հs0*Vdq'?-pb %} 3t'!S:Q{A|8Q^ZA=8a1IHXl9b TܔCSU!$@Dُ~ߌc Ȱ4A5*B ( yb21D<ĭ(T#n"@39h˫#)z=Uvt"gldxSlC1gZa<(șhbc;uy1A=T/Mbn v>p)p-Rށsb~|WI=NC*L1s8R_(:Fџ}4fˈ3e/Cwb!E|#RB͂n>>IM*v;Yĸ-$(q!F8vb:T"LDY2eWR0z5ENUkB,$a+C ͘!]6=wɂ&aWbT96IYHw yOUcvu:5߼   MdTRDvc6%- k`t^wh۩=CNw YT}gQv:1O/-FӿPz:6̳D2ZP,f6>.Z1Zsa xPLMAMYb$,3u gY#nR1T QQOO:H~UY_؋;i"VX=h-xTcӘ~f$lRқ7ᇡ.4 'z:ZkwbQn%SĂAX]έ4fnDcU8MJY&3,Mo,&v ȾYRJYqai wS3bݭƒZ# p?Ԧ>FYŤcȪ Cssa{U.-lK3>"/_atPYbnԓT%l2,z7 / NV%3hr,i[xZ\e)-=" JaV>j$ZYyDpp#B el4;˫M^BiA(ghgSIlb!2+ 6U'F:V ȕkcvR܄B؋%x J.g &ɳP5Y0!&S*PL'?0`@LOI2ѭ9N zXjCm͐ϼJW Ї)70 fNK5)<=H~`cSάh5T7C 0M=L zW fY*Pٚs}øq= [),%3,l-`+L0cIG!J`ӌݏ6&)uWbEQ E!ǒz6X !搘@rrS? nlZR)<B{pQE 3X[d냔 !H!k0&w9)0Im'} ;gZ.+45e=(ACҬ%l3L 1UVJq9EU'84ϬfE "`RhDSXsYJ&џT\_ARp@Z- xB/1ZM ټ"1=ОCG:AF5ZVUp-M'P-܅K}rl!KbR̎:3{r^$NҲ |=_f,i"d [%^tazbي A:/]5*?[0LL#zU$ԧIӗbx2pwsPAx +UΎ[hc3cΜLlډla(mbd'8] lMIS`sO3\,l\H FC.TUw@L~l}BdRLqKҭ!eS#r J)4,M1ZB.#\p``@7J9!+=HJ4kWz8n@} |Iϔ(9|mpQX,J9vCN!HR rR@ =b{j;ߩ4Rgy ; %rYܣv(G)ґ"ϣ!DMS,mgK'T@̞Be7CnGQ0򷡚a#<32f]q\t1vN^#.!H0: .nAz4)EqzźPWk&,2$)b]hՒG)Ï,w)EkBG;(j^\lub(e D6zz' zJ"'1ƒ6Ly if$L{'u|OT vV| \gG-4(,l#ҏBXAB\!AWw1pvrJ a+Absف"|G;lBʎA6S GJJ]MLqLD1u)r|N9(',6ʵv⁏i6͚.Nw 0)iTf[)(!C_XMkڍxl3:#6a|"kCe2 E Dӳc+M] 1u+RN2(fY~ *=3/1ԤתqK΅Bܠ 5xF@ /RV R)&΅`$yOҦUo)dfa;iqʅK8Erh7ALosXbSp M m-ȡw,gtԿ;HL5߄Ť  '9hr ,@dYN8R(KY-"7U !6J'-r2hqbe KQ!lyl b! PrZN{RTs[uabdi R?0$eJX%0Lt`yZlZwtal/?^6L0嫠*mE,wN[„LI+1g"KK\5~g=;TX1<ꭀPJ;*T+.~ua9)d#17M2Ge 18DcѳiP6`Ls%ΰ9-:@rXsr)(`P^LzC :>8E50Tr\klAlCpl_t9TER2j~W#HhyW6H,PvcA7k=K9![g{8/ɡ%7G+U׹ yNc 9+ 6fGݼR7-BCM &"=>N8˄A! "ȈGS\ym};0(>_j~3l#42F2Α1gȷ&71CCX`xf1~7SLFf./F6U`6~}!E~) /J=[:+(b_+T]J*"yc{LcY 7t|RX6Xnxѐd6`d(꼉s)h.D!^BO/mXteÝB$XaJbmFVH؂ˁ!TkR!ڴmw^F)iƜ|t#D.&3қ{mS0BP"d`*F8HS3`+ev a)7csv-|{2PT6!Ȋx5-Σ9q~I:ɡnnQvF+^}XrDQș?'A`ʾ2fuN.դ&689]"Qzch*YHSZSXV!}VyϲxOww]d#'9ȳ`JQ!I(z_ vLw4iC*8!0֎qnȴ 6U`3|F0by5-) K_ 6/1J2B9A@9x>԰q&3# 䓓{_@Ek5oFހ}FɴWԀzK$KPm&֡FLJ:/໽yM>XhQv,p R#H)B4qPBVPBkQ)rY#⍲ ,N vCb6~ ^Krjpb-?!voَXU#9IOB l^fxDm{8MLp Ly'\7JrVV1-"=i; y UINv(nc\8nD48(5khlb4uԅ֛09jk> [tYV]6Z` ]:pFmj+-] q Ax\#|DLDZO@BYq7eӢ Ez|? KBxQִv8cM8:ӫdf5I1$*ا]eUKjb?V[J #d<_(+9Yayz*g`مRm/͐R' bbY|E)&h9PKu[)nSG1Á'a$|ԶK,5 0dgcwQrU!5 m8iqYb=D5HRRAmLdwϭL\)Gpe^T#r&t;|&Ik{!gm6BoS+NC9I&pmdtO7a]{*V0ʙ ͍4{X;̷`pr֎1݃1aA8oghaIfsH. 0镋|"؞Ox|44(>XA}J ۏJb]zΜ&]8=v^Acd.\g;RTgmE\4JU9Xkgp3o Q6 /Kmnψ{#m5L#~TCX)W>N *'D/eSqp}b^w /338oh_,pN<ۆ dWd_aPG4R>VF%'͞c3e7 рF^)gDe)($ũUsBs=o ΐoQʷbi'hMbd(78*%|̅wi/4{YJ\d"Cb)⇳I,c~r'B4(EӜ{ vHN J[07:席_^&Ç,(5x` RJjj S9,%l'9D^>r& r9I_'7 8)E(`8jԴ IJ#b΋nvIcW^YCvMn 9l[P T)бQ)Ṯb#98д?V~}O%kDM S1P l5mަ=;Y72#|<BcWa׈49i:BVz %gڱ3T9f<;tcZPnMt|b<&{ ְq} rJLٌ.~~eSXJ 9mJCr0׳8~x 5Aa4p֥FHOIiT㤽^HĎo^F6zt ZcFl7e;9>ɓQ.k8Hv=(sd%NaB\f~ NTsr1q"Y6~R6W/P_(-fa2r8urRE8˴c=c,RB2nO/Ԉ 8see7OʹV8|ny+hAupSs$:Py>:S2Lo# :Kn0Ϣ";zTN^l g0zۈW(5JL'5Ȧ} Ø| '>YhїG!3G\2d"LrOJY oCh-c,+-ccxt v(1̋ >x,+$v;ggᙬ:8CM )Q{$44'} Kh&DG'ޙ>Xu]F%ÑF';!RY26M_~Z K P`a'IcB\C+gNvb݆q sKۘڳv$kL뮮;beɒ,ɲ-+^ͤ1{ IHte(a&i!ˤ@𙐶a&)Þ`0&ݖlYZ}}zw/?<fz瞻{N.t%0|{_BO1y&K,ΞrξoA[-7LrkUgU5Y)*T PGGt yEQCʯ-v٧,{sZ(܋{+(5V!Yц=9dgoʨ¨(2sdmGٸb<#tَ#Xf@~)gC,˘g9V8e sbi?pz[\}7p aV^qJlcplF{PoO=e-{8-ۙk؎ɵ 565Ne~+\drl({,v!X+ې 4rGS\EHWr]k=n5+]bBK:_J^fbuff߿q0;v7 _rc:uJ rZ%A -NWnDp.$똣 l6 $Y"F$3^j0nB1lo!^*=:DO8.!eb l?HCд, D Vqm})G:j>16a7zZF`XQЦ#& N.ʎfOY7o֡cec뼤B71ok@x vbټ;gX9܎;8UC[wd(+J|UNE;l8tXKf>{Y-R `y)pgC_* j< }2vyښzdٶYa᧑cmga!6S D|ai#QPD?r+@i)t!!I\-` NE$orow cl}b_=ò NUdn#wq&[Y;%RO>lX㨿aw É&5lB<`6m?s" f"!%(c3P.>;vQ)bR={- ʥKj opb>L}p@T s lx*'⧟lgpsiV+Ƙ9k}6H``gJP??m$Tբ^4Yè'aBSC,hdyۉ(糑5PfY"/:@tzr5aue*jKݎ]-a'N6%n'ĵN U2ɋpJ}^²;Dm!)G5bfqC[Pֳa T"=RAGT8,cr{Vs6,qhլCe$zU@߭ X`Q7و+j+N4 Ѥ˩{=GG "vYҥX4̅#}$jQvJgځ;D5hI TeknMQz|O=B:lKf˲2/i=P8 "s?b=LvZ+Kj23eb3haZJ2F?s #`=Vz6i9 j>x7H _i[|ԟmK"nؙ[oӸҚi/Ǧ1cV6\yoplV\3+nG1::g٩篶]p߹y`/*ʧp=*v'A|qgRF,hxs7~p(*,r gX|Y4\~ VciCG﷦ç;e":kW~M  /duu 8e+p0BT'/8?.v7">̊Nr'Z!NZY6<{mFs2*~I?̣h,ti%pl"}EXkob~vc3|޷ '{<[2asKӿi:lG)D'P>hp[EX=m ыμ|:KҥXUklZi^#{lh&=u"" S6oFW[>?Τͻֹ1b`˘e lse pY 8Q,T̂F+)atlK I_A7\YtϏZ`/r!hz<]@wr. ){+1FC!8?]۵1Xa)Uyh^k/~o+u|*8>Jp "s{MBmΥ}1l̼f]1pBF/Z,cէ[dPH r#3,V4Ý ك:]"=FVE5ܧ^j}'_ڎ!&uhW]gTᄥҥiR'@VRiz?.'gbw{YR\ *}AV\lpV hƨ4 gXs㯈O-(ewX|O$lvh&|Ⱥ,Af;VAa N9K8@.:\:6G=bÏQ t"Έ[KG-?te; cZzv! (LCz#਄!}~ԅaWHti"E/>nM#gIS&ZB*mb\x|XF`ɨފ c+ܢHK#9zq[#B;hUa{$<\RX`,]´IEDQ{jE3E@Cϋ0,G|,1(C bYqy%xßoB,>HnqILx&r2"E(BiIޕO“|ꎧx~:0ueaj0|`UJ܉@<8X|^?/9k}{!Uq2;'_Wׅ,o"}^~~290`Mo)UO9z~xr.aG ӟeT}=U\nr{ڈEp'f&*#/PSC@!;٫%GrH;]|7)LiWիW[mm->s50OOrzl 9? XW$wyؚ:PɥeE#Pnj[uv9+;2SQRs!3-G]#s< }xz/FwTlٲ} SO(sǦ^-Sͳ6說s?BC Hu'?icBA#j5Vzq\؊>*CTҗlSOspvϽdss5Xq_Y.YSn}WW^5m?/{7"K~f϶-N4YX@~3;~lu_ZL̷2cO᫮B|WO#np\N 1}:ߑ4yasO^ye;3/~nw]~ _QN4;nF 5|ַ9uՎ8sȃ< vϽBն\ùw♶a(rR#){"zM7׻[oq'ݨːˮ /жnFܛ#m߱ɝO|I"- "z/6PSe_IDAT~u׻!fŊ뮳}fK@~3c;ʅu략:yN=7d Gtuvv- Yn[M߳u]{͙C77(r0HPvwo4q2fn.SO>n\Lq2<)6 Oڽ&*+a:]3A>O3-sUV^Ӈz64X_oW0oQFs?҂}#sǯ~Pv-W&G4$O0ͮh%+UP%[ _[ѡE٪Ug32T#Dp>яry]zmrGq0jk׬u_TWj+/bKl=X}_%wwPTnZU M$}Dh%? -r nx(&zwjP9!]_$@ d͢دbUE\oOzwfZ節T'&[n>~nRj4{88_'oH?̇CO?7S!rƧ ?/ۏ\މ~Ф!] *.PRQ*'T{"VNToNV3u"7Ô!ws 2nn4Þ6bV/XB NFĩ`yDZTi@7 3T}Tk4]~Wc)(W)L b)JJi07 :〉]Tt>La`ILZDp3Ȼ+g1=Z*EG+ʫ !%*~:`4+D f*0HqUwwHM\|5)ي0_Jˍ:E0i!ѹlhċO^GЍ22 Q5uuPdAzzIzV]D?8s@;0P9hȞn4IF8-zA@T4uQm>@8aebTJot%!s`Ɗy g|ƜYD d~]emyٺ@{(kNԉ@4.$*M@ !vOtBC!mC$8"d?_L Brz@`GzvZ5Js5bba\'EaԙބhׁA\uruP1Oه#f@fA~:jgԄmtԼc;1Tu/lJY :x%fgςx@| `s-}Xr- `P#??ŬC xF{8Mz/ _[旇/j!)?($j@ʊBA SVU}4Ǚ3C%:~!m? 7xdFb6w*)5{)`+k跃ӈciN6bFcW~lji@w;4#;¶]=2?,P}YL 5C#0@/Eu1Ɓl4uO¤̖ð~J&B$$-4۽@A@rȨyTؿGR5xףfeUwKKZ][4$ 'l_'ܵ :M&ʑaꬹ:qo:yw IOZ[ yT D 09q(LqB\DrM"CxKx55|sE0SùDb<\C{Ez*Os^< 1yHDzԑ[&~ I:G0.aB,Օ#LfB ]%ZܰMdF2ie{NbQv9[V~,ñ Ors H~&+ 755ag\@X&L$a C,:0R>g[NLw RN,ު݂ @ʉUmn+ZqMϔ7Or.U8aQdg`"2ܶFƞrb0$mf c$z>xIlyi| ݾc׹WW(й|(ӤW.?9e`/ŷx ]%)΃t,7:>HpŇQ{w/gʉEjTMCյ ,3/Дbc tQ5J#}$%kS8ie9g(= V cG*FcRV./ưIYdWJ 0{tgB]Pu]rZ[ 2J<**)'8`+^XzD",a'ɔ(VJDl#I\(xi0vZF#c]Y,il<[#ׅԃTب/V!](h|ѓWt訧gyNq60c*cK9Wd)#}hbsxD^ye[1j8GCK\^aG)NzGr텽UFro[!DE H|3@ a4̳h:SH!F,R!bWl ߂X]l]iCk~Ҭx!L=  YXA )%g#ySenyXn37Ũ?1{mbe/Ƣ` TPc(nڋ!Ay { e(N7طu=텦ƿoؼAҿ"HvՈF=5p"NR؇G?B,MCKY8G.4y7Z`KcHW̾$`b%r3b0&OO۶Zb`Z`In@\9$,I={O՝$p-0, 湗#Ycþ!sm V֊,g!l0uVg(Ɛ*`08P –7?haDfKgeFmW0҅M!U^rrA-X?(\ EYX\4aj."MX9F$#0TV P5rwa(ԜdC<# Hך%̯l '=b}XCB["O3>1&0 9x3V}F1_s G-5>Økl苘Y-+1cb)'p MF1Y$#b́NۣԳ "Y8dH?!h؝kQR|Vb2bq=F$1=q<<$0emcj 7;Sp˻&@)7wcEm~5fFڡ ~`8#+L= KTs,ŶmLG:n5& |1v`|_$m5:.z!zrT-ik&T,3畃B,-nsS:ySù7D\#BW#3R.6:\fJ4*y*ka"~.Ro XeOEQ*r YWCH> ܪI~3^q dh|ˮ L1s,L#aypƒ I,nˢ3'%uX}(Pzu͞hd?VF EGY'ʡKB=*9p8LJNI %3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxx\Le{/ NIlumNs7r$u6:ٕMYYkκZ*DIHbI;0g I[Z6KK889g{1%ٴ [muR#*0pS#*075\; ̪  M Ϋ*75sSõMpv#COnO} 2LU]}KzȐBCK|c7%{w޷ _ݧ_uw>z_7Uy|D|zy=̓>M/ S~Mb]/k)+.58cWt}z.V? n+b6x_6|@=KwyЃUEqv2Zdo;}LPL֫/z۾ow4ގKK۾}k_z| ˵̹]NX}_I>==dtb7^{xA_.}{m3)S:jմA8st mf&7|Uܧ/CɳޟK~%r{v6kM%g:ǿliM>z^<1u6y'?Lz[IǟM3>e|S'O}8ǝxS=ɯ<~L3oSWد|)_1>0í$}d|o[7:ǘ_Ɍ3AqKߛ<>u'%9z='?x@Lփ>5ir)Im7ԝ =4d9ʬ^3%~vA*0O]5SB-wIo/I*jhf۷#ֿt̓mRnqpZ7{kOxna|E)躿~!nW&&j5YܩmW=8>RI2LIk>n۟_]?.0Ã?z1o;ӗ'aݪm@_z/}YeԏܣOkW^_'j1^rЪB(Ձgնk^[OαT($yN?,>w zǦ5{R_}Jd|O?V0i痢/|1@O|vCo@;gLG薯]_A cF~a~q.{/~c>IiN}ߜNnި}Ź?y4UgZqz 'c 2(=8\5R1w"R>̝Ϥ`qk~Gt᣼m;ɤYxw=n7z(K3& MMM%R8275;}j=]wJs稄xU9TRRr}HXjVfUnjV榆kuUYUZyU`VeF`U`njVw^UX՝WfUnjV榆kuUYUZ7equH#`2[\U>8ת&y9oqU`s4Z$/- r\>UY|kU`*09sPj`5->nFvCc ׍1ͻQjޛժkC<7]Uy׆yUyovW {īޜwn+Ie:e d 5+88E&IZ]j̐jLcJh(0D45Mwӳ4 ͮU6=H,ҥ#1ԭjy!­r%MjԘӣ׊Qߤ̃WgySRxIkP M!s!┖\RȠ}XsTrU5ٲ]iVzE]LֺFE?uR>S2w ڜz1y䈆S<Ĉ&P0+S^M,m UbNSFUS/.0t!HBi%~9b P~! *[jׁW8ʀ;2JwURC;W'~Kɵur!3T}S_qSw8|ǂ2.zf՘TFkY2۬YKgf$Ȭ~5Ԝ-&5+.ܯؼ{媸O Y۩cɘP (gY۠ u uY~޶Aͷm|cLF$-ec]vL_>!PZ8uMiwIʧ:(CŁy%LUxl^v>Fs<GBA Y%{ Z.Q{Y ,.etg)o*WIFWk}iDΑ{rmʷ9L;B-[0il .\Y9&f2aFf&M=g^<*i,Rҵz8M sB:m>7jl"|'UG%X$XZ:\ |V{eNV)E˺xM҇%?ďadM܌ b;d_Wj~] Vw>4̊1;^g'OKe5*a\,NGDE:pWw\N30ɟW~XavPr5;#P.n{q$[۔&_mEYQ,WNf}ZJT*gF91/8K}tݬ8Zȝj+0}T3a ޫ?SbpP*{p0eC5tQ|Tۋ|9mLO* vI4WDRD\86LGR8QEI|j2.Y]Y?UBhxmAze`Ggϴidx@C]Th6lʖBU.muˊ_Ҵ?(ٯ߾Yko#SZT~# N/N|#{ 'AK2;cYefE檜3S;1kW:5v8W_2ү'H> weF[Gn)9\d Z %t'TI] Om/(Quf'94_V|nq_ Ke"6EdfC@Mj2Uݩs~L3Ĥ쌦fe:ȬN 4 ?QVN 4mU?~HvPX *lB^*ynTB@}Z]Mk֪x+[ILX- QRAN7Fyc\!m+<(b šz-sUÓDfSm M$x\iK4iXxI}ӊM=XcE7PQA,EJ6Yps8? oaWyQjoQaaሦΞ$O[pDw+.'_9˶浲d8FS.uKߐ;RҹuٴSh,Lo|nRqLˑr<2. Rzåpt`Q~XIN.&rJ*SY{@gMzi93<ƹUװUUKDhم Ubϐ?A8ۊhvC a ۙ YQRY#(!%/TVi\ *~=}Ih/(f~N5:Ȅ&Ĺ2?&׎Wd Fy651?0U^j=h\[RBW>_WiP_{pfxۦrJ!SG/#3[E%Ɔ\™wiN8Zzt:'MchZ3gYIrN GTo+=w+~vfr >G gM'/mM{GܰȄ=NڝD=\Z]RNe5wfԯ)YӜZq|Y:{U&$ްY*?Xʌ2may>etTޭ9wJ*{QUEf&eGHqk+p~s]P *7iv TFN˔HIBwhbM4 ĉ(f!hCWI愆e5~_6xU6ܡmͻŃɖu[11j dcV,DD<3RuҢ+ǔ:](V{5ڭoLӊGֶ͊;;1j0XQ%0!C'P=sթn}tT|K+5߸CY@)\v^CVΟR0G' ktI˿֚ae[L%;X5⤂,kt.ܫ8𮪮^ES &SUjLb5pVih\bIK8mʉ ewm0qF>YDf)''au%,NQy\ŕmn5O{LlUk-0s4YA2CЁןWnz`r>5iG{fP偶s[4ު}ꙵmKxf9N[0eajT˘2hМ|JUW}/4 5lҽ45geo3> CJTN>QGB<i^ \ؤ8'𫌔02;>~X7AZ7Ň1LRp:aPFQ:Fёp*\)1an8A*f.5o=IL6adT>gBm+F1vKLi$ Iՙ`\kri_c My$tTȗ/G39 25GjbzxX Z-wǁ:sJ.S`_!IP߷ۊ L@GYe.bndi-58kuk~U6ɪ=ӄڟ-*RF}N9^; :3B1 Ƥew`{:FL'QalWY.Vjf9A&`1a^=t' zOk^uZXU̙DAh rILGu%ϣWC3i:[ % UдQEV'Y, ˺$+B8Of@SeüA6U9HQ}υwGU;r@E}uFmuf4p(vyԕcåy8j۩G.O* |>&yMCB8ܗ.33ڈ;7!^0E"\$gTBՉ?S!MP4H{Ik'Yljj-ZM۬g~Ya20ìϿXUsP5 h0h h`hA3Ź52ZCP vh)TEd: `x5Wj l˽[nh? ?p<.$Ft[ں}4BvQ>ղEy 5<ޯ7UErP]*KcU0'[;5塤T8' m4y-."-P:41 25Y v #L5PHR `L!Bu7>\xi6Ua5iGO- å'! "jQ[՛2}Ix,``"0xUQXŐdx5֜,e;<*"toOOhvC/,avg%&92pLmYhWg~(Ƥ owXYehj .1;|U\3y.g_י'~`-QRc#xrўV'Ş0<ߨ4;٥u{fn^/ϫ?VnNNCk䅜6eg\*ʴy7W`p0 $~]`zF,X<*ՌبzyTHrU]y\#nDf =JVye@łNҝj,pg(klD^E.Pq/EH.h;tYSBE/+N| _, ?o^2|@gK`گutirri= pVgٕrm81PZ3=5dE H^}=/)FjĤ|gXiw2p,k/ }-5.ȔLy&Vn3FBEg*y-#R2~EKY! 9aluҜX3@CanO2 T_`!7uш@M8ǹr! %NLMi"H|_Ӹ~^@4-T}*Wg)9|JE8Ȅ<( { yIa'6Qֆ .gGZ@.d'D*-ќvSCCӘ [:sht*|<_; ]ƨ*.b1W @HQW5=04/E1PҊ92ܥ`VJZH/TNEArG6lx 0$!xK_ŏP n$ Tu8W˵gW+Vqz jS̵/U\M4O6˿c9,^a-w(AJ0k30T1^m\ c}}~X:1S }^T mΈwRS|#^m.ff6`BiVH؜T>o983($w.+e+ϕYl ?fS%RR'+"Rp8)( zv1lVIMi\;w+Iա@(ڠf(gD,虲T]Tu2%ݩm=W %t]ZGG5yrYol:NJD5Zd&&4`w~Nw(Z ʖUHĔiY:BSkafs#,S&v-=ňBDm w<`@qe-/+h8Z&6F ;9hZ JAdvN)ϙ4Y L]dzdnQum' hNU6zAB'#*iNLKkS`[׼O堲15 1zK11yGpKe]}՚!%6QLڱ`ҙp$p[ PweR\ۭxIho,)d&wVK!^îPlY˦g~LiRGB(Z0]Vr)67uќ@w%Pm4XA`" n!Yd"8&Z Ok"2ORWX>&|9TR@F.釯5R1?=" ^U$ϭWaVXԫ|GGw;ߠxRK=>R$7Jt4Q:pa#GG]гd*#0Kh!Q|]b\{T0g,9 \pir ┏dSC0@tT1MdIt6|Jc{[14 쥙ay&*FቶFTA?w9@GHwCߴW{3iYNļ \s {eNf(qajc4}RuFn  ŵdx3JrpoS3 <뀡膐CL$iՅ+F;湕Qd͒b8āwzdQ99 Y*bw jԙbT+HEgsɣ";zzR`ϵg`@.'Ú'-X$Mk *ea㢹]qZotǹ9 νMnmpt&5qM47hmfhJ&|֦9eUթu +yQ:tJTe*TC2ZLt¸.N4O j9ÿټi☆9r8roȫ]}٨u2S@BД,! )< ;tX6;vI kePlIJ"~; BE`P}Y\XMCzOk>]&&gz@"HC`fi&3db.;[a n+"0I"f&JfBڴy@Il,4<(Ѧu;t }֌(+lCDgv$S<2bDP}4!=dlQ [?dF4Ph(\ cpaE~7r*L(kh0Z2,mh)>p4U\ {ԋL6?BzæL !*HgQ5:29zY&8&4V)Lo2RMT ss4xS$5ϊaЦ)$bQ" ڞA *$s*_BF̺:7JuF`u&JTc/h,|V4+wUrӽ|5e aGHhtD$cg'ԉߐIxyNY~K9<jJ6F VzOjp0!1gq| I.ЎVp矕O4N(6WyA.Eu|8%DCD~Y56SoD(̫ATF!#j#j:Z]n]>Iv -';*GHcSv7#8 ? ߦVTQE|EqLTihN 1`S5<# !ܝ SO6P8aIfGɳH:ͧ 8u)+hc\y-J(AIC(&.?km̏j~ >O˞և6n3q/*WFɟH$.u\6}$Ht RJM, Ԇ1EL9AvXTtTHӡ唊J'cu?93X!2ըnC]P:l5 Σ-f(#j:3qEe!O3JO,jBCx,$Liˋt@@h ymQ%/aK hU4ڸIͭCkRcFi9Lcßc/Ry6QR0\(tUI)O&S-Njv"DSve )&t ,Bz$,(ϟhs$u6RwCW ¨;&բij-F ;Vd/y{LDž&!-3 &Q]8 `_T}UA̦mB}T=[.LN9ATV՚2if.MʱC U橂PiIWUr׽,ڽ9w*?jR˚E! \}'Qc\{n՞ #ԋk.mU9*w-mtZG(v5x ^m&M[BH 9pk:2M tBLr=j:Q!vu)nrӈh0ϣ&Q3;)OQAcwjIXRZ,9*͂8D5k2vgwқ׵$"a5 N*m Ru mXQ3PE30J!*?(oz2Etf*eΫEZh sh>l:еq,gi:qBly6wUtU sft".3POQy)b뇃 2RPwjGCA90?M~  wNArbi=%-qo ͒ IQĬ{hc#Mo `OΪO32h2HAN#dyUf4Й'9W utB?űYcm4 c!;{I.%`ϒۢi:@Rp(ATG\4$wQ>̢K]{6(bʧ~vDHYP48|D6un5CS2T0"$!iKq3姟y$Xqi,3 _ viWuqtJ!qz8gJ\m4Lʇaey2"=S>15keCZ" H@]6݇ 4Ȱ mMVE"ρЍ0{/i&ΧiXRTy01=Vl޿&چ8xxJU#_e] hXL3P:bpb,M"`WCPJ'[M񜠦y*pL#Yɦ2ޓ)'ri$PF)w}h?SNz% jnS,׬&HO!Sk1S47VL`R]AF09 0/rh;TQ@PaکVᗹ0Gi FF/Y~fP?!z? ZSI;k'shQ}jת VV͟6i  9vEYFKF*A~ڦX("l?#{) Lt-2c$-- n18+0T6LM|]s\Z:fa`Ef3l ֆp|G@N'x]Ϝ^A1aγpzTVKtri:^]gM_#"~Oh<8.dz]Dmj.`q0Oh9u{ZIb_ʄC"ihՕB9)_pja=3L:Ap$SU;1mQ'nYp0]t&c3,RDd WfjHR)gUIDATB > {A-/ߠqVcbUBૄhS10w!|cLDd Rkb#0 %# h E*%?-$.sSd$mTW~A3'&ζ+zq`TnyI;(LnPYma*W ȿit?e_>0{[10 #3tT:_Kп-I>beKT~G6y7[b2:3I6;߅.n_*ڶZ Z>5l8O OEGut͜| yA1N MD#<YŕamOiΞQj^O*l&%aZtt"}^DӴߥy"Ϭ>&Qey`5pdJTGfF2NCGh4ۯKgToiËF,ENۡ me4F[U3=|@"V;7lAD|C9ulM@o 2RPY&yԋ;rR-MgnxXi/IôBl`X5M$H/Ǎ·1ETi(ڣѮB?3fuNiKM iMt(ZÇ\mIqxBrn2Crtf^( _nM}kY1D/Kq3罟?ǚ|Xh#-7s$3>3!kq|}q'9/n;Lc~&̸5l{I]Gi>mܗBn`{o`w}c;.xFagB 16^Nd^݉W~RU]?y!o}cSt}_aSv0Mel]}RpǼ?ʮ(&<ef>{} LJO-ݽճ #`munxCüZzηn][y{]y1C 6_{߯Mr׫]7ՆGo\׿㭯׿Ǹby[ $H_,dD ;ߵW}dk4+9gNo<413~{﷿g|xMvm^I`}SߛkrK"0ʴvZ`lPTj AO!a& 9N!g|ڇW j7lrc3q>=k kRI˃QeVm3>4=3}RgߍĿzBϝրS.M͟veu+J;(?O_¹LMcs>yo1YFϞs-ysjJk&xuw虿~F`_P>?5CXj٣?VV;t9v/wzO}Zm{^}s֭۵BSG/E/Jn}ӟ}:yo,MMʁi1^ЖYo d6c|馛w1Ip\RFE|P3rKi\5 244@C߿_ԲEǎ?yN7ofbef***TРGukQ6&<h?F"d2q~@=QWggJ`=^_= } CO_yeGCꯞ~fq1>3Ipw0P%ۭcVD`R&'enJ?~W6Vr$oyW\(6 ŰIXԘ蹴*äP:Lه,ܐIJ.q㚠ھ^g>}c)HC+/ʆGGUZV}p a籠Gos#X#w7EsgcD*/ 0-ЮvGy A%87K5ٸ_5O>xʪ_jhtbtd$ɪ5&LQN;;7|_ HaxJVWh(L ;CtuwQ@DŽOI;͟+T!FWJک¿1cinkЂmڕ+WRQՙ}1=ǿG8197vJOa._#~O4?Ah?p#otWF`rF1Dy(/IQE򘷬)V(y`,&2`_f:qO3mz.tuթS9uQ@8%`=qv"IYHy572Ӕ4K8a+!(0Ȋ+m0UŇp ؁#=V7w [I755i= !޿bull&!/;{xOR ѧ?4>eÉ> TYnP0'#'>Q&dUz6>p)M#AqP=HN0Ro%geerݩ;0Ǔ? 2- hz?^z?uH [|мPFrJ up

+- M>p2WF*ړZYuKhtv%CŇ(FvPSE* dn??`OS#e3ˉf2^\86_ v*rF\X]`j>rt r/㵫M=A[0] ୧G{B,I10ĆgOqbW]g;J_s`EN3xP[ǀ;>LG95WPG{}6wcׁu6bMX ę{A:"0(S3fx24un?@/]{Ly,``,@bBМp =l)`5'"1!𡬢ֻ(.s;|0<26!B-R2JnYH[fX@y٘åؽ@h6a\ts6԰ (b$l9藢Ͽ¡#IIџ4I㖱Hg'30 5>^}H-h ! (i ?l!㤙U}n گGdVL)Akzy U*.WaD<-aLI[k(4* eU 1|iIҐ6hPP^FA@>:B 7G$B+SO_F YPE > C7F3CwL|2^KŢy>|/4|ʛq++^IvG0z1^thR+=w |}L>x+!uF!tlF0vuR>$CBgӲfZN"BGS'SQ(/|O qJuxtX}Q [|rpGcC6h➳&xdjz+ggُ?HA4rB.13.YzTřBu6ό|,>Z (0x&oYBfo̗?`z؊|JTg{C{kpcx/ʺ>bex:¿mr?q\ O OnFE\ka&#Δ .: kᗨXA]=?ݼ~O"܅綛Rkgһ +L/b=_$ @p!K> (xMR/tμN8.Swt,8`+g^wL:ԅQ4Y Ǯ#tN]AILYD(PyF\]e匤$rÉ3O[Ǹǝ*2Ma^S<#|xqj jP=wܕQ4ƒbn5qsYMU 2sy$ ڎoO1.q׆x>܋憻pw7^KWY>)Fyyk HH0B%;Q/OKtQ:q{W>X?WU z@~ٗemH1Wt w@ }3ef"O1jj:.?(+a-pD'E_!UEc>iqԹx>r1o`8raĐQw-ls7wfU0bhH4tg̲1ҷX, mOٛA((M i9o@'hgïRF=X-/LvIi4Y& a=5z~I@yiѻ0y^7`aS,/ W?NOe4Hu4T”\@e#RIT SrJa&S)LT6*)DJNϾa <4f*Ր?>UP)*T@@쪀+t@@쪀&aIENDB`jqapi-1.7/images/0042_06_27.png0000644000175000017500000004214711460407074014643 0ustar metalmetalPNG  IHDRo3XUiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATx} y}LL}K@mcH668b.JLLB;`]rk .Fnj>{fzzir3P~{(L*BYU  eQ eZ *E*PEj*PX@Y@b`Y/ԃ>b28`Y@gj䴭W3. MTUs;*P-/ޫ@`XunZʹ{( @@9`zaչh(LU\0: UvU[_0b@ <{oFDl0i<зI'_Ʒ7>>^~utaS'D{p]5xvBX/?C>2ߍdtC~P~ry<~ Rgh)cn:?Y9װ}&2tUsv!M@-7at7#l6JKW'=M|yI}^(8 .d5⇏܉NO6*6<)l y< ?6h 4[1ز|+){!_']= ӧx]((QfSO%kYi֮ @<̝Rq{~͸g1[od/ wALg@ <6IZ{>!Qo˱sۀ H+q=~rשmg\2*T(_J엟1+UElwP4&;l ZI6ʍOvd%"7dܾ#/ rR9DQmټS9Lg㱈᳦5rrѠ233Sz:r?z~_~BE?iyXOSxƢ4Mf1v@M}3?*3?>u+n|(TJ*P@X@Y@b`YeYdeQ eZ *E*PEj*PX@Y@b`YeYdZX%姛9buv@UTAU\L@/6@\)VR *^mTr0STڨ"`r%XJ%x~5| S<ӏw- (B35rq=˳ tbbt7lճ\2tut~dBQlj5F( Y-fV,·ЖעX=F\$QlyovdZP^S7d2ApLcNڦV8<0Vf3z694aS{Fآy'^h`ǯNz {=LԸB/& kji0ֆxcW' \p59ӆ0%A!Ħ7i||(mFAqlA׹l:=s)giغ3k&R0F IӁDnhaq?+ɏ{@9f+(yo]I*r H0ithq0Z$# \Yvո`7s9Z1Xcu8_ˑ3gYڲS]GB8X4ٟ#ek/M[!w_Cz|d{ b7ф cqkE2raA8YD,Z|[Z_z>A-`6Z!D!} l_H01ݏQS7PN`1L*Fvcc" W&lKUm+9<Գ`\ [v G.dwz Y)".zC5Hzk 6=s-z*X8 V(nG~I]-Jbٖ.Lw¸o 8 qsʦ\隙Y$Т^z~O|F; n 8l.+-6 wet+mhMJDߡ Â{S,\Z ߥsԏȒv8ñ0?\ #7]bO&`m= :;tzү3b'Wn~+1yI?ڠ7q}78%J+5 PS\oˤ/0;0ErVgDMOttc@|zy:tvQe`0Lwb/F*n%MZ.#ZhaN{El875|헁̂ z Ua`7B*E^imVVx|(LQE1σ0k`,j`:=ٝkMk,=S0cF$ t &r#6 xEH{#κG21쳹q7#cDsqpƲ+CK.Ц(hH8;QO˕]gLdc1WAhgJK׬FUՁ& I r3h1Yv[ړtEqD)EZc xڏYiXfԷMp`MTc/ 3)0[@+.0vϢs|J!m>}. o t I;̚}i_}z&VYlioM1 4TZ\e,E84yY;&CZXzp p{044cP:,֥FLv3tPpJ"4uިXnEN\Vo hxN=uP]GFh0p UA,⪧n+tC~?Qq@A0b2sufI?~_@jLG)8D1 BS|$[JݍJTd<(#È8pAx0O;F#[3FZKlp77c W|ShBJoD΋D9Jc cȦn(wN6ZQ% :jDg@Mkx_} VlkmnqL;U|`*V ( Yy|egW{;u@k1Bۻ|{od́)kZ >k )PPjvXlpЎvɚ/0 A B[$ 浛 kd(6(ryb?F!>#WlK?ШL$Cv= XFWHE`1FՎ\%?EuruM4>i{AXW+zg;i w!E一vI!}dQSU3V '3+3Ҟr9֬ۆ4AA`xpͬXn Y">Վ.f折qv FFO:0LG6MA C, Y=QWӽr`IV7j Ji5Ԃ`!0#xC cɭWqV<x$ˍLǗӵȒ "n汉=z鵘#Gm(=WrYTG =9?Ʌ9mk&4kXKX`R-Aؐkuo0}X? ;Wv%">w4չq#=2zغLVLgvm3ԭ-u߸X-Mm:ޏ#)tm7`;OВ/ SF}ń>x W\9x%Ɔq%U&U'̓f7F3"8ۧq!J[#LrL6i{rcz\SW`` 4)PԦ)RJ$1bjH3UD~fXho%39D1 h{jp:J2'%Y 7kk(_Y9^2ޤ~UW (bi_ t\jx oGaHb5jn5e"xBòFGRaUspeQgM2ФGQ -Ɓ\2צPmWǜ ]Kњi$)u {dnMJ 9\/rZأ{1N$pMB o L zj;~ kOM㳎 A6L(Ce?~^7R%F3%mVk!mf,@Cb1aB9ib@_+2t5zL砋p4h(Wr5#](c ZN(s12vM۰/Q4gLb< 7ňfgq{6Lm+,ꨚbt|[J)dC(PRհ\Iұ ]dBL`e)4E - THdJk4@&;5=$J}]u7 };o[g \msm0sノ}#ș(h#۵iy ! $X.EA3Jt E::dZ6;'C~`o,+H; MW@2P?" JO =R͠W*lCv"mjYX٧$g.M&jѦ101WmL tս0n؆I n VYh8w_cXFoUxp0xՀfT6?^y%Tű1/eGRhUJcŨ|ш͔aWPсoGm6hDW*D ե=hB`j*_.}}eLC43C'){*5sV hy;Q ;|:^ތ$]0N-gm$̸O[]rV8 Z9HЦ:DRd[ 0O"vV"2$Dzk#\}!n晑fhpzc a~yfl݌K#q}A7>x iE<%T Ksh>=Qi=4oxE)"Mg;RŘ[."@$5tyJ8G;ʃk0Mo8fq&Ƅtѓ: o0CW_Rz1NneCM:MR (4O6qh_$c^GbDyt% wx :&(jcaTK 51E Imem$΢Q~$M=e $3 i)QBVHqAg?90d uɫI3pEL`v0O 9HzhxnҁKBCF78kܔJ$CRg66c/`GMܢϢ6ټ!xVn!#pj - P?5 ]t=RKشq Gx7HO#EPmpntӿ5<{_!I-|qs0];賴NCI m\?]Ma`sABg\G}Teж0c̡`46P[6M0X3XQ4XC'mDg7dG!ͽWFb͗Ltoy2ͨ+6Jqom{OQ 1FLsj DzX" sT=)Ɵ ‹yy&v:] hB2a02I7 OaG cTcVĸ}r `0C-ռ*@< %e O3hSiqXW19眊fz~E'SQL(O1HkdQ(A9لc;tZK XIDATg<B7K+`s?<_gQ,dyXHS$(<Bk5H)>e !IWB9q6hGZz!iX_ ,u5RSV*K)%بS۔>%)HR@qLmOqרL3OQK{*C9pRy/-+~?ۊ<@.0dR/Lg\OD*A#PI~ v m +/WҫEjX½QjҶ[NPG*1 K}}:>Y3\irEp҆FSsV3TJEF)Ih.) cIrxYGʵF;Dzؤ9F@Jy.0FWdE˧L~667# CoF~;PLuyjK dK=a<.RotgYWC 1I0GLJh_PʜXv]ms,y|H+zDfnw\{umn1RI[/N 2Qeu(y<.+H[ZeͣA5xȰ?G8 3TUS%ninV&i, GT1꠮ j!dŌJLU ]ڛe*l+P 63d,T\GŁR&̕שt/UW,g>2}!$iZm5GR4̇9miD?JOw]v sL|-:":2Xi"7:yBNY_Ι`W܂CqX 5VV 1nW#B6isrFGY;yFuŁ'I%S#-8u?Ns{ϫ(Y=ꓠ0I#nhn>a$ + t}D@<tYdKBOɗy~V~y)-!؅7N4Hc|P,y KA$5@<>1xT$$iȇm: s=NUElW[1as$fT|JR|iBF2>GŁm OJա TI"$̍sj~Uj{g#&\r,XFF jԱ B~}Ib-UOŁb'+;jk!biZ]eJ{٪l^W[Y ,H9r )㐪@9r )㐪@9r )?ޑOZbIENDB`jqapi-1.7/images/0042_06_28.png0000644000175000017500000002350411460407074014640 0ustar metalmetalPNG  IHDRw3IiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  AIDATx]TTe I*MXMPdtCv OZGvܭ4fGړB sO vviѰ-hk0RJ-Al,=@A623833ow~>dA5pcT BE& A5LP 9&jXPE5T,daF Dd~~1s֯_t"4R w<jކ|> wb0Y|>D wb0Y|>D wb0Y|>D wb0Y|>D wb0Y|>D wbYN5V 76ɯ58`8ԊXG}Nh:7)Gm*/ 8S7hq@&ƥas4JPZXFK ʑv~ۍ8ks$gBg+}8Q]? տZߋd~ ȥu<,Ͽkb ]BQoCo l0:O ClOr9xsDq 9a>6oAX7 u݅PDDD-BX5#wa}@Pe  Ehm(:tAGc˸ͱ5޶9Դ7ޖ Ů]YPstwbs+5t]§+eW"l:lTkt=ҫ -*zL$H:#I⫴R~p$$jSd:ReO}zQjh8(奓>`GcL=lџ.f:a*B^PgtKeDS$Z%'KMuAH\lGn!鮖EalYRDtY~Gams$o/r!rI2(s7WdSc$lj]J-5ӫcXP/%\иD"P`(H%LEA.`F,ZC5?GDg-k6 s3W}Z$Sb~ mkj'[V;3>'ɩZo{:`2oEE>tqJq!(Luԅr GTL@fu,X9KWT>{"nv:k0 QTn!,zDEX{x폝|\N(G6 V4B)`tWJ= t"bP09{s?3z~gB* hsoI?.f_j4gy,O žA!: sS3g kqc Gס:XPHW>?cF$kg6|l*^?;Sf?PaN 5lh>5QTޢnc"v<^v} ҅L=!X ^[67oggcr,Lسb?'#pLELh*;:' 4l%rGKkb}>5a9xԘqhLfFŊ}.| Nլ刋={H.Z Qb>Rgc9ͻ?Ue)|'@-xPCw9LͻT0[epBg**UgTe<~\rۊ?l:Qa c~3kZUG) 2CCPwߏTwcӊӨu%(-lb&(Raj`tH'5xg. hoUUۼDe+>e`ql+8\RmO44I- SnADU0\ӄt_7m ̘{Β[S\緡J\z`kb>խQϞ;̜h2RJp1(hfmGz0^k)& "hֹ647~/^η7,>>a6O܄MQ&0 ̵TKJQ1P*G{|ض~yƘJ"c`>Fk g$̻Z猼#ľ z|U?4Y ?]%X3g!MFf΍ÝLiֱzӲc{_#`фms Qn/M(U^S9ViӪm(L,u@OHBL$%Fe 405D.WAwmڢ\Obﹸ*&[,hzp;29O)nGd70#$ɳq|sݯ!vD)8b-[0~E`a{XOçwN}v^ُ . #x_]{A=j-^!X򩰭-p"Oi#}P9;E䇏RRN/*Ot/KQ$%$)>qvJN0;#ⓚ)U$ek%1v tRERRu.;YJΎWoۍ9)N<%Y!cK?\RCe'[FR8Q~Y2Y.%WFV'y65,^ 3Y/f^50b5,^ 3Y/f^50b5,^ 3Y/f^50b5,^ 3Y/f^50b5,^ 3Y/f^50b5,^ *z47}VoC{gdqd ػ=s&ې&K3Y܆,p0Y7nϜ6d;w{n¶ )wIENDB`jqapi-1.7/images/0042_06_29.png0000644000175000017500000002350411460407074014641 0ustar metalmetalPNG  IHDRw3IiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  AIDATx]TTe I*MXMPdtCv OZGvܭ4fGړB sO vviѰ-hk0RJ-Al,=@A623833ow~>dA5pcT BE& A5LP 9&jXPE5T,daF Dd~~1s֯_t"4R w<jކ|> wb0Y|>D wb0Y|>D wb0Y|>D wb0Y|>D wb0Y|>D wbYN5V 76ɯ58`8ԊXG}Nh:7)Gm*/ 8S7hq@&ƥas4JPZXFK ʑv~ۍ8ks$gBg+}8Q]? տZߋd~ ȥu<,Ͽkb ]BQoCo l0:O ClOr9xsDq 9a>6oAX7 u݅PDDD-BX5#wa}@Pe  Ehm(:tAGc˸ͱ5޶9Դ7ޖ Ů]YPstwbs+5t]§+eW"l:lTkt=ҫ -*zL$H:#I⫴R~p$$jSd:ReO}zQjh8(奓>`GcL=lџ.f:a*B^PgtKeDS$Z%'KMuAH\lGn!鮖EalYRDtY~Gams$o/r!rI2(s7WdSc$lj]J-5ӫcXP/%\иD"P`(H%LEA.`F,ZC5?GDg-k6 s3W}Z$Sb~ mkj'[V;3>'ɩZo{:`2oEE>tqJq!(Luԅr GTL@fu,X9KWT>{"nv:k0 QTn!,zDEX{x폝|\N(G6 V4B)`tWJ= t"bP09{s?3z~gB* hsoI?.f_j4gy,O žA!: sS3g kqc Gס:XPHW>?cF$kg6|l*^?;Sf?PaN 5lh>5QTޢnc"v<^v} ҅L=!X ^[67oggcr,Lسb?'#pLELh*;:' 4l%rGKkb}>5a9xԘqhLfFŊ}.| Nլ刋={H.Z Qb>Rgc9ͻ?Ue)|'@-xPCw9LͻT0[epBg**UgTe<~\rۊ?l:Qa c~3kZUG) 2CCPwߏTwcӊӨu%(-lb&(Raj`tH'5xg. hoUUۼDe+>e`ql+8\RmO44I- SnADU0\ӄt_7m ̘{Β[S\緡J\z`kb>խQϞ;̜h2RJp1(hfmGz0^k)& "hֹ647~/^η7,>>a6O܄MQ&0 ̵TKJQ1P*G{|ض~yƘJ"c`>Fk g$̻Z猼#ľ z|U?4Y ?]%X3g!MFf΍ÝLiֱzӲc{_#`фms Qn/M(U^S9ViӪm(L,u@OHBL$%Fe 405D.WAwmڢ\Obﹸ*&[,hzp;29O)nGd70#$ɳq|sݯ!vD)8b-[0~E`a{XOçwN}v^ُ . #x_]{A=j-^!X򩰭-p"Oi#}P9;E䇏RRN/*Ot/KQ$%$)>qvJN0;#ⓚ)U$ek%1v tRERRu.;YJΎWoۍ9)N<%Y!cK?\RCe'[FR8Q~Y2Y.%WFV'y65,^ 3Y/f^50b5,^ 3Y/f^50b5,^ 3Y/f^50b5,^ 3Y/f^50b5,^ 3Y/f^50b5,^ *z47}VoC{gdqd ػ=s&ې&K3Y܆,p0Y7nϜ6d;w{n¶ )wIENDB`jqapi-1.7/images/0042_06_30.png0000644000175000017500000003451711460407074014637 0ustar metalmetalPNG  IHDRh iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATx} tTy74#i$1Hm8زҤ^.2jm嶩֍LbCߕg.IShcR ~@k{p@KB#fyg$2Ht콘3=?H@@GYE"" "7,yC%+JH䍀$KPɊ,y# ɒ7T$@'k׮zjQLHB> Mؓ0m H74mU8d~:IL[L?$YND,V5O0I駓i+$˴ULedJ$2mU3d~:IL[L?$YNDBرvh4x34 Bw?w:'y->>}Ijucn|2'Kϱ([ \q`._z k7PPc'z\ZM#fكxrG;㥧. 6Nsү@^w6<{&bqߍwᾲh">&#V?EybLiiyCcۘc8N#ף-%t-Dwc(hލ^؎kY:w^qCᅧ, f= uÎW|`;;6Cc0{߹Fax©ÊwwWwnsAݏ}+݇?qL~\s ۨ9=KHPӪ{X^DHQbFizE9wѭkZkVŔ{ZMVWw 7+''Uoך[sVv6ׂ}w (noHyeި[qOY#m:L?/6$Zi}Q8UZIwsw*qR]ۛ]i [HO|E;~d * D5h5(/IYO -JsD"͈긠nȵt%"睿÷J%wSPqoI=wpKp~ 4FoR# <^ ;ݐv+QM\=מTK7$ܙ+ {E:VPT.YExl<щ(iŨ[JCQN܁c] EsSExO{V'"]T=Rc}j\"NΉ㌔g8 GEL2zFQy4) ofeW,[mhl#_x:~Bc}^W NҲ2~uY럕YKQק-fcĸ KeFUUէ¬_Иe֢$" "7,yC%+JH䍀$KPɊ,y# ɒ7T$@H ("97,yC%+JH䍀$KPɊyo6C F@#avQPH7T($ov$Yn%j,BhGPr(R($ov$Yn%j,BhGPr(R($ov&[ 8|@6!YT4tk@:;GAȋ,BTpuf Mz|QC@cHk/9La-SdVGQ LBϼpruZug:{ 0oV؂>BQxjE_*zaTD([`a9JJXN9?q ]ް80xZo*¢;c׃3Fc JF&`˨Gdg1訄s8KtȺ\'(E.j.tjplJǯ "#3o2eL2~6qeSLFIT,^!h8ݗ `Oa2+MiZd2MQ&W=YPd:EϐKZē 3Y˭pԌ4ͦShXNLUQ9:ڠ3j'P$FaT vc e3HYPr=1vgh|LeH4A5bY"\'uX\LE^.@}B KFlAv^ \*^hRݸӁsbրDs˖@x R75h0oL ~hyhpN `?1?.8{XG{Q EZĢqVV_Q ΛJ # lN|8,7F߶f=sa()"L4h:C3`QJಶ$2-F -!™Lan4 -$2` z(gG@Y{7": H":[ YX~0g9* pIj4[m+G}Fhz%.,&Y(S$}:aEH f0a`ьofuQHoM46C*Mh`RlHPހ%貃$cqZ(K bП@E0/@.v7"aAyHRBBA4SmhZb};%&hV*Ɔ2tƲКb(!5XTI -ҽtel q;ˠQT.%ZHbarTRʉgN:#mpFi.*a[C$?.\vZylYZp_/EkcpdPZ$.]TG *ܱ K*sVci`sa 5~:Vtw"Ϳ yaBkw@CkcК;R}hÒtcI3妐E۝p: ."AlRzvԮ^Ip0c@Eq eN,  ! mL &-q*1y aueeH=,l[Ia% M"ފ"0 ;iZ Z'adPl$L( *km)BȔ!Kb/A!J0ΥaIi(.|.,C(|vۅ8)Z qZDR9k7@? C2$sإmf;ZXqDI`a#Dzံ؁f;/t9d$3`.n L4ْ 5[@ b 0ֈ! bK 0N iJ * =﹌ዱ JQuUB((H +OyP/00 k嵐% TZx)IRZ%eБxJgn2MlC×5"YF\twN'NRXgp`d1Zߋ~$O$|e%KOZ70^U+ungVrs0X\󡜊.c]=nG4gA$cˆUM3=峆+:cl( \ v@C+A!@q*b ",]e[piiո$)bvyϜ,!I&(49)!,0RYx..S 36!c)me.V-̴za F8(fhRIw?ZhUN"Lc$)qy^dZ?ˠ=hj$n $j+*RP&3-3Q#U lzjhBee@,9 tSsP)19ť? XnYJbXYU:RI]d<1Az!oGQΝᅬիoߋ^]NԹUuqϊuo`}VVݎsT@X)±Ǹ$5 =guu <.]ys+VNUո֯ Σ{20܋Yb)2Xt)-C1L܆9A _Uwܶ'Z7Q\lD$¢E.րy55\JRUz 2\E̘)ԯg19N½O:Yr\/utcOÁ)-b{i:5$W YD"Τb>F~]ΏwT]_Zgϐ i x/s)Qt32ޞn6H`M8tUΟc[]K~ }qE?ZD\.S,QuR)W% woPr*|ķ㙸a,>F\grUOڤZ:f.!=*~6GňB==aET^Rc #I% +NA*=F}P!IGf^+$qD_lW0uQo-in yT Bpuai2b.{KrIT2&E=q#?9T\} )6:J€Lj)(YA"FsbFw!KlD^X9hAe* `R(>J(A"D(~qNTa].'#o[x gjJwK 3CSTM'fՠA1W^JsUc,ʍDd6Z^5n~1j538l_aH 0T| j"c]ȷe]s*Y( 2QH8ce-:Y)A6jP!kicKPs|Qwqdf *2A4;e1yshV/'=E\5h嘿&j", !V$0J% fh?,Ư_>+PgSw^O+1m AKs-61UV\ r kUcArkt,lQLX"Kv7(e*2Fᰜ-7Y($YF!G@e||QHC$ȫd<IWG! 2 y8>,#B`~? Y|O "yg1Lrh|b|^ H7L@@E o$YJVdI%Y$F@%odEIɁd*YQEr o$YJVdI',Î_k;WN l X΄S>T/&* | kJ0aڿ~T:+5|y3s2qEi pϯBu`ίbsQD' TzU;6g o#O`j}:7i2fqfvQC0qרR'b}}.LrB}߯e,|6L Pױ~zEaoL8J|ս(OvЇ֧_ զ6|ͻ'˘}he?A(oa-us(-7HUOիc1W25y}zpbG~)>tlgZ֫|T`KJ|+`~xOpR=v,}|)A xdzX~_j*`F .Æ}kzI >~lh*<^onX^4L,=%A~Mqa׭Š(?:>`FGh0gq:z{ ~Y‡DL$W(>/9>)EEb^Fܴ AF]ver+fg3x4@msGuCwchӃho$78Z#|u3Jэ9,ov8O2jNW#HN=3Sy\aNa)F9gΑ;Ϣ 5+0RLR2όuxj䮬)gbd2try}OXL(qd/`B&:AGۀzfԲ4r&`_ٳxWُ/AׄY|'/6^4.%*BBw=5.lܥp0$&7,gqYTFuu %d] a;-H ?HauYyHN1^#o'0T\x߃\C_){,ATi ?F*޸2ors (93wzugʴlogCwap1wr3>s¿ Ӧ˥^lSX7,Kkp}BFWZeCSRg?*+\;{4lQRyVRĽcۻz_R?j\#װum+SY8"[YU[@IDATamyeoY E)iPea?$p/`{=M ,SUeFmjdgd,3RmS#$>#{dj%Y٫$ˌT-25^%YfڦFhI}F*2#65BKL 3WIZejpJHMВ,SUeFmjdgd,3RmS#$>#{뿂?!I Fw6)[H74[5; dPgk,U0.IIu6)2[5; dPgk,U0.IIu6_-Ka WkkIENDB`jqapi-1.7/images/0042_06_31.png0000644000175000017500000007020611460407074014633 0ustar metalmetalPNG  IHDRiliCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATx|\}A HDUX-[m9qb$N";r'ω>Qv7lő'rֱx%[͔(`C}P`3  BSs%pf=s8G } @"\sEJ4N L "p%'&W\+@a\΅_B%C _{>sDk % t.9\r*0\K ̵.s.͵9\r*0\K ̵.s.͵9\r*0\K ̵.쬮Œ}Q_|hl6gݝSҋ_ݥPN}kgC>}׳sg~E[w|w{A Lί(~3UzgS_׿*oѳf)g4;q^fe}uvxQ_yߥĥ oXggwG07Zn>M36=?~rߝS<7u?PhVgk¯7}O7lNj?|\t 3uu}~y/ hfݪxmO~uO?E4|;zRrr2!}mg[cw9kWz˶N_}/]`>:7ǼB/}QW,c=/~Y 7{9]GLn{_җޫ O}\G'/z/SC;?jxwOMwoϴ4ğzCG9`|)}:{4+Gh8vk>/u'_9+؃ӧk Oǽ=xT۟2{WCaSz#o31ཏvfz:ă0@;GA'x"-/?hsX>h2- O]lxa&On7trUv5ş8 \@?xôӏ6[sqbk,p*`R}ѷ| fJG{j_Y=`|Ї8 Q׼HY{}ayaI.Mɕ(lזуֵdXMuf{qv?05k~fStۯO^xzDnڄZQ;fdG_hЁ/سwpH252TUPŃz駵TmN=}D$Mv<1,:8?gٿ}V}k=X|,&4}%}ȋ YLhJ `|@"/#&f1>kA[} ثmSvEveg'0x4+IΌ j+c6[YTUfe>ԣP0t>qVJC+*V,TQѥ@zMz2JQd~Q_{.{dF撩5圦(̤b-MRDNrOm2XF2˖+qe6YQ%ZECAMߧP@Qwf +d_Bq]sg9l4NtimF3A 50ԯM(8QlTYfٺU3ICNۮO{r&bJuu|H'GIY9|J(4L0]LOXE (zҲG9&sڬBZS]YtYc5tzƯU}P~Yg&<&[~3A$Œ 4Q'F44< W~UU)RP+ *Ânҙ'v&wG%=I/We9eu~]:N3Ws[^;u-=:nJu:"9LMj iG+J^>.wdPS~f?!0ܭg/ MP00]PyqqN9Q:[UtW`_Ǧ2sS16#%OkUw^4ĩ5u[>*95 iMcVM?Y Ը~\ o:=tG1Ͱ[g{Uա+PIUyNٙbPK',HVClFNMav/6:ҠxR݃RNyFFu1t4 $UVki˒TC*Sy]H@) 0^djM7(9e{ƵH sIlF$g?MSjmMFU^TY2f .8sP>"QMdD5P Nu{V7+rR Ig#m̨h5pʫ=I>5s5&g^3SDlzkg-^SS;45)OJիSٙJ??fXcqrZRY+߲ZTNFE0wH>q\IXI@dXƠvjT%W&1(Nv9ޮo՛56z!׵UΔO}lܔ_7a]KWicehmN5WlQ-|" 3*-F+#3WZ-WznVUk/#z9?뚞Ws?P_^Xd١.{|,05Y+?;_{IۡH[U2YP;1V{w;,g!ͤdVeԔh]BDúEI^yVUd@Pv)%߉7 f8Xk49M@ĸN|IKv 0G;/(֩zMEF*:b!f<E:E)ogIU<)EO{:E\S#1 4xJqMʁǒQcg{P9d=2~FmEङ:G6L:oXLTqQ'ӥb2UTVj7 !GGIܺI")Ec*Q^l3pGw(I?:SZy%^S]C\Vִ4e.)x6EwCvv͟RQ]Ԋ-S.MM݀ bKO=#G(Q`ѕ l*ӓ-VxU|#z)@;'}RЯYNJhZ) h_}- (?5]"MϾ0xvB'cFKؙf x͚T}|IG5XR.?X\yH'ΞQ1:WVzƆt[E_(PJǃhUP:5dɇ02HOi w)^S:KZkRͪŔd;-'*t%ufؚJZ*(K*O*4֭EVAL$hU-LptD*%Q%B6cSk҇ Fjں?vE]ѥ0`KRԯ=Lht{UjXci[SS q߸sYX^7Tޙz'U5 zVڂ)wf1ݵ& mT-FAWƵծs6$U閪Rnլ]5+N>Zuw;mÝr&B;sN)IvG0{L4JSuMUk/"wkr*m/m4}ȇ2 ԭqd#(6#{rGtWm>/><`X탽%Nbb3U2{;Ljh%0vp ASX{|{F*P }^aVR^EHJ)GNSeXj92u(?R a'G#Je4si)↓T^{>x ?T@f"PLGyG $nÜ\ٽ9h;x]:4T vV/jh,izՠ[r`܎EeGb߃ks竬fPe̱A%wD#ÂS>:N>08.Z*H:-ݫq uCIhuMՅٚ4*yR*&qL "k::TU;@YEU.O*@IR=t#O9"a%#'YO(R}[WS| 剿Wh9,1O}yJJ4eGED^HCDvVdMRa&gxURH}gO!.If)AR/?v*JYgf}=8+ijOr審Q #l9g*y2-t"9Y[SM s3d[8rLAyVg4njG ٳtWoz0 ;usZűҰ_`IG-%,] "7IӠ)NЏAcNR[ֈڮZ _l<J' RfT*U6>Z4ݭbd iʻaz|vzWjAeV1$:_TgU& J ߡmӸbInE[dz2sCmAJKhF`Ǎy ;6 -dc,}vHCg#&/"?iU!oQ#!(ܦUUŦnDua+(,MMQ>;,c29T *M+ݣcst$yXnYWۏ;m>+[߬5Tj*[Qc=*|v210]=|-֪9U.g:X"Q\F<:ȲWm4l3ہo( ؂kW^RSn9;ۧĭ7*FljT+v>a}~sc`?Ufw*jh;}e 唫eY=VKR?ajTdb|7g5}AmSl˖S5rtLWLW9Y'| ">ø/s2 flDjMKQRcnMlq~:F4Qtl-O!_ac8{7ޭ{Tܠ )Y0Q\/gmأK2(cbxygj`$ U4JG1ZBќk_k>QU:V BkʏU3e}B6+W( \bK0+ϝ|O1ab55='5h=NBV'D;rF6{CI):X < ] UӰy49)j\ߎ\oS X*y5hupV' ?LDj)7ϕۇ :V5Ȟxy}P +6h+\I٥J|odVx^ͱ P Eݸ;x[w:aNd8maŎSa'ee5\3_S]G<{^SwDC(ۤs/K%1mҐLo? 9uãZ((,Ԧ ONitF֠1r.0~*8&=}Cմ=^׬VdBvsΰ`7pn20gv57ݩP|mTGCؐ\kf~t*Ǣ[^5 35cǶ2c95VF-!d{ӈI֯aχ9<{l>a0| *ċTOڪ,\yS!y;5x(53wZYT6Pwv96 x n3*_7Ac'1ܕJAتf|h:K_wU|Qn-w)Mx;ڡ&]ǔ<;+g[oWO[N)I4T1Op1e(L yoj A^l# aP %O~Bey:=%գ>rv}G[?&<ݙDUWi%ގIFWߨ&iHGZ]r{Qu7Ʊ7K(f.mr95{;=9oخ!㬮U&42މ6٠[_FFm:2>{07܆VW4V˄WLuׇ5Oˬ@ Z&j TT)ds? Em)d<9sBCUTդo[+[c( r as=ʵu|6H4QjG^ 3"}yEct-J)i !Uzv:_lDuD`As535SLjAI&Xܙ1: ,TfNfVkITrV4Оl&V/vXiyqn lWP=>N@oUl?JA3WGk7j`֯A )pV]S*eö3=֫&TJ$db<ňݺ[t1GF` IDATunHo:*+(՛.5u-6,1$BoF Zƪ:ڪ[_{^ا"Ę$t:欨Jpp1~kx|TT Čȍӭ@G.jCm\~roY<}è9?>w{N ;@FSj-C(LPl4~5 qOnjG t)Cz:sd/8ZѾAui"= ;R_:C8ݼۭ\ #_L+ڱT 4{cú5Z= V`z/WS9%aJH&0p*DK[c( AEG>C`>[cOtj* 5QV!(3uU!7>bfUa~,A,"uCFA1 5~^;"i*8rsOaRZEWS+~`q?щ=uEQ:M&]zj?lvU/wz]YMÛ!ql*@xϫT,R`  UmGF14y&Д24lVꁵߜat"dkx`VhC>}m "PNpb*_n9;4$v~] R0yLݰPթlݥ\0ޕjJrM?1beV2";f"(CC; O(;YG0?S\(.M.>J׈'Mjj-ZЋ{r [WJgFܥ B.'1Mvyad/s[ɜRyrCڔuubnH.u>ٍ4Iɋ/K'̭ؑB ";LF`K8Wli_jjFQ=R?nn v [-[u:NݧUƷǒ I1xvYt')S,L!4>T'!M$U ޴K>WIbX^# \q4 9 LOkTREE^rɄ$ӲLCvTez?CfaDv9vy>4Ni uڛG`QU3&GIwՎ0iPs1󢵵Uim ^2@CQv!PtMJdNb^NlqEiܿr "CUk10T'HUɖRFEy2I\trWFjvtxjL2"VclB\&!FϭF(F4!Xf6m#hMΨ50wkGfJ)\LTJ."bkxMi`=612 `[ɤm {ApRV GR>}?G["` !Bp6hްEW['xS*#EaMԜlDA6 >qi&F9Y-g~>D_l iI&kK;CI:1*n:Aԭg@&n7Ⱦ>⸲ʕxn8) " Gkk2q $Cķطp,]l fZ^%# v+;N rSLә*'V,158Ү@>U a 2D*g(nwNy>4$σ $}J!T¯]LRhNw7)49Nf\~J$9daQa4>%+/PbNBA{5  BR?T' hp5GvJPE_6djxfcZ3}[KxP'ߔQ]fHgkTݮ^c;TBg Dɏe䰣7a"{ V"o'oumJ},ƙjc܋Rk?2G1 <]@MAzoVWۈ8M BGwT JSSd[L|kAA;qsQ~4l#{"<%TrbZix|, `䏑 ?D> IaN[8W{_Fp j]HUVRLR;407MmTƁ4(rr H8bpض`-k" c>ehO pbyw(nCD5!$J@D rW!ƴl<[Ql8ԭ(4A^&?Bk)+ *i*4Y4Zqu[iUء\df׻Q\kp,C֪ )}RF hnĆ3@K+i줳 X21d~]XREN:JJxoV'x4d2[ĹcC74&.'0r-N- d 4rG)F*ظLP4a`= E`Qluzm'U6ҁ.N??XlO!z* dS4BDC.meZYLs%@}[&@*l=xo\l9K,Ao_v!5?ķOEM U(깚~H|ɶۊ7[CS4^A{oqedKSBtSq=3+IǞ+dV&~5*%2΂ED Ca֌=pqA3e5@##N9/m&<΍u:^!.Ķ&1ޅ1,ְF"r9Vwsy&T'Sj l)DvL?B\Ф7YːON[$!~'U~< vxvB^t2Օ~1HHM̨F(Hbm!bS}+>?(`PIS̡^%9 Sa]fG6议UDHE/>trr_C)Jd^oPOrRPÌр7 4 gpUf}=Lj1I#>8k> tUZPx'y*yItc eլŔqxX]BWh խȐmyA3@QxȊY٦?AKa]?|d9.i/B5wti Q&S Nx紏 @^RU:4'~:]0[VL ,^R> dm͎aO'-ʜ il]܃:2g|%<%L d'3T &>Ţ!1k؉+&FR`{P1`Y q@p `eDn4ʨ\5clL*IsIG3j<ŧ]0 8I'ƕgf49`i}7@0asWK }VUE[3(E2[x,9*mHDžM  1Lb?Tԋ(tl J_ +=}XɨӟvfbO@&82 ~ ??Ìk>a?#1ʂ Vf35f{ӺBo\}ouKƗ=.&켒/bt`ɂX1m.og0mLasX1qy_sgb_f|aߴ|2m1ܯwޫ^|E+knavXo>^~so3nӜ7sy7|?_~νw!ō~=ebE<\֑Eot~>|s SK1͖ a 49[_}[= zyKޮ"tY۹ 욹Yxsc\f/kks/Ǿk$#pm"fhafe aP;,Q뻩29N1&` sg-zk)"\3ړo ;Zq_gѲ]ȴ173KZ9?75.{<׏1^~y8LY}kX1"{QeeIwV9Vem*bޒHtah64*64k>9,=Ge2]qID0&,D D~f{Wg QcёQ~u ;К~VsI\rl2"̸yb3O9" &Xں:u~JӤ:y(;خeU˸oF?яpgI<ۃ)tuU0я~L˪YڷgN56~ Jw"y\|,] LZ͛޵[\(H~PEEozᇕWO8! E2Ļs>n}_WW[Zvx \***Zqauvt0_WGG;S*-._3y^{9+n㦍on};$>5I r>諾M;_~' k K"lciퟝ2X7kIDAT\=G''+G۷oժYnX< *'z rbgӭj{Wzܳb }? a37ݼMe$kk#4FFFTrխzI<×3gÂcI\j&)7d(Oa+ RPSG&(# "Ss%@%į4Mxbd .K˗[24Ŋߴ Â>OD eQ M&~H~C|a!dȔkF`>(\Tzڹ\.U!u%C9 |~;wM?ow9v/|Ǻߗ%YkA1P͟*/ʗR-um|HQ|# W继\Os݄OƘ\[9;>0֏V%aR&/Ls=}, Xc rCQ n{y >aCs:tܘލfN%9VGZF'߆}ƴDo ^3c=5 OvQ y۔Gkƌo34p FM$'_O-;BXoRq0339$')T%x Nk4EQݜgnc`"9̑)[Ғ n{ \D ^cIxR3ea)6Ei5OJ e|F7c~x!˱3J3x/| (Q*5rRQX) yjhЫilǡo#St2QڨIf48M9BMknn6kU +NSszdowְ7ˉ74DžV3w\bpfqKrgn3~y.]~ɅoR43ˁ|.Ѕ ]ȵ\>/~y|o:KvKoD-K-J8~\xc9?|wע#N}~{,ai|.Rti{ krOf37,aTT4 `s-d4Zdb.:>ͽfan83Y݌c<ǽ d͘P4dc6c1n'DC{LљgǧrїLǜ2npdkl4qB-mJWĐ8152s|)XEY%Q*,%k0ҼJ@s2Md?A 6x߻smd*>1nxCsw)j=I Hg\M5tm[R9Tf0Lc5D泞 XΕk7t8ۣ! %<ḱvtأVCV+W1/=jXVpx6[P7kh o&K+r\(/,ŒxmcR:;OyL:^Y@1-wHDԟ&B00}ԶH ?̷ kYxAΕ[HQ{h*Jvz2jGDw29<٘o%J(+oZNإGXh d2o3<6Szw-kAi!-Cj쉨g: 㜱z,('6'XWHsm1mq5EGbZ栐ّL&[;bi޲vSP)l c]-Y`GlhDNڹX v `c͘sYX[̑:!a cmO^R.?t$QyK,sC=mf3 |F9O U%Ӛ=fk8( ;S+ 66njVIm+"{0Mܥ Ia?"fO b@u8;fXYD@l랾1f #k?P65[ͪa1m3޻2sYsgR%9y}6^Kcug3ò 2sJhy/ܼ 2;|NY\Fy4P-B";k(*ͨ&ƄRY0zٮ- Xr%[7Aken=`Ƨq+^hEѹslv+.-!f.a5,a]f+՜xd1XP㍣X0cn&ܓgN0snF'5Hꜙ$%\If)h1͒&-u^^f78Ǣ#cggf^,iDžۃvm)kg>yR]G @aDK @\sEJ4N L ֒LvH@cU6 &`|]A @j\Wy&0W ?La>s]-\}_W#$ZΫ0 r $W!^!y߿)1/}K 9Dy$fA 0 S<3 @)h DsAH ̂h4C" $fA`J4@a!\ 0%C 0H|. Y!p_'Tyzs_Ȼ6z-6~s{;/3wGnS|W antFl/_>|hCƨgS7՛F40*^ۇ#oW}ZS\n[Gug!_hyQg^U*orD_}^_!P>>QXyYu|\QI]Ͼ~pV=zѩ^O+7YiPjIϩG֯e''~=J'ST֫HgG|VkV^Fe֯y'?F%/itq}붧^sYg7l^PWJ?QY7> }V57yi~\ ɍ8/FA5_j='?*? ܤP^}2hW9kܱWGGTz^N>r~Uu?D7*5,4Wf> Β87SdAT>-Vr)ѭz.&ӈNx}Y(Zھw}xjrݹhf(Kp7ypNMTUީJz?M8{G7nHI .:)b9 3 thtaWplF ơټG(a\TNyINu4 ,] $gd+2=eJաF稐iF Fƻ.2iUүkMfFli{WS^J6b$zLĕpg-hqH/6 ){G,?o1014DzuHjH3E9ׇRm/:\zy )pq$knKfщN!utm7  ?~FG )т_m= `+w}߽͉9_&, ?hCnEK\h+I@ʽxI^&\a˽*= ¨lʁQ.,ʲ)ZFܫҳ *˦hArJς0,ra˽*= ¨lʁQ.,ʲ)ZFܫҳ *˦hArJς0,ra˽*= ¨lʁQ.,ʲ)ZFܫfB_tRefDž5)%s#)ad6)ՍCl0qHj2I!6A8$5M $su L& UIENDB`jqapi-1.7/images/0042_06_32.png0000644000175000017500000011351111460407074014631 0ustar metalmetalPNG  IHDR,+#iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxx\u-tt`;@`TEJǹ7|_/M)77vSvّ-ۡIJ,H$X@>L>@8ě@( 98{G xo ʺ! -- eni 喖iC놲nrK˴uCY[Z{}ꩧz!X}kzi(oA7yǯ8soqrgroѝqrgroѝqrgroѝqrgroѝqrgroѝqrgxGNZ VӸ4x{18WqsU7}uJWc|7vӧn^V` viǷ8Skc݅c-LbG_!÷w仜bd ?1{)|kc- n]Y]Ó54o>nבx`dRL+r$$r[?+2(?N&+#5( 碑_H^In|;_~e_ѹSo"8^! !97o"0r _>p_߼h'_?D\1FN Z-St RS^ Owxyl'^"|~cpS5!Q^no,Sf:ǿ@L@&8mm4?D_'5Ggf?~x8=?3pP55qţ8$/6s 6'lx&|n6ݟ}o؅@cڷAe -0o/8%[Kneo~I'Ngqcͼ cěDցoX?>j{ z+_Ó9۠2 Wv?G0b,x82O |m,{9#,?|(wV}= %w#Л pg%GAA%|(?CB놲nrK˴uCY[ZuCeZк-2hPmV`Pni?n(6pK+n(LZ7uX7[ZRV/{YM‡ׯn-V`=*~n(M^K\7Xŏ1 #kq놲8ƺ|6y-.qPb?X7&%ZGI+%ûP^h,*o镭ʚ.`5uCYlP>{Wn(kރʇwo eM{uC^-1JtZP5Tj Rq11.XҴd ):-e g 8Q) ~'"! 949&% Xd (qKEru{D}2K9֜\1*s|{-8kCNҀ?9qt P *a\/ tsh<PQu eXȁIyۡB;:=DՈ"ƇF3 s,VTq2a$tF%I%Qc).D@$ @!W,Cbb)Bfxkv?=?\SC'A"+H8\E"MS(H @E)%q= AQ2gi= 0f4 4܏ZEɶm&^z9+n "fB{"Q4"ж>kT7`o^2214%>:Xaɨa^y9Hh=k܃6Iq&CU &. 4TBAU BJ!y#d!uڃTr mS8Pm;ӃCX3Dr$2JЋo@NZ G}oCc@4•~Sȡ($*p)72[QN*jAB m*r.>-izr j((|4<.`K&׸ RQɤ 1{+ 4kRSFԊ8Co H&#߂z~. ܱw>n]$j7ae&$zG6%[,"cBH}`4:1]V*ad›!XA- 88 _N+X^QX4x,VKJP[xi)1F,;Z/?b([(R #9nRxg!8b~ B󽝻,*,Xя^הɌ *a^9No-bዜe w yoA:? J_< )QM6btf72l6 ^r#b..h ~BAf0m*BW~~[Hn@DUy{|O0D= 7oҊ1/%:#!-cz+1c1w#1anx9Uܖ9RP>EmM*36g$(K7%*_m1,fڃa\bH@@PEA^ (+A0T3@^'\9Wq5$G֩z^wY+߁"ٴt :mT*("Va&4#h\۫0Ed͢l7n^024< t=Sg "4*2wǸ[#Nd3Ka[0EA J1$QCw@gF8#mH7paYJL^ZE IUX%խDBP|:!'a=d*Tt0rsh@!sR GA+} éS@&`ʑ-[QF8\~Ϳ!6JQ0B{ g/iŽ B9H+y{ ==015H\1eD|*CJo&9S H4!h$$Chb;¦3CTC qu)XB99İBH3MP[Ő: ጊW&!0p:͵AHc(ȄVzE j\vm6E\m1D+Wч? }wvy %Xqp s 3s-D'l%7|M :]C3^;{026T ʌ!ı^~ynTh 0ҲW0\DM"p :KP]C@X!053R ,1z ZD>@@,s *c`*6tݝ~rF;P 7B( C^& '5# ͜Ƨw)G+C}h@㪱'?auaDA¿A2nD@nj13U^GA@slސ2yGn+C#Xoۊ<а&#ZLW qǙq$ȴD5w?9RbhA8H"-B(W@D0*w2$iX.bE*%4r=GofY0<'zac=(Tӻ 7nFyF% G./0C`&R^|3>ETH)X7!y1膔͞~ZQBSޑ /BLÿ)3Pg $rrr̟) M eM߄IẺNy9/wBO032p@t;<~ \YDd*i5>&#D|n :[waTеch *(h(h d()ci)9 UJow?Cu6\|>rP^aq6Տ7Ob ULL#7 :4ѫi:>}yaOE2!G)Fb%\E"^QToq nmZ#y0ﻡ0oCa MH 1 W"~ +KUMh*EcQZH߃ ÒXV%"QL!²4BY*Ɂ8 -7PcD! L@BI8G/@kJ_V 9;QB>6  `Bo5ò9\rjDmӰʵdنs0Д6AćA 9Ν(+t X71=lFƕBd"+2L!eaϐ熟GW'Ҩv_-5Pln^N nY,zdsHDԴBoEAiO;J+.@'\!1.M<LE(ˏ WzaɳBہxu44j-&LyՐ0]`QMZHn2!ߓ'`FsPGcMfPNHOnw"Br0̛f\,d_=>z^ɞ+/@\|VLRovC+5 TMڈ.ty8YfR^73B ʱ/lʃ5P/ zuLl5AŀīH=E -NQJRX~r|r6vH7U.D>]C蝙33%Ks'!r%}z+UH 9-fjb,+X% )t*QWG<ߟs1A/!"K\͌d%9~!Dل@7{|zRnd 7lt"t-AʻCH'r_J"y<U>?8, H,M#AF&706&"X^9b Yd+S t)EG54 fM: b9fXJ?43ǡ%W$6۶5q?B"L'='R, ~xn`ѵaڮAzHOw#p1ѻU5@OQL]n*EGJ<5_@YLq Qd!L-_"Mfti*ST*!TT&vjOfF=o(']kYUl BAcI͈ipԘe*M/AŠ@OOaų' w?B<62yfN*^a] GJӴEמG@[/j9̱kCљ71>쉋0^< )q?B?IvvA,z )|be&hˎki't40Af+sYWAxQߛ8Vh4:.nI rNdN]Rˆ{H4KSLjU砠[nțci;f 9ڍ?KbfW1_HkUpT7Gu* ,{1{ r!n)3#^؋?S-wC p+ͅJm"q|P#Bu]=az~7M ^B%RRb2'eAREf:L݈KZ|ovx) sddy3|Yk^Gɞ+Tͻ?IH15ՑgoE73z~+d.D2\ -p\ ;JH~2b>x2]c&”;oz O` NbE[so AH_?Vb 3݇( f\axB@ ["Iȑr9 Lc3IYmm RYϢ0:M,E% 9\#^IȉPjzn=ORggT67`#7DfrV>1ѷ J:ӫ ڸYTdĵ~^Xv49b'/\C%/; ~ANBmA)$&oYVuI<(R hRIZLu~(K eź!W/.Ч!({ 4.4 2 :ޝl+οzeBzb O5 jr:o 9?Cy-d)b\ib!Vq4Aj =9%hw`Cg\>yge ׯyBrnG&E- IfDAyyb1~ƻh0 $Β^"jlpS,10 V#:]\fOjbQQnRVDd5hE5XRP̓?يj^L$V:A8H̲ ez33?GfN1̤TPnOpYV }pu\C - b)=zs1UkB1vCMROm IDATiJ:K6!=I9 ojƼ¥tu{ wȗ$^Ob8ztv +Jn| O%`e0J~%'~ȕ1Pz 2M'Rb+|Sjeëu,IG.F{GBFC޲ ~RHJf7e ETdD;wèSN,#Ih h 3A6:Bl"j݀!)}j%> Uz< 4#2w0V'agSB6L5^),AvYT \BDcF܎YqHJŻ;K'&O 9xo@'͓C&&Df/`"x#@x!0b(7q/0O&"W"lDUS|v XB0d^SрaU*RB>c.RSWΑa,- 2ُ؃c9`et魒HoHvvy܆sH-M$d@c*2Z|o4"\! >1{0)銲F g`}Xb8Y`:*:Hg3˱/𛉂|* E Xs!Dn0[j]X$d^)3$aC5v-!taX_1ʙWo^i'NxFY$u.SJ)w85o@AN@D SKոǏ)Y,bR wvCdGNIdkS*P{LaQq*G@!F/JyhTS*P3?hcXzԊYѥK>c1zx&}5V@=a冬F?`\%.|/sW)cwEh,%9(J?'SX5rs)A̬HN`&hO\95SCIK 태)QW եȡ༨8w"?=Jkk-%z$e<$ҘpEJ]} $lRҋ7n/4 'zZ c %,,$Qi%Sƒ^ X%. 4f7o$beEYY38W  fìQ)%4 ^fsq)>PcK Ԓ>D)Ťc* # c ߍml22&/^c%Q Se'^Aj?HVJE=}~7ՒiP9ZA,!z:-.~@4XFx CE*rE #DC hf]\mWgAAf+M z%d0(,OS6/J.c.ږ0t:=֠@dT-uVmAw'u8Z &4*fƭe=3G܃B4׏exw~\P_ELG@k`HC dMaa'afODWs2f'@ -OHJ G)0eJ5%<= H)~ZlS\g5L/ A/I}L㭭y,IWSNM'lIOBNO9OaUO@sA\͔T]Uȋ30o@UN)MXoz]VQ[208|Ż`O_^9 ki}؜K>:4+]jڏ{!q7OQ]鯃 r!rXun'+`hcFfQؙ-N ?I.["J̣ZX359/(_wة R%.e:] cv9Lrg0T<h!%)RSci2c=b+'0<؋PZr<0pu[-b3aeJWohgPP=o8C")li50B`[` 8y'Y"CNfdO(qA>M*0) *?JjG"oBBcv!F SH0%VeYAYaGӒ*qv^#92f*ɠ` ŌrT"3ØaqriJq%eՕDB4Nwoj,^:RI6fOjN mpY]Ai0#:'e2#-~ ]u1~8y3=.^}O !9҃ݿa?=?-6om!gbOQjYJLNOzm4A#+#8[5!p@ \EYD l8܌i q@35%̉LM]2>1CkU_;[H$zKBq6u)%(RpS3hV xHE|g0md{tn]ILtRDՍ{\цB ca"q{%h?+*!Vu[ %y(_uW+ >v7"3 "?CPSX=-g_9n3Zm 51ebG^tfη#Ak?FDz3?Bixf^#W0)*-;0C)E.Jn⟟5̜>ei)w\$dǐ}fɥqy(S>5Z 7S|eÛg_Ԇa|!V1R3/"92ANzhURdcu90Ac|Y/c˧1dYx(`c-_P!S㈘qz3?oE D@" ɏPX 匔/zefC~ Y2icښMۨc5x0Dϑ 2!fHX$D}av njJ2dLoةR EX~Kkf΂Ia '3} ͛0+eCXT+!/.Zr߬@~Pm$bLEuXp(wvx?TZ>'SRZ_e4J+3tpW!5Q֍TUme՚%S79"@ɢ{~iuLy fStL?=F00{UЛ\<\ Nr0Yy7RALmJ54(JIo݌0G|ul`WFPxϡ6y)RR0 /-<㪗I7+Ij1W \Cs6Dbjd Q}. ha2V2)cou|;$biR18̆U_9 qB.k8:\Q[$}*j f1򆢎}wAx”e5|BO3%I+=eTX!FCӠ"Cϣ"X-cHLEM ϱnرԢWgvJoDjԤ ^}g1Cȡ> g};lFL]@--%/Aq41ASL'D%(I6!.%F |=7vo$I"͆%NWɦ5j]!ry gQ.^s$d|x}n+Y7*ZԐB^f8wbj:V#yҪ s8$aU=ZCKy %{Br1ղ%5U{buwLܱ'ZwSh#•v6*[OQaρ|.Yf|Nsԅ=4~lCE:,æbԏP/ļok2l pc2K}SC8Om9epty\s lB S[ZeT:̡)tsKP:L2\Ve9+%z WW#r>o7* OqA?F2Vq1)`  ,Q٦%E-ױ}6E-O׫(tJHzLj>.P bѲqii]ds1;́)-wfWb>C,,+j4dezwk99CZa!rfU>dWM5$or"#6ECbnd[35a@b-`G˦̠jm/0sQ 5O\agOqVt!x SP(ݘ:u }aβ50Tr\inC lۆGGp,_'_tyTCq R1jtWc\ jh]kOnf6Q'";f_w@qh^#46E;WIxKBe^Yԇ[!(֦UoQm H,̡j ڈy+Dv5(̘WFDȵdu"qzR Bo1b*B@ġ:},O\`)Tj%k;X!RPy,6oŸBqMZj} z!BV˽QqܱrMq[d{Qw=urCQ̙._V"Y#AAm>9caH5重:Dypem($Mxi)f;!;YPGǻ;TYS<0#lwc ;~ ,[;#UT`$7elVj1=#y, l8} s`M eki (hNp+1Oޟ y4eD~ulb Hft;vޗwqg;{17F#az/a C8Q24apI4!%|") 6N1.Aj}>)'!INJh\-4hN凟k,$&o|%{YSaasmYؓi]&l!UgiN\oc{S5"|tdOo2e`G0͈`9G0Ʋ r)(!og _Xzx5,6>q8J|N\AuXo+ g9ւi )փ4ɰ,[ IDAT!ܲYz>A´҅r6p+Լ% Ύ66 Ϊt! ݭ6D7%T1ԓ1+ih?~ K fFMO~ٹor!'R3EW^XYھo?EtW0F/q%<Өbt5O(R=IJFKKXI'k=()Ǝ;|$⬄t}ӯۊnGg|5f8/('FYVtm'>*(9bYVTQ*Ix0=3BE+@I-R6袮ud/ve7%QTch%ӈO0^_4uUԶ$)a8M LG ` 6F59 7k<7N'Yyl` {!湖`98߄h} ues$H_rSBи>hdN6E0k#S}J+κVaUΌgaa7zq/f?F $6J&;GC؄N((\Оw™χ1I&d61:%o'= [ҬFh$}y@EX83Bc `m?d~s(v~I..~) 3/}:YgHO3XEzYN\擴vŀB ;$0AT cVO04ȽATԣp`샿*}cv*ױZȝ<,"V/>mC KU,)H"vn .pZ+gndXJX1Agf9wGC+ u)5JZ=EB񴖌b1jI906Ç|68Hxs% 30 H T)еAx)2γjc18ϴ7WV8o.Q RɚOKu?e:03k*fhv˽wvց̈9AЛ0_U[ Ü# r=|lۋ9*]mTh X1H-` z],qDub2귷b sq%Vq:bhNyR:|f鍳"Bb 5 7'6Mc )PE2~z4Y%uF]%([$XYdcU lZ/D: Gw$J!"LG OS|L^)9c#+OjGAEҟ|!,2zNnzgSj1鲖J$XYr]tIK" >DZT]8$dWHn-QdӲ`T1I SQDz)^7z7g 5c;Bz<Fcl,FsՊp$3NRv~dRM\zΆE l4('e\1^g9C>9TQ)GϙY˜D-EƯc p>oQٴ7 @|ӯOb0+'K- Mc渐WMDII)x` -7XDtl+*) #YsԯX!. heؓ`߾SydXS,(eH(6Kiaŷ:ݞ`3h)uuNx&=d'GҳRZG-]Uņ]_$k`KG$ =[.m,Ib#шpX1K?-,3hȒgL2iamM*D 3ax5G"(X2z'} vs8)WKLdk +Iϐ-X]Zv 7-NQfed[+'=N"ruފ\* h/)E2-X*$ fPm5ۤ}GH&bg (; mKG hFeq{i\@5 8lG{ȏV:(BS戀%"}ıV䢯dWr҇#_z}t>B4ysK`>H5'q j\Eod8ɗ,'cg,<| X9G5oRi8#bt~" ~b( ط;~ߺ1V%_B3dx`' K"5Τ%/d"La,{ i+HcdBk_ҮEHmIXR0ydռqY3ݘ(.,7,`BRPXa]Eƀ5GFۀ gѝŲҳƣя2]JvYX#d]6*li{.k>qXDڵ}iQI37q5Znb#6d8D4e(쇍Atѷ#i_pOd3x.:q"z 'JJ-_Okίg]ȣYБ5Pvp=^z=q|їϒ\PǷ%ԠPj7.zn)%ҽBA#6" 59)ٽEPmBE]RBV@\f(C+$SJTy"!MS$]Lkde#M b ׄ$Rr=/`-Vf[ 0_ t^ 5IQ,'1@G5K pYn89n(Bk2A4P!d=#cN[HؘLa ;)Ls $paYpՂΥ{$\=zM.x'9YyXb$2.zfQl[4WJ]EQeIgte͒q'!?x]aVeeh4`F l\Ī/pNL¶<}XH@^QYeAR>h+E-X7XנPK ߐU%#ųNQ2TV4!Rn&& H$~[l pOf#RyIa;?%d'bqC)R4Y+:U157U"ǣܸ*zQG=./'ɃQ9~4$B%$ԶZX 3ac1s>Im}6;VHF䯒Tyqdk Fh*#=Ϟ$9]6nȣpUD{j,Uړ# Ar Y Q͜GH5# jEMVx:{y VK`+d/GzstOmX gC7xYJkJ&ocMi6j4x1=Yԣbוx3\l/{=1(NCA KNv9RZ>iNvYeZ(!uGvgE]fdͦIkR?ϽX\K+- ̯WN ?[סb ]ud-Ռ6lX)'!t4O>FMPٱiTYQ#-ٻ>(CЁ8*aS3u hk!GyiR9 qEFǠ}iܶiT|A5_I(cW줩IQ5RWVc?x v bPQb ,[I5p+Eڋō,Ɏ/$x8k?=Wv`UZ mZ.63Wb?8)LR&5nFn_L- +9%/qqELɬ +`#{@ ;䟦@)&6nJXq̗/_ˠ\ ^*ldpLw73[JvIr5ĉh1=CЗ~AO-༰0 -՚$+ 02)T]C Ab2 ;V+]Dڥf]\4.iC>Ͱ+ WrpG,ʰְ@Mlᝋm=ꦰQaMO+\tGVHGMz8&VWF!3|iJuld^ k~T@qGY b,(xrϚ ) [X5(QZnD&9%ϒ>ԐwӗC❲SOd{?NDY](e4"fD FZ-[܈JbPi:]i7%oho*Xeғ,GVkF3Ųu?)k,uxٗJKL3fs2C)r8ۛz4^I~1&Uԛ5MI ?O3R2`&{Yt3ߥBcG<05QCn!;i:s}ŗ0*ug,t c::f>o%cAuFx Ec7+Qȟ㧪?E-@UUƚCk ^2E tB=j;&8QF\hZJťC S. +.z Σvv=O _f~ώJ|lJXȋfn`U 2i]ZkX2!1EQY\X*AD:́vEּ҆gMnAHYViLЩ&e;o%+hߊ|JUj:ggN Y"Oĕ R@H34V#]e(biЕn|iA3+?6ío,oKFR3܅G9#wBA _dG8L\[Yg:o7]`shYjF&C3Jx9k<_iO~\]l,kn.{P63_ci6A2/WIG!: xfb&ȽƦ~OdCv0gSFQj v7-,Ъ~4t>"dI~#C3! i-xȿ6aso/8>w8P~ۭK2~gJ0َ?};;`qH6m4}GJ۱׎ [k˘͘{x9)@rn4vs8."ǃr8%$69: ('v{I۾Ӣ ~|om{-mõ6>}gjs$?ox)@Qf(Gfl^U?\l f6"ةxYԏ^ף߃0?]ʻhZzo׫ N78})@Qx9چѣC!SS&m?2[ͬꢐTKDF4 o65%''[? eMAMiX}ޫӫ:;{߀q v~5x /[}ME84ܩ:|E3A\z2ywy3,P5nmQɘ:k 5;qB q!geq&q30f:M{РAR[ffX!oIvD P0!Fz-lM[kKYZZMCi>4:m-'Ɵe貁_CV6LjpZ#aږ(+Juaʯ)g~KE?h ~.Kޚ]5 hF/t?UOk81 2cZ͛ :]FrҸ?9)]HڢUMhW.fܸ(#G| "ߝMuebb"v!e3.]"QH kXZ:AɋshsC=$~9-2vg^rG{9ҀG+ Y@j$7^k\"8ߓN O?-ؤ(H lU5:tȘcdRTTXͳ6ݔaGzE(S{qT4_.L>YݳKR Xxاgd]4.)? 6Oֵ(Q:}wt SXw}rh`ݻm}(?tOڟ X̠= R׌tЪ߹ʹ Ӎo4vv2j_|L2nePҥk,U?XfΜX&Z>;;4S,y@W+4Ҫ]W_5ᥗ^B7xnق5W.,h.\(tzݎm&A;QhH$5(R N-= i;-i 2So~c%gO^4Zf}qlGG> [kVuWw PRe@lg6>^鳆{-`wOiUBRhpF YѰ ~{t7[ \ ܾװG gta4ą(+m8ў5o}۫ƣ-vZ0PBtՎXԏơNіm8i;VS0Ҡ .{M*$H.dM_8=dd.۾kxx:ۢ>irr:^'}:'t.NSbO|U8kk? `=ZWxpwx'i`_`3s0>ˏ?:Yd]̓¼n|;)<7?!:PU 6x45x'ekV8ZLK֒i}74ڊ`{i|<g4Jdf Є~Yu%"~0c8LI T(^^cڈOA_5/~Áv[KFX6ʉUuE e7P܀^TXhQoAt-(~4VeQAD3pxqoεPKYD10q H] :n{-6S}) 6i^GQ>!'QZz5:O4*+'&ҭThO7 EmpߔGWn62>ͨP*(#_iU-3Z : ,ŷ&P {kM8Wb !HzZT7%+|UF VRFV\[#dQ`xUXv' #"LqZƱ1kBO[0U̖*ڏ\20)+XntzDP4h($7}zM-3E%n!IxS۪(Q v5T\3F b{ĺ$%/P %UA0֡ed"{G$ʉ[gH񭦀HVT4[dr?SPO).:#_\;5J[?:BO<RV*ꓬCPHI Hf" X(*ƹ}=RQC[$:t~,¯K+Ɩ H%Dd`/ݙ}\%'G -%-LGN -(MO^[m: ֗£йG#^uoYwWme)` OE)>43mfiVѺ2PY LMڹ!te`i<+`,NbZVߴ}>ź n@=>+RP Mgz0 1hm$5^HäekXd`Ø@iB[Ar4PṶm`ӁcM˨ &,`!.TN:P|e`桗} m% f?VRNXp]8@iE!q c͐vnaǡcָC[t4};7Ï ТݚN/j0jM#jtubXK@a(*+JA?TGb?l1Wɼ/ZeXYRG!Ub6"DK7!ntr/׎%"ffJ$Ecz9DAnP"hy\W026v(vVnbN7&Z7UdsҜ6R,oc3"YGZoWBoq\ ķLmd#2u>u|K$`ˊbCyeP/\zV2BPke[heS`ڙx_$~wEP0+z "Oj b2/M,!22 1E#S],N;C\4ݯWaތ2R$b HX=_8Ӭ*J+#=@j] X'K̕j_a",q-v*cC9Q$./aCKZx%@ABXJ"(XфT O5v0r=+͢%~ ?H4_Z̳ň=ࢷSxP5`Ҫ}`MZ=zqFEEߍ)Zд%Zp O#h_bӌ>Sz5q/k$Wbn]E@!mfŵmo0E']iЁ'[?E|lw ukJ>3ȈR7!!V(!r5bAU`0CvGt7tCZknyZ֪(ۭoDM-dD-ʳOV23|ܲu ]Ob,LƢj:41Vт!SϢT.0TTm.~>=t hjj+a5ֈ=_7mqV:@ZbF ʔC L;}g~MXewGMyxi|D5,JהwƏI OM;MʦxfH.? 2*sD4})5oԪi1bxӑ8ieP hyn%\egSy<t༉$22l113 eŢ_aF@a {| XP 2I9@%Bdacy ħdD_UTH[1*%'ڪ2SI>&s13)ͬ&@ah+̠LghDa;d}?~ռ4ߏr {-J;/@n.L-R jl]hDkWT0( >'Sp}8@iG8ŁAHpOP (!@HpOP āVfL6&Ѝ986q8ŁBHpOP (!@HpOP (!|5@3ECϙ3瘑8Oo<fzeA9AHpOP (!@HpOP (!@HpOP (!!@I}˄ٓ$W}yvmaO SO|tP&0TȀkG&%8a7j%2JҼ 8(;<`B$d&&H.)Wbq!ɣSe()[Q!) p .7[Fla@2I!1$-rKϔ^)~ct`d쯋ȰGngiڵS>|O$.+5"ϒ#ҰX~yY?lEOeS11I's~ҹ~بC='>tʟ3??yY_ö`\|s^??a}y2nϩEcS (S:u1k.;(vOv,zS^a{/1wzP:/:'0f;`'(']PN";9;@99|?Rur!iӮNPNOTvEvrvrr~ڥ+C.U(]v:@9KiWd'sHt[ r琺29~`sH59t9~489XR? PC9/!6 9~OC9~YX;C"!P(LzMu.sHqsH /.|rYt2B9@rE~bvrb|rt"? ;@91uPP\Xߺ\((]O,PNo]..W'a('Ʒ.J+˰[ eʉ˅r2B9@rE~bvrb|rB)I.'Çrl}<98Ns8O7G#0yu88Lq^(ys8@9SWs_RIENDB`jqapi-1.7/images/0042_06_33.png0000644000175000017500000001720311460407074014633 0ustar metalmetalPNG  IHDR8"`iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  IDATx\_hW9bЎRZֱӽX>a&f ,cje&0 }QIY2V`_LXfPO:݂A>=|s/oFh 𒆜Ą E &R" HDJDD)HBBCFrɨ)kA@0ԣP6Q"JsD݄QnV'&Tu\u:E7jD⯛Չ( Us%4ݬNDM(f#ʓ&m0 eucy#[&{M71e}0+&13>ze~}3W6I!p DI.q 𻐙!,"qۃ%Q|0sǃէ)?KD0;}̑* >3bE|b=#afOx1_D>_d*KO^nM-"h&klnOlWr\KeQ>>Ug6,?UY<ĜVUQ|y|;ǔT͍-)LY3}H+nZFZUpr'NU1XXc.-; Yv5XfBEc׳;Y,)^D0E( <ڹD4'`(2iB[%G<`Zo].b@+ O=NñϠk[r\YsGE췻<=P1:ձgO ?zPg G cvx1 Yb,8{zߪlz 8=,j;U. 'Jw9vwϵ?SuƉSp/ŧ_{|B;kHE]P%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxM%u FH $(gI*‹PZRYD( D&0iH@tDɈԂ0^v$" Z!?Gߪ7薫=ug^Wխ{Ͻ=܏52'd0NŁ0bאx̀Sq`̩5$3`Ts*v  8'IO$ِ=΁wm#kiCsˁ*$[ϊ 9r9snEs>+6|j̹)s[0V4b`Χ\m[ќϊ 9r9snEs>+6|ׯXh4ǽW˟\y]ۧOW}r+/\\_BCUק*NjX,w 79p '.bjwk_~~sFj<{-gK|E98X?Xc\?[.XtZo25WG |_hr|GCߺ|?6I?GFr%L#޻qg>@)B/Vwhfc;ۯWugBמ } ?\<|ݕ-t|Tnwwd}3ۇnqrÏO\?γ>{׮^_mqꧽpo^m~A>\3EsppRbRzIesC?;>|/W0zG#z]ǫW,է0ך+ gwwS_)W5҇J̻"O0I٨\'Pv^CW~{_G0IQ4w|<q{?o/W~ _T|7'tyJ ٸ|5Rƛ/ZdBsg[c ~_G9.1Ms;wZܝ N*c]I'4fw x}͵3R'-xB:Tg:5Nȳw~~+Oۄ wrjhX80f©80T0p* 9` `NŮ!SkH<f80T0p* 9'^>[^lq8O &OnB`=@k= >8OnB`=@k= >8OnB`=@k= >8OnB`=@k= >8OnB`=@DO=XF"'U I8 9^\`.lϤe`΄+3i3a%:LZ6Lzq=xnF۝+b׫fT媼QYҬʌt"YeIqaz{N|htVye4JѸ@L&^7=.Ã" ͣQz ii2|Ge8ʧV?+gGo BkШ*6K$poL+\Y6tS>%Km7WxA\@JOc`D2=ⰔYq  H`2f 'U",6F GNnYCc⛀I 67F GGJ0+ >ils@ |B0+LsL9 B:6a{F 3Rr ,3꿠^motdsI=*\jqp&BWaQ­qHLڃxٹGz"];X&0i:sVMBiB5crUK{/ )9LHO)oGQoA!hd-"&G2u;3~@ ڠ).!4#4Nl皿ShW&1UvQ*"Je %u֥gK[ }!F/_&[N{dٲT3 b.pl*0Ŭht`is UK)MM?3jm&1Zh.Yu ~x'GK{uFh~:8]P抶hFF3Ai#xhtA [&G'{;ZP)zxQ㚾8豯]Ш]@ a1' }4^C`Q֤.Ϲ :zTUM CgP}@ 9M j2Fq%HW;b!& YNƘ>}\@Gѹ?"Ny#eB(mEWLг\NJ9o-ӌѱGǵyz [bYhn8q<ž+Xf+P`hAƭ vw21ࢌJO~jÄ2L_:$T+@ {=8?Vȓ:m/F&:Ø9]#*834D-Jy$xzil?Z'0bH u5g Iz,͒y E@CW0q*3ex()If*#8 gV& ?af:?15P5wa aPo2B]M,uh.Y猶Lz:jڸÈO4A1#:$ߦc8HPSb^JMlghЪ]X{&P'<`NRU& *U&/meA+;NorLqgyq.0< g3ʴ7/4 #3~U\MčVԺJbp^4-FYDA)+j(DphȤ氎G]*pG4Ojl\G@s:``( WXj^mŁ*tM Ah(T%s3?DJ Gk5Q`FP0,ǀ%1q M*(Q?=%XmFfp؄!s,VV ai AZ;-&Ƒř#aA(h( E>YSeYj-o劝\ j>x56Àf4c&iSe$A@($Be4L؍0-a, &rQXfpL_G8:ioE !,E͛rFc&ioy^QG8>`N Zh=?$4@T!>3ՠmw^]Pz1$L F8 E3הDHl'tԀa@8ոD/hFh.Ror}$Μ34؈Y\dx|vsWQCp.FNͫߡ3 4sDQJPKi'PP{Z3?ո/&]PɑŵBH{9; P PNqOr9""* y>IX p4)#h픃>J$CӀiqr0UrX18j:UG6Le jL:uVH5(0e . h4۫-]m-bY&L4 Vɬba뀩>P(3!\:Jw.s #=i @tj?N8H!jUsX8%t@v!-Ѧ hcj-Z)0 bIj9e^*?ʲGc [ = Pīw4\1o>_/T0^BIj̇YZ t!瞂 +0TN'"SC. ErN6B`Vo }!琬3j>a!s1SZ i1t6o2\$x /x!2vB,4e}‹gmkV^i%A[,6bQSHNnq ȃV{`ϐK&A*k/\ 8 j#h8Y#+T=z(Oj :H'hPmXM!A??TORmUiS93@g>鳨 A ?'=re{oh#ѯ^|M:D eiI.Lj8 Nd(#0Y ႟~5R]HG39o𙼊L H{BYayω5ͭfFXZt]LmeZ$ԫc.ь.gaj} pn'm}vCgz qnhc$5m;&sOh9иd9™W.A}Y&.3G!QMUu[B4rV)_aQ{j@s @8_s@!j$znС~& tQm&J9$je;;ow.`h'A0EOgi2?fFCr@m5*^3Z 4udE3ha  Asd+PNG޸ͦ 弌P;|O X߲mpc5+TkLоp-ֶ= L{]F WF+,R2 I[)@4=m m4 it=޴)xjn0zL OY_p|:Y1?az@ Կ#PXۥ#(]|-G.J{G VfuֿF͒ Y]wW9@6S5]_0Ig1 [l\кCX$,`Ji#Tp#Ղ캕;pr2p~BFq2,Yӈ6iv@JÌ뚋H<@p$},-鲉J‚@EH4#qU#0 kLY8 G1W%"k_Ԛj?ojzp Pn Uf:Fq`0d!̊*H;LcIU8`:Z2de`Ça K"$]DwG:B4x@)˙^}<БBY/U7OTNS!MW,ӎ zkդPm2M1e\\/X\dt" DPޑ a,&  ,U;9 $(8ɀf x7C7GdbʹjE椷,jaU@ J̮mӗ 7ur2:BKQmKxOZGQc19vD_QWu=4ό94p0c h|a뀑>dؑpGZ6d#+G = eWhN 0v5X IDATI|.+`. ̌/4\TG Bowى!M}@Hja/93-N+謞Wf69TDp^Po!oOH87c7%>&]ǖ:gpit{ [L]3auLV;.s~f^ٴ$[\"((Aru> jd2o1hSG ="`oL!VQ/ VѺc45b,R;PsiaZME6ir@avZVCg6ٷ~a뀉A2pd4{3[}2,k7BG̶jJ9JD ˚ $8M?Qfj)>"jG F$Es`t `x?3mIɩs56iTc zrVv|AEKמAG;SuRb[q^w뀱*u@e?[CzL'8dbav:i8ft28+22e~L yC_΃Lxы>΂?2Q=T"Nٍ]dw`| רQޜޚkp>I-=gY@9r[aGZL #9 5TBzUM=Fg #=x74!h O`Du6 Q[>3`af2aͯ 1;8j眇eHK<:A' ]PiI'#\i|baPWPgfe9 >F_E?8ZKƑ<>IЩevCC]s %d)rhjX`L>!seAbpopK5"h Aɫ7m^5H+vp0䜈 ʫH㕳=f׭h? Nrڞo@[0[A~ H+K=ա{`ԅzsQ^[զzM*ծ 1iUW2G^eׇsf0y94)M9D`$hN,#噦{\8ҬP@SNޖ@@Pth]LT0&5mDDՐ؛2'vʐFK>t;Q#5lH[ 3},&=*``Nva}A`Z #)1dZ'?%/ 1֘zgnd =!+nzۘj!C;h1HpiMџjА& ,z?xP$1fg2oXmUΘ"̮Fk=mm9Bཽ4 *C.ڃxlLuʹCG'!|ł)tgaV0ֹU& nUtי:8 sQ9|<Y0G poDY>1F3.eDg}3F߭FhVFW>{9'*>HUD|5=ںsXDUFzh _GsM:s@).i=FÍzT+ D@A8(odKBy9SKOղnv_y9@Q>BI49 3c:#,AjINi׭&CI3 oqzZgN2r /CTsF),bOΫ`Z7bE%\)SAF#G͊o(2ӊ`n?)ӚTIPI Er+v[q\՚%Aˣp5uoP.i7l4vS.y5kL6BO:Rrsg%{ [1}Gq`ZCㄖ!A4\]IT`0N-bQC0/'Y#MM MEV}GS&)͜bnJ:`[ VNF$~aQ4bOf`Wmo=p%wL#3oCt[v| P>L6h]5nPl\IKt`Z<`P÷NLUExB©f@j϶̸'lC5TW;,'q2bZkaN)s OSS Js0 ۷e*MvKոaGڗ 0N)<]4>MiMj6ΨɲN+>Uj@GN`p#-sʶI관mKD}*n:HnP$=5D+FۭcYZS[vXi'u i'tlxǠ |wo ,H锆V 61b"IA, h;e4ZΑ@n!`&~֠VrǠ}-_i} JuxEl@Q捡TA2h m1Mx$!8uC5/l00[ HCNp^o*VVR?<1G%l}ih1@e'ήf3ςCp@9CDe =(.`#֚ %L)3ƾyJaʞ4)hΰ-u5ya3bЏ\8 >*w뀑t-c1ZW)6ʺ}F;O"L;sE;#0߭tЗIrn6I yL"c3SrDgN±Z 9ALx MiI&cv 3mol>H~P/ahW61WgeVǰudT$U0cl ѣsտ!!LFS k[]0r9a ;n_mCMh0%PKG7~[9#aO3l0 pH &Cb}{Kا́ݚs.hҢoI4sj-{t*U \cv#f-_wλ|n!$f}5%5\k2U9wpJ 7z #`sLv|Y\Iլ͉ ݅% o 6iK}T\:\4qg*`AӰejg7khn:qq/-}nR ]ƹ@) C <CB^)i*zxPYuf9D8D&]<!' tCז-c/L!SmG3Fq^mԮAv[7/v*-r XiPoʍ%g (:¬ǰu8t56\AfQ[%\zlD둏{|ΰ@9joL2LǼe> ,~SZzBphe?ǔ>$j?9#]vÒBZ1M^CĐyrET&|ø!3 =wFhLIy, ;kg"=f>hM&j='w5RG>l02FH 7z#(8.Ef<(=@m^&(3~*_0@u7LyQ8+F>XC‘YØ:2cSq ` UVS-5t(W85oA?5#cg1)]} a~kJ)ўcpGa/reEA{℣s%ïyte,pfVa1p7}!W-!g i's6Dxd|h [؋)ҬM8$ :h?k8+jPWgg^BՊ X!ZƵБZHd5tC7J /hB4 ɻAA"||[6/95O/rCR_.U"Z0iB|y4S&0bGy ͕*SskG`%//\WD@ubҎG*oDw.`h\c# 6"CfTpUz6a䃑ucAi|VZ Zb([C6q>n/qji)F~:}rN0":胀05eΦ,^ARf]ga16K,w?e19*Q8\A1eeЉ1N.[n#S}3Q9Vc Ӫە'^??W.D|JcGaTf|k[a#p ]A/$*H Ru-R$`K' ¼[4Z*uӽʹ7%ޥZ?c3B>v6S"U݇˛e8{_)M#sg,=kS`.|l#r9Ñ$v4G^k =k5Kֵ-#L[ZcԛzʴҲl0(RlMtU =o7sG@%qrD]1 D $F9~u#u7}K[od 7Ny{ݾFa]~- F^u!p!P ?яr>P.hThS-`ֳo26`uH;,IWff?[0j̒ SFߧaR5M(X\';z.p{M(;Qtvx5Us i+L)t]y`$=du+[Xvmfj~j!t'Xi=״`޼ y{e[zy@m~%H4I \:d MG򒩣)okXO$MAҥh 4MnHLOXy ?(U?{Lrޙ :a+=^'4x5; 6M=\X'5u1O(x~? }87A:]Dvm{+}C<\[4o;t䭶exo3xo]u2ڵkm=a')[v's|};cN`[K~' IC NI5of@nmy-`\|gu7&mArn[])c#y:.`l9̑'5gҝ7uǏRIw<m oץEWN~إ5vOŇ6${}Yǟ=1C[s`̭2ކ`nØ!sk 0f5ܚ/Cm806ó0{KS6pu( e,kpӃ؆G^wϹ7EUm\ּ|г\$ H|u!b{kaJ PC7 P|IDz( {onN'ix%=⻴غȯcIDAT}ۡFi'\iOSSMd쀸Yӆ<']oVuOn˵tq/cDh#9l6~3MK]{\籧y7452k듍8ӵ:lNHA&6v5/)9l8_Ӿ9] :\&\,7^ B=& 9K^@`.PϲI`Β (Գl]7ty54 KU^L9 ́Œ ̼uӲrE1Nq3jג+!ȓߜn'cl$:njq[-Soc|wAq]ѸJlh*d&65>-twe9JsX S15TK?P:kwܔ!$.Ainp7*9hiq.뺮DZnϱ{&2b(|}@|)}|QݰO(7WfK:ѶwFo֯E <;~,0(\?~E4z|8Ke4E.GJdz: ӀŏdI7"~'zʨhJ>*Le[|'ce%)\@Wo=dG7Ox /Mrw&\XN  铆 7=>14[Z%0M`׀_]z/_kkA=¶͗O[@|։o8nI/AM쐴(g{=E4c>Ig@3G"f*N{vɲGfNzK}Om*N):k@4ڣ~\z?Z}8+]aN.7.(~va[}!4mk ji<? g &RP]:N!`7IVA0X}ȍ?mM@ny,GV3@~Ak8 +kMk{];oc[:){$yw<:'1OF~5B_M6/_Bǁ/U-2x_o-Mb \u73;L7$w*K}0psbV SkH<f80T0p* 9` '[x*C ǁ5 ׸As`0IBSs Mq̅o?O/40Z7nL<\h߸0BSs?=^.IENDB`jqapi-1.7/images/0042_06_35.png0000644000175000017500000010054411460407074014636 0ustar metalmetalPNG  IHDRiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxY%uy~^\eIE<6FS HH~zFhb?dLwSjmnz ݒܒ(Qe-=ᆵ7w"+"ťNfUJ̼7"ws0l^2zfguǍ̀3# MH`njFf$75#< 榦ktH`F2pS307z |+_y߰UbMo02I2Z ̭hFs/ѭ5Zqˏf$0Z ̭hFs/ѭ5Zqˏf$0Z ̭hFs/ѭ5Zqˏ=ʥ+a8ƵIӏ< n|O~.ua<|xGw۟=f==*%Ă<w.oE>5 yr]Ҕ?Y"S6a=o|C.頃kO˷rE:pG ӼGd_>< Y4$rmޛ.oJkJ 8x{_o:MmFi\om&?5a6O}K@xZ^7I\2 1eɷKKѸ|_L$&~!1^ʷ~k\zOkf/txuן/?U?1µ }R bL"oimFsY~~N4?783OYz\k{3ҢG{gc;v};1v-b1~K.>k?%x֞7g<}=qcq׾gba?uyߺ5F.vx37.0?c?,>>`{,փ|Y{#~c_>,~U`c =n,XS|&7/#ص yjMv_w 47I?skP}kI[{!8GO[N>;w{ߖE}\~kuҘ@WE//~Xb$אo < ~;<&IM!Vco'3v.o|w{93(u:8,W{=Q$eמ.y U+0#wϯ@5alw\~}_zlA!I}Yy/m*3xN3y?{,dgC,7^ˆӹO"'/H#OYg%ސ1_W~Xгn@!yw,׊ <{?˥)T_Ao7j\oľZe_ ,za+1 a {:+A`sQ w _\Uwl􄃝^=_׍zBz^_?|y|ޮGH9ƮXϗ%95~,O4)Ws!NHf'Gɛ_ +9Srf`$0#A MMdf`$075]G3t HnjFsS5:x$0# MMdf`$075]o*Z}#]GS=BjrF&(g6H`nE>[ Qmp|8Z# (oq$0G9Fs,QH`r6ok6X䣼ől mGy#9ټ 5`Gsy\k$0"-(g6H`nE>[ QmpNO~O 䶽EMoX`6Gb3Ͼ LһNg`$0w~Fsl~ ̻Ng`$0w~Fsl~ ̻NgOzÿoyȐ"~K='9 i[.W: Pn~-ѧ2kOj($~[X.>H|n[qig9)x*PR<+H Snf"}ьx| EbbZKyI33g%>5"5r)b1N]֘1B3~VuIy%ZmJ7A׷mJߓl֥lK(ə9"[+ga_Ta[/&YrRٸ,m$n&{W`鲸bqϟ+ē1")oI2Ѫ~%i6 +՝s;E^Hauú*ej0+nvTpn"L)}+e4+H"#]@"e2i/d/XI/pv縯#Ѹ[}ɰӒٰ6J216.[鎸x[\b2&Ba1<=k-9!6jȾPzdJ&3)G;_(v~9n $azB j+}UK86)-W%iVJ=[47JmK7 FfEz~[oJПѡlrުnkҊ'of|W5:<˿bjVTf ;[-i {Ry9] Gł/I7) qH`*L\̆NX;BD&WKWċ(T&NK*DYԲS:yR,(YD-`XL15LeT"Q'XqCtNC¹y30rd̮51lzy4\T4g uc0#GXc mz1I$j>.`^Ꞵ.tF^+|dN-HSZ^GW*  ,>ϰteacGJY1ޔ<;1#mKb14LmS3 1R>aWXdwf"gU0L/l(-@\ŒIiAHPl6SgSxf 0]#~L=϶df<xiLOÍc:ݩ:B9VQcAY8 WRco`?d])Tغf[ T;/e4R#lF2=1)HXJ0snо? ["5~ c'2ge'o]Y} R+|2#6 ?p@Aq pSB_(~pkiO3ԅC]ӧ=飝\f6+ |1q$ZoM6 VE8d @ ;mdfn8ab#| 'gO!&;=yJ=b8 fiwoeB* RΜ0JMY؂"t nd& AA[?lCiKRnR;[RW7%@}`qnokh2/Bzz}XhL))J?c; `i@`"LP5wfT8`Db=qz0L#/^g̊?rV+FFjEn"UKh (h>d,DdUdu]N ͂K5( &S,I"ld@x*.Z<#VMV*y aFya'$rڽwaWL% /`MT4c!f-!w>29V egqI ^!e[\ݪx:d w+WMH AL}CI;bTwIZm$+zPp e,$bgvnpAE5!ve |-"݋WHF{0'j| ދ;=06 "Dfђq+--LdlOfƧ.kK&b`|R sIJH XoIh^pE~ް7:)l>N9 m)6iItZf'Ӓn5ă6hvqvK.!&yNIc(f%ڸ5>ʀhߛMK"%9h]_*+lZ\~zU:v`{BhDz` UDm,,;+b*1W4U-WRS)IՔAٌ,D]ި% !Dۗ e ًKļ4r2Swi~ δ /D;=d2lTk H*@-d$-7=/3g$Q~eY_~ 0l[Yafm&ǭs~1%xh&]1!b1 b ӓ)"-ILNL@. ωZHS[~ ^f.QJ9  `vk r&;$&j ,>M5o JQbU4-{]C0CeW6/J@)K9?a*3C7%PiHE nQXB| ,V_]4ǴZߑ#x OP=\(Ǭd4Xh'ﮕdSN#h,35bL vړ74%aa勜/{njݞ>>oh(~I0woV.cHw,GRp[ LHo^/;6'S,vND yp$v{sK[C}p ;t@HrBDT,mK,cjh q'?#xDի. u:);/"cګ%4.P3̲ABc"`C;y.?GZP☆QPv"6DOBo .젴I'$ߜ=.T`lK4)i]k+rLIbefAMJW`eO;Rhd*-Ղ0|id `xiAI 05PFȡz$qe k:& 9i@f6b~$JU]6Ɏa$ğG*;x6-@.+]<9W^ڻ>X3+?u<, ҍ'2ا@c-J|e9)AYM f᫥Tk9Kԃ? Ol%8=h( .z`!Dz0 <\},%9wMAP QOscNt$ 4 `l ^"1n&7DGfk\fL"e+ Co p1xh.c<5ux .\.NT!nSKVsH+"cG*om"NIV9k`F4 /VJ/ 9Nß$ș*sm Z''v܍x f$ ).ä6EiB/#$8q^.G

^I)6i8 Q.qMWo!$MWD D=275)^rjS U: E7&$.@'HJ!~8 'dse('4yzN] Wn-`b[Hn^c%J&ېWWf-6~CGBfĹL0KJ5\7x{0~`D/$ *!`egU—.:11Cqq_u`rBxSG:Va+PFT. 8qMrYv*^aYin74H cJk2ÌE\! II_b]sTy$hhG*2Ǝ̓Qƛ-,|^Mj:Re4Aj@RIB-mLָ YƐFU50ڰ\k冒Hӳ@.3|p|3 6lALT bg}C SB@V+aLG:v pԓ=rzUVT&:,c٩IRmSV@J2kp1[TQZlª"lӅHMkl(XnsS$o[ 9Q5Ëv<09sd0yn\h-f^k!Y\5BmF1(5'KUdԎwgkRMec57Rf~vl`$>eaufꚯ&:K+xı힣5IaXBB5cfeW`Ѷ7*mH+d;K % wIs!TKTHK$sld2NA;hu2JɅ`!uY1C4MP 29;K"閛;/ 3ўKb3n+d1A\0|F_R`O&;x#)^0zx ogͳ{0XD+ lB&Dv `xN@:d JG^en[L; X,x``݄G>q}z灭en`_Hs rqjaVZYqƘeKK^z3ٴ1?-IT)2>!5Y`8Sd-` ec3O`:-O^4_scY&ARm8JNC  n@C*)R" 0*e'e\$#4$8SP 6 mjEKN( &)9!A˸::x6&Eǫ #~@,q3KjC.mŜ8!!a=*,˛Kx[d/b-Si/N̝C~6|X1 X$&C*<4&(tO*X @[>u y=! ߽* bt *%K<5YkʥeHdtLVcu.[Dh Z,a 3?VFp x(39 ?!w䯼|Az!j"u_J/cĐ\j%2B˗IĵLAƑy r'2Y~@=$y) 0M0Ch ˵sU MȰ!1Pkcfkds`cI(4KѠ(A) Ym*scڮ)k^#ОzI=xv#/߽|9!,>j5cg<̩F~a+N<&5w}ɣ{h-IXK7|^R6!~z@Hy}io`i-\]@D7L1rm2@5I r0 3sxO$X, YxIɜ +ŋ'w_g,H! hK:ppw:b/da+r'&-oSX%62z@skTZMnEbF Nc[DI& M^-fE)M2n6жK$iY`1#pA 1-X'jCxRj ee >Q)̈3,4)+pE &9$M8r!4gO !l'Y$dmBfSx!\B*z&>zML0}t-<Xg0~\hc@9̱ af \rMr.XJ3 OcY,39DŽ$݀T~Q\S5A<l6.fHe-$^w WZ#c@k8@UPЅIqLL!ΜeLw! ϓLB (*w*{p[*e L28ݧ&:q >ݠ\hzTW!Ca}a`"={3F6U0~=pvܰh+A>7h$Ӕ-MPMEކl#X@u|èNd5څ 0h:m q 5X(ݪNITrMdKK*ItZ,w,@r:W/Q?]jl`ɚc0fgk̏$LU, h#IIu ٸhgH]W- .`T\Ӑtwf"]zi&17~ KJ=1AMM p$D 5Q7$*&A.xR& ) FvkyiB`2F$).|DєC0\x~JI R:Ws?5KڋA5 & P0,! -yRV{J4&y7⾴N}J(_+0\&R4`6unt49-fI۵e T$e%W&lE*]Ah\`/^Pl,@>q)NWC>O1JU!ɍޅO:QSTzTdsР-=gтC TVĞ]@!t+L@ē lfd%g>ՠB&嫚*݀z(`:dୣ{eJ)ߋj*#crLIdop9ǼP$]H92L6GL&)7P&TRp1 v~"K+< m'@y$voW/‚h.GW [q>1nNHϠY\bR,ɮ"# D1[]4H{H 8Zrm|cC֌/"=jӪѲ$`JتM@n!( Ni3[p }ɡq45CpZpG:VсهZoK+@FW)ubM۫cE~j2%$ϵ|Y*IB)M"xSNQ+ ]5Y|(xĴh}7B2T|NeJM1 N <NfX6FAImYüh Džnƭz@ܘJ`-v2M=Dmh .!-1}1a k(e'G:VaOa^GSpUqs(^ۍjA 1*SFKD ztvf3MuVb6iiJ?:>긅0!u(r &k/ӏ&Ec37HRf Q۠F mM5nv<9*i4btɜ>ۖC[)Ck#p=p Cub,'0[6d &6F=LG$,}kW|hQNB(Fq0aoI%XuôV܎5vd >jˋ[{ZW_&NAC4 ^aݗbs\uuٽ^B?Ie b &vpZU&E=2;XY]:]i˞"Pzd۽G۰3KLZFwiRv1b-gDw( 4) 5E j3GM=L d@+7c ~MKFr~xYA*@5詏rZ7nK\s-?{ HTO_*0 ʓO`ЅK"6ʔ`753RIZ҃7Z끔Nך.]L] nES.e2iYѦ6!TiՈЎLA 4OZN F\qA!8spqc6⑴$e{gߤt&uA&d{sqܜ5c?)/pOOd!tw)g@6XSZ|W_UqНs<ױ A#M:qMF;,2$we݈nz8Dq؋6 &i0. G(xI!E_K| E3"&Am=X" 'FfC6itVզ==ne Y.EDz$[ L&Qt]"F@"p4 Ӳ'eux[ NU0r#܋ Nd5*Or|qp^z<&HW. F6\|&b` 2r WvCtfӰu8"ԃ#0JR ў >l!6J ͸KP )p_ MGb@mjqRU!4{&7G:~(燡Üh1jIdy;kSCYAFf"1X]Ă3M~H767=Ŝ<$<ǀ*XZy(6H!~Ն= BXdQ<8y8l_$a.QònnIbInrs} VBA! T~1h cރ*xM)& 6@?uIv'sr$}1e!!e"DW4QO`TTTPF @V9*5٣ KiLa4<'P&&k&CFZZBp05j(!a3CAyS51 @B$6(_! _]1G{`tGNM[#HeBGEl{ 1j5:FPMR( x=GL&:!-U&F'p-%B9">=Q;'y4`su %u]$Yvh2|i 0Nz&8 ,G?1ܴWrZHQZYi" ͎癐-^M>B"s4Q; 좢Nzg2ºHEB f4 fI\% ~bjڛՎg 4nZA3."sĠ4S :i&B3MS30Ӈ`Q/&DLm}(-,D4H:Fc7JKrLz ;W>{egIPodMY]\)|<Z`WCx!qdt̠VN=qOqh8"HMpQ@C !n4_LV|(cW :.L:u>C@ 5 ד͊XrGJ VyRSp<&M"tMQsWm6B* SRC|mpT!J顇6\,C xVYvZ\둔և^X5ws vn(2GN@%'&MOfBCNl \Q$UXW{ FZopl<4"|.DD,@r3@.Pe2J*{;ϵ[1od}ȍسY$a=xG{gdOC6 &(Ccx0P!  arp "8fY-Pk 8ow&&A<+hiZ^Z/GH"sS(_*0N?jȌcw5a[#<- y֊(m3pقӒ},,KdQVkld8rG0?6jmvcy$(xB&ҋ;I{KP,D`qu,0Ge#t%zexNw@:OQ \8̓GՉh}ON7PݯIl$T&eSڂn1.ېL^`(Sdõ-MG-1WxG&3'0M,r؛!zLZKJb3:Ca!9V Z`j.7̣HBhѹV&0~L\ghLZ&S LY? chTޤGMftCh=4@Dڛ/kĩ:iC4.[=9Ĉ &YYNgiNfORFNxgN:LۏHc$|PvV?TCnQnRMȡ\QvJEa)}|{8w"$ ŗ%'m*,nv|Y4Vmu hn{X#kW X,jUlBJd ŗ0+2z4QL JBWrhD'N s.hn8U~8=WٰbR0P N|ЋFJ`z/ll̓B_KGIVB6vB0ÔF).5:v:C*b/ߟFp$RG챀^LJ[ssS(9;1(K-;0=(@C5`A/8 "<亄P܂Sc0u/QR£EX @߻0[D%]d pθ=k916 1hUp 0-t|ZTKT9VTыQ3 N`9Dj[NQo1=AӴ {8 O|}a%0 ο|n&RJW : ~8BgŨ^H*qZ d" My" ?ЇQ8= n &#jQB-ik6j!@uz!Mj곡fCےi:3*9G[zݘ>]oO- 賥]tX,`FH0]3%6u0

,{/rEW8~j'x&vA< ߨ$%QM]\ ĻVYdE #0ta`O/2R#%(CG0DQ#ELA6IcL(zJɣ|9 y{pt] 9x`seњL0N5p)$Y\Ǜ0Joq.0(\4?`!JPBk!D$CN}BEpO `@XW(G@☽XW{^KW׹JiTSQ(1nMd,k7ciN8ȂPƫpU',:34i:F^r)~'q!˙Lޢ+s8KoM ПL2 Rw,|+ vQVSh 30@>gqh ɂ#sci8nxbN <"`wXӤ3u?a\`=4W\ӟIȇ@)ۊ0g:O fP/Z"'i }YKwD(M:nGg6q|0_c,tSMPs}lӮ,ʙC]]1?} X5\7T7ۼA*wˌImFr~zߧqŃUC`uo\ n9xq^\wߡ36<1Y1SõXޜ9OEs~{Onû3o لwAC7ru2UX'r~Ǥ~{8].gywǪ/_k׺~:˛yZ/~ǏoC^ܷjgL3זƾ<<>^u^z9o:3>;8c_y] G~ݷ 9|ˣFo3pX[y6Fc{8Vyьg`$0Z ̭hFs/ѭ5cjBDb!6]ҿ~|~x9|N^ӿ7pZX8! T#BSHy=n=WyI=]pw{qkT=^qgB} bl[OhM`&z vw%gjS-Giغ`OwNb5`]XݕɟM9z] CnRtGĚuQ͡:*xN D9Jѿ?v|ⓟ~gst5~U ߁~ޗUf Jÿay;:C=$yHrlC9Vy|kw :qr!:{;Y~JD?,>|8 gwRHr!X_?i"|R^;Nv>^1mlD}? _휷OϺiC`4M]_S ?OdqqѢIg&!B_5s }Ъ iؤmjhԉّ_^tpS'MԡONmTUxTL+ZI0Bt?5[B!OAF_ޣA1Qr< 9+B䘧#;;tGS|ӟFZ@ S ?/.h!M4;s߯XϻU^ǦaxӶA.96ƃt~F ]HFWZ mAZ{*jG,>'zPkK&u0'?)GiZ3oG:,ʊ3t,9N6BT3_Ы&[_[sj5[Ӯ{ Hh:W|wI7ejjK:B[ul:\rE*Sk~>jkfLB`+&y'ݦ&L޿yo_O9?ϜuABX#>yѝ>*DH>@y ͠^g?eT| V̦=Q%+O?4sʕ:Pʹ*8u 7DcU0?W^}Mؑ;Tqca4]j;'ˮԉ_\̄ZŋJVtOt9GOXZիO5zI5*, Uc=&QG5˹s[CH0~K͏r]p(krO3^POvUL*0zUH7o\8~,Y_Rhpi~.)(R(NDvbǖ-zXxfo#HDJ|kٙٹr[Q8 , uZbզxy-,xKIu_$L!p2rR?B:mʇՏyT@ o8;mMx0-B99|:q3}Uг6wş?0ϷԄR;5cN8*&&^)1W}~+u|2i!ln {%ܾ,Oueβ8L>?ia{ [QM. c 3'p ֣,粰1?z ln|\ ,i7էe '@0'+׻QWN'p0'+{ rh ;MUH=x!j]x>`[LnZVrlຯVQOqzߒ̩嗭ky_fa'պ&* n1gk.Ơ?Z]="|;h=7׹r>2Ļn;z1槦0NB.DŽ)VzJ]"NYx)LzޙXE5 _&bp~ H,e<ћoб#xBQ-? Ǫ*|rI(xckzsdWǁ[>.1VEslO].2Iu&o9I]Ɯ0NM!Ioig ]VZZ%<]8󂀉𯪇y;?\}w%ܤ$sC.hS l(MF[<lMQqa] DKT]؂ 9~#%;]*f'e̡0j:~3x<_LlK?Fݨ詄8o$8lhÇyݧ.+8bC_O\$E`"ij dô߲S.p2+ⱥ:/ {:Z@+ͳy]g\xO.'pJZ+C0p;?]#vlө[KpW_ZfK.zQ<G!--V<}^GҴUkblَnp|(#yf wU"@9xtS%&FG5hCw"f8R n~U{9 &0NǕh6YY .e̿ۏ00YcCq w,aI̽oD:)8ʺ~w\(p9h4`'a`d*e/R| ቒ<~tWD>͋B?C^a?|0r-c9@C5L(voa}{\VqEGOpc4k>\~ 0k*sj ?C9jQR84t>IF) =IDATw)HvW0@Xmf "QaŠ*k-SmAM¤;l"∄u4W EˑγlCQ!CDzf*Fc|ԕXjai\uLZ+ASW&0N$+Py\eUmQK@髯 T M]4jcHYɺ0'E O\ Bxs 0UC]I2sq_߸upf))ka}|e cƎɼ#LJ)'D9>b;Gfj(B|TV:G|e8W)AS{cWQ|񃝿ȑX+bl &&^^aKHx#Д5W;&ưoY7ütlF;Ua1uU|"∽IrlJwۀIu|PMs+#.w0,nTʩJsoT >D{C2t~"p Ŀ`AMaÕH-BY{@zENK`U!"Č,Wbb1xe )stW^i7~*΅e72| h! ]q`,*9mI\(Ŏ{;buSܼ1+9K%ql?g)}FvSJH(O"(2VeɊųF3c"sgS9D/_%ѭ5:5\ɡU r볻Z"H&F&A>gŲUmlU*!MخeL>GLwB,IE?sW,v/)1E<=v%hPEbfT*BKmhuqeqcA->vX/8y|`zCTzT„uQv&֛UK1cxݧÁЂz Vl\Ap箳97 &X`}׈vE~  w2E>x%(J(󙕛yb뤸X tNHuMMNpST`e] mϾ><9˩=n<9՗Y6P\h^[r=&-p[,uOL\m>{ܷ.0D )OaW 8 [ =:A 8׉&>&b*&T‘8Ò*ƣD=go!Eᤷu*o|&;r\vɱw8(Վc)ZDu}^[ؙPޒ'0~ Yt$c̫`gW_~UX{NYċ\4/IRl=4u\§å!Pow\ڤWP*Xhb+̭HrfqF{sry*nͰ\rݕV._tg:n|J35 &39Xj=j U ~u[dm}yRQ,S'3c4w; L3I0,LTT#2IL@S%Qx`nXo7Y`U.3ԦKl:%SC[JK)eW87pgԅma.T|kM o8Gm2ksj{x*r6_EP!%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxxu.Nwީb5,Yqsol'ݕfx7'M)77v);ȖP$%Q$E, {0L3$۹kdrG^z|{pl:qLǫ6=#wN"N7|GzSWFy7[[FK2EoѠIq2(?q/4 _}`_Qn|[_~S<<9:^! a^877t _{4%c_Bߺ|ߗjϿ=5S³WRa5~>s8ZzPϷxSH*m1|h$C[.{Fsorr*UC<~>?=)E/繿 e/-VvAO.ׯ8FM/??Hx;OC$>d?G=8WVtt٭/7KE=<iɅ_U2W}&kPidi| [ |#[}4ʯ?x~܁SiӘű453rkmxO;{opo'޽wpfK%Vh0}qHl}`l|s?IcGWϧov8voRS6~{KKK)]JS\Ktk2kUK#n%ww7y#//v/wVVVW c4Cm/Y m@hn{2_Mn{2FsKBh26p+1^2F^e1 d涗,[r̲v Ȅ;2FslČ1{`%fN=p|/1c4wzEe;}+z/c4&K͝^{x6N_bh=w3FsW8^hMӗ1;2FslČwK^W~ůݒѤs22i=:?Ѭ Z1+2F7h=^h㮬s:ߠxzY)c4|ef=:?[fo:Jd ZX%Tj Q1|˰$i%uZ$L!!LLM:y !Pȡ2A-Q"S@"W*l!kkއѮwlR'G5$[J0l,j d[р¹4Oxg/B< tػ>&/?4}7FT8Bʲ GBNvhf NQi%~?=݈є, e|.AtFJQeɃ.Oh߽!pb EK!`$p6kgͯ<^L/ChleBLYY$ʲ D⸞o~a2GI=$?f>ǔ[P,`/N|E۶ql{ud81XTm59 Ѩ AP!߈I;9ecH`zpĿb6&[wFzidqS-fPc,w~*[$%SQ*0vuHڏ}FBxMW } ʛ" @.DJLhY@k y۶?=e:ڎSyIeހ2B2 !?W/yc͌DWz5@=D!APKf F]vSV w:HIS>UՐs1ILT"bYD^ÝVwa[7jQH EpqaL|׻@h0>RTTbЋǢC݂Z~.ܱ`Ԓ7v Rb՛v2|K]pw"K-XbiLH}`\İw\ZU o iqx8] <\ťD`ѷH\bD+O1$Ha1cbɶf?Z3>C`Hm|z `Ř|o'?2K.n칷6e#l2LgJD!'!B_;H~xB`D̙^z-Yg,J%JDŽ( 1<5 uca~ So)\yL`<>/|?lsS4#7EaE$7K"%&{ڑ% )cr,1c>{#1An5!CgH@ڐ=)4؜sp,_M>74@^&5:~ŷhҸDqaZh >aBy9%آ7 z R0"X*-yTF1$T? ́O9m=Nt;(iaMHmY^A-reDʌܐF|K RjRfBZ=7bxx:F)αpbZjvjw#unnDS~H>hs/0" ߡE HhQya.AgF0#mHwpaQJ ^Zy qUX%bш\k/PG !V\U;EcJ&= ᕟ"-V,࡜b|t#A8t d)L,%}VfcHC8]/ՇAgRM/#9OA Bo4fJ@ ,•\col=:pI2 )yD Rz-4 }:4p:܁΃̐)z3|pu X)!<*hCK0 U,NeF'qÎڿH GX2хIBK!E*ET":Aዬ%;]۠qk͌&AxO tC_ZBk%,޸P0\"E+M_F>&.)D]E~"eʈ\BG'4yj +^Qg.D.!,U& w/a1K`4WBPrӗ$")q")z'c T7Ǚ3g榱!X‡ɗm܇;qJ+ncnCނ, fvP+ ZzǪ"D($p0e-$>{LYZ\A BXfP2ļ+|HV!ᦤ!$xʘY3 ?jn.]N-Q"ςqvM%Qǯa P +[^}#b̚T c~ޱgu4O { GK<-["xH $4(3J{$%傧TJ-H7 $%R d%:B-KiH>%9DVS 4WCڌk gX7ݸ jz=S(M!k c6G ؼ /! %v=2;!9xfM]@I:D7!'7Sq]^b̰̞E \[^Bx9\^*?T0|||4BƏT%56B \ݿ< NFq@M@F. n[/f/ ޙ!nR%y8T6o";U!7[F:KP]t?rԠCF[GU42bVȵ c44UQz'٬;n00oO$|AH2 CsW"z +  h(F<0(l9\l%,Mp=ß@ہEA=3i cE3Ua6Znƈ|䗃X#vC &"v"W(}d. G ]~a>WWAYW q1 s~i 3VÖ@$A￈O@XA q2Dw1d!>Zv-ٰoE<ߴ?_wmaTop?#2af3k6 L`a֤~ ߏhN6R$ >ߌSBs(F 259iZ$ xbRaD|R-{,@ʼn֥il'9 7 $ -DN\\WK8*\|}!|bᩧe#< T 1x)BrKhKp_\;zY&AqcvNm ও.c҂2f$ Nbu_T^>0b UO1c%f3 e+pOZwZڄYbF7niF,R3IJKës| _5m*鵋pcXb2U^)Uԣ"b֜~2շ1q}J&1"A~A\3.F1J~zɁ$sə Eh4o#_R!r@\>5Ԑ($]: ӌxN.qYeV@cql2,Ta kRUX4=y_y;*X²߃h6?cG BDvQQ(3n/2/sF~Ah?>?߮MϯѤ=pxN$B_^w@3GDW>Lny pXX0G`OnadI+ȿr"~44?:7&+D>RR,X iڏ$kBItDȣL S0Qg eqgCK.&N,ekRwƑyN%{w$XspM&eO0y 8uJ*')Yv(&po{jEGL5[ _YXQaJJ"MН.j"D!Ȕ~7եhXa|P!R!XAC.]{j5?X!I14~g`)d2,B4flڈֈP+Hj` $ tiQq?Yi?{O4*WI\{c |0JIz$eo 3eFeV}8ohPل]7H1Û8,.c@2Q;H`]^BENb!^x:+4[O@>xrkJػ1SR2,PUR#+!ɵ0݊$CQ#ُy^o>e"e쇙} ݰ5JyBEty#Ԍم,ݫd9]M*pcxwf~ ~R',eÃ'*WY-LaEksɴ)LVa1h3Ka/ µ*8 *̚ !q-9ajh= ]9g耑n;<8-|Rl6Hq38O>GQ09;(tnvq nKpbx;2#8@vx*Dg.X1Fx ٝI7Y\͍oI~1ՑǘmF'3ڥ|[l 1 "bdl[ᐹd5Jj("іPxbZ;͐uMn zV)j>wfFLs 6%oAن. xV/qW #^lb4A(\W9 81F>fY(ρ6x7Al\YpS,c)ܐ>)8T ? \:tqWA!)ѫyway<d )qZ\IIUInbduNn<8!=E! C5Qm7?s܇1H6FID\IDYFחPD"l03.<ͳHMv b=Nr7lfHèݸ C,߈05447!G,OxwD~YoDTojźFYJYR$,],LM#*MJ!V. 2b(k1aTI*X0xY3U[G͎JGzY7IUDo~jHmމ$ *R1w IDATKJ ]*Aw.cyz&G@* TqE^<=hr {MRL Bl(d[(ob:.Xd;%2ؾ.n{n3 54Xct7'0d@J=F%ɽ>bx2UrK0?@`M*T<]rz/uv1t2v},-RwLCF޴1^RI|r7%-TěD;wèS.l%Nlk}1hj1@6<m"zaa4Ab%DdO ՇN\ pzCNpHV'agVG:d5G^ q6m軄|K1I< &V'z@) %T!4(;/bÞq a"AA_GcEV(R-R<)ζ%."+dtgz8&fF0AT0$̣ HȘ(1Wt,!+a4ob&SJ̆\p b0I\cHPE@ #O/bRr9H0t&xWD "gM^&hzyKpjoUE,r}S-d?3.n PD}R_}d?~qY3Op >gzI?Ad .SD*";]3#LJMu& 1p7#yG=\ 8qh#srq) %6ː/`-LDa*Q XpC)p-RWށsb~|I>N*L1s(R_#(:F_|m4̲gb_ BAقG;Ymwq]H%8C qrA!ԕD)Dbω0d0Kl)p)j6[fgNלYI.W1Mtm<z2fkUM¤ i@&$e#V냌mm>WY9ԉְ*="|4"J3tXoMJqdٍٔz fv%'vǮqK xٗnV@Λ Q II|*ːE}AqmGcs"+bT?{ C܅ךytxb dRfy"X JLŋ`Utn}> 1#h5LeC, j9YaZU'*~c~I*wR)Qf* {3'0M^Jx^9+7gqͶ%۞mcӯ jJz?0TE<6B/S 6_K|vL#]!<<8ʭJXPX(hgSIm%2+ 6T/;F:ؐkcV,R܆Bً%x!J.h &P.5Y0!8fSP(?00@LIRҭ9v XjC-͐OJZ )s0}f.L51<=H|)~MmcSX,j5T7C3EV=L¨[z4fYURt"=恃v5 )-%3(z!N s;ZC˔US(iXKа@Fl!t]D~=8׸Y~B"LH⭐[,"Fz<f6lL<[Y )%HJhU1" K;u-Rv 8 WX}㿇 0\Hh`eĝ-*b.h_X+G w#?OD0DM+Mk2 c6JP+/nQəbi3A [0T,S=ɹyfylw-@>rn.r)RYaU( Ծ=nU-,LGB ( Aÿ'c61j1i?Sr(qb]̪+AbU8ξMON `,0 St2ikK+֊%иmP]̬Aikkeʣ@GF^:FL4T;WÁ's#ua/ًGkf42@<-04cibgSf!~E[KSpcQ0A,2^1\[D5;( p2d}%<=Aj6k\ ko_!dXc:ߊVHOqA,;Eқ!LWLk/@Z؃I [٣hػK1{+qC_¤$dţpR'`.f/ u*$n܋6TC]SguEx;Cۻ.A '߀v`nhщR,Xw5###;& amyie$&^dـ_VdQ>ȵYtim|.HUs-.-8@ ŲCl[v`Ul~/ G$L?i9}P&*R9OV:9ԋa(b>{09@&@g(7aZ9 @@1r2“1f|3S9"%~Jls+27i<7D5H&!mÎ;1!YK KERt7^kf4*A5m'\z3Rj]`DNBgUf!&<Oa-R CX?rLI"lKLX0hnG鼬 t ʷV"0PFb-D,WY'+<5VæjvbfA/_4B&r"EκW2<4Z"bS"9jA&ǗH jjoؿ]vN=oFzD(r@w*d$Gi@#b tQ܍ CEufrQ( <BsՆ:Q rGDNSu1jURHgr0KW_LمeoR2å<^"g_$E^ 680BvYfw1aT,{/ei{ً=f9;0I.'d#'HP :3&=MKk<ڋL˜=v dMSoρ#BLxp3郪R`xcqnIZڐ%P0*f=`/'miYPP7^kf4iL#d[)^tazjي 0)"[[iTQ}Yd NC mcǣ: ~4CE}[e+Yu!e pRv0r(1}47dIS#xɗd1b:&?nr􇏲L =ۘ<̦ @s9"ŗG{ia V+˺xwj!a / g!IILL(N n^&=Bܸ8B}) O7qPUi%<Ƣ1Dž 3Y,!GAVK\pA@o9^8]%KDk`!Vmd,[o@4rƍzwd,BU:4Yiʙa-_cA]tSB<_wyMXA%z)T$SraVr؜`8S7!/A(Ui6yٛ!YCPZJ!z\(5J/PQ3:g #e|]N)%b\8 lMg))mZ5Bf26ǜk4 -Gv(>%vL0&لr6;.XRsF⟰?˼upɲ"[GN7G6$ MD Cz2BJ2>' Y*⤖|^f,u]G  p=ZŠZwfM&}Br4TslCMǚwS4$•V6z\KR'a͂|:idBԎAY$mpOٻehii0 5GC5j̥ǟMQqqӨc^ژ|nD'ANs;Yr+p=%P2[D.K@ne%Bl-;YGFA NPjvW Pw]L?.tCx25 B& Bc Ti9JQylANPm%K[؈!/#$L%,DmY.lE֧ƯT\;NyK r?~%Sd}r&^ORި~VЇx:pSTRRgV墂~%\. ^C&'ksQ%Iv0s%Q-ֶh6zt{liu]!vhdhR`Kq_.%LjٍoqXS~GYHJ+-ȶ6m/Q zT9]֑)k8.(4qSUMsk?B#.51M:DZ(}pR< brh {JUU.L{S% 'bJɄT7 aKPk*HS7f2yfPBHo$F2.tg/>©R?@td c(L!stjd=iIM؟$޲FfA4M0Q8 CL)  l@2_GʬRV aH Uף!V;HBXSXV-]ܕ8k~Ň>A [ 4z*})':m ]05 OB0eP![rMXE,s2R u!Id h6h3VyXm*j9k5ƭmvV;/J9cN>K"ֹD]6I)G n(C׏ ?P0w#=b誙̲2ZAgt+F =lh ZPI7a4 |539v~J8ቋnQvCD+^ꑗXjrEQș?'_`J2fuĹ䴎Fդ468:]w"QzcwdӐɧFе"-B=*f#j\!"9A}S If1RSTeM=6DRvsFU6z0BxJ<Y av o~ %>Q d`%F˯ FȰ)3p@r ȹ3hmPB2";(.0B/9y} J*:|" 8.AjCw)"NJ JhhM4n>^}LyG\MJrͬbӻr4kDûH?^m y UDŖӭIN=ԩ()r\8nD[48I-5+hlbh4u䔉@9l>gtYW6ZN ]XpHrj+m] z M\#|4OTZCBYq7eӢ GzN|?I WBxkQ̶cM8:֫dz5Q1IT'ˌ8ećQGȬ-Hy QVA vpGfF@t Hטhv༠ET3dw9Iؾî.RIf?ZER@rԹ)aX5lXJjo앖TquE{C(9G}-H7k4uʞDt"$K6'NigV` q|G.ZX4#q7*19Ysq>D`_ $ϵ|ΓgH0!\Dp'359R=orGO/ !O?M~ gX+g477b}I,fQFs$ߍM*=ӈٰL;+(_ uh1MA$Ůd%96%u'v sh0=9ՐAE?5Dae?d30v~q.T u 2e.y?C^H8N2+FrQ)N\vE|S8c! T {V*0|~T ēp4aL쁷}#v*쑢j< ,"%V5>(kإ-)HBvTos> gpZ+g0odY+1FLMOr'|Q5NPGӓ)ja3kgW1q-L?"#r"eoxlp<P8gC 1 1,Xڽc7,k9HnCu!JFExqVwpəݏ=cv+3 X><(- *x4/@˿833fAfO6-=wA6%HV ExD#|X1Qr:Y8:X\v hrZYIxf= r>=1[Zj>g?7o@ f>|3K1Iv ,Fx󞏢RG;a6;톷Ԭ7k:~jab-()I;,4`r;B4(ENӜ0{ Hr [807<~^$7ćY(5xj R[˒ߏYJ/s|LO3ngQnRQP1q KiA[^Ĝ?).ZJ?2u=* 30 vIDTcϣpS0UcE4GpPio62dy{d9O֠*٧/b䍷W!kX[d=O.eFYqT^jH2 /sp+9Զ蘟2yFeրECԂ2vgn+ظQ a]!,ĄX&t]G~Y6ӷy0$a @={l IYzGw IZ$Fg*+Ԩt!0I=rW+ءy͋8F#AK#r<-,x,Qnb=Xr݇JssM<)> FE\}9 d\L H.z'-PdӲ9l1NSGJ)x7Xjvj| c}93>[+U 7:)9jB$+GdӥuB,Ja#9${G@u2L!5Em ήa:P +.*'_=Njp3 4cr-QFz?x E_ {rː0IB) )YI8 GD^ɦvcc\,#Ț}ü2N,a{vJ?ԼJLBϓA!2Зp0iBttnZʼnj(wP2L+9}Zd rx+5X!)&c^eIUN+k8{$0fo'ehyp/?R|x'=;7kSA <', adQq2bݪcZuڎںTmmmgOK]֊ʪ" ` !BFB{?xDN y.܁D&T"ښ  ) d Θ&|fVzdFɌ,-ĸ䓷3&@N T~\Q&CTH]1 9@bDP2^e7Ѳ$nD4i[ofBFcLa`cOc(yI.i%ITnȘRSSQ@h J {b At4lIfIB֧=(ā ;ej.V8CX30S 0jR teEYyfIc>uBBݻ=LY:TX ͗JN<$ )rY2PqXFWHH:Ռ&b$$8uN$%  `ܬ ڶJЭX)Cri&`#/0'4 ~UXv(*ًGvic0WɾXK7#y6rzj_ٵ G(b%O+*H2j ;$VJkYg vzv(-[lG І>8I*/#]_p_`\Q?]M4`rvӳ m˭V[?af*vL>Rʰ& (sY2]G` 3ص<Y^ye26V#Lތ:DzwUGTi'5cJt6rG#Js){q-E.H<&1誕(\Kgf?A'v XmvV64gwz6:%PkMgንtdJڱra4f[De,|ޡV#]]ԱـeϦEZ ZR*)p ~lvrhlUR7NM]XݲQ:蚊l3-QXfwuȤ'q~/xQ9;bD;eIt^,N5/Fy6-[ܡ$ mQM{dxD_O2QQ7k1 QT1ZbkjD<#HD3 ǁFsǻeұU "߿q ݁w-[&"9nRK/H}|J <@-l>/tb'PRF U7#Du2%ǿO׬BLfI>N>dET n]G7IM/3h8C*tUʖ(3=#貰%H0VA-dJ3 3MN==o4TwL;Ghh&ǰnJ)ۅʕYdh RW"K3b72oGMXW~ql}w{(FZN2r3Q*eȀFg5OЈVe%SOA;'o( 9&:-SRre(z[>޵Yvc8u J,Z}IVY&S7 й7K%1ywyhبm#"H51&NhOf]=i,XEV'xT3U#\VjOv]45Ir5ʆ\')5P&(ف?}|8#NW$!a DwV.ֿTfG:bM)%Ɯ'cZn tg@:j5ݓiq=Y}HʏAӝ.x#z&ƍf2@SCLG+m\#/θOF35dlg32?J6A/ʤSGQ8{cc$N,Ȑ6z:Y} aЀZ/*9oor ߑ%mjᶭG ݞ2VzK%ql6Q,Bc/i"#Nˆb)^ƨn^}t@0;촹rZ?yܠ 8+Cap  V}Q+efUf z` z5WL-QJ4v(F( 3y|Cɝwy|O>8pZd2c70+,-0KM0b3/]E% Q;VI]ĆZ\4.ujWH'($KMYbmb;[zMu\tYzHG9{8&6+G ur2jDgo M5?*3|b69nlC gMys?,0;z82U%7bh `[jȻrN٩'Y} (UpʸoگcШJ:G0ZjAw1r#Cly9ݑ2N3̸ _>rΖ0i>Z/JÓ XB@rJY =w(k}t,ni>6Nŝ>ngHG0;c]lRu ; }NFRЬ/ur@.bodҞw1FsO7N:NQOlfrhX:U_μYH΋O晷]K;(Dj^eԥ.BݓOj&d6*M-*t˓S(?Kmf:1Aʅh̾Wp̥ijtUKGu'\b]2 XHv>A"cjfӾ7AlX4e;a')d I5lO+DJ_ |³x#oVq#fԝe4 4>DCլfb]7SO ГA 7VtݱĿϹ+u:p # {)4̱2n pgi$ \5ݠ3mdօ[XbR3ޅ΀y 7Cy,DJb8L\F`|㭋oArՎMYf" ʊ x> ~Ә8K P+kӮ.?{b()63_ Rz]@4z(DT{9 (Q?O];۟NhCF5iߴxg;C  E'9t M̨Lԯ&5Jk0ڴ~̽_ϻu{ ,_;S!v g}(?ަ7{.4k52!/VV3)2tR]D 4kX¹2h8aqMXr<+88hf ="ѿ[^O{0nl;O6==Ǜϋ?E 4eH;xw6S>Yk@>+>;lh8c>ի:z{{h&`G7SyMKzt?1P#e3=Q1c(w0G]fK_~^] RW]tBhv|MÆ>a_pc+! 4)@ kcӠV{uzմOPgwzېi5{ίrya+|T."4yMkYg%ðwߚ83e=ZVHy*SliI<ȱOAƩ&"TXXhNkALEB g .uy^Z/]7\ߏBlAT4(Z𚶆. dDPMCi>4:mEnw.sN9e?='C9^o~rWh."3M(Q]q\ à_> SԌ>=%߅,O# Q3|_~H~" [oH$/^+7}&+ˑZy1s7$T6Gg֬Y+7tlڸQN? yc t+MWr]wdrUG`~p'?1<z@x͵(P^}Uծ'+ƟټkĺL#=.uHqq~aB;)W/23 .-[^_mEEOu]ɀd%0 yIDATdԿv5k|e˖_|[Q1yڪUHAAiN9dӕ͕ͣGry𼅤SOִ`X*bS^nԖG7VRPj-#>"W\lZ[[4}KcV烪kQ 8vÏP/8_V)uլ[jv ,6qQj7e L;wmHwqoZj)hk+nhY)iӦ˛o.}؉rmBt#퓒r#+k֬~z@deڪhW #bPc]VTLx3AFf;e¬gI93eo?]Of cGښ`G@kb 8q(?-gfHG;lR0Mhm4i%&M,Ͽs߽2sLٻor?K~دLWXۆI&? 34^鳆{-PwOi!S`SϝhvpI \Ѱ }{t7\ _ ߾װN[h|HdgZStw6z8Bݯk2k!ţDi fӡW;S?:MG[l Ӷ7TDU/Ѣׂ -{M&0] ވw і?2nbhu}x?@tK3?is@3Khw@O:̥OG 4lGh~7\7Q +NSֳ+u廉gxg_[+|0 }2-?A6V?sgY~gsUg?Uy^mo=MdfO0BgfF`뀲Fh>iN!wIzb@b`K٫`/lAʹ,7:EhQg"@;SsQU2G?>rM%C (n6--9.L@:@b⪙QRQOkjv66SPC[>Sern[*=C}=\0ƚ]_" EX4{XMwaIP%r:_7m^i 5#U"2'g٘D1S @IOm HN@"XW)QkP[UѺ2cd~7txH-sh J 1ҼMS>i)H=%ڹ"j umY-4lƘt+a =wKw`Z(Ճ1h>)t  }DC\,v)Qhl&CFHV}hjŨiEEl[Xfr@UWMTURLpzGw5ǿv\yn풝O=P̨#HwKUU[4ĭ]\'"`ڤ^#]:Aj 0U*n~/+WkͶZ0:ZT+@-f LFC `4hXcL,]F -:uߔzu`akxDc:G=4BGA@!= m<7jiulm8ڶ5OD@c͜LY}.ÔE)C=Ek~S?1ƣ2a !BSܼVOFcMhf20hxIMQi()p뽋 j/Yȓ=`PW` [@xYue3_ d*~"XٶFLe/45ksfЙQh8; vhZy.}p|VtRB34ic?BE0`=J[x! s]#e& px0KwʃԂ }:|5i15}z4wz!4Yya2Ȭ~;a[{4?bL{!@ kqìZ4uOYGTiMGnxVE rɮf]ĎCNJqG^WxC쨏?fO)HFrk;s0*h~LS.,Z*$eo,O~h!ݖ @R:8ƌ!X+#[gIzQw -\)G ZXgM_\jL͂aj]E-hwªifVaT(IÙ qBnMVbM A+81ą9C(e]%H \]W3N[鱽J\X9z@P#咨PT@\sCdzԀGӧIܰ|ECťAsL"aI#V /}LKpTraƇ57q ~8f4*&5t ;mF¤pP s 0Qhso ,5tpAab&J &o?~nz5|f^c 1~,JA?TDclVчM6ʲ}rxY]K#t'qhÎ4ur IhU%M  ay W pPJx_wADFKA?}QX\$}E/@SI$:Z~Kh\~Dɜz58b_`1؅.w9"i3MRCۋTHT\#ĕh0?`W[R~{C]/ R rr3tGOAjgJw~k׈liM?=Rģ *|!CIWKG'u"5KlT=Z1 L-gF^9KlIJ Fb;[dWDMcg+Yݞ&s {2?Z_ɛ"N\nZq3L#kZ1wX( pA+ݻ(]̀mW u#9e(EJcZJ<'4Pv)|Lb\fȎOd@cjG1ç>jihK8Z3;c=jZk3&t ]fup+D(jm Pi'E .jT-ꊷ_Vg2Dڭ ]ObXƲoV4Bցο"7zТT Q|rY8 =tmha=kԁś9E|DE4Z{̬4bsY4wș„Az̯ ̶@l/otԙ4pSV@:/i_CA }IԑBY]P>Z+sJ#08#}G=[:-)5̼ xL>ia)`a_{~L YWؤQeئgBhQLKu% : D񛔃[RJ /Jk)&?QHPK| Ndiu5.4J c1f1pD[[Ɓ*4 l.}0O~"EAr;L ɠyV_;^M&Og\K= {%$X *ù9<_9u .0z)Ԓ%vU<9~ݡQG+렉Ni_;@8qh4a @p@6˜h 4a @񊰚vq[i8==W 8Phf9&l98hf9&l98hf9&l98hf9&l98hf9&l98hf9Уʰ:(y=GјExx{L=UGhlN8sMYx9s1UGhlN8sMYx9s1UGhlN8sMYx9s1UG}%W"7ދI򍊻dїdΒRξXL:A~ sq2眬~';}ӯ$Iq2!up.~yLפꚤN: ~c%9'Y,kG@,|"e}w= sdҬY_'s&Bs-:%fIJ)ne 8(FXgH0 9w䦻/+KV{K_!d<:ېwIӷ %!7k"Y_[,?2SRҶL*|YlӒŻD?*xb='E:߆2o7I/ul$ '.׿ $sT߮|\V_|T'uɆ /tXr'Hvi*9r}L~b$e#uasLb39+d *t!C%}z MV{ɒ6mX-z%eJIYɲI2dz^ʸ\9Ǔp>K֖ɘN +?9[v ׾+SeQ2|t ṃ8>+Llzҹ@.N}=OjyK^Aϛ-7.;4"$7Q_TʂoLueR^\+s^/m|ƽjJy%vGɇ>MvY:5SF;B"iN1Lċ,_.s<V2yumSk^.|e|:yk2#E9G%;2#__^XijhaAV~^6>B^z\$gd'kJNYpGG7C2}a2tX/-uV5;$qpNtǣжUϬo.2,]&kfJX[$ ]à.'LW}6r>Z]; @KZq>(*1?YTL8WλLIfT4+-3ySAutZ uPd 6JݴnҖǸ(i\UAΒ9~aHSicpEw_y|b\ErH&3e)qmf|hX?1yiidϢ{6⎉:/IKV$fʢgi& ãdL=#A*%nmp$*U˺>o::>)ԕKE=zAy0X;3m,m-3Gixy^>xQʜY~ nEҐ'7ʯg1_%R)'gi_)-3 i_:qּ)~:J{ %wHݟ2q( mv" #ٲ# 6kKd|jC2Sdl~0H]Ӊ̯ L>Ǣ ]Ys>Cc%3s M?\330yLs63?, 4pO`%Y =# sBe/8 99LyaY˸Nzq`B;`,x0p%p@c +_g%_%R4`{3#JpwR?8?ڔ ڢ?mhmh6e4p4AA[tGM͠-#M~Цf]x?hSv@3hw@);E;?ڔ ڢ?mhmh6e4{^Q<8c"{E4t@3dSf#+O_D@4L%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxxu.Nwީb5,Yq\N6+^?nO8Rnn$Svّ-ۡIJ,H$X@>`03gHʍL<9"1?ws_Gfpw2+]@`j2oLj2sW˕ys`26pW+1Z̛3Z瞻e!_/}Kܑr'- w2!in{gz|*/z.jL/t~N>R7.7vLуWS?9X=:?|-uuϭnZW?wjjWB=iLұTږci7]4 '{xTݫF2xs|~>OyHʩx?] $"ւUؓ š"sǿ-w~1/z, މD£HzZ$D )9ǹ2$C5OOn{kn0zEkxqg d5(o{Ox˸0A:~nw'0ns6ކXn7O6T}@W;p_ 4@I>|gqőԝ>UWt>{iX_xe ͿvoOcoT;v|;|MF>t>`º ‰.a{0,zBZW pCee!,t>?t|(!B&*E`AƉb).;QKρ5nAk2$@$4.T|'ovc%`XL|3 dEP[ |_ ą =QK><}2HsUoAmHt1,m6aQF;1" ml7;MBq jVI +(K+!GJvs+0 +pAW&sm?E "q -?!Ɛ ET~\7C`xM;my `Ř|mCo e\, omFdF΀-e07ROB,'w2։3򷡋FgHz*A[3dl(1nhЏz34"Dp1YX[MaT<>ބ.(uyB/`0}5o݉%FiGЃLAČ͐ Đ]Mʄn#5jCnئР2ckkύñFV4P`ye} >n!]?+ 57Bc )6tC(8Ri9D|58!)a$0xM\lu^!ЕBNClًEl m)+(/"Rff4o_qRҒ}3Hœx0Oq7DRS8&ogp;'zMCb!DCx/QoE6oi,i0 M.X`DB+Ō D w :A{@28oKRbZjKU$ج-l/[{j F>{z|.ޞOY *=*\,R2AU0nb)K= ¡S@&Kab)۶,7C:±rx>T ?Cl"oz zzo|#1;V*=נNf!@Zx ]]0f1чCeHz`Kxk~) N 2KPH > R ўG03;v߄ؑ%.bʃ 0PTftV0ԨKpEk]@0ڈ QR^D%SȪ[سqf0 VƓa*Z w.a%(h)PLcW0ZqX4t1 L P}4((SFZB}=C8:QPVn^8w%wa05{ [Q:RUX޷>$IOLL˅>  4<<=37 hl<'GَZSIi19zBsU1`jqou<эG3@n܊Ҕ+  p+j?|[HOB?!R!PbiW؃(SyR>55u0鹮BSKBO»2 SPW 8RTsG{ ysM%MކKYāvy)毶CH#12{ 'pcy B*4{pyXO#$SLC?3#Pۼ}^7$r9t~ Z: L"Ƶe4Aq%Ja=Gf8IY 0DPټ7^@ Vm`cߴoM3( .As)SˉR 2j7Zo]e8TLR[I 2tȈgTEe號dX[a ^HDz]G$BV*P\y(ƇaPj!s1 KlZY@ fJ ?zf@30 n1b)NJ& fl(H44-EA.M*EnI56eFF Q$ \$A$4-,5|cL]O$TZF] Ua_"n=c%Pa~!; n]p#oɆ/BNObkŕWz =^))bH=N Fz%RwI˳yH&a31mAѢ `N)nv!<"rc'\8#DaHSvBYt9yH*5naZو,D0wzN= /CCO"B/%QIn۪n!{\ل0AّȾ 9HLr,`b3O !ϡU 4iFief$!J~$툐w oۇd&*N.Mc'?O6^(opin!NuuE>qo/9o~Cj0*Ԑ($]9 ӌxN.qeV@cql2,}Ta kLUW4=]y*X²߃h6>c^G BDֹPIOK#3n/2/s҉E~Ch?>?߭M;Aox $B_^W2GDWLn{ pXhgX0GNnadInŶkȿv"n4T?:7&#D>RR,X i:$kEVϟSF+#} 3ugt+x%m_V<Ҟ ,ֽ2|Z5zTN=ν O]qHfIDPh(3whvhiCey..?vrEU[gB߄Q8)} 2w 7!t;鵄BXtg";r}8jq<+ (wcpd44?=X [!8GVfPCkaꁫI#~'((FzX=Bf$&km/V4 F˳ Y~WAɒ|Aϻ8T7:~Q:NYT ˦QO5MTHkUg!ۘ҃iK ; ?cf>0_ pkUpT5C&:Z|sO{) r j)##]5ߍ/ܬwvc ypKNm2ffGq|WQBeM-o`rvO)  .2 , H|§Lw;2{#@Nx) 3ldSH x<ilmaLvV*ns^W[Liu)j viz<BL5HxX,۶8b.Yj%;H%2x"N3L`ET=grb韙noecH\Țiyiu PO/W` s<0F\Q@ [,"I쑺5L%)0hS[ eE`xX< S8 *L4 K4.JZ/;gINgMelc64_M6zV)j>kX7IzVT׷lS ;W ֏kXK/1C,rcr\Փp#2,Q(@W E<[fVVYTxn.,;)tʱ@CGb,nbr*S.j:8|Y!<<d #qZ[IIՂIncDunn[t70L@<f%>gbx*=rK0SC`)T <]rz-uv!t2^;v},FgLCFٴ 1⎛^ R:I,rgTӤD¨Swˬ$N,k}1hj1@6<"m"z_T@b%DdO0UN\MpzC2p@V'agAUβE:|d5'^hl拨軂|K1 < \csYZO;]`O*^i? y9΋شi)C~H~ЗBE8ʣTy _ K* X.>L+24)I0辁&C)e2f5J$ i [RYG첩E9W#j"X |7 m7PQ%6`K< ',-?.EYa  ڇgކ[g ;\T(g }dvo!Q_TW&*F_Yskj4a`-A`ۏ O' ^yhVC^TdrT̕S?N@;3>P<Ti!, w3_3HN1.ǩ68"(n_b ֶDaUūL] R)Įqaa29f#R21沫';=aXL \!fie,g(Q7`.1bj r >49{yAA;,հs0*WN0[[PwĚK`f0OBFu2"p{[ǡ p0FRR@L 0'IR0]5X)kf(E\"̊tsd,/A9 mi DPXEEU]5ka<) n G9Vڝ0A[^M]L շհQv7XNMw;6U9/G$e,.CUǙwxxeˋ\Q1,Əu0-m9Ȥ̄k*E  %L|X-Sa*Gjd f;Lk1?YH۹yr fu,=HTS0n8R"T(&U;NaaTr4VnF-lhjvi\%D0ڂ|(5X>P,<uA88Ov~ҲF6CVF2!4>"o5<~1\pT W I*&Pe,IBޫbFFߤgw! )#T09,7ٞY oڊS$>6щ\ΞrC=gdPV$70S6D+q4*({ ]E)"&B43ȩ$BZKqc ul˵ٱy;{t)tN `OB!fzCI‡-3k BMRN6޳/@#|HQ/ }QӸ Jx,d!LFF˜ͤ *7Gp;/ e_a ,IQf_;n@@ :[Аۼ m`+KȲO݃pxg!'ˆx ,P"W"v^HIJ3VB".LЀR=w1js.Ӭj+RCPdSA=ʔΔM٦8KT9Y~Dm賘QʚMhjS,3=^),,ֹ)Q%>컪؂(Ki [AO$5@%j -5)-mXbSmbuQeF~W< tl蕓hTHcMuazz<72P>n. jSlsK3&p__ =C- nf5B'~?~jZlR+-Gw | R⬶`4DFz$ G7E"AI$+98'HYZ (xۜ6/&cjSVE~ x5Nb^)4^y\ nb7^{TL\E]`}I<_9[B\,$&m i$2=q1{elvS9'q}~$״*X.y%uZ~. >,l.`W+RkX7IG$ʨ`ӌ܏6MZy i"&L'u|MT vV f|G4(,mcXIQŻDn2Ek2A+9VPEtwl$AᖔFFu,bZ/,$sXOXlu3pY%g)mQJ)!]Xxނ^hx~u.KDwh`;" fenY"5ӃQ6-+$LtVg)SSj}8 1u ΰ|xkԛ*[@RH"(;8m"쩃MsƏ8,D']GU 4Y6Q԰ y>ouZtab0H0cPro[MLHi:tћ8 z9RD*$T(f_ &{>L{q]Q zd HM,J &9$R^13,w]I H |_^TΘ:c5DAUQ~ ²eO"tKR*? Y)~? % 1{r >C6kb*m(G8݉a =nӫ zNbzi7sr/2֏u1Uː%8MϚE6%BԽDH;A:DvuD]FhDİq~_đ/1: qr7bԌHY-*(@SJ:D[iQ M-Z/B141aL)4G&xI ߱Mb Ab$x',&=z72/i:Dp61wS6Qk煑&z !=P`߹BJ2~Nv.U0?i)[TC7wkVlb9P +jq[̺L."eE iD( d395GklgǥN–p mme{L퉊TMqMcwIxnZmAˡ*0.hyUCAPEȫ\cN4I; \}YJ??AL-q?ZEcuʵ$TY){1k敖:EjgmR1qx_& Y4DF8ʛnG8{NARClaj 6qQ'?E^6Q6,o3Ffl24cd~ 92ﰹlQz:HUАQ.R]Aa4 cz0Tj FaZ `˔WͯFw˷C=\N%,$rVMM\cY.: \^M6x%2F.-E]\+I Pk3R(E\ OzoѦ]lh2Jp3䣻!r5iJ^k$rp!2t_pqP}W1F [y.K K)(yKcTof3 FPGVKݬq>̉sOI*\$v! vK6XyR?򁐓'ꍅPĎB,^9bKT17k$#%gu8-Щ&mY:cV[csY'C҅' @׊bmAJX :|~ t]b׀>yL [ *$Q^KN7͖qI'31VlHFl?';ds 2ہ%$F[Fh<8P(/"C@߇6d$aS~r{sȹhmPB㑐0"(0B8yd} ":x#|2o#\0Ԉ(4R &1D\dq7Țhؼ\c!y.`xc]i oɧc-:dy~9e l灃0XYKJWCsN}<\fV)}..&dLhWp2&*oғS IATSC4[BF8 C9kGA 7I3gdb$i$TElOȧgCG%ϮO< gN.x;g1eZ)f1 3ٻI".Sfi%>M8챸]".$dG0W8~7rfc^jz8Yziq:LQSWHb\]0d(PɏY)L"D,LrB ,v$Nhv`*ޜV3Գ&{I!bf7(q~ַgĊ=ۑSR;&'q?FYTM'8|ԧ28L>m1V/CRf=S:aE\ !XqC2`bńwFpgmLbqMc4_ e%'}y9lqjy*ܾu3y'/m,' +x>J os`x޴?Ԭk4~jl_D16z٤ ]ԱX!DiNK$T-pD|ǍrW7Z/! y& r=I(7 B)c(`%nԴ m)bίtqvccW^Y[o;vt 9lP[P  T*бQ)v̱b@8Ѵ?Vx~Ŝ}O&kJM S1P ,5m>=;Yg2#|<&?CBz`#`#J D[9Jj~tPQH<젂~JkHjA&7FX8\(%GkX'*d)1vg3V]_MdY*)+e e_Ϟ([7R,X^pr1J5&C)*'QQΓfz#;'/yqD1$hi`B@bߴE^p{&ON$Atq98Bq#is*8a) Glfq \+C}ɣXo"@Vy} I5,St*.t>"`-)JC QRlI=lJ7EN6O4(R H !ײdXGW;7n =%C'3?qb|.OTJ [˸=ĺS#vR+[̗Ax,+$v;cg:ᙬ:8CM Q{$88+} ^hU&DG'♯uݕF%CL'xP^ )|l:Яn+6L簬rYr9]pN'iC.貭Q9 [p?'s~y7=^l5B׏B p Ѓmֳw eqv?ivUvBZ5Lc~yeb8=j.Ǎx]jY9-,}QE}&J,]9@|HJd7֥"[U5rykY'Z wԦm627b#?r&~"u)ڋXhÙOe3-aNl nBrAl ]"TZI 10 %Lx\nƗ^$'H:9aM84?6!uÑ۞OAHOlrǪ+㐡.X}WoٿjaB^+?dyXEرF$}o8϶'hٱBbx Mɜ qivxR&N's#m(fMo|=fg" ":Oi>9  k]LX3 \k27%B;3hqn2:H/sP?a=Ͷ{&i;99k5>rxK)wX\Tz&#s=PkS>ak7m2fcV#6lڍ6Ud[0`1kψ N l/xW>< bPtNae; 87RF0hs7掆dq(:,`2),Le,u VLNRǰ([ñmے}XCۍ} Kރm?yPA ڶ \t ;Ybacs!Ǔ(\D]Zn \x=xض!:f?ʱNUY{>4XVbK6XJ~[ HYhdqoV̼۞=[#,USOdw9 4_C0:r錃Cn9.e#y2gF`\q-_j_|@o61k/"0iil5NE GNZv7Ge?t=,+1܀b_O1?.N~h®߇CIMϫ"KƎNІ:쿆QetXOEel Xn6m3Xw㞇7 v.ea(bOżcp?CYUr݆ckp};OW) F6"KEً_]8,>Zʹ~܄cV\k4v"-dxEEjʳv]w=R"z?)plc㷲.]37I: W,`z`qWsuJ۹6; ?O4".n&8^5 69HQ4XSLJ$( YAN"wx Ec5ۛ#ɳ-xb7Qʆ&/g<ϵEyhjy7D܂% \z ܈O^~31tA)]6RyEf7}42GCH۬wsV28R%X.+/ȼ;ՑlnY`.qYͅKGu̹9zݬz. !A'N >$GJа o!I YJ}tQ<9=C)%3 "GeUmnfJWhLMNoRvw~bFfRyґǀb~budD=н0ل6l}CvCԃ0::3?YH\܇MR6n+#HޑNW7K <0S@ C諀Nm0bcۂR`!QNbڥ`ugn=L"@^ 6Oi& ɹc:ls~biH=,ξw/ms%- I:`b]~}. mՆxdpeKa <.n'PT-(#29lj|^L)g9SWr!:TE4> ^.Y5t)!F" Ic,Fh@Tf9"&Mq'rR> {~~<> ӻ*[*CO'?+~?2Wp0U=`W_}5<|s)هQ%?[y7&a?@ataŘ9r;-Ǔ\{!uCxh[Hz@y;<=nʞ3g WQQa߇z-K/٥^<Н~c?|5'?It{쮻ц{ 90/r-N!|@sɣ._gʆ J UV[[놩q'xGֻ̮Z۱s'qカkn`Ї/n2 Kq]Jo 7˗V IDAT/~}_kիO@C| NqKe6V]2f5Npjlty?w"XqJqqxʥf{8Ss܊U5ҫ/7~53Oc}!\ϣ̀ޫa`3 <5S MnGEw i[-!Ly$~qQkd>441XM4KGirœ"3WEڹ^DOCǑ#G@mZɦM/ߋnZG&ʦMw8quѼvn/|n`Ra, /\n?g/<KlŎ4/ Q(KT)D/z`!s^88O⊆Qcj.[RVjGi~mP"b( w?o.X~>ry_nַ%>"\v0<|=ż(Cp|534N)/Ǩt .c>?}ϔaTa~MX_ځ DF;F1hp55!:d݄s1li={PBϺ'>q6Mn5s 53!`Ցµ:*gl:wʕW2ܜUDmEpmwfeY#@b֭]&J/`ՄX0w\:v`~?p;I,*;%B*HӲTÑ&>2П9q7T0 ,2zjQ9!^_$LFd޼͠/~dI H\wWzwj^篌T'&">};qÕS[B0Oyku$һ(xC k `$bП[ֻzW%O@2WjX5а析[Niw~z D"p5W3\~Ǹ& I~!M|(9#62O~~Η]|hՈɍe<8/yü0~#}d>#ǒks" W`ȭ:&o"Fn<\WQy_vy%2|t?Ize{q1}UϽ~^yqTDbrp눰S%5$TPӉ8:ӗޮW;J*̥pq8(J%{y.Cq\|@pORA‑Hl%4/dӗ;UKp 0(BVg^yOld'!8?[sRB0:TE4!~t&-uΤw,;M[P ,"CI|sv.Wuwĕ'ۙ"33KI ޵[@C^{?|A7`J0ЁGp@M=EZeA;)JADvp!{0LbFIG2b0cIEhT)CTf*5,D ۇ Vr!tzQ1.ef5YERe:x]"zb'ň؝t:RzC P(wbNJ B#"$@Y<%b#%Q ŕ(j:D?@9p)! ~rQFjqN* U(уmMh;\ krk"ta6Ȣ!ꚇ-Jzl:lX;F򢮡:5mFQ@G0V/AU쮩 %*NCgյI_DOhljCXE9a;lniZzVJbsȈR d{{4b9)l1YAJI}+\>-lm1kڮp5Rfaȫ #f'#,]X*=88'\  8L##ہVoTŠ%1`XJ4`>rkbᭉ!ޚ졓yh90g3 ,8v` !Q^!R_~ ? 5/}aۛC !.@XPԏr)GsV(չθ<`u⁙CϣQ 'm*d #ykb9I g*zvKUb8.`dRl/C?جq  L+vEHnRɋ@(T*SXos*joN xzϥ[;D`#hyT z5 bBs:2 K75)E&tt8pR5B܇*!-G4o#"|]!'%㭐 yc, XUwBf8[8).Rp&kj%Ɍ~e"\>J"ߩ\iH1="=9/uʋC^ᅊ9Jo ;y7 p N0Lrck .V@ngdOM=CwS/deB0in{;jH6_AN=L $64>'K`nCa+{^ry ~qgD Xiҫ }?e`^0xou%)Ώt2-=:j!J<ZTӅ{w<jX hCյ!,5+Xbc tD=T5LC=(%+%FS8ie9~(= V {U> vybRY @àg$TŕT;+RrC-hy:TB:LpRa,I{> m:J?ޏq'W8`,_մZE",a((ʂK0Dl"# \bKi4.[3cs]Y,ip@w ~vt:8aa^ ZRL RzA '=zE\`ZzxGp )?b:>YOtEv<ؿ&6N|_'rlcm޵Q+Fvb{(^8pҮ_zL$pڽj * 5hI`˰X6f9m܀5` IIEjIDˍH}[i,pdٜ,}bOG coGCEBp@D~C8U^Ӂv[q'+,YL c*8O̶ -h#ؼwp#H8UYs Z:b„am tbyD3twg@tq{!fo;#6grV_ L^q:C*B?b +UK߂3"`}U:;52g>c-Ʋfh8mEpCp> a<Ԭ<C˸!le+xSv~d~Vi$ "U!'WԞ< ΢;7ĢSB0R{0m_ylØg6`y:I0`6OrS!FyDۂ.VbXiAHQͿBxC[C6eLDHa0,p9>"f&c"pŊBXR+[ CT 7ˁHz :B֜(a>J=+ EB֊Dg"(ML1)j+1+uz\`\3| ݘaq MnQCtu" 15{Y; xaxR/] CU/ӋkSDEm|5h FɎ ~`$+=KTsD,LG:n5&uIv``$Esm9D8j>z|sИ.ik-3畃9s)!:Y1\ʩm!A~]Z!ÁxV1~ Op.3WZ<׵?)7B h>䧢|(OjC9+Xp!&\݃RDnH2 ԯb-.~L cG] =@AT`W>Cx$Dq[AGO2b gS‰,>IBhyΈ[hRF0Gt¹T9~=].S_^qOi_Hg^sͩD<<YĵDHxޒNdNk%(sƝ`>U.Ly`Ybڥ10z fJiI0&1+9M0i3&t# &Mc@`Ƅt4i`LṆ]A"C𔎕@`Ҥ0& fLJGNLƄ4 ]iI0&1+9M0iP01PIENDB`jqapi-1.7/images/0042_06_38.png0000644000175000017500000010420211460407074014634 0ustar metalmetalPNG  IHDRPYiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxypy}w@h}C$˒w-ie˻$+O9[k]'֖6\[YZD[hM+ )8\ }u}-iFF"q׿}}}&=}}Vza{ϝysϽv?{Iwgf4}N??ꠞ{zKU r4~~U>U-?}H'KLcnW?/i=LmB ]Ƨ5w:3^Q۟ͷTK!azJN;?wC:jY|?&&{ }ٳ{7OO)=@i%>&EXى/oI~o2l{Lg:n<Kݏ/? ? dg\/Џ{yּy,?NR9?c>\؅s2̿[s/69x>]fw^k?/76/ǚ_>;;1}?fܟqohە/|uhy{Y.:>|X}S;W߱LsǾ 4{0盆=WYN/\Ibs^x]/nʝ?҆{s{]Ixb2?X}?duY`b?wz~3~L0~9u{ )Mx{}l6\1^ QϳzhO/Z 0gOW{~&F1r0X^\٧Q;ksJ3^[,H?6/|Vc>pʏxw~l31gY OfqE>KpL__v31~Z94E}# {>:oIc?fW¿_0{:yc7ƫc(_$կҟ}R'}O {4zQ4>?^ދ`{l~R<(|i?1l?4v85?4cwG3Z6I[ <n1~Pc8.0UZ?i63_ma_ϱO7?{]cM^߬I6WV_677Q\i]ӽ/d~k3缬s'q qC0ҭ{*+>gi~ak݁=3{Fs߷l{Fg}o f}߲͞ 3e{/3=;g4}^g4{6pw`hྪ:qb{n^x;x=y,N=;x=y,N=;x=y,N=;x=y,N=;x=y,N=;x=y,N=;x=y,N=;x=y,N=;x=y,N=;x{+_y܎?&ܳt/o?q Wǰ%|p/lhܵy`lhإyp/lhܵy`lhإyp/lhܵy`lhإyp/lhܵy`lhإyp/{>ѐv>X]jT2ڮZTXM+u5NxjltTlp&U/U1\MnO@.Cm,Vn5˖Ilwhk世gnhdkM` +'gUU *7t`TeJ,%Odt%KEUVyu)SkS &~^A.w{dT};Crm,>vS&OjŢʳ3poP{*.-bJ޶ͺ ^*f*s)U*hԱYa GJ,Jgb4?bbW6Wдle ,,G&nT6ѬV!FSpd7 g8˫@SZE93xIu<:gO}S~ѩ֪3 ]+WwyR ZRe ņߒQrk?ij[sK2Z=*;Ng}чTyu\bUU5IbVޕRVã-k?U{Roh|v[ y)U|1 eE-VsZ1<O9WBQjE@X^]&6RצWFNW֮vn,ШnҲ,VR`6n=y3]2|s-m=gq<^Py^Tֵsߑ-e1cnY F4(<)شS+ vP9Mmr٪ZY{5dnp(ʪTN}xZbUyOC{rJooÑn:yEBNպU GņER 5f)Fjզ-ǎɔK& j-VK#GO}q˩z*YQ{3kKտSjc3 /̪o QR֡sYתyBC"F<އQ0u/ZgQq#-L(_(XZV|]끈B!]cjӴ"5ue L!b7Hܶ6YYNNcΫ!-NkP"8";!Zn.L;[\Sf S67JoW4߹_݄-Һ̴6{BZ++*2; "xӄ+'(gNixp_NzxGΨ]|gVK×NG:ׅ5G}sL4(㿦jR'1q}wSnٺj64[r~WmGX2jn'cMO)c^8,}}^/a)t,f3,n6y. )yڼw|?F)uE7R狡y.K6ͪ ֳFU7cW= AfC3 8uV|tOXh5rK慠WZmv_wԬJ{ƽD]Tw{P^*ͤٱxg4_oSh#Ԛ,||a5L)S~\G%Bqs53=-ЫyW3V&3+˺ҨauxSέyy zQޥ)U< B;6TKYuK<:rU9IM1Ž-٢mWe2Ek(3$*UZꖣ`E`PqwF˺.=U%Muw#Vj6Kmo`:A#7@њM  M?~^=Q kqxȹ$vwfũ'0X@0sT;ʒyBl72"^#5VP*m8@W\pIzS [kRzo>ɩ)MTz鮴qQLaS4rY`Hnco=%s*T\Aۚ x'r)Iծj.9~#?Fc`+ӪAonR-aٹ o`獶6BAP]t?\,w߲zG ŁV oMVD~jdMB]To^s7oV|?4 V+nr`Ꭺd*aJ/7N-a& cf xoc86EHLJZ*&Vivj)vZٯh6Rz{e@?K3 zPv~u5]jϑa,">zd}*/TÕbF\(J>fkƘ;WgִtL|B u9tӥU:qF\cGiTi(Zyx&JOʌ!ԪeS路UYt;_R&OHs eub\lU5E6S~T^m~o*0[VmLmܝCr>)O#Y7uwT@p&2Ɛ7a碣Cj:x#6|F@6SdAT2*` wO>o!&ADo^Ɍ'N, H+3Sr9yBS'T|7 "G4—L,q{1*l m&da1&d+K8/L{T9pLax dCQlӨͥ7f_mY2qryVd\C>S;2]N ҕ|+ e 8Nsx5;̩ZQĤR:,Y9ӑaXt "\NM2&Q((!`"bmxVzGez5MQb:gn׌;!/W/ %9BN*]? g25* ~I7Ѥ`66ejsﰵoh n *l߮&ir \Fhc0f60ՆW9]' Dd l.x{y|Hg> vhĢ}a7loc# Ge*NT\okܷ&hi4}33ԥㄳvHATWUVy1.65&۩met0"BI>LI!<jA3ʒY9VgZ bq 7&o&:ρ1X;{syV>2\[u^ƶQʜV0`!8Bec RpLn_%(,&aiU2QnĆّu m(C⿑ZyɎ`=oJs[>-~hŮ@X%eFR1ZH,1|Fk r/Ck?/whM Z\AGTx :ۯMȥ;d MY)M!߽{]#=%Kz9G>wƲ6TfR4/ ~hxX0WT d|&9ٹsȉG+׵Z"s95>u#r8d!c*%cwT^zY,z89R*.-=(bVyX[$92}\>tEQK*']/ ĽQU1~\B fdaMؐ?aOV|"7_V@{T^Pل;J|+/a#\clT.A~g[ʂ=*,*3V*6ڱŒN4^ |" dۘ3%[Ajmń jsJ6JZ00߯|Wc9*nP$9;o)$; Q٘2EGrF7I+ d^`(kɂ{H#*M:%B++xig4`e2m.;AClRc:1ƴ8b}Z5B(s`t)Ȧ$FaËm,R'J 6YX-神C*߲4"P7 ( <`:vFc|#udh+:IwfG4Eҿg,]o׉PYUoYB^Q%ד^#; %Iu5yeI7*9̲`e}.2Q.JTYmr[YuD@+j*8C{kʰi7lb*ba& Vp?Mn%*`/J_C5IF\[-vp^3fs@:I4۲΄C-HV#u~ѐ;Hnܽo?7Ƣӽ66q&7mnSqvy< g0`dT5Yvջא4눐ՐgA<$}0ux5$\];9:RYBrS{LѧI@y]jdoI}:FөdġѥaB ZC3pW_!?P/@9ĺ@\দ&dZ6UF&/uQu>J_ѭK5y~hV!7f;? yJE&9/!U* r-FpidQndQ&6b;c8`M# 7ӵ"sGwaMmy.b~0+)E,6W58.7{@sN-7yG$DQPxβ]X#'8zxMP׻k? _~7t0^uF,mSRZ $_r s C1`'saF+#GV ֜2s~pu`U9?ӈä3\# q/}[^(=ӄd IDAT#ܤtu&[laMP@on*lo6\C& :3Ҫ606s"$lБOJ&I %ORxIݡ~!lKzmjR= #WxIſ͖(}Q Ï]5ld4fQ44(E (%j&V:(Wr,Anbb7FhY^mpi"[;]CJk)^3{V6!׀\-t{틔!VZT{48jIl)z8mէ6YC?\Tiҷ .J>sָqFRx]=Ѻ,ђR3ସ.@2&ZƆI׷l5 fPm4T4 .S~d"eh`ƨ$Jjiw>zH! Ɩq-Sף;t-,] cx%)*BOtssh~=K5k 0ݰhz2xƺriaadFVrkyAB6 OOH%0Fm=.z J N o#4;lO_V2&83;bJxi5ilޯ 4ɟYkB*ͨakt)0M:YJK 0A<Ȋ]lK^!&K q?/_Rzp@/쪧dIT{d@\_ K3r*b)aXNF}FAeL>j:z5bn1yݾy.m@* [yP.Q7 +ƪ2aP)L}舋̺mm2ff}JMga#_\b5Ţm9~TijXa=Y!hlЪbg a5>g~Iۊ!ѠJ)EZgVdˉ`(Ǟ tWvE&&~܆㺍 tS\ṞIguqRHd\Ik (Q քܤVn(rt:?y벢]LvQah` Y5Cq$/ݎ\JQc#ɱxn /3B f^0g&`ResK0fW 8HJ]aQTejdF 2mF% wxU_<ލbf޵Q-G}oԘ)(^vqAZ6()oP'՗)k_W?|i0 %v)"2ŲB#q6Ҵ~8S`sghCFPgp5 `,P1}[ؽ~Y3~.m5LԽF'[.@_ WH,BlǪbnemBstJt/h<9}'.u7JAe=CK3jNR  ib]4C <;7(wnK,V`Ҧ5E b3u`5t:Գ N]5v5d`ڂ|k*T/nӟ`ʌABǞy\Vm ˯Y`us3fG[mBMnZ2N_PoR}֨XT|udj?/hi[ U6:0ƒՎ>"{_N`ޱ6g.kǬzks1Dhv@cXBw1]5^r0oF$4B' %s{}Cqް\h1שCQd$הIwdUBD|=:ЙS*cB3z}e@Yu2 h:65BF'|1MycJ Td4Bl ŀzKbj?ɳ~(YVLCd)~KgjИOI^:Fㄇ>(Cnk .Hj9-gt:H>@\U5>Zޥ maϯ&SgB^壏ʆo-7dKSnu40`-zʛ*H.>F`~g%,p[h_+4$h;U1, ,[ʚ_kտPkx "86rSܹsT' 5 c҃ P@M5oȱɣɪi}AibI]ѐF|dk o4eMpFhQ<%251x#ta֐.Y*4?vS60o14JmCz[*]X׎~niIߊH;lqǐTp6{pIwD*m%[?Fc4nvtBҬ}Ks`FwK ΢Hbw[6ĄI.)L! cUGܱG BHXRp@k^eCA C=s<NMiSv#AK.sreQLk^eI-r s jN6K@*W]Xԗu 6pakڙ`ԟ! fd 6ZŠ|$EԄ&I-<3̋HvTO {=[s"^6D B9bD7]#t#Z&۳xҝ~쪧ҴM+-Yayٌl GS)PE>Cx߃d< i$hEii)eeS@V<!k)sr$'`&';%ijjQ#Y::8aDsQ&H-siC0w0 Xqc C/'-ɣ.PRɟ|\s5|y|>>~W@FnCAj]C$_ r_NvFc3lњL#(BX #CxNGiw4Uꐗ&5+儩x:uE0[RgMLfگ|ϳ@0AemI J-i \d&1UBxVH0 ۦ}E 겫Q(jXO*1pXH.sRNjpcWq 3P`;|v0VJ9_/ lilS)]p>NHb ð#Y[S79UKchnIv{FcX JkQWQQ}n8ǘr`=r#2e' BF#I` J@;Md|YdMdG^2a vtˆ`K rVvyxAY_yAN / PƑ#)c0Q'gS$4]iY:G5{`@&fꍴ>K3|NbesԨGu#jYF!*",4f\'[SwK ff" pm B Sm'?qz6Krcm{[`0:$w2)/B xMy/QT~b{6V/; 5U澤4ctu8 #ڢNsD7Cs1vVIS@snda (}4*> bL{;v>#Mڞ CU,هaXHIMORXx[W.P*AH.qEݨ^yYۃèXp/L{άV:Up:8~e DmMUή>lԘ) w{FÕBFzC2,:8g2)S61,gH+,\טȦ!0^?8c A\T21ݬx\]YRcdbbdлq:͂[o"amx m5pbdSt?uwo1k3P8<˼JF[dB)5}-@2K2E1洪6K;_uM'# | yIR*K*hOGY ) V2&04Y"T]u 6akn1Ҋ \E2\YV6p SId.K.k \/Ͱu$[m㩚{#\:jdxIy1"Ffic 5=+l_o]4-L 1= ෧E 9iB YQ>DzU[iEhĈt\1zo .icb^'V j\t&;; Dzk323h--Cq#`(!@dio_AдVsP,s_8)GX݀R3n.3wQdRVM"o]$^Uljbf !6@XR46OQFj@Nx0X&,yC-^<ʌ+;g-Ӯ gr)mhё]iKŸFVN.k݌2 `n]F6 htdk"}U&)h(cI^Nt`l ;;zZa1yo/2Z; jTdRV4nGڙuθNjB5HJ xZ<;DA-5~㪊Jhlj#(ap"o 4 jC`Um@XL!p@ԐM,Ԡ ititƸ#sMiz )N?vhE9W8#"=h2~Bap)W6aZd*ϥGF :ɪc -#Ȳ \-/I@ qK$-){he5lN4!IyG:~pkZ ,hj9C_ܴ=_ԛE;3AP]ҤfTd/K0\Rbt^cJkޘEᕚrdG0oÓ v&A66S~) ëyT&%`~S#Q E](6xDX@Ύ -DsKey[y 2;ϱ_f!)ʽIQKVH/'(KUڪkbz^3aĴbx8jܒL1I,-Pxj*!+|k35N+P[-w'A{4D؜]SaJt5ةV`fҌ+)<)  E`' p$Q@[vJ$ u)z}-|JaӿHpQ k oP!,YL€ ve9:cPsx[x ļ%8LkŮ**̓Y_S@3AK擇R@Ƅ qb= I-\>@-NK]h#ԗ4۸H7(s?8-ӏ]44 fbc[`~#OF* 6)C;$qu^aAL>Y9NAѓCmRsnn)bVG՛JM _xkL#ŁexI #fç(LghCƐSI}c~a%JmhvG6^ыn7NkRx/9~D,KOo9um Q6>BW=#i:%NhNR S D4Yy*D(i"Ԇ:12*#Jg3ZU $TWYs8DS-5yQ(ڣAآxP Y9*NJ0|b &?jF[mj"dRPsCr+o_ehp{NH 5[)SJSvoilAZ# Gn q_b*X($Rh5V~zl^. ]=ˁT! :B09C]낥kWk1(0s8)Qe @Jf.Ե <]d/F5S^;!Og8!P=O$~ahgW9Tv1bui!I7۾v[E2'jqBC! vA/1ʩu2 n'M}^x`LF8)7]W㴕 J]PTIW6tBURǧj &IQKHJB9 sn~~ɜÏ?'_TˌaPq/ۚǭfv9U) vOS):46"xl@99ܠBJmͭmԬt T]8p80π2ܒRB P8W!anD`9N߳,imοVt> &y9 ƍr+]U躰!Y`SYD67;u9sPBV^&htI3 \E _ Nyc2Ѽ@X:mGZYf1|Q&'la (MԹ[|݊#+a*"/ny#B;qK!d7N>Ƨ OcpA5Cwkv CF*k;Q"DR>fEEKgMk`y\!|e&#`}Zdl~rO+igg>^X(ӈ#Y?Pq.(52 vcZޕy 0|(d2CEj@ kS8v+LpV¥[`3``oh|O5C:`Dk2,N~17R[M% R}YwӜ+0SP+'xόvc>y?Fk A B n@LҊ1I` ZK1 uC0uQȅ(pk7%jcFБ&[x]4%4lXbwnrj9y-d2g凛a{|Q;ф F3J6j;0 &]d(`樂x Q5kZrVTWdH}'Gj?:@$?F|2UB2L̐s%[Zi{"9 +W~Fm~48 i:'&yr"0H#Jx,saPGFN 13ft66]`e["DmMH3LK zbB[Oeb~a $C[lG g< d,#GdъcT7b^47 ҄Rx! DrM a!%v-<6yI-#s;r0"u]km_d@Rk򻿦S ԌovW7]"0a47}M.% cmޖ~T5Oáh'W]Ud~f<1:6s`*WGyQh:X)š87Ov{W9Ic'gƌv{Fc 3m̡!LtḀ q]yCU?pkܘx(lN2qjyv6B ۽l4yY MɋobqO;sV 8ynXzLp$%qEo@i-0رO!LdmCoD4`)‚楯*lQ0VPpmfdk1d%D/!9CL/`:y=te鿐~]np.'e}{DkZ[mұ:#;n Qk~mfwS Ynfyi%V'1& c0aKIfB(^iB\tBm NR,y }"z[,z?Sb0cL$ ܐgT)MEH%f{_"Nq6#_-lV\m+VՃ~[-6!.B"i3 T[ߕ++{:kFnO 3wJZ(f,blCƙ #-Lt#fQRZ Ac/6Y3}o^1XPwk'ϲF/2kh!xΎo0K`pMQr5oD~/G.V~1 ̱ JAm;h؆;9֠&yxI5zr¿L f}x+|1j6cu#f8- \jĎ>kصۮZԾccwj}ϭrjĸOcNkgj)3٦5ptw˖̴w@lh"`Q/VR0^6ؕ76 >)STԸb` ub'6[ 6KU\ag(S|Pc=F+;l6r&WWŮu=,[lnhfҗGG9tTq>"$F4">L\ϲ*⃊ŢÑfKA@9!fΈ}'G4Ʈlmo%-r\o3H[U+&r:H;PteW 0j.5LC^J`F "S/ޕt? m S{JzQI{5@^c4 ٵƵ9! Z' h{ bon.ijL-Sr5V'FC "&.A:eD܎`]gMܦd7HuvOzq!Ї2eמY.wKmHM I5T]WЬ5Z'%{K]\I!pQ!;]qpZeQ\x'g17S&|" W[‿=f$qF!(3z-S9LMիl2|#`CvZSy<lYHSvAo$xuUzw,q\:cmq|X"LоP>l8կ (Cenq!dpGB>l-HqmAv i @z+tCGʓ_0uNCS?kNuN1"/NR2y/W''Yrh˟Lë%)Li7tz׎ 'sR)0J`V: qx݅rԟ$a?Y6q?|47Qũ5k B'pC*}.q!Mxo9I(?0$Rz~Ē0 y%q1WUh0P 5 Ds(+d(My'װ O:S|2<yCo,tiyఐ>gg!nppa'Uƅ+ ;|& iB^,ۦنl]:Ar:ې땤w)M !ox^PdX&+NDщһ O+$M1y%!F@*c9LS:L.D a!Bv6P4R|劑ud2ͧN)Nْc.Yb׆ĜDA~5W+w.0V|A.k.tC{NU)0Ƞ7qDrHo5kָ!WiG:\&|BD \I)\w^锧Q)d- T!az/ GF:w#Np͞DQ1|V߽>}}#X$WuS%.ᶄUt_T!x>O?#P;y衇{﵇~`#K81BBDzP܃e@ڹlr[b9S?5cwHG~P\+fd3Z~i^^u߁lpuWحʕ++=@=S=I n9 b(o}jvm-==?U3y';A#jx'9pae k/NP-6۰~=&ٜ8̂8+a|6mS5D:W%/}K]~_ŋCkf 0[+{1vj쮭4c/_x( ۸q#m;}7/;v7Y ؿ?&p]oc9{<\wrSWV Nϖl_ОzfժUڧڰa~l|C^z%w"W{4k΁v|d%N'bٓk"TQ6͚ޗ_~?/<_Bfឥ3~gJ1\=7я~dwuWNsCsP祳cQ%jmdDrAn3SXC ӳq͎vh$DDp }wu}+Ln,Fzi+i;+~7a-k.ѹU zq7kP:Wmlӧ͛g?ϙz18_,$XruIU=ۿ;b`4kc.[IDATh矟tjpZ3x@pi':WE dJe"2u:L+Bry^Qr" N֝}Pá0mWC2TPwp<*|p#~wYRڐnSqZt*F!)rR"agMyC}]D!zO=8M d/!]\;B:2{ʫOv3W= G?zC'&>8l{23liO.,F+F D3dT Gь.hPh8}'㞬_ad9I)N Exϻ* og 96 b op{Dk%Dd؝OJϻ'M>}B.oʣzB VM'';-`LJ`-ڮT,IýfWV}] SK/CI/M)렧*0vԀHƄ+`+)L /!YUNϠWw A[xءc32!ɤqT"av>D٢PPRimq֌+[5q]4N\J4daEf<)Uf[e:biS-?܊HvATPڌ%3BЍRpRIeXAaEJ.Gىa<މ!ՒijjfoPVFhBdupD9!qLff(ɉS&a2vӼ|hyε:>:j>9F\ Ql<(Ō)B-_=Q" L@m6 kv(Ѯ@N$Pucq){RGg@U㉃pڰZ )miƦ֝#ޝYX.GC-N'jO#J4 ^eJ@ժxh'-%p7Y}s|fTHA[V'I_K1q߂7NjÌzSjIGi!8K B렣4}J?b Rtul?(9iǎeڵwA<6,kQ8$E,K܊aƹκ.ҠxQi?@Pv+ մXdAo/iS`MAm&9.oDئZ<мv9 +Ȧ-g"M6KwZg`š ʊ<)USpOk)WjPD$" RzF2ǟv䏃zTeH'}Cu:E(e^a0$&8?e֡഍RiYs'Y^㻤j;!:@5a-<직DGJ+Y;. AuVF.PSB:#V5z1 q~U t$;~x1::D.C!/uWm쇧X<a$v1Xqwq 4vZ17DZ1vΫdtl0zS5<©:D'gʦZȂPp%Ia)cCS62:ERSAŽ6$2X F4ۑX2gۼ!⎌ <]V非.ldPidS\ߔZ&Pdem)R#ct-Y6B,o2.իfj7wE@T!VQXzomoeWpIBry$24DEs>)rK i2 XA'0r@Qơ-/[ KϼDڬi [}&aUWf7+AeYQ!T| 3,h\yÖ9d̵r"IiܧmJy2 %`/ (.IurEgZ nzˢVwvS%ԢU-B }",F i/#S]mbp1ξbۏ&*i"x2!CSFMocd#(& ԣJ2Ep*YZ%'zRff2J6ZK3 돢 !6bbAfcrp/rppn Mw@l5d *tUcjjFJVc,2u}v 2L29FiT SGhBGs^j1ؓ4#Kʭ;O>k_DC58V'Owau~*..ӹ ( L^.5`̔z)#Do:.%F-\簨6UҹÃt"H̪Ͷ>0cؕv,u-օb,͚OP5ʹn`57ԉd뭥rYj<%;?_;IL$s*fý8yP#Hg*_cp‹c$@Q(\z,Ida0:΋/S0q%-Vt2V0+ t4Z'Tp5U r'q_Ā,ę<&;'N_ҲOe^JV~8`{Z$Q*ɆylײHWB}S)):×_ NUԼ/.x->d&[_osèp@bhx+~u\(<v=K ?04Ygҟ,?]:I"!8w1tNJP>cS2%:#ܶ[ LjMTy!ʼn/N P_( Ba"@4q]( Ds0[ .P-Ey \(_" Y˴K0 (LOg(MΨ*$ (MD3 D3  D0Qx持䌪B€L9c@490`9n@ߞ4IENDB`jqapi-1.7/images/0042_06_39.png0000644000175000017500000007725211460407074014653 0ustar metalmetalPNG  IHDRiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxYdyԩ}w6I8-YK:F@Dbs1d(d, s!Bf$e("m{e˩|_5[-.J]}}yM 8x 30A " L澦kra&8p_30A}ak&7Of5{_67|/ aʽ4opbg^„%X̎Mdj0'4'c9p9 ̉aN&\Nl&sbAs2;6A ۫ œXМ̎Mdj0'4'c9p9zt=i@Վ'm[{g\~9o7{o {޳go?=n3 ||׾Z_=ʾmW׾5֮_]MG7Wo5kCsK sx=?P\3voC}zw7>m6шS?}bGGǿQ~*jq y;#0ɾ~/#ls˯>ofI|>[<}ξõ_G싟}ۯ5ُY pIƏlڞ }mf_|{vD->:Tw;n}ҷۧOŗ~߼^׸]M?u0q?0{ܧokإ _xտXO?hO|;~szW+K_=)!wP#6oS7J3yfnWJ}kmd~o ~{Ͷwz,|JP_JGB~B?e /<'9ay_}%e ߒGZo0/D?;z[BQ?yeyq}y+EnW-z[[ `-:RtoKh8 ԦJm=b<{{btCx?r};S30A " L澦kra&8p_30A}ak&7Of5mM(8AQa rl>mM(8AQa rl>mM(8AQa rl>mM(8AQa rl>mSO`*&C|ꩧu aʽ4opbg^„%X̎Mdj0'4'c9p9 ̉aN&\Nl&sbAs2;6A ۫ œXМ̎ݳ^o-oUQH0`ɱ}^ؼlXڶK9!+D"[պm]su*p$fa'hqz%M `ǒ6k3Z$t±t&K5݄nnp6i;o[^pmlWI?hmЪY2hnS}\wg"M15=oZɂ;Dû# ߁2q'+lٺ;0X.=XQ~m^ s_<@;»9{϶xG%P~#G0=*&mA _cB,|gne}wlc"Ʉؖ/HYZ\:{Rs6h7zEr*mnmEC}̜HòiKVIm1.:-7٨[f-.{ y8iy<M807k91Jfs˜}gg,ra ,鮭YokOۀ=AU 6`d1j)1?oYa.w` N K:(X[>~8ž-Pb<+m9gwt氚♜ug`{r sVcfmK !@[v*aM@s>rJfI/XwNcŸ?VHكzA<@AްhAXK [K'bldО /9_@Y ѣ22^z-M[9lq\`SN fS=Եǰ};-}!O5-nAQ"Z3@4ͻX`16v!. \|# r*ػŪfjk%v y ܷv4$jͳZ3 r3V`EeW.?`ṈDAj[w7,[(5ۇu,M.Epa'â-gz>X>$A}dfCNR g3bs ޡu =dD*al¢} ,D:V|J~WN̡ e mº J u8n8 F^vCңΤsJ,Jl5[UGh |mL]@+[+K<$kܢ~nch"@&<=k}F2cg j+V޾uh/ N:>bh9e=[dbV@XhWT|L/ۇPhe*;Hr^md ӆ "j="X {yjB a pfFLbBaXL.a3AzdL>c!& i 0@ 1yQ"'h"Y7島d`tX9 "xZMXc2ϢE-Xm:j{U{Κɸ#VCp@d ѓ@.Hrla? B~^|p$nd<ہ*'!d;Z$ɁY(V6*a-]`t2raV q2ܷ'Ξ m]4eePG.4Dt]8 °2sNJ9: m:^"iiȫ4iV ij֕nd"=&8 Y dp}!{Es < >bRbU[U,?}TͫZ0Y˃JT A / \bPeX+J`7RY[.:iK+Dn@0Rr2`ۨ;s$#ѠG(T'V9hpƵl)_Ahlcƃ0i! G0IҊeK%l`ŭ2LVpbE9{ HbX<2IV1=k߱{-}D B)ZY Hy Hȁ i s9 MO~lJ"ю§Q×l`RնglՑ0ܰdv Ja]Rݒ:bAWl MXZAK/Bܢyi_ۅ]c"_,Tdu_=Į8=/MXӋ?nvMS>c<C3V^m"1Z] N ȨomA9\[|e L<ȑBmޏ*%2QYIҒ`M=#_A E1pӏXa{SP$opw1a.4:Xۛ52-+DưunD@O lPܧXukEBb AȐ9~ * v[ xZM(.V<6ܷ cdӷᎵ%o]r"ˆ_*iVQS `C"Pl7aIqLSkA=&3jJ(%Vs>D!h;挃q W2lw LlP<@խ46}zKY5jU P%кPEv^H`c 17,͚%e?U>eX[:?do!km(Wo kM}2rDDؚ7퐾_8{#E! U9):èԃTP4 i T~9;9Ҟ%_d}XQg 5QKAVb0 :5 ۶>"Qo@Z ƃ0v }XJU<PiMC  GKz'-s*&Bjʓ4Z_$+3^@ KBJYHcGfLJw! r%`}^ `?C0[ui-uO*X~8QZGoQ, 2ora XR>tqBt(+y;݄T(Ygu '9ŭ0.e-{E/hl ˴@n#kAQJ/ahI8,ɅaW`i>ƃ0Bi*} X[MFv76[S_GS9K`pکgNY UC=Nt 5Kc'0B_vntAF>de)HƮc]g/laBb8,yKeĶ0F :; P15ƔA"5V6@;@ -?lɵ2 fMfmȍQ/?Y3w0e桄,0`51LؖeᩑcC F U ~@(CGhZplKRwaܘ[sZ=\P Tv< o"ke{T鈭̦4~M9 d{J"4(~&T)h'mu B\M\%FLZ |ŁGEĠQW`|R"x: Ց)0 W JEm!..mN|;.a.|.X6tir |Xa$jg`A&=D# e:CٸŶw-FhD*U4`GP lRƆ0B{@1e%-3Ӿ̴/ G^H* `lag*tnKiP @O`s \!Z23"F'7^@+R,!i7B{ܜA=c^>B li& +_cp i/O8YH^^Il/rK<F DP 5y֧bM$۝<+$miEW2ITvd_ܰ>ɤv1nIa[Y ק4څ̟FީcľR{z /CVk7|dQaK:rOMO$QP+2h`E h/,޼ i嚌l5Kc A7Hk~Er3!,oHa!aeaXr'ŅZ3RnYEka}hB TYإ=B qpeq@sL-_|cF[ k7~M IDAT6;8/h)JMDBTlڠj4B)Ymk9!cu ~俋'0Kg #4ZY amjЇ&Ueq_aD꣥e&l"51EݶrDE@>{6F$˖F8Ayng)=$Vd: oYFlYj.KMsV|YLí@v* =\cY  GB]i h",QA+7xr:)!`IpHXd dE#ԛd\PKK ?ః[$e1+B Äql_8lGmRؗ6Fqd 1QRQ 1Mܭc bʑZ\PB\ޖk/TrR;U~ΓcO`k<ӰڇbOD҅xASx6]O@u]`i)@.Kj`'`mA%Uw |oajbY=B^q,Mf?܆ dDFߨGtTL sBQeac@?VvQo )ۅUH !@R ngA<Rgb@+C#; kcƊ02D(Nm|@[_ǁ*Y fv ,èhn^>!D+:2́,+aQR7h"s(DJD0h7,%q,Bih+I(Mh:9#~g P;v'lA2F$%U51 IP9,o i˳D Qbn:iS1ҁoblFۘsdUhz?j`?']BHSMcmf"9`ЋP4ZI*Vk^B=HkiR6M8I u[ oC5Z12C 'P]ȿt0*Nc PcmX r_68roegͦXH)x ! |E[>w^Ų/"Va @V7^'r+'u5{,y% 祙d1z\#NB,,E)h TBi@C}{i9RG *Z$%!mer)XB0kXTe]mDEӂ* - '6'U\ff3XXAEI}V9$o5c@mL!KIɁth~Sm`(ޤvoBC{1$ }yؠK$.>*_2bW\MJ(b]kvZ# BL[Vڅg{[d@H]H{ɢhD788ibqRl|e;bxk*`=P٥mYD$|0)DJ/Z)P iM аwK07]Gx)[QR؂OJ,3ԭl&1d2R v$&*AIf@pY* ->g32RKP*YA2 ް+"Rr=a mSlLAAo1 JYAY|YkSXYex!I1Դ[\B & aY"τ)1 œ^ząP:'0a0'فMtd dG =\Z'l֢h6M g|خ*+1'zFU=4 q)^2G@fZP;7SEvЂ[ p*t}Xt80q<>ƈ0pLѝK`&Uuq}19`K[N‚9ĀE>@B !8*DOd%Ťwri.,$?l` X)ukn40@'jhkE[ ."kJ?@i(Bʙq+a,3Sy1.؈}A D`}Cu9 {DBemvŀ7(e6Z%,3#@AG} a~ln»YV[?@`~y iǿF9w B,Yb[h2Jl޺駦JjJtyn~)/|í AjXGnEЦE%lCHXѴDKO+\*5 @T(qYj0>$XkIv(dt٨b<a+rPsJ7 *H3f>Vɹ&إ+hiag2cl#\0 fh ŌKx[HI%jb'n3PV`f.|R JZ $J?6.q:"BmH xa2jqA"`+_PƬ#l7i4(: zog@w0IwUZaԨT!e08d+>'pl+6$5\J` bxf-`BD( bsP[A3gxm0yG+9Gs>Y2.'Wy c߮U"I( BZ(H 1)rhY|`խJ=SIڌcEGn4,GF_ߐ~4}"0KH'EO "hHWhvB3=Q[{$OFXA mర%6}IJTBK]EǙOPwyXY * o0&(9CFji =R-5Fy<.+Trp<`r rtˠQo2rRPz7m 'dsbX_]XE9(o[$ aL5kij$Dyj X:SjMbUndplؔPQcAO;`%gib1;UxV73YN 3Q)Z\{gyMKZ#[ Nh3ܑŠfwAg K - '{߇)ˁ0KVsNya#s̥HS[gm\Ep^f+̖@_`(KS @T'6»CcD>SmHZȧT,0E]UlOB(\+/^!%gJzF#)efX!0m(I~y 2 oDX% *-d8ΤFy_4F+ʫ"]툰svJ@͓{(EKɮ+PBG'&6XH@5V`r0TBEu( W}0pfP=,N{5`lzL&Zhi^!m, eL1YJn1OmXaKX!wP$!9ØTl7Jgouta]$)x)Y*0(*:'_%C"bRL|uk #AHNʒg33؈xB5G@ ڛeP mӍ,$&ي@u= .~ U,2tQè]bY3lfٚXPYǠWy"0SwfZՏomٯ!JIBl/Bø 67=wފXZ(*Ջ[Akc`c7mg&7m%r E!rŨtPS vC xHbkpRy*BZbS`5 HR#Ne(:O&j%(ܘVD Սu.W-x,v׮`"bĶ >[R(b'` P{ և،B'vp bXƗa>$ց%)/Q/(D]-lԈ]2$YRB iMyMCu0*PmRP9e2B;ٻy/2e qYxShusAP7am֜wA(B}jraL1h0C֖"3Accj )vJe 'l$G<<*[BQPm(IWrh w&cy7adLp H_DpD,T/P ̳K/M"I5A2ZJ`aQ` A>s3 (Be\S}&)/T2"<lzeŜ3a]bcV$BAEd ,Žp_wuSqfRvD`WNBi W 0 AwwqSMI(Y e@SqX`I7*υu8=& euŠDp!Ӎ vZ@ 3a*8+ 7J6+6F6eȯ&'ƄL $ EQX (&H*,CP3{1T@sI4r:|]<(B^Hp8;"ģѰMI=UGu-<K,_]d- w%%EUv5eX*B r Q tRDh92 @2EETZcqI)xDӔAvo85P\TJ)dFܑ O?E$cq3y\TJ$ȓR8Q$,$ρLIf 5`eL=q a10BATV!= ie޸JUJj_9=Gg\nłr-Hрe6bhXsPZZ,<1U`mӰBŁI/xwv偬qrebneA#3IQ$,ϸrƒ%3rGR8-=fQ>hzJ 16 ްUXUVҲeҳXSZ=ke/,zseQ@vcC#9DagsHcL6O.&E+`;s!7Jj eT$dzLvIXV>fbSL,ad;{W%y2F| aT7$m2>i!n; ,B1R%wɈg q Ęf.fم (!i8B@QE`-4%%4Hz62 eI| *Txp  "/)S`+d]FYL;X'^~TQ̅]+ b1B}ݎ(+X &UTUl– 쬎a9 zk (QE5cl/P2I2I&XcU0YS !x[ߝD9_SF@MJa7fqDbTCsݪ/*zx02Jv`9Ek֚ `/A_j!fvօE HA e}:ǦVڴ:Bo[#~0VWU?P/EWA +SĹeO: Q5 ЄfPFIARw)7FY#\QcCuJFZhHBuH#:>5Ck J(,\dWFu&{^ðB2`km FVad-Nx}-$s,H\Wa IDATJ2ja$^9[d*cSkpJ` jKvxx)CŬZL2iȯiwi YbkM>h)+AA~"=XvfEJi@WQ~$!LQc쀵27P*\C!H; {,׷pJUYS^yjhH(ݡB:IRaRIؖA] +H)e!IuvUE .2ƯF͜16Cp;xcP$҈1f<wZ]OW\.yAiǒ[x}bmeouC Pf z4 Dq5,LKV{?P-ّ-]G4)(@T>:2u7VAQP(x4_G+Y@nx**VXWq1l@/gCHmgǓvogPg 9lB}vn4j9M ~"H! %)MPwOz%`#>ƈ02roPYϹGm6NCB&Y << ^fYՊYM܂u->t L|0!t&Ӽe %>*J6FF0ImGq7|l}l5P TlVl*I,Hz8F\Ue}EkȽ:w]d.)E(V"(-jY@Z 2 1e%UvAeu[ 2:AlgdCôCR]QcCE;h;\g%PyWfˡ6nvDK [ФB&0$tRWxbNLQ r*ђ}C*{ )NG}n(h9yPQ=N^îev[oU:^0 XGG))jԝd_QTe/,Qw5LVPQSocQDwhe|[ش `dqVhC"HAm̓wHG16Af$V,=d 8\T$iQڙC T Y`)V. Uτ\nGJ5w˓Iq+I{F'@ j 4bajm6!5D>"]k4[W < ;ޅt@2@['*=w=@(*Bma @oDIA䧊9 c'L-n 4x Z`*e"xAywV!2|. <=9 ̱#%J,@$ eS;X*D3hT,j m ZAOi'xf?9%>z** ÈDK:Τz)x nVEbF ;XiۻW^\!XH} NL^; <ЅYe"Wjh\Pg^߶cA&Fm4F"|<DWy۵+m\j4vˡ k19#ee HHBxfL t@vEbq(55 pkaT!\©rquQd)Bb]̶p|P+xeW|CD2M Ll&i%@(TV U)DHRP0zfа~e.thG"ŷɽ鴻+ ;Hԥ :u>P*V- B>FȒ982h%l#uE'k7uHv.TK[2R]U<&vV)rAXe([k:hU\Zfi䤬V)-UƩF`_X TZJ Yl`z `K5_gT,HG>xPVq( ⨏! =W]ȷ5QW}2$T=c&B|zɪ_&ADFMrw>q_AN FB[z5-P olq$(-ds]mFX(>(Q|QIq%@p7qєKaI|=C\!}1na,D;Լʴˬ6iwu ˍ={}aW brAiS ydTlMqBG.J3cl#$g{ d~*nM a"O<嗬G&UkαimR=dpkl/[C78i̞.P*&& pNUAb0+,^@Ӡ $2.!*KE 'F=DBg v +|mn\Z׊8E^Ubm@hA=ۛTy͑8 `m\ׁi/m8bzSqE9G~ aw͘c%JxϢR nAŪAqL[clGTձGJi_ ̈́|B1հŠuۇE!uaT`=4C0q?YQ؄+%ȏ>FpWΣ^aYh`- 4vЪ9@]/MES"XG}aD]1OL;n1n{LN`K/`9y@C2ǹ3_fWH8;N/!h]źʻJ`[)4H([>gշ`v v}<d/k?)uiVBV43ȣhlGH š9#-27 ӑhuON3د2⃷ DoQ&Odϭct#Y,R ~kl*ujc${i#"B@B>HȜ:LӏIĈN2Țjǰ–Ў,Ar=]s% |ߎSM>Rߵ`1DurG;`)OR-3t-`ٽه+6NS6sПykΟ3H1 35U1rU9+@Y[<^j:Q\ۑ} g?F$H4~Bܤܠ!s-۟lDR[wCKyN~f~6Kׄ<3|`uz߅O}kS=c w}t>~ cA%h.;{[|;[~νյ;wGg<=tmsxkϷj=~ˤ a\!{2>y}9 ¼/ j0ܾ/[ ݠƋ02;0_۔wӸ<w]q|2w玮ܾwS~}?oy;nxˆwr|IwI@=KspO}N%$“}|~}}.KJw[>2 {m;ߡ{tY9GF;~קޫmvϟ! 3x4yD+v|*`S{?' s}&8Ԉj?[! )͞JQ~///cK}"Q&o"Ee'>;S;EEO-4A&QZA]h95E 5{ `O(Cm),MQ{xG@Q%&Q$T+ SQ}я}ſD]AByƏB#x4.z!3y؇?? Ei7wMv?~FDJ{}􁥉{ŗ {N[ ) qr 6~C% =y ?ORc=wS~GEBؿ>яyxSyaȂ۟:nݺE qXwt'k>e7CEc#z,QG֦)q9v)+P_z J#?W}ڳ`j'/h(Oثjv5Q0tPWVŎu&:M W#.JϪ"#mBm׳a Զ.1G%(@I,ȕdu055MN6-4}P+j C ҫtǷ 8T2+4fg^BjCwtw<s|z ?S~GaZiVxO^ɑ mmQ h+???H҂ݏTf͗$ݏ ]z片 /|*oD1fإV1ĺ&'9Ay/%؉=Ȧ* -dK?8?i5{W9X + ~L!X X `L_UD~egΐ 2jSAKX JdgeJKv[͛ KDYZTkTs:֎JIxM؁d$S4'Z+Y+W^xW ڒ|y[mu9vՏZ'*^QVǟbԗĮ%Vzkvw~OqQ]ž״- Bg<iL&\8jL;P?K IѸm>e9Ȣq 9z&Ap>Mڝx}w-?j#?ladm{㜾rԶnG44 ɗ @$&8F|lgF3##tIO=}u}@Z9GRRĿ¡{Ž-* >у~M`NŁvt-BeCysx^ q4vFaX>u`Gԕv4{ra0g&z>NY UVB(k i`g$ujU"J#HQ7B&E [ PrYYmTu"lѾhGH!ġH70)&/` 2;(7(Ġ3Tڡ=U_ʄvs"*v; v_ ]d/MrB;†bqv(RZo=k}$\LQϏllqtH]sepGȥ7F 3tv]۟O¼*>4t(p /yvvJߙx&M+X8R l>l]Vh_@Dbv3ġIښF٥8o J TMM6AF!ó9! (<-ɱF YS _ (]TJț`τ>/SJXǣUVU{A@Ҷ?K 'e1qtm<Z>IeDYm&P@ R tN56ͬ=+Ӊ&LXc3pWIhr}NmN-("L rN,FBϳG}hC5)ꐧPlI Q ]һ; 5*PI!7D$\J׎]8B`^A͑FçʎꇀV ~ADMXG-e{8WUB*=#9@wQGw#눕諶E]" tEAN]iUӈ{ԟ!%Su_ukl{㨁8MRhCRJPATBW|0BBZUK<%[~g㜒^{:[Mwmό=wۿ6hp<Ѕ4lb6ayTȌ@VF``LNsݨ2Az*:]]*lsC{\UqW]丞"Yh$e%SHۋdvh$ЈO~J LI}JRD;T 66qYQٺ9[iZ TfΒT&' `ɷxs՟F*Mr~'Rx 6>.D&QiMmTIz?y|ڔnq)2ɘ($Oޟ%mښnvKҔi09.s۫0s;4ٱ0sU/rZ\ 0^\cV3}TZv[wo7~&،O=Wu4M.(Y?~'Ju"/7;J?=8 I2%hs:@!;Rk4nf|ڕJ=8^&@rOD0Y+sS m 30t |%(fDH®V&Y r#LJFÑ@EK#Ĵ}xZ(jQiI: 3}&!\(: ptV*=|W)as@pş<*;8{kd灞qF2+B?ŝMjm9w؈CKg6++]g<W0 v[@[i %N 8Ev D`"BZ%XPi 0Um?A-Y eQt8FhjBl{6?1kK1Z(o'A!p2L(RT[LQ4 WsGDyOs/}!sH.p?a,b?0N9(PFdqBQB@ݕٕ@ݩlI|C.c':oG<ओ~)1˃mhd pB;d8 < hOB䓓Y9`_,K&jdh6^HT}PX&D([8j5`Zx'_4jJQ`Os*-7-a&FiyRbڰxyTN5lbg*nrIz aLH {iME 6 U5ުm!mbt=4eGxj~$Gڷ 7HWT$ZW(\`7)(^sϠV=-P,[o=FdVL 7byrH7$se1ZA^Oq3Q!OSA  yDJXxW%m5>@2ҫ7')@ m3d^أ^O:-D ᘼ(qwa[v!W%_MlV̮tč1BR"]T\GZ@H'$sDwħr]c.ޖZgDL 'LVPG{/,i"QH a$wWDv/sA +' %J޺lI|z:6cK2[yT4^̱ٗ*Sgd)- 0/Y:v5غ,1urf,vNS֦C dи(:;"j:eи(:;"j:eи(:;"j:eи(:;"j:5v#X'zS@3 %2U@v SY ;TaLe0S+g>0LeL/JIENDB`jqapi-1.7/images/0042_06_40.png0000644000175000017500000002346611460407074014641 0ustar metalmetalPNG  IHDRv iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs  3IDATx] PT@ filB%6ɐXԎ#:]ۤ#D!c'Y̴#:&&Jt&@ @@DܕsC6sݷs9;߻, #P0Q`(U0QTBL*(`b!& s@aj Ոزe˘3PE1ڛ1sn֣Pj(E[ucPi(E[ucPi(E[ucPi(E[ucPi(E[ucPi(E[uc}܈r Yw"$$D~dm,±>0* ˱vfk%7E?lKe6UGsX Q:ajBvT̂奅ق%il!tϟPNJ\뎳8X\Ͻ _lž-EwVjs f"i ?\S Y7kI IFw߅Hps6BviG J\v C'9f|Ekz{£xP;v!}*,zOGVH8hBɑQakˑ> ,#tK^I/,^2D$9ΔJ}RTjNd^J&d20K_f!!"j%KБ.j}\3[RSQ +m8[kdLiQd;Z*% %v~Wi|)ZCL\DyID%^HB0,ϿL R9OVraEbf .OöQ%]\vRVꃴ&CǭBZ&GSy F bxG"aoGc/ɒ#c#CtifoJ[#k{`{{!:M8G?P=9'<<Qb"t,GۑO[B#6!`y 8QϞG%zv l't-e[P9G gU[[q *c(t_-ȯ#I U@rtpy9=ٲWKN{k-+0+pD([U-u(ʊ6 ®mCw՜! ;^9NT>[k=)B5c: By#s=uQj ~WNrW7Ŋ|<\5) T\pta[yP0RڿF* =IH%JNfW(*9GQ1 g(I\B[+|1¸yr4 InuX #+d?S!FC$%Jg+b|)K+utңkT@#;h\WWd]O;Hzw;J|x\6i o1L1AWw ם|s! &*XPEL,DaB &b0T!DQ 1Q`(U0QTBׯ27!yv@@:(A@L@%)2Qb`A1E&J P L r D AC՟A]"`ںukpz9o=^N&"D w*0Q$&WxSA G0QÝ L >zET`(H+LpEA^`x;ƍ(Fo)El؊Ud|jNI-vlB!Zmgb^RӍZ{*7,ZIQ} 6['Ή-y]da] |U]j\L$bb6k½%+du. <#a~zdPT?S.!"D9[x݈~\T̊Ġ1)N33 讬3H,xYD0 tv'oa3 d 3 `?`P8Zqxc3`.K%)ζ"MЄ,HL.'?jلAk%.D i>۫w j"ea3x[B^K~GP4|9Oԓ0VaS ɸ(T,wDaޖTӈ8q8B5NqLXp# T_COIQO8.D?aRdg&'~/. Dw%Ǥ/{&cz4+Ym80zca?fށ'Oap i)LXM$© Fx|Vvmxyd433fQ>npc5i /fAA$RKA*o+O4XC[ >."b]E0dbι`J *yK <B k=O YqATZJuMv;hl.A^~x^.wBZIp @4#Q Z_Pl Ɛ8o,yt5Mؽ ;_ui*wr8y/G)̥aab3synkAMz}۷] Yx.oܬ(&o=1x:gA5b^<{=1ZAL'-;D"ӝkz܌=PBIY㎓2>tVv ܏^XMDئlLJ#0sA*W%R<&?1sH+y"b`+~tl$OQdۧ S;{LputvlWgn|Tq lF8v2k ˫D(& UZcXR(¢n.9+gtkG%:w2i`(8?=ܛ$qfov?#7<vZ!mؽouR+e(mWߍr\0 iI)ޗ$Yٸ>1Ѱ= l@cUz(Won*IN)%݅lskvdP-;cG݉8|oI@Vo4R"}I̢􈰽3gǭw^}>ُ#Ӈ N#t =-Į0xW6㎩=83Jgݎ5 q,<(}EaRRDQq|2e<~%Sq)͜*HHRFlv);(#]gRrݔnMRjnz~Wa'88>HϑvJ?k,9֏@Ç._DQvym\)G3L)@XʦNflB(?LL(?LL(?LL(?LL(?LL(?LL(?LL(?LL(?LL(?LL(?᫞@*?X68'8(~C(wgDD θ=k&ߐ&JpY3Q,8ؾgIENDB`jqapi-1.7/images/0042_06_41.png0000644000175000017500000010671411460407074014640 0ustar metalmetalPNG  IHDR>4!iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxxu.Nwީb5,Yqsol'ݕfx7'M)77v);ȖP$%Q$E, {0L3$۹kdrG^z|{pl:qLǫ6=#wN"N7|GzSWFy7[[FK2EoѠIq2(?q/4 _}`_Qn|[_~S<<9:^! a^877t _{4%c_Bߺ|ߗjϿ=5S³WRa5~>s8ZzPϷxSH*m1|h$C[.{Fsorr*UC<~>?=)E/繿 e/-VvAO.ׯ8FM/??Hx;OC$>d?G=8WVtt٭/7KE=<iɅ_U2W}&kPidi| [ |#[}4ʯ?x~܁SiӘű453rkmxO;{opo'޽wpfK%Vh0}qHl}`l|s?IcGWϧov8voRS6~{KKK)]JS\Ktk2kUK#n%ww7y#//v/wVVVW c4Cm/Y m@hn{2_Mn{2FsKBh26p+1^2F^e1 d涗,[r̲v Ȅ;2FslČ1{`%fN=p|/1c4wzEe;}+z/c4&K͝^{x6N_bh=w3FsW8^hMӗ1;2FslČwK^W~ůݒѤs22i=:?Ѭ Z1+2F7h=^h㮬s:ߠxzY)c4|ef=:?[fo:Jd ZX%Tj Q1|˰$i%uZ$L!!LLM:y !Pȡ2A-Q"S@"W*l!kkއѮwlR'G5$[J0l,j d[р¹4Oxg/B< tػ>&/?4}7FT8Bʲ GBNvhf NQi%~?=݈є, e|.AtFJQeɃ.Oh߽!pb EK!`$p6kgͯ<^L/ChleBLYY$ʲ D⸞o~a2GI=$?f>ǔ[P,`/N|E۶ql{ud81XTm59 Ѩ AP!߈I;9ecH`zpĿb6&[wFzidqS-fPc,w~*[$%SQ*0vuHڏ}FBxMW } ʛ" @.DJLhY@k y۶?=e:ڎSyIeހ2B2 !?W/yc͌DWz5@=D!APKf F]vSV w:HIS>UՐs1ILT"bYD^ÝVwa[7jQH EpqaL|׻@h0>RTTbЋǢC݂Z~.ܱ`Ԓ7v Rb՛v2|K]pw"K-XbiLH}`\İw\ZU o iqx8] <\ťD`ѷH\bD+O1$Ha1cbɶf?Z3>C`Hm|z `Ř|o'?2K.n칷6e#l2LgJD!'!B_;H~xB`D̙^z-Yg,J%JDŽ( 1<5 uca~ So)\yL`<>/|?lsS4#7EaE$7K"%&{ڑ% )cr,1c>{#1An5!CgH@ڐ=)4؜sp,_M>74@^&5:~ŷhҸDqaZh >aBy9%آ7 z R0"X*-yTF1$T? ́O9m=Nt;(iaMHmY^A-reDʌܐF|K RjRfBZ=7bxx:F)αpbZjvjw#unnDS~H>hs/0" ߡE HhQya.AgF0#mHwpaQJ ^Zy qUX%bш\k/PG !V\U;EcJ&= ᕟ"-V,࡜b|t#A8t d)L,%}VfcHC8]/ՇAgRM/#9OA Bo4fJ@ ,•\col=:pI2 )yD Rz-4 }:4p:܁΃̐)z3|pu X)!<*hCK0 U,NeF'qÎڿH GX2хIBK!E*ET":Aዬ%;]۠qk͌&AxO tC_ZBk%,޸P0\"E+M_F>&.)D]E~"eʈ\BG'4yj +^Qg.D.!,U& w/a1K`4WBPrӗ$")q")z'c T7Ǚ3g榱!X‡ɗm܇;qJ+ncnCނ, fvP+ ZzǪ"D($p0e-$>{LYZ\A BXfP2ļ+|HV!ᦤ!$xʘY3 ?jn.]N-Q"ςqvM%Qǯa P +[^}#b̚T c~ޱgu4O { GK<-["xH $4(3J{$%傧TJ-H7 $%R d%:B-KiH>%9DVS 4WCڌk gX7ݸ jz=S(M!k c6G ؼ /! %v=2;!9xfM]@I:D7!'7Sq]^b̰̞E \[^Bx9\^*?T0|||4BƏT%56B \ݿ< NFq@M@F. n[/f/ ޙ!nR%y8T6o";U!7[F:KP]t?rԠCF[GU42bVȵ c44UQz'٬;n00oO$|AH2 CsW"z +  h(F<0(l9\l%,Mp=ß@ہEA=3i cE3Ua6Znƈ|䗃X#vC &"v"W(}d. G ]~a>WWAYW q1 s~i 3VÖ@$A￈O@XA q2Dw1d!>Zv-ٰoE<ߴ?_wmaTop?#2af3k6 L`a֤~ ߏhN6R$ >ߌSBs(F 259iZ$ xbRaD|R-{,@ʼn֥il'9 7 $ -DN\\WK8*\|}!|bᩧe#< T 1x)BrKhKp_\;zY&AqcvNm ও.c҂2f$ Nbu_T^>0b UO1c%f3 e+pOZwZڄYbF7niF,R3IJKës| _5m*鵋pcXb2U^)Uԣ"b֜~2շ1q}J&1"A~A\3.F1J~zɁ$sə Eh4o#_R!r@\>5Ԑ($]: ӌxN.qYeV@cql2,Ta kRUX4=y_y;*X²߃h6?cG BDvQQ(3n/2/sF~Ah?>?߮MϯѤ=pxN$B_^w@3GDW>Lny pXX0G`OnadI+ȿr"~44?:7&+D>RR,X iڏ$kBItDȣL S0Qg eqgCK.&N,ekRwƑyN%{w$XspM&eO0y 8uJ*')Yv(&po{jEGL5[ _YXQaJJ"MН.j"D!Ȕ~7եhXa|P!R!XAC.]{j5?X!I14~g`)d2,B4flڈֈP+Hj` $ tiQq?Yi?{O4*WI\{c |0JIz$eo 3eFeV}8ohPل]7H1Û8,.c@2Q;H`]^BENb!^x:+4[O@>xrkJػ1SR2,PUR#+!ɵ0݊$CQ#ُy^o>e"e쇙} ݰ5JyBEty#Ԍم,ݫd9]M*pcxwf~ ~R',eÃ'*WY-LaEksɴ)LVa1h3Ka/ µ*8 *̚ !q-9ajh= ]9g耑n;<8-|Rl6Hq38O>GQ09;(tnvq nKpbx;2#8@vx*Dg.X1Fx ٝI7Y\͍oI~1ՑǘmF'3ڥ|[l 1 "bdl[ᐹd5Jj("іPxbZ;͐uMn zV)j>wfFLs 6%oAن. xV/qW #^lb4A(\W9 81F>fY(ρ6x7Al\YpS,c)ܐ>)8T ? \:tqWA!)ѫyway<d )qZ\IIUInbduNn<8!=E! C5Qm7?s܇1H6FID\IDYFחPD"l03.<ͳHMv b=Nr7lfHèݸ C,߈05447!G,OxwD~YoDTojźFYJYR$,],LM#*MJ!V. 2b(k1aTI*X0xY3U[G͎JGzY7IUDo~jHmމ$ *R1w IDATKJ ]*Aw.cyz&G@* TqE^<=hr {MRL Bl(d[(ob:.Xd;%2ؾ.n{n3 54Xct7'0d@J=F%ɽ>bx2UrK0?@`M*T<]rz/uv1t2v},-RwLCF޴1^RI|r7%-TěD;wèS.l%Nlk}1hj1@6<m"zaa4Ab%DdO ՇN\ pzCNpHV'agVG:d5G^ q6m軄|K1I< &V'z@) %T!4(;/bÞq a"AA_GcEV(R-R<)ζ%."+dtgz8&fF0AT0$̣ HȘ(1Wt,!+a4ob&SJ̆\p b0I\cHPE@ #O/bRr9H0t&xWD "gM^&hzyKpjoUE,r}S-d?3.n PD}R_}d?~qY3Op >gzI?Ad .SD*";]3#LJMu& 1p7#yG=\ 8qh#srq) %6ː/`-LDa*Q XpC)p-RWށsb~|I>N*L1s(R_#(:F_|m4̲gb_ BAقG;Ymwq]H%8C qrA!ԕD)Dbω0d0Kl)p)j6[fgNלYI.W1Mtm<z2fkUM¤ i@&$e#V냌mm>WY9ԉְ*="|4"J3tXoMJqdٍٔz fv%'vǮqK xٗnV@Λ Q II|*ːE}AqmGcs"+bT?{ C܅ךytxb dRfy"X JLŋ`Utn}> 1#h5LeC, j9YaZU'*~c~I*wR)Qf* {3'0M^Jx^9+7gqͶ%۞mcӯ jJz?0TE<6B/S 6_K|vL#]!<<8ʭJXPX(hgSIm%2+ 6T/;F:ؐkcV,R܆Bً%x!J.h &P.5Y0!8fSP(?00@LIRҭ9v XjC-͐OJZ )s0}f.L51<=H|)~MmcSX,j5T7C3EV=L¨[z4fYURt"=恃v5 )-%3(z!N s;ZC˔US(iXKа@Fl!t]D~=8׸Y~B"LH⭐[,"Fz<f6lL<[Y )%HJhU1" K;u-Rv 8 WX}㿇 0\Hh`eĝ-*b.h_X+G w#?OD0DM+Mk2 c6JP+/nQəbi3A [0T,S=ɹyfylw-@>rn.r)RYaU( Ծ=nU-,LGB ( Aÿ'c61j1i?Sr(qb]̪+AbU8ξMON `,0 St2ikK+֊%иmP]̬Aikkeʣ@GF^:FL4T;WÁ's#ua/ًGkf42@<-04cibgSf!~E[KSpcQ0A,2^1\[D5;( p2d}%<=Aj6k\ ko_!dXc:ߊVHOqA,;Eқ!LWLk/@Z؃I [٣hػK1{+qC_¤$dţpR'`.f/ u*$n܋6TC]SguEx;Cۻ.A '߀v`nhщR,Xw5###;& amyie$&^dـ_VdQ>ȵYtim|.HUs-.-8@ ŲCl[v`Ul~/ G$L?i9}P&*R9OV:9ԋa(b>{09@&@g(7aZ9 @@1r2“1f|3S9"%~Jls+27i<7D5H&!mÎ;1!YK KERt7^kf4*A5m'\z3Rj]`DNBgUf!&<Oa-R CX?rLI"lKLX0hnG鼬 t ʷV"0PFb-D,WY'+<5VæjvbfA/_4B&r"EκW2<4Z"bS"9jA&ǗH jjoؿ]vN=oFzD(r@w*d$Gi@#b tQ܍ CEufrQ( <BsՆ:Q rGDNSu1jURHgr0KW_LمeoR2å<^"g_$E^ 680BvYfw1aT,{/ei{ً=f9;0I.'d#'HP :3&=MKk<ڋL˜=v dMSoρ#BLxp3郪R`xcqnIZڐ%P0*f=`/'miYPP7^kf4iL#d[)^tazjي 0)"[[iTQ}Yd NC mcǣ: ~4CE}[e+Yu!e pRv0r(1}47dIS#xɗd1b:&?nr􇏲L =ۘ<̦ @s9"ŗG{ia V+˺xwj!a / g!IILL(N n^&=Bܸ8B}) O7qPUi%<Ƣ1Dž 3Y,!GAVK\pA@o9^8]%KDk`!Vmd,[o@4rƍzwd,BU:4Yiʙa-_cA]tSB<_wyMXA%z)T$SraVr؜`8S7!/A(Ui6yٛ!YCPZJ!z\(5J/PQ3:g #e|]N)%b\8 lMg))mZ5Bf26ǜk4 -Gv(>%vL0&لr6;.XRsF⟰?˼upɲ"[GN7G6$ MD Cz2BJ2>' Y*⤖|^f,u]G  p=ZŠZwfM&}Br4TslCMǚwS4$•V6z\KR'a͂|:idBԎAY$mpOٻehii0 5GC5j̥ǟMQqqӨc^ژ|nD'ANs;Yr+p=%P2[D.K@ne%Bl-;YGFA NPjvW Pw]L?.tCx25 B& Bc Ti9JQylANPm%K[؈!/#$L%,DmY.lE֧ƯT\;NyK r?~%Sd}r&^ORި~VЇx:pSTRRgV墂~%\. ^C&'ksQ%Iv0s%Q-ֶh6zt{liu]!vhdhR`Kq_.%LjٍoqXS~GYHJ+-ȶ6m/Q zT9]֑)k8.(4qSUMsk?B#.51M:DZ(}pR< brh {JUU.L{S% 'bJɄT7 aKPk*HS7f2yfPBHo$F2.tg/>©R?@td c(L!stjd=iIM؟$޲FfA4M0Q8 CL)  l@2_GʬRV aH Uף!V;HBXSXV-]ܕ8k~Ň>A [ 4z*})':m ]05 OB0eP![rMXE,s2R u!Id h6h3VyXm*j9k5ƭmvV;/J9cN>K"ֹD]6I)G n(C׏ ?P0w#=b誙̲2ZAgt+F =lh ZPI7a4 |539v~J8ቋnQvCD+^ꑗXjrEQș?'_`J2fuĹ䴎Fդ468:]w"QzcwdӐɧFе"-B=*f#j\!"9A}S If1RSTeM=6DRvsFU6z0BxJ<Y av o~ %>Q d`%F˯ FȰ)3p@r ȹ3hmPB2";(.0B/9y} J*:|" 8.AjCw)"NJ JhhM4n>^}LyG\MJrͬbӻr4kDûH?^m y UDŖӭIN=ԩ()r\8nD[48I-5+hlbh4u䔉@9l>gtYW6ZN ]XpHrj+m] z M\#|4OTZCBYq7eӢ GzN|?I WBxkQ̶cM8:֫dz5Q1IT'ˌ8ećQGȬ-Hy QVA vpGfF@t Hטhv༠ET3dw9Iؾî.RIf?ZER@rԹ)aX5lXJjo앖TquE{C(9G}-H7k4uʞDt"$K6'NigV` q|G.ZX4#q7*19Ysq>D`_ $ϵ|ΓgH0!\Dp'359R=orGO/ !O?M~ gX+g477b}I,fQFs$ߍM*=ӈٰL;+(_ uh1MA$Ůd%96%u'v sh0=9ՐAE?5Dae?d30v~q.T u 2e.y?C^H8N2+FrQ)N\vE|S8c! T {V*0|~T ēp4aL쁷}#v*쑢j< ,"%V5>(kإ-)HBvTos> gpZ+g0odY+1FLMOr'|Q5NPGӓ)ja3kgW1q-L?"#r"eoxlp<P8gC 1 1,Xڽc7,k9HnCu!JFExqVwpəݏ=cv+3 X><(- *x4/@˿833fAfO6-=wA6%HV ExD#|X1Qr:Y8:X\v hrZYIxf= r>=1[Zj>g?7o@ f>|3K1Iv ,Fx󞏢RG;a6;톷Ԭ7k:~jab-()I;,4`r;B4(ENӜ0{ Hr [807<~^$7ćY(5xj R[˒ߏYJ/s|LO3ngQnRQP1q KiA[^Ĝ?).ZJ?2u=* 30 vIDTcϣpS0UcE4GpPio62dy{d9O֠*٧/b䍷W!kX[d=O.eFYqT^jH2 /sp+9Զ蘟2yFeրECԂ2vgn+ظQ a]!,ĄX&t]G~Y6ӷy0$a @={l IYzGw IZ$Fg*+Ԩt!0I=rW+ءy͋8F#AK#r<-,x,Qnb=Xr݇JssM<)> FE\}9 d\L H.z'-PdӲ9l1NSGJ)x7Xjvj| c}93>[+U 7:)9jB$+GdӥuB,Ja#9${G@u2L!5Em ήa:P +.*'_=Njp3 4cr-QFz?x E_ {rː0IB) )YI8 GD^ɦvcc\,#Ț}ü2N,a{vJ?ԼJLBϓA!2Зp0iBttnZʼnj(wP2L+9}Zd rx+5X!)&c^eIUN+k8{$0fo'ehyp/?R|x'=;7kSA -.Y,ɒ,۲ﱓ@6CIqV w2@H2@ Mڒ(dJ86!v!nK,ˋק^EĎEgg][s=w;=c+a~,a/u?"B6ML!+Z=oneb [ 왂:Ɩ*hi8CVUSR;RG4@Ezl D+uK3yLw=k0fof!}9Yl&a {91v؞Ɛ])#uYZc=#uڮcXAd@gOl0`-J U ,Ē8~ wڢZ[R"dq u&aVjqR=PdgWrغ|f{PH}`_ av2˳]l&Cn[5,㘕p*¼jFBĽ_qˠ`?jZ2p\eYL};7Љ 2t3W\(I{-&,rB~#6\BP.݋Yd&iو>u/ UԟQARTsToSƖ?KYܠ0g'r)ze[Ǒ}:,~}]"L}eLCiz9Q ${m`GsmKR-:'+F<[eή Qa`c#hoBgW {ɮBhS\k=jq;v9 U(yg1f!LKA3ۯl<¤;;:;9 q:D=O߬ȤWr;Ȕ bhˆ",E;x?ӘE&W W[@wf'b 0pz*pʑrNϫXW*kx)}*uӉΛ˖+#Xݾۆjth0N, C?XkB՜@YlۯEsc ۚ7<ΖՉsD#-sf\z%!@uوًY-h:*;!8D8Gin%72]V=4s?>IPiW;ݤhGpvYhڥˁ["nRckY>6G#9z6P [ C8/V 4HV<&V{l eؒ/jÆl:_8Aݶw_;K~!@}ZeK9_Qf|**Gec% IJZ _0Gsmq|3[3=·^4k&Ps WhXa+m}ְ++/}pB>t>ΞmS/YFy7b2胼 -Zڭ QRNK h Lg huu%+l̵\x9}!?{ɛ`yhX\Xi۲eV; 5пjY,+\L6sHMOij%[ùXE<6" :D ꖿ~0iR`2v3WDF,lZb >Q^ )m&sǮ,:L䯦rYqٮ涝p!Nͻʹi7tKQ9 [L φryy7J_h5CB -ֻg gswVw@wئB5[5Nc>}eah=Z1$ҍyB\jYU,;PER~6{J,]9DX NϮd8"[ V5r;ѹ+Y/xf462Wad?r&-)XhCOe-a0cVl,n\r mJe!TƜ*Q 1  %L/ |nǗ_"&? 4[pZ9ndPWt࿀6*u[OAIOljj,nah}7|*!bY+=hy][YEF%#V|o9϶'iݾbbp)#Ap9X)@^nvh<TZ!Z'si#_(VY>ێe p5!CȷBxN kLv[ k2;% BW3hZ2/Is#c=}&i8qjm7?|XmiZ||"w_kӸm&4&cV6\yyj7nr*lV\##nKw=p_4\A-T@Jp-=.v'Aqw&¥hЀnX#  q 䦩QTuZd cX|YjfmL6~TG-0;%{ FP^ne7 /d5v 8f=0\-PЏN"" .D '[N[ܪY6 {mEt2+~K]̳k hܥpvlL"`~XJ~/ُ9@;GeZ1nswdݜoc|Bz( AjA8a/p:)Kp͉p)#q̠-(E8:3:mr0⃚ >*j#~#Hhp){@+@ai\cSW2ZP<  pGm9a-g%7nօ;&y2=fԕ Z<4SDHE+]F# 'l"\'Oz&d5,FI YfӨ3g~U \zZ`7\cY*M\2] ⓮{.J8 )b6ONq``0USpᄓ@^@D{mRlXTY"uDY쒲uw]At~ײl8桵!mj(>BO0vtYϽ0 Zl գ~З>ќBS()vASh!q;wAMt.<>@, /jTbmn=1I>θˏuő= sLlVy|),pc\´EDQjESH"Cϋ0,G|/4Z(C&b%8ӆq)!F% c4ш&r2BE0biQޕO“|Ox~:0ueaj8|`UJ܉@<8ωx`bE꠸*H=J虨Xǽ%ƯN?"8%D78\r| kͤo?&~~L~O#}8G0_r*׏gjxUT2]b eDQs'^|  i0&1+YHMƌ4ьe)%֟qzÓp ? W$rr8WSF4BP;=3Qb(L .D aGw$/8zDkA- OaJүYƪZΐ_ևLJA~UzSeOew@yUf'+V שҝ.%4|6{>`/(;>SQ֣s!!8ͮ18Sܦ<εWy*m澅hgZ#K/qɩyY+R}y%Dȇ?lGba!*J5Vzql A!>*CT>gխ .tpD\/f'/ߣՔ*\s)!m2"] nn!w}zKY}V3{mۺ 5\0 ۧ}A7cf@$}tbR/vzjӹGοD36=g앗_.yv?~5?iT{EU}!dr5Gկ~ՕrM? ~pDoPyn~368qy6)+)G W@㎿Z7du]C<]evUW;{}ﵝv}?>q3zˀތ ԿcnIDATr˭nYr}[[ήhXа3bqk6(Klҥ4Ʉ0 ̩(pT/7)Ďzb!s88OQjn\RVjGhnaEa2 Q.p"Cy<;tP&;x.DKr6pwԓO[ [' CQ(09ӕp>;Pbqx)Ө򗿴4 [o(OIF8Ԅ8창w/| V3'vƲ p?&'{4,O0ͮi+US9` k۱QpW՗14[ *"Ddz6ܹw3ɲ֮uDO}1j׭wdTXj,~K^{5 }wWɝlO` ҴdФ i3hu DY}ooG8"o8,+&Ij<{88_)$oP?̇CO?)S9pK.\z?% !_ 0*&`ƣXUO﹔GJ9٨߈ew,=OssodDFn{hŦzg =\_QyKcvy%2|t?Ize{q1}UϽ~^yqTDbrp먰%5'_ӉG:ԗWCd*̥pq8(J%{y,Cq\R~@pORA‑8l74/dHUKp 0(BV^yOld'!8?[ωt)!("^ w..NmWN-J[:zP"4RD钿MqG ]!gRàN鈀5 /PL#q8D!Tu<ЩL ʢa ^bW##u;֎qMR7LQV^M&-(,uGAY>ZCIUy GCqJE-PWUZ~!&pRB4{И,^ͽ[ :8#( ,A,b7CY \iT(No4dOF?V?Y09 w*i:9c78I Mœz2i +?:ch ܢPGE|sAKY.D, 53fީ2lCC}5HjT u`'O`|LX:;DoxAN XI^vbVwD7Kѩlvzd:J= cAeQQ' ad( aޅ"h@=ЎHBt^Ȏt-P 2¦fٻ @f i,e. fu!Jv`h+/+noZSofEQ_A]tcn[.%(ʃ5by$]&Cj|v鯃7m^bF? }F֫́!݋`쑪1$mV ^9:e!!>Z=ۋ1@$Y9v6TD5J/ 9Ш],A K+gФS^k`0 {ue09mk"6k#S> L>> ;!06$p`:kn3lB[kGD[xB&'%D㭜Jyc.„\UwBhY8k81.Rp&kn%,~e*\>J﹓"ߩ]iJ1="=9/uҊC ^ᅊ<L$"WW΋UFJ΄$Jr#p~RB4Օ#NfB "]%ZI=ܰNdG2"П8ìZ0q'3čMWu$SOӧC/MqܙRe:'r DJ `/!)gcJ&h쐎%tϟe!1c+d]Ry;Hl]@Qxve^C>{Rls'תI dd]EJp 'L3;Pҹy Bnp(BXxIhp'ջ]^34yU@P\9I`AsN8^A,,0Dj=C(p*0$+'99u"yzR˞RmТDw9%`!k*Ղ,*g g JLD`]@ b11MĤ_DaGrHט4N+ `a.N;$<ؽkӣ htTb6yŐ b5>e+:< [=8hx`d,K9Wd9#}obsXD^ye[9j$6F]:la*Nz{mWF)[RC4(f .xfAL kChd(g X Ɛ*] X Gʱ 7ͻ=G,YB$0XIY-G d@hi4&ZuDcњ5LᲥ#}`)*v@t T_q XlSC<͵.[R1wÁw /n/4Ĭ 0}GM ڵg.h7 QT'"+=qur29hu%Hؤsmy3,\%zgU SeD[֊Q,$,޺݂e-kSa@*B,*oGUL&s gZ\0ϽY* 'CȮf?VzWXcY 3L4o\ PCd[*.2+Żo['m<,ϕ"ɴ=CH;"Vi~%5udb./h:&`TDJEH/&-+c3 C6UaipLJ78y:D0X~`jр+-֋u7) ' y*/xKX?|aj2&#t܋zӈ 84;f5ʖ!Ѥ@(]bʏ;b)qt?J=+ %KBֆ;f!l]Mo}t6 U՘JŸ<́A~&}3|ѓ=,N -v\C󁠬4|LNgOs^ԛy81Wqf9eaуpjÑvcX1 n?)a9˾;(ӑFF~ݿ#7z܃$oc}|j`>qиYa4wELZ:"e-Lz=.%DV PC<9WA5{CD5&қܯK+d{xP>2*/beJK㒧⺖AxY2]\~!АƪD~*ʇVE麂Wr=+%MdVqN:kt8)@Z,23y`02큁^$&PoE/HpI qÜG,BK! Rc5Ϗ[I8/&e.65 2=.Ip8MJNI ޗHGR~'լ~'<DmN$O0''#%b%_?gG-y"s^áQGYNwLD3ǴKc`lH D&1c M4cFY:Ah40f f(K'HMƌ4ьeiI1p;2vi Y"8s 3U:fiI˜1&1, M4i3D3f&Mc@hƌt4Ѥi`H͘QN@rmIENDB`jqapi-1.7/images/0042_06_42.png0000644000175000017500000010646511460407074014644 0ustar metalmetalPNG  IHDRiCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxduuN=99'` HDSL깞 *$R~fpHDI`@ b bssN3ӹzR(c7[bf{ws i^ʾ+6V6>HvW k]a|Agǂo^|D/}qE_߳.i}_ C}AK?[] 3WɧO}^ޭ2ۚ_I´+׎k-vxVҗԻ'_}I_~e%x.ѫ?@F:_Vw擏;{tB+?U9[OD?'/1'Jژ >vCs;wRt`bخcm3nK? p?o a {A/<;=L[yɟ[y{:-̏vT_v|M_3mO|+3ؑ~m|-}qZ?'t<=tw'3_i}Ŏ'?9Ʊ=oē==gҟ{S t<}[`[t;<ޖ9Ϧ}v8s_c ֍x5cS?=`~"}|16'>>w;ϥM|1@cz:8=5FyihySzWv8sAJ7_|MK+2q}.:L|ܠ/jϞԑ+egUOO$2+e}(~ioOzxeiwP-a+ jx& ~ 1-i"׏Xo ?ٳ'2/gxT$ペyu|sc~cKAWikϝx\yOOko雈<ѓ>JыzO.k?17|T>!omg򜆦4=tI_xV|WIfZC߿`pZ?|\n[ƟXEǏ.d>V_E:9 EXK_>kgon|Q/|Sӗ{o~o7~M_k?E"?̏>`G1O[y2+~?|pґԛd}׿/\:9:*ܓ98%>&TN]Z?;mOGq}|驩Qi0O6(O[;~y{2o8wfv穜}}qE^QYU^^~`e/p}Ɠ5YyK`x6W k8nxQ5Zq>䍺Ĭlʾ5&o%fgV}pܬ6y.1k<f}uY٨}7k8nxQ5Zq߲_o/1#g},V_ox2=z`뽺_BʆY{nsˑvV k,~܏-U`7*q^wUJC2z4pCQSUA{qݧͣ3ohIEMв&G$G9n\_ƃQ4ҥ 0;,j5:tO V4rsUR׬\<ܥhXr9egQ)G'hU,H;r|*lCEjTڽy.4-24$GQ f>ӡk]ZȘQөmj69HM(nZ[vtɋG*,S>䩓unZW YwsHw+wkQ,8a\&>c7pڒJyb +jƨc3# {Eӡ76.(v@YՊW7h5iV!iFwmW~-{ĝ2_nxP}5V8xD?P]aw3/kXтBy򴣮Q&idTWҤާē3+4's}y5ºrշhW٠"_sVSblrk5nِۢIgPrxBTWUѲWiLon\MZeP5Ҹ]FH S,4`*U7+k Q>;ZS*2^1!N)BY+usOqfKkt!}Xwb]Uяjc-*XRcT kIya9X8%c\\I9 OC^ H]R*1my\gɸ, )ɋ&ViS7<ɾZ&bJEkiyYe9 0X:9GЂF^^1h(#[xwc"ƾM**.V^ ;yң"eyx&UVW[ DZLBu'CU;_Qh漆>"wTO\5_yE[pHdFt׮V"t*YP]NR޵KX!̝S:3 R//hF| po /` Bx4 tSl<qiMNk+ 7ȿ|D7:u-_;pUBy9dpX+kjL䏭IY jgAJ?_n]҅ ?^ƗKsd\%s ھAsnjWIT-z,XfHBkpyUkuR/a7X5\O)eKL+ ȱ*fo=6ɖ xzoI)Êv^eܵGe%F"n2F4i}y`Q.,|P~*it Lf;d2>"U~Mhj9EVMTLJjMU]n^Rhv܅w6RʼLKZ[VO];Oo(!\Z#HgV}ocƓkGI=+)qpeZ}$eZ]^|VՒi$T4D01c@I&!Z}tQZ\jXhD -K ~CWtyeM~K.'mwe#On&V ̹}hS8SG N@N+IlnM٩Nӣ vwD!93`q*V,rje/ti=߰IՈq9ܲ;д]Pa|E6մCK$w 4<¹q]+`QVr2aEn65plˀX?]=7+ 0Jk5w?ShLC}̊{Q RJ&g[3t@|`XBF]ة|PwXZ)N ];yBF{ 8I)2B+.U i|*[a &qru̬I/Լ.xm|?A+.Tܠ wl"n-#7Fu2B0|ٮ+GQk;j~V-7Ϩ0QNfG=JcTW:s"J¹^͔)ѭUʥCHa/ KԧaƑGazp9$ 6A[@ɴ\{~ooA%dhv1j@x:bSp.ѤFfM\&-U|pOcK\8Jy]_%%rp}%lo. vKmZUUAafIymkRa4>"'Xf5h ̶Ĺ/40Lodi75BiBh,O,Z7 *+?RP~~vG'CHy7dD#1$SV7\wkl5{YXE)<|~AHI l" +뼤KgUa%Рw^VՔ+ԜRs)3aL쿓 8}\nDhJw<|epZ?J(?r]3K;H1@ Ƽ؇* ihBg4[{vdV~2s漨5^c}Rf {"C,OH!:Ԛ 1QI) _~Kvt&dpe/~OAu`+)+RG\oî%B%ąCk z9x5-rW,S]AFyBVmWmx a9-Mu1#5V.ǟVs^wxR.S{Q͛vnNR[^s.T?Cee3n8&..6oVq)wXcϞqB> S+&0^+'4{u:UW+#ܨ5JGjښ)R<}mD"x 0%2ƚPܩ"A -UJz;(g5[İLcڃ!MrU*Qt2!0}bT.*9}Խ IDATͫ X/%2 گABT*Uǯ ̤.ԨKKW/P^FLdG^VU@s.B0aZ  F.J=hǸ x4$aOid28Jw[(#ٷ[N }XSSJnpw]D nYWO~/0iɸuQlX.~\S'0M/iܭtf+*W=]!?`mpZոcS,"x < #۷e7+ocTNyLf9-o$L9í}Ps!ڡ_H_R0E*OKQKIk(9PJO҇(6Vl[߆'+O)_#3c3^2#[!r.=x(7P@ݱG5ٮ}C Ϋ 6-` ;j<)-u"IlؾfB a- m=NV(V ݽ-u^ݸkuhsYMzU:ծ&Цm}D~0DQel{ϐ­yIex moYnv]B$TF6B^V`pw !&kNƜ^.*4Ѱ]G[Ɇ<|L_y%.4PҧP#h ʒ2ٶ(GQ_fFu0ضU1$G'&M @L9U}|SX?%p=*Mh^fU"QGb%QócRoUi8ZceV~eM'DB Dr Q-f#zjZqeߍTTiM&:"08s8#cxI`#ǔDUAvF߫ Q.BQB"M5$%xCӜx0pM@B%?O4LWGIʼnm<(?*4O%j'}ǰ#=^*}2\}U=WCsO,(ݵSg^O&i4]Ŝ`*uZ/KGLo &gDcNz@c`ILT5X9GN6i 0EێMCHe'!(q4<)}3"ZcC U!(wΐ:}I#zmnܦn l삪U`hR ` ۅ1=M4I[FżuH/L̓-&T_fMs ɶ0BvHE&&Tg.oq?7(‚߫pevX)Ut^P7/xl׺AsGÖaxhB~fbVxAּ]~U*޽虝ZYK vz{ .j&;gUjjS 8 ʑkW2o{]2TѓcںF(N6{ċ.l!ṦUoץv:6u?T)c\% ʒ;eCi Ciyϭ7xTT ' XzG?h:ؠJNzì1otWTu26N67ARk0{hHEW4][Hs yXmtB1:NJP"Ԧ7| EM5n&SZMĈ+aY/"GZy}L%% PRmMӯh( wњR6t%,=sOZ,F،pPk8"Fyf+Rj+ <7N/hMV9phhD@ݱ 7m2ى32!䳔 uqyZv䱅$^|7^2mn*=`dpN5dwBu+ t :١SαuJv!g@}\}/Tձ}"\`I[L2:.f-sA658*T?)UWh^ 4yF7V۽}2Hɯi'yՐ/"2_ܛG;9-x2ZP; vg_Rc>0R +ݜ7ʲGP+E [oOkN_eµo'wo$D]/@,ш5I.XslCahϡ#-NyB}=]z! * O-7Ͱ}I΋!!cLojܶI^7_F6gBtnM\}M4M9(-WS0RrsKQSi`l$sN)Iu9[֯20Epjge6j"IM:}[OA PC FwdPe2>Ǫt=LIyFrQXdOh{HW*,RwԨұ&Ij/ably;>98w'YV4 ~]۠]W/hZH.Fhv[>J{͖̓:\[*0XnVk[c3 s]*~}9]qi+kp3!yFg_{Zy?(k#mUgi0F㠝4m*G5KhW6 ·#2_ec9zH1Gԋ?U]~VV)F=Rds] I1_QG%0>b5T :4LE݆8+|~ ȡre*-P5ygarjJc<~"0!R&6E;OP!@_=ET8MȸN1lsYqb} ,j>5i97 )kא2h2Mϖ y,N"jf4ӡ<i&ܗ[Z-+p^-G 1z,^־m4~~ Wׂ.45@ثT.*zQ㡿,WXGe˳JaD U"j*ttaP\9wR+ƒr5M o O5gɧyQ~ط>\BGbzR(DL5fqfz4s ::XVc|9/;_Ԏbnj8(+S?8[[!"JΡNk2e 5lok;afP"UtwQ*oD!zʆ 0趃g>ׇ"u&dB#u82[HP*ah׍zY(&xܐyloNc GHqM*Yuj;oa1x@heraf2bBJ/wq;)% _"DFdixKƨ[ fhNu+w/JEIF1Y%ţ 3IiaKV׼_;6U2&e .fhε m OV9 ˕GZ_L& 6L1365et:G>OʄW]{T+¸> Q-f ((1~Q-6RB0E #A;j<c$]]2fu~I^by x> ՚&\2Fa."itlR^&HX礹(^H@用le ""Y#=RWV!hjrea lQ:B(t` dEHSODS׶)~b=oLsTmM?\T֠2#\ig)Q(U2-.+/ER V>c2ä[EL~-x۸j vXq/8kS79W0URvsd);Z! gQ;g;+o? h]dj@LIc/? hغQ;g< <m.qBlXGI;ec]'ܛyXd pf8 %ງ" j>#TTy:K_VIT ȓx5$)nݠUעd{3fS͖R}[ D3HA"|UoKjaQ)!ET'Vj*X$ ƵoiBGfTG=wu9=G<ղM!aF\UALN&6}#˅x7u猇+Hc0fܸP:Ҏ82ܼn$N/Sxa蔍,.Y1а -j*f~3f"Eì6G&SC?w=bH, c݊#Jr r҂*$aPsgNLOȎ Mj"H*.T%-ܢn<3'e1Xc._fωy&ƅ9ט}H#@ɬ)=nz\= O1z 8l"V,MHW=¥Lle5\7:MZv&GjCyXQ;f $Clzꞇt.cLwi.zHA91"`{uQ cw,׎"|]A8/+wF@r4RF!kOѓЙ%|u*I;M=EMEM#+Aa< cubL4M+BrpN,3hkxoί_pc[2Vdž[4ȟg;)I R{ leV W>OpjWI@Y|QJB}A$f/xFDx'ׄ03w#uBW&yhP>F:e\ruʬ<2Ee.OSn+`A=K 8sN8݄atF[(`ѴFd֌eJKń* G \&`#ݰKBj<"T]%E]c$EL!c_eX`U\z]fm*fƙPCt.-50T!N Ocflh=zɜn$ oci:68L^pJH[) ])͖xr *Xwcq1u~J-t>L)x.8i箭.FQ,krO]Q)%Rt1e?b#ͫYߦR86@zD0R)TR}O)'߮99 ɢ\HM-*ື-mhTdKx$CwTy]uߒ@WCseGow_i\]HL0<#ax9nrf1ZJ|^wxR-+wX=v-B˒%zovhdy\h`D+gہ~yA޵>*Ff dB&V!iL|_POh#Dks¿"J`pF~-N 7z kd^ 35zQ~ʽ;u5H[-&2ts):H[6i5z5 Z5(6`n>5UkKF48z}M-Gz_KQ) TUmq}d:6u3,/ u^huJ"٤'̕\'}5v#lP DPY+/9 $5 '38L (^|1Nwvר~54݇TbNh;K IDATƛ̅V3=O*= ٺoAx|ӪXCαZ,!  i)pQ1"~~83$҄#k0Anl<*Մ DV}#m:dj FAqs+v\~IkjŬ(ӞcD(:z ❺OABhl2_&hcL r16oYZicpS5.@0Ԗ=.e#q&ߚ5! H;(guP,73Chm Oӱ$?ΏFŒd.Qպ|s֭(c,F!Pa OiKGqܳ\VS}1d*ZhIPrէ/'(しgpc :n0@0w&gj!ƨM3d\tT~ ^â1Ln{ cQ(F;Z#dHUMI[*EBXCx L1-j5?a@ey̦Mj@W@qqۯRƚ,04 yN1s%-86#Hy3ht"-[xS!XNQL[l#PrlPn(J*Fr>Ѽ:b:!8 C|\\Kެ )L1i_3ڜ3(6wҢspJhS1H7s=CYiQ6ch 3Vy+3 ,T R Q$`.3X 1D#ԯF{>^xIdži,RX͠b';~3yHiLfY?4r?|/UZoE'kÍru?Di঺]f̨Hb>uᡇK~`<\C w*}b$d 0o+D7@ЩMEj#oܧb 0Gjk@7ێeq*ӹTwrܒ%Bha|t&4Bo |qYN|5( xFlCzQA RwNi1zR-B Oo<8WegrG!Z%v|@wt}s˴8Z O=MiX޻y$ϷZVg2졓`4BO#lE%]@ C,9n*ۮi8^jHH(phF(U^Eh b-5Mho'0K~O^y 1I9EOD KmKU)z16#ដP/ט# >`jsú=*:2#+蓻̒U3>fOHUZWMufp*v:E ;X!.7u0c@^0O.sԛNtkp`\,bi|>--S:8*%9u usfS|x6?6FTWFH3" ~O7&m>F<05$f]iJmjƒiyUgc@ ufͺ86\ԈzlxPp¬Ho3}pleɣm2Syd1p%b#h7 k3Z NsY]7{e_ #'dpwW\ͪzȉ^ea/wٶ [iC֯1BV`UQ֗eНg- nSqa0V_e ?{rSfkB8Epܳ'O&Aܴ#BLi3g[1Eo_b\ogmiR-/Q~;V9r ,^2hC,!7Ǖ[%3"R*>h̊WV>!WS_g͔]gs.հDDg{ &;,MqNw8،jJM?PӒm Kv`Gj@;)jWzbٶaĬl2Dwo9?!Ӣsp1L[")\N25h=m68B`mMK'^lǾrvYRX7!w͙6K#n 3Nc {jo;x_G%V]fy=oor ,L)sE@gM,vЪc{vY}FPa2\b?-^P6Yt\5 }tyggu[lBN?QEIN*uS\V1P)ɂŪ"SюUyRndӓrT-&Ɨ~QvsiV2pOkD l-Fg1[`:x8![YRdgmO$)} *N#,ɟ`{ʫ.^*-A'"yOe{js>cU9Կn=f󔝜I6G9^6 1bj+ri A(+ݜ t~Ob/g .ZlOf~kM˗[g_jbsLfl#Hg!#[I;QZڬ+p6 D*Jl B Z[(kCj/FwÔ"@ılbE9+lIp~ϒ۾ g͘k6b}(N`u7rzD^Cb뤇qV {h+ 7N;6@jz%fsg[cہ͖}_!iD_vlĨk"Ί:V]6Å&usn m`LߐF<%~_q8(MtHQRF"(S`8k-tή+tYo3oD/zY Uҳ>:o[x*Nk?pV; bIK6~;>P|>oD9?lKD=gf@5$*ܾ3n?S6wx}MdO+xD!'"d|69;9U*^=OPX9qͷlK?KbM-֯|| dP(Ǐk2Q1dw~[JƁ֯~C?Wȶ^i-}b?o=֍/SR|D]l}pwvCOڮXE 0q[f=CV |IkHW)z9Ѡuk۶ms]w}^xyۺe @/ްuf[rԧ>eEH]uUH*fYg^y~]pBK_?.sGť^jfβIugsxVlSLu3-YĪk7cvwr[zRGuuԩ4mWs3DJov\S P?ٮmV(lwIDAT=*@/u#^ֽyW^P0ڑ VWڵkVnHGu}_? 6m؈6 >TAnM.Jbni˾̙koS_'R7~1slyamٳ5+[͙;yBr*g ذIq$IU[ξ=p'KI&*mlOj/O> ;}\ L8Y-\xbcqp0{plE8c9lt]{gW>cw} BQ725>GƬYn_0vv=. \gq9s8GJGӉ{vѥETn8bd5PUex1Wିy򷶘.'W ;uNF1 /Jz'yґ;_|E !*ƿhY-[ワ1>Lqdz}@q˗n;uTbz*uceh WsqKE]`E{ޗ+t3Vp[?∀dܤ.[ݳ{˫Wc?B/m횵[IdsiWE*)z7ݙ3ƿf8YUYɸW 5wM7y}ooG׍v0BNikfnMWw`quez,ݻ߽G?r`?W~"T{Tʫ)nͲ0-9Dox e^0U,<^Wו/\OTYx0U׳_'P).3YAFCL5`)ս¾[ m+ޏKxmAD@g ?ҳH܏*Uk#髲 b%o;HOrz@tAF >>H;|rn'gwT JW}'HA+ۉ#DfX *3wxF?O\'SA_<#=?r|π\{伧}/'課xJtVi [gyɊs]QC1S =a [uq{ͅ@KĄbVURac3f\#TP>D./BwqJ 6V\0lhkFzs!*X@GKWȦF>?4 ,T *r+ً\Fs}ܞAEHUaDݤ5MrwurEFFA)ٓ>2)C(j1Qޑ<$P!ڋ9ֆ BKro_Wά1{1nhMz'm J .豄à1`l7c{خnZz \yް-_A,5-7Tf!,JihŵQ[PYlx-<+xqȳՅ1.c|P_X\% !ZlA䴊=`(^dր9&NB)H7QAx*2gq!wU <,k+Q9֎QC<öqdc6pEqVECfgNl/FHptKۿ8k-J#Wc+6GZ,BbJi]bҰiu7h BmָEV,w֝CB{tT)Fl\k{|#KU.[v쿿wY:zFZ/jmEZ@Rs]'AUȠiLuK}0/Qը-&bLNWyR00y..oEw~F8UR八x}S˫@ `*p@tq[GAt)LORP>,AD!( ߀"B3Ջ& @ WBZw~G&#Ў秭gCZ[ ) z8 1hVﰗ N5y8@)GDyp7BG9z<Tj)a XCfYR?#?VGL}8ib8iK1}''|^)?{8f\c@qH xp^7{([aɼ+1?j|#~a{H x]&?w Ȁd'XTSĝwu ' |jyztQrX .^JG s:Q<ġ} 7| ʓȋ"MuEz2'rȻDY@yT>{KS{gZQ'mwh#+l! !! 4N5% ӻƃ*4^$'6ŪCnjy6vwA({fb#HasEJ06]\HH9ᇛ-L8.NEQΠPAFj%[&/|_EdUe_9H*۸vC mmBYߡ?"96t P>{ZD_1J,?ai?%E($Zmh1D5"?MՅ : &WE V2 ל@ ǎUo2=gXlK+?)HA~]>ax so[0FvT4f+6aڷ9}jd50n&'CϮ"g6X3{s}dN6lW̍؋cV|LuDZ=5ƃv[ (TǵVq9k0; N>X集L%X+<C"ZX_|ʥڳlnÆg ff!S߅:`XDճHѱCj+,QUKTwT[h,6gr`1{68~`/do"ؖCZbBubŷhY])4!C;)+V6_L0f-A+;vlvM/ۥgٲ`ݟ}h"Yan*_j!6iWC ΐef=M-Z: 9H/+ Xq")mW-ǂڰWyJ-V(? } VXdΟm0"^T8 +ޖ=Oy P'% J_>0rg|t_Ê`)sHL!ɬl3yOG,4GΩEv8oypgZYD0u`O 8nIxB`C~lt5o,/xvZth0AKpA?O+tuƧ,D%:f}86lwbYp Vn^;[)Zl2r.\8"w<3"n_j3. %MU͞Am.WwG8+c|[sKa(̉>h` "PҲW> }0^L) 5.L{54΁NgZh;iV2H1j^/#lp-yz Compy!i7WnU& ECA?!ΙaCT/G.C-N'DfCg[x2RztiZe OUjI鵆J;O 7S/<t.8qʯ5*W?GsnI=b ]Ps9r 3ښEvܟE6˝#M(+=fPp{^r sJqzCM+LL>Õ{^BJcJ.XY-}|~SbX)Bg&ԺGTv!\[_PL ?|-f"K?9'by%GޫzG^&@Kۑ $.N@%ABl?Gעrx"EJ|T9IBF( 2`Ȁg̤̀'1S 1.0 L xLL x23yYK2q.T9{)MLuJWoj Oj{JǞ)]-\<){4!iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxiuybߗ}gɽXU%Jےcr Fe4<Kfx@{020nd4Kv[R%6U&d{ddFƾ|YUG,rLPb]"{{=Z<~W.V|m?+6! 殗ѴmWm4wdmwm%km4m+/)_߾opGFcӝ}jI ܍chn jGےFs}wm{t]ah-/m4wW6nK jGےFs}wf4;:#ɴߧ>e{oz˿g__Sye-#kS~_㟻/_~AWs'+p F~[#zoo|Iٯ>4jlg]++OomWrK|EIᄒs*#o?mXqSQCMeNW'GB'H.T?uu9wn{#:3[_G>=4,^ ~3 ^Я}? OWH2rk^^{[>w^y^w>%&錾߾ 33{n +wGp ){W{/[?3#-'=ݿw?)?7>K'[??\??_M}?z+j3Z[T_8ͿO޹z?;Sje}VxgWK{ۭg?g3׳}53Z닟ySϾ:^ů~5k}?kS׾:mժcBO~^'΍?[1g_lmI֗>Kl} >q{N=k|[;4UmM31=2ΗVwj}rc|h}ky~x<9߻=q}ȪcSLfF[??#}+_הdǼ,)O )x{}3l6\ß0^ Q3zȻ^?1Lx2œI1ns9:g?7V|ouil^[*2/<|F_f c2kwFҦ^z9=6~=;5ᘔ]y[}syu?vxA_԰~ ~^ڇWǞWor-}~+osC#}u=?I_ƫѥ'Q?A_ Y}3=߾oco~5uA;>oԿIx%[{(/4¿)lig k g|{>)4|c*mY~y?i R?_h~&wdžyÿfl;os~%^Pܿ;{;ɟɬ=>PP/k:zuWToo~sL3Z/mi]@hz/hMzFsK~Ah6p+6^ FӶ^_6 殗ѴmWm4wdqn?g{Lg+ݽ^vx+_hM_m4zEk+^~my6^Ŷ}ޯm4&6{{FsWx<|bh>6`Wlͽ^Flm+_hM_m4zE#aٟzTW~Wߑ?}Go~O _x;#glJQ靷dtvj SGCxz[KB|;*6n.j{ jBVTprЌW O2D).ݪ]ZMefG~=y9MZU-}9]LwTVИ+PU7{*БqeeŸMVYu:Pc{b?f4선391JYP^z,զԇVwCUMM]RTP}O~X7Z)W- s/44RYĮ6޸(.c %'^)ipwau.}en42B׾Qc^#ސjh0\hI^U ;oQ%yYJW6ղXҮů(A"[%B^!<ۘSՂVq 9:B(bXLMk]2Tu+:;`&<:i]D59 qJ&8!YzЌƌHC7n)XTHjJSŽd#j8ݨjPV_ 8[j*Z9 ;]j̢L!2 2@!*q6ຶ]pe#SsM IR[K*Za8$%=ȦjE\A:^V{4|OhQTFW`@ BḘR27vT37(UwߨL7rB+:E*MXtt{=[Bx9[-N㰨Qh*GBGWVƥ%yр0RErd~%ffպ5tf(3aNa_zO ycgSJ F\5U5r(Պe i3@jWNmzTpy `MhItblg<Dί i3 0Ɠ[7/\VM?g r (/mԌ_TyW7=&C[|W;a 7ji5LQTmwCj&#Ue:h#r΄̺L֛/`|xPM-kTk ?Eb8$!&Zc;AL5NPW:)'ȐN}UY[-2 a#gj9\Zk-2SmfAˀfKpլ-~B5fы',MkrO mʧU(=:@D,7mwjLsS: ټN`ٞ0xL6>ާuHE ܪI||,jn .Y^@{ 6Ko~_ q1ow#3W2]z lt_.SMcq*u22kVu^#dI {53tNEzrb3ʰ+7%%Imp-0ö&e $GGp*#˷!wNÆxlWbF#ҋ_ÉU~ UU< o) `:@g]S}u֤"+{e%UNs\K'[x ;)?EhrM+N・VU}&`)Bfڡd\*hPGtw]p&pxFx5X ša,]6:21Tx$<jW%uXoO++MIttTzDNWmnv[کP˂d;Y^vZ!ciAvʬaQ!e&uok/ƨM⚝8vVy_'džwt}v C-ɫ \TխؚbsfH3d=6ث3d/D]Zrҳ$׹ ȏ}(sr~lP{@F(D6u -YIM󪆶'~I2_Q~{^{qdJv3!O(.cўAyk?zF )X~v"luJݚ6wcnC2 %Ãke1UxJx@3aP`!G!S+6 hpi3yy< OQN>_GUV7naDlfv{UZq"ERnLnhJ*9uYOg<G] >ီQN8kZ:# wRJ,|c3MzU?u^^XKM_P/F|;*E9Ӫ50ÃЍWجk31w,40JooEK l˴ȱ*EOe5/I1];X)\2)؁Nhp?+6uK58$*m8]@Af`m&q=yL6;}%ɖ9i2- /h7FݟdgEř m᭺'Wf9*zu5KH`]Jy'>ƫrW>)7._X W*C}BzqUfY96i܃a%A-Np(\Vl-ngE[n Esje%6*j]:6EUfd_B[g=!Q]%n;=L.+ @Lu 3{\OAB@kr] >ßq23m# F캹΋J$8\+) Rƛd|%aK5^ړ#J5T,K.ך-/[V˃aX[zw&κac40Nhxp7fhKŬtFyCL.QXڠ'5Ɉ5P~d18u}܂ڥ`xUЌ6լmj5O;Z"s轼bl#Sd$5&y::)=n`!bP2IJ) v%|Vذ `|K6OP'#.]Ԧ ~ ,xʹQ+ӥS~ّϩR.<_J WQQjw?⠃ k`I52DZ~ *`Z"+aҵU'Ix|Q>91pu ;@!#E0z-rCґTbO|rO3p2؊^.^.<%ܭ/ | ߖccEi h B6GEN6)ȇ'`)4||v&9g[lz$эw.t6BhncA pC3PH+5u}cȾJJ%MD.>ȣ*[~N/#' sIa f4iAqGa4Z'ذ:p?k!ؐ)6TcCiml$eK[l|Q'LYH;1a-PH9N8I~%6jB^ˑ\p7 R`WU{e%ezR ٕeZG&)N `|9ԒnFfZ[^QvnF'( lP[kuDba7b: #Ky/Dc妴a3xf!T&#U<&xCq%AMXFZ[ qԱ#r/iJj3: ]8^V[k*?QY{gίhNa.MeW`u,2lQIS@L)   'MFۯ IDATEۨ3~(757[G'rJo)VKQ$QY!L> p_;BPU uU=Jvן+s1yuS,Or$y<6B ~X >BKkx$Mysnb)ymER5T|IUS`2i! AWm([m*윞̵it/ GOEsbjan ҿ|,ūEAF=] x6o\.#N<äy"Z\EۍDCƐhcd2l|踇;,apS荷4Rqy:ܫQ0.Mb=89]i6`~®#D P:"׹'Tܣ p.Ƙ&Ihp^竉uu-.(i u!Y(UV_s9mgaq#OWf|(w@F W@=_R~jd_Xǵ-a0 EkrHPkhlUa )Zחh4PyT*#dXHjI_`liE<&66T98d)t*ǯ{H-R)vn]A q:*ھDBUskM> js6M$^ʏ FZߖTw. g{#=:ѴIIgq,U齹i0.??GB^ATv@u`g8yTd]\pX]HE! jxz7-OU)]a&L2Y%^lg>2 i}LcqB,*_JH1qyf@*ꤴ < R9N}N'l@@dH.A"6: 6(Պzi*% J80QOBA.j7kyV bsI%J+ C[lxҒB'c=ёEuAs1m&hCPҥ*L qk^nRV !#"-|b\E"Q xGQU6|qIqԍ,`ٸ(((yn :MV7.Y@S۴\^ݿnuq!4޷ B P>]0!%|w6š%G?q$f/kcm:hkꅼA(VEQ `F )|}pO;# `;`\=nyů/sv-%i#7zHȹ=6֔eweS?3Rda n:+Zq"eؠYW{+ND0Ż> a#BO/Q}{K)y46V%̐iRc+7p<|v` ^EhZ3|j0)t@-~!AsH7'HP0=fCNBz^?!-j rqh6hԩ'ҟow;n{84OCYǔ\ *կгLԵ+~1sK`XIK߇`ɠF?tb2=62e3j5E+I]FX ^B_ RPLQ5޾ : »r j,,lSL" Xv. l^Q_g\s:"b =b-DoR ްnD?xԚ,ؑy]p;63#tw.j:@5qiK`7':n^+~mw#yC3#:1u>tqtUY=d {YFI h)QeA_ qZܝH;E-r|`t:ŀ|^o>G:@7R,x:*ԫ|j1m.hVa[d;%;vUyߍnhݧBM fZ)j?Ʉ d3nm]]# !$8nL&uA"e+z^yM5҇!e[Cl>}a}#(%BbFaBAf:h 4Ҏ WeZ"7ft!|=0AW%NWb`M%dF_"UP~.7tzRYJPW^RP! h`vNTPU="kːoKR_ LUT_G(2q1lsE~CtC2. =W%~62K%:eLxh&hz/D1\*ق&fLI 1scb_ԘpQ'jVVBA%fCC'n41]I zf r7VldRYxM35<LWA<hLMT9?Ca-x8AEfj%Zcl3i!fIaz c8y'ifZp/k+xw[ U2`Fw&8UX}hH%<0N4.` Rs0:ǩpM]0\`-1k^tNFgxq&e? Bށ#^6y-?U~Í@GRjvwQlD R{#X,c&z)M+ 5PzƜ TB5*f0wsxFQgJO2ۂl쟞Q8' (ܺaw6%BfsĄl^z4'H`<k* ED=ζn2hx}:}CkGR'7蓲 װT^}s4U|_R6KjʾFƑ5`;0X :!3YҜ_Xh?r:x^ϣ(;n($4MKsmV9FXt7 fw~&ͷSZ8! |׊]eЌH[9Q}VH'ВK\n%MjxZ!]%UA{B#uTf{vRq3 yIȷa(mulۋ M104RR 8:K3kXV R/y,ͽC23Tve%t }:hots\WS CGݮ0a4~>%|Oe=(SP]x*eCXOnhl 1kj[t.,kq[}Mr!Gh}A}"qxFC*MH".$ԏ`J֊̴:[o'bC~ 50 CyOHK uGPn0I+6cf`3`IAt-SqZ=3Z}Xo:!7hR9ݵԈNK'HZ&JA&ObdX?56H[vhc1A ~]:~VɫoQvȅAn*D boP+x^JPPޠ(A05Q >rp9Vt.uV"L96 Nt ukW4t 8Z!!"U!TGloeEC6RI`|+06X*1h-6Ǹw **OsXL<~伒 Zb_D "a%>S9&2!V7{.}AJi~ 2:=Fd7NMm-6<~},IJӫ"*ԭԷjʧQZ\ʄ.Q= $p /DP%#`4<$_"D=V0;(zIiڮ"[jx+[{LQ.+JqfxI$Q!rNg],풚gEG'qh!u͏Wq(J"Su5Fkp߰{JVWö$Ulf,h;xm­0'[`q2M4IVE;f a!`£[u.&4L~@Y׀FƔy{ t`B{!c0 GN:mn9$(斊 v7ibMduB1֤Eȋd.^T_j9wݞn?aq/;2[T1"pc'OR^h"C{ar[tL҇hjHڠXo' IDAT ( #^¬_KY^F]P~k рgZl6n^&[sl88qHnv5=`!Lp{%0},GFHlkZbr7A;aA<h 9ZL(Ν}l()(Aʀu*P IK}m+5U~gJNf7(!<ۥő տ]&+zHhkn7B=)n[ԽGoĘnXCv4лncb<NNZ[2 >б2c״-B~u]B7;# n^cW*c yU/9]h/T3&jGiN} 1MR?LCs3 +'O!+xm- mWEO:4EN~.`3И+f0D@i*bWeɳz:Qln;M_&AnϠ'ӊ#Fh=p:[L!_(S఍Pw<$7Hk뭫WTA&OtQRPӻ6:I pYU+(}uZ-C: sfBʝht(6fJk( Qq=-qNWݴwcjAݪyQk8/^j\P@@Mkj,+UY4*#FsG:B'~0Aӌ]B2Z5sRxĆ^_gt ] !NH6YOiie[]3WdCdw;)ns"2uQ*PwHt3h ^&vQbr2鼑[㐌T'7ac 53TI 2`u$x>y,!p@X'7*Qy!F~p3lN_Qu١;XėDV *)ͬ@DM]QXBU(;y;%M2XҎadd ơ\J_tm D__yN Y/u&F eER Cwc&0qX0+"w3B3uAtN,Kq3Lvh7[Un ]4U)UpT.  :BdnLA<h8MICti-Rhh!AFUY0-^6Nh-4Upń' XdLT4hn0eZgCc , B_nF8U,GyA<#k*Ǖ5%/0wb %25Bm0Yp675-&9QxG: Sl.u.<Ƚc':VH,(ˠ.V uLf >54dA<h/bZ y]GEh@p^­wnV~F5_p<>$!nvC kn @6Q#!G(0|zIʷX.73H1 Ƿ }ZxPjo@ Pr=#ySBH&Ȱݡk)fzòjC>mvÆrknN^ m tM}抨Puҧ FT^Dv??:ӢjvxO4ȍKuI>%vPqhXO. 61j&m T`HHks[I;Ɨ-lO6 2?ǘ䯽N* iF9EAg &&'Ϥ0qv@ yzY}6i wu#q hU ܃3NTݙEy^Fs J H`@D@26v `]e'S$'vUũ$T1-bA&62BHf^V赫>g=3;cfc1{Ow>龷OY6]ܺke/xm6m{70QknE}ʤ+`oN=æۅ'.cn-6 co\XvgL5)0>Q-O8n1`B:&Yv7v5v)`1/GAXIr;wU)Zrav[ʈ?6C }ͬgtnažI9_%fYݟq:d߷wEvSfȾS'(ƛj2++ t+w.34 ̂>?&"*!˗mGR:=?c΂"FLP|e2&YV2;w k`l[2%Xۙ0s>cm/0ÂDž%w+N#K-ЬK酷pɷMԱWi);W[a(^,ӯ٫Q+84z\`f^RnM1^iLUbԼ3>D4s8Xr'1[0ܰP78w%;Fu>No]/"ΨLvlS'MWINC4:&IQ%-*n$Cց7'U-w_bڇ@uIrȋ^/W`(zv!Zj"']h&i)f G6èS棡֜Rx`^:}'u+K^q/ёIŚ`yMF ).y4m?7M7wb;0\;7Ƃ&xj6YCxqQ_>L1R.U H]Óx|țTzL$#kQ:Lᙯpl;dOAyqKN4 ^iKOim҄GpF~dV!نy)w Wi$MRA &./[ΝR2A(VhIH\!"`Ru{>G#cKrcOqQ.͇8n(s BpN+uxg 0N`}DrO0BQUHh4f7 fCRJ>=`OWZQHK8SYWZ"")W$>TCi9KVZ! S VU)P1)][S+"ĠjjB3*rՀE` ͨIVPQ2nEsic֘G1>^cZ)lsi>=E\K,JQ FZc\"L|Uqr7{ {, Pˏ8_gG`JYC1$K#TpPb$$WWӵbB#s A$3 ;!aT4?'C^!n׮򔦼ÞI?_blm(YCW].ʫ<$8xy0]z:n.8|?檋c{zhi H`C[DnɾtXǡm@s=>b&;|r2~yEd1ީ^p"^5ya*8ZL /jg#Ax͝E{>kws}Z;$WuIЄ3A6 N]]8^$|n3P*qگ>y[Z[c; C>)7: V٪ի/`7vf<9`l{c{n:֬#o)P};dԧ#7ވYv<fVrL't A;ok{wK#_{v{PX;ZnF;tpq$sчsݾ駟'nhPV%@򪽅Ͼkt|m1} |xozKq.lxb^\2O{էam޼6g-UMΙ;.Yĵe4zt֍'tME#-_:^x޵lPZ:T vwm@ԡ%x [}*Vi8LC.i8pơ%D;iyW\}-L.xQ`8^WH%bwC"P*[{N1DF[ɱGmbĿ]w݅?6cSՑg'rmdnAt/NK5bxbM]qy!lmh iu{mѢE>b%9_}/]t-7;j? jueb:ז=ORsڢCy5\coڲl| /jx;NsGa. ILOv.b׷x.~_F]>gq~.y{ 7h}h/x& @_4ў`Ov 7Cu^_Xo~w_Z@3K^\ҧˆlpm]0nowhƻivJk(HP6e8{WM_m3BohXay̚5ɣ1HQ;<^:y \f;\.F*hhқԴPK}dxKѐް4Lc"E1lgj(<5y&Л^d.4v]_0$li--IQI$kJWg?npo3>CLA(r40z7=~%4{8ޞ:WI|jHks &cO&$1F扬HxDLjIO>3Ib!<=J4?:>*'ߤ?oO[o(2Oڭ|) q[xC`"VLhf$2#Fى`#\Ui$ !) b`.I$`Ś~bEQzc`zqX/ Bq|}+ŲZQt] #^P$v]IDAT}1BDA`ʁ_d_|.GR-4"VW^SZN{-U䕻]Q&4~5@5&4~2~K)]9 ǻ0JO1&Pʙ`|)g_'Y(p7PFq}ϡAq3 ,Sޞ_. oHFA/)+.%w#>g[ir=HV7̊;Gv.aʁҕV/|sOePV^$ư׋N8)"pqC2&470/e']&7)mSxyìer&J(bb6)8Fe(Ј≜cun?ۻl1esMN=)Μѩ *pv>75Mf7#(^{wft>8Gs̜u/O8i&)Tڋ3:,a!_=$Fюz|-gkDЎfbS:6r2ԊMqS:f4KGe-ui ϽZɘT )wdFvd ގjTюJ %VJ}zQպᄞq_D0pB8>ȋ(؇T=i]0xCUkYNwf`E9*X|Af`@L{uolzyjD`Dy(;C}: A(ᨼq@^1T}t8fFOZge*7S^U7C%7-#A:w׋Ƌ^r׶l.!6Rfc*"4bv2`$#QPL]ڎ*x֐ADe vBy.Luz1_yT&MSSg+=^M \ A}dQW!҇G%^҅z6@D흡.ǝ QP)Fxw^BB܏Mf95< ,Q,$|x DxMrxF8L”P~+X^ȟ'e{ ˓t"BtPM{CRq<lniPgB/fx&LyBEFoL$lhXA9=<#A=l:3J9P-K<<.86ZV-PJS(pc=XZ4 ͹/h"A(!@s*hr+{À5󀇘K`xͅ>, H= :K3Dg!5Öv la0J0›+W-xŢsaɚR>:⣈/-8NupT$V۲, p%]sgrt"ۘ9PWc.4Z;[pòrO )0s WՉВ2خQr(o^.jM3~7:@IL\9^ jOf6P|=S8h\ `2 RW-Bh:a$nԑ/AZ-q@شOمhB'T({8C H'9'CMqHvgL#0SG@HȒޜSiƥ0fcs{5D*6yn ZA ]c7!! :+Jp<+|lc&ZQ2гUE,K?Ic#kM 1 nr0 8^|m;ޱvfʋlAۉzNڣclu +WbI~3F?Q䴷Լp 60ye;s` մ{r>%2Zy:il)NZɁYnil0@+~uly4'Z7ص:MBlOY%Cxzf-s'-{>xfi䴸?R4K[4hG.Y ĩN\!x=CδpNƆ=C6+Õ_DлF<aQeIиN9mf^=~G \c G*$HC k .<.{QٖxW̉ݖRR?EvLv0/b73qq1g&-*:uLps{ sվPASqn}ͱ ҙ#+*"45*KPah}s$9rCLCAe0c=lwi蕗j-}SD.riac?;E7Eq-;?}&h !>̙(m ' C9Uݵmtrej#= ٱ4E^#1Yq3qi?>nbM cJ։V,9\u& 2BL0$8G7 &tn s5p wd ~'.CaD5T3!U&hg:` ysG͡IP/MJ&NW!T\47̅U \-VObm,J%[C3'20KUv2D^̳'>TDhD,?9s!4P wz3Qp/!Gð\fr7)56J /8,)VffrGoh[9oZChކf&8/ձt1eXG0Shaiݜ8k[gq/˰kV{҆~\;(\*"4B[>Q5/G_L)#SW*ynEh!Jy~GrP=dLW6ĺx! l9=Nގ@ W}>fΓc0eDv1{G!~vt^X m)jXZ[(ҋ"ma!X?Ua< {Ny H.hi/ SdJB@~)w*#qxzl7e-+r>׬NjXU+jBSbjBS̩VjBSbjBS̩VjBSbjBS̩VjBSbjBS̩VFEXtK-\GX'HK] O4{Ǧq5^Хքf4&4cC Ԛ\ՄflzAZ cӸЌ ]/RkBsAwlpg @IENDB`jqapi-1.7/images/0042_06_44.png0000644000175000017500000010551111460407074014635 0ustar metalmetalPNG  IHDR-55iCCPICC ProfilexZgTM. ,9/9g$JQ$ID@$AD **#"*("Ao=uΙg{gwj)Nyk#]3 @;2LQoO5*+LΊ%3h,rV!)oJE%$ E"MT$b-qL"I${R)TA$>bij!hi~&"d]+9\@'g`::5:{\Z;to!zzuzGF >  ~R);).8J 򃑝Qщ17&;S29LoqbfyMcY8X4X)1)7;R getdɼ唵͔&*'+/wVx=>_gz?_?ٿa/vM4Wi}1۷o 3(2h(X 8!x,D:$=d*T- cQXEz}xC1/Z$WdlhLTv\^tyFS?͌;`p2??34aDĄĉ$3I[<]OH>ƒg=#=za\xyV/_~ĔoUw ޹ϋ|߳#ljŊOKJC_JW4|]6}lz晭_OFfF&nzis>tMw1[L=,lC/8Ҋi?/6>-\סq)iGDҭ23+_seY9w)- <Std̒ҲUgj֕W\>W_VuBK5]ݗۮtֵ7576754_AuW/UWvXjs뗁+/}[^?k|2?~?p ynmAX ܡmxłCu1 >ˏ-űNhv!6IzdC] }WJ;c3K? @v}+.I)S a"颡bTI 5,(S,!+`hCAWA,N=Wy[_SI""|tFƩ&٦fyyRuMm]7F:>wz+ʍ]CS'7ͯޞg>cCC¸y#x"yD%cdKĊM?${H,Y,E"U"0j:WS&%= rl1otdG'n?S][^tLنꊪs+k\p:RjMhWd&76׵f\Mnm>ғ[?zmm@Ͳ[w&}ް֣Kk=6};O+k7N*pR}!m(B+J[U0(v/Rc4 >@`0~sI,'{;cYp#xF$9 7M ­" )y4hsi_7ttEtK& ho^ /%2hǔδ<Ȳ5 Ƕ>19 a y^~# "bQRXSH(hWfKvI27&w\B0xb'^UW5)MW5 4õ,etuN 4h0[>pai`kSJ?~Hpa7 ~E΢fht5FXl)kM'S44i`B$z?6‹cG(xJ45 jf*s! %Ʊ~gfϾƑȉpqsr_5Qo0x+,).l/$+ j?J>:"CzV挬ܰQ3Eb%*1j1&;E5p7st"u  xiML}-r,vݳZf1Md YzȐT,Қ~aL(Tc3X;yدTlpyª 6պ5Y[[;{T'wވpmr{P>"ި'OI=?bdƫov>{Ʌ>-~ _<%sdyu߲|o]_КZz FEo*5X@ E{卂([eBw~H˂!^с(aQr6 F%`h` Bnq{mLFpT)Rk Ynבm xBD|u_X$? {ٰ_uyY&x!\ȟ/zma%`>"u_ 9#E#R_ 'rG[O?l}_/y:s*^Zy 7 B9y}FˣwuȿU@E9ZAkՑ>>ߙ;H_=s"!x DV`+Fߣ<|ck^h؁QTjWj--IUs pHYs   IDATxyeww޾K[e$B=ĸ1iC)!8LGF@##<CGn#!R|?f$ UT&%])+_w}~w|rm& o`F`(4CA  eG`(47cclwe/=ӽOgDhO}R9yST5NCV+>-Mw\nkWo}K.U~N{7W~労~uF\e<.F 鑟<y41yG}Q{/4nzw5^󧇿O6 1N7ywftMSS.gzU`hoQC ן?{o'a>-oMIK>*_~3OOnso3-w_5w_ʯ Y{ҧ*wOX_8wN/ '~ wWvosM`oiYmWn}2̗o6/j}ẊY;-e4[Oiyk^\~'=o>E=#>igͯ?~y'دosٚ3sggޥ}fm֍1ݷ9K~/!4|_7/h~󋏛? 1&ǿhM]_ܓ_7W?i6T'QazTy1էLoTDɫ޻*UO}mA%'޸9ii*=v~o/wlj~łAzs^ytco}W;C?Ҳz^=|<\6~R޷*o|rf&>>B>v_kƚ}A;sHcjo<ʏ;O/Joʹo}V7q;pm"c6ܩjWAӈڒ=7ziշukkFN?Y|CӼyЩ?'wT2+7w]_]{wo^ KHc{ l?ea>a1":yo'kn4|-Q뢞*m]o?Rr~;Y]޸7?ۍ̱wno=YZ4Vuk_8.͚rS-뚮-elk彜scbq7A PnxBsC6<`(4C  eG`(47x]]ByÝޛ#/|h{;PhGbG`(4=TG`(4#1}#0#0 up H _ 溇j\#6~m@C.O햁1[& .RSMvd1uQIRq1i.=~q;pn_B88N?JqwUjeqb2Y@PbDƤP.Ϥr=$fj+Ylm劔anKMj*JN0$ɭ]]+k%1U~W._Ĥ I[][GLSJ9Z`T68z-Fc<6sNvK[R~!j4 E'dcMM(.W8=YÜlE0q6fDLè#YK#XZfF`$ϋs["=63L ̮,5MltǦYhf[vxnՕ?"FDŽH溔jǔE%!\^L4%b|\g4@ BeknCb0i0a6\(gQǰ{u>_T2/!WGpހWn /H85)f*ϯ/j݁Ium& cHL'+l&4:fW7e /dm<~%h0")uP &wbBL`hY V,?rFF{} U2) 毷(NO\!85Kl qa dwwWLVq'+s0>h, b1J;#Ia٧!|;{^4k brZ@ X~aQ;mqwQgWEG=8 6UL#,Pip}6 POOGMhS'8%r^/ Hxo^A9mtVN?xRv0m[oCQM 9yQ0[Pl`6fÝ$Vx;ďWZhau}<|~jcm2^NVilRѕ@9K$p\$yGceG=JIz8{iSrfN$ u[&ĉPuYy3 #.K$0Iu|RaBV4u4t MS4u'naYɯ]XӮGLKJhPH8?BS(%Z[isJhʶ3&*3=&je^ .J`܀n&+$x ~ Dv>YVt^O+i4Spn]'E# :R5/50 HvKbl-"/$`3*2}\j3P ;$pX F otR-!@ׅc6Fvx%fGh LTUgu f! p3R% K6j9SRVe3h 8~F#uIU$@oBR-w]=5w8` !mkV,^@uG=S@kL!#wKqBa[GfS-"-=_aciipC~?8{HV&.>aN@/^Ɂd2О=&M.BW]pBuhBFI)A돰<솣ƒDuVK~9i#ql2(4,; eUA]ҾKR\K b{IJsN[Zڜ#Ę!88R.#I4c6X֐LrAcEEľ8(qqLYYq`x1+ENLH '#̇e@p#-yrwmI)3GN4,QS2/]R)y9O9& a 'A@Op!-2iEchɢZr鸨C %TUݜ3b #4`Q/%vu4部d1}Ve/.AO%9.ĈtXEv<uLH(:1'@Wlf6gw6eSn?=.5Df4z;$UpD Q;Lq&@`N aI.ٺ7fKR2ݔr5UBZB*`6v-# Gw[ʚ.fSPlo@3OI1p%4\~{DPC.:ЄE%62 k0]95&x.)+l2":6cR$Rw3H)4Na:ĔZdyЁK|l*+ >FHĽ4 q $E]Ge6βƏA_9 (!) w`Z] !̲{ .K~|:ehl۸} ,\:꘡fԲfUHB.PWA'B 0A%Yɱq,k`+8&ĉ6 =h2Ql69Eep?A }X'FhB7vhBbA+$QffUlJ|!k$4*h'.;6.*6@P0Lɋǧ1!MrN7Z@cCNbqx"nf\ "8~4a3e;(+W.g"8I{s:Xv*Z͐P u3GX H' PZRKhY7y^g #q-G10_6H&D`䄸'OU Ї Aj |3/a>]&7?/k}KZQR* X{L16B6LfNqYblJ3UwTl.@W6"d30Wqn:خJPO?J; nɓd0QiTZk~Xaf7>.7]`&4, @)%]\ eľ}iK_p D5"rHRf!Ŏ1F5^dcrz[e; ̇WA 3,5ʑ} bpCLk\ȧ* YVz+VxlVHx`rH !,?~LP$]Pه#f{I`!t*`̐Y- :rRrOs=/scYvי)`,"$ 99T!,JOF5Nֲۍ.4GP'ƫ@zNTljؖbe۱6\W͘C>I[X#!%~\ࡈ' FI"'/,Q4UL) ~ ;y 4sRҍkQ0Z {O`$\Z[ro:%q5B>Na?@ |NCNLOr7N;A^/C8yF]hm 6H"1KғD=ypA&% is%;>+Dҋ%nhbVc} v;s"Jtqvr^#r]vt{e 73c#"4͠ij NS`14۸X=Q+d^Eˤ1;)pOa Ю]@+0ƣx.xp6!95ng T@]bOHS|?X}0& ~L/wkQ8Xv)yb,b`[vNK'5 iW~<ڠưq$LdqmdCm-b=9k|'M2NLAe[.s .ǁ` D &+3x%Dܱ 6|XQedB&>J#X$GK O FIUkBaJeBxYbI&=}l;p:mI C[2H<1&/m^n 9;KI\wyPdq%T؉jh&PAFJfN8.8&kwID D/& Z!I,4sJ<`M6CHk[7]`􄇦iOvZ뢤Dݖ*Yn>Hlj Am D?_, #-<3.{Y=%%\'ke⼽^&ϖ`ej>On &8D]BFxx#h8 .f;`.zb"m1˥S2ܸ Wb> vqAr" N+>4djd- bbhC%ľ4#1yY~^{QRm`;4QA+(Sw6ɗ%v$S& )o.KiJUhy2(k iguJ q/jVڤ_䨫eBInGjW D#/'dҊW"䲄ˑ0x:!fG2Df8 DKW?{Qqx;\ wgpm瞕#lHI0'O&Di}? quS~&G$8`hjk8YNrrɏӳw݋$5E1'n;&)` z`f h eƴ 0cڍ NiR`mJ ]-8$d Ak xI惈,- <~,p5cσi' iҤiI1h9҅Di "$%p#LJ#Վ9o#TnZ{! Һ89Q&[S"\CI> #0c 2 H[6m`CDD Iro3c$y2mE|,)ϑz%f܂S`l4%Cb;4Q #xw` 6V׃Ԑƅ[ٰ%NR ^'쁋Z709o})v2Vkq MT(Q- kMw{r-ŹՋP`P pxW vpGp(l7DX9Ήb2F(m 6l\nb'<+\'G ds'% 7vty"׉dLZiI"j+kP 4/bFxXep8uΝ-Ҏ%uYNpb;4Q<$uz>(i|愻aKDq @.DMcVxbEX Q=2hii ` ]jq[Xy)m cƓqڙs#xir4T W\ڧQtDA@'87Cv`!'v]S$ť:"I\AfzxtC FrɏGŁD! x~Q<*X,";ЄZ>lbSz͞Xyq S8'I0Ɇjm2l6&K+."vL'WS+"LHܙH` 1oa==ykFIPUu~.(e'-4$ ׮^Mr/61*<ic&Ά$&Fm9f,:͋@[hZ"I߃ErepѺ6LNѢP;s~YU2;>O i3 05jH u 7l,k`m3o4Yntcb@aE>nt 1OL2u Lhjm`BX}b. ry]:MMJ kj Hx7'xc)jU!|DȋqP@`Z8!aUJLA^C; ڐJ[eRM!t~id|\S/ͤ&=]K᳧(& zy4)|ΚliPm`v8BÕ+Vu>vVcuk> `vw4&ccvPj9/8N2mc27Fsg]T"Z5`{8wGh5%89*v61-4kLi4 a57QRom:pJl9g{cUvաM琚2mh,]yzn[}MIzJI"f!<$ޫ$ bΑcCSJ KqwQvA?m@5QuLɊ*(Eo n\Q <1ds'dXvYƫ\߼e>hZp,>H7t:+FːqKq%{! =fD6\4\督Y"죵i o" XvUSXhO!-iK)6rc:!ń729jUijK=yBiVx^)ČwV;sw!W^}/']4AQAaNVtB\ nQ32 NPsJMa}sEN~~%_9NúM8ƻg5%,F  ti>^&hr`e}MgHI㤽F!wh@8^ B"T>&9v``ރ@5+xHf,BHA Ji_.='^I!&x(v $~׏KCS/ =.Qe-C4I`;#u Srt‘*=m &zb[nSjg!@2Cp!8f6e/NI:[%0NٙCqcUq:;UبBPCEu6Y{:uJ۱䀮o V:XŔC>4lrhL 5JG|bTcD?q`FR Rz\4o7=x_>4J3 5iA0&LZZŏI"佞ȠHi>.'i-Zd[4(E$Y64 BפPQz]"Gp@]*!#8g(Mh"u.Bó! PVvU!|4= 4Hx4k+<>szӇVqmUt:Z2 =Nlrv3 #;qy{u)'5knM .(bKAjL?e: ]:O6#+`0gLBP>\$ASLɪ-aGcCJDj&GcgQTHc$/̀yx^VHF1M#` fv\jOt؁Y"JB52#Sa§yRtz3ЫO"LL퀉ZĜ. Ӿ#D|m-k:RisZ4K 6F&@pS.}F%CcU:>-$`|wmz}CʄU<1QVkOt0 E ] Lt]yb|Qk˔ĭ|$7B<@ 7IQ҃b.uKn~&HY UnBk  ..հPerie[KisubfuXFP|8&>1J;1 iwx H\keIRDkyPc2 D)iDa~F," IDATIc8G.3 Rqh4Y͆x;[5-#wR4y4TU9xJ IoYr3mH\̉J0nYCexAQ% 0-{1u3JZ's{0Q)#bi}/L ^EIy8Ik/ HSsh_kK{)&ĝD&xX ZG$+&?s9Xr2sxɺzeŹ<мm|JI)AI< ".c* iR4c))b. 5\G=ksGۏ5Hws\Γ[ #%E/UI#awRs8Bc]Na} V8 O9}@f{$|S&j =C[@h-@hn,G+5v7!u2Z^N4܊:K-^F5!4y߁:k/SrRie_JPtcТ;sh^W&/R\9B&-(\^ݞd'2R89mءIp"Q\f8Q)"b4w4lDGn;{d[-{e/{A`XQ27v/y^ƣhvCe*1 9HDQqUdO?w 14T%4;"i9:c:xXXxy&TqQ h.*>Yo˲Jg<\Ή0$М%r|(Gƶs\qҗx fp?9!"rUby $j4x*O T 8&Hs ضpݤpƔd<4aKjHJQ =;?yH9Du<>'g4|i2zAױhV4xx"TG/B^R M43ʒ>I"zT4mwzŗyctMJL:E`fGhdi 5W-+s@ީƲwFעOMtDE+&ɏ'Qu)d$Ktʖ[fHr7]nGh,I1 q CDqS2C1NfkҺD(B L?LzX0&LaA9T =Io[H J 1IQ[9$^/r|UZ/ :lnc,`%'ޔI*]4Z磓5jsą$~S9Is]7{K&j# `'u:{1*9>oLҽ#[ gJ\@zjW Iny>8Y85&V|Q@.`Ƚh8.Y+yGPy˕%Z|]&> h@V]rl4?NG{?HhKLY͐*:Bg<@y/IF&q'o bE;#i>G  (qV4Jʥ2 4yHj^ p5PP I{|`gf4QƋIlG)?X3أNϭZRO *62AFv5LZ(KLK.!=kx_&Zt 4eдLqj]R,tJbOqSW0mz!@;OFq\>Ϙ 1~ie(I6 5OΥ9)&Q. CU؛t}bБ{rR%Æ ިl0~J<BF}RJ!@Y@æzbPHgNK`0[.< `CBZCv*jf^ Rc>.UIlA~4dsaqKp8ė+?̐t#mu |NJbEzRGq8o &n'ph<%h*hgwЇIkR$@s5qkt=p7FAW\xbdN(r~0uKaEC/86]޷j\"ZO.pmF~=k3aTI}lzIisgkh0f3{;끰 ֮R0~ f(EY۠MkTz={!tv3mB WEʹ~f+!z~kp>|q^d{6߻CT$*z~=9uc7:ow}O'dtטUk(~wC7*PSsfصu oo=k=uw8ڙUA^5!|We] }D]7o}m}ˏS>=-MFv?[_ok>8[Ρ}o}x__1~]{uuY81'84{mt#phB>|=9CyONB=9mߋ>T٣#ԇXo޸}{[jůqֿ=Nݾ]{||ЄFF=(HE[Cc﫿}D; :j_@[t\ޫ}S{3]{Z`}ys+>4с|9*{ uto wƏ?N6)L3=7;皟k!cNS#GPKX.kz ^}I{O?ӠbOƭk޿_>$Xi%n]94ȗ뮻gV2t[IEDpu@ȀAR}E>^=Jb$ 9 O^ՌJr6pv.)rOsG~X/Xw5읏eN%MKR_K]yO|Cν=''я}L> Td 6*;"'ͪvñ'0m9uG_miOi"??ɣd2ϩ£*/NЇ?aL8}y3w0IOľD aR'|2ooҙ??{}ݑ)>/n|` E`xASAz晧塇5m{Z4zʄ K!*9랎I/|A0 =c]{+minKB8*Kh0($:a(rqegJڟT:[[ ;;VQ5eպ[訃0k!_ %w޻Kު޽{9=u9p qFG'5;L%^8?= t^Q^]M6ȷZhƍ]G?#7Nujh a:3p ҋ) pwةrd[WdOrl>tXA~zW FG o/ĮXݫ^_z S49 Qs1H('J)!a8*.br& b*9$?c}ju@<@yxOŔаTGIfw&/aDX|Hi tF9C@Q}x:edy70In{eaY' Roy啵uxFVbMa6*SDӥ]#yћI߅qۧxKb.o' L{צ } ߥtn{k T;&4 c<\yz u1e. 24W@ew_h.Q\1Nw'3gi[}Dl,7Ŭ˾k}E.vvN( ѭ2H<*פ5iܿowBҐyT|CaSS{*t8>.\fEO^my2*Ou{qkXLdqwMT`AY)!td!\gsHk^u~9RɃ4W+z^f!J  LRה?)>mPinb 5(ZV^PA` }AU%,jYhACց=s`&C_\A#A[غ`l.c̩ @@!%FbgPM+,4Rb g4p*\xcbr7f,JуNa#dƓŜ: ʂH ;LJ43h:~M,9|amB@cZcP%`Գ-!$YX e1G#^0[HΆ4kyj|#YM7q [ d $8e G-'> F)^Ec96 qQΑ< ё:Wt|='FRi ~6qWQ&tbsBmxzDd~Zzt{R/6Ƀݫ'4Щ7s9{|:drlE'[yZ:sdY5yjL "`X{qv]b ː`dn|ӍI&/10i_Y1MOFL<(Z ];B8\lEpJ9~{ԧe6'R^w};u>`|mGjCQf Fa wA5e8pb 9G8$|VXkq}q%Ɇ"CǂtXuNXxG < <9PtD8SE8JKj]W~Ѻi!+"A. 6c,blpٰ3r<#VQCHp| c]Xy J{g)c_ZG LEggeX֕# R>L)C`{mY WbAC/@Gtt:T|A /q4a ~?Bb!JVubNN#898sC )J*,+ zԆ*ŦGphE0L0(A<yv8} @d']J6Ņ!k܁./d,eu4g> b MOۛpE8C2 L X+An%MXŕ{at>Ň qAx). `hĺƺM(9PM5רd HnE-0 ESPHz v<1Eq0cj>@p3#PQ)͈7| >gk40`:~ rx8}+cĵϦb vɮOjB2 W#RāPv(#^GsŽ󞇴XĨK\`("H *qڣ|WJ 8vJlXJED)$oWfx0)O.S"]b S2 TLi@5ޘuɍ@.,:韲WZ2tkNZy<1F ѥ4 'YQ'l˪L90m *|j^uMELʀF=57N xahE}Ȑ p,[ὕ8%4}Kd\T L<"#飺\Jn oǜGٖ󷋛t7+w=^ Y-rc*F/z밯F<q:$4q+æ/0T;qaYSbeC1ot m,h.KL XX Z4V`Ac10h X Ze5`A3h 4@TsmVH }szMUKSZ>~[ĠLjA41(/SZdcM Ԫ4jmA2MZ>~[ĠLjA41(/SZdcM Ԫ4jmA2MZ>~[ĠLjA41(/SZdcM Ԫ4jmA2jToX\2SQ~GoT!˗GVXvzZUhhրMԪF4F,hV%41Ǩ5`A,рф=F Ue ,h&1j XD*Kh4`Ac4aQk&jUYB!Mh?O z\].ohTV͓2R}/dyCR>@C·?_9+' BI5R! wKшlVdR_}\#s9Y,6U$}0A[/E/go^;W Ww-gFO6C˘I!S+C O*yy/` G_m)BWu,d9zh qܿa2/qJdFx&9?Q{ˤ|rles(_*Wηq>Y~7vɿR}}^/y1 wbDuȤ'pH_W%e#}ƍ_l5?H:;5tuzڎʫ? nElZlXyD:q-GɾBOst2seoN<,'_ޢ#xJx9+箑ݫ7ڧL#\a-?_##yɬ[ fYNyuJhU"˪{;ectOVCl]EVlȨRlMel j[InCM5҄NXW v]?zZtLf:JU8iEK'ɍchv{ bsOH;/&%7w' LO7962mr]m-0˱sSs{;O&ͭpƫ:Wf._USSf|vHJMj?8TtUt쫕#Nki2iduNjN- ztI1Ơ=)S#(Yٕ+^2]Ύ,pUz9^ 'AWfOۿr̿1ObO^ ~gW=V&l}RUJ],_Ȗ{v\3^-nLe)^#:0@ +ȓ"3Jb+O٢2OS tEyUN٠G;wv*fwڞڹ~,vyY(n$zeN_&lAd/ҩ"g8$hz(7e 8O:+,JmsW4$زVVy}H'MԾo&|#8mKӀMt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'Mt-[Ф'x= Ii[N) ZnJIdIy )MzZФMR^" 7Q hAz6Iy,hRD'M$%Iy4gȂ&MzZФMR^-20=QIENDB`jqapi-1.7/images/animate-1.jpg0000644000175000017500000003423411460407074015207 0ustar metalmetalJFIFddDucky<Adobed          !1"AQSTUaq2B3st5R#4u6bV7rԂCc׃DG!1AQaq"2RbBr‚#CS3 ?۰R}6g .dd,8S˰%|K@> sťyvP<\iz(].x. sťyvP<\iz(/UV m4'L3`1AJޯZQ,b90wwqggA˰%|K@> sťyvP<\iz(].x.;pPjpuG:{eLg|SrKXo|R/ׯf ǩ@p3(D6;c> lG=?]-܂5=b{z b[T0՜<{;q|U9vǯzESgygDU;HS&N%G虍grx`h k ;bGStc"4}_2V:~dKhEZHkS@BԳFwflp`&+5݇Μr'dw6icT.[W I2E1eKBρDϚ?_4œ~7v EU/ԟZJJN xۙ19쥏v|,Ԟ?]~_ GM[`=6HyN",YvNm8oQv H~59-ՀءiMQa6|%,ٹR{p݄߄8TZN5HXi7Ylլӷ{~i^$F$cȃOm*# m3]f̞& "LWڭkij8GVlŨIDo17+?;5Mxv;Ɉ{~=qaԩj^]BũkӖ@vkn):=@X#лM<8Lo&\٘ܫG-¿c;x7uKUFjoNIsJk)jX# >gv> b.n}w4bzRkuؚF16M~ҽhfeT::~B+wA$OY.o3 A 2ߚWc2 47 @@@@@@@@@A}I ?o|b izd2,U [Nj@vy]8iiKR0G\db/,ÕVY6d8Ef.3 gLmKU!3e g= ;OUx%&9a10"l0rgg}`EEff@@@@A;SWk A+ IŁFlm+lA5:IkuoP|.$yռ\:HC\xt:Vp u sέ@[ä5:Ikuo v4fy`UmQlwR(c_XYߗl^:ΙtInެϻrvvvޡռ\:HC\xt:Vp u sέ@[ä5:IkuoP|.$ռ\:HC\xt!Ү-۽:H m$G\-չՍhL^1`AoP|.$yռ\:HC]xt:Vp u wέ@[ä5:IkuoP<.$ռ\:H)}׳nk9D xg~F$5JewNPM) vřݶ;,W'Z_G/M'Z_G/M'Z_G/M'Z_G/M'Z_G/M'Z_G/M'Z_G/Mrq/urS'Z_G/M'Z_G/Mr/urB 2_~Pr#Tá π3|AgR׼7MksśԵ9@Zfu-{qt:8YhK^~,4y?nR׼7Mksś[R[mB97v٘bƂq$HQAV=^jA@vh[rfA@$xp}t: @꺷7I@$xp}t: @꺷7I@$xp}tdfX~LrG,eg`7|1~ @@@@@@@A/fS,.<ˏվ7V|@[?uo վ7V|@[?uo վ7V|@krmg@@AjEhzҕYbxcs r\saG?Ԡ>:R8(Ԡ9#(_J>:R8(Ԡ>:R_J>:Rl??Ԡz#SW l"#ǏuS״xۯ]Йǒc[|{[PtցQzD! Ib|"jaŚRlUdJf&r]3_NZV$-fag.]DM~\S![&8ԛW6VY"ϙ.mTVX],M34h_O>ڧJC p:0Զޮ}^DlO˼π`Up;fT!9U(~۶]nԅkjK)l֪?loGlX)$ˇiLp-ӳ +^5ƽ|7߷DQctwQőY•zMoKSzT[\Kt"~m;OPPGsd!l܍&/F֕S~Un WOY4մfzPG ELbN\b|p&U0 ޳?bZMV݄Og̦䅏ź28\[_fDJgN!pvneN*ŸuLp\bdqoL_l1"Xd6Lw㵱bmJ}8ZYgb퇭=8KwP{ hc.]>\]JT"M||gR:^7K* KH4"Q-I',2hfzMtNHɊ+t={Q3 ,bILLNDMWRӯޛsN%103LЙ͆XBAqąYvHjgB#V'=bp6ĝ\nЋfbnX&&pVa+le\ݶbؤbR{z5n_ȃO47z=Tnz2RŜDd;VkZFoOdMӄq92U6 \ꔬ0 _/+>\[n6lei57ӟ4Zn^ɍXcrӈi\V˔g=%!n[JK..^i# \ؘ{5~  (R\^ RDdkg:6nGsN7z&҆[Ќ?cn|~;fbbߔq^>H:ins%ɩq\@0F<1om[ahݩ"ٍbxo,MGEHA>r./dݓfg.[Һ3tF껧כbًnITtZAŬ5{%JDӜ`p#\Lt[lEUԙilyf;Oo|-jI+Oe] sq<-Yh:16Ϋ|hEo*֫z%:03ٕi3)˭'& G pG4Y6wl}nTf0;Ӷ.sֽ$l-b8ɜrNW| e<՝[b#C'Z\Ʌ؛<`~̛#)>kM6=w ef,lG~s;mN?GMDݍ9W|wUDg܄oxdzͱ].X_D9*o$zNj0?gK~y"+ɝ2d)1׆w` " V'{lߥu&?xz7bؙJ#<6]X +LԳn WOYX{>(16NYz Tދmf̜=`sfgwųǑ9gzcSgĹߛbRwjXg|9gy+E}r\U[ΥVto 4ǨՒg- Q; 9;N8;E47lRkm-T质n`lv5r}:3u1R};}{1 .?Wi#qJL}M>ZmIF+6ڬCkN+fd+O#r)r9SȷBk'I8D'X7"qH0Q[jWNݿT~w/hMIQ5{G"! ҙ 9bE뫧ҺȤtbKTѨ#u=D[XPtG={XeF+6gb62ˊVchкNbg?c:ڀi(&gfc,Q1㽯`yp]YLϏmɝy&±larFzeuAk(F DȲx{{3WYS~ٮ\+ _>:V OEuLD ;y.ݶt΄D5p:r:G+gn 17\|jűHom8ҝlf[c. 5 vP#جJ i|$M~Ukֱ<8|׷N-b)uG4wlZڥV'"$M8Y܉^eͷݜc8"L:xؤ,-=)$A{EY~JV-êmԛ.Ԙf1 lo0j^Ib.#aكSm+1_k+M3>=KT%=:0HR`Nq d!{X7mWp)dbޫ)W:Xgzz.> $FE&1;rbϱ.+m133N Hacfv}; q3lG| z[;!fҀ(vgpHx3d]ZkFW;MMHsLi_%?g7P`L1M5q9K lwi[3Y^5&"aGj}Y? z6Փ'oi=YS(-'*=>'COFՓ'oi=YQwEoT=m=IlөSբ/gOVȷ%ng5[ή:^7K*cRF>_K`uoaIF}A_FڻӯpZks3 sb_Z]l:VL9#kE$ a !0'托oɅaNXp*_sls;bnym=pU D,E@͜|31EOێ;mnLrc޴M&ݞ!9W|3vcmlaũRWOQlC)w.c:wy}:wy}:wy}:wy}:wy}:wy}:wy}:wy}:wy}:wy}]v󑓳$3ve@@A z}|h'vţ'oY:̾ uy|@2.e]Wt?s/^~_:̾ <b7=vU rcyVV$iw U;Nեk$QIfyLf,{_˟ZnLF~/G^YͳnbͮԆsJ~%Z/gi0gL6oK=+mY_<'lN\rTuPkn(RC NO|16.(”Z캳d=+wZ0W+Һzv]8r|sJN= ]lchb].o0ܻ/ֆ#+Uh E M1cɇ+.[z}hSæzE3Gcna|T<:s_&jI fyR:}Xٟz0ettdsɝpaUGx-UZKҙQ%jSE${v|[lIgg#)ˋEmh[k7aDtڱ~ Do!9IY 6'ԥ9G#.\U.dgkϻ˗.vS]Z,YJra\&05h \`br˄yVlD\ڷ]3J'3Z3n 1 6/bT}OG@T}OG@T}OG@T}OG@T}OG@T};~'os< #u=D[XPyѥ*0ٯ=d@l2; 6b:Qt'V6Y--B8u9}#6Q,6?i>dޏMe|۲Ho~;-w fxckBcam99pn&EqC{nEԏ/oIi3ѫlAV7e$aYt[YSgN-^hȈݽSGb.+6!ɇ""iiqy˩ܸW,Va)i S,7 Ɵ]Wvg;2㇨zron5Kګj!beD^bI+Oe] sq,͊_@܈4`v`Vhb'v㈎;=3q.C,!D .V|ٳqXaA..)0JRI&B$BY_n0Ϫi~ܔ=s F8o؟{6 sP>N4ky%c7flr 1hMq"!43A7X}/dAտՇI']x PZlK8yؠ`x9U#J-v{Joe79񟢰Ur&by`L푟` 3lp.O? O'k3VD^n^ g7΢oBbb_b#qI[Wseq(>s􈥸wk3Yǽn.9,^K#c>v5f3a -1'7h $~?͗t6:efI 3([scp_9k lWJOQ.tsQ mߨޞҶ^ I%#]~6Qش8#Tcg*P( D\Rg clrg^"5Wz{Jᇓ`ǷiO5G < W&;vglKz h?Q=^pqϘrD,/7]jDuzu|GGRP&& 0lIf;+J-8yMu1+LKcyVV$iwLҸ\k_O0$E!gH1gD'ձV]Mʽ6&ҋ,8wfn edqeJݔ/sٓjߤ =;3GڧB1-Ȇ,LMV`?1H+O&" \O[_j " =޳r1 ۅ#4ys>FmJ@^QjB39 Nx; 3 6Ϳ>]DfaafffA~ãr>'7h $y@v37 wghE Rl>}4)K6}hRlNû쨮M,)ˏ;=McL4w>scmDӴڲ6P<_n 986лV[sy} w?ޟ{kpqw?p~~{oqNz~~yoqVyw?kpqw?pvӿE?7[R)T[glgc?SކWۚ73YRxZBqds77ShLRx"$rIn_ȃStڦiI;"al}:{ylak[vT ! uɉw7ٳf+ܭ]x qWS G ~ҼLS#Tx_GkT6wòؿaAOWNۼZ'I!HUag.-3r,.',{᭿DRd|_]Bsvr3nn8ruVm+_ݜϋ+pTbOf|_ UN[|OTWdwsP>vANvGWW]∹S`,ڢ]`#Zg]m) Lכ[wvU!p2@wM[3la;z1nv/}{}cH#R%add1wl#MA_(U_P<{V>@5Xu7c(U[P<{V>o@5Xu7c(U[P<{V>AM]lULd2 WtH?jqapi-1.7/images/animate-2.jpg0000644000175000017500000002650211460407074015207 0ustar metalmetalJFIFddDucky<Adobed        !1A"Qaq2R3STV႒#st5UBbr746$c%F!Q1Aaq"R ? m1WJqqq߼Z7waws]s}sҋ yozQw9}J.9E<7=(|@fiY[I8xfA8^ӼrW7me,{FW>Gh0 futYx'z@g^/mIސ5׋qw futYx'z@g^/mIސ5׋qw76;Uk㐼 rS^xq7J#8;:{n:Nμ^ێ k3H;:{n:Nμ^ێ k3H+iwtmbdo6YB0 g۲]ڼ mn]TFq; d wr,v_A6>ˬ[.06с &D.0-"^DWqe~1sgs,VlWf(K@8T$DU6gr73:+F]۱򶡲8ƹ3 *3#bD3h$lmB\9GӂIE?"ڽϝtܞ;fˁx8 bc/mZhht ڠ sZs>ݗd} m^fWv9[,k y.퉗NbdDۆ7y t$E$@UMݻ^%ea( $'b_=[p KYڵ#7wjRt+Qy,­"VG%7(4ʼnbsIR;79\e{]xtll/|8I̢FBq5'T2~St*l}n&H#LvZ1L>9v&;W#0aqIEAU֧Br,v_A̶$3fIu1:˭KY( -1£e.$lw-q$6@t ZfEkG#,HL3`u1581Cwڟr!90<]ZC# $hcp#|D;tbṵv"B +Y2S\HX#٠pYҵGmQ?Ak,[]ʹ y"LnK i$4jO(2z0oL kz Hhy9qŠִ I5'? jOtO@Ԟ=?qR{~GJ:N >7f?Z`[ a46|leu˫m\]JT\wn#sv-vDZZL.Q{N]Ǭl0SOlt|5 Fm{ui#,i#MZ]N}}kJMR}䁘9Swd gh226\yXڍ虤q^K2G1Yx-09nxI$ 8;BͶָi>ŰyL̲Xud%3L#Li pS[ȌSkcudsxkq uK)\޶:$6Àڍ̶o9*0:h> ӷaˢ>CFѧY. wlL.-I# 1O#9:.3pA5 5b1nI%$2#H t*sksj{|#q.xv6WiὸN?iz ۙwA;=͐\E  ,5;4"dř1G:$[2ά Ü@4pRV-2AAk3HUβ::*UKsZĩua<͆78@ NBw r^ Ѫ:Hrb{+{8\\ ܡEGY(ojFM_ɥT-"%nY1^xG5;4Z,' kxHsو Re"ޣn$坌9 5J587ǂ@߭7SIP)*w b4u/aW6DeY0AX/o O$A6f=ͤmMRb%&!gY/'q;骚##L2i6[^661kpl3Gɠvkrӗ4rV$M7./.s$$auNpjsa]\נ ݹ~}30M3tCHfYvRևVP)S^G)v fђFXcX׊чV.EX$4Ak3pa,A<ᾳncFX'feli7 :: Pt3]\נ ra~Ak :&i"㺳csmt3 :[$S4qsJi3>VWCZ krub-L# xsP$ƾFgy u<,@$opӻٖ;0$LJ#z慦&0LrdAͷ[1՟@@@@@@@A!-> R &MRAMw?5@HI] k$//{cRH(2 ݹ~}3uKޭT13*>HuD&cBaXXsѝLh&M M5F=X0tN)Jv))CJc,# 0~]W;NHJ5#,q%q ӡ+Vptg3]\נ rc~@85ȏ pWH%q;ͮTME"VcmgHi Хdnxjդ&kF&c.}k4Hk <|X ]L%νeo\9!.+t~U͑+K[WPAeb{ ӈ@=}iGؠ~>#P?dvZq(2Ekkxfm@8t ZrVWɄYT[>`6?{X` '>nwKѻ6]n{da@/FP=wKѻ6]n{da@/FP}'[Sk|VXnc3Z ݹ~}39:g$AAXInnf9:LljWkAMJLckLLq<&y57Z0V8Jhlac.Ѽ 3Z`#54JI4wD&RSG!Wbpw])W{!W51dPO$M0 )8~1]ϓIsCIIqi%Jt 2BL݆a\U:Ւi6!+1M58/uw0l[ %spTˈ$xq=2 i$ 9td^@0TSQ'wNsd@@@@@@@@@@@@A'!n6is̖L,GyH#LArzf"Xr"i)}v=^Xd1v$jR05$ $Y6fϚ3M6N+tkdh\`wSF'ɲ涴_}9u$e IP3.kɣ^ڴ[d"Zg_W$/ *wMC酧n5t),͟57]ϖf2ɤ< x{oP;Sٙ6Hy"kfMI1t;rX&-|f@ 0R}gk=a-s\(A DK?ͰA(,wngA߱'kG]S+ .G : E4:ߔ:eVԼp* Qܱ s?jRVLJa{ۺXOح.-my}?ejpR MKp n'*2k_!yqQAԝػ3oGR{s?]\ ra~Aca7FG:+̦%ųogpӈ FT=V9.e\ q\ t)RӚkFY=9+>9yknliYZbڱKw lIc!-@ NyS]65%h'KoQDf]+t~]\Yy{~|Łܪɖ9~b{6G<on/n!k#ְJV ;|])H=I (,wngA߱%+mz\d(@OR?F erW n-;vWRpMC0斱ť ysiKcBxwfCͧPw3] ra~A7׀y,xɭsyEvɈ=W=Rvtr[Z@MA/R1)!>$>gJIS|֔[ҒU;"sNsiM#*+ۢ[lEoki(s!q{ þPճۣ֠ 9cv\,ͶeL]F)\!;Ǣ=_9R#YS@|cK?vhz)gNE,٠zr1襟;4WF=f.O6/dtvk),7֤ s1 ۙwA1tR]^}nnb1`PFcEjPe\F4_jP/fS{CTĮUQkԦVUB`ݭZPeYq-71j.%[F+. cm{9m?oG V>})? LB{V>}i!XIʋ|gAOnUt~Dd@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Acms)A@ϴYi>g7} oLHޙ+?13 V~czgAFS s*wi Ȁl~AϬ-.b|ĵ hnMݑ1_+oŏ-^;{bO5㷺Ӓ؃J8)|V2K+R9y;WyǮݎL͛hpn؝Y՗v=l+V!&Ȥ7N M/~@oe>M/~@oe>M/~@o& zrOKߐ=r[|ɥ\S\VSjsM$F3 K8%{F44obl' 9/4HY"yQt%)%vf/cI#]ٚ'܍wfjr?Ԟ+r5ݙRxvf/cI#]٪Z#AБltMs:h: we@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AmO <:8^&b ß%aD%9x۬ScFrss3##m㉅s08ӦGf}tffj.3jZboRYǹ#ىӎ:4g-ٚ4B[aG5ODZ,L@E0ہn=:;Vsl!I/s[h2FnY`04Q|c 1־"67<+"edL01 7}CHOvgOͭs(sqֱ GKC"o܋[=2^ǡv_ 2Sm9T=|ѹttM {c ;LLx.9YD='"}cI{1ȇ=y@Cx@zr!<~OwP=f9?'()/=yA_(]Oa{cKk >U Ps(9 b1@%ڟ$7ͧ؎sz)Bwu9j׵ya~ .e8uK_մvM0Qdw71H$WFCG4)E]ˇY418,nTh HJ$]WW7sY2GbcbhkMtayH#ED'DpiQդ`U_ߗoUO" GFͬʳ72e3QtLfrb,[1gTVRZ,/t=14g գ*,3Keu4 UԦRnf`抖Ԃ8CttU6 q`Zth`2uP$'ZIXd=&4tBT n.|_smԥCNfXGU^D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AmO yZxDF@@@@@@@@A{)k|#ZXۋx8ۆ^J]K;[\4>Y/3V>\+(cc%R;XX ]qY֩;ua9yE pҎiasz׵ߺұGVcֈff֥Qx5ݥf-W<7uK}hkc ۳vw"Ͷ˰Fu< 2c.u qc1єXq.?'։Kr#~^'A/Yl=^ ~$W61[1ӟ15l䙍0t kS#6~,f5Mr-иհv=P\'*=._qϞ,y dH#sw*\ZIAgmP? l^Ob[f>x1Eؠ~ُ,.}ev(c/'@-tYy<] ְֶ6 h "5y#}Z#A:V7*AtւPQ@'sJ \' $~x~O]$h>KlW1Y'Is. s"%V:EkٺDӧӫS7Vw6FVdo2o#lEۀɄ7p)j+O>Mu ٷAh[Il6= #tk nGcjՠva䵎 ז2C N k]Kg,]-ھ1I}nxFrLs2hk&2QV V<s_3F; {(ۘ[[Ahs'47cCE|֕™m^igc`-0a|A&Hhhu\6blO^x'ڿ'>H^1zkioNTz]?R+.m)GJ|N{?d=GJ|N{?d=GJ|N{?d=GJ|N{?d}^F03k+,33nj jqapi-1.7/images/arrow.png0000644000175000017500000000135111460407074014563 0ustar metalmetalPNG  IHDRQTtEXtSoftwareAdobe ImageReadyqe<IDATxb?2`Wc2`Īi pg#+] }( #Dʬu21.  'rq 600t~-Nc *H6>*a,y̙3,谿`A0lllO#^c6 LXj@ Q6bK؃#pk ԙEGrR=:*T;%> p?:,D&TRːň)*%9λ T?Ė /u^.}1RĈ,.q 96jB:5N %~ba`XM@FĂ%/RQHBÐ`@w?9/Jw`Sj-?# nZFe%bz܈ķqiT@=Р*0T B-@K@UgCqdwdpS@*TkF3eѶl6z.>u@. @2d+x|0#'HXDjA sh ujSQGfQF-E u@tj@P Ղh!Bi$a`6Т;43 S Z19a 14'5ebIENDB`jqapi-1.7/images/feedback.png0000644000175000017500000001511211460407074015155 0ustar metalmetalPNG  IHDR(v}|tEXtSoftwareAdobe ImageReadyqe<IDATxbdfa8ǀX~3AY\,p;&aOC ɰC0;0da3p, @Q`k* N.@Fӎ`6X%ÊlE@eW_2}fYx̆dͥMJV6vY@>c@  bk_ 20MBp0r*AA·'0, `l&#N!X]NF 0KufY@~c1,(//Dl`AX 6.~A2@/ ~8)Ʈ*^u'%V680.f32ʦtMH//'÷ME:;tP) <;ݗa (L Vpqpz>*202컃HK`A[ndǷ ^\*@a8F;+ޚHqp(D2|Cqx%!7| <{}c`J B0bفa#;+\9Ɇ08HsbƱ M0`@X6E3yIlK"nDVƅnVbu/ ;R(QA(JJ4jڦq2{'J|p7wΜw?gNOowEgѲPw9]?q#׀BBFÃqqx %'މWkdzb3c6pjt;m_0TD6qi)(f%j$haYs a~h),TK fSJ&咔oQ(00m ZmpgWTﶯx((H Ȋl9y*cuTts-6$ژ$GW+hrTZ.1(HĮ~_/!Ny)7f?2VQu_kk5ҲwNսغIt#UK:#hLt =UGɌnW q2Ɵ-uprYT;p zg#ڌ^3Up[y@&Wݟ`f躴ݟ8RvMq<B*H(** ȟTFU>(+#B,,f "P3E+k|to;wƙ眻{4][C 5Mh9:[ ^qNz IGbXZ N`ETt |JgeeBΞ3~3+cQQ)!Ȅ(^â$y'g> ,wZ>p׎k/ZphJ$p /~d^1 G.B(+14T6o , 'd Knu悳Z8pq`Z QlB9e$2]NwkbgոN-ц%xI[:H B,G҆QuDx 矵򄮫Z4'6lh,"4 z9#˙#:.-=扊xerv&F?P_!)#SmEZDFS=8P+@$x#ôؙ;#J$.9=dyH3gV><,Nś~-t?!LL'w6?J1NJ>\ ѫDPbܪL(4{uP#* U/&)iiCÕl !GCz͎[˷}i{'c4ɑlk7{DDѝiE!e6d8_(t"sԞT#iӴ)Q!t-=Q%U{,AIJN4He8ڤI|Yi 䈍{zhY6ژecY 3ɨ <\@LX`aaݾw}|w'\89|ιhF-Z{%kik:qz CVxay):$zBiqBAIyҤsHeeT\ޢEIҗ|/pb41HޫP歮^'o|^dI'/(]&([K,EdU,X(/z%b YGG] D]@ŶQY!p6"<>2L5,ʂDh 7+܄̉Ilx̓Z;9,;]NOƉAd= eP~؄ x+^r{=7ѫ"VQHO%k3$eHۜQWQ2>L̉s9r^ dŒ~!J\ gуpC'yyYS,{)=I ^Pz,[qZl;+6dcʆI1A.{@ARO:dxu4ôjdύFZ*%IQED5-V )=.KrU@OZ#NT5")q4FnT %KڿWSђ-#.̇1f=vBd\ Nn">eN(3#8F@J(K2 4Mi1PpzM4} *ɔXwZ;# A1uwLmSyÙ&9rw7&2Ofnix(dFѠob$+ߞI[m,yߛ+l$k/vFg_x.DBNy<)ŲvWk0/LBPf?0xruV*'z BN6'-TVuzOq\RQՍR7['X|*=rT6L<eJ-owRQXj,%e{gh:( '$G0U}^V&qoݿz=~җsʼs-Ot%S5i;?\#2fѩ¿4s%Q\G̞.q aBc sDp Q(WJ q&@,S!`s"\tggiW–~4;b}W|FoaPח-ۿ13HB<'A7i>F{D K _xFʕ uJ2L4ܫeÁ/' =SA4h T6=yK(>58~$YZ$MpaEa <B0 `(PÌz`0RR"Y1o&8ON@oGQN"wlUG4xO: _n6? H"͞7`ʺOlu=LL"$ьJAك@ 8#5V](DhTiP;~]PyT:5~3.^ShOrOU>?XB W )?5VȍY0πBVQpA |ባXmEFDєEk'Okd1DcRɾzi9|vN&54R?ѝ,J@R]JE `eUԺ/AhfVkwp#b#f^:i$4nR\t2Hgp:+O'5e\ ^]T YgjF [{Љf4b][s.ܧnzA-w!iR{;bJgx!݉}ala [~& ʹ cO-Y"ڛh0#g\3Bة& 1,o B=ȇG/;_`bd@64k& b0jČoeFBcGT=Rљ kuxB9ÌJD dL(Q#_SDef4` Ψ(`-\j:!ګAW?ͅg}E("5!8ިEk^JWțur_sU뤉q]GYTX]EkNjO>X`mK4m|oþ_nlJDHxZSJS"=n3u=4=m ?buNIENDB`jqapi-1.7/images/hat.gif0000644000175000017500000000233011460407074014164 0ustar metalmetalGIF89aP6%%oo\\SSKKCC;;11))55''BBJJAAPP//::!,P6'diaH<'s A|%$ PaZ#9bpxGx}"{j^ְ߻ y{l U Q F  a o&  ȰD:% 35 ȯʲ G՛ʞ|Ia 6۱d>MPu\ ,ax_p+v0ܲ`pP @aE_xD0+)` 03!5S;e0 D,pQ&0!ӧ:xDULFQК) *T7oΞpgښyH\#sL`"k']D\Vȑ1^-yf *hKRpz3[C >~9Gh VkBk.A(Xt@C kد!AI-Ԙ{yM}'ވQBF0Q7P6VX^Bs($$ȂH/&QGKa(K$YQQXbA(4SS\H d=+f`.*>>jjj:::FFF777޾ᔔoootttzzzgggbbbϑZZZTTTyyyVVVJJJqqqAAA\\\ƗwwwnnnlllNNN???<<<666QQQBBB___WWW999LLLvvv!Created with ajaxload.info! ! NETSCAPE2.0,#)-$*.6:7 %+/70=66 =?= 3@? ;E7A>B;>CD ;+F &03 8<݄!'14,< "PF`! ,;WX []<U Y-\$_&JOSHTJ^*\GP2 #7HKQ:6L=FF'MijNA:bIT@?R/D924I ::/E`ӃA&V,ZJCaTT9Ij! , i^,CK jl8^ghQCRk "dNJnj2H0T.-435GЄ`eC6:f:=σG5AT770/6@C(CBA;@/܆F r Z@! ,?(N!lG9'g[jNJA#HlF=B]ON*#F`8"p A/`9"07qE "T=36n F o)! ,aoe&? +qe4H2D< @33 %F8<;J @@ce[l>8TBjuaB7KAǐ0Cv^ ur6b?ՅY)3T3+'s 6F0:.ntn830֭! ,0@9(+ATA8cJq >`GT6:"VVA6@>/B4eb= oRTD3>hF^M'0F7BLd63Ӑ]jl7ۅ&NG+TTc1SOJvwn\-Yr;"0:TD AB8Q"6/37;(I@0=:GJ73QfA6D,<3e34.1&2*^Z\3#*N DK$+C9 \T6Jc -:gY(DZe u,AKXqoPt2Q=FAl!+ OjLM^aG1N\@ÕA;jqapi-1.7/js/highlight.js0000644000175000017500000000074211460407074014402 0ustar metalmetal//http://devthought.com/blog/client-side/2009/04/javascript-regexp-based-highlighting-function-for-mootools-and-jquery/ jQuery.fn.extend({ highlight: function(search, insensitive, klass){ var regex = new RegExp('(<[^>]*>)|(\\b'+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +')', insensitive ? 'ig' : 'g'); return this.html(this.html().replace(regex, function(a, b, c){ return (a.charAt(0) == '<') ? a : '' + c + ''; })); } });jqapi-1.7/js/main.js0000644000175000017500000002374211627265634013375 0ustar metalmetaljqapi = function() { var elements = {}; var values = { searchHeight: null, selected: 'selected', category: 'category', open: 'open', catSelected: 'cat-selected', sub: 'sub', hasFocus: true, loader: '

', title: 'jQAPI - Alternative jQuery Documentation - ' }; var keys = { enter: 13, escape: 27, up: 38, down: 40, array: [13, 27, 38, 40] } function initialize() { elements = { search: $('#search-field'), searchWrapper: $('#search'), content: $('#content'), list: $('#static-list'), window: $(window), results: null, category: null }; //remove plugin category because there is nothing inside $('.category span:contains("Plugins")').remove(); elements.results = jQuery('