diff --git a/TestON/RobotTests/log.html b/TestON/RobotTests/log.html
deleted file mode 100644
index 6721cc7..0000000
--- a/TestON/RobotTests/log.html
+++ /dev/null
@@ -1,2066 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta http-equiv="Pragma" content="no-cache">
-<meta http-equiv="Expires" content="-1">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta content="Robot Framework 2.8.7 (Python 2.7.10 on linux2)" name="Generator">
-<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
-<style media="all" type="text/css">
-/* Generic and misc styles */
-body {
-    font-family: Helvetica, sans-serif;
-    font-size: 0.8em;
-    color: black;
-    padding: 6px;
-    background: white;
-}
-table {
-    table-layout: fixed;
-    word-wrap: break-word;
-    empty-cells: show;
-    font-size: 1em;
-}
-th, td {
-    vertical-align: top;
-}
-br {
-    mso-data-placement: same-cell; /* maintain line breaks in Excel */
-}
-a, a:link, a:visited {
-    text-decoration: none;
-    color: blue;
-}
-a > img {
-    border: 1px solid blue !important;
-}
-a:hover, a:active {
-    text-decoration: underline;
-    color: purple;
-}
-.parent-name {
-    font-size: 0.7em;
-    letter-spacing: -0.07em;
-}
-.message {
-    white-space: pre-wrap;
-}
-/* Headers */
-#header {
-    width: 65em;
-    height: 3em;
-    margin: 6px 0;
-}
-h1 {
-    float: left;
-    margin: 0 0 0.5em 0;
-    width: 75%;
-}
-h2 {
-    clear: left;
-}
-#generated {
-    float: right;
-    text-align: right;
-    font-size: 0.9em;
-    white-space: nowrap;
-}
-/* Documentation headers */
-.doc > h2 {
-    font-size: 1.2em;
-}
-.doc > h3 {
-    font-size: 1.1em;
-}
-.doc > h4 {
-    font-size: 1.0em;
-}
-/* Status text colors -- !important allows using them in links */
-.error, .fail {
-    color: red !important;
-    font-weight: bold;
-}
-.pass {
-    color: #009900 !important;
-}
-.warn {
-    color: #FFCC00 !important;
-    font-weight: bold;
-}
-.not-run {
-    color: #444444 !important;
-}
-/* Top right header */
-#top-right-header {
-    position: fixed;
-    top: 0;
-    right: 0;
-    z-index: 1000;
-    width: 12em;
-    text-align: center;
-}
-#report-or-log-link a {
-    display: block;
-    background: black;
-    color: white;
-    text-decoration: none;
-    letter-spacing: 0.1em;
-    padding: 0.3em 0;
-    border-bottom-left-radius: 4px;
-}
-#report-or-log-link a:hover {
-    color: yellow;
-}
-#log-level-selector {
-    padding: 0.3em 0;
-    font-size: 0.9em;
-    border-bottom-left-radius: 4px;
-    background: lightgray;
-}
-/* Statistics table */
-.statistics {
-    width: 65em;
-    border-collapse: collapse;
-    empty-cells: show;
-    margin-bottom: 1em;
-}
-.statistics tr:hover {
-    background: #ECECF7;
-    cursor: pointer;
-}
-.statistics th, .statistics td {
-    border: 1px solid black;
-    padding: 0.1em 0.3em;
-}
-.statistics th {
-    background-color: #DCDCF0;
-    padding: 0.2em 0.3em;
-}
-.statistics td {
-    vertical-align: middle;
-}
-.stats-col-stat {
-    width: 4.5em;
-    text-align: center;
-}
-.stats-col-elapsed {
-    width: 5.5em;
-    text-align: center;
-}
-.stats-col-graph {
-    width: 9em;
-}
-th.stats-col-graph:hover {
-    cursor: default;
-}
-.stat-name {
-    float: left;
-}
-.stat-name a, .stat-name span {
-    font-weight: bold;
-}
-.tag-links {
-    font-size: 0.9em;
-    float: right;
-    margin-top: 0.05em;
-}
-.tag-links span {
-    margin-left: 0.2em;
-}
-/* Statistics graph */
-.graph, .empty-graph {
-    border: 1px solid black;
-    width: auto;
-    height: 7px;
-    padding: 0;
-    background: red;
-}
-.empty-graph {
-    background: #E9E9E9;
-}
-.pass-bar, .fail-bar {
-    float: left;
-    height: 100%;
-}
-.pass-bar {
-    background: #00F000;
-}
-/* Tablesorter - adapted from provided Blue Skin */
-.tablesorter-header {
-    background-image: url(data:image/gif;base64,R0lGODlhCwAJAIAAAH9/fwAAACH5BAEAAAEALAAAAAALAAkAAAIRjAOnBr3cnIr0WUjTrC9e9BQAOw==);
-    background-repeat: no-repeat;
-    background-position: center right;
-    cursor: pointer;
-}
-.tablesorter-header:hover {
-    background-color: #B8C8E3;
-}
-.tablesorter-headerAsc {
-    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlBWnFr3cnIr0WQOyBmvzp13CpxQAOw==);
-    background-color: #B8C8E3 !important;
-}
-.tablesorter-headerDesc {
-    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlAWnBr3cnIr0WROyDmvzp13CpxQAOw==);
-    background-color: #B8C8E3 !important;
-}
-.sorter-false {
-    background-image: none;
-    cursor: default;
-}
-.sorter-false:hover {
-    background-color: #DCDCF0;
-}
-</style>
-<style media="all" type="text/css">
-/* Icons are from Open Iconic <https://useiconic.com/open/>.
-   Licensed under the MIT License. */
-/* Containers */
-.suite, .test, #errors {
-    border: 1px solid gray;
-    padding: 0.3em 0.2em;
-    margin: 0.2em 0;
-}
-.test {
-    border-style: dashed;
-}
-#errors, .messages, .metadata {
-    width: 100%;
-    border-spacing: 0;
-}
-.children {
-    display: none;
-    margin-left: 1.4em;
-}
-.suite, .test, .keyword {
-    margin-left: -0.2em;
-}
-#s1, .suite > .children > .keyword {
-    margin-left: 0;
-}
-/* Suite, test and kw headers */
-.element-header {
-    border: 1px solid transparent;
-    border-radius: 2px;
-    position: relative;
-}
-.element-header:hover {
-    cursor: pointer;
-    background-color: #ECECF7;
-    border-color: #BCBCD7;
-}
-.element-header-toggle {
-    position: absolute;
-    left: 3px;
-    top: 4px;
-    background-repeat: no-repeat;
-    background-position: center;
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAQAAABKxSfDAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeCR0JChSkZz20AAAAGklEQVQI12NgQAKMDKzInP8IDhOqMk4G7AAANQwBE427PYUAAAAASUVORK5CYII=);
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0wIDB2Mmg4di0yaC04eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAzKSIgLz4KPC9zdmc+), none;
-    height: 10px;
-    width: 10px;
-    background-size: 6px 6px;
-    border: 1px solid black;
-    border-radius: 2px;
-}
-.closed > .element-header-toggle {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAQAAABKxSfDAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeCR0JCDHdVYtxAAAAM0lEQVQI103MMQqAMBQFwVHyITaB3P+W1sKzSBC3mW6hRFw0pUB5DvF1bu9FN0RM3X/wAk98CUnvFTakAAAAAElFTkSuQmCC);
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0zIDB2M2gtM3YyaDN2M2gydi0zaDN2LTJoLTN2LTNoLTJ6IiAvPgo8L3N2Zz4=), none;
-}
-.element-header:hover > .element-header-toggle {
-    background-color: yellow;
-}
-.element-header-right:hover ~ .element-header-toggle {
-    background-color: transparent;
-}
-.element-header-left {
-    padding: 3px 80px 3px 20px;
-}
-.element-header-right {
-    position: absolute;
-    right: 0;
-    top: 0;
-    padding: 3px;
-    cursor: default;
-}
-.name {
-    font-weight: bold;
-}
-.elapsed {
-    float: right;
-    color: #808080;
-    padding-left: 1em;
-}
-.link {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAHlJREFUGJVtzrEJwmAQBtCn6ASuIKTIBhY2gmghBiJYB1udwk10B8FJbKMBcQFbtbkfJHrVwfu+4/idJR64Y9H7E3higj5O3S8Y44ApLnjhnXCNGhV2yNGggDJwiC02gavUbpDFvscRo4QdXOMKDHBufz3HLYKzNn4AbSkV3fncGQYAAAAASUVORK5CYII=);
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik01Ljg4LjAzYy0uMTguMDEtLjM2LjAzLS41My4wOS0uMjcuMS0uNTMuMjUtLjc1LjQ3YS41LjUgMCAxIDAgLjY5LjY5Yy4xMS0uMTEuMjQtLjE3LjM4LS4yMi4zNS0uMTIuNzgtLjA3IDEuMDYuMjIuMzkuMzkuMzkgMS4wNCAwIDEuNDRsLTEuNSAxLjVjLS40NC40NC0uOC40OC0xLjA2LjQ3LS4yNi0uMDEtLjQxLS4xMy0uNDEtLjEzYS41LjUgMCAxIDAtLjUuODhzLjM0LjIyLjg0LjI1Yy41LjAzIDEuMi0uMTYgMS44MS0uNzhsMS41LTEuNWMuNzgtLjc4Ljc4LTIuMDQgMC0yLjgxLS4yOC0uMjgtLjYxLS40NS0uOTctLjUzLS4xOC0uMDQtLjM4LS4wNC0uNTYtLjAzem0tMiAyLjMxYy0uNS0uMDItMS4xOS4xNS0xLjc4Ljc1bC0xLjUgMS41Yy0uNzguNzgtLjc4IDIuMDQgMCAyLjgxLjU2LjU2IDEuMzYuNzIgMi4wNi40Ny4yNy0uMS41My0uMjUuNzUtLjQ3YS41LjUgMCAxIDAtLjY5LS42OWMtLjExLjExLS4yNC4xNy0uMzguMjItLjM1LjEyLS43OC4wNy0xLjA2LS4yMi0uMzktLjM5LS4zOS0xLjA0IDAtMS40NGwxLjUtMS41Yy40LS40Ljc1LS40NSAxLjAzLS40NC4yOC4wMS40Ny4wOS40Ny4wOWEuNS41IDAgMSAwIC40NC0uODhzLS4zNC0uMi0uODQtLjIyeiIKICAvPgo8L3N2Zz4=), none;
-}
-.expand {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAADtJREFUGJVjYCACKDAwMByA0ljFDjAwMPxnYGB4ABVQgLL/Q+VQBB6gseGmIivCkERXhFUSWRFOSawAAEl7E3uv1iMcAAAAAElFTkSuQmCC);
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0xLjUgMGwtMS41IDEuNSA0IDQgNC00LTEuNS0xLjUtMi41IDIuNS0yLjUtMi41eiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxKSIgLz4KPC9zdmc+), none;
-}
-.collapse {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAC5JREFUGJVjYCARNEAxTsn/UIyhCFkSQxG6ThQ+C5IpjWhG1yNb4YDFTdjEMAEACi8Q++9Y9TAAAAAASUVORK5CYII=);
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik00IDBsLTQgNCAxLjUgMS41IDIuNS0yLjUgMi41IDIuNSAxLjUtMS41LTQtNHoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMSkiIC8+Cjwvc3ZnPg==), none;
-}
-.expand, .collapse, .link {
-    float: left;
-    display: block;
-    visibility: hidden;
-    margin: 0 4px;
-    height: 14px;
-    width: 14px;
-    background-size: 8px 8px;
-    background-repeat: no-repeat;
-    background-position: center;
-    border: 1px solid black;
-    border-radius: 2px;
-}
-.link {
-    background-size: 10px 10px;
-}
-.element-header:hover a {
-    visibility: visible;
-}
-.expand:hover, .collapse:hover, .link:hover {
-    background-color: yellow;
-}
-/* Messages and errors */
-.messages {
-    font-family: monospace;
-    font-size: 1.1em;
-}
-.message-row {
-    height: 20px;
-}
-.time {
-    width: 8em;
-}
-.error-time {
-    width: 11em;
-    white-space: nowrap;
-}
-.level {
-    width: 4.5em;
-    text-align: center;
-}
-.select-message {
-    width: 24px;
-}
-.select-message > div {
-    float: right;
-    margin-right: 2px;
-    height: 16px;
-    width: 16px;
-    background-size: 12px 12px;
-    background-repeat: no-repeat;
-    background-position: center;
-}
-.message-row:hover .select-message div {
-    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfeCR0MOzhWKZQOAAAASUlEQVQY032PsRHAIAwDX9BkicD+W8UMEqegAQJWKZ/+3sLZJhFGQEZzNaIa4ibh66En867VNaIeoP5WppNuIGoAlOm3g5VC1AdYeQv1BZPRSgAAAABJRU5ErkJggg==);
-    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlnaHQ9IjgiIHZpZXdCb3g9IjAgMCA4IDgiPgogIDxwYXRoIGQ9Ik0wIDB2MWg4di0xaC04em0wIDJ2MWg2di0xaC02em0wIDJ2MWg4di0xaC04em0wIDJ2MWg2di0xaC02eiIgLz4KPC9zdmc+), none;
-    border: 1px solid black;
-    border-radius: 2px;
-}
-.select-message:hover div {
-    background-color: yellow;
-    cursor: pointer;
-}
-/* Message tables - these MUST NOT be combined together because otherwise
-   dynamically altering them based on visible log level is not possible. */
-.trace-message {
-    display: table;
-}
-.debug-message {
-    display: table;
-}
-/* Metadata */
-.metadata th {
-    width: 12.5em;
-    text-align: left;
-    white-space: nowrap;
-    padding: 0;
-}
-.metadata td {
-    padding: 0.2em;
-}
-.keyword-metadata {
-    font-size: 0.9em;
-}
-/* Custom styles for statistics */
-#total-stats tr:hover, #tag-stats tr:hover {
-    cursor: default;
-}
-</style>
-<style media="print" type="text/css">
-body {
-    background: white !important;
-    padding: 0;
-    font-size: 8pt;
-}
-a:link, a:visited {
-    color: black;
-}
-#header {
-    width: auto;
-}
-.details, .statistics {
-    width: 100%;
-}
-#generated-ago, #top-right-header, #normal-selector, #search-buttons,
-.folding-button, .expand, .hidden, .details-col-toggle {
-    display: none;
-}
-.element-header-text, .children {
-    margin: 0;
-}
-#test-details {
-    border-collapse: collapse;
-    table-layout: auto;
-}
-#test-details th, #test-details td {
-    border: 1px solid black;
-}
-.details-col-header {
-    padding: 0;
-}
-#print-selector {
-    display: table-cell;
-}
-.tablesorter-header {
-    background-image: none;
-    background: #DCDCF0 !important;
-}
-</style>
-<style media="all" type="text/css">
-#javascript-disabled {
-    width: 600px;
-    margin: 100px auto 0 auto;
-    padding: 20px;
-    color: #2A2A2E;
-    border: 1px solid #9A9A9E;
-    background: #FAFAFF;
-}
-#javascript-disabled h1 {
-    width: 100%;
-    float: none;
-}
-#javascript-disabled ul {
-    font-size: 1.2em;
-}
-#javascript-disabled li {
-    margin: 0.5em 0;
-}
-#javascript-disabled b {
-    font-style: italic;
-}
-</style>
-<style media="all" type="text/css">
-.doc > * {
-    margin: 0.7em 1em 0.1em 1em;
-    padding: 0;
-}
-.doc > p, .doc > h1, .doc > h2, .doc > h3, .doc > h4 {
-    margin: 0.7em 0 0.1em 0;
-}
-.doc > *:first-child {
-    margin-top: 0.1em;
-}
-.doc table {
-    border: 1px solid gray;
-    background: transparent;
-    border-collapse: collapse;
-    empty-cells: show;
-    font-size: 0.9em;
-}
-.doc table th, .doc table td {
-    border: 1px solid gray;
-    background: transparent;
-    padding: 0.1em 0.3em;
-    height: 1.2em;
-}
-.doc table th {
-    text-align: center;
-    letter-spacing: 0.1em;
-}
-.doc pre {
-    font-size: 1.1em;
-    letter-spacing: 0.05em;
-    background: #F4F4FF;
-}
-.doc code {
-    padding: 0 0.2em;
-    letter-spacing: 0.05em;
-    background: #F4F4FF;
-}
-.doc li {
-    list-style-position: inside;
-    list-style-type: square;
-}
-.doc img {
-    border: 1px solid gray;
-}
-.doc hr {
-    background: gray;
-    height: 1px;
-    border: 0;
-}
-</style>
-<script type="text/javascript">
-var LEVELS = {TRACE: 0, DEBUG: 1, INFO: 2, WARN: 3, FAIL: 4, NONE: 5};
-function toggleSuite(suiteId) {
-    toggleElement(suiteId, ['keyword', 'suite', 'test']);
-}
-function toggleTest(testId) {
-    toggleElement(testId, ['keyword']);
-}
-function toggleKeyword(kwId) {
-    toggleElement(kwId, ['keyword', 'message']);
-}
-function toggleElement(elementId, childrenNames) {
-    var element = $('#' + elementId);
-    var children = element.children('.children');
-    children.toggle(100, '', function () {
-        element.children('.element-header').toggleClass('closed');
-    });
-    populateChildren(elementId, children, childrenNames);
-}
-function populateChildren(elementId, childElement, childrenNames) {
-    if (!childElement.hasClass('populated')) {
-        var element = window.testdata.findLoaded(elementId);
-        var callback = drawCallback(element, childElement, childrenNames);
-        element.callWhenChildrenReady(callback);
-        childElement.addClass('populated');
-    }
-}
-function drawCallback(element, childElement, childrenNames) {
-    return function () {
-        util.map(childrenNames, function (childName) {
-            var children = element[childName + 's']();
-            var template = childName + 'Template';
-            util.map(children, function (child) {
-                $.tmpl(template, child).appendTo(childElement);
-            });
-        });
-    }
-}
-function expandSuite(suite) {
-    if (suite.status == "PASS")
-        expandElement(suite);
-    else
-        expandCriticalFailed(suite);
-}
-function expandElement(item) {
-    var element = $('#' + item.id);
-    var children = element.children('.children');
-    // .css is faster than .show and .show w/ callback is terribly slow
-    children.css({'display': 'block'});
-    populateChildren(item.id, children, item.childrenNames);
-    element.children('.element-header').removeClass('closed');
-}
-function expandElementWithId(elementid) {
-    expandElement(window.testdata.findLoaded(elementid));
-}
-function expandCriticalFailed(element) {
-    if (element.status == "FAIL") {
-        window.elementsToExpand = [element];
-        window.expandDecider = function (e) {
-            return e.status == "FAIL" && (e.isCritical === undefined || e.isCritical);
-        };
-        expandRecursively();
-    }
-}
-function expandAll(elementId) {
-    window.elementsToExpand = [window.testdata.findLoaded(elementId)];
-    window.expandDecider = function () { return true; };
-    expandRecursively();
-}
-function expandRecursively() {
-    if (!window.elementsToExpand.length)
-        return;
-    var element = window.elementsToExpand.pop();
-    if (!element || elementHiddenByUser(element.id)) {
-        window.elementsToExpand = [];
-        return;
-    }
-    expandElement(element);
-    element.callWhenChildrenReady(function () {
-        var children = element.children();
-        for (var i = children.length-1; i >= 0; i--) {
-            if (window.expandDecider(children[i]))
-                window.elementsToExpand.push(children[i]);
-        }
-        if (window.elementsToExpand.length)
-            setTimeout(expandRecursively, 0);
-    });
-}
-function elementHiddenByUser(id) {
-    var element = $('#' + id);
-    return !element.is(":visible");
-}
-function collapseAll(id) {
-    var element = $('#' + id);
-    element.find('.children').css({'display': 'none'});
-    element.find('.element-header').addClass('closed');
-}
-function logLevelSelected(level) {
-    var anchors = getViewAnchorElements();
-    setMessageVisibility(level);
-    scrollToShortestVisibleAnchorElement(anchors);
-}
-function getViewAnchorElements() {
-    var elem1 = $(document.elementFromPoint(100, 0));
-    var elem2 = $(document.elementFromPoint(100, 20));
-    return [elem1, elem2];
-}
-function scrollToShortestVisibleAnchorElement(anchors) {
-    anchors = util.map(anchors, closestVisibleParent);
-    var shortest = anchors[0];
-    for (var i = 1; i < anchors.length; i++)
-        if (shortest.height() > anchors[i].height())
-            shortest = anchors[i];
-    shortest.get()[0].scrollIntoView(true);
-}
-function setMessageVisibility(level) {
-    level = parseInt(level);
-    changeClassDisplay(".trace-message", level <= LEVELS.TRACE);
-    changeClassDisplay(".debug-message", level <= LEVELS.DEBUG);
-    changeClassDisplay(".info-message", level <= LEVELS.INFO);
-}
-function closestVisibleParent(elem) {
-    while (!elem.is(":visible"))
-        elem = elem.parent();
-    return elem;
-}
-function changeClassDisplay(clazz, visible) {
-    var styles = document.styleSheets;
-    for (var i = 0; i < styles.length; i++) {
-        var rules = getRules(styles[i]);
-        if (rules === null)
-            continue;
-        for (var j = 0; j < rules.length; j++)
-            if (rules[j].selectorText === clazz)
-                rules[j].style.display = visible ? "table" : "none";
-    }
-}
-function getRules(style) {
-    // With Chrome external CSS files seem to have only null roles and with
-    // Firefox accessing rules can result to security error.
-    // Neither of these are a problem on with generated logs.
-    try {
-        return style.cssRules || style.rules;
-    } catch (e) {
-        return null;
-    }
-}
-function selectMessage(parentId) {
-    var element = $('#' + parentId).find('.message').get(0);
-    selectText(element);
-}
-function selectText(element) {
-    // Based on http://stackoverflow.com/questions/985272
-    var range, selection;
-    if (document.body.createTextRange) {  // IE 8
-        range = document.body.createTextRange();
-        range.moveToElementText(element);
-        range.select();
-    } else if (window.getSelection) {  // Others
-        selection = window.getSelection();
-        range = document.createRange();
-        range.selectNodeContents(element);
-        selection.removeAllRanges();
-        selection.addRange(range);
-    }
-}
-function LogLevelController(minLevel, defaultLevel) {
-    minLevel = LEVELS[minLevel];
-    defaultLevel = LEVELS[defaultLevel];
-    function showLogLevelSelector() {
-        return minLevel < LEVELS.INFO;
-    }
-    function defaultLogLevel() {
-        if (minLevel > defaultLevel)
-            return minLevel;
-        return defaultLevel;
-    }
-    function showTrace() {
-        return minLevel == LEVELS.TRACE;
-    }
-    return {
-        showLogLevelSelector: showLogLevelSelector,
-        defaultLogLevel: defaultLogLevel,
-        showTrace: showTrace
-    };
-}
-</script>
-<script type="text/javascript">
-/*! jQuery v1.8.3 jquery.com | jquery.org/license */
-(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
-</script>
-<script type="text/javascript">
-/*
- * jQuery Templates Plugin 1.0.0pre
- * http://github.com/jquery/jquery-tmpl
- * Requires jQuery 1.4.2
- *
- * Copyright Software Freedom Conservancy, Inc.
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- */
-(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
-</script>
-<script type="text/javascript">
-/*!
-* TableSorter 2.7.8 min - Client-side table sorting with ease!
-* Copyright (c) 2007 Christian Bach
-*/
-!function(j){j.extend({tablesorter:new function(){function e(d){"undefined"!==typeof console&&"undefined"!==typeof console.log?console.log(d):alert(d)}function u(d,c){e(d+" ("+((new Date).getTime()-c.getTime())+"ms)")}function p(d,c,a){if(!c)return"";var b=d.config,g=b.textExtraction,f="",f="simple"===g?b.supportsTextContent?c.textContent:j(c).text():"function"===typeof g?g(c,d,a):"object"===typeof g&&g.hasOwnProperty(a)?g[a](c,d,a):b.supportsTextContent?c.textContent:j(c).text();return j.trim(f)} function h(d){var c=d.config,a=c.$tbodies=c.$table.children("tbody:not(."+c.cssInfoBlock+")"),b,q,f,l,j,n,k="";if(0===a.length)return c.debug?e("*Empty table!* Not building a parser cache"):"";a=a[0].rows;if(a[0]){b=[];q=a[0].cells.length;for(f=0;f<q;f++){l=c.$headers.filter(":not([colspan])");l=l.add(c.$headers.filter('[colspan="1"]')).filter('[data-column="'+f+'"]:last');j=c.headers[f];n=g.getParserById(g.getData(l,j,"sorter"));c.empties[f]=g.getData(l,j,"empty")||c.emptyTo||(c.emptyToBottom?"bottom": "top");c.strings[f]=g.getData(l,j,"string")||c.stringTo||"max";if(!n)a:{l=d;j=a;n=-1;for(var u=f,x=void 0,t=g.parsers.length,y=!1,m="",x=!0;""===m&&x;)n++,j[n]?(y=j[n].cells[u],m=p(l,y,u),l.config.debug&&e("Checking if value was empty on row "+n+", column: "+u+": "+m)):x=!1;for(x=1;x<t;x++)if(g.parsers[x].is&&g.parsers[x].is(m,l,y)){n=g.parsers[x];break a}n=g.parsers[0]}c.debug&&(k+="column:"+f+"; parser:"+n.id+"; string:"+c.strings[f]+"; empty: "+c.empties[f]+"\n");b.push(n)}}c.debug&&e(k);return b} function s(d){var c=d.tBodies,a=d.config,b,q,f=a.parsers,l,v,n,k,h,x,t,m=[];a.cache={};if(!f)return a.debug?e("*Empty table!* Not building a cache"):"";a.debug&&(t=new Date);a.showProcessing&&g.isProcessing(d,!0);for(k=0;k<c.length;k++)if(a.cache[k]={row:[],normalized:[]},!j(c[k]).hasClass(a.cssInfoBlock)){b=c[k]&&c[k].rows.length||0;q=c[k].rows[0]&&c[k].rows[0].cells.length||0;for(v=0;v<b;++v)if(h=j(c[k].rows[v]),x=[],h.hasClass(a.cssChildRow))a.cache[k].row[a.cache[k].row.length-1]=a.cache[k].row[a.cache[k].row.length- 1].add(h);else{a.cache[k].row.push(h);for(n=0;n<q;++n)if(l=p(d,h[0].cells[n],n),l=f[n].format(l,d,h[0].cells[n],n),x.push(l),"numeric"===(f[n].type||"").toLowerCase())m[n]=Math.max(Math.abs(l),m[n]||0);x.push(a.cache[k].normalized.length);a.cache[k].normalized.push(x)}a.cache[k].colMax=m}a.showProcessing&&g.isProcessing(d);a.debug&&u("Building cache for "+b+" rows",t)}function m(d,c){var a=d.config,b=d.tBodies,q=[],f=a.cache,e,v,n,k,h,p,m,y,s,r,E;if(f[0]){a.debug&&(E=new Date);for(y=0;y<b.length;y++)if(e= j(b[y]),!e.hasClass(a.cssInfoBlock)){h=g.processTbody(d,e,!0);e=f[y].row;v=f[y].normalized;k=(n=v.length)?v[0].length-1:0;for(p=0;p<n;p++)if(r=v[p][k],q.push(e[r]),!a.appender||!a.removeRows){s=e[r].length;for(m=0;m<s;m++)h.append(e[r][m])}g.processTbody(d,h,!1)}a.appender&&a.appender(d,q);a.debug&&u("Rebuilt table",E);c||g.applyWidget(d);j(d).trigger("sortEnd",d)}}function F(d){var c,a,b,g=d.config,f=g.sortList,e=[g.cssAsc,g.cssDesc],h=j(d).find("tfoot tr").children().removeClass(e.join(" "));g.$headers.removeClass(e.join(" ")); b=f.length;for(c=0;c<b;c++)if(2!==f[c][1]&&(d=g.$headers.not(".sorter-false").filter('[data-column="'+f[c][0]+'"]'+(1===b?":last":"")),d.length))for(a=0;a<d.length;a++)d[a].sortDisabled||(d.eq(a).addClass(e[f[c][1]]),h.length&&h.filter('[data-column="'+f[c][0]+'"]').eq(a).addClass(e[f[c][1]]))}function G(d){var c=0,a=d.config,b=a.sortList,g=b.length,f=d.tBodies.length,e,h,n,k,p,m,t,r,s;if(!a.serverSideSorting&&a.cache[0]){a.debug&&(e=new Date);for(n=0;n<f;n++)p=a.cache[n].colMax,s=(m=a.cache[n].normalized)&& m[0]?m[0].length-1:0,m.sort(function(f,e){for(h=0;h<g;h++){k=b[h][0];r=b[h][1];t=/n/i.test(a.parsers&&a.parsers[k]?a.parsers[k].type||"":"")?"Numeric":"Text";t+=0===r?"":"Desc";/Numeric/.test(t)&&a.strings[k]&&(c="boolean"===typeof a.string[a.strings[k]]?(0===r?1:-1)*(a.string[a.strings[k]]?-1:1):a.strings[k]?a.string[a.strings[k]]||0:0);var l=j.tablesorter["sort"+t](d,f[k],e[k],k,p[k],c);if(l)return l}return f[s]-e[s]});a.debug&&u("Sorting on "+b.toString()+" and dir "+r+" time",e)}}function C(d, c){d.trigger("updateComplete");"function"===typeof c&&c(d[0])}function I(d,c,a){!1!==c?d.trigger("sorton",[d[0].config.sortList,function(){C(d,a)}]):C(d,a)}var g=this;g.version="2.7.8";g.parsers=[];g.widgets=[];g.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,headers:{},ignoreCase:!0, sortForce:null,sortList:[],sortAppend:null,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,initialized:null,tableClass:"tablesorter",cssAsc:"tablesorter-headerAsc",cssChildRow:"tablesorter-childRow",cssDesc:"tablesorter-headerDesc",cssHeader:"tablesorter-header",cssHeaderRow:"tablesorter-headerRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly", cssProcessing:"tablesorter-processing",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]};g.benchmark=u;g.construct=function(d){return this.each(function(){if(!this.tHead||0===this.tBodies.length||!0===this.hasInitialized)return this.config&&this.config.debug?e("stopping initialization! No thead, tbody or tablesorter has already been initialized"):"";var c=j(this),a=this,b,q,f,l="",v,n,k,C,x=j.metadata; a.hasInitialized=!1;a.config={};b=j.extend(!0,a.config,g.defaults,d);j.data(a,"tablesorter",b);b.debug&&j.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===j("<span>x</span>")[0].textContent;b.supportsDataObject=1.4<=parseFloat(j.fn.jquery);b.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0,"null":0,top:!0,bottom:!1};/tablesorter\-/.test(c.attr("class"))||(l=""!==b.theme?" tablesorter-"+b.theme:"");b.$table=c.addClass(b.tableClass+l);b.$tbodies=c.children("tbody:not(."+b.cssInfoBlock+ ")");var t=[],y={},O=0,R=j(a).find("thead:eq(0), tfoot").children("tr"),E,K,z,A,P,D,L,S,T,H;for(E=0;E<R.length;E++){P=R[E].cells;for(K=0;K<P.length;K++){A=P[K];D=A.parentNode.rowIndex;L=D+"-"+A.cellIndex;S=A.rowSpan||1;T=A.colSpan||1;"undefined"===typeof t[D]&&(t[D]=[]);for(z=0;z<t[D].length+1;z++)if("undefined"===typeof t[D][z]){H=z;break}y[L]=H;O=Math.max(H,O);j(A).attr({"data-column":H});for(z=D;z<D+S;z++){"undefined"===typeof t[z]&&(t[z]=[]);L=t[z];for(A=H;A<H+T;A++)L[A]="x"}}}a.config.columns= O;var M,B,Q,U,N,J,V,w=a.config;w.headerList=[];w.headerContent=[];w.debug&&(V=new Date);U=w.cssIcon?'<i class="'+w.cssIcon+'"></i>':"";t=j(a).find(w.selectorHeaders).each(function(a){B=j(this);M=w.headers[a];w.headerContent[a]=this.innerHTML;N=w.headerTemplate.replace(/\{content\}/g,this.innerHTML).replace(/\{icon\}/g,U);w.onRenderTemplate&&(Q=w.onRenderTemplate.apply(B,[a,N]))&&"string"===typeof Q&&(N=Q);this.innerHTML='<div class="tablesorter-header-inner">'+N+"</div>";w.onRenderHeader&&w.onRenderHeader.apply(B, [a]);this.column=y[this.parentNode.rowIndex+"-"+this.cellIndex];var b=g.getData(B,M,"sortInitialOrder")||w.sortInitialOrder;this.order=/^d/i.test(b)||1===b?[1,0,2]:[0,1,2];this.count=-1;"false"===g.getData(B,M,"sorter")?(this.sortDisabled=!0,B.addClass("sorter-false")):B.removeClass("sorter-false");this.lockedOrder=!1;J=g.getData(B,M,"lockedOrder")||!1;"undefined"!==typeof J&&!1!==J&&(this.order=this.lockedOrder=/^d/i.test(J)||1===J?[1,1,1]:[0,0,0]);B.addClass((this.sortDisabled?"sorter-false ":" ")+ w.cssHeader);w.headerList[a]=this;B.parent().addClass(w.cssHeaderRow)});a.config.debug&&(u("Built headers:",V),e(t));b.$headers=t;if(a.config.widthFixed&&0===j(a).find("colgroup").length){var W=j("<colgroup>"),X=j(a).width();j("tr:first td",a.tBodies[0]).each(function(){W.append(j("<col>").css("width",parseInt(1E3*(j(this).width()/X),10)/10+"%"))});j(a).prepend(W)}b.parsers=h(a);b.delayInit||s(a);b.$headers.find("*")[j.fn.addBack?"addBack":"andSelf"]().filter(b.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter", function(d,e){var h=(this.tagName.match("TH|TD")?j(this):j(this).parents("th, td").filter(":last"))[0];if(1!==(d.which||d.button))return!1;if("mousedown"===d.type)return C=(new Date).getTime(),"INPUT"===d.target.tagName?"":!b.cancelSelection;if(!0!==e&&250<(new Date).getTime()-C)return!1;b.delayInit&&!b.cache&&s(a);if(!h.sortDisabled){c.trigger("sortStart",a);l=!d[b.sortMultiSortKey];h.count=d[b.sortResetKey]?2:(h.count+1)%(b.sortReset?3:2);b.sortRestart&&(q=h,b.$headers.each(function(){if(this!== q&&(l||!j(this).is("."+b.cssDesc+",."+b.cssAsc)))this.count=-1}));q=h.column;if(l){b.sortList=[];if(null!==b.sortForce){v=b.sortForce;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}k=h.order[h.count];if(2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k])}else if(b.sortAppend&&1<b.sortList.length&&g.isValueInArray(b.sortAppend[0][0],b.sortList)&&b.sortList.pop(),g.isValueInArray(q,b.sortList))for(f=0;f<b.sortList.length;f++)n=b.sortList[f],k=b.headerList[n[0]], n[0]===q&&(n[1]=k.order[k.count],2===n[1]&&(b.sortList.splice(f,1),k.count=-1));else if(k=h.order[h.count],2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k]);if(null!==b.sortAppend){v=b.sortAppend;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}c.trigger("sortBegin",a);setTimeout(function(){F(a);G(a);m(a)},1)}});b.cancelSelection&&b.$headers.each(function(){this.onselectstart=function(){return!1}});c.unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter", function(){b.sortList=[];F(a);G(a);m(a)}).bind("update.tablesorter updateRows.tablesorter",function(d,f,g){j(b.selectorRemove,a).remove();b.parsers=h(a);s(a);I(c,f,g)}).bind("updateCell.tablesorter",function(d,f,g,e){var q,h,l;q=c.find("tbody");d=q.index(j(f).parents("tbody").filter(":last"));var k=j(f).parents("tr").filter(":last");f=j(f)[0];q.length&&0<=d&&(h=q.eq(d).find("tr").index(k),l=f.cellIndex,q=a.config.cache[d].normalized[h].length-1,a.config.cache[d].row[a.config.cache[d].normalized[h][q]]= k,a.config.cache[d].normalized[h][l]=b.parsers[l].format(p(a,f,l),a,f,l),I(c,g,e))}).bind("addRows.tablesorter",function(d,g,e,q){var j=g.filter("tr").length,l=[],k=g[0].cells.length,n=c.find("tbody").index(g.closest("tbody"));b.parsers||(b.parsers=h(a));for(d=0;d<j;d++){for(f=0;f<k;f++)l[f]=b.parsers[f].format(p(a,g[d].cells[f],f),a,g[d].cells[f],f);l.push(b.cache[n].row.length);b.cache[n].row.push([g[d]]);b.cache[n].normalized.push(l);l=[]}I(c,e,q)}).bind("sorton.tablesorter",function(b,d,f,g){c.trigger("sortStart", this);var e,q,l,h=a.config;b=d||h.sortList;h.sortList=[];j.each(b,function(a,b){e=[parseInt(b[0],10),parseInt(b[1],10)];if(l=h.headerList[e[0]])h.sortList.push(e),q=j.inArray(e[1],l.order),l.count=0<=q?q:e[1]%(h.sortReset?3:2)});F(a);G(a);m(a,g);"function"===typeof f&&f(a)}).bind("appendCache.tablesorter",function(b,c,d){m(a,d);"function"===typeof c&&c(a)}).bind("applyWidgetId.tablesorter",function(c,d){g.getWidgetById(d).format(a,b,b.widgetOptions)}).bind("applyWidgets.tablesorter",function(b,c){g.applyWidget(a, c)}).bind("refreshWidgets.tablesorter",function(b,c,d){g.refreshWidgets(a,c,d)}).bind("destroy.tablesorter",function(b,c,d){g.destroy(a,c,d)});b.supportsDataObject&&"undefined"!==typeof c.data().sortlist?b.sortList=c.data().sortlist:x&&(c.metadata()&&c.metadata().sortlist)&&(b.sortList=c.metadata().sortlist);g.applyWidget(a,!0);0<b.sortList.length?c.trigger("sorton",[b.sortList,{},!b.initWidgets]):b.initWidgets&&g.applyWidget(a);b.showProcessing&&c.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter", function(b){g.isProcessing(a,"sortBegin"===b.type)});a.hasInitialized=!0;b.debug&&g.benchmark("Overall initialization time",j.data(a,"startoveralltimer"));c.trigger("tablesorter-initialized",a);"function"===typeof b.initialized&&b.initialized(a)})};g.isProcessing=function(d,c,a){var b=d.config;d=a||j(d).find("."+b.cssHeader);c?(0<b.sortList.length&&(d=d.filter(function(){return this.sortDisabled?!1:g.isValueInArray(parseFloat(j(this).attr("data-column")),b.sortList)})),d.addClass(b.cssProcessing)): d.removeClass(b.cssProcessing)};g.processTbody=function(d,c,a){if(a)return c.before('<span class="tablesorter-savemyplace"/>'),d=j.fn.detach?c.detach():c.remove();d=j(d).find("span.tablesorter-savemyplace");c.insertAfter(d);d.remove()};g.clearTableBody=function(d){d.config.$tbodies.empty()};g.destroy=function(d,c,a){if(d.hasInitialized){g.refreshWidgets(d,!0,!0);var b=j(d),e=d.config,f=b.find("thead:first"),h=f.find("tr."+e.cssHeaderRow).removeClass(e.cssHeaderRow),u=b.find("tfoot:first > tr").children("th, td"); f.find("tr").not(h).remove();b.removeData("tablesorter").unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave sortBegin sortEnd ".split(" ").join(".tablesorter "));e.$headers.add(u).removeClass(e.cssHeader+" "+e.cssAsc+" "+e.cssDesc).removeAttr("data-column");h.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter");h.children().each(function(a){j(this).html(e.headerContent[a])});!1!==c&&b.removeClass(e.tableClass+ " tablesorter-"+e.theme);d.hasInitialized=!1;"function"===typeof a&&a(d)}};g.regex=[/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,/^0x[0-9a-f]+$/i];g.sortText=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo],h=g.regex;if(""===c&&0!==f)return"boolean"===typeof f?f?-1:1:-f||-1;if(""===a&&0!==f)return"boolean"===typeof f? f?1:-1:f||1;if("function"===typeof e.textSorter)return e.textSorter(c,a,d,b);d=c.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");b=a.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");c=parseInt(c.match(h[2]),16)||1!==d.length&&c.match(h[1])&&Date.parse(c);if(a=parseInt(a.match(h[2]),16)||c&&a.match(h[1])&&Date.parse(a)||null){if(c<a)return-1;if(c>a)return 1}e=Math.max(d.length,b.length);for(c=0;c<e;c++){a=isNaN(d[c])?d[c]||0:parseFloat(d[c])|| 0;h=isNaN(b[c])?b[c]||0:parseFloat(b[c])||0;if(isNaN(a)!==isNaN(h))return isNaN(a)?1:-1;typeof a!==typeof h&&(a+="",h+="");if(a<h)return-1;if(a>h)return 1}return 0};g.sortTextDesc=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo];return""===c&&0!==f?"boolean"===typeof f?f?-1:1:f||1:""===a&&0!==f?"boolean"===typeof f?f?1:-1:-f||-1:"function"===typeof e.textSorter?e.textSorter(a,c,d,b):g.sortText(d,a,c)};g.getTextValue=function(d,c,a){if(c){var b=d.length,e=c+a; for(c=0;c<b;c++)e+=d.charCodeAt(c);return a*e}return 0};g.sortNumeric=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b?b?-1:1:-b||-1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:b||1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return c-a};g.sortNumericDesc=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b? b?-1:1:b||1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:-b||-1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return a-c};g.characterEquivalents={a:"\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5",A:"\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5",c:"\u00e7\u0107\u010d",C:"\u00c7\u0106\u010c",e:"\u00e9\u00e8\u00ea\u00eb\u011b\u0119",E:"\u00c9\u00c8\u00ca\u00cb\u011a\u0118",i:"\u00ed\u00ec\u0130\u00ee\u00ef\u0131",I:"\u00cd\u00cc\u0130\u00ce\u00cf",o:"\u00f3\u00f2\u00f4\u00f5\u00f6", O:"\u00d3\u00d2\u00d4\u00d5\u00d6",ss:"\u00df",SS:"\u1e9e",u:"\u00fa\u00f9\u00fb\u00fc\u016f",U:"\u00da\u00d9\u00db\u00dc\u016e"};g.replaceAccents=function(d){var c,a="[",b=g.characterEquivalents;if(!g.characterRegex){g.characterRegexArray={};for(c in b)"string"===typeof c&&(a+=b[c],g.characterRegexArray[c]=RegExp("["+b[c]+"]","g"));g.characterRegex=RegExp(a+"]")}if(g.characterRegex.test(d))for(c in b)"string"===typeof c&&(d=d.replace(g.characterRegexArray[c],c));return d};g.isValueInArray=function(d, c){var a,b=c.length;for(a=0;a<b;a++)if(c[a][0]===d)return!0;return!1};g.addParser=function(d){var c,a=g.parsers.length,b=!0;for(c=0;c<a;c++)g.parsers[c].id.toLowerCase()===d.id.toLowerCase()&&(b=!1);b&&g.parsers.push(d)};g.getParserById=function(d){var c,a=g.parsers.length;for(c=0;c<a;c++)if(g.parsers[c].id.toLowerCase()===d.toString().toLowerCase())return g.parsers[c];return!1};g.addWidget=function(d){g.widgets.push(d)};g.getWidgetById=function(d){var c,a,b=g.widgets.length;for(c=0;c<b;c++)if((a= g.widgets[c])&&a.hasOwnProperty("id")&&a.id.toLowerCase()===d.toLowerCase())return a};g.applyWidget=function(d,c){var a=d.config,b=a.widgetOptions,e=a.widgets.sort().reverse(),f,h,m,n=e.length;h=j.inArray("zebra",a.widgets);0<=h&&(a.widgets.splice(h,1),a.widgets.push("zebra"));a.debug&&(f=new Date);for(h=0;h<n;h++)(m=g.getWidgetById(e[h]))&&(!0===c&&m.hasOwnProperty("init")?m.init(d,m,a,b):!c&&m.hasOwnProperty("format")&&m.format(d,a,b));a.debug&&u("Completed "+(!0===c?"initializing":"applying")+ " widgets",f)};g.refreshWidgets=function(d,c,a){var b,h=d.config,f=h.widgets,l=g.widgets,m=l.length;for(b=0;b<m;b++)if(l[b]&&l[b].id&&(c||0>j.inArray(l[b].id,f)))h.debug&&e("Refeshing widgets: Removing "+l[b].id),l[b].hasOwnProperty("remove")&&l[b].remove(d,h,h.widgetOptions);!0!==a&&g.applyWidget(d,c)};g.getData=function(d,c,a){var b="";d=j(d);var e,f;if(!d.length)return"";e=j.metadata?d.metadata():!1;f=" "+(d.attr("class")||"");"undefined"!==typeof d.data(a)||"undefined"!==typeof d.data(a.toLowerCase())? b+=d.data(a)||d.data(a.toLowerCase()):e&&"undefined"!==typeof e[a]?b+=e[a]:c&&"undefined"!==typeof c[a]?b+=c[a]:" "!==f&&f.match(" "+a+"-")&&(b=f.match(RegExp(" "+a+"-(\\w+)"))[1]||"");return j.trim(b)};g.formatFloat=function(d,c){if("string"!==typeof d||""===d)return d;var a;d=(c&&c.config?!1!==c.config.usNumberFormat:"undefined"!==typeof c?c:1)?d.replace(/,/g,""):d.replace(/[\s|\.]/g,"").replace(/,/g,".");/^\s*\([.\d]+\)/.test(d)&&(d=d.replace(/^\s*\(/,"-").replace(/\)/,""));a=parseFloat(d);return isNaN(a)? j.trim(d):a};g.isDigit=function(d){return isNaN(d)?/^[\-+(]?\d+[)]?$/.test(d.toString().replace(/[,.'"\s]/g,"")):!0}}});var h=j.tablesorter;j.fn.extend({tablesorter:h.construct});h.addParser({id:"text",is:function(){return!0},format:function(e,u){var p=u.config;e=j.trim(p.ignoreCase?e.toLocaleLowerCase():e);return p.sortLocaleCompare?h.replaceAccents(e):e},type:"text"});h.addParser({id:"currency",is:function(e){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((e|| "").replace(/[,. ]/g,""))},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"ipAddress",is:function(e){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(e)},format:function(e,j){var p,r=e.split("."),s="",m=r.length;for(p=0;p<m;p++)s+=("00"+r[p]).slice(-3);return h.formatFloat(s,j)},type:"numeric"});h.addParser({id:"url",is:function(e){return/^(https?|ftp|file):\/\//.test(e)},format:function(e){return j.trim(e.replace(/(https?|ftp|file):\/\//, ""))},type:"text"});h.addParser({id:"isoDate",is:function(e){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(e)},format:function(e,j){return h.formatFloat(""!==e?(new Date(e.replace(/-/g,"/"))).getTime()||"":"",j)},type:"numeric"});h.addParser({id:"percent",is:function(e){return/(\d\s?%|%\s?\d)/.test(e)},format:function(e,j){return h.formatFloat(e.replace(/%/g,""),j)},type:"numeric"});h.addParser({id:"usLongDate",is:function(e){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(e)|| /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(e)},format:function(e,j){return h.formatFloat((new Date(e.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"shortDate",is:function(e){return/^(\d{1,2}|\d{4})[\/\-\,\.\s+]\d{1,2}[\/\-\.\,\s+](\d{1,2}|\d{4})$/.test(e)},format:function(e,j,p,r){p=j.config;var s=p.headerList[r],m=s.shortDateFormat;"undefined"===typeof m&&(m=s.shortDateFormat=h.getData(s,p.headers[r],"dateFormat")||p.dateFormat);e=e.replace(/\s+/g," ").replace(/[\-|\.|\,]/g, "/");"mmddyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===m&&(e=e.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3"));return h.formatFloat((new Date(e)).getTime()||"",j)},type:"numeric"});h.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e,j){return h.formatFloat((new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"digit",is:function(e){return h.isDigit(e)},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"metadata",is:function(){return!1},format:function(e,h,p){e=h.config;e=!e.parserMetadataName?"sortValue":e.parserMetadataName;return j(p).metadata()[e]},type:"numeric"});h.addWidget({id:"zebra",format:function(e,u,p){var r,s,m,F,G,C,I=RegExp(u.cssChildRow,"i"),g=u.$tbodies;u.debug&&(G= new Date);for(e=0;e<g.length;e++)r=g.eq(e),C=r.children("tr").length,1<C&&(m=0,r=r.children("tr:visible"),r.each(function(){s=j(this);I.test(this.className)||m++;F=0===m%2;s.removeClass(p.zebra[F?1:0]).addClass(p.zebra[F?0:1])}));u.debug&&h.benchmark("Applying Zebra widget",G)},remove:function(e,h){var p,r,s=h.$tbodies,m=(h.widgetOptions.zebra||["even","odd"]).join(" ");for(p=0;p<s.length;p++)r=j.tablesorter.processTbody(e,s.eq(p),!0),r.children().removeClass(m),j.tablesorter.processTbody(e,r,!1)}})}(jQuery);
-</script>
-<script type="text/javascript">
-/*
-    Copyright 2008-2013
-        Matthias Ehmann,
-        Michael Gerhaeuser,
-        Carsten Miller,
-        Bianca Valentin,
-        Alfred Wassermann,
-        Peter Wilfahrt
-    Dual licensed under the Apache License Version 2.0, or LGPL Version 3 licenses.
-    You should have received a copy of the GNU Lesser General Public License
-    along with JSXCompressor.  If not, see <http://www.gnu.org/licenses/>.
-    You should have received a copy of the Apache License along with JSXCompressor.
-    If not, see <http://www.apache.org/licenses/>.
-*/
-(function(){var e,r,n;(function(t){function o(e,r){return y.call(e,r)}function i(e,r){var n,t,o,i,u,f,a,c,s,l,p=r&&r.split("/"),d=k.map,g=d&&d["*"]||{};if(e&&"."===e.charAt(0))if(r){for(p=p.slice(0,p.length-1),e=p.concat(e.split("/")),c=0;e.length>c;c+=1)if(l=e[c],"."===l)e.splice(c,1),c-=1;else if(".."===l){if(1===c&&(".."===e[2]||".."===e[0]))break;c>0&&(e.splice(c-1,2),c-=2)}e=e.join("/")}else 0===e.indexOf("./")&&(e=e.substring(2));if((p||g)&&d){for(n=e.split("/"),c=n.length;c>0;c-=1){if(t=n.slice(0,c).join("/"),p)for(s=p.length;s>0;s-=1)if(o=d[p.slice(0,s).join("/")],o&&(o=o[t])){i=o,u=c;break}if(i)break;!f&&g&&g[t]&&(f=g[t],a=c)}!i&&f&&(i=f,u=a),i&&(n.splice(0,u,i),e=n.join("/"))}return e}function u(e,r){return function(){return d.apply(t,v.call(arguments,0).concat([e,r]))}}function f(e){return function(r){return i(r,e)}}function a(e){return function(r){b[e]=r}}function c(e){if(o(m,e)){var r=m[e];delete m[e],C[e]=!0,p.apply(t,r)}if(!o(b,e)&&!o(C,e))throw Error("No "+e);return b[e]}function s(e){var r,n=e?e.indexOf("!"):-1;return n>-1&&(r=e.substring(0,n),e=e.substring(n+1,e.length)),[r,e]}function l(e){return function(){return k&&k.config&&k.config[e]||{}}}var p,d,g,h,b={},m={},k={},C={},y=Object.prototype.hasOwnProperty,v=[].slice;g=function(e,r){var n,t=s(e),o=t[0];return e=t[1],o&&(o=i(o,r),n=c(o)),o?e=n&&n.normalize?n.normalize(e,f(r)):i(e,r):(e=i(e,r),t=s(e),o=t[0],e=t[1],o&&(n=c(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},h={require:function(e){return u(e)},exports:function(e){var r=b[e];return r!==void 0?r:b[e]={}},module:function(e){return{id:e,uri:"",exports:b[e],config:l(e)}}},p=function(e,r,n,i){var f,s,l,p,d,k,y=[];if(i=i||e,"function"==typeof n){for(r=!r.length&&n.length?["require","exports","module"]:r,d=0;r.length>d;d+=1)if(p=g(r[d],i),s=p.f,"require"===s)y[d]=h.require(e);else if("exports"===s)y[d]=h.exports(e),k=!0;else if("module"===s)f=y[d]=h.module(e);else if(o(b,s)||o(m,s)||o(C,s))y[d]=c(s);else{if(!p.p)throw Error(e+" missing "+s);p.p.load(p.n,u(i,!0),a(s),{}),y[d]=b[s]}l=n.apply(b[e],y),e&&(f&&f.exports!==t&&f.exports!==b[e]?b[e]=f.exports:l===t&&k||(b[e]=l))}else e&&(b[e]=n)},e=r=d=function(e,r,n,o,i){return"string"==typeof e?h[e]?h[e](r):c(g(e,r).f):(e.splice||(k=e,r.splice?(e=r,r=n,n=null):e=t),r=r||function(){},"function"==typeof n&&(n=o,o=i),o?p(t,e,r,n):setTimeout(function(){p(t,e,r,n)},4),d)},d.config=function(e){return k=e,k.deps&&d(k.deps,k.callback),d},n=function(e,r,n){r.splice||(n=r,r=[]),o(b,e)||o(m,e)||(m[e]=[e,r,n])},n.amd={jQuery:!0}})(),n("../node_modules/almond/almond",function(){}),n("jxg",[],function(){var e={};return"object"!=typeof JXG||JXG.extend||(e=JXG),e.extend=function(e,r,n,t){var o,i;n=n||!1,t=t||!1;for(o in r)(!n||n&&r.hasOwnProperty(o))&&(i=t?o.toLowerCase():o,e[i]=r[o])},e.extend(e,{boards:{},readers:{},elements:{},registerElement:function(e,r){e=e.toLowerCase(),this.elements[e]=r},registerReader:function(e,r){var n,t;for(n=0;r.length>n;n++)t=r[n].toLowerCase(),"function"!=typeof this.readers[t]&&(this.readers[t]=e)},shortcut:function(e,r){return function(){return e[r].apply(this,arguments)}},getRef:function(e,r){return e.select(r)},getReference:function(e,r){return e.select(r)},debugInt:function(){var e,r;for(e=0;arguments.length>e;e++)r=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(r):"object"==typeof document&&document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=r+"<br/>")},debugWST:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&(e.debugInt("stacktrace"),e.debugInt(r.stack.split("\n").slice(1).join("\n")))},debugLine:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&e.debugInt("Called from",r.stack.split("\n").slice(2,3).join("\n"))},debug:function(){e.debugInt.apply(this,arguments)}}),e}),n("utils/zip",["jxg"],function(e){var r=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],t=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],i=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=256;return e.Util=e.Util||{},e.Util.Unzip=function(a){function c(){return q+=8,N>R?a[R++]:-1}function s(){T=1}function l(){var e;return q++,e=1&T,T>>=1,0===T&&(T=c(),e=1&T,T=128|T>>1),e}function p(e){for(var n=0,t=e;t--;)n=n<<1|l();return e&&(n=r[n]>>8-e),n}function d(){L=0}function g(e){A++,E[L++]=e,z.push(String.fromCharCode(e)),32768===L&&(L=0)}function h(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function b(){for(;;){if(H[P]>=w)return-1;if(U[H[P]]===P)return H[P]++;H[P]++}}function m(){var e,r=F[X];if(17===P)return-1;if(X++,P++,e=b(),e>=0)r.b0=e;else if(r.b0=32768,m())return-1;if(e=b(),e>=0)r.b1=e,r.jump=null;else if(r.b1=32768,r.jump=F[X],r.jumppos=X,m())return-1;return P--,0}function k(e,r,n){var t;for(F=e,X=0,U=n,w=r,t=0;17>t;t++)H[t]=0;return P=0,m()?-1:0}function C(e){for(var r,n,t,o=0,i=e[o];;)if(t=l()){if(!(32768&i.b1))return i.b1;for(i=i.jump,r=e.length,n=0;r>n;n++)if(e[n]===i){o=n;break}}else{if(!(32768&i.b0))return i.b0;o++,i=e[o]}}function y(){var f,a,b,m,y,v,j,A,x,U,w,S,z,I,O,B,N;do if(f=l(),b=p(2),0===b)for(s(),U=c(),U|=c()<<8,S=c(),S|=c()<<8,65535&(U^~S)&&e.debug("BlockLen checksum mismatch\n");U--;)a=c(),g(a);else if(1===b)for(;;)if(y=r[p(7)]>>1,y>23?(y=y<<1|l(),y>199?(y-=128,y=y<<1|l()):(y-=48,y>143&&(y+=136))):y+=256,256>y)g(y);else{if(256===y)break;for(y-=257,x=p(t[y])+n[y],y=r[p(5)]>>3,i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y],y=0;x>y;y++)a=E[32767&L-w],g(a)}else if(2===b){for(j=Array(320),I=257+p(5),O=1+p(5),B=4+p(4),y=0;19>y;y++)j[y]=0;for(y=0;B>y;y++)j[u[y]]=p(3);for(x=J.length,m=0;x>m;m++)J[m]=new h;if(k(J,19,j,0))return d(),1;for(z=I+O,m=0,N=-1;z>m;)if(N++,y=C(J),16>y)j[m++]=y;else if(16===y){if(y=3+p(2),m+y>z)return d(),1;for(v=m?j[m-1]:0;y--;)j[m++]=v}else{if(y=17===y?3+p(3):11+p(7),m+y>z)return d(),1;for(;y--;)j[m++]=0}for(x=G.length,m=0;x>m;m++)G[m]=new h;if(k(G,I,j,0))return d(),1;for(x=G.length,m=0;x>m;m++)J[m]=new h;for(A=[],m=I;j.length>m;m++)A[m-I]=j[m];if(k(J,O,A,0))return d(),1;for(;;)if(y=C(G),y>=256){if(y-=256,0===y)break;for(y-=1,x=p(t[y])+n[y],y=C(J),i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y];x--;)a=E[32767&L-w],g(a)}else g(y)}while(!f);return d(),s(),0}function v(){var e,r,n,t,o,i,u,a,s=[];if(z=[],B=!1,s[0]=c(),s[1]=c(),120===s[0]&&218===s[1]&&(y(),O[I]=[z.join(""),"geonext.gxt"],I++),31===s[0]&&139===s[1]&&(S(),O[I]=[z.join(""),"file"],I++),80===s[0]&&75===s[1]&&(B=!0,s[2]=c(),s[3]=c(),3===s[2]&&4===s[3])){for(s[0]=c(),s[1]=c(),j=c(),j|=c()<<8,a=c(),a|=c()<<8,c(),c(),c(),c(),u=c(),u|=c()<<8,u|=c()<<16,u|=c()<<24,i=c(),i|=c()<<8,i|=c()<<16,i|=c()<<24,o=c(),o|=c()<<8,o|=c()<<16,o|=c()<<24,t=c(),t|=c()<<8,n=c(),n|=c()<<8,e=0,M=[];t--;)r=c(),"/"===r|":"===r?e=0:f-1>e&&(M[e++]=String.fromCharCode(r));for(x||(x=M),e=0;n>e;)r=c(),e++;A=0,8===a&&(y(),O[I]=Array(2),O[I][0]=z.join(""),O[I][1]=M.join(""),I++),S()}}var j,A,x,U,w,S,z=[],I=0,O=[],E=Array(32768),L=0,B=!1,N=a.length,R=0,T=1,q=0,G=Array(288),J=Array(32),X=0,F=null,P=(Array(64),Array(64),0),H=Array(17),M=[];H[0]=0,S=function(){var e,r,n,t,o,i,u=[];if(8&j&&(u[0]=c(),u[1]=c(),u[2]=c(),u[3]=c(),80===u[0]&&75===u[1]&&7===u[2]&&8===u[3]?(e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24):e=u[0]|u[1]<<8|u[2]<<16|u[3]<<24,r=c(),r|=c()<<8,r|=c()<<16,r|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24),B&&v(),u[0]=c(),8===u[0]){if(j=c(),c(),c(),c(),c(),c(),t=c(),4&j)for(u[0]=c(),u[2]=c(),P=u[0]+256*u[1],o=0;P>o;o++)c();if(8&j)for(o=0,M=[],i=c();i;)("7"===i||":"===i)&&(o=0),f-1>o&&(M[o++]=i),i=c();if(16&j)for(i=c();i;)i=c();2&j&&(c(),c()),y(),e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24,B&&v()}},e.Util.Unzip.prototype.unzipFile=function(e){var r;for(this.unzip(),r=0;O.length>r;r++)if(O[r][1]===e)return O[r][0];return""},e.Util.Unzip.prototype.unzip=function(){return v(),O}},e.Util}),n("utils/encoding",["jxg"],function(e){var r=0,n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];return e.Util=e.Util||{},e.Util.UTF8={encode:function(e){var r,n,t="",o=e.length;if(e=e.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeURIComponent)return unescape(encodeURIComponent(e));for(r=0;o>r;r++)n=e.charCodeAt(r),128>n?t+=String.fromCharCode(n):n>127&&2048>n?(t+=String.fromCharCode(192|n>>6),t+=String.fromCharCode(128|63&n)):(t+=String.fromCharCode(224|n>>12),t+=String.fromCharCode(128|63&n>>6),t+=String.fromCharCode(128|63&n));return t},decode:function(e){var t,o,i,u=0,f=0,a=r,c=[],s=e.length,l=[];for(t=0;s>t;t++)o=e.charCodeAt(t),i=n[o],f=a!==r?63&o|f<<6:255>>i&o,a=n[256+a+i],a===r&&(f>65535?c.push(55232+(f>>10),56320+(1023&f)):c.push(f),u++,0===u%1e4&&(l.push(String.fromCharCode.apply(null,c)),c=[]));return l.push(String.fromCharCode.apply(null,c)),l.join("")},asciiCharCodeAt:function(e,r){var n=e.charCodeAt(r);if(n>255)switch(n){case 8364:n=128;break;case 8218:n=130;break;case 402:n=131;break;case 8222:n=132;break;case 8230:n=133;break;case 8224:n=134;break;case 8225:n=135;break;case 710:n=136;break;case 8240:n=137;break;case 352:n=138;break;case 8249:n=139;break;case 338:n=140;break;case 381:n=142;break;case 8216:n=145;break;case 8217:n=146;break;case 8220:n=147;break;case 8221:n=148;break;case 8226:n=149;break;case 8211:n=150;break;case 8212:n=151;break;case 732:n=152;break;case 8482:n=153;break;case 353:n=154;break;case 8250:n=155;break;case 339:n=156;break;case 382:n=158;break;case 376:n=159;break;default:}return n}},e.Util.UTF8}),n("utils/base64",["jxg","utils/encoding"],function(e,r){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.Util=e.Util||{},e.Util.Base64={encode:function(e){var t,o,i,u,f,a,c,s=[],l=0;for(e=r.encode(e);e.length>l;)t=e.charCodeAt(l++),o=e.charCodeAt(l++),i=e.charCodeAt(l++),u=t>>2,f=(3&t)<<4|o>>4,a=(15&o)<<2|i>>6,c=63&i,isNaN(o)?a=c=64:isNaN(i)&&(c=64),s.push([n.charAt(u),n.charAt(f),n.charAt(a),n.charAt(c)].join(""));return s.join("")},decode:function(e,t){var o,i,u,f,a,c,s,l=[],p=0,d=e.length;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");d>p;)f=n.indexOf(e.charAt(p++)),a=n.indexOf(e.charAt(p++)),c=n.indexOf(e.charAt(p++)),s=n.indexOf(e.charAt(p++)),o=f<<2|a>>4,i=(15&a)<<4|c>>2,u=(3&c)<<6|s,l.push(String.fromCharCode(o)),64!==c&&l.push(String.fromCharCode(i)),64!==s&&l.push(String.fromCharCode(u));return l=l.join(""),t&&(l=r.decode(l)),l},decodeAsArray:function(e){var r,n=this.decode(e),t=[],o=n.length;for(r=0;o>r;r++)t[r]=n.charCodeAt(r);return t}},e.Util.Base64}),n("../build/compressor.deps.js",["jxg","utils/zip","utils/base64"],function(e,r,n){return e.decompress=function(e){return unescape(new r.Unzip(n.decodeAsArray(e)).unzip()[0][0])},e}),window.JXG=r("../build/compressor.deps.js")})();
-</script>
-<script type="text/javascript">
-window.fileLoading = (function () {
-    var fileLoadingCallbacks = {};
-    var timestamp = new Date().getTime();
-    function loadKeywordsFile(filename, callback) {
-        fileLoadingCallbacks[filename] = callback;
-        var script = document.createElement('script');
-        script.type = 'text/javascript';
-        // timestamp as an argument to prevent browsers from caching scripts
-        // see: http://stackoverflow.com/questions/866619/how-to-force-ie-to-reload-javascript
-        script.src = filename+'?time='+timestamp;
-        document.getElementsByTagName("head")[0].appendChild(script);
-    }
-    function getCallbackHandlerForKeywords(parent) {
-        var callableList = [];
-        return function (callable) {
-            if (!parent.isChildrenLoaded) {
-                callableList.push(callable);
-                if (callableList.length == 1) {
-                    loadKeywordsFile(parent.childFileName, function () {
-                        parent.isChildrenLoaded = true;
-                        for (var i = 0; i < callableList.length; i++) {
-                            callableList[i]();
-                        }
-                    });
-                }
-            } else {
-                callable();
-            }
-        }
-    }
-    function notifyFileLoaded(filename) {
-        fileLoadingCallbacks[filename]();
-    }
-    return {
-        getCallbackHandlerForKeywords: getCallbackHandlerForKeywords,
-        notify: notifyFileLoaded
-    }
-}());
-</script>
-<script type="text/javascript">
-window.model = (function () {
-    function Suite(data) {
-        var suite = createModelObject(data);
-        suite.source = data.source;
-        suite.relativeSource = data.relativeSource;
-        suite.fullName = data.parent ? data.parent.fullName + '.' + data.name : data.name;
-        setStats(suite, data.statistics);
-        suite.metadata = data.metadata;
-        suite.populateKeywords = createIterablePopulator('Keyword');
-        suite.populateTests = createIterablePopulator('Test');
-        suite.populateSuites = createIterablePopulator('Suite');
-        suite.childrenNames = ['keyword', 'suite', 'test'];
-        suite.callWhenChildrenReady = function (callable) { callable(); };
-        suite.message = data.message;
-        suite.children = function () {
-            return suite.keywords().concat(suite.tests()).concat(suite.suites());
-        };
-        suite.searchTests = function (predicate) {
-            var tests = [];
-            var suites = this.suites();
-            for (var i in suites)
-                tests = tests.concat(suites[i].searchTests(predicate));
-            return tests.concat(util.filter(this.tests(), predicate));
-        };
-        suite.searchTestsInSuite = function (pattern, matcher) {
-            if (!matcher)
-                matcher = util.Matcher(pattern);
-            if (matcher.matchesAny([suite.fullName, suite.name]))
-                return suite.allTests();
-            var tests = [];
-            var suites = this.suites();
-            for (var i in suites)
-                tests = tests.concat(suites[i].searchTestsInSuite(pattern, matcher));
-            return tests;
-        }
-        suite.searchTestsByTag = function (tag) {
-            return suite.searchTests(function (test) {
-                if (tag.combined)
-                    return containsTagPattern(test.tags, tag.combined);
-                return containsTag(test.tags, tag.label);
-            });
-        };
-        suite.findSuiteByName = function (name) {
-            return findSuiteByName(suite, name);
-        };
-        suite.allTests = function () {
-            return suite.searchTests(function (test) {
-                return true;
-            });
-        };
-        suite.criticalTests = function () {
-            return suite.searchTests(function (test) {
-                return test.isCritical;
-            });
-        };
-        return suite;
-    }
-    function containsTag(testTags, tagname) {
-        testTags = util.map(testTags, util.normalize);
-        return util.contains(testTags, util.normalize(tagname));
-    }
-    function containsTagPattern(testTags, pattern) {
-        var patterns;
-        if (pattern.indexOf('NOT') != -1) {
-            patterns = pattern.split('NOT');
-            return containsTagPattern(testTags, patterns[0]) &&
-                util.all(util.map(patterns.slice(1), function (p) {
-                    return !containsTagPattern(testTags, p);
-                }));
-        }
-        if (pattern.indexOf('OR') != -1) {
-            patterns = pattern.split('OR');
-            return util.any(util.map(patterns, function (p) {
-                return containsTagPattern(testTags, p);
-            }));
-        }
-        if (pattern.indexOf('AND') != -1) {
-            patterns = pattern.split('AND');
-            return util.all(util.map(patterns, function (p) {
-                return containsTagPattern(testTags, p);
-            }));
-        }
-        return util.Matcher(pattern).matchesAny(testTags);
-    }
-    function findSuiteByName(suite, name) {
-        if (suite.fullName == name)
-            return suite;
-        var subSuites = suite.suites();
-        for (var i in subSuites) {
-            var match = findSuiteByName(subSuites[i], name);
-            if (match)
-                return match;
-        }
-        return null;
-    }
-    function setStats(suite, stats) {
-        for (var name in stats) {
-            suite[name] = stats[name];
-        }
-    }
-    function createModelObject(data) {
-        return {
-            name: data.name,
-            doc: data.doc,
-            status: data.status,
-            times: data.times,
-            id: data.parent ? data.parent.id + '-' + data.id : data.id
-        };
-    }
-    function Test(data) {
-        var test = createModelObject(data);
-        test.fullName = data.parent.fullName + '.' + test.name;
-        test.formatParentName = function () { return util.formatParentName(test); };
-        test.timeout = data.timeout;
-        test.populateKeywords = createIterablePopulator('Keyword');
-        test.childrenNames = ['keyword'];
-        test.isChildrenLoaded = data.isChildrenLoaded;
-        test.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(test);
-        test.children = function () {
-            if (test.isChildrenLoaded)
-                return test.keywords();
-        };
-        test.isCritical = data.isCritical;
-        test.tags = data.tags;
-        test.message = data.message;
-        test.matchesTagPattern = function (pattern) {
-            return containsTagPattern(test.tags, pattern);
-        };
-        test.matchesNamePattern = function (pattern) {
-            return util.Matcher(pattern).matchesAny([test.name, test.fullName]);
-        };
-        return test;
-    }
-    function Keyword(data) {
-        var kw = createModelObject(data);
-        kw.type = data.type;
-        kw.arguments = data.args;
-        kw.timeout = data.timeout;
-        kw.populateMessages = createIterablePopulator('Message');
-        kw.populateKeywords = createIterablePopulator('Keyword');
-        kw.childrenNames = ['keyword', 'message'];
-        kw.isChildrenLoaded = data.isChildrenLoaded;
-        kw.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(kw);
-        kw.children = function () {
-            if (kw.isChildrenLoaded)
-                return kw.keywords();
-        };
-        return kw;
-    }
-    function Message(level, date, text, link) {
-        return {
-            level: level,
-            time: util.timeFromDate(date),
-            date: util.dateFromDate(date),
-            text: text,
-            link: link
-        };
-    }
-    function Times(timedata) {
-        var start = timedata[0];
-        var end = timedata[1];
-        var elapsed = timedata[2];
-        return {
-            elapsedMillis: elapsed,
-            elapsedTime: util.formatElapsed(elapsed),
-            startTime: util.dateTimeFromDate(start),
-            endTime:  util.dateTimeFromDate(end)
-        };
-    }
-    function createIterablePopulator(name) {
-        return function (populator) {
-            populateIterable(this, name, populator);
-        };
-    }
-    function populateIterable(obj, name, populator) {
-        name = name.toLowerCase() + 's';
-        obj[name] = createGetAllFunction(populator.numberOfItems, populator.creator);
-    }
-    function createGetAllFunction(numberOfElements, creator) {
-        var cached = null;
-        return function () {
-            if (cached === null) {
-                cached = [];
-                for (var i = 0; i < numberOfElements(); i++) {
-                    cached.push(creator(i));
-                }
-            }
-            return cached;
-        };
-    }
-    return {
-        Suite: Suite,
-        Test: Test,
-        Keyword: Keyword,
-        Message: Message,
-        Times: Times,
-        containsTag: containsTag,  // Exposed for tests
-        containsTagPattern: containsTagPattern  // Exposed for tests
-    };
-}());
-window.stats = (function () {
-    function Statistics(totalElems, tagElems, suiteElems) {
-        return {total: util.map(totalElems, totalStatElem),
-                tag:   util.map(tagElems, tagStatElem),
-                suite: util.map(suiteElems, suiteStatElem)};
-    }
-    function statElem(stat) {
-        stat.total = stat.pass + stat.fail;
-        var percents = calculatePercents(stat.total, stat.pass, stat.fail);
-        stat.passPercent = percents[0];
-        stat.failPercent = percents[1];
-        var widths = calculateWidths(stat.passPercent, stat.failPercent);
-        stat.passWidth = widths[0];
-        stat.failWidth = widths[1];
-        return stat;
-    }
-    function totalStatElem(data) {
-        var stat = statElem(data);
-        stat.type = stat.label == 'Critical Tests' ? 'critical' : 'all';
-        return stat;
-    }
-    function tagStatElem(data) {
-        var stat = statElem(data);
-        stat.links = parseLinks(stat.links);
-        return stat;
-    }
-    function suiteStatElem(data) {
-        var stat = statElem(data);
-        stat.fullName = stat.label;
-        stat.formatParentName = function () { return util.formatParentName(stat); };
-        // compatibility with RF 2.5 outputs
-        if (!stat.name)
-            stat.name = stat.label.split('.').pop();
-        return stat;
-    }
-    function parseLinks(linksData) {
-        if (!linksData)
-            return [];
-        return util.map(linksData.split(':::'), function (link) {
-                var index = link.indexOf(':');
-                return {title: link.slice(0, index), url: link.slice(index+1)};
-            });
-    }
-    function calculatePercents(total, passed, failed) {
-        if (total == 0)
-            return [0.0, 0.0];
-        var pass = 100.0 * passed / total;
-        var fail = 100.0 * failed / total;
-        if (pass > 0 && pass < 0.1)
-            return [0.1, 99.9];
-        if (fail > 0 && fail < 0.1)
-            return [99.9, 0.1];
-        return [Math.round(pass*10)/10, Math.round(fail*10)/10];
-    }
-    function calculateWidths(num1, num2) {
-        if (num1 + num2 == 0)
-            return [0.0, 0.0];
-        // Make small percentages better visible
-        if (num1 > 0 && num1 < 1)
-            return [1.0, 99.0];
-        if (num2 > 0 && num2 < 1)
-            return [99.0, 1.0];
-        // Handle situation where both are rounded up
-        while (num1 + num2 > 100) {
-            if (num1 > num2)
-                num1 -= 0.1;
-            if (num2 > num1)
-                num2 -= 0.1;
-        }
-        return [num1, num2];
-    }
-    return {
-        Statistics: Statistics
-    };
-}());
-</script>
-<script type="text/javascript">
-window.util = function () {
-    function map(elems, func) {
-        var ret = [];
-        for (var i = 0, len = elems.length; i < len; i++) {
-            ret[i] = func(elems[i]);
-        }
-        return ret;
-    }
-    function filter(elems, predicate) {
-        var ret = [];
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (predicate(elems[i]))
-                ret.push(elems[i]);
-        }
-        return ret;
-    }
-    function all(elems) {
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (!elems[i])
-                return false;
-        }
-        return true;
-    }
-    function any(elems) {
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (elems[i])
-                return elems[i];
-        }
-        return false;
-    }
-    function contains(elems, e) {
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (elems[i] == e)
-                return true;
-        }
-        return false;
-    }
-    function last(items) {
-        return items[items.length-1];
-    }
-    function unescape(string) {
-        return string.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
-    }
-    function escape(string) {
-        return string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-    }
-    function normalize(string) {
-        return string.toLowerCase().replace(/ /g, '').replace(/_/g, '');
-    }
-    function regexpEscape(string) {
-        return string.replace(/[-[\]{}()+?*.,\\^$|#]/g, "\\$&");
-    }
-    function Matcher(pattern) {
-        pattern = regexpEscape(normalize(pattern));
-        var rePattern = '^' + pattern.replace(/\\\?/g, '.').replace(/\\\*/g, '[\\s\\S]*') + '$';
-        var regexp = new RegExp(rePattern);
-        function matches(string) {
-            return regexp.test(normalize(string));
-        }
-        return {
-            matches: matches,
-            matchesAny: function (strings) {
-                for (var i = 0, len = strings.length; i < len; i++)
-                    if (matches(strings[i]))
-                        return true;
-                return false;
-            }
-        };
-    }
-    function formatParentName(item) {
-        var parentName = item.fullName.slice(0, item.fullName.length - item.name.length);
-        return parentName.replace(/\./g, ' . ');
-    }
-    function timeFromDate(date) {
-        if (!date)
-            return 'N/A';
-        return formatTime(date.getHours(), date.getMinutes(),
-                          date.getSeconds(), date.getMilliseconds());
-    }
-    function dateFromDate(date) {
-        if (!date)
-            return 'N/A';
-        return padTo(date.getFullYear(), 4) +
-               padTo(date.getMonth() + 1, 2) +
-               padTo(date.getDate(), 2);
-    }
-    function dateTimeFromDate(date) {
-        if (!date)
-            return 'N/A';
-        return dateFromDate(date) + ' ' + timeFromDate(date);
-    }
-    function formatTime(hours, minutes, seconds, milliseconds) {
-        return padTo(hours, 2) + ':' +
-               padTo(minutes, 2) + ':' +
-               padTo(seconds, 2) + '.' +
-               padTo(milliseconds, 3);
-    }
-    function formatElapsed(elapsed) {
-        var millis = elapsed;
-        var hours = Math.floor(millis / (60 * 60 * 1000));
-        millis -= hours * 60 * 60 * 1000;
-        var minutes = Math.floor(millis / (60 * 1000));
-        millis -= minutes * 60 * 1000;
-        var seconds = Math.floor(millis / 1000);
-        millis -= seconds * 1000;
-        return formatTime(hours, minutes, seconds, millis);
-    }
-    function padTo(number, len) {
-        var numString = number + "";
-        while (numString.length < len) numString = "0" + numString;
-        return numString;
-    }
-    function timestamp(millis) {
-        // used also by tools that do not set window.output.baseMillis
-        var base = window.output ? window.output.baseMillis : 0;
-        return new Date(base + millis);
-    }
-    function createGeneratedAgoString(generatedMillis) {
-        generatedMillis = timestamp(generatedMillis);
-        function timeString(time, shortUnit) {
-            var unit = {y: 'year', d: 'day', h: 'hour', m: 'minute',
-                        s: 'second'}[shortUnit];
-            var end = time == 1 ? ' ' : 's ';
-            return time + ' ' + unit + end;
-        }
-        function compensateLeapYears(days, years) {
-            // Not a perfect algorithm but ought to be enough
-            return days - Math.floor(years / 4);
-        }
-        var generated = Math.round(generatedMillis / 1000);
-        var current = Math.round(new Date().getTime() / 1000);
-        var elapsed = current - generated;
-        var prefix = '';
-        if (elapsed < 0) {
-            prefix = '- ';
-            elapsed = Math.abs(elapsed);
-        }
-        var secs  = elapsed % 60;
-        var mins  = Math.floor(elapsed / 60) % 60;
-        var hours = Math.floor(elapsed / (60*60)) % 24;
-        var days  = Math.floor(elapsed / (60*60*24)) % 365;
-        var years = Math.floor(elapsed / (60*60*24*365));
-        if (years) {
-            days = compensateLeapYears(days, years);
-            return prefix + timeString(years, 'y') + timeString(days, 'd');
-        } else if (days) {
-            return prefix + timeString(days, 'd') + timeString(hours, 'h');
-        } else if (hours) {
-            return prefix + timeString(hours, 'h') + timeString(mins, 'm');
-        } else if (mins) {
-            return prefix + timeString(mins, 'm') + timeString(secs, 's');
-        } else {
-            return prefix + timeString(secs, 's');
-        }
-    }
-    function parseQueryString(query) {
-        var result = {};
-        if (!query)
-            return result;
-        var params = query.split('&');
-        var parts;
-        function decode(item) {
-            return decodeURIComponent(item.replace('+', ' '));
-        }
-        for (var i = 0, len = params.length; i < len; i++) {
-            parts = params[i].split('=');
-            result[decode(parts.shift())] = decode(parts.join('='));
-        }
-        return result;
-    }
-    return {
-        map: map,
-        filter: filter,
-        all: all,
-        any: any,
-        contains: contains,
-        last: last,
-        escape: escape,
-        unescape: unescape,
-        normalize: normalize,
-        regexpEscape: regexpEscape,
-        Matcher: Matcher,
-        formatParentName: formatParentName,
-        timeFromDate: timeFromDate,
-        dateFromDate: dateFromDate,
-        dateTimeFromDate: dateTimeFromDate,
-        formatElapsed: formatElapsed,
-        timestamp: timestamp,
-        createGeneratedAgoString: createGeneratedAgoString,
-        parseQueryString: parseQueryString
-    };
-}();
-</script>
-<script type="text/javascript">
-window.testdata = function () {
-    var elementsById = {};
-    var idCounter = 0;
-    var _statistics = null;
-    var LEVELS = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'FAIL', 'ERROR'];
-    var STATUSES = ['FAIL', 'PASS', 'NOT_RUN'];
-    var KEYWORDS = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'VAR'];
-    function addElement(elem) {
-        if (!elem.id)
-            elem.id = uniqueId();
-        elementsById[elem.id] = elem;
-        return elem;
-    }
-    function uniqueId() {
-        idCounter++;
-        return 'element-id-' + idCounter;
-    }
-    function times(stats) {
-        var startMillis = stats[1];
-        var elapsed = stats[2];
-        if (startMillis === null)
-            return [null, null, elapsed];
-        return [util.timestamp(startMillis),
-                util.timestamp(startMillis + elapsed),
-                elapsed];
-    }
-    function message(element, strings) {
-        return addElement(model.Message(LEVELS[element[1]],
-                                        util.timestamp(element[0]),
-                                        strings.get(element[2]),
-                                        strings.get(element[3])));
-    }
-    function parseStatus(stats) {
-        return STATUSES[stats[0]];
-    }
-    function childCreator(parent, childType) {
-        return function (elem, strings, index) {
-            return addElement(childType(parent, elem, strings, index));
-        };
-    }
-    function createKeyword(parent, element, strings, index) {
-        var kw = model.Keyword({
-            parent: parent,
-            type: KEYWORDS[element[0]],
-            id: 'k' + (index + 1),
-            name: strings.get(element[1]),
-            timeout: strings.get(element[2]),
-            args: strings.get(element[4]),
-            doc: function () {
-                var doc = strings.get(element[3]);
-                this.doc = function () { return doc; };
-                return doc;
-            },
-            status: parseStatus(element[5], strings),
-            times: model.Times(times(element[5])),
-            isChildrenLoaded: typeof(element[6]) !== 'number'
-        });
-        lazyPopulateKeywordsFromFile(kw, element[6], strings);
-        kw.populateMessages(Populator(element[7], strings, message));
-        return kw;
-    }
-    function lazyPopulateKeywordsFromFile(parent, keywordsOrIndex, strings) {
-        if (parent.isChildrenLoaded) {
-            var keywords = keywordsOrIndex;
-            parent.populateKeywords(Populator(keywords, strings, childCreator(parent, createKeyword)));
-        } else {
-            var index = keywordsOrIndex;
-            parent.childFileName = window.settings['splitLogBase'] + '-' + index + '.js';
-            parent.populateKeywords(SplitLogPopulator(keywordsOrIndex, childCreator(parent, createKeyword)));
-        }
-    }
-    function tags(taglist, strings) {
-        return util.map(taglist, strings.get);
-    }
-    function createTest(parent, element, strings, index) {
-        var statusElement = element[5];
-        var test = model.Test({
-            parent: parent,
-            id: 't' + (index + 1),
-            name: strings.get(element[0]),
-            doc: function () {
-                var doc = strings.get(element[3]);
-                this.doc = function () { return doc; };
-                return doc;
-            },
-            timeout: strings.get(element[1]),
-            isCritical: element[2],
-            status: parseStatus(statusElement),
-            message: function () {
-                var msg = createMessage(statusElement, strings);
-                this.message = function () { return msg; };
-                return msg;
-            },
-            times: model.Times(times(statusElement)),
-            tags: tags(element[4], strings),
-            isChildrenLoaded: typeof(element[6]) !== 'number'
-        });
-        lazyPopulateKeywordsFromFile(test, element[6], strings);
-        return test;
-    }
-    function createMessage(statusElement, strings) {
-        return statusElement.length == 4 ? strings.get(statusElement[3]) : '';
-    }
-    function createSuite(parent, element, strings, index) {
-        var statusElement = element[5];
-        var suite = model.Suite({
-            parent: parent,
-            id: 's' + ((index || 0) + 1),
-            name: strings.get(element[0]),
-            source: strings.get(element[1]),
-            relativeSource: strings.get(element[2]),
-            doc: function () {
-                var doc = strings.get(element[3]);
-                this.doc = function () { return doc; };
-                return doc;
-            },
-            status: parseStatus(statusElement),
-            message: function () {
-                var msg = createMessage(statusElement, strings);
-                this.message = function () { return msg; };
-                return msg;
-            },
-            times: model.Times(times(statusElement)),
-            statistics: suiteStats(util.last(element)),
-            metadata: parseMetadata(element[4], strings)
-        });
-        suite.populateKeywords(Populator(element[8], strings, childCreator(suite, createKeyword)));
-        suite.populateTests(Populator(element[7], strings, childCreator(suite, createTest)));
-        suite.populateSuites(Populator(element[6], strings, childCreator(suite, createSuite)));
-        return suite;
-    }
-    function parseMetadata(data, strings) {
-        var metadata = [];
-        for (var i=0; i<data.length; i+=2) {
-            metadata.push([strings.get(data[i]), strings.get(data[i+1])]);
-        }
-        return metadata;
-    }
-    function suiteStats(stats) {
-        return {
-            total: stats[0],
-            totalPassed: stats[1],
-            totalFailed: stats[0] - stats[1],
-            critical: stats[2],
-            criticalPassed: stats[3],
-            criticalFailed: stats[2] - stats[3]
-        };
-    }
-    function Populator(items, strings, creator) {
-        return {
-            numberOfItems: function () {
-                return items.length;
-            },
-            creator: function (index) {
-                return creator(items[index], strings, index);
-            }
-        };
-    }
-    function SplitLogPopulator(structureIndex, creator) {
-        return {
-            numberOfItems: function () {
-                return window['keywords'+structureIndex].length;
-            },
-            creator: function (index) {
-                return creator(window['keywords'+structureIndex][index],
-                               StringStore(window['strings'+structureIndex]),
-                               index);
-            }
-        };
-    }
-    function suite() {
-        var elem = window.output.suite;
-        if (elementsById[elem.id])
-            return elem;
-        var root = addElement(createSuite(null, elem, StringStore(window.output.strings)));
-        window.output.suite = root;
-        return root;
-    }
-    function findLoaded(id) {
-        return elementsById[id];
-    }
-    function ensureLoaded(id, callback) {
-        var ids = id.split('-');
-        var root = suite();
-        ids.shift();
-        loadItems(ids, root, [root.id], callback);
-    }
-    function loadItems(ids, current, result, callback) {
-        if (!ids.length) {
-            callback(result);
-            return;
-        }
-        current.callWhenChildrenReady(function () {
-            var id = ids.shift();
-            var type = id[0];
-            var index = parseInt(id.substring(1)) - 1;
-            var item = selectFrom(current, type, index);
-            result.push(item.id);
-            loadItems(ids, item, result, callback);
-        });
-    }
-    function selectFrom(element, type, index) {
-        if (type === 'k') {
-            return element.keywords()[index];
-        } else if (type === 't') {
-            return element.tests()[index];
-        } else {
-            return element.suites()[index];
-        }
-    }
-    function errorIterator() {
-        return {
-            next: function () {
-                return message(window.output.errors.shift(),
-                               StringStore(window.output.strings));
-            },
-            hasNext: function () {
-                return window.output.errors.length > 0;
-            }
-        };
-    }
-    function statistics() {
-        if (!_statistics) {
-            var statData = window.output.stats;
-            _statistics = stats.Statistics(statData[0], statData[1], statData[2]);
-        }
-        return _statistics;
-    }
-    function StringStore(strings) {
-        function getText(id) {
-            var text = strings[id];
-            if (!text)
-                return '';
-            if (text[0] == '*')
-                return text.substring(1);
-            var extracted = extract(text);
-            strings[id] = '*' + extracted;
-            return extracted;
-        }
-        function extract(text) {
-            var decoded = JXG.Util.Base64.decodeAsArray(text);
-            var extracted = (new JXG.Util.Unzip(decoded)).unzip()[0][0];
-            return JXG.Util.UTF8.decode(extracted);
-        }
-        function get(id) {
-            if (id === null) return null;
-            return getText(id);
-        }
-        return {get: get};
-    }
-    return {
-        suite: suite,
-        errorIterator: errorIterator,
-        findLoaded: findLoaded,
-        ensureLoaded: ensureLoaded,
-        statistics: statistics,
-        StringStore: StringStore,  // exposed for tests
-        LEVELS: LEVELS
-    };
-}();
-</script>
-<script type="text/javascript">
-function removeJavaScriptDisabledWarning() {
-    // Not using jQuery here for maximum speed
-    document.getElementById('javascript-disabled').style.display = 'none';
-}
-function addJavaScriptDisabledWarning(error) {
-    if (window.console)
-        console.error('Opening failed: ' + error.name + ': ' + error.message);
-    document.getElementById('javascript-disabled').style.display = 'block';
-}
-function initLayout(suiteName, type) {
-    parseTemplates();
-    setTitle(suiteName, type);
-    addHeader();
-    addReportOrLogLink(type);
-}
-function parseTemplates() {
-    $('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
-        $.template(elem.id, elem.text);
-    });
-}
-function setTitle(suiteName, type) {
-    var givenTitle = window.settings.title;
-    var title = givenTitle ? givenTitle : suiteName + " Test " + type;
-    document.title = util.unescape(title);
-}
-function addHeader() {
-    $.tmpl('<h1>${title}</h1>' +
-           '<div id="generated">' +
-             '<span>Generated<br>${generated}</span><br>' +
-             '<span id="generated-ago">${ago} ago</span>' +
-           '</div>' +
-           '<div id="top-right-header">' +
-             '<div id="report-or-log-link"><a href="#"></a></div>' +
-           '</div>', {
-        generated: window.output.generatedTimestamp,
-        ago: util.createGeneratedAgoString(window.output.generatedMillis),
-        title: document.title
-    }).appendTo($('#header'));
-}
-function addReportOrLogLink(myType) {
-    var url;
-    var text;
-    var container = $('#report-or-log-link');
-    if (myType == 'Report') {
-        url = window.settings.logURL;
-        text = 'LOG';
-    } else {
-        url = window.settings.reportURL;
-        text = 'REPORT';
-    }
-    if (url) {
-        container.find('a').attr('href', url);
-        container.find('a').text(text);
-    } else {
-        container.remove();
-    }
-}
-function addStatistics() {
-    var statHeaders =
-        '<th class="stats-col-stat">Total</th>' +
-        '<th class="stats-col-stat">Pass</th>' +
-        '<th class="stats-col-stat">Fail</th>' +
-        '<th class="stats-col-elapsed">Elapsed</th>' +
-        '<th class="stats-col-graph">Pass / Fail</th>';
-    var statTable =
-        '<h2>Test Statistics</h2>' +
-        '<table class="statistics" id="total-stats"><thead><tr>' +
-        '<th class="stats-col-name">Total Statistics</th>' + statHeaders +
-        '</tr></thead></table>' +
-        '<table class="statistics" id="tag-stats"><thead><tr>' +
-        '<th class="stats-col-name">Statistics by Tag</th>' + statHeaders +
-        '</tr></thead></table>' +
-        '<table class="statistics" id="suite-stats"><thead><tr>' +
-        '<th class="stats-col-name">Statistics by Suite</th>' + statHeaders +
-        '</tr></thead></table>';
-    $(statTable).appendTo('#statistics-container');
-    util.map(['total', 'tag', 'suite'], addStatTable);
-    addTooltipsToElapsedTimes();
-    enableStatisticsSorter();
-}
-function addTooltipsToElapsedTimes() {
-    $('.stats-col-elapsed').attr('title',
-        'Total execution time of these test cases. ' +
-        'Excludes suite setups and teardowns.');
-    $('#suite-stats').find('.stats-col-elapsed').attr('title',
-        'Total execution time of this test suite.');
-}
-function enableStatisticsSorter() {
-    $.tablesorter.addParser({
-        id: 'statName',
-        type: 'numeric',
-        is: function(s) {
-            return false;  // do not auto-detect
-        },
-        format: function(string, table, cell, cellIndex) {
-            // Rows have class in format 'row-<index>'.
-            var index = $(cell).parent().attr('class').substring(4);
-            return parseInt(index);
-        }
-    });
-    $(".statistics").tablesorter({
-        sortInitialOrder: 'desc',
-        headers: {0: {sorter:'statName', sortInitialOrder: 'asc'},
-                  5: {sorter: false}}
-    });
-}
-function addStatTable(tableName) {
-    var stats = window.testdata.statistics()[tableName];
-    if (tableName == 'tag' && stats.length == 0) {
-        renderNoTagStatTable();
-    } else {
-        renderStatTable(tableName, stats);
-    }
-}
-function renderNoTagStatTable() {
-    $('<tbody><tr class="row-0">' +
-        '<td class="stats-col-name">No Tags</td>' +
-        '<td class="stats-col-stat"></td>' +
-        '<td class="stats-col-stat"></td>' +
-        '<td class="stats-col-stat"></td>' +
-        '<td class="stats-col-elapsed"></td>' +
-        '<td class="stats-col-graph">' +
-          '<div class="empty-graph"></div>' +
-        '</td>' +
-      '</tr></tbody>').appendTo('#tag-stats');
-}
-function renderStatTable(tableName, stats) {
-    var template = tableName + 'StatisticsRowTemplate';
-    var tbody = $('<tbody></tbody>');
-    for (var i = 0, len = stats.length; i < len; i++) {
-        $.tmpl(template, stats[i], {index: i}).appendTo(tbody);
-    }
-    tbody.appendTo('#' + tableName + '-stats');
-}
-$.template('statColumnsTemplate',
-    '<td class="stats-col-stat">${total}</td>' +
-    '<td class="stats-col-stat">${pass}</td>' +
-    '<td class="stats-col-stat">${fail}</td>' +
-    '<td class="stats-col-elapsed">${elapsed}</td>' +
-    '<td class="stats-col-graph">' +
-      '{{if total}}' +
-      '<div class="graph">' +
-        '<div class="pass-bar" style="width: ${passWidth}%" title="${passPercent}%"></div>' +
-        '<div class="fail-bar" style="width: ${failWidth}%" title="${failPercent}%"></div>' +
-      '</div>' +
-      '{{else}}' +
-      '<div class="empty-graph"></div>' +
-      '{{/if}}' +
-    '</td>'
-);
-$.template('suiteStatusMessageTemplate',
-    '${critical} critical test, ' +
-    '${criticalPassed} passed, ' +
-    '<span class="{{if criticalFailed}}fail{{else}}pass{{/if}}">${criticalFailed} failed</span><br>' +
-    '${total} test total, ' +
-    '${totalPassed} passed, ' +
-    '<span class="{{if totalFailed}}fail{{else}}pass{{/if}}">${totalFailed} failed</span>'
-);
-// For complete cross-browser experience..
-// http://www.quirksmode.org/js/events_order.html
-function stopPropagation(event) {
-    var event = event || window.event;
-    event.cancelBubble = true;
-    if (event.stopPropagation)
-        event.stopPropagation();
-}
-</script>
-<script type="text/javascript">
-window.output = {};
-</script>
-<script type="text/javascript">
-window.sPart0 = [[4,31,0,0,0,[1,35488,9689],[[0,32,0,33,34,[1,35488,7454],[[0,35,0,36,37,[1,35489,0],[],[]],[0,35,0,36,38,[1,35489,1],[],[]],[0,39,0,40,41,[1,35490,1],[],[[35491,2,42]]],[0,43,0,44,45,[1,35491,0],[],[[35491,2,42]]],[0,46,0,47,48,[1,35492,357],[],[[35492,2,49],[35849,2,50]]],[0,51,0,52,53,[1,35849,55],[],[[35904,2,54]]],[0,55,0,56,57,[1,35904,1036],[],[[36940,2,58]]],[0,59,0,60,61,[1,36941,6001],[],[[42942,2,62]]]],[]],[0,63,0,64,65,[1,42943,529],[[0,65,0,66,0,[1,42943,529],[[3,67,0,0,0,[1,42944,528],[[4,68,0,0,0,[1,42944,528],[[0,69,0,0,70,[1,42944,528],[[0,71,0,72,73,[1,42945,506],[[0,74,0,75,76,[1,42946,0],[],[[42946,2,77]]],[0,78,0,40,79,[1,42947,0],[],[[42947,2,80]]],[0,46,0,47,81,[1,42948,366],[],[[42948,2,82],[43313,2,83]]],[0,51,0,52,84,[1,43314,20],[],[[43334,2,85]]],[0,86,0,56,87,[1,43334,1],[],[[43335,2,88],[43335,2,89]]],[0,90,0,91,0,[1,43335,115],[],[]],[0,74,0,75,92,[1,43450,0],[],[[43450,2,88]]]],[[43451,2,93]]],[0,94,0,95,96,[1,43451,0],[],[]],[0,97,0,98,99,[1,43452,18],[],[[43470,2,100],[43470,2,101]]],[0,74,0,75,102,[1,43470,1],[],[[43471,2,103]]],[0,104,0,105,106,[1,43471,0],[],[[43471,2,107]]]],[]]],[]]],[]]],[]]],[[43472,2,108],[43472,2,109]]],[0,110,0,111,112,[1,43472,1],[],[]],[0,63,0,64,113,[1,43473,15],[[0,114,0,115,116,[1,43474,14],[[0,117,0,118,34,[1,43474,14],[[3,67,0,0,0,[1,43475,13],[[4,68,0,0,0,[1,43475,13],[[0,119,0,120,121,[1,43475,8],[[0,97,0,98,122,[1,43476,6],[],[[43482,2,100],[43482,2,101]]],[0,74,0,75,102,[1,43482,1],[],[[43483,2,103]]]],[[43483,2,101]]],[0,74,0,75,102,[1,43483,1],[],[[43484,2,103]]],[0,104,0,105,106,[1,43484,0],[],[[43484,2,107]]],[0,123,0,124,102,[1,43485,0],[],[[43485,2,125]]],[0,126,0,127,102,[1,43485,1],[],[[43486,2,128]]],[0,129,0,130,131,[1,43486,1],[],[[43487,2,132],[43487,2,133]]],[0,134,0,135,136,[1,43487,1],[],[[43487,2,137]]]],[]]],[]]],[]]],[]]],[[43488,2,108],[43488,2,109]]],[0,110,0,111,112,[1,43488,1],[],[]],[0,63,0,64,138,[1,43489,38],[[0,114,0,115,139,[1,43489,38],[[0,140,0,141,0,[1,43490,36],[[3,67,0,0,0,[1,43491,35],[[4,68,0,0,0,[1,43491,35],[[0,119,0,120,121,[1,43491,8],[[0,97,0,98,122,[1,43492,6],[],[[43498,2,100],[43498,2,101]]],[0,74,0,75,102,[1,43498,1],[],[[43499,2,103]]]],[[43499,2,101]]],[0,74,0,75,102,[1,43499,1],[],[[43500,2,103]]],[0,104,0,105,106,[1,43500,1],[],[[43500,2,107]]],[0,123,0,124,102,[1,43501,0],[],[[43501,2,125]]],[0,126,0,127,102,[1,43501,1],[],[[43502,2,128]]],[0,142,0,0,143,[1,43502,24],[[0,129,0,130,144,[1,43503,1],[],[[43504,2,132],[43504,2,133]]],[3,145,0,0,0,[1,43504,22],[[4,146,0,0,0,[1,43504,3],[[0,147,0,148,149,[1,43505,0],[],[[43505,2,150]]],[0,151,0,152,153,[1,43505,1],[],[[43506,2,154]]],[0,104,0,105,155,[1,43506,0],[],[[43506,2,156]]]],[]],[4,157,0,0,0,[1,43507,2],[[0,147,0,148,149,[1,43507,0],[],[[43507,2,158]]],[0,151,0,152,153,[1,43508,0],[],[[43508,2,154]]],[0,104,0,105,155,[1,43508,1],[],[[43509,2,156]]]],[]],[4,159,0,0,0,[1,43509,2],[[0,147,0,148,149,[1,43509,0],[],[[43510,2,160]]],[0,151,0,152,153,[1,43510,0],[],[[43510,2,154]]],[0,104,0,105,155,[1,43510,1],[],[[43511,2,156]]]],[]],[4,161,0,0,0,[1,43511,2],[[0,147,0,148,149,[1,43511,1],[],[[43512,2,162]]],[0,151,0,152,153,[1,43512,0],[],[[43513,2,154]]],[0,104,0,105,155,[1,43513,0],[],[[43513,2,156]]]],[]],[4,163,0,0,0,[1,43513,2],[[0,147,0,148,149,[1,43514,0],[],[[43514,2,164]]],[0,151,0,152,153,[1,43514,1],[],[[43515,2,154]]],[0,104,0,105,155,[1,43515,0],[],[[43515,2,156]]]],[]],[4,165,0,0,0,[1,43515,2],[[0,147,0,148,149,[1,43516,0],[],[[43516,2,166]]],[0,151,0,152,153,[1,43516,1],[],[[43517,2,154]]],[0,104,0,105,155,[1,43517,0],[],[[43517,2,156]]]],[]],[4,167,0,0,0,[1,43518,2],[[0,147,0,148,149,[1,43518,0],[],[[43518,2,168]]],[0,151,0,152,153,[1,43519,0],[],[[43519,2,154]]],[0,104,0,105,155,[1,43519,1],[],[[43519,2,156]]]],[]],[4,169,0,0,0,[1,43520,2],[[0,147,0,148,149,[1,43520,0],[],[[43520,2,170]]],[0,151,0,152,153,[1,43521,0],[],[[43521,2,154]]],[0,104,0,105,155,[1,43521,1],[],[[43522,2,156]]]],[]],[4,171,0,0,0,[1,43522,2],[[0,147,0,148,149,[1,43522,0],[],[[43523,2,172]]],[0,151,0,152,153,[1,43523,0],[],[[43523,2,154]]],[0,104,0,105,155,[1,43523,1],[],[[43524,2,156]]]],[]],[4,173,0,0,0,[1,43524,2],[[0,147,0,148,149,[1,43524,1],[],[[43525,2,174]]],[0,151,0,152,153,[1,43525,0],[],[[43525,2,154]]],[0,104,0,105,155,[1,43525,1],[],[[43526,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[43527,2,108],[43527,2,109]]],[0,110,0,111,112,[1,43527,0],[],[]],[0,63,0,64,175,[1,43528,37],[[0,114,0,115,176,[1,43528,37],[[0,177,0,178,179,[1,43529,36],[[3,67,0,0,0,[1,43529,36],[[4,68,0,0,0,[1,43529,36],[[0,119,0,120,121,[1,43530,7],[[0,97,0,98,122,[1,43530,6],[],[[43536,2,100],[43536,2,101]]],[0,74,0,75,102,[1,43537,0],[],[[43537,2,103]]]],[[43537,2,101]]],[0,74,0,75,102,[1,43538,0],[],[[43538,2,103]]],[0,104,0,105,106,[1,43538,1],[],[[43539,2,107]]],[0,123,0,124,102,[1,43539,0],[],[[43539,2,125]]],[0,126,0,127,102,[1,43540,0],[],[[43540,2,128]]],[0,180,0,0,181,[1,43541,23],[[0,129,0,130,144,[1,43542,0],[],[[43542,2,132],[43542,2,133]]],[3,145,0,0,0,[1,43542,22],[[4,146,0,0,0,[1,43542,2],[[0,147,0,148,149,[1,43543,0],[],[[43543,2,150]]],[0,151,0,152,182,[1,43543,1],[],[[43544,2,183]]],[0,104,0,105,184,[1,43544,0],[],[[43544,2,185]]]],[]],[4,157,0,0,0,[1,43545,2],[[0,147,0,148,149,[1,43545,0],[],[[43545,2,158]]],[0,151,0,152,182,[1,43546,0],[],[[43546,2,183]]],[0,104,0,105,184,[1,43546,1],[],[[43546,2,185]]]],[]],[4,159,0,0,0,[1,43547,2],[[0,147,0,148,149,[1,43547,0],[],[[43547,2,160]]],[0,151,0,152,182,[1,43548,0],[],[[43548,2,183]]],[0,104,0,105,184,[1,43548,1],[],[[43549,2,185]]]],[]],[4,161,0,0,0,[1,43549,2],[[0,147,0,148,149,[1,43549,1],[],[[43550,2,162]]],[0,151,0,152,182,[1,43550,0],[],[[43550,2,183]]],[0,104,0,105,184,[1,43551,0],[],[[43551,2,185]]]],[]],[4,163,0,0,0,[1,43551,3],[[0,147,0,148,149,[1,43551,1],[],[[43552,2,164]]],[0,151,0,152,182,[1,43552,1],[],[[43553,2,183]]],[0,104,0,105,184,[1,43553,0],[],[[43553,2,185]]]],[]],[4,165,0,0,0,[1,43554,2],[[0,147,0,148,149,[1,43554,0],[],[[43554,2,166]]],[0,151,0,152,182,[1,43555,0],[],[[43555,2,183]]],[0,104,0,105,184,[1,43555,1],[],[[43555,2,185]]]],[]],[4,167,0,0,0,[1,43556,2],[[0,147,0,148,149,[1,43556,0],[],[[43556,2,168]]],[0,151,0,152,182,[1,43557,0],[],[[43557,2,183]]],[0,104,0,105,184,[1,43557,1],[],[[43558,2,185]]]],[]],[4,169,0,0,0,[1,43558,2],[[0,147,0,148,149,[1,43558,1],[],[[43559,2,170]]],[0,151,0,152,182,[1,43559,0],[],[[43559,2,183]]],[0,104,0,105,184,[1,43559,1],[],[[43560,2,185]]]],[]],[4,171,0,0,0,[1,43560,2],[[0,147,0,148,149,[1,43560,1],[],[[43561,2,172]]],[0,151,0,152,182,[1,43561,0],[],[[43561,2,183]]],[0,104,0,105,184,[1,43562,0],[],[[43562,2,185]]]],[]],[4,173,0,0,0,[1,43562,2],[[0,147,0,148,149,[1,43562,1],[],[[43563,2,174]]],[0,151,0,152,182,[1,43563,0],[],[[43564,2,183]]],[0,104,0,105,184,[1,43564,0],[],[[43564,2,185]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[43565,2,108],[43565,2,109]]],[0,110,0,111,112,[1,43565,1],[],[]],[0,63,0,64,186,[1,43566,11],[[0,114,0,115,187,[1,43566,11],[[0,188,0,189,190,[1,43567,10],[[3,67,0,0,0,[1,43568,9],[[4,68,0,0,0,[1,43568,9],[[0,119,0,120,191,[1,43568,6],[[0,97,0,98,122,[1,43569,4],[],[[43573,2,100],[43573,2,101]]],[0,74,0,75,102,[1,43573,1],[],[[43574,2,192]]]],[[43574,2,101]]],[0,74,0,75,102,[1,43574,1],[],[[43575,2,192]]],[0,193,0,194,195,[1,43575,1],[],[[43576,2,196]]],[0,197,0,194,198,[1,43576,0],[],[[43576,2,199]]],[0,104,0,105,200,[1,43577,0],[],[[43577,2,201]]]],[]]],[]]],[]]],[]]],[[43578,2,108],[43578,2,109]]],[0,110,0,111,112,[1,43578,0],[],[]],[0,63,0,64,202,[1,43579,63],[[0,114,0,115,203,[1,43579,63],[[0,204,0,205,0,[1,43579,63],[[3,67,0,0,0,[1,43580,62],[[4,68,0,0,0,[1,43580,61],[[0,119,0,120,206,[1,43580,9],[[0,97,0,98,122,[1,43581,7],[],[[43588,2,100],[43588,2,101]]],[0,74,0,75,102,[1,43588,1],[],[[43589,2,207]]]],[[43589,2,101]]],[0,126,0,127,102,[1,43589,1],[],[[43590,2,208]]],[0,129,0,130,209,[1,43591,0],[],[[43591,2,210],[43591,2,211]]],[0,74,0,75,102,[1,43591,1],[],[[43592,2,207]]],[0,119,0,120,212,[1,43592,37],[[0,97,0,98,122,[1,43593,34],[],[[43627,2,100],[43627,2,101]]],[0,74,0,75,102,[1,43628,1],[],[[43628,2,213]]]],[[43629,2,101]]],[0,126,0,127,102,[1,43629,2],[],[[43631,2,214]]],[0,129,0,130,215,[1,43632,0],[],[[43632,2,216],[43632,2,217]]],[0,74,0,75,102,[1,43632,1],[],[[43633,2,213]]],[0,119,0,120,218,[1,43633,6],[[0,97,0,98,122,[1,43634,4],[],[[43638,2,100],[43638,2,101]]],[0,74,0,75,102,[1,43638,1],[],[[43639,2,219]]]],[[43639,2,101]]],[0,126,0,127,102,[1,43639,1],[],[[43640,2,220]]],[0,129,0,130,221,[1,43640,1],[],[[43641,2,222],[43641,2,223]]],[0,74,0,75,102,[1,43641,0],[],[[43641,2,219]]]],[]]],[]]],[]]],[]]],[[43642,2,108],[43642,2,109]]],[0,63,0,64,224,[1,43642,108],[[0,114,0,115,225,[1,43643,107],[[0,226,0,227,0,[1,43643,107],[[3,67,0,0,0,[1,43644,105],[[4,68,0,0,0,[1,43644,105],[[0,119,0,120,121,[1,43644,8],[[0,97,0,98,122,[1,43645,6],[],[[43651,2,100],[43651,2,101]]],[0,74,0,75,102,[1,43651,0],[],[[43651,2,103]]]],[[43652,2,101]]],[0,104,0,105,106,[1,43652,1],[],[[43652,2,107]]],[0,126,0,127,102,[1,43653,0],[],[[43653,2,128]]],[0,228,0,0,229,[1,43654,95],[[0,129,0,130,144,[1,43655,0],[],[[43655,2,132],[43655,2,133]]],[0,230,0,231,0,[1,43655,1],[],[[43656,2,232]]],[3,145,0,0,0,[1,43656,27],[[4,146,0,0,0,[1,43656,2],[[0,233,0,148,149,[1,43656,1],[],[[43657,2,234]]],[0,235,0,152,236,[1,43657,0],[],[[43657,2,237]]],[0,238,0,239,240,[1,43657,1],[],[]],[0,74,0,75,241,[1,43658,0],[],[[43658,2,242]]]],[]],[4,157,0,0,0,[1,43659,2],[[0,233,0,148,149,[1,43659,0],[],[[43659,2,243]]],[0,235,0,152,236,[1,43660,0],[],[[43660,2,244]]],[0,238,0,239,240,[1,43660,0],[],[]],[0,74,0,75,241,[1,43661,0],[],[[43661,2,245]]]],[]],[4,159,0,0,0,[1,43661,3],[[0,233,0,148,149,[1,43661,1],[],[[43662,2,246]]],[0,235,0,152,236,[1,43662,0],[],[[43663,2,247]]],[0,238,0,239,240,[1,43663,0],[],[]],[0,74,0,75,241,[1,43663,1],[],[[43664,2,248]]]],[]],[4,161,0,0,0,[1,43664,2],[[0,233,0,148,149,[1,43664,0],[],[[43665,2,249]]],[0,235,0,152,236,[1,43665,0],[],[[43665,2,250]]],[0,238,0,239,240,[1,43665,1],[],[]],[0,74,0,75,241,[1,43666,0],[],[[43666,2,251]]]],[]],[4,163,0,0,0,[1,43666,3],[[0,233,0,148,149,[1,43667,0],[],[[43667,2,252]]],[0,235,0,152,236,[1,43667,1],[],[[43668,2,253]]],[0,238,0,239,240,[1,43668,0],[],[]],[0,74,0,75,241,[1,43669,0],[],[[43669,2,254]]]],[]],[4,165,0,0,0,[1,43669,3],[[0,233,0,148,149,[1,43669,1],[],[[43670,2,255]]],[0,235,0,152,236,[1,43670,1],[],[[43671,2,256]]],[0,238,0,239,240,[1,43671,0],[],[]],[0,74,0,75,241,[1,43671,1],[],[[43672,2,257]]]],[]],[4,167,0,0,0,[1,43672,3],[[0,233,0,148,149,[1,43672,1],[],[[43673,2,258]]],[0,235,0,152,236,[1,43673,0],[],[[43673,2,259]]],[0,238,0,239,240,[1,43674,0],[],[]],[0,74,0,75,241,[1,43674,0],[],[[43674,2,260]]]],[]],[4,169,0,0,0,[1,43675,2],[[0,233,0,148,149,[1,43675,0],[],[[43675,2,261]]],[0,235,0,152,236,[1,43676,0],[],[[43676,2,262]]],[0,238,0,239,240,[1,43676,1],[],[]],[0,74,0,75,241,[1,43677,0],[],[[43677,2,263]]]],[]],[4,171,0,0,0,[1,43677,3],[[0,233,0,148,149,[1,43677,1],[],[[43678,2,264]]],[0,235,0,152,236,[1,43678,0],[],[[43679,2,265]]],[0,238,0,239,240,[1,43679,0],[],[]],[0,74,0,75,241,[1,43679,1],[],[[43680,2,266]]]],[]],[4,173,0,0,0,[1,43680,2],[[0,233,0,148,149,[1,43680,1],[],[[43681,2,267]]],[0,235,0,152,236,[1,43681,0],[],[[43681,2,268]]],[0,238,0,239,240,[1,43681,1],[],[]],[0,74,0,75,241,[1,43682,0],[],[[43682,2,269]]]],[]]],[]],[0,129,0,130,241,[1,43683,0],[],[[43683,2,132],[43683,2,133]]],[3,270,0,0,0,[1,43683,66],[[4,271,0,0,0,[1,43683,7],[[0,119,0,120,272,[1,43684,6],[[0,97,0,98,122,[1,43685,4],[],[[43688,2,100],[43689,2,101]]],[0,74,0,75,102,[1,43689,0],[],[[43689,2,273]]]],[[43690,2,101]]],[0,74,0,75,102,[1,43690,0],[],[[43690,2,273]]]],[]],[4,274,0,0,0,[1,43690,7],[[0,119,0,120,272,[1,43691,5],[[0,97,0,98,122,[1,43692,3],[],[[43695,2,100],[43695,2,101]]],[0,74,0,75,102,[1,43695,1],[],[[43696,2,275]]]],[[43696,2,101]]],[0,74,0,75,102,[1,43696,1],[],[[43697,2,275]]]],[]],[4,276,0,0,0,[1,43697,6],[[0,119,0,120,272,[1,43697,5],[[0,97,0,98,122,[1,43698,3],[],[[43701,2,100],[43702,2,101]]],[0,74,0,75,102,[1,43702,0],[],[[43702,2,277]]]],[[43703,2,101]]],[0,74,0,75,102,[1,43703,0],[],[[43703,2,277]]]],[]],[4,278,0,0,0,[1,43703,7],[[0,119,0,120,272,[1,43703,6],[[0,97,0,98,122,[1,43704,4],[],[[43708,2,100],[43708,2,101]]],[0,74,0,75,102,[1,43708,0],[],[[43708,2,279]]]],[[43709,2,101]]],[0,74,0,75,102,[1,43709,0],[],[[43709,2,279]]]],[]],[4,280,0,0,0,[1,43710,7],[[0,119,0,120,272,[1,43710,6],[[0,97,0,98,122,[1,43711,4],[],[[43715,2,100],[43715,2,101]]],[0,74,0,75,102,[1,43716,0],[],[[43716,2,281]]]],[[43716,2,101]]],[0,74,0,75,102,[1,43717,0],[],[[43717,2,281]]]],[]],[4,282,0,0,0,[1,43717,6],[[0,119,0,120,272,[1,43717,6],[[0,97,0,98,122,[1,43718,4],[],[[43722,2,100],[43722,2,101]]],[0,74,0,75,102,[1,43722,0],[],[[43722,2,283]]]],[[43723,2,101]]],[0,74,0,75,102,[1,43723,0],[],[[43723,2,283]]]],[]],[4,284,0,0,0,[1,43724,5],[[0,119,0,120,272,[1,43724,5],[[0,97,0,98,122,[1,43725,3],[],[[43728,2,100],[43728,2,101]]],[0,74,0,75,102,[1,43728,0],[],[[43728,2,285]]]],[[43729,2,101]]],[0,74,0,75,102,[1,43729,0],[],[[43729,2,285]]]],[]],[4,286,0,0,0,[1,43730,6],[[0,119,0,120,272,[1,43730,5],[[0,97,0,98,122,[1,43731,3],[],[[43734,2,100],[43734,2,101]]],[0,74,0,75,102,[1,43735,0],[],[[43735,2,287]]]],[[43735,2,101]]],[0,74,0,75,102,[1,43736,0],[],[[43736,2,287]]]],[]],[4,288,0,0,0,[1,43736,7],[[0,119,0,120,272,[1,43736,6],[[0,97,0,98,122,[1,43737,4],[],[[43741,2,100],[43741,2,101]]],[0,74,0,75,102,[1,43741,1],[],[[43742,2,289]]]],[[43742,2,101]]],[0,74,0,75,102,[1,43742,1],[],[[43743,2,289]]]],[]],[4,290,0,0,0,[1,43743,6],[[0,119,0,120,272,[1,43743,5],[[0,97,0,98,122,[1,43744,3],[],[[43747,2,100],[43747,2,101]]],[0,74,0,75,102,[1,43748,0],[],[[43748,2,291]]]],[[43748,2,101]]],[0,74,0,75,102,[1,43749,0],[],[[43749,2,291]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[43750,2,108],[43750,2,109]]],[0,63,0,64,292,[1,43750,570],[[0,114,0,115,293,[1,43751,569],[[0,294,0,295,0,[1,43751,569],[[0,296,0,297,45,[1,43752,0],[],[]],[0,298,0,299,0,[1,43752,1],[],[]],[0,51,0,52,300,[1,43753,4],[],[[43757,2,300]]],[0,86,0,56,57,[1,43757,185],[],[[43941,2,301],[43942,2,302]]],[0,74,0,75,92,[1,43942,1],[],[[43943,2,301]]],[0,51,0,52,303,[1,43943,3],[],[[43946,2,303]]],[0,86,0,56,57,[1,43946,23],[],[[43969,2,304],[43969,2,305]]],[0,74,0,75,92,[1,43969,1],[],[[43969,2,304]]],[0,51,0,52,306,[1,43970,6],[],[[43975,2,306]]],[0,86,0,56,57,[1,43976,312],[],[[44288,2,307],[44289,2,308]]],[0,74,0,75,92,[1,44289,0],[],[[44289,2,307]]],[0,51,0,52,309,[1,44289,5],[],[[44293,2,309]]],[0,86,0,56,57,[1,44294,25],[],[[44319,2,310],[44319,2,311]]],[0,74,0,75,92,[1,44319,1],[],[[44320,2,310]]]],[]]],[]]],[[44320,2,108],[44320,2,109]]],[0,312,0,313,0,[1,44321,806],[[0,35,0,36,314,[1,44321,1],[],[]],[0,296,0,297,45,[1,44322,0],[],[]],[0,298,0,299,0,[1,44322,1],[],[]],[0,51,0,52,315,[1,44323,3],[],[[44325,2,315]]],[0,55,0,56,87,[1,44326,686],[],[[45012,2,316]]],[0,90,0,91,0,[1,45012,115],[],[]]],[]],[0,63,0,64,317,[1,45127,37],[[0,114,0,115,318,[1,45128,36],[[0,319,0,320,0,[1,45128,36],[[3,67,0,0,0,[1,45129,35],[[4,68,0,0,0,[1,45129,35],[[0,119,0,120,121,[1,45129,8],[[0,97,0,98,122,[1,45130,5],[],[[45135,2,100],[45136,2,101]]],[0,74,0,75,102,[1,45136,0],[],[[45136,2,321]]]],[[45137,2,101]]],[0,74,0,75,102,[1,45137,0],[],[[45137,2,321]]],[0,104,0,105,106,[1,45138,0],[],[[45138,2,107]]],[0,123,0,124,102,[1,45138,1],[],[[45139,2,322]]],[0,126,0,127,102,[1,45139,0],[],[[45140,2,323]]],[0,142,0,0,324,[1,45140,24],[[0,129,0,130,144,[1,45141,1],[],[[45141,2,132],[45142,2,133]]],[3,145,0,0,0,[1,45142,22],[[4,146,0,0,0,[1,45142,2],[[0,147,0,148,149,[1,45142,1],[],[[45143,2,325]]],[0,151,0,152,153,[1,45143,0],[],[[45143,2,326]]],[0,104,0,105,155,[1,45144,0],[],[[45144,2,156]]]],[]],[4,157,0,0,0,[1,45144,2],[[0,147,0,148,149,[1,45144,1],[],[[45145,2,327]]],[0,151,0,152,153,[1,45145,0],[],[[45145,2,326]]],[0,104,0,105,155,[1,45146,0],[],[[45146,2,156]]]],[]],[4,159,0,0,0,[1,45146,2],[[0,147,0,148,149,[1,45146,1],[],[[45147,2,328]]],[0,151,0,152,153,[1,45147,1],[],[[45148,2,326]]],[0,104,0,105,155,[1,45148,0],[],[[45148,2,156]]]],[]],[4,161,0,0,0,[1,45148,3],[[0,147,0,148,149,[1,45149,0],[],[[45149,2,329]]],[0,151,0,152,153,[1,45149,1],[],[[45150,2,326]]],[0,104,0,105,155,[1,45150,0],[],[[45150,2,156]]]],[]],[4,163,0,0,0,[1,45151,2],[[0,147,0,148,149,[1,45151,0],[],[[45151,2,330]]],[0,151,0,152,153,[1,45152,0],[],[[45152,2,326]]],[0,104,0,105,155,[1,45152,1],[],[[45153,2,156]]]],[]],[4,165,0,0,0,[1,45153,2],[[0,147,0,148,149,[1,45153,0],[],[[45154,2,331]]],[0,151,0,152,153,[1,45154,0],[],[[45154,2,326]]],[0,104,0,105,155,[1,45154,1],[],[[45155,2,156]]]],[]],[4,167,0,0,0,[1,45155,2],[[0,147,0,148,149,[1,45155,1],[],[[45156,2,332]]],[0,151,0,152,153,[1,45156,0],[],[[45156,2,326]]],[0,104,0,105,155,[1,45157,0],[],[[45157,2,156]]]],[]],[4,169,0,0,0,[1,45157,2],[[0,147,0,148,149,[1,45157,1],[],[[45158,2,333]]],[0,151,0,152,153,[1,45158,0],[],[[45158,2,326]]],[0,104,0,105,155,[1,45159,0],[],[[45159,2,156]]]],[]],[4,171,0,0,0,[1,45159,2],[[0,147,0,148,149,[1,45159,1],[],[[45160,2,334]]],[0,151,0,152,153,[1,45160,1],[],[[45161,2,326]]],[0,104,0,105,155,[1,45161,0],[],[[45161,2,156]]]],[]],[4,173,0,0,0,[1,45161,2],[[0,147,0,148,149,[1,45162,0],[],[[45162,2,335]]],[0,151,0,152,153,[1,45162,1],[],[[45163,2,326]]],[0,104,0,105,155,[1,45163,0],[],[[45163,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[45164,2,108],[45164,2,109]]],[0,110,0,111,112,[1,45165,0],[],[]],[0,63,0,64,336,[1,45165,11],[[0,114,0,115,337,[1,45166,10],[[0,338,0,339,340,[1,45166,9],[[3,67,0,0,0,[1,45167,8],[[4,68,0,0,0,[1,45167,8],[[0,119,0,120,191,[1,45167,5],[[0,97,0,98,122,[1,45168,3],[],[[45171,2,100],[45171,2,101]]],[0,74,0,75,102,[1,45172,0],[],[[45172,2,341]]]],[[45172,2,101]]],[0,74,0,75,102,[1,45173,0],[],[[45173,2,341]]],[0,193,0,194,195,[1,45173,1],[],[[45174,2,342]]],[0,197,0,194,198,[1,45174,0],[],[[45175,2,343]]],[0,104,0,105,344,[1,45175,0],[],[[45175,2,345]]]],[]]],[]]],[]]],[]]],[[45176,2,108],[45176,2,109]]],[0,110,0,111,112,[1,45176,0],[],[]],[0,346,0,347,34,[1,45177,0],[],[[45177,2,348],[45177,2,349]]]],[]],[4,350,0,0,0,[1,45177,12502],[[0,32,0,351,34,[1,45178,8386],[[0,35,0,36,37,[1,45178,1],[],[]],[0,35,0,36,38,[1,45179,0],[],[]],[0,39,0,40,41,[1,45179,1],[],[[45180,2,352]]],[0,43,0,44,45,[1,45181,0],[],[[45181,2,352]]],[0,46,0,47,48,[1,45181,345],[],[[45182,2,49],[45526,2,353]]],[0,51,0,52,53,[1,45527,72],[],[[45599,2,354]]],[0,55,0,56,57,[1,45599,1963],[],[[47562,2,355]]],[0,59,0,60,61,[1,47562,6002],[],[[53563,2,62]]]],[]],[0,63,0,64,65,[1,53564,572],[[0,65,0,66,0,[1,53565,571],[[3,67,0,0,0,[1,53565,571],[[4,68,0,0,0,[1,53566,570],[[0,69,0,0,70,[1,53566,570],[[0,71,0,72,73,[1,53567,558],[[0,74,0,75,76,[1,53568,0],[],[[53568,2,77]]],[0,78,0,40,79,[1,53568,1],[],[[53569,2,356]]],[0,46,0,47,81,[1,53569,422],[],[[53570,2,82],[53991,2,357]]],[0,51,0,52,84,[1,53991,18],[],[[54009,2,85]]],[0,86,0,56,87,[1,54010,0],[],[[54010,2,88],[54010,2,89]]],[0,90,0,91,0,[1,54011,114],[],[]],[0,74,0,75,92,[1,54125,0],[],[[54125,2,88]]]],[[54126,2,93]]],[0,94,0,95,96,[1,54126,0],[],[]],[0,97,0,98,99,[1,54126,8],[],[[54134,2,100],[54134,2,101]]],[0,74,0,75,102,[1,54134,1],[],[[54134,2,358]]],[0,104,0,105,106,[1,54135,0],[],[[54135,2,107]]]],[]]],[]]],[]]],[]]],[[54136,2,108],[54136,2,109]]],[0,110,0,111,112,[1,54137,0],[],[]],[0,63,0,64,113,[1,54137,16],[[0,114,0,115,116,[1,54138,15],[[0,117,0,118,34,[1,54138,15],[[3,67,0,0,0,[1,54139,14],[[4,68,0,0,0,[1,54139,14],[[0,119,0,120,121,[1,54139,9],[[0,97,0,98,122,[1,54140,7],[],[[54147,2,100],[54147,2,101]]],[0,74,0,75,102,[1,54147,1],[],[[54148,2,358]]]],[[54148,2,101]]],[0,74,0,75,102,[1,54148,1],[],[[54149,2,358]]],[0,104,0,105,106,[1,54149,1],[],[[54149,2,107]]],[0,123,0,124,102,[1,54150,0],[],[[54150,2,359]]],[0,126,0,127,102,[1,54150,1],[],[[54151,2,360]]],[0,129,0,130,131,[1,54151,1],[],[[54152,2,361],[54152,2,362]]],[0,134,0,135,136,[1,54152,1],[],[[54153,2,137]]]],[]]],[]]],[]]],[]]],[[54153,2,108],[54153,2,109]]],[0,110,0,111,112,[1,54154,0],[],[]],[0,63,0,64,138,[1,54154,59],[[0,114,0,115,139,[1,54155,58],[[0,140,0,141,0,[1,54155,57],[[3,67,0,0,0,[1,54156,56],[[4,68,0,0,0,[1,54156,56],[[0,119,0,120,121,[1,54156,7],[[0,97,0,98,122,[1,54157,5],[],[[54162,2,100],[54162,2,101]]],[0,74,0,75,102,[1,54163,0],[],[[54163,2,358]]]],[[54164,2,101]]],[0,74,0,75,102,[1,54164,0],[],[[54164,2,358]]],[0,104,0,105,106,[1,54165,0],[],[[54165,2,107]]],[0,123,0,124,102,[1,54165,1],[],[[54166,2,359]]],[0,126,0,127,102,[1,54166,1],[],[[54167,2,360]]],[0,142,0,0,143,[1,54167,45],[[0,129,0,130,144,[1,54168,0],[],[[54168,2,361],[54168,2,362]]],[3,145,0,0,0,[1,54169,43],[[4,146,0,0,0,[1,54169,2],[[0,147,0,148,149,[1,54169,0],[],[[54169,2,363]]],[0,151,0,152,153,[1,54170,0],[],[[54170,2,154]]],[0,104,0,105,155,[1,54170,1],[],[[54171,2,156]]]],[]],[4,157,0,0,0,[1,54171,2],[[0,147,0,148,149,[1,54171,0],[],[[54172,2,364]]],[0,151,0,152,153,[1,54172,0],[],[[54172,2,154]]],[0,104,0,105,155,[1,54172,1],[],[[54173,2,156]]]],[]],[4,159,0,0,0,[1,54173,2],[[0,147,0,148,149,[1,54173,1],[],[[54174,2,365]]],[0,151,0,152,153,[1,54174,1],[],[[54175,2,154]]],[0,104,0,105,155,[1,54175,0],[],[[54175,2,156]]]],[]],[4,161,0,0,0,[1,54175,3],[[0,147,0,148,149,[1,54176,0],[],[[54176,2,366]]],[0,151,0,152,153,[1,54176,1],[],[[54177,2,154]]],[0,104,0,105,155,[1,54177,0],[],[[54177,2,156]]]],[]],[4,163,0,0,0,[1,54178,2],[[0,147,0,148,149,[1,54178,0],[],[[54178,2,367]]],[0,151,0,152,153,[1,54179,0],[],[[54179,2,154]]],[0,104,0,105,155,[1,54179,1],[],[[54180,2,156]]]],[]],[4,165,0,0,0,[1,54180,2],[[0,147,0,148,149,[1,54180,0],[],[[54181,2,368]]],[0,151,0,152,153,[1,54181,0],[],[[54181,2,154]]],[0,104,0,105,155,[1,54181,1],[],[[54182,2,156]]]],[]],[4,167,0,0,0,[1,54182,2],[[0,147,0,148,149,[1,54182,1],[],[[54183,2,369]]],[0,151,0,152,153,[1,54183,0],[],[[54183,2,154]]],[0,104,0,105,155,[1,54184,0],[],[[54184,2,156]]]],[]],[4,169,0,0,0,[1,54184,2],[[0,147,0,148,149,[1,54184,1],[],[[54185,2,370]]],[0,151,0,152,153,[1,54185,0],[],[[54186,2,154]]],[0,104,0,105,155,[1,54186,0],[],[[54186,2,156]]]],[]],[4,171,0,0,0,[1,54186,2],[[0,147,0,148,149,[1,54187,0],[],[[54187,2,371]]],[0,151,0,152,153,[1,54187,1],[],[[54188,2,154]]],[0,104,0,105,155,[1,54188,0],[],[[54188,2,156]]]],[]],[4,173,0,0,0,[1,54189,2],[[0,147,0,148,149,[1,54189,0],[],[[54189,2,372]]],[0,151,0,152,153,[1,54190,0],[],[[54190,2,154]]],[0,104,0,105,155,[1,54190,1],[],[[54190,2,156]]]],[]],[4,373,0,0,0,[1,54191,2],[[0,147,0,148,149,[1,54191,0],[],[[54191,2,374]]],[0,151,0,152,153,[1,54192,0],[],[[54192,2,154]]],[0,104,0,105,155,[1,54192,1],[],[[54193,2,156]]]],[]],[4,375,0,0,0,[1,54193,2],[[0,147,0,148,149,[1,54193,0],[],[[54194,2,376]]],[0,151,0,152,153,[1,54194,0],[],[[54194,2,154]]],[0,104,0,105,155,[1,54194,1],[],[[54195,2,156]]]],[]],[4,377,0,0,0,[1,54195,2],[[0,147,0,148,149,[1,54195,1],[],[[54196,2,378]]],[0,151,0,152,153,[1,54196,0],[],[[54196,2,154]]],[0,104,0,105,155,[1,54197,0],[],[[54197,2,156]]]],[]],[4,379,0,0,0,[1,54197,2],[[0,147,0,148,149,[1,54197,1],[],[[54198,2,380]]],[0,151,0,152,153,[1,54198,0],[],[[54198,2,154]]],[0,104,0,105,155,[1,54199,0],[],[[54199,2,156]]]],[]],[4,381,0,0,0,[1,54199,2],[[0,147,0,148,149,[1,54199,1],[],[[54200,2,382]]],[0,151,0,152,153,[1,54200,0],[],[[54201,2,154]]],[0,104,0,105,155,[1,54201,0],[],[[54201,2,156]]]],[]],[4,383,0,0,0,[1,54201,2],[[0,147,0,148,149,[1,54202,0],[],[[54202,2,384]]],[0,151,0,152,153,[1,54202,1],[],[[54203,2,154]]],[0,104,0,105,155,[1,54203,0],[],[[54203,2,156]]]],[]],[4,385,0,0,0,[1,54204,2],[[0,147,0,148,149,[1,54204,0],[],[[54204,2,386]]],[0,151,0,152,153,[1,54204,1],[],[[54205,2,154]]],[0,104,0,105,155,[1,54205,0],[],[[54205,2,156]]]],[]],[4,387,0,0,0,[1,54206,2],[[0,147,0,148,149,[1,54206,0],[],[[54206,2,388]]],[0,151,0,152,153,[1,54207,0],[],[[54207,2,154]]],[0,104,0,105,155,[1,54207,1],[],[[54208,2,156]]]],[]],[4,389,0,0,0,[1,54208,2],[[0,147,0,148,149,[1,54208,0],[],[[54209,2,390]]],[0,151,0,152,153,[1,54209,0],[],[[54209,2,154]]],[0,104,0,105,155,[1,54209,1],[],[[54210,2,156]]]],[]],[4,391,0,0,0,[1,54210,2],[[0,147,0,148,149,[1,54210,1],[],[[54211,2,392]]],[0,151,0,152,153,[1,54211,0],[],[[54211,2,154]]],[0,104,0,105,155,[1,54211,1],[],[[54212,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[54213,2,108],[54213,2,109]]],[0,110,0,111,112,[1,54213,0],[],[]],[0,63,0,64,175,[1,54214,58],[[0,114,0,115,176,[1,54214,58],[[0,177,0,178,179,[1,54215,57],[[3,67,0,0,0,[1,54215,57],[[4,68,0,0,0,[1,54216,56],[[0,119,0,120,121,[1,54216,7],[[0,97,0,98,122,[1,54217,5],[],[[54222,2,100],[54222,2,101]]],[0,74,0,75,102,[1,54223,0],[],[[54223,2,358]]]],[[54223,2,101]]],[0,74,0,75,102,[1,54224,0],[],[[54224,2,358]]],[0,104,0,105,106,[1,54224,1],[],[[54225,2,107]]],[0,123,0,124,102,[1,54225,1],[],[[54226,2,359]]],[0,126,0,127,102,[1,54226,0],[],[[54227,2,360]]],[0,180,0,0,181,[1,54227,45],[[0,129,0,130,144,[1,54228,0],[],[[54228,2,361],[54228,2,362]]],[3,145,0,0,0,[1,54228,43],[[4,146,0,0,0,[1,54229,2],[[0,147,0,148,149,[1,54229,0],[],[[54229,2,363]]],[0,151,0,152,182,[1,54230,0],[],[[54230,2,183]]],[0,104,0,105,184,[1,54230,1],[],[[54230,2,185]]]],[]],[4,157,0,0,0,[1,54231,2],[[0,147,0,148,149,[1,54231,0],[],[[54231,2,364]]],[0,151,0,152,182,[1,54232,0],[],[[54232,2,183]]],[0,104,0,105,184,[1,54232,1],[],[[54233,2,185]]]],[]],[4,159,0,0,0,[1,54233,2],[[0,147,0,148,149,[1,54233,1],[],[[54234,2,365]]],[0,151,0,152,182,[1,54234,0],[],[[54234,2,183]]],[0,104,0,105,184,[1,54234,1],[],[[54235,2,185]]]],[]],[4,161,0,0,0,[1,54235,2],[[0,147,0,148,149,[1,54235,1],[],[[54236,2,366]]],[0,151,0,152,182,[1,54236,0],[],[[54236,2,183]]],[0,104,0,105,184,[1,54237,0],[],[[54237,2,185]]]],[]],[4,163,0,0,0,[1,54237,2],[[0,147,0,148,149,[1,54237,1],[],[[54238,2,367]]],[0,151,0,152,182,[1,54238,0],[],[[54239,2,183]]],[0,104,0,105,184,[1,54239,0],[],[[54239,2,185]]]],[]],[4,165,0,0,0,[1,54239,2],[[0,147,0,148,149,[1,54239,1],[],[[54240,2,368]]],[0,151,0,152,182,[1,54240,1],[],[[54241,2,183]]],[0,104,0,105,184,[1,54241,0],[],[[54241,2,185]]]],[]],[4,167,0,0,0,[1,54241,3],[[0,147,0,148,149,[1,54242,0],[],[[54242,2,369]]],[0,151,0,152,182,[1,54242,1],[],[[54243,2,183]]],[0,104,0,105,184,[1,54243,0],[],[[54243,2,185]]]],[]],[4,169,0,0,0,[1,54244,2],[[0,147,0,148,149,[1,54244,0],[],[[54244,2,370]]],[0,151,0,152,182,[1,54245,0],[],[[54245,2,183]]],[0,104,0,105,184,[1,54245,1],[],[[54245,2,185]]]],[]],[4,171,0,0,0,[1,54246,2],[[0,147,0,148,149,[1,54246,0],[],[[54246,2,371]]],[0,151,0,152,182,[1,54247,0],[],[[54247,2,183]]],[0,104,0,105,184,[1,54247,1],[],[[54248,2,185]]]],[]],[4,173,0,0,0,[1,54248,2],[[0,147,0,148,149,[1,54248,0],[],[[54249,2,372]]],[0,151,0,152,182,[1,54249,0],[],[[54249,2,183]]],[0,104,0,105,184,[1,54249,1],[],[[54250,2,185]]]],[]],[4,373,0,0,0,[1,54250,2],[[0,147,0,148,149,[1,54250,1],[],[[54251,2,374]]],[0,151,0,152,182,[1,54251,0],[],[[54252,2,183]]],[0,104,0,105,184,[1,54252,0],[],[[54252,2,185]]]],[]],[4,375,0,0,0,[1,54252,2],[[0,147,0,148,149,[1,54253,0],[],[[54253,2,376]]],[0,151,0,152,182,[1,54253,1],[],[[54254,2,183]]],[0,104,0,105,184,[1,54254,0],[],[[54254,2,185]]]],[]],[4,377,0,0,0,[1,54254,2],[[0,147,0,148,149,[1,54255,0],[],[[54255,2,378]]],[0,151,0,152,182,[1,54255,1],[],[[54256,2,183]]],[0,104,0,105,184,[1,54256,0],[],[[54256,2,185]]]],[]],[4,379,0,0,0,[1,54257,2],[[0,147,0,148,149,[1,54257,0],[],[[54257,2,380]]],[0,151,0,152,182,[1,54258,0],[],[[54258,2,183]]],[0,104,0,105,184,[1,54258,1],[],[[54258,2,185]]]],[]],[4,381,0,0,0,[1,54259,2],[[0,147,0,148,149,[1,54259,0],[],[[54259,2,382]]],[0,151,0,152,182,[1,54260,0],[],[[54260,2,183]]],[0,104,0,105,184,[1,54260,1],[],[[54261,2,185]]]],[]],[4,383,0,0,0,[1,54261,2],[[0,147,0,148,149,[1,54261,0],[],[[54262,2,384]]],[0,151,0,152,182,[1,54262,0],[],[[54262,2,183]]],[0,104,0,105,184,[1,54262,1],[],[[54263,2,185]]]],[]],[4,385,0,0,0,[1,54263,2],[[0,147,0,148,149,[1,54263,1],[],[[54264,2,386]]],[0,151,0,152,182,[1,54264,0],[],[[54264,2,183]]],[0,104,0,105,184,[1,54264,1],[],[[54265,2,185]]]],[]],[4,387,0,0,0,[1,54265,2],[[0,147,0,148,149,[1,54265,1],[],[[54266,2,388]]],[0,151,0,152,182,[1,54266,0],[],[[54266,2,183]]],[0,104,0,105,184,[1,54267,0],[],[[54267,2,185]]]],[]],[4,389,0,0,0,[1,54267,2],[[0,147,0,148,149,[1,54267,1],[],[[54268,2,390]]],[0,151,0,152,182,[1,54268,0],[],[[54268,2,183]]],[0,104,0,105,184,[1,54269,0],[],[[54269,2,185]]]],[]],[4,391,0,0,0,[1,54269,2],[[0,147,0,148,149,[1,54269,1],[],[[54270,2,392]]],[0,151,0,152,182,[1,54270,1],[],[[54271,2,183]]],[0,104,0,105,184,[1,54271,0],[],[[54271,2,185]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[54272,2,108],[54272,2,109]]],[0,110,0,111,112,[1,54272,1],[],[]],[0,63,0,64,186,[1,54273,11],[[0,114,0,115,187,[1,54273,11],[[0,188,0,189,190,[1,54274,10],[[3,67,0,0,0,[1,54275,9],[[4,68,0,0,0,[1,54276,8],[[0,119,0,120,191,[1,54276,5],[[0,97,0,98,122,[1,54277,3],[],[[54280,2,100],[54280,2,101]]],[0,74,0,75,102,[1,54280,1],[],[[54281,2,393]]]],[[54281,2,101]]],[0,74,0,75,102,[1,54281,1],[],[[54282,2,393]]],[0,193,0,194,195,[1,54282,0],[],[[54283,2,394]]],[0,197,0,194,198,[1,54283,0],[],[[54283,2,199]]],[0,104,0,105,200,[1,54284,0],[],[[54284,2,201]]]],[]]],[]]],[]]],[]]],[[54285,2,108],[54285,2,109]]],[0,110,0,111,112,[1,54285,0],[],[]],[0,63,0,64,202,[1,54285,58],[[0,114,0,115,203,[1,54286,57],[[0,204,0,205,0,[1,54286,57],[[3,67,0,0,0,[1,54287,56],[[4,68,0,0,0,[1,54287,56],[[0,119,0,120,206,[1,54287,8],[[0,97,0,98,122,[1,54288,5],[],[[54293,2,100],[54294,2,101]]],[0,74,0,75,102,[1,54294,0],[],[[54294,2,395]]]],[[54295,2,101]]],[0,126,0,127,102,[1,54295,1],[],[[54296,2,396]]],[0,129,0,130,209,[1,54296,1],[],[[54296,2,397],[54297,2,398]]],[0,74,0,75,102,[1,54297,0],[],[[54297,2,395]]],[0,119,0,120,212,[1,54298,31],[[0,97,0,98,122,[1,54299,28],[],[[54326,2,100],[54327,2,101]]],[0,74,0,75,102,[1,54327,1],[],[[54328,2,399]]]],[[54329,2,101]]],[0,126,0,127,102,[1,54329,3],[],[[54333,2,400]]],[0,129,0,130,215,[1,54333,1],[],[[54333,2,401],[54334,2,402]]],[0,74,0,75,102,[1,54334,1],[],[[54334,2,399]]],[0,119,0,120,218,[1,54335,6],[[0,97,0,98,122,[1,54336,4],[],[[54340,2,100],[54340,2,101]]],[0,74,0,75,102,[1,54340,0],[],[[54340,2,219]]]],[[54341,2,101]]],[0,126,0,127,102,[1,54341,0],[],[[54342,2,220]]],[0,129,0,130,221,[1,54342,0],[],[[54342,2,222],[54342,2,223]]],[0,74,0,75,102,[1,54343,0],[],[[54343,2,219]]]],[]]],[]]],[]]],[]]],[[54344,2,108],[54344,2,109]]],[0,63,0,64,224,[1,54344,190],[[0,114,0,115,225,[1,54344,190],[[0,226,0,227,0,[1,54345,189],[[3,67,0,0,0,[1,54345,189],[[4,68,0,0,0,[1,54346,187],[[0,119,0,120,121,[1,54346,7],[[0,97,0,98,122,[1,54347,5],[],[[54352,2,100],[54352,2,101]]],[0,74,0,75,102,[1,54352,1],[],[[54353,2,358]]]],[[54353,2,101]]],[0,104,0,105,106,[1,54353,1],[],[[54354,2,107]]],[0,126,0,127,102,[1,54354,1],[],[[54355,2,360]]],[0,228,0,0,229,[1,54355,178],[[0,129,0,130,144,[1,54356,1],[],[[54356,2,361],[54357,2,362]]],[0,230,0,231,0,[1,54357,0],[],[[54357,2,232]]],[3,145,0,0,0,[1,54357,54],[[4,146,0,0,0,[1,54357,3],[[0,233,0,148,149,[1,54358,0],[],[[54358,2,403]]],[0,235,0,152,236,[1,54358,1],[],[[54359,2,237]]],[0,238,0,239,240,[1,54359,0],[],[]],[0,74,0,75,241,[1,54360,0],[],[[54360,2,242]]]],[]],[4,157,0,0,0,[1,54360,3],[[0,233,0,148,149,[1,54360,1],[],[[54361,2,404]]],[0,235,0,152,236,[1,54361,0],[],[[54361,2,405]]],[0,238,0,239,240,[1,54362,0],[],[]],[0,74,0,75,241,[1,54362,1],[],[[54362,2,406]]]],[]],[4,159,0,0,0,[1,54363,2],[[0,233,0,148,149,[1,54363,0],[],[[54363,2,407]]],[0,235,0,152,236,[1,54364,0],[],[[54364,2,408]]],[0,238,0,239,240,[1,54364,1],[],[]],[0,74,0,75,241,[1,54365,0],[],[[54365,2,409]]]],[]],[4,161,0,0,0,[1,54365,3],[[0,233,0,148,149,[1,54366,0],[],[[54366,2,410]]],[0,235,0,152,236,[1,54366,1],[],[[54367,2,411]]],[0,238,0,239,240,[1,54367,0],[],[]],[0,74,0,75,241,[1,54367,1],[],[[54368,2,412]]]],[]],[4,163,0,0,0,[1,54368,3],[[0,233,0,148,149,[1,54368,1],[],[[54369,2,413]]],[0,235,0,152,236,[1,54369,0],[],[[54369,2,414]]],[0,238,0,239,240,[1,54370,0],[],[]],[0,74,0,75,241,[1,54370,0],[],[[54370,2,415]]]],[]],[4,165,0,0,0,[1,54371,2],[[0,233,0,148,149,[1,54371,0],[],[[54371,2,416]]],[0,235,0,152,236,[1,54372,0],[],[[54372,2,417]]],[0,238,0,239,240,[1,54372,0],[],[]],[0,74,0,75,241,[1,54373,0],[],[[54373,2,418]]]],[]],[4,167,0,0,0,[1,54373,3],[[0,233,0,148,149,[1,54373,1],[],[[54374,2,419]]],[0,235,0,152,236,[1,54374,0],[],[[54375,2,420]]],[0,238,0,239,240,[1,54375,0],[],[]],[0,74,0,75,241,[1,54375,1],[],[[54376,2,421]]]],[]],[4,169,0,0,0,[1,54376,3],[[0,233,0,148,149,[1,54376,1],[],[[54377,2,422]]],[0,235,0,152,236,[1,54377,1],[],[[54378,2,244]]],[0,238,0,239,240,[1,54378,0],[],[]],[0,74,0,75,241,[1,54379,0],[],[[54379,2,423]]]],[]],[4,171,0,0,0,[1,54379,3],[[0,233,0,148,149,[1,54379,1],[],[[54380,2,424]]],[0,235,0,152,236,[1,54380,0],[],[[54380,2,425]]],[0,238,0,239,240,[1,54381,0],[],[]],[0,74,0,75,241,[1,54381,1],[],[[54381,2,426]]]],[]],[4,173,0,0,0,[1,54382,2],[[0,233,0,148,149,[1,54382,0],[],[[54382,2,427]]],[0,235,0,152,236,[1,54383,0],[],[[54383,2,428]]],[0,238,0,239,240,[1,54383,1],[],[]],[0,74,0,75,241,[1,54384,0],[],[[54384,2,429]]]],[]],[4,373,0,0,0,[1,54384,3],[[0,233,0,148,149,[1,54385,0],[],[[54385,2,430]]],[0,235,0,152,236,[1,54385,1],[],[[54386,2,247]]],[0,238,0,239,240,[1,54386,0],[],[]],[0,74,0,75,241,[1,54386,1],[],[[54387,2,431]]]],[]],[4,375,0,0,0,[1,54387,3],[[0,233,0,148,149,[1,54387,1],[],[[54388,2,432]]],[0,235,0,152,236,[1,54388,0],[],[[54388,2,250]]],[0,238,0,239,240,[1,54389,0],[],[]],[0,74,0,75,241,[1,54389,1],[],[[54389,2,433]]]],[]],[4,377,0,0,0,[1,54390,2],[[0,233,0,148,149,[1,54390,0],[],[[54390,2,434]]],[0,235,0,152,236,[1,54391,0],[],[[54391,2,253]]],[0,238,0,239,240,[1,54391,1],[],[]],[0,74,0,75,241,[1,54392,0],[],[[54392,2,435]]]],[]],[4,379,0,0,0,[1,54392,3],[[0,233,0,148,149,[1,54393,0],[],[[54393,2,436]]],[0,235,0,152,236,[1,54393,1],[],[[54394,2,437]]],[0,238,0,239,240,[1,54394,0],[],[]],[0,74,0,75,241,[1,54394,1],[],[[54395,2,438]]]],[]],[4,381,0,0,0,[1,54395,3],[[0,233,0,148,149,[1,54395,1],[],[[54396,2,439]]],[0,235,0,152,236,[1,54396,0],[],[[54396,2,256]]],[0,238,0,239,240,[1,54397,0],[],[]],[0,74,0,75,241,[1,54397,1],[],[[54397,2,440]]]],[]],[4,383,0,0,0,[1,54398,2],[[0,233,0,148,149,[1,54398,0],[],[[54398,2,441]]],[0,235,0,152,236,[1,54399,0],[],[[54399,2,442]]],[0,238,0,239,240,[1,54399,1],[],[]],[0,74,0,75,241,[1,54400,0],[],[[54400,2,443]]]],[]],[4,385,0,0,0,[1,54400,3],[[0,233,0,148,149,[1,54400,1],[],[[54401,2,444]]],[0,235,0,152,236,[1,54401,1],[],[[54402,2,259]]],[0,238,0,239,240,[1,54402,0],[],[]],[0,74,0,75,241,[1,54402,1],[],[[54403,2,445]]]],[]],[4,387,0,0,0,[1,54403,3],[[0,233,0,148,149,[1,54403,1],[],[[54404,2,446]]],[0,235,0,152,236,[1,54404,0],[],[[54404,2,262]]],[0,238,0,239,240,[1,54405,0],[],[]],[0,74,0,75,241,[1,54405,1],[],[[54406,2,447]]]],[]],[4,389,0,0,0,[1,54406,2],[[0,233,0,148,149,[1,54406,0],[],[[54407,2,448]]],[0,235,0,152,236,[1,54407,0],[],[[54407,2,265]]],[0,238,0,239,240,[1,54407,1],[],[]],[0,74,0,75,241,[1,54408,0],[],[[54408,2,449]]]],[]],[4,391,0,0,0,[1,54408,3],[[0,233,0,148,149,[1,54409,0],[],[[54409,2,450]]],[0,235,0,152,236,[1,54409,1],[],[[54410,2,268]]],[0,238,0,239,240,[1,54410,0],[],[]],[0,74,0,75,241,[1,54411,0],[],[[54411,2,451]]]],[]]],[]],[0,129,0,130,241,[1,54411,1],[],[[54412,2,361],[54412,2,362]]],[3,270,0,0,0,[1,54412,121],[[4,271,0,0,0,[1,54412,6],[[0,119,0,120,272,[1,54412,5],[[0,97,0,98,122,[1,54413,3],[],[[54416,2,100],[54416,2,101]]],[0,74,0,75,102,[1,54417,0],[],[[54417,2,452]]]],[[54417,2,101]]],[0,74,0,75,102,[1,54418,0],[],[[54418,2,452]]]],[]],[4,453,0,0,0,[1,54418,6],[[0,119,0,120,272,[1,54418,5],[[0,97,0,98,122,[1,54419,3],[],[[54422,2,100],[54422,2,101]]],[0,74,0,75,102,[1,54422,1],[],[[54423,2,454]]]],[[54423,2,101]]],[0,74,0,75,102,[1,54423,1],[],[[54424,2,454]]]],[]],[4,455,0,0,0,[1,54424,5],[[0,119,0,120,272,[1,54424,5],[[0,97,0,98,122,[1,54425,3],[],[[54427,2,100],[54428,2,101]]],[0,74,0,75,102,[1,54428,0],[],[[54428,2,456]]]],[[54429,2,101]]],[0,74,0,75,102,[1,54429,0],[],[[54429,2,456]]]],[]],[4,457,0,0,0,[1,54429,6],[[0,119,0,120,272,[1,54430,5],[[0,97,0,98,122,[1,54431,3],[],[[54434,2,100],[54434,2,101]]],[0,74,0,75,102,[1,54434,0],[],[[54434,2,458]]]],[[54435,2,101]]],[0,74,0,75,102,[1,54435,0],[],[[54435,2,458]]]],[]],[4,459,0,0,0,[1,54436,6],[[0,119,0,120,272,[1,54436,5],[[0,97,0,98,122,[1,54437,3],[],[[54440,2,100],[54440,2,101]]],[0,74,0,75,102,[1,54440,0],[],[[54440,2,460]]]],[[54441,2,101]]],[0,74,0,75,102,[1,54441,0],[],[[54441,2,460]]]],[]],[4,461,0,0,0,[1,54442,6],[[0,119,0,120,272,[1,54442,5],[[0,97,0,98,122,[1,54443,3],[],[[54446,2,100],[54446,2,101]]],[0,74,0,75,102,[1,54447,0],[],[[54447,2,462]]]],[[54447,2,101]]],[0,74,0,75,102,[1,54448,0],[],[[54448,2,462]]]],[]],[4,463,0,0,0,[1,54448,6],[[0,119,0,120,272,[1,54448,5],[[0,97,0,98,122,[1,54449,3],[],[[54452,2,100],[54452,2,101]]],[0,74,0,75,102,[1,54453,0],[],[[54453,2,464]]]],[[54453,2,101]]],[0,74,0,75,102,[1,54454,0],[],[[54454,2,464]]]],[]],[4,274,0,0,0,[1,54454,7],[[0,119,0,120,272,[1,54454,6],[[0,97,0,98,122,[1,54455,4],[],[[54459,2,100],[54459,2,101]]],[0,74,0,75,102,[1,54459,1],[],[[54460,2,465]]]],[[54460,2,101]]],[0,74,0,75,102,[1,54460,1],[],[[54461,2,465]]]],[]],[4,466,0,0,0,[1,54461,6],[[0,119,0,120,272,[1,54461,5],[[0,97,0,98,122,[1,54462,3],[],[[54465,2,100],[54465,2,101]]],[0,74,0,75,102,[1,54465,1],[],[[54465,2,467]]]],[[54466,2,101]]],[0,74,0,75,102,[1,54466,1],[],[[54466,2,467]]]],[]],[4,468,0,0,0,[1,54467,6],[[0,119,0,120,272,[1,54467,5],[[0,97,0,98,122,[1,54468,3],[],[[54471,2,100],[54471,2,101]]],[0,74,0,75,102,[1,54471,0],[],[[54471,2,469]]]],[[54472,2,101]]],[0,74,0,75,102,[1,54472,0],[],[[54472,2,469]]]],[]],[4,276,0,0,0,[1,54473,5],[[0,119,0,120,272,[1,54473,5],[[0,97,0,98,122,[1,54474,3],[],[[54476,2,100],[54477,2,101]]],[0,74,0,75,102,[1,54477,0],[],[[54477,2,470]]]],[[54478,2,101]]],[0,74,0,75,102,[1,54478,0],[],[[54478,2,470]]]],[]],[4,278,0,0,0,[1,54479,6],[[0,119,0,120,272,[1,54479,5],[[0,97,0,98,122,[1,54480,3],[],[[54483,2,100],[54483,2,101]]],[0,74,0,75,102,[1,54483,1],[],[[54484,2,471]]]],[[54484,2,101]]],[0,74,0,75,102,[1,54484,1],[],[[54485,2,471]]]],[]],[4,280,0,0,0,[1,54485,6],[[0,119,0,120,272,[1,54485,5],[[0,97,0,98,122,[1,54486,3],[],[[54489,2,100],[54489,2,101]]],[0,74,0,75,102,[1,54489,1],[],[[54490,2,472]]]],[[54490,2,101]]],[0,74,0,75,102,[1,54490,1],[],[[54491,2,472]]]],[]],[4,473,0,0,0,[1,54491,6],[[0,119,0,120,272,[1,54491,5],[[0,97,0,98,122,[1,54492,3],[],[[54495,2,100],[54495,2,101]]],[0,74,0,75,102,[1,54495,1],[],[[54496,2,474]]]],[[54496,2,101]]],[0,74,0,75,102,[1,54496,1],[],[[54497,2,474]]]],[]],[4,282,0,0,0,[1,54497,6],[[0,119,0,120,272,[1,54497,5],[[0,97,0,98,122,[1,54498,3],[],[[54501,2,100],[54501,2,101]]],[0,74,0,75,102,[1,54501,1],[],[[54502,2,475]]]],[[54502,2,101]]],[0,74,0,75,102,[1,54502,1],[],[[54503,2,475]]]],[]],[4,476,0,0,0,[1,54503,6],[[0,119,0,120,272,[1,54503,5],[[0,97,0,98,122,[1,54504,3],[],[[54507,2,100],[54507,2,101]]],[0,74,0,75,102,[1,54507,1],[],[[54508,2,477]]]],[[54508,2,101]]],[0,74,0,75,102,[1,54508,1],[],[[54509,2,477]]]],[]],[4,284,0,0,0,[1,54509,6],[[0,119,0,120,272,[1,54509,5],[[0,97,0,98,122,[1,54510,3],[],[[54513,2,100],[54513,2,101]]],[0,74,0,75,102,[1,54513,1],[],[[54513,2,478]]]],[[54514,2,101]]],[0,74,0,75,102,[1,54514,1],[],[[54514,2,478]]]],[]],[4,286,0,0,0,[1,54515,6],[[0,119,0,120,272,[1,54515,5],[[0,97,0,98,122,[1,54516,3],[],[[54519,2,100],[54519,2,101]]],[0,74,0,75,102,[1,54519,1],[],[[54520,2,479]]]],[[54520,2,101]]],[0,74,0,75,102,[1,54520,1],[],[[54521,2,479]]]],[]],[4,288,0,0,0,[1,54521,6],[[0,119,0,120,272,[1,54521,5],[[0,97,0,98,122,[1,54522,3],[],[[54525,2,100],[54525,2,101]]],[0,74,0,75,102,[1,54526,0],[],[[54526,2,480]]]],[[54526,2,101]]],[0,74,0,75,102,[1,54527,0],[],[[54527,2,480]]]],[]],[4,290,0,0,0,[1,54527,6],[[0,119,0,120,272,[1,54527,5],[[0,97,0,98,122,[1,54528,3],[],[[54531,2,100],[54531,2,101]]],[0,74,0,75,102,[1,54532,0],[],[[54532,2,481]]]],[[54532,2,101]]],[0,74,0,75,102,[1,54533,0],[],[[54533,2,481]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[54534,2,108],[54534,2,109]]],[0,63,0,64,292,[1,54534,1280],[[0,114,0,115,293,[1,54535,1279],[[0,294,0,295,0,[1,54535,1279],[[0,296,0,297,45,[1,54536,0],[],[]],[0,298,0,299,0,[1,54536,1],[],[]],[0,51,0,52,300,[1,54537,4],[],[[54541,2,300]]],[0,86,0,56,57,[1,54542,469],[],[[55011,2,482],[55012,2,483]]],[0,74,0,75,92,[1,55012,1],[],[[55012,2,482]]],[0,51,0,52,303,[1,55013,4],[],[[55017,2,303]]],[0,86,0,56,57,[1,55017,48],[],[[55065,2,484],[55065,2,485]]],[0,74,0,75,92,[1,55065,1],[],[[55065,2,484]]],[0,51,0,52,306,[1,55066,5],[],[[55071,2,306]]],[0,86,0,56,57,[1,55072,689],[],[[55761,2,486],[55762,2,308]]],[0,74,0,75,92,[1,55762,0],[],[[55762,2,486]]],[0,51,0,52,309,[1,55763,2],[],[[55765,2,309]]],[0,86,0,56,57,[1,55766,47],[],[[55813,2,487],[55813,2,311]]],[0,74,0,75,92,[1,55813,1],[],[[55814,2,487]]]],[]]],[]]],[[55815,2,108],[55815,2,109]]],[0,312,0,313,0,[1,55815,1791],[[0,35,0,36,314,[1,55816,0],[],[]],[0,296,0,297,45,[1,55816,0],[],[]],[0,298,0,299,0,[1,55817,0],[],[]],[0,51,0,52,315,[1,55817,2],[],[[55819,2,315]]],[0,55,0,56,87,[1,55820,1671],[],[[57491,2,488]]],[0,90,0,91,0,[1,57492,114],[],[]]],[]],[0,63,0,64,317,[1,57606,60],[[0,114,0,115,318,[1,57607,59],[[0,319,0,320,0,[1,57607,59],[[3,67,0,0,0,[1,57608,58],[[4,68,0,0,0,[1,57608,58],[[0,119,0,120,121,[1,57609,8],[[0,97,0,98,122,[1,57609,7],[],[[57616,2,100],[57616,2,101]]],[0,74,0,75,102,[1,57616,1],[],[[57617,2,489]]]],[[57617,2,101]]],[0,74,0,75,102,[1,57617,1],[],[[57618,2,489]]],[0,104,0,105,106,[1,57618,1],[],[[57618,2,107]]],[0,123,0,124,102,[1,57619,0],[],[[57619,2,490]]],[0,126,0,127,102,[1,57619,1],[],[[57620,2,491]]],[0,142,0,0,324,[1,57620,46],[[0,129,0,130,144,[1,57621,1],[],[[57622,2,361],[57622,2,362]]],[3,145,0,0,0,[1,57622,44],[[4,146,0,0,0,[1,57622,2],[[0,147,0,148,149,[1,57622,1],[],[[57623,2,492]]],[0,151,0,152,153,[1,57623,1],[],[[57624,2,326]]],[0,104,0,105,155,[1,57624,0],[],[[57624,2,156]]]],[]],[4,157,0,0,0,[1,57624,3],[[0,147,0,148,149,[1,57625,0],[],[[57625,2,493]]],[0,151,0,152,153,[1,57625,1],[],[[57626,2,326]]],[0,104,0,105,155,[1,57626,0],[],[[57626,2,156]]]],[]],[4,159,0,0,0,[1,57627,2],[[0,147,0,148,149,[1,57627,0],[],[[57627,2,494]]],[0,151,0,152,153,[1,57628,0],[],[[57628,2,326]]],[0,104,0,105,155,[1,57628,1],[],[[57629,2,156]]]],[]],[4,161,0,0,0,[1,57629,2],[[0,147,0,148,149,[1,57629,0],[],[[57630,2,495]]],[0,151,0,152,153,[1,57630,0],[],[[57630,2,326]]],[0,104,0,105,155,[1,57630,1],[],[[57631,2,156]]]],[]],[4,163,0,0,0,[1,57631,2],[[0,147,0,148,149,[1,57631,1],[],[[57632,2,496]]],[0,151,0,152,153,[1,57632,1],[],[[57633,2,326]]],[0,104,0,105,155,[1,57633,0],[],[[57633,2,156]]]],[]],[4,165,0,0,0,[1,57633,3],[[0,147,0,148,149,[1,57634,0],[],[[57634,2,497]]],[0,151,0,152,153,[1,57634,1],[],[[57635,2,326]]],[0,104,0,105,155,[1,57635,0],[],[[57635,2,156]]]],[]],[4,167,0,0,0,[1,57636,2],[[0,147,0,148,149,[1,57636,0],[],[[57636,2,498]]],[0,151,0,152,153,[1,57637,0],[],[[57637,2,326]]],[0,104,0,105,155,[1,57637,1],[],[[57637,2,156]]]],[]],[4,169,0,0,0,[1,57638,2],[[0,147,0,148,149,[1,57638,0],[],[[57638,2,499]]],[0,151,0,152,153,[1,57639,0],[],[[57639,2,326]]],[0,104,0,105,155,[1,57639,1],[],[[57640,2,156]]]],[]],[4,171,0,0,0,[1,57640,2],[[0,147,0,148,149,[1,57640,0],[],[[57641,2,500]]],[0,151,0,152,153,[1,57641,0],[],[[57641,2,326]]],[0,104,0,105,155,[1,57641,1],[],[[57642,2,156]]]],[]],[4,173,0,0,0,[1,57642,2],[[0,147,0,148,149,[1,57642,1],[],[[57643,2,501]]],[0,151,0,152,153,[1,57643,0],[],[[57643,2,326]]],[0,104,0,105,155,[1,57644,0],[],[[57644,2,156]]]],[]],[4,373,0,0,0,[1,57644,2],[[0,147,0,148,149,[1,57644,1],[],[[57645,2,502]]],[0,151,0,152,153,[1,57645,0],[],[[57645,2,326]]],[0,104,0,105,155,[1,57646,0],[],[[57646,2,156]]]],[]],[4,375,0,0,0,[1,57646,2],[[0,147,0,148,149,[1,57647,0],[],[[57647,2,503]]],[0,151,0,152,153,[1,57647,1],[],[[57648,2,326]]],[0,104,0,105,155,[1,57648,0],[],[[57648,2,156]]]],[]],[4,377,0,0,0,[1,57648,3],[[0,147,0,148,149,[1,57649,0],[],[[57649,2,504]]],[0,151,0,152,153,[1,57649,1],[],[[57650,2,326]]],[0,104,0,105,155,[1,57650,0],[],[[57650,2,156]]]],[]],[4,379,0,0,0,[1,57651,2],[[0,147,0,148,149,[1,57651,0],[],[[57651,2,505]]],[0,151,0,152,153,[1,57652,0],[],[[57652,2,326]]],[0,104,0,105,155,[1,57652,1],[],[[57652,2,156]]]],[]],[4,381,0,0,0,[1,57653,2],[[0,147,0,148,149,[1,57653,0],[],[[57653,2,506]]],[0,151,0,152,153,[1,57654,0],[],[[57654,2,326]]],[0,104,0,105,155,[1,57654,1],[],[[57655,2,156]]]],[]],[4,383,0,0,0,[1,57655,2],[[0,147,0,148,149,[1,57655,1],[],[[57656,2,507]]],[0,151,0,152,153,[1,57656,0],[],[[57656,2,326]]],[0,104,0,105,155,[1,57656,1],[],[[57657,2,156]]]],[]],[4,385,0,0,0,[1,57657,2],[[0,147,0,148,149,[1,57657,1],[],[[57658,2,508]]],[0,151,0,152,153,[1,57658,0],[],[[57658,2,326]]],[0,104,0,105,155,[1,57659,0],[],[[57659,2,156]]]],[]],[4,387,0,0,0,[1,57659,2],[[0,147,0,148,149,[1,57659,1],[],[[57660,2,509]]],[0,151,0,152,153,[1,57660,0],[],[[57661,2,326]]],[0,104,0,105,155,[1,57661,0],[],[[57661,2,156]]]],[]],[4,389,0,0,0,[1,57661,3],[[0,147,0,148,149,[1,57662,0],[],[[57662,2,510]]],[0,151,0,152,153,[1,57662,1],[],[[57663,2,326]]],[0,104,0,105,155,[1,57663,0],[],[[57663,2,156]]]],[]],[4,391,0,0,0,[1,57664,2],[[0,147,0,148,149,[1,57664,0],[],[[57664,2,511]]],[0,151,0,152,153,[1,57665,0],[],[[57665,2,326]]],[0,104,0,105,155,[1,57665,1],[],[[57665,2,156]]]],[]]],[]]],[]]],[]]],[]]],[]]],[]]],[[57666,2,108],[57667,2,109]]],[0,110,0,111,112,[1,57667,0],[],[]],[0,63,0,64,336,[1,57667,11],[[0,114,0,115,337,[1,57668,10],[[0,338,0,339,340,[1,57668,10],[[3,67,0,0,0,[1,57669,8],[[4,68,0,0,0,[1,57669,8],[[0,119,0,120,191,[1,57669,5],[[0,97,0,98,122,[1,57670,3],[],[[57673,2,100],[57674,2,101]]],[0,74,0,75,102,[1,57674,0],[],[[57674,2,512]]]],[[57675,2,101]]],[0,74,0,75,102,[1,57675,0],[],[[57675,2,512]]],[0,193,0,194,195,[1,57675,1],[],[[57676,2,342]]],[0,197,0,194,198,[1,57676,1],[],[[57677,2,343]]],[0,104,0,105,344,[1,57677,0],[],[[57677,2,345]]]],[]]],[]]],[]]],[]]],[[57678,2,108],[57678,2,109]]],[0,110,0,111,112,[1,57678,1],[],[]],[0,346,0,347,34,[1,57679,0],[],[[57679,2,348],[57679,2,513]]]],[]]];
-</script>
-<script type="text/javascript">
-window.output["suite"] = [1,2,3,4,[],[1,0,60951],[],[[5,0,1,6,[7],[1,35479,22203],[[0,8,0,9,10,[1,35481,1],[],[[35482,2,11]]],[0,12,0,13,14,[1,35484,22196],[[0,15,0,16,17,[1,35485,0],[],[[35485,2,18]]],[0,19,0,20,21,[1,35486,0],[],[[35486,2,22],[35486,2,23]]],[0,24,0,20,25,[1,35486,1],[],[[35486,2,22],[35487,2,26]]],[0,27,0,20,28,[1,35487,0],[],[[35487,2,22],[35487,2,29]]],[3,30,0,0,0,[1,35487,22192],window.sPart0,[]]],[[57680,2,514]]],[0,74,0,75,515,[1,57680,1],[],[[57680,2,516]]],[0,8,0,9,517,[1,57681,0],[],[[57681,2,11]]]]]],[[1,518,0,519,520,[1,197,35282],[[0,521,0,522,0,[1,200,2],[[0,523,0,231,524,[1,201,0],[],[[201,2,525]]],[0,43,0,44,526,[1,202,0],[],[[202,2,525]]]],[]],[0,527,0,528,529,[1,202,11960],[],[[210,2,530],[12163,2,531]]],[0,134,0,135,532,[1,12164,1],[],[[12165,2,107]]],[3,67,0,0,0,[1,12165,4683],[[4,68,0,0,0,[1,12165,4683],[[0,527,0,528,533,[1,12165,4680],[],[[12174,2,534],[16846,2,531]]],[0,134,0,135,532,[1,16847,1],[],[[16847,2,107]]]],[]]],[]],[0,535,0,536,0,[1,16848,17],[[0,537,0,538,539,[1,16849,0],[],[[16849,2,540]]],[3,67,0,0,0,[1,16850,14],[[4,68,0,0,0,[1,16850,14],[[0,541,0,542,543,[1,16850,14],[],[[16863,2,544]]]],[]]],[]]],[]],[0,114,0,115,545,[1,16865,18613],[[0,546,0,547,0,[0,16866,10],[[3,67,0,0,0,[0,16866,10],[[4,68,0,0,0,[0,16867,9],[[0,119,0,120,121,[0,16867,9],[[0,97,0,98,122,[0,16868,7],[],[[16873,2,548],[16874,2,100],[16875,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,18878,6],[[3,67,0,0,0,[0,18879,4],[[4,68,0,0,0,[0,18879,4],[[0,119,0,120,121,[0,18880,3],[[0,97,0,98,122,[0,18880,3],[],[[18882,2,550],[18882,2,100],[18883,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,20886,5],[[3,67,0,0,0,[0,20887,4],[[4,68,0,0,0,[0,20887,4],[[0,119,0,120,121,[0,20887,4],[[0,97,0,98,122,[0,20888,3],[],[[20889,2,551],[20890,2,100],[20890,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,22893,5],[[3,67,0,0,0,[0,22894,4],[[4,68,0,0,0,[0,22894,4],[[0,119,0,120,121,[0,22895,3],[[0,97,0,98,122,[0,22895,3],[],[[22896,2,552],[22897,2,100],[22898,4,549]]]],[]]],[]]],[]]],[]],[0,546,0,547,0,[0,24900,137],[[3,67,0,0,0,[0,24901,136],[[4,68,0,0,0,[0,24901,136],[[0,119,0,120,121,[1,24902,133],[[0,97,0,98,122,[1,24902,131],[],[[24903,2,553],[25033,2,100],[25033,2,554]]],[0,74,0,75,102,[1,25034,0],[],[[25034,2,555]]]],[[25035,2,554]]],[0,104,0,105,106,[0,25035,2],[],[[25035,2,107],[25037,4,556]]]],[]]],[]]],[]],[0,546,0,547,0,[0,27040,15],[[3,67,0,0,0,[0,27040,15],[[4,68,0,0,0,[0,27041,13],[[0,119,0,120,121,[1,27041,12],[[0,97,0,98,122,[1,27042,10],[],[[27052,2,100],[27052,2,557]]],[0,74,0,75,102,[1,27053,0],[],[[27053,2,0]]]],[[27053,2,557]]],[0,104,0,105,106,[0,27054,0],[],[[27054,2,107],[27054,4,558]]]],[]]],[]]],[]],[0,546,0,547,0,[0,29057,13],[[3,67,0,0,0,[0,29058,12],[[4,68,0,0,0,[0,29058,12],[[0,119,0,120,121,[1,29058,11],[[0,97,0,98,122,[1,29059,9],[],[[29068,2,100],[29068,2,557]]],[0,74,0,75,102,[1,29068,1],[],[[29068,2,0]]]],[[29069,2,557]]],[0,104,0,105,106,[0,29069,1],[],[[29070,2,107],[29070,4,558]]]],[]]],[]]],[]],[0,546,0,547,0,[0,31073,130],[[3,67,0,0,0,[0,31073,130],[[4,68,0,0,0,[0,31074,129],[[0,119,0,120,121,[1,31074,128],[[0,97,0,98,122,[1,31075,126],[],[[31201,2,100],[31201,2,559]]],[0,74,0,75,102,[1,31201,1],[],[[31202,2,560]]]],[[31202,2,559]]],[0,104,0,105,106,[0,31202,1],[],[[31203,2,107],[31203,4,561]]]],[]]],[]]],[]],[0,546,0,547,0,[0,33206,248],[[3,67,0,0,0,[0,33206,248],[[4,68,0,0,0,[0,33207,246],[[0,119,0,120,121,[1,33207,245],[[0,97,0,98,122,[1,33208,243],[],[[33451,2,100],[33451,2,559]]],[0,74,0,75,102,[1,33452,0],[],[[33452,2,560]]]],[[33452,2,559]]],[0,104,0,105,106,[0,33453,0],[],[[33453,2,107],[33453,4,561]]]],[]]],[]]],[]],[0,546,0,547,0,[1,35456,22],[[3,67,0,0,0,[1,35457,21],[[4,68,0,0,0,[1,35457,21],[[0,119,0,120,121,[1,35457,20],[[0,97,0,98,122,[1,35458,18],[],[[35476,2,100],[35476,2,101]]],[0,74,0,75,102,[1,35477,0],[],[[35477,2,562]]]],[[35477,2,101]]],[0,104,0,105,106,[1,35478,0],[],[[35478,2,107]]]],[]]],[]]],[]]],[]]],[]],[2,563,0,564,0,[1,57683,3268],[[0,527,0,528,565,[1,57683,280],[],[[57693,2,566],[57964,2,531]]],[0,527,0,528,567,[1,57964,15],[],[[57974,2,568],[57979,2,531]]],[0,134,0,135,532,[1,57980,1],[],[[57980,2,107]]],[0,527,0,528,569,[1,57981,12],[],[[57989,2,570],[57993,2,531]]],[0,134,0,135,532,[1,57994,1],[],[[57995,2,107]]],[0,571,0,572,0,[1,57995,1930],[[0,573,0,72,574,[1,57996,1929],[[0,74,0,75,76,[1,57997,1],[],[[57998,2,575]]],[0,78,0,40,79,[1,57998,1],[],[[57999,2,576]]],[0,46,0,47,81,[1,58000,348],[],[[58000,2,49],[58347,2,577]]],[0,51,0,52,84,[1,58348,5],[],[[58353,2,578]]],[0,86,0,56,87,[1,58353,1456],[],[[59809,2,579],[59809,2,580]]],[0,90,0,91,0,[1,59810,114],[],[]],[0,74,0,75,92,[1,59924,1],[],[[59925,2,579]]]],[]]],[]],[3,67,0,0,0,[1,59925,1026],[[4,68,0,0,0,[1,59926,1025],[[0,581,0,582,70,[1,59926,1024],[[0,573,0,72,583,[1,59927,519],[[0,74,0,75,76,[1,59928,0],[],[[59928,2,584]]],[0,78,0,40,79,[1,59929,1],[],[[59930,2,585]]],[0,46,0,47,81,[1,59930,378],[],[[59930,2,82],[60307,2,586]]],[0,51,0,52,84,[1,60308,20],[],[[60328,2,587]]],[0,86,0,56,87,[1,60329,2],[],[[60331,2,588],[60331,2,589]]],[0,90,0,91,0,[1,60331,114],[],[]],[0,74,0,75,92,[1,60445,1],[],[[60446,2,588]]]],[]],[0,590,0,40,591,[1,60446,1],[],[]],[0,46,0,47,592,[1,60447,351],[],[[60447,2,82],[60798,2,593]]],[0,594,0,595,596,[1,60798,88],[],[[60874,2,597],[60886,2,598]]],[0,90,0,91,0,[1,60886,64],[],[]]],[]]],[]]],[]]],[]]],[1,1,1,1]];
-</script>
-<script type="text/javascript">
-window.output["strings"] = [];
-</script>
-<script type="text/javascript">
-window.output["strings"] = window.output["strings"].concat(["*","*ScalePOC","*/tmp/ONLabTest/TestON/RobotTests/ScalePOC.robot","*ScalePOC.robot","*<p>ONOS Sanity Test Suite\x3c/p>","*Find Max Switches By Scaling","eNqNUktr40AMvvdXiJ5SKEm6xyUESunCHkpDY9rzxJZjUXlkRrKz6a9fTV4tpIFePIb5pO81s27+h2IF1iC04R/Evl1hAqlBN2Rlgwp1khbuptBHI4aEoWworuHXFCiCGnaa4XfTMRS+pBZm2WSAD5fvCiHlzRU6RZJ+3cDL47KA+8Vf/T2bdPOrWc/+YZq/YqJ6CxUOVCKU4nxA6j8pYWmziUO+wakF6zUDwxCIw4rxEjQJ417P0/2yeHyBUYV16Nl2N9lNGRR33i3EKrDErCOaXzOmm7O9Jp2wrLceSinrSB94kGtfctyTK4yKg//QEVxPjrPXX9Y+rxTTgJAjPor2cmigqg/M23MkU3zXW2hEzQ8XDbWnr6esc62fDs7nTyS1QDDwWRfNOCCDRGgpUnQzo7dEZhi93AQLebgZw7LJNDuy26OKTN9JMh3Dw777MkRYZT9KvAVqO8YWo2GVyazJjDuuoLBB5k99y+J5AU8H+sKjutTp6Zl8YJLLBSl6A1F+XMbEH+V/jw4Wgw==","*done","*OperatingSystem.Append To File","*<p>Appends the given contend to the specified file.\x3c/p>","*${SWITCHES_RESULT_FILE}, Max Switches Linear Topo\\n","*Appended to file '<a href=\"file:///home/fedora/workspace/tools/switches.csv\">/home/fedora/workspace/tools/switches.csv\x3c/a>'","*${max} = Find Max Switches","*<p>Will find out max switches starting from 10 till reaching ${stop} and in steps defined by ${step}\x3c/p>","*${start}, ${end}, ${increments}","*${max-switches} = BuiltIn.Set Variable","*<p>Returns the given values which can then be assigned to a variables.\x3c/p>","*${0}","*${max-switches} = 0","*${start} = BuiltIn.Convert To Integer","*<p>Converts the given item to an integer number.\x3c/p>","*${start}","*Argument types are:\n&lt;type 'unicode'&gt;","*${start} = 10","*${stop} = BuiltIn.Convert To Integer","*${stop}","*${stop} = 20","*${step} = BuiltIn.Convert To Integer","*${step}","*${step} = 10","*${switches} IN RANGE [ ${start} | ${stop+1} | ${step} ]","*${switches} = 10","*Start Mininet Linear","*<p>Start mininet linear topology with 10 nodes\x3c/p>","*${switches}","*BuiltIn.Log To Console","*<p>Logs the given message to the console.\x3c/p>","*\\n","*Starting mininet linear ${switches}","*${mininet_conn_id} = SSHLibrary.Open Connection","*<p>Opens a new SSH connection to the given `host` and `port`.\x3c/p>","*${MININET_IP}, prompt=${LINUX_PROMPT}, timeout=${switches*3}","*${mininet_conn_id} = 1","*BuiltIn.Set Suite Variable","*<p>Makes a variable available everywhere within the scope of the current suite.\x3c/p>","*${mininet_conn_id}","*SSHLibrary.Login With Public Key","*<p>Logs into the SSH server using key-based authentication.\x3c/p>","*${MININET_USER}, ${USER_HOME}/.ssh/id_rsa, any","*Logging into '10.0.0.121:22' as 'fedora'.","*Read output: Last login: Wed Jul  1 17:01:22 2015 from 10.0.0.121\n[fedora@ip-10-0-0-121 ~]$","*SSHLibrary.Write","*<p>Writes the given `text` on the remote machine and appends a newline.\x3c/p>","*sudo mn --controller=remote,ip=${CONTROLLER_IP} --topo linear,${switches} --switch ovsk,protocols=OpenFlow13","*sudo mn --controller=remote,ip=10.0.0.152 --topo linea \nr,10 --switch ovsk,protocols=OpenFlow13","*SSHLibrary.Read Until","*<p>Consumes and returns the server output until `expected` is encountered.\x3c/p>","*mininet&gt;","eNqNkctqwzAQRff5irsqqSnG70e6Kl4VuusXBMf1iDgy6Krk9zsKakm9aXeHGd0DupMkCQY3Hb2xM+zkr6s77xIdvpxOYTSu1rt1WSZ3P5WVnoed5JACUkIqSA1pIC2kg/SQPMN9glfjR5k0xBwswBKswBpswBbswB7chBZjz5rYS/6ku0fspVAoApQKZYBKoQpQK9QBGoUmQKvQBugUugC9Qh8gz4IxU2QR3Syjm1V0s45uNtHNNrrZRTf76OZNqfLbB4bVfpj50/2U9a+u3v3R+U3r43anj7/L/KvLNE1/Z4e318PuYqzRSz/M/vkLhuWIqQ==","*BuiltIn.Sleep","*<p>Pauses the test executed for the given time.\x3c/p>","*6","*Slept 6 seconds","*${status}, ${result} = BuiltIn.Run Keyword And Ignore Error","*<p>Runs the given keyword with the given arguments and ignores possible error.\x3c/p>","*Verify Controllers are Not Dead","*<p>Verifies each controller is not dead by making sure karaf log does not contain \"OutOfMemoryError\" and rest call still returns 200\x3c/p>","*${ip} IN [ @{controller_list} ]","*${ip} = 10.0.0.152","*Verify Controller Is Not Dead","*${ip}","*${response} = Run Command On Remote System","*<p>Reduces the common work of running a command on a remote system to a single higher level robot keyword,\x3c/p>","*${controller}, grep java.lang.OutOfMemoryError /opt/onos/log/karaf.log","*BuiltIn.Log","*<p>Logs the given message with the given level.\x3c/p>","*Attempting to execute ${cmd} on ${remote_system}","*Attempting to execute grep java.lang.OutOfMemoryError /opt/onos/log/karaf.log on 10.0.0.152","*${conn_id} = SSHLibrary.Open Connection","*${remote_system}, prompt=${prompt}, timeout=${prompt_timeout}","*${conn_id} = 2","*${user}, ${USER_HOME}/.ssh/id_rsa, any","*Logging into '10.0.0.152:22' as 'fedora'.","*Read output: Last login: Wed Jul  1 17:01:59 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","*${cmd}","*grep java.lang.OutOfMemoryError /opt/onos/log/karaf.lo \ng","*${output} = SSHLibrary.Read Until","*${LINUX_PROMPT}","*[fedora@ip-10-0-0-152 ~]$","*${output} = [fedora@ip-10-0-0-152 ~]$","*SSHLibrary.Close Connection","*<p>Closes the current connection.\x3c/p>","*${output}","*${response} = [fedora@ip-10-0-0-152 ~]$","*BuiltIn.Should Not Contain","*<p>Fails if `item1` contains `item2` one or more times.\x3c/p>","*${response}, OutOfMemoryError","*${resp} = RequestsLibrary.Get","*<p>* * *   Depricated - See Get Request now   * * *\x3c/p>","*${controller}, /onos/v1/devices","*Deprication Warning  Use Get Request in the future","*${resp} = &lt;Response [200]&gt;","*${resp.content}","eNrN0k1LxDAQBuC/ssy5libp901EsQddsAseRJaYzdpATUoau0jpfzfRkwdzySXtpfO2U+ZhssKJL4LxGdqXFcQJWlDnNvt7UUjAfE3cvuyfu8PNva3pQsVI30YbGv3JE9DKPcPDdX+4fbIffJy1LR8FE5omu06y1IbDxWb7icvd0l+EYYPNZpfhlKTo6l2YvCoy1pQu51rQ0f1DSW5rNtB5FnPnZnQTUSmVoUYoaYdfYdLKKKZcw/7uiMhvh5R8/OlAWepuhFGbl6QuYduSf8EoOjAKBedecB4dOA8EN9gLLqIDF6EbrrxgHB0Yh4JrL5hEByahRxp5wXV04Dp0w40X3EQHbkI3nHnBZXTgMhRMvOAqOnAVeqQLC37dvgG1CLp7","*BuiltIn.Should Be Equal As Strings","*<p>Fails if objects are unequal after converting them to strings.\x3c/p>","*${resp.status_code}, 200","*Argument types are:\n&lt;type 'int'&gt;\n&lt;type 'unicode'&gt;","*${status} = PASS","*${result} = None","*BuiltIn.Exit For Loop If","*<p>Stops executing the enclosing for loop if the `condition` is true.\x3c/p>","*'${status}' == 'FAIL'","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Switch Count, ${switches}","*BuiltIn.Wait Until Keyword Succeeds","*<p>Waits until the specified keyword succeeds or the given timeout expires.\x3c/p>","*${switches*2}, 2s, Ensure Switch Count, ${switches}","*Ensure Switch Count","*<p>Verfies the device count (passed in as arg) on each controller is accurate.\x3c/p>","*${resp} = ONOS Get","*<p>Common keyword to issue GET requests to the controller. Arguments are the session (controller ip) and api path\x3c/p>","*${ip}, devices","*${session}, /onos/v1/${noun}","*BuiltIn.Should Not Be Empty","*<p>Verifies that the given item is not empty.\x3c/p>","*Length is 2423","*${jsondata} = RequestsLibrary.To Json","*<p>Convert a string to a JSON object\x3c/p>","*${jsondata} = {u'devices': [{u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira,...","*${length} = BuiltIn.Get Length","*<p>Returns and logs the length of the given item.\x3c/p>","*${jsondata['devices']}","*Length is 10","*${length} = 10","*BuiltIn.Should Be Equal As Integers","*<p>Fails if objects are unequal after converting them to integers.\x3c/p>","*${length}, ${switch_count}","*Argument types are:\n&lt;type 'int'&gt;\n&lt;type 'int'&gt;","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Switches are Available","*${switches*2}, 2s, Ensure Switches are Available","*Ensure Switches are Available","*<p>Verifies that the switch's availability state is true on all switches through all controllers\x3c/p>","*Check Each Switch Status","*${jsondata}, True","*${jdata['devices']}","*${INDEX} IN RANGE [ 0 | ${length} ]","*${INDEX} = 0","*${data} = Collections.Get From List","*<p>Returns the value specified with an `index` from `list`.\x3c/p>","*${jdata['devices']}, ${INDEX}","*${data} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${status} = Collections.Get From Dictionary","*<p>Returns a value from the given `dictionary` based on the given `key`.\x3c/p>","*${data}, available","*${status} = True","*${status}, ${bool}","*Argument types are:\n&lt;type 'bool'&gt;\n&lt;type 'unicode'&gt;","*${INDEX} = 1","*${data} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46384', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 2","*${data} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46392', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 3","*${data} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46387', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 4","*${data} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46388', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 5","*${data} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46391', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 6","*${data} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46389', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 7","*${data} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46390', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 8","*${data} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46393', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 9","*${data} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46385', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Switch Role, MASTER","*${switches*2}, 2s, Ensure Switch Role, MASTER","*Ensure Switch Role","*<p>Verifies that the controller's role for each switch is MASTER (default in standalone mode)\x3c/p>","*MASTER","*Ensure Role","*${jsondata}, ${role}","*${data}, role","*${status} = MASTER","*${status}, ${role}","*Argument types are:\n&lt;type 'unicode'&gt;\n&lt;type 'unicode'&gt;","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure Topology, ${switches}, ${cluster}","*${switches*2}, 2s, Ensure Topology, ${switches}, ${cluster}","*Ensure Topology","*<p>Verifies the devices count through /topoplogy api. Currently, cluster count is inconsistent (Possible bug, will look into it), so the check on that is ignored, but logged\x3c/p>","*${switches}, ${cluster}","*${ip}, topology","*{\"time\":778317929317684,\"devices\":10,\"links\":18,\"clusters\":1}","*${devices} = HttpLibrary.HTTP.Get Json Value","*<p>Get the target node of the JSON document `json_string` specified by `json_pointer`.\x3c/p>","*${resp.content}, /devices","*${devices} = 10","*${clusters} = HttpLibrary.HTTP.Get Json Value","*${resp.content}, /clusters","*${clusters} = 1","*${devices}, ${device_count}","*Argument types are:\n&lt;type 'str'&gt;\n&lt;type 'int'&gt;","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Experiment Links, Hosts, and Flows","*${switches*2}, 2s, Experiment Links, Hosts, and Flows","*Experiment Links, Hosts, and Flows","*<p>Currently this only returns the information the controller has on links, hosts, and flows. Checks can easily be implemented\x3c/p>","*${ip}, links","eNq11D0PgjAQBuD/crODUPpBN4MMrIa4GAeCmBCNENqYGMJ/t2yyGF7jdWvvrnmSa2+ke/u4ObKnkdxQkx2p7wZPlgRt6NI827oJm+5qt8slaQpx5z8q4u8Vaq7wr36O7otDnpUh3/nKzwe7rCyOecgAGQnMkBwMATMSDoaBGSkHQ8MMw8FQMENzMGKYITgYKcyofmKsuXTJEBxPNIY/7Jo2/pshYUbCwUhghuBgKJghORgGZmgORgozDAdDwwzFwcCnaMTBiGDGqrlxnt5Am5MY","eNpTqc4qzs9LSSxJrFWwVaguVc/JzMsuVrdSiAayi4uSgSwgIyW1LDM5FcguVc9PszJABabqOkDxgvyiErACY/VaED+luIQIvWaoeo0geksqCyAaXDyDXJ1DwGqKSxJLIIKOziGeYa4glTidqKenBwBH1D70","*${jsondata['links']}","*Length is 18","*${length} = 18","*${ip}, flows","eNrtm99r2zAQx/8XP2dwJ93pR94GLWxPKyx9GCUML1U2szQOjrtRSv73XdKXFZriDsc7mfhJjhJL+vC9O51yfiyWq/r3tpjePBbVbTEtTEDyHh35gBxMMSnKzeaj9OCk+N7U94c2TIpNU9VN1T4UUwK5JkVb3aX6vj10Vtur1NyV67SW+7a5T5PiNv2qFmn/46JeTuH5Vcow27Zsk/S+v7i4vJD7VbVMTyOVi5+p3R7a3x7a9NRaldv2c0prmRhZ9h7Qh2hY5tGksr07jCxLWm9l+EVb1eunNbYPm/0gn65nV9czGWVTN/LFd3Y3309xmZomyRRv5juZUFqlRVs3++csZKmpqcq/n3E5+/B19uXqUp6S2h+zw4cGmHbz3W7yzzRZCUmnk2R07NmCO+vyTTQtow0vC9NzQJeRMP+/iVN4UZjkMEI4C/ONwgQDL+FksBgJhsGJY/Gax3A6a4kDhdPbeW8ovVI7ZyS2NmQmTK81AFnpcUgZCVPpzugNJM/C7EBT5mgMnl6X1A9J74xah2nQoh1Gl33RZKN2Y2QsecS8cDpUG3+IIAafj52zUesxu5LUJEylNMVrMiIMFM25J5oU1OY/5BhwgAO4vlAy6AznQtKD9yEjkqzWYXYlqcjEA2p1mMaRWH9eNJn05uXSOKxzAJxmLPHneG7elSbrIMlRLUnPzsZsSEZDWvNycOgt5mXhXm9ejp7RxKxwRmOVxh9RZ0Q2A4VzOxav+Ur+I/7Uwundph1PADqW/yBidGdh9pQDdaWpRJdOb/4DFA2cddlT/sPiL8MAO/Yw8gOjyJatTG8YYfZFk7zajZEhkEZeOD2q3RixA2TMx871nnF0JqlImAq85jGagdAPsDGKYy/MZOPBuIGO2eNYTo1ecZghRjIZCZP0mnhHkmdhdsh/bLDOuTPNvraZIs04UNWWG0/9wdEyo0gB7Om9phvP/7zHygkDhMhZCVPziwEMwC5mZudqq4Y701Ri5qz2ONMagjBQ/Zsfe5mrhHMEF1xmOI1er2mI4wBvrfSGUm05IVuwDvISJutNKbvS5DPJZyTnuz/erb1p","*${jsondata} = {u'flows': [{u'life': 0, u'isPermanent': True, u'packets': 0, u'treatment': {u'deferred': [], u'instructions': [{u'type': u'OUTPUT', u'port': -3}]}, u'groupId': 0, u'priority': 40000, u'bytes': 0, u's...","*${jsondata['flows']}","*Length is 50","*${length} = 50","*${ip}, hosts","*{\"hosts\":[]}","*${jsondata} = {u'hosts': []}","*${jsondata['hosts']}","*Length is 0","*${length} = 0","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Check Each Switch Individually","*${switches*2}, 2s, Check Each Switch Individually","*Check Each Switch Individually","*<p>Currently just observe each information the device has. Checks can easily be implemented\x3c/p>","*Check Each Switch","*${jsondata}","*@{dpid_list} = BuiltIn.Create List","*<p>Returns a list containing given items.\x3c/p>","*@{dpid_list} = [ ]","*${devicedata} = Collections.Get From List","*${devicedata} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = Collections.Get From Dictionary","*${devicedata}, id","*${id} = of:000000000000000a","*Collections.Append To List","*<p>Adds `values` to the end of `list`.\x3c/p>","*${dpid_list}, ${id}","*${dpid_list}","*[u'of:000000000000000a']","*${devicedata} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46384', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000001","*[u'of:000000000000000a', u'of:0000000000000001']","*${devicedata} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46392', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000004","*[u'of:000000000000000a', u'of:0000000000000001', u'of:0000000000000004']","*${devicedata} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46387', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000005","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3VY8FAB+2FSA=","*${devicedata} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46388', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000002","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFupB4LAFx6GkA=","*${devicedata} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46391', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000003","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcWD0WABRQH2E=","*${devicedata} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46389', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000008","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4hXosAEdNJIc=","*${devicedata} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46390', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000009","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4BQ5xS/VYAPXdKa4=","*${devicedata} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46393', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000006","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4BQ5xSxziZuqxACAqLtI=","*${devicedata} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46385', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:0000000000000007","eNqLLlXPT7MyQAWJ6joK2MQNcYib4BA3xSFuhEPcGIe4BQ5xSxziZjjEzdVjAcXLM/c=","*${i} IN [ @{dpid_list} ]","*${i} = of:000000000000000a","*${ip}, devices/${i}","*{\"id\":\"of:000000000000000a\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"a\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46386\"}}","*${i} = of:0000000000000001","*{\"id\":\"of:0000000000000001\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"1\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46384\"}}","*${i} = of:0000000000000004","*{\"id\":\"of:0000000000000004\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"4\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46392\"}}","*${i} = of:0000000000000005","*{\"id\":\"of:0000000000000005\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"5\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46387\"}}","*${i} = of:0000000000000002","*{\"id\":\"of:0000000000000002\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"2\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46388\"}}","*${i} = of:0000000000000003","*{\"id\":\"of:0000000000000003\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"3\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46391\"}}","*${i} = of:0000000000000008","*{\"id\":\"of:0000000000000008\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"8\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46389\"}}","*${i} = of:0000000000000009","*{\"id\":\"of:0000000000000009\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"9\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46390\"}}","*${i} = of:0000000000000006","*{\"id\":\"of:0000000000000006\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"6\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46393\"}}","*${i} = of:0000000000000007","*{\"id\":\"of:0000000000000007\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"7\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46385\"}}","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Check Mininet at Lower Level","*${switches*2}, 2s, Check Mininet at Lower Level","*Check Mininet at Lower Level","*<p>PoC for executing mininet commands at the lower level\x3c/p>","*SSHLibrary.Switch Connection","*<p>Switches the active connection by index or alias.\x3c/p>","*SSHLibrary.Read","*<p>Consumes and returns everything available on the server output.\x3c/p>","*dpctl dump-flows -O OpenFlow13","eNrNmc1v2jAYh+/9K3KaWsQqf7z+6pTTNE5oTF2lHZG/MkWlgJJMK//9gnaoMFmblDhebhYofvyzH+zXzGazrMbZx5Geq9Xi2/eH9WK5+pFVfr85ZNerBb6lN9n1c+ly9Exu7q4yu9s9lr5tYdQ+Eqj0TMI8c78q3ZS7bc5vKRH1PGu02bTfm2fb9V7bR9/UOTk2zKHxdY5526j91q2Lze73uvJP2b4qd1XZHHI4vnnuNuvmsD/2JKW1mbbHt9f559XXh/vVcvnl/o4zRtkZEWGMCyP7EaEXIvRPHjYv9/37B6o1Ejron46biAIyKBHhqR8xkb88utpfCkEvmpZXAWZHO0hqOxRTngaDlt2DhpdBUwLx7HAWi35EUewwGJyKm8hQOwqi3CkRlZPbcQ5x4bS8bQdNbof1QILkaVI7OEOCB9PAp7RDKirjJjLQDs55YU+JgE5tRwfEhdPyth2Q2g4NROMgeZ7WDguOBasTprSjcErETWSoHc4wEyTCJrdjZIg+drDkdhjRJnW6FlBSOwRVFPoRRbHDClzwuIkMtENAYYJKCNTUdnRA0NgnK57aDkMMK04HzdLWHUI7Rfv9dsexw7ef/Fd7h7CAg0oIJt87OiA4jmyHSG6HKkxwFcHS7h2S4CKohNiUd1aOaQNxExloh6RSyH5E8ewYG6KPHTK1HRYDdv3W4lR2KM5wSjtsgYO9S0BaO7R1YsRE3mfHOQSPbYdKboeUIriKEGntUEgb1I8oih0eqCBxExlohyKY8hETeZcdHRBcRbYDo8R6gDeCBQcJSVL+HcgNVVL2I4qhB0OCgI6byDA9uGEIBcdfMXXh0QVx4bS8CvBUbsutbz78bD79AfHqc+E=","eNqtysEKgyAcgPF7T/E/7FDiJLWVDLx2GjjYYMew9BBFRioUY+8+9w77bj/4Tm8XwxrDByQghMBTOP+pTLX3x7Nrb+oFm13nA3LVUsILyPfRyHJnxTWDwblptEm0TImKC3sRFQYTNx1Gt8iacNZ4DEH3c/owLN2qh8kGL9kP/RGsl7RO8HYxhJAvnsY18A==","*dump","eNqV1E1LwzAYwPG7n6Kn9aKS5MlrhydBPDlQ8AvM4ApdU9bADsPvbjob9yQ5hbJDyp/+CNmTzeC3r272zYF24fdg/YF0lDwuD22m/usJGOebb79t7jb/LQstS1oWW5W3EFpIWoityVseWp60fG0FzVsRWpG0IraQtzK0MmllbEXeqtCqpFWxLfamQ6uTVse22JsJrUlas7ay2Bsly2GQ9DRIzNH2dp8fH+fe7w+Xdjo57/ZumNuuaXeTHV8Gd6bQ/jRzONrBdZSpvw/dz9dzpt2bG+26YNdFFHStwHKBYYHdhHUBmFO0loOcA8wB5qDkeC3Hc45jjmOOl5yq5UTOCcwJzImC06SWkzknMScxJ0uu+s+ock5hTmFOlZys5XTOacxpzOmSM7WcyTmDOYM5U3CGVU82KUabJLNNiuE26MZ7t0fn7bMb/ckNgz1d2n5akHjlCBaQfTBuLzopIV7gsN4Tx37sR+uXxS+Ug993","eNpdysEKQEAQgOG7p5iD3Gx2ZzaxuXsQQinKOMm7G2XTbH//7cuv7eT95Bs6KFYO/XYwzLaVy5HnqrWVebOwL0OHjqiYOED2WyfWKeuirVOLYlFZjLZJLYklZemz3qbWi/XK+mhRW2PMAzJYQjQ=","*links","eNpd0DsOgzAURNE+q6BCpECy3/NXLIGCVaAYKaGJ968ouLC45ehMdYud91rM+K7LPL7q8r22HaZtHbb1+SgCF7jCFe7gDu7hHh7gAR7hEZ7gCZ7hGW4NA5n7oxURFJTuCr/+2t3BFe7hDh7gHh7hAZ7gEZ7hCd6CCBL2w+c4j3Ovf/oBSImv4A==","eNpTqc4vLSkoLalVsFXIMNRNLckwUMspsdZVSy+xLgbzDRU0/L0V/L01uTKM0OSN0OSN0eSN0eRN0ORN0ORN0eRN0eTN0OTN0OTN0eTN0eQt0OT19PQAQkZI/w==","*ports","eNpF0DsKAkEQhOHcU0xkJkx3z9vzLLqgazBzfxSsrc4K/i+qKeH1GTFMuW3rKUOwdGi4TEVURj3jf9mwHzMwIzMyc5bAElkiS84yWCbLZNlZAStkhaw4q2CVrJJVZw2skTWy5qyDdbJO1p1JPF+Nfmvkr+/92I9tXR/r/gVRGmoL","eNpFyjsKgDAQRdHeVUxhazDzSTHgcgQLIUKSSty7AcdJ9R7cM9+51avVBzYoEc6sa99lr0fUaA8VYSpoET3iH79HSp2RMXJGzmgwNsbO2BkPJsbEmTiTwZKxFEJ4AZUyOjE=","*Stop Mininet","*<p>Stop mininet topology\x3c/p>","*Stopping Mininet","*exit","eNpljzsOwjAYg/ecwgNTpFZN390YuAEjYkBp4I8oSVVHYuPslIEBao+29claaxxTnGcfbjCwMaQlTpNbqGwBpX/iAZMPd6p8q79mAT59suKoaMASrMAabMAW7MAeHECzQRSQyEQlBlJCKkgNaSAtpIP0kAHyXR1icMrGxzy55Eb4gD4fuhXn1hsj1enqxrhc9n7OTJF9bEqD13n3Bj01RL8=","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure No Switches are Available","*${switches*2}, 2s, Ensure No Switches are Available","*Ensure No Switches are Available","*<p>Verifies that the switch's availability state is false on all switches through all controllers\x3c/p>","eNrN0k1rxCAQBuC/ssw5G6Lm+7p0aS6bwxZ6KKVY1zRCqiFKlhLy36vtqYd68WI8zSsT5mHc4MZXwbiG9mUDcYMW1NBmfz8KCZivmdvL63P3dHq0NV2pmOj7ZMOBTponsChXwKW/PNj7z2FxhWBiocmhkyy14Xi3WT9zeVivd2HYaDPtMpySFB0/hMmrImNN6XK+CDq5fyjJbc1GqrXQnRvRDUSlVIYaoaSdfYN5UUYx5Rr68xsivx1S8umnA2WpOwijNi9JXcK+J/96UWxeFOrNvd48Nm8e6G2w11vE5i1C91t5vTg2Lw711l4vic1LQt8z8nrr2Lx16H4br7eJzduE7jfzesvYvGWol3i9VWzeKvQ9F9b7un8DGdu3UQ==","*Length is 2413","*${jsondata} = {u'devices': [{u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira...","*${jsondata}, False","*${data} = {u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46386', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${status} = False","*${data} = {u'available': False, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46384', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46392', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46387', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46388', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46391', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46389', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46390', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46393', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46385', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*Wait Until Keyword Succeeds, ${switches*2}, 2s, Ensure No Switches in Topology, ${cluster}","*${switches*2}, 2s, Ensure No Switches in Topology, ${cluster}","*Ensure No Switches in Topology","*<p>Verifies the topology sees no devices\x3c/p>","*${cluster}","*{\"time\":778322492077022,\"devices\":0,\"links\":0,\"clusters\":0}","*${devices} = 0","*${clusters} = 0","*${devices}, 0","*Argument types are:\n&lt;type 'str'&gt;\n&lt;type 'unicode'&gt;","*${max-switches} = BuiltIn.Convert To String","*<p>Converts the given item to a Unicode string.\x3c/p>","*Argument types are:\n&lt;type 'int'&gt;","*${max-switches} = 10","*${switches} = 20","*<p>Start mininet linear topology with 20 nodes\x3c/p>","*${mininet_conn_id} = 3","*Read output: Last login: Wed Jul  1 17:02:41 2015 from 10.0.0.121\n[fedora@ip-10-0-0-121 ~]$","*sudo mn --controller=remote,ip=10.0.0.152 --topo linea \nr,20 --switch ovsk,protocols=OpenFlow13","eNqtk81qwlAQhfc+xayKlSKZ/MeuiqtCd30C0dQbtAnk3OLr98wkFuvahXC4d/i+OeS6Wq1kO7a72PVH6dt4GcbTYsXDt8PBjvZDH8fhfG7H29MwIGKzCCohlZBJyCUUEkoJlYRaQiNBE/54rxxQTihHlDPKIeWUckw5lyZyS8ali/vQEg4VpIJMkAsKQSmoBLWgERAOwkE4CAfhIByEg3AQDsJxBz93/YnkZdAX3j/LMqQMqYWMIbOQM+QWCobCQslQWqgYKgs1Q22hYWgsaGLExKPDna6GV+erCdQNagp1h5pE3aKmUfeoidRNaip1l5pM3ZaaLTUb0rkJsrkJ8rkJirkJyrkJqrkJ6rkJmrkJvEDjSa9VMO3v+Gl/F0z7u2La3yXT/q6Z9nfRtL+rpv1d5vtbFf8426H/6o4/49/Deui7+oy7Md695P39HYevD+9R7269Xv93bD/eN4vvru/4L3s6xtdfIU3e0w==","*${conn_id} = 4","*Read output: Last login: Wed Jul  1 17:03:04 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","eNrN109LwzAUAPCvMnKuJenftTcRxR104AYeREaapi5Qk9HGDRn77ibz5MF3eZfXXprXpuTHS17aM+v10Sg9s/btzEzPWuaGlv89JEuY/z7ocHPzutrePYa2PEozym4MQT996YRNLl6zp9vN9v4lPPA5TKH5bJSZZLJYWZWG4P4UYuuDtovj5mS82ofYHGNZmqfi5sP4oi65aqoY15ORY3yHszq01V7Os5lXcYxxRNJa56U3zobBn9lhct4pFzusH3Yi/+1hrR6vPQRP4yky0RZVwXN2uST/gnty4B4LbkCwJgfWWHAJgjty4A4JFjBYkQMrbIYLEDyQAw/YDFcQWAhy4OuQEOK8qcEUExRjwWCZFhk9cIZdxQIUc3pijs3xEpzUBTlxga1b8MdWSQ5cYuc0WKg5vVWMXsRgnb52JraIc6w4A1NMT4wFCxAs6FUtgS5b4M7El+TES+ychjemhhy4wWaYg+CKHLjCguFfppocuMZO6Zjh98sPYTZyBA==","*Length is 4838","*${jsondata} = {u'devices': [{u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira,...","*Length is 20","*${length} = 20","*${data} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'd', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46409', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'e', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46405', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'b', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46415', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'c', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46404', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'f', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46416', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'11', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46397', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46399', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${data} = {u'available': True, u'chassisId': u'12', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46401', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': True, u'chassisId': u'10', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46398', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${INDEX} = 10","*${data} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46413', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 11","*${data} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46406', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 12","*${data} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46407', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 13","*${data} = {u'available': True, u'chassisId': u'13', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46402', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${INDEX} = 14","*${data} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46412', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 15","*${data} = {u'available': True, u'chassisId': u'14', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46411', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${INDEX} = 16","*${data} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46408', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 17","*${data} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46410', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 18","*${data} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46414', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${INDEX} = 19","*${data} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46400', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*{\"time\":778328373894303,\"devices\":20,\"links\":38,\"clusters\":1}","*${devices} = 20","eNq9mDtrw0AQhP/L1inubvWw1QXHhdtg0oQU0ukEJiE21hEIwv89Em4ScoiMyUidHic+NLN7sxrk7fD+2kv1PEh/9lINcjqeo1Sicidt+Dj4MJ4cu8r8PDK5jPf7+G2Fm1+RTyvi52m6+7B73G724/N9rON04X6z3z1txydAjBbGCDdhzL/U6m+MeXDrCBimQTFMzcBwsCiW4Y0AY3QMjBzGKBgYHYphDaNSMrhSlGFRuGANpWA9jNEwvFHAFi0ZX6OFv4ZnYMAWNUoQ5Vp+UMFSumgJe2PFECXAorQMjBzGyBjesLA3HMMbK9gba4YoHSwKIwSmuqguH4ktnL4so31dkyXkjYYhSg2LQrFoCWMUDAy4bxhK32hgDM+oFIUrhdHMbxiXGJE4lTeUMS45eGvT5eeU1NamjEis8Jzils8bqTnFMdLXX1ozhEH5v7GGvcGIxKmNXv9hQHi5fAH4O25R","eNpTqc4qzs9LSSxJrFWwVaguVc/JzMsuVrdSiAayi4uSgSwgIyW1LDM5FcguVc9PszJABSbqOkDxgvyiErACY/VaED+luIQIvaaoeo0geksqCyAaXDyDXJ1DwGqKSxJLIIKOziGeYa4glTidqKenBwBG5D7y","*Length is 38","*${length} = 38","eNrtnV1rG0cUhv/LXqtwzpyPmfFdwabNTWqoc1GCCbK8bkVty6zWLSbov3dWAZOCNx3CaHzGVW68tmLt6uE9n3Nm/Lm7ud38ve1OPn7u1tfdSecCsveo7ANKcN2iWz48vEuv4KL7fdg87q9h0T0M682wHp+6E1l04/qu3zyO+xfW2/N+uFve9/fp+3F47Bfddf/XetVPv9htbk7g3/+W6RbbcTn26dUfT0/PTtP3t+ub/stdlqs/+3G7v756GvsvV7fL7fhr39+nh2IS7wFDRJ9eGId+Od7t75w+zv023X41rjf3Xz7f+PQw3eSXDxfnHy7SXR42Q/qPP9DucnrEm34Y+vSIHy936YH62341bobpfVbpY/bDevn1e5xd/Pzp4rfzs/Qu/fjHxf6HDoR3l7vd4rtJ8sTDCE20STOqeCFQSzT5mSY5tsqTBCm8LE8vAbUhQ399aXJ4UZqsGCE0J014dWmCgxelGVTSEx5emteFpCliVZqaxOljHWnm0XTPNFGdVZ5zXjOFIcF03RxQtmvrHqJIQ7bOVvPNbJLVpNk0zcgxwOF12RciqWQ2BkVmD3V02Rdzma/O8xsxKCB41xxQZzYGRQDP2pCtO6teM5tkNWk24Tlneh4KAtHXoXmVRROfaQZ8GaejYLblERDJ0+Ht/KqMMh15s9lRLslqymyaJoiCb0iXwWwrLrnzGFvzmN5oZpQiEHEIlVqbq2KtTVS7IYjT0/HhTX1VKDlCMes0c0lWk2YGTTVLk4RiaEiXajUEicNUBjXnMsVude6mr4eX5k2p7MjsQqV37LTS4kUeTXqm6Zis8pzvxClCUGoOqN2V30gg5BuydbPTR9kkq0mzCc85Q9NpJD38RAJiIZJoNQZJFOFKMSiTZsbihUO7LtP5FJ6kIWmadZnZJKtJswlDn1m8AA1B4tHQSyWbAoSRKxWWWKi3icGs4yRiCVyh5VHI1DGYjenIQhSOyizUJKb0iiK3o0wfjYb0fJLVlJlh50YTpJS7B3FSZ/AIXal2BxLZzd1jRD38kGEmzP+WJrHNEKRMwNFpQyTJahWUTbKakbdLM1VBMahAcy6TzS6gO4riD5+1IxQq0A1E87lOnBOtNJedSTOnQH/1XHN+WAYogobWgNqtg9ilupK5HVs3Wwflk6wmzSY850xVmZ7RuQoTCVyIpDiznSOHhJUW0LmYyxS0GoPEEXvEI9BivTjmlML7hmzdrtfMJVlNmhk0rS6vCQoiVOpsShZNfabJQef2WtldDuJUp2OFg4+k1LY1o8tBiaQHX6FEL0fSrsvMJVnNyJvQ5YzLdMrJ+ptzmXZzI0oXUOHsjlJtYvFm1ylzSRaQ5v+Aphel2JAure6nFFD0hJZ0meMyxeyGSkEv6GJzQO3u6aep4XH4+nzfpCqycc3s+Gs2yQI94mI07Y6/ogCTJZo5C7+IZmdlyIXkPhsydKtNd0UXmLE5aTq7k9kpQrpKhSUVO5Arqt1eXPKqVOHwvVK2HtVsLy659KgNkRSzvbhcktWMvAldzvXipilDOLrMcnXQ1NysMBfHpdrEZk9+zSZZID0qRlPM1kHMgbgxmnaPyyYJnl1DZm72aPzpj7OQO5p5obUgSRl7qLAWFErtsrJ6gJSQUPCV1oJCsdQoqNny3DGki+aAmj2Ri2TqbmJDtm62qMwmWU2aTXjOOZqB0VdodsRC04Vgdi7beXCVtrJk0swZIwa06zJDjBXy9nLSBLtGnkmymjQzaJqdiaNAqno09HLJZhJnrLSjRUsdIqV2t19EDlDhTza8GZTzW60ChCiNCdNwDQQgFU6EfDso5wN6Lsmjx8wJ6I4hVNoX5L+ieX72/vTd+58+JarfWVey3aP3HIIGbREqRbse1LHECqecvTGVzo56CAEpHC2/aGzKZWpLo1Zi/eXuH7Slj+g=","*${jsondata} = {u'flows': [{u'life': 0, u'isPermanent': True, u'packets': 0, u'treatment': {u'deferred': [], u'instructions': [{u'type': u'OUTPUT', u'port': -3}]}, u'groupId': 0, u'priority': 5, u'bytes': 0, u'state...","*Length is 100","*${length} = 100","*${devicedata} = {u'available': True, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${devicedata} = {u'available': True, u'chassisId': u'd', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46409', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000d","*[u'of:000000000000000a', u'of:000000000000000d']","*${devicedata} = {u'available': True, u'chassisId': u'e', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46405', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000e","*[u'of:000000000000000a', u'of:000000000000000d', u'of:000000000000000e']","*${devicedata} = {u'available': True, u'chassisId': u'b', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46415', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000b","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPUo8FAC+RFbE=","*${devicedata} = {u'available': True, u'chassisId': u'c', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46404', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000c","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGerB4LAHqAGwI=","*${devicedata} = {u'available': True, u'chassisId': u'f', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46416', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","*${id} = of:000000000000000f","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8TT0WAEUfIFY=","*${devicedata} = {u'available': True, u'chassisId': u'11', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46397', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000011","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oaF6LACPAyV2","*${devicedata} = {u'available': True, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46399', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9YbqsQBT8iqV","*${devicedata} = {u'available': True, u'chassisId': u'12', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46401', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000012","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY3UYwGT0C+2","*${devicedata} = {u'available': True, u'chassisId': u'10', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46398', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000010","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBuoxwIATs801Q==","*${devicedata} = {u'available': True, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46413', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMdEPRYAhL459w==","*${devicedata} = {u'available': True, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46406', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7ipeiwANe8/Gg==","*${devicedata} = {u'available': True, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46407', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnEj9VgAYl9EOg==","*${devicedata} = {u'available': True, u'chassisId': u'13', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46402', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000013","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hurxwIACeVJXA==","*${devicedata} = {u'available': True, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46412', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUG+sHgsALJdOfQ==","*${devicedata} = {u'available': True, u'chassisId': u'14', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46411', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${id} = of:0000000000000014","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3NBEPRYAymhToA==","*${devicedata} = {u'available': True, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46408', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRbqsQDjmFjG","*${devicedata} = {u'available': True, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46410', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRY4xC3VYwF4al3t","*${devicedata} = {u'available': True, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46414', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRY4xC1xiJupxwIAiNtjEQ==","*${devicedata} = {u'available': True, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46400', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'role...","eNqLLlXPT7MyQAWJ6joK2MRTcIin4hBPwiGejEM8Dbu4oSEO9TjEDY1wiBvgMMcEh7gpDnFc5hvjUI9D3BCXvRY4xC1xiJvhEDdXjwUAFL5oNg==","*{\"id\":\"of:000000000000000a\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"a\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46403\"}}","*${i} = of:000000000000000d","*{\"id\":\"of:000000000000000d\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"d\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46409\"}}","*${i} = of:000000000000000e","*{\"id\":\"of:000000000000000e\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"e\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46405\"}}","*${i} = of:000000000000000b","*{\"id\":\"of:000000000000000b\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"b\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46415\"}}","*${i} = of:000000000000000c","*{\"id\":\"of:000000000000000c\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"c\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46404\"}}","*${i} = of:000000000000000f","*{\"id\":\"of:000000000000000f\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"f\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46416\"}}","*${i} = of:0000000000000011","*{\"id\":\"of:0000000000000011\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"11\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46397\"}}","*{\"id\":\"of:0000000000000001\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"1\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46399\"}}","*${i} = of:0000000000000012","*{\"id\":\"of:0000000000000012\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"12\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46401\"}}","*${i} = of:0000000000000010","*{\"id\":\"of:0000000000000010\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"10\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46398\"}}","*{\"id\":\"of:0000000000000004\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"4\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46413\"}}","*{\"id\":\"of:0000000000000005\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"5\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46406\"}}","*{\"id\":\"of:0000000000000002\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"2\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46407\"}}","*${i} = of:0000000000000013","*{\"id\":\"of:0000000000000013\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"13\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46402\"}}","*{\"id\":\"of:0000000000000003\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"3\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46412\"}}","*${i} = of:0000000000000014","*{\"id\":\"of:0000000000000014\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"14\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46411\"}}","*{\"id\":\"of:0000000000000008\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"8\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46408\"}}","*{\"id\":\"of:0000000000000009\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"9\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46410\"}}","*{\"id\":\"of:0000000000000006\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"6\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46414\"}}","*{\"id\":\"of:0000000000000007\",\"type\":\"SWITCH\",\"available\":true,\"role\":\"MASTER\",\"mfr\":\"Nicira, Inc.\",\"hw\":\"Open vSwitch\",\"sw\":\"2.3.1-git4750c96\",\"serial\":\"None\",\"chassisId\":\"7\",\"annotations\":{\"protocol\":\"OF_13\",\"channelId\":\"10.0.0.121:46400\"}}","eNrF28tuIkcUBuD9PEWvohmLWHU5py4TsYrilRWiyUhZorpGaDyAgCjjtw8kC0wPRFWtOhS7lhH9129/dFVX++HhYdjz4cdGr3eLp99+/7x8el78MezS9uV1eL944o/yw/D+2yrO2Tfx4eO7IWw2X1bpeMTZ8WVAmoQGZkP8a+cOq816rh6N4vvZcHD+5fi+2bBebl34kg77uTwd+NdD2s8FHA/2aR2X+WXz93KXvg7b3WqzWx1e53D65Fl8WR5et6czGRPC4MLp0/fznxe/fv60eH7+5dNHhSjxu0QCUWlvRonY9UTsnIjdzIOz1bb8/CCdY9rRNmJBVDWik0xliYoa+S+P2217hsD/D/Bw0iF667Bok7wctL3xt8jfjNpwRscjBq7LIpHw8ByiJa6k1kcWNjasZJqPxiFKfMjuPkICcTlotNcHrc6DBqPIeChkWo0S6XvyMFaOrl5o2jZSqUMplUNZIjodV0Ioah3QW4cD4fjloDnrqyNAxLJENDpytJq2kVod0aNv2Mg0HY1DlOjA7jq8Pjb1dtCWmb5zKy2thFEkcUceQfOsRufnfedWGrJ3Zb8lOh+tQ5T4UL19eOExl82t8M13JUM6Hi5aWZaIhkc6/oS2kVodAbht2Mg0HY1DlOjQ3XXY7C9vRzC48VUN50FLAWQ6jOBZlCUi0RHReaBtpFKHkUabho1M0nEtBPV9K9NbR+DAY9lERp8HjUrT6bAKednUhkZHyFyWnX9qI7U6XIi6YSPTdFwJIYh12O46jNGjmxFWdF2XW+Y8K0tEoiOB1IK2kUodVnCpGjYySce1EJJYB2edeUDyGkerYHFjtWXOo1ZgqHgoL60xZYkoeCDTAhxtI3U8lEfGUsNGpvBoHqKIR+8dc8jC+9EqWOme63LlXUy6LBENj6ScpW2klkcAFRs2Mo1H4xBFPER3Ho7xy6mEtdj16hGEAFWWiIQHR88MbSOVPII8VtiwkUk8Woco4tF7xxwZBz1aB996jOY+aw8VrHJYloiGR8hK0zZSy8NF4Rs2Mo1H4xBFPKA7D2PiaFOw9eMTlTwi8wzKEpHwECCDom2kkkcU3LiGjUzi0TpEEQ/sziNHMdoTtLbnfV0VdVbjJyTvysMbgWXnv899XRUtJtuwkWk8roSg3hPkvbfMQRnjxg//Yderh2QuurJEFDzg32c0aRup5CEFV6xhI5N4tA5RxEN355EjG830Zd+1h9RZ2rJENDy8zp62kVoeFn1u2Mg0Ho1DFPHovWkOWnP1dqavHxnHrpMredRhyhKR8LAioKNtpJIHMMdTw0Ym8WgdooiH7c4jYZCXowbZlQconXVZIhoejnlL20gtD510bNjINB6NQxT9p2D3XXODToz3PW7s9ojzqLkSdDxiQFWWiISH48gNbSO1PLKIoWEj03hcCQF0PL6u1qt1Ovzw5+GnfwCLfOn8","eNqtyrEKgzAUQNHdr3hDBw1pMCaVUMjqVLDQQkeJmiEoRswLKKX/3vQfercD9/T2EdeIH9BACIHA4fynsra5P55dc2tfsNl1PiBvG85EAfnuRl3uVXHNYPB+cjaJlyklhbIXJSmMcTPo/KJrpmoeKKDp5/RRWLrVDJPFoMUP/YE26EomBLuMjLEvn3U19A==","eNqVl81qGzEURvd9ill5Nm3Rp39N6KpQsmqggb6AO8QDkxljD2QR+u6RnFGiq7sSwQuZAwfxeY6dw7zd3a/XrTthiK9v43YSA8T39IfuPP37oeHc4Wm7674cPlgZWUlYmdlQsyqyirBqZz1qVkdWE1ZnVtWsiawhrMmsqVkbWUtYm1l2NxdZR1iXWXY3H1lPWL+zQdZsiGwgbMisrlmINIaga4iMW4bftqvGy+sFz/A0H+h+2AeUQjA8LQg6IVTG2T2RRgRdETrj/KppR9AhYTLOr5qmBN0SNuP8qmlN0Dmx7ynBr5oGBV0UPuP8qmlT0FERMs6uKtOqkq4qRcaLqz78fXx8mbbj6bU/X9ZtPa7ztR+6/uE8Lr/m9QWq/99d4+jzOkC6d+/X6+0DgOH3uoz7Qd4Ou0Gi1SBrgywN8tOwHxTR6VadqnWq1KlSp7jOtep0rdOlTpc6zXRKtOpMrTOlzpQ6w3WqVWdrnS11ttRZrmv+MLpa50qdK3WO60Krztc6X+p8qfNMp2WrLtS6UOpCqQtcZ5qfbMEebUGebVEa309U6ZuVvCY0JyBKMKVprgtYXkD6AhIY8MKY5sKAJQakMSCRAa+Maa4MWGZAOgMSGvDS2ObSgKUGpDUgsQGvjW2uDVhuQHoDEhzw4tj2rz+WHJDmgEQHvDq2uTpg2QHpDkh4wMvjmssDlh6Q9oDEB7w+rrk+ktVHkvpIwX5auKI3f8bndRt/rst2Wed5vLz20zlJPn7bySg5RsfnG4O1Kv9T4PaOPE/LtIxbOrwBKHe7EQ==","eNpdyjkKgDAQQNHeU0whdgYnC27YexDFCEIEx0q8uyMYZMLndy+/wkn7STcMUGzUj+Eg8Njx5Uy+6rBSbwj7Og0W67pYqIfst5qtFlZH26bWsDXCms82mFrL1gprozWpdWydsC5aJ61S6gE5z0JF","eNpl0jtqw1AURdE+o3BlnMKg856+eAguNAoRGRI30fwJsQuZ5fKyT7W4a87LtjbH7+1yPn5tl9/HncNpvh7m6+fHWuiFXumV3tJbekfv6D29pw/0gT7SR/pEn+hpBGpcvBFqGBGjYmSMjhEySkbKaBkxo2bkjJ4RNIpG0mhaNC2YPr+s8JVl75X+2Ne9t/RK7+gtvad39IHe00f6QJ/oI/35ZIW3fB1EocbFm2FcqBgZo2OEjJKRMlpGzKgZOaNnBI2ikbRIGkx/bvfbfdn+2x8UHmu4","eNpN0Ttuw1AMRNHeq1CVLoDue/pnPUZiIHEKaf9IAJMz7AjMrXhOhu/fYxxO3u/XFwdxtaMNt7PF2DS2HF9XP/p/1iPryrqy7myKbFI2KZuczZHNymZls7MlskXZomxxtka2KluVrc62yDZlm7LN2R7ZrmxXtjtjzK+Ofuuo8nVGKoAigFNKmhzYA4NQREgSbIJRKCokC3bBMBQZkgbbYByKDsmDfTAQRYgkwkYYiaJEMmEnDEWRIqmwFcaiaLXUatZq0rr9PJ6P5/16+7w+/gAxu9yg","eNqN0LFOwzAUheHdT3EGpkitcp02TTYG3qAjYkCJ4UQEO8q1xNZn5zAgARP2Zv/+dOWmaXCtZduW/ArDVHLdy7qm3cPUIjQ/r7sR65LfPBz/t36/ji38Y6kTkwc3eIR38BP8DO/hF/gAH+GmznRvCkyFKTE1pshUmTJTF/+OpwMWrx5oYAQ78ASewR68gAM4gtIpndIpndIpndIpndIpnd/6Q8kpTOV9W1NNM5YMs2M/aMakv5o9PL6kuezP98t2sPbwtS0abk93nx7GW4A=","eNrN171qwzAQAOBXCZpdo/Nv7DW0NEsypNChlKLIci1wpWCbhBLy7pXSqUNvueXsSSdk7uOks30VnTlbbWbRvl2F7UQrfN/Kv5cSiVi+TyZMHl63L5vnMFZnZUd1HEOwV+NsEjH5OBC7/e4xzH/1UxxYbSeVrLZOpyE4XEJsfzJudT5c7KKHEJtjLEvzFB4+7VLUpdRNFeNmsmqMz/DOhLEe1DzbeRtTjAkp5/yiFutdyP0qTpNfvPZxwf7pA/LfFc6Z8b4CZBpvyKAtqkLm4nZL/vV23Lwd1dugXsPNa6jeEvUeuXmPRC/gXs3Nq6n1LVBvz83bU+tbYV4Abt57RgRw3tRogfmBqV60QUPGzptRTzCgYMkOLKkVXqM7uuAGLqgtC//EKrl5S+qGRlu0ZHeCyQcY7dD3xbwOcE4FZ2iB2YGpXkC9wK5hAbljoa8kueYGXlM3NP5Garh5G2p9JeqtuHkrqhf/Saq5eWvqfo71fb/9ADaKa7A=","*Length is 4818","*${jsondata} = {u'devices': [{u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira...","*${data} = {u'available': False, u'chassisId': u'a', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46403', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'd', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46409', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'e', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46405', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'b', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46415', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'c', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46404', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'f', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46416', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'11', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46397', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'1', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46399', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'12', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46401', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'10', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46398', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'4', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46413', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'5', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46406', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'2', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46407', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'13', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46402', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'3', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46412', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'14', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46411', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'ro...","*${data} = {u'available': False, u'chassisId': u'8', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46408', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'9', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46410', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'6', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46414', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*${data} = {u'available': False, u'chassisId': u'7', u'sw': u'2.3.1-git4750c96', u'hw': u'Open vSwitch', u'annotations': {u'channelId': u'10.0.0.121:46400', u'protocol': u'OF_13'}, u'mfr': u'Nicira, Inc.', u'rol...","*{\"time\":778334956950892,\"devices\":0,\"links\":0,\"clusters\":0}","*${max-switches} = 20","*${max} = 20","*${max}","*20","*${SWITCHES_RESULT_FILE}, ${max}\\n","*ONOS Suite Setup","*<p>Transfers the ONOS dist over to the test vm and start the controller. We will leverage the bash script, \"onos-install\" to do this.\x3c/p>","*${CONTROLLER_IP}, ${CONTROLLER_USER}","*Create Controller IP List","*<p>Creates a list of controller ips for a cluster. When creating a cluster, be sure to set each variable to %{OC} env vars in the variables section\x3c/p>","*@{controller_list} = BuiltIn.Create List","*${CONTROLLER_IP}","*@{controller_list} = [ 10.0.0.152 ]","*@{controller_list}","*${rc} = OperatingSystem.Run And Return Rc","*<p>Runs the given command in the system and returns the return code.\x3c/p>","*onos-package","*Running command 'onos-package 2&gt;&amp;1'","*${rc} = 0","*${rc}, 0","*onos-install -f ${ip}","*Running command 'onos-install -f 10.0.0.152 2&gt;&amp;1'","*Create HTTP Sessions","*<p>Creates an http session with all controllers in the cluster. Session names are set to respective ips.\x3c/p>","*${HEADERS} = Collections.Create Dictionary","*<p>Creates and returns a dictionary based on given items.\x3c/p>","*Content-Type, application/json","*${HEADERS} = {u'Content-Type': u'application/json'}","*RequestsLibrary.Create Session","*<p>Create Session: create a HTTP session to a server\x3c/p>","*${ip}, <a href=\"http://${ip}:${RESTCONFPORT}\">http://${ip}:${RESTCONFPORT}\x3c/a>, headers=${HEADERS}","*Argument types are:\n&lt;type 'bool'&gt;","*60s, 2s, Verify All Controller are up","*Verify All Controller are up","*<p>Verifies each controller is up by issuing a rest call and getting a 200\x3c/p>","*Starting new HTTP connection (1): 10.0.0.152","*ConnectionError: ('Connection aborted.', error(111, 'Connection refused'))","*Starting new HTTP connection (2): 10.0.0.152","*Starting new HTTP connection (3): 10.0.0.152","*Starting new HTTP connection (4): 10.0.0.152","*Starting new HTTP connection (5): 10.0.0.152","*${resp} = &lt;Response [404]&gt;","eNrtVLFugzAQ3fMVJw9s1E2USimELFWqtkODaH7AwDUggU3tCy1/XwyNI6aqWwduunf33tPTSbZXUVhQXXknCheeBShyB2okAQVR4+PHuWwj9qAkoST/2DXIIBtRxAi/iFubMCuENkjR89vB32zu7v0l486OSqrQor3WSsP6dg2viuBRnWVu99wRBjqfZElV3l1Trmz7dDzGsE+SQxJYs1GzcqTGdrFWaYU1iCxDY0p5Aq6kMrxd8hzbsh/eQILCKBmMIj0EgL6m2X4WY38NooFfxuWlMbWohovG6hM15pB2sO0PqfE9Yi9I1AWcD0aOOSBrwHa/ELZc7MIF/LFmwSyYBf9bMDzxyTfH3df8DW3wEFU=","*404 != 200","*${resp} = &lt;Response [401]&gt;","*401 != 200","*${resp} = &lt;Response [503]&gt;","*{\"code\":503,\"message\":\"Service org.onosproject.net.device.DeviceService not found\"}","*503 != 200","*{\"devices\":[]}","*ONOS Suite Teardown","*<p>Stop ONOS on Controller VMs and grabs karaf logs on each controller (put them in /tmp)\x3c/p>","*onos-kill","*Running command 'onos-kill 2&gt;&amp;1'","*cp ${SWITCHES_RESULT_FILE} ${JENKINS_WORKSPACE}","*Running command 'cp /home/fedora/workspace/tools/switches.csv /home/fedora/workspace/ONOS-Stable/ 2&gt;&amp;1'","*rm ${SWITCHES_RESULT_FILE}","*Running command 'rm /home/fedora/workspace/tools/switches.csv 2&gt;&amp;1'","*Clean Mininet System","*<p>Cleans the mininet environment (sudo mn -c)\x3c/p>","*Run Command On Remote System","*${mininet_system}, sudo mn -c, ${CONTROLLER_USER}, ${LINUX_PROMPT}, 600s","*Attempting to execute sudo mn -c on 10.0.0.121","*${conn_id} = 5","*Read output: Last login: Wed Jul  1 17:02:51 2015 from 10.0.0.121\n[fedora@ip-10-0-0-121 ~]$","*sudo mn -c","eNrFUsFq3DAQvfsrhlC6rYNWcW7ZEiiUnnooNKUEzBIca7xWV9YIz9i7h5Jvr2ScjX3qsegympn35klv8jyHH9jRaP0B8FwjM9TkpSfnsGdNTehJqCaXYlNJFSppWYfYz9rTGTk7Wucq5xY4eIPBGwoSCCLmqaYewYm6xDSyooC+cXQy021BNpjwfBJkgc7jGWuwI8Pt+4N8Am1w1H5w7iJC3f1fHSEJSSpUA1c8GJqbr7J8+dW/B3+EpqcOtHQh67vUn0I9xok+n2NHB57jfEuDvIYxv+YjZ+CxKEAG79Hxujj7esQ+1uBiYhYYqjP8ATz0GEARbEwob9Td/noTs4wGNqxN0N7t9GaifOP8/uthwZR+auRa4suV2A6j1PsCnGVRz/0/qiupyUJn/ZGjXyAtQuSXqBsaIoXSPmY2TA3ALZ1W2j+U6mlb7irnh26331+n9rLcGXuwku4fNyvsNPdbNCuNZakcQme99ShxNUwc3FP6tbjfS0vnlt2EfmgHkQQ3dPIzx6sBS9DPKXf/Nb4nOiCr2pa51Z2fN+BFz3edTxO+OKz8EOJKd8Gh4DYrGzTUV59tUMWNSqe4LeBl/+4vjaRONQ==","*${output} = *** Removing excess controllers/ofprotocols/ofdatapaths/pings/noxes\nkillall controller ofprotocol ofdatapath ping nox_core lt-nox_core ovs-openflowd ovs-controller udpbwtest mnexec ivs 2&gt; /dev/null\n...","*Get Karaf Logs","*<p>Compresses all the karaf log files on each controler and puts them on your pybot execution machine (in /tmp)\x3c/p>","*${controller}, tar -zcvf /tmp/${SUITE NAME}.${controller}.tar.gz ${ONOS_HOME}/log","*Attempting to execute tar -zcvf /tmp/ScalePOC.10.0.0.152.tar.gz /opt/onos/log on 10.0.0.152","*${conn_id} = 6","*Read output: Last login: Wed Jul  1 17:03:15 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","*tar -zcvf /tmp/ScalePOC.10.0.0.152.tar.gz /opt/onos/lo \ng","*tar: Removing leading `/' from member names\n/opt/onos/log\n[fedora@ip-10-0-0-152 ~]$","*${output} = tar: Removing leading `/' from member names\n/opt/onos/log\n[fedora@ip-10-0-0-152 ~]$","*SSHLibrary.Open Connection","*${controller}, prompt=${LINUX_PROMPT}, timeout=${prompt_timeout}","*${CONTROLLER_USER}, ${USER_HOME}/.ssh/id_rsa, any","*Read output: Last login: Wed Jul  1 17:03:21 2015 from 10.0.0.121\n[fedora@ip-10-0-0-152 ~]$","*SSHLibrary.Get File","*<p>Downloads file(s) from the remote machine to the local machine.\x3c/p>","*/tmp/${SUITE NAME}.${controller}.tar.gz, /tmp/","*[chan 1] Opened sftp connection (server version 3)","*'/tmp/ScalePOC.10.0.0.152.tar.gz' -&gt; '/tmp/ScalePOC.10.0.0.152.tar.gz'"]);
-</script>
-<script type="text/javascript">
-window.output["generatedTimestamp"] = "20150701 17:03:07 GMT 00:00";
-</script>
-<script type="text/javascript">
-window.output["errors"] = [];
-</script>
-<script type="text/javascript">
-window.output["stats"] = [[{"elapsed":"00:00:22","fail":0,"label":"Critical Tests","pass":1},{"elapsed":"00:00:22","fail":0,"label":"All Tests","pass":1}],[{"elapsed":"00:00:22","fail":0,"label":"done","pass":1}],[{"elapsed":"00:01:01","fail":0,"id":"s1","label":"ScalePOC","name":"ScalePOC","pass":1}]];
-</script>
-<script type="text/javascript">
-window.output["generatedMillis"] = 60908;
-</script>
-<script type="text/javascript">
-window.output["baseMillis"] = 1435770126092;
-</script>
-<script type="text/javascript">
-window.settings = {"defaultLevel":"INFO","minLevel":"INFO","reportURL":"report.html","splitLogBase":"log","title":""};
-</script>
-<title></title>
-</head>
-<body>
-<div id="javascript-disabled">
-  <h1>Opening Robot Framework log failed</h1>
-  <ul>
-    <li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
-    <li>Make sure you are using a <b>modern enough browser</b>. Firefox 3.5, IE 8, or equivalent is required, newer browsers are recommended.</li>
-    <li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
-  </ul>
-</div>
-<script type="text/javascript">removeJavaScriptDisabledWarning();</script>
-
-<div id="header"></div>
-<div id="statistics-container"></div>
-
-<script type="text/javascript">
-$(document).ready(function() {
-    try {
-        var topsuite = window.testdata.suite();
-    } catch (error) {
-        addJavaScriptDisabledWarning(error);
-        return;
-    }
-    initLayout(topsuite.name, 'Log');
-    addStatistics();
-    addErrors();
-    addTestExecutionLog(topsuite);
-    addLogLevelSelector(window.settings['minLevel'], window.settings['defaultLevel']);
-    if (window.location.hash) {
-        makeElementVisible(window.location.hash.substring(1));
-    } else {
-        expandSuite(topsuite);
-    }
-});
-
-function addLogLevelSelector(minLevel, defaultLevel) {
-    var controller = LogLevelController(minLevel, defaultLevel);
-    if (controller.showLogLevelSelector()) {
-        var selector = $.tmpl('logLevelSelectorTemplate', controller);
-        selector.find('select').val(controller.defaultLogLevel());
-        selector.appendTo($('#top-right-header'));
-        $('#report-or-log-link').find('a').css({'border-bottom-left-radius': '0'});
-        setMessageVisibility(controller.defaultLogLevel());
-    }
-}
-
-function addErrors() {
-    var errors = window.testdata.errorIterator();
-    if (errors.hasNext()) {
-        $.tmpl('errorHeaderTemplate').appendTo($('body'));
-        drawErrorsRecursively(errors, $('#errors'));
-    }
-}
-
-function drawErrorsRecursively(errors, target) {
-    var elements = popFromIterator(errors, 10);
-    $.tmpl('errorTemplate', elements).appendTo(target);
-    if (errors.hasNext())
-        setTimeout(function () { drawErrorsRecursively(errors, target); }, 0);
-    else {
-        // Errors may have moved scroll position. Resetting location re-scrolls.
-        if (window.location.hash)
-            window.location.replace(window.location.hash);
-        highlightLinkTarget();
-    }
-}
-
-function highlightLinkTarget() {
-    if (window.location.hash) {
-        var target = $(window.location.hash);
-        highlight(target);
-    }
-}
-
-function highlight(element, color) {
-    if (color === undefined)
-        color = 242;
-    if (color < 255) {
-        element.css({'background-color': 'rgb('+color+','+color+','+color+')'});
-        setTimeout(function () { highlight(element, color+1); }, 300);
-    } else {
-        element.css({'background-color': ''});
-    }
-}
-
-function popFromIterator(iterator, upTo) {
-    var result = [];
-    while (iterator.hasNext() > 0 && result.length < upTo)
-        result.push(iterator.next());
-    return result;
-}
-
-function makeElementVisible(id) {
-    window.testdata.ensureLoaded(id, function (ids) {
-        util.map(ids, expandElementWithId);
-        if (ids.length) {
-            expandCriticalFailed(window.testdata.findLoaded(util.last(ids)));
-            window.location.hash = id;
-            highlightLinkTarget();
-        }
-    });
-}
-
-function addTestExecutionLog(main) {
-    $('body').append($('<h2>Test Execution Log</h2>'),
-                     $.tmpl('suiteTemplate', main));
-}
-</script>
-
-<script type="text/x-jquery-tmpl" id="totalStatisticsRowTemplate">
-  <tr class="row-${$item.index}">
-    <td class="stats-col-name">
-      <div class="stat-name">
-        <span>{{html label}}</span>
-      </div>
-    </td>
-    {{tmpl($data) 'statColumnsTemplate'}}
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="tagStatisticsRowTemplate">
-  <tr class="row-${$item.index}">
-    <td class="stats-col-name" title="{{html doc}}">
-      <div class="stat-name">
-        <span>{{html label}}</span>
-        {{if info}}(${info}){{/if}}
-      </div>
-      <div class="tag-links">
-        {{each links}}
-        <span>[<a href="{{html $value.url}}" title="{{html $value.url}}">{{html $value.title}}</a>]</span>
-        {{/each}}
-      </div>
-    </td>
-    {{tmpl($data) 'statColumnsTemplate'}}
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="suiteStatisticsRowTemplate">
-  <tr onclick="makeElementVisible('${id}')" class="row-${$item.index}">
-    <td class="stats-col-name" title="{{html label}}">
-      <div class="stat-name">
-        <a href="#${id}"><span class="parent-name">{{html formatParentName}}</span>{{html name}}</a>
-      </div>
-    </td>
-    {{tmpl($data) 'statColumnsTemplate'}}
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="errorHeaderTemplate">
-  <h2>Test Execution Errors</h2>
-  <table id="errors"></table>
-</script>
-
-<script type="text/x-jquery-tmpl" id="errorTemplate">
-  <tr id="${id}" class="message-row">
-    <td class="error-time">
-      {{if link}}
-      <a onclick="makeElementVisible('${link}')" href="#${link}" title="Link to details">${date} ${time}</a>
-      {{else}}
-      ${date} ${time}
-      {{/if}}
-    </td>
-    <td class="${level.toLowerCase()} level">${level}</td>
-    <td class="message">{{html text}}</td>
-    <td class="select-message" onclick="javascript:selectMessage('${id}')" title="Select message text">
-      <div></div>
-    </td>
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="suiteTemplate">
-  <div id="${id}" class="suite">
-    <div class="element-header closed" onclick="toggleSuite('${id}')">
-      <div class="element-header-left" title="{{html fullName}}">
-        <span class="elapsed" title="Elapsed time">${times.elapsedTime}</span>
-        <span class="${status.toLowerCase()}">TEST SUITE: </span>
-        <span class="name">{{html name}}</span>
-      </div>
-      <div class="element-header-right" onclick="stopPropagation(event)" title="">
-        <a class="expand" title="Expand all" href="javascript:expandAll('${id}')"></a>
-        <a class="collapse" title="Collapse all" href="javascript:collapseAll('${id}')"></a>
-        <a class="link" title="Link to this suite" href="#${id}" onclick="makeElementVisible('${id}')"></a>
-      </div>
-      <div class="element-header-toggle" title="Toggle visibility"></div>
-    </div>
-    <div class="children">
-      <table class="metadata">
-        <tr>
-          <th>Full Name:</th>
-          <td>{{html fullName}}</td>
-        </tr>
-        {{if doc()}}
-        <tr>
-          <th>Documentation:</th>
-          <td class="doc">{{html doc()}}</td>
-        </tr>
-        {{/if}}
-        {{each metadata}}
-        <tr>
-          <th>{{html $value[0]}}:</th>
-          <td class="doc">{{html $value[1]}}</td>
-        </tr>
-        {{/each}}
-        {{if source}}
-        <tr>
-          <th>Source:</th>
-          {{if relativeSource}}
-          <td><a href="${relativeSource}">{{html source}}</a></td>
-          {{else}}
-          <td>{{html source}}</td>
-          {{/if}}
-        </tr>
-        {{/if}}
-        <tr>
-          <th>Start / End / Elapsed:</th>
-          <td>${times.startTime} / ${times.endTime} / ${times.elapsedTime}</td>
-        </tr>
-        <tr>
-          <th>Status:</th>
-          <td>{{tmpl($data) 'suiteStatusMessageTemplate'}}</td>
-        </tr>
-        {{if message()}}
-        <tr>
-          <th>Message:</th>
-          <td class="message">{{html message()}}</td>
-        </tr>
-        {{/if}}
-      </table>
-    </div>
-  </div>
-</script>
-
-<script type="text/x-jquery-tmpl" id="testTemplate">
-  <div id="${id}" class="test">
-    <div class="element-header closed" onclick="toggleTest('${id}')">
-      <div class="element-header-left" title="{{html fullName}}">
-        <span class="elapsed" title="Elapsed time">${times.elapsedTime}</span>
-        <span class="${status.toLowerCase()}">TEST CASE: </span>
-        <span class="name">{{html name}}</span>
-        {{if !isCritical}}(non-critical){{/if}}
-      </div>
-      <div class="element-header-right" onclick="stopPropagation(event)" title="">
-        <a class="expand" title="Expand all" href="javascript:expandAll('${id}')"></a>
-        <a class="collapse" title="Collapse all" href="javascript:collapseAll('${id}')"></a>
-        <a class="link" title="Link to this test" href="#${id}" onclick="makeElementVisible('${id}')"></a>
-      </div>
-      <div class="element-header-toggle" title="Toggle visibility"></div>
-    </div>
-    <div class="children">
-      <table class="metadata">
-        <tr>
-          <th>Full Name:</th>
-          <td>{{html fullName}}</td>
-        </tr>
-        {{if doc()}}
-        <tr>
-          <th>Documentation:</th>
-          <td class="doc">{{html doc()}}</td>
-        </tr>
-        {{/if}}
-        {{if tags.length}}
-        <tr>
-          <th>Tags:</th>
-          <td>{{html tags.join(', ')}}</td>
-        </tr>
-        {{/if}}
-        {{if timeout}}
-        <tr>
-          <th>Timeout:</th>
-          <td>{{html timeout}}</td>
-        </tr>
-        {{/if}}
-        <tr>
-          <th>Start / End / Elapsed:</th>
-          <td>${times.startTime} / ${times.endTime} / ${times.elapsedTime}</td>
-        </tr>
-        <tr>
-          <th>Status:</th>
-          <td><span class="${status.toLowerCase()}">${status}</span> ({{if isCritical}}critical{{else}}non-critical{{/if}})</td>
-        </tr>
-        {{if message()}}
-        <tr>
-          <th>Message:</th>
-          <td class="message">{{html message()}}</td>
-        </tr>
-        {{/if}}
-      </table>
-    </div>
-  </div>
-</script>
-
-<script type="text/x-jquery-tmpl" id="keywordTemplate">
-  <div id="${id}" class="keyword">
-    <div class="element-header closed" onclick="toggleKeyword('${id}')">
-      <div class="element-header-left" title="{{html name}}">
-        <span class="elapsed" title="Elapsed time">${times.elapsedTime}</span>
-        <span class="${status.toLowerCase()}">${type}: </span>
-        <span class="name">{{html name}}</span>
-        <span class="arg">{{html arguments}}</span>
-      </div>
-      <div class="element-header-right" onclick="stopPropagation(event)">
-        <a class="expand" title="Expand all" href="javascript:expandAll('${id}')"></a>
-        <a class="collapse" title="Collapse all" href="javascript:collapseAll('${id}')"></a>
-        <a class="link" title="Link to this keyword" href="#${id}" onclick="makeElementVisible('${id}')"></a>
-      </div>
-      <div class="element-header-toggle" title="Toggle visibility"></div>
-    </div>
-    <div class="children">
-      <table class="metadata keyword-metadata">
-        {{if doc()}}
-        <tr>
-          <th>Documentation:</th>
-          <td class="doc">{{html doc()}}</td>
-        </tr>
-        {{/if}}
-        {{if timeout}}
-        <tr>
-          <th>Timeout:</th>
-          <td>{{html timeout}}</td>
-        </tr>
-        {{/if}}
-        <tr>
-          <th>Start / End / Elapsed:</th>
-          <td>${times.startTime} / ${times.endTime} / ${times.elapsedTime}</td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</script>
-
-<script type="text/x-jquery-tmpl" id="messageTemplate">
-  <table id="${id}" class="messages ${level.toLowerCase()}-message">
-    <tr class="message-row">
-      <td class="time">${time}</td>
-      <td class="${level.toLowerCase()} level">${level}</td>
-      <td class="message">{{html text}}</td>
-      <td class="select-message" onclick="javascript:selectMessage('${id}')" title="Select message text">
-        <div></div>
-      </td>
-    </tr>
-  </table>
-</script>
-
-<script type="text/x-jquery-tmpl" id="logLevelSelectorTemplate">
-  <div id="log-level-selector">
-  Log level:
-    <select onchange="logLevelSelected(this.options[selectedIndex].value)">
-      <option value="2">INFO</option>
-      <option value="1">DEBUG</option>
-      {{if showTrace()}}<option value="0">TRACE</option>{{/if}}
-    </select>
-  </div>
-</script>
-
-</body>
-</html>
diff --git a/TestON/RobotTests/output.xml b/TestON/RobotTests/output.xml
deleted file mode 100644
index 409f32e..0000000
--- a/TestON/RobotTests/output.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<robot generated="20150701 17:09:18.724" generator="Robot 2.8.7 (Python 2.7.10 on linux2)">
-<suite source="/tmp/ONLabTest/TestON/RobotTests/ScalePOC.robot" id="s1" name="ScalePOC">
-<kw type="setup" name="ONOS Suite Setup">
-<doc>Transfers the ONOS dist over to the test vm and start the controller. We will leverage the bash script, "onos-install" to do this.</doc>
-<arguments>
-<arg>${CONTROLLER_IP}</arg>
-<arg>${CONTROLLER_USER}</arg>
-</arguments>
-<kw type="kw" name="Create Controller IP List">
-<doc>Creates a list of controller ips for a cluster. When creating a cluster, be sure to set each variable to %{OC} env vars in the variables section</doc>
-<arguments>
-</arguments>
-<kw type="kw" name="@{controller_list} = BuiltIn.Create List">
-<doc>Returns a list containing given items.</doc>
-<arguments>
-<arg>${CONTROLLER_IP}</arg>
-</arguments>
-<msg timestamp="20150701 17:09:18.928" level="INFO">@{controller_list} = [ 10.0.0.152 ]</msg>
-<status status="PASS" endtime="20150701 17:09:18.928" starttime="20150701 17:09:18.928"></status>
-</kw>
-<kw type="kw" name="BuiltIn.Set Suite Variable">
-<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
-<arguments>
-<arg>@{controller_list}</arg>
-</arguments>
-<msg timestamp="20150701 17:09:18.929" level="INFO">@{controller_list} = [ 10.0.0.152 ]</msg>
-<status status="PASS" endtime="20150701 17:09:18.929" starttime="20150701 17:09:18.928"></status>
-</kw>
-<status status="PASS" endtime="20150701 17:09:18.929" starttime="20150701 17:09:18.927"></status>
-</kw>
-<kw type="kw" name="${rc} = OperatingSystem.Run And Return Rc">
-<doc>Runs the given command in the system and returns the return code.</doc>
-<arguments>
-<arg>onos-package</arg>
-</arguments>
-<msg timestamp="20150701 17:09:18.937" level="INFO">Running command 'onos-package 2&gt;&amp;1'</msg>
-<status status="FAIL" endtime="20150701 17:09:21.094" starttime="20150701 17:09:18.929"></status>
-</kw>
-<status status="FAIL" endtime="20150701 17:09:21.100" starttime="20150701 17:09:18.924"></status>
-</kw>
-<test id="s1-t1" name="Find Max Switches By Scaling">
-<doc>Find the max number of switches from 10 until reaching 20 in steps of 10. The following checks are made through REST APIs:
-- Verify device count is correct
-- Verify device status is available
-- Verify device roles are MASTER (default role in case of standalone controller)
-- Verify topology recognizes corret number of devices (Through api "/topology")
-- Observe each device individually
-- Observe links, hosts, and flows through the controller
-- Observe device info at lower level on mininet (Written for PoC). Shows flows, links, and ports. Checks can be easily implemented at that level as well
-- STOP Mininet Topo
-- Verify device count is zero
-- Verify topology sees no devices (Through api "/topology")</doc>
-<tags>
-<tag>done</tag>
-</tags>
-<status status="FAIL" endtime="20150701 17:09:21.103" critical="yes" starttime="20150701 17:09:21.101">Test execution stopped due to a fatal error.</status>
-</test>
-<kw type="teardown" name="ONOS Suite Teardown">
-<doc>Stop ONOS on Controller VMs and grabs karaf logs on each controller (put them in /tmp)</doc>
-<arguments>
-</arguments>
-<kw type="kw" name="${rc} = OperatingSystem.Run And Return Rc">
-<doc>Runs the given command in the system and returns the return code.</doc>
-<arguments>
-<arg>onos-kill</arg>
-</arguments>
-<msg timestamp="20150701 17:09:21.114" level="INFO">Running command 'onos-kill 2&gt;&amp;1'</msg>
-<msg timestamp="20150701 17:09:21.371" level="INFO">${rc} = 1</msg>
-<status status="PASS" endtime="20150701 17:09:21.370" starttime="20150701 17:09:21.105"></status>
-</kw>
-<errors>
-<msg timestamp="20150701 17:09:21.372" level="ERROR">Execution stopped by user.</msg>
-</errors>
-</robot>
diff --git a/TestON/RobotTests/report.html b/TestON/RobotTests/report.html
deleted file mode 100644
index 342cfa8..0000000
--- a/TestON/RobotTests/report.html
+++ /dev/null
@@ -1,2361 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta http-equiv="Pragma" content="no-cache">
-<meta http-equiv="Expires" content="-1">
-<meta http-equiv="X-UA-Compatible" content="IE=edge">
-<meta content="Robot Framework 2.8.7 (Python 2.7.10 on linux2)" name="Generator">
-<link rel="icon" type="image/x-icon" href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAAAIAAAAAAAAAAAAAEAAAAAAAAAAAAAAAJEBoACtnfgA5cYYAERsiAEx2lAAbKkQAcazBACZCVwAcM1cAK0ucAAMDBQAnQncASG+FABkoVQAyWmgA6f8SgvH/Ij99+GLyIinyJfn/Yi//KSLzUy9iZogpIld3/4JVVTkid7vyUjNVNVJEAGOZ6Z7pXwAABpmZkRiLAAAGiJZpmGAAAEEt3SXdxAAATC7o/u3EAAC8MRZpjasAAAY1VVVTYAAABKqqqqpAAAAADKqq4AAAAAAAv4sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAADgAwAA4AcAAOAHAADgBwAAwAcAAOAHAADgDwAA8A8AAPg/AAD+fwAA">
-<style media="all" type="text/css">
-/* Generic and misc styles */
-body {
-    font-family: Helvetica, sans-serif;
-    font-size: 0.8em;
-    color: black;
-    padding: 6px;
-    background: white;
-}
-table {
-    table-layout: fixed;
-    word-wrap: break-word;
-    empty-cells: show;
-    font-size: 1em;
-}
-th, td {
-    vertical-align: top;
-}
-br {
-    mso-data-placement: same-cell; /* maintain line breaks in Excel */
-}
-a, a:link, a:visited {
-    text-decoration: none;
-    color: blue;
-}
-a > img {
-    border: 1px solid blue !important;
-}
-a:hover, a:active {
-    text-decoration: underline;
-    color: purple;
-}
-.parent-name {
-    font-size: 0.7em;
-    letter-spacing: -0.07em;
-}
-.message {
-    white-space: pre-wrap;
-}
-/* Headers */
-#header {
-    width: 65em;
-    height: 3em;
-    margin: 6px 0;
-}
-h1 {
-    float: left;
-    margin: 0 0 0.5em 0;
-    width: 75%;
-}
-h2 {
-    clear: left;
-}
-#generated {
-    float: right;
-    text-align: right;
-    font-size: 0.9em;
-    white-space: nowrap;
-}
-/* Documentation headers */
-.doc > h2 {
-    font-size: 1.2em;
-}
-.doc > h3 {
-    font-size: 1.1em;
-}
-.doc > h4 {
-    font-size: 1.0em;
-}
-/* Status text colors -- !important allows using them in links */
-.error, .fail {
-    color: red !important;
-    font-weight: bold;
-}
-.pass {
-    color: #009900 !important;
-}
-.warn {
-    color: #FFCC00 !important;
-    font-weight: bold;
-}
-.not-run {
-    color: #444444 !important;
-}
-/* Top right header */
-#top-right-header {
-    position: fixed;
-    top: 0;
-    right: 0;
-    z-index: 1000;
-    width: 12em;
-    text-align: center;
-}
-#report-or-log-link a {
-    display: block;
-    background: black;
-    color: white;
-    text-decoration: none;
-    letter-spacing: 0.1em;
-    padding: 0.3em 0;
-    border-bottom-left-radius: 4px;
-}
-#report-or-log-link a:hover {
-    color: yellow;
-}
-#log-level-selector {
-    padding: 0.3em 0;
-    font-size: 0.9em;
-    border-bottom-left-radius: 4px;
-    background: lightgray;
-}
-/* Statistics table */
-.statistics {
-    width: 65em;
-    border-collapse: collapse;
-    empty-cells: show;
-    margin-bottom: 1em;
-}
-.statistics tr:hover {
-    background: #ECECF7;
-    cursor: pointer;
-}
-.statistics th, .statistics td {
-    border: 1px solid black;
-    padding: 0.1em 0.3em;
-}
-.statistics th {
-    background-color: #DCDCF0;
-    padding: 0.2em 0.3em;
-}
-.statistics td {
-    vertical-align: middle;
-}
-.stats-col-stat {
-    width: 4.5em;
-    text-align: center;
-}
-.stats-col-elapsed {
-    width: 5.5em;
-    text-align: center;
-}
-.stats-col-graph {
-    width: 9em;
-}
-th.stats-col-graph:hover {
-    cursor: default;
-}
-.stat-name {
-    float: left;
-}
-.stat-name a, .stat-name span {
-    font-weight: bold;
-}
-.tag-links {
-    font-size: 0.9em;
-    float: right;
-    margin-top: 0.05em;
-}
-.tag-links span {
-    margin-left: 0.2em;
-}
-/* Statistics graph */
-.graph, .empty-graph {
-    border: 1px solid black;
-    width: auto;
-    height: 7px;
-    padding: 0;
-    background: red;
-}
-.empty-graph {
-    background: #E9E9E9;
-}
-.pass-bar, .fail-bar {
-    float: left;
-    height: 100%;
-}
-.pass-bar {
-    background: #00F000;
-}
-/* Tablesorter - adapted from provided Blue Skin */
-.tablesorter-header {
-    background-image: url(data:image/gif;base64,R0lGODlhCwAJAIAAAH9/fwAAACH5BAEAAAEALAAAAAALAAkAAAIRjAOnBr3cnIr0WUjTrC9e9BQAOw==);
-    background-repeat: no-repeat;
-    background-position: center right;
-    cursor: pointer;
-}
-.tablesorter-header:hover {
-    background-color: #B8C8E3;
-}
-.tablesorter-headerAsc {
-    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlBWnFr3cnIr0WQOyBmvzp13CpxQAOw==);
-    background-color: #B8C8E3 !important;
-}
-.tablesorter-headerDesc {
-    background-image: url(data:image/gif;base64,R0lGODlhCwAJAKEAAAAAAH9/fwAAAAAAACH5BAEAAAIALAAAAAALAAkAAAIUlAWnBr3cnIr0WROyDmvzp13CpxQAOw==);
-    background-color: #B8C8E3 !important;
-}
-.sorter-false {
-    background-image: none;
-    cursor: default;
-}
-.sorter-false:hover {
-    background-color: #DCDCF0;
-}
-</style>
-<style media="all" type="text/css">
-/* Generic table styles */
-table {
-    margin: 0 1px;
-    background: white;
-}
-tr {
-    background: white;
-}
-th {
-    background: #DCDCF0;
-    color: black;
-}
-/* Summary and total/tag/suite details */
-.details {
-    border: 1px solid black;
-    border-collapse: collapse;
-    clear: both;
-    width: 65em;
-    margin-bottom: 1em;
-}
-.details th {
-    background: white;
-    width: 10em;
-    white-space: nowrap;
-    text-align: left;
-    vertical-align: top;
-    padding: 0.2em 0.4em;
-}
-.details td {
-    vertical-align: top;
-    padding: 0.2em 0.4em;
-}
-.selector th, .selector td {
-    padding-top: 0.5em;
-    padding-bottom: 0.5em;
-    white-space: normal;
-}
-.first-selector th, .first-selector td{
-    padding-bottom: 0.2em;
-}
-.middle-selector th, .middle-selector td {
-    padding-top: 0.2em;
-    padding-bottom: 0.2em;
-}
-.last-selector th, .last-selector td{
-    padding-top: 0.2em;
-}
-#print-selector {
-    display: none;
-}
-/* Search */
-#search-suite, #search-test, #search-include, #search-exclude {
-    width: 25em;
-}
-#search a:hover {
-    text-decoration: none;
-}
-#search-help div {
-    margin: 0.5em 0.5em 0.7em 0;
-    padding: 0.7em;
-    background: #ECECF7;
-    border: 1px solid #BCBCD7;
-    border-radius: 3px;
-}
-#search-help h3, #search-help p {
-    margin: 0 0 0.7em 0;
-}
-.search-help-examples {
-    table-layout: auto;
-    width: 100%;
-}
-.search-help-examples, .search-help-examples tr,
-.search-help-examples th, .search-help-examples td {
-    background: transparent;
-    margin: 0;
-}
-.search-help-examples th, .search-help-examples td {
-    padding: 0.2em 0.7em 0.2em 0;
-}
-.help-item {
-    width: 10%;
-}
-.help-explanation {
-    width: 65%;
-}
-.help-examples {
-    width: 25%;
-}
-/* Tabs - adapted from http://www.htmldog.com/articles/tabs */
-#detail-tabs {
-    list-style: none;
-    padding: 0;
-    margin: 0 1em;
-}
-.detail-tab {
-    float: left;
-    background: #DCDCF0;
-    border: 1px solid black;
-    border-bottom-width: 0;
-    margin: 0 0.5em 0 0;
-    padding-top: 0.1em;
-    border-radius: 3px 3px 0 0;
-}
-.detail-tab:hover {
-    background: yellow;
-}
-.detail-tab a {
-    color: black;
-    text-decoration: none;
-    font-weight: bold;
-    padding: 0 1em;
-}
-.detail-tab-selected {
-    position: relative;
-    top: 1px;
-    background: white;
-}
-.detail-tab-selected:hover {
-    background: white;
-}
-/* Test details table */
-#test-details {
-    width: 100%;
-    border-spacing: 1px;
-    background-color: black;
-}
-#test-details > tbody > tr:hover {
-    background: #F4F4FF;
-    cursor: pointer;
-}
-#test-details th, #test-details td {
-    padding: 0.2em;
-}
-.details-limited {
-    max-height: 20em;
-    overflow: auto;
-}
-.details-col-header {
-    padding-right: 1em;
-}
-.details-col-toggle {
-    float: left;
-    color: #808080;
-    cursor: pointer;
-}
-.details-col-toggle:hover {
-    color: black;
-}
-.details-col-name {
-    min-width: 20em;
-    font-weight: bold;
-}
-.details-col-doc {
-    min-width: 10em;
-}
-.details-col-tags {
-    min-width: 10em;
-}
-.details-col-crit {
-    width: 3.5em;
-    text-align: center;
-}
-.details-col-status {
-    width: 4.5em;
-    text-align: center;
-}
-.details-col-msg {
-    min-width: 20em;
-}
-.details-col-elapsed {
-    width: 7em;
-    text-align: center;
-}
-.details-col-times {
-    width: 11em;
-    white-space: nowrap;
-    text-align: center;
-}
-.hidden .details-col-header, td.hidden > div {
-    display: none;
-}
-.hidden {
-    width: 13px;
-    min-width: 0;
-    background-image: none;
-}
-th.hidden:hover {
-    background-color: #DCDCF0;
-}
-</style>
-<style media="print" type="text/css">
-body {
-    background: white !important;
-    padding: 0;
-    font-size: 8pt;
-}
-a:link, a:visited {
-    color: black;
-}
-#header {
-    width: auto;
-}
-.details, .statistics {
-    width: 100%;
-}
-#generated-ago, #top-right-header, #normal-selector, #search-buttons,
-.folding-button, .expand, .hidden, .details-col-toggle {
-    display: none;
-}
-.element-header-text, .children {
-    margin: 0;
-}
-#test-details {
-    border-collapse: collapse;
-    table-layout: auto;
-}
-#test-details th, #test-details td {
-    border: 1px solid black;
-}
-.details-col-header {
-    padding: 0;
-}
-#print-selector {
-    display: table-cell;
-}
-.tablesorter-header {
-    background-image: none;
-    background: #DCDCF0 !important;
-}
-</style>
-<style media="all" type="text/css">
-#javascript-disabled {
-    width: 600px;
-    margin: 100px auto 0 auto;
-    padding: 20px;
-    color: #2A2A2E;
-    border: 1px solid #9A9A9E;
-    background: #FAFAFF;
-}
-#javascript-disabled h1 {
-    width: 100%;
-    float: none;
-}
-#javascript-disabled ul {
-    font-size: 1.2em;
-}
-#javascript-disabled li {
-    margin: 0.5em 0;
-}
-#javascript-disabled b {
-    font-style: italic;
-}
-</style>
-<style media="all" type="text/css">
-.doc > * {
-    margin: 0.7em 1em 0.1em 1em;
-    padding: 0;
-}
-.doc > p, .doc > h1, .doc > h2, .doc > h3, .doc > h4 {
-    margin: 0.7em 0 0.1em 0;
-}
-.doc > *:first-child {
-    margin-top: 0.1em;
-}
-.doc table {
-    border: 1px solid gray;
-    background: transparent;
-    border-collapse: collapse;
-    empty-cells: show;
-    font-size: 0.9em;
-}
-.doc table th, .doc table td {
-    border: 1px solid gray;
-    background: transparent;
-    padding: 0.1em 0.3em;
-    height: 1.2em;
-}
-.doc table th {
-    text-align: center;
-    letter-spacing: 0.1em;
-}
-.doc pre {
-    font-size: 1.1em;
-    letter-spacing: 0.05em;
-    background: #F4F4FF;
-}
-.doc code {
-    padding: 0 0.2em;
-    letter-spacing: 0.05em;
-    background: #F4F4FF;
-}
-.doc li {
-    list-style-position: inside;
-    list-style-type: square;
-}
-.doc img {
-    border: 1px solid gray;
-}
-.doc hr {
-    background: gray;
-    height: 1px;
-    border: 0;
-}
-</style>
-<script type="text/javascript">
-/*! jQuery v1.8.3 jquery.com | jquery.org/license */
-(function(e,t){function _(e){var t=M[e]={};return v.each(e.split(y),function(e,n){t[n]=!0}),t}function H(e,n,r){if(r===t&&e.nodeType===1){var i="data-"+n.replace(P,"-$1").toLowerCase();r=e.getAttribute(i);if(typeof r=="string"){try{r=r==="true"?!0:r==="false"?!1:r==="null"?null:+r+""===r?+r:D.test(r)?v.parseJSON(r):r}catch(s){}v.data(e,n,r)}else r=t}return r}function B(e){var t;for(t in e){if(t==="data"&&v.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function et(){return!1}function tt(){return!0}function ut(e){return!e||!e.parentNode||e.parentNode.nodeType===11}function at(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function ft(e,t,n){t=t||0;if(v.isFunction(t))return v.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return v.grep(e,function(e,r){return e===t===n});if(typeof t=="string"){var r=v.grep(e,function(e){return e.nodeType===1});if(it.test(t))return v.filter(t,r,!n);t=v.filter(t,r)}return v.grep(e,function(e,r){return v.inArray(e,t)>=0===n})}function lt(e){var t=ct.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function At(e,t){if(t.nodeType!==1||!v.hasData(e))return;var n,r,i,s=v._data(e),o=v._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r<i;r++)v.event.add(t,n,u[n][r])}o.data&&(o.data=v.extend({},o.data))}function Ot(e,t){var n;if(t.nodeType!==1)return;t.clearAttributes&&t.clearAttributes(),t.mergeAttributes&&t.mergeAttributes(e),n=t.nodeName.toLowerCase(),n==="object"?(t.parentNode&&(t.outerHTML=e.outerHTML),v.support.html5Clone&&e.innerHTML&&!v.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):n==="input"&&Et.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):n==="option"?t.selected=e.defaultSelected:n==="input"||n==="textarea"?t.defaultValue=e.defaultValue:n==="script"&&t.text!==e.text&&(t.text=e.text),t.removeAttribute(v.expando)}function Mt(e){return typeof e.getElementsByTagName!="undefined"?e.getElementsByTagName("*"):typeof e.querySelectorAll!="undefined"?e.querySelectorAll("*"):[]}function _t(e){Et.test(e.type)&&(e.defaultChecked=e.checked)}function Qt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Jt.length;while(i--){t=Jt[i]+n;if(t in e)return t}return r}function Gt(e,t){return e=t||e,v.css(e,"display")==="none"||!v.contains(e.ownerDocument,e)}function Yt(e,t){var n,r,i=[],s=0,o=e.length;for(;s<o;s++){n=e[s];if(!n.style)continue;i[s]=v._data(n,"olddisplay"),t?(!i[s]&&n.style.display==="none"&&(n.style.display=""),n.style.display===""&&Gt(n)&&(i[s]=v._data(n,"olddisplay",nn(n.nodeName)))):(r=Dt(n,"display"),!i[s]&&r!=="none"&&v._data(n,"olddisplay",r))}for(s=0;s<o;s++){n=e[s];if(!n.style)continue;if(!t||n.style.display==="none"||n.style.display==="")n.style.display=t?i[s]||"":"none"}return e}function Zt(e,t,n){var r=Rt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function en(e,t,n,r){var i=n===(r?"border":"content")?4:t==="width"?1:0,s=0;for(;i<4;i+=2)n==="margin"&&(s+=v.css(e,n+$t[i],!0)),r?(n==="content"&&(s-=parseFloat(Dt(e,"padding"+$t[i]))||0),n!=="margin"&&(s-=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0)):(s+=parseFloat(Dt(e,"padding"+$t[i]))||0,n!=="padding"&&(s+=parseFloat(Dt(e,"border"+$t[i]+"Width"))||0));return s}function tn(e,t,n){var r=t==="width"?e.offsetWidth:e.offsetHeight,i=!0,s=v.support.boxSizing&&v.css(e,"boxSizing")==="border-box";if(r<=0||r==null){r=Dt(e,t);if(r<0||r==null)r=e.style[t];if(Ut.test(r))return r;i=s&&(v.support.boxSizingReliable||r===e.style[t]),r=parseFloat(r)||0}return r+en(e,t,n||(s?"border":"content"),i)+"px"}function nn(e){if(Wt[e])return Wt[e];var t=v("<"+e+">").appendTo(i.body),n=t.css("display");t.remove();if(n==="none"||n===""){Pt=i.body.appendChild(Pt||v.extend(i.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!Ht||!Pt.createElement)Ht=(Pt.contentWindow||Pt.contentDocument).document,Ht.write("<!doctype html><html><body>"),Ht.close();t=Ht.body.appendChild(Ht.createElement(e)),n=Dt(t,"display"),i.body.removeChild(Pt)}return Wt[e]=n,n}function fn(e,t,n,r){var i;if(v.isArray(t))v.each(t,function(t,i){n||sn.test(e)?r(e,i):fn(e+"["+(typeof i=="object"?t:"")+"]",i,n,r)});else if(!n&&v.type(t)==="object")for(i in t)fn(e+"["+i+"]",t[i],n,r);else r(e,t)}function Cn(e){return function(t,n){typeof t!="string"&&(n=t,t="*");var r,i,s,o=t.toLowerCase().split(y),u=0,a=o.length;if(v.isFunction(n))for(;u<a;u++)r=o[u],s=/^\+/.test(r),s&&(r=r.substr(1)||"*"),i=e[r]=e[r]||[],i[s?"unshift":"push"](n)}}function kn(e,n,r,i,s,o){s=s||n.dataTypes[0],o=o||{},o[s]=!0;var u,a=e[s],f=0,l=a?a.length:0,c=e===Sn;for(;f<l&&(c||!u);f++)u=a[f](n,r,i),typeof u=="string"&&(!c||o[u]?u=t:(n.dataTypes.unshift(u),u=kn(e,n,r,i,u,o)));return(c||!u)&&!o["*"]&&(u=kn(e,n,r,i,"*",o)),u}function Ln(e,n){var r,i,s=v.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((s[r]?e:i||(i={}))[r]=n[r]);i&&v.extend(!0,e,i)}function An(e,n,r){var i,s,o,u,a=e.contents,f=e.dataTypes,l=e.responseFields;for(s in l)s in r&&(n[l[s]]=r[s]);while(f[0]==="*")f.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("content-type"));if(i)for(s in a)if(a[s]&&a[s].test(i)){f.unshift(s);break}if(f[0]in r)o=f[0];else{for(s in r){if(!f[0]||e.converters[s+" "+f[0]]){o=s;break}u||(u=s)}o=o||u}if(o)return o!==f[0]&&f.unshift(o),r[o]}function On(e,t){var n,r,i,s,o=e.dataTypes.slice(),u=o[0],a={},f=0;e.dataFilter&&(t=e.dataFilter(t,e.dataType));if(o[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=o[++f];)if(i!=="*"){if(u!=="*"&&u!==i){n=a[u+" "+i]||a["* "+i];if(!n)for(r in a){s=r.split(" ");if(s[1]===i){n=a[u+" "+s[0]]||a["* "+s[0]];if(n){n===!0?n=a[r]:a[r]!==!0&&(i=s[0],o.splice(f--,0,i));break}}}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(l){return{state:"parsererror",error:n?l:"No conversion from "+u+" to "+i}}}u=i}return{state:"success",data:t}}function Fn(){try{return new e.XMLHttpRequest}catch(t){}}function In(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function $n(){return setTimeout(function(){qn=t},0),qn=v.now()}function Jn(e,t){v.each(t,function(t,n){var r=(Vn[t]||[]).concat(Vn["*"]),i=0,s=r.length;for(;i<s;i++)if(r[i].call(e,t,n))return})}function Kn(e,t,n){var r,i=0,s=0,o=Xn.length,u=v.Deferred().always(function(){delete a.elem}),a=function(){var t=qn||$n(),n=Math.max(0,f.startTime+f.duration-t),r=n/f.duration||0,i=1-r,s=0,o=f.tweens.length;for(;s<o;s++)f.tweens[s].run(i);return u.notifyWith(e,[f,i,n]),i<1&&o?n:(u.resolveWith(e,[f]),!1)},f=u.promise({elem:e,props:v.extend({},t),opts:v.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:qn||$n(),duration:n.duration,tweens:[],createTween:function(t,n,r){var i=v.Tween(e,f.opts,t,n,f.opts.specialEasing[t]||f.opts.easing);return f.tweens.push(i),i},stop:function(t){var n=0,r=t?f.tweens.length:0;for(;n<r;n++)f.tweens[n].run(1);return t?u.resolveWith(e,[f,t]):u.rejectWith(e,[f,t]),this}}),l=f.props;Qn(l,f.opts.specialEasing);for(;i<o;i++){r=Xn[i].call(f,e,l,f.opts);if(r)return r}return Jn(f,l),v.isFunction(f.opts.start)&&f.opts.start.call(e,f),v.fx.timer(v.extend(a,{anim:f,queue:f.opts.queue,elem:e})),f.progress(f.opts.progress).done(f.opts.done,f.opts.complete).fail(f.opts.fail).always(f.opts.always)}function Qn(e,t){var n,r,i,s,o;for(n in e){r=v.camelCase(n),i=t[r],s=e[n],v.isArray(s)&&(i=s[1],s=e[n]=s[0]),n!==r&&(e[r]=s,delete e[n]),o=v.cssHooks[r];if(o&&"expand"in o){s=o.expand(s),delete e[r];for(n in s)n in e||(e[n]=s[n],t[n]=i)}else t[r]=i}}function Gn(e,t,n){var r,i,s,o,u,a,f,l,c,h=this,p=e.style,d={},m=[],g=e.nodeType&&Gt(e);n.queue||(l=v._queueHooks(e,"fx"),l.unqueued==null&&(l.unqueued=0,c=l.empty.fire,l.empty.fire=function(){l.unqueued||c()}),l.unqueued++,h.always(function(){h.always(function(){l.unqueued--,v.queue(e,"fx").length||l.empty.fire()})})),e.nodeType===1&&("height"in t||"width"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],v.css(e,"display")==="inline"&&v.css(e,"float")==="none"&&(!v.support.inlineBlockNeedsLayout||nn(e.nodeName)==="inline"?p.display="inline-block":p.zoom=1)),n.overflow&&(p.overflow="hidden",v.support.shrinkWrapBlocks||h.done(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t){s=t[r];if(Un.exec(s)){delete t[r],a=a||s==="toggle";if(s===(g?"hide":"show"))continue;m.push(r)}}o=m.length;if(o){u=v._data(e,"fxshow")||v._data(e,"fxshow",{}),"hidden"in u&&(g=u.hidden),a&&(u.hidden=!g),g?v(e).show():h.done(function(){v(e).hide()}),h.done(function(){var t;v.removeData(e,"fxshow",!0);for(t in d)v.style(e,t,d[t])});for(r=0;r<o;r++)i=m[r],f=h.createTween(i,g?u[i]:0),d[i]=u[i]||v.style(e,i),i in u||(u[i]=f.start,g&&(f.end=f.start,f.start=i==="width"||i==="height"?1:0))}}function Yn(e,t,n,r,i){return new Yn.prototype.init(e,t,n,r,i)}function Zn(e,t){var n,r={height:e},i=0;t=t?1:0;for(;i<4;i+=2-t)n=$t[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function tr(e){return v.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:!1}var n,r,i=e.document,s=e.location,o=e.navigator,u=e.jQuery,a=e.$,f=Array.prototype.push,l=Array.prototype.slice,c=Array.prototype.indexOf,h=Object.prototype.toString,p=Object.prototype.hasOwnProperty,d=String.prototype.trim,v=function(e,t){return new v.fn.init(e,t,n)},m=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,g=/\S/,y=/\s+/,b=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,w=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,E=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,S=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,T=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,N=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,C=/^-ms-/,k=/-([\da-z])/gi,L=function(e,t){return(t+"").toUpperCase()},A=function(){i.addEventListener?(i.removeEventListener("DOMContentLoaded",A,!1),v.ready()):i.readyState==="complete"&&(i.detachEvent("onreadystatechange",A),v.ready())},O={};v.fn=v.prototype={constructor:v,init:function(e,n,r){var s,o,u,a;if(!e)return this;if(e.nodeType)return this.context=this[0]=e,this.length=1,this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?s=[null,e,null]:s=w.exec(e);if(s&&(s[1]||!n)){if(s[1])return n=n instanceof v?n[0]:n,a=n&&n.nodeType?n.ownerDocument||n:i,e=v.parseHTML(s[1],a,!0),E.test(s[1])&&v.isPlainObject(n)&&this.attr.call(e,n,!0),v.merge(this,e);o=i.getElementById(s[2]);if(o&&o.parentNode){if(o.id!==s[2])return r.find(e);this.length=1,this[0]=o}return this.context=i,this.selector=e,this}return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e)}return v.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),v.makeArray(e,this))},selector:"",jquery:"1.8.3",length:0,size:function(){return this.length},toArray:function(){return l.call(this)},get:function(e){return e==null?this.toArray():e<0?this[this.length+e]:this[e]},pushStack:function(e,t,n){var r=v.merge(this.constructor(),e);return r.prevObject=this,r.context=this.context,t==="find"?r.selector=this.selector+(this.selector?" ":"")+n:t&&(r.selector=this.selector+"."+t+"("+n+")"),r},each:function(e,t){return v.each(this,e,t)},ready:function(e){return v.ready.promise().done(e),this},eq:function(e){return e=+e,e===-1?this.slice(e):this.slice(e,e+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(l.apply(this,arguments),"slice",l.call(arguments).join(","))},map:function(e){return this.pushStack(v.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:[].sort,splice:[].splice},v.fn.init.prototype=v.fn,v.extend=v.fn.extend=function(){var e,n,r,i,s,o,u=arguments[0]||{},a=1,f=arguments.length,l=!1;typeof u=="boolean"&&(l=u,u=arguments[1]||{},a=2),typeof u!="object"&&!v.isFunction(u)&&(u={}),f===a&&(u=this,--a);for(;a<f;a++)if((e=arguments[a])!=null)for(n in e){r=u[n],i=e[n];if(u===i)continue;l&&i&&(v.isPlainObject(i)||(s=v.isArray(i)))?(s?(s=!1,o=r&&v.isArray(r)?r:[]):o=r&&v.isPlainObject(r)?r:{},u[n]=v.extend(l,o,i)):i!==t&&(u[n]=i)}return u},v.extend({noConflict:function(t){return e.$===v&&(e.$=a),t&&e.jQuery===v&&(e.jQuery=u),v},isReady:!1,readyWait:1,holdReady:function(e){e?v.readyWait++:v.ready(!0)},ready:function(e){if(e===!0?--v.readyWait:v.isReady)return;if(!i.body)return setTimeout(v.ready,1);v.isReady=!0;if(e!==!0&&--v.readyWait>0)return;r.resolveWith(i,[v]),v.fn.trigger&&v(i).trigger("ready").off("ready")},isFunction:function(e){return v.type(e)==="function"},isArray:Array.isArray||function(e){return v.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return e==null?String(e):O[h.call(e)]||"object"},isPlainObject:function(e){if(!e||v.type(e)!=="object"||e.nodeType||v.isWindow(e))return!1;try{if(e.constructor&&!p.call(e,"constructor")&&!p.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||p.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw new Error(e)},parseHTML:function(e,t,n){var r;return!e||typeof e!="string"?null:(typeof t=="boolean"&&(n=t,t=0),t=t||i,(r=E.exec(e))?[t.createElement(r[1])]:(r=v.buildFragment([e],t,n?null:[]),v.merge([],(r.cacheable?v.clone(r.fragment):r.fragment).childNodes)))},parseJSON:function(t){if(!t||typeof t!="string")return null;t=v.trim(t);if(e.JSON&&e.JSON.parse)return e.JSON.parse(t);if(S.test(t.replace(T,"@").replace(N,"]").replace(x,"")))return(new Function("return "+t))();v.error("Invalid JSON: "+t)},parseXML:function(n){var r,i;if(!n||typeof n!="string")return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(s){r=t}return(!r||!r.documentElement||r.getElementsByTagName("parsererror").length)&&v.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&g.test(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(C,"ms-").replace(k,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,n,r){var i,s=0,o=e.length,u=o===t||v.isFunction(e);if(r){if(u){for(i in e)if(n.apply(e[i],r)===!1)break}else for(;s<o;)if(n.apply(e[s++],r)===!1)break}else if(u){for(i in e)if(n.call(e[i],i,e[i])===!1)break}else for(;s<o;)if(n.call(e[s],s,e[s++])===!1)break;return e},trim:d&&!d.call("\ufeff\u00a0")?function(e){return e==null?"":d.call(e)}:function(e){return e==null?"":(e+"").replace(b,"")},makeArray:function(e,t){var n,r=t||[];return e!=null&&(n=v.type(e),e.length==null||n==="string"||n==="function"||n==="regexp"||v.isWindow(e)?f.call(r,e):v.merge(r,e)),r},inArray:function(e,t,n){var r;if(t){if(c)return c.call(t,e,n);r=t.length,n=n?n<0?Math.max(0,r+n):n:0;for(;n<r;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,s=0;if(typeof r=="number")for(;s<r;s++)e[i++]=n[s];else while(n[s]!==t)e[i++]=n[s++];return e.length=i,e},grep:function(e,t,n){var r,i=[],s=0,o=e.length;n=!!n;for(;s<o;s++)r=!!t(e[s],s),n!==r&&i.push(e[s]);return i},map:function(e,n,r){var i,s,o=[],u=0,a=e.length,f=e instanceof v||a!==t&&typeof a=="number"&&(a>0&&e[0]&&e[a-1]||a===0||v.isArray(e));if(f)for(;u<a;u++)i=n(e[u],u,r),i!=null&&(o[o.length]=i);else for(s in e)i=n(e[s],s,r),i!=null&&(o[o.length]=i);return o.concat.apply([],o)},guid:1,proxy:function(e,n){var r,i,s;return typeof n=="string"&&(r=e[n],n=e,e=r),v.isFunction(e)?(i=l.call(arguments,2),s=function(){return e.apply(n,i.concat(l.call(arguments)))},s.guid=e.guid=e.guid||v.guid++,s):t},access:function(e,n,r,i,s,o,u){var a,f=r==null,l=0,c=e.length;if(r&&typeof r=="object"){for(l in r)v.access(e,n,l,r[l],1,o,i);s=1}else if(i!==t){a=u===t&&v.isFunction(i),f&&(a?(a=n,n=function(e,t,n){return a.call(v(e),n)}):(n.call(e,i),n=null));if(n)for(;l<c;l++)n(e[l],r,a?i.call(e[l],l,n(e[l],r)):i,u);s=1}return s?e:f?n.call(e):c?n(e[0],r):o},now:function(){return(new Date).getTime()}}),v.ready.promise=function(t){if(!r){r=v.Deferred();if(i.readyState==="complete")setTimeout(v.ready,1);else if(i.addEventListener)i.addEventListener("DOMContentLoaded",A,!1),e.addEventListener("load",v.ready,!1);else{i.attachEvent("onreadystatechange",A),e.attachEvent("onload",v.ready);var n=!1;try{n=e.frameElement==null&&i.documentElement}catch(s){}n&&n.doScroll&&function o(){if(!v.isReady){try{n.doScroll("left")}catch(e){return setTimeout(o,50)}v.ready()}}()}}return r.promise(t)},v.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(e,t){O["[object "+t+"]"]=t.toLowerCase()}),n=v(i);var M={};v.Callbacks=function(e){e=typeof e=="string"?M[e]||_(e):v.extend({},e);var n,r,i,s,o,u,a=[],f=!e.once&&[],l=function(t){n=e.memory&&t,r=!0,u=s||0,s=0,o=a.length,i=!0;for(;a&&u<o;u++)if(a[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}i=!1,a&&(f?f.length&&l(f.shift()):n?a=[]:c.disable())},c={add:function(){if(a){var t=a.length;(function r(t){v.each(t,function(t,n){var i=v.type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}return this},remove:function(){return a&&v.each(arguments,function(e,t){var n;while((n=v.inArray(t,a,n))>-1)a.splice(n,1),i&&(n<=o&&o--,n<=u&&u--)}),this},has:function(e){return v.inArray(e,a)>-1},empty:function(){return a=[],this},disable:function(){return a=f=n=t,this},disabled:function(){return!a},lock:function(){return f=t,n||c.disable(),this},locked:function(){return!f},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],a&&(!r||f)&&(i?f.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},v.extend({Deferred:function(e){var t=[["resolve","done",v.Callbacks("once memory"),"resolved"],["reject","fail",v.Callbacks("once memory"),"rejected"],["notify","progress",v.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return v.Deferred(function(n){v.each(t,function(t,r){var s=r[0],o=e[t];i[r[1]](v.isFunction(o)?function(){var e=o.apply(this,arguments);e&&v.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===i?n:this,[e])}:n[s])}),e=null}).promise()},promise:function(e){return e!=null?v.extend(e,r):r}},i={};return r.pipe=r.then,v.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=o.fire,i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=l.call(arguments),r=n.length,i=r!==1||e&&v.isFunction(e.promise)?r:0,s=i===1?e:v.Deferred(),o=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?l.call(arguments):r,n===u?s.notifyWith(t,n):--i||s.resolveWith(t,n)}},u,a,f;if(r>1){u=new Array(r),a=new Array(r),f=new Array(r);for(;t<r;t++)n[t]&&v.isFunction(n[t].promise)?n[t].promise().done(o(t,f,n)).fail(s.reject).progress(o(t,a,u)):--i}return i||s.resolveWith(f,n),s.promise()}}),v.support=function(){var t,n,r,s,o,u,a,f,l,c,h,p=i.createElement("div");p.setAttribute("className","t"),p.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=p.getElementsByTagName("*"),r=p.getElementsByTagName("a")[0];if(!n||!r||!n.length)return{};s=i.createElement("select"),o=s.appendChild(i.createElement("option")),u=p.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:r.getAttribute("href")==="/a",opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:u.value==="on",optSelected:o.selected,getSetAttribute:p.className!=="t",enctype:!!i.createElement("form").enctype,html5Clone:i.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:i.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},u.checked=!0,t.noCloneChecked=u.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!o.disabled;try{delete p.test}catch(d){t.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",h=function(){t.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick"),p.detachEvent("onclick",h)),u=i.createElement("input"),u.value="t",u.setAttribute("type","radio"),t.radioValue=u.value==="t",u.setAttribute("checked","checked"),u.setAttribute("name","t"),p.appendChild(u),a=i.createDocumentFragment(),a.appendChild(p.lastChild),t.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,t.appendChecked=u.checked,a.removeChild(u),a.appendChild(p);if(p.attachEvent)for(l in{submit:!0,change:!0,focusin:!0})f="on"+l,c=f in p,c||(p.setAttribute(f,"return;"),c=typeof p[f]=="function"),t[l+"Bubbles"]=c;return v(function(){var n,r,s,o,u="padding:0;margin:0;border:0;display:block;overflow:hidden;",a=i.getElementsByTagName("body")[0];if(!a)return;n=i.createElement("div"),n.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",a.insertBefore(n,a.firstChild),r=i.createElement("div"),n.appendChild(r),r.innerHTML="<table><tr><td></td><td>t</td></tr></table>",s=r.getElementsByTagName("td"),s[0].style.cssText="padding:0;margin:0;border:0;display:none",c=s[0].offsetHeight===0,s[0].style.display="",s[1].style.display="none",t.reliableHiddenOffsets=c&&s[0].offsetHeight===0,r.innerHTML="",r.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=r.offsetWidth===4,t.doesNotIncludeMarginInBodyOffset=a.offsetTop!==1,e.getComputedStyle&&(t.pixelPosition=(e.getComputedStyle(r,null)||{}).top!=="1%",t.boxSizingReliable=(e.getComputedStyle(r,null)||{width:"4px"}).width==="4px",o=i.createElement("div"),o.style.cssText=r.style.cssText=u,o.style.marginRight=o.style.width="0",r.style.width="1px",r.appendChild(o),t.reliableMarginRight=!parseFloat((e.getComputedStyle(o,null)||{}).marginRight)),typeof r.style.zoom!="undefined"&&(r.innerHTML="",r.style.cssText=u+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=r.offsetWidth===3,r.style.display="block",r.style.overflow="visible",r.innerHTML="<div></div>",r.firstChild.style.width="5px",t.shrinkWrapBlocks=r.offsetWidth!==3,n.style.zoom=1),a.removeChild(n),n=r=s=o=null}),a.removeChild(p),n=r=s=o=u=a=p=null,t}();var D=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;v.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(v.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?v.cache[e[v.expando]]:e[v.expando],!!e&&!B(e)},data:function(e,n,r,i){if(!v.acceptData(e))return;var s,o,u=v.expando,a=typeof n=="string",f=e.nodeType,l=f?v.cache:e,c=f?e[u]:e[u]&&u;if((!c||!l[c]||!i&&!l[c].data)&&a&&r===t)return;c||(f?e[u]=c=v.deletedIds.pop()||v.guid++:c=u),l[c]||(l[c]={},f||(l[c].toJSON=v.noop));if(typeof n=="object"||typeof n=="function")i?l[c]=v.extend(l[c],n):l[c].data=v.extend(l[c].data,n);return s=l[c],i||(s.data||(s.data={}),s=s.data),r!==t&&(s[v.camelCase(n)]=r),a?(o=s[n],o==null&&(o=s[v.camelCase(n)])):o=s,o},removeData:function(e,t,n){if(!v.acceptData(e))return;var r,i,s,o=e.nodeType,u=o?v.cache:e,a=o?e[v.expando]:v.expando;if(!u[a])return;if(t){r=n?u[a]:u[a].data;if(r){v.isArray(t)||(t in r?t=[t]:(t=v.camelCase(t),t in r?t=[t]:t=t.split(" ")));for(i=0,s=t.length;i<s;i++)delete r[t[i]];if(!(n?B:v.isEmptyObject)(r))return}}if(!n){delete u[a].data;if(!B(u[a]))return}o?v.cleanData([e],!0):v.support.deleteExpando||u!=u.window?delete u[a]:u[a]=null},_data:function(e,t,n){return v.data(e,t,n,!0)},acceptData:function(e){var t=e.nodeName&&v.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),v.fn.extend({data:function(e,n){var r,i,s,o,u,a=this[0],f=0,l=null;if(e===t){if(this.length){l=v.data(a);if(a.nodeType===1&&!v._data(a,"parsedAttrs")){s=a.attributes;for(u=s.length;f<u;f++)o=s[f].name,o.indexOf("data-")||(o=v.camelCase(o.substring(5)),H(a,o,l[o]));v._data(a,"parsedAttrs",!0)}}return l}return typeof e=="object"?this.each(function(){v.data(this,e)}):(r=e.split(".",2),r[1]=r[1]?"."+r[1]:"",i=r[1]+"!",v.access(this,function(n){if(n===t)return l=this.triggerHandler("getData"+i,[r[0]]),l===t&&a&&(l=v.data(a,e),l=H(a,e,l)),l===t&&r[1]?this.data(r[0]):l;r[1]=n,this.each(function(){var t=v(this);t.triggerHandler("setData"+i,r),v.data(this,e,n),t.triggerHandler("changeData"+i,r)})},null,n,arguments.length>1,null,!1))},removeData:function(e){return this.each(function(){v.removeData(this,e)})}}),v.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=v._data(e,t),n&&(!r||v.isArray(n)?r=v._data(e,t,v.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=v.queue(e,t),r=n.length,i=n.shift(),s=v._queueHooks(e,t),o=function(){v.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return v._data(e,n)||v._data(e,n,{empty:v.Callbacks("once memory").add(function(){v.removeData(e,t+"queue",!0),v.removeData(e,n,!0)})})}}),v.fn.extend({queue:function(e,n){var r=2;return typeof e!="string"&&(n=e,e="fx",r--),arguments.length<r?v.queue(this[0],e):n===t?this:this.each(function(){var t=v.queue(this,e,n);v._queueHooks(this,e),e==="fx"&&t[0]!=="inprogress"&&v.dequeue(this,e)})},dequeue:function(e){return this.each(function(){v.dequeue(this,e)})},delay:function(e,t){return e=v.fx?v.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,s=v.Deferred(),o=this,u=this.length,a=function(){--i||s.resolveWith(o,[o])};typeof e!="string"&&(n=e,e=t),e=e||"fx";while(u--)r=v._data(o[u],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(a));return a(),s.promise(n)}});var j,F,I,q=/[\t\r\n]/g,R=/\r/g,U=/^(?:button|input)$/i,z=/^(?:button|input|object|select|textarea)$/i,W=/^a(?:rea|)$/i,X=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,V=v.support.getSetAttribute;v.fn.extend({attr:function(e,t){return v.access(this,v.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){v.removeAttr(this,e)})},prop:function(e,t){return v.access(this,v.prop,e,t,arguments.length>1)},removeProp:function(e){return e=v.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,s,o,u;if(v.isFunction(e))return this.each(function(t){v(this).addClass(e.call(this,t,this.className))});if(e&&typeof e=="string"){t=e.split(y);for(n=0,r=this.length;n<r;n++){i=this[n];if(i.nodeType===1)if(!i.className&&t.length===1)i.className=e;else{s=" "+i.className+" ";for(o=0,u=t.length;o<u;o++)s.indexOf(" "+t[o]+" ")<0&&(s+=t[o]+" ");i.className=v.trim(s)}}}return this},removeClass:function(e){var n,r,i,s,o,u,a;if(v.isFunction(e))return this.each(function(t){v(this).removeClass(e.call(this,t,this.className))});if(e&&typeof e=="string"||e===t){n=(e||"").split(y);for(u=0,a=this.length;u<a;u++){i=this[u];if(i.nodeType===1&&i.className){r=(" "+i.className+" ").replace(q," ");for(s=0,o=n.length;s<o;s++)while(r.indexOf(" "+n[s]+" ")>=0)r=r.replace(" "+n[s]+" "," ");i.className=e?v.trim(r):""}}}return this},toggleClass:function(e,t){var n=typeof e,r=typeof t=="boolean";return v.isFunction(e)?this.each(function(n){v(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var i,s=0,o=v(this),u=t,a=e.split(y);while(i=a[s++])u=r?u:!o.hasClass(i),o[u?"addClass":"removeClass"](i)}else if(n==="undefined"||n==="boolean")this.className&&v._data(this,"__className__",this.className),this.className=this.className||e===!1?"":v._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n<r;n++)if(this[n].nodeType===1&&(" "+this[n].className+" ").replace(q," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,s=this[0];if(!arguments.length){if(s)return n=v.valHooks[s.type]||v.valHooks[s.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(s,"value"))!==t?r:(r=s.value,typeof r=="string"?r.replace(R,""):r==null?"":r);return}return i=v.isFunction(e),this.each(function(r){var s,o=v(this);if(this.nodeType!==1)return;i?s=e.call(this,r,o.val()):s=e,s==null?s="":typeof s=="number"?s+="":v.isArray(s)&&(s=v.map(s,function(e){return e==null?"":e+""})),n=v.valHooks[this.type]||v.valHooks[this.nodeName.toLowerCase()];if(!n||!("set"in n)||n.set(this,s,"value")===t)this.value=s})}}),v.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a<u;a++){n=r[a];if((n.selected||a===i)&&(v.support.optDisabled?!n.disabled:n.getAttribute("disabled")===null)&&(!n.parentNode.disabled||!v.nodeName(n.parentNode,"optgroup"))){t=v(n).val();if(s)return t;o.push(t)}}return o},set:function(e,t){var n=v.makeArray(t);return v(e).find("option").each(function(){this.selected=v.inArray(v(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attrFn:{},attr:function(e,n,r,i){var s,o,u,a=e.nodeType;if(!e||a===3||a===8||a===2)return;if(i&&v.isFunction(v.fn[n]))return v(e)[n](r);if(typeof e.getAttribute=="undefined")return v.prop(e,n,r);u=a!==1||!v.isXMLDoc(e),u&&(n=n.toLowerCase(),o=v.attrHooks[n]||(X.test(n)?F:j));if(r!==t){if(r===null){v.removeAttr(e,n);return}return o&&"set"in o&&u&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r)}return o&&"get"in o&&u&&(s=o.get(e,n))!==null?s:(s=e.getAttribute(n),s===null?t:s)},removeAttr:function(e,t){var n,r,i,s,o=0;if(t&&e.nodeType===1){r=t.split(y);for(;o<r.length;o++)i=r[o],i&&(n=v.propFix[i]||i,s=X.test(i),s||v.attr(e,i,""),e.removeAttribute(V?i:n),s&&n in e&&(e[n]=!1))}},attrHooks:{type:{set:function(e,t){if(U.test(e.nodeName)&&e.parentNode)v.error("type property can't be changed");else if(!v.support.radioValue&&t==="radio"&&v.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}},value:{get:function(e,t){return j&&v.nodeName(e,"button")?j.get(e,t):t in e?e.value:null},set:function(e,t,n){if(j&&v.nodeName(e,"button"))return j.set(e,t,n);e.value=t}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,s,o,u=e.nodeType;if(!e||u===3||u===8||u===2)return;return o=u!==1||!v.isXMLDoc(e),o&&(n=v.propFix[n]||n,s=v.propHooks[n]),r!==t?s&&"set"in s&&(i=s.set(e,r,n))!==t?i:e[n]=r:s&&"get"in s&&(i=s.get(e,n))!==null?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):z.test(e.nodeName)||W.test(e.nodeName)&&e.href?0:t}}}}),F={get:function(e,n){var r,i=v.prop(e,n);return i===!0||typeof i!="boolean"&&(r=e.getAttributeNode(n))&&r.nodeValue!==!1?n.toLowerCase():t},set:function(e,t,n){var r;return t===!1?v.removeAttr(e,n):(r=v.propFix[n]||n,r in e&&(e[r]=!0),e.setAttribute(n,n.toLowerCase())),n}},V||(I={name:!0,id:!0,coords:!0},j=v.valHooks.button={get:function(e,n){var r;return r=e.getAttributeNode(n),r&&(I[n]?r.value!=="":r.specified)?r.value:t},set:function(e,t,n){var r=e.getAttributeNode(n);return r||(r=i.createAttribute(n),e.setAttributeNode(r)),r.value=t+""}},v.each(["width","height"],function(e,t){v.attrHooks[t]=v.extend(v.attrHooks[t],{set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}})}),v.attrHooks.contenteditable={get:j.get,set:function(e,t,n){t===""&&(t="false"),j.set(e,t,n)}}),v.support.hrefNormalized||v.each(["href","src","width","height"],function(e,n){v.attrHooks[n]=v.extend(v.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return r===null?t:r}})}),v.support.style||(v.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||t},set:function(e,t){return e.style.cssText=t+""}}),v.support.optSelected||(v.propHooks.selected=v.extend(v.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),v.support.enctype||(v.propFix.enctype="encoding"),v.support.checkOn||v.each(["radio","checkbox"],function(){v.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}}),v.each(["radio","checkbox"],function(){v.valHooks[this]=v.extend(v.valHooks[this],{set:function(e,t){if(v.isArray(t))return e.checked=v.inArray(v(e).val(),t)>=0}})});var $=/^(?:textarea|input|select)$/i,J=/^([^\.]*|)(?:\.(.+)|)$/,K=/(?:^|\s)hover(\.\S+|)\b/,Q=/^key/,G=/^(?:mouse|contextmenu)|click/,Y=/^(?:focusinfocus|focusoutblur)$/,Z=function(e){return v.event.special.hover?e:e.replace(K,"mouseenter$1 mouseleave$1")};v.event={add:function(e,n,r,i,s){var o,u,a,f,l,c,h,p,d,m,g;if(e.nodeType===3||e.nodeType===8||!n||!r||!(o=v._data(e)))return;r.handler&&(d=r,r=d.handler,s=d.selector),r.guid||(r.guid=v.guid++),a=o.events,a||(o.events=a={}),u=o.handle,u||(o.handle=u=function(e){return typeof v=="undefined"||!!e&&v.event.triggered===e.type?t:v.event.dispatch.apply(u.elem,arguments)},u.elem=e),n=v.trim(Z(n)).split(" ");for(f=0;f<n.length;f++){l=J.exec(n[f])||[],c=l[1],h=(l[2]||"").split(".").sort(),g=v.event.special[c]||{},c=(s?g.delegateType:g.bindType)||c,g=v.event.special[c]||{},p=v.extend({type:c,origType:l[1],data:i,handler:r,guid:r.guid,selector:s,needsContext:s&&v.expr.match.needsContext.test(s),namespace:h.join(".")},d),m=a[c];if(!m){m=a[c]=[],m.delegateCount=0;if(!g.setup||g.setup.call(e,i,h,u)===!1)e.addEventListener?e.addEventListener(c,u,!1):e.attachEvent&&e.attachEvent("on"+c,u)}g.add&&(g.add.call(e,p),p.handler.guid||(p.handler.guid=r.guid)),s?m.splice(m.delegateCount++,0,p):m.push(p),v.event.global[c]=!0}e=null},global:{},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,p,d,m,g=v.hasData(e)&&v._data(e);if(!g||!(h=g.events))return;t=v.trim(Z(t||"")).split(" ");for(s=0;s<t.length;s++){o=J.exec(t[s])||[],u=a=o[1],f=o[2];if(!u){for(u in h)v.event.remove(e,u+t[s],n,r,!0);continue}p=v.event.special[u]||{},u=(r?p.delegateType:p.bindType)||u,d=h[u]||[],l=d.length,f=f?new RegExp("(^|\\.)"+f.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(c=0;c<d.length;c++)m=d[c],(i||a===m.origType)&&(!n||n.guid===m.guid)&&(!f||f.test(m.namespace))&&(!r||r===m.selector||r==="**"&&m.selector)&&(d.splice(c--,1),m.selector&&d.delegateCount--,p.remove&&p.remove.call(e,m));d.length===0&&l!==d.length&&((!p.teardown||p.teardown.call(e,f,g.handle)===!1)&&v.removeEvent(e,u,g.handle),delete h[u])}v.isEmptyObject(h)&&(delete g.handle,v.removeData(e,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(n,r,s,o){if(!s||s.nodeType!==3&&s.nodeType!==8){var u,a,f,l,c,h,p,d,m,g,y=n.type||n,b=[];if(Y.test(y+v.event.triggered))return;y.indexOf("!")>=0&&(y=y.slice(0,-1),a=!0),y.indexOf(".")>=0&&(b=y.split("."),y=b.shift(),b.sort());if((!s||v.event.customEvent[y])&&!v.event.global[y])return;n=typeof n=="object"?n[v.expando]?n:new v.Event(y,n):new v.Event(y),n.type=y,n.isTrigger=!0,n.exclusive=a,n.namespace=b.join("."),n.namespace_re=n.namespace?new RegExp("(^|\\.)"+b.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,h=y.indexOf(":")<0?"on"+y:"";if(!s){u=v.cache;for(f in u)u[f].events&&u[f].events[y]&&v.event.trigger(n,r,u[f].handle.elem,!0);return}n.result=t,n.target||(n.target=s),r=r!=null?v.makeArray(r):[],r.unshift(n),p=v.event.special[y]||{};if(p.trigger&&p.trigger.apply(s,r)===!1)return;m=[[s,p.bindType||y]];if(!o&&!p.noBubble&&!v.isWindow(s)){g=p.delegateType||y,l=Y.test(g+y)?s:s.parentNode;for(c=s;l;l=l.parentNode)m.push([l,g]),c=l;c===(s.ownerDocument||i)&&m.push([c.defaultView||c.parentWindow||e,g])}for(f=0;f<m.length&&!n.isPropagationStopped();f++)l=m[f][0],n.type=m[f][1],d=(v._data(l,"events")||{})[n.type]&&v._data(l,"handle"),d&&d.apply(l,r),d=h&&l[h],d&&v.acceptData(l)&&d.apply&&d.apply(l,r)===!1&&n.preventDefault();return n.type=y,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(s.ownerDocument,r)===!1)&&(y!=="click"||!v.nodeName(s,"a"))&&v.acceptData(s)&&h&&s[y]&&(y!=="focus"&&y!=="blur"||n.target.offsetWidth!==0)&&!v.isWindow(s)&&(c=s[h],c&&(s[h]=null),v.event.triggered=y,s[y](),v.event.triggered=t,c&&(s[h]=c)),n.result}return},dispatch:function(n){n=v.event.fix(n||e.event);var r,i,s,o,u,a,f,c,h,p,d=(v._data(this,"events")||{})[n.type]||[],m=d.delegateCount,g=l.call(arguments),y=!n.exclusive&&!n.namespace,b=v.event.special[n.type]||{},w=[];g[0]=n,n.delegateTarget=this;if(b.preDispatch&&b.preDispatch.call(this,n)===!1)return;if(m&&(!n.button||n.type!=="click"))for(s=n.target;s!=this;s=s.parentNode||this)if(s.disabled!==!0||n.type!=="click"){u={},f=[];for(r=0;r<m;r++)c=d[r],h=c.selector,u[h]===t&&(u[h]=c.needsContext?v(h,this).index(s)>=0:v.find(h,this,null,[s]).length),u[h]&&f.push(c);f.length&&w.push({elem:s,matches:f})}d.length>m&&w.push({elem:this,matches:d.slice(m)});for(r=0;r<w.length&&!n.isPropagationStopped();r++){a=w[r],n.currentTarget=a.elem;for(i=0;i<a.matches.length&&!n.isImmediatePropagationStopped();i++){c=a.matches[i];if(y||!n.namespace&&!c.namespace||n.namespace_re&&n.namespace_re.test(c.namespace))n.data=c.data,n.handleObj=c,o=((v.event.special[c.origType]||{}).handle||c.handler).apply(a.elem,g),o!==t&&(n.result=o,o===!1&&(n.preventDefault(),n.stopPropagation()))}}return b.postDispatch&&b.postDispatch.call(this,n),n.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return e.which==null&&(e.which=t.charCode!=null?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,s,o,u=n.button,a=n.fromElement;return e.pageX==null&&n.clientX!=null&&(r=e.target.ownerDocument||i,s=r.documentElement,o=r.body,e.pageX=n.clientX+(s&&s.scrollLeft||o&&o.scrollLeft||0)-(s&&s.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||o&&o.scrollTop||0)-(s&&s.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&a&&(e.relatedTarget=a===e.target?n.toElement:a),!e.which&&u!==t&&(e.which=u&1?1:u&2?3:u&4?2:0),e}},fix:function(e){if(e[v.expando])return e;var t,n,r=e,s=v.event.fixHooks[e.type]||{},o=s.props?this.props.concat(s.props):this.props;e=v.Event(r);for(t=o.length;t;)n=o[--t],e[n]=r[n];return e.target||(e.target=r.srcElement||i),e.target.nodeType===3&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,r):e},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(e,t,n){v.isWindow(this)&&(this.onbeforeunload=n)},teardown:function(e,t){this.onbeforeunload===t&&(this.onbeforeunload=null)}}},simulate:function(e,t,n,r){var i=v.extend(new v.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?v.event.trigger(i,null,t):v.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},v.event.handle=v.event.dispatch,v.removeEvent=i.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]=="undefined"&&(e[r]=null),e.detachEvent(r,n))},v.Event=function(e,t){if(!(this instanceof v.Event))return new v.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?tt:et):this.type=e,t&&v.extend(this,t),this.timeStamp=e&&e.timeStamp||v.now(),this[v.expando]=!0},v.Event.prototype={preventDefault:function(){this.isDefaultPrevented=tt;var e=this.originalEvent;if(!e)return;e.preventDefault?e.preventDefault():e.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=tt;var e=this.originalEvent;if(!e)return;e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=tt,this.stopPropagation()},isDefaultPrevented:et,isPropagationStopped:et,isImmediatePropagationStopped:et},v.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){v.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,s=e.handleObj,o=s.selector;if(!i||i!==r&&!v.contains(r,i))e.type=s.origType,n=s.handler.apply(this,arguments),e.type=t;return n}}}),v.support.submitBubbles||(v.event.special.submit={setup:function(){if(v.nodeName(this,"form"))return!1;v.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=v.nodeName(n,"input")||v.nodeName(n,"button")?n.form:t;r&&!v._data(r,"_submit_attached")&&(v.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),v._data(r,"_submit_attached",!0))})},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&v.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){if(v.nodeName(this,"form"))return!1;v.event.remove(this,"._submit")}}),v.support.changeBubbles||(v.event.special.change={setup:function(){if($.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")v.event.add(this,"propertychange._change",function(e){e.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),v.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),v.event.simulate("change",this,e,!0)});return!1}v.event.add(this,"beforeactivate._change",function(e){var t=e.target;$.test(t.nodeName)&&!v._data(t,"_change_attached")&&(v.event.add(t,"change._change",function(e){this.parentNode&&!e.isSimulated&&!e.isTrigger&&v.event.simulate("change",this.parentNode,e,!0)}),v._data(t,"_change_attached",!0))})},handle:function(e){var t=e.target;if(this!==t||e.isSimulated||e.isTrigger||t.type!=="radio"&&t.type!=="checkbox")return e.handleObj.handler.apply(this,arguments)},teardown:function(){return v.event.remove(this,"._change"),!$.test(this.nodeName)}}),v.support.focusinBubbles||v.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){v.event.simulate(t,e.target,v.event.fix(e),!0)};v.event.special[t]={setup:function(){n++===0&&i.addEventListener(e,r,!0)},teardown:function(){--n===0&&i.removeEventListener(e,r,!0)}}}),v.fn.extend({on:function(e,n,r,i,s){var o,u;if(typeof e=="object"){typeof n!="string"&&(r=r||n,n=t);for(u in e)this.on(u,n,r,e[u],s);return this}r==null&&i==null?(i=n,r=n=t):i==null&&(typeof n=="string"?(i=r,r=t):(i=r,r=n,n=t));if(i===!1)i=et;else if(!i)return this;return s===1&&(o=i,i=function(e){return v().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=v.guid++)),this.each(function(){v.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,s;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,v(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if(typeof e=="object"){for(s in e)this.off(s,n,e[s]);return this}if(n===!1||typeof n=="function")r=n,n=t;return r===!1&&(r=et),this.each(function(){v.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},live:function(e,t,n){return v(this.context).on(e,this.selector,t,n),this},die:function(e,t){return v(this.context).off(e,this.selector||"**",t),this},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){v.event.trigger(e,t,this)})},triggerHandler:function(e,t){if(this[0])return v.event.trigger(e,t,this[0],!0)},toggle:function(e){var t=arguments,n=e.guid||v.guid++,r=0,i=function(n){var i=(v._data(this,"lastToggle"+e.guid)||0)%r;return v._data(this,"lastToggle"+e.guid,i+1),n.preventDefault(),t[i].apply(this,arguments)||!1};i.guid=n;while(r<t.length)t[r++].guid=n;return this.click(i)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),v.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){v.fn[t]=function(e,n){return n==null&&(n=e,e=null),arguments.length>0?this.on(t,null,e,n):this.trigger(t)},Q.test(t)&&(v.event.fixHooks[t]=v.event.keyHooks),G.test(t)&&(v.event.fixHooks[t]=v.event.mouseHooks)}),function(e,t){function nt(e,t,n,r){n=n||[],t=t||g;var i,s,a,f,l=t.nodeType;if(!e||typeof e!="string")return n;if(l!==1&&l!==9)return[];a=o(t);if(!a&&!r)if(i=R.exec(e))if(f=i[1]){if(l===9){s=t.getElementById(f);if(!s||!s.parentNode)return n;if(s.id===f)return n.push(s),n}else if(t.ownerDocument&&(s=t.ownerDocument.getElementById(f))&&u(t,s)&&s.id===f)return n.push(s),n}else{if(i[2])return S.apply(n,x.call(t.getElementsByTagName(e),0)),n;if((f=i[3])&&Z&&t.getElementsByClassName)return S.apply(n,x.call(t.getElementsByClassName(f),0)),n}return vt(e.replace(j,"$1"),t,n,r,a)}function rt(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function it(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function st(e){return N(function(t){return t=+t,N(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ot(e,t,n){if(e===t)return n;var r=e.nextSibling;while(r){if(r===t)return-1;r=r.nextSibling}return 1}function ut(e,t){var n,r,s,o,u,a,f,l=L[d][e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=i.preFilter;while(u){if(!n||(r=F.exec(u)))r&&(u=u.slice(r[0].length)||u),a.push(s=[]);n=!1;if(r=I.exec(u))s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=r[0].replace(j," ");for(o in i.filter)(r=J[o].exec(u))&&(!f[o]||(r=f[o](r)))&&(s.push(n=new m(r.shift())),u=u.slice(n.length),n.type=o,n.matches=r);if(!n)break}return t?u.length:u?nt.error(e):L(e,a).slice(0)}function at(e,t,r){var i=t.dir,s=r&&t.dir==="parentNode",o=w++;return t.first?function(t,n,r){while(t=t[i])if(s||t.nodeType===1)return e(t,n,r)}:function(t,r,u){if(!u){var a,f=b+" "+o+" ",l=f+n;while(t=t[i])if(s||t.nodeType===1){if((a=t[d])===l)return t.sizset;if(typeof a=="string"&&a.indexOf(f)===0){if(t.sizset)return t}else{t[d]=l;if(e(t,r,u))return t.sizset=!0,t;t.sizset=!1}}}else while(t=t[i])if(s||t.nodeType===1)if(e(t,r,u))return t}}function ft(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function lt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u<a;u++)if(s=e[u])if(!n||n(s,r,i))o.push(s),f&&t.push(u);return o}function ct(e,t,n,r,i,s){return r&&!r[d]&&(r=ct(r)),i&&!i[d]&&(i=ct(i,s)),N(function(s,o,u,a){var f,l,c,h=[],p=[],d=o.length,v=s||dt(t||"*",u.nodeType?[u]:u,[]),m=e&&(s||!t)?lt(v,h,e,u,a):v,g=n?i||(s?e:d||r)?[]:o:m;n&&n(m,g,u,a);if(r){f=lt(g,p),r(f,[],u,a),l=f.length;while(l--)if(c=f[l])g[p[l]]=!(m[p[l]]=c)}if(s){if(i||e){if(i){f=[],l=g.length;while(l--)(c=g[l])&&f.push(m[l]=c);i(null,g=[],f,a)}l=g.length;while(l--)(c=g[l])&&(f=i?T.call(s,c):h[l])>-1&&(s[f]=!(o[f]=c))}}else g=lt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):S.apply(o,g)})}function ht(e){var t,n,r,s=e.length,o=i.relative[e[0].type],u=o||i.relative[" "],a=o?1:0,f=at(function(e){return e===t},u,!0),l=at(function(e){return T.call(t,e)>-1},u,!0),h=[function(e,n,r){return!o&&(r||n!==c)||((t=n).nodeType?f(e,n,r):l(e,n,r))}];for(;a<s;a++)if(n=i.relative[e[a].type])h=[at(ft(h),n)];else{n=i.filter[e[a].type].apply(null,e[a].matches);if(n[d]){r=++a;for(;r<s;r++)if(i.relative[e[r].type])break;return ct(a>1&&ft(h),a>1&&e.slice(0,a-1).join("").replace(j,"$1"),n,a<r&&ht(e.slice(a,r)),r<s&&ht(e=e.slice(r)),r<s&&e.join(""))}h.push(n)}return ft(h)}function pt(e,t){var r=t.length>0,s=e.length>0,o=function(u,a,f,l,h){var p,d,v,m=[],y=0,w="0",x=u&&[],T=h!=null,N=c,C=u||s&&i.find.TAG("*",h&&a.parentNode||a),k=b+=N==null?1:Math.E;T&&(c=a!==g&&a,n=o.el);for(;(p=C[w])!=null;w++){if(s&&p){for(d=0;v=e[d];d++)if(v(p,a,f)){l.push(p);break}T&&(b=k,n=++o.el)}r&&((p=!v&&p)&&y--,u&&x.push(p))}y+=w;if(r&&w!==y){for(d=0;v=t[d];d++)v(x,m,a,f);if(u){if(y>0)while(w--)!x[w]&&!m[w]&&(m[w]=E.call(l));m=lt(m)}S.apply(l,m),T&&!u&&m.length>0&&y+t.length>1&&nt.uniqueSort(l)}return T&&(b=k,c=N),x};return o.el=0,r?N(o):o}function dt(e,t,n){var r=0,i=t.length;for(;r<i;r++)nt(e,t[r],n);return n}function vt(e,t,n,r,s){var o,u,f,l,c,h=ut(e),p=h.length;if(!r&&h.length===1){u=h[0]=h[0].slice(0);if(u.length>2&&(f=u[0]).type==="ID"&&t.nodeType===9&&!s&&i.relative[u[1].type]){t=i.find.ID(f.matches[0].replace($,""),t,s)[0];if(!t)return n;e=e.slice(u.shift().length)}for(o=J.POS.test(e)?-1:u.length-1;o>=0;o--){f=u[o];if(i.relative[l=f.type])break;if(c=i.find[l])if(r=c(f.matches[0].replace($,""),z.test(u[0].type)&&t.parentNode||t,s)){u.splice(o,1),e=r.length&&u.join("");if(!e)return S.apply(n,x.call(r,0)),n;break}}}return a(e,h)(r,t,s,n,z.test(e)),n}function mt(){}var n,r,i,s,o,u,a,f,l,c,h=!0,p="undefined",d=("sizcache"+Math.random()).replace(".",""),m=String,g=e.document,y=g.documentElement,b=0,w=0,E=[].pop,S=[].push,x=[].slice,T=[].indexOf||function(e){var t=0,n=this.length;for(;t<n;t++)if(this[t]===e)return t;return-1},N=function(e,t){return e[d]=t==null||t,e},C=function(){var e={},t=[];return N(function(n,r){return t.push(n)>i.cacheLength&&delete e[t.shift()],e[n+" "]=r},e)},k=C(),L=C(),A=C(),O="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",_=M.replace("w","w#"),D="([*^$|!~]?=)",P="\\["+O+"*("+M+")"+O+"*(?:"+D+O+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+_+")|)|)"+O+"*\\]",H=":("+M+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+P+")|[^:]|\\\\.)*|.*))\\)|)",B=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+O+"*((?:-\\d)?\\d*)"+O+"*\\)|)(?=[^-]|$)",j=new RegExp("^"+O+"+|((?:^|[^\\\\])(?:\\\\.)*)"+O+"+$","g"),F=new RegExp("^"+O+"*,"+O+"*"),I=new RegExp("^"+O+"*([\\x20\\t\\r\\n\\f>+~])"+O+"*"),q=new RegExp(H),R=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,U=/^:not/,z=/[\x20\t\r\n\f]*[+~]/,W=/:not\($/,X=/h\d/i,V=/input|select|textarea|button/i,$=/\\(?!\\)/g,J={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),NAME:new RegExp("^\\[name=['\"]?("+M+")['\"]?\\]"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+H),POS:new RegExp(B,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+O+"*(even|odd|(([+-]|)(\\d*)n|)"+O+"*(?:([+-]|)"+O+"*(\\d+)|))"+O+"*\\)|)","i"),needsContext:new RegExp("^"+O+"*[>+~]|"+B,"i")},K=function(e){var t=g.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}},Q=K(function(e){return e.appendChild(g.createComment("")),!e.getElementsByTagName("*").length}),G=K(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==p&&e.firstChild.getAttribute("href")==="#"}),Y=K(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return t!=="boolean"&&t!=="string"}),Z=K(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!e.getElementsByClassName||!e.getElementsByClassName("e").length?!1:(e.lastChild.className="e",e.getElementsByClassName("e").length===2)}),et=K(function(e){e.id=d+0,e.innerHTML="<a name='"+d+"'></a><div name='"+d+"'></div>",y.insertBefore(e,y.firstChild);var t=g.getElementsByName&&g.getElementsByName(d).length===2+g.getElementsByName(d+0).length;return r=!g.getElementById(d),y.removeChild(e),t});try{x.call(y.childNodes,0)[0].nodeType}catch(tt){x=function(e){var t,n=[];for(;t=this[e];e++)n.push(t);return n}}nt.matches=function(e,t){return nt(e,null,null,t)},nt.matchesSelector=function(e,t){return nt(t,null,null,[e]).length>0},s=nt.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(i===1||i===9||i===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=s(e)}else if(i===3||i===4)return e.nodeValue}else for(;t=e[r];r++)n+=s(t);return n},o=nt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},u=nt.contains=y.contains?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!(r&&r.nodeType===1&&n.contains&&n.contains(r))}:y.compareDocumentPosition?function(e,t){return t&&!!(e.compareDocumentPosition(t)&16)}:function(e,t){while(t=t.parentNode)if(t===e)return!0;return!1},nt.attr=function(e,t){var n,r=o(e);return r||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):r||Y?e.getAttribute(t):(n=e.getAttributeNode(t),n?typeof e[t]=="boolean"?e[t]?t:null:n.specified?n.value:null:null)},i=nt.selectors={cacheLength:50,createPseudo:N,match:J,attrHandle:G?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},find:{ID:r?function(e,t,n){if(typeof t.getElementById!==p&&!n){var r=t.getElementById(e);return r&&r.parentNode?[r]:[]}}:function(e,n,r){if(typeof n.getElementById!==p&&!r){var i=n.getElementById(e);return i?i.id===e||typeof i.getAttributeNode!==p&&i.getAttributeNode("id").value===e?[i]:t:[]}},TAG:Q?function(e,t){if(typeof t.getElementsByTagName!==p)return t.getElementsByTagName(e)}:function(e,t){var n=t.getElementsByTagName(e);if(e==="*"){var r,i=[],s=0;for(;r=n[s];s++)r.nodeType===1&&i.push(r);return i}return n},NAME:et&&function(e,t){if(typeof t.getElementsByName!==p)return t.getElementsByName(name)},CLASS:Z&&function(e,t,n){if(typeof t.getElementsByClassName!==p&&!n)return t.getElementsByClassName(e)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace($,""),e[3]=(e[4]||e[5]||"").replace($,""),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1]==="nth"?(e[2]||nt.error(e[0]),e[3]=+(e[3]?e[4]+(e[5]||1):2*(e[2]==="even"||e[2]==="odd")),e[4]=+(e[6]+e[7]||e[2]==="odd")):e[2]&&nt.error(e[0]),e},PSEUDO:function(e){var t,n;if(J.CHILD.test(e[0]))return null;if(e[3])e[2]=e[3];else if(t=e[4])q.test(t)&&(n=ut(t,!0))&&(n=t.indexOf(")",t.length-n)-t.length)&&(t=t.slice(0,n),e[0]=e[0].slice(0,n)),e[2]=t;return e.slice(0,3)}},filter:{ID:r?function(e){return e=e.replace($,""),function(t){return t.getAttribute("id")===e}}:function(e){return e=e.replace($,""),function(t){var n=typeof t.getAttributeNode!==p&&t.getAttributeNode("id");return n&&n.value===e}},TAG:function(e){return e==="*"?function(){return!0}:(e=e.replace($,"").toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[d][e+" "];return t||(t=new RegExp("(^|"+O+")"+e+"("+O+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==p&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r,i){var s=nt.attr(r,e);return s==null?t==="!=":t?(s+="",t==="="?s===n:t==="!="?s!==n:t==="^="?n&&s.indexOf(n)===0:t==="*="?n&&s.indexOf(n)>-1:t==="$="?n&&s.substr(s.length-n.length)===n:t==="~="?(" "+s+" ").indexOf(n)>-1:t==="|="?s===n||s.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r){return e==="nth"?function(e){var t,i,s=e.parentNode;if(n===1&&r===0)return!0;if(s){i=0;for(t=s.firstChild;t;t=t.nextSibling)if(t.nodeType===1){i++;if(e===t)break}}return i-=r,i===n||i%n===0&&i/n>=0}:function(t){var n=t;switch(e){case"only":case"first":while(n=n.previousSibling)if(n.nodeType===1)return!1;if(e==="first")return!0;n=t;case"last":while(n=n.nextSibling)if(n.nodeType===1)return!1;return!0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||nt.error("unsupported pseudo: "+e);return r[d]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?N(function(e,n){var i,s=r(e,t),o=s.length;while(o--)i=T.call(e,s[o]),e[i]=!(n[i]=s[o])}):function(e){return r(e,0,n)}):r}},pseudos:{not:N(function(e){var t=[],n=[],r=a(e.replace(j,"$1"));return r[d]?N(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:N(function(e){return function(t){return nt(e,t).length>0}}),contains:N(function(e){return function(t){return(t.textContent||t.innerText||s(t)).indexOf(e)>-1}}),enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},parent:function(e){return!i.pseudos.empty(e)},empty:function(e){var t;e=e.firstChild;while(e){if(e.nodeName>"@"||(t=e.nodeType)===3||t===4)return!1;e=e.nextSibling}return!0},header:function(e){return X.test(e.nodeName)},text:function(e){var t,n;return e.nodeName.toLowerCase()==="input"&&(t=e.type)==="text"&&((n=e.getAttribute("type"))==null||n.toLowerCase()===t)},radio:rt("radio"),checkbox:rt("checkbox"),file:rt("file"),password:rt("password"),image:rt("image"),submit:it("submit"),reset:it("reset"),button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},input:function(e){return V.test(e.nodeName)},focus:function(e){var t=e.ownerDocument;return e===t.activeElement&&(!t.hasFocus||t.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},active:function(e){return e===e.ownerDocument.activeElement},first:st(function(){return[0]}),last:st(function(e,t){return[t-1]}),eq:st(function(e,t,n){return[n<0?n+t:n]}),even:st(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:st(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:st(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:st(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},f=y.compareDocumentPosition?function(e,t){return e===t?(l=!0,0):(!e.compareDocumentPosition||!t.compareDocumentPosition?e.compareDocumentPosition:e.compareDocumentPosition(t)&4)?-1:1}:function(e,t){if(e===t)return l=!0,0;if(e.sourceIndex&&t.sourceIndex)return e.sourceIndex-t.sourceIndex;var n,r,i=[],s=[],o=e.parentNode,u=t.parentNode,a=o;if(o===u)return ot(e,t);if(!o)return-1;if(!u)return 1;while(a)i.unshift(a),a=a.parentNode;a=u;while(a)s.unshift(a),a=a.parentNode;n=i.length,r=s.length;for(var f=0;f<n&&f<r;f++)if(i[f]!==s[f])return ot(i[f],s[f]);return f===n?ot(e,s[f],-1):ot(i[f],t,1)},[0,0].sort(f),h=!l,nt.uniqueSort=function(e){var t,n=[],r=1,i=0;l=h,e.sort(f);if(l){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e},nt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},a=nt.compile=function(e,t){var n,r=[],i=[],s=A[d][e+" "];if(!s){t||(t=ut(e)),n=t.length;while(n--)s=ht(t[n]),s[d]?r.push(s):i.push(s);s=A(e,pt(i,r))}return s},g.querySelectorAll&&function(){var e,t=vt,n=/'|\\/g,r=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,i=[":focus"],s=[":active"],u=y.matchesSelector||y.mozMatchesSelector||y.webkitMatchesSelector||y.oMatchesSelector||y.msMatchesSelector;K(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||i.push("\\["+O+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||i.push(":checked")}),K(function(e){e.innerHTML="<p test=''></p>",e.querySelectorAll("[test^='']").length&&i.push("[*^$]="+O+"*(?:\"\"|'')"),e.innerHTML="<input type='hidden'/>",e.querySelectorAll(":enabled").length||i.push(":enabled",":disabled")}),i=new RegExp(i.join("|")),vt=function(e,r,s,o,u){if(!o&&!u&&!i.test(e)){var a,f,l=!0,c=d,h=r,p=r.nodeType===9&&e;if(r.nodeType===1&&r.nodeName.toLowerCase()!=="object"){a=ut(e),(l=r.getAttribute("id"))?c=l.replace(n,"\\$&"):r.setAttribute("id",c),c="[id='"+c+"'] ",f=a.length;while(f--)a[f]=c+a[f].join("");h=z.test(e)&&r.parentNode||r,p=a.join(",")}if(p)try{return S.apply(s,x.call(h.querySelectorAll(p),0)),s}catch(v){}finally{l||r.removeAttribute("id")}}return t(e,r,s,o,u)},u&&(K(function(t){e=u.call(t,"div");try{u.call(t,"[test!='']:sizzle"),s.push("!=",H)}catch(n){}}),s=new RegExp(s.join("|")),nt.matchesSelector=function(t,n){n=n.replace(r,"='$1']");if(!o(t)&&!s.test(n)&&!i.test(n))try{var a=u.call(t,n);if(a||e||t.document&&t.document.nodeType!==11)return a}catch(f){}return nt(n,null,null,[t]).length>0})}(),i.pseudos.nth=i.pseudos.eq,i.filters=mt.prototype=i.pseudos,i.setFilters=new mt,nt.attr=v.attr,v.find=nt,v.expr=nt.selectors,v.expr[":"]=v.expr.pseudos,v.unique=nt.uniqueSort,v.text=nt.getText,v.isXMLDoc=nt.isXML,v.contains=nt.contains}(e);var nt=/Until$/,rt=/^(?:parents|prev(?:Until|All))/,it=/^.[^:#\[\.,]*$/,st=v.expr.match.needsContext,ot={children:!0,contents:!0,next:!0,prev:!0};v.fn.extend({find:function(e){var t,n,r,i,s,o,u=this;if(typeof e!="string")return v(e).filter(function(){for(t=0,n=u.length;t<n;t++)if(v.contains(u[t],this))return!0});o=this.pushStack("","find",e);for(t=0,n=this.length;t<n;t++){r=o.length,v.find(e,this[t],o);if(t>0)for(i=r;i<o.length;i++)for(s=0;s<r;s++)if(o[s]===o[i]){o.splice(i--,1);break}}return o},has:function(e){var t,n=v(e,this),r=n.length;return this.filter(function(){for(t=0;t<r;t++)if(v.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1),"not",e)},filter:function(e){return this.pushStack(ft(this,e,!0),"filter",e)},is:function(e){return!!e&&(typeof e=="string"?st.test(e)?v(e,this.context).index(this[0])>=0:v.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,s=[],o=st.test(e)||typeof e!="string"?v(e,t||this.context):0;for(;r<i;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&n.nodeType!==11){if(o?o.index(n)>-1:v.find.matchesSelector(n,e)){s.push(n);break}n=n.parentNode}}return s=s.length>1?v.unique(s):s,this.pushStack(s,"closest",e)},index:function(e){return e?typeof e=="string"?v.inArray(this[0],v(e)):v.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(e,t){var n=typeof e=="string"?v(e,t):v.makeArray(e&&e.nodeType?[e]:e),r=v.merge(this.get(),n);return this.pushStack(ut(n[0])||ut(r[0])?r:v.unique(r))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),v.fn.andSelf=v.fn.addBack,v.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return v.dir(e,"parentNode")},parentsUntil:function(e,t,n){return v.dir(e,"parentNode",n)},next:function(e){return at(e,"nextSibling")},prev:function(e){return at(e,"previousSibling")},nextAll:function(e){return v.dir(e,"nextSibling")},prevAll:function(e){return v.dir(e,"previousSibling")},nextUntil:function(e,t,n){return v.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return v.dir(e,"previousSibling",n)},siblings:function(e){return v.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return v.sibling(e.firstChild)},contents:function(e){return v.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:v.merge([],e.childNodes)}},function(e,t){v.fn[e]=function(n,r){var i=v.map(this,t,n);return nt.test(e)||(r=n),r&&typeof r=="string"&&(i=v.filter(r,i)),i=this.length>1&&!ot[e]?v.unique(i):i,this.length>1&&rt.test(e)&&(i=i.reverse()),this.pushStack(i,e,l.call(arguments).join(","))}}),v.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),t.length===1?v.find.matchesSelector(t[0],e)?[t[0]]:[]:v.find.matches(e,t)},dir:function(e,n,r){var i=[],s=e[n];while(s&&s.nodeType!==9&&(r===t||s.nodeType!==1||!v(s).is(r)))s.nodeType===1&&i.push(s),s=s[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}});var ct="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ht=/ jQuery\d+="(?:null|\d+)"/g,pt=/^\s+/,dt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,vt=/<([\w:]+)/,mt=/<tbody/i,gt=/<|&#?\w+;/,yt=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,wt=new RegExp("<(?:"+ct+")[\\s/>]","i"),Et=/^(?:checkbox|radio)$/,St=/checked\s*(?:[^=]|=\s*.checked.)/i,xt=/\/(java|ecma)script/i,Tt=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,Nt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},Ct=lt(i),kt=Ct.appendChild(i.createElement("div"));Nt.optgroup=Nt.option,Nt.tbody=Nt.tfoot=Nt.colgroup=Nt.caption=Nt.thead,Nt.th=Nt.td,v.support.htmlSerialize||(Nt._default=[1,"X<div>","</div>"]),v.fn.extend({text:function(e){return v.access(this,function(e){return e===t?v.text(this):this.empty().append((this[0]&&this[0].ownerDocument||i).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(v.isFunction(e))return this.each(function(t){v(this).wrapAll(e.call(this,t))});if(this[0]){var t=v(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return v.isFunction(e)?this.each(function(t){v(this).wrapInner(e.call(this,t))}):this.each(function(){var t=v(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=v.isFunction(e);return this.each(function(n){v(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){v.nodeName(this,"body")||v(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(e,this.firstChild)})},before:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(e,this),"before",this.selector)}},after:function(){if(!ut(this[0]))return this.domManip(arguments,!1,function(e){this.parentNode.insertBefore(e,this.nextSibling)});if(arguments.length){var e=v.clean(arguments);return this.pushStack(v.merge(this,e),"after",this.selector)}},remove:function(e,t){var n,r=0;for(;(n=this[r])!=null;r++)if(!e||v.filter(e,[n]).length)!t&&n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),v.cleanData([n])),n.parentNode&&n.parentNode.removeChild(n);return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&v.cleanData(e.getElementsByTagName("*"));while(e.firstChild)e.removeChild(e.firstChild)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return v.clone(this,e,t)})},html:function(e){return v.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return n.nodeType===1?n.innerHTML.replace(ht,""):t;if(typeof e=="string"&&!yt.test(e)&&(v.support.htmlSerialize||!wt.test(e))&&(v.support.leadingWhitespace||!pt.test(e))&&!Nt[(vt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(dt,"<$1></$2>");try{for(;r<i;r++)n=this[r]||{},n.nodeType===1&&(v.cleanData(n.getElementsByTagName("*")),n.innerHTML=e);n=0}catch(s){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){return ut(this[0])?this.length?this.pushStack(v(v.isFunction(e)?e():e),"replaceWith",e):this:v.isFunction(e)?this.each(function(t){var n=v(this),r=n.html();n.replaceWith(e.call(this,t,r))}):(typeof e!="string"&&(e=v(e).detach()),this.each(function(){var t=this.nextSibling,n=this.parentNode;v(this).remove(),t?v(t).before(e):v(n).append(e)}))},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=[].concat.apply([],e);var i,s,o,u,a=0,f=e[0],l=[],c=this.length;if(!v.support.checkClone&&c>1&&typeof f=="string"&&St.test(f))return this.each(function(){v(this).domManip(e,n,r)});if(v.isFunction(f))return this.each(function(i){var s=v(this);e[0]=f.call(this,i,n?s.html():t),s.domManip(e,n,r)});if(this[0]){i=v.buildFragment(e,this,l),o=i.fragment,s=o.firstChild,o.childNodes.length===1&&(o=s);if(s){n=n&&v.nodeName(s,"tr");for(u=i.cacheable||c-1;a<c;a++)r.call(n&&v.nodeName(this[a],"table")?Lt(this[a],"tbody"):this[a],a===u?o:v.clone(o,!0,!0))}o=s=null,l.length&&v.each(l,function(e,t){t.src?v.ajax?v.ajax({url:t.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):v.error("no ajax"):v.globalEval((t.text||t.textContent||t.innerHTML||"").replace(Tt,"")),t.parentNode&&t.parentNode.removeChild(t)})}return this}}),v.buildFragment=function(e,n,r){var s,o,u,a=e[0];return n=n||i,n=!n.nodeType&&n[0]||n,n=n.ownerDocument||n,e.length===1&&typeof a=="string"&&a.length<512&&n===i&&a.charAt(0)==="<"&&!bt.test(a)&&(v.support.checkClone||!St.test(a))&&(v.support.html5Clone||!wt.test(a))&&(o=!0,s=v.fragments[a],u=s!==t),s||(s=n.createDocumentFragment(),v.clean(e,n,s,r),o&&(v.fragments[a]=u&&s)),{fragment:s,cacheable:o}},v.fragments={},v.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){v.fn[e]=function(n){var r,i=0,s=[],o=v(n),u=o.length,a=this.length===1&&this[0].parentNode;if((a==null||a&&a.nodeType===11&&a.childNodes.length===1)&&u===1)return o[t](this[0]),this;for(;i<u;i++)r=(i>0?this.clone(!0):this).get(),v(o[i])[t](r),s=s.concat(r);return this.pushStack(s,e,o.selector)}}),v.extend({clone:function(e,t,n){var r,i,s,o;v.support.html5Clone||v.isXMLDoc(e)||!wt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(kt.innerHTML=e.outerHTML,kt.removeChild(o=kt.firstChild));if((!v.support.noCloneEvent||!v.support.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!v.isXMLDoc(e)){Ot(e,o),r=Mt(e),i=Mt(o);for(s=0;r[s];++s)i[s]&&Ot(r[s],i[s])}if(t){At(e,o);if(n){r=Mt(e),i=Mt(o);for(s=0;r[s];++s)At(r[s],i[s])}}return r=i=null,o},clean:function(e,t,n,r){var s,o,u,a,f,l,c,h,p,d,m,g,y=t===i&&Ct,b=[];if(!t||typeof t.createDocumentFragment=="undefined")t=i;for(s=0;(u=e[s])!=null;s++){typeof u=="number"&&(u+="");if(!u)continue;if(typeof u=="string")if(!gt.test(u))u=t.createTextNode(u);else{y=y||lt(t),c=t.createElement("div"),y.appendChild(c),u=u.replace(dt,"<$1></$2>"),a=(vt.exec(u)||["",""])[1].toLowerCase(),f=Nt[a]||Nt._default,l=f[0],c.innerHTML=f[1]+u+f[2];while(l--)c=c.lastChild;if(!v.support.tbody){h=mt.test(u),p=a==="table"&&!h?c.firstChild&&c.firstChild.childNodes:f[1]==="<table>"&&!h?c.childNodes:[];for(o=p.length-1;o>=0;--o)v.nodeName(p[o],"tbody")&&!p[o].childNodes.length&&p[o].parentNode.removeChild(p[o])}!v.support.leadingWhitespace&&pt.test(u)&&c.insertBefore(t.createTextNode(pt.exec(u)[0]),c.firstChild),u=c.childNodes,c.parentNode.removeChild(c)}u.nodeType?b.push(u):v.merge(b,u)}c&&(u=c=y=null);if(!v.support.appendChecked)for(s=0;(u=b[s])!=null;s++)v.nodeName(u,"input")?_t(u):typeof u.getElementsByTagName!="undefined"&&v.grep(u.getElementsByTagName("input"),_t);if(n){m=function(e){if(!e.type||xt.test(e.type))return r?r.push(e.parentNode?e.parentNode.removeChild(e):e):n.appendChild(e)};for(s=0;(u=b[s])!=null;s++)if(!v.nodeName(u,"script")||!m(u))n.appendChild(u),typeof u.getElementsByTagName!="undefined"&&(g=v.grep(v.merge([],u.getElementsByTagName("script")),m),b.splice.apply(b,[s+1,0].concat(g)),s+=g.length)}return b},cleanData:function(e,t){var n,r,i,s,o=0,u=v.expando,a=v.cache,f=v.support.deleteExpando,l=v.event.special;for(;(i=e[o])!=null;o++)if(t||v.acceptData(i)){r=i[u],n=r&&a[r];if(n){if(n.events)for(s in n.events)l[s]?v.event.remove(i,s):v.removeEvent(i,s,n.handle);a[r]&&(delete a[r],f?delete i[u]:i.removeAttribute?i.removeAttribute(u):i[u]=null,v.deletedIds.push(r))}}}}),function(){var e,t;v.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e=v.uaMatch(o.userAgent),t={},e.browser&&(t[e.browser]=!0,t.version=e.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),v.browser=t,v.sub=function(){function e(t,n){return new e.fn.init(t,n)}v.extend(!0,e,this),e.superclass=this,e.fn=e.prototype=this(),e.fn.constructor=e,e.sub=this.sub,e.fn.init=function(r,i){return i&&i instanceof v&&!(i instanceof e)&&(i=e(i)),v.fn.init.call(this,r,i,t)},e.fn.init.prototype=e.fn;var t=e(i);return e}}();var Dt,Pt,Ht,Bt=/alpha\([^)]*\)/i,jt=/opacity=([^)]*)/,Ft=/^(top|right|bottom|left)$/,It=/^(none|table(?!-c[ea]).+)/,qt=/^margin/,Rt=new RegExp("^("+m+")(.*)$","i"),Ut=new RegExp("^("+m+")(?!px)[a-z%]+$","i"),zt=new RegExp("^([-+])=("+m+")","i"),Wt={BODY:"block"},Xt={position:"absolute",visibility:"hidden",display:"block"},Vt={letterSpacing:0,fontWeight:400},$t=["Top","Right","Bottom","Left"],Jt=["Webkit","O","Moz","ms"],Kt=v.fn.toggle;v.fn.extend({css:function(e,n){return v.access(this,function(e,n,r){return r!==t?v.style(e,n,r):v.css(e,n)},e,n,arguments.length>1)},show:function(){return Yt(this,!0)},hide:function(){return Yt(this)},toggle:function(e,t){var n=typeof e=="boolean";return v.isFunction(e)&&v.isFunction(t)?Kt.apply(this,arguments):this.each(function(){(n?e:Gt(this))?v(this).show():v(this).hide()})}}),v.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Dt(e,"opacity");return n===""?"1":n}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":v.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var s,o,u,a=v.camelCase(n),f=e.style;n=v.cssProps[a]||(v.cssProps[a]=Qt(f,a)),u=v.cssHooks[n]||v.cssHooks[a];if(r===t)return u&&"get"in u&&(s=u.get(e,!1,i))!==t?s:f[n];o=typeof r,o==="string"&&(s=zt.exec(r))&&(r=(s[1]+1)*s[2]+parseFloat(v.css(e,n)),o="number");if(r==null||o==="number"&&isNaN(r))return;o==="number"&&!v.cssNumber[a]&&(r+="px");if(!u||!("set"in u)||(r=u.set(e,r,i))!==t)try{f[n]=r}catch(l){}},css:function(e,n,r,i){var s,o,u,a=v.camelCase(n);return n=v.cssProps[a]||(v.cssProps[a]=Qt(e.style,a)),u=v.cssHooks[n]||v.cssHooks[a],u&&"get"in u&&(s=u.get(e,!0,i)),s===t&&(s=Dt(e,n)),s==="normal"&&n in Vt&&(s=Vt[n]),r||i!==t?(o=parseFloat(s),r||v.isNumeric(o)?o||0:s):s},swap:function(e,t,n){var r,i,s={};for(i in t)s[i]=e.style[i],e.style[i]=t[i];r=n.call(e);for(i in t)e.style[i]=s[i];return r}}),e.getComputedStyle?Dt=function(t,n){var r,i,s,o,u=e.getComputedStyle(t,null),a=t.style;return u&&(r=u.getPropertyValue(n)||u[n],r===""&&!v.contains(t.ownerDocument,t)&&(r=v.style(t,n)),Ut.test(r)&&qt.test(n)&&(i=a.width,s=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=r,r=u.width,a.width=i,a.minWidth=s,a.maxWidth=o)),r}:i.documentElement.currentStyle&&(Dt=function(e,t){var n,r,i=e.currentStyle&&e.currentStyle[t],s=e.style;return i==null&&s&&s[t]&&(i=s[t]),Ut.test(i)&&!Ft.test(t)&&(n=s.left,r=e.runtimeStyle&&e.runtimeStyle.left,r&&(e.runtimeStyle.left=e.currentStyle.left),s.left=t==="fontSize"?"1em":i,i=s.pixelLeft+"px",s.left=n,r&&(e.runtimeStyle.left=r)),i===""?"auto":i}),v.each(["height","width"],function(e,t){v.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&It.test(Dt(e,"display"))?v.swap(e,Xt,function(){return tn(e,t,r)}):tn(e,t,r)},set:function(e,n,r){return Zt(e,n,r?en(e,t,r,v.support.boxSizing&&v.css(e,"boxSizing")==="border-box"):0)}}}),v.support.opacity||(v.cssHooks.opacity={get:function(e,t){return jt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=v.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if(t>=1&&v.trim(s.replace(Bt,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(r&&!r.filter)return}n.filter=Bt.test(s)?s.replace(Bt,i):s+" "+i}}),v(function(){v.support.reliableMarginRight||(v.cssHooks.marginRight={get:function(e,t){return v.swap(e,{display:"inline-block"},function(){if(t)return Dt(e,"marginRight")})}}),!v.support.pixelPosition&&v.fn.position&&v.each(["top","left"],function(e,t){v.cssHooks[t]={get:function(e,n){if(n){var r=Dt(e,t);return Ut.test(r)?v(e).position()[t]+"px":r}}}})}),v.expr&&v.expr.filters&&(v.expr.filters.hidden=function(e){return e.offsetWidth===0&&e.offsetHeight===0||!v.support.reliableHiddenOffsets&&(e.style&&e.style.display||Dt(e,"display"))==="none"},v.expr.filters.visible=function(e){return!v.expr.filters.hidden(e)}),v.each({margin:"",padding:"",border:"Width"},function(e,t){v.cssHooks[e+t]={expand:function(n){var r,i=typeof n=="string"?n.split(" "):[n],s={};for(r=0;r<4;r++)s[e+$t[r]+t]=i[r]||i[r-2]||i[0];return s}},qt.test(e)||(v.cssHooks[e+t].set=Zt)});var rn=/%20/g,sn=/\[\]$/,on=/\r?\n/g,un=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,an=/^(?:select|textarea)/i;v.fn.extend({serialize:function(){return v.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?v.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||an.test(this.nodeName)||un.test(this.type))}).map(function(e,t){var n=v(this).val();return n==null?null:v.isArray(n)?v.map(n,function(e,n){return{name:t.name,value:e.replace(on,"\r\n")}}):{name:t.name,value:n.replace(on,"\r\n")}}).get()}}),v.param=function(e,n){var r,i=[],s=function(e,t){t=v.isFunction(t)?t():t==null?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};n===t&&(n=v.ajaxSettings&&v.ajaxSettings.traditional);if(v.isArray(e)||e.jquery&&!v.isPlainObject(e))v.each(e,function(){s(this.name,this.value)});else for(r in e)fn(r,e[r],n,s);return i.join("&").replace(rn,"+")};var ln,cn,hn=/#.*$/,pn=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,dn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,vn=/^(?:GET|HEAD)$/,mn=/^\/\//,gn=/\?/,yn=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bn=/([?&])_=[^&]*/,wn=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,En=v.fn.load,Sn={},xn={},Tn=["*/"]+["*"];try{cn=s.href}catch(Nn){cn=i.createElement("a"),cn.href="",cn=cn.href}ln=wn.exec(cn.toLowerCase())||[],v.fn.load=function(e,n,r){if(typeof e!="string"&&En)return En.apply(this,arguments);if(!this.length)return this;var i,s,o,u=this,a=e.indexOf(" ");return a>=0&&(i=e.slice(a,e.length),e=e.slice(0,a)),v.isFunction(n)?(r=n,n=t):n&&typeof n=="object"&&(s="POST"),v.ajax({url:e,type:s,dataType:"html",data:n,complete:function(e,t){r&&u.each(r,o||[e.responseText,t,e])}}).done(function(e){o=arguments,u.html(i?v("<div>").append(e.replace(yn,"")).find(i):e)}),this},v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,t){v.fn[t]=function(e){return this.on(t,e)}}),v.each(["get","post"],function(e,n){v[n]=function(e,r,i,s){return v.isFunction(r)&&(s=s||i,i=r,r=t),v.ajax({type:n,url:e,data:r,success:i,dataType:s})}}),v.extend({getScript:function(e,n){return v.get(e,t,n,"script")},getJSON:function(e,t,n){return v.get(e,t,n,"json")},ajaxSetup:function(e,t){return t?Ln(e,v.ajaxSettings):(t=e,e=v.ajaxSettings),Ln(e,t),e},ajaxSettings:{url:cn,isLocal:dn.test(ln[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":Tn},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":v.parseJSON,"text xml":v.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:Cn(Sn),ajaxTransport:Cn(xn),ajax:function(e,n){function T(e,n,s,a){var l,y,b,w,S,T=n;if(E===2)return;E=2,u&&clearTimeout(u),o=t,i=a||"",x.readyState=e>0?4:0,s&&(w=An(c,x,s));if(e>=200&&e<300||e===304)c.ifModified&&(S=x.getResponseHeader("Last-Modified"),S&&(v.lastModified[r]=S),S=x.getResponseHeader("Etag"),S&&(v.etag[r]=S)),e===304?(T="notmodified",l=!0):(l=On(c,w),T=l.state,y=l.data,b=l.error,l=!b);else{b=T;if(!T||e)T="error",e<0&&(e=0)}x.status=e,x.statusText=(n||T)+"",l?d.resolveWith(h,[y,T,x]):d.rejectWith(h,[x,T,b]),x.statusCode(g),g=t,f&&p.trigger("ajax"+(l?"Success":"Error"),[x,c,l?y:b]),m.fireWith(h,[x,T]),f&&(p.trigger("ajaxComplete",[x,c]),--v.active||v.event.trigger("ajaxStop"))}typeof e=="object"&&(n=e,e=t),n=n||{};var r,i,s,o,u,a,f,l,c=v.ajaxSetup({},n),h=c.context||c,p=h!==c&&(h.nodeType||h instanceof v)?v(h):v.event,d=v.Deferred(),m=v.Callbacks("once memory"),g=c.statusCode||{},b={},w={},E=0,S="canceled",x={readyState:0,setRequestHeader:function(e,t){if(!E){var n=e.toLowerCase();e=w[n]=w[n]||e,b[e]=t}return this},getAllResponseHeaders:function(){return E===2?i:null},getResponseHeader:function(e){var n;if(E===2){if(!s){s={};while(n=pn.exec(i))s[n[1].toLowerCase()]=n[2]}n=s[e.toLowerCase()]}return n===t?null:n},overrideMimeType:function(e){return E||(c.mimeType=e),this},abort:function(e){return e=e||S,o&&o.abort(e),T(0,e),this}};d.promise(x),x.success=x.done,x.error=x.fail,x.complete=m.add,x.statusCode=function(e){if(e){var t;if(E<2)for(t in e)g[t]=[g[t],e[t]];else t=e[x.status],x.always(t)}return this},c.url=((e||c.url)+"").replace(hn,"").replace(mn,ln[1]+"//"),c.dataTypes=v.trim(c.dataType||"*").toLowerCase().split(y),c.crossDomain==null&&(a=wn.exec(c.url.toLowerCase()),c.crossDomain=!(!a||a[1]===ln[1]&&a[2]===ln[2]&&(a[3]||(a[1]==="http:"?80:443))==(ln[3]||(ln[1]==="http:"?80:443)))),c.data&&c.processData&&typeof c.data!="string"&&(c.data=v.param(c.data,c.traditional)),kn(Sn,c,n,x);if(E===2)return x;f=c.global,c.type=c.type.toUpperCase(),c.hasContent=!vn.test(c.type),f&&v.active++===0&&v.event.trigger("ajaxStart");if(!c.hasContent){c.data&&(c.url+=(gn.test(c.url)?"&":"?")+c.data,delete c.data),r=c.url;if(c.cache===!1){var N=v.now(),C=c.url.replace(bn,"$1_="+N);c.url=C+(C===c.url?(gn.test(c.url)?"&":"?")+"_="+N:"")}}(c.data&&c.hasContent&&c.contentType!==!1||n.contentType)&&x.setRequestHeader("Content-Type",c.contentType),c.ifModified&&(r=r||c.url,v.lastModified[r]&&x.setRequestHeader("If-Modified-Since",v.lastModified[r]),v.etag[r]&&x.setRequestHeader("If-None-Match",v.etag[r])),x.setRequestHeader("Accept",c.dataTypes[0]&&c.accepts[c.dataTypes[0]]?c.accepts[c.dataTypes[0]]+(c.dataTypes[0]!=="*"?", "+Tn+"; q=0.01":""):c.accepts["*"]);for(l in c.headers)x.setRequestHeader(l,c.headers[l]);if(!c.beforeSend||c.beforeSend.call(h,x,c)!==!1&&E!==2){S="abort";for(l in{success:1,error:1,complete:1})x[l](c[l]);o=kn(xn,c,n,x);if(!o)T(-1,"No Transport");else{x.readyState=1,f&&p.trigger("ajaxSend",[x,c]),c.async&&c.timeout>0&&(u=setTimeout(function(){x.abort("timeout")},c.timeout));try{E=1,o.send(b,T)}catch(k){if(!(E<2))throw k;T(-1,k)}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var Mn=[],_n=/\?/,Dn=/(=)\?(?=&|$)|\?\?/,Pn=v.now();v.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Mn.pop()||v.expando+"_"+Pn++;return this[e]=!0,e}}),v.ajaxPrefilter("json jsonp",function(n,r,i){var s,o,u,a=n.data,f=n.url,l=n.jsonp!==!1,c=l&&Dn.test(f),h=l&&!c&&typeof a=="string"&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Dn.test(a);if(n.dataTypes[0]==="jsonp"||c||h)return s=n.jsonpCallback=v.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,o=e[s],c?n.url=f.replace(Dn,"$1"+s):h?n.data=a.replace(Dn,"$1"+s):l&&(n.url+=(_n.test(f)?"&":"?")+n.jsonp+"="+s),n.converters["script json"]=function(){return u||v.error(s+" was not called"),u[0]},n.dataTypes[0]="json",e[s]=function(){u=arguments},i.always(function(){e[s]=o,n[s]&&(n.jsonpCallback=r.jsonpCallback,Mn.push(s)),u&&v.isFunction(o)&&o(u[0]),u=o=t}),"script"}),v.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){return v.globalEval(e),e}}}),v.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),v.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=i.head||i.getElementsByTagName("head")[0]||i.documentElement;return{send:function(s,o){n=i.createElement("script"),n.async="async",e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,i){if(i||!n.readyState||/loaded|complete/.test(n.readyState))n.onload=n.onreadystatechange=null,r&&n.parentNode&&r.removeChild(n),n=t,i||o(200,"success")},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(0,1)}}}});var Hn,Bn=e.ActiveXObject?function(){for(var e in Hn)Hn[e](0,1)}:!1,jn=0;v.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&Fn()||In()}:Fn,function(e){v.extend(v.support,{ajax:!!e,cors:!!e&&"withCredentials"in e})}(v.ajaxSettings.xhr()),v.support.ajax&&v.ajaxTransport(function(n){if(!n.crossDomain||v.support.cors){var r;return{send:function(i,s){var o,u,a=n.xhr();n.username?a.open(n.type,n.url,n.async,n.username,n.password):a.open(n.type,n.url,n.async);if(n.xhrFields)for(u in n.xhrFields)a[u]=n.xhrFields[u];n.mimeType&&a.overrideMimeType&&a.overrideMimeType(n.mimeType),!n.crossDomain&&!i["X-Requested-With"]&&(i["X-Requested-With"]="XMLHttpRequest");try{for(u in i)a.setRequestHeader(u,i[u])}catch(f){}a.send(n.hasContent&&n.data||null),r=function(e,i){var u,f,l,c,h;try{if(r&&(i||a.readyState===4)){r=t,o&&(a.onreadystatechange=v.noop,Bn&&delete Hn[o]);if(i)a.readyState!==4&&a.abort();else{u=a.status,l=a.getAllResponseHeaders(),c={},h=a.responseXML,h&&h.documentElement&&(c.xml=h);try{c.text=a.responseText}catch(p){}try{f=a.statusText}catch(p){f=""}!u&&n.isLocal&&!n.crossDomain?u=c.text?200:404:u===1223&&(u=204)}}}catch(d){i||s(-1,d)}c&&s(u,f,c,l)},n.async?a.readyState===4?setTimeout(r,0):(o=++jn,Bn&&(Hn||(Hn={},v(e).unload(Bn)),Hn[o]=r),a.onreadystatechange=r):r()},abort:function(){r&&r(0,1)}}}});var qn,Rn,Un=/^(?:toggle|show|hide)$/,zn=new RegExp("^(?:([-+])=|)("+m+")([a-z%]*)$","i"),Wn=/queueHooks$/,Xn=[Gn],Vn={"*":[function(e,t){var n,r,i=this.createTween(e,t),s=zn.exec(t),o=i.cur(),u=+o||0,a=1,f=20;if(s){n=+s[2],r=s[3]||(v.cssNumber[e]?"":"px");if(r!=="px"&&u){u=v.css(i.elem,e,!0)||n||1;do a=a||".5",u/=a,v.style(i.elem,e,u+r);while(a!==(a=i.cur()/o)&&a!==1&&--f)}i.unit=r,i.start=u,i.end=s[1]?u+(s[1]+1)*n:n}return i}]};v.Animation=v.extend(Kn,{tweener:function(e,t){v.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r<i;r++)n=e[r],Vn[n]=Vn[n]||[],Vn[n].unshift(t)},prefilter:function(e,t){t?Xn.unshift(e):Xn.push(e)}}),v.Tween=Yn,Yn.prototype={constructor:Yn,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(v.cssNumber[n]?"":"px")},cur:function(){var e=Yn.propHooks[this.prop];return e&&e.get?e.get(this):Yn.propHooks._default.get(this)},run:function(e){var t,n=Yn.propHooks[this.prop];return this.options.duration?this.pos=t=v.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yn.propHooks._default.set(this),this}},Yn.prototype.init.prototype=Yn.prototype,Yn.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=v.css(e.elem,e.prop,!1,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){v.fx.step[e.prop]?v.fx.step[e.prop](e):e.elem.style&&(e.elem.style[v.cssProps[e.prop]]!=null||v.cssHooks[e.prop])?v.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yn.propHooks.scrollTop=Yn.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},v.each(["toggle","show","hide"],function(e,t){var n=v.fn[t];v.fn[t]=function(r,i,s){return r==null||typeof r=="boolean"||!e&&v.isFunction(r)&&v.isFunction(i)?n.apply(this,arguments):this.animate(Zn(t,!0),r,i,s)}}),v.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Gt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=v.isEmptyObject(e),s=v.speed(t,n,r),o=function(){var t=Kn(this,v.extend({},e),s);i&&t.stop(!0)};return i||s.queue===!1?this.each(o):this.queue(s.queue,o)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return typeof e!="string"&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=e!=null&&e+"queueHooks",s=v.timers,o=v._data(this);if(n)o[n]&&o[n].stop&&i(o[n]);else for(n in o)o[n]&&o[n].stop&&Wn.test(n)&&i(o[n]);for(n=s.length;n--;)s[n].elem===this&&(e==null||s[n].queue===e)&&(s[n].anim.stop(r),t=!1,s.splice(n,1));(t||!r)&&v.dequeue(this,e)})}}),v.each({slideDown:Zn("show"),slideUp:Zn("hide"),slideToggle:Zn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){v.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),v.speed=function(e,t,n){var r=e&&typeof e=="object"?v.extend({},e):{complete:n||!n&&t||v.isFunction(e)&&e,duration:e,easing:n&&t||t&&!v.isFunction(t)&&t};r.duration=v.fx.off?0:typeof r.duration=="number"?r.duration:r.duration in v.fx.speeds?v.fx.speeds[r.duration]:v.fx.speeds._default;if(r.queue==null||r.queue===!0)r.queue="fx";return r.old=r.complete,r.complete=function(){v.isFunction(r.old)&&r.old.call(this),r.queue&&v.dequeue(this,r.queue)},r},v.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},v.timers=[],v.fx=Yn.prototype.init,v.fx.tick=function(){var e,n=v.timers,r=0;qn=v.now();for(;r<n.length;r++)e=n[r],!e()&&n[r]===e&&n.splice(r--,1);n.length||v.fx.stop(),qn=t},v.fx.timer=function(e){e()&&v.timers.push(e)&&!Rn&&(Rn=setInterval(v.fx.tick,v.fx.interval))},v.fx.interval=13,v.fx.stop=function(){clearInterval(Rn),Rn=null},v.fx.speeds={slow:600,fast:200,_default:400},v.fx.step={},v.expr&&v.expr.filters&&(v.expr.filters.animated=function(e){return v.grep(v.timers,function(t){return e===t.elem}).length});var er=/^(?:body|html)$/i;v.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){v.offset.setOffset(this,e,t)});var n,r,i,s,o,u,a,f={top:0,left:0},l=this[0],c=l&&l.ownerDocument;if(!c)return;return(r=c.body)===l?v.offset.bodyOffset(l):(n=c.documentElement,v.contains(n,l)?(typeof l.getBoundingClientRect!="undefined"&&(f=l.getBoundingClientRect()),i=tr(c),s=n.clientTop||r.clientTop||0,o=n.clientLeft||r.clientLeft||0,u=i.pageYOffset||n.scrollTop,a=i.pageXOffset||n.scrollLeft,{top:f.top+u-s,left:f.left+a-o}):f)},v.offset={bodyOffset:function(e){var t=e.offsetTop,n=e.offsetLeft;return v.support.doesNotIncludeMarginInBodyOffset&&(t+=parseFloat(v.css(e,"marginTop"))||0,n+=parseFloat(v.css(e,"marginLeft"))||0),{top:t,left:n}},setOffset:function(e,t,n){var r=v.css(e,"position");r==="static"&&(e.style.position="relative");var i=v(e),s=i.offset(),o=v.css(e,"top"),u=v.css(e,"left"),a=(r==="absolute"||r==="fixed")&&v.inArray("auto",[o,u])>-1,f={},l={},c,h;a?(l=i.position(),c=l.top,h=l.left):(c=parseFloat(o)||0,h=parseFloat(u)||0),v.isFunction(t)&&(t=t.call(e,n,s)),t.top!=null&&(f.top=t.top-s.top+c),t.left!=null&&(f.left=t.left-s.left+h),"using"in t?t.using.call(e,f):i.css(f)}},v.fn.extend({position:function(){if(!this[0])return;var e=this[0],t=this.offsetParent(),n=this.offset(),r=er.test(t[0].nodeName)?{top:0,left:0}:t.offset();return n.top-=parseFloat(v.css(e,"marginTop"))||0,n.left-=parseFloat(v.css(e,"marginLeft"))||0,r.top+=parseFloat(v.css(t[0],"borderTopWidth"))||0,r.left+=parseFloat(v.css(t[0],"borderLeftWidth"))||0,{top:n.top-r.top,left:n.left-r.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||i.body;while(e&&!er.test(e.nodeName)&&v.css(e,"position")==="static")e=e.offsetParent;return e||i.body})}}),v.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);v.fn[e]=function(i){return v.access(this,function(e,i,s){var o=tr(e);if(s===t)return o?n in o?o[n]:o.document.documentElement[i]:e[i];o?o.scrollTo(r?v(o).scrollLeft():s,r?s:v(o).scrollTop()):e[i]=s},e,i,arguments.length,null)}}),v.each({Height:"height",Width:"width"},function(e,n){v.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){v.fn[i]=function(i,s){var o=arguments.length&&(r||typeof i!="boolean"),u=r||(i===!0||s===!0?"margin":"border");return v.access(this,function(n,r,i){var s;return v.isWindow(n)?n.document.documentElement["client"+e]:n.nodeType===9?(s=n.documentElement,Math.max(n.body["scroll"+e],s["scroll"+e],n.body["offset"+e],s["offset"+e],s["client"+e])):i===t?v.css(n,r,i,u):v.style(n,r,i,u)},n,o?i:t,o,null)}})}),e.jQuery=e.$=v,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return v})})(window);
-</script>
-<script type="text/javascript">
-/*
- * jQuery Templates Plugin 1.0.0pre
- * http://github.com/jquery/jquery-tmpl
- * Requires jQuery 1.4.2
- *
- * Copyright Software Freedom Conservancy, Inc.
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- */
-(function(a){var r=a.fn.domManip,d="_tmplitem",q=/^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /,b={},f={},e,p={key:0,data:{}},i=0,c=0,l=[];function g(g,d,h,e){var c={data:e||(e===0||e===false)?e:d?d.data:{},_wrap:d?d._wrap:null,tmpl:null,parent:d||null,nodes:[],calls:u,nest:w,wrap:x,html:v,update:t};g&&a.extend(c,g,{nodes:[],parent:d});if(h){c.tmpl=h;c._ctnt=c._ctnt||c.tmpl(a,c);c.key=++i;(l.length?f:b)[i]=c}return c}a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(f,d){a.fn[f]=function(n){var g=[],i=a(n),k,h,m,l,j=this.length===1&&this[0].parentNode;e=b||{};if(j&&j.nodeType===11&&j.childNodes.length===1&&i.length===1){i[d](this[0]);g=this}else{for(h=0,m=i.length;h<m;h++){c=h;k=(h>0?this.clone(true):this).get();a(i[h])[d](k);g=g.concat(k)}c=0;g=this.pushStack(g,f,i.selector)}l=e;e=null;a.tmpl.complete(l);return g}});a.fn.extend({tmpl:function(d,c,b){return a.tmpl(this[0],d,c,b)},tmplItem:function(){return a.tmplItem(this[0])},template:function(b){return a.template(b,this[0])},domManip:function(d,m,k){if(d[0]&&a.isArray(d[0])){var g=a.makeArray(arguments),h=d[0],j=h.length,i=0,f;while(i<j&&!(f=a.data(h[i++],"tmplItem")));if(f&&c)g[2]=function(b){a.tmpl.afterManip(this,b,k)};r.apply(this,g)}else r.apply(this,arguments);c=0;!e&&a.tmpl.complete(b);return this}});a.extend({tmpl:function(d,h,e,c){var i,k=!c;if(k){c=p;d=a.template[d]||a.template(null,d);f={}}else if(!d){d=c.tmpl;b[c.key]=c;c.nodes=[];c.wrapped&&n(c,c.wrapped);return a(j(c,null,c.tmpl(a,c)))}if(!d)return[];if(typeof h==="function")h=h.call(c||{});e&&e.wrapped&&n(e,e.wrapped);i=a.isArray(h)?a.map(h,function(a){return a?g(e,c,d,a):null}):[g(e,c,d,h)];return k?a(j(c,null,i)):i},tmplItem:function(b){var c;if(b instanceof a)b=b[0];while(b&&b.nodeType===1&&!(c=a.data(b,"tmplItem"))&&(b=b.parentNode));return c||p},template:function(c,b){if(b){if(typeof b==="string")b=o(b);else if(b instanceof a)b=b[0]||{};if(b.nodeType)b=a.data(b,"tmpl")||a.data(b,"tmpl",o(b.innerHTML));return typeof c==="string"?(a.template[c]=b):b}return c?typeof c!=="string"?a.template(null,c):a.template[c]||a.template(null,q.test(c)?c:a(c)):null},encode:function(a){return(""+a).split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&#34;").split("'").join("&#39;")}});a.extend(a.tmpl,{tag:{tmpl:{_default:{$2:"null"},open:"if($notnull_1){__=__.concat($item.nest($1,$2));}"},wrap:{_default:{$2:"null"},open:"$item.calls(__,$1,$2);__=[];",close:"call=$item.calls();__=call._.concat($item.wrap(call,__));"},each:{_default:{$2:"$index, $value"},open:"if($notnull_1){$.each($1a,function($2){with(this){",close:"}});}"},"if":{open:"if(($notnull_1) && $1a){",close:"}"},"else":{_default:{$1:"true"},open:"}else if(($notnull_1) && $1a){"},html:{open:"if($notnull_1){__.push($1a);}"},"=":{_default:{$1:"$data"},open:"if($notnull_1){__.push($.encode($1a));}"},"!":{open:""}},complete:function(){b={}},afterManip:function(f,b,d){var e=b.nodeType===11?a.makeArray(b.childNodes):b.nodeType===1?[b]:[];d.call(f,b);m(e);c++}});function j(e,g,f){var b,c=f?a.map(f,function(a){return typeof a==="string"?e.key?a.replace(/(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g,"$1 "+d+'="'+e.key+'" $2'):a:j(a,e,a._ctnt)}):e;if(g)return c;c=c.join("");c.replace(/^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/,function(f,c,e,d){b=a(e).get();m(b);if(c)b=k(c).concat(b);if(d)b=b.concat(k(d))});return b?b:k(c)}function k(c){var b=document.createElement("div");b.innerHTML=c;return a.makeArray(b.childNodes)}function o(b){return new Function("jQuery","$item","var $=jQuery,call,__=[],$data=$item.data;with($data){__.push('"+a.trim(b).replace(/([\\'])/g,"\\$1").replace(/[\r\t\n]/g," ").replace(/\$\{([^\}]*)\}/g,"{{= $1}}").replace(/\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g,function(m,l,k,g,b,c,d){var j=a.tmpl.tag[k],i,e,f;if(!j)throw"Unknown template tag: "+k;i=j._default||[];if(c&&!/\w$/.test(b)){b+=c;c=""}if(b){b=h(b);d=d?","+h(d)+")":c?")":"";e=c?b.indexOf(".")>-1?b+h(c):"("+b+").call($item"+d:b;f=c?e:"(typeof("+b+")==='function'?("+b+").call($item):("+b+"))"}else f=e=i.$1||"null";g=h(g);return"');"+j[l?"close":"open"].split("$notnull_1").join(b?"typeof("+b+")!=='undefined' && ("+b+")!=null":"true").split("$1a").join(f).split("$1").join(e).split("$2").join(g||i.$2||"")+"__.push('"})+"');}return __;")}function n(c,b){c._wrap=j(c,true,a.isArray(b)?b:[q.test(b)?b:a(b).html()]).join("")}function h(a){return a?a.replace(/\\'/g,"'").replace(/\\\\/g,"\\"):null}function s(b){var a=document.createElement("div");a.appendChild(b.cloneNode(true));return a.innerHTML}function m(o){var n="_"+c,k,j,l={},e,p,h;for(e=0,p=o.length;e<p;e++){if((k=o[e]).nodeType!==1)continue;j=k.getElementsByTagName("*");for(h=j.length-1;h>=0;h--)m(j[h]);m(k)}function m(j){var p,h=j,k,e,m;if(m=j.getAttribute(d)){while(h.parentNode&&(h=h.parentNode).nodeType===1&&!(p=h.getAttribute(d)));if(p!==m){h=h.parentNode?h.nodeType===11?0:h.getAttribute(d)||0:0;if(!(e=b[m])){e=f[m];e=g(e,b[h]||f[h]);e.key=++i;b[i]=e}c&&o(m)}j.removeAttribute(d)}else if(c&&(e=a.data(j,"tmplItem"))){o(e.key);b[e.key]=e;h=a.data(j.parentNode,"tmplItem");h=h?h.key:0}if(e){k=e;while(k&&k.key!=h){k.nodes.push(j);k=k.parent}delete e._ctnt;delete e._wrap;a.data(j,"tmplItem",e)}function o(a){a=a+n;e=l[a]=l[a]||g(e,b[e.parent.key+n]||e.parent)}}}function u(a,d,c,b){if(!a)return l.pop();l.push({_:a,tmpl:d,item:this,data:c,options:b})}function w(d,c,b){return a.tmpl(a.template(d),c,b,this)}function x(b,d){var c=b.options||{};c.wrapped=d;return a.tmpl(a.template(b.tmpl),b.data,c,b.item)}function v(d,c){var b=this._wrap;return a.map(a(a.isArray(b)?b.join(""):b).filter(d||"*"),function(a){return c?a.innerText||a.textContent:a.outerHTML||s(a)})}function t(){var b=this.nodes;a.tmpl(null,null,null,this).insertBefore(b[0]);a(b).remove()}})(jQuery);
-</script>
-<script type="text/javascript">
-/*!
-* TableSorter 2.7.8 min - Client-side table sorting with ease!
-* Copyright (c) 2007 Christian Bach
-*/
-!function(j){j.extend({tablesorter:new function(){function e(d){"undefined"!==typeof console&&"undefined"!==typeof console.log?console.log(d):alert(d)}function u(d,c){e(d+" ("+((new Date).getTime()-c.getTime())+"ms)")}function p(d,c,a){if(!c)return"";var b=d.config,g=b.textExtraction,f="",f="simple"===g?b.supportsTextContent?c.textContent:j(c).text():"function"===typeof g?g(c,d,a):"object"===typeof g&&g.hasOwnProperty(a)?g[a](c,d,a):b.supportsTextContent?c.textContent:j(c).text();return j.trim(f)} function h(d){var c=d.config,a=c.$tbodies=c.$table.children("tbody:not(."+c.cssInfoBlock+")"),b,q,f,l,j,n,k="";if(0===a.length)return c.debug?e("*Empty table!* Not building a parser cache"):"";a=a[0].rows;if(a[0]){b=[];q=a[0].cells.length;for(f=0;f<q;f++){l=c.$headers.filter(":not([colspan])");l=l.add(c.$headers.filter('[colspan="1"]')).filter('[data-column="'+f+'"]:last');j=c.headers[f];n=g.getParserById(g.getData(l,j,"sorter"));c.empties[f]=g.getData(l,j,"empty")||c.emptyTo||(c.emptyToBottom?"bottom": "top");c.strings[f]=g.getData(l,j,"string")||c.stringTo||"max";if(!n)a:{l=d;j=a;n=-1;for(var u=f,x=void 0,t=g.parsers.length,y=!1,m="",x=!0;""===m&&x;)n++,j[n]?(y=j[n].cells[u],m=p(l,y,u),l.config.debug&&e("Checking if value was empty on row "+n+", column: "+u+": "+m)):x=!1;for(x=1;x<t;x++)if(g.parsers[x].is&&g.parsers[x].is(m,l,y)){n=g.parsers[x];break a}n=g.parsers[0]}c.debug&&(k+="column:"+f+"; parser:"+n.id+"; string:"+c.strings[f]+"; empty: "+c.empties[f]+"\n");b.push(n)}}c.debug&&e(k);return b} function s(d){var c=d.tBodies,a=d.config,b,q,f=a.parsers,l,v,n,k,h,x,t,m=[];a.cache={};if(!f)return a.debug?e("*Empty table!* Not building a cache"):"";a.debug&&(t=new Date);a.showProcessing&&g.isProcessing(d,!0);for(k=0;k<c.length;k++)if(a.cache[k]={row:[],normalized:[]},!j(c[k]).hasClass(a.cssInfoBlock)){b=c[k]&&c[k].rows.length||0;q=c[k].rows[0]&&c[k].rows[0].cells.length||0;for(v=0;v<b;++v)if(h=j(c[k].rows[v]),x=[],h.hasClass(a.cssChildRow))a.cache[k].row[a.cache[k].row.length-1]=a.cache[k].row[a.cache[k].row.length- 1].add(h);else{a.cache[k].row.push(h);for(n=0;n<q;++n)if(l=p(d,h[0].cells[n],n),l=f[n].format(l,d,h[0].cells[n],n),x.push(l),"numeric"===(f[n].type||"").toLowerCase())m[n]=Math.max(Math.abs(l),m[n]||0);x.push(a.cache[k].normalized.length);a.cache[k].normalized.push(x)}a.cache[k].colMax=m}a.showProcessing&&g.isProcessing(d);a.debug&&u("Building cache for "+b+" rows",t)}function m(d,c){var a=d.config,b=d.tBodies,q=[],f=a.cache,e,v,n,k,h,p,m,y,s,r,E;if(f[0]){a.debug&&(E=new Date);for(y=0;y<b.length;y++)if(e= j(b[y]),!e.hasClass(a.cssInfoBlock)){h=g.processTbody(d,e,!0);e=f[y].row;v=f[y].normalized;k=(n=v.length)?v[0].length-1:0;for(p=0;p<n;p++)if(r=v[p][k],q.push(e[r]),!a.appender||!a.removeRows){s=e[r].length;for(m=0;m<s;m++)h.append(e[r][m])}g.processTbody(d,h,!1)}a.appender&&a.appender(d,q);a.debug&&u("Rebuilt table",E);c||g.applyWidget(d);j(d).trigger("sortEnd",d)}}function F(d){var c,a,b,g=d.config,f=g.sortList,e=[g.cssAsc,g.cssDesc],h=j(d).find("tfoot tr").children().removeClass(e.join(" "));g.$headers.removeClass(e.join(" ")); b=f.length;for(c=0;c<b;c++)if(2!==f[c][1]&&(d=g.$headers.not(".sorter-false").filter('[data-column="'+f[c][0]+'"]'+(1===b?":last":"")),d.length))for(a=0;a<d.length;a++)d[a].sortDisabled||(d.eq(a).addClass(e[f[c][1]]),h.length&&h.filter('[data-column="'+f[c][0]+'"]').eq(a).addClass(e[f[c][1]]))}function G(d){var c=0,a=d.config,b=a.sortList,g=b.length,f=d.tBodies.length,e,h,n,k,p,m,t,r,s;if(!a.serverSideSorting&&a.cache[0]){a.debug&&(e=new Date);for(n=0;n<f;n++)p=a.cache[n].colMax,s=(m=a.cache[n].normalized)&& m[0]?m[0].length-1:0,m.sort(function(f,e){for(h=0;h<g;h++){k=b[h][0];r=b[h][1];t=/n/i.test(a.parsers&&a.parsers[k]?a.parsers[k].type||"":"")?"Numeric":"Text";t+=0===r?"":"Desc";/Numeric/.test(t)&&a.strings[k]&&(c="boolean"===typeof a.string[a.strings[k]]?(0===r?1:-1)*(a.string[a.strings[k]]?-1:1):a.strings[k]?a.string[a.strings[k]]||0:0);var l=j.tablesorter["sort"+t](d,f[k],e[k],k,p[k],c);if(l)return l}return f[s]-e[s]});a.debug&&u("Sorting on "+b.toString()+" and dir "+r+" time",e)}}function C(d, c){d.trigger("updateComplete");"function"===typeof c&&c(d[0])}function I(d,c,a){!1!==c?d.trigger("sorton",[d[0].config.sortList,function(){C(d,a)}]):C(d,a)}var g=this;g.version="2.7.8";g.parsers=[];g.widgets=[];g.defaults={theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,headers:{},ignoreCase:!0, sortForce:null,sortList:[],sortAppend:null,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",textExtraction:"simple",textSorter:null,widgets:[],widgetOptions:{zebra:["even","odd"]},initWidgets:!0,initialized:null,tableClass:"tablesorter",cssAsc:"tablesorter-headerAsc",cssChildRow:"tablesorter-childRow",cssDesc:"tablesorter-headerDesc",cssHeader:"tablesorter-header",cssHeaderRow:"tablesorter-headerRow",cssIcon:"tablesorter-icon",cssInfoBlock:"tablesorter-infoOnly", cssProcessing:"tablesorter-processing",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[]};g.benchmark=u;g.construct=function(d){return this.each(function(){if(!this.tHead||0===this.tBodies.length||!0===this.hasInitialized)return this.config&&this.config.debug?e("stopping initialization! No thead, tbody or tablesorter has already been initialized"):"";var c=j(this),a=this,b,q,f,l="",v,n,k,C,x=j.metadata; a.hasInitialized=!1;a.config={};b=j.extend(!0,a.config,g.defaults,d);j.data(a,"tablesorter",b);b.debug&&j.data(a,"startoveralltimer",new Date);b.supportsTextContent="x"===j("<span>x</span>")[0].textContent;b.supportsDataObject=1.4<=parseFloat(j.fn.jquery);b.string={max:1,min:-1,"max+":1,"max-":-1,zero:0,none:0,"null":0,top:!0,bottom:!1};/tablesorter\-/.test(c.attr("class"))||(l=""!==b.theme?" tablesorter-"+b.theme:"");b.$table=c.addClass(b.tableClass+l);b.$tbodies=c.children("tbody:not(."+b.cssInfoBlock+ ")");var t=[],y={},O=0,R=j(a).find("thead:eq(0), tfoot").children("tr"),E,K,z,A,P,D,L,S,T,H;for(E=0;E<R.length;E++){P=R[E].cells;for(K=0;K<P.length;K++){A=P[K];D=A.parentNode.rowIndex;L=D+"-"+A.cellIndex;S=A.rowSpan||1;T=A.colSpan||1;"undefined"===typeof t[D]&&(t[D]=[]);for(z=0;z<t[D].length+1;z++)if("undefined"===typeof t[D][z]){H=z;break}y[L]=H;O=Math.max(H,O);j(A).attr({"data-column":H});for(z=D;z<D+S;z++){"undefined"===typeof t[z]&&(t[z]=[]);L=t[z];for(A=H;A<H+T;A++)L[A]="x"}}}a.config.columns= O;var M,B,Q,U,N,J,V,w=a.config;w.headerList=[];w.headerContent=[];w.debug&&(V=new Date);U=w.cssIcon?'<i class="'+w.cssIcon+'"></i>':"";t=j(a).find(w.selectorHeaders).each(function(a){B=j(this);M=w.headers[a];w.headerContent[a]=this.innerHTML;N=w.headerTemplate.replace(/\{content\}/g,this.innerHTML).replace(/\{icon\}/g,U);w.onRenderTemplate&&(Q=w.onRenderTemplate.apply(B,[a,N]))&&"string"===typeof Q&&(N=Q);this.innerHTML='<div class="tablesorter-header-inner">'+N+"</div>";w.onRenderHeader&&w.onRenderHeader.apply(B, [a]);this.column=y[this.parentNode.rowIndex+"-"+this.cellIndex];var b=g.getData(B,M,"sortInitialOrder")||w.sortInitialOrder;this.order=/^d/i.test(b)||1===b?[1,0,2]:[0,1,2];this.count=-1;"false"===g.getData(B,M,"sorter")?(this.sortDisabled=!0,B.addClass("sorter-false")):B.removeClass("sorter-false");this.lockedOrder=!1;J=g.getData(B,M,"lockedOrder")||!1;"undefined"!==typeof J&&!1!==J&&(this.order=this.lockedOrder=/^d/i.test(J)||1===J?[1,1,1]:[0,0,0]);B.addClass((this.sortDisabled?"sorter-false ":" ")+ w.cssHeader);w.headerList[a]=this;B.parent().addClass(w.cssHeaderRow)});a.config.debug&&(u("Built headers:",V),e(t));b.$headers=t;if(a.config.widthFixed&&0===j(a).find("colgroup").length){var W=j("<colgroup>"),X=j(a).width();j("tr:first td",a.tBodies[0]).each(function(){W.append(j("<col>").css("width",parseInt(1E3*(j(this).width()/X),10)/10+"%"))});j(a).prepend(W)}b.parsers=h(a);b.delayInit||s(a);b.$headers.find("*")[j.fn.addBack?"addBack":"andSelf"]().filter(b.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter").bind("mousedown.tablesorter mouseup.tablesorter", function(d,e){var h=(this.tagName.match("TH|TD")?j(this):j(this).parents("th, td").filter(":last"))[0];if(1!==(d.which||d.button))return!1;if("mousedown"===d.type)return C=(new Date).getTime(),"INPUT"===d.target.tagName?"":!b.cancelSelection;if(!0!==e&&250<(new Date).getTime()-C)return!1;b.delayInit&&!b.cache&&s(a);if(!h.sortDisabled){c.trigger("sortStart",a);l=!d[b.sortMultiSortKey];h.count=d[b.sortResetKey]?2:(h.count+1)%(b.sortReset?3:2);b.sortRestart&&(q=h,b.$headers.each(function(){if(this!== q&&(l||!j(this).is("."+b.cssDesc+",."+b.cssAsc)))this.count=-1}));q=h.column;if(l){b.sortList=[];if(null!==b.sortForce){v=b.sortForce;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}k=h.order[h.count];if(2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k])}else if(b.sortAppend&&1<b.sortList.length&&g.isValueInArray(b.sortAppend[0][0],b.sortList)&&b.sortList.pop(),g.isValueInArray(q,b.sortList))for(f=0;f<b.sortList.length;f++)n=b.sortList[f],k=b.headerList[n[0]], n[0]===q&&(n[1]=k.order[k.count],2===n[1]&&(b.sortList.splice(f,1),k.count=-1));else if(k=h.order[h.count],2>k&&(b.sortList.push([q,k]),1<h.colSpan))for(f=1;f<h.colSpan;f++)b.sortList.push([q+f,k]);if(null!==b.sortAppend){v=b.sortAppend;for(f=0;f<v.length;f++)v[f][0]!==q&&b.sortList.push(v[f])}c.trigger("sortBegin",a);setTimeout(function(){F(a);G(a);m(a)},1)}});b.cancelSelection&&b.$headers.each(function(){this.onselectstart=function(){return!1}});c.unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave ".split(" ").join(".tablesorter ")).bind("sortReset.tablesorter", function(){b.sortList=[];F(a);G(a);m(a)}).bind("update.tablesorter updateRows.tablesorter",function(d,f,g){j(b.selectorRemove,a).remove();b.parsers=h(a);s(a);I(c,f,g)}).bind("updateCell.tablesorter",function(d,f,g,e){var q,h,l;q=c.find("tbody");d=q.index(j(f).parents("tbody").filter(":last"));var k=j(f).parents("tr").filter(":last");f=j(f)[0];q.length&&0<=d&&(h=q.eq(d).find("tr").index(k),l=f.cellIndex,q=a.config.cache[d].normalized[h].length-1,a.config.cache[d].row[a.config.cache[d].normalized[h][q]]= k,a.config.cache[d].normalized[h][l]=b.parsers[l].format(p(a,f,l),a,f,l),I(c,g,e))}).bind("addRows.tablesorter",function(d,g,e,q){var j=g.filter("tr").length,l=[],k=g[0].cells.length,n=c.find("tbody").index(g.closest("tbody"));b.parsers||(b.parsers=h(a));for(d=0;d<j;d++){for(f=0;f<k;f++)l[f]=b.parsers[f].format(p(a,g[d].cells[f],f),a,g[d].cells[f],f);l.push(b.cache[n].row.length);b.cache[n].row.push([g[d]]);b.cache[n].normalized.push(l);l=[]}I(c,e,q)}).bind("sorton.tablesorter",function(b,d,f,g){c.trigger("sortStart", this);var e,q,l,h=a.config;b=d||h.sortList;h.sortList=[];j.each(b,function(a,b){e=[parseInt(b[0],10),parseInt(b[1],10)];if(l=h.headerList[e[0]])h.sortList.push(e),q=j.inArray(e[1],l.order),l.count=0<=q?q:e[1]%(h.sortReset?3:2)});F(a);G(a);m(a,g);"function"===typeof f&&f(a)}).bind("appendCache.tablesorter",function(b,c,d){m(a,d);"function"===typeof c&&c(a)}).bind("applyWidgetId.tablesorter",function(c,d){g.getWidgetById(d).format(a,b,b.widgetOptions)}).bind("applyWidgets.tablesorter",function(b,c){g.applyWidget(a, c)}).bind("refreshWidgets.tablesorter",function(b,c,d){g.refreshWidgets(a,c,d)}).bind("destroy.tablesorter",function(b,c,d){g.destroy(a,c,d)});b.supportsDataObject&&"undefined"!==typeof c.data().sortlist?b.sortList=c.data().sortlist:x&&(c.metadata()&&c.metadata().sortlist)&&(b.sortList=c.metadata().sortlist);g.applyWidget(a,!0);0<b.sortList.length?c.trigger("sorton",[b.sortList,{},!b.initWidgets]):b.initWidgets&&g.applyWidget(a);b.showProcessing&&c.unbind("sortBegin.tablesorter sortEnd.tablesorter").bind("sortBegin.tablesorter sortEnd.tablesorter", function(b){g.isProcessing(a,"sortBegin"===b.type)});a.hasInitialized=!0;b.debug&&g.benchmark("Overall initialization time",j.data(a,"startoveralltimer"));c.trigger("tablesorter-initialized",a);"function"===typeof b.initialized&&b.initialized(a)})};g.isProcessing=function(d,c,a){var b=d.config;d=a||j(d).find("."+b.cssHeader);c?(0<b.sortList.length&&(d=d.filter(function(){return this.sortDisabled?!1:g.isValueInArray(parseFloat(j(this).attr("data-column")),b.sortList)})),d.addClass(b.cssProcessing)): d.removeClass(b.cssProcessing)};g.processTbody=function(d,c,a){if(a)return c.before('<span class="tablesorter-savemyplace"/>'),d=j.fn.detach?c.detach():c.remove();d=j(d).find("span.tablesorter-savemyplace");c.insertAfter(d);d.remove()};g.clearTableBody=function(d){d.config.$tbodies.empty()};g.destroy=function(d,c,a){if(d.hasInitialized){g.refreshWidgets(d,!0,!0);var b=j(d),e=d.config,f=b.find("thead:first"),h=f.find("tr."+e.cssHeaderRow).removeClass(e.cssHeaderRow),u=b.find("tfoot:first > tr").children("th, td"); f.find("tr").not(h).remove();b.removeData("tablesorter").unbind("sortReset update updateCell addRows sorton appendCache applyWidgetId applyWidgets refreshWidgets destroy mouseup mouseleave sortBegin sortEnd ".split(" ").join(".tablesorter "));e.$headers.add(u).removeClass(e.cssHeader+" "+e.cssAsc+" "+e.cssDesc).removeAttr("data-column");h.find(e.selectorSort).unbind("mousedown.tablesorter mouseup.tablesorter");h.children().each(function(a){j(this).html(e.headerContent[a])});!1!==c&&b.removeClass(e.tableClass+ " tablesorter-"+e.theme);d.hasInitialized=!1;"function"===typeof a&&a(d)}};g.regex=[/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,/^0x[0-9a-f]+$/i];g.sortText=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo],h=g.regex;if(""===c&&0!==f)return"boolean"===typeof f?f?-1:1:-f||-1;if(""===a&&0!==f)return"boolean"===typeof f? f?1:-1:f||1;if("function"===typeof e.textSorter)return e.textSorter(c,a,d,b);d=c.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");b=a.replace(h[0],"\\0$1\\0").replace(/\\0$/,"").replace(/^\\0/,"").split("\\0");c=parseInt(c.match(h[2]),16)||1!==d.length&&c.match(h[1])&&Date.parse(c);if(a=parseInt(a.match(h[2]),16)||c&&a.match(h[1])&&Date.parse(a)||null){if(c<a)return-1;if(c>a)return 1}e=Math.max(d.length,b.length);for(c=0;c<e;c++){a=isNaN(d[c])?d[c]||0:parseFloat(d[c])|| 0;h=isNaN(b[c])?b[c]||0:parseFloat(b[c])||0;if(isNaN(a)!==isNaN(h))return isNaN(a)?1:-1;typeof a!==typeof h&&(a+="",h+="");if(a<h)return-1;if(a>h)return 1}return 0};g.sortTextDesc=function(d,c,a,b){if(c===a)return 0;var e=d.config,f=e.string[e.empties[b]||e.emptyTo];return""===c&&0!==f?"boolean"===typeof f?f?-1:1:f||1:""===a&&0!==f?"boolean"===typeof f?f?1:-1:-f||-1:"function"===typeof e.textSorter?e.textSorter(a,c,d,b):g.sortText(d,a,c)};g.getTextValue=function(d,c,a){if(c){var b=d.length,e=c+a; for(c=0;c<b;c++)e+=d.charCodeAt(c);return a*e}return 0};g.sortNumeric=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b?b?-1:1:-b||-1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:b||1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return c-a};g.sortNumericDesc=function(d,c,a,b,e,f){if(c===a)return 0;d=d.config;b=d.string[d.empties[b]||d.emptyTo];if(""===c&&0!==b)return"boolean"===typeof b? b?-1:1:b||1;if(""===a&&0!==b)return"boolean"===typeof b?b?1:-1:-b||-1;isNaN(c)&&(c=g.getTextValue(c,e,f));isNaN(a)&&(a=g.getTextValue(a,e,f));return a-c};g.characterEquivalents={a:"\u00e1\u00e0\u00e2\u00e3\u00e4\u0105\u00e5",A:"\u00c1\u00c0\u00c2\u00c3\u00c4\u0104\u00c5",c:"\u00e7\u0107\u010d",C:"\u00c7\u0106\u010c",e:"\u00e9\u00e8\u00ea\u00eb\u011b\u0119",E:"\u00c9\u00c8\u00ca\u00cb\u011a\u0118",i:"\u00ed\u00ec\u0130\u00ee\u00ef\u0131",I:"\u00cd\u00cc\u0130\u00ce\u00cf",o:"\u00f3\u00f2\u00f4\u00f5\u00f6", O:"\u00d3\u00d2\u00d4\u00d5\u00d6",ss:"\u00df",SS:"\u1e9e",u:"\u00fa\u00f9\u00fb\u00fc\u016f",U:"\u00da\u00d9\u00db\u00dc\u016e"};g.replaceAccents=function(d){var c,a="[",b=g.characterEquivalents;if(!g.characterRegex){g.characterRegexArray={};for(c in b)"string"===typeof c&&(a+=b[c],g.characterRegexArray[c]=RegExp("["+b[c]+"]","g"));g.characterRegex=RegExp(a+"]")}if(g.characterRegex.test(d))for(c in b)"string"===typeof c&&(d=d.replace(g.characterRegexArray[c],c));return d};g.isValueInArray=function(d, c){var a,b=c.length;for(a=0;a<b;a++)if(c[a][0]===d)return!0;return!1};g.addParser=function(d){var c,a=g.parsers.length,b=!0;for(c=0;c<a;c++)g.parsers[c].id.toLowerCase()===d.id.toLowerCase()&&(b=!1);b&&g.parsers.push(d)};g.getParserById=function(d){var c,a=g.parsers.length;for(c=0;c<a;c++)if(g.parsers[c].id.toLowerCase()===d.toString().toLowerCase())return g.parsers[c];return!1};g.addWidget=function(d){g.widgets.push(d)};g.getWidgetById=function(d){var c,a,b=g.widgets.length;for(c=0;c<b;c++)if((a= g.widgets[c])&&a.hasOwnProperty("id")&&a.id.toLowerCase()===d.toLowerCase())return a};g.applyWidget=function(d,c){var a=d.config,b=a.widgetOptions,e=a.widgets.sort().reverse(),f,h,m,n=e.length;h=j.inArray("zebra",a.widgets);0<=h&&(a.widgets.splice(h,1),a.widgets.push("zebra"));a.debug&&(f=new Date);for(h=0;h<n;h++)(m=g.getWidgetById(e[h]))&&(!0===c&&m.hasOwnProperty("init")?m.init(d,m,a,b):!c&&m.hasOwnProperty("format")&&m.format(d,a,b));a.debug&&u("Completed "+(!0===c?"initializing":"applying")+ " widgets",f)};g.refreshWidgets=function(d,c,a){var b,h=d.config,f=h.widgets,l=g.widgets,m=l.length;for(b=0;b<m;b++)if(l[b]&&l[b].id&&(c||0>j.inArray(l[b].id,f)))h.debug&&e("Refeshing widgets: Removing "+l[b].id),l[b].hasOwnProperty("remove")&&l[b].remove(d,h,h.widgetOptions);!0!==a&&g.applyWidget(d,c)};g.getData=function(d,c,a){var b="";d=j(d);var e,f;if(!d.length)return"";e=j.metadata?d.metadata():!1;f=" "+(d.attr("class")||"");"undefined"!==typeof d.data(a)||"undefined"!==typeof d.data(a.toLowerCase())? b+=d.data(a)||d.data(a.toLowerCase()):e&&"undefined"!==typeof e[a]?b+=e[a]:c&&"undefined"!==typeof c[a]?b+=c[a]:" "!==f&&f.match(" "+a+"-")&&(b=f.match(RegExp(" "+a+"-(\\w+)"))[1]||"");return j.trim(b)};g.formatFloat=function(d,c){if("string"!==typeof d||""===d)return d;var a;d=(c&&c.config?!1!==c.config.usNumberFormat:"undefined"!==typeof c?c:1)?d.replace(/,/g,""):d.replace(/[\s|\.]/g,"").replace(/,/g,".");/^\s*\([.\d]+\)/.test(d)&&(d=d.replace(/^\s*\(/,"-").replace(/\)/,""));a=parseFloat(d);return isNaN(a)? j.trim(d):a};g.isDigit=function(d){return isNaN(d)?/^[\-+(]?\d+[)]?$/.test(d.toString().replace(/[,.'"\s]/g,"")):!0}}});var h=j.tablesorter;j.fn.extend({tablesorter:h.construct});h.addParser({id:"text",is:function(){return!0},format:function(e,u){var p=u.config;e=j.trim(p.ignoreCase?e.toLocaleLowerCase():e);return p.sortLocaleCompare?h.replaceAccents(e):e},type:"text"});h.addParser({id:"currency",is:function(e){return/^\(?\d+[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]|[\u00a3$\u20ac\u00a4\u00a5\u00a2?.]\d+\)?$/.test((e|| "").replace(/[,. ]/g,""))},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"ipAddress",is:function(e){return/^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$/.test(e)},format:function(e,j){var p,r=e.split("."),s="",m=r.length;for(p=0;p<m;p++)s+=("00"+r[p]).slice(-3);return h.formatFloat(s,j)},type:"numeric"});h.addParser({id:"url",is:function(e){return/^(https?|ftp|file):\/\//.test(e)},format:function(e){return j.trim(e.replace(/(https?|ftp|file):\/\//, ""))},type:"text"});h.addParser({id:"isoDate",is:function(e){return/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}/.test(e)},format:function(e,j){return h.formatFloat(""!==e?(new Date(e.replace(/-/g,"/"))).getTime()||"":"",j)},type:"numeric"});h.addParser({id:"percent",is:function(e){return/(\d\s?%|%\s?\d)/.test(e)},format:function(e,j){return h.formatFloat(e.replace(/%/g,""),j)},type:"numeric"});h.addParser({id:"usLongDate",is:function(e){return/^[A-Z]{3,10}\.?\s+\d{1,2},?\s+(\d{4})(\s+\d{1,2}:\d{2}(:\d{2})?(\s+[AP]M)?)?$/i.test(e)|| /^\d{1,2}\s+[A-Z]{3,10}\s+\d{4}/i.test(e)},format:function(e,j){return h.formatFloat((new Date(e.replace(/(\S)([AP]M)$/i,"$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"shortDate",is:function(e){return/^(\d{1,2}|\d{4})[\/\-\,\.\s+]\d{1,2}[\/\-\.\,\s+](\d{1,2}|\d{4})$/.test(e)},format:function(e,j,p,r){p=j.config;var s=p.headerList[r],m=s.shortDateFormat;"undefined"===typeof m&&(m=s.shortDateFormat=h.getData(s,p.headers[r],"dateFormat")||p.dateFormat);e=e.replace(/\s+/g," ").replace(/[\-|\.|\,]/g, "/");"mmddyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$1/$2"):"ddmmyyyy"===m?e=e.replace(/(\d{1,2})[\/\s](\d{1,2})[\/\s](\d{4})/,"$3/$2/$1"):"yyyymmdd"===m&&(e=e.replace(/(\d{4})[\/\s](\d{1,2})[\/\s](\d{1,2})/,"$1/$2/$3"));return h.formatFloat((new Date(e)).getTime()||"",j)},type:"numeric"});h.addParser({id:"time",is:function(e){return/^(([0-2]?\d:[0-5]\d)|([0-1]?\d:[0-5]\d\s?([AP]M)))$/i.test(e)},format:function(e,j){return h.formatFloat((new Date("2000/01/01 "+e.replace(/(\S)([AP]M)$/i, "$1 $2"))).getTime()||"",j)},type:"numeric"});h.addParser({id:"digit",is:function(e){return h.isDigit(e)},format:function(e,j){return h.formatFloat(e.replace(/[^\w,. \-()]/g,""),j)},type:"numeric"});h.addParser({id:"metadata",is:function(){return!1},format:function(e,h,p){e=h.config;e=!e.parserMetadataName?"sortValue":e.parserMetadataName;return j(p).metadata()[e]},type:"numeric"});h.addWidget({id:"zebra",format:function(e,u,p){var r,s,m,F,G,C,I=RegExp(u.cssChildRow,"i"),g=u.$tbodies;u.debug&&(G= new Date);for(e=0;e<g.length;e++)r=g.eq(e),C=r.children("tr").length,1<C&&(m=0,r=r.children("tr:visible"),r.each(function(){s=j(this);I.test(this.className)||m++;F=0===m%2;s.removeClass(p.zebra[F?1:0]).addClass(p.zebra[F?0:1])}));u.debug&&h.benchmark("Applying Zebra widget",G)},remove:function(e,h){var p,r,s=h.$tbodies,m=(h.widgetOptions.zebra||["even","odd"]).join(" ");for(p=0;p<s.length;p++)r=j.tablesorter.processTbody(e,s.eq(p),!0),r.children().removeClass(m),j.tablesorter.processTbody(e,r,!1)}})}(jQuery);
-</script>
-<script type="text/javascript">
-/*
-    Copyright 2008-2013
-        Matthias Ehmann,
-        Michael Gerhaeuser,
-        Carsten Miller,
-        Bianca Valentin,
-        Alfred Wassermann,
-        Peter Wilfahrt
-    Dual licensed under the Apache License Version 2.0, or LGPL Version 3 licenses.
-    You should have received a copy of the GNU Lesser General Public License
-    along with JSXCompressor.  If not, see <http://www.gnu.org/licenses/>.
-    You should have received a copy of the Apache License along with JSXCompressor.
-    If not, see <http://www.apache.org/licenses/>.
-*/
-(function(){var e,r,n;(function(t){function o(e,r){return y.call(e,r)}function i(e,r){var n,t,o,i,u,f,a,c,s,l,p=r&&r.split("/"),d=k.map,g=d&&d["*"]||{};if(e&&"."===e.charAt(0))if(r){for(p=p.slice(0,p.length-1),e=p.concat(e.split("/")),c=0;e.length>c;c+=1)if(l=e[c],"."===l)e.splice(c,1),c-=1;else if(".."===l){if(1===c&&(".."===e[2]||".."===e[0]))break;c>0&&(e.splice(c-1,2),c-=2)}e=e.join("/")}else 0===e.indexOf("./")&&(e=e.substring(2));if((p||g)&&d){for(n=e.split("/"),c=n.length;c>0;c-=1){if(t=n.slice(0,c).join("/"),p)for(s=p.length;s>0;s-=1)if(o=d[p.slice(0,s).join("/")],o&&(o=o[t])){i=o,u=c;break}if(i)break;!f&&g&&g[t]&&(f=g[t],a=c)}!i&&f&&(i=f,u=a),i&&(n.splice(0,u,i),e=n.join("/"))}return e}function u(e,r){return function(){return d.apply(t,v.call(arguments,0).concat([e,r]))}}function f(e){return function(r){return i(r,e)}}function a(e){return function(r){b[e]=r}}function c(e){if(o(m,e)){var r=m[e];delete m[e],C[e]=!0,p.apply(t,r)}if(!o(b,e)&&!o(C,e))throw Error("No "+e);return b[e]}function s(e){var r,n=e?e.indexOf("!"):-1;return n>-1&&(r=e.substring(0,n),e=e.substring(n+1,e.length)),[r,e]}function l(e){return function(){return k&&k.config&&k.config[e]||{}}}var p,d,g,h,b={},m={},k={},C={},y=Object.prototype.hasOwnProperty,v=[].slice;g=function(e,r){var n,t=s(e),o=t[0];return e=t[1],o&&(o=i(o,r),n=c(o)),o?e=n&&n.normalize?n.normalize(e,f(r)):i(e,r):(e=i(e,r),t=s(e),o=t[0],e=t[1],o&&(n=c(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},h={require:function(e){return u(e)},exports:function(e){var r=b[e];return r!==void 0?r:b[e]={}},module:function(e){return{id:e,uri:"",exports:b[e],config:l(e)}}},p=function(e,r,n,i){var f,s,l,p,d,k,y=[];if(i=i||e,"function"==typeof n){for(r=!r.length&&n.length?["require","exports","module"]:r,d=0;r.length>d;d+=1)if(p=g(r[d],i),s=p.f,"require"===s)y[d]=h.require(e);else if("exports"===s)y[d]=h.exports(e),k=!0;else if("module"===s)f=y[d]=h.module(e);else if(o(b,s)||o(m,s)||o(C,s))y[d]=c(s);else{if(!p.p)throw Error(e+" missing "+s);p.p.load(p.n,u(i,!0),a(s),{}),y[d]=b[s]}l=n.apply(b[e],y),e&&(f&&f.exports!==t&&f.exports!==b[e]?b[e]=f.exports:l===t&&k||(b[e]=l))}else e&&(b[e]=n)},e=r=d=function(e,r,n,o,i){return"string"==typeof e?h[e]?h[e](r):c(g(e,r).f):(e.splice||(k=e,r.splice?(e=r,r=n,n=null):e=t),r=r||function(){},"function"==typeof n&&(n=o,o=i),o?p(t,e,r,n):setTimeout(function(){p(t,e,r,n)},4),d)},d.config=function(e){return k=e,k.deps&&d(k.deps,k.callback),d},n=function(e,r,n){r.splice||(n=r,r=[]),o(b,e)||o(m,e)||(m[e]=[e,r,n])},n.amd={jQuery:!0}})(),n("../node_modules/almond/almond",function(){}),n("jxg",[],function(){var e={};return"object"!=typeof JXG||JXG.extend||(e=JXG),e.extend=function(e,r,n,t){var o,i;n=n||!1,t=t||!1;for(o in r)(!n||n&&r.hasOwnProperty(o))&&(i=t?o.toLowerCase():o,e[i]=r[o])},e.extend(e,{boards:{},readers:{},elements:{},registerElement:function(e,r){e=e.toLowerCase(),this.elements[e]=r},registerReader:function(e,r){var n,t;for(n=0;r.length>n;n++)t=r[n].toLowerCase(),"function"!=typeof this.readers[t]&&(this.readers[t]=e)},shortcut:function(e,r){return function(){return e[r].apply(this,arguments)}},getRef:function(e,r){return e.select(r)},getReference:function(e,r){return e.select(r)},debugInt:function(){var e,r;for(e=0;arguments.length>e;e++)r=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(r):"object"==typeof document&&document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=r+"<br/>")},debugWST:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&(e.debugInt("stacktrace"),e.debugInt(r.stack.split("\n").slice(1).join("\n")))},debugLine:function(){var r=Error();e.debugInt.apply(this,arguments),r&&r.stack&&e.debugInt("Called from",r.stack.split("\n").slice(2,3).join("\n"))},debug:function(){e.debugInt.apply(this,arguments)}}),e}),n("utils/zip",["jxg"],function(e){var r=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],t=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],i=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],f=256;return e.Util=e.Util||{},e.Util.Unzip=function(a){function c(){return q+=8,N>R?a[R++]:-1}function s(){T=1}function l(){var e;return q++,e=1&T,T>>=1,0===T&&(T=c(),e=1&T,T=128|T>>1),e}function p(e){for(var n=0,t=e;t--;)n=n<<1|l();return e&&(n=r[n]>>8-e),n}function d(){L=0}function g(e){A++,E[L++]=e,z.push(String.fromCharCode(e)),32768===L&&(L=0)}function h(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function b(){for(;;){if(H[P]>=w)return-1;if(U[H[P]]===P)return H[P]++;H[P]++}}function m(){var e,r=F[X];if(17===P)return-1;if(X++,P++,e=b(),e>=0)r.b0=e;else if(r.b0=32768,m())return-1;if(e=b(),e>=0)r.b1=e,r.jump=null;else if(r.b1=32768,r.jump=F[X],r.jumppos=X,m())return-1;return P--,0}function k(e,r,n){var t;for(F=e,X=0,U=n,w=r,t=0;17>t;t++)H[t]=0;return P=0,m()?-1:0}function C(e){for(var r,n,t,o=0,i=e[o];;)if(t=l()){if(!(32768&i.b1))return i.b1;for(i=i.jump,r=e.length,n=0;r>n;n++)if(e[n]===i){o=n;break}}else{if(!(32768&i.b0))return i.b0;o++,i=e[o]}}function y(){var f,a,b,m,y,v,j,A,x,U,w,S,z,I,O,B,N;do if(f=l(),b=p(2),0===b)for(s(),U=c(),U|=c()<<8,S=c(),S|=c()<<8,65535&(U^~S)&&e.debug("BlockLen checksum mismatch\n");U--;)a=c(),g(a);else if(1===b)for(;;)if(y=r[p(7)]>>1,y>23?(y=y<<1|l(),y>199?(y-=128,y=y<<1|l()):(y-=48,y>143&&(y+=136))):y+=256,256>y)g(y);else{if(256===y)break;for(y-=257,x=p(t[y])+n[y],y=r[p(5)]>>3,i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y],y=0;x>y;y++)a=E[32767&L-w],g(a)}else if(2===b){for(j=Array(320),I=257+p(5),O=1+p(5),B=4+p(4),y=0;19>y;y++)j[y]=0;for(y=0;B>y;y++)j[u[y]]=p(3);for(x=J.length,m=0;x>m;m++)J[m]=new h;if(k(J,19,j,0))return d(),1;for(z=I+O,m=0,N=-1;z>m;)if(N++,y=C(J),16>y)j[m++]=y;else if(16===y){if(y=3+p(2),m+y>z)return d(),1;for(v=m?j[m-1]:0;y--;)j[m++]=v}else{if(y=17===y?3+p(3):11+p(7),m+y>z)return d(),1;for(;y--;)j[m++]=0}for(x=G.length,m=0;x>m;m++)G[m]=new h;if(k(G,I,j,0))return d(),1;for(x=G.length,m=0;x>m;m++)J[m]=new h;for(A=[],m=I;j.length>m;m++)A[m-I]=j[m];if(k(J,O,A,0))return d(),1;for(;;)if(y=C(G),y>=256){if(y-=256,0===y)break;for(y-=1,x=p(t[y])+n[y],y=C(J),i[y]>8?(w=p(8),w|=p(i[y]-8)<<8):w=p(i[y]),w+=o[y];x--;)a=E[32767&L-w],g(a)}else g(y)}while(!f);return d(),s(),0}function v(){var e,r,n,t,o,i,u,a,s=[];if(z=[],B=!1,s[0]=c(),s[1]=c(),120===s[0]&&218===s[1]&&(y(),O[I]=[z.join(""),"geonext.gxt"],I++),31===s[0]&&139===s[1]&&(S(),O[I]=[z.join(""),"file"],I++),80===s[0]&&75===s[1]&&(B=!0,s[2]=c(),s[3]=c(),3===s[2]&&4===s[3])){for(s[0]=c(),s[1]=c(),j=c(),j|=c()<<8,a=c(),a|=c()<<8,c(),c(),c(),c(),u=c(),u|=c()<<8,u|=c()<<16,u|=c()<<24,i=c(),i|=c()<<8,i|=c()<<16,i|=c()<<24,o=c(),o|=c()<<8,o|=c()<<16,o|=c()<<24,t=c(),t|=c()<<8,n=c(),n|=c()<<8,e=0,M=[];t--;)r=c(),"/"===r|":"===r?e=0:f-1>e&&(M[e++]=String.fromCharCode(r));for(x||(x=M),e=0;n>e;)r=c(),e++;A=0,8===a&&(y(),O[I]=Array(2),O[I][0]=z.join(""),O[I][1]=M.join(""),I++),S()}}var j,A,x,U,w,S,z=[],I=0,O=[],E=Array(32768),L=0,B=!1,N=a.length,R=0,T=1,q=0,G=Array(288),J=Array(32),X=0,F=null,P=(Array(64),Array(64),0),H=Array(17),M=[];H[0]=0,S=function(){var e,r,n,t,o,i,u=[];if(8&j&&(u[0]=c(),u[1]=c(),u[2]=c(),u[3]=c(),80===u[0]&&75===u[1]&&7===u[2]&&8===u[3]?(e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24):e=u[0]|u[1]<<8|u[2]<<16|u[3]<<24,r=c(),r|=c()<<8,r|=c()<<16,r|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24),B&&v(),u[0]=c(),8===u[0]){if(j=c(),c(),c(),c(),c(),c(),t=c(),4&j)for(u[0]=c(),u[2]=c(),P=u[0]+256*u[1],o=0;P>o;o++)c();if(8&j)for(o=0,M=[],i=c();i;)("7"===i||":"===i)&&(o=0),f-1>o&&(M[o++]=i),i=c();if(16&j)for(i=c();i;)i=c();2&j&&(c(),c()),y(),e=c(),e|=c()<<8,e|=c()<<16,e|=c()<<24,n=c(),n|=c()<<8,n|=c()<<16,n|=c()<<24,B&&v()}},e.Util.Unzip.prototype.unzipFile=function(e){var r;for(this.unzip(),r=0;O.length>r;r++)if(O[r][1]===e)return O[r][0];return""},e.Util.Unzip.prototype.unzip=function(){return v(),O}},e.Util}),n("utils/encoding",["jxg"],function(e){var r=0,n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];return e.Util=e.Util||{},e.Util.UTF8={encode:function(e){var r,n,t="",o=e.length;if(e=e.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeURIComponent)return unescape(encodeURIComponent(e));for(r=0;o>r;r++)n=e.charCodeAt(r),128>n?t+=String.fromCharCode(n):n>127&&2048>n?(t+=String.fromCharCode(192|n>>6),t+=String.fromCharCode(128|63&n)):(t+=String.fromCharCode(224|n>>12),t+=String.fromCharCode(128|63&n>>6),t+=String.fromCharCode(128|63&n));return t},decode:function(e){var t,o,i,u=0,f=0,a=r,c=[],s=e.length,l=[];for(t=0;s>t;t++)o=e.charCodeAt(t),i=n[o],f=a!==r?63&o|f<<6:255>>i&o,a=n[256+a+i],a===r&&(f>65535?c.push(55232+(f>>10),56320+(1023&f)):c.push(f),u++,0===u%1e4&&(l.push(String.fromCharCode.apply(null,c)),c=[]));return l.push(String.fromCharCode.apply(null,c)),l.join("")},asciiCharCodeAt:function(e,r){var n=e.charCodeAt(r);if(n>255)switch(n){case 8364:n=128;break;case 8218:n=130;break;case 402:n=131;break;case 8222:n=132;break;case 8230:n=133;break;case 8224:n=134;break;case 8225:n=135;break;case 710:n=136;break;case 8240:n=137;break;case 352:n=138;break;case 8249:n=139;break;case 338:n=140;break;case 381:n=142;break;case 8216:n=145;break;case 8217:n=146;break;case 8220:n=147;break;case 8221:n=148;break;case 8226:n=149;break;case 8211:n=150;break;case 8212:n=151;break;case 732:n=152;break;case 8482:n=153;break;case 353:n=154;break;case 8250:n=155;break;case 339:n=156;break;case 382:n=158;break;case 376:n=159;break;default:}return n}},e.Util.UTF8}),n("utils/base64",["jxg","utils/encoding"],function(e,r){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.Util=e.Util||{},e.Util.Base64={encode:function(e){var t,o,i,u,f,a,c,s=[],l=0;for(e=r.encode(e);e.length>l;)t=e.charCodeAt(l++),o=e.charCodeAt(l++),i=e.charCodeAt(l++),u=t>>2,f=(3&t)<<4|o>>4,a=(15&o)<<2|i>>6,c=63&i,isNaN(o)?a=c=64:isNaN(i)&&(c=64),s.push([n.charAt(u),n.charAt(f),n.charAt(a),n.charAt(c)].join(""));return s.join("")},decode:function(e,t){var o,i,u,f,a,c,s,l=[],p=0,d=e.length;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");d>p;)f=n.indexOf(e.charAt(p++)),a=n.indexOf(e.charAt(p++)),c=n.indexOf(e.charAt(p++)),s=n.indexOf(e.charAt(p++)),o=f<<2|a>>4,i=(15&a)<<4|c>>2,u=(3&c)<<6|s,l.push(String.fromCharCode(o)),64!==c&&l.push(String.fromCharCode(i)),64!==s&&l.push(String.fromCharCode(u));return l=l.join(""),t&&(l=r.decode(l)),l},decodeAsArray:function(e){var r,n=this.decode(e),t=[],o=n.length;for(r=0;o>r;r++)t[r]=n.charCodeAt(r);return t}},e.Util.Base64}),n("../build/compressor.deps.js",["jxg","utils/zip","utils/base64"],function(e,r,n){return e.decompress=function(e){return unescape(new r.Unzip(n.decodeAsArray(e)).unzip()[0][0])},e}),window.JXG=r("../build/compressor.deps.js")})();
-</script>
-<script type="text/javascript">
-window.fileLoading = (function () {
-    var fileLoadingCallbacks = {};
-    var timestamp = new Date().getTime();
-    function loadKeywordsFile(filename, callback) {
-        fileLoadingCallbacks[filename] = callback;
-        var script = document.createElement('script');
-        script.type = 'text/javascript';
-        // timestamp as an argument to prevent browsers from caching scripts
-        // see: http://stackoverflow.com/questions/866619/how-to-force-ie-to-reload-javascript
-        script.src = filename+'?time='+timestamp;
-        document.getElementsByTagName("head")[0].appendChild(script);
-    }
-    function getCallbackHandlerForKeywords(parent) {
-        var callableList = [];
-        return function (callable) {
-            if (!parent.isChildrenLoaded) {
-                callableList.push(callable);
-                if (callableList.length == 1) {
-                    loadKeywordsFile(parent.childFileName, function () {
-                        parent.isChildrenLoaded = true;
-                        for (var i = 0; i < callableList.length; i++) {
-                            callableList[i]();
-                        }
-                    });
-                }
-            } else {
-                callable();
-            }
-        }
-    }
-    function notifyFileLoaded(filename) {
-        fileLoadingCallbacks[filename]();
-    }
-    return {
-        getCallbackHandlerForKeywords: getCallbackHandlerForKeywords,
-        notify: notifyFileLoaded
-    }
-}());
-</script>
-<script type="text/javascript">
-window.model = (function () {
-    function Suite(data) {
-        var suite = createModelObject(data);
-        suite.source = data.source;
-        suite.relativeSource = data.relativeSource;
-        suite.fullName = data.parent ? data.parent.fullName + '.' + data.name : data.name;
-        setStats(suite, data.statistics);
-        suite.metadata = data.metadata;
-        suite.populateKeywords = createIterablePopulator('Keyword');
-        suite.populateTests = createIterablePopulator('Test');
-        suite.populateSuites = createIterablePopulator('Suite');
-        suite.childrenNames = ['keyword', 'suite', 'test'];
-        suite.callWhenChildrenReady = function (callable) { callable(); };
-        suite.message = data.message;
-        suite.children = function () {
-            return suite.keywords().concat(suite.tests()).concat(suite.suites());
-        };
-        suite.searchTests = function (predicate) {
-            var tests = [];
-            var suites = this.suites();
-            for (var i in suites)
-                tests = tests.concat(suites[i].searchTests(predicate));
-            return tests.concat(util.filter(this.tests(), predicate));
-        };
-        suite.searchTestsInSuite = function (pattern, matcher) {
-            if (!matcher)
-                matcher = util.Matcher(pattern);
-            if (matcher.matchesAny([suite.fullName, suite.name]))
-                return suite.allTests();
-            var tests = [];
-            var suites = this.suites();
-            for (var i in suites)
-                tests = tests.concat(suites[i].searchTestsInSuite(pattern, matcher));
-            return tests;
-        }
-        suite.searchTestsByTag = function (tag) {
-            return suite.searchTests(function (test) {
-                if (tag.combined)
-                    return containsTagPattern(test.tags, tag.combined);
-                return containsTag(test.tags, tag.label);
-            });
-        };
-        suite.findSuiteByName = function (name) {
-            return findSuiteByName(suite, name);
-        };
-        suite.allTests = function () {
-            return suite.searchTests(function (test) {
-                return true;
-            });
-        };
-        suite.criticalTests = function () {
-            return suite.searchTests(function (test) {
-                return test.isCritical;
-            });
-        };
-        return suite;
-    }
-    function containsTag(testTags, tagname) {
-        testTags = util.map(testTags, util.normalize);
-        return util.contains(testTags, util.normalize(tagname));
-    }
-    function containsTagPattern(testTags, pattern) {
-        var patterns;
-        if (pattern.indexOf('NOT') != -1) {
-            patterns = pattern.split('NOT');
-            return containsTagPattern(testTags, patterns[0]) &&
-                util.all(util.map(patterns.slice(1), function (p) {
-                    return !containsTagPattern(testTags, p);
-                }));
-        }
-        if (pattern.indexOf('OR') != -1) {
-            patterns = pattern.split('OR');
-            return util.any(util.map(patterns, function (p) {
-                return containsTagPattern(testTags, p);
-            }));
-        }
-        if (pattern.indexOf('AND') != -1) {
-            patterns = pattern.split('AND');
-            return util.all(util.map(patterns, function (p) {
-                return containsTagPattern(testTags, p);
-            }));
-        }
-        return util.Matcher(pattern).matchesAny(testTags);
-    }
-    function findSuiteByName(suite, name) {
-        if (suite.fullName == name)
-            return suite;
-        var subSuites = suite.suites();
-        for (var i in subSuites) {
-            var match = findSuiteByName(subSuites[i], name);
-            if (match)
-                return match;
-        }
-        return null;
-    }
-    function setStats(suite, stats) {
-        for (var name in stats) {
-            suite[name] = stats[name];
-        }
-    }
-    function createModelObject(data) {
-        return {
-            name: data.name,
-            doc: data.doc,
-            status: data.status,
-            times: data.times,
-            id: data.parent ? data.parent.id + '-' + data.id : data.id
-        };
-    }
-    function Test(data) {
-        var test = createModelObject(data);
-        test.fullName = data.parent.fullName + '.' + test.name;
-        test.formatParentName = function () { return util.formatParentName(test); };
-        test.timeout = data.timeout;
-        test.populateKeywords = createIterablePopulator('Keyword');
-        test.childrenNames = ['keyword'];
-        test.isChildrenLoaded = data.isChildrenLoaded;
-        test.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(test);
-        test.children = function () {
-            if (test.isChildrenLoaded)
-                return test.keywords();
-        };
-        test.isCritical = data.isCritical;
-        test.tags = data.tags;
-        test.message = data.message;
-        test.matchesTagPattern = function (pattern) {
-            return containsTagPattern(test.tags, pattern);
-        };
-        test.matchesNamePattern = function (pattern) {
-            return util.Matcher(pattern).matchesAny([test.name, test.fullName]);
-        };
-        return test;
-    }
-    function Keyword(data) {
-        var kw = createModelObject(data);
-        kw.type = data.type;
-        kw.arguments = data.args;
-        kw.timeout = data.timeout;
-        kw.populateMessages = createIterablePopulator('Message');
-        kw.populateKeywords = createIterablePopulator('Keyword');
-        kw.childrenNames = ['keyword', 'message'];
-        kw.isChildrenLoaded = data.isChildrenLoaded;
-        kw.callWhenChildrenReady = window.fileLoading.getCallbackHandlerForKeywords(kw);
-        kw.children = function () {
-            if (kw.isChildrenLoaded)
-                return kw.keywords();
-        };
-        return kw;
-    }
-    function Message(level, date, text, link) {
-        return {
-            level: level,
-            time: util.timeFromDate(date),
-            date: util.dateFromDate(date),
-            text: text,
-            link: link
-        };
-    }
-    function Times(timedata) {
-        var start = timedata[0];
-        var end = timedata[1];
-        var elapsed = timedata[2];
-        return {
-            elapsedMillis: elapsed,
-            elapsedTime: util.formatElapsed(elapsed),
-            startTime: util.dateTimeFromDate(start),
-            endTime:  util.dateTimeFromDate(end)
-        };
-    }
-    function createIterablePopulator(name) {
-        return function (populator) {
-            populateIterable(this, name, populator);
-        };
-    }
-    function populateIterable(obj, name, populator) {
-        name = name.toLowerCase() + 's';
-        obj[name] = createGetAllFunction(populator.numberOfItems, populator.creator);
-    }
-    function createGetAllFunction(numberOfElements, creator) {
-        var cached = null;
-        return function () {
-            if (cached === null) {
-                cached = [];
-                for (var i = 0; i < numberOfElements(); i++) {
-                    cached.push(creator(i));
-                }
-            }
-            return cached;
-        };
-    }
-    return {
-        Suite: Suite,
-        Test: Test,
-        Keyword: Keyword,
-        Message: Message,
-        Times: Times,
-        containsTag: containsTag,  // Exposed for tests
-        containsTagPattern: containsTagPattern  // Exposed for tests
-    };
-}());
-window.stats = (function () {
-    function Statistics(totalElems, tagElems, suiteElems) {
-        return {total: util.map(totalElems, totalStatElem),
-                tag:   util.map(tagElems, tagStatElem),
-                suite: util.map(suiteElems, suiteStatElem)};
-    }
-    function statElem(stat) {
-        stat.total = stat.pass + stat.fail;
-        var percents = calculatePercents(stat.total, stat.pass, stat.fail);
-        stat.passPercent = percents[0];
-        stat.failPercent = percents[1];
-        var widths = calculateWidths(stat.passPercent, stat.failPercent);
-        stat.passWidth = widths[0];
-        stat.failWidth = widths[1];
-        return stat;
-    }
-    function totalStatElem(data) {
-        var stat = statElem(data);
-        stat.type = stat.label == 'Critical Tests' ? 'critical' : 'all';
-        return stat;
-    }
-    function tagStatElem(data) {
-        var stat = statElem(data);
-        stat.links = parseLinks(stat.links);
-        return stat;
-    }
-    function suiteStatElem(data) {
-        var stat = statElem(data);
-        stat.fullName = stat.label;
-        stat.formatParentName = function () { return util.formatParentName(stat); };
-        // compatibility with RF 2.5 outputs
-        if (!stat.name)
-            stat.name = stat.label.split('.').pop();
-        return stat;
-    }
-    function parseLinks(linksData) {
-        if (!linksData)
-            return [];
-        return util.map(linksData.split(':::'), function (link) {
-                var index = link.indexOf(':');
-                return {title: link.slice(0, index), url: link.slice(index+1)};
-            });
-    }
-    function calculatePercents(total, passed, failed) {
-        if (total == 0)
-            return [0.0, 0.0];
-        var pass = 100.0 * passed / total;
-        var fail = 100.0 * failed / total;
-        if (pass > 0 && pass < 0.1)
-            return [0.1, 99.9];
-        if (fail > 0 && fail < 0.1)
-            return [99.9, 0.1];
-        return [Math.round(pass*10)/10, Math.round(fail*10)/10];
-    }
-    function calculateWidths(num1, num2) {
-        if (num1 + num2 == 0)
-            return [0.0, 0.0];
-        // Make small percentages better visible
-        if (num1 > 0 && num1 < 1)
-            return [1.0, 99.0];
-        if (num2 > 0 && num2 < 1)
-            return [99.0, 1.0];
-        // Handle situation where both are rounded up
-        while (num1 + num2 > 100) {
-            if (num1 > num2)
-                num1 -= 0.1;
-            if (num2 > num1)
-                num2 -= 0.1;
-        }
-        return [num1, num2];
-    }
-    return {
-        Statistics: Statistics
-    };
-}());
-</script>
-<script type="text/javascript">
-window.util = function () {
-    function map(elems, func) {
-        var ret = [];
-        for (var i = 0, len = elems.length; i < len; i++) {
-            ret[i] = func(elems[i]);
-        }
-        return ret;
-    }
-    function filter(elems, predicate) {
-        var ret = [];
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (predicate(elems[i]))
-                ret.push(elems[i]);
-        }
-        return ret;
-    }
-    function all(elems) {
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (!elems[i])
-                return false;
-        }
-        return true;
-    }
-    function any(elems) {
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (elems[i])
-                return elems[i];
-        }
-        return false;
-    }
-    function contains(elems, e) {
-        for (var i = 0, len = elems.length; i < len; i++) {
-            if (elems[i] == e)
-                return true;
-        }
-        return false;
-    }
-    function last(items) {
-        return items[items.length-1];
-    }
-    function unescape(string) {
-        return string.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
-    }
-    function escape(string) {
-        return string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-    }
-    function normalize(string) {
-        return string.toLowerCase().replace(/ /g, '').replace(/_/g, '');
-    }
-    function regexpEscape(string) {
-        return string.replace(/[-[\]{}()+?*.,\\^$|#]/g, "\\$&");
-    }
-    function Matcher(pattern) {
-        pattern = regexpEscape(normalize(pattern));
-        var rePattern = '^' + pattern.replace(/\\\?/g, '.').replace(/\\\*/g, '[\\s\\S]*') + '$';
-        var regexp = new RegExp(rePattern);
-        function matches(string) {
-            return regexp.test(normalize(string));
-        }
-        return {
-            matches: matches,
-            matchesAny: function (strings) {
-                for (var i = 0, len = strings.length; i < len; i++)
-                    if (matches(strings[i]))
-                        return true;
-                return false;
-            }
-        };
-    }
-    function formatParentName(item) {
-        var parentName = item.fullName.slice(0, item.fullName.length - item.name.length);
-        return parentName.replace(/\./g, ' . ');
-    }
-    function timeFromDate(date) {
-        if (!date)
-            return 'N/A';
-        return formatTime(date.getHours(), date.getMinutes(),
-                          date.getSeconds(), date.getMilliseconds());
-    }
-    function dateFromDate(date) {
-        if (!date)
-            return 'N/A';
-        return padTo(date.getFullYear(), 4) +
-               padTo(date.getMonth() + 1, 2) +
-               padTo(date.getDate(), 2);
-    }
-    function dateTimeFromDate(date) {
-        if (!date)
-            return 'N/A';
-        return dateFromDate(date) + ' ' + timeFromDate(date);
-    }
-    function formatTime(hours, minutes, seconds, milliseconds) {
-        return padTo(hours, 2) + ':' +
-               padTo(minutes, 2) + ':' +
-               padTo(seconds, 2) + '.' +
-               padTo(milliseconds, 3);
-    }
-    function formatElapsed(elapsed) {
-        var millis = elapsed;
-        var hours = Math.floor(millis / (60 * 60 * 1000));
-        millis -= hours * 60 * 60 * 1000;
-        var minutes = Math.floor(millis / (60 * 1000));
-        millis -= minutes * 60 * 1000;
-        var seconds = Math.floor(millis / 1000);
-        millis -= seconds * 1000;
-        return formatTime(hours, minutes, seconds, millis);
-    }
-    function padTo(number, len) {
-        var numString = number + "";
-        while (numString.length < len) numString = "0" + numString;
-        return numString;
-    }
-    function timestamp(millis) {
-        // used also by tools that do not set window.output.baseMillis
-        var base = window.output ? window.output.baseMillis : 0;
-        return new Date(base + millis);
-    }
-    function createGeneratedAgoString(generatedMillis) {
-        generatedMillis = timestamp(generatedMillis);
-        function timeString(time, shortUnit) {
-            var unit = {y: 'year', d: 'day', h: 'hour', m: 'minute',
-                        s: 'second'}[shortUnit];
-            var end = time == 1 ? ' ' : 's ';
-            return time + ' ' + unit + end;
-        }
-        function compensateLeapYears(days, years) {
-            // Not a perfect algorithm but ought to be enough
-            return days - Math.floor(years / 4);
-        }
-        var generated = Math.round(generatedMillis / 1000);
-        var current = Math.round(new Date().getTime() / 1000);
-        var elapsed = current - generated;
-        var prefix = '';
-        if (elapsed < 0) {
-            prefix = '- ';
-            elapsed = Math.abs(elapsed);
-        }
-        var secs  = elapsed % 60;
-        var mins  = Math.floor(elapsed / 60) % 60;
-        var hours = Math.floor(elapsed / (60*60)) % 24;
-        var days  = Math.floor(elapsed / (60*60*24)) % 365;
-        var years = Math.floor(elapsed / (60*60*24*365));
-        if (years) {
-            days = compensateLeapYears(days, years);
-            return prefix + timeString(years, 'y') + timeString(days, 'd');
-        } else if (days) {
-            return prefix + timeString(days, 'd') + timeString(hours, 'h');
-        } else if (hours) {
-            return prefix + timeString(hours, 'h') + timeString(mins, 'm');
-        } else if (mins) {
-            return prefix + timeString(mins, 'm') + timeString(secs, 's');
-        } else {
-            return prefix + timeString(secs, 's');
-        }
-    }
-    function parseQueryString(query) {
-        var result = {};
-        if (!query)
-            return result;
-        var params = query.split('&');
-        var parts;
-        function decode(item) {
-            return decodeURIComponent(item.replace('+', ' '));
-        }
-        for (var i = 0, len = params.length; i < len; i++) {
-            parts = params[i].split('=');
-            result[decode(parts.shift())] = decode(parts.join('='));
-        }
-        return result;
-    }
-    return {
-        map: map,
-        filter: filter,
-        all: all,
-        any: any,
-        contains: contains,
-        last: last,
-        escape: escape,
-        unescape: unescape,
-        normalize: normalize,
-        regexpEscape: regexpEscape,
-        Matcher: Matcher,
-        formatParentName: formatParentName,
-        timeFromDate: timeFromDate,
-        dateFromDate: dateFromDate,
-        dateTimeFromDate: dateTimeFromDate,
-        formatElapsed: formatElapsed,
-        timestamp: timestamp,
-        createGeneratedAgoString: createGeneratedAgoString,
-        parseQueryString: parseQueryString
-    };
-}();
-</script>
-<script type="text/javascript">
-window.testdata = function () {
-    var elementsById = {};
-    var idCounter = 0;
-    var _statistics = null;
-    var LEVELS = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'FAIL', 'ERROR'];
-    var STATUSES = ['FAIL', 'PASS', 'NOT_RUN'];
-    var KEYWORDS = ['KEYWORD', 'SETUP', 'TEARDOWN', 'FOR', 'VAR'];
-    function addElement(elem) {
-        if (!elem.id)
-            elem.id = uniqueId();
-        elementsById[elem.id] = elem;
-        return elem;
-    }
-    function uniqueId() {
-        idCounter++;
-        return 'element-id-' + idCounter;
-    }
-    function times(stats) {
-        var startMillis = stats[1];
-        var elapsed = stats[2];
-        if (startMillis === null)
-            return [null, null, elapsed];
-        return [util.timestamp(startMillis),
-                util.timestamp(startMillis + elapsed),
-                elapsed];
-    }
-    function message(element, strings) {
-        return addElement(model.Message(LEVELS[element[1]],
-                                        util.timestamp(element[0]),
-                                        strings.get(element[2]),
-                                        strings.get(element[3])));
-    }
-    function parseStatus(stats) {
-        return STATUSES[stats[0]];
-    }
-    function childCreator(parent, childType) {
-        return function (elem, strings, index) {
-            return addElement(childType(parent, elem, strings, index));
-        };
-    }
-    function createKeyword(parent, element, strings, index) {
-        var kw = model.Keyword({
-            parent: parent,
-            type: KEYWORDS[element[0]],
-            id: 'k' + (index + 1),
-            name: strings.get(element[1]),
-            timeout: strings.get(element[2]),
-            args: strings.get(element[4]),
-            doc: function () {
-                var doc = strings.get(element[3]);
-                this.doc = function () { return doc; };
-                return doc;
-            },
-            status: parseStatus(element[5], strings),
-            times: model.Times(times(element[5])),
-            isChildrenLoaded: typeof(element[6]) !== 'number'
-        });
-        lazyPopulateKeywordsFromFile(kw, element[6], strings);
-        kw.populateMessages(Populator(element[7], strings, message));
-        return kw;
-    }
-    function lazyPopulateKeywordsFromFile(parent, keywordsOrIndex, strings) {
-        if (parent.isChildrenLoaded) {
-            var keywords = keywordsOrIndex;
-            parent.populateKeywords(Populator(keywords, strings, childCreator(parent, createKeyword)));
-        } else {
-            var index = keywordsOrIndex;
-            parent.childFileName = window.settings['splitLogBase'] + '-' + index + '.js';
-            parent.populateKeywords(SplitLogPopulator(keywordsOrIndex, childCreator(parent, createKeyword)));
-        }
-    }
-    function tags(taglist, strings) {
-        return util.map(taglist, strings.get);
-    }
-    function createTest(parent, element, strings, index) {
-        var statusElement = element[5];
-        var test = model.Test({
-            parent: parent,
-            id: 't' + (index + 1),
-            name: strings.get(element[0]),
-            doc: function () {
-                var doc = strings.get(element[3]);
-                this.doc = function () { return doc; };
-                return doc;
-            },
-            timeout: strings.get(element[1]),
-            isCritical: element[2],
-            status: parseStatus(statusElement),
-            message: function () {
-                var msg = createMessage(statusElement, strings);
-                this.message = function () { return msg; };
-                return msg;
-            },
-            times: model.Times(times(statusElement)),
-            tags: tags(element[4], strings),
-            isChildrenLoaded: typeof(element[6]) !== 'number'
-        });
-        lazyPopulateKeywordsFromFile(test, element[6], strings);
-        return test;
-    }
-    function createMessage(statusElement, strings) {
-        return statusElement.length == 4 ? strings.get(statusElement[3]) : '';
-    }
-    function createSuite(parent, element, strings, index) {
-        var statusElement = element[5];
-        var suite = model.Suite({
-            parent: parent,
-            id: 's' + ((index || 0) + 1),
-            name: strings.get(element[0]),
-            source: strings.get(element[1]),
-            relativeSource: strings.get(element[2]),
-            doc: function () {
-                var doc = strings.get(element[3]);
-                this.doc = function () { return doc; };
-                return doc;
-            },
-            status: parseStatus(statusElement),
-            message: function () {
-                var msg = createMessage(statusElement, strings);
-                this.message = function () { return msg; };
-                return msg;
-            },
-            times: model.Times(times(statusElement)),
-            statistics: suiteStats(util.last(element)),
-            metadata: parseMetadata(element[4], strings)
-        });
-        suite.populateKeywords(Populator(element[8], strings, childCreator(suite, createKeyword)));
-        suite.populateTests(Populator(element[7], strings, childCreator(suite, createTest)));
-        suite.populateSuites(Populator(element[6], strings, childCreator(suite, createSuite)));
-        return suite;
-    }
-    function parseMetadata(data, strings) {
-        var metadata = [];
-        for (var i=0; i<data.length; i+=2) {
-            metadata.push([strings.get(data[i]), strings.get(data[i+1])]);
-        }
-        return metadata;
-    }
-    function suiteStats(stats) {
-        return {
-            total: stats[0],
-            totalPassed: stats[1],
-            totalFailed: stats[0] - stats[1],
-            critical: stats[2],
-            criticalPassed: stats[3],
-            criticalFailed: stats[2] - stats[3]
-        };
-    }
-    function Populator(items, strings, creator) {
-        return {
-            numberOfItems: function () {
-                return items.length;
-            },
-            creator: function (index) {
-                return creator(items[index], strings, index);
-            }
-        };
-    }
-    function SplitLogPopulator(structureIndex, creator) {
-        return {
-            numberOfItems: function () {
-                return window['keywords'+structureIndex].length;
-            },
-            creator: function (index) {
-                return creator(window['keywords'+structureIndex][index],
-                               StringStore(window['strings'+structureIndex]),
-                               index);
-            }
-        };
-    }
-    function suite() {
-        var elem = window.output.suite;
-        if (elementsById[elem.id])
-            return elem;
-        var root = addElement(createSuite(null, elem, StringStore(window.output.strings)));
-        window.output.suite = root;
-        return root;
-    }
-    function findLoaded(id) {
-        return elementsById[id];
-    }
-    function ensureLoaded(id, callback) {
-        var ids = id.split('-');
-        var root = suite();
-        ids.shift();
-        loadItems(ids, root, [root.id], callback);
-    }
-    function loadItems(ids, current, result, callback) {
-        if (!ids.length) {
-            callback(result);
-            return;
-        }
-        current.callWhenChildrenReady(function () {
-            var id = ids.shift();
-            var type = id[0];
-            var index = parseInt(id.substring(1)) - 1;
-            var item = selectFrom(current, type, index);
-            result.push(item.id);
-            loadItems(ids, item, result, callback);
-        });
-    }
-    function selectFrom(element, type, index) {
-        if (type === 'k') {
-            return element.keywords()[index];
-        } else if (type === 't') {
-            return element.tests()[index];
-        } else {
-            return element.suites()[index];
-        }
-    }
-    function errorIterator() {
-        return {
-            next: function () {
-                return message(window.output.errors.shift(),
-                               StringStore(window.output.strings));
-            },
-            hasNext: function () {
-                return window.output.errors.length > 0;
-            }
-        };
-    }
-    function statistics() {
-        if (!_statistics) {
-            var statData = window.output.stats;
-            _statistics = stats.Statistics(statData[0], statData[1], statData[2]);
-        }
-        return _statistics;
-    }
-    function StringStore(strings) {
-        function getText(id) {
-            var text = strings[id];
-            if (!text)
-                return '';
-            if (text[0] == '*')
-                return text.substring(1);
-            var extracted = extract(text);
-            strings[id] = '*' + extracted;
-            return extracted;
-        }
-        function extract(text) {
-            var decoded = JXG.Util.Base64.decodeAsArray(text);
-            var extracted = (new JXG.Util.Unzip(decoded)).unzip()[0][0];
-            return JXG.Util.UTF8.decode(extracted);
-        }
-        function get(id) {
-            if (id === null) return null;
-            return getText(id);
-        }
-        return {get: get};
-    }
-    return {
-        suite: suite,
-        errorIterator: errorIterator,
-        findLoaded: findLoaded,
-        ensureLoaded: ensureLoaded,
-        statistics: statistics,
-        StringStore: StringStore,  // exposed for tests
-        LEVELS: LEVELS
-    };
-}();
-</script>
-<script type="text/javascript">
-function removeJavaScriptDisabledWarning() {
-    // Not using jQuery here for maximum speed
-    document.getElementById('javascript-disabled').style.display = 'none';
-}
-function addJavaScriptDisabledWarning(error) {
-    if (window.console)
-        console.error('Opening failed: ' + error.name + ': ' + error.message);
-    document.getElementById('javascript-disabled').style.display = 'block';
-}
-function initLayout(suiteName, type) {
-    parseTemplates();
-    setTitle(suiteName, type);
-    addHeader();
-    addReportOrLogLink(type);
-}
-function parseTemplates() {
-    $('script[type="text/x-jquery-tmpl"]').map(function (idx, elem) {
-        $.template(elem.id, elem.text);
-    });
-}
-function setTitle(suiteName, type) {
-    var givenTitle = window.settings.title;
-    var title = givenTitle ? givenTitle : suiteName + " Test " + type;
-    document.title = util.unescape(title);
-}
-function addHeader() {
-    $.tmpl('<h1>${title}</h1>' +
-           '<div id="generated">' +
-             '<span>Generated<br>${generated}</span><br>' +
-             '<span id="generated-ago">${ago} ago</span>' +
-           '</div>' +
-           '<div id="top-right-header">' +
-             '<div id="report-or-log-link"><a href="#"></a></div>' +
-           '</div>', {
-        generated: window.output.generatedTimestamp,
-        ago: util.createGeneratedAgoString(window.output.generatedMillis),
-        title: document.title
-    }).appendTo($('#header'));
-}
-function addReportOrLogLink(myType) {
-    var url;
-    var text;
-    var container = $('#report-or-log-link');
-    if (myType == 'Report') {
-        url = window.settings.logURL;
-        text = 'LOG';
-    } else {
-        url = window.settings.reportURL;
-        text = 'REPORT';
-    }
-    if (url) {
-        container.find('a').attr('href', url);
-        container.find('a').text(text);
-    } else {
-        container.remove();
-    }
-}
-function addStatistics() {
-    var statHeaders =
-        '<th class="stats-col-stat">Total</th>' +
-        '<th class="stats-col-stat">Pass</th>' +
-        '<th class="stats-col-stat">Fail</th>' +
-        '<th class="stats-col-elapsed">Elapsed</th>' +
-        '<th class="stats-col-graph">Pass / Fail</th>';
-    var statTable =
-        '<h2>Test Statistics</h2>' +
-        '<table class="statistics" id="total-stats"><thead><tr>' +
-        '<th class="stats-col-name">Total Statistics</th>' + statHeaders +
-        '</tr></thead></table>' +
-        '<table class="statistics" id="tag-stats"><thead><tr>' +
-        '<th class="stats-col-name">Statistics by Tag</th>' + statHeaders +
-        '</tr></thead></table>' +
-        '<table class="statistics" id="suite-stats"><thead><tr>' +
-        '<th class="stats-col-name">Statistics by Suite</th>' + statHeaders +
-        '</tr></thead></table>';
-    $(statTable).appendTo('#statistics-container');
-    util.map(['total', 'tag', 'suite'], addStatTable);
-    addTooltipsToElapsedTimes();
-    enableStatisticsSorter();
-}
-function addTooltipsToElapsedTimes() {
-    $('.stats-col-elapsed').attr('title',
-        'Total execution time of these test cases. ' +
-        'Excludes suite setups and teardowns.');
-    $('#suite-stats').find('.stats-col-elapsed').attr('title',
-        'Total execution time of this test suite.');
-}
-function enableStatisticsSorter() {
-    $.tablesorter.addParser({
-        id: 'statName',
-        type: 'numeric',
-        is: function(s) {
-            return false;  // do not auto-detect
-        },
-        format: function(string, table, cell, cellIndex) {
-            // Rows have class in format 'row-<index>'.
-            var index = $(cell).parent().attr('class').substring(4);
-            return parseInt(index);
-        }
-    });
-    $(".statistics").tablesorter({
-        sortInitialOrder: 'desc',
-        headers: {0: {sorter:'statName', sortInitialOrder: 'asc'},
-                  5: {sorter: false}}
-    });
-}
-function addStatTable(tableName) {
-    var stats = window.testdata.statistics()[tableName];
-    if (tableName == 'tag' && stats.length == 0) {
-        renderNoTagStatTable();
-    } else {
-        renderStatTable(tableName, stats);
-    }
-}
-function renderNoTagStatTable() {
-    $('<tbody><tr class="row-0">' +
-        '<td class="stats-col-name">No Tags</td>' +
-        '<td class="stats-col-stat"></td>' +
-        '<td class="stats-col-stat"></td>' +
-        '<td class="stats-col-stat"></td>' +
-        '<td class="stats-col-elapsed"></td>' +
-        '<td class="stats-col-graph">' +
-          '<div class="empty-graph"></div>' +
-        '</td>' +
-      '</tr></tbody>').appendTo('#tag-stats');
-}
-function renderStatTable(tableName, stats) {
-    var template = tableName + 'StatisticsRowTemplate';
-    var tbody = $('<tbody></tbody>');
-    for (var i = 0, len = stats.length; i < len; i++) {
-        $.tmpl(template, stats[i], {index: i}).appendTo(tbody);
-    }
-    tbody.appendTo('#' + tableName + '-stats');
-}
-$.template('statColumnsTemplate',
-    '<td class="stats-col-stat">${total}</td>' +
-    '<td class="stats-col-stat">${pass}</td>' +
-    '<td class="stats-col-stat">${fail}</td>' +
-    '<td class="stats-col-elapsed">${elapsed}</td>' +
-    '<td class="stats-col-graph">' +
-      '{{if total}}' +
-      '<div class="graph">' +
-        '<div class="pass-bar" style="width: ${passWidth}%" title="${passPercent}%"></div>' +
-        '<div class="fail-bar" style="width: ${failWidth}%" title="${failPercent}%"></div>' +
-      '</div>' +
-      '{{else}}' +
-      '<div class="empty-graph"></div>' +
-      '{{/if}}' +
-    '</td>'
-);
-$.template('suiteStatusMessageTemplate',
-    '${critical} critical test, ' +
-    '${criticalPassed} passed, ' +
-    '<span class="{{if criticalFailed}}fail{{else}}pass{{/if}}">${criticalFailed} failed</span><br>' +
-    '${total} test total, ' +
-    '${totalPassed} passed, ' +
-    '<span class="{{if totalFailed}}fail{{else}}pass{{/if}}">${totalFailed} failed</span>'
-);
-// For complete cross-browser experience..
-// http://www.quirksmode.org/js/events_order.html
-function stopPropagation(event) {
-    var event = event || window.event;
-    event.cancelBubble = true;
-    if (event.stopPropagation)
-        event.stopPropagation();
-}
-</script>
-<script type="text/javascript">
-storage = function () {
-    var prefix = 'robot-framework-';
-    function init(user) {
-        prefix += user + '-';
-    }
-    function get(name, defaultValue) {
-        if (!localStorage)
-            return defaultValue;
-        var value = localStorage[prefix + name];
-        if (typeof value === 'undefined')
-            return defaultValue;
-        return value;
-    }
-    function set(name, value) {
-        if (localStorage)
-            localStorage[prefix + name] = value;
-    }
-    return {init: init, get: get, set: set};
-}();
-</script>
-<script type="text/javascript">
-window.output = {};
-</script>
-<script type="text/javascript">
-window.output["suite"] = [1,2,3,4,[],[1,0,60951],[],[[5,0,1,6,[7],[1,35479,22203],[]]],[],[1,1,1,1]];
-</script>
-<script type="text/javascript">
-window.output["strings"] = [];
-</script>
-<script type="text/javascript">
-window.output["strings"] = window.output["strings"].concat(["*","*ScalePOC","*/tmp/ONLabTest/TestON/RobotTests/ScalePOC.robot","*ScalePOC.robot","*<p>ONOS Sanity Test Suite\x3c/p>","*Find Max Switches By Scaling","eNqNUktr40AMvvdXiJ5SKEm6xyUESunCHkpDY9rzxJZjUXlkRrKz6a9fTV4tpIFePIb5pO81s27+h2IF1iC04R/Evl1hAqlBN2Rlgwp1khbuptBHI4aEoWworuHXFCiCGnaa4XfTMRS+pBZm2WSAD5fvCiHlzRU6RZJ+3cDL47KA+8Vf/T2bdPOrWc/+YZq/YqJ6CxUOVCKU4nxA6j8pYWmziUO+wakF6zUDwxCIw4rxEjQJ417P0/2yeHyBUYV16Nl2N9lNGRR33i3EKrDErCOaXzOmm7O9Jp2wrLceSinrSB94kGtfctyTK4yKg//QEVxPjrPXX9Y+rxTTgJAjPor2cmigqg/M23MkU3zXW2hEzQ8XDbWnr6esc62fDs7nTyS1QDDwWRfNOCCDRGgpUnQzo7dEZhi93AQLebgZw7LJNDuy26OKTN9JMh3Dw777MkRYZT9KvAVqO8YWo2GVyazJjDuuoLBB5k99y+J5AU8H+sKjutTp6Zl8YJLLBSl6A1F+XMbEH+V/jw4Wgw==","*done"]);
-</script>
-<script type="text/javascript">
-window.output["generatedTimestamp"] = "20150701 17:03:07 GMT 00:00";
-</script>
-<script type="text/javascript">
-window.output["stats"] = [[{"elapsed":"00:00:22","fail":0,"label":"Critical Tests","pass":1},{"elapsed":"00:00:22","fail":0,"label":"All Tests","pass":1}],[{"elapsed":"00:00:22","fail":0,"label":"done","pass":1}],[{"elapsed":"00:01:01","fail":0,"id":"s1","label":"ScalePOC","name":"ScalePOC","pass":1}]];
-</script>
-<script type="text/javascript">
-window.output["generatedMillis"] = 60908;
-</script>
-<script type="text/javascript">
-window.output["baseMillis"] = 1435770126092;
-</script>
-<script type="text/javascript">
-window.settings = {"background":{"fail":"#FF3333","nonCriticalFail":"#99FF66","pass":"#99FF66"},"logURL":"log.html","title":""};
-</script>
-<title></title>
-</head>
-<body>
-<div id="javascript-disabled">
-  <h1>Opening Robot Framework report failed</h1>
-  <ul>
-    <li>Verify that you have <b>JavaScript enabled</b> in your browser.</li>
-    <li>Make sure you are using a <b>modern enough browser</b>. Firefox 3.5, IE 8, or equivalent is required, newer browsers are recommended.</li>
-    <li>Check are there messages in your browser's <b>JavaScript error log</b>. Please report the problem if you suspect you have encountered a bug.</li>
-  </ul>
-</div>
-<script type="text/javascript">removeJavaScriptDisabledWarning();</script>
-
-<div id="header"></div>
-<div id="statistics-container"></div>
-<div id="test-details-container"></div>
-
-<script type="text/javascript">
-$(document).ready(function () {
-    try {
-        var topsuite = window.testdata.suite();
-    } catch (error) {
-        addJavaScriptDisabledWarning(error);
-        return;
-    }
-    setBackground(topsuite);
-    initLayout(topsuite.name, 'Report');
-    storage.init('report');
-    addSummary(topsuite);
-    addStatistics();
-    addDetails();
-    window.prevLocationHash = '';
-    window.onhashchange = showDetailsByHash;
-});
-
-function setBackground(topsuite) {
-    var color;
-    if (topsuite.criticalFailed)
-        color = window.settings.background.fail;
-    else if (topsuite.totalFailed)
-        color = window.settings.background.nonCriticalFail;
-    else
-        color = window.settings.background.pass;
-    $('body').css('background-color', color);
-}
-
-function addSummary(topsuite) {
-    var opts = {logURL: window.settings.logURL};
-    $.tmpl('summaryTableTemplate', topsuite, opts).insertAfter($('#header'));
-}
-
-function addDetails() {
-    addCustomSortersForDetails();
-    if (window.location.hash)
-        showDetailsByHash();
-    else
-        renderTotalSelector();
-}
-
-function addCustomSortersForDetails() {
-    $.tablesorter.addParser({
-        id: 'criticality',
-        type: 'numeric',
-        is: function(s) {
-            return false;  // do not auto-detect
-        },
-        format: function(s) {
-            return s === 'yes' ? 0 : 1;
-        }
-    });
-    $.tablesorter.addParser({
-        id: 'times',
-        type: 'text',
-        is: function(s) {
-            return false;  // do not auto-detect
-        },
-        format: function(s) {
-            return s.substring(0, 21);  // return only start time
-        }
-    });
-}
-
-function showDetailsByHash() {
-    // Cannot use window.location.hash because Firefox incorrectly decodes it:
-    // http://stackoverflow.com/questions/1703552/encoding-of-window-location-hash
-    var hash = window.location.href.split('#').slice(1).join('#');
-    if (!hash || hash == window.prevLocationHash)
-        return;
-    var parts = hash.split('?');
-    var name = parts.shift();
-    var query = parts.join('?');
-    if (name == 'search') {
-        var params = util.parseQueryString(query);
-        searchExecuted(params.suite || '', params.test || '',
-                       params.include || '', params.exclude || '');
-        return
-    }
-    query = decodeURIComponent(query);
-    var action = {'totals': totalDetailSelected,
-                  'tags':   tagDetailSelected,
-                  'suites': suiteDetailSelected}[name];
-    if (action)
-        action(query);
-}
-
-function totalDetailSelected(name) {
-    renderTotalSelector(name);
-    if (name) {
-        renderTotalDetails(name);
-        updatePrintSelector(name == 'critical' ? 'Critical Tests' : 'All Tests');
-    }
-    scrollToSelector('totals', name);
-}
-
-function renderTotalSelector(name) {
-    var args = {linkTarget: (name) ? 'totals?'+name : 'totals',
-                totalTabStatus: 'detail-tab-selected'};
-    renderSelector(args, 'totalDetailsSelectorTemplate', {selected: name});
-}
-
-function renderTotalDetails(name) {
-    var index = (name == 'critical') ? 0 : 1;
-    var stat = window.testdata.statistics().total[index];
-    var tests = getTotalTests(name);
-    stat.totalTime = calculateTotalTime(tests);
-    $.tmpl('tagOrTotalDetailsTemplate', stat).appendTo('#details-header');
-    drawTestDetailsTable(tests, true);
-}
-
-function updatePrintSelector(name, info) {
-    if (info)
-        name += ' (' + info + ')';
-    $('#print-selector').html(name);
-}
-
-function tagDetailSelected(name) {
-    renderTagSelector(name);
-    if (name) {
-        var tag = findTag(name);
-        if (tag) {
-            renderTagDetails(tag);
-            updatePrintSelector(name, tag.info);
-        }
-    }
-    scrollToSelector('tags', name);
-}
-
-function findTag(name) {
-    var tags = window.testdata.statistics().tag;
-    for (var i = 0, len = tags.length; i < len; i++) {
-        if (tags[i].label == name)
-            return tags[i];
-    }
-    return null;
-}
-
-function renderTagSelector(name) {
-    var args = {linkTarget: (name) ? 'tags?'+name : 'tags',
-                tagTabStatus: 'detail-tab-selected'};
-    var stats = {tags: window.testdata.statistics().tag, selected: name};
-    renderSelector(args, 'tagDetailsSelectorTemplate', stats);
-}
-
-function renderTagDetails(tag) {
-    var tests = getTestsHavingTag(tag);
-    tag.totalTime = calculateTotalTime(tests);
-    $.tmpl('tagOrTotalDetailsTemplate', tag).appendTo('#details-header');
-    drawTestDetailsTable(tests, true);
-}
-
-function suiteDetailSelected(id) {
-    renderSuiteSelector(id);
-    if (id)
-        renderSuiteDetails(id);
-    scrollToSelector('suites', id);
-}
-
-function renderSuiteSelector(id) {
-    var args = {linkTarget: (id) ? 'suites?'+id : 'suites',
-                suiteTabStatus: 'detail-tab-selected'};
-    var stats = {suites: window.testdata.statistics().suite,
-                 selected: id};
-    renderSelector(args, 'suiteDetailsSelectorTemplate', stats);
-}
-
-function renderSuiteDetails(id) {
-    window.testdata.ensureLoaded(id, function (ids) {
-        var suite = window.testdata.findLoaded(id);
-        var opts = {logURL: window.settings.logURL};
-        $.tmpl('suiteDetailsTemplate', suite, opts).appendTo('#details-header');
-        drawTestDetailsTable(suite.allTests(), false);
-        updatePrintSelector(suite.fullName);
-    });
-}
-
-function searchExecuted(suite, test, include, exclude) {
-    renderSearchSelector(suite, test, include, exclude);
-    if (suite || test || include || exclude) {
-        renderSearchDetails(suite, test, include, exclude);
-        scrollToSelector('search' +
-                         '?suite=' + encodeURIComponent(suite) +
-                         '&test=' + encodeURIComponent(test) +
-                         '&include=' + encodeURIComponent(include) +
-                         '&exclude=' + encodeURIComponent(exclude));
-    } else {
-        scrollToSelector('search');
-    }
-}
-
-function renderSearchSelector(suite, test, include, exclude) {
-    var args = {linkTarget: (suite || test || include || exclude) ?
-                            ('search?suite=' + suite + '&test=' + test + '&include=' + include + '&exclude=' + exclude) :
-                            'search',
-                searchTabStatus: 'detail-tab-selected'};
-    var search = {suite: suite, test: test, include: include, exclude: exclude};
-    renderSelector(args, 'searchSelectorTemplate', search);
-}
-
-function renderSearchDetails(suite, test, include, exclude) {
-    var tests = searchTests(util.escape(suite), util.escape(test),
-                            util.escape(include), util.escape(exclude));
-    var passed = calculatePassed(tests);
-    var stats = {total: tests.length,
-                 pass: passed,
-                 fail: tests.length - passed,
-                 totalTime: calculateTotalTime(tests)};
-    $.tmpl('tagOrTotalDetailsTemplate', stats).appendTo('#details-header');
-    drawTestDetailsTable(tests, true);
-}
-
-function searchTests(suitePattern, testPattern, includePattern, excludePattern) {
-    var tests;
-    if (suitePattern)
-        tests = window.testdata.suite().searchTestsInSuite(suitePattern);
-    else
-        tests = window.testdata.suite().allTests();
-    return util.filter(tests, function (test) {
-        if (testPattern && !test.matchesNamePattern(testPattern))
-            return false;
-        if (includePattern && !test.matchesTagPattern(includePattern))
-            return false;
-        return !(excludePattern && test.matchesTagPattern(excludePattern));
-    });
-}
-
-function scrollToSelector(base, query) {
-    $('#test-details-container').css('min-height', $(window).height());
-    var anchor = query ? base + '?' + encodeURIComponent(query) : base;
-    window.location.hash = window.prevLocationHash = anchor;
-}
-
-function renderSelector(args, template, stats) {
-    window.elementsToRender = [];
-    var container = $('#test-details-container');
-    container.empty();
-    $.tmpl('detailsHeaderTemplate', args).appendTo(container);
-    $.tmpl(template, stats).appendTo(container);
-}
-
-function drawTestDetailsTable(tests, sortByStatus) {
-    if (!tests.length)
-        return;
-    renderTestDetailsHeader();
-    window.elementsToRender = tests;
-    var target = $('#test-details').find('tbody');
-    renderTestDetails(sortByStatus, target);
-}
-
-function renderTestDetailsHeader() {
-    var header = $.tmpl('testDetailsTableTemplate');
-    hideHiddenDetailsColumns(header);
-    header.appendTo('#test-details-container');
-}
-
-function sortByStatus(t1, t2) {
-    if (t1.status != t2.status)
-        return t1.status == 'FAIL' ? -1 : 1;
-    if (t1.isCritical != t2.isCritical)
-        return t1.isCritical ? -1 : 1;
-    return t1.fullName < t2.fullName ? -1 : 1;
-}
-
-function getTestsHavingTag(tag) {
-    return window.testdata.suite().searchTestsByTag(tag).sort(sortByStatus);
-}
-
-function getTotalTests(name) {
-    if (name == 'critical')
-        return window.testdata.suite().criticalTests().sort(sortByStatus);
-    return window.testdata.suite().allTests().sort(sortByStatus);
-}
-
-function calculateTotalTime(tests) {
-    var total = 0;
-    for (var i = 0, len = tests.length; i < len; i++)
-        total += tests[i].times.elapsedMillis;
-    return util.formatElapsed(total);
-}
-
-function calculatePassed(tests) {
-    var passed = util.filter(tests, function (test) {
-        return test.status == 'PASS';
-    });
-    return passed.length;
-}
-
-function renderTestDetails(sortByStatus, target) {
-    if (!window.elementsToRender.length)
-        return;
-    var tests = popUpTo(window.elementsToRender, 50);
-    renderTestDetailsRows(tests, target);
-    if (window.elementsToRender.length)
-        setTimeout(function () {renderTestDetails(sortByStatus, target);}, 0);
-    else
-        configureTableSorter(sortByStatus);
-}
-
-function renderTestDetailsRows(tests, target) {
-    var rows = $.tmpl('testDetailsTableRowTemplate', tests,
-                      {logURL: window.settings.logURL});
-    rows.find('a').click(stopPropagation);
-    hideHiddenDetailsColumns(rows);
-    rows.appendTo(target);
-}
-
-function configureTableSorter(sortByStatus) {
-    var config = {headers: {3: {sorter: 'criticality'},
-                            6: {sortInitialOrder: 'desc'},
-                            7: {sorter: 'times'}},
-                  selectorSort: '.details-col-header'};
-    if (sortByStatus)
-        config['sortList'] = [[4, 0], [3, 0]];
-    $('#test-details').tablesorter(config);
-}
-
-function popUpTo(list, upTo) {
-    var result = [];
-    while (list.length > 0 && result.length < upTo)
-        result.push(list.shift());
-    return result;
-}
-
-function toggleDetailsColumn(name) {
-    var column = $('.details-col-' + name);
-    column.toggleClass('hidden');
-    var hidden = column.hasClass('hidden');
-    storage.set(name, hidden ? 'hidden' : 'visible');
-    column.find('.details-col-toggle').html(hidden ? '&hellip;' : '&times;');
-}
-
-function hideHiddenDetailsColumns(elem) {
-    var names = ['doc', 'tags', 'msg', 'elapsed', 'times'];
-    for (var i = 0; i < names.length; i++) {
-        var name = names[i];
-        if (storage.get(name, 'visible') == 'hidden') {
-            var column = elem.find('.details-col-' + name);
-            column.addClass('hidden');
-            column.find('.details-col-toggle').html('&hellip;');
-        }
-    }
-}
-</script>
-
-<script type="text/x-jquery-tmpl" id="summaryTableTemplate">
-  <h2>Summary Information</h2>
-  <table class="details">
-    <tr>
-      <th>Status:</th>
-      {{if criticalFailed}}
-      <td><a href="#totals?critical" onclick="totalDetailSelected('critical')"
-             class="fail">${criticalFailed} critical test{{if criticalFailed != 1}}s{{/if}} failed</a></td>
-      {{else totalFailed}}
-      <td><a href="#totals?critical" onclick="totalDetailSelected('critical')"
-             class="pass">All critical tests passed</a></td>
-      {{else}}
-      <td><a href="#totals?all" onclick="totalDetailSelected('all')"
-             class="pass">All tests passed</a></td>
-      {{/if}}
-    </tr>
-    {{if doc()}}
-    <tr>
-      <th>Documentation:</th>
-      <td class="doc">{{html doc()}}</td>
-    </tr>
-    {{/if}}
-    {{each metadata}}
-    <tr>
-      <th>{{html $value[0]}}:</th>
-      <td class="doc">{{html $value[1]}}</td>
-    </tr>
-    {{/each}}
-    {{if times.startTime != 'N/A'}}
-    <tr>
-      <th>Start Time:</th>
-      <td>${times.startTime}</td>
-    </tr>
-    {{/if}}
-    {{if times.endTime != 'N/A'}}
-    <tr>
-      <th>End Time:</th>
-      <td>${times.endTime}</td>
-    </tr>
-    {{/if}}
-    <tr>
-      <th>Elapsed Time:</th>
-      <td>${times.elapsedTime}</td>
-    </tr>
-    {{if $item.logURL}}
-    <tr>
-      <th>Log File:</th>
-      <td><a href="${$item.logURL}">${$item.logURL}</a></td>
-    </tr>
-    {{/if}}
-  </table>
-</script>
-
-<script type="text/x-jquery-tmpl" id="totalStatisticsRowTemplate">
-  <tr onclick="totalDetailSelected('${type}')" class="row-${$item.index}">
-    <td class="stats-col-name">
-      <div class="stat-name">
-        <a href="#totals?${type}">{{html label}}</a>
-      </div>
-    </td>
-    {{tmpl($data) 'statColumnsTemplate'}}
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="tagStatisticsRowTemplate">
-  <tr onclick="tagDetailSelected('${label}')" class="row-${$item.index}">
-    <td class="stats-col-name" title="{{html doc}}">
-      <div class="stat-name">
-        <a href="#tags?${label}">{{html label}}</a>
-        {{if info}}(${info}){{/if}}
-      </div>
-      <div class="tag-links">
-        {{each links}}
-        <span>[<a href="{{html $value.url}}" onclick="stopPropagation(event)"
-                  title="{{html $value.url}}">{{html $value.title}}</a>]</span>
-        {{/each}}
-      </div>
-    </td>
-    {{tmpl($data) 'statColumnsTemplate'}}
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="suiteStatisticsRowTemplate">
-  <tr onclick="suiteDetailSelected('${id}')" class="row-${$item.index}">
-    <td class="stats-col-name" title="{{html label}}">
-      <div class="stat-name">
-        <a href="#suites?${id}"><span class="parent-name">{{html formatParentName}}</span>{{html name}}</a>
-      </div>
-    </td>
-    {{tmpl($data) 'statColumnsTemplate'}}
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="detailsHeaderTemplate">
-  <h2 id="${linkTarget}">Test Details</h2>
-  <ul id="detail-tabs">
-    <li class="${totalTabStatus} detail-tab">
-      <a href="#totals" onclick="renderTotalSelector()">Totals</a>
-    </li>
-    <li class="${tagTabStatus} detail-tab">
-      <a href="#tags" onclick="renderTagSelector()">Tags</a>
-    </li>
-    <li class="${suiteTabStatus} detail-tab">
-      <a href="#suites" onclick="renderSuiteSelector()">Suites</a>
-    </li>
-    <li class="${searchTabStatus} detail-tab">
-      <a href="#search" onclick="renderSearchSelector()">Search</a>
-    </li>
-  </ul>
-</script>
-
-<script  type="text/x-jquery-tmpl" id="totalDetailsSelectorTemplate">
-  <table class="details" id="details-header">
-    <tr class="selector">
-      <th>Type:</th>
-      <td id="normal-selector">
-        <input id="radio-critical" type="radio" name="totals-radio"
-               onclick="totalDetailSelected('critical')"
-               {{if selected == 'critical'}}checked="checked"{{/if}}>
-        <label for="radio-critical">Critical Tests</label><br>
-        <input id="radio-all" type="radio" name="totals-radio"
-               onclick="totalDetailSelected('all')"
-               {{if selected == 'all'}}checked="checked"{{/if}}>
-        <label for="radio-all">All Tests</label>
-      </td>
-      <td id="print-selector"></td>
-    </tr>
-  </table>
-</script>
-
-<script  type="text/x-jquery-tmpl" id="tagDetailsSelectorTemplate">
-  <table class="details" id="details-header">
-    <tr class="selector">
-      <th>Name:</th>
-      <td id="normal-selector">
-        <select id="tag-detail-selector"
-                onchange="tagDetailSelected(this.options[this.selectedIndex].value)">
-          <option value="">Select tag...</option>
-          {{each tags}}
-          <option value="${$value.label}"
-                  {{if $value.label == selected}}selected="selected"{{/if}}>
-            {{html $value.label}} {{if $value.info}}(${$value.info}){{/if}}
-          </option>
-          {{/each}}
-        </select>
-      </td>
-      <td id="print-selector"></td>
-    </tr>
-  </table>
-</script>
-
-<script  type="text/x-jquery-tmpl" id="suiteDetailsSelectorTemplate">
-  <table class="details" id="details-header">
-    <tr class="selector">
-      <th>Name:</th>
-      <td id="normal-selector">
-        <select id="suite-detail-selector"
-                onchange="suiteDetailSelected(this.options[this.selectedIndex].value)">
-          <option value="">Select suite...</option>
-          {{each suites}}
-          <option value="${$value.id}"
-                  {{if $value.id == selected}}selected="selected"{{/if}}>
-            {{html $value.label}}
-          </option>
-          {{/each}}
-        </select>
-      </td>
-      <td id="print-selector"></td>
-    </tr>
-  </table>
-</script>
-
-<script  type="text/x-jquery-tmpl" id="searchSelectorTemplate">
-  <form action="javascript:void(0)">
-    <table class="details" id="details-header">
-      <tr class="selector first-selector">
-        <th><label for="search-suite">Suite:</label></th>
-        <td><input id="search-suite" type="text" value="${suite}"></td>
-      </tr>
-      <tr class="selector middle-selector">
-        <th><label for="search-test">Test:</label></th>
-        <td><input id="search-test" type="text" value="${test}"></td>
-      </tr>
-      <tr class="selector middle-selector">
-        <th><label for="search-include">Include:</label></th>
-        <td><input id="search-include" type="text" value="${include}"></td>
-      </tr>
-      <tr class="selector middle-selector">
-        <th><label for="search-exclude">Exclude:</label></th>
-        <td><input id="search-exclude" type="text" value="${exclude}"></td>
-      </tr>
-      <tr class="selector last-selector" id="search-buttons">
-        <th></th>
-        <td>
-          <input type="submit" value="Search"
-                 onclick="searchExecuted($('#search-suite').val(),
-                                         $('#search-test').val(),
-                                         $('#search-include').val(),
-                                         $('#search-exclude').val())">
-          <input type="button" value="Clear"
-                 onclick="$('#search-suite').val('');
-                          $('#search-test').val('');
-                          $('#search-include').val('');
-                          $('#search-exclude').val('')">
-          <a href="javascript:void(0)" onclick="$('#search-help').toggle()"
-             title="Toggle search help.">Help</a>
-        </td>
-      </tr>
-      <tr id="search-help" style="display: none">
-        <th></th>
-        <td>
-          <div>
-            <h3>Search fields</h3>
-            <p>
-              Test cases can be searched based on test suite and test case
-              names as well as based on tags. If multiple search criteria are
-              used, only tests matching all of them are included.
-              Search fields have same semantics as <em>&#8209;&#8209;suite</em>,
-              <em>&#8209;&#8209;test</em>, <em>&#8209;&#8209;include</em> and
-              <em>&#8209;&#8209;exclude</em> command line options, respectively.
-            </p>
-            <table class="search-help-examples">
-              <col class="help-item">
-              <col class="help-explanation">
-              <col class="help-examples>
-              <tr>
-                <th>Field</th>
-                <th>Explanation</th>
-                <th>Examples</th>
-              </tr>
-              <tr>
-                <td>Suite</td>
-                <td>
-                  Tests in matching suites are included. The pattern can match
-                  either suite's name or its full name that contains also
-                  parent suite names.
-                </td>
-                <td>My Suite<br>Root.Parent.Sui*</td>
-              </tr>
-              <tr>
-                <td>Test</td>
-                <td>
-                  Matching tests are included. The pattern can match either
-                  test's name or its full name that contains also parent
-                  suite names.
-                </td>
-                <td>Test*<br>Root.Pa*.T???</td>
-              </tr>
-              <tr>
-                <td>Include</td>
-                <td>
-                  Tests that contain matching tags are included.
-                </td>
-                <td>smoke<br>bug-*</td>
-              </tr>
-              <tr>
-                <td>Exclude</td>
-                <td>
-                  Tests that contain matching tags are not included.
-                </td>
-                <td>slow<br>feature-4?</td>
-              </tr>
-            </table>
-            <h3>Patterns</h3>
-            <p>
-              All searches support <em>*</em> and <em>?</em> wildcards and are
-              case, space and underscore insensitive. Tag related searches also
-              support <em>AND</em>, <em>OR</em> and <em>NOT</em> (case-sensitive)
-              combining operators. If operators are used together, their
-              precedence, from highest to lowest, is <em>AND</em>, <em>OR</em>,
-              <em>NOT</em>. See <em>Simple patterns</em> and
-              <em>Tag patterns</em> sections in
-              <a href="http://robotframework.org/robotframework/#user-guide">Robot
-              Framework User Guide</a> version 2.8.4 or newer for more details.
-            </p>
-            <table class="search-help-examples">
-              <col class="help-item">
-              <col class="help-explanation">
-              <col class="help-examples>
-              <tr>
-                <th>Pattern</th>
-                <th>Explanation</th>
-                <th>Examples</th>
-              </tr>
-              <tr>
-                <td>*</td>
-                <td>Matches anything, even an empty string.</td>
-                <td>f*<br>sprint-*</td>
-              </tr>
-              <tr>
-                <td>?</td>
-                <td>Matches any single character.</td>
-                <td>f??<br>sprint-1?</td>
-              </tr>
-              <tr>
-                <td>AND</td>
-                <td>Matches if all patterns match.</td>
-                <td>foo AND bar<br>x AND y* AND z??</td>
-              </tr>
-              <tr>
-                <td>OR</td>
-                <td>Matches if any pattern matches.</td>
-                <td>foo OR bar<br>x OR y* OR z1 AND z2</td>
-              </tr>
-              <tr>
-                <td>NOT</td>
-                <td>Matches if pattern before matches and pattern after does not.</td>
-                <td>foo NOT bar<br>* NOT id-* AND smoke</td>
-              </tr>
-            </table>
-          </div>
-        </td>
-      </tr>
-    </table>
-  </form>
-</script>
-
-<script type="text/x-jquery-tmpl" id="tagOrTotalDetailsTemplate">
-  <tr>
-    <th>Status:</th>
-    <td>${total} total, ${pass} passed, {{if fail}}<span class="fail">${fail} failed</span>{{else}}<span class="pass">0 failed</span>{{/if}}</td>
-  </tr>
-  {{if doc}}
-  <tr>
-    <th>Documentation:</th>
-    <td>{{html doc}}</td>
-  </tr>
-  {{/if}}
-  {{if combined}}
-  <tr>
-    <th>Pattern:</th>
-    <td>{{html combined}}</td>
-  </tr>
-  {{/if}}
-  {{if links}}{{if links.length}}
-  <tr>
-    <th>Links:</th>
-    <td>{{each links}}<a href="{{html $value.url}}"
-                         title="{{html $value.url}}">{{html $value.title}}</a> &nbsp; {{/each}}</td>
-  </tr>
-  {{/if}}{{/if}}
-  <tr>
-    <th>Total Time:</th>
-    <td>${totalTime}</td>
-  </tr>
-</script>
-
-<script type="text/x-jquery-tmpl" id="suiteDetailsTemplate">
-  <tr>
-    <th>Status:</th>
-    <td>{{tmpl($data) 'suiteStatusMessageTemplate'}}</td>
-  </tr>
-  {{if doc()}}
-  <tr>
-    <th>Documentation:</th>
-    <td class="doc">{{html doc()}}</td>
-  </tr>
-  {{/if}}
-  {{each metadata}}
-  <tr>
-    <th>{{html $value[0]}}:</th>
-    <td class="doc">{{html $value[1]}}</td>
-  </tr>
-  {{/each}}
-  {{if message()}}
-  <tr>
-    <th>Message:</th>
-    <td class="message">{{html message()}}</td>
-  </tr>
-  {{/if}}
-  <tr>
-    <th>Start / End Time:</th>
-    <td>${times.startTime} / ${times.endTime}</td>
-  </tr>
-  <tr>
-    <th>Elapsed Time:</th>
-    <td>${times.elapsedTime}</td>
-  </tr>
-  {{if $item.logURL}}
-  <tr>
-    <th>Log File:</th>
-    <td><a href="${$item.logURL}#${id}"
-           title="{{html fullName}}">${$item.logURL}#${id}</a></td>
-  </tr>
-  {{/if}}
-</script>
-
-<script type="text/x-jquery-tmpl" id="testDetailsTableTemplate">
-  <table id="test-details">
-    <thead>
-      <tr>
-        <th class="details-col-name" title="Name">
-          <div class='details-col-header'>Name</div>
-        </th>
-        <th class="details-col-doc" title="Documentation">
-          <div class='details-col-toggle' onclick="toggleDetailsColumn('doc')">&times;</div>
-          <div class='details-col-header'>Documentation</div>
-        </th>
-        <th class="details-col-tags" title="Tags">
-          <div class='details-col-toggle' onclick="toggleDetailsColumn('tags')">&times;</div>
-          <div class='details-col-header'>Tags</div>
-        </th>
-        <th class="details-col-crit" title="Critical">
-          <div class='details-col-header'>Crit.</div>
-        </th>
-        <th class="details-col-status" title="Status">
-          <div class='details-col-header'>Status</div>
-        </th>
-        <th class="details-col-msg" title="Message">
-          <div class='details-col-toggle' onclick="toggleDetailsColumn('msg')">&times;</div>
-          <div class='details-col-header'>Message</div>
-        </th>
-        <th class="details-col-elapsed" title="Elapsed Time">
-          <div class='details-col-toggle' onclick="toggleDetailsColumn('elapsed')">&times;</div>
-          <div class='details-col-header'>Elapsed</div>
-        </th>
-        <th class="details-col-times" title="Start Time / End Time">
-          <div class='details-col-toggle' onclick="toggleDetailsColumn('times')">&times;</div>
-          <div class='details-col-header'>Start / End</div>
-        </th>
-      </tr>
-    </thead>
-    <tbody></tbody>
-  </table>
-</script>
-
-<script type="text/x-jquery-tmpl" id="testDetailsTableRowTemplate">
-  {{if $item.logURL}}
-  <tr onclick="location = '${$item.logURL}#${id}'" title="{{html fullName}}">
-    <td class="details-col-name">
-      <div><a href="${$item.logURL}#${id}"><span class="parent-name">{{html formatParentName}}</span>{{html name}}</a></div>
-    </td>
-  {{else}}
-  <tr title="{{html fullName}}">
-    <td class="details-col-name">
-      <div><span class="parent-name">{{html formatParentName}}</span>{{html name}}</div>
-    </td>
-  {{/if}}
-    <td class="details-col-doc"><div class="doc details-limited">{{html doc()}}</div></td>
-    <td class="details-col-tags"><div>{{html tags.join(', ')}}</div></td>
-    <td class="details-col-crit"><div>{{if isCritical}}yes{{else}}no{{/if}}</div></td>
-    <td class="details-col-status"><div class="${status.toLowerCase()}">${status}</div></td>
-    <td class="details-col-msg"><div class="message details-limited">{{html message()}}</div></td>
-    <td class="details-col-elapsed"><div>${times.elapsedTime}</div></td>
-    <td class="details-col-times"><div>${times.startTime}<br>${times.endTime}</div></td>
-  </tr>
-</script>
-
-</body>
-</html>
