|
-
- <!DOCTYPE html>
- <html>
- <head>
-
- <meta charset="utf-8" />
- <meta http-equiv="X-UA-Compatible" content="chrome=1" />
-
- <meta name="apple-mobile-web-app-capable" content="yes" />
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
-
- <title>talk slides</title>
-
- <script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
-
- <!-- General and theme style sheets -->
- <link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/reveal.css">
- <link rel="stylesheet" href="http://cdn.jsdelivr.net/reveal.js/3.0.0/css/theme/simple.css" id="theme">
-
- <!-- If the query includes 'print-pdf', include the PDF print sheet -->
- <script>
- if( window.location.search.match( /print-pdf/gi ) ) {
- var link = document.createElement( 'link' );
- link.rel = 'stylesheet';
- link.type = 'text/css';
- link.href = 'http://cdn.jsdelivr.net/reveal.js/3.0.0/css/print/pdf.css';
- document.getElementsByTagName( 'head' )[0].appendChild( link );
- }
-
- </script>
-
- <!--[if lt IE 9]>
- <script src="http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/html5shiv.js"></script>
- <![endif]-->
-
- <!-- Loading the mathjax macro -->
- <!-- Load mathjax -->
- <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>
- <!-- MathJax configuration -->
- <script type="text/x-mathjax-config">
- MathJax.Hub.Config({
- tex2jax: {
- inlineMath: [ ['$','$'], ["\\(","\\)"] ],
- displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
- processEscapes: true,
- processEnvironments: true
- },
- // Center justify equations in code and markdown cells. Elsewhere
- // we use CSS to left justify single line equations in code cells.
- displayAlign: 'center',
- "HTML-CSS": {
- styles: {'.MathJax_Display': {"margin": 0}},
- linebreaks: { automatic: true }
- }
- });
- </script>
- <!-- End of mathjax configuration -->
-
- <!-- Get Font-awesome from cdn -->
- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.css">
-
- <style type="text/css">
- /*!
- *
- * Twitter Bootstrap
- *
- */
- /*!
- * Bootstrap v3.3.6 (http://getbootstrap.com)
- * Copyright 2011-2015 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
- /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
- html {
- font-family: sans-serif;
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
- }
- body {
- margin: 0;
- }
- article,
- aside,
- details,
- figcaption,
- figure,
- footer,
- header,
- hgroup,
- main,
- menu,
- nav,
- section,
- summary {
- display: block;
- }
- audio,
- canvas,
- progress,
- video {
- display: inline-block;
- vertical-align: baseline;
- }
- audio:not([controls]) {
- display: none;
- height: 0;
- }
- [hidden],
- template {
- display: none;
- }
- a {
- background-color: transparent;
- }
- a:active,
- a:hover {
- outline: 0;
- }
- abbr[title] {
- border-bottom: 1px dotted;
- }
- b,
- strong {
- font-weight: bold;
- }
- dfn {
- font-style: italic;
- }
- h1 {
- font-size: 2em;
- margin: 0.67em 0;
- }
- mark {
- background: #ff0;
- color: #000;
- }
- small {
- font-size: 80%;
- }
- sub,
- sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
- }
- sup {
- top: -0.5em;
- }
- sub {
- bottom: -0.25em;
- }
- img {
- border: 0;
- }
- svg:not(:root) {
- overflow: hidden;
- }
- figure {
- margin: 1em 40px;
- }
- hr {
- box-sizing: content-box;
- height: 0;
- }
- pre {
- overflow: auto;
- }
- code,
- kbd,
- pre,
- samp {
- font-family: monospace, monospace;
- font-size: 1em;
- }
- button,
- input,
- optgroup,
- select,
- textarea {
- color: inherit;
- font: inherit;
- margin: 0;
- }
- button {
- overflow: visible;
- }
- button,
- select {
- text-transform: none;
- }
- button,
- html input[type="button"],
- input[type="reset"],
- input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
- }
- button[disabled],
- html input[disabled] {
- cursor: default;
- }
- button::-moz-focus-inner,
- input::-moz-focus-inner {
- border: 0;
- padding: 0;
- }
- input {
- line-height: normal;
- }
- input[type="checkbox"],
- input[type="radio"] {
- box-sizing: border-box;
- padding: 0;
- }
- input[type="number"]::-webkit-inner-spin-button,
- input[type="number"]::-webkit-outer-spin-button {
- height: auto;
- }
- input[type="search"] {
- -webkit-appearance: textfield;
- box-sizing: content-box;
- }
- input[type="search"]::-webkit-search-cancel-button,
- input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
- }
- fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
- }
- legend {
- border: 0;
- padding: 0;
- }
- textarea {
- overflow: auto;
- }
- optgroup {
- font-weight: bold;
- }
- table {
- border-collapse: collapse;
- border-spacing: 0;
- }
- td,
- th {
- padding: 0;
- }
- /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
- @media print {
- *,
- *:before,
- *:after {
- background: transparent !important;
- color: #000 !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
- a,
- a:visited {
- text-decoration: underline;
- }
- a[href]:after {
- content: " (" attr(href) ")";
- }
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
- a[href^="#"]:after,
- a[href^="javascript:"]:after {
- content: "";
- }
- pre,
- blockquote {
- border: 1px solid #999;
- page-break-inside: avoid;
- }
- thead {
- display: table-header-group;
- }
- tr,
- img {
- page-break-inside: avoid;
- }
- img {
- max-width: 100% !important;
- }
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
- h2,
- h3 {
- page-break-after: avoid;
- }
- .navbar {
- display: none;
- }
- .btn > .caret,
- .dropup > .btn > .caret {
- border-top-color: #000 !important;
- }
- .label {
- border: 1px solid #000;
- }
- .table {
- border-collapse: collapse !important;
- }
- .table td,
- .table th {
- background-color: #fff !important;
- }
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
- }
- @font-face {
- font-family: 'Glyphicons Halflings';
- src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
- src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
- }
- .glyphicon {
- position: relative;
- top: 1px;
- display: inline-block;
- font-family: 'Glyphicons Halflings';
- font-style: normal;
- font-weight: normal;
- line-height: 1;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- }
- .glyphicon-asterisk:before {
- content: "\002a";
- }
- .glyphicon-plus:before {
- content: "\002b";
- }
- .glyphicon-euro:before,
- .glyphicon-eur:before {
- content: "\20ac";
- }
- .glyphicon-minus:before {
- content: "\2212";
- }
- .glyphicon-cloud:before {
- content: "\2601";
- }
- .glyphicon-envelope:before {
- content: "\2709";
- }
- .glyphicon-pencil:before {
- content: "\270f";
- }
- .glyphicon-glass:before {
- content: "\e001";
- }
- .glyphicon-music:before {
- content: "\e002";
- }
- .glyphicon-search:before {
- content: "\e003";
- }
- .glyphicon-heart:before {
- content: "\e005";
- }
- .glyphicon-star:before {
- content: "\e006";
- }
- .glyphicon-star-empty:before {
- content: "\e007";
- }
- .glyphicon-user:before {
- content: "\e008";
- }
- .glyphicon-film:before {
- content: "\e009";
- }
- .glyphicon-th-large:before {
- content: "\e010";
- }
- .glyphicon-th:before {
- content: "\e011";
- }
- .glyphicon-th-list:before {
- content: "\e012";
- }
- .glyphicon-ok:before {
- content: "\e013";
- }
- .glyphicon-remove:before {
- content: "\e014";
- }
- .glyphicon-zoom-in:before {
- content: "\e015";
- }
- .glyphicon-zoom-out:before {
- content: "\e016";
- }
- .glyphicon-off:before {
- content: "\e017";
- }
- .glyphicon-signal:before {
- content: "\e018";
- }
- .glyphicon-cog:before {
- content: "\e019";
- }
- .glyphicon-trash:before {
- content: "\e020";
- }
- .glyphicon-home:before {
- content: "\e021";
- }
- .glyphicon-file:before {
- content: "\e022";
- }
- .glyphicon-time:before {
- content: "\e023";
- }
- .glyphicon-road:before {
- content: "\e024";
- }
- .glyphicon-download-alt:before {
- content: "\e025";
- }
- .glyphicon-download:before {
- content: "\e026";
- }
- .glyphicon-upload:before {
- content: "\e027";
- }
- .glyphicon-inbox:before {
- content: "\e028";
- }
- .glyphicon-play-circle:before {
- content: "\e029";
- }
- .glyphicon-repeat:before {
- content: "\e030";
- }
- .glyphicon-refresh:before {
- content: "\e031";
- }
- .glyphicon-list-alt:before {
- content: "\e032";
- }
- .glyphicon-lock:before {
- content: "\e033";
- }
- .glyphicon-flag:before {
- content: "\e034";
- }
- .glyphicon-headphones:before {
- content: "\e035";
- }
- .glyphicon-volume-off:before {
- content: "\e036";
- }
- .glyphicon-volume-down:before {
- content: "\e037";
- }
- .glyphicon-volume-up:before {
- content: "\e038";
- }
- .glyphicon-qrcode:before {
- content: "\e039";
- }
- .glyphicon-barcode:before {
- content: "\e040";
- }
- .glyphicon-tag:before {
- content: "\e041";
- }
- .glyphicon-tags:before {
- content: "\e042";
- }
- .glyphicon-book:before {
- content: "\e043";
- }
- .glyphicon-bookmark:before {
- content: "\e044";
- }
- .glyphicon-print:before {
- content: "\e045";
- }
- .glyphicon-camera:before {
- content: "\e046";
- }
- .glyphicon-font:before {
- content: "\e047";
- }
- .glyphicon-bold:before {
- content: "\e048";
- }
- .glyphicon-italic:before {
- content: "\e049";
- }
- .glyphicon-text-height:before {
- content: "\e050";
- }
- .glyphicon-text-width:before {
- content: "\e051";
- }
- .glyphicon-align-left:before {
- content: "\e052";
- }
- .glyphicon-align-center:before {
- content: "\e053";
- }
- .glyphicon-align-right:before {
- content: "\e054";
- }
- .glyphicon-align-justify:before {
- content: "\e055";
- }
- .glyphicon-list:before {
- content: "\e056";
- }
- .glyphicon-indent-left:before {
- content: "\e057";
- }
- .glyphicon-indent-right:before {
- content: "\e058";
- }
- .glyphicon-facetime-video:before {
- content: "\e059";
- }
- .glyphicon-picture:before {
- content: "\e060";
- }
- .glyphicon-map-marker:before {
- content: "\e062";
- }
- .glyphicon-adjust:before {
- content: "\e063";
- }
- .glyphicon-tint:before {
- content: "\e064";
- }
- .glyphicon-edit:before {
- content: "\e065";
- }
- .glyphicon-share:before {
- content: "\e066";
- }
- .glyphicon-check:before {
- content: "\e067";
- }
- .glyphicon-move:before {
- content: "\e068";
- }
- .glyphicon-step-backward:before {
- content: "\e069";
- }
- .glyphicon-fast-backward:before {
- content: "\e070";
- }
- .glyphicon-backward:before {
- content: "\e071";
- }
- .glyphicon-play:before {
- content: "\e072";
- }
- .glyphicon-pause:before {
- content: "\e073";
- }
- .glyphicon-stop:before {
- content: "\e074";
- }
- .glyphicon-forward:before {
- content: "\e075";
- }
- .glyphicon-fast-forward:before {
- content: "\e076";
- }
- .glyphicon-step-forward:before {
- content: "\e077";
- }
- .glyphicon-eject:before {
- content: "\e078";
- }
- .glyphicon-chevron-left:before {
- content: "\e079";
- }
- .glyphicon-chevron-right:before {
- content: "\e080";
- }
- .glyphicon-plus-sign:before {
- content: "\e081";
- }
- .glyphicon-minus-sign:before {
- content: "\e082";
- }
- .glyphicon-remove-sign:before {
- content: "\e083";
- }
- .glyphicon-ok-sign:before {
- content: "\e084";
- }
- .glyphicon-question-sign:before {
- content: "\e085";
- }
- .glyphicon-info-sign:before {
- content: "\e086";
- }
- .glyphicon-screenshot:before {
- content: "\e087";
- }
- .glyphicon-remove-circle:before {
- content: "\e088";
- }
- .glyphicon-ok-circle:before {
- content: "\e089";
- }
- .glyphicon-ban-circle:before {
- content: "\e090";
- }
- .glyphicon-arrow-left:before {
- content: "\e091";
- }
- .glyphicon-arrow-right:before {
- content: "\e092";
- }
- .glyphicon-arrow-up:before {
- content: "\e093";
- }
- .glyphicon-arrow-down:before {
- content: "\e094";
- }
- .glyphicon-share-alt:before {
- content: "\e095";
- }
- .glyphicon-resize-full:before {
- content: "\e096";
- }
- .glyphicon-resize-small:before {
- content: "\e097";
- }
- .glyphicon-exclamation-sign:before {
- content: "\e101";
- }
- .glyphicon-gift:before {
- content: "\e102";
- }
- .glyphicon-leaf:before {
- content: "\e103";
- }
- .glyphicon-fire:before {
- content: "\e104";
- }
- .glyphicon-eye-open:before {
- content: "\e105";
- }
- .glyphicon-eye-close:before {
- content: "\e106";
- }
- .glyphicon-warning-sign:before {
- content: "\e107";
- }
- .glyphicon-plane:before {
- content: "\e108";
- }
- .glyphicon-calendar:before {
- content: "\e109";
- }
- .glyphicon-random:before {
- content: "\e110";
- }
- .glyphicon-comment:before {
- content: "\e111";
- }
- .glyphicon-magnet:before {
- content: "\e112";
- }
- .glyphicon-chevron-up:before {
- content: "\e113";
- }
- .glyphicon-chevron-down:before {
- content: "\e114";
- }
- .glyphicon-retweet:before {
- content: "\e115";
- }
- .glyphicon-shopping-cart:before {
- content: "\e116";
- }
- .glyphicon-folder-close:before {
- content: "\e117";
- }
- .glyphicon-folder-open:before {
- content: "\e118";
- }
- .glyphicon-resize-vertical:before {
- content: "\e119";
- }
- .glyphicon-resize-horizontal:before {
- content: "\e120";
- }
- .glyphicon-hdd:before {
- content: "\e121";
- }
- .glyphicon-bullhorn:before {
- content: "\e122";
- }
- .glyphicon-bell:before {
- content: "\e123";
- }
- .glyphicon-certificate:before {
- content: "\e124";
- }
- .glyphicon-thumbs-up:before {
- content: "\e125";
- }
- .glyphicon-thumbs-down:before {
- content: "\e126";
- }
- .glyphicon-hand-right:before {
- content: "\e127";
- }
- .glyphicon-hand-left:before {
- content: "\e128";
- }
- .glyphicon-hand-up:before {
- content: "\e129";
- }
- .glyphicon-hand-down:before {
- content: "\e130";
- }
- .glyphicon-circle-arrow-right:before {
- content: "\e131";
- }
- .glyphicon-circle-arrow-left:before {
- content: "\e132";
- }
- .glyphicon-circle-arrow-up:before {
- content: "\e133";
- }
- .glyphicon-circle-arrow-down:before {
- content: "\e134";
- }
- .glyphicon-globe:before {
- content: "\e135";
- }
- .glyphicon-wrench:before {
- content: "\e136";
- }
- .glyphicon-tasks:before {
- content: "\e137";
- }
- .glyphicon-filter:before {
- content: "\e138";
- }
- .glyphicon-briefcase:before {
- content: "\e139";
- }
- .glyphicon-fullscreen:before {
- content: "\e140";
- }
- .glyphicon-dashboard:before {
- content: "\e141";
- }
- .glyphicon-paperclip:before {
- content: "\e142";
- }
- .glyphicon-heart-empty:before {
- content: "\e143";
- }
- .glyphicon-link:before {
- content: "\e144";
- }
- .glyphicon-phone:before {
- content: "\e145";
- }
- .glyphicon-pushpin:before {
- content: "\e146";
- }
- .glyphicon-usd:before {
- content: "\e148";
- }
- .glyphicon-gbp:before {
- content: "\e149";
- }
- .glyphicon-sort:before {
- content: "\e150";
- }
- .glyphicon-sort-by-alphabet:before {
- content: "\e151";
- }
- .glyphicon-sort-by-alphabet-alt:before {
- content: "\e152";
- }
- .glyphicon-sort-by-order:before {
- content: "\e153";
- }
- .glyphicon-sort-by-order-alt:before {
- content: "\e154";
- }
- .glyphicon-sort-by-attributes:before {
- content: "\e155";
- }
- .glyphicon-sort-by-attributes-alt:before {
- content: "\e156";
- }
- .glyphicon-unchecked:before {
- content: "\e157";
- }
- .glyphicon-expand:before {
- content: "\e158";
- }
- .glyphicon-collapse-down:before {
- content: "\e159";
- }
- .glyphicon-collapse-up:before {
- content: "\e160";
- }
- .glyphicon-log-in:before {
- content: "\e161";
- }
- .glyphicon-flash:before {
- content: "\e162";
- }
- .glyphicon-log-out:before {
- content: "\e163";
- }
- .glyphicon-new-window:before {
- content: "\e164";
- }
- .glyphicon-record:before {
- content: "\e165";
- }
- .glyphicon-save:before {
- content: "\e166";
- }
- .glyphicon-open:before {
- content: "\e167";
- }
- .glyphicon-saved:before {
- content: "\e168";
- }
- .glyphicon-import:before {
- content: "\e169";
- }
- .glyphicon-export:before {
- content: "\e170";
- }
- .glyphicon-send:before {
- content: "\e171";
- }
- .glyphicon-floppy-disk:before {
- content: "\e172";
- }
- .glyphicon-floppy-saved:before {
- content: "\e173";
- }
- .glyphicon-floppy-remove:before {
- content: "\e174";
- }
- .glyphicon-floppy-save:before {
- content: "\e175";
- }
- .glyphicon-floppy-open:before {
- content: "\e176";
- }
- .glyphicon-credit-card:before {
- content: "\e177";
- }
- .glyphicon-transfer:before {
- content: "\e178";
- }
- .glyphicon-cutlery:before {
- content: "\e179";
- }
- .glyphicon-header:before {
- content: "\e180";
- }
- .glyphicon-compressed:before {
- content: "\e181";
- }
- .glyphicon-earphone:before {
- content: "\e182";
- }
- .glyphicon-phone-alt:before {
- content: "\e183";
- }
- .glyphicon-tower:before {
- content: "\e184";
- }
- .glyphicon-stats:before {
- content: "\e185";
- }
- .glyphicon-sd-video:before {
- content: "\e186";
- }
- .glyphicon-hd-video:before {
- content: "\e187";
- }
- .glyphicon-subtitles:before {
- content: "\e188";
- }
- .glyphicon-sound-stereo:before {
- content: "\e189";
- }
- .glyphicon-sound-dolby:before {
- content: "\e190";
- }
- .glyphicon-sound-5-1:before {
- content: "\e191";
- }
- .glyphicon-sound-6-1:before {
- content: "\e192";
- }
- .glyphicon-sound-7-1:before {
- content: "\e193";
- }
- .glyphicon-copyright-mark:before {
- content: "\e194";
- }
- .glyphicon-registration-mark:before {
- content: "\e195";
- }
- .glyphicon-cloud-download:before {
- content: "\e197";
- }
- .glyphicon-cloud-upload:before {
- content: "\e198";
- }
- .glyphicon-tree-conifer:before {
- content: "\e199";
- }
- .glyphicon-tree-deciduous:before {
- content: "\e200";
- }
- .glyphicon-cd:before {
- content: "\e201";
- }
- .glyphicon-save-file:before {
- content: "\e202";
- }
- .glyphicon-open-file:before {
- content: "\e203";
- }
- .glyphicon-level-up:before {
- content: "\e204";
- }
- .glyphicon-copy:before {
- content: "\e205";
- }
- .glyphicon-paste:before {
- content: "\e206";
- }
- .glyphicon-alert:before {
- content: "\e209";
- }
- .glyphicon-equalizer:before {
- content: "\e210";
- }
- .glyphicon-king:before {
- content: "\e211";
- }
- .glyphicon-queen:before {
- content: "\e212";
- }
- .glyphicon-pawn:before {
- content: "\e213";
- }
- .glyphicon-bishop:before {
- content: "\e214";
- }
- .glyphicon-knight:before {
- content: "\e215";
- }
- .glyphicon-baby-formula:before {
- content: "\e216";
- }
- .glyphicon-tent:before {
- content: "\26fa";
- }
- .glyphicon-blackboard:before {
- content: "\e218";
- }
- .glyphicon-bed:before {
- content: "\e219";
- }
- .glyphicon-apple:before {
- content: "\f8ff";
- }
- .glyphicon-erase:before {
- content: "\e221";
- }
- .glyphicon-hourglass:before {
- content: "\231b";
- }
- .glyphicon-lamp:before {
- content: "\e223";
- }
- .glyphicon-duplicate:before {
- content: "\e224";
- }
- .glyphicon-piggy-bank:before {
- content: "\e225";
- }
- .glyphicon-scissors:before {
- content: "\e226";
- }
- .glyphicon-bitcoin:before {
- content: "\e227";
- }
- .glyphicon-btc:before {
- content: "\e227";
- }
- .glyphicon-xbt:before {
- content: "\e227";
- }
- .glyphicon-yen:before {
- content: "\00a5";
- }
- .glyphicon-jpy:before {
- content: "\00a5";
- }
- .glyphicon-ruble:before {
- content: "\20bd";
- }
- .glyphicon-rub:before {
- content: "\20bd";
- }
- .glyphicon-scale:before {
- content: "\e230";
- }
- .glyphicon-ice-lolly:before {
- content: "\e231";
- }
- .glyphicon-ice-lolly-tasted:before {
- content: "\e232";
- }
- .glyphicon-education:before {
- content: "\e233";
- }
- .glyphicon-option-horizontal:before {
- content: "\e234";
- }
- .glyphicon-option-vertical:before {
- content: "\e235";
- }
- .glyphicon-menu-hamburger:before {
- content: "\e236";
- }
- .glyphicon-modal-window:before {
- content: "\e237";
- }
- .glyphicon-oil:before {
- content: "\e238";
- }
- .glyphicon-grain:before {
- content: "\e239";
- }
- .glyphicon-sunglasses:before {
- content: "\e240";
- }
- .glyphicon-text-size:before {
- content: "\e241";
- }
- .glyphicon-text-color:before {
- content: "\e242";
- }
- .glyphicon-text-background:before {
- content: "\e243";
- }
- .glyphicon-object-align-top:before {
- content: "\e244";
- }
- .glyphicon-object-align-bottom:before {
- content: "\e245";
- }
- .glyphicon-object-align-horizontal:before {
- content: "\e246";
- }
- .glyphicon-object-align-left:before {
- content: "\e247";
- }
- .glyphicon-object-align-vertical:before {
- content: "\e248";
- }
- .glyphicon-object-align-right:before {
- content: "\e249";
- }
- .glyphicon-triangle-right:before {
- content: "\e250";
- }
- .glyphicon-triangle-left:before {
- content: "\e251";
- }
- .glyphicon-triangle-bottom:before {
- content: "\e252";
- }
- .glyphicon-triangle-top:before {
- content: "\e253";
- }
- .glyphicon-console:before {
- content: "\e254";
- }
- .glyphicon-superscript:before {
- content: "\e255";
- }
- .glyphicon-subscript:before {
- content: "\e256";
- }
- .glyphicon-menu-left:before {
- content: "\e257";
- }
- .glyphicon-menu-right:before {
- content: "\e258";
- }
- .glyphicon-menu-down:before {
- content: "\e259";
- }
- .glyphicon-menu-up:before {
- content: "\e260";
- }
- * {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- *:before,
- *:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- html {
- font-size: 10px;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- }
- body {
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-size: 13px;
- line-height: 1.42857143;
- color: #000;
- background-color: #fff;
- }
- input,
- button,
- select,
- textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
- }
- a {
- color: #337ab7;
- text-decoration: none;
- }
- a:hover,
- a:focus {
- color: #23527c;
- text-decoration: underline;
- }
- a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
- }
- figure {
- margin: 0;
- }
- img {
- vertical-align: middle;
- }
- .img-responsive,
- .thumbnail > img,
- .thumbnail a > img,
- .carousel-inner > .item > img,
- .carousel-inner > .item > a > img {
- display: block;
- max-width: 100%;
- height: auto;
- }
- .img-rounded {
- border-radius: 3px;
- }
- .img-thumbnail {
- padding: 4px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 2px;
- -webkit-transition: all 0.2s ease-in-out;
- -o-transition: all 0.2s ease-in-out;
- transition: all 0.2s ease-in-out;
- display: inline-block;
- max-width: 100%;
- height: auto;
- }
- .img-circle {
- border-radius: 50%;
- }
- hr {
- margin-top: 18px;
- margin-bottom: 18px;
- border: 0;
- border-top: 1px solid #eeeeee;
- }
- .sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- margin: -1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
- }
- .sr-only-focusable:active,
- .sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
- }
- [role="button"] {
- cursor: pointer;
- }
- h1,
- h2,
- h3,
- h4,
- h5,
- h6,
- .h1,
- .h2,
- .h3,
- .h4,
- .h5,
- .h6 {
- font-family: inherit;
- font-weight: 500;
- line-height: 1.1;
- color: inherit;
- }
- h1 small,
- h2 small,
- h3 small,
- h4 small,
- h5 small,
- h6 small,
- .h1 small,
- .h2 small,
- .h3 small,
- .h4 small,
- .h5 small,
- .h6 small,
- h1 .small,
- h2 .small,
- h3 .small,
- h4 .small,
- h5 .small,
- h6 .small,
- .h1 .small,
- .h2 .small,
- .h3 .small,
- .h4 .small,
- .h5 .small,
- .h6 .small {
- font-weight: normal;
- line-height: 1;
- color: #777777;
- }
- h1,
- .h1,
- h2,
- .h2,
- h3,
- .h3 {
- margin-top: 18px;
- margin-bottom: 9px;
- }
- h1 small,
- .h1 small,
- h2 small,
- .h2 small,
- h3 small,
- .h3 small,
- h1 .small,
- .h1 .small,
- h2 .small,
- .h2 .small,
- h3 .small,
- .h3 .small {
- font-size: 65%;
- }
- h4,
- .h4,
- h5,
- .h5,
- h6,
- .h6 {
- margin-top: 9px;
- margin-bottom: 9px;
- }
- h4 small,
- .h4 small,
- h5 small,
- .h5 small,
- h6 small,
- .h6 small,
- h4 .small,
- .h4 .small,
- h5 .small,
- .h5 .small,
- h6 .small,
- .h6 .small {
- font-size: 75%;
- }
- h1,
- .h1 {
- font-size: 33px;
- }
- h2,
- .h2 {
- font-size: 27px;
- }
- h3,
- .h3 {
- font-size: 23px;
- }
- h4,
- .h4 {
- font-size: 17px;
- }
- h5,
- .h5 {
- font-size: 13px;
- }
- h6,
- .h6 {
- font-size: 12px;
- }
- p {
- margin: 0 0 9px;
- }
- .lead {
- margin-bottom: 18px;
- font-size: 14px;
- font-weight: 300;
- line-height: 1.4;
- }
- @media (min-width: 768px) {
- .lead {
- font-size: 19.5px;
- }
- }
- small,
- .small {
- font-size: 92%;
- }
- mark,
- .mark {
- background-color: #fcf8e3;
- padding: .2em;
- }
- .text-left {
- text-align: left;
- }
- .text-right {
- text-align: right;
- }
- .text-center {
- text-align: center;
- }
- .text-justify {
- text-align: justify;
- }
- .text-nowrap {
- white-space: nowrap;
- }
- .text-lowercase {
- text-transform: lowercase;
- }
- .text-uppercase {
- text-transform: uppercase;
- }
- .text-capitalize {
- text-transform: capitalize;
- }
- .text-muted {
- color: #777777;
- }
- .text-primary {
- color: #337ab7;
- }
- a.text-primary:hover,
- a.text-primary:focus {
- color: #286090;
- }
- .text-success {
- color: #3c763d;
- }
- a.text-success:hover,
- a.text-success:focus {
- color: #2b542c;
- }
- .text-info {
- color: #31708f;
- }
- a.text-info:hover,
- a.text-info:focus {
- color: #245269;
- }
- .text-warning {
- color: #8a6d3b;
- }
- a.text-warning:hover,
- a.text-warning:focus {
- color: #66512c;
- }
- .text-danger {
- color: #a94442;
- }
- a.text-danger:hover,
- a.text-danger:focus {
- color: #843534;
- }
- .bg-primary {
- color: #fff;
- background-color: #337ab7;
- }
- a.bg-primary:hover,
- a.bg-primary:focus {
- background-color: #286090;
- }
- .bg-success {
- background-color: #dff0d8;
- }
- a.bg-success:hover,
- a.bg-success:focus {
- background-color: #c1e2b3;
- }
- .bg-info {
- background-color: #d9edf7;
- }
- a.bg-info:hover,
- a.bg-info:focus {
- background-color: #afd9ee;
- }
- .bg-warning {
- background-color: #fcf8e3;
- }
- a.bg-warning:hover,
- a.bg-warning:focus {
- background-color: #f7ecb5;
- }
- .bg-danger {
- background-color: #f2dede;
- }
- a.bg-danger:hover,
- a.bg-danger:focus {
- background-color: #e4b9b9;
- }
- .page-header {
- padding-bottom: 8px;
- margin: 36px 0 18px;
- border-bottom: 1px solid #eeeeee;
- }
- ul,
- ol {
- margin-top: 0;
- margin-bottom: 9px;
- }
- ul ul,
- ol ul,
- ul ol,
- ol ol {
- margin-bottom: 0;
- }
- .list-unstyled {
- padding-left: 0;
- list-style: none;
- }
- .list-inline {
- padding-left: 0;
- list-style: none;
- margin-left: -5px;
- }
- .list-inline > li {
- display: inline-block;
- padding-left: 5px;
- padding-right: 5px;
- }
- dl {
- margin-top: 0;
- margin-bottom: 18px;
- }
- dt,
- dd {
- line-height: 1.42857143;
- }
- dt {
- font-weight: bold;
- }
- dd {
- margin-left: 0;
- }
- @media (min-width: 541px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- clear: left;
- text-align: right;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .dl-horizontal dd {
- margin-left: 180px;
- }
- }
- abbr[title],
- abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #777777;
- }
- .initialism {
- font-size: 90%;
- text-transform: uppercase;
- }
- blockquote {
- padding: 9px 18px;
- margin: 0 0 18px;
- font-size: inherit;
- border-left: 5px solid #eeeeee;
- }
- blockquote p:last-child,
- blockquote ul:last-child,
- blockquote ol:last-child {
- margin-bottom: 0;
- }
- blockquote footer,
- blockquote small,
- blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #777777;
- }
- blockquote footer:before,
- blockquote small:before,
- blockquote .small:before {
- content: '\2014 \00A0';
- }
- .blockquote-reverse,
- blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid #eeeeee;
- border-left: 0;
- text-align: right;
- }
- .blockquote-reverse footer:before,
- blockquote.pull-right footer:before,
- .blockquote-reverse small:before,
- blockquote.pull-right small:before,
- .blockquote-reverse .small:before,
- blockquote.pull-right .small:before {
- content: '';
- }
- .blockquote-reverse footer:after,
- blockquote.pull-right footer:after,
- .blockquote-reverse small:after,
- blockquote.pull-right small:after,
- .blockquote-reverse .small:after,
- blockquote.pull-right .small:after {
- content: '\00A0 \2014';
- }
- address {
- margin-bottom: 18px;
- font-style: normal;
- line-height: 1.42857143;
- }
- code,
- kbd,
- pre,
- samp {
- font-family: monospace;
- }
- code {
- padding: 2px 4px;
- font-size: 90%;
- color: #c7254e;
- background-color: #f9f2f4;
- border-radius: 2px;
- }
- kbd {
- padding: 2px 4px;
- font-size: 90%;
- color: #888;
- background-color: transparent;
- border-radius: 1px;
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
- }
- kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: bold;
- box-shadow: none;
- }
- pre {
- display: block;
- padding: 8.5px;
- margin: 0 0 9px;
- font-size: 12px;
- line-height: 1.42857143;
- word-break: break-all;
- word-wrap: break-word;
- color: #333333;
- background-color: #f5f5f5;
- border: 1px solid #ccc;
- border-radius: 2px;
- }
- pre code {
- padding: 0;
- font-size: inherit;
- color: inherit;
- white-space: pre-wrap;
- background-color: transparent;
- border-radius: 0;
- }
- .pre-scrollable {
- max-height: 340px;
- overflow-y: scroll;
- }
- .container {
- margin-right: auto;
- margin-left: auto;
- padding-left: 0px;
- padding-right: 0px;
- }
- @media (min-width: 768px) {
- .container {
- width: 768px;
- }
- }
- @media (min-width: 992px) {
- .container {
- width: 940px;
- }
- }
- @media (min-width: 1200px) {
- .container {
- width: 1140px;
- }
- }
- .container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 0px;
- padding-right: 0px;
- }
- .row {
- margin-left: 0px;
- margin-right: 0px;
- }
- .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-left: 0px;
- padding-right: 0px;
- }
- .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
- float: left;
- }
- .col-xs-12 {
- width: 100%;
- }
- .col-xs-11 {
- width: 91.66666667%;
- }
- .col-xs-10 {
- width: 83.33333333%;
- }
- .col-xs-9 {
- width: 75%;
- }
- .col-xs-8 {
- width: 66.66666667%;
- }
- .col-xs-7 {
- width: 58.33333333%;
- }
- .col-xs-6 {
- width: 50%;
- }
- .col-xs-5 {
- width: 41.66666667%;
- }
- .col-xs-4 {
- width: 33.33333333%;
- }
- .col-xs-3 {
- width: 25%;
- }
- .col-xs-2 {
- width: 16.66666667%;
- }
- .col-xs-1 {
- width: 8.33333333%;
- }
- .col-xs-pull-12 {
- right: 100%;
- }
- .col-xs-pull-11 {
- right: 91.66666667%;
- }
- .col-xs-pull-10 {
- right: 83.33333333%;
- }
- .col-xs-pull-9 {
- right: 75%;
- }
- .col-xs-pull-8 {
- right: 66.66666667%;
- }
- .col-xs-pull-7 {
- right: 58.33333333%;
- }
- .col-xs-pull-6 {
- right: 50%;
- }
- .col-xs-pull-5 {
- right: 41.66666667%;
- }
- .col-xs-pull-4 {
- right: 33.33333333%;
- }
- .col-xs-pull-3 {
- right: 25%;
- }
- .col-xs-pull-2 {
- right: 16.66666667%;
- }
- .col-xs-pull-1 {
- right: 8.33333333%;
- }
- .col-xs-pull-0 {
- right: auto;
- }
- .col-xs-push-12 {
- left: 100%;
- }
- .col-xs-push-11 {
- left: 91.66666667%;
- }
- .col-xs-push-10 {
- left: 83.33333333%;
- }
- .col-xs-push-9 {
- left: 75%;
- }
- .col-xs-push-8 {
- left: 66.66666667%;
- }
- .col-xs-push-7 {
- left: 58.33333333%;
- }
- .col-xs-push-6 {
- left: 50%;
- }
- .col-xs-push-5 {
- left: 41.66666667%;
- }
- .col-xs-push-4 {
- left: 33.33333333%;
- }
- .col-xs-push-3 {
- left: 25%;
- }
- .col-xs-push-2 {
- left: 16.66666667%;
- }
- .col-xs-push-1 {
- left: 8.33333333%;
- }
- .col-xs-push-0 {
- left: auto;
- }
- .col-xs-offset-12 {
- margin-left: 100%;
- }
- .col-xs-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-xs-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-xs-offset-9 {
- margin-left: 75%;
- }
- .col-xs-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-xs-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-xs-offset-6 {
- margin-left: 50%;
- }
- .col-xs-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-xs-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-xs-offset-3 {
- margin-left: 25%;
- }
- .col-xs-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-xs-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-xs-offset-0 {
- margin-left: 0%;
- }
- @media (min-width: 768px) {
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
- float: left;
- }
- .col-sm-12 {
- width: 100%;
- }
- .col-sm-11 {
- width: 91.66666667%;
- }
- .col-sm-10 {
- width: 83.33333333%;
- }
- .col-sm-9 {
- width: 75%;
- }
- .col-sm-8 {
- width: 66.66666667%;
- }
- .col-sm-7 {
- width: 58.33333333%;
- }
- .col-sm-6 {
- width: 50%;
- }
- .col-sm-5 {
- width: 41.66666667%;
- }
- .col-sm-4 {
- width: 33.33333333%;
- }
- .col-sm-3 {
- width: 25%;
- }
- .col-sm-2 {
- width: 16.66666667%;
- }
- .col-sm-1 {
- width: 8.33333333%;
- }
- .col-sm-pull-12 {
- right: 100%;
- }
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
- .col-sm-pull-9 {
- right: 75%;
- }
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
- .col-sm-pull-6 {
- right: 50%;
- }
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
- .col-sm-pull-3 {
- right: 25%;
- }
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
- .col-sm-pull-0 {
- right: auto;
- }
- .col-sm-push-12 {
- left: 100%;
- }
- .col-sm-push-11 {
- left: 91.66666667%;
- }
- .col-sm-push-10 {
- left: 83.33333333%;
- }
- .col-sm-push-9 {
- left: 75%;
- }
- .col-sm-push-8 {
- left: 66.66666667%;
- }
- .col-sm-push-7 {
- left: 58.33333333%;
- }
- .col-sm-push-6 {
- left: 50%;
- }
- .col-sm-push-5 {
- left: 41.66666667%;
- }
- .col-sm-push-4 {
- left: 33.33333333%;
- }
- .col-sm-push-3 {
- left: 25%;
- }
- .col-sm-push-2 {
- left: 16.66666667%;
- }
- .col-sm-push-1 {
- left: 8.33333333%;
- }
- .col-sm-push-0 {
- left: auto;
- }
- .col-sm-offset-12 {
- margin-left: 100%;
- }
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-sm-offset-9 {
- margin-left: 75%;
- }
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-sm-offset-6 {
- margin-left: 50%;
- }
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-sm-offset-3 {
- margin-left: 25%;
- }
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-sm-offset-0 {
- margin-left: 0%;
- }
- }
- @media (min-width: 992px) {
- .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
- float: left;
- }
- .col-md-12 {
- width: 100%;
- }
- .col-md-11 {
- width: 91.66666667%;
- }
- .col-md-10 {
- width: 83.33333333%;
- }
- .col-md-9 {
- width: 75%;
- }
- .col-md-8 {
- width: 66.66666667%;
- }
- .col-md-7 {
- width: 58.33333333%;
- }
- .col-md-6 {
- width: 50%;
- }
- .col-md-5 {
- width: 41.66666667%;
- }
- .col-md-4 {
- width: 33.33333333%;
- }
- .col-md-3 {
- width: 25%;
- }
- .col-md-2 {
- width: 16.66666667%;
- }
- .col-md-1 {
- width: 8.33333333%;
- }
- .col-md-pull-12 {
- right: 100%;
- }
- .col-md-pull-11 {
- right: 91.66666667%;
- }
- .col-md-pull-10 {
- right: 83.33333333%;
- }
- .col-md-pull-9 {
- right: 75%;
- }
- .col-md-pull-8 {
- right: 66.66666667%;
- }
- .col-md-pull-7 {
- right: 58.33333333%;
- }
- .col-md-pull-6 {
- right: 50%;
- }
- .col-md-pull-5 {
- right: 41.66666667%;
- }
- .col-md-pull-4 {
- right: 33.33333333%;
- }
- .col-md-pull-3 {
- right: 25%;
- }
- .col-md-pull-2 {
- right: 16.66666667%;
- }
- .col-md-pull-1 {
- right: 8.33333333%;
- }
- .col-md-pull-0 {
- right: auto;
- }
- .col-md-push-12 {
- left: 100%;
- }
- .col-md-push-11 {
- left: 91.66666667%;
- }
- .col-md-push-10 {
- left: 83.33333333%;
- }
- .col-md-push-9 {
- left: 75%;
- }
- .col-md-push-8 {
- left: 66.66666667%;
- }
- .col-md-push-7 {
- left: 58.33333333%;
- }
- .col-md-push-6 {
- left: 50%;
- }
- .col-md-push-5 {
- left: 41.66666667%;
- }
- .col-md-push-4 {
- left: 33.33333333%;
- }
- .col-md-push-3 {
- left: 25%;
- }
- .col-md-push-2 {
- left: 16.66666667%;
- }
- .col-md-push-1 {
- left: 8.33333333%;
- }
- .col-md-push-0 {
- left: auto;
- }
- .col-md-offset-12 {
- margin-left: 100%;
- }
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-md-offset-9 {
- margin-left: 75%;
- }
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-md-offset-6 {
- margin-left: 50%;
- }
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-md-offset-3 {
- margin-left: 25%;
- }
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-md-offset-0 {
- margin-left: 0%;
- }
- }
- @media (min-width: 1200px) {
- .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
- float: left;
- }
- .col-lg-12 {
- width: 100%;
- }
- .col-lg-11 {
- width: 91.66666667%;
- }
- .col-lg-10 {
- width: 83.33333333%;
- }
- .col-lg-9 {
- width: 75%;
- }
- .col-lg-8 {
- width: 66.66666667%;
- }
- .col-lg-7 {
- width: 58.33333333%;
- }
- .col-lg-6 {
- width: 50%;
- }
- .col-lg-5 {
- width: 41.66666667%;
- }
- .col-lg-4 {
- width: 33.33333333%;
- }
- .col-lg-3 {
- width: 25%;
- }
- .col-lg-2 {
- width: 16.66666667%;
- }
- .col-lg-1 {
- width: 8.33333333%;
- }
- .col-lg-pull-12 {
- right: 100%;
- }
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
- .col-lg-pull-9 {
- right: 75%;
- }
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
- .col-lg-pull-6 {
- right: 50%;
- }
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
- .col-lg-pull-3 {
- right: 25%;
- }
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
- .col-lg-pull-0 {
- right: auto;
- }
- .col-lg-push-12 {
- left: 100%;
- }
- .col-lg-push-11 {
- left: 91.66666667%;
- }
- .col-lg-push-10 {
- left: 83.33333333%;
- }
- .col-lg-push-9 {
- left: 75%;
- }
- .col-lg-push-8 {
- left: 66.66666667%;
- }
- .col-lg-push-7 {
- left: 58.33333333%;
- }
- .col-lg-push-6 {
- left: 50%;
- }
- .col-lg-push-5 {
- left: 41.66666667%;
- }
- .col-lg-push-4 {
- left: 33.33333333%;
- }
- .col-lg-push-3 {
- left: 25%;
- }
- .col-lg-push-2 {
- left: 16.66666667%;
- }
- .col-lg-push-1 {
- left: 8.33333333%;
- }
- .col-lg-push-0 {
- left: auto;
- }
- .col-lg-offset-12 {
- margin-left: 100%;
- }
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
- .col-lg-offset-9 {
- margin-left: 75%;
- }
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
- .col-lg-offset-6 {
- margin-left: 50%;
- }
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
- .col-lg-offset-3 {
- margin-left: 25%;
- }
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
- .col-lg-offset-0 {
- margin-left: 0%;
- }
- }
- table {
- background-color: transparent;
- }
- caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #777777;
- text-align: left;
- }
- th {
- text-align: left;
- }
- .table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 18px;
- }
- .table > thead > tr > th,
- .table > tbody > tr > th,
- .table > tfoot > tr > th,
- .table > thead > tr > td,
- .table > tbody > tr > td,
- .table > tfoot > tr > td {
- padding: 8px;
- line-height: 1.42857143;
- vertical-align: top;
- border-top: 1px solid #ddd;
- }
- .table > thead > tr > th {
- vertical-align: bottom;
- border-bottom: 2px solid #ddd;
- }
- .table > caption + thead > tr:first-child > th,
- .table > colgroup + thead > tr:first-child > th,
- .table > thead:first-child > tr:first-child > th,
- .table > caption + thead > tr:first-child > td,
- .table > colgroup + thead > tr:first-child > td,
- .table > thead:first-child > tr:first-child > td {
- border-top: 0;
- }
- .table > tbody + tbody {
- border-top: 2px solid #ddd;
- }
- .table .table {
- background-color: #fff;
- }
- .table-condensed > thead > tr > th,
- .table-condensed > tbody > tr > th,
- .table-condensed > tfoot > tr > th,
- .table-condensed > thead > tr > td,
- .table-condensed > tbody > tr > td,
- .table-condensed > tfoot > tr > td {
- padding: 5px;
- }
- .table-bordered {
- border: 1px solid #ddd;
- }
- .table-bordered > thead > tr > th,
- .table-bordered > tbody > tr > th,
- .table-bordered > tfoot > tr > th,
- .table-bordered > thead > tr > td,
- .table-bordered > tbody > tr > td,
- .table-bordered > tfoot > tr > td {
- border: 1px solid #ddd;
- }
- .table-bordered > thead > tr > th,
- .table-bordered > thead > tr > td {
- border-bottom-width: 2px;
- }
- .table-striped > tbody > tr:nth-of-type(odd) {
- background-color: #f9f9f9;
- }
- .table-hover > tbody > tr:hover {
- background-color: #f5f5f5;
- }
- table col[class*="col-"] {
- position: static;
- float: none;
- display: table-column;
- }
- table td[class*="col-"],
- table th[class*="col-"] {
- position: static;
- float: none;
- display: table-cell;
- }
- .table > thead > tr > td.active,
- .table > tbody > tr > td.active,
- .table > tfoot > tr > td.active,
- .table > thead > tr > th.active,
- .table > tbody > tr > th.active,
- .table > tfoot > tr > th.active,
- .table > thead > tr.active > td,
- .table > tbody > tr.active > td,
- .table > tfoot > tr.active > td,
- .table > thead > tr.active > th,
- .table > tbody > tr.active > th,
- .table > tfoot > tr.active > th {
- background-color: #f5f5f5;
- }
- .table-hover > tbody > tr > td.active:hover,
- .table-hover > tbody > tr > th.active:hover,
- .table-hover > tbody > tr.active:hover > td,
- .table-hover > tbody > tr:hover > .active,
- .table-hover > tbody > tr.active:hover > th {
- background-color: #e8e8e8;
- }
- .table > thead > tr > td.success,
- .table > tbody > tr > td.success,
- .table > tfoot > tr > td.success,
- .table > thead > tr > th.success,
- .table > tbody > tr > th.success,
- .table > tfoot > tr > th.success,
- .table > thead > tr.success > td,
- .table > tbody > tr.success > td,
- .table > tfoot > tr.success > td,
- .table > thead > tr.success > th,
- .table > tbody > tr.success > th,
- .table > tfoot > tr.success > th {
- background-color: #dff0d8;
- }
- .table-hover > tbody > tr > td.success:hover,
- .table-hover > tbody > tr > th.success:hover,
- .table-hover > tbody > tr.success:hover > td,
- .table-hover > tbody > tr:hover > .success,
- .table-hover > tbody > tr.success:hover > th {
- background-color: #d0e9c6;
- }
- .table > thead > tr > td.info,
- .table > tbody > tr > td.info,
- .table > tfoot > tr > td.info,
- .table > thead > tr > th.info,
- .table > tbody > tr > th.info,
- .table > tfoot > tr > th.info,
- .table > thead > tr.info > td,
- .table > tbody > tr.info > td,
- .table > tfoot > tr.info > td,
- .table > thead > tr.info > th,
- .table > tbody > tr.info > th,
- .table > tfoot > tr.info > th {
- background-color: #d9edf7;
- }
- .table-hover > tbody > tr > td.info:hover,
- .table-hover > tbody > tr > th.info:hover,
- .table-hover > tbody > tr.info:hover > td,
- .table-hover > tbody > tr:hover > .info,
- .table-hover > tbody > tr.info:hover > th {
- background-color: #c4e3f3;
- }
- .table > thead > tr > td.warning,
- .table > tbody > tr > td.warning,
- .table > tfoot > tr > td.warning,
- .table > thead > tr > th.warning,
- .table > tbody > tr > th.warning,
- .table > tfoot > tr > th.warning,
- .table > thead > tr.warning > td,
- .table > tbody > tr.warning > td,
- .table > tfoot > tr.warning > td,
- .table > thead > tr.warning > th,
- .table > tbody > tr.warning > th,
- .table > tfoot > tr.warning > th {
- background-color: #fcf8e3;
- }
- .table-hover > tbody > tr > td.warning:hover,
- .table-hover > tbody > tr > th.warning:hover,
- .table-hover > tbody > tr.warning:hover > td,
- .table-hover > tbody > tr:hover > .warning,
- .table-hover > tbody > tr.warning:hover > th {
- background-color: #faf2cc;
- }
- .table > thead > tr > td.danger,
- .table > tbody > tr > td.danger,
- .table > tfoot > tr > td.danger,
- .table > thead > tr > th.danger,
- .table > tbody > tr > th.danger,
- .table > tfoot > tr > th.danger,
- .table > thead > tr.danger > td,
- .table > tbody > tr.danger > td,
- .table > tfoot > tr.danger > td,
- .table > thead > tr.danger > th,
- .table > tbody > tr.danger > th,
- .table > tfoot > tr.danger > th {
- background-color: #f2dede;
- }
- .table-hover > tbody > tr > td.danger:hover,
- .table-hover > tbody > tr > th.danger:hover,
- .table-hover > tbody > tr.danger:hover > td,
- .table-hover > tbody > tr:hover > .danger,
- .table-hover > tbody > tr.danger:hover > th {
- background-color: #ebcccc;
- }
- .table-responsive {
- overflow-x: auto;
- min-height: 0.01%;
- }
- @media screen and (max-width: 767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 13.5px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #ddd;
- }
- .table-responsive > .table {
- margin-bottom: 0;
- }
- .table-responsive > .table > thead > tr > th,
- .table-responsive > .table > tbody > tr > th,
- .table-responsive > .table > tfoot > tr > th,
- .table-responsive > .table > thead > tr > td,
- .table-responsive > .table > tbody > tr > td,
- .table-responsive > .table > tfoot > tr > td {
- white-space: nowrap;
- }
- .table-responsive > .table-bordered {
- border: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:first-child,
- .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .table-responsive > .table-bordered > thead > tr > td:first-child,
- .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .table-responsive > .table-bordered > thead > tr > th:last-child,
- .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .table-responsive > .table-bordered > thead > tr > td:last-child,
- .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .table-responsive > .table-bordered > tfoot > tr:last-child > th,
- .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .table-responsive > .table-bordered > tfoot > tr:last-child > td {
- border-bottom: 0;
- }
- }
- fieldset {
- padding: 0;
- margin: 0;
- border: 0;
- min-width: 0;
- }
- legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 18px;
- font-size: 19.5px;
- line-height: inherit;
- color: #333333;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
- }
- label {
- display: inline-block;
- max-width: 100%;
- margin-bottom: 5px;
- font-weight: bold;
- }
- input[type="search"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- input[type="radio"],
- input[type="checkbox"] {
- margin: 4px 0 0;
- margin-top: 1px \9;
- line-height: normal;
- }
- input[type="file"] {
- display: block;
- }
- input[type="range"] {
- display: block;
- width: 100%;
- }
- select[multiple],
- select[size] {
- height: auto;
- }
- input[type="file"]:focus,
- input[type="radio"]:focus,
- input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
- }
- output {
- display: block;
- padding-top: 7px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #555555;
- }
- .form-control {
- display: block;
- width: 100%;
- height: 32px;
- padding: 6px 12px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #555555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- }
- .form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- }
- .form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
- }
- .form-control:-ms-input-placeholder {
- color: #999;
- }
- .form-control::-webkit-input-placeholder {
- color: #999;
- }
- .form-control::-ms-expand {
- border: 0;
- background-color: transparent;
- }
- .form-control[disabled],
- .form-control[readonly],
- fieldset[disabled] .form-control {
- background-color: #eeeeee;
- opacity: 1;
- }
- .form-control[disabled],
- fieldset[disabled] .form-control {
- cursor: not-allowed;
- }
- textarea.form-control {
- height: auto;
- }
- input[type="search"] {
- -webkit-appearance: none;
- }
- @media screen and (-webkit-min-device-pixel-ratio: 0) {
- input[type="date"].form-control,
- input[type="time"].form-control,
- input[type="datetime-local"].form-control,
- input[type="month"].form-control {
- line-height: 32px;
- }
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm,
- .input-group-sm input[type="date"],
- .input-group-sm input[type="time"],
- .input-group-sm input[type="datetime-local"],
- .input-group-sm input[type="month"] {
- line-height: 30px;
- }
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg,
- .input-group-lg input[type="date"],
- .input-group-lg input[type="time"],
- .input-group-lg input[type="datetime-local"],
- .input-group-lg input[type="month"] {
- line-height: 45px;
- }
- }
- .form-group {
- margin-bottom: 15px;
- }
- .radio,
- .checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
- }
- .radio label,
- .checkbox label {
- min-height: 18px;
- padding-left: 20px;
- margin-bottom: 0;
- font-weight: normal;
- cursor: pointer;
- }
- .radio input[type="radio"],
- .radio-inline input[type="radio"],
- .checkbox input[type="checkbox"],
- .checkbox-inline input[type="checkbox"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
- }
- .radio + .radio,
- .checkbox + .checkbox {
- margin-top: -5px;
- }
- .radio-inline,
- .checkbox-inline {
- position: relative;
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
- }
- .radio-inline + .radio-inline,
- .checkbox-inline + .checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
- }
- input[type="radio"][disabled],
- input[type="checkbox"][disabled],
- input[type="radio"].disabled,
- input[type="checkbox"].disabled,
- fieldset[disabled] input[type="radio"],
- fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
- }
- .radio-inline.disabled,
- .checkbox-inline.disabled,
- fieldset[disabled] .radio-inline,
- fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
- }
- .radio.disabled label,
- .checkbox.disabled label,
- fieldset[disabled] .radio label,
- fieldset[disabled] .checkbox label {
- cursor: not-allowed;
- }
- .form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
- min-height: 31px;
- }
- .form-control-static.input-lg,
- .form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
- }
- .input-sm {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- select.input-sm {
- height: 30px;
- line-height: 30px;
- }
- textarea.input-sm,
- select[multiple].input-sm {
- height: auto;
- }
- .form-group-sm .form-control {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- .form-group-sm select.form-control {
- height: 30px;
- line-height: 30px;
- }
- .form-group-sm textarea.form-control,
- .form-group-sm select[multiple].form-control {
- height: auto;
- }
- .form-group-sm .form-control-static {
- height: 30px;
- min-height: 30px;
- padding: 6px 10px;
- font-size: 12px;
- line-height: 1.5;
- }
- .input-lg {
- height: 45px;
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- select.input-lg {
- height: 45px;
- line-height: 45px;
- }
- textarea.input-lg,
- select[multiple].input-lg {
- height: auto;
- }
- .form-group-lg .form-control {
- height: 45px;
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- .form-group-lg select.form-control {
- height: 45px;
- line-height: 45px;
- }
- .form-group-lg textarea.form-control,
- .form-group-lg select[multiple].form-control {
- height: auto;
- }
- .form-group-lg .form-control-static {
- height: 45px;
- min-height: 35px;
- padding: 11px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- }
- .has-feedback {
- position: relative;
- }
- .has-feedback .form-control {
- padding-right: 40px;
- }
- .form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 32px;
- height: 32px;
- line-height: 32px;
- text-align: center;
- pointer-events: none;
- }
- .input-lg + .form-control-feedback,
- .input-group-lg + .form-control-feedback,
- .form-group-lg .form-control + .form-control-feedback {
- width: 45px;
- height: 45px;
- line-height: 45px;
- }
- .input-sm + .form-control-feedback,
- .input-group-sm + .form-control-feedback,
- .form-group-sm .form-control + .form-control-feedback {
- width: 30px;
- height: 30px;
- line-height: 30px;
- }
- .has-success .help-block,
- .has-success .control-label,
- .has-success .radio,
- .has-success .checkbox,
- .has-success .radio-inline,
- .has-success .checkbox-inline,
- .has-success.radio label,
- .has-success.checkbox label,
- .has-success.radio-inline label,
- .has-success.checkbox-inline label {
- color: #3c763d;
- }
- .has-success .form-control {
- border-color: #3c763d;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .has-success .form-control:focus {
- border-color: #2b542c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
- }
- .has-success .input-group-addon {
- color: #3c763d;
- border-color: #3c763d;
- background-color: #dff0d8;
- }
- .has-success .form-control-feedback {
- color: #3c763d;
- }
- .has-warning .help-block,
- .has-warning .control-label,
- .has-warning .radio,
- .has-warning .checkbox,
- .has-warning .radio-inline,
- .has-warning .checkbox-inline,
- .has-warning.radio label,
- .has-warning.checkbox label,
- .has-warning.radio-inline label,
- .has-warning.checkbox-inline label {
- color: #8a6d3b;
- }
- .has-warning .form-control {
- border-color: #8a6d3b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .has-warning .form-control:focus {
- border-color: #66512c;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
- }
- .has-warning .input-group-addon {
- color: #8a6d3b;
- border-color: #8a6d3b;
- background-color: #fcf8e3;
- }
- .has-warning .form-control-feedback {
- color: #8a6d3b;
- }
- .has-error .help-block,
- .has-error .control-label,
- .has-error .radio,
- .has-error .checkbox,
- .has-error .radio-inline,
- .has-error .checkbox-inline,
- .has-error.radio label,
- .has-error.checkbox label,
- .has-error.radio-inline label,
- .has-error.checkbox-inline label {
- color: #a94442;
- }
- .has-error .form-control {
- border-color: #a94442;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .has-error .form-control:focus {
- border-color: #843534;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
- }
- .has-error .input-group-addon {
- color: #a94442;
- border-color: #a94442;
- background-color: #f2dede;
- }
- .has-error .form-control-feedback {
- color: #a94442;
- }
- .has-feedback label ~ .form-control-feedback {
- top: 23px;
- }
- .has-feedback label.sr-only ~ .form-control-feedback {
- top: 0;
- }
- .help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #404040;
- }
- @media (min-width: 768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .form-inline .form-control-static {
- display: inline-block;
- }
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
- .form-inline .input-group > .form-control {
- width: 100%;
- }
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
- }
- .form-horizontal .radio,
- .form-horizontal .checkbox,
- .form-horizontal .radio-inline,
- .form-horizontal .checkbox-inline {
- margin-top: 0;
- margin-bottom: 0;
- padding-top: 7px;
- }
- .form-horizontal .radio,
- .form-horizontal .checkbox {
- min-height: 25px;
- }
- .form-horizontal .form-group {
- margin-left: 0px;
- margin-right: 0px;
- }
- @media (min-width: 768px) {
- .form-horizontal .control-label {
- text-align: right;
- margin-bottom: 0;
- padding-top: 7px;
- }
- }
- .form-horizontal .has-feedback .form-control-feedback {
- right: 0px;
- }
- @media (min-width: 768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 11px;
- font-size: 17px;
- }
- }
- @media (min-width: 768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- font-size: 12px;
- }
- }
- .btn {
- display: inline-block;
- margin-bottom: 0;
- font-weight: normal;
- text-align: center;
- vertical-align: middle;
- touch-action: manipulation;
- cursor: pointer;
- background-image: none;
- border: 1px solid transparent;
- white-space: nowrap;
- padding: 6px 12px;
- font-size: 13px;
- line-height: 1.42857143;
- border-radius: 2px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- }
- .btn:focus,
- .btn:active:focus,
- .btn.active:focus,
- .btn.focus,
- .btn:active.focus,
- .btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
- }
- .btn:hover,
- .btn:focus,
- .btn.focus {
- color: #333;
- text-decoration: none;
- }
- .btn:active,
- .btn.active {
- outline: 0;
- background-image: none;
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- }
- .btn.disabled,
- .btn[disabled],
- fieldset[disabled] .btn {
- cursor: not-allowed;
- opacity: 0.65;
- filter: alpha(opacity=65);
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- a.btn.disabled,
- fieldset[disabled] a.btn {
- pointer-events: none;
- }
- .btn-default {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
- }
- .btn-default:focus,
- .btn-default.focus {
- color: #333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
- }
- .btn-default:hover {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .btn-default:active,
- .btn-default.active,
- .open > .dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .btn-default:active:hover,
- .btn-default.active:hover,
- .open > .dropdown-toggle.btn-default:hover,
- .btn-default:active:focus,
- .btn-default.active:focus,
- .open > .dropdown-toggle.btn-default:focus,
- .btn-default:active.focus,
- .btn-default.active.focus,
- .open > .dropdown-toggle.btn-default.focus {
- color: #333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
- }
- .btn-default:active,
- .btn-default.active,
- .open > .dropdown-toggle.btn-default {
- background-image: none;
- }
- .btn-default.disabled:hover,
- .btn-default[disabled]:hover,
- fieldset[disabled] .btn-default:hover,
- .btn-default.disabled:focus,
- .btn-default[disabled]:focus,
- fieldset[disabled] .btn-default:focus,
- .btn-default.disabled.focus,
- .btn-default[disabled].focus,
- fieldset[disabled] .btn-default.focus {
- background-color: #fff;
- border-color: #ccc;
- }
- .btn-default .badge {
- color: #fff;
- background-color: #333;
- }
- .btn-primary {
- color: #fff;
- background-color: #337ab7;
- border-color: #2e6da4;
- }
- .btn-primary:focus,
- .btn-primary.focus {
- color: #fff;
- background-color: #286090;
- border-color: #122b40;
- }
- .btn-primary:hover {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
- }
- .btn-primary:active,
- .btn-primary.active,
- .open > .dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
- }
- .btn-primary:active:hover,
- .btn-primary.active:hover,
- .open > .dropdown-toggle.btn-primary:hover,
- .btn-primary:active:focus,
- .btn-primary.active:focus,
- .open > .dropdown-toggle.btn-primary:focus,
- .btn-primary:active.focus,
- .btn-primary.active.focus,
- .open > .dropdown-toggle.btn-primary.focus {
- color: #fff;
- background-color: #204d74;
- border-color: #122b40;
- }
- .btn-primary:active,
- .btn-primary.active,
- .open > .dropdown-toggle.btn-primary {
- background-image: none;
- }
- .btn-primary.disabled:hover,
- .btn-primary[disabled]:hover,
- fieldset[disabled] .btn-primary:hover,
- .btn-primary.disabled:focus,
- .btn-primary[disabled]:focus,
- fieldset[disabled] .btn-primary:focus,
- .btn-primary.disabled.focus,
- .btn-primary[disabled].focus,
- fieldset[disabled] .btn-primary.focus {
- background-color: #337ab7;
- border-color: #2e6da4;
- }
- .btn-primary .badge {
- color: #337ab7;
- background-color: #fff;
- }
- .btn-success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .btn-success:focus,
- .btn-success.focus {
- color: #fff;
- background-color: #449d44;
- border-color: #255625;
- }
- .btn-success:hover {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .btn-success:active,
- .btn-success.active,
- .open > .dropdown-toggle.btn-success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .btn-success:active:hover,
- .btn-success.active:hover,
- .open > .dropdown-toggle.btn-success:hover,
- .btn-success:active:focus,
- .btn-success.active:focus,
- .open > .dropdown-toggle.btn-success:focus,
- .btn-success:active.focus,
- .btn-success.active.focus,
- .open > .dropdown-toggle.btn-success.focus {
- color: #fff;
- background-color: #398439;
- border-color: #255625;
- }
- .btn-success:active,
- .btn-success.active,
- .open > .dropdown-toggle.btn-success {
- background-image: none;
- }
- .btn-success.disabled:hover,
- .btn-success[disabled]:hover,
- fieldset[disabled] .btn-success:hover,
- .btn-success.disabled:focus,
- .btn-success[disabled]:focus,
- fieldset[disabled] .btn-success:focus,
- .btn-success.disabled.focus,
- .btn-success[disabled].focus,
- fieldset[disabled] .btn-success.focus {
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .btn-success .badge {
- color: #5cb85c;
- background-color: #fff;
- }
- .btn-info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .btn-info:focus,
- .btn-info.focus {
- color: #fff;
- background-color: #31b0d5;
- border-color: #1b6d85;
- }
- .btn-info:hover {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .btn-info:active,
- .btn-info.active,
- .open > .dropdown-toggle.btn-info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .btn-info:active:hover,
- .btn-info.active:hover,
- .open > .dropdown-toggle.btn-info:hover,
- .btn-info:active:focus,
- .btn-info.active:focus,
- .open > .dropdown-toggle.btn-info:focus,
- .btn-info:active.focus,
- .btn-info.active.focus,
- .open > .dropdown-toggle.btn-info.focus {
- color: #fff;
- background-color: #269abc;
- border-color: #1b6d85;
- }
- .btn-info:active,
- .btn-info.active,
- .open > .dropdown-toggle.btn-info {
- background-image: none;
- }
- .btn-info.disabled:hover,
- .btn-info[disabled]:hover,
- fieldset[disabled] .btn-info:hover,
- .btn-info.disabled:focus,
- .btn-info[disabled]:focus,
- fieldset[disabled] .btn-info:focus,
- .btn-info.disabled.focus,
- .btn-info[disabled].focus,
- fieldset[disabled] .btn-info.focus {
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .btn-info .badge {
- color: #5bc0de;
- background-color: #fff;
- }
- .btn-warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .btn-warning:focus,
- .btn-warning.focus {
- color: #fff;
- background-color: #ec971f;
- border-color: #985f0d;
- }
- .btn-warning:hover {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .btn-warning:active,
- .btn-warning.active,
- .open > .dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .btn-warning:active:hover,
- .btn-warning.active:hover,
- .open > .dropdown-toggle.btn-warning:hover,
- .btn-warning:active:focus,
- .btn-warning.active:focus,
- .open > .dropdown-toggle.btn-warning:focus,
- .btn-warning:active.focus,
- .btn-warning.active.focus,
- .open > .dropdown-toggle.btn-warning.focus {
- color: #fff;
- background-color: #d58512;
- border-color: #985f0d;
- }
- .btn-warning:active,
- .btn-warning.active,
- .open > .dropdown-toggle.btn-warning {
- background-image: none;
- }
- .btn-warning.disabled:hover,
- .btn-warning[disabled]:hover,
- fieldset[disabled] .btn-warning:hover,
- .btn-warning.disabled:focus,
- .btn-warning[disabled]:focus,
- fieldset[disabled] .btn-warning:focus,
- .btn-warning.disabled.focus,
- .btn-warning[disabled].focus,
- fieldset[disabled] .btn-warning.focus {
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .btn-warning .badge {
- color: #f0ad4e;
- background-color: #fff;
- }
- .btn-danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .btn-danger:focus,
- .btn-danger.focus {
- color: #fff;
- background-color: #c9302c;
- border-color: #761c19;
- }
- .btn-danger:hover {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .btn-danger:active,
- .btn-danger.active,
- .open > .dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .btn-danger:active:hover,
- .btn-danger.active:hover,
- .open > .dropdown-toggle.btn-danger:hover,
- .btn-danger:active:focus,
- .btn-danger.active:focus,
- .open > .dropdown-toggle.btn-danger:focus,
- .btn-danger:active.focus,
- .btn-danger.active.focus,
- .open > .dropdown-toggle.btn-danger.focus {
- color: #fff;
- background-color: #ac2925;
- border-color: #761c19;
- }
- .btn-danger:active,
- .btn-danger.active,
- .open > .dropdown-toggle.btn-danger {
- background-image: none;
- }
- .btn-danger.disabled:hover,
- .btn-danger[disabled]:hover,
- fieldset[disabled] .btn-danger:hover,
- .btn-danger.disabled:focus,
- .btn-danger[disabled]:focus,
- fieldset[disabled] .btn-danger:focus,
- .btn-danger.disabled.focus,
- .btn-danger[disabled].focus,
- fieldset[disabled] .btn-danger.focus {
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .btn-danger .badge {
- color: #d9534f;
- background-color: #fff;
- }
- .btn-link {
- color: #337ab7;
- font-weight: normal;
- border-radius: 0;
- }
- .btn-link,
- .btn-link:active,
- .btn-link.active,
- .btn-link[disabled],
- fieldset[disabled] .btn-link {
- background-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .btn-link,
- .btn-link:hover,
- .btn-link:focus,
- .btn-link:active {
- border-color: transparent;
- }
- .btn-link:hover,
- .btn-link:focus {
- color: #23527c;
- text-decoration: underline;
- background-color: transparent;
- }
- .btn-link[disabled]:hover,
- fieldset[disabled] .btn-link:hover,
- .btn-link[disabled]:focus,
- fieldset[disabled] .btn-link:focus {
- color: #777777;
- text-decoration: none;
- }
- .btn-lg,
- .btn-group-lg > .btn {
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- .btn-sm,
- .btn-group-sm > .btn {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- .btn-xs,
- .btn-group-xs > .btn {
- padding: 1px 5px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- .btn-block {
- display: block;
- width: 100%;
- }
- .btn-block + .btn-block {
- margin-top: 5px;
- }
- input[type="submit"].btn-block,
- input[type="reset"].btn-block,
- input[type="button"].btn-block {
- width: 100%;
- }
- .fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- -o-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear;
- }
- .fade.in {
- opacity: 1;
- }
- .collapse {
- display: none;
- }
- .collapse.in {
- display: block;
- }
- tr.collapse.in {
- display: table-row;
- }
- tbody.collapse.in {
- display: table-row-group;
- }
- .collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-property: height, visibility;
- transition-property: height, visibility;
- -webkit-transition-duration: 0.35s;
- transition-duration: 0.35s;
- -webkit-transition-timing-function: ease;
- transition-timing-function: ease;
- }
- .caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px dashed;
- border-top: 4px solid \9;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
- }
- .dropup,
- .dropdown {
- position: relative;
- }
- .dropdown-toggle:focus {
- outline: 0;
- }
- .dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 160px;
- padding: 5px 0;
- margin: 2px 0 0;
- list-style: none;
- font-size: 13px;
- text-align: left;
- background-color: #fff;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 2px;
- -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
- background-clip: padding-box;
- }
- .dropdown-menu.pull-right {
- right: 0;
- left: auto;
- }
- .dropdown-menu .divider {
- height: 1px;
- margin: 8px 0;
- overflow: hidden;
- background-color: #e5e5e5;
- }
- .dropdown-menu > li > a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #333333;
- white-space: nowrap;
- }
- .dropdown-menu > li > a:hover,
- .dropdown-menu > li > a:focus {
- text-decoration: none;
- color: #262626;
- background-color: #f5f5f5;
- }
- .dropdown-menu > .active > a,
- .dropdown-menu > .active > a:hover,
- .dropdown-menu > .active > a:focus {
- color: #fff;
- text-decoration: none;
- outline: 0;
- background-color: #337ab7;
- }
- .dropdown-menu > .disabled > a,
- .dropdown-menu > .disabled > a:hover,
- .dropdown-menu > .disabled > a:focus {
- color: #777777;
- }
- .dropdown-menu > .disabled > a:hover,
- .dropdown-menu > .disabled > a:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- cursor: not-allowed;
- }
- .open > .dropdown-menu {
- display: block;
- }
- .open > a {
- outline: 0;
- }
- .dropdown-menu-right {
- left: auto;
- right: 0;
- }
- .dropdown-menu-left {
- left: 0;
- right: auto;
- }
- .dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 12px;
- line-height: 1.42857143;
- color: #777777;
- white-space: nowrap;
- }
- .dropdown-backdrop {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- z-index: 990;
- }
- .pull-right > .dropdown-menu {
- right: 0;
- left: auto;
- }
- .dropup .caret,
- .navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px dashed;
- border-bottom: 4px solid \9;
- content: "";
- }
- .dropup .dropdown-menu,
- .navbar-fixed-bottom .dropdown .dropdown-menu {
- top: auto;
- bottom: 100%;
- margin-bottom: 2px;
- }
- @media (min-width: 541px) {
- .navbar-right .dropdown-menu {
- left: auto;
- right: 0;
- }
- .navbar-right .dropdown-menu-left {
- left: 0;
- right: auto;
- }
- }
- .btn-group,
- .btn-group-vertical {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- }
- .btn-group > .btn,
- .btn-group-vertical > .btn {
- position: relative;
- float: left;
- }
- .btn-group > .btn:hover,
- .btn-group-vertical > .btn:hover,
- .btn-group > .btn:focus,
- .btn-group-vertical > .btn:focus,
- .btn-group > .btn:active,
- .btn-group-vertical > .btn:active,
- .btn-group > .btn.active,
- .btn-group-vertical > .btn.active {
- z-index: 2;
- }
- .btn-group .btn + .btn,
- .btn-group .btn + .btn-group,
- .btn-group .btn-group + .btn,
- .btn-group .btn-group + .btn-group {
- margin-left: -1px;
- }
- .btn-toolbar {
- margin-left: -5px;
- }
- .btn-toolbar .btn,
- .btn-toolbar .btn-group,
- .btn-toolbar .input-group {
- float: left;
- }
- .btn-toolbar > .btn,
- .btn-toolbar > .btn-group,
- .btn-toolbar > .input-group {
- margin-left: 5px;
- }
- .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
- border-radius: 0;
- }
- .btn-group > .btn:first-child {
- margin-left: 0;
- }
- .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- }
- .btn-group > .btn:last-child:not(:first-child),
- .btn-group > .dropdown-toggle:not(:first-child) {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- }
- .btn-group > .btn-group {
- float: left;
- }
- .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
- }
- .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
- .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- }
- .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- }
- .btn-group .dropdown-toggle:active,
- .btn-group.open .dropdown-toggle {
- outline: 0;
- }
- .btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
- }
- .btn-group > .btn-lg + .dropdown-toggle {
- padding-left: 12px;
- padding-right: 12px;
- }
- .btn-group.open .dropdown-toggle {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- }
- .btn-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- .btn .caret {
- margin-left: 0;
- }
- .btn-lg .caret {
- border-width: 5px 5px 0;
- border-bottom-width: 0;
- }
- .dropup .btn-lg .caret {
- border-width: 0 5px 5px;
- }
- .btn-group-vertical > .btn,
- .btn-group-vertical > .btn-group,
- .btn-group-vertical > .btn-group > .btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
- }
- .btn-group-vertical > .btn-group > .btn {
- float: none;
- }
- .btn-group-vertical > .btn + .btn,
- .btn-group-vertical > .btn + .btn-group,
- .btn-group-vertical > .btn-group + .btn,
- .btn-group-vertical > .btn-group + .btn-group {
- margin-top: -1px;
- margin-left: 0;
- }
- .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
- border-radius: 0;
- }
- .btn-group-vertical > .btn:first-child:not(:last-child) {
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- }
- .btn-group-vertical > .btn:last-child:not(:first-child) {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
- }
- .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
- border-radius: 0;
- }
- .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
- .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- }
- .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
- }
- .btn-group-justified > .btn,
- .btn-group-justified > .btn-group {
- float: none;
- display: table-cell;
- width: 1%;
- }
- .btn-group-justified > .btn-group .btn {
- width: 100%;
- }
- .btn-group-justified > .btn-group .dropdown-menu {
- left: auto;
- }
- [data-toggle="buttons"] > .btn input[type="radio"],
- [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
- [data-toggle="buttons"] > .btn input[type="checkbox"],
- [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
- }
- .input-group {
- position: relative;
- display: table;
- border-collapse: separate;
- }
- .input-group[class*="col-"] {
- float: none;
- padding-left: 0;
- padding-right: 0;
- }
- .input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
- }
- .input-group .form-control:focus {
- z-index: 3;
- }
- .input-group-lg > .form-control,
- .input-group-lg > .input-group-addon,
- .input-group-lg > .input-group-btn > .btn {
- height: 45px;
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- border-radius: 3px;
- }
- select.input-group-lg > .form-control,
- select.input-group-lg > .input-group-addon,
- select.input-group-lg > .input-group-btn > .btn {
- height: 45px;
- line-height: 45px;
- }
- textarea.input-group-lg > .form-control,
- textarea.input-group-lg > .input-group-addon,
- textarea.input-group-lg > .input-group-btn > .btn,
- select[multiple].input-group-lg > .form-control,
- select[multiple].input-group-lg > .input-group-addon,
- select[multiple].input-group-lg > .input-group-btn > .btn {
- height: auto;
- }
- .input-group-sm > .form-control,
- .input-group-sm > .input-group-addon,
- .input-group-sm > .input-group-btn > .btn {
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- }
- select.input-group-sm > .form-control,
- select.input-group-sm > .input-group-addon,
- select.input-group-sm > .input-group-btn > .btn {
- height: 30px;
- line-height: 30px;
- }
- textarea.input-group-sm > .form-control,
- textarea.input-group-sm > .input-group-addon,
- textarea.input-group-sm > .input-group-btn > .btn,
- select[multiple].input-group-sm > .form-control,
- select[multiple].input-group-sm > .input-group-addon,
- select[multiple].input-group-sm > .input-group-btn > .btn {
- height: auto;
- }
- .input-group-addon,
- .input-group-btn,
- .input-group .form-control {
- display: table-cell;
- }
- .input-group-addon:not(:first-child):not(:last-child),
- .input-group-btn:not(:first-child):not(:last-child),
- .input-group .form-control:not(:first-child):not(:last-child) {
- border-radius: 0;
- }
- .input-group-addon,
- .input-group-btn {
- width: 1%;
- white-space: nowrap;
- vertical-align: middle;
- }
- .input-group-addon {
- padding: 6px 12px;
- font-size: 13px;
- font-weight: normal;
- line-height: 1;
- color: #555555;
- text-align: center;
- background-color: #eeeeee;
- border: 1px solid #ccc;
- border-radius: 2px;
- }
- .input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 12px;
- border-radius: 1px;
- }
- .input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 17px;
- border-radius: 3px;
- }
- .input-group-addon input[type="radio"],
- .input-group-addon input[type="checkbox"] {
- margin-top: 0;
- }
- .input-group .form-control:first-child,
- .input-group-addon:first-child,
- .input-group-btn:first-child > .btn,
- .input-group-btn:first-child > .btn-group > .btn,
- .input-group-btn:first-child > .dropdown-toggle,
- .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
- .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
- border-bottom-right-radius: 0;
- border-top-right-radius: 0;
- }
- .input-group-addon:first-child {
- border-right: 0;
- }
- .input-group .form-control:last-child,
- .input-group-addon:last-child,
- .input-group-btn:last-child > .btn,
- .input-group-btn:last-child > .btn-group > .btn,
- .input-group-btn:last-child > .dropdown-toggle,
- .input-group-btn:first-child > .btn:not(:first-child),
- .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
- }
- .input-group-addon:last-child {
- border-left: 0;
- }
- .input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
- }
- .input-group-btn > .btn {
- position: relative;
- }
- .input-group-btn > .btn + .btn {
- margin-left: -1px;
- }
- .input-group-btn > .btn:hover,
- .input-group-btn > .btn:focus,
- .input-group-btn > .btn:active {
- z-index: 2;
- }
- .input-group-btn:first-child > .btn,
- .input-group-btn:first-child > .btn-group {
- margin-right: -1px;
- }
- .input-group-btn:last-child > .btn,
- .input-group-btn:last-child > .btn-group {
- z-index: 2;
- margin-left: -1px;
- }
- .nav {
- margin-bottom: 0;
- padding-left: 0;
- list-style: none;
- }
- .nav > li {
- position: relative;
- display: block;
- }
- .nav > li > a {
- position: relative;
- display: block;
- padding: 10px 15px;
- }
- .nav > li > a:hover,
- .nav > li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
- }
- .nav > li.disabled > a {
- color: #777777;
- }
- .nav > li.disabled > a:hover,
- .nav > li.disabled > a:focus {
- color: #777777;
- text-decoration: none;
- background-color: transparent;
- cursor: not-allowed;
- }
- .nav .open > a,
- .nav .open > a:hover,
- .nav .open > a:focus {
- background-color: #eeeeee;
- border-color: #337ab7;
- }
- .nav .nav-divider {
- height: 1px;
- margin: 8px 0;
- overflow: hidden;
- background-color: #e5e5e5;
- }
- .nav > li > a > img {
- max-width: none;
- }
- .nav-tabs {
- border-bottom: 1px solid #ddd;
- }
- .nav-tabs > li {
- float: left;
- margin-bottom: -1px;
- }
- .nav-tabs > li > a {
- margin-right: 2px;
- line-height: 1.42857143;
- border: 1px solid transparent;
- border-radius: 2px 2px 0 0;
- }
- .nav-tabs > li > a:hover {
- border-color: #eeeeee #eeeeee #ddd;
- }
- .nav-tabs > li.active > a,
- .nav-tabs > li.active > a:hover,
- .nav-tabs > li.active > a:focus {
- color: #555555;
- background-color: #fff;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
- }
- .nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
- }
- .nav-tabs.nav-justified > li {
- float: none;
- }
- .nav-tabs.nav-justified > li > a {
- text-align: center;
- margin-bottom: 5px;
- }
- .nav-tabs.nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
- }
- @media (min-width: 768px) {
- .nav-tabs.nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-tabs.nav-justified > li > a {
- margin-bottom: 0;
- }
- }
- .nav-tabs.nav-justified > li > a {
- margin-right: 0;
- border-radius: 2px;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border: 1px solid #ddd;
- }
- @media (min-width: 768px) {
- .nav-tabs.nav-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 2px 2px 0 0;
- }
- .nav-tabs.nav-justified > .active > a,
- .nav-tabs.nav-justified > .active > a:hover,
- .nav-tabs.nav-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
- }
- .nav-pills > li {
- float: left;
- }
- .nav-pills > li > a {
- border-radius: 2px;
- }
- .nav-pills > li + li {
- margin-left: 2px;
- }
- .nav-pills > li.active > a,
- .nav-pills > li.active > a:hover,
- .nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #337ab7;
- }
- .nav-stacked > li {
- float: none;
- }
- .nav-stacked > li + li {
- margin-top: 2px;
- margin-left: 0;
- }
- .nav-justified {
- width: 100%;
- }
- .nav-justified > li {
- float: none;
- }
- .nav-justified > li > a {
- text-align: center;
- margin-bottom: 5px;
- }
- .nav-justified > .dropdown .dropdown-menu {
- top: auto;
- left: auto;
- }
- @media (min-width: 768px) {
- .nav-justified > li {
- display: table-cell;
- width: 1%;
- }
- .nav-justified > li > a {
- margin-bottom: 0;
- }
- }
- .nav-tabs-justified {
- border-bottom: 0;
- }
- .nav-tabs-justified > li > a {
- margin-right: 0;
- border-radius: 2px;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border: 1px solid #ddd;
- }
- @media (min-width: 768px) {
- .nav-tabs-justified > li > a {
- border-bottom: 1px solid #ddd;
- border-radius: 2px 2px 0 0;
- }
- .nav-tabs-justified > .active > a,
- .nav-tabs-justified > .active > a:hover,
- .nav-tabs-justified > .active > a:focus {
- border-bottom-color: #fff;
- }
- }
- .tab-content > .tab-pane {
- display: none;
- }
- .tab-content > .active {
- display: block;
- }
- .nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .navbar {
- position: relative;
- min-height: 30px;
- margin-bottom: 18px;
- border: 1px solid transparent;
- }
- @media (min-width: 541px) {
- .navbar {
- border-radius: 2px;
- }
- }
- @media (min-width: 541px) {
- .navbar-header {
- float: left;
- }
- }
- .navbar-collapse {
- overflow-x: visible;
- padding-right: 0px;
- padding-left: 0px;
- border-top: 1px solid transparent;
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
- -webkit-overflow-scrolling: touch;
- }
- .navbar-collapse.in {
- overflow-y: auto;
- }
- @media (min-width: 541px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- box-shadow: none;
- }
- .navbar-collapse.collapse {
- display: block !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
- .navbar-collapse.in {
- overflow-y: visible;
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-left: 0;
- padding-right: 0;
- }
- }
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
- }
- @media (max-device-width: 540px) and (orientation: landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
- }
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0px;
- margin-left: 0px;
- }
- @media (min-width: 541px) {
- .container > .navbar-header,
- .container-fluid > .navbar-header,
- .container > .navbar-collapse,
- .container-fluid > .navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
- }
- .navbar-static-top {
- z-index: 1000;
- border-width: 0 0 1px;
- }
- @media (min-width: 541px) {
- .navbar-static-top {
- border-radius: 0;
- }
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: fixed;
- right: 0;
- left: 0;
- z-index: 1030;
- }
- @media (min-width: 541px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
- }
- .navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
- }
- .navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
- }
- .navbar-brand {
- float: left;
- padding: 6px 0px;
- font-size: 17px;
- line-height: 18px;
- height: 30px;
- }
- .navbar-brand:hover,
- .navbar-brand:focus {
- text-decoration: none;
- }
- .navbar-brand > img {
- display: block;
- }
- @media (min-width: 541px) {
- .navbar > .container .navbar-brand,
- .navbar > .container-fluid .navbar-brand {
- margin-left: 0px;
- }
- }
- .navbar-toggle {
- position: relative;
- float: right;
- margin-right: 0px;
- padding: 9px 10px;
- margin-top: -2px;
- margin-bottom: -2px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 2px;
- }
- .navbar-toggle:focus {
- outline: 0;
- }
- .navbar-toggle .icon-bar {
- display: block;
- width: 22px;
- height: 2px;
- border-radius: 1px;
- }
- .navbar-toggle .icon-bar + .icon-bar {
- margin-top: 4px;
- }
- @media (min-width: 541px) {
- .navbar-toggle {
- display: none;
- }
- }
- .navbar-nav {
- margin: 3px 0px;
- }
- .navbar-nav > li > a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 18px;
- }
- @media (max-width: 540px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- box-shadow: none;
- }
- .navbar-nav .open .dropdown-menu > li > a,
- .navbar-nav .open .dropdown-menu .dropdown-header {
- padding: 5px 15px 5px 25px;
- }
- .navbar-nav .open .dropdown-menu > li > a {
- line-height: 18px;
- }
- .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-nav .open .dropdown-menu > li > a:focus {
- background-image: none;
- }
- }
- @media (min-width: 541px) {
- .navbar-nav {
- float: left;
- margin: 0;
- }
- .navbar-nav > li {
- float: left;
- }
- .navbar-nav > li > a {
- padding-top: 6px;
- padding-bottom: 6px;
- }
- }
- .navbar-form {
- margin-left: 0px;
- margin-right: 0px;
- padding: 10px 0px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- margin-top: -1px;
- margin-bottom: -1px;
- }
- @media (min-width: 768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
- .navbar-form .form-control-static {
- display: inline-block;
- }
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
- .navbar-form .input-group > .form-control {
- width: 100%;
- }
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
- }
- @media (max-width: 540px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
- }
- @media (min-width: 541px) {
- .navbar-form {
- width: auto;
- border: 0;
- margin-left: 0;
- margin-right: 0;
- padding-top: 0;
- padding-bottom: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
- }
- .navbar-nav > li > .dropdown-menu {
- margin-top: 0;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
- margin-bottom: 0;
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
- }
- .navbar-btn {
- margin-top: -1px;
- margin-bottom: -1px;
- }
- .navbar-btn.btn-sm {
- margin-top: 0px;
- margin-bottom: 0px;
- }
- .navbar-btn.btn-xs {
- margin-top: 4px;
- margin-bottom: 4px;
- }
- .navbar-text {
- margin-top: 6px;
- margin-bottom: 6px;
- }
- @media (min-width: 541px) {
- .navbar-text {
- float: left;
- margin-left: 0px;
- margin-right: 0px;
- }
- }
- @media (min-width: 541px) {
- .navbar-left {
- float: left !important;
- float: left;
- }
- .navbar-right {
- float: right !important;
- float: right;
- margin-right: 0px;
- }
- .navbar-right ~ .navbar-right {
- margin-right: 0;
- }
- }
- .navbar-default {
- background-color: #f8f8f8;
- border-color: #e7e7e7;
- }
- .navbar-default .navbar-brand {
- color: #777;
- }
- .navbar-default .navbar-brand:hover,
- .navbar-default .navbar-brand:focus {
- color: #5e5e5e;
- background-color: transparent;
- }
- .navbar-default .navbar-text {
- color: #777;
- }
- .navbar-default .navbar-nav > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav > li > a:hover,
- .navbar-default .navbar-nav > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav > .active > a,
- .navbar-default .navbar-nav > .active > a:hover,
- .navbar-default .navbar-nav > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav > .disabled > a,
- .navbar-default .navbar-nav > .disabled > a:hover,
- .navbar-default .navbar-nav > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
- .navbar-default .navbar-toggle {
- border-color: #ddd;
- }
- .navbar-default .navbar-toggle:hover,
- .navbar-default .navbar-toggle:focus {
- background-color: #ddd;
- }
- .navbar-default .navbar-toggle .icon-bar {
- background-color: #888;
- }
- .navbar-default .navbar-collapse,
- .navbar-default .navbar-form {
- border-color: #e7e7e7;
- }
- .navbar-default .navbar-nav > .open > a,
- .navbar-default .navbar-nav > .open > a:hover,
- .navbar-default .navbar-nav > .open > a:focus {
- background-color: #e7e7e7;
- color: #555;
- }
- @media (max-width: 540px) {
- .navbar-default .navbar-nav .open .dropdown-menu > li > a {
- color: #777;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #333;
- background-color: transparent;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #555;
- background-color: #e7e7e7;
- }
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #ccc;
- background-color: transparent;
- }
- }
- .navbar-default .navbar-link {
- color: #777;
- }
- .navbar-default .navbar-link:hover {
- color: #333;
- }
- .navbar-default .btn-link {
- color: #777;
- }
- .navbar-default .btn-link:hover,
- .navbar-default .btn-link:focus {
- color: #333;
- }
- .navbar-default .btn-link[disabled]:hover,
- fieldset[disabled] .navbar-default .btn-link:hover,
- .navbar-default .btn-link[disabled]:focus,
- fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
- }
- .navbar-inverse {
- background-color: #222;
- border-color: #080808;
- }
- .navbar-inverse .navbar-brand {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-brand:hover,
- .navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-text {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav > li > a:hover,
- .navbar-inverse .navbar-nav > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav > .active > a,
- .navbar-inverse .navbar-nav > .active > a:hover,
- .navbar-inverse .navbar-nav > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav > .disabled > a,
- .navbar-inverse .navbar-nav > .disabled > a:hover,
- .navbar-inverse .navbar-nav > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
- .navbar-inverse .navbar-toggle {
- border-color: #333;
- }
- .navbar-inverse .navbar-toggle:hover,
- .navbar-inverse .navbar-toggle:focus {
- background-color: #333;
- }
- .navbar-inverse .navbar-toggle .icon-bar {
- background-color: #fff;
- }
- .navbar-inverse .navbar-collapse,
- .navbar-inverse .navbar-form {
- border-color: #101010;
- }
- .navbar-inverse .navbar-nav > .open > a,
- .navbar-inverse .navbar-nav > .open > a:hover,
- .navbar-inverse .navbar-nav > .open > a:focus {
- background-color: #080808;
- color: #fff;
- }
- @media (max-width: 540px) {
- .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
- border-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
- color: #fff;
- background-color: transparent;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
- color: #fff;
- background-color: #080808;
- }
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
- .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
- color: #444;
- background-color: transparent;
- }
- }
- .navbar-inverse .navbar-link {
- color: #9d9d9d;
- }
- .navbar-inverse .navbar-link:hover {
- color: #fff;
- }
- .navbar-inverse .btn-link {
- color: #9d9d9d;
- }
- .navbar-inverse .btn-link:hover,
- .navbar-inverse .btn-link:focus {
- color: #fff;
- }
- .navbar-inverse .btn-link[disabled]:hover,
- fieldset[disabled] .navbar-inverse .btn-link:hover,
- .navbar-inverse .btn-link[disabled]:focus,
- fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
- }
- .breadcrumb {
- padding: 8px 15px;
- margin-bottom: 18px;
- list-style: none;
- background-color: #f5f5f5;
- border-radius: 2px;
- }
- .breadcrumb > li {
- display: inline-block;
- }
- .breadcrumb > li + li:before {
- content: "/\00a0";
- padding: 0 5px;
- color: #5e5e5e;
- }
- .breadcrumb > .active {
- color: #777777;
- }
- .pagination {
- display: inline-block;
- padding-left: 0;
- margin: 18px 0;
- border-radius: 2px;
- }
- .pagination > li {
- display: inline;
- }
- .pagination > li > a,
- .pagination > li > span {
- position: relative;
- float: left;
- padding: 6px 12px;
- line-height: 1.42857143;
- text-decoration: none;
- color: #337ab7;
- background-color: #fff;
- border: 1px solid #ddd;
- margin-left: -1px;
- }
- .pagination > li:first-child > a,
- .pagination > li:first-child > span {
- margin-left: 0;
- border-bottom-left-radius: 2px;
- border-top-left-radius: 2px;
- }
- .pagination > li:last-child > a,
- .pagination > li:last-child > span {
- border-bottom-right-radius: 2px;
- border-top-right-radius: 2px;
- }
- .pagination > li > a:hover,
- .pagination > li > span:hover,
- .pagination > li > a:focus,
- .pagination > li > span:focus {
- z-index: 2;
- color: #23527c;
- background-color: #eeeeee;
- border-color: #ddd;
- }
- .pagination > .active > a,
- .pagination > .active > span,
- .pagination > .active > a:hover,
- .pagination > .active > span:hover,
- .pagination > .active > a:focus,
- .pagination > .active > span:focus {
- z-index: 3;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
- cursor: default;
- }
- .pagination > .disabled > span,
- .pagination > .disabled > span:hover,
- .pagination > .disabled > span:focus,
- .pagination > .disabled > a,
- .pagination > .disabled > a:hover,
- .pagination > .disabled > a:focus {
- color: #777777;
- background-color: #fff;
- border-color: #ddd;
- cursor: not-allowed;
- }
- .pagination-lg > li > a,
- .pagination-lg > li > span {
- padding: 10px 16px;
- font-size: 17px;
- line-height: 1.3333333;
- }
- .pagination-lg > li:first-child > a,
- .pagination-lg > li:first-child > span {
- border-bottom-left-radius: 3px;
- border-top-left-radius: 3px;
- }
- .pagination-lg > li:last-child > a,
- .pagination-lg > li:last-child > span {
- border-bottom-right-radius: 3px;
- border-top-right-radius: 3px;
- }
- .pagination-sm > li > a,
- .pagination-sm > li > span {
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- }
- .pagination-sm > li:first-child > a,
- .pagination-sm > li:first-child > span {
- border-bottom-left-radius: 1px;
- border-top-left-radius: 1px;
- }
- .pagination-sm > li:last-child > a,
- .pagination-sm > li:last-child > span {
- border-bottom-right-radius: 1px;
- border-top-right-radius: 1px;
- }
- .pager {
- padding-left: 0;
- margin: 18px 0;
- list-style: none;
- text-align: center;
- }
- .pager li {
- display: inline;
- }
- .pager li > a,
- .pager li > span {
- display: inline-block;
- padding: 5px 14px;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 15px;
- }
- .pager li > a:hover,
- .pager li > a:focus {
- text-decoration: none;
- background-color: #eeeeee;
- }
- .pager .next > a,
- .pager .next > span {
- float: right;
- }
- .pager .previous > a,
- .pager .previous > span {
- float: left;
- }
- .pager .disabled > a,
- .pager .disabled > a:hover,
- .pager .disabled > a:focus,
- .pager .disabled > span {
- color: #777777;
- background-color: #fff;
- cursor: not-allowed;
- }
- .label {
- display: inline;
- padding: .2em .6em .3em;
- font-size: 75%;
- font-weight: bold;
- line-height: 1;
- color: #fff;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: .25em;
- }
- a.label:hover,
- a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
- }
- .label:empty {
- display: none;
- }
- .btn .label {
- position: relative;
- top: -1px;
- }
- .label-default {
- background-color: #777777;
- }
- .label-default[href]:hover,
- .label-default[href]:focus {
- background-color: #5e5e5e;
- }
- .label-primary {
- background-color: #337ab7;
- }
- .label-primary[href]:hover,
- .label-primary[href]:focus {
- background-color: #286090;
- }
- .label-success {
- background-color: #5cb85c;
- }
- .label-success[href]:hover,
- .label-success[href]:focus {
- background-color: #449d44;
- }
- .label-info {
- background-color: #5bc0de;
- }
- .label-info[href]:hover,
- .label-info[href]:focus {
- background-color: #31b0d5;
- }
- .label-warning {
- background-color: #f0ad4e;
- }
- .label-warning[href]:hover,
- .label-warning[href]:focus {
- background-color: #ec971f;
- }
- .label-danger {
- background-color: #d9534f;
- }
- .label-danger[href]:hover,
- .label-danger[href]:focus {
- background-color: #c9302c;
- }
- .badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 12px;
- font-weight: bold;
- color: #fff;
- line-height: 1;
- vertical-align: middle;
- white-space: nowrap;
- text-align: center;
- background-color: #777777;
- border-radius: 10px;
- }
- .badge:empty {
- display: none;
- }
- .btn .badge {
- position: relative;
- top: -1px;
- }
- .btn-xs .badge,
- .btn-group-xs > .btn .badge {
- top: 0;
- padding: 1px 5px;
- }
- a.badge:hover,
- a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
- }
- .list-group-item.active > .badge,
- .nav-pills > .active > a > .badge {
- color: #337ab7;
- background-color: #fff;
- }
- .list-group-item > .badge {
- float: right;
- }
- .list-group-item > .badge + .badge {
- margin-right: 5px;
- }
- .nav-pills > li > a > .badge {
- margin-left: 3px;
- }
- .jumbotron {
- padding-top: 30px;
- padding-bottom: 30px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #eeeeee;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- color: inherit;
- }
- .jumbotron p {
- margin-bottom: 15px;
- font-size: 20px;
- font-weight: 200;
- }
- .jumbotron > hr {
- border-top-color: #d5d5d5;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- border-radius: 3px;
- padding-left: 0px;
- padding-right: 0px;
- }
- .jumbotron .container {
- max-width: 100%;
- }
- @media screen and (min-width: 768px) {
- .jumbotron {
- padding-top: 48px;
- padding-bottom: 48px;
- }
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-left: 60px;
- padding-right: 60px;
- }
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 59px;
- }
- }
- .thumbnail {
- display: block;
- padding: 4px;
- margin-bottom: 18px;
- line-height: 1.42857143;
- background-color: #fff;
- border: 1px solid #ddd;
- border-radius: 2px;
- -webkit-transition: border 0.2s ease-in-out;
- -o-transition: border 0.2s ease-in-out;
- transition: border 0.2s ease-in-out;
- }
- .thumbnail > img,
- .thumbnail a > img {
- margin-left: auto;
- margin-right: auto;
- }
- a.thumbnail:hover,
- a.thumbnail:focus,
- a.thumbnail.active {
- border-color: #337ab7;
- }
- .thumbnail .caption {
- padding: 9px;
- color: #000;
- }
- .alert {
- padding: 15px;
- margin-bottom: 18px;
- border: 1px solid transparent;
- border-radius: 2px;
- }
- .alert h4 {
- margin-top: 0;
- color: inherit;
- }
- .alert .alert-link {
- font-weight: bold;
- }
- .alert > p,
- .alert > ul {
- margin-bottom: 0;
- }
- .alert > p + p {
- margin-top: 5px;
- }
- .alert-dismissable,
- .alert-dismissible {
- padding-right: 35px;
- }
- .alert-dismissable .close,
- .alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
- }
- .alert-success {
- background-color: #dff0d8;
- border-color: #d6e9c6;
- color: #3c763d;
- }
- .alert-success hr {
- border-top-color: #c9e2b3;
- }
- .alert-success .alert-link {
- color: #2b542c;
- }
- .alert-info {
- background-color: #d9edf7;
- border-color: #bce8f1;
- color: #31708f;
- }
- .alert-info hr {
- border-top-color: #a6e1ec;
- }
- .alert-info .alert-link {
- color: #245269;
- }
- .alert-warning {
- background-color: #fcf8e3;
- border-color: #faebcc;
- color: #8a6d3b;
- }
- .alert-warning hr {
- border-top-color: #f7e1b5;
- }
- .alert-warning .alert-link {
- color: #66512c;
- }
- .alert-danger {
- background-color: #f2dede;
- border-color: #ebccd1;
- color: #a94442;
- }
- .alert-danger hr {
- border-top-color: #e4b9c0;
- }
- .alert-danger .alert-link {
- color: #843534;
- }
- @-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
- }
- @keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
- to {
- background-position: 0 0;
- }
- }
- .progress {
- overflow: hidden;
- height: 18px;
- margin-bottom: 18px;
- background-color: #f5f5f5;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
- }
- .progress-bar {
- float: left;
- width: 0%;
- height: 100%;
- font-size: 12px;
- line-height: 18px;
- color: #fff;
- text-align: center;
- background-color: #337ab7;
- -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
- -webkit-transition: width 0.6s ease;
- -o-transition: width 0.6s ease;
- transition: width 0.6s ease;
- }
- .progress-striped .progress-bar,
- .progress-bar-striped {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-size: 40px 40px;
- }
- .progress.active .progress-bar,
- .progress-bar.active {
- -webkit-animation: progress-bar-stripes 2s linear infinite;
- -o-animation: progress-bar-stripes 2s linear infinite;
- animation: progress-bar-stripes 2s linear infinite;
- }
- .progress-bar-success {
- background-color: #5cb85c;
- }
- .progress-striped .progress-bar-success {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .progress-bar-info {
- background-color: #5bc0de;
- }
- .progress-striped .progress-bar-info {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .progress-bar-warning {
- background-color: #f0ad4e;
- }
- .progress-striped .progress-bar-warning {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .progress-bar-danger {
- background-color: #d9534f;
- }
- .progress-striped .progress-bar-danger {
- background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- }
- .media {
- margin-top: 15px;
- }
- .media:first-child {
- margin-top: 0;
- }
- .media,
- .media-body {
- zoom: 1;
- overflow: hidden;
- }
- .media-body {
- width: 10000px;
- }
- .media-object {
- display: block;
- }
- .media-object.img-thumbnail {
- max-width: none;
- }
- .media-right,
- .media > .pull-right {
- padding-left: 10px;
- }
- .media-left,
- .media > .pull-left {
- padding-right: 10px;
- }
- .media-left,
- .media-right,
- .media-body {
- display: table-cell;
- vertical-align: top;
- }
- .media-middle {
- vertical-align: middle;
- }
- .media-bottom {
- vertical-align: bottom;
- }
- .media-heading {
- margin-top: 0;
- margin-bottom: 5px;
- }
- .media-list {
- padding-left: 0;
- list-style: none;
- }
- .list-group {
- margin-bottom: 20px;
- padding-left: 0;
- }
- .list-group-item {
- position: relative;
- display: block;
- padding: 10px 15px;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid #ddd;
- }
- .list-group-item:first-child {
- border-top-right-radius: 2px;
- border-top-left-radius: 2px;
- }
- .list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 2px;
- border-bottom-left-radius: 2px;
- }
- a.list-group-item,
- button.list-group-item {
- color: #555;
- }
- a.list-group-item .list-group-item-heading,
- button.list-group-item .list-group-item-heading {
- color: #333;
- }
- a.list-group-item:hover,
- button.list-group-item:hover,
- a.list-group-item:focus,
- button.list-group-item:focus {
- text-decoration: none;
- color: #555;
- background-color: #f5f5f5;
- }
- button.list-group-item {
- width: 100%;
- text-align: left;
- }
- .list-group-item.disabled,
- .list-group-item.disabled:hover,
- .list-group-item.disabled:focus {
- background-color: #eeeeee;
- color: #777777;
- cursor: not-allowed;
- }
- .list-group-item.disabled .list-group-item-heading,
- .list-group-item.disabled:hover .list-group-item-heading,
- .list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
- }
- .list-group-item.disabled .list-group-item-text,
- .list-group-item.disabled:hover .list-group-item-text,
- .list-group-item.disabled:focus .list-group-item-text {
- color: #777777;
- }
- .list-group-item.active,
- .list-group-item.active:hover,
- .list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
- }
- .list-group-item.active .list-group-item-heading,
- .list-group-item.active:hover .list-group-item-heading,
- .list-group-item.active:focus .list-group-item-heading,
- .list-group-item.active .list-group-item-heading > small,
- .list-group-item.active:hover .list-group-item-heading > small,
- .list-group-item.active:focus .list-group-item-heading > small,
- .list-group-item.active .list-group-item-heading > .small,
- .list-group-item.active:hover .list-group-item-heading > .small,
- .list-group-item.active:focus .list-group-item-heading > .small {
- color: inherit;
- }
- .list-group-item.active .list-group-item-text,
- .list-group-item.active:hover .list-group-item-text,
- .list-group-item.active:focus .list-group-item-text {
- color: #c7ddef;
- }
- .list-group-item-success {
- color: #3c763d;
- background-color: #dff0d8;
- }
- a.list-group-item-success,
- button.list-group-item-success {
- color: #3c763d;
- }
- a.list-group-item-success .list-group-item-heading,
- button.list-group-item-success .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-success:hover,
- button.list-group-item-success:hover,
- a.list-group-item-success:focus,
- button.list-group-item-success:focus {
- color: #3c763d;
- background-color: #d0e9c6;
- }
- a.list-group-item-success.active,
- button.list-group-item-success.active,
- a.list-group-item-success.active:hover,
- button.list-group-item-success.active:hover,
- a.list-group-item-success.active:focus,
- button.list-group-item-success.active:focus {
- color: #fff;
- background-color: #3c763d;
- border-color: #3c763d;
- }
- .list-group-item-info {
- color: #31708f;
- background-color: #d9edf7;
- }
- a.list-group-item-info,
- button.list-group-item-info {
- color: #31708f;
- }
- a.list-group-item-info .list-group-item-heading,
- button.list-group-item-info .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-info:hover,
- button.list-group-item-info:hover,
- a.list-group-item-info:focus,
- button.list-group-item-info:focus {
- color: #31708f;
- background-color: #c4e3f3;
- }
- a.list-group-item-info.active,
- button.list-group-item-info.active,
- a.list-group-item-info.active:hover,
- button.list-group-item-info.active:hover,
- a.list-group-item-info.active:focus,
- button.list-group-item-info.active:focus {
- color: #fff;
- background-color: #31708f;
- border-color: #31708f;
- }
- .list-group-item-warning {
- color: #8a6d3b;
- background-color: #fcf8e3;
- }
- a.list-group-item-warning,
- button.list-group-item-warning {
- color: #8a6d3b;
- }
- a.list-group-item-warning .list-group-item-heading,
- button.list-group-item-warning .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-warning:hover,
- button.list-group-item-warning:hover,
- a.list-group-item-warning:focus,
- button.list-group-item-warning:focus {
- color: #8a6d3b;
- background-color: #faf2cc;
- }
- a.list-group-item-warning.active,
- button.list-group-item-warning.active,
- a.list-group-item-warning.active:hover,
- button.list-group-item-warning.active:hover,
- a.list-group-item-warning.active:focus,
- button.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #8a6d3b;
- border-color: #8a6d3b;
- }
- .list-group-item-danger {
- color: #a94442;
- background-color: #f2dede;
- }
- a.list-group-item-danger,
- button.list-group-item-danger {
- color: #a94442;
- }
- a.list-group-item-danger .list-group-item-heading,
- button.list-group-item-danger .list-group-item-heading {
- color: inherit;
- }
- a.list-group-item-danger:hover,
- button.list-group-item-danger:hover,
- a.list-group-item-danger:focus,
- button.list-group-item-danger:focus {
- color: #a94442;
- background-color: #ebcccc;
- }
- a.list-group-item-danger.active,
- button.list-group-item-danger.active,
- a.list-group-item-danger.active:hover,
- button.list-group-item-danger.active:hover,
- a.list-group-item-danger.active:focus,
- button.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #a94442;
- border-color: #a94442;
- }
- .list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
- }
- .list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
- }
- .panel {
- margin-bottom: 18px;
- background-color: #fff;
- border: 1px solid transparent;
- border-radius: 2px;
- -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
- }
- .panel-body {
- padding: 15px;
- }
- .panel-heading {
- padding: 10px 15px;
- border-bottom: 1px solid transparent;
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- }
- .panel-heading > .dropdown .dropdown-toggle {
- color: inherit;
- }
- .panel-title {
- margin-top: 0;
- margin-bottom: 0;
- font-size: 15px;
- color: inherit;
- }
- .panel-title > a,
- .panel-title > small,
- .panel-title > .small,
- .panel-title > small > a,
- .panel-title > .small > a {
- color: inherit;
- }
- .panel-footer {
- padding: 10px 15px;
- background-color: #f5f5f5;
- border-top: 1px solid #ddd;
- border-bottom-right-radius: 1px;
- border-bottom-left-radius: 1px;
- }
- .panel > .list-group,
- .panel > .panel-collapse > .list-group {
- margin-bottom: 0;
- }
- .panel > .list-group .list-group-item,
- .panel > .panel-collapse > .list-group .list-group-item {
- border-width: 1px 0;
- border-radius: 0;
- }
- .panel > .list-group:first-child .list-group-item:first-child,
- .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
- border-top: 0;
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- }
- .panel > .list-group:last-child .list-group-item:last-child,
- .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
- border-bottom: 0;
- border-bottom-right-radius: 1px;
- border-bottom-left-radius: 1px;
- }
- .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
- }
- .panel-heading + .list-group .list-group-item:first-child {
- border-top-width: 0;
- }
- .list-group + .panel-footer {
- border-top-width: 0;
- }
- .panel > .table,
- .panel > .table-responsive > .table,
- .panel > .panel-collapse > .table {
- margin-bottom: 0;
- }
- .panel > .table caption,
- .panel > .table-responsive > .table caption,
- .panel > .panel-collapse > .table caption {
- padding-left: 15px;
- padding-right: 15px;
- }
- .panel > .table:first-child,
- .panel > .table-responsive:first-child > .table:first-child {
- border-top-right-radius: 1px;
- border-top-left-radius: 1px;
- }
- .panel > .table:first-child > thead:first-child > tr:first-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
- border-top-left-radius: 1px;
- border-top-right-radius: 1px;
- }
- .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
- .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
- border-top-left-radius: 1px;
- }
- .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
- .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
- .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
- .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
- .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
- border-top-right-radius: 1px;
- }
- .panel > .table:last-child,
- .panel > .table-responsive:last-child > .table:last-child {
- border-bottom-right-radius: 1px;
- border-bottom-left-radius: 1px;
- }
- .panel > .table:last-child > tbody:last-child > tr:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
- border-bottom-left-radius: 1px;
- border-bottom-right-radius: 1px;
- }
- .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
- .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
- border-bottom-left-radius: 1px;
- }
- .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
- .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
- .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
- .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
- border-bottom-right-radius: 1px;
- }
- .panel > .panel-body + .table,
- .panel > .panel-body + .table-responsive,
- .panel > .table + .panel-body,
- .panel > .table-responsive + .panel-body {
- border-top: 1px solid #ddd;
- }
- .panel > .table > tbody:first-child > tr:first-child th,
- .panel > .table > tbody:first-child > tr:first-child td {
- border-top: 0;
- }
- .panel > .table-bordered,
- .panel > .table-responsive > .table-bordered {
- border: 0;
- }
- .panel > .table-bordered > thead > tr > th:first-child,
- .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
- .panel > .table-bordered > tbody > tr > th:first-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
- .panel > .table-bordered > tfoot > tr > th:first-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
- .panel > .table-bordered > thead > tr > td:first-child,
- .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
- .panel > .table-bordered > tbody > tr > td:first-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
- .panel > .table-bordered > tfoot > tr > td:first-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
- border-left: 0;
- }
- .panel > .table-bordered > thead > tr > th:last-child,
- .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
- .panel > .table-bordered > tbody > tr > th:last-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
- .panel > .table-bordered > tfoot > tr > th:last-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
- .panel > .table-bordered > thead > tr > td:last-child,
- .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
- .panel > .table-bordered > tbody > tr > td:last-child,
- .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
- .panel > .table-bordered > tfoot > tr > td:last-child,
- .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
- border-right: 0;
- }
- .panel > .table-bordered > thead > tr:first-child > td,
- .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
- .panel > .table-bordered > tbody > tr:first-child > td,
- .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
- .panel > .table-bordered > thead > tr:first-child > th,
- .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
- .panel > .table-bordered > tbody > tr:first-child > th,
- .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
- border-bottom: 0;
- }
- .panel > .table-bordered > tbody > tr:last-child > td,
- .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
- .panel > .table-bordered > tfoot > tr:last-child > td,
- .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
- .panel > .table-bordered > tbody > tr:last-child > th,
- .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
- .panel > .table-bordered > tfoot > tr:last-child > th,
- .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
- border-bottom: 0;
- }
- .panel > .table-responsive {
- border: 0;
- margin-bottom: 0;
- }
- .panel-group {
- margin-bottom: 18px;
- }
- .panel-group .panel {
- margin-bottom: 0;
- border-radius: 2px;
- }
- .panel-group .panel + .panel {
- margin-top: 5px;
- }
- .panel-group .panel-heading {
- border-bottom: 0;
- }
- .panel-group .panel-heading + .panel-collapse > .panel-body,
- .panel-group .panel-heading + .panel-collapse > .list-group {
- border-top: 1px solid #ddd;
- }
- .panel-group .panel-footer {
- border-top: 0;
- }
- .panel-group .panel-footer + .panel-collapse .panel-body {
- border-bottom: 1px solid #ddd;
- }
- .panel-default {
- border-color: #ddd;
- }
- .panel-default > .panel-heading {
- color: #333333;
- background-color: #f5f5f5;
- border-color: #ddd;
- }
- .panel-default > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ddd;
- }
- .panel-default > .panel-heading .badge {
- color: #f5f5f5;
- background-color: #333333;
- }
- .panel-default > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ddd;
- }
- .panel-primary {
- border-color: #337ab7;
- }
- .panel-primary > .panel-heading {
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
- }
- .panel-primary > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #337ab7;
- }
- .panel-primary > .panel-heading .badge {
- color: #337ab7;
- background-color: #fff;
- }
- .panel-primary > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #337ab7;
- }
- .panel-success {
- border-color: #d6e9c6;
- }
- .panel-success > .panel-heading {
- color: #3c763d;
- background-color: #dff0d8;
- border-color: #d6e9c6;
- }
- .panel-success > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #d6e9c6;
- }
- .panel-success > .panel-heading .badge {
- color: #dff0d8;
- background-color: #3c763d;
- }
- .panel-success > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #d6e9c6;
- }
- .panel-info {
- border-color: #bce8f1;
- }
- .panel-info > .panel-heading {
- color: #31708f;
- background-color: #d9edf7;
- border-color: #bce8f1;
- }
- .panel-info > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #bce8f1;
- }
- .panel-info > .panel-heading .badge {
- color: #d9edf7;
- background-color: #31708f;
- }
- .panel-info > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #bce8f1;
- }
- .panel-warning {
- border-color: #faebcc;
- }
- .panel-warning > .panel-heading {
- color: #8a6d3b;
- background-color: #fcf8e3;
- border-color: #faebcc;
- }
- .panel-warning > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #faebcc;
- }
- .panel-warning > .panel-heading .badge {
- color: #fcf8e3;
- background-color: #8a6d3b;
- }
- .panel-warning > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #faebcc;
- }
- .panel-danger {
- border-color: #ebccd1;
- }
- .panel-danger > .panel-heading {
- color: #a94442;
- background-color: #f2dede;
- border-color: #ebccd1;
- }
- .panel-danger > .panel-heading + .panel-collapse > .panel-body {
- border-top-color: #ebccd1;
- }
- .panel-danger > .panel-heading .badge {
- color: #f2dede;
- background-color: #a94442;
- }
- .panel-danger > .panel-footer + .panel-collapse > .panel-body {
- border-bottom-color: #ebccd1;
- }
- .embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
- }
- .embed-responsive .embed-responsive-item,
- .embed-responsive iframe,
- .embed-responsive embed,
- .embed-responsive object,
- .embed-responsive video {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- border: 0;
- }
- .embed-responsive-16by9 {
- padding-bottom: 56.25%;
- }
- .embed-responsive-4by3 {
- padding-bottom: 75%;
- }
- .well {
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #e3e3e3;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- }
- .well blockquote {
- border-color: #ddd;
- border-color: rgba(0, 0, 0, 0.15);
- }
- .well-lg {
- padding: 24px;
- border-radius: 3px;
- }
- .well-sm {
- padding: 9px;
- border-radius: 1px;
- }
- .close {
- float: right;
- font-size: 19.5px;
- font-weight: bold;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: 0.2;
- filter: alpha(opacity=20);
- }
- .close:hover,
- .close:focus {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- opacity: 0.5;
- filter: alpha(opacity=50);
- }
- button.close {
- padding: 0;
- cursor: pointer;
- background: transparent;
- border: 0;
- -webkit-appearance: none;
- }
- .modal-open {
- overflow: hidden;
- }
- .modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- -webkit-overflow-scrolling: touch;
- outline: 0;
- }
- .modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
- -webkit-transition: -webkit-transform 0.3s ease-out;
- -moz-transition: -moz-transform 0.3s ease-out;
- -o-transition: -o-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
- }
- .modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
- }
- .modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
- }
- .modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
- }
- .modal-content {
- position: relative;
- background-color: #fff;
- border: 1px solid #999;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 3px;
- -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
- background-clip: padding-box;
- outline: 0;
- }
- .modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000;
- }
- .modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
- }
- .modal-backdrop.in {
- opacity: 0.5;
- filter: alpha(opacity=50);
- }
- .modal-header {
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
- }
- .modal-header .close {
- margin-top: -2px;
- }
- .modal-title {
- margin: 0;
- line-height: 1.42857143;
- }
- .modal-body {
- position: relative;
- padding: 15px;
- }
- .modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
- }
- .modal-footer .btn + .btn {
- margin-left: 5px;
- margin-bottom: 0;
- }
- .modal-footer .btn-group .btn + .btn {
- margin-left: -1px;
- }
- .modal-footer .btn-block + .btn-block {
- margin-left: 0;
- }
- .modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
- }
- @media (min-width: 768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
- .modal-content {
- -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
- }
- .modal-sm {
- width: 300px;
- }
- }
- @media (min-width: 992px) {
- .modal-lg {
- width: 900px;
- }
- }
- .tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 12px;
- opacity: 0;
- filter: alpha(opacity=0);
- }
- .tooltip.in {
- opacity: 0.9;
- filter: alpha(opacity=90);
- }
- .tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
- }
- .tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
- }
- .tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
- }
- .tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
- }
- .tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: 2px;
- }
- .tooltip-arrow {
- position: absolute;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- }
- .tooltip.top .tooltip-arrow {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
- }
- .tooltip.top-left .tooltip-arrow {
- bottom: 0;
- right: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
- }
- .tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #000;
- }
- .tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #000;
- }
- .tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #000;
- }
- .tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
- }
- .tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
- }
- .tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #000;
- }
- .popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-style: normal;
- font-weight: normal;
- letter-spacing: normal;
- line-break: auto;
- line-height: 1.42857143;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- white-space: normal;
- word-break: normal;
- word-spacing: normal;
- word-wrap: normal;
- font-size: 13px;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #ccc;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 3px;
- -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
- }
- .popover.top {
- margin-top: -10px;
- }
- .popover.right {
- margin-left: 10px;
- }
- .popover.bottom {
- margin-top: 10px;
- }
- .popover.left {
- margin-left: -10px;
- }
- .popover-title {
- margin: 0;
- padding: 8px 14px;
- font-size: 13px;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-radius: 2px 2px 0 0;
- }
- .popover-content {
- padding: 9px 14px;
- }
- .popover > .arrow,
- .popover > .arrow:after {
- position: absolute;
- display: block;
- width: 0;
- height: 0;
- border-color: transparent;
- border-style: solid;
- }
- .popover > .arrow {
- border-width: 11px;
- }
- .popover > .arrow:after {
- border-width: 10px;
- content: "";
- }
- .popover.top > .arrow {
- left: 50%;
- margin-left: -11px;
- border-bottom-width: 0;
- border-top-color: #999999;
- border-top-color: rgba(0, 0, 0, 0.25);
- bottom: -11px;
- }
- .popover.top > .arrow:after {
- content: " ";
- bottom: 1px;
- margin-left: -10px;
- border-bottom-width: 0;
- border-top-color: #fff;
- }
- .popover.right > .arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-left-width: 0;
- border-right-color: #999999;
- border-right-color: rgba(0, 0, 0, 0.25);
- }
- .popover.right > .arrow:after {
- content: " ";
- left: 1px;
- bottom: -10px;
- border-left-width: 0;
- border-right-color: #fff;
- }
- .popover.bottom > .arrow {
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999999;
- border-bottom-color: rgba(0, 0, 0, 0.25);
- top: -11px;
- }
- .popover.bottom > .arrow:after {
- content: " ";
- top: 1px;
- margin-left: -10px;
- border-top-width: 0;
- border-bottom-color: #fff;
- }
- .popover.left > .arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999999;
- border-left-color: rgba(0, 0, 0, 0.25);
- }
- .popover.left > .arrow:after {
- content: " ";
- right: 1px;
- border-right-width: 0;
- border-left-color: #fff;
- bottom: -10px;
- }
- .carousel {
- position: relative;
- }
- .carousel-inner {
- position: relative;
- overflow: hidden;
- width: 100%;
- }
- .carousel-inner > .item {
- display: none;
- position: relative;
- -webkit-transition: 0.6s ease-in-out left;
- -o-transition: 0.6s ease-in-out left;
- transition: 0.6s ease-in-out left;
- }
- .carousel-inner > .item > img,
- .carousel-inner > .item > a > img {
- line-height: 1;
- }
- @media all and (transform-3d), (-webkit-transform-3d) {
- .carousel-inner > .item {
- -webkit-transition: -webkit-transform 0.6s ease-in-out;
- -moz-transition: -moz-transform 0.6s ease-in-out;
- -o-transition: -o-transform 0.6s ease-in-out;
- transition: transform 0.6s ease-in-out;
- -webkit-backface-visibility: hidden;
- -moz-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000px;
- -moz-perspective: 1000px;
- perspective: 1000px;
- }
- .carousel-inner > .item.next,
- .carousel-inner > .item.active.right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- left: 0;
- }
- .carousel-inner > .item.prev,
- .carousel-inner > .item.active.left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- left: 0;
- }
- .carousel-inner > .item.next.left,
- .carousel-inner > .item.prev.right,
- .carousel-inner > .item.active {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- left: 0;
- }
- }
- .carousel-inner > .active,
- .carousel-inner > .next,
- .carousel-inner > .prev {
- display: block;
- }
- .carousel-inner > .active {
- left: 0;
- }
- .carousel-inner > .next,
- .carousel-inner > .prev {
- position: absolute;
- top: 0;
- width: 100%;
- }
- .carousel-inner > .next {
- left: 100%;
- }
- .carousel-inner > .prev {
- left: -100%;
- }
- .carousel-inner > .next.left,
- .carousel-inner > .prev.right {
- left: 0;
- }
- .carousel-inner > .active.left {
- left: -100%;
- }
- .carousel-inner > .active.right {
- left: 100%;
- }
- .carousel-control {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- width: 15%;
- opacity: 0.5;
- filter: alpha(opacity=50);
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
- background-color: rgba(0, 0, 0, 0);
- }
- .carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
- }
- .carousel-control.right {
- left: auto;
- right: 0;
- background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
- background-repeat: repeat-x;
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
- }
- .carousel-control:hover,
- .carousel-control:focus {
- outline: 0;
- color: #fff;
- text-decoration: none;
- opacity: 0.9;
- filter: alpha(opacity=90);
- }
- .carousel-control .icon-prev,
- .carousel-control .icon-next,
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right {
- position: absolute;
- top: 50%;
- margin-top: -10px;
- z-index: 5;
- display: inline-block;
- }
- .carousel-control .icon-prev,
- .carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
- }
- .carousel-control .icon-next,
- .carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
- }
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 20px;
- height: 20px;
- line-height: 1;
- font-family: serif;
- }
- .carousel-control .icon-prev:before {
- content: '\2039';
- }
- .carousel-control .icon-next:before {
- content: '\203a';
- }
- .carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- margin-left: -30%;
- padding-left: 0;
- list-style: none;
- text-align: center;
- }
- .carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- border: 1px solid #fff;
- border-radius: 10px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0, 0, 0, 0);
- }
- .carousel-indicators .active {
- margin: 0;
- width: 12px;
- height: 12px;
- background-color: #fff;
- }
- .carousel-caption {
- position: absolute;
- left: 15%;
- right: 15%;
- bottom: 20px;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
- }
- .carousel-caption .btn {
- text-shadow: none;
- }
- @media screen and (min-width: 768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -10px;
- font-size: 30px;
- }
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -10px;
- }
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -10px;
- }
- .carousel-caption {
- left: 20%;
- right: 20%;
- padding-bottom: 30px;
- }
- .carousel-indicators {
- bottom: 20px;
- }
- }
- .clearfix:before,
- .clearfix:after,
- .dl-horizontal dd:before,
- .dl-horizontal dd:after,
- .container:before,
- .container:after,
- .container-fluid:before,
- .container-fluid:after,
- .row:before,
- .row:after,
- .form-horizontal .form-group:before,
- .form-horizontal .form-group:after,
- .btn-toolbar:before,
- .btn-toolbar:after,
- .btn-group-vertical > .btn-group:before,
- .btn-group-vertical > .btn-group:after,
- .nav:before,
- .nav:after,
- .navbar:before,
- .navbar:after,
- .navbar-header:before,
- .navbar-header:after,
- .navbar-collapse:before,
- .navbar-collapse:after,
- .pager:before,
- .pager:after,
- .panel-body:before,
- .panel-body:after,
- .modal-header:before,
- .modal-header:after,
- .modal-footer:before,
- .modal-footer:after,
- .item_buttons:before,
- .item_buttons:after {
- content: " ";
- display: table;
- }
- .clearfix:after,
- .dl-horizontal dd:after,
- .container:after,
- .container-fluid:after,
- .row:after,
- .form-horizontal .form-group:after,
- .btn-toolbar:after,
- .btn-group-vertical > .btn-group:after,
- .nav:after,
- .navbar:after,
- .navbar-header:after,
- .navbar-collapse:after,
- .pager:after,
- .panel-body:after,
- .modal-header:after,
- .modal-footer:after,
- .item_buttons:after {
- clear: both;
- }
- .center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
- }
- .pull-right {
- float: right !important;
- }
- .pull-left {
- float: left !important;
- }
- .hide {
- display: none !important;
- }
- .show {
- display: block !important;
- }
- .invisible {
- visibility: hidden;
- }
- .text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
- }
- .hidden {
- display: none !important;
- }
- .affix {
- position: fixed;
- }
- @-ms-viewport {
- width: device-width;
- }
- .visible-xs,
- .visible-sm,
- .visible-md,
- .visible-lg {
- display: none !important;
- }
- .visible-xs-block,
- .visible-xs-inline,
- .visible-xs-inline-block,
- .visible-sm-block,
- .visible-sm-inline,
- .visible-sm-inline-block,
- .visible-md-block,
- .visible-md-inline,
- .visible-md-inline-block,
- .visible-lg-block,
- .visible-lg-inline,
- .visible-lg-inline-block {
- display: none !important;
- }
- @media (max-width: 767px) {
- .visible-xs {
- display: block !important;
- }
- table.visible-xs {
- display: table !important;
- }
- tr.visible-xs {
- display: table-row !important;
- }
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
- }
- @media (max-width: 767px) {
- .visible-xs-block {
- display: block !important;
- }
- }
- @media (max-width: 767px) {
- .visible-xs-inline {
- display: inline !important;
- }
- }
- @media (max-width: 767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm {
- display: block !important;
- }
- table.visible-sm {
- display: table !important;
- }
- tr.visible-sm {
- display: table-row !important;
- }
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-block {
- display: block !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline {
- display: inline !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md {
- display: block !important;
- }
- table.visible-md {
- display: table !important;
- }
- tr.visible-md {
- display: table-row !important;
- }
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-block {
- display: block !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline {
- display: inline !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg {
- display: block !important;
- }
- table.visible-lg {
- display: table !important;
- }
- tr.visible-lg {
- display: table-row !important;
- }
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg-block {
- display: block !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
- }
- @media (min-width: 1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
- }
- @media (max-width: 767px) {
- .hidden-xs {
- display: none !important;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- .hidden-sm {
- display: none !important;
- }
- }
- @media (min-width: 992px) and (max-width: 1199px) {
- .hidden-md {
- display: none !important;
- }
- }
- @media (min-width: 1200px) {
- .hidden-lg {
- display: none !important;
- }
- }
- .visible-print {
- display: none !important;
- }
- @media print {
- .visible-print {
- display: block !important;
- }
- table.visible-print {
- display: table !important;
- }
- tr.visible-print {
- display: table-row !important;
- }
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
- }
- .visible-print-block {
- display: none !important;
- }
- @media print {
- .visible-print-block {
- display: block !important;
- }
- }
- .visible-print-inline {
- display: none !important;
- }
- @media print {
- .visible-print-inline {
- display: inline !important;
- }
- }
- .visible-print-inline-block {
- display: none !important;
- }
- @media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
- }
- @media print {
- .hidden-print {
- display: none !important;
- }
- }
- /*!
- *
- * Font Awesome
- *
- */
- /*!
- * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
- * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
- /* FONT PATH
- * -------------------------- */
- @font-face {
- font-family: 'FontAwesome';
- src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
- src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
- font-weight: normal;
- font-style: normal;
- }
- .fa {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- }
- /* makes the font 33% larger relative to the icon container */
- .fa-lg {
- font-size: 1.33333333em;
- line-height: 0.75em;
- vertical-align: -15%;
- }
- .fa-2x {
- font-size: 2em;
- }
- .fa-3x {
- font-size: 3em;
- }
- .fa-4x {
- font-size: 4em;
- }
- .fa-5x {
- font-size: 5em;
- }
- .fa-fw {
- width: 1.28571429em;
- text-align: center;
- }
- .fa-ul {
- padding-left: 0;
- margin-left: 2.14285714em;
- list-style-type: none;
- }
- .fa-ul > li {
- position: relative;
- }
- .fa-li {
- position: absolute;
- left: -2.14285714em;
- width: 2.14285714em;
- top: 0.14285714em;
- text-align: center;
- }
- .fa-li.fa-lg {
- left: -1.85714286em;
- }
- .fa-border {
- padding: .2em .25em .15em;
- border: solid 0.08em #eee;
- border-radius: .1em;
- }
- .pull-right {
- float: right;
- }
- .pull-left {
- float: left;
- }
- .fa.pull-left {
- margin-right: .3em;
- }
- .fa.pull-right {
- margin-left: .3em;
- }
- .fa-spin {
- -webkit-animation: fa-spin 2s infinite linear;
- animation: fa-spin 2s infinite linear;
- }
- @-webkit-keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
- }
- @keyframes fa-spin {
- 0% {
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
- 100% {
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
- }
- .fa-rotate-90 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
- -webkit-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
- }
- .fa-rotate-180 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
- -webkit-transform: rotate(180deg);
- -ms-transform: rotate(180deg);
- transform: rotate(180deg);
- }
- .fa-rotate-270 {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
- -webkit-transform: rotate(270deg);
- -ms-transform: rotate(270deg);
- transform: rotate(270deg);
- }
- .fa-flip-horizontal {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
- -webkit-transform: scale(-1, 1);
- -ms-transform: scale(-1, 1);
- transform: scale(-1, 1);
- }
- .fa-flip-vertical {
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
- -webkit-transform: scale(1, -1);
- -ms-transform: scale(1, -1);
- transform: scale(1, -1);
- }
- :root .fa-rotate-90,
- :root .fa-rotate-180,
- :root .fa-rotate-270,
- :root .fa-flip-horizontal,
- :root .fa-flip-vertical {
- filter: none;
- }
- .fa-stack {
- position: relative;
- display: inline-block;
- width: 2em;
- height: 2em;
- line-height: 2em;
- vertical-align: middle;
- }
- .fa-stack-1x,
- .fa-stack-2x {
- position: absolute;
- left: 0;
- width: 100%;
- text-align: center;
- }
- .fa-stack-1x {
- line-height: inherit;
- }
- .fa-stack-2x {
- font-size: 2em;
- }
- .fa-inverse {
- color: #fff;
- }
- /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
- readers do not read off random characters that represent icons */
- .fa-glass:before {
- content: "\f000";
- }
- .fa-music:before {
- content: "\f001";
- }
- .fa-search:before {
- content: "\f002";
- }
- .fa-envelope-o:before {
- content: "\f003";
- }
- .fa-heart:before {
- content: "\f004";
- }
- .fa-star:before {
- content: "\f005";
- }
- .fa-star-o:before {
- content: "\f006";
- }
- .fa-user:before {
- content: "\f007";
- }
- .fa-film:before {
- content: "\f008";
- }
- .fa-th-large:before {
- content: "\f009";
- }
- .fa-th:before {
- content: "\f00a";
- }
- .fa-th-list:before {
- content: "\f00b";
- }
- .fa-check:before {
- content: "\f00c";
- }
- .fa-remove:before,
- .fa-close:before,
- .fa-times:before {
- content: "\f00d";
- }
- .fa-search-plus:before {
- content: "\f00e";
- }
- .fa-search-minus:before {
- content: "\f010";
- }
- .fa-power-off:before {
- content: "\f011";
- }
- .fa-signal:before {
- content: "\f012";
- }
- .fa-gear:before,
- .fa-cog:before {
- content: "\f013";
- }
- .fa-trash-o:before {
- content: "\f014";
- }
- .fa-home:before {
- content: "\f015";
- }
- .fa-file-o:before {
- content: "\f016";
- }
- .fa-clock-o:before {
- content: "\f017";
- }
- .fa-road:before {
- content: "\f018";
- }
- .fa-download:before {
- content: "\f019";
- }
- .fa-arrow-circle-o-down:before {
- content: "\f01a";
- }
- .fa-arrow-circle-o-up:before {
- content: "\f01b";
- }
- .fa-inbox:before {
- content: "\f01c";
- }
- .fa-play-circle-o:before {
- content: "\f01d";
- }
- .fa-rotate-right:before,
- .fa-repeat:before {
- content: "\f01e";
- }
- .fa-refresh:before {
- content: "\f021";
- }
- .fa-list-alt:before {
- content: "\f022";
- }
- .fa-lock:before {
- content: "\f023";
- }
- .fa-flag:before {
- content: "\f024";
- }
- .fa-headphones:before {
- content: "\f025";
- }
- .fa-volume-off:before {
- content: "\f026";
- }
- .fa-volume-down:before {
- content: "\f027";
- }
- .fa-volume-up:before {
- content: "\f028";
- }
- .fa-qrcode:before {
- content: "\f029";
- }
- .fa-barcode:before {
- content: "\f02a";
- }
- .fa-tag:before {
- content: "\f02b";
- }
- .fa-tags:before {
- content: "\f02c";
- }
- .fa-book:before {
- content: "\f02d";
- }
- .fa-bookmark:before {
- content: "\f02e";
- }
- .fa-print:before {
- content: "\f02f";
- }
- .fa-camera:before {
- content: "\f030";
- }
- .fa-font:before {
- content: "\f031";
- }
- .fa-bold:before {
- content: "\f032";
- }
- .fa-italic:before {
- content: "\f033";
- }
- .fa-text-height:before {
- content: "\f034";
- }
- .fa-text-width:before {
- content: "\f035";
- }
- .fa-align-left:before {
- content: "\f036";
- }
- .fa-align-center:before {
- content: "\f037";
- }
- .fa-align-right:before {
- content: "\f038";
- }
- .fa-align-justify:before {
- content: "\f039";
- }
- .fa-list:before {
- content: "\f03a";
- }
- .fa-dedent:before,
- .fa-outdent:before {
- content: "\f03b";
- }
- .fa-indent:before {
- content: "\f03c";
- }
- .fa-video-camera:before {
- content: "\f03d";
- }
- .fa-photo:before,
- .fa-image:before,
- .fa-picture-o:before {
- content: "\f03e";
- }
- .fa-pencil:before {
- content: "\f040";
- }
- .fa-map-marker:before {
- content: "\f041";
- }
- .fa-adjust:before {
- content: "\f042";
- }
- .fa-tint:before {
- content: "\f043";
- }
- .fa-edit:before,
- .fa-pencil-square-o:before {
- content: "\f044";
- }
- .fa-share-square-o:before {
- content: "\f045";
- }
- .fa-check-square-o:before {
- content: "\f046";
- }
- .fa-arrows:before {
- content: "\f047";
- }
- .fa-step-backward:before {
- content: "\f048";
- }
- .fa-fast-backward:before {
- content: "\f049";
- }
- .fa-backward:before {
- content: "\f04a";
- }
- .fa-play:before {
- content: "\f04b";
- }
- .fa-pause:before {
- content: "\f04c";
- }
- .fa-stop:before {
- content: "\f04d";
- }
- .fa-forward:before {
- content: "\f04e";
- }
- .fa-fast-forward:before {
- content: "\f050";
- }
- .fa-step-forward:before {
- content: "\f051";
- }
- .fa-eject:before {
- content: "\f052";
- }
- .fa-chevron-left:before {
- content: "\f053";
- }
- .fa-chevron-right:before {
- content: "\f054";
- }
- .fa-plus-circle:before {
- content: "\f055";
- }
- .fa-minus-circle:before {
- content: "\f056";
- }
- .fa-times-circle:before {
- content: "\f057";
- }
- .fa-check-circle:before {
- content: "\f058";
- }
- .fa-question-circle:before {
- content: "\f059";
- }
- .fa-info-circle:before {
- content: "\f05a";
- }
- .fa-crosshairs:before {
- content: "\f05b";
- }
- .fa-times-circle-o:before {
- content: "\f05c";
- }
- .fa-check-circle-o:before {
- content: "\f05d";
- }
- .fa-ban:before {
- content: "\f05e";
- }
- .fa-arrow-left:before {
- content: "\f060";
- }
- .fa-arrow-right:before {
- content: "\f061";
- }
- .fa-arrow-up:before {
- content: "\f062";
- }
- .fa-arrow-down:before {
- content: "\f063";
- }
- .fa-mail-forward:before,
- .fa-share:before {
- content: "\f064";
- }
- .fa-expand:before {
- content: "\f065";
- }
- .fa-compress:before {
- content: "\f066";
- }
- .fa-plus:before {
- content: "\f067";
- }
- .fa-minus:before {
- content: "\f068";
- }
- .fa-asterisk:before {
- content: "\f069";
- }
- .fa-exclamation-circle:before {
- content: "\f06a";
- }
- .fa-gift:before {
- content: "\f06b";
- }
- .fa-leaf:before {
- content: "\f06c";
- }
- .fa-fire:before {
- content: "\f06d";
- }
- .fa-eye:before {
- content: "\f06e";
- }
- .fa-eye-slash:before {
- content: "\f070";
- }
- .fa-warning:before,
- .fa-exclamation-triangle:before {
- content: "\f071";
- }
- .fa-plane:before {
- content: "\f072";
- }
- .fa-calendar:before {
- content: "\f073";
- }
- .fa-random:before {
- content: "\f074";
- }
- .fa-comment:before {
- content: "\f075";
- }
- .fa-magnet:before {
- content: "\f076";
- }
- .fa-chevron-up:before {
- content: "\f077";
- }
- .fa-chevron-down:before {
- content: "\f078";
- }
- .fa-retweet:before {
- content: "\f079";
- }
- .fa-shopping-cart:before {
- content: "\f07a";
- }
- .fa-folder:before {
- content: "\f07b";
- }
- .fa-folder-open:before {
- content: "\f07c";
- }
- .fa-arrows-v:before {
- content: "\f07d";
- }
- .fa-arrows-h:before {
- content: "\f07e";
- }
- .fa-bar-chart-o:before,
- .fa-bar-chart:before {
- content: "\f080";
- }
- .fa-twitter-square:before {
- content: "\f081";
- }
- .fa-facebook-square:before {
- content: "\f082";
- }
- .fa-camera-retro:before {
- content: "\f083";
- }
- .fa-key:before {
- content: "\f084";
- }
- .fa-gears:before,
- .fa-cogs:before {
- content: "\f085";
- }
- .fa-comments:before {
- content: "\f086";
- }
- .fa-thumbs-o-up:before {
- content: "\f087";
- }
- .fa-thumbs-o-down:before {
- content: "\f088";
- }
- .fa-star-half:before {
- content: "\f089";
- }
- .fa-heart-o:before {
- content: "\f08a";
- }
- .fa-sign-out:before {
- content: "\f08b";
- }
- .fa-linkedin-square:before {
- content: "\f08c";
- }
- .fa-thumb-tack:before {
- content: "\f08d";
- }
- .fa-external-link:before {
- content: "\f08e";
- }
- .fa-sign-in:before {
- content: "\f090";
- }
- .fa-trophy:before {
- content: "\f091";
- }
- .fa-github-square:before {
- content: "\f092";
- }
- .fa-upload:before {
- content: "\f093";
- }
- .fa-lemon-o:before {
- content: "\f094";
- }
- .fa-phone:before {
- content: "\f095";
- }
- .fa-square-o:before {
- content: "\f096";
- }
- .fa-bookmark-o:before {
- content: "\f097";
- }
- .fa-phone-square:before {
- content: "\f098";
- }
- .fa-twitter:before {
- content: "\f099";
- }
- .fa-facebook:before {
- content: "\f09a";
- }
- .fa-github:before {
- content: "\f09b";
- }
- .fa-unlock:before {
- content: "\f09c";
- }
- .fa-credit-card:before {
- content: "\f09d";
- }
- .fa-rss:before {
- content: "\f09e";
- }
- .fa-hdd-o:before {
- content: "\f0a0";
- }
- .fa-bullhorn:before {
- content: "\f0a1";
- }
- .fa-bell:before {
- content: "\f0f3";
- }
- .fa-certificate:before {
- content: "\f0a3";
- }
- .fa-hand-o-right:before {
- content: "\f0a4";
- }
- .fa-hand-o-left:before {
- content: "\f0a5";
- }
- .fa-hand-o-up:before {
- content: "\f0a6";
- }
- .fa-hand-o-down:before {
- content: "\f0a7";
- }
- .fa-arrow-circle-left:before {
- content: "\f0a8";
- }
- .fa-arrow-circle-right:before {
- content: "\f0a9";
- }
- .fa-arrow-circle-up:before {
- content: "\f0aa";
- }
- .fa-arrow-circle-down:before {
- content: "\f0ab";
- }
- .fa-globe:before {
- content: "\f0ac";
- }
- .fa-wrench:before {
- content: "\f0ad";
- }
- .fa-tasks:before {
- content: "\f0ae";
- }
- .fa-filter:before {
- content: "\f0b0";
- }
- .fa-briefcase:before {
- content: "\f0b1";
- }
- .fa-arrows-alt:before {
- content: "\f0b2";
- }
- .fa-group:before,
- .fa-users:before {
- content: "\f0c0";
- }
- .fa-chain:before,
- .fa-link:before {
- content: "\f0c1";
- }
- .fa-cloud:before {
- content: "\f0c2";
- }
- .fa-flask:before {
- content: "\f0c3";
- }
- .fa-cut:before,
- .fa-scissors:before {
- content: "\f0c4";
- }
- .fa-copy:before,
- .fa-files-o:before {
- content: "\f0c5";
- }
- .fa-paperclip:before {
- content: "\f0c6";
- }
- .fa-save:before,
- .fa-floppy-o:before {
- content: "\f0c7";
- }
- .fa-square:before {
- content: "\f0c8";
- }
- .fa-navicon:before,
- .fa-reorder:before,
- .fa-bars:before {
- content: "\f0c9";
- }
- .fa-list-ul:before {
- content: "\f0ca";
- }
- .fa-list-ol:before {
- content: "\f0cb";
- }
- .fa-strikethrough:before {
- content: "\f0cc";
- }
- .fa-underline:before {
- content: "\f0cd";
- }
- .fa-table:before {
- content: "\f0ce";
- }
- .fa-magic:before {
- content: "\f0d0";
- }
- .fa-truck:before {
- content: "\f0d1";
- }
- .fa-pinterest:before {
- content: "\f0d2";
- }
- .fa-pinterest-square:before {
- content: "\f0d3";
- }
- .fa-google-plus-square:before {
- content: "\f0d4";
- }
- .fa-google-plus:before {
- content: "\f0d5";
- }
- .fa-money:before {
- content: "\f0d6";
- }
- .fa-caret-down:before {
- content: "\f0d7";
- }
- .fa-caret-up:before {
- content: "\f0d8";
- }
- .fa-caret-left:before {
- content: "\f0d9";
- }
- .fa-caret-right:before {
- content: "\f0da";
- }
- .fa-columns:before {
- content: "\f0db";
- }
- .fa-unsorted:before,
- .fa-sort:before {
- content: "\f0dc";
- }
- .fa-sort-down:before,
- .fa-sort-desc:before {
- content: "\f0dd";
- }
- .fa-sort-up:before,
- .fa-sort-asc:before {
- content: "\f0de";
- }
- .fa-envelope:before {
- content: "\f0e0";
- }
- .fa-linkedin:before {
- content: "\f0e1";
- }
- .fa-rotate-left:before,
- .fa-undo:before {
- content: "\f0e2";
- }
- .fa-legal:before,
- .fa-gavel:before {
- content: "\f0e3";
- }
- .fa-dashboard:before,
- .fa-tachometer:before {
- content: "\f0e4";
- }
- .fa-comment-o:before {
- content: "\f0e5";
- }
- .fa-comments-o:before {
- content: "\f0e6";
- }
- .fa-flash:before,
- .fa-bolt:before {
- content: "\f0e7";
- }
- .fa-sitemap:before {
- content: "\f0e8";
- }
- .fa-umbrella:before {
- content: "\f0e9";
- }
- .fa-paste:before,
- .fa-clipboard:before {
- content: "\f0ea";
- }
- .fa-lightbulb-o:before {
- content: "\f0eb";
- }
- .fa-exchange:before {
- content: "\f0ec";
- }
- .fa-cloud-download:before {
- content: "\f0ed";
- }
- .fa-cloud-upload:before {
- content: "\f0ee";
- }
- .fa-user-md:before {
- content: "\f0f0";
- }
- .fa-stethoscope:before {
- content: "\f0f1";
- }
- .fa-suitcase:before {
- content: "\f0f2";
- }
- .fa-bell-o:before {
- content: "\f0a2";
- }
- .fa-coffee:before {
- content: "\f0f4";
- }
- .fa-cutlery:before {
- content: "\f0f5";
- }
- .fa-file-text-o:before {
- content: "\f0f6";
- }
- .fa-building-o:before {
- content: "\f0f7";
- }
- .fa-hospital-o:before {
- content: "\f0f8";
- }
- .fa-ambulance:before {
- content: "\f0f9";
- }
- .fa-medkit:before {
- content: "\f0fa";
- }
- .fa-fighter-jet:before {
- content: "\f0fb";
- }
- .fa-beer:before {
- content: "\f0fc";
- }
- .fa-h-square:before {
- content: "\f0fd";
- }
- .fa-plus-square:before {
- content: "\f0fe";
- }
- .fa-angle-double-left:before {
- content: "\f100";
- }
- .fa-angle-double-right:before {
- content: "\f101";
- }
- .fa-angle-double-up:before {
- content: "\f102";
- }
- .fa-angle-double-down:before {
- content: "\f103";
- }
- .fa-angle-left:before {
- content: "\f104";
- }
- .fa-angle-right:before {
- content: "\f105";
- }
- .fa-angle-up:before {
- content: "\f106";
- }
- .fa-angle-down:before {
- content: "\f107";
- }
- .fa-desktop:before {
- content: "\f108";
- }
- .fa-laptop:before {
- content: "\f109";
- }
- .fa-tablet:before {
- content: "\f10a";
- }
- .fa-mobile-phone:before,
- .fa-mobile:before {
- content: "\f10b";
- }
- .fa-circle-o:before {
- content: "\f10c";
- }
- .fa-quote-left:before {
- content: "\f10d";
- }
- .fa-quote-right:before {
- content: "\f10e";
- }
- .fa-spinner:before {
- content: "\f110";
- }
- .fa-circle:before {
- content: "\f111";
- }
- .fa-mail-reply:before,
- .fa-reply:before {
- content: "\f112";
- }
- .fa-github-alt:before {
- content: "\f113";
- }
- .fa-folder-o:before {
- content: "\f114";
- }
- .fa-folder-open-o:before {
- content: "\f115";
- }
- .fa-smile-o:before {
- content: "\f118";
- }
- .fa-frown-o:before {
- content: "\f119";
- }
- .fa-meh-o:before {
- content: "\f11a";
- }
- .fa-gamepad:before {
- content: "\f11b";
- }
- .fa-keyboard-o:before {
- content: "\f11c";
- }
- .fa-flag-o:before {
- content: "\f11d";
- }
- .fa-flag-checkered:before {
- content: "\f11e";
- }
- .fa-terminal:before {
- content: "\f120";
- }
- .fa-code:before {
- content: "\f121";
- }
- .fa-mail-reply-all:before,
- .fa-reply-all:before {
- content: "\f122";
- }
- .fa-star-half-empty:before,
- .fa-star-half-full:before,
- .fa-star-half-o:before {
- content: "\f123";
- }
- .fa-location-arrow:before {
- content: "\f124";
- }
- .fa-crop:before {
- content: "\f125";
- }
- .fa-code-fork:before {
- content: "\f126";
- }
- .fa-unlink:before,
- .fa-chain-broken:before {
- content: "\f127";
- }
- .fa-question:before {
- content: "\f128";
- }
- .fa-info:before {
- content: "\f129";
- }
- .fa-exclamation:before {
- content: "\f12a";
- }
- .fa-superscript:before {
- content: "\f12b";
- }
- .fa-subscript:before {
- content: "\f12c";
- }
- .fa-eraser:before {
- content: "\f12d";
- }
- .fa-puzzle-piece:before {
- content: "\f12e";
- }
- .fa-microphone:before {
- content: "\f130";
- }
- .fa-microphone-slash:before {
- content: "\f131";
- }
- .fa-shield:before {
- content: "\f132";
- }
- .fa-calendar-o:before {
- content: "\f133";
- }
- .fa-fire-extinguisher:before {
- content: "\f134";
- }
- .fa-rocket:before {
- content: "\f135";
- }
- .fa-maxcdn:before {
- content: "\f136";
- }
- .fa-chevron-circle-left:before {
- content: "\f137";
- }
- .fa-chevron-circle-right:before {
- content: "\f138";
- }
- .fa-chevron-circle-up:before {
- content: "\f139";
- }
- .fa-chevron-circle-down:before {
- content: "\f13a";
- }
- .fa-html5:before {
- content: "\f13b";
- }
- .fa-css3:before {
- content: "\f13c";
- }
- .fa-anchor:before {
- content: "\f13d";
- }
- .fa-unlock-alt:before {
- content: "\f13e";
- }
- .fa-bullseye:before {
- content: "\f140";
- }
- .fa-ellipsis-h:before {
- content: "\f141";
- }
- .fa-ellipsis-v:before {
- content: "\f142";
- }
- .fa-rss-square:before {
- content: "\f143";
- }
- .fa-play-circle:before {
- content: "\f144";
- }
- .fa-ticket:before {
- content: "\f145";
- }
- .fa-minus-square:before {
- content: "\f146";
- }
- .fa-minus-square-o:before {
- content: "\f147";
- }
- .fa-level-up:before {
- content: "\f148";
- }
- .fa-level-down:before {
- content: "\f149";
- }
- .fa-check-square:before {
- content: "\f14a";
- }
- .fa-pencil-square:before {
- content: "\f14b";
- }
- .fa-external-link-square:before {
- content: "\f14c";
- }
- .fa-share-square:before {
- content: "\f14d";
- }
- .fa-compass:before {
- content: "\f14e";
- }
- .fa-toggle-down:before,
- .fa-caret-square-o-down:before {
- content: "\f150";
- }
- .fa-toggle-up:before,
- .fa-caret-square-o-up:before {
- content: "\f151";
- }
- .fa-toggle-right:before,
- .fa-caret-square-o-right:before {
- content: "\f152";
- }
- .fa-euro:before,
- .fa-eur:before {
- content: "\f153";
- }
- .fa-gbp:before {
- content: "\f154";
- }
- .fa-dollar:before,
- .fa-usd:before {
- content: "\f155";
- }
- .fa-rupee:before,
- .fa-inr:before {
- content: "\f156";
- }
- .fa-cny:before,
- .fa-rmb:before,
- .fa-yen:before,
- .fa-jpy:before {
- content: "\f157";
- }
- .fa-ruble:before,
- .fa-rouble:before,
- .fa-rub:before {
- content: "\f158";
- }
- .fa-won:before,
- .fa-krw:before {
- content: "\f159";
- }
- .fa-bitcoin:before,
- .fa-btc:before {
- content: "\f15a";
- }
- .fa-file:before {
- content: "\f15b";
- }
- .fa-file-text:before {
- content: "\f15c";
- }
- .fa-sort-alpha-asc:before {
- content: "\f15d";
- }
- .fa-sort-alpha-desc:before {
- content: "\f15e";
- }
- .fa-sort-amount-asc:before {
- content: "\f160";
- }
- .fa-sort-amount-desc:before {
- content: "\f161";
- }
- .fa-sort-numeric-asc:before {
- content: "\f162";
- }
- .fa-sort-numeric-desc:before {
- content: "\f163";
- }
- .fa-thumbs-up:before {
- content: "\f164";
- }
- .fa-thumbs-down:before {
- content: "\f165";
- }
- .fa-youtube-square:before {
- content: "\f166";
- }
- .fa-youtube:before {
- content: "\f167";
- }
- .fa-xing:before {
- content: "\f168";
- }
- .fa-xing-square:before {
- content: "\f169";
- }
- .fa-youtube-play:before {
- content: "\f16a";
- }
- .fa-dropbox:before {
- content: "\f16b";
- }
- .fa-stack-overflow:before {
- content: "\f16c";
- }
- .fa-instagram:before {
- content: "\f16d";
- }
- .fa-flickr:before {
- content: "\f16e";
- }
- .fa-adn:before {
- content: "\f170";
- }
- .fa-bitbucket:before {
- content: "\f171";
- }
- .fa-bitbucket-square:before {
- content: "\f172";
- }
- .fa-tumblr:before {
- content: "\f173";
- }
- .fa-tumblr-square:before {
- content: "\f174";
- }
- .fa-long-arrow-down:before {
- content: "\f175";
- }
- .fa-long-arrow-up:before {
- content: "\f176";
- }
- .fa-long-arrow-left:before {
- content: "\f177";
- }
- .fa-long-arrow-right:before {
- content: "\f178";
- }
- .fa-apple:before {
- content: "\f179";
- }
- .fa-windows:before {
- content: "\f17a";
- }
- .fa-android:before {
- content: "\f17b";
- }
- .fa-linux:before {
- content: "\f17c";
- }
- .fa-dribbble:before {
- content: "\f17d";
- }
- .fa-skype:before {
- content: "\f17e";
- }
- .fa-foursquare:before {
- content: "\f180";
- }
- .fa-trello:before {
- content: "\f181";
- }
- .fa-female:before {
- content: "\f182";
- }
- .fa-male:before {
- content: "\f183";
- }
- .fa-gittip:before {
- content: "\f184";
- }
- .fa-sun-o:before {
- content: "\f185";
- }
- .fa-moon-o:before {
- content: "\f186";
- }
- .fa-archive:before {
- content: "\f187";
- }
- .fa-bug:before {
- content: "\f188";
- }
- .fa-vk:before {
- content: "\f189";
- }
- .fa-weibo:before {
- content: "\f18a";
- }
- .fa-renren:before {
- content: "\f18b";
- }
- .fa-pagelines:before {
- content: "\f18c";
- }
- .fa-stack-exchange:before {
- content: "\f18d";
- }
- .fa-arrow-circle-o-right:before {
- content: "\f18e";
- }
- .fa-arrow-circle-o-left:before {
- content: "\f190";
- }
- .fa-toggle-left:before,
- .fa-caret-square-o-left:before {
- content: "\f191";
- }
- .fa-dot-circle-o:before {
- content: "\f192";
- }
- .fa-wheelchair:before {
- content: "\f193";
- }
- .fa-vimeo-square:before {
- content: "\f194";
- }
- .fa-turkish-lira:before,
- .fa-try:before {
- content: "\f195";
- }
- .fa-plus-square-o:before {
- content: "\f196";
- }
- .fa-space-shuttle:before {
- content: "\f197";
- }
- .fa-slack:before {
- content: "\f198";
- }
- .fa-envelope-square:before {
- content: "\f199";
- }
- .fa-wordpress:before {
- content: "\f19a";
- }
- .fa-openid:before {
- content: "\f19b";
- }
- .fa-institution:before,
- .fa-bank:before,
- .fa-university:before {
- content: "\f19c";
- }
- .fa-mortar-board:before,
- .fa-graduation-cap:before {
- content: "\f19d";
- }
- .fa-yahoo:before {
- content: "\f19e";
- }
- .fa-google:before {
- content: "\f1a0";
- }
- .fa-reddit:before {
- content: "\f1a1";
- }
- .fa-reddit-square:before {
- content: "\f1a2";
- }
- .fa-stumbleupon-circle:before {
- content: "\f1a3";
- }
- .fa-stumbleupon:before {
- content: "\f1a4";
- }
- .fa-delicious:before {
- content: "\f1a5";
- }
- .fa-digg:before {
- content: "\f1a6";
- }
- .fa-pied-piper:before {
- content: "\f1a7";
- }
- .fa-pied-piper-alt:before {
- content: "\f1a8";
- }
- .fa-drupal:before {
- content: "\f1a9";
- }
- .fa-joomla:before {
- content: "\f1aa";
- }
- .fa-language:before {
- content: "\f1ab";
- }
- .fa-fax:before {
- content: "\f1ac";
- }
- .fa-building:before {
- content: "\f1ad";
- }
- .fa-child:before {
- content: "\f1ae";
- }
- .fa-paw:before {
- content: "\f1b0";
- }
- .fa-spoon:before {
- content: "\f1b1";
- }
- .fa-cube:before {
- content: "\f1b2";
- }
- .fa-cubes:before {
- content: "\f1b3";
- }
- .fa-behance:before {
- content: "\f1b4";
- }
- .fa-behance-square:before {
- content: "\f1b5";
- }
- .fa-steam:before {
- content: "\f1b6";
- }
- .fa-steam-square:before {
- content: "\f1b7";
- }
- .fa-recycle:before {
- content: "\f1b8";
- }
- .fa-automobile:before,
- .fa-car:before {
- content: "\f1b9";
- }
- .fa-cab:before,
- .fa-taxi:before {
- content: "\f1ba";
- }
- .fa-tree:before {
- content: "\f1bb";
- }
- .fa-spotify:before {
- content: "\f1bc";
- }
- .fa-deviantart:before {
- content: "\f1bd";
- }
- .fa-soundcloud:before {
- content: "\f1be";
- }
- .fa-database:before {
- content: "\f1c0";
- }
- .fa-file-pdf-o:before {
- content: "\f1c1";
- }
- .fa-file-word-o:before {
- content: "\f1c2";
- }
- .fa-file-excel-o:before {
- content: "\f1c3";
- }
- .fa-file-powerpoint-o:before {
- content: "\f1c4";
- }
- .fa-file-photo-o:before,
- .fa-file-picture-o:before,
- .fa-file-image-o:before {
- content: "\f1c5";
- }
- .fa-file-zip-o:before,
- .fa-file-archive-o:before {
- content: "\f1c6";
- }
- .fa-file-sound-o:before,
- .fa-file-audio-o:before {
- content: "\f1c7";
- }
- .fa-file-movie-o:before,
- .fa-file-video-o:before {
- content: "\f1c8";
- }
- .fa-file-code-o:before {
- content: "\f1c9";
- }
- .fa-vine:before {
- content: "\f1ca";
- }
- .fa-codepen:before {
- content: "\f1cb";
- }
- .fa-jsfiddle:before {
- content: "\f1cc";
- }
- .fa-life-bouy:before,
- .fa-life-buoy:before,
- .fa-life-saver:before,
- .fa-support:before,
- .fa-life-ring:before {
- content: "\f1cd";
- }
- .fa-circle-o-notch:before {
- content: "\f1ce";
- }
- .fa-ra:before,
- .fa-rebel:before {
- content: "\f1d0";
- }
- .fa-ge:before,
- .fa-empire:before {
- content: "\f1d1";
- }
- .fa-git-square:before {
- content: "\f1d2";
- }
- .fa-git:before {
- content: "\f1d3";
- }
- .fa-hacker-news:before {
- content: "\f1d4";
- }
- .fa-tencent-weibo:before {
- content: "\f1d5";
- }
- .fa-qq:before {
- content: "\f1d6";
- }
- .fa-wechat:before,
- .fa-weixin:before {
- content: "\f1d7";
- }
- .fa-send:before,
- .fa-paper-plane:before {
- content: "\f1d8";
- }
- .fa-send-o:before,
- .fa-paper-plane-o:before {
- content: "\f1d9";
- }
- .fa-history:before {
- content: "\f1da";
- }
- .fa-circle-thin:before {
- content: "\f1db";
- }
- .fa-header:before {
- content: "\f1dc";
- }
- .fa-paragraph:before {
- content: "\f1dd";
- }
- .fa-sliders:before {
- content: "\f1de";
- }
- .fa-share-alt:before {
- content: "\f1e0";
- }
- .fa-share-alt-square:before {
- content: "\f1e1";
- }
- .fa-bomb:before {
- content: "\f1e2";
- }
- .fa-soccer-ball-o:before,
- .fa-futbol-o:before {
- content: "\f1e3";
- }
- .fa-tty:before {
- content: "\f1e4";
- }
- .fa-binoculars:before {
- content: "\f1e5";
- }
- .fa-plug:before {
- content: "\f1e6";
- }
- .fa-slideshare:before {
- content: "\f1e7";
- }
- .fa-twitch:before {
- content: "\f1e8";
- }
- .fa-yelp:before {
- content: "\f1e9";
- }
- .fa-newspaper-o:before {
- content: "\f1ea";
- }
- .fa-wifi:before {
- content: "\f1eb";
- }
- .fa-calculator:before {
- content: "\f1ec";
- }
- .fa-paypal:before {
- content: "\f1ed";
- }
- .fa-google-wallet:before {
- content: "\f1ee";
- }
- .fa-cc-visa:before {
- content: "\f1f0";
- }
- .fa-cc-mastercard:before {
- content: "\f1f1";
- }
- .fa-cc-discover:before {
- content: "\f1f2";
- }
- .fa-cc-amex:before {
- content: "\f1f3";
- }
- .fa-cc-paypal:before {
- content: "\f1f4";
- }
- .fa-cc-stripe:before {
- content: "\f1f5";
- }
- .fa-bell-slash:before {
- content: "\f1f6";
- }
- .fa-bell-slash-o:before {
- content: "\f1f7";
- }
- .fa-trash:before {
- content: "\f1f8";
- }
- .fa-copyright:before {
- content: "\f1f9";
- }
- .fa-at:before {
- content: "\f1fa";
- }
- .fa-eyedropper:before {
- content: "\f1fb";
- }
- .fa-paint-brush:before {
- content: "\f1fc";
- }
- .fa-birthday-cake:before {
- content: "\f1fd";
- }
- .fa-area-chart:before {
- content: "\f1fe";
- }
- .fa-pie-chart:before {
- content: "\f200";
- }
- .fa-line-chart:before {
- content: "\f201";
- }
- .fa-lastfm:before {
- content: "\f202";
- }
- .fa-lastfm-square:before {
- content: "\f203";
- }
- .fa-toggle-off:before {
- content: "\f204";
- }
- .fa-toggle-on:before {
- content: "\f205";
- }
- .fa-bicycle:before {
- content: "\f206";
- }
- .fa-bus:before {
- content: "\f207";
- }
- .fa-ioxhost:before {
- content: "\f208";
- }
- .fa-angellist:before {
- content: "\f209";
- }
- .fa-cc:before {
- content: "\f20a";
- }
- .fa-shekel:before,
- .fa-sheqel:before,
- .fa-ils:before {
- content: "\f20b";
- }
- .fa-meanpath:before {
- content: "\f20c";
- }
- /*!
- *
- * IPython base
- *
- */
- .modal.fade .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
- }
- code {
- color: #000;
- }
- pre {
- font-size: inherit;
- line-height: inherit;
- }
- label {
- font-weight: normal;
- }
- /* Make the page background atleast 100% the height of the view port */
- /* Make the page itself atleast 70% the height of the view port */
- .border-box-sizing {
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- .corner-all {
- border-radius: 2px;
- }
- .no-padding {
- padding: 0px;
- }
- /* Flexible box model classes */
- /* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
- /* This file is a compatability layer. It allows the usage of flexible box
- model layouts accross multiple browsers, including older browsers. The newest,
- universal implementation of the flexible box model is used when available (see
- `Modern browsers` comments below). Browsers that are known to implement this
- new spec completely include:
-
- Firefox 28.0+
- Chrome 29.0+
- Internet Explorer 11+
- Opera 17.0+
-
- Browsers not listed, including Safari, are supported via the styling under the
- `Old browsers` comments below.
- */
- .hbox {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- .hbox > * {
- /* Old browsers */
- -webkit-box-flex: 0;
- -moz-box-flex: 0;
- box-flex: 0;
- /* Modern browsers */
- flex: none;
- }
- .vbox {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- .vbox > * {
- /* Old browsers */
- -webkit-box-flex: 0;
- -moz-box-flex: 0;
- box-flex: 0;
- /* Modern browsers */
- flex: none;
- }
- .hbox.reverse,
- .vbox.reverse,
- .reverse {
- /* Old browsers */
- -webkit-box-direction: reverse;
- -moz-box-direction: reverse;
- box-direction: reverse;
- /* Modern browsers */
- flex-direction: row-reverse;
- }
- .hbox.box-flex0,
- .vbox.box-flex0,
- .box-flex0 {
- /* Old browsers */
- -webkit-box-flex: 0;
- -moz-box-flex: 0;
- box-flex: 0;
- /* Modern browsers */
- flex: none;
- width: auto;
- }
- .hbox.box-flex1,
- .vbox.box-flex1,
- .box-flex1 {
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- .hbox.box-flex,
- .vbox.box-flex,
- .box-flex {
- /* Old browsers */
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- .hbox.box-flex2,
- .vbox.box-flex2,
- .box-flex2 {
- /* Old browsers */
- -webkit-box-flex: 2;
- -moz-box-flex: 2;
- box-flex: 2;
- /* Modern browsers */
- flex: 2;
- }
- .box-group1 {
- /* Deprecated */
- -webkit-box-flex-group: 1;
- -moz-box-flex-group: 1;
- box-flex-group: 1;
- }
- .box-group2 {
- /* Deprecated */
- -webkit-box-flex-group: 2;
- -moz-box-flex-group: 2;
- box-flex-group: 2;
- }
- .hbox.start,
- .vbox.start,
- .start {
- /* Old browsers */
- -webkit-box-pack: start;
- -moz-box-pack: start;
- box-pack: start;
- /* Modern browsers */
- justify-content: flex-start;
- }
- .hbox.end,
- .vbox.end,
- .end {
- /* Old browsers */
- -webkit-box-pack: end;
- -moz-box-pack: end;
- box-pack: end;
- /* Modern browsers */
- justify-content: flex-end;
- }
- .hbox.center,
- .vbox.center,
- .center {
- /* Old browsers */
- -webkit-box-pack: center;
- -moz-box-pack: center;
- box-pack: center;
- /* Modern browsers */
- justify-content: center;
- }
- .hbox.baseline,
- .vbox.baseline,
- .baseline {
- /* Old browsers */
- -webkit-box-pack: baseline;
- -moz-box-pack: baseline;
- box-pack: baseline;
- /* Modern browsers */
- justify-content: baseline;
- }
- .hbox.stretch,
- .vbox.stretch,
- .stretch {
- /* Old browsers */
- -webkit-box-pack: stretch;
- -moz-box-pack: stretch;
- box-pack: stretch;
- /* Modern browsers */
- justify-content: stretch;
- }
- .hbox.align-start,
- .vbox.align-start,
- .align-start {
- /* Old browsers */
- -webkit-box-align: start;
- -moz-box-align: start;
- box-align: start;
- /* Modern browsers */
- align-items: flex-start;
- }
- .hbox.align-end,
- .vbox.align-end,
- .align-end {
- /* Old browsers */
- -webkit-box-align: end;
- -moz-box-align: end;
- box-align: end;
- /* Modern browsers */
- align-items: flex-end;
- }
- .hbox.align-center,
- .vbox.align-center,
- .align-center {
- /* Old browsers */
- -webkit-box-align: center;
- -moz-box-align: center;
- box-align: center;
- /* Modern browsers */
- align-items: center;
- }
- .hbox.align-baseline,
- .vbox.align-baseline,
- .align-baseline {
- /* Old browsers */
- -webkit-box-align: baseline;
- -moz-box-align: baseline;
- box-align: baseline;
- /* Modern browsers */
- align-items: baseline;
- }
- .hbox.align-stretch,
- .vbox.align-stretch,
- .align-stretch {
- /* Old browsers */
- -webkit-box-align: stretch;
- -moz-box-align: stretch;
- box-align: stretch;
- /* Modern browsers */
- align-items: stretch;
- }
- div.error {
- margin: 2em;
- text-align: center;
- }
- div.error > h1 {
- font-size: 500%;
- line-height: normal;
- }
- div.error > p {
- font-size: 200%;
- line-height: normal;
- }
- div.traceback-wrapper {
- text-align: left;
- max-width: 800px;
- margin: auto;
- }
- /**
- * Primary styles
- *
- * Author: Jupyter Development Team
- */
- body {
- background-color: #fff;
- /* This makes sure that the body covers the entire window and needs to
- be in a different element than the display: box in wrapper below */
- position: absolute;
- left: 0px;
- right: 0px;
- top: 0px;
- bottom: 0px;
- overflow: visible;
- }
- body > #header {
- /* Initially hidden to prevent FLOUC */
- display: none;
- background-color: #fff;
- /* Display over codemirror */
- position: relative;
- z-index: 100;
- }
- body > #header #header-container {
- padding-bottom: 5px;
- padding-top: 5px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- body > #header .header-bar {
- width: 100%;
- height: 1px;
- background: #e7e7e7;
- margin-bottom: -1px;
- }
- @media print {
- body > #header {
- display: none !important;
- }
- }
- #header-spacer {
- width: 100%;
- visibility: hidden;
- }
- @media print {
- #header-spacer {
- display: none;
- }
- }
- #ipython_notebook {
- padding-left: 0px;
- padding-top: 1px;
- padding-bottom: 1px;
- }
- @media (max-width: 991px) {
- #ipython_notebook {
- margin-left: 10px;
- }
- }
- #noscript {
- width: auto;
- padding-top: 16px;
- padding-bottom: 16px;
- text-align: center;
- font-size: 22px;
- color: red;
- font-weight: bold;
- }
- #ipython_notebook img {
- height: 28px;
- }
- #site {
- width: 100%;
- display: none;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- overflow: auto;
- }
- @media print {
- #site {
- height: auto !important;
- }
- }
- /* Smaller buttons */
- .ui-button .ui-button-text {
- padding: 0.2em 0.8em;
- font-size: 77%;
- }
- input.ui-button {
- padding: 0.3em 0.9em;
- }
- span#login_widget {
- float: right;
- }
- span#login_widget > .button,
- #logout {
- color: #333;
- background-color: #fff;
- border-color: #ccc;
- }
- span#login_widget > .button:focus,
- #logout:focus,
- span#login_widget > .button.focus,
- #logout.focus {
- color: #333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
- }
- span#login_widget > .button:hover,
- #logout:hover {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- span#login_widget > .button:active,
- #logout:active,
- span#login_widget > .button.active,
- #logout.active,
- .open > .dropdown-togglespan#login_widget > .button,
- .open > .dropdown-toggle#logout {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- span#login_widget > .button:active:hover,
- #logout:active:hover,
- span#login_widget > .button.active:hover,
- #logout.active:hover,
- .open > .dropdown-togglespan#login_widget > .button:hover,
- .open > .dropdown-toggle#logout:hover,
- span#login_widget > .button:active:focus,
- #logout:active:focus,
- span#login_widget > .button.active:focus,
- #logout.active:focus,
- .open > .dropdown-togglespan#login_widget > .button:focus,
- .open > .dropdown-toggle#logout:focus,
- span#login_widget > .button:active.focus,
- #logout:active.focus,
- span#login_widget > .button.active.focus,
- #logout.active.focus,
- .open > .dropdown-togglespan#login_widget > .button.focus,
- .open > .dropdown-toggle#logout.focus {
- color: #333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
- }
- span#login_widget > .button:active,
- #logout:active,
- span#login_widget > .button.active,
- #logout.active,
- .open > .dropdown-togglespan#login_widget > .button,
- .open > .dropdown-toggle#logout {
- background-image: none;
- }
- span#login_widget > .button.disabled:hover,
- #logout.disabled:hover,
- span#login_widget > .button[disabled]:hover,
- #logout[disabled]:hover,
- fieldset[disabled] span#login_widget > .button:hover,
- fieldset[disabled] #logout:hover,
- span#login_widget > .button.disabled:focus,
- #logout.disabled:focus,
- span#login_widget > .button[disabled]:focus,
- #logout[disabled]:focus,
- fieldset[disabled] span#login_widget > .button:focus,
- fieldset[disabled] #logout:focus,
- span#login_widget > .button.disabled.focus,
- #logout.disabled.focus,
- span#login_widget > .button[disabled].focus,
- #logout[disabled].focus,
- fieldset[disabled] span#login_widget > .button.focus,
- fieldset[disabled] #logout.focus {
- background-color: #fff;
- border-color: #ccc;
- }
- span#login_widget > .button .badge,
- #logout .badge {
- color: #fff;
- background-color: #333;
- }
- .nav-header {
- text-transform: none;
- }
- #header > span {
- margin-top: 10px;
- }
- .modal_stretch .modal-dialog {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- min-height: 80vh;
- }
- .modal_stretch .modal-dialog .modal-body {
- max-height: calc(100vh - 200px);
- overflow: auto;
- flex: 1;
- }
- @media (min-width: 768px) {
- .modal .modal-dialog {
- width: 700px;
- }
- }
- @media (min-width: 768px) {
- select.form-control {
- margin-left: 12px;
- margin-right: 12px;
- }
- }
- /*!
- *
- * IPython auth
- *
- */
- .center-nav {
- display: inline-block;
- margin-bottom: -4px;
- }
- /*!
- *
- * IPython tree view
- *
- */
- /* We need an invisible input field on top of the sentense*/
- /* "Drag file onto the list ..." */
- .alternate_upload {
- background-color: none;
- display: inline;
- }
- .alternate_upload.form {
- padding: 0;
- margin: 0;
- }
- .alternate_upload input.fileinput {
- text-align: center;
- vertical-align: middle;
- display: inline;
- opacity: 0;
- z-index: 2;
- width: 12ex;
- margin-right: -12ex;
- }
- .alternate_upload .btn-upload {
- height: 22px;
- }
- /**
- * Primary styles
- *
- * Author: Jupyter Development Team
- */
- ul#tabs {
- margin-bottom: 4px;
- }
- ul#tabs a {
- padding-top: 6px;
- padding-bottom: 4px;
- }
- ul.breadcrumb a:focus,
- ul.breadcrumb a:hover {
- text-decoration: none;
- }
- ul.breadcrumb i.icon-home {
- font-size: 16px;
- margin-right: 4px;
- }
- ul.breadcrumb span {
- color: #5e5e5e;
- }
- .list_toolbar {
- padding: 4px 0 4px 0;
- vertical-align: middle;
- }
- .list_toolbar .tree-buttons {
- padding-top: 1px;
- }
- .dynamic-buttons {
- padding-top: 3px;
- display: inline-block;
- }
- .list_toolbar [class*="span"] {
- min-height: 24px;
- }
- .list_header {
- font-weight: bold;
- background-color: #EEE;
- }
- .list_placeholder {
- font-weight: bold;
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 7px;
- padding-right: 7px;
- }
- .list_container {
- margin-top: 4px;
- margin-bottom: 20px;
- border: 1px solid #ddd;
- border-radius: 2px;
- }
- .list_container > div {
- border-bottom: 1px solid #ddd;
- }
- .list_container > div:hover .list-item {
- background-color: red;
- }
- .list_container > div:last-child {
- border: none;
- }
- .list_item:hover .list_item {
- background-color: #ddd;
- }
- .list_item a {
- text-decoration: none;
- }
- .list_item:hover {
- background-color: #fafafa;
- }
- .list_header > div,
- .list_item > div {
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 7px;
- padding-right: 7px;
- line-height: 22px;
- }
- .list_header > div input,
- .list_item > div input {
- margin-right: 7px;
- margin-left: 14px;
- vertical-align: baseline;
- line-height: 22px;
- position: relative;
- top: -1px;
- }
- .list_header > div .item_link,
- .list_item > div .item_link {
- margin-left: -1px;
- vertical-align: baseline;
- line-height: 22px;
- }
- .new-file input[type=checkbox] {
- visibility: hidden;
- }
- .item_name {
- line-height: 22px;
- height: 24px;
- }
- .item_icon {
- font-size: 14px;
- color: #5e5e5e;
- margin-right: 7px;
- margin-left: 7px;
- line-height: 22px;
- vertical-align: baseline;
- }
- .item_buttons {
- line-height: 1em;
- margin-left: -5px;
- }
- .item_buttons .btn,
- .item_buttons .btn-group,
- .item_buttons .input-group {
- float: left;
- }
- .item_buttons > .btn,
- .item_buttons > .btn-group,
- .item_buttons > .input-group {
- margin-left: 5px;
- }
- .item_buttons .btn {
- min-width: 13ex;
- }
- .item_buttons .running-indicator {
- padding-top: 4px;
- color: #5cb85c;
- }
- .item_buttons .kernel-name {
- padding-top: 4px;
- color: #5bc0de;
- margin-right: 7px;
- float: left;
- }
- .toolbar_info {
- height: 24px;
- line-height: 24px;
- }
- .list_item input:not([type=checkbox]) {
- padding-top: 3px;
- padding-bottom: 3px;
- height: 22px;
- line-height: 14px;
- margin: 0px;
- }
- .highlight_text {
- color: blue;
- }
- #project_name {
- display: inline-block;
- padding-left: 7px;
- margin-left: -2px;
- }
- #project_name > .breadcrumb {
- padding: 0px;
- margin-bottom: 0px;
- background-color: transparent;
- font-weight: bold;
- }
- #tree-selector {
- padding-right: 0px;
- }
- #button-select-all {
- min-width: 50px;
- }
- #select-all {
- margin-left: 7px;
- margin-right: 2px;
- }
- .menu_icon {
- margin-right: 2px;
- }
- .tab-content .row {
- margin-left: 0px;
- margin-right: 0px;
- }
- .folder_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f114";
- }
- .folder_icon:before.pull-left {
- margin-right: .3em;
- }
- .folder_icon:before.pull-right {
- margin-left: .3em;
- }
- .notebook_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f02d";
- position: relative;
- top: -1px;
- }
- .notebook_icon:before.pull-left {
- margin-right: .3em;
- }
- .notebook_icon:before.pull-right {
- margin-left: .3em;
- }
- .running_notebook_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f02d";
- position: relative;
- top: -1px;
- color: #5cb85c;
- }
- .running_notebook_icon:before.pull-left {
- margin-right: .3em;
- }
- .running_notebook_icon:before.pull-right {
- margin-left: .3em;
- }
- .file_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f016";
- position: relative;
- top: -2px;
- }
- .file_icon:before.pull-left {
- margin-right: .3em;
- }
- .file_icon:before.pull-right {
- margin-left: .3em;
- }
- #notebook_toolbar .pull-right {
- padding-top: 0px;
- margin-right: -1px;
- }
- ul#new-menu {
- left: auto;
- right: 0;
- }
- .kernel-menu-icon {
- padding-right: 12px;
- width: 24px;
- content: "\f096";
- }
- .kernel-menu-icon:before {
- content: "\f096";
- }
- .kernel-menu-icon-current:before {
- content: "\f00c";
- }
- #tab_content {
- padding-top: 20px;
- }
- #running .panel-group .panel {
- margin-top: 3px;
- margin-bottom: 1em;
- }
- #running .panel-group .panel .panel-heading {
- background-color: #EEE;
- padding-top: 4px;
- padding-bottom: 4px;
- padding-left: 7px;
- padding-right: 7px;
- line-height: 22px;
- }
- #running .panel-group .panel .panel-heading a:focus,
- #running .panel-group .panel .panel-heading a:hover {
- text-decoration: none;
- }
- #running .panel-group .panel .panel-body {
- padding: 0px;
- }
- #running .panel-group .panel .panel-body .list_container {
- margin-top: 0px;
- margin-bottom: 0px;
- border: 0px;
- border-radius: 0px;
- }
- #running .panel-group .panel .panel-body .list_container .list_item {
- border-bottom: 1px solid #ddd;
- }
- #running .panel-group .panel .panel-body .list_container .list_item:last-child {
- border-bottom: 0px;
- }
- .delete-button {
- display: none;
- }
- .duplicate-button {
- display: none;
- }
- .rename-button {
- display: none;
- }
- .shutdown-button {
- display: none;
- }
- .dynamic-instructions {
- display: inline-block;
- padding-top: 4px;
- }
- /*!
- *
- * IPython text editor webapp
- *
- */
- .selected-keymap i.fa {
- padding: 0px 5px;
- }
- .selected-keymap i.fa:before {
- content: "\f00c";
- }
- #mode-menu {
- overflow: auto;
- max-height: 20em;
- }
- .edit_app #header {
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- .edit_app #menubar .navbar {
- /* Use a negative 1 bottom margin, so the border overlaps the border of the
- header */
- margin-bottom: -1px;
- }
- .dirty-indicator {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 20px;
- }
- .dirty-indicator.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator.pull-right {
- margin-left: .3em;
- }
- .dirty-indicator-dirty {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 20px;
- }
- .dirty-indicator-dirty.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator-dirty.pull-right {
- margin-left: .3em;
- }
- .dirty-indicator-clean {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- width: 20px;
- }
- .dirty-indicator-clean.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator-clean.pull-right {
- margin-left: .3em;
- }
- .dirty-indicator-clean:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f00c";
- }
- .dirty-indicator-clean:before.pull-left {
- margin-right: .3em;
- }
- .dirty-indicator-clean:before.pull-right {
- margin-left: .3em;
- }
- #filename {
- font-size: 16pt;
- display: table;
- padding: 0px 5px;
- }
- #current-mode {
- padding-left: 5px;
- padding-right: 5px;
- }
- #texteditor-backdrop {
- padding-top: 20px;
- padding-bottom: 20px;
- }
- @media not print {
- #texteditor-backdrop {
- background-color: #EEE;
- }
- }
- @media print {
- #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
- #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
- background-color: #fff;
- }
- }
- @media not print {
- #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
- #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
- background-color: #fff;
- }
- }
- @media not print {
- #texteditor-backdrop #texteditor-container {
- padding: 0px;
- background-color: #fff;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- }
- /*!
- *
- * IPython notebook
- *
- */
- /* CSS font colors for translated ANSI colors. */
- .ansibold {
- font-weight: bold;
- }
- /* use dark versions for foreground, to improve visibility */
- .ansiblack {
- color: black;
- }
- .ansired {
- color: darkred;
- }
- .ansigreen {
- color: darkgreen;
- }
- .ansiyellow {
- color: #c4a000;
- }
- .ansiblue {
- color: darkblue;
- }
- .ansipurple {
- color: darkviolet;
- }
- .ansicyan {
- color: steelblue;
- }
- .ansigray {
- color: gray;
- }
- /* and light for background, for the same reason */
- .ansibgblack {
- background-color: black;
- }
- .ansibgred {
- background-color: red;
- }
- .ansibggreen {
- background-color: green;
- }
- .ansibgyellow {
- background-color: yellow;
- }
- .ansibgblue {
- background-color: blue;
- }
- .ansibgpurple {
- background-color: magenta;
- }
- .ansibgcyan {
- background-color: cyan;
- }
- .ansibggray {
- background-color: gray;
- }
- div.cell {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- border-radius: 2px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- border-width: 1px;
- border-style: solid;
- border-color: transparent;
- width: 100%;
- padding: 5px;
- /* This acts as a spacer between cells, that is outside the border */
- margin: 0px;
- outline: none;
- border-left-width: 1px;
- padding-left: 5px;
- background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
- }
- div.cell.jupyter-soft-selected {
- border-left-color: #90CAF9;
- border-left-color: #E3F2FD;
- border-left-width: 1px;
- padding-left: 5px;
- border-right-color: #E3F2FD;
- border-right-width: 1px;
- background: #E3F2FD;
- }
- @media print {
- div.cell.jupyter-soft-selected {
- border-color: transparent;
- }
- }
- div.cell.selected {
- border-color: #ababab;
- border-left-width: 0px;
- padding-left: 6px;
- background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
- }
- @media print {
- div.cell.selected {
- border-color: transparent;
- }
- }
- div.cell.selected.jupyter-soft-selected {
- border-left-width: 0;
- padding-left: 6px;
- background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
- }
- .edit_mode div.cell.selected {
- border-color: #66BB6A;
- border-left-width: 0px;
- padding-left: 6px;
- background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
- }
- @media print {
- .edit_mode div.cell.selected {
- border-color: transparent;
- }
- }
- .prompt {
- /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
- min-width: 14ex;
- /* This padding is tuned to match the padding on the CodeMirror editor. */
- padding: 0.4em;
- margin: 0px;
- font-family: monospace;
- text-align: right;
- /* This has to match that of the the CodeMirror class line-height below */
- line-height: 1.21429em;
- /* Don't highlight prompt number selection */
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- /* Use default cursor */
- cursor: default;
- }
- @media (max-width: 540px) {
- .prompt {
- text-align: left;
- }
- }
- div.inner_cell {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- @-moz-document url-prefix() {
- div.inner_cell {
- overflow-x: hidden;
- }
- }
- /* input_area and input_prompt must match in top border and margin for alignment */
- div.input_area {
- border: 1px solid #cfcfcf;
- border-radius: 2px;
- background: #f7f7f7;
- line-height: 1.21429em;
- }
- /* This is needed so that empty prompt areas can collapse to zero height when there
- is no content in the output_subarea and the prompt. The main purpose of this is
- to make sure that empty JavaScript output_subareas have no height. */
- div.prompt:empty {
- padding-top: 0;
- padding-bottom: 0;
- }
- div.unrecognized_cell {
- padding: 5px 5px 5px 0px;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- div.unrecognized_cell .inner_cell {
- border-radius: 2px;
- padding: 5px;
- font-weight: bold;
- color: red;
- border: 1px solid #cfcfcf;
- background: #eaeaea;
- }
- div.unrecognized_cell .inner_cell a {
- color: inherit;
- text-decoration: none;
- }
- div.unrecognized_cell .inner_cell a:hover {
- color: inherit;
- text-decoration: none;
- }
- @media (max-width: 540px) {
- div.unrecognized_cell > div.prompt {
- display: none;
- }
- }
- div.code_cell {
- /* avoid page breaking on code cells when printing */
- }
- @media print {
- div.code_cell {
- page-break-inside: avoid;
- }
- }
- /* any special styling for code cells that are currently running goes here */
- div.input {
- page-break-inside: avoid;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- @media (max-width: 540px) {
- div.input {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- }
- /* input_area and input_prompt must match in top border and margin for alignment */
- div.input_prompt {
- color: #303F9F;
- border-top: 1px solid transparent;
- }
- div.input_area > div.highlight {
- margin: 0.4em;
- border: none;
- padding: 0px;
- background-color: transparent;
- }
- div.input_area > div.highlight > pre {
- margin: 0px;
- border: none;
- padding: 0px;
- background-color: transparent;
- }
- /* The following gets added to the <head> if it is detected that the user has a
- * monospace font with inconsistent normal/bold/italic height. See
- * notebookmain.js. Such fonts will have keywords vertically offset with
- * respect to the rest of the text. The user should select a better font.
- * See: https://github.com/ipython/ipython/issues/1503
- *
- * .CodeMirror span {
- * vertical-align: bottom;
- * }
- */
- .CodeMirror {
- line-height: 1.21429em;
- /* Changed from 1em to our global default */
- font-size: 14px;
- height: auto;
- /* Changed to auto to autogrow */
- background: none;
- /* Changed from white to allow our bg to show through */
- }
- .CodeMirror-scroll {
- /* The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
- /* We have found that if it is visible, vertical scrollbars appear with font size changes.*/
- overflow-y: hidden;
- overflow-x: auto;
- }
- .CodeMirror-lines {
- /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
- /* we have set a different line-height and want this to scale with that. */
- padding: 0.4em;
- }
- .CodeMirror-linenumber {
- padding: 0 8px 0 4px;
- }
- .CodeMirror-gutters {
- border-bottom-left-radius: 2px;
- border-top-left-radius: 2px;
- }
- .CodeMirror pre {
- /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
- /* .CodeMirror-lines */
- padding: 0;
- border: 0;
- border-radius: 0;
- }
- /*
-
- Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
- Adapted from GitHub theme
-
- */
- .highlight-base {
- color: #000;
- }
- .highlight-variable {
- color: #000;
- }
- .highlight-variable-2 {
- color: #1a1a1a;
- }
- .highlight-variable-3 {
- color: #333333;
- }
- .highlight-string {
- color: #BA2121;
- }
- .highlight-comment {
- color: #408080;
- font-style: italic;
- }
- .highlight-number {
- color: #080;
- }
- .highlight-atom {
- color: #88F;
- }
- .highlight-keyword {
- color: #008000;
- font-weight: bold;
- }
- .highlight-builtin {
- color: #008000;
- }
- .highlight-error {
- color: #f00;
- }
- .highlight-operator {
- color: #AA22FF;
- font-weight: bold;
- }
- .highlight-meta {
- color: #AA22FF;
- }
- /* previously not defined, copying from default codemirror */
- .highlight-def {
- color: #00f;
- }
- .highlight-string-2 {
- color: #f50;
- }
- .highlight-qualifier {
- color: #555;
- }
- .highlight-bracket {
- color: #997;
- }
- .highlight-tag {
- color: #170;
- }
- .highlight-attribute {
- color: #00c;
- }
- .highlight-header {
- color: blue;
- }
- .highlight-quote {
- color: #090;
- }
- .highlight-link {
- color: #00c;
- }
- /* apply the same style to codemirror */
- .cm-s-ipython span.cm-keyword {
- color: #008000;
- font-weight: bold;
- }
- .cm-s-ipython span.cm-atom {
- color: #88F;
- }
- .cm-s-ipython span.cm-number {
- color: #080;
- }
- .cm-s-ipython span.cm-def {
- color: #00f;
- }
- .cm-s-ipython span.cm-variable {
- color: #000;
- }
- .cm-s-ipython span.cm-operator {
- color: #AA22FF;
- font-weight: bold;
- }
- .cm-s-ipython span.cm-variable-2 {
- color: #1a1a1a;
- }
- .cm-s-ipython span.cm-variable-3 {
- color: #333333;
- }
- .cm-s-ipython span.cm-comment {
- color: #408080;
- font-style: italic;
- }
- .cm-s-ipython span.cm-string {
- color: #BA2121;
- }
- .cm-s-ipython span.cm-string-2 {
- color: #f50;
- }
- .cm-s-ipython span.cm-meta {
- color: #AA22FF;
- }
- .cm-s-ipython span.cm-qualifier {
- color: #555;
- }
- .cm-s-ipython span.cm-builtin {
- color: #008000;
- }
- .cm-s-ipython span.cm-bracket {
- color: #997;
- }
- .cm-s-ipython span.cm-tag {
- color: #170;
- }
- .cm-s-ipython span.cm-attribute {
- color: #00c;
- }
- .cm-s-ipython span.cm-header {
- color: blue;
- }
- .cm-s-ipython span.cm-quote {
- color: #090;
- }
- .cm-s-ipython span.cm-link {
- color: #00c;
- }
- .cm-s-ipython span.cm-error {
- color: #f00;
- }
- .cm-s-ipython span.cm-tab {
- background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);
- background-position: right;
- background-repeat: no-repeat;
- }
- div.output_wrapper {
- /* this position must be relative to enable descendents to be absolute within it */
- position: relative;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- z-index: 1;
- }
- /* class for the output area when it should be height-limited */
- div.output_scroll {
- /* ideally, this would be max-height, but FF barfs all over that */
- height: 24em;
- /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
- width: 100%;
- overflow: auto;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
- box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
- display: block;
- }
- /* output div while it is collapsed */
- div.output_collapsed {
- margin: 0px;
- padding: 0px;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- div.out_prompt_overlay {
- height: 100%;
- padding: 0px 0.4em;
- position: absolute;
- border-radius: 2px;
- }
- div.out_prompt_overlay:hover {
- /* use inner shadow to get border that is computed the same on WebKit/FF */
- -webkit-box-shadow: inset 0 0 1px #000;
- box-shadow: inset 0 0 1px #000;
- background: rgba(240, 240, 240, 0.5);
- }
- div.output_prompt {
- color: #D84315;
- }
- /* This class is the outer container of all output sections. */
- div.output_area {
- padding: 0px;
- page-break-inside: avoid;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- div.output_area .MathJax_Display {
- text-align: left !important;
- }
- div.output_area .rendered_html table {
- margin-left: 0;
- margin-right: 0;
- }
- div.output_area .rendered_html img {
- margin-left: 0;
- margin-right: 0;
- }
- div.output_area img,
- div.output_area svg {
- max-width: 100%;
- height: auto;
- }
- div.output_area img.unconfined,
- div.output_area svg.unconfined {
- max-width: none;
- }
- /* This is needed to protect the pre formating from global settings such
- as that of bootstrap */
- .output {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- @media (max-width: 540px) {
- div.output_area {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: vertical;
- -moz-box-align: stretch;
- display: box;
- box-orient: vertical;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: column;
- align-items: stretch;
- }
- }
- div.output_area pre {
- margin: 0;
- padding: 0;
- border: 0;
- vertical-align: baseline;
- color: black;
- background-color: transparent;
- border-radius: 0;
- }
- /* This class is for the output subarea inside the output_area and after
- the prompt div. */
- div.output_subarea {
- overflow-x: auto;
- padding: 0.4em;
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- max-width: calc(100% - 14ex);
- }
- div.output_scroll div.output_subarea {
- overflow-x: visible;
- }
- /* The rest of the output_* classes are for special styling of the different
- output types */
- /* all text output has this class: */
- div.output_text {
- text-align: left;
- color: #000;
- /* This has to match that of the the CodeMirror class line-height below */
- line-height: 1.21429em;
- }
- /* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
- div.output_stderr {
- background: #fdd;
- /* very light red background for stderr */
- }
- div.output_latex {
- text-align: left;
- }
- /* Empty output_javascript divs should have no height */
- div.output_javascript:empty {
- padding: 0;
- }
- .js-error {
- color: darkred;
- }
- /* raw_input styles */
- div.raw_input_container {
- line-height: 1.21429em;
- padding-top: 5px;
- }
- pre.raw_input_prompt {
- /* nothing needed here. */
- }
- input.raw_input {
- font-family: monospace;
- font-size: inherit;
- color: inherit;
- width: auto;
- /* make sure input baseline aligns with prompt */
- vertical-align: baseline;
- /* padding + margin = 0.5em between prompt and cursor */
- padding: 0em 0.25em;
- margin: 0em 0.25em;
- }
- input.raw_input:focus {
- box-shadow: none;
- }
- p.p-space {
- margin-bottom: 10px;
- }
- div.output_unrecognized {
- padding: 5px;
- font-weight: bold;
- color: red;
- }
- div.output_unrecognized a {
- color: inherit;
- text-decoration: none;
- }
- div.output_unrecognized a:hover {
- color: inherit;
- text-decoration: none;
- }
- .rendered_html {
- color: #000;
- /* any extras will just be numbers: */
- }
- .rendered_html em {
- font-style: italic;
- }
- .rendered_html strong {
- font-weight: bold;
- }
- .rendered_html u {
- text-decoration: underline;
- }
- .rendered_html :link {
- text-decoration: underline;
- }
- .rendered_html :visited {
- text-decoration: underline;
- }
- .rendered_html h1 {
- font-size: 185.7%;
- margin: 1.08em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h2 {
- font-size: 157.1%;
- margin: 1.27em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h3 {
- font-size: 128.6%;
- margin: 1.55em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h4 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- }
- .rendered_html h5 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- font-style: italic;
- }
- .rendered_html h6 {
- font-size: 100%;
- margin: 2em 0 0 0;
- font-weight: bold;
- line-height: 1.0;
- font-style: italic;
- }
- .rendered_html h1:first-child {
- margin-top: 0.538em;
- }
- .rendered_html h2:first-child {
- margin-top: 0.636em;
- }
- .rendered_html h3:first-child {
- margin-top: 0.777em;
- }
- .rendered_html h4:first-child {
- margin-top: 1em;
- }
- .rendered_html h5:first-child {
- margin-top: 1em;
- }
- .rendered_html h6:first-child {
- margin-top: 1em;
- }
- .rendered_html ul {
- list-style: disc;
- margin: 0em 2em;
- padding-left: 0px;
- }
- .rendered_html ul ul {
- list-style: square;
- margin: 0em 2em;
- }
- .rendered_html ul ul ul {
- list-style: circle;
- margin: 0em 2em;
- }
- .rendered_html ol {
- list-style: decimal;
- margin: 0em 2em;
- padding-left: 0px;
- }
- .rendered_html ol ol {
- list-style: upper-alpha;
- margin: 0em 2em;
- }
- .rendered_html ol ol ol {
- list-style: lower-alpha;
- margin: 0em 2em;
- }
- .rendered_html ol ol ol ol {
- list-style: lower-roman;
- margin: 0em 2em;
- }
- .rendered_html ol ol ol ol ol {
- list-style: decimal;
- margin: 0em 2em;
- }
- .rendered_html * + ul {
- margin-top: 1em;
- }
- .rendered_html * + ol {
- margin-top: 1em;
- }
- .rendered_html hr {
- color: black;
- background-color: black;
- }
- .rendered_html pre {
- margin: 1em 2em;
- }
- .rendered_html pre,
- .rendered_html code {
- border: 0;
- background-color: #fff;
- color: #000;
- font-size: 100%;
- padding: 0px;
- }
- .rendered_html blockquote {
- margin: 1em 2em;
- }
- .rendered_html table {
- margin-left: auto;
- margin-right: auto;
- border: 1px solid black;
- border-collapse: collapse;
- }
- .rendered_html tr,
- .rendered_html th,
- .rendered_html td {
- border: 1px solid black;
- border-collapse: collapse;
- margin: 1em 2em;
- }
- .rendered_html td,
- .rendered_html th {
- text-align: left;
- vertical-align: middle;
- padding: 4px;
- }
- .rendered_html th {
- font-weight: bold;
- }
- .rendered_html * + table {
- margin-top: 1em;
- }
- .rendered_html p {
- text-align: left;
- }
- .rendered_html * + p {
- margin-top: 1em;
- }
- .rendered_html img {
- display: block;
- margin-left: auto;
- margin-right: auto;
- }
- .rendered_html * + img {
- margin-top: 1em;
- }
- .rendered_html img,
- .rendered_html svg {
- max-width: 100%;
- height: auto;
- }
- .rendered_html img.unconfined,
- .rendered_html svg.unconfined {
- max-width: none;
- }
- div.text_cell {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- }
- @media (max-width: 540px) {
- div.text_cell > div.prompt {
- display: none;
- }
- }
- div.text_cell_render {
- /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
- outline: none;
- resize: none;
- width: inherit;
- border-style: none;
- padding: 0.5em 0.5em 0.5em 0.4em;
- color: #000;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- a.anchor-link:link {
- text-decoration: none;
- padding: 0px 20px;
- visibility: hidden;
- }
- h1:hover .anchor-link,
- h2:hover .anchor-link,
- h3:hover .anchor-link,
- h4:hover .anchor-link,
- h5:hover .anchor-link,
- h6:hover .anchor-link {
- visibility: visible;
- }
- .text_cell.rendered .input_area {
- display: none;
- }
- .text_cell.rendered .rendered_html {
- overflow-x: auto;
- overflow-y: hidden;
- }
- .text_cell.unrendered .text_cell_render {
- display: none;
- }
- .cm-header-1,
- .cm-header-2,
- .cm-header-3,
- .cm-header-4,
- .cm-header-5,
- .cm-header-6 {
- font-weight: bold;
- font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- }
- .cm-header-1 {
- font-size: 185.7%;
- }
- .cm-header-2 {
- font-size: 157.1%;
- }
- .cm-header-3 {
- font-size: 128.6%;
- }
- .cm-header-4 {
- font-size: 110%;
- }
- .cm-header-5 {
- font-size: 100%;
- font-style: italic;
- }
- .cm-header-6 {
- font-size: 100%;
- font-style: italic;
- }
- /*!
- *
- * IPython notebook webapp
- *
- */
- @media (max-width: 767px) {
- .notebook_app {
- padding-left: 0px;
- padding-right: 0px;
- }
- }
- #ipython-main-app {
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- height: 100%;
- }
- div#notebook_panel {
- margin: 0px;
- padding: 0px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- height: 100%;
- }
- div#notebook {
- font-size: 14px;
- line-height: 20px;
- overflow-y: hidden;
- overflow-x: auto;
- width: 100%;
- /* This spaces the page away from the edge of the notebook area */
- padding-top: 20px;
- margin: 0px;
- outline: none;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- min-height: 100%;
- }
- @media not print {
- #notebook-container {
- padding: 15px;
- background-color: #fff;
- min-height: 0;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- }
- @media print {
- #notebook-container {
- width: 100%;
- }
- }
- div.ui-widget-content {
- border: 1px solid #ababab;
- outline: none;
- }
- pre.dialog {
- background-color: #f7f7f7;
- border: 1px solid #ddd;
- border-radius: 2px;
- padding: 0.4em;
- padding-left: 2em;
- }
- p.dialog {
- padding: 0.2em;
- }
- /* Word-wrap output correctly. This is the CSS3 spelling, though Firefox seems
- to not honor it correctly. Webkit browsers (Chrome, rekonq, Safari) do.
- */
- pre,
- code,
- kbd,
- samp {
- white-space: pre-wrap;
- }
- #fonttest {
- font-family: monospace;
- }
- p {
- margin-bottom: 0;
- }
- .end_space {
- min-height: 100px;
- transition: height .2s ease;
- }
- .notebook_app > #header {
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- @media not print {
- .notebook_app {
- background-color: #EEE;
- }
- }
- kbd {
- border-style: solid;
- border-width: 1px;
- box-shadow: none;
- margin: 2px;
- padding-left: 2px;
- padding-right: 2px;
- padding-top: 1px;
- padding-bottom: 1px;
- }
- /* CSS for the cell toolbar */
- .celltoolbar {
- border: thin solid #CFCFCF;
- border-bottom: none;
- background: #EEE;
- border-radius: 2px 2px 0px 0px;
- width: 100%;
- height: 29px;
- padding-right: 4px;
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- /* Old browsers */
- -webkit-box-pack: end;
- -moz-box-pack: end;
- box-pack: end;
- /* Modern browsers */
- justify-content: flex-end;
- display: -webkit-flex;
- }
- @media print {
- .celltoolbar {
- display: none;
- }
- }
- .ctb_hideshow {
- display: none;
- vertical-align: bottom;
- }
- /* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
- Cell toolbars are only shown when the ctb_global_show class is also set.
- */
- .ctb_global_show .ctb_show.ctb_hideshow {
- display: block;
- }
- .ctb_global_show .ctb_show + .input_area,
- .ctb_global_show .ctb_show + div.text_cell_input,
- .ctb_global_show .ctb_show ~ div.text_cell_render {
- border-top-right-radius: 0px;
- border-top-left-radius: 0px;
- }
- .ctb_global_show .ctb_show ~ div.text_cell_render {
- border: 1px solid #cfcfcf;
- }
- .celltoolbar {
- font-size: 87%;
- padding-top: 3px;
- }
- .celltoolbar select {
- display: block;
- width: 100%;
- height: 32px;
- padding: 6px 12px;
- font-size: 13px;
- line-height: 1.42857143;
- color: #555555;
- background-color: #fff;
- background-image: none;
- border: 1px solid #ccc;
- border-radius: 2px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
- -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- height: 30px;
- padding: 5px 10px;
- font-size: 12px;
- line-height: 1.5;
- border-radius: 1px;
- width: inherit;
- font-size: inherit;
- height: 22px;
- padding: 0px;
- display: inline-block;
- }
- .celltoolbar select:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- }
- .celltoolbar select::-moz-placeholder {
- color: #999;
- opacity: 1;
- }
- .celltoolbar select:-ms-input-placeholder {
- color: #999;
- }
- .celltoolbar select::-webkit-input-placeholder {
- color: #999;
- }
- .celltoolbar select::-ms-expand {
- border: 0;
- background-color: transparent;
- }
- .celltoolbar select[disabled],
- .celltoolbar select[readonly],
- fieldset[disabled] .celltoolbar select {
- background-color: #eeeeee;
- opacity: 1;
- }
- .celltoolbar select[disabled],
- fieldset[disabled] .celltoolbar select {
- cursor: not-allowed;
- }
- textarea.celltoolbar select {
- height: auto;
- }
- select.celltoolbar select {
- height: 30px;
- line-height: 30px;
- }
- textarea.celltoolbar select,
- select[multiple].celltoolbar select {
- height: auto;
- }
- .celltoolbar label {
- margin-left: 5px;
- margin-right: 5px;
- }
- .completions {
- position: absolute;
- z-index: 110;
- overflow: hidden;
- border: 1px solid #ababab;
- border-radius: 2px;
- -webkit-box-shadow: 0px 6px 10px -1px #adadad;
- box-shadow: 0px 6px 10px -1px #adadad;
- line-height: 1;
- }
- .completions select {
- background: white;
- outline: none;
- border: none;
- padding: 0px;
- margin: 0px;
- overflow: auto;
- font-family: monospace;
- font-size: 110%;
- color: #000;
- width: auto;
- }
- .completions select option.context {
- color: #286090;
- }
- #kernel_logo_widget {
- float: right !important;
- float: right;
- }
- #kernel_logo_widget .current_kernel_logo {
- display: none;
- margin-top: -1px;
- margin-bottom: -1px;
- width: 32px;
- height: 32px;
- }
- #menubar {
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- margin-top: 1px;
- }
- #menubar .navbar {
- border-top: 1px;
- border-radius: 0px 0px 2px 2px;
- margin-bottom: 0px;
- }
- #menubar .navbar-toggle {
- float: left;
- padding-top: 7px;
- padding-bottom: 7px;
- border: none;
- }
- #menubar .navbar-collapse {
- clear: left;
- }
- .nav-wrapper {
- border-bottom: 1px solid #e7e7e7;
- }
- i.menu-icon {
- padding-top: 4px;
- }
- ul#help_menu li a {
- overflow: hidden;
- padding-right: 2.2em;
- }
- ul#help_menu li a i {
- margin-right: -1.2em;
- }
- .dropdown-submenu {
- position: relative;
- }
- .dropdown-submenu > .dropdown-menu {
- top: 0;
- left: 100%;
- margin-top: -6px;
- margin-left: -1px;
- }
- .dropdown-submenu:hover > .dropdown-menu {
- display: block;
- }
- .dropdown-submenu > a:after {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- display: block;
- content: "\f0da";
- float: right;
- color: #333333;
- margin-top: 2px;
- margin-right: -10px;
- }
- .dropdown-submenu > a:after.pull-left {
- margin-right: .3em;
- }
- .dropdown-submenu > a:after.pull-right {
- margin-left: .3em;
- }
- .dropdown-submenu:hover > a:after {
- color: #262626;
- }
- .dropdown-submenu.pull-left {
- float: none;
- }
- .dropdown-submenu.pull-left > .dropdown-menu {
- left: -100%;
- margin-left: 10px;
- }
- #notification_area {
- float: right !important;
- float: right;
- z-index: 10;
- }
- .indicator_area {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- }
- #kernel_indicator {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- border-left: 1px solid;
- }
- #kernel_indicator .kernel_indicator_name {
- padding-left: 5px;
- padding-right: 5px;
- }
- #modal_indicator {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- }
- #readonly-indicator {
- float: right !important;
- float: right;
- color: #777;
- margin-left: 5px;
- margin-right: 5px;
- width: 11px;
- z-index: 10;
- text-align: center;
- width: auto;
- margin-top: 2px;
- margin-bottom: 0px;
- margin-left: 0px;
- margin-right: 0px;
- display: none;
- }
- .modal_indicator:before {
- width: 1.28571429em;
- text-align: center;
- }
- .edit_mode .modal_indicator:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f040";
- }
- .edit_mode .modal_indicator:before.pull-left {
- margin-right: .3em;
- }
- .edit_mode .modal_indicator:before.pull-right {
- margin-left: .3em;
- }
- .command_mode .modal_indicator:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: ' ';
- }
- .command_mode .modal_indicator:before.pull-left {
- margin-right: .3em;
- }
- .command_mode .modal_indicator:before.pull-right {
- margin-left: .3em;
- }
- .kernel_idle_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f10c";
- }
- .kernel_idle_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_idle_icon:before.pull-right {
- margin-left: .3em;
- }
- .kernel_busy_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f111";
- }
- .kernel_busy_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_busy_icon:before.pull-right {
- margin-left: .3em;
- }
- .kernel_dead_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f1e2";
- }
- .kernel_dead_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_dead_icon:before.pull-right {
- margin-left: .3em;
- }
- .kernel_disconnected_icon:before {
- display: inline-block;
- font: normal normal normal 14px/1 FontAwesome;
- font-size: inherit;
- text-rendering: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- content: "\f127";
- }
- .kernel_disconnected_icon:before.pull-left {
- margin-right: .3em;
- }
- .kernel_disconnected_icon:before.pull-right {
- margin-left: .3em;
- }
- .notification_widget {
- color: #777;
- z-index: 10;
- background: rgba(240, 240, 240, 0.5);
- margin-right: 4px;
- color: #333;
- background-color: #fff;
- border-color: #ccc;
- }
- .notification_widget:focus,
- .notification_widget.focus {
- color: #333;
- background-color: #e6e6e6;
- border-color: #8c8c8c;
- }
- .notification_widget:hover {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .notification_widget:active,
- .notification_widget.active,
- .open > .dropdown-toggle.notification_widget {
- color: #333;
- background-color: #e6e6e6;
- border-color: #adadad;
- }
- .notification_widget:active:hover,
- .notification_widget.active:hover,
- .open > .dropdown-toggle.notification_widget:hover,
- .notification_widget:active:focus,
- .notification_widget.active:focus,
- .open > .dropdown-toggle.notification_widget:focus,
- .notification_widget:active.focus,
- .notification_widget.active.focus,
- .open > .dropdown-toggle.notification_widget.focus {
- color: #333;
- background-color: #d4d4d4;
- border-color: #8c8c8c;
- }
- .notification_widget:active,
- .notification_widget.active,
- .open > .dropdown-toggle.notification_widget {
- background-image: none;
- }
- .notification_widget.disabled:hover,
- .notification_widget[disabled]:hover,
- fieldset[disabled] .notification_widget:hover,
- .notification_widget.disabled:focus,
- .notification_widget[disabled]:focus,
- fieldset[disabled] .notification_widget:focus,
- .notification_widget.disabled.focus,
- .notification_widget[disabled].focus,
- fieldset[disabled] .notification_widget.focus {
- background-color: #fff;
- border-color: #ccc;
- }
- .notification_widget .badge {
- color: #fff;
- background-color: #333;
- }
- .notification_widget.warning {
- color: #fff;
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .notification_widget.warning:focus,
- .notification_widget.warning.focus {
- color: #fff;
- background-color: #ec971f;
- border-color: #985f0d;
- }
- .notification_widget.warning:hover {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .notification_widget.warning:active,
- .notification_widget.warning.active,
- .open > .dropdown-toggle.notification_widget.warning {
- color: #fff;
- background-color: #ec971f;
- border-color: #d58512;
- }
- .notification_widget.warning:active:hover,
- .notification_widget.warning.active:hover,
- .open > .dropdown-toggle.notification_widget.warning:hover,
- .notification_widget.warning:active:focus,
- .notification_widget.warning.active:focus,
- .open > .dropdown-toggle.notification_widget.warning:focus,
- .notification_widget.warning:active.focus,
- .notification_widget.warning.active.focus,
- .open > .dropdown-toggle.notification_widget.warning.focus {
- color: #fff;
- background-color: #d58512;
- border-color: #985f0d;
- }
- .notification_widget.warning:active,
- .notification_widget.warning.active,
- .open > .dropdown-toggle.notification_widget.warning {
- background-image: none;
- }
- .notification_widget.warning.disabled:hover,
- .notification_widget.warning[disabled]:hover,
- fieldset[disabled] .notification_widget.warning:hover,
- .notification_widget.warning.disabled:focus,
- .notification_widget.warning[disabled]:focus,
- fieldset[disabled] .notification_widget.warning:focus,
- .notification_widget.warning.disabled.focus,
- .notification_widget.warning[disabled].focus,
- fieldset[disabled] .notification_widget.warning.focus {
- background-color: #f0ad4e;
- border-color: #eea236;
- }
- .notification_widget.warning .badge {
- color: #f0ad4e;
- background-color: #fff;
- }
- .notification_widget.success {
- color: #fff;
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .notification_widget.success:focus,
- .notification_widget.success.focus {
- color: #fff;
- background-color: #449d44;
- border-color: #255625;
- }
- .notification_widget.success:hover {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .notification_widget.success:active,
- .notification_widget.success.active,
- .open > .dropdown-toggle.notification_widget.success {
- color: #fff;
- background-color: #449d44;
- border-color: #398439;
- }
- .notification_widget.success:active:hover,
- .notification_widget.success.active:hover,
- .open > .dropdown-toggle.notification_widget.success:hover,
- .notification_widget.success:active:focus,
- .notification_widget.success.active:focus,
- .open > .dropdown-toggle.notification_widget.success:focus,
- .notification_widget.success:active.focus,
- .notification_widget.success.active.focus,
- .open > .dropdown-toggle.notification_widget.success.focus {
- color: #fff;
- background-color: #398439;
- border-color: #255625;
- }
- .notification_widget.success:active,
- .notification_widget.success.active,
- .open > .dropdown-toggle.notification_widget.success {
- background-image: none;
- }
- .notification_widget.success.disabled:hover,
- .notification_widget.success[disabled]:hover,
- fieldset[disabled] .notification_widget.success:hover,
- .notification_widget.success.disabled:focus,
- .notification_widget.success[disabled]:focus,
- fieldset[disabled] .notification_widget.success:focus,
- .notification_widget.success.disabled.focus,
- .notification_widget.success[disabled].focus,
- fieldset[disabled] .notification_widget.success.focus {
- background-color: #5cb85c;
- border-color: #4cae4c;
- }
- .notification_widget.success .badge {
- color: #5cb85c;
- background-color: #fff;
- }
- .notification_widget.info {
- color: #fff;
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .notification_widget.info:focus,
- .notification_widget.info.focus {
- color: #fff;
- background-color: #31b0d5;
- border-color: #1b6d85;
- }
- .notification_widget.info:hover {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .notification_widget.info:active,
- .notification_widget.info.active,
- .open > .dropdown-toggle.notification_widget.info {
- color: #fff;
- background-color: #31b0d5;
- border-color: #269abc;
- }
- .notification_widget.info:active:hover,
- .notification_widget.info.active:hover,
- .open > .dropdown-toggle.notification_widget.info:hover,
- .notification_widget.info:active:focus,
- .notification_widget.info.active:focus,
- .open > .dropdown-toggle.notification_widget.info:focus,
- .notification_widget.info:active.focus,
- .notification_widget.info.active.focus,
- .open > .dropdown-toggle.notification_widget.info.focus {
- color: #fff;
- background-color: #269abc;
- border-color: #1b6d85;
- }
- .notification_widget.info:active,
- .notification_widget.info.active,
- .open > .dropdown-toggle.notification_widget.info {
- background-image: none;
- }
- .notification_widget.info.disabled:hover,
- .notification_widget.info[disabled]:hover,
- fieldset[disabled] .notification_widget.info:hover,
- .notification_widget.info.disabled:focus,
- .notification_widget.info[disabled]:focus,
- fieldset[disabled] .notification_widget.info:focus,
- .notification_widget.info.disabled.focus,
- .notification_widget.info[disabled].focus,
- fieldset[disabled] .notification_widget.info.focus {
- background-color: #5bc0de;
- border-color: #46b8da;
- }
- .notification_widget.info .badge {
- color: #5bc0de;
- background-color: #fff;
- }
- .notification_widget.danger {
- color: #fff;
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .notification_widget.danger:focus,
- .notification_widget.danger.focus {
- color: #fff;
- background-color: #c9302c;
- border-color: #761c19;
- }
- .notification_widget.danger:hover {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .notification_widget.danger:active,
- .notification_widget.danger.active,
- .open > .dropdown-toggle.notification_widget.danger {
- color: #fff;
- background-color: #c9302c;
- border-color: #ac2925;
- }
- .notification_widget.danger:active:hover,
- .notification_widget.danger.active:hover,
- .open > .dropdown-toggle.notification_widget.danger:hover,
- .notification_widget.danger:active:focus,
- .notification_widget.danger.active:focus,
- .open > .dropdown-toggle.notification_widget.danger:focus,
- .notification_widget.danger:active.focus,
- .notification_widget.danger.active.focus,
- .open > .dropdown-toggle.notification_widget.danger.focus {
- color: #fff;
- background-color: #ac2925;
- border-color: #761c19;
- }
- .notification_widget.danger:active,
- .notification_widget.danger.active,
- .open > .dropdown-toggle.notification_widget.danger {
- background-image: none;
- }
- .notification_widget.danger.disabled:hover,
- .notification_widget.danger[disabled]:hover,
- fieldset[disabled] .notification_widget.danger:hover,
- .notification_widget.danger.disabled:focus,
- .notification_widget.danger[disabled]:focus,
- fieldset[disabled] .notification_widget.danger:focus,
- .notification_widget.danger.disabled.focus,
- .notification_widget.danger[disabled].focus,
- fieldset[disabled] .notification_widget.danger.focus {
- background-color: #d9534f;
- border-color: #d43f3a;
- }
- .notification_widget.danger .badge {
- color: #d9534f;
- background-color: #fff;
- }
- div#pager {
- background-color: #fff;
- font-size: 14px;
- line-height: 20px;
- overflow: hidden;
- display: none;
- position: fixed;
- bottom: 0px;
- width: 100%;
- max-height: 50%;
- padding-top: 8px;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- /* Display over codemirror */
- z-index: 100;
- /* Hack which prevents jquery ui resizable from changing top. */
- top: auto !important;
- }
- div#pager pre {
- line-height: 1.21429em;
- color: #000;
- background-color: #f7f7f7;
- padding: 0.4em;
- }
- div#pager #pager-button-area {
- position: absolute;
- top: 8px;
- right: 20px;
- }
- div#pager #pager-contents {
- position: relative;
- overflow: auto;
- width: 100%;
- height: 100%;
- }
- div#pager #pager-contents #pager-container {
- position: relative;
- padding: 15px 0px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- div#pager .ui-resizable-handle {
- top: 0px;
- height: 8px;
- background: #f7f7f7;
- border-top: 1px solid #cfcfcf;
- border-bottom: 1px solid #cfcfcf;
- /* This injects handle bars (a short, wide = symbol) for
- the resize handle. */
- }
- div#pager .ui-resizable-handle::after {
- content: '';
- top: 2px;
- left: 50%;
- height: 3px;
- width: 30px;
- margin-left: -15px;
- position: absolute;
- border-top: 1px solid #cfcfcf;
- }
- .quickhelp {
- /* Old browsers */
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- -webkit-box-align: stretch;
- display: -moz-box;
- -moz-box-orient: horizontal;
- -moz-box-align: stretch;
- display: box;
- box-orient: horizontal;
- box-align: stretch;
- /* Modern browsers */
- display: flex;
- flex-direction: row;
- align-items: stretch;
- line-height: 1.8em;
- }
- .shortcut_key {
- display: inline-block;
- width: 20ex;
- text-align: right;
- font-family: monospace;
- }
- .shortcut_descr {
- display: inline-block;
- /* Old browsers */
- -webkit-box-flex: 1;
- -moz-box-flex: 1;
- box-flex: 1;
- /* Modern browsers */
- flex: 1;
- }
- span.save_widget {
- margin-top: 6px;
- }
- span.save_widget span.filename {
- height: 1em;
- line-height: 1em;
- padding: 3px;
- margin-left: 16px;
- border: none;
- font-size: 146.5%;
- border-radius: 2px;
- }
- span.save_widget span.filename:hover {
- background-color: #e6e6e6;
- }
- span.checkpoint_status,
- span.autosave_status {
- font-size: small;
- }
- @media (max-width: 767px) {
- span.save_widget {
- font-size: small;
- }
- span.checkpoint_status,
- span.autosave_status {
- display: none;
- }
- }
- @media (min-width: 768px) and (max-width: 991px) {
- span.checkpoint_status {
- display: none;
- }
- span.autosave_status {
- font-size: x-small;
- }
- }
- .toolbar {
- padding: 0px;
- margin-left: -5px;
- margin-top: 2px;
- margin-bottom: 5px;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- }
- .toolbar select,
- .toolbar label {
- width: auto;
- vertical-align: middle;
- margin-right: 2px;
- margin-bottom: 0px;
- display: inline;
- font-size: 92%;
- margin-left: 0.3em;
- margin-right: 0.3em;
- padding: 0px;
- padding-top: 3px;
- }
- .toolbar .btn {
- padding: 2px 8px;
- }
- .toolbar .btn-group {
- margin-top: 0px;
- margin-left: 5px;
- }
- #maintoolbar {
- margin-bottom: -3px;
- margin-top: -8px;
- border: 0px;
- min-height: 27px;
- margin-left: 0px;
- padding-top: 11px;
- padding-bottom: 3px;
- }
- #maintoolbar .navbar-text {
- float: none;
- vertical-align: middle;
- text-align: right;
- margin-left: 5px;
- margin-right: 0px;
- margin-top: 0px;
- }
- .select-xs {
- height: 24px;
- }
- .pulse,
- .dropdown-menu > li > a.pulse,
- li.pulse > a.dropdown-toggle,
- li.pulse.open > a.dropdown-toggle {
- background-color: #F37626;
- color: white;
- }
- /**
- * Primary styles
- *
- * Author: Jupyter Development Team
- */
- /** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
- * of chance of beeing generated from the ../less/[samename].less file, you can
- * try to get back the less file by reverting somme commit in history
- **/
- /*
- * We'll try to get something pretty, so we
- * have some strange css to have the scroll bar on
- * the left with fix button on the top right of the tooltip
- */
- @-moz-keyframes fadeOut {
- from {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
- }
- @-webkit-keyframes fadeOut {
- from {
- opacity: 1;
- }
- to {
- opacity: 0;
- }
- }
- @-moz-keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }
- @-webkit-keyframes fadeIn {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }
- /*properties of tooltip after "expand"*/
- .bigtooltip {
- overflow: auto;
- height: 200px;
- -webkit-transition-property: height;
- -webkit-transition-duration: 500ms;
- -moz-transition-property: height;
- -moz-transition-duration: 500ms;
- transition-property: height;
- transition-duration: 500ms;
- }
- /*properties of tooltip before "expand"*/
- .smalltooltip {
- -webkit-transition-property: height;
- -webkit-transition-duration: 500ms;
- -moz-transition-property: height;
- -moz-transition-duration: 500ms;
- transition-property: height;
- transition-duration: 500ms;
- text-overflow: ellipsis;
- overflow: hidden;
- height: 80px;
- }
- .tooltipbuttons {
- position: absolute;
- padding-right: 15px;
- top: 0px;
- right: 0px;
- }
- .tooltiptext {
- /*avoid the button to overlap on some docstring*/
- padding-right: 30px;
- }
- .ipython_tooltip {
- max-width: 700px;
- /*fade-in animation when inserted*/
- -webkit-animation: fadeOut 400ms;
- -moz-animation: fadeOut 400ms;
- animation: fadeOut 400ms;
- -webkit-animation: fadeIn 400ms;
- -moz-animation: fadeIn 400ms;
- animation: fadeIn 400ms;
- vertical-align: middle;
- background-color: #f7f7f7;
- overflow: visible;
- border: #ababab 1px solid;
- outline: none;
- padding: 3px;
- margin: 0px;
- padding-left: 7px;
- font-family: monospace;
- min-height: 50px;
- -moz-box-shadow: 0px 6px 10px -1px #adadad;
- -webkit-box-shadow: 0px 6px 10px -1px #adadad;
- box-shadow: 0px 6px 10px -1px #adadad;
- border-radius: 2px;
- position: absolute;
- z-index: 1000;
- }
- .ipython_tooltip a {
- float: right;
- }
- .ipython_tooltip .tooltiptext pre {
- border: 0;
- border-radius: 0;
- font-size: 100%;
- background-color: #f7f7f7;
- }
- .pretooltiparrow {
- left: 0px;
- margin: 0px;
- top: -16px;
- width: 40px;
- height: 16px;
- overflow: hidden;
- position: absolute;
- }
- .pretooltiparrow:before {
- background-color: #f7f7f7;
- border: 1px #ababab solid;
- z-index: 11;
- content: "";
- position: absolute;
- left: 15px;
- top: 10px;
- width: 25px;
- height: 25px;
- -webkit-transform: rotate(45deg);
- -moz-transform: rotate(45deg);
- -ms-transform: rotate(45deg);
- -o-transform: rotate(45deg);
- }
- ul.typeahead-list i {
- margin-left: -10px;
- width: 18px;
- }
- ul.typeahead-list {
- max-height: 80vh;
- overflow: auto;
- }
- ul.typeahead-list > li > a {
- /** Firefox bug **/
- /* see https://github.com/jupyter/notebook/issues/559 */
- white-space: normal;
- }
- .cmd-palette .modal-body {
- padding: 7px;
- }
- .cmd-palette form {
- background: white;
- }
- .cmd-palette input {
- outline: none;
- }
- .no-shortcut {
- display: none;
- }
- .command-shortcut:before {
- content: "(command)";
- padding-right: 3px;
- color: #777777;
- }
- .edit-shortcut:before {
- content: "(edit)";
- padding-right: 3px;
- color: #777777;
- }
- #find-and-replace #replace-preview .match,
- #find-and-replace #replace-preview .insert {
- background-color: #BBDEFB;
- border-color: #90CAF9;
- border-style: solid;
- border-width: 1px;
- border-radius: 0px;
- }
- #find-and-replace #replace-preview .replace .match {
- background-color: #FFCDD2;
- border-color: #EF9A9A;
- border-radius: 0px;
- }
- #find-and-replace #replace-preview .replace .insert {
- background-color: #C8E6C9;
- border-color: #A5D6A7;
- border-radius: 0px;
- }
- #find-and-replace #replace-preview {
- max-height: 60vh;
- overflow: auto;
- }
- #find-and-replace #replace-preview pre {
- padding: 5px 10px;
- }
- .terminal-app {
- background: #EEE;
- }
- .terminal-app #header {
- background: #fff;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
- }
- .terminal-app .terminal {
- float: left;
- font-family: monospace;
- color: white;
- background: black;
- padding: 0.4em;
- border-radius: 2px;
- -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
- box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
- }
- .terminal-app .terminal,
- .terminal-app .terminal dummy-screen {
- line-height: 1em;
- font-size: 14px;
- }
- .terminal-app .terminal-cursor {
- color: black;
- background: white;
- }
- .terminal-app #terminado-container {
- margin-top: 20px;
- }
- /*# sourceMappingURL=style.min.css.map */
- </style>
- <style type="text/css">
- .highlight .hll { background-color: #ffffcc }
- .highlight { background: #f8f8f8; }
- .highlight .c { color: #408080; font-style: italic } /* Comment */
- .highlight .err { border: 1px solid #FF0000 } /* Error */
- .highlight .k { color: #008000; font-weight: bold } /* Keyword */
- .highlight .o { color: #666666 } /* Operator */
- .highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
- .highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
- .highlight .cp { color: #BC7A00 } /* Comment.Preproc */
- .highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
- .highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
- .highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
- .highlight .gd { color: #A00000 } /* Generic.Deleted */
- .highlight .ge { font-style: italic } /* Generic.Emph */
- .highlight .gr { color: #FF0000 } /* Generic.Error */
- .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
- .highlight .gi { color: #00A000 } /* Generic.Inserted */
- .highlight .go { color: #888888 } /* Generic.Output */
- .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
- .highlight .gs { font-weight: bold } /* Generic.Strong */
- .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
- .highlight .gt { color: #0044DD } /* Generic.Traceback */
- .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
- .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
- .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
- .highlight .kp { color: #008000 } /* Keyword.Pseudo */
- .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
- .highlight .kt { color: #B00040 } /* Keyword.Type */
- .highlight .m { color: #666666 } /* Literal.Number */
- .highlight .s { color: #BA2121 } /* Literal.String */
- .highlight .na { color: #7D9029 } /* Name.Attribute */
- .highlight .nb { color: #008000 } /* Name.Builtin */
- .highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
- .highlight .no { color: #880000 } /* Name.Constant */
- .highlight .nd { color: #AA22FF } /* Name.Decorator */
- .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
- .highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
- .highlight .nf { color: #0000FF } /* Name.Function */
- .highlight .nl { color: #A0A000 } /* Name.Label */
- .highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
- .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
- .highlight .nv { color: #19177C } /* Name.Variable */
- .highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
- .highlight .w { color: #bbbbbb } /* Text.Whitespace */
- .highlight .mb { color: #666666 } /* Literal.Number.Bin */
- .highlight .mf { color: #666666 } /* Literal.Number.Float */
- .highlight .mh { color: #666666 } /* Literal.Number.Hex */
- .highlight .mi { color: #666666 } /* Literal.Number.Integer */
- .highlight .mo { color: #666666 } /* Literal.Number.Oct */
- .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
- .highlight .sc { color: #BA2121 } /* Literal.String.Char */
- .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
- .highlight .s2 { color: #BA2121 } /* Literal.String.Double */
- .highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
- .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
- .highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
- .highlight .sx { color: #008000 } /* Literal.String.Other */
- .highlight .sr { color: #BB6688 } /* Literal.String.Regex */
- .highlight .s1 { color: #BA2121 } /* Literal.String.Single */
- .highlight .ss { color: #19177C } /* Literal.String.Symbol */
- .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
- .highlight .vc { color: #19177C } /* Name.Variable.Class */
- .highlight .vg { color: #19177C } /* Name.Variable.Global */
- .highlight .vi { color: #19177C } /* Name.Variable.Instance */
- .highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
- </style>
- <style type="text/css">
-
- /* Temporary definitions which will become obsolete with Notebook release 5.0 */
- .ansi-black-fg { color: #3E424D; }
- .ansi-black-bg { background-color: #3E424D; }
- .ansi-black-intense-fg { color: #282C36; }
- .ansi-black-intense-bg { background-color: #282C36; }
- .ansi-red-fg { color: #E75C58; }
- .ansi-red-bg { background-color: #E75C58; }
- .ansi-red-intense-fg { color: #B22B31; }
- .ansi-red-intense-bg { background-color: #B22B31; }
- .ansi-green-fg { color: #00A250; }
- .ansi-green-bg { background-color: #00A250; }
- .ansi-green-intense-fg { color: #007427; }
- .ansi-green-intense-bg { background-color: #007427; }
- .ansi-yellow-fg { color: #DDB62B; }
- .ansi-yellow-bg { background-color: #DDB62B; }
- .ansi-yellow-intense-fg { color: #B27D12; }
- .ansi-yellow-intense-bg { background-color: #B27D12; }
- .ansi-blue-fg { color: #208FFB; }
- .ansi-blue-bg { background-color: #208FFB; }
- .ansi-blue-intense-fg { color: #0065CA; }
- .ansi-blue-intense-bg { background-color: #0065CA; }
- .ansi-magenta-fg { color: #D160C4; }
- .ansi-magenta-bg { background-color: #D160C4; }
- .ansi-magenta-intense-fg { color: #A03196; }
- .ansi-magenta-intense-bg { background-color: #A03196; }
- .ansi-cyan-fg { color: #60C6C8; }
- .ansi-cyan-bg { background-color: #60C6C8; }
- .ansi-cyan-intense-fg { color: #258F8F; }
- .ansi-cyan-intense-bg { background-color: #258F8F; }
- .ansi-white-fg { color: #C5C1B4; }
- .ansi-white-bg { background-color: #C5C1B4; }
- .ansi-white-intense-fg { color: #A1A6B2; }
- .ansi-white-intense-bg { background-color: #A1A6B2; }
-
- .ansi-bold { font-weight: bold; }
-
- </style>
-
-
- <style type="text/css">
- /* Overrides of notebook CSS for static HTML export */
- .reveal {
- font-size: 160%;
- overflow-y: scroll;
- }
- .reveal pre {
- width: inherit;
- padding: 0.4em;
- margin: 0px;
- font-family: monospace, sans-serif;
- font-size: 80%;
- box-shadow: 0px 0px 0px rgba(0, 0, 0, 0);
- }
- .reveal pre code {
- padding: 0px;
- }
- .reveal section img {
- border: 0px solid black;
- box-shadow: 0 0 10px rgba(0, 0, 0, 0);
- }
- .reveal i {
- font-style: normal;
- font-family: FontAwesome;
- font-size: 2em;
- }
- .reveal .slides {
- text-align: left;
- }
- .reveal.fade {
- opacity: 1;
- }
- .reveal .progress {
- position: static;
- }
- div.input_area {
- padding: 0.06em;
- }
- div.code_cell {
- background-color: transparent;
- }
- div.prompt {
- width: 11ex;
- padding: 0.4em;
- margin: 0px;
- font-family: monospace, sans-serif;
- font-size: 80%;
- text-align: right;
- }
- div.output_area pre {
- font-family: monospace, sans-serif;
- font-size: 80%;
- }
- div.output_prompt {
- /* 5px right shift to account for margin in parent container */
- margin: 5px 5px 0 0;
- }
- div.text_cell.rendered .rendered_html {
- /* The H1 height seems miscalculated, we are just hidding the scrollbar */
- overflow-y: hidden;
- }
- a.anchor-link {
- /* There is still an anchor, we are only hidding it */
- display: none;
- }
- .rendered_html p {
- text-align: inherit;
- }
- </style>
-
- <!-- Custom stylesheet, it must be in the same directory as the html file -->
- <link rel="stylesheet" href="custom.css">
-
- </head>
-
-
- <body>
-
-
- <div class="reveal">
- <div class="slides">
- <section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="7-Reasons-Why-I-<3-Python">7 Reasons Why I <3 Python<a class="anchor-link" href="#7-Reasons-Why-I-<3-Python">¶</a></h1><p><img src="assets/8324418418_fd96aa2a4d_z.jpg"/>
- <!-- https://www.flickr.com/photos/46990836@N03/8324418418/in/photolist-dFAPzu-84UDhW-5GLqRK-5GLmmH-5GQPgy-dHWLKu-nko93Q-ssYxi-iTzLxq-eFFN1v-9BiGdV-rnkoGd-nkoP4z-5MazPG-6xS62e-nvGUoC-kE4q4E-anVJs5-5GQFnq-nkowMh-qTy55d-8kFagv-nkonHf-puxpDp-5GLnzc-3LV5nd-pXGaMS-5GQDKL-Jvujy-netUoC-5GLoUZ-6TnLfc-dABayk-bW2VvT-23GScN-bGyDM-5WwnHr-5BBcoR-csNGwL-e8TK7k-5GQEJs-9pnCNb-nkohSJ-dFvpe6-9kiSMS-7jnd94-7iPM12-5pstA5-j8TwuU-5GLzbr --></p>
- <h2 id="Keith-Maull-/-Sep.-14,-2016-/-Galvanize-gSchool-Boulder">Keith Maull / Sep. 14, 2016 / Galvanize gSchool Boulder<a class="anchor-link" href="#Keith-Maull-/-Sep.-14,-2016-/-Galvanize-gSchool-Boulder">¶</a></h2>
- </div>
- </div>
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="1.-It-is-beautiful,-clean-and-precise">1. It is beautiful, clean and precise<a class="anchor-link" href="#1.-It-is-beautiful,-clean-and-precise">¶</a></h1><p><img src="assets/3717019943_7e6637b322_z.jpg"/>
- <!-- https://www.flickr.com/photos/noodlefish/3717019943/in/photolist-fCfsFK-8skXjU-nAUYLu-7MVBXq-6poidm-8MMFdC-PMWrY-JMkZD-fCfsJP-2NKdk6-2Vft6H-af65YT-4SaCFj-5zx1T8-9W5SpL-JMm14-6h4SR1-qFsmnC-4R4PwH-5KvWdE-addunC-48RV8J-d2P53q-2gptSR-JMkZB-hDuYtP-8FsTtq-dWVKso-JMm12-f4iCPs-6EsGwK-32PBax-f6W9iS-6EsFHi-f6mxBd-fCfsFH-f67gX6-8QjEFY-6Hsb4o-6EwSXQ-JMiD6-5FtQ8z-2gucC1-2gpjV6-2gptUX-3cAS3L-f67gpg-5b4bYW-nRmMYh-nVbCtZ
- --></p>
-
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [1]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">):</span>
- <span class="k">while</span> <span class="n">b</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
- <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="o">%</span><span class="k">b</span>
- <span class="k">return</span> <span class="n">a</span>
-
- <span class="n">tests</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">216</span><span class="p">,</span><span class="mi">846</span><span class="p">),</span> <span class="p">(</span><span class="mi">1071</span><span class="p">,</span><span class="mi">462</span><span class="p">),</span> <span class="p">(</span><span class="mi">1024</span><span class="p">,</span><span class="mi">768</span><span class="p">)]</span>
-
- <span class="k">for</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">tests</span><span class="p">:</span>
- <span class="k">print</span><span class="p">(</span><span class="s2">"The gcd of {} and {} is {}."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)))</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>The gcd of 216 and 846 is 18.
- The gcd of 1071 and 462 is 21.
- The gcd of 1024 and 768 is 256.
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [2]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">if</span> <span class="mi">1</span> <span class="ow">and</span> <span class="bp">True</span><span class="p">:</span>
- <span class="k">print</span><span class="p">(</span><span class="s2">"1 and True is True"</span><span class="p">)</span>
- <span class="k">if</span> <span class="ow">not</span><span class="p">(</span><span class="mi">0</span> <span class="ow">or</span> <span class="bp">False</span><span class="p">):</span>
- <span class="k">print</span><span class="p">(</span><span class="s2">"0 or False is False"</span><span class="p">)</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>1 and True is True
- 0 or False is False
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [3]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">outer</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">):</span>
- <span class="c1"># defining a nested function</span>
- <span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="n">iv1</span><span class="p">,</span> <span class="n">iv2</span><span class="p">):</span>
- <span class="k">print</span><span class="p">(</span><span class="s2">"Outer v1={}, Outer v2={}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">))</span>
- <span class="k">print</span><span class="p">(</span><span class="s2">"Outer iv1={}, Outer iv2={}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">iv1</span><span class="p">,</span> <span class="n">iv2</span><span class="p">))</span>
-
- <span class="n">inner</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">)</span>
-
- <span class="n">outer</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">)</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Outer v1=1, Outer v2=2
- Outer iv1=3, Outer iv2=4
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="2.-Text-and-Strings-are-a-joy-to-work-with!">2. Text and Strings are a joy to work with!<a class="anchor-link" href="#2.-Text-and-Strings-are-a-joy-to-work-with!">¶</a></h1><p><img src="assets/157789902_ee3c6092b7_z.jpg"/>
- <!-- https://www.flickr.com/photos/76283671@N00/157789902/in/photolist-eWHry-3p5xPR-9KvWoj-8EPNse-8hHfXJ-aDGD5X-74VGBk-5EA2Gw-8SUDFg-63S4Gn-8W6FV-8yXuVZ-8z1zM5-cQiWxu-8acKHx-avHUv6-FSeczR-aXRjnp-a66RN5-9wVi9p-Am2g-avLxeY-9o3Q7f-2YEhMQ-9fCbAN-4CkWu8-bXiwuY-92VoHu-bCbYXP-CaK6BB-mEpxvX-6Ctruz-axKSdr-3dBZ3f-52LLAo-52JqBR-s57ww-9WqcpG-2BM7qe-6mVdFd-bDKMrc-7eV4Lm-UMkAg-5ULJBL-ad2qsh-ayHw4M-a4weRB-aXTXwD-4Cqfzd-fBmx4 --></p>
-
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [4]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">lorem_text</span> <span class="o">=</span> <span class="s2">"""</span>
- <span class="s2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed iaculis sapien, vitae vestibulum nunc. Vivamus pharetra risus neque, ut iaculis elit porta non. Vivamus ullamcorper dolor sit amet sollicitudin vehicula. Aliquam quis tristique nibh, eget malesuada purus. Proin varius sollicitudin turpis, fermentum mollis elit cursus vel. Suspendisse vehicula enim ac magna consequat ultricies. Pellentesque in leo et nulla porta faucibus. Quisque tincidunt in erat ut commodo. Quisque id augue a nisl mollis pulvinar id at nulla. Morbi a augue erat. Sed pharetra molestie mauris nec ultricies. Pellentesque efficitur blandit mauris, sed vulputate ante bibendum eu. Nulla facilisi. Sed porta massa eu ligula tristique, nec hendrerit elit euismod. Phasellus luctus placerat facilisis.</span>
- <span class="s2">"""</span>
-
- <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
- <span class="k">print</span> <span class="n">t</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Lorem
- ipsum
- dolor
- sit
- amet,
- consectetur
- adipiscing
- elit.
- In
- sed
- iaculis
- sapien,
- vitae
- vestibulum
- nunc.
- Vivamus
- pharetra
- risus
- neque,
- ut
- iaculis
- elit
- porta
- non.
- Vivamus
- ullamcorper
- dolor
- sit
- amet
- sollicitudin
- vehicula.
- Aliquam
- quis
- tristique
- nibh,
- eget
- malesuada
- purus.
- Proin
- varius
- sollicitudin
- turpis,
- fermentum
- mollis
- elit
- cursus
- vel.
- Suspendisse
- vehicula
- enim
- ac
- magna
- consequat
- ultricies.
- Pellentesque
- in
- leo
- et
- nulla
- porta
- faucibus.
- Quisque
- tincidunt
- in
- erat
- ut
- commodo.
- Quisque
- id
- augue
- a
- nisl
- mollis
- pulvinar
- id
- at
- nulla.
- Morbi
- a
- augue
- erat.
- Sed
- pharetra
- molestie
- mauris
- nec
- ultricies.
- Pellentesque
- efficitur
- blandit
- mauris,
- sed
- vulputate
- ante
- bibendum
- eu.
- Nulla
- facilisi.
- Sed
- porta
- massa
- eu
- ligula
- tristique,
- nec
- hendrerit
- elit
- euismod.
- Phasellus
- luctus
- placerat
- facilisis.
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [5]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
- <span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">','</span><span class="p">,</span> <span class="s2">"."</span><span class="p">]:</span>
- <span class="k">print</span> <span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">print</span> <span class="n">w</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Lorem
- ipsum
- dolor
- sit
- amet
- consectetur
- adipiscing
- elit
- In
- sed
- iaculis
- sapien
- vitae
- vestibulum
- nunc
- Vivamus
- pharetra
- risus
- neque
- ut
- iaculis
- elit
- porta
- non
- Vivamus
- ullamcorper
- dolor
- sit
- amet
- sollicitudin
- vehicula
- Aliquam
- quis
- tristique
- nibh
- eget
- malesuada
- purus
- Proin
- varius
- sollicitudin
- turpis
- fermentum
- mollis
- elit
- cursus
- vel
- Suspendisse
- vehicula
- enim
- ac
- magna
- consequat
- ultricies
- Pellentesque
- in
- leo
- et
- nulla
- porta
- faucibus
- Quisque
- tincidunt
- in
- erat
- ut
- commodo
- Quisque
- id
- augue
- a
- nisl
- mollis
- pulvinar
- id
- at
- nulla
- Morbi
- a
- augue
- erat
- Sed
- pharetra
- molestie
- mauris
- nec
- ultricies
- Pellentesque
- efficitur
- blandit
- mauris
- sed
- vulputate
- ante
- bibendum
- eu
- Nulla
- facilisi
- Sed
- porta
- massa
- eu
- ligula
- tristique
- nec
- hendrerit
- elit
- euismod
- Phasellus
- luctus
- placerat
- facilisis
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [6]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">()[:</span><span class="mi">5</span><span class="p">]:</span>
- <span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">','</span><span class="p">,</span> <span class="s2">"."</span><span class="p">]:</span>
- <span class="k">print</span> <span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">print</span> <span class="n">w</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>lorem
- ipsum
- dolor
- sit
- amet
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [7]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">()[:</span><span class="mi">5</span><span class="p">]):</span>
- <span class="k">print</span> <span class="n">w</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>amet,
- sit
- dolor
- ipsum
- Lorem
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [8]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">e_word_count</span> <span class="o">=</span> <span class="mi">0</span>
- <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">():</span>
- <span class="k">if</span> <span class="s1">'e'</span> <span class="ow">in</span> <span class="n">w</span><span class="p">:</span>
- <span class="n">e_word_count</span> <span class="o">+=</span> <span class="mi">1</span>
-
- <span class="k">print</span> <span class="n">e_word_count</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>55
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [9]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="k">def</span> <span class="nf">lorem_clean_sample</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
- <span class="n">sample</span> <span class="o">=</span> <span class="p">[]</span>
-
- <span class="k">for</span> <span class="n">w</span> <span class="ow">in</span> <span class="n">lorem_text</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]:</span>
- <span class="k">if</span> <span class="n">w</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">','</span><span class="p">,</span> <span class="s2">"."</span><span class="p">]:</span>
- <span class="n">sample</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">w</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="n">sample</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">w</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
-
- <span class="k">return</span> <span class="n">sample</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="3.-There-are-just-enough-data-types-to-get-started-...">3. There are just enough data types to get started ...<a class="anchor-link" href="#3.-There-are-just-enough-data-types-to-get-started-...">¶</a></h1><p><img src="assets/5009171128_22a32d98a1_z.jpg"/>
- <!-- https://www.flickr.com/photos/mfatic/5009171128/in/photolist-8CDj4s-sv2cN-cHqD9-H82d2J-ee998U-bEg1kD-9objQt-7VXmyG-cAJyP-7Y7fTE-jDQKGR-HD7PEu-bSZHYz-8Am1VT-oRXevU-kzA4Gf-8kQchz-3omu6m-agcavR-6sBGoq-pHA4Hi-6FxhWP-dwp8YN-aiLJvD-fB7Kkw-ncoPxB-dp25WU-6pVCtc-m7vJRb-HZRrD9-cxJDVf-bu3h8-bdMe2V-ktakv4-dipJP9-cGTzWC-naBhMm-eKtpXn-6L69ux-fkNEmY-2jiSJA-HMK37d-yZAzzm-8VUF5f-wNAJr-9o6Q1M-8wRXZ7-dipLfC-8AYxxx-aEPqLh --></p>
-
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [10]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># dictionaries / maps</span>
- <span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"a"</span><span class="p">:</span> <span class="mi">1</span><span class="p">}</span>
-
- <span class="c1"># tuples (immutable "lists")</span>
- <span class="n">tup</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"b"</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-
- <span class="c1"># lists [1, 2, 3]</span>
- <span class="n">lis</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"c"</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="...-and-they-play-well-together">... and they play well together<a class="anchor-link" href="#...-and-they-play-well-together">¶</a></h1>
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [11]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">list</span><span class="p">(</span><span class="n">tup</span><span class="p">)</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[11]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>['b', 2]</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [12]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">)</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[12]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>('c', 1)</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [13]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">)])</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[13]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'c': 1}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [14]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="p">([</span><span class="n">tup</span><span class="p">])</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[14]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'b': 2}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [15]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">([</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">])</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[15]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'a': None, 'b': None, 'c': None}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [16]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">((</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">))</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[16]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'a': None, 'b': None, 'c': None}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [17]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span> <span class="o">=</span> <span class="nb">dict</span><span class="o">.</span><span class="n">fromkeys</span><span class="p">([</span><span class="s2">"a"</span><span class="p">,</span> <span class="s2">"b"</span><span class="p">,</span> <span class="s2">"c"</span><span class="p">])</span>
- <span class="n">d</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[17]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'a': None, 'b': None, 'c': None}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [18]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">([</span><span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">)]))</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [19]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[19]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'a': None, 'b': None, 'c': 1}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [20]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">dict</span><span class="p">([(</span><span class="s1">'a'</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">lis</span><span class="p">),</span> <span class="n">tup</span><span class="p">]))</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [21]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">d</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[21]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'a': 1, 'b': 2, 'c': 1}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="4.-And-there-are-some-nice-short-cuts-...">4. And there are some nice short cuts ...<a class="anchor-link" href="#4.-And-there-are-some-nice-short-cuts-...">¶</a></h1><p><img src="assets/13563527335_7282ccd926_o.jpg"/>
- <!-- https://www.flickr.com/photos/penguinandfish/13563527335/in/photolist-mEyC8z-xokZe-cvG6i-cvG6f-78pQcU-687d5B-J8JY5t-6PrzZ9-77x4pd-oYgqzQ-dNLFAw-8ZGhsA-5yAQGL-pfJj19-iqW4gY-6Dn5in-99oXCd-8WipvU-4gMDBd-9uYt1L-xokZj-ayxHqU-4S6ukZ-5B2cX4-7tUS2M-4pc9m2-sjqz2E-6MJPeL-xokfd-7tUSfT-az5QPT-7dy1no-f4wS42-xokZk-xokfa-5Re3Dz-6vGHki-9qBB8c-4gcyjN-xokeZ-f9EGpb-ah5B12-h4hW4Y-az5QUt-9mznbJ-sjqzfW-7dxZT1-s2ZpHS-FRcxry-3zGaoU --></p>
-
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [22]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># list comprehensions</span>
- <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">16</span><span class="p">)]</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[22]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [23]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span><span class="o">%</span><span class="k">2</span>] # say what???
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[23]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>[1, 3, 5, 7, 9, 11, 13, 15]</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [24]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">xrange</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">16</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">i</span><span class="o">%</span><span class="k">2</span>] # aha!!!
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[24]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>[2, 4, 6, 8, 10, 12, 14]</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [25]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="c1"># dictionary comprehensions</span>
- <span class="n">lorem_wlen</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">lorem_clean_sample</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)}</span>
- <span class="n">lorem_wlen</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[25]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'adipiscing': 10,
- 'amet': 4,
- 'consectetur': 11,
- 'dolor': 5,
- 'elit': 4,
- 'in': 2,
- 'ipsum': 5,
- 'lorem': 5,
- 'sed': 3,
- 'sit': 3}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [26]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">lorem_cnt_e</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">key</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s2">"e"</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">lorem_clean_sample</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">)}</span>
- <span class="n">lorem_cnt_e</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[26]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{'adipiscing': 0,
- 'amet': 1,
- 'consectetur': 2,
- 'dolor': 0,
- 'elit': 1,
- 'in': 0,
- 'ipsum': 0,
- 'lorem': 1,
- 'sed': 1,
- 'sit': 0}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="5.-Batteries-included-....">5. Batteries included ....<a class="anchor-link" href="#5.-Batteries-included-....">¶</a></h1><p><img src="assets/13610718405_c247cc2925_z.jpg" />
- <!-- https://www.flickr.com/photos/vintuitive/13610718405/in/photolist-mJJuoH-67y58t-pVuSW4-askYpe-nZfcyQ-2ZXjk4-9dh1gK-6QVJJT-9kixy9-91VEbQ-aBm9AH-arTTuE-r19JmA-37LN9W-cvvasy-aH15vp-5pgu3M-d77zoG-62epCR-4Js3Ki-BrNHkh-3VbqeB-7bzvtv-cKwNwE-3kGb35-9K4bGg-nMScWf-e9XLkL-nfRyBD-9DEb2v-5FkYhQ-qbYryC-5u18Ud-ovqtVt-oBnzvF-abfaWh-o54g8R-7yjvs1-5PHjgc-6J8QnF-p1bz4C-Jo61wp-9pGc6S-5FbjF8-cj1FNE-qpmBrn-pCQJAN-cRYEyC-hBpyoD-4X3LvS --></p>
-
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [27]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">requests</span>
-
- <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"http://www2.ed.gov/data.json"</span><span class="p">)</span>
- <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
- <span class="n">payload_dict</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">json</span><span class="p">()</span> <span class="c1"># loading the data into a dict via the json() just works!</span>
- <span class="k">else</span><span class="p">:</span>
- <span class="k">print</span> <span class="s2">"Could not load the data at this endpoint."</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div><div class="fragment">
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [28]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">payload_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[28]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>[u'conformsTo', u'dataset', u'describedBy', u'@context', u'@id', u'@type']</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [29]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data</span> <span class="o">=</span> <span class="p">{}</span>
- <span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">payload_dict</span><span class="p">[</span><span class="s1">'dataset'</span><span class="p">]:</span>
-
- <span class="k">if</span> <span class="s2">"ARRA"</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'description'</span><span class="p">]:</span>
-
- <span class="n">dsid</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'identifier'</span><span class="p">]</span>
- <span class="n">desc</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'description'</span><span class="p">]</span>
- <span class="n">title</span> <span class="o">=</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'title'</span><span class="p">]</span>
-
- <span class="n">arra_data</span><span class="p">[</span><span class="n">dsid</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'description'</span><span class="p">:</span> <span class="n">desc</span><span class="p">,</span> <span class="s1">'title'</span><span class="p">:</span> <span class="n">title</span><span class="p">}</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [30]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[30]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{u'ED-2485': {'description': u'The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.',
- 'title': u'ED Grants: Investing in Innovation (i3) Fund 2010'},
- u'ED-5562': {'description': u'The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.',
- 'title': u'ED Grants: Investing in Innovation (i3) Fund 2011'}}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [31]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data_dc</span> <span class="o">=</span> <span class="p">{</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'identifier'</span><span class="p">]</span> <span class="p">:</span>
- <span class="p">{</span><span class="s1">'description'</span><span class="p">:</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'description'</span><span class="p">],</span>
- <span class="s1">'title'</span><span class="p">:</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'title'</span><span class="p">]}</span>
- <span class="k">for</span> <span class="n">dataset</span> <span class="ow">in</span> <span class="n">payload_dict</span><span class="p">[</span><span class="s1">'dataset'</span><span class="p">]</span>
- <span class="k">if</span> <span class="s2">"ARRA"</span> <span class="ow">in</span> <span class="n">dataset</span><span class="p">[</span><span class="s1">'description'</span><span class="p">]</span> <span class="p">}</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [32]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">arra_data_dc</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[32]:</div>
-
-
- <div class="output_text output_subarea output_execute_result">
- <pre>{u'ED-2485': {'description': u'The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.',
- 'title': u'ED Grants: Investing in Innovation (i3) Fund 2010'},
- u'ED-5562': {'description': u'The Investing in Innovation (i3) Fund website depicts and allows downloading of general information on the i3 applicants received, grantees awarded and project locations. The Investing in Innovation Fund, established under section 14007 of the American Recovery and Reinvestment Act of 2009 (ARRA), provides funding to support (1) local educational agencies (LEAs), and (2) nonprofit organizations in partnership with (a) one or more LEAs or (b) a consortium of schools. The purpose of the i3 program is to provide competitive grants to applicants with a record of improving student achievement and attainment in order to expand the implementation of, and investment in, innovative practices that are demonstrated to have an impact on improving student achievement or student growth, closing achievement gaps, decreasing dropout rates, increasing high school graduation rates, or increasing college enrollment and completion rates. These grants will (1) allow eligible entities to expand and develop innovative practices that can serve as models of best practices, (2) allow eligible entities to work in partnership with the private sector and the philanthropic community, and (3) identify and document best practices that can be shared and taken to scale based on demonstrated success.',
- 'title': u'ED Grants: Investing in Innovation (i3) Fund 2011'}}</pre>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="6.-Juptyer-Notebooks">6. Juptyer Notebooks<a class="anchor-link" href="#6.-Juptyer-Notebooks">¶</a></h1><p><img src="assets/jupyter_logo.jpg" />
- <!-- http://jupyter.org --></p>
-
- </div>
- </div>
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [33]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">csv</span>
-
- <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"Export.csv"</span><span class="p">)</span> <span class="k">as</span> <span class="n">fi</span><span class="p">:</span>
- <span class="n">csv_fi</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">DictReader</span><span class="p">(</span><span class="n">fi</span><span class="p">)</span>
- <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">csv_fi</span><span class="p">:</span>
- <span class="k">print</span> <span class="n">row</span><span class="p">[</span><span class="s1">'MarketName'</span><span class="p">],</span> <span class="n">row</span><span class="p">[</span><span class="s1">'x'</span><span class="p">],</span> <span class="n">row</span><span class="p">[</span><span class="s1">'y'</span><span class="p">]</span>
- <span class="k">break</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre> Caledonia Farmers Market Association - Danville -72.140305 44.411013
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [34]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">map_data_objects</span> <span class="o">=</span> <span class="p">{}</span>
- <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"Export.csv"</span><span class="p">)</span> <span class="k">as</span> <span class="n">fi</span><span class="p">:</span>
- <span class="n">csv_fi</span> <span class="o">=</span> <span class="n">csv</span><span class="o">.</span><span class="n">DictReader</span><span class="p">(</span><span class="n">fi</span><span class="p">)</span>
- <span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">csv_fi</span><span class="p">:</span>
- <span class="k">try</span><span class="p">:</span>
- <span class="n">map_data_objects</span><span class="p">[</span><span class="n">row</span><span class="p">[</span><span class="s1">'FMID'</span><span class="p">]]</span> <span class="o">=</span> <span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">'MarketName'</span><span class="p">],</span> <span class="nb">float</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">'x'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()),</span> <span class="nb">float</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">'y'</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
- <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
- <span class="k">print</span><span class="p">(</span><span class="s2">"Count not convert row for FMID: {}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">row</span><span class="p">[</span><span class="s1">'FMID'</span><span class="p">]))</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt"></div>
- <div class="output_subarea output_stream output_stdout output_text">
- <pre>Count not convert row for FMID: 2000001
- Count not convert row for FMID: 1011689
- Count not convert row for FMID: 2000002
- Count not convert row for FMID: 1002854
- Count not convert row for FMID: 2000004
- Count not convert row for FMID: 2000005
- Count not convert row for FMID: 2000006
- Count not convert row for FMID: 2000007
- Count not convert row for FMID: 2000008
- Count not convert row for FMID: 2000009
- Count not convert row for FMID: 2000010
- Count not convert row for FMID: 2000011
- Count not convert row for FMID: 2000012
- Count not convert row for FMID: 2000013
- Count not convert row for FMID: 2000014
- Count not convert row for FMID: 2000016
- Count not convert row for FMID: 2000017
- Count not convert row for FMID: 2000019
- Count not convert row for FMID: 2000020
- Count not convert row for FMID: 2000021
- Count not convert row for FMID: 2000022
- Count not convert row for FMID: 2000026
- Count not convert row for FMID: 2000028
- Count not convert row for FMID: 2000030
- Count not convert row for FMID: 2000032
- Count not convert row for FMID: 2000033
- Count not convert row for FMID: 2000034
- Count not convert row for FMID: 2000035
- Count not convert row for FMID: 2000036
- </pre>
- </div>
- </div>
-
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [35]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="kn">import</span> <span class="nn">folium</span>
-
- <span class="n">us_fm_map</span> <span class="o">=</span> <span class="n">folium</span><span class="o">.</span><span class="n">Map</span><span class="p">(</span><span class="n">location</span><span class="o">=</span><span class="p">[</span><span class="mf">39.232253</span><span class="p">,</span> <span class="o">-</span><span class="mf">97.910156</span><span class="p">],</span>
- <span class="n">zoom_start</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
- <span class="n">tiles</span><span class="o">=</span><span class="s1">'Stamen Terrain'</span><span class="p">)</span>
-
- <span class="k">for</span> <span class="n">fmid</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">map_data_objects</span><span class="o">.</span><span class="n">iteritems</span><span class="p">():</span>
- <span class="n">name</span><span class="p">,</span> <span class="n">lon</span><span class="p">,</span> <span class="n">lat</span> <span class="o">=</span> <span class="n">v</span>
-
- <span class="k">if</span> <span class="p">(</span><span class="n">lon</span> <span class="o"><</span> <span class="o">-</span><span class="mi">104</span> <span class="ow">and</span> <span class="n">lon</span> <span class="o">></span> <span class="o">-</span><span class="mi">106</span><span class="p">)</span> \
- <span class="ow">and</span> \
- <span class="p">(</span><span class="n">lat</span> <span class="o"><</span> <span class="mi">43</span> <span class="ow">and</span> <span class="n">lat</span> <span class="o">></span> <span class="mi">30</span><span class="p">):</span>
- <span class="n">folium</span><span class="o">.</span><span class="n">Marker</span><span class="p">([</span><span class="n">lat</span><span class="p">,</span> <span class="n">lon</span><span class="p">],</span>
- <span class="n">popup</span><span class="o">=</span><span class="nb">unicode</span><span class="p">(</span><span class="n">name</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">))</span>
- <span class="p">)</span><span class="o">.</span><span class="n">add_to</span><span class="p">(</span><span class="n">us_fm_map</span><span class="p">)</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- </div></section><section>
- <div class="cell border-box-sizing code_cell rendered">
- <div class="input">
- <div class="prompt input_prompt">In [36]:</div>
- <div class="inner_cell">
- <div class="input_area">
- <div class=" highlight hl-ipython2"><pre><span></span><span class="n">us_fm_map</span>
- </pre></div>
-
- </div>
- </div>
- </div>
-
- <div class="output_wrapper">
- <div class="output">
-
-
- <div class="output_area"><div class="prompt output_prompt">Out[36]:</div>
-
- <div class="output_html rendered_html output_subarea output_execute_result">
- <div style="width:100%;"><div style="position:relative;width:100%;height:0;padding-bottom:60%;"><iframe src="data:text/html;base64,CiAgICAgICAgPCFET0NUWVBFIGh0bWw+CiAgICAgICAgPGhlYWQ+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0LzAuNy4zL2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuMTEuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5taW4uanMiPjwvc2NyaXB0PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xlYWZsZXQubWFya2VyY2x1c3Rlci8wLjQuMC9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXItc3JjLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvbGVhZmxldC5tYXJrZXJjbHVzdGVyLmpzIj48L3NjcmlwdD4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC8wLjcuMy9sZWFmbGV0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC5taW4uY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiIC8+CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuMS4wL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sZWFmbGV0Lm1hcmtlcmNsdXN0ZXIvMC40LjAvTWFya2VyQ2x1c3Rlci5EZWZhdWx0LmNzcyIgLz4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGVhZmxldC5tYXJrZXJjbHVzdGVyLzAuNC4wL01hcmtlckNsdXN0ZXIuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIiAvPgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPgoKICAgICAgICAgICAgaHRtbCwgYm9keSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAjbWFwIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uOmFic29sdXRlOwogICAgICAgICAgICAgICAgdG9wOjA7CiAgICAgICAgICAgICAgICBib3R0b206MDsKICAgICAgICAgICAgICAgIHJpZ2h0OjA7CiAgICAgICAgICAgICAgICBsZWZ0OjA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPHN0eWxlPiAjbWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjIHsKICAgICAgICAgICAgICAgIHBvc2l0aW9uIDogcmVsYXRpdmU7CiAgICAgICAgICAgICAgICB3aWR0aCA6IDEwMC4wJTsKICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgIHRvcDogMC4wJTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgPC9zdHlsZT4KICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICA8L2hlYWQ+CiAgICAgICAgPGJvZHk+CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyIgPjwvZGl2PgogICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgIDwvYm9keT4KICAgICAgICA8c2NyaXB0PgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgc291dGhXZXN0ID0gTC5sYXRMbmcoLTkwLCAtMTgwKTsKICAgICAgICAgICAgdmFyIG5vcnRoRWFzdCA9IEwubGF0TG5nKDkwLCAxODApOwogICAgICAgICAgICB2YXIgYm91bmRzID0gTC5sYXRMbmdCb3VuZHMoc291dGhXZXN0LCBub3J0aEVhc3QpOwoKICAgICAgICAgICAgdmFyIG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyA9IEwubWFwKCdtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMnLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXI6WzM5LjIzMjI1MywtOTcuOTEwMTU2XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvb206IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNzY2Mjg4OGFiZTU2NDg3NWIzNzc4NjA1OTU4MWU2YWEgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICdodHRwczovL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC90ZXJyYWluL3t6fS97eH0ve3l9LmpwZycsCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWluWm9vbTogMSwKICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGlvbjogJ01hcCB0aWxlcyBieSA8YSBocmVmPSJodHRwOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4sIHVuZGVyIDxhIGhyZWY9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPi4gRGF0YSBieSA8YSBocmVmPSJodHRwOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+LCB1bmRlciA8YSBocmVmPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjAiPkNDIEJZIFNBPC9hPi4nLAogICAgICAgICAgICAgICAgICAgIGRldGVjdFJldGluYTogZmFsc2UKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CgogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDRkMDllMDViZmYyNDZiMmIwNjliYjY0NjQzNDM2YzAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42ODg0NTYsLTEwNC45ODA0N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmVhMjQ3ODg4NDA4NGJmYmFhN2UxYmY0MDdlNjUzMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjBlYTkwYTMzYjdmNGU2ODljNWQwMzdhMDE2MjRhYmYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzYwZWE5MGEzM2I3ZjRlNjg5YzVkMDM3YTAxNjI0YWJmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb3V0aCBQZWFybCBTdHJlZXQgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZWEyNDc4ODg0MDg0YmZiYWE3ZTFiZjQwN2U2NTMyMy5zZXRDb250ZW50KGh0bWxfNjBlYTkwYTMzYjdmNGU2ODljNWQwMzdhMDE2MjRhYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80NGQwOWUwNWJmZjI0NmIyYjA2OWJiNjQ2NDM0MzZjMC5iaW5kUG9wdXAocG9wdXBfYmVhMjQ3ODg4NDA4NGJmYmFhN2UxYmY0MDdlNjUzMjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mNzVkZWRjZDE5YWU0Zjc5ODNlMWY2MTJiYjRmNmFmMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI3MDQsLTEwNC42Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTVmN2ExMjJlYzFhNDMzMTlmYTNkYjYzNWU3NzAwNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjVmZWMxMThlNzAzNDIyNjg0ZTM2OTBhYjFiMTY0N2QgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2I1ZmVjMTE4ZTcwMzQyMjY4NGUzNjkwYWIxYjE2NDdkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQdWVibG8gRmFybWVycyYjMzk7IE1hcmtldGVlcnM8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTVmN2ExMjJlYzFhNDMzMTlmYTNkYjYzNWU3NzAwNTguc2V0Q29udGVudChodG1sX2I1ZmVjMTE4ZTcwMzQyMjY4NGUzNjkwYWIxYjE2NDdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjc1ZGVkY2QxOWFlNGY3OTgzZTFmNjEyYmI0ZjZhZjIuYmluZFBvcHVwKHBvcHVwX2E1ZjdhMTIyZWMxYTQzMzE5ZmEzZGI2MzVlNzcwMDU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTE3MjFmM2IyYzA2NDVlNjljYzAzODNiZWZmMmMxYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wNDU1LC0xMDQuMTQ1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZTQyMGI1MzljMTg0YWU2ODJjNDA0MzExYjAzNTUxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTI0NDMzMzYzYjY0ODAwOGI0NjVkYjg5YTJjY2FlZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2UyNDQzMzM2M2I2NDgwMDhiNDY1ZGI4OWEyY2NhZWUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRodXJzZGF5IEFmdGVybm9vbiBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZTQyMGI1MzljMTg0YWU2ODJjNDA0MzExYjAzNTUxNC5zZXRDb250ZW50KGh0bWxfN2UyNDQzMzM2M2I2NDgwMDhiNDY1ZGI4OWEyY2NhZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lMTcyMWYzYjJjMDY0NWU2OWNjMDM4M2JlZmYyYzFhYy5iaW5kUG9wdXAocG9wdXBfOGU0MjBiNTM5YzE4NGFlNjgyYzQwNDMxMWIwMzU1MTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mZmI5YWYwNDliNjE0ZTA3YThjMzhmOWM4YjRjNTNkYSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUwMTUsLTEwNS4wOTddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxMTVlZjI4ZWIxNTQxMTRhNGE4NzBjMjhjZGU1MmE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzNDE0MzMyMTI4YTQ2MjU4Yjg1NzYxMDVmYWRlODRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84MzQxNDMzMjEyOGE0NjI1OGI4NTc2MTA1ZmFkZTg0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3VsbGV5IEdyZWVuaG91c2UgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTE1ZWYyOGViMTU0MTE0YTRhODcwYzI4Y2RlNTJhNC5zZXRDb250ZW50KGh0bWxfODM0MTQzMzIxMjhhNDYyNThiODU3NjEwNWZhZGU4NGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mZmI5YWYwNDliNjE0ZTA3YThjMzhmOWM4YjRjNTNkYS5iaW5kUG9wdXAocG9wdXBfNDExNWVmMjhlYjE1NDExNGE0YTg3MGMyOGNkZTUyYTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iNzc5M2JkMWZkNTg0YmVhOTgxMjg0N2M1ZTdkNjlkZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljk3ODM4MzYsLTEwNS4xMzA2Nzk1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOTUwYzMzZGZkMTU0ODFjOGVkZGJiYjk3ZjBkYmI3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZjYyN2UyYWQ0NDY0Mjk5ODk3ZDU2ZjMyMDg1MjhjOCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOGY2MjdlMmFkNDQ2NDI5OTg5N2Q1NmYzMjA4NTI4YzgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIExvdWlzdmlsbGUgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjk1MGMzM2RmZDE1NDgxYzhlZGRiYmI5N2YwZGJiNzMuc2V0Q29udGVudChodG1sXzhmNjI3ZTJhZDQ0NjQyOTk4OTdkNTZmMzIwODUyOGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjc3OTNiZDFmZDU4NGJlYTk4MTI4NDdjNWU3ZDY5ZGYuYmluZFBvcHVwKHBvcHVwX2Y5NTBjMzNkZmQxNTQ4MWM4ZWRkYmJiOTdmMGRiYjczKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTU1YzQ0ODJiOGI5NDEyZTgzNWRjYjk0YWVhMWFmMWUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45ODcxODIsLTEwNS4wOTM5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDUyZjg3MWY3ODVjNDk4MmI3ODA2M2NkNjYxMDQzN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzI5N2Q1NDUyYzI4NDMxNDkxYWZjMWJjMmNlYmJiNmQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMyOTdkNTQ1MmMyODQzMTQ5MWFmYzFiYzJjZWJiYjZkIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYWZheWV0dGUgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTJmODcxZjc4NWM0OTgyYjc4MDYzY2Q2NjEwNDM3Zi5zZXRDb250ZW50KGh0bWxfMzI5N2Q1NDUyYzI4NDMxNDkxYWZjMWJjMmNlYmJiNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NTVjNDQ4MmI4Yjk0MTJlODM1ZGNiOTRhZWExYWYxZS5iaW5kUG9wdXAocG9wdXBfMDUyZjg3MWY3ODVjNDk4MmI3ODA2M2NkNjYxMDQzN2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80Mzk3MTJiNjM0YTk0MDRjOTNkNTE0YjZiNTllMmY3NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjQxMDcsLTEwNS42NzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RhYzkzZTE4Yzk2MzQ4ZGJhZTliMTBmMDAwNGY0ZjdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1ZGNlNGZjNTFhNjQxODc5YWMyNDMyN2ZiNzUzNDRmID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80NWRjZTRmYzUxYTY0MTg3OWFjMjQzMjdmYjc1MzQ0ZiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTGlvbiYjMzk7cyBQYXJrIGFuZCBNaWRsYW5kIFNwdXIgUmQuPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhYzkzZTE4Yzk2MzQ4ZGJhZTliMTBmMDAwNGY0ZjdkLnNldENvbnRlbnQoaHRtbF80NWRjZTRmYzUxYTY0MTg3OWFjMjQzMjdmYjc1MzQ0Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQzOTcxMmI2MzRhOTQwNGM5M2Q1MTRiNmI1OWUyZjc0LmJpbmRQb3B1cChwb3B1cF9kYWM5M2UxOGM5NjM0OGRiYWU5YjEwZjAwMDRmNGY3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JmNjJkODQzNDJiYTRlZTM5MzRlOTI0NGIyYTk3OGQwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTkxNDA5LC0xMDQuOTg5MTY4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2VjNzZiMTc4NTE0MTYyYmJhYTk2OThmMmM4YmVhYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjc4Mjk4ZWEzNDc0YjQ2OGE0ZjUyMDI2MjgzZThiMSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2I3ODI5OGVhMzQ3NGI0NjhhNGY1MjAyNjI4M2U4YjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE1ldHJvIERlbnZlciBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3ZWM3NmIxNzg1MTQxNjJiYmFhOTY5OGYyYzhiZWFiLnNldENvbnRlbnQoaHRtbF9jYjc4Mjk4ZWEzNDc0YjQ2OGE0ZjUyMDI2MjgzZThiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2JmNjJkODQzNDJiYTRlZTM5MzRlOTI0NGIyYTk3OGQwLmJpbmRQb3B1cChwb3B1cF9jN2VjNzZiMTc4NTE0MTYyYmJhYTk2OThmMmM4YmVhYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxMTI1NTM0YmQwMjRjMmM5M2FkNDFhZTI2OTAwMzFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzU4NTQsLTEwNS4wMTEyM10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWYwNGM5ZGQ0YjA2NGNmYzlhYWQ4MjVlMTZjNDViNzkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFhZDViOWQ0NTUzNDFlMmI3MzQ4NzRlNWU1OGYxYTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UxYWQ1YjlkNDU1MzQxZTJiNzM0ODc0ZTVlNThmMWE5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBIaWdobGFuZCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjA0YzlkZDRiMDY0Y2ZjOWFhZDgyNWUxNmM0NWI3OS5zZXRDb250ZW50KGh0bWxfZTFhZDViOWQ0NTUzNDFlMmI3MzQ4NzRlNWU1OGYxYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yMTEyNTUzNGJkMDI0YzJjOTNhZDQxYWUyNjkwMDMxYS5iaW5kUG9wdXAocG9wdXBfZWYwNGM5ZGQ0YjA2NGNmYzlhYWQ4MjVlMTZjNDViNzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iM2ZjNDEwMTg2MjM0OTgwYTg4ZWZhMGM5N2E4M2RhYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjE1MzQ4MTcsLTEwNS4xMjg2NTYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTlhOWViNmU2ZTc0Mzc4OTBmN2NkNGE4ZTkzOTc3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iN2U1ODk2YWU0NzU0ODg4YTBjMjgzODE1MmFkMGU3YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYjdlNTg5NmFlNDc1NDg4OGEwYzI4MzgxNTJhZDBlN2EiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJvdWxkZXIgQ291bnR5IEZhcm1lcnMmIzM5OyBNYXJrZXQgLSBMb25nbW9udCAmYW1wOyBCb3VsZGVyPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q1OWE5ZWI2ZTZlNzQzNzg5MGY3Y2Q0YThlOTM5NzdkLnNldENvbnRlbnQoaHRtbF9iN2U1ODk2YWU0NzU0ODg4YTBjMjgzODE1MmFkMGU3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IzZmM0MTAxODYyMzQ5ODBhODhlZmEwYzk3YTgzZGFjLmJpbmRQb3B1cChwb3B1cF9kNTlhOWViNmU2ZTc0Mzc4OTBmN2NkNGE4ZTkzOTc3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I1NTIyNjI5YzEzZTQ3ZGZhZjBlMzk2OTFkNDc1ZTlmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNjk4LC0xMDUuNjAxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNTY1N2YxZTE1ODI0ZTBlYjQxNjhlNzBjYjZjMjVmNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNWRmMjgyOGUzMzI0ZGMxOGIyYTg3MDRjNjI4MzNjZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDVkZjI4MjhlMzMyNGRjMThiMmE4NzA0YzYyODMzY2UiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFF1ZXN0YSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTY1N2YxZTE1ODI0ZTBlYjQxNjhlNzBjYjZjMjVmNi5zZXRDb250ZW50KGh0bWxfMDVkZjI4MjhlMzMyNGRjMThiMmE4NzA0YzYyODMzY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iNTUyMjYyOWMxM2U0N2RmYWYwZTM5NjkxZDQ3NWU5Zi5iaW5kUG9wdXAocG9wdXBfZDU2NTdmMWUxNTgyNGUwZWI0MTY4ZTcwY2I2YzI1ZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9mYTZjODcxOTMwZTU0MTc0OTA1MWU3YmRkYzZkZDJhMCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjg5OTQ3NzEsLTEwNS45NTkzMzg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDIyMGJjNTVkNmY0ZDJmYjk4MGIyODU4MDg4ZWExZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjBkMDIxOTk0MmU0YzQxOWRhYjQ5MWIwMTBhZTkzNCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMzIwZDAyMTk5NDJlNGM0MTlkYWI0OTFiMDEwYWU5MzQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFsYW1vZ29yZG8gRmFybWVycyYjMzk7IE1hcmtldCAtRG93bnRvd248L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQyMjBiYzU1ZDZmNGQyZmI5ODBiMjg1ODA4OGVhMWUuc2V0Q29udGVudChodG1sXzMyMGQwMjE5OTQyZTRjNDE5ZGFiNDkxYjAxMGFlOTM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZmE2Yzg3MTkzMGU1NDE3NDkwNTFlN2JkZGM2ZGQyYTAuYmluZFBvcHVwKHBvcHVwX2U0MjIwYmM1NWQ2ZjRkMmZiOTgwYjI4NTgwODhlYTFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjU2M2UzMWVhYjM4NDM5ZjhjZTgzZmExZDE5NjQ2YTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC41MzQ5MjA5LC0xMDQuNjc0NzgwN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ2YjY0NGZhYTc3NDA4YmI0YjY3NTRkZjY4ZmM2YTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQzYzYxNzM4N2RlNGM2NzhhMzFkMWRiYmZlMjcwZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y0M2M2MTczODdkZTRjNjc4YTMxZDFkYmJmZTI3MGY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBSYW5jaG8gRmFybSAmYW1wOyBBcnQgbWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0NmI2NDRmYWE3NzQwOGJiNGI2NzU0ZGY2OGZjNmE3LnNldENvbnRlbnQoaHRtbF9mNDNjNjE3Mzg3ZGU0YzY3OGEzMWQxZGJiZmUyNzBmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2I1NjNlMzFlYWIzODQzOWY4Y2U4M2ZhMWQxOTY0NmE2LmJpbmRQb3B1cChwb3B1cF85NDZiNjQ0ZmFhNzc0MDhiYjRiNjc1NGRmNjhmYzZhNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzhiZDllZTVjMDZhOTRkNTVhZDIwMWE0ZTM0YjIzOWJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNjIzNjkwNCwtMTA0Ljc4MDg5OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQzY2JhMDJlOWRhMjRlOTU4ZTJiY2M1ZWNkMDgxZmNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2YWM0NmFkNTNlNDRmYjJhMWU2NzU3YWFmNjQxMGRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wNmFjNDZhZDUzZTQ0ZmIyYTFlNjc1N2FhZjY0MTBkYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgV2Fsc2VuYnVyZyBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2NiYTAyZTlkYTI0ZTk1OGUyYmNjNWVjZDA4MWZjZi5zZXRDb250ZW50KGh0bWxfMDZhYzQ2YWQ1M2U0NGZiMmExZTY3NTdhYWY2NDEwZGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YmQ5ZWU1YzA2YTk0ZDU1YWQyMDFhNGUzNGIyMzliZi5iaW5kUG9wdXAocG9wdXBfNDNjYmEwMmU5ZGEyNGU5NThlMmJjYzVlY2QwODFmY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81ZTJmZWQxMTk5YTk0OTkyODEzNzRhOWM0ZjEzYWRmYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjA1NDU1MjEsLTEwNC45NTMyNTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMWIwODZjODRhNjY0OGU5YjRhYjZlOGY3YjNjMDk5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMTFjNzQ3ZTQ2N2E0YzBiOWVmNDQxZjkxNWYwNWE4ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjExYzc0N2U0NjdhNGMwYjllZjQ0MWY5MTVmMDVhOGQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdoZWF0bGFuZCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxYjA4NmM4NGE2NjQ4ZTliNGFiNmU4ZjdiM2MwOTkxLnNldENvbnRlbnQoaHRtbF9mMTFjNzQ3ZTQ2N2E0YzBiOWVmNDQxZjkxNWYwNWE4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVlMmZlZDExOTlhOTQ5OTI4MTM3NGE5YzRmMTNhZGZiLmJpbmRQb3B1cChwb3B1cF9iMWIwODZjODRhNjY0OGU5YjRhYjZlOGY3YjNjMDk5MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzMDIyNzM0NTBkMzQwZmU5OTFjNDNjMmJiYzc2YjUxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNDc5NzExLC0xMDQuOTA0MTA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNDMxNGZkYjNjYzk0NjE5YmUxMmNlYTRhMmVhZjNkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzEyNzViODJiMjg0OTM1OTdhNTgzYmMxMzFjZGI5MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWMxMjc1YjgyYjI4NDkzNTk3YTU4M2JjMTMxY2RiOTEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdpbmRzb3IgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNDMxNGZkYjNjYzk0NjE5YmUxMmNlYTRhMmVhZjNkNS5zZXRDb250ZW50KGh0bWxfZWMxMjc1YjgyYjI4NDkzNTk3YTU4M2JjMTMxY2RiOTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMzAyMjczNDUwZDM0MGZlOTkxYzQzYzJiYmM3NmI1MS5iaW5kUG9wdXAocG9wdXBfMTQzMTRmZGIzY2M5NDYxOWJlMTJjZWE0YTJlYWYzZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iMzM4OWNlYWYzOTE0ZTBkYjNmMzNiZjE3MmI1MWYyNiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU4NzgyNzUsLTEwNS4wNzc1ODU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Njc4NmFkZWU3ZjY0ZjcxOTlhMTA5MTY1ZGYzNjNjYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmFlOGQ0Y2MwNTA0MDIxYWUzOGZkZjgxODM3N2U5NSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZmZhZThkNGNjMDUwNDAyMWFlMzhmZGY4MTgzNzdlOTUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE5vQ28gRm9vZCBDbHVzdGVyIFdpbnRlciBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2Nzg2YWRlZTdmNjRmNzE5OWExMDkxNjVkZjM2M2NiLnNldENvbnRlbnQoaHRtbF9mZmFlOGQ0Y2MwNTA0MDIxYWUzOGZkZjgxODM3N2U5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IzMzg5Y2VhZjM5MTRlMGRiM2YzM2JmMTcyYjUxZjI2LmJpbmRQb3B1cChwb3B1cF81Njc4NmFkZWU3ZjY0ZjcxOTlhMTA5MTY1ZGYzNjNjYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBmMDUzNmQ1ZjUxOTQ2MGNhZDcyZjQ1YmVlZjEwZGNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjE3NTE4LC0xMDQuODk5ODcxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWEwMTEyMDQzZTM0Y2I0YmVjNDc4MGY2YTFkYTU2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZjE2YzYzYzczMTg0N2RiYTAyZmUzZWIwMDk1NzM1YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2YxNmM2M2M3MzE4NDdkYmEwMmZlM2ViMDA5NTczNWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIExhbmRtYXJrIEdyZWVud29vZCBWaWxsYWdlIEZyZXNoIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZWEwMTEyMDQzZTM0Y2I0YmVjNDc4MGY2YTFkYTU2ZC5zZXRDb250ZW50KGh0bWxfN2YxNmM2M2M3MzE4NDdkYmEwMmZlM2ViMDA5NTczNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZjA1MzZkNWY1MTk0NjBjYWQ3MmY0NWJlZWYxMGRjZC5iaW5kUG9wdXAocG9wdXBfNGVhMDExMjA0M2UzNGNiNGJlYzQ3ODBmNmExZGE1NmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMTI0ZjJiZjEzMzE0OWEyOTZhNjBlYTk5MDhiZDI2MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc0MDg3LC0xMDQuOTU2ODYzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmZjMjQxOTg5ZDc0ZjlkYjhmZTU0ZWM4YzJjYjI5OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTQyMjg5Mjk4NjI0MzU0YjM4NzU2Nzk2MzNjMTI2OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2E0MjI4OTI5ODYyNDM1NGIzODc1Njc5NjMzYzEyNjgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENpdHkgUGFyayBFc3BsYW5hZGUgRnJlc2ggTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2ZmMyNDE5ODlkNzRmOWRiOGZlNTRlYzhjMmNiMjk5LnNldENvbnRlbnQoaHRtbF9jYTQyMjg5Mjk4NjI0MzU0YjM4NzU2Nzk2MzNjMTI2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzMxMjRmMmJmMTMzMTQ5YTI5NmE2MGVhOTkwOGJkMjYwLmJpbmRQb3B1cChwb3B1cF81NmZjMjQxOTg5ZDc0ZjlkYjhmZTU0ZWM4YzJjYjI5OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzk2NmVlYWZhNjEwZTQxYjQ5NmE2M2Y4NzQyYzQ1MDJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzU4MDQzLC0xMDQuODk5NzQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjI3MmNkODFkOGQ0ZDZjYTcyZjdhYzE0NWFkODRlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YjE3N2FhZDY1YWI0ZTdkOTQ2ZmE3NTllZTMxOGMzZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWIxNzdhYWQ2NWFiNGU3ZDk0NmZhNzU5ZWUzMThjM2QiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFN0YXBsZXRvbiBGcmVzaCBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTIyNzJjZDgxZDhkNGQ2Y2E3MmY3YWMxNDVhZDg0ZTMuc2V0Q29udGVudChodG1sXzViMTc3YWFkNjVhYjRlN2Q5NDZmYTc1OWVlMzE4YzNkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTY2ZWVhZmE2MTBlNDFiNDk2YTYzZjg3NDJjNDUwMmYuYmluZFBvcHVwKHBvcHVwXzEyMjcyY2Q4MWQ4ZDRkNmNhNzJmN2FjMTQ1YWQ4NGUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGZmNDQ4MGZhZTI2NDVhNjlhMTlmZTgzNTZmMjhjODggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS42MiwtMTA1LjI0MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWYwNGE4YzQxN2U2NDlmMDlmZDkxMzJiOGJkOGJhYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQ1NDA4ZmNhMTY0NGRhY2FmOWRiMTE4MzU1NzZlMzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q0NTQwOGZjYTE2NDRkYWNhZjlkYjExODM1NTc2ZTMyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBJbmRpYW4gSGlsbHMgRmFybWVyJiMzOTtzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWYwNGE4YzQxN2U2NDlmMDlmZDkxMzJiOGJkOGJhYzMuc2V0Q29udGVudChodG1sX2Q0NTQwOGZjYTE2NDRkYWNhZjlkYjExODM1NTc2ZTMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGZmNDQ4MGZhZTI2NDVhNjlhMTlmZTgzNTZmMjhjODguYmluZFBvcHVwKHBvcHVwXzlmMDRhOGM0MTdlNjQ5ZjA5ZmQ5MTMyYjhiZDhiYWMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjA1N2YwMDZmMDlkNDQxNDhjYTgyMzdmZjU3YjU1NDIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43NTkwMjUsLTEwNC40MzMzNTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyOWVhZmZlNTYyMTQwOTQ5ZmU0Mzc2YjIxN2EyYmM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiMzNlMDUxMGM2ZDRlMDdhYWMzZWU4MzhmNGIwZDk1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YjMzZTA1MTBjNmQ0ZTA3YWFjM2VlODM4ZjRiMGQ5NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmFybWVycyAmYW1wOyBBcnRpc2FucyBDb21tdW5pdHkgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyOWVhZmZlNTYyMTQwOTQ5ZmU0Mzc2YjIxN2EyYmM0LnNldENvbnRlbnQoaHRtbF82YjMzZTA1MTBjNmQ0ZTA3YWFjM2VlODM4ZjRiMGQ5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IwNTdmMDA2ZjA5ZDQ0MTQ4Y2E4MjM3ZmY1N2I1NTQyLmJpbmRQb3B1cChwb3B1cF84MjllYWZmZTU2MjE0MDk0OWZlNDM3NmIyMTdhMmJjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2JkOWM0MTdiZDNhNjQ1ZTk4OWI1NDcxYjFlYzliOThhID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNDM3NDc4LC0xMDUuMjQzNDQxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNzZmY2JlYmFiMjA0ZTQ4OWVkZWVhNTYzNDcwOTAwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NjM0YjQzYzlkMjE0YmU0OTM3ODY0YzFlMmNlYjQ3NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODYzNGI0M2M5ZDIxNGJlNDkzNzg2NGMxZTJjZWI0NzYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENDRkEgRmFybWVycyBNYXJrZXQgQ2Fub24gQ2l0eTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNzZmY2JlYmFiMjA0ZTQ4OWVkZWVhNTYzNDcwOTAwMy5zZXRDb250ZW50KGh0bWxfODYzNGI0M2M5ZDIxNGJlNDkzNzg2NGMxZTJjZWI0NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZDljNDE3YmQzYTY0NWU5ODliNTQ3MWIxZWM5Yjk4YS5iaW5kUG9wdXAocG9wdXBfZTc2ZmNiZWJhYjIwNGU0ODllZGVlYTU2MzQ3MDkwMDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MTI3OGNmM2VlZmE0ODA4ODZhODFjNmM4YTRhMmY5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjUzMjY1NywtMTA1Ljk5NDEyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ODgxNDAyOTliYjk0YjZlYjc0MjgxNzdjYjNiM2Q2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MGZiMjY2NGU5NjE0OTYwOWQwYzk4MTc2MjJlZDU2YSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTBmYjI2NjRlOTYxNDk2MDlkMGM5ODE3NjIyZWQ1NmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENDRkEgU2FsaWRhIEZhcm1lcnMgTWFya2V0IDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODgxNDAyOTliYjk0YjZlYjc0MjgxNzdjYjNiM2Q2MC5zZXRDb250ZW50KGh0bWxfOTBmYjI2NjRlOTYxNDk2MDlkMGM5ODE3NjIyZWQ1NmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83MTI3OGNmM2VlZmE0ODA4ODZhODFjNmM4YTRhMmY5OS5iaW5kUG9wdXAocG9wdXBfNTg4MTQwMjk5YmI5NGI2ZWI3NDI4MTc3Y2IzYjNkNjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kNDczZTg4MzI1OTg0NGQxYWQyOTU0OTc4YmU2ODQ2MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjkyODQzLC0xMDUuMDg5OTMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ODZjYWZkMDk3ZGY0MGM5OWVjZDE5OTE3N2VkN2M3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMDRjODY1ZWMwYTI0OTQwODhjMWNmZWM1ZGY1NzBhYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjA0Yzg2NWVjMGEyNDk0MDg4YzFjZmVjNWRmNTcwYWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyb29tZmllbGQgRmFybWVycyYjMzk7IE1hcmtldCBhdCBIb2x5IENvbWZvcnRlciBFcGlzY29wYWwgQ2h1cmNoPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4NmNhZmQwOTdkZjQwYzk5ZWNkMTk5MTc3ZWQ3Yzc3LnNldENvbnRlbnQoaHRtbF9mMDRjODY1ZWMwYTI0OTQwODhjMWNmZWM1ZGY1NzBhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q0NzNlODgzMjU5ODQ0ZDFhZDI5NTQ5NzhiZTY4NDYxLmJpbmRQb3B1cChwb3B1cF83ODZjYWZkMDk3ZGY0MGM5OWVjZDE5OTE3N2VkN2M3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I2OGJhZWQzOTFjNzQ5NzQ4ZTRmOTMxZGFmODBiM2FlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuOTI1MDA1MiwtMTA1Ljc4NjQ3NjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1NmFlYTNhZGM5OTQ0YThhZjkyM2U0ODU2MDQ5MGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlZWFiZGEwNWFmODRkOWRiYWI0YTBlZTdmMjg5YjRhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZWVhYmRhMDVhZjg0ZDlkYmFiNGEwZWU3ZjI4OWI0YSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgV2ludGVyIFBhcmsgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjU2YWVhM2FkYzk5NDRhOGFmOTIzZTQ4NTYwNDkwYTguc2V0Q29udGVudChodG1sX2NlZWFiZGEwNWFmODRkOWRiYWI0YTBlZTdmMjg5YjRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjY4YmFlZDM5MWM3NDk3NDhlNGY5MzFkYWY4MGIzYWUuYmluZFBvcHVwKHBvcHVwX2I1NmFlYTNhZGM5OTQ0YThhZjkyM2U0ODU2MDQ5MGE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTM1ZTYxM2I0MGE3NDQ1Mjk2YTI3Njk0MDQxZjA5ZGIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4wNjUzNywtMTA0LjE4NDM5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWFmYWRmNjdjMWNlNGFjZTg0M2EzOTJkZTkwYjYyNDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDZiYjEwNGEzMzdiNDE5MWJmZTQwNmM0ODIzMzgyNTggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2YmIxMDRhMzM3YjQxOTFiZmU0MDZjNDgyMzM4MjU4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBUb3JyaW5ndG9uIEZhcm1lciYjMzk7cyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWFmYWRmNjdjMWNlNGFjZTg0M2EzOTJkZTkwYjYyNDguc2V0Q29udGVudChodG1sXzQ2YmIxMDRhMzM3YjQxOTFiZmU0MDZjNDgyMzM4MjU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTM1ZTYxM2I0MGE3NDQ1Mjk2YTI3Njk0MDQxZjA5ZGIuYmluZFBvcHVwKHBvcHVwXzVhZmFkZjY3YzFjZTRhY2U4NDNhMzkyZGU5MGI2MjQ4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMmY2M2JhOTJkMDc2NDM4M2FkNjUxZTVmNDhkNDNiMjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44ODkxNTUsLTEwNC45OTExODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJlNTYwNWRlN2JjYTRhZjE5NDY3MjhjNmJkMDYyOWViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjMWFjZjNiYTdmMjRiYzE4ZjgxZGE3MWRhNzQ5YWI5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81YzFhY2YzYmE3ZjI0YmMxOGY4MWRhNzFkYTc0OWFiOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTm9ydGhnbGVubiBNYWxsIEZhcm1lcnMgbWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlNTYwNWRlN2JjYTRhZjE5NDY3MjhjNmJkMDYyOWViLnNldENvbnRlbnQoaHRtbF81YzFhY2YzYmE3ZjI0YmMxOGY4MWRhNzFkYTc0OWFiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzJmNjNiYTkyZDA3NjQzODNhZDY1MWU1ZjQ4ZDQzYjI0LmJpbmRQb3B1cChwb3B1cF8yZTU2MDVkZTdiY2E0YWYxOTQ2NzI4YzZiZDA2MjllYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlmNzNjMGMwNWExMjQ4MzFiZTdlZTI0NmEyNWNlYWZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjAxODQ3LC0xMDQuOTU4MDc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDFlMjU1MzE0OTk0NDQ1OTExYmNhZTdlMTJiZTU2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzA5NmFiYWMwYjI0NTI5OTBiZTUzMDk0YzdlMTNlOSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDMwOTZhYmFjMGIyNDUyOTkwYmU1MzA5NGM3ZTEzZTkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRoZSBWaWN0b3J5IE1hcmtldCBvbiBTb3V0aCBVbml2ZXJzaXR5IDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDFlMjU1MzE0OTk0NDQ1OTExYmNhZTdlMTJiZTU2MC5zZXRDb250ZW50KGh0bWxfZDMwOTZhYmFjMGIyNDUyOTkwYmU1MzA5NGM3ZTEzZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZjczYzBjMDVhMTI0ODMxYmU3ZWUyNDZhMjVjZWFmYi5iaW5kUG9wdXAocG9wdXBfNGQxZTI1NTMxNDk5NDQ0NTkxMWJjYWU3ZTEyYmU1NjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNzNlN2ZjMGRlMDc0ZDU2ODBhM2I3NTJlYjk3MTA2NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjA4NDksLTEwNS45MzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4YWY4OGE3NjUzMTQ1MTZiNzM1NzNiY2VkMzQ2NjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhMTc5Yzc3ZDlhZDRlNzk4YTI0NzQ0OTk5YjAwMzhkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82YTE3OWM3N2Q5YWQ0ZTc5OGEyNDc0NDk5OWIwMDM4ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3JhbmJ5IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4YWY4OGE3NjUzMTQ1MTZiNzM1NzNiY2VkMzQ2NjE1LnNldENvbnRlbnQoaHRtbF82YTE3OWM3N2Q5YWQ0ZTc5OGEyNDc0NDk5OWIwMDM4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E3M2U3ZmMwZGUwNzRkNTY4MGEzYjc1MmViOTcxMDY3LmJpbmRQb3B1cChwb3B1cF9lOGFmODhhNzY1MzE0NTE2YjczNTczYmNlZDM0NjYxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzdjMDQ2MzdlYTQ2NTRiNDFhNjQ3ZGFmYjE3YTY0ZjAyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTE4NiwtMTA0Ljc2MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTllMTBmMDBiM2IzNDYzZTk5YzhiYWFjYzkyZjg0ZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI5YTViMThkZjIzNDc3NmJjZTY5OWRiZWM0MzkyMTQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiOWE1YjE4ZGYyMzQ3NzZiY2U2OTlkYmVjNDM5MjE0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQYXJrZXJmZXN0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5ZTEwZjAwYjNiMzQ2M2U5OWM4YmFhY2M5MmY4NGQ4LnNldENvbnRlbnQoaHRtbF80YjlhNWIxOGRmMjM0Nzc2YmNlNjk5ZGJlYzQzOTIxNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzdjMDQ2MzdlYTQ2NTRiNDFhNjQ3ZGFmYjE3YTY0ZjAyLmJpbmRQb3B1cChwb3B1cF85OWUxMGYwMGIzYjM0NjNlOTljOGJhYWNjOTJmODRkOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2M2OTgxZjI2ZTkzYTRjOWI5OGQ2YzdkMDc0ZjYyZDBiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNTQ1MzgzLC0xMDUuNTczMTg0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWFhODZkOTk5NDU0MGNkODYwNGUyZWJmMzdkNTRlYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYThlMzA3NzU5MGU0YTZjOTgxMzhiYTIzOTI5NjAyMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWE4ZTMwNzc1OTBlNGE2Yzk4MTM4YmEyMzkyOTYwMjAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENhcGl0YW4gRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MWFhODZkOTk5NDU0MGNkODYwNGUyZWJmMzdkNTRlYy5zZXRDb250ZW50KGh0bWxfYWE4ZTMwNzc1OTBlNGE2Yzk4MTM4YmEyMzkyOTYwMjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jNjk4MWYyNmU5M2E0YzliOThkNmM3ZDA3NGY2MmQwYi5iaW5kUG9wdXAocG9wdXBfODFhYTg2ZDk5OTQ1NDBjZDg2MDRlMmViZjM3ZDU0ZWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82ZDdhN2ZjODMwMmE0NDBhYjY4MDkyZDcyMzg3MGNiYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI2OCwtMTA0LjYxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWQ2NWNhZTRhYWM0ZTMwYWNjOTc0YmYzNWRlNDllZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjlkZmJjYmRjODU0N2M0OTk2YjgxY2IwMGE3N2E2MSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDI5ZGZiY2JkYzg1NDdjNDk5NmI4MWNiMDBhNzdhNjEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRoZSBNYWluIEV2ZW50IGFuZCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxZDY1Y2FlNGFhYzRlMzBhY2M5NzRiZjM1ZGU0OWVmLnNldENvbnRlbnQoaHRtbF9kMjlkZmJjYmRjODU0N2M0OTk2YjgxY2IwMGE3N2E2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkN2E3ZmM4MzAyYTQ0MGFiNjgwOTJkNzIzODcwY2JiLmJpbmRQb3B1cChwb3B1cF8wMWQ2NWNhZTRhYWM0ZTMwYWNjOTc0YmYzNWRlNDllZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZiZTMyZmRmMTc0MTQyMTI4NDRhMDRlMGE5ODk5NzE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODMwNTQzLC0xMDQuODIyMzA5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjgyMzAyMmY4NDc0MWIyOTVkZTdhMzM5YTIyM2UzZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85N2M1MDRlMGQzZDI0OWE1OGZlOTdhOWQ0NzMxOTc4OSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTdjNTA0ZTBkM2QyNDlhNThmZTk3YTlkNDczMTk3ODkiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENvbG9yYWRvIEZhcm0gYW5kIEFydCBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWY4MjMwMjJmODQ3NDFiMjk1ZGU3YTMzOWEyMjNlM2Quc2V0Q29udGVudChodG1sXzk3YzUwNGUwZDNkMjQ5YTU4ZmU5N2E5ZDQ3MzE5Nzg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmJlMzJmZGYxNzQxNDIxMjg0NGEwNGUwYTk4OTk3MTQuYmluZFBvcHVwKHBvcHVwX2VmODIzMDIyZjg0NzQxYjI5NWRlN2EzMzlhMjIzZTNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzJhNDM5M2Q5Mjk1NDJmYmFjNGNkNGE4MzVjMjhiMzUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS41NTQ3LC0xMDQuODg1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83M2MyZTA4OWRmNGM0MjNhOWM4NmM3Y2E1M2YxNjc2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZmJmYTBkNThkMmE0NDA1YjZhYTBlNmQyY2M3Yjk3ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmZiZmEwZDU4ZDJhNDQwNWI2YWEwZTZkMmNjN2I5N2YiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIExvbmV0cmVlIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczYzJlMDg5ZGY0YzQyM2E5Yzg2YzdjYTUzZjE2NzY3LnNldENvbnRlbnQoaHRtbF8yZmJmYTBkNThkMmE0NDA1YjZhYTBlNmQyY2M3Yjk3Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyYTQzOTNkOTI5NTQyZmJhYzRjZDRhODM1YzI4YjM1LmJpbmRQb3B1cChwb3B1cF83M2MyZTA4OWRmNGM0MjNhOWM4NmM3Y2E1M2YxNjc2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBhMDUwMTViNDY3YTQ3NzI5NjIwZWM5ZDQ4NDk1YmNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTM1NSwtMTA0Ljc4NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2I2MzcwMDhkMDBkNGZkMmFhMGYzMGNiOTI5Y2FiYjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2UwMGI0YjFkMmQ1NGZiMWEzZDQ4NTk4MTMwYzVhYzEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NlMDBiNGIxZDJkNTRmYjFhM2Q0ODU5ODEzMGM1YWMxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBQYXJrZXIgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2I2MzcwMDhkMDBkNGZkMmFhMGYzMGNiOTI5Y2FiYjkuc2V0Q29udGVudChodG1sX2NlMDBiNGIxZDJkNTRmYjFhM2Q0ODU5ODEzMGM1YWMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGEwNTAxNWI0NjdhNDc3Mjk2MjBlYzlkNDg0OTViY2UuYmluZFBvcHVwKHBvcHVwXzNiNjM3MDA4ZDAwZDRmZDJhYTBmMzBjYjkyOWNhYmI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDM2MzhjMTgzYjdjNGZiOTkxMzFjZTA1N2RjZTNiMDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45Mzc3MTYsLTEwNC44MTQ2ODhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFlYzg5MzA4M2QzNjQ3Y2Y5Y2U5YzU3ZTk1MGFhZDA2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyY2RmZTdkNTVmNjQxZmJiNmU0OTZmMmZiNDA1OGNjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iMmNkZmU3ZDU1ZjY0MWZiYjZlNDk2ZjJmYjQwNThjYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ29sb3JhZG8gRmFybSBhbmQgQXJ0IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZWM4OTMwODNkMzY0N2NmOWNlOWM1N2U5NTBhYWQwNi5zZXRDb250ZW50KGh0bWxfYjJjZGZlN2Q1NWY2NDFmYmI2ZTQ5NmYyZmI0MDU4Y2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MzYzOGMxODNiN2M0ZmI5OTEzMWNlMDU3ZGNlM2IwOC5iaW5kUG9wdXAocG9wdXBfMWVjODkzMDgzZDM2NDdjZjljZTljNTdlOTUwYWFkMDYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZWZkZGNiNGFjNTI0ZTdjODE4OTM5NzNlOTFlMWIzZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU0NzA4MiwtMTA0Ljk5OTY0OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZkNzI4OWQ4MDYwNDgxNWIyOGYxODc2Mjc2N2M5N2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM5MTIwMmJhMWI5NDM0OGE0MDUzNWI5ODdjNmM0YTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzJjOTEyMDJiYTFiOTQzNDhhNDA1MzViOTg3YzZjNGEyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBIaWdobGFuZHMgUmFuY2ggRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZmQ3Mjg5ZDgwNjA0ODE1YjI4ZjE4NzYyNzY3Yzk3Yy5zZXRDb250ZW50KGh0bWxfMmM5MTIwMmJhMWI5NDM0OGE0MDUzNWI5ODdjNmM0YTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85ZWZkZGNiNGFjNTI0ZTdjODE4OTM5NzNlOTFlMWIzZi5iaW5kUG9wdXAocG9wdXBfZGZkNzI4OWQ4MDYwNDgxNWIyOGYxODc2Mjc2N2M5N2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZmRmMjBjY2YxYzA0Y2ZiODNhMmY0N2JmODhmMzhmOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjYxMDg1NiwtMTA1LjA5MjY3MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGEwY2E3MGVmMDZiNDU0NDlhOTBjNzcxMTJmYTM0OTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjliOWZjODNkM2E2NDUwNWE5MjQ4ODExZTM0NGU1Y2MgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Y5YjlmYzgzZDNhNjQ1MDVhOTI0ODgxMWUzNDRlNWNjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBTb3V0aHdlc3QgUGxhemEgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGEwY2E3MGVmMDZiNDU0NDlhOTBjNzcxMTJmYTM0OTIuc2V0Q29udGVudChodG1sX2Y5YjlmYzgzZDNhNjQ1MDVhOTI0ODgxMWUzNDRlNWNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGZkZjIwY2NmMWMwNGNmYjgzYTJmNDdiZjg4ZjM4ZjkuYmluZFBvcHVwKHBvcHVwXzBhMGNhNzBlZjA2YjQ1NDQ5YTkwYzc3MTEyZmEzNDkyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTlhOThjMGRiZmJlNDgyZWIwMWI0MGQxMTUzNWM5MmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MDY5LC0xMDUuNjk3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZWNkNzRiNzQ2ZDk0MWJkYjNjYTU1YTJkOGFjZmU0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZDEyNWYzNDM2Yjc0YTc4OWEyOTI3YTI1NmQ3ZDE0OCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMGQxMjVmMzQzNmI3NGE3ODlhMjkyN2EyNTZkN2QxNDgiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEdlb3JnZXRvd24gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGVjZDc0Yjc0NmQ5NDFiZGIzY2E1NWEyZDhhY2ZlNGQuc2V0Q29udGVudChodG1sXzBkMTI1ZjM0MzZiNzRhNzg5YTI5MjdhMjU2ZDdkMTQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTlhOThjMGRiZmJlNDgyZWIwMWI0MGQxMTUzNWM5MmIuYmluZFBvcHVwKHBvcHVwXzBlY2Q3NGI3NDZkOTQxYmRiM2NhNTVhMmQ4YWNmZTRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTNjMTY0Mzg4OTI4NDk2Y2I2NTkzOGE1YmU3YWNlOTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MzI4LC0xMDUuMDA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZGFmYTIzMGZhYmQ0MmUzOTI2YmJkYWZmMmU2ODFhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNWE0OTgzOTQyYzA0ZmRjYmEzOTk5ODE0ZjM0ZjVlYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDVhNDk4Mzk0MmMwNGZkY2JhMzk5OTgxNGYzNGY1ZWEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRoZSBPc2FnZSBNZXJjYWRvPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NkYWZhMjMwZmFiZDQyZTM5MjZiYmRhZmYyZTY4MWE2LnNldENvbnRlbnQoaHRtbF8wNWE0OTgzOTQyYzA0ZmRjYmEzOTk5ODE0ZjM0ZjVlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzYzE2NDM4ODkyODQ5NmNiNjU5MzhhNWJlN2FjZTkyLmJpbmRQb3B1cChwb3B1cF9jZGFmYTIzMGZhYmQ0MmUzOTI2YmJkYWZmMmU2ODFhNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxMTBiMWRjYmVlMzQ5MDdhOGNjM2VhZDM3NmI0MmU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzExMTAwNywtMTA1LjA4MTM1NTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjMmFhN2RmY2JmMzQwOTM4MTBkMTBiNWRiMGI5N2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjYzQ4MTY1MDJiODQwNGZiMjRhZjE2ZDkxMWQwMjVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zY2M0ODE2NTAyYjg0MDRmYjI0YWYxNmQ5MTFkMDI1YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQmVsbWFyIEZyZXNoIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YzJhYTdkZmNiZjM0MDkzODEwZDEwYjVkYjBiOTdhMi5zZXRDb250ZW50KGh0bWxfM2NjNDgxNjUwMmI4NDA0ZmIyNGFmMTZkOTExZDAyNWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMTEwYjFkY2JlZTM0OTA3YThjYzNlYWQzNzZiNDJlOC5iaW5kUG9wdXAocG9wdXBfN2MyYWE3ZGZjYmYzNDA5MzgxMGQxMGI1ZGIwYjk3YTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MDQyNmQwMjYzNjc0ZjhmYmFlMjNiOTRlMzc2OThiMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc2OTkwNCwtMTA1LjA3NTI0NzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkMzFlYmZmZGM3ODQyNzQ4MjM2NmY5YWVjMGFlY2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3YmJhYjUwNDg4YzQwYzNiMTdjNjdiMjNlYzY0Y2UxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hN2JiYWI1MDQ4OGM0MGMzYjE3YzY3YjIzZWM2NGNlMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRm91ciBTZWFzb25zIEZhcm1lcnMgYW5kIEFydGlzYW5zIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDMxZWJmZmRjNzg0Mjc0ODIzNjZmOWFlYzBhZWNhMi5zZXRDb250ZW50KGh0bWxfYTdiYmFiNTA0ODhjNDBjM2IxN2M2N2IyM2VjNjRjZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MDQyNmQwMjYzNjc0ZjhmYmFlMjNiOTRlMzc2OThiMS5iaW5kUG9wdXAocG9wdXBfNGQzMWViZmZkYzc4NDI3NDgyMzY2ZjlhZWMwYWVjYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85MzJhOGEyNDIwMDk0YWYxOTJiMTQwYWQyZDI0ZDgwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjc1ODg4LC0xMDUuMzg0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzUzMzlkODAwYjQ2NDJmMGJkZjgwN2NiNmIxODI1NDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWRjZTBkOWExNDA3NGYzYzhkZThhNTg4YzZiZmQ2ZTkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VkY2UwZDlhMTQwNzRmM2M4ZGU4YTU4OGM2YmZkNmU5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBKYWNrYWxvcGUgU3F1YXJlIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1MzM5ZDgwMGI0NjQyZjBiZGY4MDdjYjZiMTgyNTQ2LnNldENvbnRlbnQoaHRtbF9lZGNlMGQ5YTE0MDc0ZjNjOGRlOGE1ODhjNmJmZDZlOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkzMmE4YTI0MjAwOTRhZjE5MmIxNDBhZDJkMjRkODBlLmJpbmRQb3B1cChwb3B1cF83NTMzOWQ4MDBiNDY0MmYwYmRmODA3Y2I2YjE4MjU0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzgzZGU5OTRjMTI3YjRhYzg4M2ZmZGZlNTI4MjFhMmE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuMzYxMTk1LC0xMDQuNTk1NTUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YjQ1NDkwZjY1ZGM0ODFmOWM1NWNjNDRlMDI4OWRlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTUzMTQ2ZGE4ODI0Mzc3OGQ1NTYyZGY0MjliYTc1YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZGE1MzE0NmRhODgyNDM3NzhkNTU2MmRmNDI5YmE3NWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEVsaXphYmV0aCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YjQ1NDkwZjY1ZGM0ODFmOWM1NWNjNDRlMDI4OWRlOC5zZXRDb250ZW50KGh0bWxfZGE1MzE0NmRhODgyNDM3NzhkNTU2MmRmNDI5YmE3NWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84M2RlOTk0YzEyN2I0YWM4ODNmZmRmZTUyODIxYTJhNy5iaW5kUG9wdXAocG9wdXBfNGI0NTQ5MGY2NWRjNDgxZjljNTVjYzQ0ZTAyODlkZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjZhNzQ5OTAyNzk0MjUzYjFhMGI2ZDM0ODY3NGJhNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjU5MzAxMywtMTA1LjIyNzU0Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjgwMWE3OWNmOTk4NGQ4YWJhZDZiMWNlN2UyNzI0ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODJmZjUyZjAzMDZkNDI3OWIwNWIwNmU4NTZhYzQ3ZTIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgyZmY1MmYwMzA2ZDQyNzliMDViMDZlODU2YWM0N2UyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYXMgVmVnYXM6IFRyaS1Db3VudHkgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODAxYTc5Y2Y5OTg0ZDhhYmFkNmIxY2U3ZTI3MjRmNi5zZXRDb250ZW50KGh0bWxfODJmZjUyZjAzMDZkNDI3OWIwNWIwNmU4NTZhYzQ3ZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NjZhNzQ5OTAyNzk0MjUzYjFhMGI2ZDM0ODY3NGJhNS5iaW5kUG9wdXAocG9wdXBfYjgwMWE3OWNmOTk4NGQ4YWJhZDZiMWNlN2UyNzI0ZjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZTQyMmM5NzRiODg0Yzk4OTYxZmU2MjJjNTM1ZThlMiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjM5NjY5NCwtMTA0LjUyMTM5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQ3Mjc0MmY2NDQxNDRmYzhkZGYxZDk4MTdkZDBmYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTBhMmNhMjhhNjY2NGU3MThmNjIyNWE1Mzc0NWM4NzggPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2UwYTJjYTI4YTY2NjRlNzE4ZjYyMjVhNTM3NDVjODc4IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNYWluIFN0cmVldCBSb3N3ZWxsIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQ3Mjc0MmY2NDQxNDRmYzhkZGYxZDk4MTdkZDBmYzQuc2V0Q29udGVudChodG1sX2UwYTJjYTI4YTY2NjRlNzE4ZjYyMjVhNTM3NDVjODc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGU0MjJjOTc0Yjg4NGM5ODk2MWZlNjIyYzUzNWU4ZTIuYmluZFBvcHVwKHBvcHVwX2JkNzI3NDJmNjQ0MTQ0ZmM4ZGRmMWQ5ODE3ZGQwZmM0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGJkODZjMTZkNjY4NDQwZDkzZDM1OWY0Y2FhMTEyMWEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi41NTI3NDEsLTEwNS4yNzExNjhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4ZTAwM2I3ZjY2NDQzZDE4ZDdhNDEwMTUxZDc2YmY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzOWZkYTZhMzgyZDQ0ZjQ4NzVlMTkwMmY3OGUzM2FhID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81MzlmZGE2YTM4MmQ0NGY0ODc1ZTE5MDJmNzhlMzNhYSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTW9yZW5vIFZhbGxleSBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4ZTAwM2I3ZjY2NDQzZDE4ZDdhNDEwMTUxZDc2YmY1LnNldENvbnRlbnQoaHRtbF81MzlmZGE2YTM4MmQ0NGY0ODc1ZTE5MDJmNzhlMzNhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiZDg2YzE2ZDY2ODQ0MGQ5M2QzNTlmNGNhYTExMjFhLmJpbmRQb3B1cChwb3B1cF9jOGUwMDNiN2Y2NjQ0M2QxOGQ3YTQxMDE1MWQ3NmJmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E4N2ZmYjc0MTkwNTRjYjRiNWZhMGZmMjJiN2UyYmY5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMDQ5MTc0MSwtMTA1LjA0NzQyMDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwZTgzMTE5YjU3MzQ1NzRhYzIwNTFlZDlmN2ZkY2IwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1NjRlOWQxNDNiYTQxNmE5MGUyOGI0NmU3YWQ1ODg3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80NTY0ZTlkMTQzYmE0MTZhOTBlMjhiNDZlN2FkNTg4NyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRXJpZSBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwZTgzMTE5YjU3MzQ1NzRhYzIwNTFlZDlmN2ZkY2IwLnNldENvbnRlbnQoaHRtbF80NTY0ZTlkMTQzYmE0MTZhOTBlMjhiNDZlN2FkNTg4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E4N2ZmYjc0MTkwNTRjYjRiNWZhMGZmMjJiN2UyYmY5LmJpbmRQb3B1cChwb3B1cF9mMGU4MzExOWI1NzM0NTc0YWMyMDUxZWQ5ZjdmZGNiMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJjYjJiMmM3YjkyYjQ2YzE4NWZiNzcxMTE4YmE5N2U4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzIuOTI2NDksLTEwNS45NjA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODY1Nzk2ZWFjMjc0OTY2OWQ4MzkyODE2MzM1NzkxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNzYwYmJlZWIzZmU0NzMwODg1MjJkMWQzNjc0YWZlYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDc2MGJiZWViM2ZlNDczMDg4NTIyZDFkMzY3NGFmZWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFsYW1vZ29yZG8gT3Rlcm8gQ291bnR5IEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg2NTc5NmVhYzI3NDk2NjlkODM5MjgxNjMzNTc5MTIuc2V0Q29udGVudChodG1sX2Q3NjBiYmVlYjNmZTQ3MzA4ODUyMmQxZDM2NzRhZmVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmNiMmIyYzdiOTJiNDZjMTg1ZmI3NzExMThiYTk3ZTguYmluZFBvcHVwKHBvcHVwX2M4NjU3OTZlYWMyNzQ5NjY5ZDgzOTI4MTYzMzU3OTEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZGQ4ZWY0YzU1NDcyNDc1N2JmNDhmZjM4MWQ1MTA0ZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4xMDExLC0xMDUuMTY5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMWVmZWFkZGE5ZjY0ODY3YmQ5YTZkNGU5ZGM1ODhlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZGZjYTdhMDBjZTU0MDljODk3ZjEyOTBmMjdiNzRkZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMWRmY2E3YTAwY2U1NDA5Yzg5N2YxMjkwZjI3Yjc0ZGYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE5pd290IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxZWZlYWRkYTlmNjQ4NjdiZDlhNmQ0ZTlkYzU4OGU0LnNldENvbnRlbnQoaHRtbF8xZGZjYTdhMDBjZTU0MDljODk3ZjEyOTBmMjdiNzRkZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2RkOGVmNGM1NTQ3MjQ3NTdiZjQ4ZmYzODFkNTEwNGY0LmJpbmRQb3B1cChwb3B1cF9iMWVmZWFkZGE5ZjY0ODY3YmQ5YTZkNGU5ZGM1ODhlNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2FiODNjZjg5MWM5YTQwNDE4ZDE3NGNlMGYxMmUyYjNkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuNDA3MTUyLC0xMDUuNTc0NjA2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZjY3MGUzMTk3NjQ0NmI0YWRjNWY2NGE5NzAyZWY2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDQ5NzBkZjk4ZTE0NzVhYmRhZTQxNDdmMjMxNzBjMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOWQ0OTcwZGY5OGUxNDc1YWJkYWU0MTQ3ZjIzMTcwYzMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRhb3MgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZjY3MGUzMTk3NjQ0NmI0YWRjNWY2NGE5NzAyZWY2ZS5zZXRDb250ZW50KGh0bWxfOWQ0OTcwZGY5OGUxNDc1YWJkYWU0MTQ3ZjIzMTcwYzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYjgzY2Y4OTFjOWE0MDQxOGQxNzRjZTBmMTJlMmIzZC5iaW5kUG9wdXAocG9wdXBfZWY2NzBlMzE5NzY0NDZiNGFkYzVmNjRhOTcwMmVmNmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hYzAzYjdkOGUzYTI0YTA0ODcwNTg3YzlhMzJhZTM1NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjIzNzI5MywtMTA0Ljk5OTQ4OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzc4NTRiMTA1YmQ5NDE5MDk3YTZmY2M5Nzc3ODUyYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMyMjBjMWIwYWZlNDliMWE3NmNmNTE5ZGY1YThmZGUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2VjMjIwYzFiMGFmZTQ5YjFhNzZjZjUxOWRmNWE4ZmRlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEb3dudG93biBNZWFkIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzc4NTRiMTA1YmQ5NDE5MDk3YTZmY2M5Nzc3ODUyYmMuc2V0Q29udGVudChodG1sX2VjMjIwYzFiMGFmZTQ5YjFhNzZjZjUxOWRmNWE4ZmRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYWMwM2I3ZDhlM2EyNGEwNDg3MDU4N2M5YTMyYWUzNTYuYmluZFBvcHVwKHBvcHVwXzM3ODU0YjEwNWJkOTQxOTA5N2E2ZmNjOTc3Nzg1MmJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzkwNjNlNjE1NjVhNDRiNmFiNTVlOWJiNzNlYTUxNzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40MjMxMzgsLTEwNC42ODg1NDddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5NGQxNGRmNjZmYTQxNGY5ZTBiMDIzZWY0ODgzM2I2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc3YWJlZjU0OTQyMTQ1YmQ5MTdlNjBhMDU1ZDQ2MGQ0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83N2FiZWY1NDk0MjE0NWJkOTE3ZTYwYTA1NWQ0NjBkNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3JlZWxleSBGYXJtZXJzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzk0ZDE0ZGY2NmZhNDE0ZjllMGIwMjNlZjQ4ODMzYjYuc2V0Q29udGVudChodG1sXzc3YWJlZjU0OTQyMTQ1YmQ5MTdlNjBhMDU1ZDQ2MGQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzkwNjNlNjE1NjVhNDRiNmFiNTVlOWJiNzNlYTUxNzMuYmluZFBvcHVwKHBvcHVwXzM5NGQxNGRmNjZmYTQxNGY5ZTBiMDIzZWY0ODgzM2I2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjk4YWIyNzkyYjRiNGY0MGIyN2RjNDE5NjY4ZThkNDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44NTgzMjIsLTEwNC45MTI4MTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNzRjMzhkMThlZjQ5ZWJhN2I3MzhjNmM3MWU0NjNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZTcxYmQxYTNlMzQ3NTc4ZTgzNjA5NDA1ZTEwMzJiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kY2U3MWJkMWEzZTM0NzU3OGU4MzYwOTQwNWUxMDMyYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTWFuaXRvdSBDb21tdW5pdHkgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JmNzRjMzhkMThlZjQ5ZWJhN2I3MzhjNmM3MWU0NjNlLnNldENvbnRlbnQoaHRtbF9kY2U3MWJkMWEzZTM0NzU3OGU4MzYwOTQwNWUxMDMyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y5OGFiMjc5MmI0YjRmNDBiMjdkYzQxOTY2OGU4ZDQ2LmJpbmRQb3B1cChwb3B1cF9iZjc0YzM4ZDE4ZWY0OWViYTdiNzM4YzZjNzFlNDYzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE3ZTdmM2RlYTQ5YzQ1M2M5ZjJhNjYyMzAzNGE1OWMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjMzMzIxMywtMTA1LjMxNzIxNDZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2MjNmNzM0ZTMzZjQ3ZmRhNDQ4MGIzMTUzNmEzNTM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhZjQ5Yjc0YmE0ODRlYmViNzJlNDEyM2Q5NmViYzM3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYWY0OWI3NGJhNDg0ZWJlYjcyZTQxMjNkOTZlYmMzNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRXZlcmdyZWVuIEZhcm1lcnMgTWFya2V0IGF0IEJlcmdlbiBWaWxsYWdlPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2MjNmNzM0ZTMzZjQ3ZmRhNDQ4MGIzMTUzNmEzNTM4LnNldENvbnRlbnQoaHRtbF8wYWY0OWI3NGJhNDg0ZWJlYjcyZTQxMjNkOTZlYmMzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE3ZTdmM2RlYTQ5YzQ1M2M5ZjJhNjYyMzAzNGE1OWMyLmJpbmRQb3B1cChwb3B1cF81NjIzZjczNGUzM2Y0N2ZkYTQ0ODBiMzE1MzZhMzUzOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJiNTU4M2Y5YjgzNTRiMDM4NTA5YWZjMzYwYWJkNmVmID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuMDU1OTUzLC0xMDQuOTUzNzk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGVmY2E0Mzc4ZWQ0MjA0YjllOGEyMDQzNjVhYWRmZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTE5NmNhOGZlZTI0MDQ3YmI1MTk4MWM0YTM4YmM5NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDkxOTZjYThmZWUyNDA0N2JiNTE5ODFjNGEzOGJjOTciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFBsYXR0ZSBDb3VudHkgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjBlZmNhNDM3OGVkNDIwNGI5ZThhMjA0MzY1YWFkZmUuc2V0Q29udGVudChodG1sXzQ5MTk2Y2E4ZmVlMjQwNDdiYjUxOTgxYzRhMzhiYzk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmI1NTgzZjliODM1NGIwMzg1MDlhZmMzNjBhYmQ2ZWYuYmluZFBvcHVwKHBvcHVwX2IwZWZjYTQzNzhlZDQyMDRiOWU4YTIwNDM2NWFhZGZlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDdjMzgxZmE0OWQ5NDZkZGFmOGI0MjQ3ZGJhMDE0Y2EgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41MjIzMDksLTEwNS4wNTk2OTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwZjAxZDMwOTc2ODRhNzA5OWQ3NTBiMzk3ZTYzMmMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4OGNhOTVhN2M1NDQ5MjA5YTdkMGQwNjAxNDExYzM5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82ODhjYTk1YTdjNTQ0OTIwOWE3ZDBkMDYwMTQxMWMzOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRm9ydCBDb2xsaW5zIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwZjAxZDMwOTc2ODRhNzA5OWQ3NTBiMzk3ZTYzMmMyLnNldENvbnRlbnQoaHRtbF82ODhjYTk1YTdjNTQ0OTIwOWE3ZDBkMDYwMTQxMWMzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q3YzM4MWZhNDlkOTQ2ZGRhZjhiNDI0N2RiYTAxNGNhLmJpbmRQb3B1cChwb3B1cF9kMGYwMWQzMDk3Njg0YTcwOTlkNzUwYjM5N2U2MzJjMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzA0ZDk1YjdhZjcyZjRlMGJhMjhmNmNiODBiNzk5MWIzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNDI1MjY2OCwtMTA1LjA3OTIyNDVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxNzg2MzgwMWRmYTRiNzRiNjczOTVhZWFkZTBmNmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4OTQ1Zjc0YjlmYjRjOTNhYjU3MGEzMTg5YTRmNWViID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81ODk0NWY3NGI5ZmI0YzkzYWI1NzBhMzE4OWE0ZjVlYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTG92ZWxhbmQgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTc4NjM4MDFkZmE0Yjc0YjY3Mzk1YWVhZGUwZjZiZS5zZXRDb250ZW50KGh0bWxfNTg5NDVmNzRiOWZiNGM5M2FiNTcwYTMxODlhNGY1ZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wNGQ5NWI3YWY3MmY0ZTBiYTI4ZjZjYjgwYjc5OTFiMy5iaW5kUG9wdXAocG9wdXBfYjE3ODYzODAxZGZhNGI3NGI2NzM5NWFlYWRlMGY2YmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wYjdhZmQ3NTJjYWY0ZmNjOTEzNDUxNDA2YTk1OTc4NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjI3MjEsLTEwNC42MjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViNDIyZjdmYmVjNDQzNjZhM2YyMTcxMmZkNDQ0ODk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1MmFlZjVjMzNhZjRhZTNhZjkyODU0YmEyZTA5YWI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNTJhZWY1YzMzYWY0YWUzYWY5Mjg1NGJhMmUwOWFiNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmFybWVycyBNYXJrZXQgb2YgUHVlYmxvPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViNDIyZjdmYmVjNDQzNjZhM2YyMTcxMmZkNDQ0ODk4LnNldENvbnRlbnQoaHRtbF9lNTJhZWY1YzMzYWY0YWUzYWY5Mjg1NGJhMmUwOWFiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBiN2FmZDc1MmNhZjRmY2M5MTM0NTE0MDZhOTU5Nzg0LmJpbmRQb3B1cChwb3B1cF9lYjQyMmY3ZmJlYzQ0MzY2YTNmMjE3MTJmZDQ0NDg5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2YwYzY4ZjI0ZmIyYzRjYzA5ZWI3YmVkMmJhNTEzZTYwID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzg5NywtMTA1LjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxYTNlMmI2MjUxNjQxZTU5MDkwMTlmOTMzMmQzYjA4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmM2QwNTFmZmU4NDQwNGJiYzdhYjdhYmNhYTQxNmMzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZjNkMDUxZmZlODQ0MDRiYmM3YWI3YWJjYWE0MTZjMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTWFya2V0IGF0IEVjaHRlcuKAmXMgR2FyZGVuIENlbnRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MWEzZTJiNjI1MTY0MWU1OTA5MDE5ZjkzMzJkM2IwOC5zZXRDb250ZW50KGh0bWxfOGYzZDA1MWZmZTg0NDA0YmJjN2FiN2FiY2FhNDE2YzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mMGM2OGYyNGZiMmM0Y2MwOWViN2JlZDJiYTUxM2U2MC5iaW5kUG9wdXAocG9wdXBfOTFhM2UyYjYyNTE2NDFlNTkwOTAxOWY5MzMyZDNiMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jMjBkYWUzYjM3YjU0NzFkYWRiMGNiZjY4NDFhOGMyMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1Ljk3MzkyMiwtMTA1LjMzMDIxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTMyMWJkMmQ1YTNhNDNmMTg2NzY1YzczNjMwMzNjZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzAyY2VkYjgzMmRmNDE4MmE0ZDFjMDY2YTM0OWRiMjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMwMmNlZGI4MzJkZjQxODJhNGQxYzA2NmEzNDlkYjI1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNb3JhIFZhbGxleSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzIxYmQyZDVhM2E0M2YxODY3NjVjNzM2MzAzM2NkMi5zZXRDb250ZW50KGh0bWxfMzAyY2VkYjgzMmRmNDE4MmE0ZDFjMDY2YTM0OWRiMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMjBkYWUzYjM3YjU0NzFkYWRiMGNiZjY4NDFhOGMyMS5iaW5kUG9wdXAocG9wdXBfZTMyMWJkMmQ1YTNhNDNmMTg2NzY1YzczNjMwMzNjZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82Zjc2YzU2ZDI4Mjc0Y2E5OWEzZjNiYWRlZDFhYjc3OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjUzMDEsLTEwNC43MTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkY2MzNTdhZDlhMTQ1ZGM4NTkwYTM5ZGRmYzI3ZjNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0NTNiY2VhZDQ4MTQ4NDhiNTg4YTQxMzg3MTVmYjUwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNDUzYmNlYWQ0ODE0ODQ4YjU4OGE0MTM4NzE1ZmI1MCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR2FyZGVuIG9mIEVhdG9uIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkY2MzNTdhZDlhMTQ1ZGM4NTkwYTM5ZGRmYzI3ZjNiLnNldENvbnRlbnQoaHRtbF9iNDUzYmNlYWQ0ODE0ODQ4YjU4OGE0MTM4NzE1ZmI1MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZmNzZjNTZkMjgyNzRjYTk5YTNmM2JhZGVkMWFiNzc4LmJpbmRQb3B1cChwb3B1cF84ZGNjMzU3YWQ5YTE0NWRjODU5MGEzOWRkZmMyN2YzYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzAxYTVjMzk4YjQyMjQ3NTNiNzEyMzczNmE0YWM1YzA3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzU1NCwtMTA1LjIyNl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjE0YWYwMWQzMmU1NDM5M2FlZThlNWM3M2MwMDJlZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM2NDlmNTMxZTk2NGJlMThhMzJmMzcyMjhiMjI3NWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2IzNjQ5ZjUzMWU5NjRiZTE4YTMyZjM3MjI4YjIyNzVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHb2xkZW4gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjE0YWYwMWQzMmU1NDM5M2FlZThlNWM3M2MwMDJlZDYuc2V0Q29udGVudChodG1sX2IzNjQ5ZjUzMWU5NjRiZTE4YTMyZjM3MjI4YjIyNzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDFhNWMzOThiNDIyNDc1M2I3MTIzNzM2YTRhYzVjMDcuYmluZFBvcHVwKHBvcHVwXzIxNGFmMDFkMzJlNTQzOTNhZWU4ZTVjNzNjMDAyZWQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODNjYzZkNWI2ZDUzNDA0ZWEzZDhlNjFiOTdjMzExOTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy43ODMzMzk3LC0xMDUuMTY1NTU0Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2ViZWJlMjI4OWQzNDdmNWIxMzRmMmU4NmVlZmI2OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZmNWUxNzMxOGY1NDY0NWE1OTQ5N2RjOWMyZmQ4ZjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M2ZjVlMTczMThmNTQ2NDVhNTk0OTdkYzljMmZkOGY5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHYXJkbmVyIEZhcm1lciAmYW1wOyBDcmFmdCBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2ViZWJlMjI4OWQzNDdmNWIxMzRmMmU4NmVlZmI2OTguc2V0Q29udGVudChodG1sX2M2ZjVlMTczMThmNTQ2NDVhNTk0OTdkYzljMmZkOGY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODNjYzZkNWI2ZDUzNDA0ZWEzZDhlNjFiOTdjMzExOTAuYmluZFBvcHVwKHBvcHVwX2NlYmViZTIyODlkMzQ3ZjViMTM0ZjJlODZlZWZiNjk4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmRmNzdhOTk0ODEwNDA2OWFmYTdlZDA2OThhYmQ3OGQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45NDU0LC0xMDQuNzk2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYTgzODc3MzUyOTM0MzJhOTk4MWY4OTcxZjk3OGQ0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OGUwZjIyYWQwNzA0M2NlYjViODcwOWFhNjMwZmQ2ZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODhlMGYyMmFkMDcwNDNjZWI1Yjg3MDlhYTYzMGZkNmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENoYXBlbCBIaWxsIE1hbGwgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTgzODc3MzUyOTM0MzJhOTk4MWY4OTcxZjk3OGQ0ZC5zZXRDb250ZW50KGh0bWxfODhlMGYyMmFkMDcwNDNjZWI1Yjg3MDlhYTYzMGZkNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZGY3N2E5OTQ4MTA0MDY5YWZhN2VkMDY5OGFiZDc4ZC5iaW5kUG9wdXAocG9wdXBfZGE4Mzg3NzM1MjkzNDMyYTk5ODFmODk3MWY5NzhkNGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84YTEzY2E5NTRkYzQ0NTkwYjMwZDRkYmFhZDA0ODQyNCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljk4NjksLTEwNS4wOTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2Y2IwZGYwZWRhNzRlMTI4MDAwMzQ4ZDU1NjAzZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmNDhjOTg5MGMzMTQyNTM4NTdiYTlmZTYxNDhmNzBkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84ZjQ4Yzk4OTBjMzE0MjUzODU3YmE5ZmU2MTQ4ZjcwZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgSmF4IEZhcm1lciYjMzk7cyBNYXJrZXQgaW4gTGFmYXlldHRlIDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmNiMGRmMGVkYTc0ZTEyODAwMDM0OGQ1NTYwM2Y4Yy5zZXRDb250ZW50KGh0bWxfOGY0OGM5ODkwYzMxNDI1Mzg1N2JhOWZlNjE0OGY3MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTEzY2E5NTRkYzQ0NTkwYjMwZDRkYmFhZDA0ODQyNC5iaW5kUG9wdXAocG9wdXBfNzZjYjBkZjBlZGE3NGUxMjgwMDAzNDhkNTU2MDNmOGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81NmU3NDQ4YjVjYTU0MmY3YjQ4NGEwOTMxYTBhYzE4ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjM3MjgsLTEwNS42ODJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwZjdiOTY0NGYxYjQ3Mjg4MTYwYTAxZTQyMTdlMjE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I1ODk5MmZiNDViMTQ4NWViZWNmMGU1NTM0ZGExMDMyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iNTg5OTJmYjQ1YjE0ODVlYmVjZjBlNTUzNGRhMTAzMiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ290b3BheGkgRmFybWVycyBNYXJrZXQgPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQwZjdiOTY0NGYxYjQ3Mjg4MTYwYTAxZTQyMTdlMjE3LnNldENvbnRlbnQoaHRtbF9iNTg5OTJmYjQ1YjE0ODVlYmVjZjBlNTUzNGRhMTAzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU2ZTc0NDhiNWNhNTQyZjdiNDg0YTA5MzFhMGFjMThlLmJpbmRQb3B1cChwb3B1cF80MGY3Yjk2NDRmMWI0NzI4ODE2MGEwMWU0MjE3ZTIxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzlhNjZkMjVmMmIwOTQzNmNhOWRiNThiMzcxZTRhY2Y0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODQ4OCwtMTA1LjE1NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWViNjM4M2Y3Y2UxNGNjZDgzYjQ1ZDI5OWUyNWE2YjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDgzMDczZDM3NGIzNDA3MDg3YzNkZGVmMDlhNzkyOWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ4MzA3M2QzNzRiMzQwNzA4N2MzZGRlZjA5YTc5MjlmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBcnZhZGEgRml2ZSBQYXJrcyBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWI2MzgzZjdjZTE0Y2NkODNiNDVkMjk5ZTI1YTZiNS5zZXRDb250ZW50KGh0bWxfNDgzMDczZDM3NGIzNDA3MDg3YzNkZGVmMDlhNzkyOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YTY2ZDI1ZjJiMDk0MzZjYTlkYjU4YjM3MWU0YWNmNC5iaW5kUG9wdXAocG9wdXBfNWViNjM4M2Y3Y2UxNGNjZDgzYjQ1ZDI5OWUyNWE2YjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83MmY3Mzg4OWFlY2M0Y2YyODFiMzE4MGUwOGExNjc5OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjM4NzUzNiwtMTA1LjA3ODQ5MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQzMGZlMTUyZjA5NDczZjg4MWU3YzMzZjNiODRmYWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzNjMTY1MTIyNTBlNDhjN2EzNDQxZTkyNDllYjk5OTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMzYzE2NTEyMjUwZTQ4YzdhMzQ0MWU5MjQ5ZWI5OTkzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaXR5IG9mIExvdmVsYW5kIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0MzBmZTE1MmYwOTQ3M2Y4ODFlN2MzM2YzYjg0ZmFkLnNldENvbnRlbnQoaHRtbF8zM2MxNjUxMjI1MGU0OGM3YTM0NDFlOTI0OWViOTk5Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyZjczODg5YWVjYzRjZjI4MWIzMTgwZTA4YTE2Nzk5LmJpbmRQb3B1cChwb3B1cF84NDMwZmUxNTJmMDk0NzNmODgxZTdjMzNmM2I4NGZhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNjMTRlNDFmYTVlNDQ0OTViMDk0YTkyNzIyODc0OGE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguMTM2MDU0LC0xMDUuNDY3MDI3NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjBhNzM2NTRkZTQ3NGExNmJjNTQzOWFlZGU0OGU3NTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDY4ZDdkZjQwMzU5NGMxMThmYWVhMjRjYTA4ZGY1MWIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzQ2OGQ3ZGY0MDM1OTRjMTE4ZmFlYTI0Y2EwOGRmNTFiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBXZXN0Y2xpZmZlIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjBhNzM2NTRkZTQ3NGExNmJjNTQzOWFlZGU0OGU3NTEuc2V0Q29udGVudChodG1sXzQ2OGQ3ZGY0MDM1OTRjMTE4ZmFlYTI0Y2EwOGRmNTFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2MxNGU0MWZhNWU0NDQ5NWIwOTRhOTI3MjI4NzQ4YTQuYmluZFBvcHVwKHBvcHVwXzYwYTczNjU0ZGU0NzRhMTZiYzU0MzlhZWRlNDhlNzUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzkxZTNjYTVjOWU5NDZmZWExZDQxZWJlNTBlYWQyMmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MzQxNDcsLTEwNS4wMjE1ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU4MjQ4OTNiMzA2MTQ5YjI5Y2ExNjMyOTJjYmZjMjUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1OWNjYmI2OTRjMTQwMTViMDMzNDY5MjYxY2ExYjk4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNTljY2JiNjk0YzE0MDE1YjAzMzQ2OTI2MWNhMWI5OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmFpcnZpZXcgRWxlbWVudGFyeSBZb3V0aCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4MjQ4OTNiMzA2MTQ5YjI5Y2ExNjMyOTJjYmZjMjUyLnNldENvbnRlbnQoaHRtbF9lNTljY2JiNjk0YzE0MDE1YjAzMzQ2OTI2MWNhMWI5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc5MWUzY2E1YzllOTQ2ZmVhMWQ0MWViZTUwZWFkMjJkLmJpbmRQb3B1cChwb3B1cF81ODI0ODkzYjMwNjE0OWIyOWNhMTYzMjkyY2JmYzI1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzBjN2UyYWQyOTQ5ZjQzZDRiZWM1N2I0MDNiYTlhNTAxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNzE5NTQ5LC0xMDQuOTk4Mjg3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjg4NmY4YmRmN2M0Yzc4YmIzMjVhMjhjYjFkY2I4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MjQxNWFhZDUzNWQ0YTU4YTUwZGNjMDM4NTA3NDBhMyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTI0MTVhYWQ1MzVkNGE1OGE1MGRjYzAzODUwNzQwYTMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERlbnZlciBVcmJhbiBIb21lc3RlYWRpbmcgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY4ODZmOGJkZjdjNGM3OGJiMzI1YTI4Y2IxZGNiODkuc2V0Q29udGVudChodG1sXzkyNDE1YWFkNTM1ZDRhNThhNTBkY2MwMzg1MDc0MGEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGM3ZTJhZDI5NDlmNDNkNGJlYzU3YjQwM2JhOWE1MDEuYmluZFBvcHVwKHBvcHVwXzE2ODg2ZjhiZGY3YzRjNzhiYjMyNWEyOGNiMWRjYjg5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYWIyMGZjM2RhMjA3NDUzYmJkZDc1NDNiOGQ2Y2ZiZDggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4zNzE2LC0xMDUuNTAyXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hZGM2ODI1YWNlOTY0NzI1YTcwOTM2Zjg0YzI0NGMxMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MTQ1OWMxNjRkOWI0ODdmYjQ3OWFjMDVlYjFmZDljNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfODE0NTljMTY0ZDliNDg3ZmI0NzlhYzA1ZWIxZmQ5YzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEVzdGVzIFZhbGxleSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGM2ODI1YWNlOTY0NzI1YTcwOTM2Zjg0YzI0NGMxMi5zZXRDb250ZW50KGh0bWxfODE0NTljMTY0ZDliNDg3ZmI0NzlhYzA1ZWIxZmQ5YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hYjIwZmMzZGEyMDc0NTNiYmRkNzU0M2I4ZDZjZmJkOC5iaW5kUG9wdXAocG9wdXBfYWRjNjgyNWFjZTk2NDcyNWE3MDkzNmY4NGMyNDRjMTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jOWMyNTZjYTg3OGE0NjE3YjMzNzYxMDhjMzlkOTZlYiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc0MDIsLTEwNC45MDNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNmE2NDVlZTQzZTQyZjM4NDc1NTZiOWYzMTRlOThlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwY2YzOTJiODJjNDQ5NDlhYzJmMDIwN2MwYTU2MDM1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jMGNmMzkyYjgyYzQ0OTQ5YWMyZjAyMDdjMGE1NjAzNSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTm9ydGhmaWVsZCBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNmE2NDVlZTQzZTQyZjM4NDc1NTZiOWYzMTRlOThlLnNldENvbnRlbnQoaHRtbF9jMGNmMzkyYjgyYzQ0OTQ5YWMyZjAyMDdjMGE1NjAzNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M5YzI1NmNhODc4YTQ2MTdiMzM3NjEwOGMzOWQ5NmViLmJpbmRQb3B1cChwb3B1cF8wMzZhNjQ1ZWU0M2U0MmYzODQ3NTU2YjlmMzE0ZTk4ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg3N2MzZTNmYmU4YzQ1ODg5ZWJhZWYzMzg4YmYzY2ViID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuOTU2OSwtMTA0Ljk5Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWQ4ZjFkOTM1YTY5NGM2YmEwODM2ODhkNDA2NjNiYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmU2OTMyMDNjZWY4NGZjMjgwYTkwYmMyOTBlZWVhZjIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2JlNjkzMjAzY2VmODRmYzI4MGE5MGJjMjkwZWVlYWYyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBUaGUgT3JjaGFyZHMgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDhmMWQ5MzVhNjk0YzZiYTA4MzY4OGQ0MDY2M2JiMC5zZXRDb250ZW50KGh0bWxfYmU2OTMyMDNjZWY4NGZjMjgwYTkwYmMyOTBlZWVhZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NzdjM2UzZmJlOGM0NTg4OWViYWVmMzM4OGJmM2NlYi5iaW5kUG9wdXAocG9wdXBfNWQ4ZjFkOTM1YTY5NGM2YmEwODM2ODhkNDA2NjNiYjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iZmM2Y2JmMDYyZTA0MmZlYjE5ODgxNzVjMmFlYzhkZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjU1Mjk4OCwtMTA1LjA5MTA0NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdhOThiOGU2NTQ0NDZhOTkzYmYwZTc5MDViNGYyZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JiOTI4NTExMDhjNDU1NGJiYmMxZjI5MmU3ZWVlZGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzNiYjkyODUxMTA4YzQ1NTRiYmJjMWYyOTJlN2VlZWRjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBEcmFrZSBSb2FkIEZhcm1lcnMmIzM5OyBNYXJrZXQsIExMQzwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2E5OGI4ZTY1NDQ0NmE5OTNiZjBlNzkwNWI0ZjJmMC5zZXRDb250ZW50KGh0bWxfM2JiOTI4NTExMDhjNDU1NGJiYmMxZjI5MmU3ZWVlZGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iZmM2Y2JmMDYyZTA0MmZlYjE5ODgxNzVjMmFlYzhkZC5iaW5kUG9wdXAocG9wdXBfZTdhOThiOGU2NTQ0NDZhOTkzYmYwZTc5MDViNGYyZjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hZGZiMTE5NmY4ZDk0OWI1YTY0NWY0M2U4ZjUxYWRmNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjM5NTQsLTEwNS4wNzNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkNzYyOTE5ZDg2NDRmODdiNDVlODllZWZiZWI2OWMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmMGY4ZDAzODRhNjQwYmNhOWJiOWZhYzRjMTYzYWIxID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wZjBmOGQwMzg0YTY0MGJjYTliYjlmYWM0YzE2M2FiMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgNHRoIFN0cmVldCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZDc2MjkxOWQ4NjQ0Zjg3YjQ1ZTg5ZWVmYmViNjljMy5zZXRDb250ZW50KGh0bWxfMGYwZjhkMDM4NGE2NDBiY2E5YmI5ZmFjNGMxNjNhYjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hZGZiMTE5NmY4ZDk0OWI1YTY0NWY0M2U4ZjUxYWRmNS5iaW5kUG9wdXAocG9wdXBfZmQ3NjI5MTlkODY0NGY4N2I0NWU4OWVlZmJlYjY5YzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jYmYxZWYyZDZjYzE0YWI5OTljMTQ2ZTFhMjBhZjk5NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjA3OTU5OCwtMTA0LjIyMzQ5NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM5NzE4ZWE5ZjJlNGRhMTg3YzhkZmRmOGQ4MDdhZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhiOGE0MzdlM2RlNGZiYWEzYzAzMjE3MTY4NjdjZTAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzA4YjhhNDM3ZTNkZTRmYmFhM2MwMzIxNzE2ODY3Y2UwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBUb3JyaW5ndG9uIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjOTcxOGVhOWYyZTRkYTE4N2M4ZGZkZjhkODA3YWVhLnNldENvbnRlbnQoaHRtbF8wOGI4YTQzN2UzZGU0ZmJhYTNjMDMyMTcxNjg2N2NlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NiZjFlZjJkNmNjMTRhYjk5OWMxNDZlMWEyMGFmOTk3LmJpbmRQb3B1cChwb3B1cF82Yzk3MThlYTlmMmU0ZGExODdjOGRmZGY4ZDgwN2FlYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzU0MTY1ODJlYTAxYjQ0MDE4MmY0NzVlZDkzZWYyMWZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMTMyMjE3LC0xMDQuODE0NDMzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YjQ4ODMyNDM2OWY0MjYwODM2MTk3MDE0ZTFiZjhlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMjU0ZDBhNDM3MjY0ZjlmOTRmNzI4ZjhkZWUwZWY3YyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjI1NGQwYTQzNzI2NGY5Zjk0ZjcyOGY4ZGVlMGVmN2MiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENoZXllbm5lIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViNDg4MzI0MzY5ZjQyNjA4MzYxOTcwMTRlMWJmOGViLnNldENvbnRlbnQoaHRtbF8yMjU0ZDBhNDM3MjY0ZjlmOTRmNzI4ZjhkZWUwZWY3Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU0MTY1ODJlYTAxYjQ0MDE4MmY0NzVlZDkzZWYyMWZlLmJpbmRQb3B1cChwb3B1cF81YjQ4ODMyNDM2OWY0MjYwODM2MTk3MDE0ZTFiZjhlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzE1MGJiMTQ5NTA1OTRjZWI4M2M2MzhjZmEzYjA4YTVkID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODU4OSwtMTA0LjkwNDQ5NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWVjNzU2NDg0MTE4NDkyNmJkMzdkZDc1MmVjY2I0MjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmNjZGNiMjUyZmNhNDU0NDhmNGViMmFkM2VlYjMwYjUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZjY2RjYjI1MmZjYTQ1NDQ4ZjRlYjJhZDNlZWIzMGI1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNaWxlIEhpZ2ggRmxlYSBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWVjNzU2NDg0MTE4NDkyNmJkMzdkZDc1MmVjY2I0Mjcuc2V0Q29udGVudChodG1sXzZjY2RjYjI1MmZjYTQ1NDQ4ZjRlYjJhZDNlZWIzMGI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTUwYmIxNDk1MDU5NGNlYjgzYzYzOGNmYTNiMDhhNWQuYmluZFBvcHVwKHBvcHVwXzllYzc1NjQ4NDExODQ5MjZiZDM3ZGQ3NTJlY2NiNDI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjY1OTdkYTMyNzgzNGFmYWEzNGE1MjI0ZTliNDQ4OWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4wMTUyNDUsLTEwNS4yNzc2MzhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYjc4ZWFhYzNkZDQxMDBiM2EzNWU4NDFlZGEyODY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAzM2JjMmE2MmJhZDRjMGViNGQ3MmRmNzdhNzRjMDA3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wMzNiYzJhNjJiYWQ0YzBlYjRkNzJkZjc3YTc0YzAwNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQm91bGRlciBGYXJtZXJzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRiNzhlYWFjM2RkNDEwMGIzYTM1ZTg0MWVkYTI4Njcuc2V0Q29udGVudChodG1sXzAzM2JjMmE2MmJhZDRjMGViNGQ3MmRmNzdhNzRjMDA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjY1OTdkYTMyNzgzNGFmYWEzNGE1MjI0ZTliNDQ4OWMuYmluZFBvcHVwKHBvcHVwXzRkYjc4ZWFhYzNkZDQxMDBiM2EzNWU4NDFlZGEyODY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNDIxZGI5ZTg0YWFmNDVmMDhlOTFhMzBkZTI1NjBjZDkgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi45NTczNTYsLTEwNS43NDA1OTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U2OWY5MWUzYWUxNTRhNGU5NWRhYzJhY2Y0YzhlZTRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMmI2OWE1YTA1NDQ3MTY4NDlkMDFiZWQ2ZjE3ZDkyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYjJiNjlhNWEwNTQ0NzE2ODQ5ZDAxYmVkNmYxN2Q5MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2xvdWRjcm9mdCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjlmOTFlM2FlMTU0YTRlOTVkYWMyYWNmNGM4ZWU0ZC5zZXRDb250ZW50KGh0bWxfMGIyYjY5YTVhMDU0NDcxNjg0OWQwMWJlZDZmMTdkOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MjFkYjllODRhYWY0NWYwOGU5MWEzMGRlMjU2MGNkOS5iaW5kUG9wdXAocG9wdXBfZTY5ZjkxZTNhZTE1NGE0ZTk1ZGFjMmFjZjRjOGVlNGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl85ZGZhYTMzMzNjYTA0YmU1OGY1NTk2MmU3ZjlmNmQ3ZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljk5NzcsLTEwNC43MDFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkZGY0Y2JiZWUyODRiZGFiMzA1N2MxMmMzM2UxZTQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhYTMyZTRlMGE5YzRhODlhZWNlNmE4YmU1N2I0MDU1ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9kYWEzMmU0ZTBhOWM0YTg5YWVjZTZhOGJlNTdiNDA1NSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQmxhY2sgRm9yZXN0IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkZGY0Y2JiZWUyODRiZGFiMzA1N2MxMmMzM2UxZTQ3LnNldENvbnRlbnQoaHRtbF9kYWEzMmU0ZTBhOWM0YTg5YWVjZTZhOGJlNTdiNDA1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlkZmFhMzMzM2NhMDRiZTU4ZjU1OTYyZTdmOWY2ZDdlLmJpbmRQb3B1cChwb3B1cF8zZGRmNGNiYmVlMjg0YmRhYjMwNTdjMTJjMzNlMWU0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzQwM2FjYTU3MzA5ZjRkYWQ5ZGViMTFmYTBlMGIwMTBlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuNTg3OCwtMTA1LjA3OF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmZjNjVkYmEwNjdiNGJmNzg2NWM0MDExZjEwMWY1ODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmY1MjYzMTg1ZWY5NDVjMzg4MjEyZTNmOThiMzc2YzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzZmNTI2MzE4NWVmOTQ1YzM4ODIxMmUzZjk4YjM3NmM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBCZSBMb2NhbCBXaW50ZXIgRmFybWVyJiMzOTtzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZmM2NWRiYTA2N2I0YmY3ODY1YzQwMTFmMTAxZjU4OC5zZXRDb250ZW50KGh0bWxfNmY1MjYzMTg1ZWY5NDVjMzg4MjEyZTNmOThiMzc2YzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80MDNhY2E1NzMwOWY0ZGFkOWRlYjExZmEwZTBiMDEwZS5iaW5kUG9wdXAocG9wdXBfYmZjNjVkYmEwNjdiNGJmNzg2NWM0MDExZjEwMWY1ODgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9jZTBkMGYxMDAzNTY0NDY3OTcyYWEzM2MyODU3OGRmOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjU0NDU2MjQsLTEwNS4yODcyNDM1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOGFjZmMyYTk3MGI0NjM2YTAwOTVmMGU0OGY2MjY4YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZWZhZGYwZDBmNmU0NDFkYWQ0MmYwNzNiZTlhNzYwYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZWVmYWRmMGQwZjZlNDQxZGFkNDJmMDczYmU5YTc2MGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIENvbmlmZXIgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMThhY2ZjMmE5NzBiNDYzNmEwMDk1ZjBlNDhmNjI2OGMuc2V0Q29udGVudChodG1sX2VlZmFkZjBkMGY2ZTQ0MWRhZDQyZjA3M2JlOWE3NjBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2UwZDBmMTAwMzU2NDQ2Nzk3MmFhMzNjMjg1NzhkZjkuYmluZFBvcHVwKHBvcHVwXzE4YWNmYzJhOTcwYjQ2MzZhMDA5NWYwZTQ4ZjYyNjhjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYmFhMjA2ZjZjZTA1NGVkMGJkYjIwYTJkNTc5ZWMwOWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4zMDQxNDg2LC0xMDUuNTg5MDUxOF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhmNDkyNjc4MDEyNGI3Yjk2NmNiYmYwYTcyZDllNzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2Y5OWEyMjc0OWUzNDlhOGEwYjc4ZmUyNjJiNzIxNzIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2NmOTlhMjI3NDllMzQ5YThhMGI3OGZlMjYyYjcyMTcyIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYXJhbWllIExvY2FsIENvbW11bml0eSBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjhmNDkyNjc4MDEyNGI3Yjk2NmNiYmYwYTcyZDllNzYuc2V0Q29udGVudChodG1sX2NmOTlhMjI3NDllMzQ5YThhMGI3OGZlMjYyYjcyMTcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmFhMjA2ZjZjZTA1NGVkMGJkYjIwYTJkNTc5ZWMwOWIuYmluZFBvcHVwKHBvcHVwX2I4ZjQ5MjY3ODAxMjRiN2I5NjZjYmJmMGE3MmQ5ZTc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNTA4MDg3NTliMTNlNGE3N2JkMGRiMzRhMTE1M2JlNzMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC43MDQ2ODUsLTEwNS4wMDQ4MzFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg3ZTdkMjgxZGY5ZTQzMzE5ZjVmN2M2MzM2YTZhMjk2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4MTFhNDEyM2EzNjRhZDc5MjJmMTdjODNmYzU0MGM2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zODExYTQxMjNhMzY0YWQ3OTIyZjE3YzgzZmM1NDBjNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgV2VsbGluZ3RvbiBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84N2U3ZDI4MWRmOWU0MzMxOWY1ZjdjNjMzNmE2YTI5Ni5zZXRDb250ZW50KGh0bWxfMzgxMWE0MTIzYTM2NGFkNzkyMmYxN2M4M2ZjNTQwYzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81MDgwODc1OWIxM2U0YTc3YmQwZGIzNGExMTUzYmU3My5iaW5kUG9wdXAocG9wdXBfODdlN2QyODFkZjllNDMzMTlmNWY3YzYzMzZhNmEyOTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kZDUzZGMxMDllNGE0ZTEzYTNkYWE3YWJkMTIzNDkwOCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMyLjg5MDE0NSwtMTA1LjQ3NzkxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MzRiOWJiOTJlYzc0ZmYxYjY4ZjA0MTA0N2EzN2Y2NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTJhNDY1OWU0Yzc0NjM0ODk5NGE2MWVlMTllMzRiZCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNWUyYTQ2NTllNGM3NDYzNDg5OTRhNjFlZTE5ZTM0YmQiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIE1heWhpbGwgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTM0YjliYjkyZWM3NGZmMWI2OGYwNDEwNDdhMzdmNjUuc2V0Q29udGVudChodG1sXzVlMmE0NjU5ZTRjNzQ2MzQ4OTk0YTYxZWUxOWUzNGJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGQ1M2RjMTA5ZTRhNGUxM2EzZGFhN2FiZDEyMzQ5MDguYmluZFBvcHVwKHBvcHVwXzUzNGI5YmI5MmVjNzRmZjFiNjhmMDQxMDQ3YTM3ZjY1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODViZTI5YjBlNjc1NGRiZThlZWFlZTI3MjFmNDgzMzggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC41ODU3OCwtMTA1LjA3OThdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5ZGZiMjJiOThiNTRmYTg5NGRkNTAwZjkwYWQzYmIwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlZmE2ZTZkYmFiYjQzOThiZWQzYmRhM2E5OTNiNTBkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jZWZhNmU2ZGJhYmI0Mzk4YmVkM2JkYTNhOTkzYjUwZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTGFyaW1lciBDb3VudHkgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OWRmYjIyYjk4YjU0ZmE4OTRkZDUwMGY5MGFkM2JiMC5zZXRDb250ZW50KGh0bWxfY2VmYTZlNmRiYWJiNDM5OGJlZDNiZGEzYTk5M2I1MGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84NWJlMjliMGU2NzU0ZGJlOGVlYWVlMjcyMWY0ODMzOC5iaW5kUG9wdXAocG9wdXBfNDlkZmIyMmI5OGI1NGZhODk0ZGQ1MDBmOTBhZDNiYjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84Y2FiNzMzOTE3M2I0MWFiODQ3OWQ4YTEzMDI3YmIxMyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcyMjYsLTEwNC45ODNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YTg4OWYxYWJhNzRiNTI5NTY2YzM0NzNlM2E5ZjEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiMWYwNzg5ZjE4OTQxNzhiZjYwMGI2ZmQyYjgzMzExID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iYjFmMDc4OWYxODk0MTc4YmY2MDBiNmZkMmI4MzMxMSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVk5BIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTlhODg5ZjFhYmE3NGI1Mjk1NjZjMzQ3M2UzYTlmMTMuc2V0Q29udGVudChodG1sX2JiMWYwNzg5ZjE4OTQxNzhiZjYwMGI2ZmQyYjgzMzExKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOGNhYjczMzkxNzNiNDFhYjg0NzlkOGExMzAyN2JiMTMuYmluZFBvcHVwKHBvcHVwX2E5YTg4OWYxYWJhNzRiNTI5NTY2YzM0NzNlM2E5ZjEzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNjBmYjgwODlkYzkyNDVkZTg3NzlkNjYyNDJiY2VkYWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4zNzYzNzAxLC0xMDQuNjkyMTg3NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjNhNGY3MTAzZmU1NGRmMWJlNWEwYjRjZDAzNzI5ZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI2MGY4YTc1OGMxNGJjZWEzZjc4ZGI4MDA2YWIwZjcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzRiNjBmOGE3NThjMTRiY2VhM2Y3OGRiODAwNmFiMGY3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaXR5IG9mIEV2YW5zIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzYTRmNzEwM2ZlNTRkZjFiZTVhMGI0Y2QwMzcyOWRiLnNldENvbnRlbnQoaHRtbF80YjYwZjhhNzU4YzE0YmNlYTNmNzhkYjgwMDZhYjBmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYwZmI4MDg5ZGM5MjQ1ZGU4Nzc5ZDY2MjQyYmNlZGFjLmJpbmRQb3B1cChwb3B1cF9iM2E0ZjcxMDNmZTU0ZGYxYmU1YTBiNGNkMDM3MjlkYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2UwNmEzZTBlNzdhYTQ2M2M4ZTU2ZWZlYTE1YmM5MDllID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDIuNzYxOSwtMTA0LjQ1M10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmI3MTE3NzYyN2YyNGFkYjk3ZmIyZDA4N2QyZjU3NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThiMDc3ODMzZGE1NGJiZTg2ZTY1YzZhYmM3NzIyZjQgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzU4YjA3NzgzM2RhNTRiYmU4NmU2NWM2YWJjNzcyMmY0IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMdXNrIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JiNzExNzc2MjdmMjRhZGI5N2ZiMmQwODdkMmY1Nzc4LnNldENvbnRlbnQoaHRtbF81OGIwNzc4MzNkYTU0YmJlODZlNjVjNmFiYzc3MjJmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2UwNmEzZTBlNzdhYTQ2M2M4ZTU2ZWZlYTE1YmM5MDllLmJpbmRQb3B1cChwb3B1cF9iYjcxMTc3NjI3ZjI0YWRiOTdmYjJkMDg3ZDJmNTc3OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzM4ZmM3ZjU3NGYzYjQ1NzI4ZTI1YjczMmYzZjI5ZTBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODgwNjM5LC0xMDQuNzE4OTEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNzZjM2ZlMGQ4ZTI0Yjk4OWZjYjhiMDYyNTRmMzg3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzFiMzZjYTYyZTc0YWQwYmYyMjA2OWVhNGVmYWFiNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzMxYjM2Y2E2MmU3NGFkMGJmMjIwNjllYTRlZmFhYjciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEZpcnN0ICZhbXA7IE1haW4gVG93biBDZW50ZXIgTWFsbCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNzZjM2ZlMGQ4ZTI0Yjk4OWZjYjhiMDYyNTRmMzg3ZC5zZXRDb250ZW50KGh0bWxfYzMxYjM2Y2E2MmU3NGFkMGJmMjIwNjllYTRlZmFhYjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zOGZjN2Y1NzRmM2I0NTcyOGUyNWI3MzJmM2YyOWUwYy5iaW5kUG9wdXAocG9wdXBfMTc2YzNmZTBkOGUyNGI5ODlmY2I4YjA2MjU0ZjM4N2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wZmVhMGRkNzZmNDY0NDlmODY2N2M3NjdmZDJiZmY2NiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcyMiwtMTA0Ljg5N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTM3MjhhNWY3ZTkyNDgzMGJmMDU1Njc5ZDk3ODllNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWY2NGM5OGRlNWMzNDViYzkyOWMwZGEwNTFiMDlkNzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FmNjRjOThkZTVjMzQ1YmM5MjljMGRhMDUxYjA5ZDcwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMb3dlcnkgSGFuZ2VyIDIgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTM3MjhhNWY3ZTkyNDgzMGJmMDU1Njc5ZDk3ODllNmQuc2V0Q29udGVudChodG1sX2FmNjRjOThkZTVjMzQ1YmM5MjljMGRhMDUxYjA5ZDcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGZlYTBkZDc2ZjQ2NDQ5Zjg2NjdjNzY3ZmQyYmZmNjYuYmluZFBvcHVwKHBvcHVwXzUzNzI4YTVmN2U5MjQ4MzBiZjA1NTY3OWQ5Nzg5ZTZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWY2MzFkZWY4MWIzNGEyZjhlMGExOGE1OGE3OTZhM2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC4zMzAxMzIyLC0xMDQuODU0NDg1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNlYmQ3Njc2MDA4NGRhODhiZTkyMWU0OTFlYzk0NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVkYTJhN2RkODc4NGFmZWIwZTFkZGIzNzkwZjk3ZDUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzc1ZGEyYTdkZDg3ODRhZmViMGUxZGRiMzc5MGY5N2Q1IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBKb2huc3Rvd24gTWlsbGlrZW4gRmFybWVyJiMzOTtzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82M2ViZDc2NzYwMDg0ZGE4OGJlOTIxZTQ5MWVjOTQ1NS5zZXRDb250ZW50KGh0bWxfNzVkYTJhN2RkODc4NGFmZWIwZTFkZGIzNzkwZjk3ZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xZjYzMWRlZjgxYjM0YTJmOGUwYTE4YTU4YTc5NmEzZS5iaW5kUG9wdXAocG9wdXBfNjNlYmQ3Njc2MDA4NGRhODhiZTkyMWU0OTFlYzk0NTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zOGMyYWIzMzY0OWQ0YjBlYWQ0MzlhNjNiMjY1YTNiOSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg0NjMsLTEwNC44NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxOTA5NDUzYTg5NzRlYjZiN2MyZGM0MDlhZjRhY2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzExY2QyMDI5M2MzNjQ3NTQ4Y2UzYzYyOTYyYTRiNzFkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xMWNkMjAyOTNjMzY0NzU0OGNlM2M2Mjk2MmE0YjcxZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgT2xkIENvbG9yYWRvIENpdHkgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE5MDk0NTNhODk3NGViNmI3YzJkYzQwOWFmNGFjYWYuc2V0Q29udGVudChodG1sXzExY2QyMDI5M2MzNjQ3NTQ4Y2UzYzYyOTYyYTRiNzFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzhjMmFiMzM2NDlkNGIwZWFkNDM5YTYzYjI2NWEzYjkuYmluZFBvcHVwKHBvcHVwX2MxOTA5NDUzYTg5NzRlYjZiN2MyZGM0MDlhZjRhY2FmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOGE3MjhlNDdjZjJhNDQ1MWE2NGRiYmVmMmM2ZDllY2MgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC44MzMsLTEwNC43OTVdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzljYjYyMThkNWQ0NjQwNzc5MzUzNjlmY2JkZGQzODM5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5ZWFmMzYxMDNjODQxYmQ4NTMzNGZmYzU5Y2ZjZWUwID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF82OWVhZjM2MTAzYzg0MWJkODUzMzRmZmM1OWNmY2VlMCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTWVtb3JpYWwgUGFyayBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Y2I2MjE4ZDVkNDY0MDc3OTM1MzY5ZmNiZGRkMzgzOS5zZXRDb250ZW50KGh0bWxfNjllYWYzNjEwM2M4NDFiZDg1MzM0ZmZjNTljZmNlZTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84YTcyOGU0N2NmMmE0NDUxYTY0ZGJiZWYyYzZkOWVjYy5iaW5kUG9wdXAocG9wdXBfOWNiNjIxOGQ1ZDQ2NDA3NzkzNTM2OWZjYmRkZDM4MzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84ZjZmOTliODgzMzY0NWMyODA2NDM5NTA4NDE5YTQyNSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4Ljg5NDYsLTEwNC43NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE2NzE4ODUzYzEzOTQ4YTc5MDY2YzYzMzliZWE1ZGM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3ZjJjNDBjNjBhZjQyYzhhNDExYTFlOTIwOWQ1NDI2ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80N2YyYzQwYzYwYWY0MmM4YTQxMWExZTkyMDlkNTQyNiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRG9oZXJ0eSBIaWdoIFNjaG9vbCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjcxODg1M2MxMzk0OGE3OTA2NmM2MzM5YmVhNWRjNS5zZXRDb250ZW50KGh0bWxfNDdmMmM0MGM2MGFmNDJjOGE0MTFhMWU5MjA5ZDU0MjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZjZmOTliODgzMzY0NWMyODA2NDM5NTA4NDE5YTQyNS5iaW5kUG9wdXAocG9wdXBfMTY3MTg4NTNjMTM5NDhhNzkwNjZjNjMzOWJlYTVkYzUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xYWYyODlhZjBiOTU0YWMwYTU1MjViMmJlMGUzZTM0MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjMzMTQwNywtMTA1LjU5MDk2NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjNhMmI1NTk4MGZmNGJjYTgyMzYwOTcwMWZhY2ZkMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWUyZGIzOTZlNTkyNDI5OWI3YmFhMjE2YzIwZWU1MGMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzllMmRiMzk2ZTU5MjQyOTliN2JhYTIxNmMyMGVlNTBjIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBSdWlkb3NvIERvd25zIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYzYTJiNTU5ODBmZjRiY2E4MjM2MDk3MDFmYWNmZDBlLnNldENvbnRlbnQoaHRtbF85ZTJkYjM5NmU1OTI0Mjk5YjdiYWEyMTZjMjBlZTUwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFhZjI4OWFmMGI5NTRhYzBhNTUyNWIyYmUwZTNlMzQxLmJpbmRQb3B1cChwb3B1cF82M2EyYjU1OTgwZmY0YmNhODIzNjA5NzAxZmFjZmQwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2I5MTU4YTAxYjc5NjRiNjg4MjkxM2VlZTllYmZiN2U3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjk4OSwtMTA0Ljk4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85Mzg0OGQyNTE5ZTI0MzAwYmVkOTQ0YTgwZDVhOWRkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNWViNzUyNTFkZmM0YWFlYWEyY2VlNzNkYWU1NGIyYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTVlYjc1MjUxZGZjNGFhZWFhMmNlZTczZGFlNTRiMmEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEhpZ2hsYW5kIFVuaXRlZCBOZWlnaGJvcnMgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85Mzg0OGQyNTE5ZTI0MzAwYmVkOTQ0YTgwZDVhOWRkZC5zZXRDb250ZW50KGh0bWxfZTVlYjc1MjUxZGZjNGFhZWFhMmNlZTczZGFlNTRiMmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iOTE1OGEwMWI3OTY0YjY4ODI5MTNlZWU5ZWJmYjdlNy5iaW5kUG9wdXAocG9wdXBfOTM4NDhkMjUxOWUyNDMwMGJlZDk0NGE4MGQ1YTlkZGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9iY2IzZTRjMDMxNzQ0YjliOTExZDExNWUwZDcyZWI0NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjY4MjcsLTEwNC43MDAzNjddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmMTUyZmZhNDNhMDQ5MzY5MTJlNmU3MjAwNjc1Njc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkMTdmZjczNjQ2ZDRjMmY4MWM2N2I3ODgyNzNjYWFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8yZDE3ZmY3MzY0NmQ0YzJmODFjNjdiNzg4MjczY2FhYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRm91bnRhaW4gRmFybWVycyBNYXJrZXQgLSBDaXR5IEhhbGw8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWYxNTJmZmE0M2EwNDkzNjkxMmU2ZTcyMDA2NzU2NzYuc2V0Q29udGVudChodG1sXzJkMTdmZjczNjQ2ZDRjMmY4MWM2N2I3ODgyNzNjYWFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYmNiM2U0YzAzMTc0NGI5YjkxMWQxMTVlMGQ3MmViNDQuYmluZFBvcHVwKHBvcHVwX2FmMTUyZmZhNDNhMDQ5MzY5MTJlNmU3MjAwNjc1Njc2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYzAwNmZjZmE5ZTE2NDRmNDg1NTkyMmE3MDg0ZjFhNjEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS4xNjE2MTIsLTEwNC44MDg1N10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWY5NGU3MDRiOWRkNDU1OGEzM2FiMmM2MWVjMTgzZTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDhiM2U5Y2I5YjMzNDVkZDhlYWQ0ZjdmMTc3OTQzNDEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q4YjNlOWNiOWIzMzQ1ZGQ4ZWFkNGY3ZjE3Nzk0MzQxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaGV5ZW5uZSBUdWVzZGF5IEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWY5NGU3MDRiOWRkNDU1OGEzM2FiMmM2MWVjMTgzZTAuc2V0Q29udGVudChodG1sX2Q4YjNlOWNiOWIzMzQ1ZGQ4ZWFkNGY3ZjE3Nzk0MzQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYzAwNmZjZmE5ZTE2NDRmNDg1NTkyMmE3MDg0ZjFhNjEuYmluZFBvcHVwKHBvcHVwX2FmOTRlNzA0YjlkZDQ1NThhMzNhYjJjNjFlYzE4M2UwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOTIwM2I2Zjk3NmU0NDZlMGJmMzg0NzEwNWE5Y2MzODIgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC40MzY5MTcsLTEwNS4yNDMxNDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1NzYyZDAyNTljMzRkYTRiMWVlNDI4ZGE3NzFjZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0NzM1NWM5NTExNDQxY2E5ZTMzNTczZGQxMWM2ZmVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF84NDczNTVjOTUxMTQ0MWNhOWUzMzU3M2RkMTFjNmZlYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2Fub24gQ2l0eSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTc2MmQwMjU5YzM0ZGE0YjFlZTQyOGRhNzcxY2U0MC5zZXRDb250ZW50KGh0bWxfODQ3MzU1Yzk1MTE0NDFjYTllMzM1NzNkZDExYzZmZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MjAzYjZmOTc2ZTQ0NmUwYmYzODQ3MTA1YTljYzM4Mi5iaW5kUG9wdXAocG9wdXBfNzU3NjJkMDI1OWMzNGRhNGIxZWU0MjhkYTc3MWNlNDApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NjNhMmEzOWU3MTU0M2M0YWE0YTE3ZGVhMzA4NmI1OSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljc0NDMsLTEwNC45OTJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNTYwNWRkZDY5NjQ0Mjg4NmZkNDhkNTU4ZmU0NGE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5ZWU0MThmMmY3NjQyN2ZiNDM3YWQxNjk4N2UxZDY4ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF83OWVlNDE4ZjJmNzY0MjdmYjQzN2FkMTY5ODdlMWQ2OCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVGlyaSYjMzk7cyBHYXJkZW4gRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjU2MDVkZGQ2OTY0NDI4ODZmZDQ4ZDU1OGZlNDRhOC5zZXRDb250ZW50KGh0bWxfNzllZTQxOGYyZjc2NDI3ZmI0MzdhZDE2OTg3ZTFkNjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NjNhMmEzOWU3MTU0M2M0YWE0YTE3ZGVhMzA4NmI1OS5iaW5kUG9wdXAocG9wdXBfY2I1NjA1ZGRkNjk2NDQyODg2ZmQ0OGQ1NThmZTQ0YTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9kY2U3NzhlMmNkMzM0YjQxYTdjOWUxMjQzZmRjYmNjZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjE2NTY5NDUsLTEwNC41MDQ3NjE0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDg4OGEzMjllNTc0ZDFkOGJmMmVhZjM5NTA4N2NlMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MzIyY2I0YTQ5MDM0MDBhODAzNzU5YmU1OWJkYTcxYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfNDMyMmNiNGE0OTAzNDAwYTgwMzc1OWJlNTliZGE3MWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFRyaW5pZGFkIENvbW11bml0eSBGYXJtZXJzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA4ODhhMzI5ZTU3NGQxZDhiZjJlYWYzOTUwODdjZTEuc2V0Q29udGVudChodG1sXzQzMjJjYjRhNDkwMzQwMGE4MDM3NTliZTU5YmRhNzFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZGNlNzc4ZTJjZDMzNGI0MWE3YzllMTI0M2ZkY2JjY2UuYmluZFBvcHVwKHBvcHVwX2QwODg4YTMyOWU1NzRkMWQ4YmYyZWFmMzk1MDg3Y2UxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzQ2ZmIzNjBiYzczNDExMzg0NmNkYTc5OGU2ZTg5ZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC45OTczLC0xMDUuNTQ4XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NmY5MWVjZDUwODM0YTQxYjRkYzBlM2Q2ZDFmMTZjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGNkM2YwNDQ4MTA0ODYzYTdjNjdmZjIyZjVmZmQzNyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjBjZDNmMDQ0ODEwNDg2M2E3YzY3ZmYyMmY1ZmZkMzciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERpbGxvbiBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2ZjkxZWNkNTA4MzRhNDFiNGRjMGUzZDZkMWYxNmMwLnNldENvbnRlbnQoaHRtbF9mMGNkM2YwNDQ4MTA0ODYzYTdjNjdmZjIyZjVmZmQzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM0NmZiMzYwYmM3MzQxMTM4NDZjZGE3OThlNmU4OWZmLmJpbmRQb3B1cChwb3B1cF82NmY5MWVjZDUwODM0YTQxYjRkYzBlM2Q2ZDFmMTZjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJhNzQzZTJkY2E0NTQzODI4NTllN2VkMDgzZjYzMjEyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNTg1NTA1LC0xMDUuMDI1MjE5XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDBjMTFhYzk5ODk0OGQxYjYwZjYxNTlmNDYxNDRiMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMmM0Zjg4MDc5NTA0ZWYyOTBlNTMwYzNhYTM2OWZjNSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZjJjNGY4ODA3OTUwNGVmMjkwZTUzMGMzYWEzNjlmYzUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFzcGVuIEdyb3ZlIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGQwYzExYWM5OTg5NDhkMWI2MGY2MTU5ZjQ2MTQ0YjEuc2V0Q29udGVudChodG1sX2YyYzRmODgwNzk1MDRlZjI5MGU1MzBjM2FhMzY5ZmM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMmE3NDNlMmRjYTQ1NDM4Mjg1OWU3ZWQwODNmNjMyMTIuYmluZFBvcHVwKHBvcHVwXzRkMGMxMWFjOTk4OTQ4ZDFiNjBmNjE1OWY0NjE0NGIxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMGQ3MGUyNzRmMjQ1NDZjY2FjMmQxNjNiODIwMWY3ZjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43NDI4LC0xMDUuNTFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlmNWFlY2JmOTNjNTRhMmM5ZDg3ZTg3NzZkZDNhNTZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhYTI4ZjNhNTM1ODQ0NWM4MWFhZGEwYjdiMDgzZjUyID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8zYWEyOGYzYTUzNTg0NDVjODFhYWRhMGI3YjA4M2Y1MiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgSWRhaG8gU3ByaW5ncyBDaGFtYmVyIE9mIENvbW1lcmNlIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmNWFlY2JmOTNjNTRhMmM5ZDg3ZTg3NzZkZDNhNTZkLnNldENvbnRlbnQoaHRtbF8zYWEyOGYzYTUzNTg0NDVjODFhYWRhMGI3YjA4M2Y1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzBkNzBlMjc0ZjI0NTQ2Y2NhYzJkMTYzYjgyMDFmN2YzLmJpbmRQb3B1cChwb3B1cF85ZjVhZWNiZjkzYzU0YTJjOWQ4N2U4Nzc2ZGQzYTU2ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzcyNDJkMjA5YzZjMjQ1OWI4NDU1MDFhODg3NzY4NjMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMzExMDc2NCwtMTA1LjU5NDQxNTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY3NmEyODIyYmVkYTRjMjY5OWI0NjVjZDk5ZWU4OTE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViZWQ4YzZlZGFlZjRiNzVhZWNjMmExMjE3NzU4OGM0ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81YmVkOGM2ZWRhZWY0Yjc1YWVjYzJhMTIxNzc1ODhjNCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRG93bnRvd24gTGFyYW1pZSBGYXJtZXImIzM5O3MgbWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY3NmEyODIyYmVkYTRjMjY5OWI0NjVjZDk5ZWU4OTE2LnNldENvbnRlbnQoaHRtbF81YmVkOGM2ZWRhZWY0Yjc1YWVjYzJhMTIxNzc1ODhjNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyNDJkMjA5YzZjMjQ1OWI4NDU1MDFhODg3NzY4NjMxLmJpbmRQb3B1cChwb3B1cF82NzZhMjgyMmJlZGE0YzI2OTliNDY1Y2Q5OWVlODkxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzJmMzNkZDM1NmY4ODQwYTNiZDJhM2YxYjYwM2RlNDMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMDk4NjY1MywtMTA0Ljk0MTI4MTNdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RiOTU1ZDIzMDc2MTQ5NmZhN2ExZTNmOTQ4NzkwZDNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhMDk4YzM4OTQ0MjQzYjlhODI4MjhlNTIzNTQyMDRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mYTA5OGMzODk0NDI0M2I5YTgyODI4ZTUyMzU0MjA0ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRnJlZGVyaWNrIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjk1NWQyMzA3NjE0OTZmYTdhMWUzZjk0ODc5MGQzYi5zZXRDb250ZW50KGh0bWxfZmEwOThjMzg5NDQyNDNiOWE4MjgyOGU1MjM1NDIwNGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yZjMzZGQzNTZmODg0MGEzYmQyYTNmMWI2MDNkZTQzMi5iaW5kUG9wdXAocG9wdXBfZGI5NTVkMjMwNzYxNDk2ZmE3YTFlM2Y5NDg3OTBkM2IpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9lYmMwZGY1OWJhNTc0ODQ2YmIyYjllMTQ1Mzg4YmU1OCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjMzMDEzMjIsLTEwNC44NTQ0ODU3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMjZiNjgyMzQ2NzE0NThlYjkzYmU4N2MzZTQwMjQ0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTdiNWEwNWYyZmM0Y2E2YTcwOWJkYTA0ODUyZWZmZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfY2E3YjVhMDVmMmZjNGNhNmE3MDliZGEwNDg1MmVmZmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEpvaG5zdG93biBNaWxsaWtlbiBGYXJtZXImIzM5O3MgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyNmI2ODIzNDY3MTQ1OGViOTNiZTg3YzNlNDAyNDRlLnNldENvbnRlbnQoaHRtbF9jYTdiNWEwNWYyZmM0Y2E2YTcwOWJkYTA0ODUyZWZmZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ViYzBkZjU5YmE1NzQ4NDZiYjJiOWUxNDUzODhiZTU4LmJpbmRQb3B1cChwb3B1cF8zMjZiNjgyMzQ2NzE0NThlYjkzYmU4N2MzZTQwMjQ0ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QzYmEzOWUxZGJmMDQyNjdhMGI4MmY2N2NkNzJiOTMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuNjgyMTMzOCwtMTA1Ljk0OTA5MDhdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhMzBkNTc2OTZmMDRhZWRiMDgyOWJkMzI5Mjk5YzZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE1NzBlYzVmYjA1NjRkYjhhZGY2YTNlZWYyYzE1YTllID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8xNTcwZWM1ZmIwNTY0ZGI4YWRmNmEzZWVmMmMxNWE5ZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgU2FudGEgRmUgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YTMwZDU3Njk2ZjA0YWVkYjA4MjliZDMyOTI5OWM2Yy5zZXRDb250ZW50KGh0bWxfMTU3MGVjNWZiMDU2NGRiOGFkZjZhM2VlZjJjMTVhOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kM2JhMzllMWRiZjA0MjY3YTBiODJmNjdjZDcyYjkzMi5iaW5kUG9wdXAocG9wdXBfNmEzMGQ1NzY5NmYwNGFlZGIwODI5YmQzMjkyOTljNmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zMWMyNzczYjYwZWM0NjA5YmIwYjU3MTIwZjEwOGU1MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM2LjM5NzUsLTEwNS41NzRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MDllM2E5YTNiNjRmNzhhY2IwNTJkYzE5ZWM3N2ZkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5OWE4YzRkZGYxYjQ0NzI4ZDMwNzRlYjExY2JlNDVjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF81OTlhOGM0ZGRmMWI0NDcyOGQzMDc0ZWIxMWNiZTQ1YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVGFvcyBQdWVibG8gLSBSZWQgV2lsbG93IEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzgwOWUzYTlhM2I2NGY3OGFjYjA1MmRjMTllYzc3ZmQuc2V0Q29udGVudChodG1sXzU5OWE4YzRkZGYxYjQ0NzI4ZDMwNzRlYjExY2JlNDVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzFjMjc3M2I2MGVjNDYwOWJiMGI1NzEyMGYxMDhlNTEuYmluZFBvcHVwKHBvcHVwXzc4MDllM2E5YTNiNjRmNzhhY2IwNTJkYzE5ZWM3N2ZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZWE0OGRlZGI5NzgxNDY3NmI1MTIxOTI4NjE0ZGU5MjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4wOTcsLTEwNC44NjFdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5M2U2YTM3NGZhNTRiNmQ4Yjg2OTgwNzE0MWY3YTc2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5MjU4YzFlOTNlYTQ1NzRiM2EwZjE3MzZkZTk1OWE5ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9mOTI1OGMxZTkzZWE0NTc0YjNhMGYxNzM2ZGU5NTlhOSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgVGhlIE1hcmtldCBhdCBTdW5kYW5jZSBNb3VudGFpbiBMb2RnZTwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OTNlNmEzNzRmYTU0YjZkOGI4Njk4MDcxNDFmN2E3Ni5zZXRDb250ZW50KGh0bWxfZjkyNThjMWU5M2VhNDU3NGIzYTBmMTczNmRlOTU5YTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lYTQ4ZGVkYjk3ODE0Njc2YjUxMjE5Mjg2MTRkZTkyOC5iaW5kUG9wdXAocG9wdXBfNTkzZTZhMzc0ZmE1NGI2ZDhiODY5ODA3MTQxZjdhNzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl9hNGZhYjUxMjUzYTc0YTJkYjg5NjdiOTNjMjllZjJlMSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjA5OTMsLTEwNC44NzddLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiMWJjMTY0NjFmMTQzZWZhMDkzMDYwYTg4OWYxOTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkyMTY4MDgzZWYwZDQzZTU5MTdiODI2NGY5NDg5ZDM3ID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF85MjE2ODA4M2VmMGQ0M2U1OTE3YjgyNjRmOTQ4OWQzNyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgUGFsbWVyIExha2UgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYjFiYzE2NDYxZjE0M2VmYTA5MzA2MGE4ODlmMTkyYS5zZXRDb250ZW50KGh0bWxfOTIxNjgwODNlZjBkNDNlNTkxN2I4MjY0Zjk0ODlkMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNGZhYjUxMjUzYTc0YTJkYjg5NjdiOTNjMjllZjJlMS5iaW5kUG9wdXAocG9wdXBfYmIxYmMxNjQ2MWYxNDNlZmEwOTMwNjBhODg5ZjE5MmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl83ZDRlNDY5ZDkxZGE0MWQyOTVkN2FjZTQ5ZTJhNjgwZSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjAwNDQsLTEwNC43OTZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2NDNlMmEwYzYyMzQ1NTg5OWMxZTdmOGZiMWZiNTE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3ZTk4NGI2MTQxZDRmMDdhYjMxNGFkZjZjMDQ1YzdjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jN2U5ODRiNjE0MWQ0ZjA3YWIzMTRhZGY2YzA0NWM3YyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgTGliZXJ0eSBIZWlnaHRzIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjY0M2UyYTBjNjIzNDU1ODk5YzFlN2Y4ZmIxZmI1MTUuc2V0Q29udGVudChodG1sX2M3ZTk4NGI2MTQxZDRmMDdhYjMxNGFkZjZjMDQ1YzdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2Q0ZTQ2OWQ5MWRhNDFkMjk1ZDdhY2U0OWUyYTY4MGUuYmluZFBvcHVwKHBvcHVwXzI2NDNlMmEwYzYyMzQ1NTg5OWMxZTdmOGZiMWZiNTE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfZjlkMWIyNmIyYTU3NDI0YjgzOTI5YmIwZTMzODBjMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4zOTI0ODEsLTEwNS4xMTY1NDRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5NmQxYmJlMjRiYTRhYTc4ZDE4OTkzOTc3ODc5ZDA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U3NmQ4OWJiYzFjNjQ2YTI4OTE2YjM3MTg0YmYwMWFjID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9lNzZkODliYmMxYzY0NmEyODkxNmIzNzE4NGJmMDFhYyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgRmxvcmVuY2UgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzk2ZDFiYmUyNGJhNGFhNzhkMTg5OTM5Nzc4NzlkMDcuc2V0Q29udGVudChodG1sX2U3NmQ4OWJiYzFjNjQ2YTI4OTE2YjM3MTg0YmYwMWFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjlkMWIyNmIyYTU3NDI0YjgzOTI5YmIwZTMzODBjMDAuYmluZFBvcHVwKHBvcHVwX2M5NmQxYmJlMjRiYTRhYTc4ZDE4OTkzOTc3ODc5ZDA3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNGMxMDE3NGU2ZGMwNDVlNGJjMDI3OWI5YzlkYTgwNjMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOC4yNjUxLC0xMDQuNjEzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMTM2Y2I3NGIzMTI0MjFhODc5ZTUwMjk1ZWI3MTQxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDQ2MGU0ZjgzNWY0ODRiODdjZTBkYmYyOGUzN2UwNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfN2Q0NjBlNGY4MzVmNDg0Yjg3Y2UwZGJmMjhlMzdlMDYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEV2ZW5pbmcgRmFybWVyJiMzOTtzIE1hcmtldCBvbiB0aGUgUml2ZXJ3YWxrPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxMzZjYjc0YjMxMjQyMWE4NzllNTAyOTVlYjcxNDE1LnNldENvbnRlbnQoaHRtbF83ZDQ2MGU0ZjgzNWY0ODRiODdjZTBkYmYyOGUzN2UwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRjMTAxNzRlNmRjMDQ1ZTRiYzAyNzliOWM5ZGE4MDYzLmJpbmRQb3B1cChwb3B1cF9iMTM2Y2I3NGIzMTI0MjFhODc5ZTUwMjk1ZWI3MTQxNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzZkOTYyMDAyY2U5YTQ4M2VhZmY3MTkxNGQ1MGVhZTUyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguNzk0NjEyNiwtMTA0LjgzMzYxODZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0NzRjNGZkOGRmZDRkOWU4OTgwMWU4OWQ2ZDhmYjI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiNDNlY2JhYWNkNTQyMDY4N2UzMWI4ZDJiZDIxMmFiID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF8wYjQzZWNiYWFjZDU0MjA2ODdlMzFiOGQyYmQyMTJhYiIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQnJvYWRtb29yIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0NzRjNGZkOGRmZDRkOWU4OTgwMWU4OWQ2ZDhmYjI5LnNldENvbnRlbnQoaHRtbF8wYjQzZWNiYWFjZDU0MjA2ODdlMzFiOGQyYmQyMTJhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzZkOTYyMDAyY2U5YTQ4M2VhZmY3MTkxNGQ1MGVhZTUyLmJpbmRQb3B1cChwb3B1cF85NDc0YzRmZDhkZmQ0ZDllODk4MDFlODlkNmQ4ZmIyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2MyYWVkZGYzNjhiYzQ2NzI5ODVlYjE0MjRkMmUyYmZlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguODI0NjczLC0xMDQuODQwODU2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYmNlMDU5MGNjN2Y0OTkyOTdiMzY3MDEwNzYwZWFiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTUxMjM2ZTI5ZmE0MWM5YmI4NDA0OTdhYzczMzU2ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYWE1MTIzNmUyOWZhNDFjOWJiODQwNDk3YWM3MzM1NmYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyaWFyZ2F0ZSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYmNlMDU5MGNjN2Y0OTkyOTdiMzY3MDEwNzYwZWFiYS5zZXRDb250ZW50KGh0bWxfYWE1MTIzNmUyOWZhNDFjOWJiODQwNDk3YWM3MzM1NmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMmFlZGRmMzY4YmM0NjcyOTg1ZWIxNDI0ZDJlMmJmZS5iaW5kUG9wdXAocG9wdXBfMWJjZTA1OTBjYzdmNDk5Mjk3YjM2NzAxMDc2MGVhYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl84NGZiZjg3Y2Q2NjM0ZjNlYjYwODlmOTBiMjNjYjVhZiA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjgyNDY3MywtMTA0Ljg0MDg1Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTZlMDJjNWE0Yjc2NGQyOTg0MTE3NjFmZWQwZWJjZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTY1Mjc3ZjNlZmRjNDk3NzlkZGZhYTJhMjgyZGJkYzcgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzE2NTI3N2YzZWZkYzQ5Nzc5ZGRmYWEyYTI4MmRiZGM3IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBNb251bWVudCBIaWxsIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTZlMDJjNWE0Yjc2NGQyOTg0MTE3NjFmZWQwZWJjZTYuc2V0Q29udGVudChodG1sXzE2NTI3N2YzZWZkYzQ5Nzc5ZGRmYWEyYTI4MmRiZGM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODRmYmY4N2NkNjYzNGYzZWI2MDg5ZjkwYjIzY2I1YWYuYmluZFBvcHVwKHBvcHVwXzE2ZTAyYzVhNGI3NjRkMjk4NDExNzYxZmVkMGViY2U2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfOWY4MzA1YmU2OGY4NDhjZjg4MDc0NzNiMTgxZTBhMTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi45MDIwNDgyLC0xMDQuNDM4MjI4MV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjBkNWIyZTM0MWJlNGZkNGE2YzhjYzRiMTBkMGQwMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzZkMWRhZWM5MzE4NGJmOGE2MmJjNWRmZDU1YmU1YzAgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzM2ZDFkYWVjOTMxODRiZjhhNjJiYzVkZmQ1NWJlNWMwIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBGaXJzdCBTdHJlZXQgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwZDViMmUzNDFiZTRmZDRhNmM4Y2M0YjEwZDBkMDMzLnNldENvbnRlbnQoaHRtbF8zNmQxZGFlYzkzMTg0YmY4YTYyYmM1ZGZkNTViZTVjMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzlmODMwNWJlNjhmODQ4Y2Y4ODA3NDczYjE4MWUwYTExLmJpbmRQb3B1cChwb3B1cF9mMGQ1YjJlMzQxYmU0ZmQ0YTZjOGNjNGIxMGQwZDAzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzRiNzRlMWVmNWU4NjRlMDA5MzljMjUzNTRjMmJiOThjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMzc0MTI3LC0xMDUuNDUwMTI1XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NjhkYzU3NDZiOTc0YmRmOWY4NDUyODlkMWFkZGMyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDM2OTNlYTkwZTY0ZjU1YjA4OGY3OWQ5NGYyYzAwYSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYmQzNjkzZWE5MGU2NGY1NWIwODhmNzlkOTRmMmMwMGEiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEVsIFZhbGxlIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTY4ZGM1NzQ2Yjk3NGJkZjlmODQ1Mjg5ZDFhZGRjMjkuc2V0Q29udGVudChodG1sX2JkMzY5M2VhOTBlNjRmNTViMDg4Zjc5ZDk0ZjJjMDBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGI3NGUxZWY1ZTg2NGUwMDkzOWMyNTM1NGMyYmI5OGMuYmluZFBvcHVwKHBvcHVwXzk2OGRjNTc0NmI5NzRiZGY5Zjg0NTI4OWQxYWRkYzI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjU0NmNiODJhNGJhNDk4ZGFlMmFjNTQxNGY0ODNmNDQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45ODc5LC0xMDQuODIxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzMyYjU3OWY3M2U0ZDE2OWZjMWMxNjRlNTBkMzE5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMDg4YTgwMjczZmY0NGNlOGM2NDM2YmExZTcxMzE4NyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMjA4OGE4MDI3M2ZmNDRjZThjNjQzNmJhMWU3MTMxODciICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJyaWdodG9uIERvd250b3duIFNhdHVyZGF5IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYzMyYjU3OWY3M2U0ZDE2OWZjMWMxNjRlNTBkMzE5OC5zZXRDb250ZW50KGh0bWxfMjA4OGE4MDI3M2ZmNDRjZThjNjQzNmJhMWU3MTMxODcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNTQ2Y2I4MmE0YmE0OThkYWUyYWM1NDE0ZjQ4M2Y0NC5iaW5kUG9wdXAocG9wdXBfZGMzMmI1NzlmNzNlNGQxNjlmYzFjMTY0ZTUwZDMxOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8zNTZmY2QyMDNmZTE0NTgxOTVhMTdmODNlZmFhMTk5MSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM4LjkwNjE2MywtMTA0LjgxNzI3NF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDI5NWNhMDI0NTcxNDk4NWJlZDRmY2Y3NTlhMmRlMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWYwNjg5ZjQ3NzdjNDM0YmJlNWM1YzM1YTk1N2FiOTMgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2FmMDY4OWY0Nzc3YzQzNGJiZTVjNWMzNWE5NTdhYjkzIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IFZpbGxhZ2UgQ29sb3JhZG8gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI5NWNhMDI0NTcxNDk4NWJlZDRmY2Y3NTlhMmRlMGMuc2V0Q29udGVudChodG1sX2FmMDY4OWY0Nzc3YzQzNGJiZTVjNWMzNWE5NTdhYjkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMzU2ZmNkMjAzZmUxNDU4MTk1YTE3ZjgzZWZhYTE5OTEuYmluZFBvcHVwKHBvcHVwXzQyOTVjYTAyNDU3MTQ5ODViZWQ0ZmNmNzU5YTJkZTBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMzcxZmIwMzNlMjRkNGUzNmI5ZTcxYTVmNjgzNWU0MTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS43MTkwMjY5LC0xMDQuODk2OTUzNF0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWYwY2RmYzJkMTRjNDU5MDllNmZlNGVlM2VkOWE3ZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2EwZmEyOGQyYmQzNGI2ODhkNTM1OTRjOTg0Y2Y4ZWYgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzdhMGZhMjhkMmJkMzRiNjg4ZDUzNTk0Yzk4NGNmOGVmIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMb3dyeSBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFmMGNkZmMyZDE0YzQ1OTA5ZTZmZTRlZTNlZDlhN2QwLnNldENvbnRlbnQoaHRtbF83YTBmYTI4ZDJiZDM0YjY4OGQ1MzU5NGM5ODRjZjhlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzM3MWZiMDMzZTI0ZDRlMzZiOWU3MWE1ZjY4MzVlNDEzLmJpbmRQb3B1cChwb3B1cF8xZjBjZGZjMmQxNGM0NTkwOWU2ZmU0ZWUzZWQ5YTdkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzIxNWExNjgyYTNlMjQxOWRhNTNkYzAyZWRjYWUwNDA2ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuNjE4NSwtMTA0Ljc3XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzZmNTM4ZWQ0NjA0ODljOGI1YzJlNDMzYWI0MDUwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDkxZjc5ZDBkMjE0NTc5YWIwMzBmMzQxMTE3NzNmNiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMDA5MWY3OWQwZDIxNDU3OWFiMDMwZjM0MTExNzczZjYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFNvdXRobGFuZHMgRmFybWVyJiMzOTtzIE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2M2ZjUzOGVkNDYwNDg5YzhiNWMyZTQzM2FiNDA1MDQuc2V0Q29udGVudChodG1sXzAwOTFmNzlkMGQyMTQ1NzlhYjAzMGYzNDExMTc3M2Y2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjE1YTE2ODJhM2UyNDE5ZGE1M2RjMDJlZGNhZTA0MDYuYmluZFBvcHVwKHBvcHVwXzdjNmY1MzhlZDQ2MDQ4OWM4YjVjMmU0MzNhYjQwNTA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2ViYzZmZmUxYmIxNDBmNzlmMjJjN2ZiMzFkN2Q5MDUgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43NDc5LC0xMDUuNzM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NGExMTQwZmM0MjM0N2U2Yjg0OGM2MDg1ZWFjZGExNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMmNkZWEyMTc5ZTI0NTdjYWZjY2RlODQzZjlmNWYxMCA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZDJjZGVhMjE3OWUyNDU3Y2FmY2NkZTg0M2Y5ZjVmMTAiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJhc2NhbCBGYWlyL1doaXRlIE9ha3MgQ29tbXVuaXR5IE1hcmtldCA8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDRhMTE0MGZjNDIzNDdlNmI4NDhjNjA4NWVhY2RhMTUuc2V0Q29udGVudChodG1sX2QyY2RlYTIxNzllMjQ1N2NhZmNjZGU4NDNmOWY1ZjEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfY2ViYzZmZmUxYmIxNDBmNzlmMjJjN2ZiMzFkN2Q5MDUuYmluZFBvcHVwKHBvcHVwXzQ0YTExNDBmYzQyMzQ3ZTZiODQ4YzYwODVlYWNkYTE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfYjdiODAyZWM2MDIwNGMwMTgwMGQwMmZhODgxNjAzZjQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMy41NDU1LC0xMDUuNTczXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjNmMjczY2EwZTA0Yzk0YTk1MTI4ODIwM2E3M2Q0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xODg1YjllZGE2ZDI0ZThmOWI5ZjkxMGMyNDcxZTNmZSA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMTg4NWI5ZWRhNmQyNGU4ZjliOWY5MTBjMjQ3MWUzZmUiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEFUQUNzIENhcGl0YW4gRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDYzZjI3M2NhMGUwNGM5NGE5NTEyODgyMDNhNzNkNDIuc2V0Q29udGVudChodG1sXzE4ODViOWVkYTZkMjRlOGY5YjlmOTEwYzI0NzFlM2ZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjdiODAyZWM2MDIwNGMwMTgwMGQwMmZhODgxNjAzZjQuYmluZFBvcHVwKHBvcHVwXzA2M2YyNzNjYTBlMDRjOTRhOTUxMjg4MjAzYTczZDQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjg5Zjk0ZjNkZTUyNDhhOWJkMDI3NGJhMGRhYWZmM2YgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS4zNzIyNzU1LC0xMDQuODYwMDI5OV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjM3NTBiNDI3ZWUyNDc1MjgxZmM3NGU2YTg0M2FkOTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzBiMDBiNzAzYWM5NGMwZDljZGEyNjhkZmQzYzgzZWUgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzMwYjAwYjcwM2FjOTRjMGQ5Y2RhMjY4ZGZkM2M4M2VlIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDYXN0bGUgUm9jayBGYXJtZXJzIE1hcmtldCwgYWthIFBsdW0gQ3JlZWsgVmFsbGV5IEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzNzUwYjQyN2VlMjQ3NTI4MWZjNzRlNmE4NDNhZDkyLnNldENvbnRlbnQoaHRtbF8zMGIwMGI3MDNhYzk0YzBkOWNkYTI2OGRmZDNjODNlZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzI4OWY5NGYzZGU1MjQ4YTliZDAyNzRiYTBkYWFmZjNmLmJpbmRQb3B1cChwb3B1cF9mMzc1MGI0MjdlZTI0NzUyODFmYzc0ZTZhODQzYWQ5Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2QyMTdmNjBhMGY3NTRkYTI5NzcxOGJjMTQyYzZjZWY1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzYuMTk3NDg3LC0xMDUuODg3MzQzXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDdiZmMwYzZmMGI0YmIxOWNlZjBlNTFkZjQ1MzM5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTA1ZjYwOGM1MDU0OWIzOGEyNWEwYzUxNzMyOTRhYyA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfYzkwNWY2MDhjNTA1NDliMzhhMjVhMGM1MTczMjk0YWMiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIERpeG9uIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTA3YmZjMGM2ZjBiNGJiMTljZWYwZTUxZGY0NTMzOTQuc2V0Q29udGVudChodG1sX2M5MDVmNjA4YzUwNTQ5YjM4YTI1YTBjNTE3MzI5NGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDIxN2Y2MGEwZjc1NGRhMjk3NzE4YmMxNDJjNmNlZjUuYmluZFBvcHVwKHBvcHVwX2UwN2JmYzBjNmYwYjRiYjE5Y2VmMGU1MWRmNDUzMzk0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfY2VlM2QyMDg0YThiNDNkN2FkMWU4Nzg0YzBhNDRjMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszMi40MjAyMzUsLTEwNC4yMjg0NTRdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1N2YwYzg5MmY3NDQ3NzM5NjA4ZTBkNGU1MWZjM2EyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxNWViNTU4ZGQ5ZTQxZTJiZGU4OTY0OTY3NjE2MjNlID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF80MTVlYjU1OGRkOWU0MWUyYmRlODk2NDk2NzYxNjIzZSIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2FybHNiYWQgRG93bnRvd24gRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NTdmMGM4OTJmNzQ0NzczOTYwOGUwZDRlNTFmYzNhMi5zZXRDb250ZW50KGh0bWxfNDE1ZWI1NThkZDllNDFlMmJkZTg5NjQ5Njc2MTYyM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jZWUzZDIwODRhOGI0M2Q3YWQxZTg3ODRjMGE0NGMyOC5iaW5kUG9wdXAocG9wdXBfOTU3ZjBjODkyZjc0NDc3Mzk2MDhlMGQ0ZTUxZmMzYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8wNjA0MTZhYzI0ZGY0YWRmYjQ3MjI2ODZjNWJjYmQ5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjUzNjEyLC0xMDUuODkwNV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmU5ZGRiY2RmOTdkNGUyNzk1OWNhMjFlMWU0YWVlMzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjhiNWVjNjQ5YmU1NDQ2M2E3ZWE5MDcxMTQwYzgwYjkgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzI4YjVlYzY0OWJlNTQ0NjNhN2VhOTA3MTE0MGM4MGI5IiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBFbGRvcmFkbyBGYXJtZXJzJiMzOTsgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlOWRkYmNkZjk3ZDRlMjc5NTljYTIxZTFlNGFlZTMzLnNldENvbnRlbnQoaHRtbF8yOGI1ZWM2NDliZTU0NDYzYTdlYTkwNzExNDBjODBiOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA2MDQxNmFjMjRkZjRhZGZiNDcyMjY4NmM1YmNiZDk0LmJpbmRQb3B1cChwb3B1cF8yZTlkZGJjZGY5N2Q0ZTI3OTU5Y2EyMWUxZTRhZWUzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzEyNjg2YjRhNGM0NzQ5YWE4MmFhYzAxZjFjMjZlYWU4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTkzNDgzLC0xMDUuMDU2OTE2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODY2Mzk4MDIwZjY0Mjc5YjI3ZGIwZmVkZTY5ZGJhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzhjYmYyNWJlMzI0MGJhYTkyNzI3NTM5OTE3M2IyYiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTM4Y2JmMjViZTMyNDBiYWE5MjcyNzUzOTkxNzNiMmIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdvb2RsYW5kIFBhcmsgRmFybWVycyYjMzk7IE1hcmtldCAtIFN1bW1lcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mODY2Mzk4MDIwZjY0Mjc5YjI3ZGIwZmVkZTY5ZGJhMi5zZXRDb250ZW50KGh0bWxfZTM4Y2JmMjViZTMyNDBiYWE5MjcyNzUzOTkxNzNiMmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xMjY4NmI0YTRjNDc0OWFhODJhYWMwMWYxYzI2ZWFlOC5iaW5kUG9wdXAocG9wdXBfZjg2NjM5ODAyMGY2NDI3OWIyN2RiMGZlZGU2OWRiYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82MzUxYTI3MjMwMTE0NmQ1YjQ5NzdlN2VlMjk5ZGY3NSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQyMjcxNSwtMTA0LjY4OTkyN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGJiODY4ZTA4NTgyNDc1MzgxZGI3N2I4OGIzNzIxOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY5OGJmNWNiYjVkNDFlZWEzNTg4MTAwOWNiZTdlNWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzBmOThiZjVjYmI1ZDQxZWVhMzU4ODEwMDljYmU3ZTVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBHcmVlbGV5IFdpbnRlciBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGJiODY4ZTA4NTgyNDc1MzgxZGI3N2I4OGIzNzIxOTEuc2V0Q29udGVudChodG1sXzBmOThiZjVjYmI1ZDQxZWVhMzU4ODEwMDljYmU3ZTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNjM1MWEyNzIzMDExNDZkNWI0OTc3ZTdlZTI5OWRmNzUuYmluZFBvcHVwKHBvcHVwXzRiYjg2OGUwODU4MjQ3NTM4MWRiNzdiODhiMzcyMTkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfNzI3ODM2ZjliYTNhNGFmYWEyNWZiZTM5Yzg3NmRmMTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNi40Mzg2LC0xMDUuNTQ0XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGZjMWQzYTA4YWI0ZjNhYTA1Yzg4YmRmZTQzM2Y5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTJhMTI3ZmRhYzY0NTgxOWM0MmYwNjM4YzVhOTc4NiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfZTUyYTEyN2ZkYWM2NDU4MTljNDJmMDYzOGM1YTk3ODYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFJlZCBXaWxsb3cgRmFybWVycyBNYXJrZXQgPC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwZmMxZDNhMDhhYjRmM2FhMDVjODhiZGZlNDMzZjliLnNldENvbnRlbnQoaHRtbF9lNTJhMTI3ZmRhYzY0NTgxOWM0MmYwNjM4YzVhOTc4Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzcyNzgzNmY5YmEzYTRhZmFhMjVmYmUzOWM4NzZkZjE2LmJpbmRQb3B1cChwb3B1cF9iMGZjMWQzYTA4YWI0ZjNhYTA1Yzg4YmRmZTQzM2Y5Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyX2E1YWU2OTg5MjE4OTQ5OTg5NjRlN2E0NTkyZWJlNjJlID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDAuMzA1MzI5LC0xMDUuMDgyNjM2XSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NjhmZGMwNWMwZGU0MTFkODgwOTJiZjdlMzYxNDVmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYzgwN2JkMmJhOWI0NDMyODNlYmNkOTgwYzI1YzE1ZiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfMmM4MDdiZDJiYTliNDQzMjgzZWJjZDk4MGMyNWMxNWYiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIEJlcnRob3VkIExvY2FsIEZhcm1lcnMgTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU2OGZkYzA1YzBkZTQxMWQ4ODA5MmJmN2UzNjE0NWY3LnNldENvbnRlbnQoaHRtbF8yYzgwN2JkMmJhOWI0NDMyODNlYmNkOTgwYzI1YzE1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2E1YWU2OTg5MjE4OTQ5OTg5NjRlN2E0NTkyZWJlNjJlLmJpbmRQb3B1cChwb3B1cF81NjhmZGMwNWMwZGU0MTFkODgwOTJiZjdlMzYxNDVmNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzNiMWM3ZGQ1MWVkYjRjYWE4OTlhZTYzNmU2MWQ0ZDBjID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzguOTk0NzMzLC0xMDUuMDUxNTUxXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfZjJhNGEwOWZmMjcxNGQ1ZDgyOWJkZGY2M2Q2MDYwZWMpOwogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZDhjOGUzYjQwNTg0YWNlOTI3OTg0MDc4NTZkYjc4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OWE1N2NkM2FjNDA0YTU3ODExYmY0YWY5NDkwNTk5YiA9ICQoJyAgICAgICAgIDxkaXYgaWQ9Imh0bWxfOTlhNTdjZDNhYzQwNGE1NzgxMWJmNGFmOTQ5MDU5OWIiICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gICAgICAgICAgICAgICAgIFdvb2RsYW5kIFBhcmsgRmFybWVycyYjMzk7IE1hcmtldCAtIFdpbnRlcjwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZDhjOGUzYjQwNTg0YWNlOTI3OTg0MDc4NTZkYjc4ZC5zZXRDb250ZW50KGh0bWxfOTlhNTdjZDNhYzQwNGE1NzgxMWJmNGFmOTQ5MDU5OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYjFjN2RkNTFlZGI0Y2FhODk5YWU2MzZlNjFkNGQwYy5iaW5kUG9wdXAocG9wdXBfNWQ4YzhlM2I0MDU4NGFjZTkyNzk4NDA3ODU2ZGI3OGQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl81MTk0NDZmMDNiZWI0YjUyYjUwMmVhNDdkMTVkOThiNyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjgwMDEzOCwtMTA1LjA4MTQ1NV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWZmZDc1NWEzMjY5NGRiMjgyZGYxYmQ0ZDZmZWZkMGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU0ZDM4ZmJiODJiNDIyN2I0NmE1MDJmYTc3M2JkMGIgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2Q1NGQzOGZiYjgyYjQyMjdiNDZhNTAyZmE3NzNiZDBiIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBBcnZhZGEgRmFybWVycyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWZmZDc1NWEzMjY5NGRiMjgyZGYxYmQ0ZDZmZWZkMGUuc2V0Q29udGVudChodG1sX2Q1NGQzOGZiYjgyYjQyMjdiNDZhNTAyZmE3NzNiZDBiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTE5NDQ2ZjAzYmViNGI1MmI1MDJlYTQ3ZDE1ZDk4YjcuYmluZFBvcHVwKHBvcHVwXzlmZmQ3NTVhMzI2OTRkYjI4MmRmMWJkNGQ2ZmVmZDBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfODhlZTBmNDJiMDcwNDgwY2FlNzRkMTgwZTExZjVkZmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszOS45MzAxLC0xMDUuNzldLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwZjU1Y2I1ZjZlZjQ1OGQ5NDhjYWJhN2ZkZTdkODFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JhOTBlODZlZjNlZDQzZWJiZGIyYzA0NmM1NGI2MDlkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9iYTkwZTg2ZWYzZWQ0M2ViYmRiMmMwNDZjNTRiNjA5ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgR3JhbmQgUGFyayBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MGY1NWNiNWY2ZWY0NThkOTQ4Y2FiYTdmZGU3ZDgxZC5zZXRDb250ZW50KGh0bWxfYmE5MGU4NmVmM2VkNDNlYmJkYjJjMDQ2YzU0YjYwOWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84OGVlMGY0MmIwNzA0ODBjYWU3NGQxODBlMTFmNWRmZi5iaW5kUG9wdXAocG9wdXBfNTBmNTVjYjVmNmVmNDU4ZDk0OGNhYmE3ZmRlN2Q4MWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl8xN2Y2MWU0NzYwMDI0MzQ0OTAzMjA0ZGE0YmVjMTRjZCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcxMTQyOSwtMTA1LjA5OTQ5Nl0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjE4MDM3YTY2MmFmNDM1YTg2NWU1MjQyMjg1NjQ0NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODAxZmU1ZTZlY2NjNDljZGEwMzhjNGRkMjBhODI3M2EgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sXzgwMWZlNWU2ZWNjYzQ5Y2RhMDM4YzRkZDIwYTgyNzNhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYWtld29vZCBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTgwMzdhNjYyYWY0MzVhODY1ZTUyNDIyODU2NDQ1NS5zZXRDb250ZW50KGh0bWxfODAxZmU1ZTZlY2NjNDljZGEwMzhjNGRkMjBhODI3M2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8xN2Y2MWU0NzYwMDI0MzQ0OTAzMjA0ZGE0YmVjMTRjZC5iaW5kUG9wdXAocG9wdXBfZjE4MDM3YTY2MmFmNDM1YTg2NWU1MjQyMjg1NjQ0NTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl80MjhhZmVhNzM4MTg0YjUyODBiMjM2Y2Y4NDZmMTYwYyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5LjcxNzcwOCwtMTA0Ljk1ODgyN10sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjBmNTJmMjgwYzczNDM2YTliZGUzNDNkYzdjM2IwMGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGVlZGNlZDc5YjQ0NGY1YWE3YjY4MTY2MjYyMmY4ZjEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2RlZWRjZWQ3OWI0NDRmNWFhN2I2ODE2NjI2MjJmOGYxIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBDaGVycnkgQ3JlZWsgRnJlc2ggTWFya2V0PC9kaXY+ICAgICAgICAgICAgICAgICAnKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwZjUyZjI4MGM3MzQzNmE5YmRlMzQzZGM3YzNiMDBhLnNldENvbnRlbnQoaHRtbF9kZWVkY2VkNzliNDQ0ZjVhYTdiNjgxNjYyNjIyZjhmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQyOGFmZWE3MzgxODRiNTI4MGIyMzZjZjg0NmYxNjBjLmJpbmRQb3B1cChwb3B1cF8yMGY1MmYyODBjNzM0MzZhOWJkZTM0M2RjN2MzYjAwYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgICAgICAKICAgICAgICAgICAgCgogICAgICAgICAgICB2YXIgbWFya2VyXzg1MGRhMTFlYzU1YjQ2MjRhYjkwMTE3MjNiYTUxODE3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuMTMxOTc4LC0xMDQuODE0MjJdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjMDgyOWNhYjI2MzQzZTI5NjIxNGYyNDI2OGY4NjE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjNjEyNTJhZGNhMDQwYjI5NTIxZGI1MDk3NjBhNDRkID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9jYzYxMjUyYWRjYTA0MGIyOTUyMWRiNTA5NzYwYTQ0ZCIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQ2hleWVubmUgV2ludGVyIEZhcm1lcnMmIzM5OyBNYXJrZXQ8L2Rpdj4gICAgICAgICAgICAgICAgICcpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmMwODI5Y2FiMjYzNDNlMjk2MjE0ZjI0MjY4Zjg2MTUuc2V0Q29udGVudChodG1sX2NjNjEyNTJhZGNhMDQwYjI5NTIxZGI1MDk3NjBhNDRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODUwZGExMWVjNTViNDYyNGFiOTAxMTcyM2JhNTE4MTcuYmluZFBvcHVwKHBvcHVwXzZjMDgyOWNhYjI2MzQzZTI5NjIxNGYyNDI2OGY4NjE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKCiAgICAgICAgICAgIHZhciBtYXJrZXJfMDEyN2Y3ZGUwYjc3NDZlMDlmOTQzMmVhOWZmZWM2ZGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNy40NjgzNTksLTEwNS44NjUyMzZdLAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF9mMmE0YTA5ZmYyNzE0ZDVkODI5YmRkZjYzZDYwNjBlYyk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VhYWQ4YTE3NDMwNDQ1Mzc5YjJkZmMwMjQzMzQ2YWJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjZWEwZTQ5ZmQ0ZjRhMzI5YTJkNjVkMDI4ZmY0ZWQzID0gJCgnICAgICAgICAgPGRpdiBpZD0iaHRtbF9hY2VhMGU0OWZkNGY0YTMyOWEyZDY1ZDAyOGZmNGVkMyIgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiAgICAgICAgICAgICAgICAgQWxhbW9zYSBGYXJtZXJzIE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYWFkOGExNzQzMDQ0NTM3OWIyZGZjMDI0MzM0NmFiYS5zZXRDb250ZW50KGh0bWxfYWNlYTBlNDlmZDRmNGEzMjlhMmQ2NWQwMjhmZjRlZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wMTI3ZjdkZTBiNzc0NmUwOWY5NDMyZWE5ZmZlYzZkYS5iaW5kUG9wdXAocG9wdXBfZWFhZDhhMTc0MzA0NDUzNzliMmRmYzAyNDMzNDZhYmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcmtlcl82NTc3YjBmMTNlNTM0MTM5OTExY2U4NzY5YzY2YTg4MCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2OCwtMTA0Ljk3Ml0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCkKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2YyYTRhMDlmZjI3MTRkNWQ4MjliZGRmNjNkNjA2MGVjKTsKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDZiY2VjM2VkMTgwNGFhNDlkMzUzNWZlMTQ5MGVhNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzdhYTdjZTM4YzM1NGI4ZmI4ZjE4ZDQ0MjcwZTEwZWEgPSAkKCcgICAgICAgICA8ZGl2IGlkPSJodG1sX2M3YWE3Y2UzOGMzNTRiOGZiOGYxOGQ0NDI3MGUxMGVhIiAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+ICAgICAgICAgICAgICAgICBMYXJrcmlkZ2UgRmFybWVycyYjMzk7IE1hcmtldDwvZGl2PiAgICAgICAgICAgICAgICAgJylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNmJjZWMzZWQxODA0YWE0OWQzNTM1ZmUxNDkwZWE1Ni5zZXRDb250ZW50KGh0bWxfYzdhYTdjZTM4YzM1NGI4ZmI4ZjE4ZDQ0MjcwZTEwZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NTc3YjBmMTNlNTM0MTM5OTExY2U4NzY5YzY2YTg4MC5iaW5kUG9wdXAocG9wdXBfZDZiY2VjM2VkMTgwNGFhNDlkMzUzNWZlMTQ5MGVhNTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgICAgICAgPC9zY3JpcHQ+CiAgICAgICAg" style="position:absolute;width:100%;height:100%;left:0;top:0;"></iframe></div></div>
- </div>
-
- </div>
-
- </div>
- </div>
-
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="7.-The-community-...">7. The community ...<a class="anchor-link" href="#7.-The-community-...">¶</a></h1><p><img src="assets/pycommunity.png"/></p>
-
- </div>
- </div>
- </div></section></section><section><section>
- <div class="cell border-box-sizing text_cell rendered">
- <div class="prompt input_prompt">
- </div>
- <div class="inner_cell">
- <div class="text_cell_render border-box-sizing rendered_html">
- <h1 id="Now-go-play-...">Now go play ...<a class="anchor-link" href="#Now-go-play-...">¶</a></h1><p><img src="assets/8569018622_93efb5cd7e_z.jpg"/>
- <!-- https://www.flickr.com/photos/46990836@N03/8569018622/in/photolist-e4dsGo-e4drbm-ag5WKD-4caGzy-7eTkzp-e4drTN-6kZ1AA-67Fq7C-4qvUeL-dFvk86-dFvkLz-p8N5aV-dx8z1d-62VbU4-dFALqN-4u1EWE-dFvmhk-dFALQS-dFALm5-hUL8ph-7cLTsy-9dGKeF-dFvkuP-dFALJ9-avVtdr-dFvjAv-dtR8k8-5QLb27-dFvkTe-8fpxyQ-4hTwhD-pMuBbQ-9qVf2B-9hgixi-peV9SM-ikEv1x-j1bLt-7u5Hi4-6mPrUi-aq5Hkg-dFAK8y-bSyrsR-dFAKML-7cLTsC-54ruRw-o2iGon-4jQBiE-5W7z2-ooTY-b9sTqZ --></p>
-
- </div>
- </div>
- </div></section></section>
- </div>
- </div>
-
- <script>
-
- require(
- {
- // it makes sense to wait a little bit when you are loading
- // reveal from a cdn in a slow connection environment
- waitSeconds: 15
- },
- [
- "http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/head.min.js",
- "http://cdn.jsdelivr.net/reveal.js/3.0.0/js/reveal.js"
- ],
-
- function(head, Reveal){
-
- // Full list of configuration options available here: https://github.com/hakimel/reveal.js#configuration
- Reveal.initialize({
- controls: true,
- progress: true,
- history: true,
-
- theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
- transition: Reveal.getQueryHash().transition || 'linear', // default/cube/page/concave/zoom/linear/none
-
- // Optional libraries used to extend on reveal.js
- dependencies: [
- { src: "http://cdn.jsdelivr.net/reveal.js/3.0.0/lib/js/classList.js",
- condition: function() { return !document.body.classList; } },
- { src: "http://cdn.jsdelivr.net/reveal.js/3.0.0/plugin/notes/notes.js",
- async: true,
- condition: function() { return !!document.body.classList; } }
- ]
- });
-
- var update = function(event){
- if(MathJax.Hub.getAllJax(Reveal.getCurrentSlide())){
- MathJax.Hub.Rerender(Reveal.getCurrentSlide());
- }
- };
-
- Reveal.addEventListener('slidechanged', update);
-
- var update_scroll = function(event){
- $(".reveal").scrollTop(0);
- };
-
- Reveal.addEventListener('slidechanged', update_scroll);
-
- }
- );
- </script>
-
- </body>
-
-
- </html>
|