diff --git a/css/custom.css b/css/custom.css deleted file mode 100644 index 00e7250..0000000 --- a/css/custom.css +++ /dev/null @@ -1,14 +0,0 @@ -.figure p{ - text-align: center; -} - -.figure img{ - max-width:100%; - display: block; - margin: auto; -} - -table { - margin-left: auto; - margin-right: auto; -} diff --git a/css/htmlize.css b/css/htmlize.css deleted file mode 100644 index 0b32a03..0000000 --- a/css/htmlize.css +++ /dev/null @@ -1,145 +0,0 @@ -.org-bold { /* bold */ font-weight: bold; } -.org-bold-italic { /* bold-italic */ font-weight: bold; font-style: italic; } -.org-buffer-menu-buffer { /* buffer-menu-buffer */ font-weight: bold; } -.org-builtin { /* font-lock-builtin-face */ color: #7a378b; } -.org-button { /* button */ text-decoration: underline; } -.org-calendar-today { /* calendar-today */ text-decoration: underline; } -.org-change-log-acknowledgement { /* change-log-acknowledgement */ color: #b22222; } -.org-change-log-conditionals { /* change-log-conditionals */ color: #a0522d; } -.org-change-log-date { /* change-log-date */ color: #8b2252; } -.org-change-log-email { /* change-log-email */ color: #a0522d; } -.org-change-log-file { /* change-log-file */ color: #0000ff; } -.org-change-log-function { /* change-log-function */ color: #a0522d; } -.org-change-log-list { /* change-log-list */ color: #a020f0; } -.org-change-log-name { /* change-log-name */ color: #008b8b; } -.org-comint-highlight-input { /* comint-highlight-input */ font-weight: bold; } -.org-comint-highlight-prompt { /* comint-highlight-prompt */ color: #00008b; } -.org-comment { /* font-lock-comment-face */ color: #999988; font-style: italic; } -.org-comment-delimiter { /* font-lock-comment-delimiter-face */ color: #999988; font-style: italic; } -.org-completions-annotations { /* completions-annotations */ font-style: italic; } -.org-completions-common-part { /* completions-common-part */ color: #000000; background-color: #ffffff; } -.org-completions-first-difference { /* completions-first-difference */ font-weight: bold; } -.org-constant { /* font-lock-constant-face */ color: #008b8b; } -.org-diary { /* diary */ color: #ff0000; } -.org-diff-context { /* diff-context */ color: #7f7f7f; } -.org-diff-file-header { /* diff-file-header */ background-color: #b3b3b3; font-weight: bold; } -.org-diff-function { /* diff-function */ background-color: #cccccc; } -.org-diff-header { /* diff-header */ background-color: #cccccc; } -.org-diff-hunk-header { /* diff-hunk-header */ background-color: #cccccc; } -.org-diff-index { /* diff-index */ background-color: #b3b3b3; font-weight: bold; } -.org-diff-nonexistent { /* diff-nonexistent */ background-color: #b3b3b3; font-weight: bold; } -.org-diff-refine-change { /* diff-refine-change */ background-color: #d9d9d9; } -.org-dired-directory { /* dired-directory */ color: #0000ff; } -.org-dired-flagged { /* dired-flagged */ color: #ff0000; font-weight: bold; } -.org-dired-header { /* dired-header */ color: #228b22; } -.org-dired-ignored { /* dired-ignored */ color: #7f7f7f; } -.org-dired-mark { /* dired-mark */ color: #008b8b; } -.org-dired-marked { /* dired-marked */ color: #ff0000; font-weight: bold; } -.org-dired-perm-write { /* dired-perm-write */ color: #b22222; } -.org-dired-symlink { /* dired-symlink */ color: #a020f0; } -.org-dired-warning { /* dired-warning */ color: #ff0000; font-weight: bold; } -.org-doc { /* font-lock-doc-face */ color: #8b2252; } -.org-escape-glyph { /* escape-glyph */ color: #a52a2a; } -.org-file-name-shadow { /* file-name-shadow */ color: #7f7f7f; } -.org-flyspell-duplicate { /* flyspell-duplicate */ color: #cdad00; font-weight: bold; text-decoration: underline; } -.org-flyspell-incorrect { /* flyspell-incorrect */ color: #ff4500; font-weight: bold; text-decoration: underline; } -.org-fringe { /* fringe */ background-color: #f2f2f2; } -.org-function-name { /* font-lock-function-name-face */ color: teal; } -.org-header-line { /* header-line */ color: #333333; background-color: #e5e5e5; } -.org-help-argument-name { /* help-argument-name */ font-style: italic; } -.org-highlight { /* highlight */ background-color: #b4eeb4; } -.org-holiday { /* holiday */ background-color: #ffc0cb; } -.org-isearch { /* isearch */ color: #b0e2ff; background-color: #cd00cd; } -.org-isearch-fail { /* isearch-fail */ background-color: #ffc1c1; } -.org-italic { /* italic */ font-style: italic; } -.org-keyword { /* font-lock-keyword-face */ color: #0086b3; } -.org-lazy-highlight { /* lazy-highlight */ background-color: #afeeee; } -.org-link { /* link */ color: #0000ff; text-decoration: underline; } -.org-link-visited { /* link-visited */ color: #8b008b; text-decoration: underline; } -.org-log-edit-header { /* log-edit-header */ color: #a020f0; } -.org-log-edit-summary { /* log-edit-summary */ color: #0000ff; } -.org-log-edit-unknown-header { /* log-edit-unknown-header */ color: #b22222; } -.org-match { /* match */ background-color: #ffff00; } -.org-next-error { /* next-error */ background-color: #eedc82; } -.org-nobreak-space { /* nobreak-space */ color: #a52a2a; text-decoration: underline; } -.org-org-archived { /* org-archived */ color: #7f7f7f; } -.org-org-block { /* org-block */ color: #7f7f7f; } -.org-org-block-begin-line { /* org-block-begin-line */ color: #b22222; } -.org-org-block-end-line { /* org-block-end-line */ color: #b22222; } -.org-org-checkbox { /* org-checkbox */ font-weight: bold; } -.org-org-checkbox-statistics-done { /* org-checkbox-statistics-done */ color: #228b22; font-weight: bold; } -.org-org-checkbox-statistics-todo { /* org-checkbox-statistics-todo */ color: #ff0000; font-weight: bold; } -.org-org-clock-overlay { /* org-clock-overlay */ background-color: #ffff00; } -.org-org-code { /* org-code */ color: #7f7f7f; } -.org-org-column { /* org-column */ background-color: #e5e5e5; } -.org-org-column-title { /* org-column-title */ background-color: #e5e5e5; font-weight: bold; text-decoration: underline; } -.org-org-date { /* org-date */ color: #a020f0; text-decoration: underline; } -.org-org-document-info { /* org-document-info */ color: #191970; } -.org-org-document-info-keyword { /* org-document-info-keyword */ color: #7f7f7f; } -.org-org-document-title { /* org-document-title */ color: #191970; font-size: 144%; font-weight: bold; } -.org-org-done { /* org-done */ color: #228b22; font-weight: bold; } -.org-org-drawer { /* org-drawer */ color: #0000ff; } -.org-org-ellipsis { /* org-ellipsis */ color: #b8860b; text-decoration: underline; } -.org-org-footnote { /* org-footnote */ color: #a020f0; text-decoration: underline; } -.org-org-formula { /* org-formula */ color: #b22222; } -.org-org-headline-done { /* org-headline-done */ color: #bc8f8f; } -.org-org-hide { /* org-hide */ color: #ffffff; } -.org-org-latex-and-export-specials { /* org-latex-and-export-specials */ color: #8b4513; } -.org-org-level-1 { /* org-level-1 */ color: #0000ff; } -.org-org-level-2 { /* org-level-2 */ color: #a0522d; } -.org-org-level-3 { /* org-level-3 */ color: #a020f0; } -.org-org-level-4 { /* org-level-4 */ color: #b22222; } -.org-org-level-5 { /* org-level-5 */ color: #228b22; } -.org-org-level-6 { /* org-level-6 */ color: #008b8b; } -.org-org-level-7 { /* org-level-7 */ color: #7a378b; } -.org-org-level-8 { /* org-level-8 */ color: #8b2252; } -.org-org-link { /* org-link */ color: #0000ff; text-decoration: underline; } -.org-org-meta-line { /* org-meta-line */ color: #b22222; } -.org-org-mode-line-clock { /* org-mode-line-clock */ color: #000000; background-color: #bfbfbf; } -.org-org-mode-line-clock-overrun { /* org-mode-line-clock-overrun */ color: #000000; background-color: #ff0000; } -.org-org-quote { /* org-quote */ color: #7f7f7f; } -.org-org-scheduled { /* org-scheduled */ color: #006400; } -.org-org-scheduled-previously { /* org-scheduled-previously */ color: #b22222; } -.org-org-scheduled-today { /* org-scheduled-today */ color: #006400; } -.org-org-sexp-date { /* org-sexp-date */ color: #a020f0; } -.org-org-special-keyword { /* org-special-keyword */ color: #a020f0; } -.org-org-table { /* org-table */ color: #0000ff; } -.org-org-tag { /* org-tag */ font-weight: bold; } -.org-org-target { /* org-target */ text-decoration: underline; } -.org-org-time-grid { /* org-time-grid */ color: #b8860b; } -.org-org-todo { /* org-todo */ color: #ff0000; font-weight: bold; } -.org-org-upcoming-deadline { /* org-upcoming-deadline */ color: #b22222; } -.org-org-verbatim { /* org-verbatim */ color: #7f7f7f; } -.org-org-verse { /* org-verse */ color: #7f7f7f; } -.org-org-warning { /* org-warning */ color: #ff0000; font-weight: bold; } -.org-outline-1 { /* outline-1 */ color: #0000ff; } -.org-outline-2 { /* outline-2 */ color: #a0522d; } -.org-outline-3 { /* outline-3 */ color: #a020f0; } -.org-outline-4 { /* outline-4 */ color: #b22222; } -.org-outline-5 { /* outline-5 */ color: #228b22; } -.org-outline-6 { /* outline-6 */ color: #008b8b; } -.org-outline-7 { /* outline-7 */ color: #7a378b; } -.org-outline-8 { /* outline-8 */ color: #8b2252; } -.org-preprocessor { /* font-lock-preprocessor-face */ color: #7a378b; } -.org-query-replace { /* query-replace */ color: #b0e2ff; background-color: #cd00cd; } -.org-regexp-grouping-backslash { /* font-lock-regexp-grouping-backslash */ font-weight: bold; } -.org-regexp-grouping-construct { /* font-lock-regexp-grouping-construct */ font-weight: bold; } -.org-region { /* region */ background-color: #eedc82; } -.org-secondary-selection { /* secondary-selection */ background-color: #ffff00; } -.org-shadow { /* shadow */ color: #7f7f7f; } -.org-show-paren-match { /* show-paren-match */ background-color: #40e0d0; } -.org-show-paren-mismatch { /* show-paren-mismatch */ color: #ffffff; background-color: #a020f0; } -.org-string { /* font-lock-string-face */ color: #dd1144; } -.org-tool-bar { /* tool-bar */ color: #000000; background-color: #bfbfbf; } -.org-tooltip { /* tooltip */ color: #000000; background-color: #ffffe0; } -.org-trailing-whitespace { /* trailing-whitespace */ background-color: #ff0000; } -.org-type { /* font-lock-type-face */ color: #228b22; } -.org-underline { /* underline */ text-decoration: underline; } -.org-variable-name { /* font-lock-variable-name-face */ color: teal; } -.org-warning { /* font-lock-warning-face */ color: #ff0000; font-weight: bold; } -.org-widget-button { /* widget-button */ font-weight: bold; } -.org-widget-button-pressed { /* widget-button-pressed */ color: #ff0000; } -.org-widget-documentation { /* widget-documentation */ color: #006400; } -.org-widget-field { /* widget-field */ background-color: #d9d9d9; } -.org-widget-inactive { /* widget-inactive */ color: #7f7f7f; } -.org-widget-single-line-field { /* widget-single-line-field */ background-color: #d9d9d9; } diff --git a/css/readtheorg.css b/css/readtheorg.css deleted file mode 100644 index 423a707..0000000 --- a/css/readtheorg.css +++ /dev/null @@ -1,1108 +0,0 @@ -@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic|Roboto+Slab:400,700|Inconsolata:400,700); -@import url(https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css); - -h1,h2,h3,h4,h5,h6,legend{ - font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif; - font-weight:700; - margin-top:0; -} - -h1{ - font-size:175%; -} - -.subtitle{ - font-size:95%; /* of h1 */ -} - -h2{ - font-size:150%; -} - -h3{ - font-size:125%; -} - -h4{ - font-size:115%; -} - -h5{ - font-size:110%; -} - -h6{ - font-size:100%; -} - -h4,h5,h6{ - color:#2980B9; - font-weight:300; -} - -html{ - -ms-text-size-adjust:100%; - -webkit-text-size-adjust:100%; - font-size:100%; - height:100%; - overflow-x:hidden; -} - -body{ - background:#edf0f2; - color:#404040; - font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; - font-weight:normal; - margin:0; - min-height:100%; - overflow-x:hidden; -} - -#content{ - background:#fcfcfc; - height:100%; - margin-left:300px; - /* margin:auto; */ - max-width:1200px; - min-height:100%; - padding:1.618em 3.236em; -} - -p{ - font-size:16px; - line-height:24px; - margin:0px 0px 24px 0px; -} - -b,strong{ - font-weight:bold} - -blockquote{ - background-color: #F0F0F0; - border-left:5px solid #CCCCCC; - font-style:italic; - line-height:24px; - margin:0px 0px 24px 0px; - /* margin-left:24px; */ - padding: 6px 20px; -} - -ul,ol,dl{ - line-height:24px; - list-style-image:none; - /* list-style:none; */ - margin:0px 0px 24px 0px; - padding:0; -} - -li{ - margin-left: 24px; -} - -dd{ - margin:0; -} - -#content .section ul,#content .toctree-wrapper ul,article ul{ - list-style:disc; - line-height:24px; - margin-bottom:24px} - -#content .section ul li,#content .toctree-wrapper ul li,article ul li{ - list-style:disc; - margin-left:24px} - -#content .section ul li p:last-child,#content .toctree-wrapper ul li p:last-child,article ul li p:last-child{ - margin-bottom:0} - -#content .section ul li ul,#content .toctree-wrapper ul li ul,article ul li ul{ - margin-bottom:0} - -#content .section ul li li,#content .toctree-wrapper ul li li,article ul li li{ - list-style:circle} - -#content .section ul li li li,#content .toctree-wrapper ul li li li,article ul li li li{ - list-style:square} - -#content .section ul li ol li,#content .toctree-wrapper ul li ol li,article ul li ol li{ - list-style:decimal} - -#content .section ol,#content ol,article ol{ - list-style:decimal; - line-height:24px; - margin-bottom:24px} - -#content .section ol li,#content ol li,article ol li{ - list-style:decimal; - margin-left:24px} - -#content .section ol li p:last-child,#content ol li p:last-child,article ol li p:last-child{ - margin-bottom:0} - -#content .section ol li ul,#content ol li ul,article ol li ul{ - margin-bottom:0} - -#content .section ol li ul li,#content ol li ul li,article ol li ul li{ - list-style:disc} - -dl dt{ - font-weight:bold; -} - -dl p,dl table,dl ul,dl ol{ - margin-bottom:12px !important; -} - -dl dd{ - margin:0 0 12px 24px; -} - -@media print{ - .codeblock,pre.src{ - white-space:pre.src-wrap} -} - -@media print{ - html,body,section{ - background:none !important} - - *{ - box-shadow:none !important; - text-shadow:none !important; - filter:none !important; - -ms-filter:none !important} - - a,a:visited{ - text-decoration:underline} - - pre.src,blockquote{ - page-break-inside:avoid} - - thead{ - display:table-header-group} - - tr,img{ - page-break-inside:avoid} - - img{ - max-width:100% !important} - - @page{ - margin:0.5cm} - - p,h2,h3{ - orphans:3; - widows:3} - - h2,h3{ - page-break-after:avoid} -} - -@media print{ - #postamble{ - display:none} - - #content{ - margin-left:0} -} - -@media print{ - #table-of-contents{ - display:none} - - @page{ - size: auto; - margin: 25mm 25mm 25mm 25mm;} - - body { - margin: 0px;} -} - -@media screen and (max-width: 768px){ -} - -@media only screen and (max-width: 480px){ -} - -@media screen and (max-width: 768px){ - .tablet-hide{ - display:none} -} - -@media screen and (max-width: 480px){ - .mobile-hide{ - display:none} -} - -@media screen and (max-width: 480px){ -} - -@media screen and (max-width: 768px){ - #content{ - margin-left:0} - - #content #content{ - padding:1.618em} - - #content.shift{ - position:fixed; - min-width:100%; - left:85%; - top:0; - height:100%; - overflow:hidden} -} - -@media screen and (min-width: 1400px){ - #content{ - background:rgba(0,0,0,0.05)} - - #content{ - background:#fcfcfc} -} - -@media screen and (max-width: 768px){ - #copyright{ - width:85%; - display:none} - - #copyright.shift{ - display:block} - - img{ - width:100%; - height:auto} -} - -@media screen and (max-width: 480px){ - #content .sidebar{ - width:100%} -} - -code{ - background:#fff; - border:solid 1px #e1e4e5; - /* color:#000; for clickable code */ - font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace; - font-size:75%; - max-width:100%; - overflow-x:auto; - padding:0 5px; - white-space:nowrap; -} - -.codeblock-example{ - border:1px solid #e1e4e5; - border-bottom:none; - padding:24px; - padding-top:48px; - font-weight:500; - background:#fff; - position:relative} - -.codeblock-example:after{ - content:"Example"; - position:absolute; - top:0px; - left:0px; - background:#9B59B6; - color:#fff; - padding:6px 12px} - -.codeblock-example.prettyprint-example-only{ - border:1px solid #e1e4e5; - margin-bottom:24px} - -.codeblock,pre.src,#content .literal-block{ - border:1px solid #e1e4e5; - padding:12px; - overflow-x:auto; - background:#fff; - margin:1px 0 24px 0} - -pre.src{ - /* color:#404040; */ - display:block; - font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace; - font-size:12px; - line-height:1.5; - margin:1px 0px 24px 0px; - overflow:auto; - padding:12px; - white-space:pre; -} - -.example{ - background:#f3f6f6; - border:1px solid #e1e4e5; - color:#404040; - font-size: 12px; - line-height: 1.5; - margin-bottom:24px; - padding:12px; -} - -table{ - border-collapse:collapse; - border-spacing:0; - empty-cells:show; - margin-bottom:24px; - border-bottom:1px solid #e1e4e5; -} - -td{ - vertical-align:top} - -table td,table th{ - font-size:90%; - margin:0; - overflow:visible; - padding:8px 16px; - background-color:white; - border:1px solid #e1e4e5; -} - -table thead th{ - font-weight:bold; - border-top:3px solid #e1e4e5; - border-bottom:1px solid #e1e4e5; -} - -table caption{ - color:#000; - font:italic 85%/1 arial,sans-serif; - padding:1em 0; -} - -table tr:nth-child(2n-1) td{ - background-color:#f3f6f6; -} - -table tr:nth-child(2n) td{ - background-color:white; -} - -.figure p{ - color:#000; - font:italic 85%/1 arial,sans-serif; - padding:1em 0; -} - -.rotate-90{ - -webkit-transform:rotate(90deg); - -moz-transform:rotate(90deg); - -ms-transform:rotate(90deg); - -o-transform:rotate(90deg); - transform:rotate(90deg); -} - -.rotate-270{ - -webkit-transform:rotate(270deg); - -moz-transform:rotate(270deg); - -ms-transform:rotate(270deg); - -o-transform:rotate(270deg); - transform:rotate(270deg); -} - -#toggle-sidebar, -#table-of-contents .close-sidebar { - display: none; -} - -@media screen and (max-width: 768px) { - #table-of-contents { - display: none; - width: 60%; - } - - #table-of-contents h2 a { - display: block; - } - - #table-of-contents:target { - display: block; - } - - #copyright, #postamble { - display: none; - } - - #toggle-sidebar { - background-color: #2980B9; - display: block; - margin-bottom: 1.6em; - padding: 0.6em; - text-align: center; - } - - #toggle-sidebar h2 { - background-color:#2980B9; - width:100%; - height:50px; - left:0; - top:0; - color: white; - font-size: 100%; - line-height: 50px; - position:fixed; - margin: 0; - padding: 0; - opacity:0.7; - } - - #table-of-contents .close-sidebar { - color: rgba(255, 255, 255, 0.3); - display: inline-block; - margin: 0px 10px 0px 45px; - padding: 10px; - } -} - -*{ - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; -} - -figcaption,figure,footer,header,hgroup,nav{ - display:block} - -ins{ - background:#ff9; - color:#000; - text-decoration:none} - -mark{ - background:#ff0; - color:#000; - font-style:italic; - font-weight:bold} - -small{ - font-size:85%} - -sub,sup{ - font-size:75%; - line-height:0; - position:relative; - vertical-align:baseline} - -sup{ - top:-0.5em} - -sub{ - bottom:-0.25em} - -img{ - -ms-interpolation-mode:bicubic; - vertical-align:middle; - max-width:100%} - -svg:not(:root){ - overflow:hidden} - -figure{ - margin:0} - -label{ - cursor:pointer} - -legend{ - border:0; - margin-left:-7px; - padding:0; - white-space:normal} - -.fa:before,#content .admonition-title:before,#content h1 .headerlink:before,#content h2 .headerlink:before,#content h3 .headerlink:before,#content h4 .headerlink:before,#content h5 .headerlink:before,#content h6 .headerlink:before,#content dl dt .headerlink:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,#content .note,#content .attention,#content .caution,#content .danger,#content .error,#content .summary,#content .hint,#content .important,#content .tip,#content .warning,#content .question,#content .seealso,#content .admonitiontodo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,#table-of-contents li.on a,#table-of-contents li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{ - -webkit-font-smoothing:antialiased} - -/*! - * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{ - font-family:'FontAwesome'; - src:url("../fonts/fontawesome-webfont.eot?v=4.1.0"); - src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.1.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.1.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular") format("svg"); - font-weight:normal; - font-style:normal} - -.fa,#content .admonition-title,.icon{ - display:inline-block; - font-family:FontAwesome; - font-style:normal; - font-weight:normal; - line-height:1; - -webkit-font-smoothing:antialiased; - -moz-osx-font-smoothing:grayscale} - -.fa-ul{ - padding-left:0; - margin-left:2.14286em; - list-style-type:none} - -.fa-ul>li{ - position:relative} - -.fa-li{ - position:absolute; - left:-2.14286em; - width:2.14286em; - top:0.14286em; - text-align:center} - -.fa-li.fa-lg{ - left:-1.85714em} - -.fa-border{ - padding:.2em .25em .15em; - border:solid 0.08em #eee; - border-radius:.1em} - -.fa,#content .admonition-title{ - font-family:inherit} - -.fa:before,#content .admonition-title:before{ - font-family:"FontAwesome"; - display:inline-block; - font-style:normal; - font-weight:normal; - line-height:1; - text-decoration:inherit} - -a .fa,a #content .admonition-title,#content a .admonition-title{ - display:inline-block; - text-decoration:inherit} - -.nav #content .admonition-title,#content .nav .admonition-title,.nav .icon{ - display:inline} - -.wy-alert,#content .note,#content .attention,#content .caution,#content .danger,#content .error,#content .summary,#content .hint,#content .important,#content .tip,#content .warning,#content .question,#content .seealso,#content .admonitiontodo{ - padding:12px; - line-height:24px; - margin-bottom:24px; - /* background:#e7f2fa; */ -} - -.wy-alert-title,#content .admonition-title{ - color:#fff; - font-weight:bold; - display:block; - color:#fff; - /* background:#6ab0de; */ - /* margin:-12px; */ - padding:6px 12px; - margin-bottom:0px} - -#content .danger,#content .error{ - background:#fdf3f2} - -.wy-alert.wy-alert-warning,#content .wy-alert-warning.note,#content .attention,#content .caution,#content .wy-alert-warning.danger,#content .wy-alert-warning.error,#content .wy-alert-warning.summary,#content .wy-alert-warning.hint,#content .wy-alert-warning.important,#content .wy-alert-warning.tip,#content .warning,#content .wy-alert-warning.seealso,#content .admonitiontodo{ - background:#ffedcc} - -#content .admonition-title.warning:before, -#content .admonition-title.caution:before, -#content .admonition-title.attention:before, -#content .admonition-title.important:before, -#content .admonition-title.error:before, -#content .admonition-title.danger:before{ - font-family:FontAwesome; - content: "";} - -#content .admonition-title.question:before{ - font-family:FontAwesome; - content: "";} - -#content .admonition-title.note:before, -#content .admonition-title.seealso:before, -#content .admonition-title.tip:before, -#content .admonition-title.summary:before, -#content .admonition-title.hint:before{ - font-family:FontAwesome; - content: "";} - - -#content .note,#content .question,#content .seealso{ - background:#e7f2fa} - -.wy-alert p:last-child,#content .note p:last-child,#content .attention p:last-child,#content .caution p:last-child,#content .danger p:last-child,#content .error p:last-child,#content .summary p:last-child,#content .hint p:last-child,#content .important p:last-child,#content .tip p:last-child,#content .warning p:last-child,#content .question p:last-child,#content .seealso p:last-child,#content .admonitiontodo p:last-child{ - margin-bottom:0} - -#content .admonition-title.tip,#content .admonition-title.important,#content .admonition-title.summary,#content .admonition-title.hint{ - line-height: 1; - background:#1abc9c} - -#content .important,#content .tip,#content .summary,#content .hint{ - background:#dbfaf4} - -#content .admonition-title.note,#content .admonition-title.question,#content .admonition-title.seealso{ - line-height: 1; - background:#6ab0de} - -#content .admonition-title.warning,#content .admonition-title.caution,#content .admonition-title.attention{ - line-height: 1; - background:#F0B37E} - -#content .admonition-title.error,#content .admonition-title.danger{ - line-height: 1; - background:#f29f97} - -legend{ - display:block; - width:100%; - border:0; - padding:0; - white-space:normal; - margin-bottom:24px; - font-size:150%; - *margin-left:-7px} - -label{ - display:block; - margin:0 0 0.3125em 0; - color:#333; - font-size:90%} - -a{ - color:#2980B9; - text-decoration:none; - cursor:pointer} - - -a:hover,a:active{ - outline:0; -} - -a:hover{ - color:#3091d1} - -a:visited{ - color:#9B59B6} - -.left{ - text-align:left} - -.center{ - text-align:center} - -.right{ - text-align:right} - -hr{ - display:block; - height:1px; - border:0; - border-top:1px solid #e1e4e5; - margin:24px 0; - padding:0} - -#table-of-contents li{ - list-style:none; - margin-left: 0px; -} - -#table-of-contents header{ - height:32px; - display:inline-block; - line-height:32px; - padding:0 1.618em; - display:block; - font-weight:bold; - text-transform:uppercase; - font-size:80%; - color:#2980B9; - white-space:nowrap} - -#table-of-contents ul{ - margin-bottom:0} - -#table-of-contents li.divide-top{ - border-top:solid 1px #404040} - -#table-of-contents li.divide-bottom{ - border-bottom:solid 1px #404040} - -#table-of-contents li.current{ - background:#e3e3e3} - -#table-of-contents li.current a{ - color:gray; - border-right:solid 1px #c9c9c9; - padding:0.4045em 2.427em} - -#table-of-contents li.current a:hover{ - background:#d6d6d6} - -#table-of-contents li a{ - /* color:#404040; */ - padding:0.4045em 1.618em; - position:relative; - /* background:#fcfcfc; */ - border:none; - /* border-bottom:solid 1px #c9c9c9; */ - /* border-top:solid 1px #c9c9c9; */ - padding-left:1.618em -4px} - -#table-of-contents li.on a:hover,#table-of-contents li.current>a:hover{ - background:#fcfcfc} - -#table-of-contents li ul li a{ - /* background:#c9c9c9; */ - padding:0.4045em 2.427em} - -#table-of-contents li ul li ul li a{ - padding:0.4045em 3.236em} - -#table-of-contents li.current ul{ - display:block} - -/* #table-of-contents li ul{ */ -/* margin-bottom:0; */ -/* display:none} */ - -#table-of-contents .local-toc li ul{ - display:block} - -#table-of-contents li ul li a{ - margin-bottom:0; - color:#b3b3b3; - font-weight:normal} - -#table-of-contents a{ - display:inline-block; - line-height:18px; - padding:0.4045em 1.618em; - display:block; - position:relative; - font-size:90%; - color:#b3b3b3; - direction: ltr; -} - -#table-of-contents a:hover{ - background-color:#4e4a4a; - cursor:pointer} - -/* #text-table-of-contents { */ -/* overflow:scroll; */ -/* } */ - -#table-of-contents{ - position:fixed; - top:0; - left:0; - width:300px; - overflow-x:hidden; - overflow-y:scroll; - height:100%; - background:#343131; - z-index:200; - scrollbar-base-color: #1F1D1D; - scrollbar-arrow-color: #b3b3b3; - scrollbar-shadow-color: #1F1D1D; - scrollbar-track-color : #343131; -} - -#table-of-contents h2{ - z-index:200; - background-color:#2980B9; - text-align:center; - padding:0.809em; - display:block; - color:#fcfcfc; - font-size: 100%; - margin-bottom:0.809em} - -ul.nav li ul li { - display: none; -} - -ul.nav li ul li ul li { - display: none; -} - -ul.nav li.active ul li { - display: inline; -} - -ul.nav li.active ul li ul li { - display: inline; -} - -ul.nav li.active ul li a { - background-color: #E3E3E3; - color: #8099B0; - border-right:solid 1px #c9c9c9 !important; -} - -ul.nav li.active ul li.active a { - background-color: #C9C9C9; - color: black !important; - font-weight: bold !important; -} - -ul.nav li.active ul li.active ul li.active a { - color: black !important; - font-weight: bold !important; - display: block !important; -} - -ul.nav li.active ul li.active ul li a { - color: #808080 !important; - font-weight: normal !important; - display: block !important; -} - -ul.nav li.active ul li ul li a { - display: none !important; -} - -/* ul.nav li ul li ul li { */ -/* display: none !important; /\* as long as nav is on multiple levels of ul *\/ */ -/* /\* display: none; /\* as long as nav is on multiple levels of ul *\\/ *\/ */ -/* } */ - -ul.nav li ul li ul li ul li { - display: none !important; /* as long as nav is on multiple levels of ul */ - /* display: none; /* as long as nav is on multiple levels of ul *\/ */ -} - -ul.nav li.active > a { - border-bottom:solid 1px #c9c9c9 !important; /* XXX Restrict it to 2nd level */ - border-right:solid 1px #c9c9c9 !important; -} - -ul.nav li.active a { - color: gray !important; - font-weight:bold; - background-color: white; - border-right:solid 0px white !important; -} - -ul.nav > li.active > a { - color: black !important; -} - -footer{ - color:#999} - -footer p{ - margin-bottom:12px} - -#copyright, #postamble{ - position:fixed; - bottom:0; - left:0; - width:300px; - color:#fcfcfc; - background:#1f1d1d; - border-top:solid 10px #343131; - font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; - font-size: 90%; - z-index:400; - padding:12px; -} - -#postamble .author { - font-size: 100%; - margin-bottom: 0px; -} - -#postamble .date { - font-size: 90%; - margin-bottom: 0px; - color: #27AE60; -} - -#postamble .creator,#postamble .validation { - display:none; -} - -#copyright a{ - color:#2980B9; - text-decoration:none} - -#copyright .rst-current-version{ - padding:12px; - background-color:#272525; - display:block; - text-align:right; - font-size:90%; - cursor:pointer; - color:#27AE60; - *zoom:1} - -#content img{ - max-width:100%; -} - -#content div.figure{ - margin-bottom:24px} - -#content div.figure.align-center{ - text-align:center} - -#content .section>img,#content .section>a>img{ - margin-bottom:24px} - -.verse{ - border-left:5px solid #6AB0DE; - background-color: #E7F2FA; - padding: 6px 20px; - font-style:italic; -} - -#content .note .last,#content .attention .last,#content .caution .last,#content .danger .last,#content .error .last,#content .hint .summary,#content .hint .last,#content .important .last,#content .tip .last,#content .warning .last,#content .question .last,#content .seealso .last,#content .admonitiontodo .last{ - margin-bottom:0} - -#content .admonition-title:before{ - margin-right:4px} - -#content .section ol p,#content .section ul p{ - margin-bottom:12px} - -#content h1 .headerlink,#content h2 .headerlink,#content h3 .headerlink,#content h4 .headerlink,#content h5 .headerlink,#content h6 .headerlink,#content dl dt .headerlink{ - display:none; - visibility:hidden; - font-size:14px} - -#content h1 .headerlink:after,#content h2 .headerlink:after,#content h3 .headerlink:after,#content h4 .headerlink:after,#content h5 .headerlink:after,#content h6 .headerlink:after,#content dl dt .headerlink:after{ - visibility:visible; - content:""; - font-family:FontAwesome; - display:inline-block} - -#content h1:hover .headerlink,#content h2:hover .headerlink,#content h3:hover .headerlink,#content h4:hover .headerlink,#content h5:hover .headerlink,#content h6:hover .headerlink,#content dl dt:hover .headerlink{ - display:inline-block} - -#content .sidebar{ - float:right; - width:40%; - display:block; - margin:0 0 24px 24px; - padding:24px; - background:#f3f6f6; - border:solid 1px #e1e4e5} - -#content .sidebar p,#content .sidebar ul,#content .sidebar dl{ - font-size:90%} - -#content .sidebar .last{ - margin-bottom:0} - -#content .sidebar .sidebar-title{ - display:block; - font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif; - font-weight:bold; - background:#e1e4e5; - padding:6px 12px; - margin:-24px; - margin-bottom:24px; - font-size:100%} - -#content .highlighted{ - background:#F1C40F; - display:inline-block; - font-weight:bold; - padding:0 6px} - -#content .footnote-reference,#content .citation-reference{ - vertical-align:super; - font-size:90%} - -span[id*='MathJax-Span']{ - color:#404040} - -.math{ - text-align:center} - -#footnotes{ - border-top:1px solid #e1e4e5; - padding-top: 36px; -} - -h2.footnotes{ - display:none; -} - -.footnum, .footref{ - color: #2980b9; - font-size: 170%; - font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; -} - -.footnum:before, .footref:before{ - content:"["; -} - -.footnum:after, .footref:after{ - content:"]"; -} - -.footpara { - color: #999; - font-size: 90%; - font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif; - padding-bottom: 8px; - padding-left: 16px; - padding-right: 16px; - padding-top: 8px; - line-height: 1.25em; - /* display: inline; */ -} - -.todo{ - background-color: #f29f97; - padding: 0px 4px; - color: #fff; -} - -.WAIT, .nilWAIT{ - background-color: #6AB097; -} - -.done{ - background-color: #6ab0de; - padding: 0px 4px; - color: #fff; -} - -.tag span { - background-color: #EDEDED; - border: 1px solid #EDEDED; - color: #939393; - cursor: pointer; - display: block; - float: right; - font-size: 80%; - font-weight: normal; - margin: 0 3px; - padding: 1px 2px; - border-radius: 10px; -} - -.tag .FLAGGED { - background-color: #DB2D27; - border: 1px solid #DB2D27; - color: white; - font-weight: bold; -} - -.timestamp { - font-family: Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace; - font-size: 90%; - color: navy; -} - -.nav .timestamp { - color: inherit; -} - -.inlinetask { - background: #FFF9E3; /* url(dialog-todo.png) no-repeat 10px 8px; */ - border: 3px solid #FFEB8E; - /* border-right-style: none; */ - /* border-left-style: none; */ - /* padding: 10px 20px 10px 60px; */ - padding: 9px 12px; - margin-bottom: 24px; - font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif} diff --git a/index.html b/index.html index 168b9b9..330b463 100644 --- a/index.html +++ b/index.html @@ -3,19 +3,13 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Design of the Nano-Hexapod and associated Control Architectures - Summary - - - - - - - - + + -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: -#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: #+STARTUP: overview diff --git a/index.pdf b/index.pdf index 562aa58..e69aaba 100644 Binary files a/index.pdf and b/index.pdf differ diff --git a/index.tex b/index.tex index 6621bbe..f53a938 100644 --- a/index.tex +++ b/index.tex @@ -1,4 +1,4 @@ -% Created 2020-10-01 jeu. 16:47 +% Created 2020-11-11 mer. 14:28 % Intended LaTeX compiler: pdflatex \documentclass[conf, hangsection, secbreak]{cleanreport} \usepackage[utf8]{inputenc} @@ -34,6 +34,13 @@ \author{Thomas Dehaeze} \date{\today} \title{Design of the Nano-Hexapod and associated Control Architectures - Summary} +\hypersetup{ + pdfauthor={Thomas Dehaeze}, + pdftitle={Design of the Nano-Hexapod and associated Control Architectures - Summary}, + pdfkeywords={}, + pdfsubject={}, + pdfcreator={Emacs 27.1 (Org mode 9.4)}, + pdflang={English}} \begin{document} \maketitle @@ -42,7 +49,7 @@ \section*{Introduction} -\label{sec:org4d603ae} +\label{sec:org1ea4fce} In this document are gathered and summarized all the developments done for the design of the Nano Active Stabilization System. This consists of a nano-hexapod and an associated control architecture that are used to stabilize samples down to the nano-meter level in presence of disturbances. @@ -70,7 +77,7 @@ Finally, using the optimally designed nano-hexapod, a robust control architectur Simulations are performed to show that this design gives acceptable performance and the required robustness (Section \ref{sec:robust_control_architecture}). \section{Introduction to Feedback Systems and Noise budgeting} -\label{sec:orga52ddd0} +\label{sec:org67cd91d} \label{sec:feedback_introduction} In this section, some basics of \textbf{feedback systems} are first introduced (Section \ref{sec:feedback}). This should highlight the challenges of the required combined performance and robustness. @@ -81,7 +88,7 @@ This tool will be widely used throughout this study to both predict the performa It is very well described in \cite{monkhorst04_dynam_error_budget}. \subsection{Feedback System} -\label{sec:org7f54e90} +\label{sec:org7ff57da} \label{sec:feedback} The use of Feedback control in a motion system required to use some sensors to monitor the actual status of the system and actuators to modifies this status. @@ -110,7 +117,7 @@ Thus the \emph{robustness} properties of the feedback system must be carefully g Very good introduction to feedback control are given in \cite{lurie12_class} and \cite{skogestad07_multiv_feedb_contr}. \subsubsection{Simplified Feedback Control Diagram for the NASS} -\label{sec:org56d9a4e} +\label{sec:orgd231b5f} Let's consider the block diagram shown in Figure \ref{fig:classical_feedback_small} where the signals are: \begin{itemize} \item \(y\): the relative position of the sample with respect to the granite (the quantity to be controlled) @@ -142,7 +149,7 @@ which is, in the case of the NASS out of the specifications (micro-meter range c In the next section, is explained how the use of the feedback lowers the effect of the disturbances \(d\) on the sample motion error. \subsubsection{How does the feedback loop is modifying the system behavior?} -\label{sec:orgf779d01} +\label{sec:org6de1180} From the feedback diagram in Figure \ref{fig:classical_feedback_small}, the position error signal \(\epsilon = r - y\) can be written as a function of the reference signal \(r\), the disturbances \(d\) and the measurement noise \(n\): \[ \epsilon = \frac{1}{1 + GK} r + \frac{GK}{1 + GK} n - \frac{G_d}{1 + GK} d \] @@ -172,7 +179,7 @@ Ideally, it is desired to design the controller \(K\) such that: \end{itemize} \subsubsection{Trade off: Disturbance Reduction / Noise Injection} -\label{sec:org57937b9} +\label{sec:org988b7cb} From the definition of \(S\) and \(T\): \begin{equation} S + T = \frac{1}{1 + GK} + \frac{GK}{1 + GK} = 1 @@ -209,7 +216,7 @@ It is shown that \(|S|\) and \(|T|\) exhibit different behaviors depending on th \end{figure} \subsubsection{Trade off: Robustness / Performance} -\label{sec:org70dca52} +\label{sec:orgd0de4d0} \label{sec:perf_robust_tradeoff} As shown in the previous section, the effect of disturbances is reduced \textbf{inside} the control bandwidth. @@ -243,7 +250,7 @@ The nano-hexapod and the control architecture have to be developed in such a way This problem of \textbf{robustness} represent one of the main challenge for the design of the NASS. \subsection{Dynamic error budgeting} -\label{sec:org0aae2cd} +\label{sec:orgea6d259} \label{sec:noise_budget} The dynamic error budgeting is a powerful tool to study the effects of multiple error sources (i.e. disturbances and measurement noise) and to predict how much these effects are reduced by a feedback system. @@ -254,7 +261,7 @@ After these two functions are introduced (in Sections \ref{sec:psd} and \ref{sec Finally, the dynamic noise budgeting for the NASS is derived in Section \ref{sec:dynamic_noise_budget}. \subsubsection{Power Spectral Density} -\label{sec:org9305ecf} +\label{sec:org88ba1ab} \label{sec:psd} The \textbf{Power Spectral Density} (PSD) \(S_{xx}(f)\) of the time domain signal \(x(t)\) is defined as the Fourier transform of the autocorrelation function: @@ -274,7 +281,7 @@ One can also integrate the infinitesimal power \(S_{xx}(\omega)d\omega\) over a \end{equation} \subsubsection{Cumulative Power Spectrum} -\label{sec:orgbf976b9} +\label{sec:org1a1d24a} \label{sec:cps} The \textbf{Cumulative Power Spectrum} is the cumulative integral of the Power Spectral Density starting from \(0\ \text{Hz}\) with increasing frequency: @@ -302,7 +309,7 @@ A typical Cumulative Power Spectrum is shown in figure \ref{fig:preumont18_cas_p \end{figure} \subsubsection{Modification of a signal's PSD when going through a dynamical system} -\label{sec:orge885ddf} +\label{sec:org64c9a7c} \label{sec:psd_lti_system} Let's consider a signal \(u\) with a PSD \(S_{uu}\) going through a LTI system \(G(s)\) that outputs a signal \(y\) with a PSD (Figure \ref{fig:psd_lti_system}). @@ -319,7 +326,7 @@ The Power Spectral Density of the output signal \(y\) can be computed using: \end{equation} \subsubsection{PSD of combined signals} -\label{sec:org9c63d67} +\label{sec:orgcea4e1a} \label{sec:psd_combined_signals} Let's consider a signal \(y\) that is the sum of two \textbf{uncorrelated} signals \(u\) and \(v\) (Figure \ref{fig:psd_sum}). @@ -334,7 +341,7 @@ The PSD of \(y\) is equal to sum of the PSD and \(u\) and the PSD of \(v\) (can \end{figure} \subsubsection{Dynamic Noise Budgeting} -\label{sec:orgaa4a869} +\label{sec:org3a15251} \label{sec:dynamic_noise_budget} Let's consider the Feedback architecture in Figure \ref{fig:classical_feedback_small} where the position error \(\epsilon\) is equal to: @@ -365,7 +372,7 @@ To do so, the dynamics of the micro-station (Section \ref{sec:micro_station_dyna \end{itemize} \section{Identification of the Micro-Station Dynamics} -\label{sec:org2e7778f} +\label{sec:orge8cc2df} \label{sec:micro_station_dynamics} As explained before, it is very important to have a good estimation of the micro-station dynamics as it will be used: \begin{itemize} @@ -396,7 +403,7 @@ The extraction of the Spatial Model (3rd step) was not performed as it requires Instead, the model will be tuned using both the modal model and the response model. \subsection{Experimental Setup} -\label{sec:org7d3bfe1} +\label{sec:orgc4d5961} \label{sec:id_setup} To measure the dynamics of such complicated system, it as been chosen to perform a modal analysis. @@ -444,7 +451,7 @@ It was chosen to have some redundancy in the measurement to be able to verify th \end{figure} \subsection{Results} -\label{sec:org6e2241a} +\label{sec:orga9918f3} \label{sec:id_results} From the measurements are extracted all the transfer functions from forces applied at the location of the hammer impacts to the x-y-z acceleration of each solid body at the location of each accelerometer. @@ -487,7 +494,7 @@ These FRF will be used to compare the dynamics of the multi-body model with the \end{figure} \subsection{Conclusion} -\label{sec:org12dba72} +\label{sec:orgea8554a} \begin{important} The dynamical measurements made on the micro-station confirmed the fact that a multi-body model is a good option to correctly represents the micro-station dynamics. @@ -495,7 +502,7 @@ In Section \ref{sec:multi_body_model}, the obtained Frequency Response Functions \end{important} \section{Identification of the Disturbances} -\label{sec:org0becef5} +\label{sec:orgc99f1d2} \label{sec:identification_disturbances} In this section, all the disturbances affecting the system are identified and quantified. @@ -514,7 +521,7 @@ A noise budgeting is performed in Section \ref{sec:open_loop_noise_budget}, the The measurements are presented in more detail in \href{https://tdehaeze.github.io/meas-analysis/}{this} document and the open loop noise budget is done in \href{https://tdehaeze.github.io/nass-simscape/disturbances.html}{this} document. \subsection{Ground Motion} -\label{sec:org22783dc} +\label{sec:orgb13abb9} \label{sec:ground_motion} Ground motion can easily be estimated using an inertial sensor with sufficient resolution. @@ -538,7 +545,7 @@ The low frequency differences between the ground motion at ID31 and ID09 is just \end{figure} \subsection{Stage Vibration - Effect of Control systems} -\label{sec:orgde03f2f} +\label{sec:org1f69a1b} \label{sec:stage_vibration_control} The effect of the control system of each micro-station's stage is identified. @@ -552,14 +559,14 @@ It is shown that these local feedback loops have little influence on the sample' Complete reports on these measurements are accessible \href{https://tdehaeze.github.io/meas-analysis/2018-10-15\%20-\%20Marc/index.html}{here} and \href{https://tdehaeze.github.io/meas-analysis/disturbance-control-system/index.html}{here}. \subsection{Stage Vibration - Effect of Motion} -\label{sec:org9945a14} +\label{sec:org030bd4f} \label{sec:stage_vibration_motion} In this section, the vibrations induced by \textbf{scans of the translation stage} and \textbf{rotation of the spindle} and studied. Details reports are accessible \href{https://tdehaeze.github.io/meas-analysis/disturbance-ty/index.html}{here} for the translation stage and \href{https://tdehaeze.github.io/meas-analysis/disturbance-sr-rz/index.html}{here} for the spindle/slip-ring. \subsubsection*{Spindle and Slip-Ring} -\label{sec:org518c5df} +\label{sec:orgb54da2c} The setup for the measurement of vibrations induced by rotation of the Spindle and Slip-ring is shown in Figure \ref{fig:rz_meas_errors}. \begin{figure}[htbp] @@ -597,7 +604,7 @@ Some investigation should be performed to determine where does this 23Hz motion \end{important} \subsubsection*{Translation Stage} -\label{sec:orgb07b1c9} +\label{sec:org86c487a} The same setup is used: a geophone is located at the sample's location and another on the granite. A 1Hz triangle motion with an amplitude of \(\pm 2.5mm\) is sent to the translation stage (Figure \ref{fig:Figure_name}), and the absolute velocities of the sample and the granite are measured. @@ -637,7 +644,7 @@ Thus, if the detector is only used in between the triangular peaks, the vibratio \end{figure} \subsection{Open Loop noise budgeting} -\label{sec:org77a73d8} +\label{sec:org6f7b5d2} \label{sec:open_loop_noise_budget} The effect of all the disturbance sources on the position error (relative motion of the sample with respect to the granite) are now compared. @@ -668,7 +675,7 @@ This means that if the controller compensate all the motion errors below 100Hz ( From that, it can be concluded that control bandwidth will have to be around 100Hz. \subsection{Better estimation of the disturbances} -\label{sec:org58ff7d8} +\label{sec:orgd8d21dc} All the disturbance measurements were made with inertial sensors, and to obtain the relative motion sample/granite, two inertial sensors were used and the signals were subtracted. This is not perfect as using only one geophone on the sample and one on the granite do not permit to separate translations and rotations. @@ -678,7 +685,7 @@ An alternative could be to position a small calibrated sphere at the sample loca The detector requirement would need to have a sample frequency above \(400Hz\) and a resolution of \(\approx 100nm\) (to be discussed). \subsection{Conclusion} -\label{sec:org40891fd} +\label{sec:org934e83d} \begin{important} Main disturbance sources have been identified (ground motion, vibrations of the translation stage and the spindle). These disturbances will then be included in the multi-body model. @@ -693,7 +700,7 @@ This should however not change the conclusion of this study nor significantly ch \end{important} \section{Multi Body Model} -\label{sec:orga25491b} +\label{sec:org00ac08b} \label{sec:multi_body_model} As was shown during the modal analysis (Section \ref{sec:micro_station_dynamics}), the micro-station behaves as multiple rigid bodies (granite, translation stage, tilt stage, spindle, hexapod) connected with some discrete flexibility (stiffnesses and dampers). @@ -703,7 +710,7 @@ The Matlab's \href{https://www.mathworks.com/products/simscape.html}{Simscape} t A small summary of the multi-body Simscape is available \href{https://tdehaeze.github.io/nass-simscape/simscape.html}{here} and each of the modeled stage is described \href{https://tdehaeze.github.io/nass-simscape/simscape\_subsystems.html}{here}. \subsection{Multi-Body model} -\label{sec:orgf14ab8c} +\label{sec:org59eb0cb} \label{sec:multi_body_model_introduction} The parameters to tune the dynamics of the multi body are: @@ -729,7 +736,7 @@ The 3D representation of the simscape model is shown in Figure \ref{fig:simscape \end{figure} \subsection{Validity of the model's dynamics} -\label{sec:org4a98bd0} +\label{sec:orgb238588} \label{sec:model_validity} Tuning the dynamics of such model is very difficult as there are more than 50 parameters to tune and many different dynamics to compare between the model and the measurements. @@ -766,7 +773,7 @@ Then, using the model, it is possible to: \end{itemize} \subsection{Wanted position of the sample and position error} -\label{sec:orgde505a1} +\label{sec:orgd3bf601} \label{sec:pos_error_nass} For the control of the nano-hexapod, the sample position error (the motion to be compensated) in the frame of the nano-hexapod needs to be computed. @@ -792,7 +799,7 @@ Both computation are performed More details about these computations are accessible \href{https://tdehaeze.github.io/nass-simscape/positioning\_error.html}{here}. \subsection{Simulation of a Tomography Experiment} -\label{sec:org040c404} +\label{sec:orgdd17110} \label{sec:micro_station_simulation} Now that the dynamics of the model is tuned and the disturbances included in the model, simulations of experiments can be performed. @@ -846,7 +853,7 @@ The vertical rotation error is meaningless for two reasons: \end{figure} \subsection{Conclusion} -\label{sec:org4427a6f} +\label{sec:org11f1ab5} \begin{important} The multi-body model has been tuned to represents the micro-station dynamics and includes disturbances such as ground motion and stages vibrations. @@ -861,7 +868,7 @@ In the next sections, it will allows to optimally design the nano-hexapod, to de \end{important} \section{Optimal Nano-Hexapod Design} -\label{sec:org97eeda6} +\label{sec:org72bedaf} \label{sec:nano_hexapod_design} As explain before, the nano-hexapod properties (mass, stiffness, legs' orientation, \ldots{}) will influence: \begin{itemize} @@ -881,7 +888,7 @@ In this study, the effect of the nano-hexapod's mass characteristics is not take Also, the nano-hexapod's damping is not studied here as it is supposed to be very small, and active damping techniques will be included in the control architecture to add the wanted amount of damping. \subsection{A brief introduction to Stewart Platforms} -\label{sec:org654fe3f} +\label{sec:orga38dd7d} \label{sec:stewart_platform} A typical Stewart platform is composed of two platforms connected by six identical struts (or legs) composed of: @@ -928,7 +935,7 @@ The source code is accessible \href{https://github.com/tdehaeze/stewart-simscape Extensive analysis of parallel manipulator, and in particular the Stewart platform is given in \cite{skogestad07_multiv_feedb_contr}. \subsection{Optimal Stiffness to reduce the effect of disturbances} -\label{sec:orga11dcad} +\label{sec:orga31fb30} \label{sec:optimal_stiff_dist} As will be seen, the nano-hexapod stiffness have a large influence on the sensibility to disturbance (the norm of \(G_d\)). For instance, it is quite obvious that a stiff nano-hexapod is better than a soft one when it comes to direct forces applied to the sample such as cable forces. @@ -936,7 +943,7 @@ For instance, it is quite obvious that a stiff nano-hexapod is better than a sof A study of the optimal nano-hexapod stiffness for the minimization of disturbance sensibility is accessible \href{https://tdehaeze.github.io/nass-simscape/optimal\_stiffness\_disturbances.html}{here} and summarized below. \subsubsection*{Sensibility to stage vibrations} -\label{sec:orgf62449a} +\label{sec:orge89ffe8} The sensibility to the spindle's vibration for all the considered nano-hexapod stiffnesses (from \(10^3\,[N/m]\) to \(10^9\,[N/m]\)) is shown in Figure \ref{fig:opt_stiff_sensitivity_Frz}. It is shown that a softer nano-hexapod is better to filter out vertical vibrations of the spindle. More precisely, the nano-hexapod filters out the vibration starting at the first suspension mode of the payload on top of the nano-hexapod. @@ -950,7 +957,7 @@ The same conclusion is made for vibrations of the translation stage. \end{figure} \subsubsection*{Sensibility to ground motion} -\label{sec:org507b6df} +\label{sec:org1795c74} The sensibility to ground motion in the Y and Z directions is shown in Figure \ref{fig:opt_stiff_sensitivity_Dw}. Above the suspension mode of the nano-hexapod, the norm of the transmissibility is close to one until the suspension mode of the granite. Thus, a stiff nano-hexapod (\(k>10^5\,[N/m]\)) is better for reducing the effect of ground motion at low frequency. @@ -964,7 +971,7 @@ It will be suggested in Section \ref{sec:soft_granite} that using soft mounts fo \end{figure} \subsubsection*{Dynamic Noise Budgeting considering all the disturbances} -\label{sec:org31876bd} +\label{sec:orgda257b5} Looking at the change of sensibility with the nano-hexapod's stiffness helps understand the physics of the system. It however, does not permit to estimate the optimal stiffness that will lower the motion error due to disturbances. @@ -985,7 +992,7 @@ It can be seen that the most important change is in the frequency range 30Hz to \end{figure} \subsubsection*{Conclusion} -\label{sec:orgc4281b4} +\label{sec:orgf24fa44} \begin{important} It can be observe on the Cumulative amplitude spectrum of the vertical error motion in Figure \ref{fig:opt_stiff_cas_dz_tot}, that a soft hexapod (\(k < 10^5 - 10^6\,[N/m]\)) helps reducing the high frequency disturbances, and thus a smaller control bandwidth will be required to obtain the wanted performance. \end{important} @@ -997,7 +1004,7 @@ It can be observe on the Cumulative amplitude spectrum of the vertical error mot \end{figure} \subsection{Optimal Stiffness to reduce the plant uncertainty} -\label{sec:orgfa673b1} +\label{sec:org5f874b4} \label{sec:optimal_stiff_plant} One of the most important design goal is to obtain a system that is \textbf{robust} to all changes in the system. Therefore, all changes that might occur in the system must be identified and the nano-hexapod stiffness that minimizes the uncertainties to these changes should be determined. @@ -1018,7 +1025,7 @@ Only the plant dynamics will be compared as it is the most important dynamics fo However, the dynamics from forces to sensors located in the nano-hexapod legs, such as force and relative motion sensors, have also been considered in a separate study. \subsubsection*{Effect of Payload} -\label{sec:org5090c4c} +\label{sec:org4e428db} The most obvious change in the system is the change of payload. In Figure \ref{fig:opt_stiffness_payload_mass_fz_dz} the dynamics is shown for payloads with a mass equal to 1kg, 20kg and 50kg (the resonance of the payload is fixed to 100Hz). @@ -1087,7 +1094,7 @@ Heavy samples with low first resonance mode will be the most problematic. \end{important} \subsubsection*{Effect of Micro-Station Compliance} -\label{sec:org1e53f8e} +\label{sec:orgdf462d3} The micro-station dynamics is quite complex as was shown in Section \ref{sec:micro_station_dynamics}, moreover, its dynamics can change due to: \begin{itemize} \item a change in some mechanical elements @@ -1129,7 +1136,7 @@ If a stiff nano-hexapod is used, the control bandwidth should probably be limite \end{important} \subsubsection*{Effect of Spindle Rotating Speed} -\label{sec:orgad64606} +\label{sec:org7d21ae8} Let's now consider the rotation of the Spindle. The plant dynamics for spindle rotation speed varying from 0rpm up to 60rpm are identified and shown in Figure \ref{fig:opt_stiffness_wz_fx_dx}. @@ -1154,7 +1161,7 @@ A very soft (\(k < 10^4\,[N/m]\)) nano-hexapod should not be used due to the eff \end{important} \subsubsection*{Total Plant Uncertainty} -\label{sec:org19cd2dd} +\label{sec:org83ddb29} Finally, let's combined all the uncertainties and display the ``spread'' of the plant dynamics for all the nano-hexapod stiffnesses (Figure \ref{fig:opt_stiffness_plant_dynamics_task_space}). This show how the dynamics evolves with the stiffness and how different effects enters the plant dynamics. @@ -1165,7 +1172,7 @@ This show how the dynamics evolves with the stiffness and how different effects \end{figure} \subsubsection*{Conclusion} -\label{sec:org7d300aa} +\label{sec:org92cc923} \begin{important} Let's summarize the findings about the effect of the nano-hexapod's stiffness on the plant uncertainty: \begin{itemize} @@ -1182,7 +1189,7 @@ This corresponds to an \textbf{optimal nano-hexapod leg stiffness in the range} \end{important} \subsection{Optimal Nano-Hexapod Geometry} -\label{sec:org0b7ca89} +\label{sec:org57d6377} \label{sec:nano_hexapod_architecture} Stewart platforms can be studied with: \begin{itemize} @@ -1205,7 +1212,7 @@ As will be shown, the Nano-Hexapod geometry has an influence on: \end{itemize} \subsubsection*{Kinematic Analysis} -\label{sec:org3702985} +\label{sec:org2231553} The Kinematic analysis of the Stewart platform can be divided into two problems: the inverse kinematics and the forward kinematics. \begin{quote} @@ -1235,7 +1242,7 @@ This is a difficult problem that requires to solve nonlinear equations. However, as will be shown in the next section, approximate solution of the forward kinematic analysis can be obtained thanks to the Jacobian analysis. \subsubsection*{Jacobian Analysis} -\label{sec:orgafb6541} +\label{sec:org5c8cac9} The Jacobian matrix \(\bm{J}\) can be computed form the \textbf{orientation of the legs} (describes by the unit vectors \({}^A\hat{\bm{s}}_i\)) and the \textbf{position of the top joints} (described by the position vectors \({}^A\bm{b}_i\)) both expressed in the frame \(\{A\}\): \begin{equation} \bm{J} = \begin{bmatrix} @@ -1287,7 +1294,7 @@ And thus \textbf{the Jacobian matrix can be used to compute the forces that shou Linear transformations in Eq. \eqref{eq:jacobian_L} and \eqref{eq:jacobian_F} will be widely in the developed control architectures in Section \ref{sec:robust_control_architecture}. \subsubsection*{Mobility of the Stewart Platform} -\label{sec:orga5a7f4e} +\label{sec:orgf044a1f} For a specified geometry and actuator stroke, the mobility of the Stewart platform can be estimated thanks to the approximate forward kinematic analysis. An example of the mobility considering only pure translations is shown in Figure \ref{fig:mobility_translations_null_rotation}. @@ -1315,7 +1322,7 @@ If only pure translations and pure rotations are considered, the required actuat This gives an idea of the relation between the mobility and the actuator stroke. \subsubsection*{Stiffness and Compliance matrices} -\label{sec:org9df66d4} +\label{sec:orge665475} In order to determine the stiffness and compliance matrices of the Stewart platform, let's model the actuators by a spring with a stiffness \(k_i\) in parallel with a force source \(\tau_i\). The stiffness of the actuator \(k_i\) links the applied (constant) actuator force \(\delta \tau_i\) and the corresponding small deflection \(\delta l_i\): @@ -1348,7 +1355,7 @@ The compliance matrix of a manipulator shows the mapping of the moving platform Stiffness properties of the Stewart platform can then be estimated from the architecture (through the Jacobian matrix) and leg's stiffness. \subsubsection*{Effect of a change of geometry} -\label{sec:org7d7e981} +\label{sec:org6ef3c67} Equations \eqref{eq:jacobian_L}, \eqref{eq:jacobian_F} and \eqref{eq:jacobian_K} can be used to see how the maneuverability, the force authority and the stiffness of the Stewart platform are changing with a the geometry (position of the joints and orientation of the legs). The effects of two changes in the manipulator's geometry, namely the position and orientation of the legs, are summarized in Table \ref{tab:effect_legs_jacobian}. @@ -1382,7 +1389,7 @@ Horizontal rotation stroke & \(\searrow\) & \(\searrow\)\\ Even tough Table \ref{tab:effect_legs_jacobian} can be used to optimize the nano-hexapod's geometry, the available space for the nano-hexapod is too small to obtain a significant impact on the manipulator's stiffness and stroke. \subsubsection*{Cubic Architecture} -\label{sec:org710b8fe} +\label{sec:org2714a0d} A very popular choice of Stewart platform architecture in the scientific literature, especially for vibration isolation, is the \textbf{Cubic architecture}. The cubic architecture is quite specific in the sense that the active struts are arranged in a mutually orthogonal configuration connecting the corners of a cube (Figure \ref{fig:3d-cubic-stewart-aligned}). @@ -1407,7 +1414,7 @@ For these reasons, the cubic configuration is not recommended for the nano-hexap Separate study of the cubic architecture is performed \href{https://tdehaeze.github.io/stewart-simscape/cubic-configuration.html}{here}. \subsubsection*{Effect of Flexible Joints} -\label{sec:orgc833fc0} +\label{sec:orge9fd809} Each of the nano-hexapod legs has a universal joint at one end and a spherical joint at the other end. When only small stroke is required, \textbf{flexible} joints can be used: material is bend to achieve motion, rather than relying on sliding or rolling across two surfaces. @@ -1464,7 +1471,7 @@ Simulations will help determine the required rotational stroke of the flexible j \end{important} \subsubsection*{Conclusion} -\label{sec:org87f9c44} +\label{sec:orgb0519fa} \begin{important} Relations between the geometry of the Stewart platform and its characteristics such as stiffness, maneuverability and force authority have been derived. @@ -1474,7 +1481,7 @@ The effects of flexible joints stiffness on the dynamics have been studied and r \end{important} \subsection{Flexible Elements} -\label{sec:org2d75f1c} +\label{sec:orge39b760} \label{sec:flexible_elements} The multi-body model of the micro-station as well as of the nano-hexapod are composed of solid bodies connected with springs and dampers. @@ -1497,7 +1504,7 @@ Mainly two elements will be modeled using this technique: the flexible joints an More detailed information about the modelling technique is available \href{https://tdehaeze.github.io/fem\_simscape/}{here}. \subsubsection{Flexible Piezoelectric actuators} -\label{sec:org01aeef6} +\label{sec:org4cbfe0d} In order to test this modeling technique, some tests have been performed on a flexible piezoelectric stack actuator. The APA95ML from Cedrat has been sketched into Ansys and the interface nodes chosen as shown in Figure \ref{fig:amplified_piezo_interface_nodes}. @@ -1523,7 +1530,7 @@ A payload with a mass of 10kg is then added both in the Simscape model and in An The dynamics obtained with Simscape and Ansys are very close to each other which validate the fact that we can interface the flexible element with other Simscape parts. \subsubsection{Test Bench} -\label{sec:org02b6f10} +\label{sec:orgabf59eb} A test bench is planned to validate the presented modelling technique. The DCM's fast jack test bench will be slightly modified to integrate the APA95ML actuator (already available). @@ -1533,7 +1540,7 @@ The idea is to identify the transfer functions from forces applied by the stack This test bench requires very little work and will permit to gain much confident on the modelling technique used as well as on the dynamics of amplified piezoelectric actuators. \subsubsection{Design Methodology} -\label{sec:orgfed7fe7} +\label{sec:orga754440} During all the mechanical design of the nano-hexapod, it is planned to use the presented modelling technique to ensure that no parasitic modes will be problematic for the control part. More specifically, it is wanted that both the flexible joints and the amplified piezoelectric actuators do not introduce parasitic modes in the dynamics to be controlled up to 200Hz. @@ -1541,7 +1548,7 @@ More specifically, it is wanted that both the flexible joints and the amplified This flexible modeling technique is thus a very important element during the mechanical design of the nano-hexapod. \subsection{Conclusion} -\label{sec:orgd89cfa8} +\label{sec:orgd7cb774} \begin{important} In Section \ref{sec:optimal_stiff_dist}, it has been concluded that a nano-hexapod stiffness below \(10^5-10^6\,[N/m]\) helps reducing the high frequency vibrations induced by all sources of disturbances considered. As the high frequency vibrations are the most difficult to compensate for when using feedback control, a soft hexapod will most certainly helps improving the performances. @@ -1561,7 +1568,7 @@ Finally, in section \ref{sec:nano_hexapod_architecture} some insights on the wan \end{important} \section{Robust Control Architecture} -\label{sec:org4e7e95f} +\label{sec:orga2a9ea6} \label{sec:robust_control_architecture} Before designing the control system, let's summarize what have been done: \begin{itemize} @@ -1591,7 +1598,7 @@ This part is divided in the following sections: \end{itemize} \subsection{High Authority Control / Low Authority Control Architecture} -\label{sec:orgaf0fd2a} +\label{sec:orgc7195eb} \label{sec:hac_lac} There exist many control architectures that could be used on Stewart platforms. @@ -1622,7 +1629,7 @@ The HAC-LAC architecture thus consists of two cascade controllers: \end{itemize} \subsection{Active Damping and Sensors to be included in the nano-hexapod} -\label{sec:org35ee29f} +\label{sec:org8773208} \label{sec:lac_control} Three active damping techniques could be applied for the Low Authority Control: \begin{itemize} @@ -1671,7 +1678,7 @@ Therefore, \textbf{relative motion sensors} must be integrated in the six nano-h \end{important} \subsubsection*{Effect of the Spindle's Rotation - Guaranteed Stability} -\label{sec:org805f407} +\label{sec:orgd781fc3} To see why Integral Force Feedback should not be applied to damp the nano-hexapod's modes, a simple model of a rotating positioning platform integration force sensors has been developed (described in details \href{https://tdehaeze.github.io/rotating-frame/index.html}{here}). The platform main resonance frequency is \(\omega_0\) and the rotation speed is \(\omega\). @@ -1732,7 +1739,7 @@ Coming back to the Root Locus in Figure \ref{fig:root_locus_rotation_active_damp Similar observations are made using the Simscape model of the NASS, and this shows why Direct Velocity Feedback is the most suitable active damping technique for the NASS. \subsubsection*{Relative Direct Velocity Feedback Architecture} -\label{sec:org504bc32} +\label{sec:org5adfdef} \textbf{Relative motion sensors} are included in each of the nano-hexapod's leg and a decentralized direct velocity feedback control architecture is applied (Figure \ref{fig:control_architecture_dvf}). The signals shown in Figure \ref{fig:control_architecture_dvf} are: @@ -1754,7 +1761,7 @@ The force applied in each leg being proportional to the relative velocity of the \end{figure} \subsubsection*{Dynamics and Root Locus} -\label{sec:org5267bbe} +\label{sec:org22a7f4d} The dynamics from \(\tau_i\) to \(d\mathcal{L}_i\) for three payload masses is shown in Figure \ref{fig:opt_stiff_dvf_plant}. It is shown that for all the payload masses, the dynamics shows an alternation of poles and zeros which makes the direct velocity feedback loop robust. @@ -1779,7 +1786,7 @@ The DVF gain is here chosen in such a way that the suspension modes of the nano- This may not be the optimal choice as will be further explained. \subsubsection*{Effect of Active Damping on the Sensibility to Disturbances} -\label{sec:orge4fe185} +\label{sec:org6f0a00a} One objective of the active damping technique is to lower the sensibility to disturbances which are shown in Figure \ref{fig:opt_stiff_sensibility_dist_dvf} without active damping (solid) and with the use of DVF (dashed). The Direct Velocity Feedback control lowers the sensibility to disturbances in the vicinity of the nano-hexapod resonance but increases the sensibility at higher frequencies. @@ -1794,7 +1801,7 @@ Further optimization of the gain should then be performed. \end{figure} \subsubsection*{Effect of Active Damping on the Primary Plant Dynamics} -\label{sec:orgcff36cf} +\label{sec:org67dd97e} Another control objective for the LAC is to render the plant dynamics simpler to control for the High Authority Controller. The plant dynamics before (solid curves) and after (dashed curves) the Low Authority Control implementation are compared in Figure \ref{fig:opt_stiff_primary_plant_damped_L}. @@ -1808,7 +1815,7 @@ This will make the primary controller more robust and easier to develop. \end{figure} \subsubsection*{Conclusion} -\label{sec:org48e94ed} +\label{sec:orgd4a8731} \begin{important} It has been shown that \textbf{Direct Velocity Feedback} using \textbf{relative motion sensors} is the most adapted active damping technique to be applied to the nano-hexapod. @@ -1818,7 +1825,7 @@ Thus, further improvements and optimization will be applied to this control arch \end{important} \subsection{High Authority Control} -\label{sec:org042d463} +\label{sec:org911981a} \label{sec:hac_control} The High Authority Controller objective is to stabilize the position of the sample with respect to the granite. @@ -1827,7 +1834,7 @@ It might be the most important element of the control architecture as it acts di Its proper design will most likely determine the performance of the system. \subsubsection*{Control in the Task space or in the Leg Space?} -\label{sec:org31bdfd7} +\label{sec:orga92c9c2} Let's consider the two HAC-LAC control architectures shown in Figures \ref{fig:control_architecture_hac_dvf_pos_X} and \ref{fig:control_architecture_hac_dvf_pos_L} where an outer control loop is added to the already damped plant. \begin{important} @@ -1920,7 +1927,7 @@ Both control architecture have been applied and the control in the \textbf{leg s An alternative that could increase the control performance and robustness would be to design the full multi-input multi-outputs controller \(\bm{K}\) in one step using optimal and robust control synthesis techniques such as the \(\mathcal{H}_\infty\) loop shaping. \subsubsection*{Plant Dynamics in the leg space} -\label{sec:org93db848} +\label{sec:org3a12b13} The plant dynamics from \(\tau_i\) to \(\epsilon_{\mathcal{L}_i}\) for each of the six legs and for the three payload's masses is shown in Figure \ref{fig:opt_stiff_primary_plant_L}. The dynamical spread is kept reasonably small thanks to both the optimal nano-hexapod design and the Low Authority Controller. @@ -1932,7 +1939,7 @@ The dynamical spread is kept reasonably small thanks to both the optimal nano-he \subsubsection*{Controller Design} -\label{sec:orgf853657} +\label{sec:orgac76515} The diagonal controller \(\bm{K}_\mathcal{L}\) is then tuned in such a way that the control bandwidth is around 100Hz and such that enough stability margins are obtained for all the payload's masses. The obtained loop gain is shown in Figure \ref{fig:opt_stiff_primary_loop_gain_L}. @@ -1943,7 +1950,7 @@ The obtained loop gain is shown in Figure \ref{fig:opt_stiff_primary_loop_gain_L \end{figure} \subsubsection*{Noise Budgeting} -\label{sec:org19fb220} +\label{sec:org19610d1} The sensibility to disturbance after the use of HAC-LAC control is shown in Figure \ref{fig:opt_stiff_primary_control_L_senbility_dist}. The change of sensibility is very typical for feedback system: \begin{itemize} @@ -1960,17 +1967,17 @@ The large increase at around 250Hz when using a mass of either 1kg or 10kg is pr \end{figure} \subsection{Simulation of Tomography Experiments} -\label{sec:org9722498} +\label{sec:org6e797e1} \label{sec:tomography_experiment} \subsubsection*{Simulation Setup} -\label{sec:org8fe966b} +\label{sec:org23c7366} A simulation of a tomography is performed with the optimal nano-hexapod and the HAC-LAC architecture implemented. The results of this simulation are compared to the simulation performed in Section \ref{sec:micro_station_simulation} without the nano-hexapod. All the disturbances are included such as ground motion, spindle and translation stage vibrations. \subsubsection*{Frequency Analysis} -\label{sec:org4352ca6} +\label{sec:orgf14c82a} The Power Spectral Density of the sample's position error is plotted in Figure \ref{fig:opt_stiff_hac_dvf_L_psd_disp_error} and the Cumulative Amplitude Spectrum is shown in Figure \ref{fig:opt_stiff_hac_dvf_L_cas_disp_error}. The top three plots corresponds to the X, Y and Z translations and the bottom three plots corresponds to the X,Y and Z rotations. @@ -2005,7 +2012,7 @@ This increase in rotation is still very small and is not foreseen to be a proble \end{figure} \subsubsection*{Time Domain Analysis} -\label{sec:orgcfaaecf} +\label{sec:org2df1ec2} The time domain sample's vibrations are shown in Figure \ref{fig:opt_stiff_hac_dvf_L_pos_error}. The use of the nano-hexapod combined with the HAC-LAC architecture is shown to considerably reduce the sample's vibrations. @@ -2024,7 +2031,7 @@ An animation of the experiment is shown in Figure \ref{fig:closed_loop_sim_zoom} \end{figure} \subsection{Simulation of More Complex Experiments} -\label{sec:orgf3f0eac} +\label{sec:org82dbff1} \label{sec:more_simulations} Two additional simulations of experiments are performed: \begin{itemize} @@ -2041,7 +2048,7 @@ For both simulations, the following values are saved during the simulation: \end{itemize} \subsubsection*{Position offset introduced by the Micro-Hexapod} -\label{sec:org23a9a51} +\label{sec:orge627330} Let's consider that the micro-hexapod introduces a 10mm offset on the sample's position such that the X-ray is focus on an interesting part of the sample. The sample's mass is 1kg and the spindle's rotation speed is 60rpm. @@ -2085,7 +2092,7 @@ The root mean square value of the x-y-z error motions is around \(30\,nm\) which \end{figure} \subsubsection*{Simultaneous Translation Scans and Spindle's rotation} -\label{sec:org2aa470e} +\label{sec:org8e9ba6b} In this simulation: \begin{itemize} \item the sample has a mass of 1kg @@ -2128,7 +2135,7 @@ The RMS value of the x-y-z position error is again \(\approx 30\,nm\). \end{figure} \subsubsection*{Conclusion} -\label{sec:org85c3f00} +\label{sec:orgc56ad7f} \begin{important} These two simulations of more complex experiments shows the robustness of the developed system. @@ -2138,7 +2145,7 @@ The required actuator stroke is shown to be around \(\pm 5\,\mu m\) to compensat \end{important} \subsection{Conclusion} -\label{sec:org50f64f7} +\label{sec:org388e6ea} \begin{important} The High Authority Control / Low Authority Control architecture has been implemented in the multi-body model of the NASS. @@ -2162,7 +2169,7 @@ Further optimization of the control architecture are foreseen to give better per \end{important} \section{General Conclusion and Further notes} -\label{sec:orgbb78c6c} +\label{sec:orgf60c211} \label{sec:conclusion_and_further_notes} A summary of the nano-hexapod specifications is given in Section \ref{sec:nano_hexapod_specifications}. @@ -2176,12 +2183,12 @@ If ground motion is found to be the limiting factor, soft mounts can be used for Finally, some notes about the Micro-Station are drawn in Section \ref{sec:micro-station}. \subsection{Nano-Hexapod Specifications} -\label{sec:org97e2594} +\label{sec:orgf3ab9ab} \label{sec:nano_hexapod_specifications} In this section are gathered all the specifications related to the nano-hexapod. \subsubsection*{Dimensions} -\label{sec:orgddd9eea} +\label{sec:org94f8f39} The wanted dimension of the nano-hexapod are shown in Figure \ref{fig:nano_hexapod_size}: \begin{itemize} \item Diameter of the bottom platform: 300mm @@ -2198,7 +2205,7 @@ The limiting height might be quite problematic for the integration of the flexib \end{figure} \subsubsection*{Flexible Joints} -\label{sec:org705a745} +\label{sec:org0f3af93} Flexible joints are located at each end of the six struts. These flexible joints should have the following properties: \begin{itemize} @@ -2212,13 +2219,13 @@ It is however simple to do so as the angular motion of each joint can easily be Typical angular stroke for such flexible joints is expected. \subsubsection*{Strut Stiffness} -\label{sec:orge3ab204} +\label{sec:org31012fb} The axial stiffness of the struts (between two flexible joints) should be equal to \(\approx 10^5 - 10^6\,[N/m]\). If voice coils are used, this corresponds to the axial stiffness of the membrane guiding the moving part of the voice coil. \subsubsection*{Actuator Force} -\label{sec:org58a08be} +\label{sec:orga3ef618} Based on simulations: \begin{itemize} \item Continuous Force: \(\pm 5\,[N]\) (due to centrifugal forces) @@ -2228,7 +2235,7 @@ Based on simulations: If static deflection is to be compensated by the actuator, \(\approx 100\,[N]\) of continuous force is required for each actuator. \subsubsection*{Actuator Stroke} -\label{sec:org1fd0983} +\label{sec:org52a6af9} Based on simulations, the required actuator stroke seems to be \(\pm 5\,[\mu m]\). This however does not take into account two error types that will have to be compensated by the nano-hexapod: @@ -2273,7 +2280,7 @@ Price & & & & & 2300\$ & 1400\$ & 890\$\\ \end{table} \subsubsection*{Sensors} -\label{sec:orge9d9731} +\label{sec:org8d9b90d} A relative displacement sensor must be included in each of the nano-hexapod's legs as explained in Section \ref{sec:robust_control_architecture}. The sensors must as the following properties: @@ -2322,12 +2329,12 @@ An alternative could be to use the capacitive sensors such as the very compact \ \end{figure} \subsubsection*{Architecture} -\label{sec:org881d909} +\label{sec:org4ac19de} As explained in section \ref{sec:nano_hexapod_architecture} the orientation of the legs and position of the joints are very much constrained by the limited height of the nano-hexapod. \subsection{Sensor Noise introduced by the Metrology} -\label{sec:orgc0dbb04} +\label{sec:org8c2fb80} \label{sec:sensor_noise_metrology} During all this study, the measurement of the relative position of the sample with respect to the granite was considered to be perfect, that is to say \textbf{noiseless} and with \textbf{infinite bandwidth}. @@ -2341,7 +2348,7 @@ It is then quite simple to predict what will be the effect of the sensor noise o \end{itemize} \subsection{Others Factors that may limit the performances} -\label{sec:orgfd0039e} +\label{sec:org1d585d0} \label{sec:other_factors} Many sources of noise and perturbation were not taken into account in this study: @@ -2368,7 +2375,7 @@ If heavy/stiff cables are fixed to the sample, this can: As cable forces are often the limiting factor in high precision mechatronic systems, this have to be carefully taken into account during the mechanical design of the nano-hexapod. \subsection{Static Deflection} -\label{sec:org6cbe9f9} +\label{sec:org0f6e488} \label{sec:static_deflection} Let's now consider the problem of static deflection when changing the payload. @@ -2390,7 +2397,7 @@ With a vertical nano-hexapod stiffness \(\approx 10^6\,[N/m]\), the maximum stat This will change a little bit the architecture of the nano-hexapod but this should be too small to change significantly the dynamics. \subsection{Micro Station Architecture} -\label{sec:orgf5977f3} +\label{sec:orgd617aa7} \label{sec:micro-station} The micro-station impacts the performance of the NASS mainly because of vibrations induced by its imperfect mechanics. @@ -2406,7 +2413,7 @@ Other than that, the NASS is mostly independent of the micro-station and could b Some notes about an alternative micro-station architecture are accessible \href{https://tdehaeze.github.io/nass-simscape/alternative-micro-station-architecture.html}{here}. \subsection{Using soft mounts for the Granite} -\label{sec:org0dde91c} +\label{sec:org659d678} \label{sec:soft_granite} If it is found that ground motion is what is limiting the system performances, an option is to support the granite on soft mounts. @@ -2423,7 +2430,7 @@ The suspension mode of the granite would then be in the order of few Hertz, and \end{figure} \subsection{General Conclusion} -\label{sec:org6b09d0a} +\label{sec:org3ced4ab} The main outcome of this study is a series of specifications for the nano-hexapod. These specifications seems realistic, and a detailed mechanical design of the nano-hexapod can be initiated. @@ -2433,5 +2440,7 @@ This is foreseen to give better performances and robustness. Realistic simulations of scientific experiments were carried out validating the concept. +\bibliography{ref} + \printbibliography \end{document} diff --git a/js/bootstrap.min.js b/js/bootstrap.min.js deleted file mode 100644 index c8f82e5..0000000 --- a/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.4 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/js/jquery.min.js b/js/jquery.min.js deleted file mode 100644 index 25714ed..0000000 --- a/js/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) -},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("