]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Tests for passphrase and coin selection
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}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{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;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-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]: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}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../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:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro: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"}*{-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:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;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;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;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}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:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}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:10px;margin-bottom:10px}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:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.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:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}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:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.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'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}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{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.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-right:15px;padding-left:15px}.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}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.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-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.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}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-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{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}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:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-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,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;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}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.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{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.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{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.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{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@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 .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{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.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{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.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:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.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:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.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:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{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:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.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:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{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:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.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:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{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:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.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:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.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:#2a6496;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:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.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 .15s linear;-o-transition:opacity .15s linear;transition:opacity .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:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.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;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.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:focus,.btn-group-vertical>.btn:focus{outline:0}.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-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-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(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:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.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-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;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>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}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:3px}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:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.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-top-right-radius:0;border-bottom-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-top-left-radius:0;border-bottom-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{margin-left:-1px}.nav{padding-left:0;margin-bottom: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:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 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:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.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:4px}.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:4px 4px 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:4px}.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:#428bca}.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{margin-bottom:5px;text-align:center}.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:4px}.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:4px 4px 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-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;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-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) 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:-15px;margin-left:-15px}@media (min-width:768px){.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:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.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;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.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:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;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:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@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 .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:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{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{color:#555;background-color:#e7e7e7}@media (max-width:767px){.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:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.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{color:#fff;background-color:#080808}@media (max-width:767px){.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:#777}.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:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.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:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;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:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.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:#eee}.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:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;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:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.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:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.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{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.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}}@-o-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{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;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[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.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,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.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-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.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:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.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:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.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{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.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{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.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{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.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:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.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:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.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:3px}.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:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.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:3px}.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:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{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{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{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:#333;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:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.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{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,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;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;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-bottom:0;margin-left:5px}.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,.5);box-shadow:0 5px 15px rgba(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-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.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;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right: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;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(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{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 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{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";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:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.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;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;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;margin-top:-10px;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%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(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:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left: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-footer:before,.modal-footer:after{display:table;content:" "}.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-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left: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;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-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}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}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}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}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}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}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="DC POS" name="author" />
15
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
47 </style>
48 </head>
49 <body>
50 <div class="container">
51
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
73 <select id="strength" class="strength form-control">
74 <option value="3">3</option>
75 <option value="6">6</option>
76 <option value="9">9</option>
77 <option value="12">12</option>
78 <option value="15" selected>15</option>
79 <option value="18">18</option>
80 <option value="21">21</option>
81 <option value="24">24</option>
82 </select>
83 <span class="input-group-btn">
84 <button class="btn generate">Generate Random Mnemonic</button>
85 </span>
86 </div>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
91 <div class="col-sm-10">
92 <textarea id="passphrase" class="passphrase form-control"></textarea>
93 </div>
94 </div>
95 <div class="form-group">
96 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
97 <div class="col-sm-10">
98 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
99 </div>
100 </div>
101 <div class="form-group">
102 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
103 <div class="col-sm-10">
104 <select id="network-phrase" class="network form-control">
105 <!-- populated by javascript -->
106 </select>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
111 <div class="col-sm-10">
112 <textarea id="root-key" class="root-key form-control"></textarea>
113 </div>
114 </div>
115 </form>
116 </div>
117 </div>
118
119 <hr>
120
121 <div class="row">
122 <div class="col-md-12">
123 <h2>Derivation Path</h2>
124 <ul class="derivation-type nav nav-tabs" role="tablist">
125 <li id="bip44-tab" class="active">
126 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
127 </li>
128 <li id="bip32-tab">
129 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
130 </li>
131 </ul>
132 <div class="derivation-type tab-content">
133 <div id="bip44" class="tab-pane active">
134 <form class="form-horizontal" role="form">
135 <br>
136 <div class="col-sm-2"></div>
137 <div class="col-sm-10">
138 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
139 </div>
140 <div class="form-group">
141 <label for="purpose" class="col-sm-2 control-label">
142 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
143 </label>
144 <div class="col-sm-10">
145 <input id="purpose" type="text" class="purpose form-control" value="44">
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="coin" class="col-sm-2 control-label">
150 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
151 </label>
152 <div class="col-sm-10">
153 <input id="coin" type="text" class="coin form-control" value="0">
154 </div>
155 </div>
156 <div class="form-group">
157 <label for="account" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="account" type="text" class="account form-control" value="0">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="change" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="change" type="text" class="change form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
176 </div>
177 </div>
178 </form>
179 </div>
180 <div id="bip32" class="tab-pane">
181 <form class="form-horizontal" role="form">
182 <br>
183 <div class="col-sm-2"></div>
184 <div class="col-sm-10">
185 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
186 </div>
187 <div class="form-group">
188 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
189 <div class="col-sm-10">
190 <input id="bip32-path" type="text" class="path form-control" value="m/0">
191 </div>
192 </div>
193 <div class="form-group">
194 <div class="col-sm-2"></div>
195 <label class="col-sm-10">
196 <input class="hardened-addresses" type="checkbox">
197 Use hardened addresses
198 </label>
199 </div>
200 <div class="form-group">
201 <label class="col-sm-2 control-label">Hive Wallet</label>
202 <div class="col-sm-10">
203 <p class="form-control no-border">
204 Use path <code>m/0'/0</code>.
205 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
206 </p>
207 </div>
208 </div>
209 <div class="form-group">
210 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
211 <div class="col-sm-10">
212 <p class="form-control no-border">
213 Use path <code>m/44'/0'/0'/0</code>.
214 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
215 </p>
216 </div>
217 </div>
218 <div class="form-group">
219 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
220 <div class="col-sm-10">
221 <p class="form-control no-border">
222 Use path <code>m/0'/0'</code> with hardened addresses.
223 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
224 </p>
225 </div>
226 </div>
227 </form>
228 </div>
229 </div>
230 <form class="form-horizontal" role="form">
231 <div class="form-group">
232 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
233 <div class="col-sm-10">
234 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
235 </div>
236 </div>
237 <div class="form-group">
238 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
239 <div class="col-sm-10">
240 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
241 </div>
242 </div>
243 </form>
244 </div>
245 </div>
246
247 <hr>
248
249 <div class="row">
250 <div class="col-md-12">
251 <h2>Derived Addresses</h2>
252 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
253 <table class="table table-striped">
254 <thead>
255 <th>
256 <div class="input-group">
257 Path&nbsp;&nbsp;
258 <button class="index-toggle">Toggle</button>
259 </div>
260 </th>
261 <th>
262 <div class="input-group">
263 Address&nbsp;&nbsp;
264 <button class="address-toggle">Toggle</button>
265 </div>
266 </th>
267 <th>
268 <div class="input-group">
269 Private Key&nbsp;&nbsp;
270 <button class="private-key-toggle">Toggle</button>
271 </div>
272 </th>
273 </thead>
274 <tbody class="addresses">
275 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
276 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
277 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
278 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
279 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
280 </tbody>
281 </table>
282 </div>
283 </div>
284 <span>Show next </button>
285 <input type="number" class="rows-to-add" value="20">
286 <button class="more">Show</button>
287
288 <hr>
289
290 <div class="row">
291 <div class="col-md-12">
292 <h2>More info</h2>
293 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
294 <p>
295 Read more at the
296 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
297 </p>
298 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
299 <p>
300 Read more at the
301 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
302 and see the demo at
303 <a href="http://bip32.org/" target="_blank">bip32.org</a>
304 </p>
305 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
306 <p>
307 Read more at the
308 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
309 </p>
310 <h3>Private Keys</h3>
311 <p>
312 Use private keys at
313 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
314 but be careful - it can be easy to make mistakes if you
315 don't know what you're doing
316 </p>
317 </div>
318 </div>
319
320 <hr>
321
322 <div class="row">
323 <div class="col-md-12">
324
325 <h2>Offline Usage</h2>
326
327 <p>
328 You can use this tool without having to be online.
329 </p>
330 <p>
331 In your browser, select file save-as, and save this page
332 as a file.
333 </p>
334 <p>
335 Double-click that file to open it in a browser
336 on any offline computer.
337 </p>
338 <p>
339 Alternatively, download it from
340 <a href="https://github.com/dcpos/bip39">
341 https://github.com/dcpos/bip39
342 </a>
343
344 </div>
345 </div>
346
347 <hr>
348
349 <div class="row">
350 <div class="col-md-12">
351
352 <h2>This project is 100% open-source code</h2>
353
354 <p>
355 <span>Get the source code at - </span>
356 <a href="https://github.com/dcpos/bip39" target="_blank">
357 https://github.com/dcpos/bip39
358 </a>
359 </p>
360
361 <h3>Libraries</h3>
362
363 <p>
364 <span>BitcoinJS - </span>
365 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
366 https://github.com/bitcoinjs/bitcoinjs-lib
367 </a>
368 </p>
369
370 <p>
371 <span>jsBIP39 - </span>
372 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
373 https://github.com/iancoleman/jsbip39
374 </a>
375 </p>
376
377 <p>
378 <span>sjcl - </span>
379 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
380 https://github.com/bitwiseshiftleft/sjcl
381 </a>
382 </p>
383
384 <p>
385 <span>jQuery - </span>
386 <a href="https://jquery.com/" target="_blank">
387 https://jquery.com/
388 </a>
389 </p>
390
391 <p>
392 <span>Twitter Bootstrap - </span>
393 <a href="http://getbootstrap.com/" target="_blank">
394 http://getbootstrap.com/
395 </a>
396 </p>
397
398 </div>
399 </div>
400
401 </div>
402
403 <div class="feedback-container">
404 <div class="feedback">Loading...</div>
405 </div>
406
407 <script type="text/template" id="address-row-template">
408 <tr>
409 <td class="index"><span></span></td>
410 <td class="address"><span></span></td>
411 <td class="privkey"><span></span></td>
412 </tr>
413 </script>
414 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
415 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
416 },_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
417 },removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
418 </script>
419 <script>/*!
420 * Bootstrap v3.2.0 (http://getbootstrap.com)
421 * Copyright 2011-2014 Twitter, Inc.
422 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
423 */
424 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
425 <script>(function() {
426 'use strict';
427
428 /**
429 * Extend an Object with another Object's properties.
430 *
431 * The source objects are specified as additional arguments.
432 *
433 * @param dst Object the object to extend.
434 *
435 * @return Object the final object.
436 */
437 var _extend = function(dst) {
438 var sources = Array.prototype.slice.call(arguments, 1);
439 for (var i=0; i<sources.length; ++i) {
440 var src = sources[i];
441 for (var p in src) {
442 if (src.hasOwnProperty(p)) dst[p] = src[p];
443 }
444 }
445 return dst;
446 };
447
448
449 /**
450 * Defer execution of given function.
451 * @param {Function} func
452 */
453 var _defer = function(func) {
454 if (typeof setImmediate === 'function') {
455 return setImmediate(func);
456 } else {
457 return setTimeout(func, 0);
458 }
459 };
460
461 /**
462 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
463 */
464 var Levenshtein = {
465 /**
466 * Calculate levenshtein distance of the two strings.
467 *
468 * @param str1 String the first string.
469 * @param str2 String the second string.
470 * @return Integer the levenshtein distance (0 and above).
471 */
472 get: function(str1, str2) {
473 // base cases
474 if (str1 === str2) return 0;
475 if (str1.length === 0) return str2.length;
476 if (str2.length === 0) return str1.length;
477
478 // two rows
479 var prevRow = new Array(str2.length + 1),
480 curCol, nextCol, i, j, tmp;
481
482 // initialise previous row
483 for (i=0; i<prevRow.length; ++i) {
484 prevRow[i] = i;
485 }
486
487 // calculate current row distance from previous row
488 for (i=0; i<str1.length; ++i) {
489 nextCol = i + 1;
490
491 for (j=0; j<str2.length; ++j) {
492 curCol = nextCol;
493
494 // substution
495 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
496 // insertion
497 tmp = curCol + 1;
498 if (nextCol > tmp) {
499 nextCol = tmp;
500 }
501 // deletion
502 tmp = prevRow[j + 1] + 1;
503 if (nextCol > tmp) {
504 nextCol = tmp;
505 }
506
507 // copy current col value into previous (in preparation for next iteration)
508 prevRow[j] = curCol;
509 }
510
511 // copy last col value into previous (in preparation for next iteration)
512 prevRow[j] = nextCol;
513 }
514
515 return nextCol;
516 },
517
518 /**
519 * Asynchronously calculate levenshtein distance of the two strings.
520 *
521 * @param str1 String the first string.
522 * @param str2 String the second string.
523 * @param cb Function callback function with signature: function(Error err, int distance)
524 * @param [options] Object additional options.
525 * @param [options.progress] Function progress callback with signature: function(percentComplete)
526 */
527 getAsync: function(str1, str2, cb, options) {
528 options = _extend({}, {
529 progress: null
530 }, options);
531
532 // base cases
533 if (str1 === str2) return cb(null, 0);
534 if (str1.length === 0) return cb(null, str2.length);
535 if (str2.length === 0) return cb(null, str1.length);
536
537 // two rows
538 var prevRow = new Array(str2.length + 1),
539 curCol, nextCol,
540 i, j, tmp,
541 startTime, currentTime;
542
543 // initialise previous row
544 for (i=0; i<prevRow.length; ++i) {
545 prevRow[i] = i;
546 }
547
548 nextCol = 1;
549 i = 0;
550 j = -1;
551
552 var __calculate = function() {
553 // reset timer
554 startTime = new Date().valueOf();
555 currentTime = startTime;
556
557 // keep going until one second has elapsed
558 while (currentTime - startTime < 1000) {
559 // reached end of current row?
560 if (str2.length <= (++j)) {
561 // copy current into previous (in preparation for next iteration)
562 prevRow[j] = nextCol;
563
564 // if already done all chars
565 if (str1.length <= (++i)) {
566 return cb(null, nextCol);
567 }
568 // else if we have more left to do
569 else {
570 nextCol = i + 1;
571 j = 0;
572 }
573 }
574
575 // calculation
576 curCol = nextCol;
577
578 // substution
579 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
580 // insertion
581 tmp = curCol + 1;
582 if (nextCol > tmp) {
583 nextCol = tmp;
584 }
585 // deletion
586 tmp = prevRow[j + 1] + 1;
587 if (nextCol > tmp) {
588 nextCol = tmp;
589 }
590
591 // copy current into previous (in preparation for next iteration)
592 prevRow[j] = curCol;
593
594 // get current time
595 currentTime = new Date().valueOf();
596 }
597
598 // send a progress update?
599 if (null !== options.progress) {
600 try {
601 options.progress.call(null, (i * 100.0/ str1.length));
602 } catch (err) {
603 return cb('Progress callback: ' + err.toString());
604 }
605 }
606
607 // next iteration
608 _defer(__calculate);
609 };
610
611 __calculate();
612 }
613
614 };
615
616 // amd
617 if (typeof define !== "undefined" && define !== null && define.amd) {
618 define(function() {
619 return Levenshtein;
620 });
621 }
622 // commonjs
623 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
624 module.exports = Levenshtein;
625 }
626 // web worker
627 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
628 self.Levenshtein = Levenshtein;
629 }
630 // browser main thread
631 else if (typeof window !== "undefined" && window !== null) {
632 window.Levenshtein = Levenshtein;
633 }
634 }());
635
636 </script>
637 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
638 // (public) Constructor
639 function BigInteger(a, b, c) {
640 if (!(this instanceof BigInteger))
641 return new BigInteger(a, b, c)
642
643 if (a != null) {
644 if ("number" == typeof a) this.fromNumber(a, b, c)
645 else if (b == null && "string" != typeof a) this.fromString(a, 256)
646 else this.fromString(a, b)
647 }
648 }
649
650 var proto = BigInteger.prototype
651
652 // duck-typed isBigInteger
653 proto.__bigi = require('../package.json').version
654 BigInteger.isBigInteger = function (obj, check_ver) {
655 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
656 }
657
658 // Bits per digit
659 var dbits
660
661 // am: Compute w_j += (x*this_i), propagate carries,
662 // c is initial carry, returns final carry.
663 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
664 // We need to select the fastest one that works in this environment.
665
666 // am1: use a single mult and divide to get the high bits,
667 // max digit bits should be 26 because
668 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
669 function am1(i, x, w, j, c, n) {
670 while (--n >= 0) {
671 var v = x * this[i++] + w[j] + c
672 c = Math.floor(v / 0x4000000)
673 w[j++] = v & 0x3ffffff
674 }
675 return c
676 }
677 // am2 avoids a big mult-and-extract completely.
678 // Max digit bits should be <= 30 because we do bitwise ops
679 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
680 function am2(i, x, w, j, c, n) {
681 var xl = x & 0x7fff,
682 xh = x >> 15
683 while (--n >= 0) {
684 var l = this[i] & 0x7fff
685 var h = this[i++] >> 15
686 var m = xh * l + h * xl
687 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
688 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
689 w[j++] = l & 0x3fffffff
690 }
691 return c
692 }
693 // Alternately, set max digit bits to 28 since some
694 // browsers slow down when dealing with 32-bit numbers.
695 function am3(i, x, w, j, c, n) {
696 var xl = x & 0x3fff,
697 xh = x >> 14
698 while (--n >= 0) {
699 var l = this[i] & 0x3fff
700 var h = this[i++] >> 14
701 var m = xh * l + h * xl
702 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
703 c = (l >> 28) + (m >> 14) + xh * h
704 w[j++] = l & 0xfffffff
705 }
706 return c
707 }
708
709 // wtf?
710 BigInteger.prototype.am = am1
711 dbits = 26
712
713 BigInteger.prototype.DB = dbits
714 BigInteger.prototype.DM = ((1 << dbits) - 1)
715 var DV = BigInteger.prototype.DV = (1 << dbits)
716
717 var BI_FP = 52
718 BigInteger.prototype.FV = Math.pow(2, BI_FP)
719 BigInteger.prototype.F1 = BI_FP - dbits
720 BigInteger.prototype.F2 = 2 * dbits - BI_FP
721
722 // Digit conversions
723 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
724 var BI_RC = new Array()
725 var rr, vv
726 rr = "0".charCodeAt(0)
727 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
728 rr = "a".charCodeAt(0)
729 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
730 rr = "A".charCodeAt(0)
731 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
732
733 function int2char(n) {
734 return BI_RM.charAt(n)
735 }
736
737 function intAt(s, i) {
738 var c = BI_RC[s.charCodeAt(i)]
739 return (c == null) ? -1 : c
740 }
741
742 // (protected) copy this to r
743 function bnpCopyTo(r) {
744 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
745 r.t = this.t
746 r.s = this.s
747 }
748
749 // (protected) set from integer value x, -DV <= x < DV
750 function bnpFromInt(x) {
751 this.t = 1
752 this.s = (x < 0) ? -1 : 0
753 if (x > 0) this[0] = x
754 else if (x < -1) this[0] = x + DV
755 else this.t = 0
756 }
757
758 // return bigint initialized to value
759 function nbv(i) {
760 var r = new BigInteger()
761 r.fromInt(i)
762 return r
763 }
764
765 // (protected) set from string and radix
766 function bnpFromString(s, b) {
767 var self = this
768
769 var k
770 if (b == 16) k = 4
771 else if (b == 8) k = 3
772 else if (b == 256) k = 8; // byte array
773 else if (b == 2) k = 1
774 else if (b == 32) k = 5
775 else if (b == 4) k = 2
776 else {
777 self.fromRadix(s, b)
778 return
779 }
780 self.t = 0
781 self.s = 0
782 var i = s.length,
783 mi = false,
784 sh = 0
785 while (--i >= 0) {
786 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
787 if (x < 0) {
788 if (s.charAt(i) == "-") mi = true
789 continue
790 }
791 mi = false
792 if (sh == 0)
793 self[self.t++] = x
794 else if (sh + k > self.DB) {
795 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
796 self[self.t++] = (x >> (self.DB - sh))
797 } else
798 self[self.t - 1] |= x << sh
799 sh += k
800 if (sh >= self.DB) sh -= self.DB
801 }
802 if (k == 8 && (s[0] & 0x80) != 0) {
803 self.s = -1
804 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
805 }
806 self.clamp()
807 if (mi) BigInteger.ZERO.subTo(self, self)
808 }
809
810 // (protected) clamp off excess high words
811 function bnpClamp() {
812 var c = this.s & this.DM
813 while (this.t > 0 && this[this.t - 1] == c)--this.t
814 }
815
816 // (public) return string representation in given radix
817 function bnToString(b) {
818 var self = this
819 if (self.s < 0) return "-" + self.negate()
820 .toString(b)
821 var k
822 if (b == 16) k = 4
823 else if (b == 8) k = 3
824 else if (b == 2) k = 1
825 else if (b == 32) k = 5
826 else if (b == 4) k = 2
827 else return self.toRadix(b)
828 var km = (1 << k) - 1,
829 d, m = false,
830 r = "",
831 i = self.t
832 var p = self.DB - (i * self.DB) % k
833 if (i-- > 0) {
834 if (p < self.DB && (d = self[i] >> p) > 0) {
835 m = true
836 r = int2char(d)
837 }
838 while (i >= 0) {
839 if (p < k) {
840 d = (self[i] & ((1 << p) - 1)) << (k - p)
841 d |= self[--i] >> (p += self.DB - k)
842 } else {
843 d = (self[i] >> (p -= k)) & km
844 if (p <= 0) {
845 p += self.DB
846 --i
847 }
848 }
849 if (d > 0) m = true
850 if (m) r += int2char(d)
851 }
852 }
853 return m ? r : "0"
854 }
855
856 // (public) -this
857 function bnNegate() {
858 var r = new BigInteger()
859 BigInteger.ZERO.subTo(this, r)
860 return r
861 }
862
863 // (public) |this|
864 function bnAbs() {
865 return (this.s < 0) ? this.negate() : this
866 }
867
868 // (public) return + if this > a, - if this < a, 0 if equal
869 function bnCompareTo(a) {
870 var r = this.s - a.s
871 if (r != 0) return r
872 var i = this.t
873 r = i - a.t
874 if (r != 0) return (this.s < 0) ? -r : r
875 while (--i >= 0)
876 if ((r = this[i] - a[i]) != 0) return r
877 return 0
878 }
879
880 // returns bit length of the integer x
881 function nbits(x) {
882 var r = 1,
883 t
884 if ((t = x >>> 16) != 0) {
885 x = t
886 r += 16
887 }
888 if ((t = x >> 8) != 0) {
889 x = t
890 r += 8
891 }
892 if ((t = x >> 4) != 0) {
893 x = t
894 r += 4
895 }
896 if ((t = x >> 2) != 0) {
897 x = t
898 r += 2
899 }
900 if ((t = x >> 1) != 0) {
901 x = t
902 r += 1
903 }
904 return r
905 }
906
907 // (public) return the number of bits in "this"
908 function bnBitLength() {
909 if (this.t <= 0) return 0
910 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
911 }
912
913 // (public) return the number of bytes in "this"
914 function bnByteLength() {
915 return this.bitLength() >> 3
916 }
917
918 // (protected) r = this << n*DB
919 function bnpDLShiftTo(n, r) {
920 var i
921 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
922 for (i = n - 1; i >= 0; --i) r[i] = 0
923 r.t = this.t + n
924 r.s = this.s
925 }
926
927 // (protected) r = this >> n*DB
928 function bnpDRShiftTo(n, r) {
929 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
930 r.t = Math.max(this.t - n, 0)
931 r.s = this.s
932 }
933
934 // (protected) r = this << n
935 function bnpLShiftTo(n, r) {
936 var self = this
937 var bs = n % self.DB
938 var cbs = self.DB - bs
939 var bm = (1 << cbs) - 1
940 var ds = Math.floor(n / self.DB),
941 c = (self.s << bs) & self.DM,
942 i
943 for (i = self.t - 1; i >= 0; --i) {
944 r[i + ds + 1] = (self[i] >> cbs) | c
945 c = (self[i] & bm) << bs
946 }
947 for (i = ds - 1; i >= 0; --i) r[i] = 0
948 r[ds] = c
949 r.t = self.t + ds + 1
950 r.s = self.s
951 r.clamp()
952 }
953
954 // (protected) r = this >> n
955 function bnpRShiftTo(n, r) {
956 var self = this
957 r.s = self.s
958 var ds = Math.floor(n / self.DB)
959 if (ds >= self.t) {
960 r.t = 0
961 return
962 }
963 var bs = n % self.DB
964 var cbs = self.DB - bs
965 var bm = (1 << bs) - 1
966 r[0] = self[ds] >> bs
967 for (var i = ds + 1; i < self.t; ++i) {
968 r[i - ds - 1] |= (self[i] & bm) << cbs
969 r[i - ds] = self[i] >> bs
970 }
971 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
972 r.t = self.t - ds
973 r.clamp()
974 }
975
976 // (protected) r = this - a
977 function bnpSubTo(a, r) {
978 var self = this
979 var i = 0,
980 c = 0,
981 m = Math.min(a.t, self.t)
982 while (i < m) {
983 c += self[i] - a[i]
984 r[i++] = c & self.DM
985 c >>= self.DB
986 }
987 if (a.t < self.t) {
988 c -= a.s
989 while (i < self.t) {
990 c += self[i]
991 r[i++] = c & self.DM
992 c >>= self.DB
993 }
994 c += self.s
995 } else {
996 c += self.s
997 while (i < a.t) {
998 c -= a[i]
999 r[i++] = c & self.DM
1000 c >>= self.DB
1001 }
1002 c -= a.s
1003 }
1004 r.s = (c < 0) ? -1 : 0
1005 if (c < -1) r[i++] = self.DV + c
1006 else if (c > 0) r[i++] = c
1007 r.t = i
1008 r.clamp()
1009 }
1010
1011 // (protected) r = this * a, r != this,a (HAC 14.12)
1012 // "this" should be the larger one if appropriate.
1013 function bnpMultiplyTo(a, r) {
1014 var x = this.abs(),
1015 y = a.abs()
1016 var i = x.t
1017 r.t = i + y.t
1018 while (--i >= 0) r[i] = 0
1019 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1020 r.s = 0
1021 r.clamp()
1022 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1023 }
1024
1025 // (protected) r = this^2, r != this (HAC 14.16)
1026 function bnpSquareTo(r) {
1027 var x = this.abs()
1028 var i = r.t = 2 * x.t
1029 while (--i >= 0) r[i] = 0
1030 for (i = 0; i < x.t - 1; ++i) {
1031 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1032 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1033 r[i + x.t] -= x.DV
1034 r[i + x.t + 1] = 1
1035 }
1036 }
1037 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1038 r.s = 0
1039 r.clamp()
1040 }
1041
1042 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1043 // r != q, this != m. q or r may be null.
1044 function bnpDivRemTo(m, q, r) {
1045 var self = this
1046 var pm = m.abs()
1047 if (pm.t <= 0) return
1048 var pt = self.abs()
1049 if (pt.t < pm.t) {
1050 if (q != null) q.fromInt(0)
1051 if (r != null) self.copyTo(r)
1052 return
1053 }
1054 if (r == null) r = new BigInteger()
1055 var y = new BigInteger(),
1056 ts = self.s,
1057 ms = m.s
1058 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1059 if (nsh > 0) {
1060 pm.lShiftTo(nsh, y)
1061 pt.lShiftTo(nsh, r)
1062 } else {
1063 pm.copyTo(y)
1064 pt.copyTo(r)
1065 }
1066 var ys = y.t
1067 var y0 = y[ys - 1]
1068 if (y0 == 0) return
1069 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1070 var d1 = self.FV / yt,
1071 d2 = (1 << self.F1) / yt,
1072 e = 1 << self.F2
1073 var i = r.t,
1074 j = i - ys,
1075 t = (q == null) ? new BigInteger() : q
1076 y.dlShiftTo(j, t)
1077 if (r.compareTo(t) >= 0) {
1078 r[r.t++] = 1
1079 r.subTo(t, r)
1080 }
1081 BigInteger.ONE.dlShiftTo(ys, t)
1082 t.subTo(y, y); // "negative" y so we can replace sub with am later
1083 while (y.t < ys) y[y.t++] = 0
1084 while (--j >= 0) {
1085 // Estimate quotient digit
1086 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1087 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1088 y.dlShiftTo(j, t)
1089 r.subTo(t, r)
1090 while (r[i] < --qd) r.subTo(t, r)
1091 }
1092 }
1093 if (q != null) {
1094 r.drShiftTo(ys, q)
1095 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1096 }
1097 r.t = ys
1098 r.clamp()
1099 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1100 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1101 }
1102
1103 // (public) this mod a
1104 function bnMod(a) {
1105 var r = new BigInteger()
1106 this.abs()
1107 .divRemTo(a, null, r)
1108 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1109 return r
1110 }
1111
1112 // Modular reduction using "classic" algorithm
1113 function Classic(m) {
1114 this.m = m
1115 }
1116
1117 function cConvert(x) {
1118 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1119 else return x
1120 }
1121
1122 function cRevert(x) {
1123 return x
1124 }
1125
1126 function cReduce(x) {
1127 x.divRemTo(this.m, null, x)
1128 }
1129
1130 function cMulTo(x, y, r) {
1131 x.multiplyTo(y, r)
1132 this.reduce(r)
1133 }
1134
1135 function cSqrTo(x, r) {
1136 x.squareTo(r)
1137 this.reduce(r)
1138 }
1139
1140 Classic.prototype.convert = cConvert
1141 Classic.prototype.revert = cRevert
1142 Classic.prototype.reduce = cReduce
1143 Classic.prototype.mulTo = cMulTo
1144 Classic.prototype.sqrTo = cSqrTo
1145
1146 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1147 // justification:
1148 // xy == 1 (mod m)
1149 // xy = 1+km
1150 // xy(2-xy) = (1+km)(1-km)
1151 // x[y(2-xy)] = 1-k^2m^2
1152 // x[y(2-xy)] == 1 (mod m^2)
1153 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1154 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1155 // JS multiply "overflows" differently from C/C++, so care is needed here.
1156 function bnpInvDigit() {
1157 if (this.t < 1) return 0
1158 var x = this[0]
1159 if ((x & 1) == 0) return 0
1160 var y = x & 3; // y == 1/x mod 2^2
1161 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1162 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1163 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1164 // last step - calculate inverse mod DV directly
1165 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1166 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1167 // we really want the negative inverse, and -DV < y < DV
1168 return (y > 0) ? this.DV - y : -y
1169 }
1170
1171 // Montgomery reduction
1172 function Montgomery(m) {
1173 this.m = m
1174 this.mp = m.invDigit()
1175 this.mpl = this.mp & 0x7fff
1176 this.mph = this.mp >> 15
1177 this.um = (1 << (m.DB - 15)) - 1
1178 this.mt2 = 2 * m.t
1179 }
1180
1181 // xR mod m
1182 function montConvert(x) {
1183 var r = new BigInteger()
1184 x.abs()
1185 .dlShiftTo(this.m.t, r)
1186 r.divRemTo(this.m, null, r)
1187 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1188 return r
1189 }
1190
1191 // x/R mod m
1192 function montRevert(x) {
1193 var r = new BigInteger()
1194 x.copyTo(r)
1195 this.reduce(r)
1196 return r
1197 }
1198
1199 // x = x/R mod m (HAC 14.32)
1200 function montReduce(x) {
1201 while (x.t <= this.mt2) // pad x so am has enough room later
1202 x[x.t++] = 0
1203 for (var i = 0; i < this.m.t; ++i) {
1204 // faster way of calculating u0 = x[i]*mp mod DV
1205 var j = x[i] & 0x7fff
1206 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1207 // use am to combine the multiply-shift-add into one call
1208 j = i + this.m.t
1209 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1210 // propagate carry
1211 while (x[j] >= x.DV) {
1212 x[j] -= x.DV
1213 x[++j]++
1214 }
1215 }
1216 x.clamp()
1217 x.drShiftTo(this.m.t, x)
1218 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1219 }
1220
1221 // r = "x^2/R mod m"; x != r
1222 function montSqrTo(x, r) {
1223 x.squareTo(r)
1224 this.reduce(r)
1225 }
1226
1227 // r = "xy/R mod m"; x,y != r
1228 function montMulTo(x, y, r) {
1229 x.multiplyTo(y, r)
1230 this.reduce(r)
1231 }
1232
1233 Montgomery.prototype.convert = montConvert
1234 Montgomery.prototype.revert = montRevert
1235 Montgomery.prototype.reduce = montReduce
1236 Montgomery.prototype.mulTo = montMulTo
1237 Montgomery.prototype.sqrTo = montSqrTo
1238
1239 // (protected) true iff this is even
1240 function bnpIsEven() {
1241 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1242 }
1243
1244 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1245 function bnpExp(e, z) {
1246 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1247 var r = new BigInteger(),
1248 r2 = new BigInteger(),
1249 g = z.convert(this),
1250 i = nbits(e) - 1
1251 g.copyTo(r)
1252 while (--i >= 0) {
1253 z.sqrTo(r, r2)
1254 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1255 else {
1256 var t = r
1257 r = r2
1258 r2 = t
1259 }
1260 }
1261 return z.revert(r)
1262 }
1263
1264 // (public) this^e % m, 0 <= e < 2^32
1265 function bnModPowInt(e, m) {
1266 var z
1267 if (e < 256 || m.isEven()) z = new Classic(m)
1268 else z = new Montgomery(m)
1269 return this.exp(e, z)
1270 }
1271
1272 // protected
1273 proto.copyTo = bnpCopyTo
1274 proto.fromInt = bnpFromInt
1275 proto.fromString = bnpFromString
1276 proto.clamp = bnpClamp
1277 proto.dlShiftTo = bnpDLShiftTo
1278 proto.drShiftTo = bnpDRShiftTo
1279 proto.lShiftTo = bnpLShiftTo
1280 proto.rShiftTo = bnpRShiftTo
1281 proto.subTo = bnpSubTo
1282 proto.multiplyTo = bnpMultiplyTo
1283 proto.squareTo = bnpSquareTo
1284 proto.divRemTo = bnpDivRemTo
1285 proto.invDigit = bnpInvDigit
1286 proto.isEven = bnpIsEven
1287 proto.exp = bnpExp
1288
1289 // public
1290 proto.toString = bnToString
1291 proto.negate = bnNegate
1292 proto.abs = bnAbs
1293 proto.compareTo = bnCompareTo
1294 proto.bitLength = bnBitLength
1295 proto.byteLength = bnByteLength
1296 proto.mod = bnMod
1297 proto.modPowInt = bnModPowInt
1298
1299 // (public)
1300 function bnClone() {
1301 var r = new BigInteger()
1302 this.copyTo(r)
1303 return r
1304 }
1305
1306 // (public) return value as integer
1307 function bnIntValue() {
1308 if (this.s < 0) {
1309 if (this.t == 1) return this[0] - this.DV
1310 else if (this.t == 0) return -1
1311 } else if (this.t == 1) return this[0]
1312 else if (this.t == 0) return 0
1313 // assumes 16 < DB < 32
1314 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1315 }
1316
1317 // (public) return value as byte
1318 function bnByteValue() {
1319 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1320 }
1321
1322 // (public) return value as short (assumes DB>=16)
1323 function bnShortValue() {
1324 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1325 }
1326
1327 // (protected) return x s.t. r^x < DV
1328 function bnpChunkSize(r) {
1329 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1330 }
1331
1332 // (public) 0 if this == 0, 1 if this > 0
1333 function bnSigNum() {
1334 if (this.s < 0) return -1
1335 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1336 else return 1
1337 }
1338
1339 // (protected) convert to radix string
1340 function bnpToRadix(b) {
1341 if (b == null) b = 10
1342 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1343 var cs = this.chunkSize(b)
1344 var a = Math.pow(b, cs)
1345 var d = nbv(a),
1346 y = new BigInteger(),
1347 z = new BigInteger(),
1348 r = ""
1349 this.divRemTo(d, y, z)
1350 while (y.signum() > 0) {
1351 r = (a + z.intValue())
1352 .toString(b)
1353 .substr(1) + r
1354 y.divRemTo(d, y, z)
1355 }
1356 return z.intValue()
1357 .toString(b) + r
1358 }
1359
1360 // (protected) convert from radix string
1361 function bnpFromRadix(s, b) {
1362 var self = this
1363 self.fromInt(0)
1364 if (b == null) b = 10
1365 var cs = self.chunkSize(b)
1366 var d = Math.pow(b, cs),
1367 mi = false,
1368 j = 0,
1369 w = 0
1370 for (var i = 0; i < s.length; ++i) {
1371 var x = intAt(s, i)
1372 if (x < 0) {
1373 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1374 continue
1375 }
1376 w = b * w + x
1377 if (++j >= cs) {
1378 self.dMultiply(d)
1379 self.dAddOffset(w, 0)
1380 j = 0
1381 w = 0
1382 }
1383 }
1384 if (j > 0) {
1385 self.dMultiply(Math.pow(b, j))
1386 self.dAddOffset(w, 0)
1387 }
1388 if (mi) BigInteger.ZERO.subTo(self, self)
1389 }
1390
1391 // (protected) alternate constructor
1392 function bnpFromNumber(a, b, c) {
1393 var self = this
1394 if ("number" == typeof b) {
1395 // new BigInteger(int,int,RNG)
1396 if (a < 2) self.fromInt(1)
1397 else {
1398 self.fromNumber(a, c)
1399 if (!self.testBit(a - 1)) // force MSB set
1400 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1401 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1402 while (!self.isProbablePrime(b)) {
1403 self.dAddOffset(2, 0)
1404 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1405 }
1406 }
1407 } else {
1408 // new BigInteger(int,RNG)
1409 var x = new Array(),
1410 t = a & 7
1411 x.length = (a >> 3) + 1
1412 b.nextBytes(x)
1413 if (t > 0) x[0] &= ((1 << t) - 1)
1414 else x[0] = 0
1415 self.fromString(x, 256)
1416 }
1417 }
1418
1419 // (public) convert to bigendian byte array
1420 function bnToByteArray() {
1421 var self = this
1422 var i = self.t,
1423 r = new Array()
1424 r[0] = self.s
1425 var p = self.DB - (i * self.DB) % 8,
1426 d, k = 0
1427 if (i-- > 0) {
1428 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1429 r[k++] = d | (self.s << (self.DB - p))
1430 while (i >= 0) {
1431 if (p < 8) {
1432 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1433 d |= self[--i] >> (p += self.DB - 8)
1434 } else {
1435 d = (self[i] >> (p -= 8)) & 0xff
1436 if (p <= 0) {
1437 p += self.DB
1438 --i
1439 }
1440 }
1441 if ((d & 0x80) != 0) d |= -256
1442 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1443 if (k > 0 || d != self.s) r[k++] = d
1444 }
1445 }
1446 return r
1447 }
1448
1449 function bnEquals(a) {
1450 return (this.compareTo(a) == 0)
1451 }
1452
1453 function bnMin(a) {
1454 return (this.compareTo(a) < 0) ? this : a
1455 }
1456
1457 function bnMax(a) {
1458 return (this.compareTo(a) > 0) ? this : a
1459 }
1460
1461 // (protected) r = this op a (bitwise)
1462 function bnpBitwiseTo(a, op, r) {
1463 var self = this
1464 var i, f, m = Math.min(a.t, self.t)
1465 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1466 if (a.t < self.t) {
1467 f = a.s & self.DM
1468 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1469 r.t = self.t
1470 } else {
1471 f = self.s & self.DM
1472 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1473 r.t = a.t
1474 }
1475 r.s = op(self.s, a.s)
1476 r.clamp()
1477 }
1478
1479 // (public) this & a
1480 function op_and(x, y) {
1481 return x & y
1482 }
1483
1484 function bnAnd(a) {
1485 var r = new BigInteger()
1486 this.bitwiseTo(a, op_and, r)
1487 return r
1488 }
1489
1490 // (public) this | a
1491 function op_or(x, y) {
1492 return x | y
1493 }
1494
1495 function bnOr(a) {
1496 var r = new BigInteger()
1497 this.bitwiseTo(a, op_or, r)
1498 return r
1499 }
1500
1501 // (public) this ^ a
1502 function op_xor(x, y) {
1503 return x ^ y
1504 }
1505
1506 function bnXor(a) {
1507 var r = new BigInteger()
1508 this.bitwiseTo(a, op_xor, r)
1509 return r
1510 }
1511
1512 // (public) this & ~a
1513 function op_andnot(x, y) {
1514 return x & ~y
1515 }
1516
1517 function bnAndNot(a) {
1518 var r = new BigInteger()
1519 this.bitwiseTo(a, op_andnot, r)
1520 return r
1521 }
1522
1523 // (public) ~this
1524 function bnNot() {
1525 var r = new BigInteger()
1526 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1527 r.t = this.t
1528 r.s = ~this.s
1529 return r
1530 }
1531
1532 // (public) this << n
1533 function bnShiftLeft(n) {
1534 var r = new BigInteger()
1535 if (n < 0) this.rShiftTo(-n, r)
1536 else this.lShiftTo(n, r)
1537 return r
1538 }
1539
1540 // (public) this >> n
1541 function bnShiftRight(n) {
1542 var r = new BigInteger()
1543 if (n < 0) this.lShiftTo(-n, r)
1544 else this.rShiftTo(n, r)
1545 return r
1546 }
1547
1548 // return index of lowest 1-bit in x, x < 2^31
1549 function lbit(x) {
1550 if (x == 0) return -1
1551 var r = 0
1552 if ((x & 0xffff) == 0) {
1553 x >>= 16
1554 r += 16
1555 }
1556 if ((x & 0xff) == 0) {
1557 x >>= 8
1558 r += 8
1559 }
1560 if ((x & 0xf) == 0) {
1561 x >>= 4
1562 r += 4
1563 }
1564 if ((x & 3) == 0) {
1565 x >>= 2
1566 r += 2
1567 }
1568 if ((x & 1) == 0)++r
1569 return r
1570 }
1571
1572 // (public) returns index of lowest 1-bit (or -1 if none)
1573 function bnGetLowestSetBit() {
1574 for (var i = 0; i < this.t; ++i)
1575 if (this[i] != 0) return i * this.DB + lbit(this[i])
1576 if (this.s < 0) return this.t * this.DB
1577 return -1
1578 }
1579
1580 // return number of 1 bits in x
1581 function cbit(x) {
1582 var r = 0
1583 while (x != 0) {
1584 x &= x - 1
1585 ++r
1586 }
1587 return r
1588 }
1589
1590 // (public) return number of set bits
1591 function bnBitCount() {
1592 var r = 0,
1593 x = this.s & this.DM
1594 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1595 return r
1596 }
1597
1598 // (public) true iff nth bit is set
1599 function bnTestBit(n) {
1600 var j = Math.floor(n / this.DB)
1601 if (j >= this.t) return (this.s != 0)
1602 return ((this[j] & (1 << (n % this.DB))) != 0)
1603 }
1604
1605 // (protected) this op (1<<n)
1606 function bnpChangeBit(n, op) {
1607 var r = BigInteger.ONE.shiftLeft(n)
1608 this.bitwiseTo(r, op, r)
1609 return r
1610 }
1611
1612 // (public) this | (1<<n)
1613 function bnSetBit(n) {
1614 return this.changeBit(n, op_or)
1615 }
1616
1617 // (public) this & ~(1<<n)
1618 function bnClearBit(n) {
1619 return this.changeBit(n, op_andnot)
1620 }
1621
1622 // (public) this ^ (1<<n)
1623 function bnFlipBit(n) {
1624 return this.changeBit(n, op_xor)
1625 }
1626
1627 // (protected) r = this + a
1628 function bnpAddTo(a, r) {
1629 var self = this
1630
1631 var i = 0,
1632 c = 0,
1633 m = Math.min(a.t, self.t)
1634 while (i < m) {
1635 c += self[i] + a[i]
1636 r[i++] = c & self.DM
1637 c >>= self.DB
1638 }
1639 if (a.t < self.t) {
1640 c += a.s
1641 while (i < self.t) {
1642 c += self[i]
1643 r[i++] = c & self.DM
1644 c >>= self.DB
1645 }
1646 c += self.s
1647 } else {
1648 c += self.s
1649 while (i < a.t) {
1650 c += a[i]
1651 r[i++] = c & self.DM
1652 c >>= self.DB
1653 }
1654 c += a.s
1655 }
1656 r.s = (c < 0) ? -1 : 0
1657 if (c > 0) r[i++] = c
1658 else if (c < -1) r[i++] = self.DV + c
1659 r.t = i
1660 r.clamp()
1661 }
1662
1663 // (public) this + a
1664 function bnAdd(a) {
1665 var r = new BigInteger()
1666 this.addTo(a, r)
1667 return r
1668 }
1669
1670 // (public) this - a
1671 function bnSubtract(a) {
1672 var r = new BigInteger()
1673 this.subTo(a, r)
1674 return r
1675 }
1676
1677 // (public) this * a
1678 function bnMultiply(a) {
1679 var r = new BigInteger()
1680 this.multiplyTo(a, r)
1681 return r
1682 }
1683
1684 // (public) this^2
1685 function bnSquare() {
1686 var r = new BigInteger()
1687 this.squareTo(r)
1688 return r
1689 }
1690
1691 // (public) this / a
1692 function bnDivide(a) {
1693 var r = new BigInteger()
1694 this.divRemTo(a, r, null)
1695 return r
1696 }
1697
1698 // (public) this % a
1699 function bnRemainder(a) {
1700 var r = new BigInteger()
1701 this.divRemTo(a, null, r)
1702 return r
1703 }
1704
1705 // (public) [this/a,this%a]
1706 function bnDivideAndRemainder(a) {
1707 var q = new BigInteger(),
1708 r = new BigInteger()
1709 this.divRemTo(a, q, r)
1710 return new Array(q, r)
1711 }
1712
1713 // (protected) this *= n, this >= 0, 1 < n < DV
1714 function bnpDMultiply(n) {
1715 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1716 ++this.t
1717 this.clamp()
1718 }
1719
1720 // (protected) this += n << w words, this >= 0
1721 function bnpDAddOffset(n, w) {
1722 if (n == 0) return
1723 while (this.t <= w) this[this.t++] = 0
1724 this[w] += n
1725 while (this[w] >= this.DV) {
1726 this[w] -= this.DV
1727 if (++w >= this.t) this[this.t++] = 0
1728 ++this[w]
1729 }
1730 }
1731
1732 // A "null" reducer
1733 function NullExp() {}
1734
1735 function nNop(x) {
1736 return x
1737 }
1738
1739 function nMulTo(x, y, r) {
1740 x.multiplyTo(y, r)
1741 }
1742
1743 function nSqrTo(x, r) {
1744 x.squareTo(r)
1745 }
1746
1747 NullExp.prototype.convert = nNop
1748 NullExp.prototype.revert = nNop
1749 NullExp.prototype.mulTo = nMulTo
1750 NullExp.prototype.sqrTo = nSqrTo
1751
1752 // (public) this^e
1753 function bnPow(e) {
1754 return this.exp(e, new NullExp())
1755 }
1756
1757 // (protected) r = lower n words of "this * a", a.t <= n
1758 // "this" should be the larger one if appropriate.
1759 function bnpMultiplyLowerTo(a, n, r) {
1760 var i = Math.min(this.t + a.t, n)
1761 r.s = 0; // assumes a,this >= 0
1762 r.t = i
1763 while (i > 0) r[--i] = 0
1764 var j
1765 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1766 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1767 r.clamp()
1768 }
1769
1770 // (protected) r = "this * a" without lower n words, n > 0
1771 // "this" should be the larger one if appropriate.
1772 function bnpMultiplyUpperTo(a, n, r) {
1773 --n
1774 var i = r.t = this.t + a.t - n
1775 r.s = 0; // assumes a,this >= 0
1776 while (--i >= 0) r[i] = 0
1777 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1778 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1779 r.clamp()
1780 r.drShiftTo(1, r)
1781 }
1782
1783 // Barrett modular reduction
1784 function Barrett(m) {
1785 // setup Barrett
1786 this.r2 = new BigInteger()
1787 this.q3 = new BigInteger()
1788 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1789 this.mu = this.r2.divide(m)
1790 this.m = m
1791 }
1792
1793 function barrettConvert(x) {
1794 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1795 else if (x.compareTo(this.m) < 0) return x
1796 else {
1797 var r = new BigInteger()
1798 x.copyTo(r)
1799 this.reduce(r)
1800 return r
1801 }
1802 }
1803
1804 function barrettRevert(x) {
1805 return x
1806 }
1807
1808 // x = x mod m (HAC 14.42)
1809 function barrettReduce(x) {
1810 var self = this
1811 x.drShiftTo(self.m.t - 1, self.r2)
1812 if (x.t > self.m.t + 1) {
1813 x.t = self.m.t + 1
1814 x.clamp()
1815 }
1816 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1817 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1818 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1819 x.subTo(self.r2, x)
1820 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1821 }
1822
1823 // r = x^2 mod m; x != r
1824 function barrettSqrTo(x, r) {
1825 x.squareTo(r)
1826 this.reduce(r)
1827 }
1828
1829 // r = x*y mod m; x,y != r
1830 function barrettMulTo(x, y, r) {
1831 x.multiplyTo(y, r)
1832 this.reduce(r)
1833 }
1834
1835 Barrett.prototype.convert = barrettConvert
1836 Barrett.prototype.revert = barrettRevert
1837 Barrett.prototype.reduce = barrettReduce
1838 Barrett.prototype.mulTo = barrettMulTo
1839 Barrett.prototype.sqrTo = barrettSqrTo
1840
1841 // (public) this^e % m (HAC 14.85)
1842 function bnModPow(e, m) {
1843 var i = e.bitLength(),
1844 k, r = nbv(1),
1845 z
1846 if (i <= 0) return r
1847 else if (i < 18) k = 1
1848 else if (i < 48) k = 3
1849 else if (i < 144) k = 4
1850 else if (i < 768) k = 5
1851 else k = 6
1852 if (i < 8)
1853 z = new Classic(m)
1854 else if (m.isEven())
1855 z = new Barrett(m)
1856 else
1857 z = new Montgomery(m)
1858
1859 // precomputation
1860 var g = new Array(),
1861 n = 3,
1862 k1 = k - 1,
1863 km = (1 << k) - 1
1864 g[1] = z.convert(this)
1865 if (k > 1) {
1866 var g2 = new BigInteger()
1867 z.sqrTo(g[1], g2)
1868 while (n <= km) {
1869 g[n] = new BigInteger()
1870 z.mulTo(g2, g[n - 2], g[n])
1871 n += 2
1872 }
1873 }
1874
1875 var j = e.t - 1,
1876 w, is1 = true,
1877 r2 = new BigInteger(),
1878 t
1879 i = nbits(e[j]) - 1
1880 while (j >= 0) {
1881 if (i >= k1) w = (e[j] >> (i - k1)) & km
1882 else {
1883 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1884 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1885 }
1886
1887 n = k
1888 while ((w & 1) == 0) {
1889 w >>= 1
1890 --n
1891 }
1892 if ((i -= n) < 0) {
1893 i += this.DB
1894 --j
1895 }
1896 if (is1) { // ret == 1, don't bother squaring or multiplying it
1897 g[w].copyTo(r)
1898 is1 = false
1899 } else {
1900 while (n > 1) {
1901 z.sqrTo(r, r2)
1902 z.sqrTo(r2, r)
1903 n -= 2
1904 }
1905 if (n > 0) z.sqrTo(r, r2)
1906 else {
1907 t = r
1908 r = r2
1909 r2 = t
1910 }
1911 z.mulTo(r2, g[w], r)
1912 }
1913
1914 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1915 z.sqrTo(r, r2)
1916 t = r
1917 r = r2
1918 r2 = t
1919 if (--i < 0) {
1920 i = this.DB - 1
1921 --j
1922 }
1923 }
1924 }
1925 return z.revert(r)
1926 }
1927
1928 // (public) gcd(this,a) (HAC 14.54)
1929 function bnGCD(a) {
1930 var x = (this.s < 0) ? this.negate() : this.clone()
1931 var y = (a.s < 0) ? a.negate() : a.clone()
1932 if (x.compareTo(y) < 0) {
1933 var t = x
1934 x = y
1935 y = t
1936 }
1937 var i = x.getLowestSetBit(),
1938 g = y.getLowestSetBit()
1939 if (g < 0) return x
1940 if (i < g) g = i
1941 if (g > 0) {
1942 x.rShiftTo(g, x)
1943 y.rShiftTo(g, y)
1944 }
1945 while (x.signum() > 0) {
1946 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1947 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1948 if (x.compareTo(y) >= 0) {
1949 x.subTo(y, x)
1950 x.rShiftTo(1, x)
1951 } else {
1952 y.subTo(x, y)
1953 y.rShiftTo(1, y)
1954 }
1955 }
1956 if (g > 0) y.lShiftTo(g, y)
1957 return y
1958 }
1959
1960 // (protected) this % n, n < 2^26
1961 function bnpModInt(n) {
1962 if (n <= 0) return 0
1963 var d = this.DV % n,
1964 r = (this.s < 0) ? n - 1 : 0
1965 if (this.t > 0)
1966 if (d == 0) r = this[0] % n
1967 else
1968 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1969 return r
1970 }
1971
1972 // (public) 1/this % m (HAC 14.61)
1973 function bnModInverse(m) {
1974 var ac = m.isEven()
1975 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1976 var u = m.clone(),
1977 v = this.clone()
1978 var a = nbv(1),
1979 b = nbv(0),
1980 c = nbv(0),
1981 d = nbv(1)
1982 while (u.signum() != 0) {
1983 while (u.isEven()) {
1984 u.rShiftTo(1, u)
1985 if (ac) {
1986 if (!a.isEven() || !b.isEven()) {
1987 a.addTo(this, a)
1988 b.subTo(m, b)
1989 }
1990 a.rShiftTo(1, a)
1991 } else if (!b.isEven()) b.subTo(m, b)
1992 b.rShiftTo(1, b)
1993 }
1994 while (v.isEven()) {
1995 v.rShiftTo(1, v)
1996 if (ac) {
1997 if (!c.isEven() || !d.isEven()) {
1998 c.addTo(this, c)
1999 d.subTo(m, d)
2000 }
2001 c.rShiftTo(1, c)
2002 } else if (!d.isEven()) d.subTo(m, d)
2003 d.rShiftTo(1, d)
2004 }
2005 if (u.compareTo(v) >= 0) {
2006 u.subTo(v, u)
2007 if (ac) a.subTo(c, a)
2008 b.subTo(d, b)
2009 } else {
2010 v.subTo(u, v)
2011 if (ac) c.subTo(a, c)
2012 d.subTo(b, d)
2013 }
2014 }
2015 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2016 if (d.compareTo(m) >= 0) return d.subtract(m)
2017 if (d.signum() < 0) d.addTo(m, d)
2018 else return d
2019 if (d.signum() < 0) return d.add(m)
2020 else return d
2021 }
2022
2023 var lowprimes = [
2024 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2025 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2026 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2027 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2028 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2029 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2030 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2031 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2032 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2033 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2034 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2035 ]
2036
2037 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2038
2039 // (public) test primality with certainty >= 1-.5^t
2040 function bnIsProbablePrime(t) {
2041 var i, x = this.abs()
2042 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2043 for (i = 0; i < lowprimes.length; ++i)
2044 if (x[0] == lowprimes[i]) return true
2045 return false
2046 }
2047 if (x.isEven()) return false
2048 i = 1
2049 while (i < lowprimes.length) {
2050 var m = lowprimes[i],
2051 j = i + 1
2052 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2053 m = x.modInt(m)
2054 while (i < j) if (m % lowprimes[i++] == 0) return false
2055 }
2056 return x.millerRabin(t)
2057 }
2058
2059 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2060 function bnpMillerRabin(t) {
2061 var n1 = this.subtract(BigInteger.ONE)
2062 var k = n1.getLowestSetBit()
2063 if (k <= 0) return false
2064 var r = n1.shiftRight(k)
2065 t = (t + 1) >> 1
2066 if (t > lowprimes.length) t = lowprimes.length
2067 var a = new BigInteger(null)
2068 var j, bases = []
2069 for (var i = 0; i < t; ++i) {
2070 for (;;) {
2071 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2072 if (bases.indexOf(j) == -1) break
2073 }
2074 bases.push(j)
2075 a.fromInt(j)
2076 var y = a.modPow(r, this)
2077 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2078 var j = 1
2079 while (j++ < k && y.compareTo(n1) != 0) {
2080 y = y.modPowInt(2, this)
2081 if (y.compareTo(BigInteger.ONE) == 0) return false
2082 }
2083 if (y.compareTo(n1) != 0) return false
2084 }
2085 }
2086 return true
2087 }
2088
2089 // protected
2090 proto.chunkSize = bnpChunkSize
2091 proto.toRadix = bnpToRadix
2092 proto.fromRadix = bnpFromRadix
2093 proto.fromNumber = bnpFromNumber
2094 proto.bitwiseTo = bnpBitwiseTo
2095 proto.changeBit = bnpChangeBit
2096 proto.addTo = bnpAddTo
2097 proto.dMultiply = bnpDMultiply
2098 proto.dAddOffset = bnpDAddOffset
2099 proto.multiplyLowerTo = bnpMultiplyLowerTo
2100 proto.multiplyUpperTo = bnpMultiplyUpperTo
2101 proto.modInt = bnpModInt
2102 proto.millerRabin = bnpMillerRabin
2103
2104 // public
2105 proto.clone = bnClone
2106 proto.intValue = bnIntValue
2107 proto.byteValue = bnByteValue
2108 proto.shortValue = bnShortValue
2109 proto.signum = bnSigNum
2110 proto.toByteArray = bnToByteArray
2111 proto.equals = bnEquals
2112 proto.min = bnMin
2113 proto.max = bnMax
2114 proto.and = bnAnd
2115 proto.or = bnOr
2116 proto.xor = bnXor
2117 proto.andNot = bnAndNot
2118 proto.not = bnNot
2119 proto.shiftLeft = bnShiftLeft
2120 proto.shiftRight = bnShiftRight
2121 proto.getLowestSetBit = bnGetLowestSetBit
2122 proto.bitCount = bnBitCount
2123 proto.testBit = bnTestBit
2124 proto.setBit = bnSetBit
2125 proto.clearBit = bnClearBit
2126 proto.flipBit = bnFlipBit
2127 proto.add = bnAdd
2128 proto.subtract = bnSubtract
2129 proto.multiply = bnMultiply
2130 proto.divide = bnDivide
2131 proto.remainder = bnRemainder
2132 proto.divideAndRemainder = bnDivideAndRemainder
2133 proto.modPow = bnModPow
2134 proto.modInverse = bnModInverse
2135 proto.pow = bnPow
2136 proto.gcd = bnGCD
2137 proto.isProbablePrime = bnIsProbablePrime
2138
2139 // JSBN-specific extension
2140 proto.square = bnSquare
2141
2142 // constants
2143 BigInteger.ZERO = nbv(0)
2144 BigInteger.ONE = nbv(1)
2145 BigInteger.valueOf = nbv
2146
2147 module.exports = BigInteger
2148
2149 },{"../package.json":4}],2:[function(require,module,exports){
2150 (function (Buffer){
2151 // FIXME: Kind of a weird way to throw exceptions, consider removing
2152 var assert = require('assert')
2153 var BigInteger = require('./bigi')
2154
2155 /**
2156 * Turns a byte array into a big integer.
2157 *
2158 * This function will interpret a byte array as a big integer in big
2159 * endian notation.
2160 */
2161 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2162 // BigInteger expects a DER integer conformant byte array
2163 if (byteArray[0] & 0x80) {
2164 return new BigInteger([0].concat(byteArray))
2165 }
2166
2167 return new BigInteger(byteArray)
2168 }
2169
2170 /**
2171 * Returns a byte array representation of the big integer.
2172 *
2173 * This returns the absolute of the contained value in big endian
2174 * form. A value of zero results in an empty array.
2175 */
2176 BigInteger.prototype.toByteArrayUnsigned = function() {
2177 var byteArray = this.toByteArray()
2178 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2179 }
2180
2181 BigInteger.fromDERInteger = function(byteArray) {
2182 return new BigInteger(byteArray)
2183 }
2184
2185 /*
2186 * Converts BigInteger to a DER integer representation.
2187 *
2188 * The format for this value uses the most significant bit as a sign
2189 * bit. If the most significant bit is already set and the integer is
2190 * positive, a 0x00 is prepended.
2191 *
2192 * Examples:
2193 *
2194 * 0 => 0x00
2195 * 1 => 0x01
2196 * -1 => 0xff
2197 * 127 => 0x7f
2198 * -127 => 0x81
2199 * 128 => 0x0080
2200 * -128 => 0x80
2201 * 255 => 0x00ff
2202 * -255 => 0xff01
2203 * 16300 => 0x3fac
2204 * -16300 => 0xc054
2205 * 62300 => 0x00f35c
2206 * -62300 => 0xff0ca4
2207 */
2208 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2209
2210 BigInteger.fromBuffer = function(buffer) {
2211 // BigInteger expects a DER integer conformant byte array
2212 if (buffer[0] & 0x80) {
2213 var byteArray = Array.prototype.slice.call(buffer)
2214
2215 return new BigInteger([0].concat(byteArray))
2216 }
2217
2218 return new BigInteger(buffer)
2219 }
2220
2221 BigInteger.fromHex = function(hex) {
2222 if (hex === '') return BigInteger.ZERO
2223
2224 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2225 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2226 return new BigInteger(hex, 16)
2227 }
2228
2229 BigInteger.prototype.toBuffer = function(size) {
2230 var byteArray = this.toByteArrayUnsigned()
2231 var zeros = []
2232
2233 var padding = size - byteArray.length
2234 while (zeros.length < padding) zeros.push(0)
2235
2236 return new Buffer(zeros.concat(byteArray))
2237 }
2238
2239 BigInteger.prototype.toHex = function(size) {
2240 return this.toBuffer(size).toString('hex')
2241 }
2242
2243 }).call(this,require("buffer").Buffer)
2244 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2245 var BigInteger = require('./bigi')
2246
2247 //addons
2248 require('./convert')
2249
2250 module.exports = BigInteger
2251 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2252 module.exports={
2253 "name": "bigi",
2254 "version": "1.4.0",
2255 "description": "Big integers.",
2256 "keywords": [
2257 "cryptography",
2258 "math",
2259 "bitcoin",
2260 "arbitrary",
2261 "precision",
2262 "arithmetic",
2263 "big",
2264 "integer",
2265 "int",
2266 "number",
2267 "biginteger",
2268 "bigint",
2269 "bignumber",
2270 "decimal",
2271 "float"
2272 ],
2273 "devDependencies": {
2274 "mocha": "^1.20.1",
2275 "jshint": "^2.5.1",
2276 "coveralls": "^2.10.0",
2277 "istanbul": "^0.2.11"
2278 },
2279 "repository": {
2280 "url": "https://github.com/cryptocoinjs/bigi",
2281 "type": "git"
2282 },
2283 "main": "./lib/index.js",
2284 "scripts": {
2285 "test": "_mocha -- test/*.js",
2286 "jshint": "jshint --config jshint.json lib/*.js ; true",
2287 "unit": "mocha",
2288 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2289 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2290 },
2291 "dependencies": {},
2292 "testling": {
2293 "files": "test/*.js",
2294 "harness": "mocha",
2295 "browsers": [
2296 "ie/9..latest",
2297 "firefox/latest",
2298 "chrome/latest",
2299 "safari/6.0..latest",
2300 "iphone/6.0..latest",
2301 "android-browser/4.2..latest"
2302 ]
2303 },
2304 "bugs": {
2305 "url": "https://github.com/cryptocoinjs/bigi/issues"
2306 },
2307 "homepage": "https://github.com/cryptocoinjs/bigi",
2308 "_id": "bigi@1.4.0",
2309 "dist": {
2310 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2311 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2312 },
2313 "_from": "bigi@^1.4.0",
2314 "_npmVersion": "1.4.3",
2315 "_npmUser": {
2316 "name": "jp",
2317 "email": "jprichardson@gmail.com"
2318 },
2319 "maintainers": [
2320 {
2321 "name": "jp",
2322 "email": "jprichardson@gmail.com"
2323 },
2324 {
2325 "name": "midnightlightning",
2326 "email": "boydb@midnightdesign.ws"
2327 },
2328 {
2329 "name": "sidazhang",
2330 "email": "sidazhang89@gmail.com"
2331 },
2332 {
2333 "name": "nadav",
2334 "email": "npm@shesek.info"
2335 }
2336 ],
2337 "directories": {},
2338 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2339 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2340 }
2341
2342 },{}],5:[function(require,module,exports){
2343 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2344 //
2345 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2346 //
2347 // Originally from narwhal.js (http://narwhaljs.org)
2348 // Copyright (c) 2009 Thomas Robinson <280north.com>
2349 //
2350 // Permission is hereby granted, free of charge, to any person obtaining a copy
2351 // of this software and associated documentation files (the 'Software'), to
2352 // deal in the Software without restriction, including without limitation the
2353 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2354 // sell copies of the Software, and to permit persons to whom the Software is
2355 // furnished to do so, subject to the following conditions:
2356 //
2357 // The above copyright notice and this permission notice shall be included in
2358 // all copies or substantial portions of the Software.
2359 //
2360 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2361 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2362 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2363 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2364 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2365 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2366
2367 // when used in node, this will actually load the util module we depend on
2368 // versus loading the builtin util module as happens otherwise
2369 // this is a bug in node module loading as far as I am concerned
2370 var util = require('util/');
2371
2372 var pSlice = Array.prototype.slice;
2373 var hasOwn = Object.prototype.hasOwnProperty;
2374
2375 // 1. The assert module provides functions that throw
2376 // AssertionError's when particular conditions are not met. The
2377 // assert module must conform to the following interface.
2378
2379 var assert = module.exports = ok;
2380
2381 // 2. The AssertionError is defined in assert.
2382 // new assert.AssertionError({ message: message,
2383 // actual: actual,
2384 // expected: expected })
2385
2386 assert.AssertionError = function AssertionError(options) {
2387 this.name = 'AssertionError';
2388 this.actual = options.actual;
2389 this.expected = options.expected;
2390 this.operator = options.operator;
2391 if (options.message) {
2392 this.message = options.message;
2393 this.generatedMessage = false;
2394 } else {
2395 this.message = getMessage(this);
2396 this.generatedMessage = true;
2397 }
2398 var stackStartFunction = options.stackStartFunction || fail;
2399
2400 if (Error.captureStackTrace) {
2401 Error.captureStackTrace(this, stackStartFunction);
2402 }
2403 else {
2404 // non v8 browsers so we can have a stacktrace
2405 var err = new Error();
2406 if (err.stack) {
2407 var out = err.stack;
2408
2409 // try to strip useless frames
2410 var fn_name = stackStartFunction.name;
2411 var idx = out.indexOf('\n' + fn_name);
2412 if (idx >= 0) {
2413 // once we have located the function frame
2414 // we need to strip out everything before it (and its line)
2415 var next_line = out.indexOf('\n', idx + 1);
2416 out = out.substring(next_line + 1);
2417 }
2418
2419 this.stack = out;
2420 }
2421 }
2422 };
2423
2424 // assert.AssertionError instanceof Error
2425 util.inherits(assert.AssertionError, Error);
2426
2427 function replacer(key, value) {
2428 if (util.isUndefined(value)) {
2429 return '' + value;
2430 }
2431 if (util.isNumber(value) && !isFinite(value)) {
2432 return value.toString();
2433 }
2434 if (util.isFunction(value) || util.isRegExp(value)) {
2435 return value.toString();
2436 }
2437 return value;
2438 }
2439
2440 function truncate(s, n) {
2441 if (util.isString(s)) {
2442 return s.length < n ? s : s.slice(0, n);
2443 } else {
2444 return s;
2445 }
2446 }
2447
2448 function getMessage(self) {
2449 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2450 self.operator + ' ' +
2451 truncate(JSON.stringify(self.expected, replacer), 128);
2452 }
2453
2454 // At present only the three keys mentioned above are used and
2455 // understood by the spec. Implementations or sub modules can pass
2456 // other keys to the AssertionError's constructor - they will be
2457 // ignored.
2458
2459 // 3. All of the following functions must throw an AssertionError
2460 // when a corresponding condition is not met, with a message that
2461 // may be undefined if not provided. All assertion methods provide
2462 // both the actual and expected values to the assertion error for
2463 // display purposes.
2464
2465 function fail(actual, expected, message, operator, stackStartFunction) {
2466 throw new assert.AssertionError({
2467 message: message,
2468 actual: actual,
2469 expected: expected,
2470 operator: operator,
2471 stackStartFunction: stackStartFunction
2472 });
2473 }
2474
2475 // EXTENSION! allows for well behaved errors defined elsewhere.
2476 assert.fail = fail;
2477
2478 // 4. Pure assertion tests whether a value is truthy, as determined
2479 // by !!guard.
2480 // assert.ok(guard, message_opt);
2481 // This statement is equivalent to assert.equal(true, !!guard,
2482 // message_opt);. To test strictly for the value true, use
2483 // assert.strictEqual(true, guard, message_opt);.
2484
2485 function ok(value, message) {
2486 if (!value) fail(value, true, message, '==', assert.ok);
2487 }
2488 assert.ok = ok;
2489
2490 // 5. The equality assertion tests shallow, coercive equality with
2491 // ==.
2492 // assert.equal(actual, expected, message_opt);
2493
2494 assert.equal = function equal(actual, expected, message) {
2495 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2496 };
2497
2498 // 6. The non-equality assertion tests for whether two objects are not equal
2499 // with != assert.notEqual(actual, expected, message_opt);
2500
2501 assert.notEqual = function notEqual(actual, expected, message) {
2502 if (actual == expected) {
2503 fail(actual, expected, message, '!=', assert.notEqual);
2504 }
2505 };
2506
2507 // 7. The equivalence assertion tests a deep equality relation.
2508 // assert.deepEqual(actual, expected, message_opt);
2509
2510 assert.deepEqual = function deepEqual(actual, expected, message) {
2511 if (!_deepEqual(actual, expected)) {
2512 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2513 }
2514 };
2515
2516 function _deepEqual(actual, expected) {
2517 // 7.1. All identical values are equivalent, as determined by ===.
2518 if (actual === expected) {
2519 return true;
2520
2521 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2522 if (actual.length != expected.length) return false;
2523
2524 for (var i = 0; i < actual.length; i++) {
2525 if (actual[i] !== expected[i]) return false;
2526 }
2527
2528 return true;
2529
2530 // 7.2. If the expected value is a Date object, the actual value is
2531 // equivalent if it is also a Date object that refers to the same time.
2532 } else if (util.isDate(actual) && util.isDate(expected)) {
2533 return actual.getTime() === expected.getTime();
2534
2535 // 7.3 If the expected value is a RegExp object, the actual value is
2536 // equivalent if it is also a RegExp object with the same source and
2537 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2538 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2539 return actual.source === expected.source &&
2540 actual.global === expected.global &&
2541 actual.multiline === expected.multiline &&
2542 actual.lastIndex === expected.lastIndex &&
2543 actual.ignoreCase === expected.ignoreCase;
2544
2545 // 7.4. Other pairs that do not both pass typeof value == 'object',
2546 // equivalence is determined by ==.
2547 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2548 return actual == expected;
2549
2550 // 7.5 For all other Object pairs, including Array objects, equivalence is
2551 // determined by having the same number of owned properties (as verified
2552 // with Object.prototype.hasOwnProperty.call), the same set of keys
2553 // (although not necessarily the same order), equivalent values for every
2554 // corresponding key, and an identical 'prototype' property. Note: this
2555 // accounts for both named and indexed properties on Arrays.
2556 } else {
2557 return objEquiv(actual, expected);
2558 }
2559 }
2560
2561 function isArguments(object) {
2562 return Object.prototype.toString.call(object) == '[object Arguments]';
2563 }
2564
2565 function objEquiv(a, b) {
2566 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2567 return false;
2568 // an identical 'prototype' property.
2569 if (a.prototype !== b.prototype) return false;
2570 // if one is a primitive, the other must be same
2571 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2572 return a === b;
2573 }
2574 var aIsArgs = isArguments(a),
2575 bIsArgs = isArguments(b);
2576 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2577 return false;
2578 if (aIsArgs) {
2579 a = pSlice.call(a);
2580 b = pSlice.call(b);
2581 return _deepEqual(a, b);
2582 }
2583 var ka = objectKeys(a),
2584 kb = objectKeys(b),
2585 key, i;
2586 // having the same number of owned properties (keys incorporates
2587 // hasOwnProperty)
2588 if (ka.length != kb.length)
2589 return false;
2590 //the same set of keys (although not necessarily the same order),
2591 ka.sort();
2592 kb.sort();
2593 //~~~cheap key test
2594 for (i = ka.length - 1; i >= 0; i--) {
2595 if (ka[i] != kb[i])
2596 return false;
2597 }
2598 //equivalent values for every corresponding key, and
2599 //~~~possibly expensive deep test
2600 for (i = ka.length - 1; i >= 0; i--) {
2601 key = ka[i];
2602 if (!_deepEqual(a[key], b[key])) return false;
2603 }
2604 return true;
2605 }
2606
2607 // 8. The non-equivalence assertion tests for any deep inequality.
2608 // assert.notDeepEqual(actual, expected, message_opt);
2609
2610 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2611 if (_deepEqual(actual, expected)) {
2612 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2613 }
2614 };
2615
2616 // 9. The strict equality assertion tests strict equality, as determined by ===.
2617 // assert.strictEqual(actual, expected, message_opt);
2618
2619 assert.strictEqual = function strictEqual(actual, expected, message) {
2620 if (actual !== expected) {
2621 fail(actual, expected, message, '===', assert.strictEqual);
2622 }
2623 };
2624
2625 // 10. The strict non-equality assertion tests for strict inequality, as
2626 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2627
2628 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2629 if (actual === expected) {
2630 fail(actual, expected, message, '!==', assert.notStrictEqual);
2631 }
2632 };
2633
2634 function expectedException(actual, expected) {
2635 if (!actual || !expected) {
2636 return false;
2637 }
2638
2639 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2640 return expected.test(actual);
2641 } else if (actual instanceof expected) {
2642 return true;
2643 } else if (expected.call({}, actual) === true) {
2644 return true;
2645 }
2646
2647 return false;
2648 }
2649
2650 function _throws(shouldThrow, block, expected, message) {
2651 var actual;
2652
2653 if (util.isString(expected)) {
2654 message = expected;
2655 expected = null;
2656 }
2657
2658 try {
2659 block();
2660 } catch (e) {
2661 actual = e;
2662 }
2663
2664 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2665 (message ? ' ' + message : '.');
2666
2667 if (shouldThrow && !actual) {
2668 fail(actual, expected, 'Missing expected exception' + message);
2669 }
2670
2671 if (!shouldThrow && expectedException(actual, expected)) {
2672 fail(actual, expected, 'Got unwanted exception' + message);
2673 }
2674
2675 if ((shouldThrow && actual && expected &&
2676 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2677 throw actual;
2678 }
2679 }
2680
2681 // 11. Expected to throw an error:
2682 // assert.throws(block, Error_opt, message_opt);
2683
2684 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2685 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2686 };
2687
2688 // EXTENSION! This is annoying to write outside this module.
2689 assert.doesNotThrow = function(block, /*optional*/message) {
2690 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2691 };
2692
2693 assert.ifError = function(err) { if (err) {throw err;}};
2694
2695 var objectKeys = Object.keys || function (obj) {
2696 var keys = [];
2697 for (var key in obj) {
2698 if (hasOwn.call(obj, key)) keys.push(key);
2699 }
2700 return keys;
2701 };
2702
2703 },{"util/":29}],6:[function(require,module,exports){
2704
2705 },{}],7:[function(require,module,exports){
2706 /*!
2707 * The buffer module from node.js, for the browser.
2708 *
2709 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2710 * @license MIT
2711 */
2712
2713 var base64 = require('base64-js')
2714 var ieee754 = require('ieee754')
2715 var isArray = require('is-array')
2716
2717 exports.Buffer = Buffer
2718 exports.SlowBuffer = SlowBuffer
2719 exports.INSPECT_MAX_BYTES = 50
2720 Buffer.poolSize = 8192 // not used by this implementation
2721
2722 var rootParent = {}
2723
2724 /**
2725 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2726 * === true Use Uint8Array implementation (fastest)
2727 * === false Use Object implementation (most compatible, even IE6)
2728 *
2729 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2730 * Opera 11.6+, iOS 4.2+.
2731 *
2732 * Due to various browser bugs, sometimes the Object implementation will be used even
2733 * when the browser supports typed arrays.
2734 *
2735 * Note:
2736 *
2737 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2738 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2739 *
2740 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2741 * on objects.
2742 *
2743 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2744 *
2745 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2746 * incorrect length in some situations.
2747
2748 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2749 * get the Object implementation, which is slower but behaves correctly.
2750 */
2751 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2752 function Bar () {}
2753 try {
2754 var arr = new Uint8Array(1)
2755 arr.foo = function () { return 42 }
2756 arr.constructor = Bar
2757 return arr.foo() === 42 && // typed array instances can be augmented
2758 arr.constructor === Bar && // constructor can be set
2759 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2760 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2761 } catch (e) {
2762 return false
2763 }
2764 })()
2765
2766 function kMaxLength () {
2767 return Buffer.TYPED_ARRAY_SUPPORT
2768 ? 0x7fffffff
2769 : 0x3fffffff
2770 }
2771
2772 /**
2773 * Class: Buffer
2774 * =============
2775 *
2776 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2777 * with function properties for all the node `Buffer` API functions. We use
2778 * `Uint8Array` so that square bracket notation works as expected -- it returns
2779 * a single octet.
2780 *
2781 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2782 * prototype.
2783 */
2784 function Buffer (arg) {
2785 if (!(this instanceof Buffer)) {
2786 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2787 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2788 return new Buffer(arg)
2789 }
2790
2791 this.length = 0
2792 this.parent = undefined
2793
2794 // Common case.
2795 if (typeof arg === 'number') {
2796 return fromNumber(this, arg)
2797 }
2798
2799 // Slightly less common case.
2800 if (typeof arg === 'string') {
2801 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2802 }
2803
2804 // Unusual.
2805 return fromObject(this, arg)
2806 }
2807
2808 function fromNumber (that, length) {
2809 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2810 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2811 for (var i = 0; i < length; i++) {
2812 that[i] = 0
2813 }
2814 }
2815 return that
2816 }
2817
2818 function fromString (that, string, encoding) {
2819 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2820
2821 // Assumption: byteLength() return value is always < kMaxLength.
2822 var length = byteLength(string, encoding) | 0
2823 that = allocate(that, length)
2824
2825 that.write(string, encoding)
2826 return that
2827 }
2828
2829 function fromObject (that, object) {
2830 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2831
2832 if (isArray(object)) return fromArray(that, object)
2833
2834 if (object == null) {
2835 throw new TypeError('must start with number, buffer, array or string')
2836 }
2837
2838 if (typeof ArrayBuffer !== 'undefined') {
2839 if (object.buffer instanceof ArrayBuffer) {
2840 return fromTypedArray(that, object)
2841 }
2842 if (object instanceof ArrayBuffer) {
2843 return fromArrayBuffer(that, object)
2844 }
2845 }
2846
2847 if (object.length) return fromArrayLike(that, object)
2848
2849 return fromJsonObject(that, object)
2850 }
2851
2852 function fromBuffer (that, buffer) {
2853 var length = checked(buffer.length) | 0
2854 that = allocate(that, length)
2855 buffer.copy(that, 0, 0, length)
2856 return that
2857 }
2858
2859 function fromArray (that, array) {
2860 var length = checked(array.length) | 0
2861 that = allocate(that, length)
2862 for (var i = 0; i < length; i += 1) {
2863 that[i] = array[i] & 255
2864 }
2865 return that
2866 }
2867
2868 // Duplicate of fromArray() to keep fromArray() monomorphic.
2869 function fromTypedArray (that, array) {
2870 var length = checked(array.length) | 0
2871 that = allocate(that, length)
2872 // Truncating the elements is probably not what people expect from typed
2873 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2874 // of the old Buffer constructor.
2875 for (var i = 0; i < length; i += 1) {
2876 that[i] = array[i] & 255
2877 }
2878 return that
2879 }
2880
2881 function fromArrayBuffer (that, array) {
2882 if (Buffer.TYPED_ARRAY_SUPPORT) {
2883 // Return an augmented `Uint8Array` instance, for best performance
2884 array.byteLength
2885 that = Buffer._augment(new Uint8Array(array))
2886 } else {
2887 // Fallback: Return an object instance of the Buffer class
2888 that = fromTypedArray(that, new Uint8Array(array))
2889 }
2890 return that
2891 }
2892
2893 function fromArrayLike (that, array) {
2894 var length = checked(array.length) | 0
2895 that = allocate(that, length)
2896 for (var i = 0; i < length; i += 1) {
2897 that[i] = array[i] & 255
2898 }
2899 return that
2900 }
2901
2902 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2903 // Returns a zero-length buffer for inputs that don't conform to the spec.
2904 function fromJsonObject (that, object) {
2905 var array
2906 var length = 0
2907
2908 if (object.type === 'Buffer' && isArray(object.data)) {
2909 array = object.data
2910 length = checked(array.length) | 0
2911 }
2912 that = allocate(that, length)
2913
2914 for (var i = 0; i < length; i += 1) {
2915 that[i] = array[i] & 255
2916 }
2917 return that
2918 }
2919
2920 function allocate (that, length) {
2921 if (Buffer.TYPED_ARRAY_SUPPORT) {
2922 // Return an augmented `Uint8Array` instance, for best performance
2923 that = Buffer._augment(new Uint8Array(length))
2924 } else {
2925 // Fallback: Return an object instance of the Buffer class
2926 that.length = length
2927 that._isBuffer = true
2928 }
2929
2930 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2931 if (fromPool) that.parent = rootParent
2932
2933 return that
2934 }
2935
2936 function checked (length) {
2937 // Note: cannot use `length < kMaxLength` here because that fails when
2938 // length is NaN (which is otherwise coerced to zero.)
2939 if (length >= kMaxLength()) {
2940 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2941 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2942 }
2943 return length | 0
2944 }
2945
2946 function SlowBuffer (subject, encoding) {
2947 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2948
2949 var buf = new Buffer(subject, encoding)
2950 delete buf.parent
2951 return buf
2952 }
2953
2954 Buffer.isBuffer = function isBuffer (b) {
2955 return !!(b != null && b._isBuffer)
2956 }
2957
2958 Buffer.compare = function compare (a, b) {
2959 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2960 throw new TypeError('Arguments must be Buffers')
2961 }
2962
2963 if (a === b) return 0
2964
2965 var x = a.length
2966 var y = b.length
2967
2968 var i = 0
2969 var len = Math.min(x, y)
2970 while (i < len) {
2971 if (a[i] !== b[i]) break
2972
2973 ++i
2974 }
2975
2976 if (i !== len) {
2977 x = a[i]
2978 y = b[i]
2979 }
2980
2981 if (x < y) return -1
2982 if (y < x) return 1
2983 return 0
2984 }
2985
2986 Buffer.isEncoding = function isEncoding (encoding) {
2987 switch (String(encoding).toLowerCase()) {
2988 case 'hex':
2989 case 'utf8':
2990 case 'utf-8':
2991 case 'ascii':
2992 case 'binary':
2993 case 'base64':
2994 case 'raw':
2995 case 'ucs2':
2996 case 'ucs-2':
2997 case 'utf16le':
2998 case 'utf-16le':
2999 return true
3000 default:
3001 return false
3002 }
3003 }
3004
3005 Buffer.concat = function concat (list, length) {
3006 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3007
3008 if (list.length === 0) {
3009 return new Buffer(0)
3010 }
3011
3012 var i
3013 if (length === undefined) {
3014 length = 0
3015 for (i = 0; i < list.length; i++) {
3016 length += list[i].length
3017 }
3018 }
3019
3020 var buf = new Buffer(length)
3021 var pos = 0
3022 for (i = 0; i < list.length; i++) {
3023 var item = list[i]
3024 item.copy(buf, pos)
3025 pos += item.length
3026 }
3027 return buf
3028 }
3029
3030 function byteLength (string, encoding) {
3031 if (typeof string !== 'string') string = '' + string
3032
3033 var len = string.length
3034 if (len === 0) return 0
3035
3036 // Use a for loop to avoid recursion
3037 var loweredCase = false
3038 for (;;) {
3039 switch (encoding) {
3040 case 'ascii':
3041 case 'binary':
3042 // Deprecated
3043 case 'raw':
3044 case 'raws':
3045 return len
3046 case 'utf8':
3047 case 'utf-8':
3048 return utf8ToBytes(string).length
3049 case 'ucs2':
3050 case 'ucs-2':
3051 case 'utf16le':
3052 case 'utf-16le':
3053 return len * 2
3054 case 'hex':
3055 return len >>> 1
3056 case 'base64':
3057 return base64ToBytes(string).length
3058 default:
3059 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3060 encoding = ('' + encoding).toLowerCase()
3061 loweredCase = true
3062 }
3063 }
3064 }
3065 Buffer.byteLength = byteLength
3066
3067 // pre-set for values that may exist in the future
3068 Buffer.prototype.length = undefined
3069 Buffer.prototype.parent = undefined
3070
3071 function slowToString (encoding, start, end) {
3072 var loweredCase = false
3073
3074 start = start | 0
3075 end = end === undefined || end === Infinity ? this.length : end | 0
3076
3077 if (!encoding) encoding = 'utf8'
3078 if (start < 0) start = 0
3079 if (end > this.length) end = this.length
3080 if (end <= start) return ''
3081
3082 while (true) {
3083 switch (encoding) {
3084 case 'hex':
3085 return hexSlice(this, start, end)
3086
3087 case 'utf8':
3088 case 'utf-8':
3089 return utf8Slice(this, start, end)
3090
3091 case 'ascii':
3092 return asciiSlice(this, start, end)
3093
3094 case 'binary':
3095 return binarySlice(this, start, end)
3096
3097 case 'base64':
3098 return base64Slice(this, start, end)
3099
3100 case 'ucs2':
3101 case 'ucs-2':
3102 case 'utf16le':
3103 case 'utf-16le':
3104 return utf16leSlice(this, start, end)
3105
3106 default:
3107 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3108 encoding = (encoding + '').toLowerCase()
3109 loweredCase = true
3110 }
3111 }
3112 }
3113
3114 Buffer.prototype.toString = function toString () {
3115 var length = this.length | 0
3116 if (length === 0) return ''
3117 if (arguments.length === 0) return utf8Slice(this, 0, length)
3118 return slowToString.apply(this, arguments)
3119 }
3120
3121 Buffer.prototype.equals = function equals (b) {
3122 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3123 if (this === b) return true
3124 return Buffer.compare(this, b) === 0
3125 }
3126
3127 Buffer.prototype.inspect = function inspect () {
3128 var str = ''
3129 var max = exports.INSPECT_MAX_BYTES
3130 if (this.length > 0) {
3131 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3132 if (this.length > max) str += ' ... '
3133 }
3134 return '<Buffer ' + str + '>'
3135 }
3136
3137 Buffer.prototype.compare = function compare (b) {
3138 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3139 if (this === b) return 0
3140 return Buffer.compare(this, b)
3141 }
3142
3143 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3144 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3145 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3146 byteOffset >>= 0
3147
3148 if (this.length === 0) return -1
3149 if (byteOffset >= this.length) return -1
3150
3151 // Negative offsets start from the end of the buffer
3152 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3153
3154 if (typeof val === 'string') {
3155 if (val.length === 0) return -1 // special case: looking for empty string always fails
3156 return String.prototype.indexOf.call(this, val, byteOffset)
3157 }
3158 if (Buffer.isBuffer(val)) {
3159 return arrayIndexOf(this, val, byteOffset)
3160 }
3161 if (typeof val === 'number') {
3162 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3163 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3164 }
3165 return arrayIndexOf(this, [ val ], byteOffset)
3166 }
3167
3168 function arrayIndexOf (arr, val, byteOffset) {
3169 var foundIndex = -1
3170 for (var i = 0; byteOffset + i < arr.length; i++) {
3171 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3172 if (foundIndex === -1) foundIndex = i
3173 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3174 } else {
3175 foundIndex = -1
3176 }
3177 }
3178 return -1
3179 }
3180
3181 throw new TypeError('val must be string, number or Buffer')
3182 }
3183
3184 // `get` is deprecated
3185 Buffer.prototype.get = function get (offset) {
3186 console.log('.get() is deprecated. Access using array indexes instead.')
3187 return this.readUInt8(offset)
3188 }
3189
3190 // `set` is deprecated
3191 Buffer.prototype.set = function set (v, offset) {
3192 console.log('.set() is deprecated. Access using array indexes instead.')
3193 return this.writeUInt8(v, offset)
3194 }
3195
3196 function hexWrite (buf, string, offset, length) {
3197 offset = Number(offset) || 0
3198 var remaining = buf.length - offset
3199 if (!length) {
3200 length = remaining
3201 } else {
3202 length = Number(length)
3203 if (length > remaining) {
3204 length = remaining
3205 }
3206 }
3207
3208 // must be an even number of digits
3209 var strLen = string.length
3210 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3211
3212 if (length > strLen / 2) {
3213 length = strLen / 2
3214 }
3215 for (var i = 0; i < length; i++) {
3216 var parsed = parseInt(string.substr(i * 2, 2), 16)
3217 if (isNaN(parsed)) throw new Error('Invalid hex string')
3218 buf[offset + i] = parsed
3219 }
3220 return i
3221 }
3222
3223 function utf8Write (buf, string, offset, length) {
3224 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3225 }
3226
3227 function asciiWrite (buf, string, offset, length) {
3228 return blitBuffer(asciiToBytes(string), buf, offset, length)
3229 }
3230
3231 function binaryWrite (buf, string, offset, length) {
3232 return asciiWrite(buf, string, offset, length)
3233 }
3234
3235 function base64Write (buf, string, offset, length) {
3236 return blitBuffer(base64ToBytes(string), buf, offset, length)
3237 }
3238
3239 function ucs2Write (buf, string, offset, length) {
3240 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3241 }
3242
3243 Buffer.prototype.write = function write (string, offset, length, encoding) {
3244 // Buffer#write(string)
3245 if (offset === undefined) {
3246 encoding = 'utf8'
3247 length = this.length
3248 offset = 0
3249 // Buffer#write(string, encoding)
3250 } else if (length === undefined && typeof offset === 'string') {
3251 encoding = offset
3252 length = this.length
3253 offset = 0
3254 // Buffer#write(string, offset[, length][, encoding])
3255 } else if (isFinite(offset)) {
3256 offset = offset | 0
3257 if (isFinite(length)) {
3258 length = length | 0
3259 if (encoding === undefined) encoding = 'utf8'
3260 } else {
3261 encoding = length
3262 length = undefined
3263 }
3264 // legacy write(string, encoding, offset, length) - remove in v0.13
3265 } else {
3266 var swap = encoding
3267 encoding = offset
3268 offset = length | 0
3269 length = swap
3270 }
3271
3272 var remaining = this.length - offset
3273 if (length === undefined || length > remaining) length = remaining
3274
3275 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3276 throw new RangeError('attempt to write outside buffer bounds')
3277 }
3278
3279 if (!encoding) encoding = 'utf8'
3280
3281 var loweredCase = false
3282 for (;;) {
3283 switch (encoding) {
3284 case 'hex':
3285 return hexWrite(this, string, offset, length)
3286
3287 case 'utf8':
3288 case 'utf-8':
3289 return utf8Write(this, string, offset, length)
3290
3291 case 'ascii':
3292 return asciiWrite(this, string, offset, length)
3293
3294 case 'binary':
3295 return binaryWrite(this, string, offset, length)
3296
3297 case 'base64':
3298 // Warning: maxLength not taken into account in base64Write
3299 return base64Write(this, string, offset, length)
3300
3301 case 'ucs2':
3302 case 'ucs-2':
3303 case 'utf16le':
3304 case 'utf-16le':
3305 return ucs2Write(this, string, offset, length)
3306
3307 default:
3308 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3309 encoding = ('' + encoding).toLowerCase()
3310 loweredCase = true
3311 }
3312 }
3313 }
3314
3315 Buffer.prototype.toJSON = function toJSON () {
3316 return {
3317 type: 'Buffer',
3318 data: Array.prototype.slice.call(this._arr || this, 0)
3319 }
3320 }
3321
3322 function base64Slice (buf, start, end) {
3323 if (start === 0 && end === buf.length) {
3324 return base64.fromByteArray(buf)
3325 } else {
3326 return base64.fromByteArray(buf.slice(start, end))
3327 }
3328 }
3329
3330 function utf8Slice (buf, start, end) {
3331 end = Math.min(buf.length, end)
3332 var firstByte
3333 var secondByte
3334 var thirdByte
3335 var fourthByte
3336 var bytesPerSequence
3337 var tempCodePoint
3338 var codePoint
3339 var res = []
3340 var i = start
3341
3342 for (; i < end; i += bytesPerSequence) {
3343 firstByte = buf[i]
3344 codePoint = 0xFFFD
3345
3346 if (firstByte > 0xEF) {
3347 bytesPerSequence = 4
3348 } else if (firstByte > 0xDF) {
3349 bytesPerSequence = 3
3350 } else if (firstByte > 0xBF) {
3351 bytesPerSequence = 2
3352 } else {
3353 bytesPerSequence = 1
3354 }
3355
3356 if (i + bytesPerSequence <= end) {
3357 switch (bytesPerSequence) {
3358 case 1:
3359 if (firstByte < 0x80) {
3360 codePoint = firstByte
3361 }
3362 break
3363 case 2:
3364 secondByte = buf[i + 1]
3365 if ((secondByte & 0xC0) === 0x80) {
3366 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3367 if (tempCodePoint > 0x7F) {
3368 codePoint = tempCodePoint
3369 }
3370 }
3371 break
3372 case 3:
3373 secondByte = buf[i + 1]
3374 thirdByte = buf[i + 2]
3375 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3376 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3377 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3378 codePoint = tempCodePoint
3379 }
3380 }
3381 break
3382 case 4:
3383 secondByte = buf[i + 1]
3384 thirdByte = buf[i + 2]
3385 fourthByte = buf[i + 3]
3386 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3387 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3388 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3389 codePoint = tempCodePoint
3390 }
3391 }
3392 }
3393 }
3394
3395 if (codePoint === 0xFFFD) {
3396 // we generated an invalid codePoint so make sure to only advance by 1 byte
3397 bytesPerSequence = 1
3398 } else if (codePoint > 0xFFFF) {
3399 // encode to utf16 (surrogate pair dance)
3400 codePoint -= 0x10000
3401 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3402 codePoint = 0xDC00 | codePoint & 0x3FF
3403 }
3404
3405 res.push(codePoint)
3406 }
3407
3408 return String.fromCharCode.apply(String, res)
3409 }
3410
3411 function asciiSlice (buf, start, end) {
3412 var ret = ''
3413 end = Math.min(buf.length, end)
3414
3415 for (var i = start; i < end; i++) {
3416 ret += String.fromCharCode(buf[i] & 0x7F)
3417 }
3418 return ret
3419 }
3420
3421 function binarySlice (buf, start, end) {
3422 var ret = ''
3423 end = Math.min(buf.length, end)
3424
3425 for (var i = start; i < end; i++) {
3426 ret += String.fromCharCode(buf[i])
3427 }
3428 return ret
3429 }
3430
3431 function hexSlice (buf, start, end) {
3432 var len = buf.length
3433
3434 if (!start || start < 0) start = 0
3435 if (!end || end < 0 || end > len) end = len
3436
3437 var out = ''
3438 for (var i = start; i < end; i++) {
3439 out += toHex(buf[i])
3440 }
3441 return out
3442 }
3443
3444 function utf16leSlice (buf, start, end) {
3445 var bytes = buf.slice(start, end)
3446 var res = ''
3447 for (var i = 0; i < bytes.length; i += 2) {
3448 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3449 }
3450 return res
3451 }
3452
3453 Buffer.prototype.slice = function slice (start, end) {
3454 var len = this.length
3455 start = ~~start
3456 end = end === undefined ? len : ~~end
3457
3458 if (start < 0) {
3459 start += len
3460 if (start < 0) start = 0
3461 } else if (start > len) {
3462 start = len
3463 }
3464
3465 if (end < 0) {
3466 end += len
3467 if (end < 0) end = 0
3468 } else if (end > len) {
3469 end = len
3470 }
3471
3472 if (end < start) end = start
3473
3474 var newBuf
3475 if (Buffer.TYPED_ARRAY_SUPPORT) {
3476 newBuf = Buffer._augment(this.subarray(start, end))
3477 } else {
3478 var sliceLen = end - start
3479 newBuf = new Buffer(sliceLen, undefined)
3480 for (var i = 0; i < sliceLen; i++) {
3481 newBuf[i] = this[i + start]
3482 }
3483 }
3484
3485 if (newBuf.length) newBuf.parent = this.parent || this
3486
3487 return newBuf
3488 }
3489
3490 /*
3491 * Need to make sure that buffer isn't trying to write out of bounds.
3492 */
3493 function checkOffset (offset, ext, length) {
3494 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3495 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3496 }
3497
3498 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3499 offset = offset | 0
3500 byteLength = byteLength | 0
3501 if (!noAssert) checkOffset(offset, byteLength, this.length)
3502
3503 var val = this[offset]
3504 var mul = 1
3505 var i = 0
3506 while (++i < byteLength && (mul *= 0x100)) {
3507 val += this[offset + i] * mul
3508 }
3509
3510 return val
3511 }
3512
3513 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3514 offset = offset | 0
3515 byteLength = byteLength | 0
3516 if (!noAssert) {
3517 checkOffset(offset, byteLength, this.length)
3518 }
3519
3520 var val = this[offset + --byteLength]
3521 var mul = 1
3522 while (byteLength > 0 && (mul *= 0x100)) {
3523 val += this[offset + --byteLength] * mul
3524 }
3525
3526 return val
3527 }
3528
3529 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3530 if (!noAssert) checkOffset(offset, 1, this.length)
3531 return this[offset]
3532 }
3533
3534 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3535 if (!noAssert) checkOffset(offset, 2, this.length)
3536 return this[offset] | (this[offset + 1] << 8)
3537 }
3538
3539 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3540 if (!noAssert) checkOffset(offset, 2, this.length)
3541 return (this[offset] << 8) | this[offset + 1]
3542 }
3543
3544 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3545 if (!noAssert) checkOffset(offset, 4, this.length)
3546
3547 return ((this[offset]) |
3548 (this[offset + 1] << 8) |
3549 (this[offset + 2] << 16)) +
3550 (this[offset + 3] * 0x1000000)
3551 }
3552
3553 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3554 if (!noAssert) checkOffset(offset, 4, this.length)
3555
3556 return (this[offset] * 0x1000000) +
3557 ((this[offset + 1] << 16) |
3558 (this[offset + 2] << 8) |
3559 this[offset + 3])
3560 }
3561
3562 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3563 offset = offset | 0
3564 byteLength = byteLength | 0
3565 if (!noAssert) checkOffset(offset, byteLength, this.length)
3566
3567 var val = this[offset]
3568 var mul = 1
3569 var i = 0
3570 while (++i < byteLength && (mul *= 0x100)) {
3571 val += this[offset + i] * mul
3572 }
3573 mul *= 0x80
3574
3575 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3576
3577 return val
3578 }
3579
3580 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3581 offset = offset | 0
3582 byteLength = byteLength | 0
3583 if (!noAssert) checkOffset(offset, byteLength, this.length)
3584
3585 var i = byteLength
3586 var mul = 1
3587 var val = this[offset + --i]
3588 while (i > 0 && (mul *= 0x100)) {
3589 val += this[offset + --i] * mul
3590 }
3591 mul *= 0x80
3592
3593 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3594
3595 return val
3596 }
3597
3598 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3599 if (!noAssert) checkOffset(offset, 1, this.length)
3600 if (!(this[offset] & 0x80)) return (this[offset])
3601 return ((0xff - this[offset] + 1) * -1)
3602 }
3603
3604 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3605 if (!noAssert) checkOffset(offset, 2, this.length)
3606 var val = this[offset] | (this[offset + 1] << 8)
3607 return (val & 0x8000) ? val | 0xFFFF0000 : val
3608 }
3609
3610 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3611 if (!noAssert) checkOffset(offset, 2, this.length)
3612 var val = this[offset + 1] | (this[offset] << 8)
3613 return (val & 0x8000) ? val | 0xFFFF0000 : val
3614 }
3615
3616 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3617 if (!noAssert) checkOffset(offset, 4, this.length)
3618
3619 return (this[offset]) |
3620 (this[offset + 1] << 8) |
3621 (this[offset + 2] << 16) |
3622 (this[offset + 3] << 24)
3623 }
3624
3625 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3626 if (!noAssert) checkOffset(offset, 4, this.length)
3627
3628 return (this[offset] << 24) |
3629 (this[offset + 1] << 16) |
3630 (this[offset + 2] << 8) |
3631 (this[offset + 3])
3632 }
3633
3634 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3635 if (!noAssert) checkOffset(offset, 4, this.length)
3636 return ieee754.read(this, offset, true, 23, 4)
3637 }
3638
3639 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset, 4, this.length)
3641 return ieee754.read(this, offset, false, 23, 4)
3642 }
3643
3644 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3645 if (!noAssert) checkOffset(offset, 8, this.length)
3646 return ieee754.read(this, offset, true, 52, 8)
3647 }
3648
3649 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3650 if (!noAssert) checkOffset(offset, 8, this.length)
3651 return ieee754.read(this, offset, false, 52, 8)
3652 }
3653
3654 function checkInt (buf, value, offset, ext, max, min) {
3655 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3656 if (value > max || value < min) throw new RangeError('value is out of bounds')
3657 if (offset + ext > buf.length) throw new RangeError('index out of range')
3658 }
3659
3660 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3661 value = +value
3662 offset = offset | 0
3663 byteLength = byteLength | 0
3664 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3665
3666 var mul = 1
3667 var i = 0
3668 this[offset] = value & 0xFF
3669 while (++i < byteLength && (mul *= 0x100)) {
3670 this[offset + i] = (value / mul) & 0xFF
3671 }
3672
3673 return offset + byteLength
3674 }
3675
3676 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3677 value = +value
3678 offset = offset | 0
3679 byteLength = byteLength | 0
3680 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3681
3682 var i = byteLength - 1
3683 var mul = 1
3684 this[offset + i] = value & 0xFF
3685 while (--i >= 0 && (mul *= 0x100)) {
3686 this[offset + i] = (value / mul) & 0xFF
3687 }
3688
3689 return offset + byteLength
3690 }
3691
3692 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3693 value = +value
3694 offset = offset | 0
3695 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3696 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3697 this[offset] = value
3698 return offset + 1
3699 }
3700
3701 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3702 if (value < 0) value = 0xffff + value + 1
3703 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3704 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3705 (littleEndian ? i : 1 - i) * 8
3706 }
3707 }
3708
3709 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3710 value = +value
3711 offset = offset | 0
3712 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3713 if (Buffer.TYPED_ARRAY_SUPPORT) {
3714 this[offset] = value
3715 this[offset + 1] = (value >>> 8)
3716 } else {
3717 objectWriteUInt16(this, value, offset, true)
3718 }
3719 return offset + 2
3720 }
3721
3722 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3723 value = +value
3724 offset = offset | 0
3725 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3726 if (Buffer.TYPED_ARRAY_SUPPORT) {
3727 this[offset] = (value >>> 8)
3728 this[offset + 1] = value
3729 } else {
3730 objectWriteUInt16(this, value, offset, false)
3731 }
3732 return offset + 2
3733 }
3734
3735 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3736 if (value < 0) value = 0xffffffff + value + 1
3737 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3738 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3739 }
3740 }
3741
3742 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3743 value = +value
3744 offset = offset | 0
3745 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3746 if (Buffer.TYPED_ARRAY_SUPPORT) {
3747 this[offset + 3] = (value >>> 24)
3748 this[offset + 2] = (value >>> 16)
3749 this[offset + 1] = (value >>> 8)
3750 this[offset] = value
3751 } else {
3752 objectWriteUInt32(this, value, offset, true)
3753 }
3754 return offset + 4
3755 }
3756
3757 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3758 value = +value
3759 offset = offset | 0
3760 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3761 if (Buffer.TYPED_ARRAY_SUPPORT) {
3762 this[offset] = (value >>> 24)
3763 this[offset + 1] = (value >>> 16)
3764 this[offset + 2] = (value >>> 8)
3765 this[offset + 3] = value
3766 } else {
3767 objectWriteUInt32(this, value, offset, false)
3768 }
3769 return offset + 4
3770 }
3771
3772 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3773 value = +value
3774 offset = offset | 0
3775 if (!noAssert) {
3776 var limit = Math.pow(2, 8 * byteLength - 1)
3777
3778 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3779 }
3780
3781 var i = 0
3782 var mul = 1
3783 var sub = value < 0 ? 1 : 0
3784 this[offset] = value & 0xFF
3785 while (++i < byteLength && (mul *= 0x100)) {
3786 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3787 }
3788
3789 return offset + byteLength
3790 }
3791
3792 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3793 value = +value
3794 offset = offset | 0
3795 if (!noAssert) {
3796 var limit = Math.pow(2, 8 * byteLength - 1)
3797
3798 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3799 }
3800
3801 var i = byteLength - 1
3802 var mul = 1
3803 var sub = value < 0 ? 1 : 0
3804 this[offset + i] = value & 0xFF
3805 while (--i >= 0 && (mul *= 0x100)) {
3806 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3807 }
3808
3809 return offset + byteLength
3810 }
3811
3812 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3813 value = +value
3814 offset = offset | 0
3815 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3816 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3817 if (value < 0) value = 0xff + value + 1
3818 this[offset] = value
3819 return offset + 1
3820 }
3821
3822 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3823 value = +value
3824 offset = offset | 0
3825 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3826 if (Buffer.TYPED_ARRAY_SUPPORT) {
3827 this[offset] = value
3828 this[offset + 1] = (value >>> 8)
3829 } else {
3830 objectWriteUInt16(this, value, offset, true)
3831 }
3832 return offset + 2
3833 }
3834
3835 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3836 value = +value
3837 offset = offset | 0
3838 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3839 if (Buffer.TYPED_ARRAY_SUPPORT) {
3840 this[offset] = (value >>> 8)
3841 this[offset + 1] = value
3842 } else {
3843 objectWriteUInt16(this, value, offset, false)
3844 }
3845 return offset + 2
3846 }
3847
3848 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3849 value = +value
3850 offset = offset | 0
3851 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3852 if (Buffer.TYPED_ARRAY_SUPPORT) {
3853 this[offset] = value
3854 this[offset + 1] = (value >>> 8)
3855 this[offset + 2] = (value >>> 16)
3856 this[offset + 3] = (value >>> 24)
3857 } else {
3858 objectWriteUInt32(this, value, offset, true)
3859 }
3860 return offset + 4
3861 }
3862
3863 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3864 value = +value
3865 offset = offset | 0
3866 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3867 if (value < 0) value = 0xffffffff + value + 1
3868 if (Buffer.TYPED_ARRAY_SUPPORT) {
3869 this[offset] = (value >>> 24)
3870 this[offset + 1] = (value >>> 16)
3871 this[offset + 2] = (value >>> 8)
3872 this[offset + 3] = value
3873 } else {
3874 objectWriteUInt32(this, value, offset, false)
3875 }
3876 return offset + 4
3877 }
3878
3879 function checkIEEE754 (buf, value, offset, ext, max, min) {
3880 if (value > max || value < min) throw new RangeError('value is out of bounds')
3881 if (offset + ext > buf.length) throw new RangeError('index out of range')
3882 if (offset < 0) throw new RangeError('index out of range')
3883 }
3884
3885 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3886 if (!noAssert) {
3887 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3888 }
3889 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3890 return offset + 4
3891 }
3892
3893 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3894 return writeFloat(this, value, offset, true, noAssert)
3895 }
3896
3897 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3898 return writeFloat(this, value, offset, false, noAssert)
3899 }
3900
3901 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3902 if (!noAssert) {
3903 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3904 }
3905 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3906 return offset + 8
3907 }
3908
3909 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3910 return writeDouble(this, value, offset, true, noAssert)
3911 }
3912
3913 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3914 return writeDouble(this, value, offset, false, noAssert)
3915 }
3916
3917 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3918 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3919 if (!start) start = 0
3920 if (!end && end !== 0) end = this.length
3921 if (targetStart >= target.length) targetStart = target.length
3922 if (!targetStart) targetStart = 0
3923 if (end > 0 && end < start) end = start
3924
3925 // Copy 0 bytes; we're done
3926 if (end === start) return 0
3927 if (target.length === 0 || this.length === 0) return 0
3928
3929 // Fatal error conditions
3930 if (targetStart < 0) {
3931 throw new RangeError('targetStart out of bounds')
3932 }
3933 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3934 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3935
3936 // Are we oob?
3937 if (end > this.length) end = this.length
3938 if (target.length - targetStart < end - start) {
3939 end = target.length - targetStart + start
3940 }
3941
3942 var len = end - start
3943 var i
3944
3945 if (this === target && start < targetStart && targetStart < end) {
3946 // descending copy from end
3947 for (i = len - 1; i >= 0; i--) {
3948 target[i + targetStart] = this[i + start]
3949 }
3950 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3951 // ascending copy from start
3952 for (i = 0; i < len; i++) {
3953 target[i + targetStart] = this[i + start]
3954 }
3955 } else {
3956 target._set(this.subarray(start, start + len), targetStart)
3957 }
3958
3959 return len
3960 }
3961
3962 // fill(value, start=0, end=buffer.length)
3963 Buffer.prototype.fill = function fill (value, start, end) {
3964 if (!value) value = 0
3965 if (!start) start = 0
3966 if (!end) end = this.length
3967
3968 if (end < start) throw new RangeError('end < start')
3969
3970 // Fill 0 bytes; we're done
3971 if (end === start) return
3972 if (this.length === 0) return
3973
3974 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3975 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3976
3977 var i
3978 if (typeof value === 'number') {
3979 for (i = start; i < end; i++) {
3980 this[i] = value
3981 }
3982 } else {
3983 var bytes = utf8ToBytes(value.toString())
3984 var len = bytes.length
3985 for (i = start; i < end; i++) {
3986 this[i] = bytes[i % len]
3987 }
3988 }
3989
3990 return this
3991 }
3992
3993 /**
3994 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3995 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3996 */
3997 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3998 if (typeof Uint8Array !== 'undefined') {
3999 if (Buffer.TYPED_ARRAY_SUPPORT) {
4000 return (new Buffer(this)).buffer
4001 } else {
4002 var buf = new Uint8Array(this.length)
4003 for (var i = 0, len = buf.length; i < len; i += 1) {
4004 buf[i] = this[i]
4005 }
4006 return buf.buffer
4007 }
4008 } else {
4009 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4010 }
4011 }
4012
4013 // HELPER FUNCTIONS
4014 // ================
4015
4016 var BP = Buffer.prototype
4017
4018 /**
4019 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4020 */
4021 Buffer._augment = function _augment (arr) {
4022 arr.constructor = Buffer
4023 arr._isBuffer = true
4024
4025 // save reference to original Uint8Array set method before overwriting
4026 arr._set = arr.set
4027
4028 // deprecated
4029 arr.get = BP.get
4030 arr.set = BP.set
4031
4032 arr.write = BP.write
4033 arr.toString = BP.toString
4034 arr.toLocaleString = BP.toString
4035 arr.toJSON = BP.toJSON
4036 arr.equals = BP.equals
4037 arr.compare = BP.compare
4038 arr.indexOf = BP.indexOf
4039 arr.copy = BP.copy
4040 arr.slice = BP.slice
4041 arr.readUIntLE = BP.readUIntLE
4042 arr.readUIntBE = BP.readUIntBE
4043 arr.readUInt8 = BP.readUInt8
4044 arr.readUInt16LE = BP.readUInt16LE
4045 arr.readUInt16BE = BP.readUInt16BE
4046 arr.readUInt32LE = BP.readUInt32LE
4047 arr.readUInt32BE = BP.readUInt32BE
4048 arr.readIntLE = BP.readIntLE
4049 arr.readIntBE = BP.readIntBE
4050 arr.readInt8 = BP.readInt8
4051 arr.readInt16LE = BP.readInt16LE
4052 arr.readInt16BE = BP.readInt16BE
4053 arr.readInt32LE = BP.readInt32LE
4054 arr.readInt32BE = BP.readInt32BE
4055 arr.readFloatLE = BP.readFloatLE
4056 arr.readFloatBE = BP.readFloatBE
4057 arr.readDoubleLE = BP.readDoubleLE
4058 arr.readDoubleBE = BP.readDoubleBE
4059 arr.writeUInt8 = BP.writeUInt8
4060 arr.writeUIntLE = BP.writeUIntLE
4061 arr.writeUIntBE = BP.writeUIntBE
4062 arr.writeUInt16LE = BP.writeUInt16LE
4063 arr.writeUInt16BE = BP.writeUInt16BE
4064 arr.writeUInt32LE = BP.writeUInt32LE
4065 arr.writeUInt32BE = BP.writeUInt32BE
4066 arr.writeIntLE = BP.writeIntLE
4067 arr.writeIntBE = BP.writeIntBE
4068 arr.writeInt8 = BP.writeInt8
4069 arr.writeInt16LE = BP.writeInt16LE
4070 arr.writeInt16BE = BP.writeInt16BE
4071 arr.writeInt32LE = BP.writeInt32LE
4072 arr.writeInt32BE = BP.writeInt32BE
4073 arr.writeFloatLE = BP.writeFloatLE
4074 arr.writeFloatBE = BP.writeFloatBE
4075 arr.writeDoubleLE = BP.writeDoubleLE
4076 arr.writeDoubleBE = BP.writeDoubleBE
4077 arr.fill = BP.fill
4078 arr.inspect = BP.inspect
4079 arr.toArrayBuffer = BP.toArrayBuffer
4080
4081 return arr
4082 }
4083
4084 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4085
4086 function base64clean (str) {
4087 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4088 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4089 // Node converts strings with length < 2 to ''
4090 if (str.length < 2) return ''
4091 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4092 while (str.length % 4 !== 0) {
4093 str = str + '='
4094 }
4095 return str
4096 }
4097
4098 function stringtrim (str) {
4099 if (str.trim) return str.trim()
4100 return str.replace(/^\s+|\s+$/g, '')
4101 }
4102
4103 function toHex (n) {
4104 if (n < 16) return '0' + n.toString(16)
4105 return n.toString(16)
4106 }
4107
4108 function utf8ToBytes (string, units) {
4109 units = units || Infinity
4110 var codePoint
4111 var length = string.length
4112 var leadSurrogate = null
4113 var bytes = []
4114
4115 for (var i = 0; i < length; i++) {
4116 codePoint = string.charCodeAt(i)
4117
4118 // is surrogate component
4119 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4120 // last char was a lead
4121 if (!leadSurrogate) {
4122 // no lead yet
4123 if (codePoint > 0xDBFF) {
4124 // unexpected trail
4125 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4126 continue
4127
4128 } else if (i + 1 === length) {
4129 // unpaired lead
4130 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4131 continue
4132 }
4133
4134 // valid lead
4135 leadSurrogate = codePoint
4136
4137 continue
4138 }
4139
4140 // 2 leads in a row
4141 if (codePoint < 0xDC00) {
4142 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4143 leadSurrogate = codePoint
4144 continue
4145 }
4146
4147 // valid surrogate pair
4148 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4149
4150 } else if (leadSurrogate) {
4151 // valid bmp char, but last char was a lead
4152 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4153 }
4154
4155 leadSurrogate = null
4156
4157 // encode utf8
4158 if (codePoint < 0x80) {
4159 if ((units -= 1) < 0) break
4160 bytes.push(codePoint)
4161 } else if (codePoint < 0x800) {
4162 if ((units -= 2) < 0) break
4163 bytes.push(
4164 codePoint >> 0x6 | 0xC0,
4165 codePoint & 0x3F | 0x80
4166 )
4167 } else if (codePoint < 0x10000) {
4168 if ((units -= 3) < 0) break
4169 bytes.push(
4170 codePoint >> 0xC | 0xE0,
4171 codePoint >> 0x6 & 0x3F | 0x80,
4172 codePoint & 0x3F | 0x80
4173 )
4174 } else if (codePoint < 0x110000) {
4175 if ((units -= 4) < 0) break
4176 bytes.push(
4177 codePoint >> 0x12 | 0xF0,
4178 codePoint >> 0xC & 0x3F | 0x80,
4179 codePoint >> 0x6 & 0x3F | 0x80,
4180 codePoint & 0x3F | 0x80
4181 )
4182 } else {
4183 throw new Error('Invalid code point')
4184 }
4185 }
4186
4187 return bytes
4188 }
4189
4190 function asciiToBytes (str) {
4191 var byteArray = []
4192 for (var i = 0; i < str.length; i++) {
4193 // Node's code seems to be doing this and not & 0x7F..
4194 byteArray.push(str.charCodeAt(i) & 0xFF)
4195 }
4196 return byteArray
4197 }
4198
4199 function utf16leToBytes (str, units) {
4200 var c, hi, lo
4201 var byteArray = []
4202 for (var i = 0; i < str.length; i++) {
4203 if ((units -= 2) < 0) break
4204
4205 c = str.charCodeAt(i)
4206 hi = c >> 8
4207 lo = c % 256
4208 byteArray.push(lo)
4209 byteArray.push(hi)
4210 }
4211
4212 return byteArray
4213 }
4214
4215 function base64ToBytes (str) {
4216 return base64.toByteArray(base64clean(str))
4217 }
4218
4219 function blitBuffer (src, dst, offset, length) {
4220 for (var i = 0; i < length; i++) {
4221 if ((i + offset >= dst.length) || (i >= src.length)) break
4222 dst[i + offset] = src[i]
4223 }
4224 return i
4225 }
4226
4227 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4228 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4229
4230 ;(function (exports) {
4231 'use strict';
4232
4233 var Arr = (typeof Uint8Array !== 'undefined')
4234 ? Uint8Array
4235 : Array
4236
4237 var PLUS = '+'.charCodeAt(0)
4238 var SLASH = '/'.charCodeAt(0)
4239 var NUMBER = '0'.charCodeAt(0)
4240 var LOWER = 'a'.charCodeAt(0)
4241 var UPPER = 'A'.charCodeAt(0)
4242 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4243 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4244
4245 function decode (elt) {
4246 var code = elt.charCodeAt(0)
4247 if (code === PLUS ||
4248 code === PLUS_URL_SAFE)
4249 return 62 // '+'
4250 if (code === SLASH ||
4251 code === SLASH_URL_SAFE)
4252 return 63 // '/'
4253 if (code < NUMBER)
4254 return -1 //no match
4255 if (code < NUMBER + 10)
4256 return code - NUMBER + 26 + 26
4257 if (code < UPPER + 26)
4258 return code - UPPER
4259 if (code < LOWER + 26)
4260 return code - LOWER + 26
4261 }
4262
4263 function b64ToByteArray (b64) {
4264 var i, j, l, tmp, placeHolders, arr
4265
4266 if (b64.length % 4 > 0) {
4267 throw new Error('Invalid string. Length must be a multiple of 4')
4268 }
4269
4270 // the number of equal signs (place holders)
4271 // if there are two placeholders, than the two characters before it
4272 // represent one byte
4273 // if there is only one, then the three characters before it represent 2 bytes
4274 // this is just a cheap hack to not do indexOf twice
4275 var len = b64.length
4276 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4277
4278 // base64 is 4/3 + up to two characters of the original data
4279 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4280
4281 // if there are placeholders, only get up to the last complete 4 chars
4282 l = placeHolders > 0 ? b64.length - 4 : b64.length
4283
4284 var L = 0
4285
4286 function push (v) {
4287 arr[L++] = v
4288 }
4289
4290 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4291 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4292 push((tmp & 0xFF0000) >> 16)
4293 push((tmp & 0xFF00) >> 8)
4294 push(tmp & 0xFF)
4295 }
4296
4297 if (placeHolders === 2) {
4298 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4299 push(tmp & 0xFF)
4300 } else if (placeHolders === 1) {
4301 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4302 push((tmp >> 8) & 0xFF)
4303 push(tmp & 0xFF)
4304 }
4305
4306 return arr
4307 }
4308
4309 function uint8ToBase64 (uint8) {
4310 var i,
4311 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4312 output = "",
4313 temp, length
4314
4315 function encode (num) {
4316 return lookup.charAt(num)
4317 }
4318
4319 function tripletToBase64 (num) {
4320 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4321 }
4322
4323 // go through the array every three bytes, we'll deal with trailing stuff later
4324 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4325 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4326 output += tripletToBase64(temp)
4327 }
4328
4329 // pad the end with zeros, but make sure to not forget the extra bytes
4330 switch (extraBytes) {
4331 case 1:
4332 temp = uint8[uint8.length - 1]
4333 output += encode(temp >> 2)
4334 output += encode((temp << 4) & 0x3F)
4335 output += '=='
4336 break
4337 case 2:
4338 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4339 output += encode(temp >> 10)
4340 output += encode((temp >> 4) & 0x3F)
4341 output += encode((temp << 2) & 0x3F)
4342 output += '='
4343 break
4344 }
4345
4346 return output
4347 }
4348
4349 exports.toByteArray = b64ToByteArray
4350 exports.fromByteArray = uint8ToBase64
4351 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4352
4353 },{}],9:[function(require,module,exports){
4354 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4355 var e, m
4356 var eLen = nBytes * 8 - mLen - 1
4357 var eMax = (1 << eLen) - 1
4358 var eBias = eMax >> 1
4359 var nBits = -7
4360 var i = isLE ? (nBytes - 1) : 0
4361 var d = isLE ? -1 : 1
4362 var s = buffer[offset + i]
4363
4364 i += d
4365
4366 e = s & ((1 << (-nBits)) - 1)
4367 s >>= (-nBits)
4368 nBits += eLen
4369 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4370
4371 m = e & ((1 << (-nBits)) - 1)
4372 e >>= (-nBits)
4373 nBits += mLen
4374 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4375
4376 if (e === 0) {
4377 e = 1 - eBias
4378 } else if (e === eMax) {
4379 return m ? NaN : ((s ? -1 : 1) * Infinity)
4380 } else {
4381 m = m + Math.pow(2, mLen)
4382 e = e - eBias
4383 }
4384 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4385 }
4386
4387 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4388 var e, m, c
4389 var eLen = nBytes * 8 - mLen - 1
4390 var eMax = (1 << eLen) - 1
4391 var eBias = eMax >> 1
4392 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4393 var i = isLE ? 0 : (nBytes - 1)
4394 var d = isLE ? 1 : -1
4395 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4396
4397 value = Math.abs(value)
4398
4399 if (isNaN(value) || value === Infinity) {
4400 m = isNaN(value) ? 1 : 0
4401 e = eMax
4402 } else {
4403 e = Math.floor(Math.log(value) / Math.LN2)
4404 if (value * (c = Math.pow(2, -e)) < 1) {
4405 e--
4406 c *= 2
4407 }
4408 if (e + eBias >= 1) {
4409 value += rt / c
4410 } else {
4411 value += rt * Math.pow(2, 1 - eBias)
4412 }
4413 if (value * c >= 2) {
4414 e++
4415 c /= 2
4416 }
4417
4418 if (e + eBias >= eMax) {
4419 m = 0
4420 e = eMax
4421 } else if (e + eBias >= 1) {
4422 m = (value * c - 1) * Math.pow(2, mLen)
4423 e = e + eBias
4424 } else {
4425 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4426 e = 0
4427 }
4428 }
4429
4430 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4431
4432 e = (e << mLen) | m
4433 eLen += mLen
4434 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4435
4436 buffer[offset + i - d] |= s * 128
4437 }
4438
4439 },{}],10:[function(require,module,exports){
4440
4441 /**
4442 * isArray
4443 */
4444
4445 var isArray = Array.isArray;
4446
4447 /**
4448 * toString
4449 */
4450
4451 var str = Object.prototype.toString;
4452
4453 /**
4454 * Whether or not the given `val`
4455 * is an array.
4456 *
4457 * example:
4458 *
4459 * isArray([]);
4460 * // > true
4461 * isArray(arguments);
4462 * // > false
4463 * isArray('');
4464 * // > false
4465 *
4466 * @param {mixed} val
4467 * @return {bool}
4468 */
4469
4470 module.exports = isArray || function (val) {
4471 return !! val && '[object Array]' == str.call(val);
4472 };
4473
4474 },{}],11:[function(require,module,exports){
4475 // Copyright Joyent, Inc. and other Node contributors.
4476 //
4477 // Permission is hereby granted, free of charge, to any person obtaining a
4478 // copy of this software and associated documentation files (the
4479 // "Software"), to deal in the Software without restriction, including
4480 // without limitation the rights to use, copy, modify, merge, publish,
4481 // distribute, sublicense, and/or sell copies of the Software, and to permit
4482 // persons to whom the Software is furnished to do so, subject to the
4483 // following conditions:
4484 //
4485 // The above copyright notice and this permission notice shall be included
4486 // in all copies or substantial portions of the Software.
4487 //
4488 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4489 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4490 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4491 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4492 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4493 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4494 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4495
4496 function EventEmitter() {
4497 this._events = this._events || {};
4498 this._maxListeners = this._maxListeners || undefined;
4499 }
4500 module.exports = EventEmitter;
4501
4502 // Backwards-compat with node 0.10.x
4503 EventEmitter.EventEmitter = EventEmitter;
4504
4505 EventEmitter.prototype._events = undefined;
4506 EventEmitter.prototype._maxListeners = undefined;
4507
4508 // By default EventEmitters will print a warning if more than 10 listeners are
4509 // added to it. This is a useful default which helps finding memory leaks.
4510 EventEmitter.defaultMaxListeners = 10;
4511
4512 // Obviously not all Emitters should be limited to 10. This function allows
4513 // that to be increased. Set to zero for unlimited.
4514 EventEmitter.prototype.setMaxListeners = function(n) {
4515 if (!isNumber(n) || n < 0 || isNaN(n))
4516 throw TypeError('n must be a positive number');
4517 this._maxListeners = n;
4518 return this;
4519 };
4520
4521 EventEmitter.prototype.emit = function(type) {
4522 var er, handler, len, args, i, listeners;
4523
4524 if (!this._events)
4525 this._events = {};
4526
4527 // If there is no 'error' event listener then throw.
4528 if (type === 'error') {
4529 if (!this._events.error ||
4530 (isObject(this._events.error) && !this._events.error.length)) {
4531 er = arguments[1];
4532 if (er instanceof Error) {
4533 throw er; // Unhandled 'error' event
4534 }
4535 throw TypeError('Uncaught, unspecified "error" event.');
4536 }
4537 }
4538
4539 handler = this._events[type];
4540
4541 if (isUndefined(handler))
4542 return false;
4543
4544 if (isFunction(handler)) {
4545 switch (arguments.length) {
4546 // fast cases
4547 case 1:
4548 handler.call(this);
4549 break;
4550 case 2:
4551 handler.call(this, arguments[1]);
4552 break;
4553 case 3:
4554 handler.call(this, arguments[1], arguments[2]);
4555 break;
4556 // slower
4557 default:
4558 len = arguments.length;
4559 args = new Array(len - 1);
4560 for (i = 1; i < len; i++)
4561 args[i - 1] = arguments[i];
4562 handler.apply(this, args);
4563 }
4564 } else if (isObject(handler)) {
4565 len = arguments.length;
4566 args = new Array(len - 1);
4567 for (i = 1; i < len; i++)
4568 args[i - 1] = arguments[i];
4569
4570 listeners = handler.slice();
4571 len = listeners.length;
4572 for (i = 0; i < len; i++)
4573 listeners[i].apply(this, args);
4574 }
4575
4576 return true;
4577 };
4578
4579 EventEmitter.prototype.addListener = function(type, listener) {
4580 var m;
4581
4582 if (!isFunction(listener))
4583 throw TypeError('listener must be a function');
4584
4585 if (!this._events)
4586 this._events = {};
4587
4588 // To avoid recursion in the case that type === "newListener"! Before
4589 // adding it to the listeners, first emit "newListener".
4590 if (this._events.newListener)
4591 this.emit('newListener', type,
4592 isFunction(listener.listener) ?
4593 listener.listener : listener);
4594
4595 if (!this._events[type])
4596 // Optimize the case of one listener. Don't need the extra array object.
4597 this._events[type] = listener;
4598 else if (isObject(this._events[type]))
4599 // If we've already got an array, just append.
4600 this._events[type].push(listener);
4601 else
4602 // Adding the second element, need to change to array.
4603 this._events[type] = [this._events[type], listener];
4604
4605 // Check for listener leak
4606 if (isObject(this._events[type]) && !this._events[type].warned) {
4607 var m;
4608 if (!isUndefined(this._maxListeners)) {
4609 m = this._maxListeners;
4610 } else {
4611 m = EventEmitter.defaultMaxListeners;
4612 }
4613
4614 if (m && m > 0 && this._events[type].length > m) {
4615 this._events[type].warned = true;
4616 console.error('(node) warning: possible EventEmitter memory ' +
4617 'leak detected. %d listeners added. ' +
4618 'Use emitter.setMaxListeners() to increase limit.',
4619 this._events[type].length);
4620 if (typeof console.trace === 'function') {
4621 // not supported in IE 10
4622 console.trace();
4623 }
4624 }
4625 }
4626
4627 return this;
4628 };
4629
4630 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4631
4632 EventEmitter.prototype.once = function(type, listener) {
4633 if (!isFunction(listener))
4634 throw TypeError('listener must be a function');
4635
4636 var fired = false;
4637
4638 function g() {
4639 this.removeListener(type, g);
4640
4641 if (!fired) {
4642 fired = true;
4643 listener.apply(this, arguments);
4644 }
4645 }
4646
4647 g.listener = listener;
4648 this.on(type, g);
4649
4650 return this;
4651 };
4652
4653 // emits a 'removeListener' event iff the listener was removed
4654 EventEmitter.prototype.removeListener = function(type, listener) {
4655 var list, position, length, i;
4656
4657 if (!isFunction(listener))
4658 throw TypeError('listener must be a function');
4659
4660 if (!this._events || !this._events[type])
4661 return this;
4662
4663 list = this._events[type];
4664 length = list.length;
4665 position = -1;
4666
4667 if (list === listener ||
4668 (isFunction(list.listener) && list.listener === listener)) {
4669 delete this._events[type];
4670 if (this._events.removeListener)
4671 this.emit('removeListener', type, listener);
4672
4673 } else if (isObject(list)) {
4674 for (i = length; i-- > 0;) {
4675 if (list[i] === listener ||
4676 (list[i].listener && list[i].listener === listener)) {
4677 position = i;
4678 break;
4679 }
4680 }
4681
4682 if (position < 0)
4683 return this;
4684
4685 if (list.length === 1) {
4686 list.length = 0;
4687 delete this._events[type];
4688 } else {
4689 list.splice(position, 1);
4690 }
4691
4692 if (this._events.removeListener)
4693 this.emit('removeListener', type, listener);
4694 }
4695
4696 return this;
4697 };
4698
4699 EventEmitter.prototype.removeAllListeners = function(type) {
4700 var key, listeners;
4701
4702 if (!this._events)
4703 return this;
4704
4705 // not listening for removeListener, no need to emit
4706 if (!this._events.removeListener) {
4707 if (arguments.length === 0)
4708 this._events = {};
4709 else if (this._events[type])
4710 delete this._events[type];
4711 return this;
4712 }
4713
4714 // emit removeListener for all listeners on all events
4715 if (arguments.length === 0) {
4716 for (key in this._events) {
4717 if (key === 'removeListener') continue;
4718 this.removeAllListeners(key);
4719 }
4720 this.removeAllListeners('removeListener');
4721 this._events = {};
4722 return this;
4723 }
4724
4725 listeners = this._events[type];
4726
4727 if (isFunction(listeners)) {
4728 this.removeListener(type, listeners);
4729 } else {
4730 // LIFO order
4731 while (listeners.length)
4732 this.removeListener(type, listeners[listeners.length - 1]);
4733 }
4734 delete this._events[type];
4735
4736 return this;
4737 };
4738
4739 EventEmitter.prototype.listeners = function(type) {
4740 var ret;
4741 if (!this._events || !this._events[type])
4742 ret = [];
4743 else if (isFunction(this._events[type]))
4744 ret = [this._events[type]];
4745 else
4746 ret = this._events[type].slice();
4747 return ret;
4748 };
4749
4750 EventEmitter.listenerCount = function(emitter, type) {
4751 var ret;
4752 if (!emitter._events || !emitter._events[type])
4753 ret = 0;
4754 else if (isFunction(emitter._events[type]))
4755 ret = 1;
4756 else
4757 ret = emitter._events[type].length;
4758 return ret;
4759 };
4760
4761 function isFunction(arg) {
4762 return typeof arg === 'function';
4763 }
4764
4765 function isNumber(arg) {
4766 return typeof arg === 'number';
4767 }
4768
4769 function isObject(arg) {
4770 return typeof arg === 'object' && arg !== null;
4771 }
4772
4773 function isUndefined(arg) {
4774 return arg === void 0;
4775 }
4776
4777 },{}],12:[function(require,module,exports){
4778 if (typeof Object.create === 'function') {
4779 // implementation from standard node.js 'util' module
4780 module.exports = function inherits(ctor, superCtor) {
4781 ctor.super_ = superCtor
4782 ctor.prototype = Object.create(superCtor.prototype, {
4783 constructor: {
4784 value: ctor,
4785 enumerable: false,
4786 writable: true,
4787 configurable: true
4788 }
4789 });
4790 };
4791 } else {
4792 // old school shim for old browsers
4793 module.exports = function inherits(ctor, superCtor) {
4794 ctor.super_ = superCtor
4795 var TempCtor = function () {}
4796 TempCtor.prototype = superCtor.prototype
4797 ctor.prototype = new TempCtor()
4798 ctor.prototype.constructor = ctor
4799 }
4800 }
4801
4802 },{}],13:[function(require,module,exports){
4803 module.exports = Array.isArray || function (arr) {
4804 return Object.prototype.toString.call(arr) == '[object Array]';
4805 };
4806
4807 },{}],14:[function(require,module,exports){
4808 // shim for using process in browser
4809
4810 var process = module.exports = {};
4811 var queue = [];
4812 var draining = false;
4813 var currentQueue;
4814 var queueIndex = -1;
4815
4816 function cleanUpNextTick() {
4817 draining = false;
4818 if (currentQueue.length) {
4819 queue = currentQueue.concat(queue);
4820 } else {
4821 queueIndex = -1;
4822 }
4823 if (queue.length) {
4824 drainQueue();
4825 }
4826 }
4827
4828 function drainQueue() {
4829 if (draining) {
4830 return;
4831 }
4832 var timeout = setTimeout(cleanUpNextTick);
4833 draining = true;
4834
4835 var len = queue.length;
4836 while(len) {
4837 currentQueue = queue;
4838 queue = [];
4839 while (++queueIndex < len) {
4840 currentQueue[queueIndex].run();
4841 }
4842 queueIndex = -1;
4843 len = queue.length;
4844 }
4845 currentQueue = null;
4846 draining = false;
4847 clearTimeout(timeout);
4848 }
4849
4850 process.nextTick = function (fun) {
4851 var args = new Array(arguments.length - 1);
4852 if (arguments.length > 1) {
4853 for (var i = 1; i < arguments.length; i++) {
4854 args[i - 1] = arguments[i];
4855 }
4856 }
4857 queue.push(new Item(fun, args));
4858 if (queue.length === 1 && !draining) {
4859 setTimeout(drainQueue, 0);
4860 }
4861 };
4862
4863 // v8 likes predictible objects
4864 function Item(fun, array) {
4865 this.fun = fun;
4866 this.array = array;
4867 }
4868 Item.prototype.run = function () {
4869 this.fun.apply(null, this.array);
4870 };
4871 process.title = 'browser';
4872 process.browser = true;
4873 process.env = {};
4874 process.argv = [];
4875 process.version = ''; // empty string to avoid regexp issues
4876 process.versions = {};
4877
4878 function noop() {}
4879
4880 process.on = noop;
4881 process.addListener = noop;
4882 process.once = noop;
4883 process.off = noop;
4884 process.removeListener = noop;
4885 process.removeAllListeners = noop;
4886 process.emit = noop;
4887
4888 process.binding = function (name) {
4889 throw new Error('process.binding is not supported');
4890 };
4891
4892 // TODO(shtylman)
4893 process.cwd = function () { return '/' };
4894 process.chdir = function (dir) {
4895 throw new Error('process.chdir is not supported');
4896 };
4897 process.umask = function() { return 0; };
4898
4899 },{}],15:[function(require,module,exports){
4900 module.exports = require("./lib/_stream_duplex.js")
4901
4902 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4903 (function (process){
4904 // Copyright Joyent, Inc. and other Node contributors.
4905 //
4906 // Permission is hereby granted, free of charge, to any person obtaining a
4907 // copy of this software and associated documentation files (the
4908 // "Software"), to deal in the Software without restriction, including
4909 // without limitation the rights to use, copy, modify, merge, publish,
4910 // distribute, sublicense, and/or sell copies of the Software, and to permit
4911 // persons to whom the Software is furnished to do so, subject to the
4912 // following conditions:
4913 //
4914 // The above copyright notice and this permission notice shall be included
4915 // in all copies or substantial portions of the Software.
4916 //
4917 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4918 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4919 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4920 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4921 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4922 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4923 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4924
4925 // a duplex stream is just a stream that is both readable and writable.
4926 // Since JS doesn't have multiple prototypal inheritance, this class
4927 // prototypally inherits from Readable, and then parasitically from
4928 // Writable.
4929
4930 module.exports = Duplex;
4931
4932 /*<replacement>*/
4933 var objectKeys = Object.keys || function (obj) {
4934 var keys = [];
4935 for (var key in obj) keys.push(key);
4936 return keys;
4937 }
4938 /*</replacement>*/
4939
4940
4941 /*<replacement>*/
4942 var util = require('core-util-is');
4943 util.inherits = require('inherits');
4944 /*</replacement>*/
4945
4946 var Readable = require('./_stream_readable');
4947 var Writable = require('./_stream_writable');
4948
4949 util.inherits(Duplex, Readable);
4950
4951 forEach(objectKeys(Writable.prototype), function(method) {
4952 if (!Duplex.prototype[method])
4953 Duplex.prototype[method] = Writable.prototype[method];
4954 });
4955
4956 function Duplex(options) {
4957 if (!(this instanceof Duplex))
4958 return new Duplex(options);
4959
4960 Readable.call(this, options);
4961 Writable.call(this, options);
4962
4963 if (options && options.readable === false)
4964 this.readable = false;
4965
4966 if (options && options.writable === false)
4967 this.writable = false;
4968
4969 this.allowHalfOpen = true;
4970 if (options && options.allowHalfOpen === false)
4971 this.allowHalfOpen = false;
4972
4973 this.once('end', onend);
4974 }
4975
4976 // the no-half-open enforcer
4977 function onend() {
4978 // if we allow half-open state, or if the writable side ended,
4979 // then we're ok.
4980 if (this.allowHalfOpen || this._writableState.ended)
4981 return;
4982
4983 // no more data can be written.
4984 // But allow more writes to happen in this tick.
4985 process.nextTick(this.end.bind(this));
4986 }
4987
4988 function forEach (xs, f) {
4989 for (var i = 0, l = xs.length; i < l; i++) {
4990 f(xs[i], i);
4991 }
4992 }
4993
4994 }).call(this,require('_process'))
4995 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4996 // Copyright Joyent, Inc. and other Node contributors.
4997 //
4998 // Permission is hereby granted, free of charge, to any person obtaining a
4999 // copy of this software and associated documentation files (the
5000 // "Software"), to deal in the Software without restriction, including
5001 // without limitation the rights to use, copy, modify, merge, publish,
5002 // distribute, sublicense, and/or sell copies of the Software, and to permit
5003 // persons to whom the Software is furnished to do so, subject to the
5004 // following conditions:
5005 //
5006 // The above copyright notice and this permission notice shall be included
5007 // in all copies or substantial portions of the Software.
5008 //
5009 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5010 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5011 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5012 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5013 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5014 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5015 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5016
5017 // a passthrough stream.
5018 // basically just the most minimal sort of Transform stream.
5019 // Every written chunk gets output as-is.
5020
5021 module.exports = PassThrough;
5022
5023 var Transform = require('./_stream_transform');
5024
5025 /*<replacement>*/
5026 var util = require('core-util-is');
5027 util.inherits = require('inherits');
5028 /*</replacement>*/
5029
5030 util.inherits(PassThrough, Transform);
5031
5032 function PassThrough(options) {
5033 if (!(this instanceof PassThrough))
5034 return new PassThrough(options);
5035
5036 Transform.call(this, options);
5037 }
5038
5039 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5040 cb(null, chunk);
5041 };
5042
5043 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5044 (function (process){
5045 // Copyright Joyent, Inc. and other Node contributors.
5046 //
5047 // Permission is hereby granted, free of charge, to any person obtaining a
5048 // copy of this software and associated documentation files (the
5049 // "Software"), to deal in the Software without restriction, including
5050 // without limitation the rights to use, copy, modify, merge, publish,
5051 // distribute, sublicense, and/or sell copies of the Software, and to permit
5052 // persons to whom the Software is furnished to do so, subject to the
5053 // following conditions:
5054 //
5055 // The above copyright notice and this permission notice shall be included
5056 // in all copies or substantial portions of the Software.
5057 //
5058 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5059 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5060 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5061 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5062 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5063 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5064 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5065
5066 module.exports = Readable;
5067
5068 /*<replacement>*/
5069 var isArray = require('isarray');
5070 /*</replacement>*/
5071
5072
5073 /*<replacement>*/
5074 var Buffer = require('buffer').Buffer;
5075 /*</replacement>*/
5076
5077 Readable.ReadableState = ReadableState;
5078
5079 var EE = require('events').EventEmitter;
5080
5081 /*<replacement>*/
5082 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5083 return emitter.listeners(type).length;
5084 };
5085 /*</replacement>*/
5086
5087 var Stream = require('stream');
5088
5089 /*<replacement>*/
5090 var util = require('core-util-is');
5091 util.inherits = require('inherits');
5092 /*</replacement>*/
5093
5094 var StringDecoder;
5095
5096
5097 /*<replacement>*/
5098 var debug = require('util');
5099 if (debug && debug.debuglog) {
5100 debug = debug.debuglog('stream');
5101 } else {
5102 debug = function () {};
5103 }
5104 /*</replacement>*/
5105
5106
5107 util.inherits(Readable, Stream);
5108
5109 function ReadableState(options, stream) {
5110 var Duplex = require('./_stream_duplex');
5111
5112 options = options || {};
5113
5114 // the point at which it stops calling _read() to fill the buffer
5115 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5116 var hwm = options.highWaterMark;
5117 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5118 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5119
5120 // cast to ints.
5121 this.highWaterMark = ~~this.highWaterMark;
5122
5123 this.buffer = [];
5124 this.length = 0;
5125 this.pipes = null;
5126 this.pipesCount = 0;
5127 this.flowing = null;
5128 this.ended = false;
5129 this.endEmitted = false;
5130 this.reading = false;
5131
5132 // a flag to be able to tell if the onwrite cb is called immediately,
5133 // or on a later tick. We set this to true at first, because any
5134 // actions that shouldn't happen until "later" should generally also
5135 // not happen before the first write call.
5136 this.sync = true;
5137
5138 // whenever we return null, then we set a flag to say
5139 // that we're awaiting a 'readable' event emission.
5140 this.needReadable = false;
5141 this.emittedReadable = false;
5142 this.readableListening = false;
5143
5144
5145 // object stream flag. Used to make read(n) ignore n and to
5146 // make all the buffer merging and length checks go away
5147 this.objectMode = !!options.objectMode;
5148
5149 if (stream instanceof Duplex)
5150 this.objectMode = this.objectMode || !!options.readableObjectMode;
5151
5152 // Crypto is kind of old and crusty. Historically, its default string
5153 // encoding is 'binary' so we have to make this configurable.
5154 // Everything else in the universe uses 'utf8', though.
5155 this.defaultEncoding = options.defaultEncoding || 'utf8';
5156
5157 // when piping, we only care about 'readable' events that happen
5158 // after read()ing all the bytes and not getting any pushback.
5159 this.ranOut = false;
5160
5161 // the number of writers that are awaiting a drain event in .pipe()s
5162 this.awaitDrain = 0;
5163
5164 // if true, a maybeReadMore has been scheduled
5165 this.readingMore = false;
5166
5167 this.decoder = null;
5168 this.encoding = null;
5169 if (options.encoding) {
5170 if (!StringDecoder)
5171 StringDecoder = require('string_decoder/').StringDecoder;
5172 this.decoder = new StringDecoder(options.encoding);
5173 this.encoding = options.encoding;
5174 }
5175 }
5176
5177 function Readable(options) {
5178 var Duplex = require('./_stream_duplex');
5179
5180 if (!(this instanceof Readable))
5181 return new Readable(options);
5182
5183 this._readableState = new ReadableState(options, this);
5184
5185 // legacy
5186 this.readable = true;
5187
5188 Stream.call(this);
5189 }
5190
5191 // Manually shove something into the read() buffer.
5192 // This returns true if the highWaterMark has not been hit yet,
5193 // similar to how Writable.write() returns true if you should
5194 // write() some more.
5195 Readable.prototype.push = function(chunk, encoding) {
5196 var state = this._readableState;
5197
5198 if (util.isString(chunk) && !state.objectMode) {
5199 encoding = encoding || state.defaultEncoding;
5200 if (encoding !== state.encoding) {
5201 chunk = new Buffer(chunk, encoding);
5202 encoding = '';
5203 }
5204 }
5205
5206 return readableAddChunk(this, state, chunk, encoding, false);
5207 };
5208
5209 // Unshift should *always* be something directly out of read()
5210 Readable.prototype.unshift = function(chunk) {
5211 var state = this._readableState;
5212 return readableAddChunk(this, state, chunk, '', true);
5213 };
5214
5215 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5216 var er = chunkInvalid(state, chunk);
5217 if (er) {
5218 stream.emit('error', er);
5219 } else if (util.isNullOrUndefined(chunk)) {
5220 state.reading = false;
5221 if (!state.ended)
5222 onEofChunk(stream, state);
5223 } else if (state.objectMode || chunk && chunk.length > 0) {
5224 if (state.ended && !addToFront) {
5225 var e = new Error('stream.push() after EOF');
5226 stream.emit('error', e);
5227 } else if (state.endEmitted && addToFront) {
5228 var e = new Error('stream.unshift() after end event');
5229 stream.emit('error', e);
5230 } else {
5231 if (state.decoder && !addToFront && !encoding)
5232 chunk = state.decoder.write(chunk);
5233
5234 if (!addToFront)
5235 state.reading = false;
5236
5237 // if we want the data now, just emit it.
5238 if (state.flowing && state.length === 0 && !state.sync) {
5239 stream.emit('data', chunk);
5240 stream.read(0);
5241 } else {
5242 // update the buffer info.
5243 state.length += state.objectMode ? 1 : chunk.length;
5244 if (addToFront)
5245 state.buffer.unshift(chunk);
5246 else
5247 state.buffer.push(chunk);
5248
5249 if (state.needReadable)
5250 emitReadable(stream);
5251 }
5252
5253 maybeReadMore(stream, state);
5254 }
5255 } else if (!addToFront) {
5256 state.reading = false;
5257 }
5258
5259 return needMoreData(state);
5260 }
5261
5262
5263
5264 // if it's past the high water mark, we can push in some more.
5265 // Also, if we have no data yet, we can stand some
5266 // more bytes. This is to work around cases where hwm=0,
5267 // such as the repl. Also, if the push() triggered a
5268 // readable event, and the user called read(largeNumber) such that
5269 // needReadable was set, then we ought to push more, so that another
5270 // 'readable' event will be triggered.
5271 function needMoreData(state) {
5272 return !state.ended &&
5273 (state.needReadable ||
5274 state.length < state.highWaterMark ||
5275 state.length === 0);
5276 }
5277
5278 // backwards compatibility.
5279 Readable.prototype.setEncoding = function(enc) {
5280 if (!StringDecoder)
5281 StringDecoder = require('string_decoder/').StringDecoder;
5282 this._readableState.decoder = new StringDecoder(enc);
5283 this._readableState.encoding = enc;
5284 return this;
5285 };
5286
5287 // Don't raise the hwm > 128MB
5288 var MAX_HWM = 0x800000;
5289 function roundUpToNextPowerOf2(n) {
5290 if (n >= MAX_HWM) {
5291 n = MAX_HWM;
5292 } else {
5293 // Get the next highest power of 2
5294 n--;
5295 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5296 n++;
5297 }
5298 return n;
5299 }
5300
5301 function howMuchToRead(n, state) {
5302 if (state.length === 0 && state.ended)
5303 return 0;
5304
5305 if (state.objectMode)
5306 return n === 0 ? 0 : 1;
5307
5308 if (isNaN(n) || util.isNull(n)) {
5309 // only flow one buffer at a time
5310 if (state.flowing && state.buffer.length)
5311 return state.buffer[0].length;
5312 else
5313 return state.length;
5314 }
5315
5316 if (n <= 0)
5317 return 0;
5318
5319 // If we're asking for more than the target buffer level,
5320 // then raise the water mark. Bump up to the next highest
5321 // power of 2, to prevent increasing it excessively in tiny
5322 // amounts.
5323 if (n > state.highWaterMark)
5324 state.highWaterMark = roundUpToNextPowerOf2(n);
5325
5326 // don't have that much. return null, unless we've ended.
5327 if (n > state.length) {
5328 if (!state.ended) {
5329 state.needReadable = true;
5330 return 0;
5331 } else
5332 return state.length;
5333 }
5334
5335 return n;
5336 }
5337
5338 // you can override either this method, or the async _read(n) below.
5339 Readable.prototype.read = function(n) {
5340 debug('read', n);
5341 var state = this._readableState;
5342 var nOrig = n;
5343
5344 if (!util.isNumber(n) || n > 0)
5345 state.emittedReadable = false;
5346
5347 // if we're doing read(0) to trigger a readable event, but we
5348 // already have a bunch of data in the buffer, then just trigger
5349 // the 'readable' event and move on.
5350 if (n === 0 &&
5351 state.needReadable &&
5352 (state.length >= state.highWaterMark || state.ended)) {
5353 debug('read: emitReadable', state.length, state.ended);
5354 if (state.length === 0 && state.ended)
5355 endReadable(this);
5356 else
5357 emitReadable(this);
5358 return null;
5359 }
5360
5361 n = howMuchToRead(n, state);
5362
5363 // if we've ended, and we're now clear, then finish it up.
5364 if (n === 0 && state.ended) {
5365 if (state.length === 0)
5366 endReadable(this);
5367 return null;
5368 }
5369
5370 // All the actual chunk generation logic needs to be
5371 // *below* the call to _read. The reason is that in certain
5372 // synthetic stream cases, such as passthrough streams, _read
5373 // may be a completely synchronous operation which may change
5374 // the state of the read buffer, providing enough data when
5375 // before there was *not* enough.
5376 //
5377 // So, the steps are:
5378 // 1. Figure out what the state of things will be after we do
5379 // a read from the buffer.
5380 //
5381 // 2. If that resulting state will trigger a _read, then call _read.
5382 // Note that this may be asynchronous, or synchronous. Yes, it is
5383 // deeply ugly to write APIs this way, but that still doesn't mean
5384 // that the Readable class should behave improperly, as streams are
5385 // designed to be sync/async agnostic.
5386 // Take note if the _read call is sync or async (ie, if the read call
5387 // has returned yet), so that we know whether or not it's safe to emit
5388 // 'readable' etc.
5389 //
5390 // 3. Actually pull the requested chunks out of the buffer and return.
5391
5392 // if we need a readable event, then we need to do some reading.
5393 var doRead = state.needReadable;
5394 debug('need readable', doRead);
5395
5396 // if we currently have less than the highWaterMark, then also read some
5397 if (state.length === 0 || state.length - n < state.highWaterMark) {
5398 doRead = true;
5399 debug('length less than watermark', doRead);
5400 }
5401
5402 // however, if we've ended, then there's no point, and if we're already
5403 // reading, then it's unnecessary.
5404 if (state.ended || state.reading) {
5405 doRead = false;
5406 debug('reading or ended', doRead);
5407 }
5408
5409 if (doRead) {
5410 debug('do read');
5411 state.reading = true;
5412 state.sync = true;
5413 // if the length is currently zero, then we *need* a readable event.
5414 if (state.length === 0)
5415 state.needReadable = true;
5416 // call internal read method
5417 this._read(state.highWaterMark);
5418 state.sync = false;
5419 }
5420
5421 // If _read pushed data synchronously, then `reading` will be false,
5422 // and we need to re-evaluate how much data we can return to the user.
5423 if (doRead && !state.reading)
5424 n = howMuchToRead(nOrig, state);
5425
5426 var ret;
5427 if (n > 0)
5428 ret = fromList(n, state);
5429 else
5430 ret = null;
5431
5432 if (util.isNull(ret)) {
5433 state.needReadable = true;
5434 n = 0;
5435 }
5436
5437 state.length -= n;
5438
5439 // If we have nothing in the buffer, then we want to know
5440 // as soon as we *do* get something into the buffer.
5441 if (state.length === 0 && !state.ended)
5442 state.needReadable = true;
5443
5444 // If we tried to read() past the EOF, then emit end on the next tick.
5445 if (nOrig !== n && state.ended && state.length === 0)
5446 endReadable(this);
5447
5448 if (!util.isNull(ret))
5449 this.emit('data', ret);
5450
5451 return ret;
5452 };
5453
5454 function chunkInvalid(state, chunk) {
5455 var er = null;
5456 if (!util.isBuffer(chunk) &&
5457 !util.isString(chunk) &&
5458 !util.isNullOrUndefined(chunk) &&
5459 !state.objectMode) {
5460 er = new TypeError('Invalid non-string/buffer chunk');
5461 }
5462 return er;
5463 }
5464
5465
5466 function onEofChunk(stream, state) {
5467 if (state.decoder && !state.ended) {
5468 var chunk = state.decoder.end();
5469 if (chunk && chunk.length) {
5470 state.buffer.push(chunk);
5471 state.length += state.objectMode ? 1 : chunk.length;
5472 }
5473 }
5474 state.ended = true;
5475
5476 // emit 'readable' now to make sure it gets picked up.
5477 emitReadable(stream);
5478 }
5479
5480 // Don't emit readable right away in sync mode, because this can trigger
5481 // another read() call => stack overflow. This way, it might trigger
5482 // a nextTick recursion warning, but that's not so bad.
5483 function emitReadable(stream) {
5484 var state = stream._readableState;
5485 state.needReadable = false;
5486 if (!state.emittedReadable) {
5487 debug('emitReadable', state.flowing);
5488 state.emittedReadable = true;
5489 if (state.sync)
5490 process.nextTick(function() {
5491 emitReadable_(stream);
5492 });
5493 else
5494 emitReadable_(stream);
5495 }
5496 }
5497
5498 function emitReadable_(stream) {
5499 debug('emit readable');
5500 stream.emit('readable');
5501 flow(stream);
5502 }
5503
5504
5505 // at this point, the user has presumably seen the 'readable' event,
5506 // and called read() to consume some data. that may have triggered
5507 // in turn another _read(n) call, in which case reading = true if
5508 // it's in progress.
5509 // However, if we're not ended, or reading, and the length < hwm,
5510 // then go ahead and try to read some more preemptively.
5511 function maybeReadMore(stream, state) {
5512 if (!state.readingMore) {
5513 state.readingMore = true;
5514 process.nextTick(function() {
5515 maybeReadMore_(stream, state);
5516 });
5517 }
5518 }
5519
5520 function maybeReadMore_(stream, state) {
5521 var len = state.length;
5522 while (!state.reading && !state.flowing && !state.ended &&
5523 state.length < state.highWaterMark) {
5524 debug('maybeReadMore read 0');
5525 stream.read(0);
5526 if (len === state.length)
5527 // didn't get any data, stop spinning.
5528 break;
5529 else
5530 len = state.length;
5531 }
5532 state.readingMore = false;
5533 }
5534
5535 // abstract method. to be overridden in specific implementation classes.
5536 // call cb(er, data) where data is <= n in length.
5537 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5538 // arbitrary, and perhaps not very meaningful.
5539 Readable.prototype._read = function(n) {
5540 this.emit('error', new Error('not implemented'));
5541 };
5542
5543 Readable.prototype.pipe = function(dest, pipeOpts) {
5544 var src = this;
5545 var state = this._readableState;
5546
5547 switch (state.pipesCount) {
5548 case 0:
5549 state.pipes = dest;
5550 break;
5551 case 1:
5552 state.pipes = [state.pipes, dest];
5553 break;
5554 default:
5555 state.pipes.push(dest);
5556 break;
5557 }
5558 state.pipesCount += 1;
5559 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5560
5561 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5562 dest !== process.stdout &&
5563 dest !== process.stderr;
5564
5565 var endFn = doEnd ? onend : cleanup;
5566 if (state.endEmitted)
5567 process.nextTick(endFn);
5568 else
5569 src.once('end', endFn);
5570
5571 dest.on('unpipe', onunpipe);
5572 function onunpipe(readable) {
5573 debug('onunpipe');
5574 if (readable === src) {
5575 cleanup();
5576 }
5577 }
5578
5579 function onend() {
5580 debug('onend');
5581 dest.end();
5582 }
5583
5584 // when the dest drains, it reduces the awaitDrain counter
5585 // on the source. This would be more elegant with a .once()
5586 // handler in flow(), but adding and removing repeatedly is
5587 // too slow.
5588 var ondrain = pipeOnDrain(src);
5589 dest.on('drain', ondrain);
5590
5591 function cleanup() {
5592 debug('cleanup');
5593 // cleanup event handlers once the pipe is broken
5594 dest.removeListener('close', onclose);
5595 dest.removeListener('finish', onfinish);
5596 dest.removeListener('drain', ondrain);
5597 dest.removeListener('error', onerror);
5598 dest.removeListener('unpipe', onunpipe);
5599 src.removeListener('end', onend);
5600 src.removeListener('end', cleanup);
5601 src.removeListener('data', ondata);
5602
5603 // if the reader is waiting for a drain event from this
5604 // specific writer, then it would cause it to never start
5605 // flowing again.
5606 // So, if this is awaiting a drain, then we just call it now.
5607 // If we don't know, then assume that we are waiting for one.
5608 if (state.awaitDrain &&
5609 (!dest._writableState || dest._writableState.needDrain))
5610 ondrain();
5611 }
5612
5613 src.on('data', ondata);
5614 function ondata(chunk) {
5615 debug('ondata');
5616 var ret = dest.write(chunk);
5617 if (false === ret) {
5618 debug('false write response, pause',
5619 src._readableState.awaitDrain);
5620 src._readableState.awaitDrain++;
5621 src.pause();
5622 }
5623 }
5624
5625 // if the dest has an error, then stop piping into it.
5626 // however, don't suppress the throwing behavior for this.
5627 function onerror(er) {
5628 debug('onerror', er);
5629 unpipe();
5630 dest.removeListener('error', onerror);
5631 if (EE.listenerCount(dest, 'error') === 0)
5632 dest.emit('error', er);
5633 }
5634 // This is a brutally ugly hack to make sure that our error handler
5635 // is attached before any userland ones. NEVER DO THIS.
5636 if (!dest._events || !dest._events.error)
5637 dest.on('error', onerror);
5638 else if (isArray(dest._events.error))
5639 dest._events.error.unshift(onerror);
5640 else
5641 dest._events.error = [onerror, dest._events.error];
5642
5643
5644
5645 // Both close and finish should trigger unpipe, but only once.
5646 function onclose() {
5647 dest.removeListener('finish', onfinish);
5648 unpipe();
5649 }
5650 dest.once('close', onclose);
5651 function onfinish() {
5652 debug('onfinish');
5653 dest.removeListener('close', onclose);
5654 unpipe();
5655 }
5656 dest.once('finish', onfinish);
5657
5658 function unpipe() {
5659 debug('unpipe');
5660 src.unpipe(dest);
5661 }
5662
5663 // tell the dest that it's being piped to
5664 dest.emit('pipe', src);
5665
5666 // start the flow if it hasn't been started already.
5667 if (!state.flowing) {
5668 debug('pipe resume');
5669 src.resume();
5670 }
5671
5672 return dest;
5673 };
5674
5675 function pipeOnDrain(src) {
5676 return function() {
5677 var state = src._readableState;
5678 debug('pipeOnDrain', state.awaitDrain);
5679 if (state.awaitDrain)
5680 state.awaitDrain--;
5681 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5682 state.flowing = true;
5683 flow(src);
5684 }
5685 };
5686 }
5687
5688
5689 Readable.prototype.unpipe = function(dest) {
5690 var state = this._readableState;
5691
5692 // if we're not piping anywhere, then do nothing.
5693 if (state.pipesCount === 0)
5694 return this;
5695
5696 // just one destination. most common case.
5697 if (state.pipesCount === 1) {
5698 // passed in one, but it's not the right one.
5699 if (dest && dest !== state.pipes)
5700 return this;
5701
5702 if (!dest)
5703 dest = state.pipes;
5704
5705 // got a match.
5706 state.pipes = null;
5707 state.pipesCount = 0;
5708 state.flowing = false;
5709 if (dest)
5710 dest.emit('unpipe', this);
5711 return this;
5712 }
5713
5714 // slow case. multiple pipe destinations.
5715
5716 if (!dest) {
5717 // remove all.
5718 var dests = state.pipes;
5719 var len = state.pipesCount;
5720 state.pipes = null;
5721 state.pipesCount = 0;
5722 state.flowing = false;
5723
5724 for (var i = 0; i < len; i++)
5725 dests[i].emit('unpipe', this);
5726 return this;
5727 }
5728
5729 // try to find the right one.
5730 var i = indexOf(state.pipes, dest);
5731 if (i === -1)
5732 return this;
5733
5734 state.pipes.splice(i, 1);
5735 state.pipesCount -= 1;
5736 if (state.pipesCount === 1)
5737 state.pipes = state.pipes[0];
5738
5739 dest.emit('unpipe', this);
5740
5741 return this;
5742 };
5743
5744 // set up data events if they are asked for
5745 // Ensure readable listeners eventually get something
5746 Readable.prototype.on = function(ev, fn) {
5747 var res = Stream.prototype.on.call(this, ev, fn);
5748
5749 // If listening to data, and it has not explicitly been paused,
5750 // then call resume to start the flow of data on the next tick.
5751 if (ev === 'data' && false !== this._readableState.flowing) {
5752 this.resume();
5753 }
5754
5755 if (ev === 'readable' && this.readable) {
5756 var state = this._readableState;
5757 if (!state.readableListening) {
5758 state.readableListening = true;
5759 state.emittedReadable = false;
5760 state.needReadable = true;
5761 if (!state.reading) {
5762 var self = this;
5763 process.nextTick(function() {
5764 debug('readable nexttick read 0');
5765 self.read(0);
5766 });
5767 } else if (state.length) {
5768 emitReadable(this, state);
5769 }
5770 }
5771 }
5772
5773 return res;
5774 };
5775 Readable.prototype.addListener = Readable.prototype.on;
5776
5777 // pause() and resume() are remnants of the legacy readable stream API
5778 // If the user uses them, then switch into old mode.
5779 Readable.prototype.resume = function() {
5780 var state = this._readableState;
5781 if (!state.flowing) {
5782 debug('resume');
5783 state.flowing = true;
5784 if (!state.reading) {
5785 debug('resume read 0');
5786 this.read(0);
5787 }
5788 resume(this, state);
5789 }
5790 return this;
5791 };
5792
5793 function resume(stream, state) {
5794 if (!state.resumeScheduled) {
5795 state.resumeScheduled = true;
5796 process.nextTick(function() {
5797 resume_(stream, state);
5798 });
5799 }
5800 }
5801
5802 function resume_(stream, state) {
5803 state.resumeScheduled = false;
5804 stream.emit('resume');
5805 flow(stream);
5806 if (state.flowing && !state.reading)
5807 stream.read(0);
5808 }
5809
5810 Readable.prototype.pause = function() {
5811 debug('call pause flowing=%j', this._readableState.flowing);
5812 if (false !== this._readableState.flowing) {
5813 debug('pause');
5814 this._readableState.flowing = false;
5815 this.emit('pause');
5816 }
5817 return this;
5818 };
5819
5820 function flow(stream) {
5821 var state = stream._readableState;
5822 debug('flow', state.flowing);
5823 if (state.flowing) {
5824 do {
5825 var chunk = stream.read();
5826 } while (null !== chunk && state.flowing);
5827 }
5828 }
5829
5830 // wrap an old-style stream as the async data source.
5831 // This is *not* part of the readable stream interface.
5832 // It is an ugly unfortunate mess of history.
5833 Readable.prototype.wrap = function(stream) {
5834 var state = this._readableState;
5835 var paused = false;
5836
5837 var self = this;
5838 stream.on('end', function() {
5839 debug('wrapped end');
5840 if (state.decoder && !state.ended) {
5841 var chunk = state.decoder.end();
5842 if (chunk && chunk.length)
5843 self.push(chunk);
5844 }
5845
5846 self.push(null);
5847 });
5848
5849 stream.on('data', function(chunk) {
5850 debug('wrapped data');
5851 if (state.decoder)
5852 chunk = state.decoder.write(chunk);
5853 if (!chunk || !state.objectMode && !chunk.length)
5854 return;
5855
5856 var ret = self.push(chunk);
5857 if (!ret) {
5858 paused = true;
5859 stream.pause();
5860 }
5861 });
5862
5863 // proxy all the other methods.
5864 // important when wrapping filters and duplexes.
5865 for (var i in stream) {
5866 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5867 this[i] = function(method) { return function() {
5868 return stream[method].apply(stream, arguments);
5869 }}(i);
5870 }
5871 }
5872
5873 // proxy certain important events.
5874 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5875 forEach(events, function(ev) {
5876 stream.on(ev, self.emit.bind(self, ev));
5877 });
5878
5879 // when we try to consume some more bytes, simply unpause the
5880 // underlying stream.
5881 self._read = function(n) {
5882 debug('wrapped _read', n);
5883 if (paused) {
5884 paused = false;
5885 stream.resume();
5886 }
5887 };
5888
5889 return self;
5890 };
5891
5892
5893
5894 // exposed for testing purposes only.
5895 Readable._fromList = fromList;
5896
5897 // Pluck off n bytes from an array of buffers.
5898 // Length is the combined lengths of all the buffers in the list.
5899 function fromList(n, state) {
5900 var list = state.buffer;
5901 var length = state.length;
5902 var stringMode = !!state.decoder;
5903 var objectMode = !!state.objectMode;
5904 var ret;
5905
5906 // nothing in the list, definitely empty.
5907 if (list.length === 0)
5908 return null;
5909
5910 if (length === 0)
5911 ret = null;
5912 else if (objectMode)
5913 ret = list.shift();
5914 else if (!n || n >= length) {
5915 // read it all, truncate the array.
5916 if (stringMode)
5917 ret = list.join('');
5918 else
5919 ret = Buffer.concat(list, length);
5920 list.length = 0;
5921 } else {
5922 // read just some of it.
5923 if (n < list[0].length) {
5924 // just take a part of the first list item.
5925 // slice is the same for buffers and strings.
5926 var buf = list[0];
5927 ret = buf.slice(0, n);
5928 list[0] = buf.slice(n);
5929 } else if (n === list[0].length) {
5930 // first list is a perfect match
5931 ret = list.shift();
5932 } else {
5933 // complex case.
5934 // we have enough to cover it, but it spans past the first buffer.
5935 if (stringMode)
5936 ret = '';
5937 else
5938 ret = new Buffer(n);
5939
5940 var c = 0;
5941 for (var i = 0, l = list.length; i < l && c < n; i++) {
5942 var buf = list[0];
5943 var cpy = Math.min(n - c, buf.length);
5944
5945 if (stringMode)
5946 ret += buf.slice(0, cpy);
5947 else
5948 buf.copy(ret, c, 0, cpy);
5949
5950 if (cpy < buf.length)
5951 list[0] = buf.slice(cpy);
5952 else
5953 list.shift();
5954
5955 c += cpy;
5956 }
5957 }
5958 }
5959
5960 return ret;
5961 }
5962
5963 function endReadable(stream) {
5964 var state = stream._readableState;
5965
5966 // If we get here before consuming all the bytes, then that is a
5967 // bug in node. Should never happen.
5968 if (state.length > 0)
5969 throw new Error('endReadable called on non-empty stream');
5970
5971 if (!state.endEmitted) {
5972 state.ended = true;
5973 process.nextTick(function() {
5974 // Check that we didn't get one last unshift.
5975 if (!state.endEmitted && state.length === 0) {
5976 state.endEmitted = true;
5977 stream.readable = false;
5978 stream.emit('end');
5979 }
5980 });
5981 }
5982 }
5983
5984 function forEach (xs, f) {
5985 for (var i = 0, l = xs.length; i < l; i++) {
5986 f(xs[i], i);
5987 }
5988 }
5989
5990 function indexOf (xs, x) {
5991 for (var i = 0, l = xs.length; i < l; i++) {
5992 if (xs[i] === x) return i;
5993 }
5994 return -1;
5995 }
5996
5997 }).call(this,require('_process'))
5998 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
5999 // Copyright Joyent, Inc. and other Node contributors.
6000 //
6001 // Permission is hereby granted, free of charge, to any person obtaining a
6002 // copy of this software and associated documentation files (the
6003 // "Software"), to deal in the Software without restriction, including
6004 // without limitation the rights to use, copy, modify, merge, publish,
6005 // distribute, sublicense, and/or sell copies of the Software, and to permit
6006 // persons to whom the Software is furnished to do so, subject to the
6007 // following conditions:
6008 //
6009 // The above copyright notice and this permission notice shall be included
6010 // in all copies or substantial portions of the Software.
6011 //
6012 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6013 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6014 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6015 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6016 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6017 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6018 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6019
6020
6021 // a transform stream is a readable/writable stream where you do
6022 // something with the data. Sometimes it's called a "filter",
6023 // but that's not a great name for it, since that implies a thing where
6024 // some bits pass through, and others are simply ignored. (That would
6025 // be a valid example of a transform, of course.)
6026 //
6027 // While the output is causally related to the input, it's not a
6028 // necessarily symmetric or synchronous transformation. For example,
6029 // a zlib stream might take multiple plain-text writes(), and then
6030 // emit a single compressed chunk some time in the future.
6031 //
6032 // Here's how this works:
6033 //
6034 // The Transform stream has all the aspects of the readable and writable
6035 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6036 // internally, and returns false if there's a lot of pending writes
6037 // buffered up. When you call read(), that calls _read(n) until
6038 // there's enough pending readable data buffered up.
6039 //
6040 // In a transform stream, the written data is placed in a buffer. When
6041 // _read(n) is called, it transforms the queued up data, calling the
6042 // buffered _write cb's as it consumes chunks. If consuming a single
6043 // written chunk would result in multiple output chunks, then the first
6044 // outputted bit calls the readcb, and subsequent chunks just go into
6045 // the read buffer, and will cause it to emit 'readable' if necessary.
6046 //
6047 // This way, back-pressure is actually determined by the reading side,
6048 // since _read has to be called to start processing a new chunk. However,
6049 // a pathological inflate type of transform can cause excessive buffering
6050 // here. For example, imagine a stream where every byte of input is
6051 // interpreted as an integer from 0-255, and then results in that many
6052 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6053 // 1kb of data being output. In this case, you could write a very small
6054 // amount of input, and end up with a very large amount of output. In
6055 // such a pathological inflating mechanism, there'd be no way to tell
6056 // the system to stop doing the transform. A single 4MB write could
6057 // cause the system to run out of memory.
6058 //
6059 // However, even in such a pathological case, only a single written chunk
6060 // would be consumed, and then the rest would wait (un-transformed) until
6061 // the results of the previous transformed chunk were consumed.
6062
6063 module.exports = Transform;
6064
6065 var Duplex = require('./_stream_duplex');
6066
6067 /*<replacement>*/
6068 var util = require('core-util-is');
6069 util.inherits = require('inherits');
6070 /*</replacement>*/
6071
6072 util.inherits(Transform, Duplex);
6073
6074
6075 function TransformState(options, stream) {
6076 this.afterTransform = function(er, data) {
6077 return afterTransform(stream, er, data);
6078 };
6079
6080 this.needTransform = false;
6081 this.transforming = false;
6082 this.writecb = null;
6083 this.writechunk = null;
6084 }
6085
6086 function afterTransform(stream, er, data) {
6087 var ts = stream._transformState;
6088 ts.transforming = false;
6089
6090 var cb = ts.writecb;
6091
6092 if (!cb)
6093 return stream.emit('error', new Error('no writecb in Transform class'));
6094
6095 ts.writechunk = null;
6096 ts.writecb = null;
6097
6098 if (!util.isNullOrUndefined(data))
6099 stream.push(data);
6100
6101 if (cb)
6102 cb(er);
6103
6104 var rs = stream._readableState;
6105 rs.reading = false;
6106 if (rs.needReadable || rs.length < rs.highWaterMark) {
6107 stream._read(rs.highWaterMark);
6108 }
6109 }
6110
6111
6112 function Transform(options) {
6113 if (!(this instanceof Transform))
6114 return new Transform(options);
6115
6116 Duplex.call(this, options);
6117
6118 this._transformState = new TransformState(options, this);
6119
6120 // when the writable side finishes, then flush out anything remaining.
6121 var stream = this;
6122
6123 // start out asking for a readable event once data is transformed.
6124 this._readableState.needReadable = true;
6125
6126 // we have implemented the _read method, and done the other things
6127 // that Readable wants before the first _read call, so unset the
6128 // sync guard flag.
6129 this._readableState.sync = false;
6130
6131 this.once('prefinish', function() {
6132 if (util.isFunction(this._flush))
6133 this._flush(function(er) {
6134 done(stream, er);
6135 });
6136 else
6137 done(stream);
6138 });
6139 }
6140
6141 Transform.prototype.push = function(chunk, encoding) {
6142 this._transformState.needTransform = false;
6143 return Duplex.prototype.push.call(this, chunk, encoding);
6144 };
6145
6146 // This is the part where you do stuff!
6147 // override this function in implementation classes.
6148 // 'chunk' is an input chunk.
6149 //
6150 // Call `push(newChunk)` to pass along transformed output
6151 // to the readable side. You may call 'push' zero or more times.
6152 //
6153 // Call `cb(err)` when you are done with this chunk. If you pass
6154 // an error, then that'll put the hurt on the whole operation. If you
6155 // never call cb(), then you'll never get another chunk.
6156 Transform.prototype._transform = function(chunk, encoding, cb) {
6157 throw new Error('not implemented');
6158 };
6159
6160 Transform.prototype._write = function(chunk, encoding, cb) {
6161 var ts = this._transformState;
6162 ts.writecb = cb;
6163 ts.writechunk = chunk;
6164 ts.writeencoding = encoding;
6165 if (!ts.transforming) {
6166 var rs = this._readableState;
6167 if (ts.needTransform ||
6168 rs.needReadable ||
6169 rs.length < rs.highWaterMark)
6170 this._read(rs.highWaterMark);
6171 }
6172 };
6173
6174 // Doesn't matter what the args are here.
6175 // _transform does all the work.
6176 // That we got here means that the readable side wants more data.
6177 Transform.prototype._read = function(n) {
6178 var ts = this._transformState;
6179
6180 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6181 ts.transforming = true;
6182 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6183 } else {
6184 // mark that we need a transform, so that any data that comes in
6185 // will get processed, now that we've asked for it.
6186 ts.needTransform = true;
6187 }
6188 };
6189
6190
6191 function done(stream, er) {
6192 if (er)
6193 return stream.emit('error', er);
6194
6195 // if there's nothing in the write buffer, then that means
6196 // that nothing more will ever be provided
6197 var ws = stream._writableState;
6198 var ts = stream._transformState;
6199
6200 if (ws.length)
6201 throw new Error('calling transform done when ws.length != 0');
6202
6203 if (ts.transforming)
6204 throw new Error('calling transform done when still transforming');
6205
6206 return stream.push(null);
6207 }
6208
6209 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6210 (function (process){
6211 // Copyright Joyent, Inc. and other Node contributors.
6212 //
6213 // Permission is hereby granted, free of charge, to any person obtaining a
6214 // copy of this software and associated documentation files (the
6215 // "Software"), to deal in the Software without restriction, including
6216 // without limitation the rights to use, copy, modify, merge, publish,
6217 // distribute, sublicense, and/or sell copies of the Software, and to permit
6218 // persons to whom the Software is furnished to do so, subject to the
6219 // following conditions:
6220 //
6221 // The above copyright notice and this permission notice shall be included
6222 // in all copies or substantial portions of the Software.
6223 //
6224 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6225 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6226 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6227 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6228 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6229 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6230 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6231
6232 // A bit simpler than readable streams.
6233 // Implement an async ._write(chunk, cb), and it'll handle all
6234 // the drain event emission and buffering.
6235
6236 module.exports = Writable;
6237
6238 /*<replacement>*/
6239 var Buffer = require('buffer').Buffer;
6240 /*</replacement>*/
6241
6242 Writable.WritableState = WritableState;
6243
6244
6245 /*<replacement>*/
6246 var util = require('core-util-is');
6247 util.inherits = require('inherits');
6248 /*</replacement>*/
6249
6250 var Stream = require('stream');
6251
6252 util.inherits(Writable, Stream);
6253
6254 function WriteReq(chunk, encoding, cb) {
6255 this.chunk = chunk;
6256 this.encoding = encoding;
6257 this.callback = cb;
6258 }
6259
6260 function WritableState(options, stream) {
6261 var Duplex = require('./_stream_duplex');
6262
6263 options = options || {};
6264
6265 // the point at which write() starts returning false
6266 // Note: 0 is a valid value, means that we always return false if
6267 // the entire buffer is not flushed immediately on write()
6268 var hwm = options.highWaterMark;
6269 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6270 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6271
6272 // object stream flag to indicate whether or not this stream
6273 // contains buffers or objects.
6274 this.objectMode = !!options.objectMode;
6275
6276 if (stream instanceof Duplex)
6277 this.objectMode = this.objectMode || !!options.writableObjectMode;
6278
6279 // cast to ints.
6280 this.highWaterMark = ~~this.highWaterMark;
6281
6282 this.needDrain = false;
6283 // at the start of calling end()
6284 this.ending = false;
6285 // when end() has been called, and returned
6286 this.ended = false;
6287 // when 'finish' is emitted
6288 this.finished = false;
6289
6290 // should we decode strings into buffers before passing to _write?
6291 // this is here so that some node-core streams can optimize string
6292 // handling at a lower level.
6293 var noDecode = options.decodeStrings === false;
6294 this.decodeStrings = !noDecode;
6295
6296 // Crypto is kind of old and crusty. Historically, its default string
6297 // encoding is 'binary' so we have to make this configurable.
6298 // Everything else in the universe uses 'utf8', though.
6299 this.defaultEncoding = options.defaultEncoding || 'utf8';
6300
6301 // not an actual buffer we keep track of, but a measurement
6302 // of how much we're waiting to get pushed to some underlying
6303 // socket or file.
6304 this.length = 0;
6305
6306 // a flag to see when we're in the middle of a write.
6307 this.writing = false;
6308
6309 // when true all writes will be buffered until .uncork() call
6310 this.corked = 0;
6311
6312 // a flag to be able to tell if the onwrite cb is called immediately,
6313 // or on a later tick. We set this to true at first, because any
6314 // actions that shouldn't happen until "later" should generally also
6315 // not happen before the first write call.
6316 this.sync = true;
6317
6318 // a flag to know if we're processing previously buffered items, which
6319 // may call the _write() callback in the same tick, so that we don't
6320 // end up in an overlapped onwrite situation.
6321 this.bufferProcessing = false;
6322
6323 // the callback that's passed to _write(chunk,cb)
6324 this.onwrite = function(er) {
6325 onwrite(stream, er);
6326 };
6327
6328 // the callback that the user supplies to write(chunk,encoding,cb)
6329 this.writecb = null;
6330
6331 // the amount that is being written when _write is called.
6332 this.writelen = 0;
6333
6334 this.buffer = [];
6335
6336 // number of pending user-supplied write callbacks
6337 // this must be 0 before 'finish' can be emitted
6338 this.pendingcb = 0;
6339
6340 // emit prefinish if the only thing we're waiting for is _write cbs
6341 // This is relevant for synchronous Transform streams
6342 this.prefinished = false;
6343
6344 // True if the error was already emitted and should not be thrown again
6345 this.errorEmitted = false;
6346 }
6347
6348 function Writable(options) {
6349 var Duplex = require('./_stream_duplex');
6350
6351 // Writable ctor is applied to Duplexes, though they're not
6352 // instanceof Writable, they're instanceof Readable.
6353 if (!(this instanceof Writable) && !(this instanceof Duplex))
6354 return new Writable(options);
6355
6356 this._writableState = new WritableState(options, this);
6357
6358 // legacy.
6359 this.writable = true;
6360
6361 Stream.call(this);
6362 }
6363
6364 // Otherwise people can pipe Writable streams, which is just wrong.
6365 Writable.prototype.pipe = function() {
6366 this.emit('error', new Error('Cannot pipe. Not readable.'));
6367 };
6368
6369
6370 function writeAfterEnd(stream, state, cb) {
6371 var er = new Error('write after end');
6372 // TODO: defer error events consistently everywhere, not just the cb
6373 stream.emit('error', er);
6374 process.nextTick(function() {
6375 cb(er);
6376 });
6377 }
6378
6379 // If we get something that is not a buffer, string, null, or undefined,
6380 // and we're not in objectMode, then that's an error.
6381 // Otherwise stream chunks are all considered to be of length=1, and the
6382 // watermarks determine how many objects to keep in the buffer, rather than
6383 // how many bytes or characters.
6384 function validChunk(stream, state, chunk, cb) {
6385 var valid = true;
6386 if (!util.isBuffer(chunk) &&
6387 !util.isString(chunk) &&
6388 !util.isNullOrUndefined(chunk) &&
6389 !state.objectMode) {
6390 var er = new TypeError('Invalid non-string/buffer chunk');
6391 stream.emit('error', er);
6392 process.nextTick(function() {
6393 cb(er);
6394 });
6395 valid = false;
6396 }
6397 return valid;
6398 }
6399
6400 Writable.prototype.write = function(chunk, encoding, cb) {
6401 var state = this._writableState;
6402 var ret = false;
6403
6404 if (util.isFunction(encoding)) {
6405 cb = encoding;
6406 encoding = null;
6407 }
6408
6409 if (util.isBuffer(chunk))
6410 encoding = 'buffer';
6411 else if (!encoding)
6412 encoding = state.defaultEncoding;
6413
6414 if (!util.isFunction(cb))
6415 cb = function() {};
6416
6417 if (state.ended)
6418 writeAfterEnd(this, state, cb);
6419 else if (validChunk(this, state, chunk, cb)) {
6420 state.pendingcb++;
6421 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6422 }
6423
6424 return ret;
6425 };
6426
6427 Writable.prototype.cork = function() {
6428 var state = this._writableState;
6429
6430 state.corked++;
6431 };
6432
6433 Writable.prototype.uncork = function() {
6434 var state = this._writableState;
6435
6436 if (state.corked) {
6437 state.corked--;
6438
6439 if (!state.writing &&
6440 !state.corked &&
6441 !state.finished &&
6442 !state.bufferProcessing &&
6443 state.buffer.length)
6444 clearBuffer(this, state);
6445 }
6446 };
6447
6448 function decodeChunk(state, chunk, encoding) {
6449 if (!state.objectMode &&
6450 state.decodeStrings !== false &&
6451 util.isString(chunk)) {
6452 chunk = new Buffer(chunk, encoding);
6453 }
6454 return chunk;
6455 }
6456
6457 // if we're already writing something, then just put this
6458 // in the queue, and wait our turn. Otherwise, call _write
6459 // If we return false, then we need a drain event, so set that flag.
6460 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6461 chunk = decodeChunk(state, chunk, encoding);
6462 if (util.isBuffer(chunk))
6463 encoding = 'buffer';
6464 var len = state.objectMode ? 1 : chunk.length;
6465
6466 state.length += len;
6467
6468 var ret = state.length < state.highWaterMark;
6469 // we must ensure that previous needDrain will not be reset to false.
6470 if (!ret)
6471 state.needDrain = true;
6472
6473 if (state.writing || state.corked)
6474 state.buffer.push(new WriteReq(chunk, encoding, cb));
6475 else
6476 doWrite(stream, state, false, len, chunk, encoding, cb);
6477
6478 return ret;
6479 }
6480
6481 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6482 state.writelen = len;
6483 state.writecb = cb;
6484 state.writing = true;
6485 state.sync = true;
6486 if (writev)
6487 stream._writev(chunk, state.onwrite);
6488 else
6489 stream._write(chunk, encoding, state.onwrite);
6490 state.sync = false;
6491 }
6492
6493 function onwriteError(stream, state, sync, er, cb) {
6494 if (sync)
6495 process.nextTick(function() {
6496 state.pendingcb--;
6497 cb(er);
6498 });
6499 else {
6500 state.pendingcb--;
6501 cb(er);
6502 }
6503
6504 stream._writableState.errorEmitted = true;
6505 stream.emit('error', er);
6506 }
6507
6508 function onwriteStateUpdate(state) {
6509 state.writing = false;
6510 state.writecb = null;
6511 state.length -= state.writelen;
6512 state.writelen = 0;
6513 }
6514
6515 function onwrite(stream, er) {
6516 var state = stream._writableState;
6517 var sync = state.sync;
6518 var cb = state.writecb;
6519
6520 onwriteStateUpdate(state);
6521
6522 if (er)
6523 onwriteError(stream, state, sync, er, cb);
6524 else {
6525 // Check if we're actually ready to finish, but don't emit yet
6526 var finished = needFinish(stream, state);
6527
6528 if (!finished &&
6529 !state.corked &&
6530 !state.bufferProcessing &&
6531 state.buffer.length) {
6532 clearBuffer(stream, state);
6533 }
6534
6535 if (sync) {
6536 process.nextTick(function() {
6537 afterWrite(stream, state, finished, cb);
6538 });
6539 } else {
6540 afterWrite(stream, state, finished, cb);
6541 }
6542 }
6543 }
6544
6545 function afterWrite(stream, state, finished, cb) {
6546 if (!finished)
6547 onwriteDrain(stream, state);
6548 state.pendingcb--;
6549 cb();
6550 finishMaybe(stream, state);
6551 }
6552
6553 // Must force callback to be called on nextTick, so that we don't
6554 // emit 'drain' before the write() consumer gets the 'false' return
6555 // value, and has a chance to attach a 'drain' listener.
6556 function onwriteDrain(stream, state) {
6557 if (state.length === 0 && state.needDrain) {
6558 state.needDrain = false;
6559 stream.emit('drain');
6560 }
6561 }
6562
6563
6564 // if there's something in the buffer waiting, then process it
6565 function clearBuffer(stream, state) {
6566 state.bufferProcessing = true;
6567
6568 if (stream._writev && state.buffer.length > 1) {
6569 // Fast case, write everything using _writev()
6570 var cbs = [];
6571 for (var c = 0; c < state.buffer.length; c++)
6572 cbs.push(state.buffer[c].callback);
6573
6574 // count the one we are adding, as well.
6575 // TODO(isaacs) clean this up
6576 state.pendingcb++;
6577 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6578 for (var i = 0; i < cbs.length; i++) {
6579 state.pendingcb--;
6580 cbs[i](err);
6581 }
6582 });
6583
6584 // Clear buffer
6585 state.buffer = [];
6586 } else {
6587 // Slow case, write chunks one-by-one
6588 for (var c = 0; c < state.buffer.length; c++) {
6589 var entry = state.buffer[c];
6590 var chunk = entry.chunk;
6591 var encoding = entry.encoding;
6592 var cb = entry.callback;
6593 var len = state.objectMode ? 1 : chunk.length;
6594
6595 doWrite(stream, state, false, len, chunk, encoding, cb);
6596
6597 // if we didn't call the onwrite immediately, then
6598 // it means that we need to wait until it does.
6599 // also, that means that the chunk and cb are currently
6600 // being processed, so move the buffer counter past them.
6601 if (state.writing) {
6602 c++;
6603 break;
6604 }
6605 }
6606
6607 if (c < state.buffer.length)
6608 state.buffer = state.buffer.slice(c);
6609 else
6610 state.buffer.length = 0;
6611 }
6612
6613 state.bufferProcessing = false;
6614 }
6615
6616 Writable.prototype._write = function(chunk, encoding, cb) {
6617 cb(new Error('not implemented'));
6618
6619 };
6620
6621 Writable.prototype._writev = null;
6622
6623 Writable.prototype.end = function(chunk, encoding, cb) {
6624 var state = this._writableState;
6625
6626 if (util.isFunction(chunk)) {
6627 cb = chunk;
6628 chunk = null;
6629 encoding = null;
6630 } else if (util.isFunction(encoding)) {
6631 cb = encoding;
6632 encoding = null;
6633 }
6634
6635 if (!util.isNullOrUndefined(chunk))
6636 this.write(chunk, encoding);
6637
6638 // .end() fully uncorks
6639 if (state.corked) {
6640 state.corked = 1;
6641 this.uncork();
6642 }
6643
6644 // ignore unnecessary end() calls.
6645 if (!state.ending && !state.finished)
6646 endWritable(this, state, cb);
6647 };
6648
6649
6650 function needFinish(stream, state) {
6651 return (state.ending &&
6652 state.length === 0 &&
6653 !state.finished &&
6654 !state.writing);
6655 }
6656
6657 function prefinish(stream, state) {
6658 if (!state.prefinished) {
6659 state.prefinished = true;
6660 stream.emit('prefinish');
6661 }
6662 }
6663
6664 function finishMaybe(stream, state) {
6665 var need = needFinish(stream, state);
6666 if (need) {
6667 if (state.pendingcb === 0) {
6668 prefinish(stream, state);
6669 state.finished = true;
6670 stream.emit('finish');
6671 } else
6672 prefinish(stream, state);
6673 }
6674 return need;
6675 }
6676
6677 function endWritable(stream, state, cb) {
6678 state.ending = true;
6679 finishMaybe(stream, state);
6680 if (cb) {
6681 if (state.finished)
6682 process.nextTick(cb);
6683 else
6684 stream.once('finish', cb);
6685 }
6686 state.ended = true;
6687 }
6688
6689 }).call(this,require('_process'))
6690 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6691 (function (Buffer){
6692 // Copyright Joyent, Inc. and other Node contributors.
6693 //
6694 // Permission is hereby granted, free of charge, to any person obtaining a
6695 // copy of this software and associated documentation files (the
6696 // "Software"), to deal in the Software without restriction, including
6697 // without limitation the rights to use, copy, modify, merge, publish,
6698 // distribute, sublicense, and/or sell copies of the Software, and to permit
6699 // persons to whom the Software is furnished to do so, subject to the
6700 // following conditions:
6701 //
6702 // The above copyright notice and this permission notice shall be included
6703 // in all copies or substantial portions of the Software.
6704 //
6705 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6706 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6707 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6708 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6709 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6710 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6711 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6712
6713 // NOTE: These type checking functions intentionally don't use `instanceof`
6714 // because it is fragile and can be easily faked with `Object.create()`.
6715 function isArray(ar) {
6716 return Array.isArray(ar);
6717 }
6718 exports.isArray = isArray;
6719
6720 function isBoolean(arg) {
6721 return typeof arg === 'boolean';
6722 }
6723 exports.isBoolean = isBoolean;
6724
6725 function isNull(arg) {
6726 return arg === null;
6727 }
6728 exports.isNull = isNull;
6729
6730 function isNullOrUndefined(arg) {
6731 return arg == null;
6732 }
6733 exports.isNullOrUndefined = isNullOrUndefined;
6734
6735 function isNumber(arg) {
6736 return typeof arg === 'number';
6737 }
6738 exports.isNumber = isNumber;
6739
6740 function isString(arg) {
6741 return typeof arg === 'string';
6742 }
6743 exports.isString = isString;
6744
6745 function isSymbol(arg) {
6746 return typeof arg === 'symbol';
6747 }
6748 exports.isSymbol = isSymbol;
6749
6750 function isUndefined(arg) {
6751 return arg === void 0;
6752 }
6753 exports.isUndefined = isUndefined;
6754
6755 function isRegExp(re) {
6756 return isObject(re) && objectToString(re) === '[object RegExp]';
6757 }
6758 exports.isRegExp = isRegExp;
6759
6760 function isObject(arg) {
6761 return typeof arg === 'object' && arg !== null;
6762 }
6763 exports.isObject = isObject;
6764
6765 function isDate(d) {
6766 return isObject(d) && objectToString(d) === '[object Date]';
6767 }
6768 exports.isDate = isDate;
6769
6770 function isError(e) {
6771 return isObject(e) &&
6772 (objectToString(e) === '[object Error]' || e instanceof Error);
6773 }
6774 exports.isError = isError;
6775
6776 function isFunction(arg) {
6777 return typeof arg === 'function';
6778 }
6779 exports.isFunction = isFunction;
6780
6781 function isPrimitive(arg) {
6782 return arg === null ||
6783 typeof arg === 'boolean' ||
6784 typeof arg === 'number' ||
6785 typeof arg === 'string' ||
6786 typeof arg === 'symbol' || // ES6 symbol
6787 typeof arg === 'undefined';
6788 }
6789 exports.isPrimitive = isPrimitive;
6790
6791 function isBuffer(arg) {
6792 return Buffer.isBuffer(arg);
6793 }
6794 exports.isBuffer = isBuffer;
6795
6796 function objectToString(o) {
6797 return Object.prototype.toString.call(o);
6798 }
6799 }).call(this,require("buffer").Buffer)
6800 },{"buffer":7}],22:[function(require,module,exports){
6801 module.exports = require("./lib/_stream_passthrough.js")
6802
6803 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6804 exports = module.exports = require('./lib/_stream_readable.js');
6805 exports.Stream = require('stream');
6806 exports.Readable = exports;
6807 exports.Writable = require('./lib/_stream_writable.js');
6808 exports.Duplex = require('./lib/_stream_duplex.js');
6809 exports.Transform = require('./lib/_stream_transform.js');
6810 exports.PassThrough = require('./lib/_stream_passthrough.js');
6811
6812 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
6813 module.exports = require("./lib/_stream_transform.js")
6814
6815 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6816 module.exports = require("./lib/_stream_writable.js")
6817
6818 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6819 // Copyright Joyent, Inc. and other Node contributors.
6820 //
6821 // Permission is hereby granted, free of charge, to any person obtaining a
6822 // copy of this software and associated documentation files (the
6823 // "Software"), to deal in the Software without restriction, including
6824 // without limitation the rights to use, copy, modify, merge, publish,
6825 // distribute, sublicense, and/or sell copies of the Software, and to permit
6826 // persons to whom the Software is furnished to do so, subject to the
6827 // following conditions:
6828 //
6829 // The above copyright notice and this permission notice shall be included
6830 // in all copies or substantial portions of the Software.
6831 //
6832 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6833 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6834 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6835 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6836 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6837 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6838 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6839
6840 module.exports = Stream;
6841
6842 var EE = require('events').EventEmitter;
6843 var inherits = require('inherits');
6844
6845 inherits(Stream, EE);
6846 Stream.Readable = require('readable-stream/readable.js');
6847 Stream.Writable = require('readable-stream/writable.js');
6848 Stream.Duplex = require('readable-stream/duplex.js');
6849 Stream.Transform = require('readable-stream/transform.js');
6850 Stream.PassThrough = require('readable-stream/passthrough.js');
6851
6852 // Backwards-compat with node 0.4.x
6853 Stream.Stream = Stream;
6854
6855
6856
6857 // old-style streams. Note that the pipe method (the only relevant
6858 // part of this class) is overridden in the Readable class.
6859
6860 function Stream() {
6861 EE.call(this);
6862 }
6863
6864 Stream.prototype.pipe = function(dest, options) {
6865 var source = this;
6866
6867 function ondata(chunk) {
6868 if (dest.writable) {
6869 if (false === dest.write(chunk) && source.pause) {
6870 source.pause();
6871 }
6872 }
6873 }
6874
6875 source.on('data', ondata);
6876
6877 function ondrain() {
6878 if (source.readable && source.resume) {
6879 source.resume();
6880 }
6881 }
6882
6883 dest.on('drain', ondrain);
6884
6885 // If the 'end' option is not supplied, dest.end() will be called when
6886 // source gets the 'end' or 'close' events. Only dest.end() once.
6887 if (!dest._isStdio && (!options || options.end !== false)) {
6888 source.on('end', onend);
6889 source.on('close', onclose);
6890 }
6891
6892 var didOnEnd = false;
6893 function onend() {
6894 if (didOnEnd) return;
6895 didOnEnd = true;
6896
6897 dest.end();
6898 }
6899
6900
6901 function onclose() {
6902 if (didOnEnd) return;
6903 didOnEnd = true;
6904
6905 if (typeof dest.destroy === 'function') dest.destroy();
6906 }
6907
6908 // don't leave dangling pipes when there are errors.
6909 function onerror(er) {
6910 cleanup();
6911 if (EE.listenerCount(this, 'error') === 0) {
6912 throw er; // Unhandled stream error in pipe.
6913 }
6914 }
6915
6916 source.on('error', onerror);
6917 dest.on('error', onerror);
6918
6919 // remove all the event listeners that were added.
6920 function cleanup() {
6921 source.removeListener('data', ondata);
6922 dest.removeListener('drain', ondrain);
6923
6924 source.removeListener('end', onend);
6925 source.removeListener('close', onclose);
6926
6927 source.removeListener('error', onerror);
6928 dest.removeListener('error', onerror);
6929
6930 source.removeListener('end', cleanup);
6931 source.removeListener('close', cleanup);
6932
6933 dest.removeListener('close', cleanup);
6934 }
6935
6936 source.on('end', cleanup);
6937 source.on('close', cleanup);
6938
6939 dest.on('close', cleanup);
6940
6941 dest.emit('pipe', source);
6942
6943 // Allow for unix-like usage: A.pipe(B).pipe(C)
6944 return dest;
6945 };
6946
6947 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
6948 // Copyright Joyent, Inc. and other Node contributors.
6949 //
6950 // Permission is hereby granted, free of charge, to any person obtaining a
6951 // copy of this software and associated documentation files (the
6952 // "Software"), to deal in the Software without restriction, including
6953 // without limitation the rights to use, copy, modify, merge, publish,
6954 // distribute, sublicense, and/or sell copies of the Software, and to permit
6955 // persons to whom the Software is furnished to do so, subject to the
6956 // following conditions:
6957 //
6958 // The above copyright notice and this permission notice shall be included
6959 // in all copies or substantial portions of the Software.
6960 //
6961 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6962 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6963 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6964 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6965 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6966 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6967 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6968
6969 var Buffer = require('buffer').Buffer;
6970
6971 var isBufferEncoding = Buffer.isEncoding
6972 || function(encoding) {
6973 switch (encoding && encoding.toLowerCase()) {
6974 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
6975 default: return false;
6976 }
6977 }
6978
6979
6980 function assertEncoding(encoding) {
6981 if (encoding && !isBufferEncoding(encoding)) {
6982 throw new Error('Unknown encoding: ' + encoding);
6983 }
6984 }
6985
6986 // StringDecoder provides an interface for efficiently splitting a series of
6987 // buffers into a series of JS strings without breaking apart multi-byte
6988 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6989 //
6990 // @TODO Handling all encodings inside a single object makes it very difficult
6991 // to reason about this code, so it should be split up in the future.
6992 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6993 // points as used by CESU-8.
6994 var StringDecoder = exports.StringDecoder = function(encoding) {
6995 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6996 assertEncoding(encoding);
6997 switch (this.encoding) {
6998 case 'utf8':
6999 // CESU-8 represents each of Surrogate Pair by 3-bytes
7000 this.surrogateSize = 3;
7001 break;
7002 case 'ucs2':
7003 case 'utf16le':
7004 // UTF-16 represents each of Surrogate Pair by 2-bytes
7005 this.surrogateSize = 2;
7006 this.detectIncompleteChar = utf16DetectIncompleteChar;
7007 break;
7008 case 'base64':
7009 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7010 this.surrogateSize = 3;
7011 this.detectIncompleteChar = base64DetectIncompleteChar;
7012 break;
7013 default:
7014 this.write = passThroughWrite;
7015 return;
7016 }
7017
7018 // Enough space to store all bytes of a single character. UTF-8 needs 4
7019 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7020 this.charBuffer = new Buffer(6);
7021 // Number of bytes received for the current incomplete multi-byte character.
7022 this.charReceived = 0;
7023 // Number of bytes expected for the current incomplete multi-byte character.
7024 this.charLength = 0;
7025 };
7026
7027
7028 // write decodes the given buffer and returns it as JS string that is
7029 // guaranteed to not contain any partial multi-byte characters. Any partial
7030 // character found at the end of the buffer is buffered up, and will be
7031 // returned when calling write again with the remaining bytes.
7032 //
7033 // Note: Converting a Buffer containing an orphan surrogate to a String
7034 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7035 // Buffer#write) will replace incomplete surrogates with the unicode
7036 // replacement character. See https://codereview.chromium.org/121173009/ .
7037 StringDecoder.prototype.write = function(buffer) {
7038 var charStr = '';
7039 // if our last write ended with an incomplete multibyte character
7040 while (this.charLength) {
7041 // determine how many remaining bytes this buffer has to offer for this char
7042 var available = (buffer.length >= this.charLength - this.charReceived) ?
7043 this.charLength - this.charReceived :
7044 buffer.length;
7045
7046 // add the new bytes to the char buffer
7047 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7048 this.charReceived += available;
7049
7050 if (this.charReceived < this.charLength) {
7051 // still not enough chars in this buffer? wait for more ...
7052 return '';
7053 }
7054
7055 // remove bytes belonging to the current character from the buffer
7056 buffer = buffer.slice(available, buffer.length);
7057
7058 // get the character that was split
7059 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7060
7061 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7062 var charCode = charStr.charCodeAt(charStr.length - 1);
7063 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7064 this.charLength += this.surrogateSize;
7065 charStr = '';
7066 continue;
7067 }
7068 this.charReceived = this.charLength = 0;
7069
7070 // if there are no more bytes in this buffer, just emit our char
7071 if (buffer.length === 0) {
7072 return charStr;
7073 }
7074 break;
7075 }
7076
7077 // determine and set charLength / charReceived
7078 this.detectIncompleteChar(buffer);
7079
7080 var end = buffer.length;
7081 if (this.charLength) {
7082 // buffer the incomplete character bytes we got
7083 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7084 end -= this.charReceived;
7085 }
7086
7087 charStr += buffer.toString(this.encoding, 0, end);
7088
7089 var end = charStr.length - 1;
7090 var charCode = charStr.charCodeAt(end);
7091 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7092 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7093 var size = this.surrogateSize;
7094 this.charLength += size;
7095 this.charReceived += size;
7096 this.charBuffer.copy(this.charBuffer, size, 0, size);
7097 buffer.copy(this.charBuffer, 0, 0, size);
7098 return charStr.substring(0, end);
7099 }
7100
7101 // or just emit the charStr
7102 return charStr;
7103 };
7104
7105 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7106 // the end of the given buffer. If so, it sets this.charLength to the byte
7107 // length that character, and sets this.charReceived to the number of bytes
7108 // that are available for this character.
7109 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7110 // determine how many bytes we have to check at the end of this buffer
7111 var i = (buffer.length >= 3) ? 3 : buffer.length;
7112
7113 // Figure out if one of the last i bytes of our buffer announces an
7114 // incomplete char.
7115 for (; i > 0; i--) {
7116 var c = buffer[buffer.length - i];
7117
7118 // See http://en.wikipedia.org/wiki/UTF-8#Description
7119
7120 // 110XXXXX
7121 if (i == 1 && c >> 5 == 0x06) {
7122 this.charLength = 2;
7123 break;
7124 }
7125
7126 // 1110XXXX
7127 if (i <= 2 && c >> 4 == 0x0E) {
7128 this.charLength = 3;
7129 break;
7130 }
7131
7132 // 11110XXX
7133 if (i <= 3 && c >> 3 == 0x1E) {
7134 this.charLength = 4;
7135 break;
7136 }
7137 }
7138 this.charReceived = i;
7139 };
7140
7141 StringDecoder.prototype.end = function(buffer) {
7142 var res = '';
7143 if (buffer && buffer.length)
7144 res = this.write(buffer);
7145
7146 if (this.charReceived) {
7147 var cr = this.charReceived;
7148 var buf = this.charBuffer;
7149 var enc = this.encoding;
7150 res += buf.slice(0, cr).toString(enc);
7151 }
7152
7153 return res;
7154 };
7155
7156 function passThroughWrite(buffer) {
7157 return buffer.toString(this.encoding);
7158 }
7159
7160 function utf16DetectIncompleteChar(buffer) {
7161 this.charReceived = buffer.length % 2;
7162 this.charLength = this.charReceived ? 2 : 0;
7163 }
7164
7165 function base64DetectIncompleteChar(buffer) {
7166 this.charReceived = buffer.length % 3;
7167 this.charLength = this.charReceived ? 3 : 0;
7168 }
7169
7170 },{"buffer":7}],28:[function(require,module,exports){
7171 module.exports = function isBuffer(arg) {
7172 return arg && typeof arg === 'object'
7173 && typeof arg.copy === 'function'
7174 && typeof arg.fill === 'function'
7175 && typeof arg.readUInt8 === 'function';
7176 }
7177 },{}],29:[function(require,module,exports){
7178 (function (process,global){
7179 // Copyright Joyent, Inc. and other Node contributors.
7180 //
7181 // Permission is hereby granted, free of charge, to any person obtaining a
7182 // copy of this software and associated documentation files (the
7183 // "Software"), to deal in the Software without restriction, including
7184 // without limitation the rights to use, copy, modify, merge, publish,
7185 // distribute, sublicense, and/or sell copies of the Software, and to permit
7186 // persons to whom the Software is furnished to do so, subject to the
7187 // following conditions:
7188 //
7189 // The above copyright notice and this permission notice shall be included
7190 // in all copies or substantial portions of the Software.
7191 //
7192 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7193 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7194 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7195 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7196 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7197 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7198 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7199
7200 var formatRegExp = /%[sdj%]/g;
7201 exports.format = function(f) {
7202 if (!isString(f)) {
7203 var objects = [];
7204 for (var i = 0; i < arguments.length; i++) {
7205 objects.push(inspect(arguments[i]));
7206 }
7207 return objects.join(' ');
7208 }
7209
7210 var i = 1;
7211 var args = arguments;
7212 var len = args.length;
7213 var str = String(f).replace(formatRegExp, function(x) {
7214 if (x === '%%') return '%';
7215 if (i >= len) return x;
7216 switch (x) {
7217 case '%s': return String(args[i++]);
7218 case '%d': return Number(args[i++]);
7219 case '%j':
7220 try {
7221 return JSON.stringify(args[i++]);
7222 } catch (_) {
7223 return '[Circular]';
7224 }
7225 default:
7226 return x;
7227 }
7228 });
7229 for (var x = args[i]; i < len; x = args[++i]) {
7230 if (isNull(x) || !isObject(x)) {
7231 str += ' ' + x;
7232 } else {
7233 str += ' ' + inspect(x);
7234 }
7235 }
7236 return str;
7237 };
7238
7239
7240 // Mark that a method should not be used.
7241 // Returns a modified function which warns once by default.
7242 // If --no-deprecation is set, then it is a no-op.
7243 exports.deprecate = function(fn, msg) {
7244 // Allow for deprecating things in the process of starting up.
7245 if (isUndefined(global.process)) {
7246 return function() {
7247 return exports.deprecate(fn, msg).apply(this, arguments);
7248 };
7249 }
7250
7251 if (process.noDeprecation === true) {
7252 return fn;
7253 }
7254
7255 var warned = false;
7256 function deprecated() {
7257 if (!warned) {
7258 if (process.throwDeprecation) {
7259 throw new Error(msg);
7260 } else if (process.traceDeprecation) {
7261 console.trace(msg);
7262 } else {
7263 console.error(msg);
7264 }
7265 warned = true;
7266 }
7267 return fn.apply(this, arguments);
7268 }
7269
7270 return deprecated;
7271 };
7272
7273
7274 var debugs = {};
7275 var debugEnviron;
7276 exports.debuglog = function(set) {
7277 if (isUndefined(debugEnviron))
7278 debugEnviron = process.env.NODE_DEBUG || '';
7279 set = set.toUpperCase();
7280 if (!debugs[set]) {
7281 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7282 var pid = process.pid;
7283 debugs[set] = function() {
7284 var msg = exports.format.apply(exports, arguments);
7285 console.error('%s %d: %s', set, pid, msg);
7286 };
7287 } else {
7288 debugs[set] = function() {};
7289 }
7290 }
7291 return debugs[set];
7292 };
7293
7294
7295 /**
7296 * Echos the value of a value. Trys to print the value out
7297 * in the best way possible given the different types.
7298 *
7299 * @param {Object} obj The object to print out.
7300 * @param {Object} opts Optional options object that alters the output.
7301 */
7302 /* legacy: obj, showHidden, depth, colors*/
7303 function inspect(obj, opts) {
7304 // default options
7305 var ctx = {
7306 seen: [],
7307 stylize: stylizeNoColor
7308 };
7309 // legacy...
7310 if (arguments.length >= 3) ctx.depth = arguments[2];
7311 if (arguments.length >= 4) ctx.colors = arguments[3];
7312 if (isBoolean(opts)) {
7313 // legacy...
7314 ctx.showHidden = opts;
7315 } else if (opts) {
7316 // got an "options" object
7317 exports._extend(ctx, opts);
7318 }
7319 // set default options
7320 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7321 if (isUndefined(ctx.depth)) ctx.depth = 2;
7322 if (isUndefined(ctx.colors)) ctx.colors = false;
7323 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7324 if (ctx.colors) ctx.stylize = stylizeWithColor;
7325 return formatValue(ctx, obj, ctx.depth);
7326 }
7327 exports.inspect = inspect;
7328
7329
7330 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7331 inspect.colors = {
7332 'bold' : [1, 22],
7333 'italic' : [3, 23],
7334 'underline' : [4, 24],
7335 'inverse' : [7, 27],
7336 'white' : [37, 39],
7337 'grey' : [90, 39],
7338 'black' : [30, 39],
7339 'blue' : [34, 39],
7340 'cyan' : [36, 39],
7341 'green' : [32, 39],
7342 'magenta' : [35, 39],
7343 'red' : [31, 39],
7344 'yellow' : [33, 39]
7345 };
7346
7347 // Don't use 'blue' not visible on cmd.exe
7348 inspect.styles = {
7349 'special': 'cyan',
7350 'number': 'yellow',
7351 'boolean': 'yellow',
7352 'undefined': 'grey',
7353 'null': 'bold',
7354 'string': 'green',
7355 'date': 'magenta',
7356 // "name": intentionally not styling
7357 'regexp': 'red'
7358 };
7359
7360
7361 function stylizeWithColor(str, styleType) {
7362 var style = inspect.styles[styleType];
7363
7364 if (style) {
7365 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7366 '\u001b[' + inspect.colors[style][1] + 'm';
7367 } else {
7368 return str;
7369 }
7370 }
7371
7372
7373 function stylizeNoColor(str, styleType) {
7374 return str;
7375 }
7376
7377
7378 function arrayToHash(array) {
7379 var hash = {};
7380
7381 array.forEach(function(val, idx) {
7382 hash[val] = true;
7383 });
7384
7385 return hash;
7386 }
7387
7388
7389 function formatValue(ctx, value, recurseTimes) {
7390 // Provide a hook for user-specified inspect functions.
7391 // Check that value is an object with an inspect function on it
7392 if (ctx.customInspect &&
7393 value &&
7394 isFunction(value.inspect) &&
7395 // Filter out the util module, it's inspect function is special
7396 value.inspect !== exports.inspect &&
7397 // Also filter out any prototype objects using the circular check.
7398 !(value.constructor && value.constructor.prototype === value)) {
7399 var ret = value.inspect(recurseTimes, ctx);
7400 if (!isString(ret)) {
7401 ret = formatValue(ctx, ret, recurseTimes);
7402 }
7403 return ret;
7404 }
7405
7406 // Primitive types cannot have properties
7407 var primitive = formatPrimitive(ctx, value);
7408 if (primitive) {
7409 return primitive;
7410 }
7411
7412 // Look up the keys of the object.
7413 var keys = Object.keys(value);
7414 var visibleKeys = arrayToHash(keys);
7415
7416 if (ctx.showHidden) {
7417 keys = Object.getOwnPropertyNames(value);
7418 }
7419
7420 // IE doesn't make error fields non-enumerable
7421 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7422 if (isError(value)
7423 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7424 return formatError(value);
7425 }
7426
7427 // Some type of object without properties can be shortcutted.
7428 if (keys.length === 0) {
7429 if (isFunction(value)) {
7430 var name = value.name ? ': ' + value.name : '';
7431 return ctx.stylize('[Function' + name + ']', 'special');
7432 }
7433 if (isRegExp(value)) {
7434 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7435 }
7436 if (isDate(value)) {
7437 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7438 }
7439 if (isError(value)) {
7440 return formatError(value);
7441 }
7442 }
7443
7444 var base = '', array = false, braces = ['{', '}'];
7445
7446 // Make Array say that they are Array
7447 if (isArray(value)) {
7448 array = true;
7449 braces = ['[', ']'];
7450 }
7451
7452 // Make functions say that they are functions
7453 if (isFunction(value)) {
7454 var n = value.name ? ': ' + value.name : '';
7455 base = ' [Function' + n + ']';
7456 }
7457
7458 // Make RegExps say that they are RegExps
7459 if (isRegExp(value)) {
7460 base = ' ' + RegExp.prototype.toString.call(value);
7461 }
7462
7463 // Make dates with properties first say the date
7464 if (isDate(value)) {
7465 base = ' ' + Date.prototype.toUTCString.call(value);
7466 }
7467
7468 // Make error with message first say the error
7469 if (isError(value)) {
7470 base = ' ' + formatError(value);
7471 }
7472
7473 if (keys.length === 0 && (!array || value.length == 0)) {
7474 return braces[0] + base + braces[1];
7475 }
7476
7477 if (recurseTimes < 0) {
7478 if (isRegExp(value)) {
7479 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7480 } else {
7481 return ctx.stylize('[Object]', 'special');
7482 }
7483 }
7484
7485 ctx.seen.push(value);
7486
7487 var output;
7488 if (array) {
7489 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7490 } else {
7491 output = keys.map(function(key) {
7492 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7493 });
7494 }
7495
7496 ctx.seen.pop();
7497
7498 return reduceToSingleString(output, base, braces);
7499 }
7500
7501
7502 function formatPrimitive(ctx, value) {
7503 if (isUndefined(value))
7504 return ctx.stylize('undefined', 'undefined');
7505 if (isString(value)) {
7506 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7507 .replace(/'/g, "\\'")
7508 .replace(/\\"/g, '"') + '\'';
7509 return ctx.stylize(simple, 'string');
7510 }
7511 if (isNumber(value))
7512 return ctx.stylize('' + value, 'number');
7513 if (isBoolean(value))
7514 return ctx.stylize('' + value, 'boolean');
7515 // For some reason typeof null is "object", so special case here.
7516 if (isNull(value))
7517 return ctx.stylize('null', 'null');
7518 }
7519
7520
7521 function formatError(value) {
7522 return '[' + Error.prototype.toString.call(value) + ']';
7523 }
7524
7525
7526 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7527 var output = [];
7528 for (var i = 0, l = value.length; i < l; ++i) {
7529 if (hasOwnProperty(value, String(i))) {
7530 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7531 String(i), true));
7532 } else {
7533 output.push('');
7534 }
7535 }
7536 keys.forEach(function(key) {
7537 if (!key.match(/^\d+$/)) {
7538 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7539 key, true));
7540 }
7541 });
7542 return output;
7543 }
7544
7545
7546 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7547 var name, str, desc;
7548 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7549 if (desc.get) {
7550 if (desc.set) {
7551 str = ctx.stylize('[Getter/Setter]', 'special');
7552 } else {
7553 str = ctx.stylize('[Getter]', 'special');
7554 }
7555 } else {
7556 if (desc.set) {
7557 str = ctx.stylize('[Setter]', 'special');
7558 }
7559 }
7560 if (!hasOwnProperty(visibleKeys, key)) {
7561 name = '[' + key + ']';
7562 }
7563 if (!str) {
7564 if (ctx.seen.indexOf(desc.value) < 0) {
7565 if (isNull(recurseTimes)) {
7566 str = formatValue(ctx, desc.value, null);
7567 } else {
7568 str = formatValue(ctx, desc.value, recurseTimes - 1);
7569 }
7570 if (str.indexOf('\n') > -1) {
7571 if (array) {
7572 str = str.split('\n').map(function(line) {
7573 return ' ' + line;
7574 }).join('\n').substr(2);
7575 } else {
7576 str = '\n' + str.split('\n').map(function(line) {
7577 return ' ' + line;
7578 }).join('\n');
7579 }
7580 }
7581 } else {
7582 str = ctx.stylize('[Circular]', 'special');
7583 }
7584 }
7585 if (isUndefined(name)) {
7586 if (array && key.match(/^\d+$/)) {
7587 return str;
7588 }
7589 name = JSON.stringify('' + key);
7590 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7591 name = name.substr(1, name.length - 2);
7592 name = ctx.stylize(name, 'name');
7593 } else {
7594 name = name.replace(/'/g, "\\'")
7595 .replace(/\\"/g, '"')
7596 .replace(/(^"|"$)/g, "'");
7597 name = ctx.stylize(name, 'string');
7598 }
7599 }
7600
7601 return name + ': ' + str;
7602 }
7603
7604
7605 function reduceToSingleString(output, base, braces) {
7606 var numLinesEst = 0;
7607 var length = output.reduce(function(prev, cur) {
7608 numLinesEst++;
7609 if (cur.indexOf('\n') >= 0) numLinesEst++;
7610 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7611 }, 0);
7612
7613 if (length > 60) {
7614 return braces[0] +
7615 (base === '' ? '' : base + '\n ') +
7616 ' ' +
7617 output.join(',\n ') +
7618 ' ' +
7619 braces[1];
7620 }
7621
7622 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7623 }
7624
7625
7626 // NOTE: These type checking functions intentionally don't use `instanceof`
7627 // because it is fragile and can be easily faked with `Object.create()`.
7628 function isArray(ar) {
7629 return Array.isArray(ar);
7630 }
7631 exports.isArray = isArray;
7632
7633 function isBoolean(arg) {
7634 return typeof arg === 'boolean';
7635 }
7636 exports.isBoolean = isBoolean;
7637
7638 function isNull(arg) {
7639 return arg === null;
7640 }
7641 exports.isNull = isNull;
7642
7643 function isNullOrUndefined(arg) {
7644 return arg == null;
7645 }
7646 exports.isNullOrUndefined = isNullOrUndefined;
7647
7648 function isNumber(arg) {
7649 return typeof arg === 'number';
7650 }
7651 exports.isNumber = isNumber;
7652
7653 function isString(arg) {
7654 return typeof arg === 'string';
7655 }
7656 exports.isString = isString;
7657
7658 function isSymbol(arg) {
7659 return typeof arg === 'symbol';
7660 }
7661 exports.isSymbol = isSymbol;
7662
7663 function isUndefined(arg) {
7664 return arg === void 0;
7665 }
7666 exports.isUndefined = isUndefined;
7667
7668 function isRegExp(re) {
7669 return isObject(re) && objectToString(re) === '[object RegExp]';
7670 }
7671 exports.isRegExp = isRegExp;
7672
7673 function isObject(arg) {
7674 return typeof arg === 'object' && arg !== null;
7675 }
7676 exports.isObject = isObject;
7677
7678 function isDate(d) {
7679 return isObject(d) && objectToString(d) === '[object Date]';
7680 }
7681 exports.isDate = isDate;
7682
7683 function isError(e) {
7684 return isObject(e) &&
7685 (objectToString(e) === '[object Error]' || e instanceof Error);
7686 }
7687 exports.isError = isError;
7688
7689 function isFunction(arg) {
7690 return typeof arg === 'function';
7691 }
7692 exports.isFunction = isFunction;
7693
7694 function isPrimitive(arg) {
7695 return arg === null ||
7696 typeof arg === 'boolean' ||
7697 typeof arg === 'number' ||
7698 typeof arg === 'string' ||
7699 typeof arg === 'symbol' || // ES6 symbol
7700 typeof arg === 'undefined';
7701 }
7702 exports.isPrimitive = isPrimitive;
7703
7704 exports.isBuffer = require('./support/isBuffer');
7705
7706 function objectToString(o) {
7707 return Object.prototype.toString.call(o);
7708 }
7709
7710
7711 function pad(n) {
7712 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7713 }
7714
7715
7716 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7717 'Oct', 'Nov', 'Dec'];
7718
7719 // 26 Feb 16:19:34
7720 function timestamp() {
7721 var d = new Date();
7722 var time = [pad(d.getHours()),
7723 pad(d.getMinutes()),
7724 pad(d.getSeconds())].join(':');
7725 return [d.getDate(), months[d.getMonth()], time].join(' ');
7726 }
7727
7728
7729 // log is just a thin wrapper to console.log that prepends a timestamp
7730 exports.log = function() {
7731 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7732 };
7733
7734
7735 /**
7736 * Inherit the prototype methods from one constructor into another.
7737 *
7738 * The Function.prototype.inherits from lang.js rewritten as a standalone
7739 * function (not on Function.prototype). NOTE: If this file is to be loaded
7740 * during bootstrapping this function needs to be rewritten using some native
7741 * functions as prototype setup using normal JavaScript does not work as
7742 * expected during bootstrapping (see mirror.js in r114903).
7743 *
7744 * @param {function} ctor Constructor function which needs to inherit the
7745 * prototype.
7746 * @param {function} superCtor Constructor function to inherit prototype from.
7747 */
7748 exports.inherits = require('inherits');
7749
7750 exports._extend = function(origin, add) {
7751 // Don't do anything if add isn't an object
7752 if (!add || !isObject(add)) return origin;
7753
7754 var keys = Object.keys(add);
7755 var i = keys.length;
7756 while (i--) {
7757 origin[keys[i]] = add[keys[i]];
7758 }
7759 return origin;
7760 };
7761
7762 function hasOwnProperty(obj, prop) {
7763 return Object.prototype.hasOwnProperty.call(obj, prop);
7764 }
7765
7766 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7767 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7768 // Base58 encoding/decoding
7769 // Originally written by Mike Hearn for BitcoinJ
7770 // Copyright (c) 2011 Google Inc
7771 // Ported to JavaScript by Stefan Thomas
7772 // Merged Buffer refactorings from base58-native by Stephen Pair
7773 // Copyright (c) 2013 BitPay Inc
7774
7775 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7776 var ALPHABET_MAP = {}
7777 for(var i = 0; i < ALPHABET.length; i++) {
7778 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7779 }
7780 var BASE = 58
7781
7782 function encode(buffer) {
7783 if (buffer.length === 0) return ''
7784
7785 var i, j, digits = [0]
7786 for (i = 0; i < buffer.length; i++) {
7787 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7788
7789 digits[0] += buffer[i]
7790
7791 var carry = 0
7792 for (j = 0; j < digits.length; ++j) {
7793 digits[j] += carry
7794
7795 carry = (digits[j] / BASE) | 0
7796 digits[j] %= BASE
7797 }
7798
7799 while (carry) {
7800 digits.push(carry % BASE)
7801
7802 carry = (carry / BASE) | 0
7803 }
7804 }
7805
7806 // deal with leading zeros
7807 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7808
7809 // convert digits to a string
7810 var stringOutput = ""
7811 for (var i = digits.length - 1; i >= 0; i--) {
7812 stringOutput = stringOutput + ALPHABET[digits[i]]
7813 }
7814 return stringOutput
7815 }
7816
7817 function decode(string) {
7818 if (string.length === 0) return []
7819
7820 var i, j, bytes = [0]
7821 for (i = 0; i < string.length; i++) {
7822 var c = string[i]
7823 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7824
7825 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7826 bytes[0] += ALPHABET_MAP[c]
7827
7828 var carry = 0
7829 for (j = 0; j < bytes.length; ++j) {
7830 bytes[j] += carry
7831
7832 carry = bytes[j] >> 8
7833 bytes[j] &= 0xff
7834 }
7835
7836 while (carry) {
7837 bytes.push(carry & 0xff)
7838
7839 carry >>= 8
7840 }
7841 }
7842
7843 // deal with leading zeros
7844 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7845
7846 return bytes.reverse()
7847 }
7848
7849 module.exports = {
7850 encode: encode,
7851 decode: decode
7852 }
7853
7854 },{}],31:[function(require,module,exports){
7855 (function (Buffer){
7856 'use strict'
7857
7858 var base58 = require('bs58')
7859 var createHash = require('create-hash')
7860
7861 // SHA256(SHA256(buffer))
7862 function sha256x2 (buffer) {
7863 buffer = createHash('sha256').update(buffer).digest()
7864 return createHash('sha256').update(buffer).digest()
7865 }
7866
7867 // Encode a buffer as a base58-check encoded string
7868 function encode (payload) {
7869 var checksum = sha256x2(payload).slice(0, 4)
7870
7871 return base58.encode(Buffer.concat([
7872 payload,
7873 checksum
7874 ]))
7875 }
7876
7877 // Decode a base58-check encoded string to a buffer
7878 function decode (string) {
7879 var buffer = new Buffer(base58.decode(string))
7880
7881 var payload = buffer.slice(0, -4)
7882 var checksum = buffer.slice(-4)
7883 var newChecksum = sha256x2(payload).slice(0, 4)
7884
7885 for (var i = 0; i < newChecksum.length; ++i) {
7886 if (newChecksum[i] === checksum[i]) continue
7887
7888 throw new Error('Invalid checksum')
7889 }
7890
7891 return payload
7892 }
7893
7894 module.exports = {
7895 encode: encode,
7896 decode: decode
7897 }
7898
7899 }).call(this,require("buffer").Buffer)
7900 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7901 (function (Buffer){
7902 'use strict';
7903 var inherits = require('inherits')
7904 var md5 = require('./md5')
7905 var rmd160 = require('ripemd160')
7906 var sha = require('sha.js')
7907
7908 var Transform = require('stream').Transform
7909
7910 function HashNoConstructor(hash) {
7911 Transform.call(this)
7912
7913 this._hash = hash
7914 this.buffers = []
7915 }
7916
7917 inherits(HashNoConstructor, Transform)
7918
7919 HashNoConstructor.prototype._transform = function (data, _, next) {
7920 this.buffers.push(data)
7921
7922 next()
7923 }
7924
7925 HashNoConstructor.prototype._flush = function (next) {
7926 this.push(this.digest())
7927 next()
7928 }
7929
7930 HashNoConstructor.prototype.update = function (data, enc) {
7931 if (typeof data === 'string') {
7932 data = new Buffer(data, enc)
7933 }
7934
7935 this.buffers.push(data)
7936 return this
7937 }
7938
7939 HashNoConstructor.prototype.digest = function (enc) {
7940 var buf = Buffer.concat(this.buffers)
7941 var r = this._hash(buf)
7942 this.buffers = null
7943
7944 return enc ? r.toString(enc) : r
7945 }
7946
7947 function Hash(hash) {
7948 Transform.call(this)
7949
7950 this._hash = hash
7951 }
7952
7953 inherits(Hash, Transform)
7954
7955 Hash.prototype._transform = function (data, enc, next) {
7956 if (enc) data = new Buffer(data, enc)
7957
7958 this._hash.update(data)
7959
7960 next()
7961 }
7962
7963 Hash.prototype._flush = function (next) {
7964 this.push(this._hash.digest())
7965 this._hash = null
7966
7967 next()
7968 }
7969
7970 Hash.prototype.update = function (data, enc) {
7971 if (typeof data === 'string') {
7972 data = new Buffer(data, enc)
7973 }
7974
7975 this._hash.update(data)
7976 return this
7977 }
7978
7979 Hash.prototype.digest = function (enc) {
7980 var outData = this._hash.digest()
7981
7982 return enc ? outData.toString(enc) : outData
7983 }
7984
7985 module.exports = function createHash (alg) {
7986 if ('md5' === alg) return new HashNoConstructor(md5)
7987 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7988
7989 return new Hash(sha(alg))
7990 }
7991
7992 }).call(this,require("buffer").Buffer)
7993 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
7994 (function (Buffer){
7995 'use strict';
7996 var intSize = 4;
7997 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7998 var chrsz = 8;
7999
8000 function toArray(buf, bigEndian) {
8001 if ((buf.length % intSize) !== 0) {
8002 var len = buf.length + (intSize - (buf.length % intSize));
8003 buf = Buffer.concat([buf, zeroBuffer], len);
8004 }
8005
8006 var arr = [];
8007 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8008 for (var i = 0; i < buf.length; i += intSize) {
8009 arr.push(fn.call(buf, i));
8010 }
8011 return arr;
8012 }
8013
8014 function toBuffer(arr, size, bigEndian) {
8015 var buf = new Buffer(size);
8016 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8017 for (var i = 0; i < arr.length; i++) {
8018 fn.call(buf, arr[i], i * 4, true);
8019 }
8020 return buf;
8021 }
8022
8023 function hash(buf, fn, hashSize, bigEndian) {
8024 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8025 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8026 return toBuffer(arr, hashSize, bigEndian);
8027 }
8028 exports.hash = hash;
8029 }).call(this,require("buffer").Buffer)
8030 },{"buffer":7}],34:[function(require,module,exports){
8031 'use strict';
8032 /*
8033 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8034 * Digest Algorithm, as defined in RFC 1321.
8035 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8036 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8037 * Distributed under the BSD License
8038 * See http://pajhome.org.uk/crypt/md5 for more info.
8039 */
8040
8041 var helpers = require('./helpers');
8042
8043 /*
8044 * Calculate the MD5 of an array of little-endian words, and a bit length
8045 */
8046 function core_md5(x, len)
8047 {
8048 /* append padding */
8049 x[len >> 5] |= 0x80 << ((len) % 32);
8050 x[(((len + 64) >>> 9) << 4) + 14] = len;
8051
8052 var a = 1732584193;
8053 var b = -271733879;
8054 var c = -1732584194;
8055 var d = 271733878;
8056
8057 for(var i = 0; i < x.length; i += 16)
8058 {
8059 var olda = a;
8060 var oldb = b;
8061 var oldc = c;
8062 var oldd = d;
8063
8064 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8065 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8066 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8067 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8068 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8069 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8070 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8071 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8072 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8073 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8074 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8075 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8076 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8077 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8078 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8079 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8080
8081 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8082 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8083 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8084 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8085 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8086 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8087 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8088 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8089 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8090 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8091 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8092 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8093 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8094 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8095 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8096 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8097
8098 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8099 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8100 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8101 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8102 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8103 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8104 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8105 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8106 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8107 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8108 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8109 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8110 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8111 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8112 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8113 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8114
8115 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8116 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8117 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8118 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8119 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8120 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8121 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8122 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8123 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8124 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8125 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8126 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8127 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8128 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8129 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8130 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8131
8132 a = safe_add(a, olda);
8133 b = safe_add(b, oldb);
8134 c = safe_add(c, oldc);
8135 d = safe_add(d, oldd);
8136 }
8137 return Array(a, b, c, d);
8138
8139 }
8140
8141 /*
8142 * These functions implement the four basic operations the algorithm uses.
8143 */
8144 function md5_cmn(q, a, b, x, s, t)
8145 {
8146 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8147 }
8148 function md5_ff(a, b, c, d, x, s, t)
8149 {
8150 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8151 }
8152 function md5_gg(a, b, c, d, x, s, t)
8153 {
8154 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8155 }
8156 function md5_hh(a, b, c, d, x, s, t)
8157 {
8158 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8159 }
8160 function md5_ii(a, b, c, d, x, s, t)
8161 {
8162 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8163 }
8164
8165 /*
8166 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8167 * to work around bugs in some JS interpreters.
8168 */
8169 function safe_add(x, y)
8170 {
8171 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8172 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8173 return (msw << 16) | (lsw & 0xFFFF);
8174 }
8175
8176 /*
8177 * Bitwise rotate a 32-bit number to the left.
8178 */
8179 function bit_rol(num, cnt)
8180 {
8181 return (num << cnt) | (num >>> (32 - cnt));
8182 }
8183
8184 module.exports = function md5(buf) {
8185 return helpers.hash(buf, core_md5, 16);
8186 };
8187 },{"./helpers":33}],35:[function(require,module,exports){
8188 arguments[4][12][0].apply(exports,arguments)
8189 },{"dup":12}],36:[function(require,module,exports){
8190 (function (Buffer){
8191 /*
8192 CryptoJS v3.1.2
8193 code.google.com/p/crypto-js
8194 (c) 2009-2013 by Jeff Mott. All rights reserved.
8195 code.google.com/p/crypto-js/wiki/License
8196 */
8197 /** @preserve
8198 (c) 2012 by Cédric Mesnil. All rights reserved.
8199
8200 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8201
8202 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8203 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8204
8205 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8206 */
8207
8208 // constants table
8209 var zl = [
8210 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8211 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8212 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8213 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8214 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8215 ]
8216
8217 var zr = [
8218 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8219 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8220 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8221 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8222 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8223 ]
8224
8225 var sl = [
8226 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8227 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8228 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8229 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8230 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8231 ]
8232
8233 var sr = [
8234 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8235 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8236 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8237 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8238 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8239 ]
8240
8241 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8242 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8243
8244 function bytesToWords (bytes) {
8245 var words = []
8246 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8247 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8248 }
8249 return words
8250 }
8251
8252 function wordsToBytes (words) {
8253 var bytes = []
8254 for (var b = 0; b < words.length * 32; b += 8) {
8255 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8256 }
8257 return bytes
8258 }
8259
8260 function processBlock (H, M, offset) {
8261 // swap endian
8262 for (var i = 0; i < 16; i++) {
8263 var offset_i = offset + i
8264 var M_offset_i = M[offset_i]
8265
8266 // Swap
8267 M[offset_i] = (
8268 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8269 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8270 )
8271 }
8272
8273 // Working variables
8274 var al, bl, cl, dl, el
8275 var ar, br, cr, dr, er
8276
8277 ar = al = H[0]
8278 br = bl = H[1]
8279 cr = cl = H[2]
8280 dr = dl = H[3]
8281 er = el = H[4]
8282
8283 // computation
8284 var t
8285 for (i = 0; i < 80; i += 1) {
8286 t = (al + M[offset + zl[i]]) | 0
8287 if (i < 16) {
8288 t += f1(bl, cl, dl) + hl[0]
8289 } else if (i < 32) {
8290 t += f2(bl, cl, dl) + hl[1]
8291 } else if (i < 48) {
8292 t += f3(bl, cl, dl) + hl[2]
8293 } else if (i < 64) {
8294 t += f4(bl, cl, dl) + hl[3]
8295 } else {// if (i<80) {
8296 t += f5(bl, cl, dl) + hl[4]
8297 }
8298 t = t | 0
8299 t = rotl(t, sl[i])
8300 t = (t + el) | 0
8301 al = el
8302 el = dl
8303 dl = rotl(cl, 10)
8304 cl = bl
8305 bl = t
8306
8307 t = (ar + M[offset + zr[i]]) | 0
8308 if (i < 16) {
8309 t += f5(br, cr, dr) + hr[0]
8310 } else if (i < 32) {
8311 t += f4(br, cr, dr) + hr[1]
8312 } else if (i < 48) {
8313 t += f3(br, cr, dr) + hr[2]
8314 } else if (i < 64) {
8315 t += f2(br, cr, dr) + hr[3]
8316 } else {// if (i<80) {
8317 t += f1(br, cr, dr) + hr[4]
8318 }
8319
8320 t = t | 0
8321 t = rotl(t, sr[i])
8322 t = (t + er) | 0
8323 ar = er
8324 er = dr
8325 dr = rotl(cr, 10)
8326 cr = br
8327 br = t
8328 }
8329
8330 // intermediate hash value
8331 t = (H[1] + cl + dr) | 0
8332 H[1] = (H[2] + dl + er) | 0
8333 H[2] = (H[3] + el + ar) | 0
8334 H[3] = (H[4] + al + br) | 0
8335 H[4] = (H[0] + bl + cr) | 0
8336 H[0] = t
8337 }
8338
8339 function f1 (x, y, z) {
8340 return ((x) ^ (y) ^ (z))
8341 }
8342
8343 function f2 (x, y, z) {
8344 return (((x) & (y)) | ((~x) & (z)))
8345 }
8346
8347 function f3 (x, y, z) {
8348 return (((x) | (~(y))) ^ (z))
8349 }
8350
8351 function f4 (x, y, z) {
8352 return (((x) & (z)) | ((y) & (~(z))))
8353 }
8354
8355 function f5 (x, y, z) {
8356 return ((x) ^ ((y) | (~(z))))
8357 }
8358
8359 function rotl (x, n) {
8360 return (x << n) | (x >>> (32 - n))
8361 }
8362
8363 function ripemd160 (message) {
8364 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8365
8366 if (typeof message === 'string') {
8367 message = new Buffer(message, 'utf8')
8368 }
8369
8370 var m = bytesToWords(message)
8371
8372 var nBitsLeft = message.length * 8
8373 var nBitsTotal = message.length * 8
8374
8375 // Add padding
8376 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8377 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8378 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8379 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8380 )
8381
8382 for (var i = 0; i < m.length; i += 16) {
8383 processBlock(H, m, i)
8384 }
8385
8386 // swap endian
8387 for (i = 0; i < 5; i++) {
8388 // shortcut
8389 var H_i = H[i]
8390
8391 // Swap
8392 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8393 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8394 }
8395
8396 var digestbytes = wordsToBytes(H)
8397 return new Buffer(digestbytes)
8398 }
8399
8400 module.exports = ripemd160
8401
8402 }).call(this,require("buffer").Buffer)
8403 },{"buffer":7}],37:[function(require,module,exports){
8404 (function (Buffer){
8405 // prototype class for hash functions
8406 function Hash (blockSize, finalSize) {
8407 this._block = new Buffer(blockSize)
8408 this._finalSize = finalSize
8409 this._blockSize = blockSize
8410 this._len = 0
8411 this._s = 0
8412 }
8413
8414 Hash.prototype.update = function (data, enc) {
8415 if (typeof data === 'string') {
8416 enc = enc || 'utf8'
8417 data = new Buffer(data, enc)
8418 }
8419
8420 var l = this._len += data.length
8421 var s = this._s || 0
8422 var f = 0
8423 var buffer = this._block
8424
8425 while (s < l) {
8426 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8427 var ch = (t - f)
8428
8429 for (var i = 0; i < ch; i++) {
8430 buffer[(s % this._blockSize) + i] = data[i + f]
8431 }
8432
8433 s += ch
8434 f += ch
8435
8436 if ((s % this._blockSize) === 0) {
8437 this._update(buffer)
8438 }
8439 }
8440 this._s = s
8441
8442 return this
8443 }
8444
8445 Hash.prototype.digest = function (enc) {
8446 // Suppose the length of the message M, in bits, is l
8447 var l = this._len * 8
8448
8449 // Append the bit 1 to the end of the message
8450 this._block[this._len % this._blockSize] = 0x80
8451
8452 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8453 this._block.fill(0, this._len % this._blockSize + 1)
8454
8455 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8456 this._update(this._block)
8457 this._block.fill(0)
8458 }
8459
8460 // to this append the block which is equal to the number l written in binary
8461 // TODO: handle case where l is > Math.pow(2, 29)
8462 this._block.writeInt32BE(l, this._blockSize - 4)
8463
8464 var hash = this._update(this._block) || this._hash()
8465
8466 return enc ? hash.toString(enc) : hash
8467 }
8468
8469 Hash.prototype._update = function () {
8470 throw new Error('_update must be implemented by subclass')
8471 }
8472
8473 module.exports = Hash
8474
8475 }).call(this,require("buffer").Buffer)
8476 },{"buffer":7}],38:[function(require,module,exports){
8477 var exports = module.exports = function SHA (algorithm) {
8478 algorithm = algorithm.toLowerCase()
8479
8480 var Algorithm = exports[algorithm]
8481 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8482
8483 return new Algorithm()
8484 }
8485
8486 exports.sha = require('./sha')
8487 exports.sha1 = require('./sha1')
8488 exports.sha224 = require('./sha224')
8489 exports.sha256 = require('./sha256')
8490 exports.sha384 = require('./sha384')
8491 exports.sha512 = require('./sha512')
8492
8493 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8494 (function (Buffer){
8495 /*
8496 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8497 * in FIPS PUB 180-1
8498 * This source code is derived from sha1.js of the same repository.
8499 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8500 * operation was added.
8501 */
8502
8503 var inherits = require('inherits')
8504 var Hash = require('./hash')
8505
8506 var W = new Array(80)
8507
8508 function Sha () {
8509 this.init()
8510 this._w = W
8511
8512 Hash.call(this, 64, 56)
8513 }
8514
8515 inherits(Sha, Hash)
8516
8517 Sha.prototype.init = function () {
8518 this._a = 0x67452301 | 0
8519 this._b = 0xefcdab89 | 0
8520 this._c = 0x98badcfe | 0
8521 this._d = 0x10325476 | 0
8522 this._e = 0xc3d2e1f0 | 0
8523
8524 return this
8525 }
8526
8527 /*
8528 * Bitwise rotate a 32-bit number to the left.
8529 */
8530 function rol (num, cnt) {
8531 return (num << cnt) | (num >>> (32 - cnt))
8532 }
8533
8534 Sha.prototype._update = function (M) {
8535 var W = this._w
8536
8537 var a = this._a
8538 var b = this._b
8539 var c = this._c
8540 var d = this._d
8541 var e = this._e
8542
8543 var j = 0, k
8544
8545 /*
8546 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8547 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8548 */
8549 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8550 function loop (w, f) {
8551 W[j] = w
8552
8553 var t = rol(a, 5) + f + e + w + k
8554
8555 e = d
8556 d = c
8557 c = rol(b, 30)
8558 b = a
8559 a = t
8560 j++
8561 }
8562
8563 k = 1518500249
8564 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8565 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8566 k = 1859775393
8567 while (j < 40) loop(calcW(), b ^ c ^ d)
8568 k = -1894007588
8569 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8570 k = -899497514
8571 while (j < 80) loop(calcW(), b ^ c ^ d)
8572
8573 this._a = (a + this._a) | 0
8574 this._b = (b + this._b) | 0
8575 this._c = (c + this._c) | 0
8576 this._d = (d + this._d) | 0
8577 this._e = (e + this._e) | 0
8578 }
8579
8580 Sha.prototype._hash = function () {
8581 var H = new Buffer(20)
8582
8583 H.writeInt32BE(this._a | 0, 0)
8584 H.writeInt32BE(this._b | 0, 4)
8585 H.writeInt32BE(this._c | 0, 8)
8586 H.writeInt32BE(this._d | 0, 12)
8587 H.writeInt32BE(this._e | 0, 16)
8588
8589 return H
8590 }
8591
8592 module.exports = Sha
8593
8594
8595 }).call(this,require("buffer").Buffer)
8596 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8597 (function (Buffer){
8598 /*
8599 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8600 * in FIPS PUB 180-1
8601 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8602 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8603 * Distributed under the BSD License
8604 * See http://pajhome.org.uk/crypt/md5 for details.
8605 */
8606
8607 var inherits = require('inherits')
8608 var Hash = require('./hash')
8609
8610 var W = new Array(80)
8611
8612 function Sha1 () {
8613 this.init()
8614 this._w = W
8615
8616 Hash.call(this, 64, 56)
8617 }
8618
8619 inherits(Sha1, Hash)
8620
8621 Sha1.prototype.init = function () {
8622 this._a = 0x67452301 | 0
8623 this._b = 0xefcdab89 | 0
8624 this._c = 0x98badcfe | 0
8625 this._d = 0x10325476 | 0
8626 this._e = 0xc3d2e1f0 | 0
8627
8628 return this
8629 }
8630
8631 /*
8632 * Bitwise rotate a 32-bit number to the left.
8633 */
8634 function rol (num, cnt) {
8635 return (num << cnt) | (num >>> (32 - cnt))
8636 }
8637
8638 Sha1.prototype._update = function (M) {
8639 var W = this._w
8640
8641 var a = this._a
8642 var b = this._b
8643 var c = this._c
8644 var d = this._d
8645 var e = this._e
8646
8647 var j = 0, k
8648
8649 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8650 function loop (w, f) {
8651 W[j] = w
8652
8653 var t = rol(a, 5) + f + e + w + k
8654
8655 e = d
8656 d = c
8657 c = rol(b, 30)
8658 b = a
8659 a = t
8660 j++
8661 }
8662
8663 k = 1518500249
8664 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8665 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8666 k = 1859775393
8667 while (j < 40) loop(calcW(), b ^ c ^ d)
8668 k = -1894007588
8669 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8670 k = -899497514
8671 while (j < 80) loop(calcW(), b ^ c ^ d)
8672
8673 this._a = (a + this._a) | 0
8674 this._b = (b + this._b) | 0
8675 this._c = (c + this._c) | 0
8676 this._d = (d + this._d) | 0
8677 this._e = (e + this._e) | 0
8678 }
8679
8680 Sha1.prototype._hash = function () {
8681 var H = new Buffer(20)
8682
8683 H.writeInt32BE(this._a | 0, 0)
8684 H.writeInt32BE(this._b | 0, 4)
8685 H.writeInt32BE(this._c | 0, 8)
8686 H.writeInt32BE(this._d | 0, 12)
8687 H.writeInt32BE(this._e | 0, 16)
8688
8689 return H
8690 }
8691
8692 module.exports = Sha1
8693
8694 }).call(this,require("buffer").Buffer)
8695 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8696 (function (Buffer){
8697 /**
8698 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8699 * in FIPS 180-2
8700 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8701 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8702 *
8703 */
8704
8705 var inherits = require('inherits')
8706 var Sha256 = require('./sha256')
8707 var Hash = require('./hash')
8708
8709 var W = new Array(64)
8710
8711 function Sha224 () {
8712 this.init()
8713
8714 this._w = W // new Array(64)
8715
8716 Hash.call(this, 64, 56)
8717 }
8718
8719 inherits(Sha224, Sha256)
8720
8721 Sha224.prototype.init = function () {
8722 this._a = 0xc1059ed8 | 0
8723 this._b = 0x367cd507 | 0
8724 this._c = 0x3070dd17 | 0
8725 this._d = 0xf70e5939 | 0
8726 this._e = 0xffc00b31 | 0
8727 this._f = 0x68581511 | 0
8728 this._g = 0x64f98fa7 | 0
8729 this._h = 0xbefa4fa4 | 0
8730
8731 return this
8732 }
8733
8734 Sha224.prototype._hash = function () {
8735 var H = new Buffer(28)
8736
8737 H.writeInt32BE(this._a, 0)
8738 H.writeInt32BE(this._b, 4)
8739 H.writeInt32BE(this._c, 8)
8740 H.writeInt32BE(this._d, 12)
8741 H.writeInt32BE(this._e, 16)
8742 H.writeInt32BE(this._f, 20)
8743 H.writeInt32BE(this._g, 24)
8744
8745 return H
8746 }
8747
8748 module.exports = Sha224
8749
8750 }).call(this,require("buffer").Buffer)
8751 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8752 (function (Buffer){
8753 /**
8754 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8755 * in FIPS 180-2
8756 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8757 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8758 *
8759 */
8760
8761 var inherits = require('inherits')
8762 var Hash = require('./hash')
8763
8764 var K = [
8765 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8766 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8767 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8768 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8769 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8770 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8771 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8772 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8773 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8774 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8775 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8776 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8777 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8778 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8779 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8780 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8781 ]
8782
8783 var W = new Array(64)
8784
8785 function Sha256 () {
8786 this.init()
8787
8788 this._w = W // new Array(64)
8789
8790 Hash.call(this, 64, 56)
8791 }
8792
8793 inherits(Sha256, Hash)
8794
8795 Sha256.prototype.init = function () {
8796 this._a = 0x6a09e667 | 0
8797 this._b = 0xbb67ae85 | 0
8798 this._c = 0x3c6ef372 | 0
8799 this._d = 0xa54ff53a | 0
8800 this._e = 0x510e527f | 0
8801 this._f = 0x9b05688c | 0
8802 this._g = 0x1f83d9ab | 0
8803 this._h = 0x5be0cd19 | 0
8804
8805 return this
8806 }
8807
8808 function S (X, n) {
8809 return (X >>> n) | (X << (32 - n))
8810 }
8811
8812 function R (X, n) {
8813 return (X >>> n)
8814 }
8815
8816 function Ch (x, y, z) {
8817 return ((x & y) ^ ((~x) & z))
8818 }
8819
8820 function Maj (x, y, z) {
8821 return ((x & y) ^ (x & z) ^ (y & z))
8822 }
8823
8824 function Sigma0256 (x) {
8825 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8826 }
8827
8828 function Sigma1256 (x) {
8829 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8830 }
8831
8832 function Gamma0256 (x) {
8833 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8834 }
8835
8836 function Gamma1256 (x) {
8837 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8838 }
8839
8840 Sha256.prototype._update = function (M) {
8841 var W = this._w
8842
8843 var a = this._a | 0
8844 var b = this._b | 0
8845 var c = this._c | 0
8846 var d = this._d | 0
8847 var e = this._e | 0
8848 var f = this._f | 0
8849 var g = this._g | 0
8850 var h = this._h | 0
8851
8852 var j = 0
8853
8854 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8855 function loop (w) {
8856 W[j] = w
8857
8858 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8859 var T2 = Sigma0256(a) + Maj(a, b, c)
8860
8861 h = g
8862 g = f
8863 f = e
8864 e = d + T1
8865 d = c
8866 c = b
8867 b = a
8868 a = T1 + T2
8869
8870 j++
8871 }
8872
8873 while (j < 16) loop(M.readInt32BE(j * 4))
8874 while (j < 64) loop(calcW())
8875
8876 this._a = (a + this._a) | 0
8877 this._b = (b + this._b) | 0
8878 this._c = (c + this._c) | 0
8879 this._d = (d + this._d) | 0
8880 this._e = (e + this._e) | 0
8881 this._f = (f + this._f) | 0
8882 this._g = (g + this._g) | 0
8883 this._h = (h + this._h) | 0
8884 }
8885
8886 Sha256.prototype._hash = function () {
8887 var H = new Buffer(32)
8888
8889 H.writeInt32BE(this._a, 0)
8890 H.writeInt32BE(this._b, 4)
8891 H.writeInt32BE(this._c, 8)
8892 H.writeInt32BE(this._d, 12)
8893 H.writeInt32BE(this._e, 16)
8894 H.writeInt32BE(this._f, 20)
8895 H.writeInt32BE(this._g, 24)
8896 H.writeInt32BE(this._h, 28)
8897
8898 return H
8899 }
8900
8901 module.exports = Sha256
8902
8903 }).call(this,require("buffer").Buffer)
8904 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8905 (function (Buffer){
8906 var inherits = require('inherits')
8907 var SHA512 = require('./sha512')
8908 var Hash = require('./hash')
8909
8910 var W = new Array(160)
8911
8912 function Sha384 () {
8913 this.init()
8914 this._w = W
8915
8916 Hash.call(this, 128, 112)
8917 }
8918
8919 inherits(Sha384, SHA512)
8920
8921 Sha384.prototype.init = function () {
8922 this._a = 0xcbbb9d5d | 0
8923 this._b = 0x629a292a | 0
8924 this._c = 0x9159015a | 0
8925 this._d = 0x152fecd8 | 0
8926 this._e = 0x67332667 | 0
8927 this._f = 0x8eb44a87 | 0
8928 this._g = 0xdb0c2e0d | 0
8929 this._h = 0x47b5481d | 0
8930
8931 this._al = 0xc1059ed8 | 0
8932 this._bl = 0x367cd507 | 0
8933 this._cl = 0x3070dd17 | 0
8934 this._dl = 0xf70e5939 | 0
8935 this._el = 0xffc00b31 | 0
8936 this._fl = 0x68581511 | 0
8937 this._gl = 0x64f98fa7 | 0
8938 this._hl = 0xbefa4fa4 | 0
8939
8940 return this
8941 }
8942
8943 Sha384.prototype._hash = function () {
8944 var H = new Buffer(48)
8945
8946 function writeInt64BE (h, l, offset) {
8947 H.writeInt32BE(h, offset)
8948 H.writeInt32BE(l, offset + 4)
8949 }
8950
8951 writeInt64BE(this._a, this._al, 0)
8952 writeInt64BE(this._b, this._bl, 8)
8953 writeInt64BE(this._c, this._cl, 16)
8954 writeInt64BE(this._d, this._dl, 24)
8955 writeInt64BE(this._e, this._el, 32)
8956 writeInt64BE(this._f, this._fl, 40)
8957
8958 return H
8959 }
8960
8961 module.exports = Sha384
8962
8963 }).call(this,require("buffer").Buffer)
8964 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8965 (function (Buffer){
8966 var inherits = require('inherits')
8967 var Hash = require('./hash')
8968
8969 var K = [
8970 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8971 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8972 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8973 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8974 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8975 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8976 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8977 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8978 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8979 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8980 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8981 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8982 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8983 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8984 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8985 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8986 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8987 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8988 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8989 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8990 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8991 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8992 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8993 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8994 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8995 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8996 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8997 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8998 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8999 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9000 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9001 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9002 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9003 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9004 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9005 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9006 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9007 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9008 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9009 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9010 ]
9011
9012 var W = new Array(160)
9013
9014 function Sha512 () {
9015 this.init()
9016 this._w = W
9017
9018 Hash.call(this, 128, 112)
9019 }
9020
9021 inherits(Sha512, Hash)
9022
9023 Sha512.prototype.init = function () {
9024 this._a = 0x6a09e667 | 0
9025 this._b = 0xbb67ae85 | 0
9026 this._c = 0x3c6ef372 | 0
9027 this._d = 0xa54ff53a | 0
9028 this._e = 0x510e527f | 0
9029 this._f = 0x9b05688c | 0
9030 this._g = 0x1f83d9ab | 0
9031 this._h = 0x5be0cd19 | 0
9032
9033 this._al = 0xf3bcc908 | 0
9034 this._bl = 0x84caa73b | 0
9035 this._cl = 0xfe94f82b | 0
9036 this._dl = 0x5f1d36f1 | 0
9037 this._el = 0xade682d1 | 0
9038 this._fl = 0x2b3e6c1f | 0
9039 this._gl = 0xfb41bd6b | 0
9040 this._hl = 0x137e2179 | 0
9041
9042 return this
9043 }
9044
9045 function S (X, Xl, n) {
9046 return (X >>> n) | (Xl << (32 - n))
9047 }
9048
9049 function Ch (x, y, z) {
9050 return ((x & y) ^ ((~x) & z))
9051 }
9052
9053 function Maj (x, y, z) {
9054 return ((x & y) ^ (x & z) ^ (y & z))
9055 }
9056
9057 Sha512.prototype._update = function (M) {
9058 var W = this._w
9059
9060 var a = this._a | 0
9061 var b = this._b | 0
9062 var c = this._c | 0
9063 var d = this._d | 0
9064 var e = this._e | 0
9065 var f = this._f | 0
9066 var g = this._g | 0
9067 var h = this._h | 0
9068
9069 var al = this._al | 0
9070 var bl = this._bl | 0
9071 var cl = this._cl | 0
9072 var dl = this._dl | 0
9073 var el = this._el | 0
9074 var fl = this._fl | 0
9075 var gl = this._gl | 0
9076 var hl = this._hl | 0
9077
9078 var i = 0, j = 0
9079 var Wi, Wil
9080 function calcW () {
9081 var x = W[j - 15 * 2]
9082 var xl = W[j - 15 * 2 + 1]
9083 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9084 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9085
9086 x = W[j - 2 * 2]
9087 xl = W[j - 2 * 2 + 1]
9088 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9089 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9090
9091 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9092 var Wi7 = W[j - 7 * 2]
9093 var Wi7l = W[j - 7 * 2 + 1]
9094
9095 var Wi16 = W[j - 16 * 2]
9096 var Wi16l = W[j - 16 * 2 + 1]
9097
9098 Wil = gamma0l + Wi7l
9099 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9100 Wil = Wil + gamma1l
9101 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9102 Wil = Wil + Wi16l
9103 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9104 }
9105
9106 function loop () {
9107 W[j] = Wi
9108 W[j + 1] = Wil
9109
9110 var maj = Maj(a, b, c)
9111 var majl = Maj(al, bl, cl)
9112
9113 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9114 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9115 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9116 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9117
9118 // t1 = h + sigma1 + ch + K[i] + W[i]
9119 var Ki = K[j]
9120 var Kil = K[j + 1]
9121
9122 var ch = Ch(e, f, g)
9123 var chl = Ch(el, fl, gl)
9124
9125 var t1l = hl + sigma1l
9126 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9127 t1l = t1l + chl
9128 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9129 t1l = t1l + Kil
9130 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9131 t1l = t1l + Wil
9132 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9133
9134 // t2 = sigma0 + maj
9135 var t2l = sigma0l + majl
9136 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9137
9138 h = g
9139 hl = gl
9140 g = f
9141 gl = fl
9142 f = e
9143 fl = el
9144 el = (dl + t1l) | 0
9145 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9146 d = c
9147 dl = cl
9148 c = b
9149 cl = bl
9150 b = a
9151 bl = al
9152 al = (t1l + t2l) | 0
9153 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9154
9155 i++
9156 j += 2
9157 }
9158
9159 while (i < 16) {
9160 Wi = M.readInt32BE(j * 4)
9161 Wil = M.readInt32BE(j * 4 + 4)
9162
9163 loop()
9164 }
9165
9166 while (i < 80) {
9167 calcW()
9168 loop()
9169 }
9170
9171 this._al = (this._al + al) | 0
9172 this._bl = (this._bl + bl) | 0
9173 this._cl = (this._cl + cl) | 0
9174 this._dl = (this._dl + dl) | 0
9175 this._el = (this._el + el) | 0
9176 this._fl = (this._fl + fl) | 0
9177 this._gl = (this._gl + gl) | 0
9178 this._hl = (this._hl + hl) | 0
9179
9180 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9181 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9182 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9183 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9184 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9185 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9186 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9187 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9188 }
9189
9190 Sha512.prototype._hash = function () {
9191 var H = new Buffer(64)
9192
9193 function writeInt64BE (h, l, offset) {
9194 H.writeInt32BE(h, offset)
9195 H.writeInt32BE(l, offset + 4)
9196 }
9197
9198 writeInt64BE(this._a, this._al, 0)
9199 writeInt64BE(this._b, this._bl, 8)
9200 writeInt64BE(this._c, this._cl, 16)
9201 writeInt64BE(this._d, this._dl, 24)
9202 writeInt64BE(this._e, this._el, 32)
9203 writeInt64BE(this._f, this._fl, 40)
9204 writeInt64BE(this._g, this._gl, 48)
9205 writeInt64BE(this._h, this._hl, 56)
9206
9207 return H
9208 }
9209
9210 module.exports = Sha512
9211
9212 }).call(this,require("buffer").Buffer)
9213 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9214 (function (Buffer){
9215 'use strict';
9216 var createHash = require('create-hash/browser');
9217 var inherits = require('inherits')
9218
9219 var Transform = require('stream').Transform
9220
9221 var ZEROS = new Buffer(128)
9222 ZEROS.fill(0)
9223
9224 function Hmac(alg, key) {
9225 Transform.call(this)
9226
9227 if (typeof key === 'string') {
9228 key = new Buffer(key)
9229 }
9230
9231 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9232
9233 this._alg = alg
9234 this._key = key
9235
9236 if (key.length > blocksize) {
9237 key = createHash(alg).update(key).digest()
9238
9239 } else if (key.length < blocksize) {
9240 key = Buffer.concat([key, ZEROS], blocksize)
9241 }
9242
9243 var ipad = this._ipad = new Buffer(blocksize)
9244 var opad = this._opad = new Buffer(blocksize)
9245
9246 for (var i = 0; i < blocksize; i++) {
9247 ipad[i] = key[i] ^ 0x36
9248 opad[i] = key[i] ^ 0x5C
9249 }
9250
9251 this._hash = createHash(alg).update(ipad)
9252 }
9253
9254 inherits(Hmac, Transform)
9255
9256 Hmac.prototype.update = function (data, enc) {
9257 this._hash.update(data, enc)
9258
9259 return this
9260 }
9261
9262 Hmac.prototype._transform = function (data, _, next) {
9263 this._hash.update(data)
9264
9265 next()
9266 }
9267
9268 Hmac.prototype._flush = function (next) {
9269 this.push(this.digest())
9270
9271 next()
9272 }
9273
9274 Hmac.prototype.digest = function (enc) {
9275 var h = this._hash.digest()
9276
9277 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9278 }
9279
9280 module.exports = function createHmac(alg, key) {
9281 return new Hmac(alg, key)
9282 }
9283
9284 }).call(this,require("buffer").Buffer)
9285 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9286 arguments[4][12][0].apply(exports,arguments)
9287 },{"dup":12}],47:[function(require,module,exports){
9288 var assert = require('assert')
9289 var BigInteger = require('bigi')
9290
9291 var Point = require('./point')
9292
9293 function Curve(p, a, b, Gx, Gy, n, h) {
9294 this.p = p
9295 this.a = a
9296 this.b = b
9297 this.G = Point.fromAffine(this, Gx, Gy)
9298 this.n = n
9299 this.h = h
9300
9301 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9302
9303 // result caching
9304 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9305 }
9306
9307 Curve.prototype.pointFromX = function(isOdd, x) {
9308 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9309 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9310
9311 var y = beta
9312 if (beta.isEven() ^ !isOdd) {
9313 y = this.p.subtract(y) // -y % p
9314 }
9315
9316 return Point.fromAffine(this, x, y)
9317 }
9318
9319 Curve.prototype.isInfinity = function(Q) {
9320 if (Q === this.infinity) return true
9321
9322 return Q.z.signum() === 0 && Q.y.signum() !== 0
9323 }
9324
9325 Curve.prototype.isOnCurve = function(Q) {
9326 if (this.isInfinity(Q)) return true
9327
9328 var x = Q.affineX
9329 var y = Q.affineY
9330 var a = this.a
9331 var b = this.b
9332 var p = this.p
9333
9334 // Check that xQ and yQ are integers in the interval [0, p - 1]
9335 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9336 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9337
9338 // and check that y^2 = x^3 + ax + b (mod p)
9339 var lhs = y.square().mod(p)
9340 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9341 return lhs.equals(rhs)
9342 }
9343
9344 /**
9345 * Validate an elliptic curve point.
9346 *
9347 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9348 */
9349 Curve.prototype.validate = function(Q) {
9350 // Check Q != O
9351 assert(!this.isInfinity(Q), 'Point is at infinity')
9352 assert(this.isOnCurve(Q), 'Point is not on the curve')
9353
9354 // Check nQ = O (where Q is a scalar multiple of G)
9355 var nQ = Q.multiply(this.n)
9356 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9357
9358 return true
9359 }
9360
9361 module.exports = Curve
9362
9363 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9364 module.exports={
9365 "secp128r1": {
9366 "p": "fffffffdffffffffffffffffffffffff",
9367 "a": "fffffffdfffffffffffffffffffffffc",
9368 "b": "e87579c11079f43dd824993c2cee5ed3",
9369 "n": "fffffffe0000000075a30d1b9038a115",
9370 "h": "01",
9371 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9372 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9373 },
9374 "secp160k1": {
9375 "p": "fffffffffffffffffffffffffffffffeffffac73",
9376 "a": "00",
9377 "b": "07",
9378 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9379 "h": "01",
9380 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9381 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9382 },
9383 "secp160r1": {
9384 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9385 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9386 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9387 "n": "0100000000000000000001f4c8f927aed3ca752257",
9388 "h": "01",
9389 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9390 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9391 },
9392 "secp192k1": {
9393 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9394 "a": "00",
9395 "b": "03",
9396 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9397 "h": "01",
9398 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9399 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9400 },
9401 "secp192r1": {
9402 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9403 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9404 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9405 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9406 "h": "01",
9407 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9408 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9409 },
9410 "secp256k1": {
9411 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9412 "a": "00",
9413 "b": "07",
9414 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9415 "h": "01",
9416 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9417 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9418 },
9419 "secp256r1": {
9420 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9421 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9422 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9423 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9424 "h": "01",
9425 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9426 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9427 }
9428 }
9429
9430 },{}],49:[function(require,module,exports){
9431 var Point = require('./point')
9432 var Curve = require('./curve')
9433
9434 var getCurveByName = require('./names')
9435
9436 module.exports = {
9437 Curve: Curve,
9438 Point: Point,
9439 getCurveByName: getCurveByName
9440 }
9441
9442 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9443 var BigInteger = require('bigi')
9444
9445 var curves = require('./curves')
9446 var Curve = require('./curve')
9447
9448 function getCurveByName(name) {
9449 var curve = curves[name]
9450 if (!curve) return null
9451
9452 var p = new BigInteger(curve.p, 16)
9453 var a = new BigInteger(curve.a, 16)
9454 var b = new BigInteger(curve.b, 16)
9455 var n = new BigInteger(curve.n, 16)
9456 var h = new BigInteger(curve.h, 16)
9457 var Gx = new BigInteger(curve.Gx, 16)
9458 var Gy = new BigInteger(curve.Gy, 16)
9459
9460 return new Curve(p, a, b, Gx, Gy, n, h)
9461 }
9462
9463 module.exports = getCurveByName
9464
9465 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9466 (function (Buffer){
9467 var assert = require('assert')
9468 var BigInteger = require('bigi')
9469
9470 var THREE = BigInteger.valueOf(3)
9471
9472 function Point(curve, x, y, z) {
9473 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9474
9475 this.curve = curve
9476 this.x = x
9477 this.y = y
9478 this.z = z
9479 this._zInv = null
9480
9481 this.compressed = true
9482 }
9483
9484 Object.defineProperty(Point.prototype, 'zInv', {
9485 get: function() {
9486 if (this._zInv === null) {
9487 this._zInv = this.z.modInverse(this.curve.p)
9488 }
9489
9490 return this._zInv
9491 }
9492 })
9493
9494 Object.defineProperty(Point.prototype, 'affineX', {
9495 get: function() {
9496 return this.x.multiply(this.zInv).mod(this.curve.p)
9497 }
9498 })
9499
9500 Object.defineProperty(Point.prototype, 'affineY', {
9501 get: function() {
9502 return this.y.multiply(this.zInv).mod(this.curve.p)
9503 }
9504 })
9505
9506 Point.fromAffine = function(curve, x, y) {
9507 return new Point(curve, x, y, BigInteger.ONE)
9508 }
9509
9510 Point.prototype.equals = function(other) {
9511 if (other === this) return true
9512 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9513 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9514
9515 // u = Y2 * Z1 - Y1 * Z2
9516 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9517
9518 if (u.signum() !== 0) return false
9519
9520 // v = X2 * Z1 - X1 * Z2
9521 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9522
9523 return v.signum() === 0
9524 }
9525
9526 Point.prototype.negate = function() {
9527 var y = this.curve.p.subtract(this.y)
9528
9529 return new Point(this.curve, this.x, y, this.z)
9530 }
9531
9532 Point.prototype.add = function(b) {
9533 if (this.curve.isInfinity(this)) return b
9534 if (this.curve.isInfinity(b)) return this
9535
9536 var x1 = this.x
9537 var y1 = this.y
9538 var x2 = b.x
9539 var y2 = b.y
9540
9541 // u = Y2 * Z1 - Y1 * Z2
9542 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9543 // v = X2 * Z1 - X1 * Z2
9544 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9545
9546 if (v.signum() === 0) {
9547 if (u.signum() === 0) {
9548 return this.twice() // this == b, so double
9549 }
9550
9551 return this.curve.infinity // this = -b, so infinity
9552 }
9553
9554 var v2 = v.square()
9555 var v3 = v2.multiply(v)
9556 var x1v2 = x1.multiply(v2)
9557 var zu2 = u.square().multiply(this.z)
9558
9559 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9560 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9561 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9562 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
9563 // z3 = v^3 * z1 * z2
9564 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9565
9566 return new Point(this.curve, x3, y3, z3)
9567 }
9568
9569 Point.prototype.twice = function() {
9570 if (this.curve.isInfinity(this)) return this
9571 if (this.y.signum() === 0) return this.curve.infinity
9572
9573 var x1 = this.x
9574 var y1 = this.y
9575
9576 var y1z1 = y1.multiply(this.z)
9577 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9578 var a = this.curve.a
9579
9580 // w = 3 * x1^2 + a * z1^2
9581 var w = x1.square().multiply(THREE)
9582
9583 if (a.signum() !== 0) {
9584 w = w.add(this.z.square().multiply(a))
9585 }
9586
9587 w = w.mod(this.curve.p)
9588 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9589 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9590 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9591 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9592 // z3 = 8 * (y1 * z1)^3
9593 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9594
9595 return new Point(this.curve, x3, y3, z3)
9596 }
9597
9598 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9599 // TODO: modularize the multiplication algorithm
9600 Point.prototype.multiply = function(k) {
9601 if (this.curve.isInfinity(this)) return this
9602 if (k.signum() === 0) return this.curve.infinity
9603
9604 var e = k
9605 var h = e.multiply(THREE)
9606
9607 var neg = this.negate()
9608 var R = this
9609
9610 for (var i = h.bitLength() - 2; i > 0; --i) {
9611 R = R.twice()
9612
9613 var hBit = h.testBit(i)
9614 var eBit = e.testBit(i)
9615
9616 if (hBit != eBit) {
9617 R = R.add(hBit ? this : neg)
9618 }
9619 }
9620
9621 return R
9622 }
9623
9624 // Compute this*j + x*k (simultaneous multiplication)
9625 Point.prototype.multiplyTwo = function(j, x, k) {
9626 var i
9627
9628 if (j.bitLength() > k.bitLength())
9629 i = j.bitLength() - 1
9630 else
9631 i = k.bitLength() - 1
9632
9633 var R = this.curve.infinity
9634 var both = this.add(x)
9635
9636 while (i >= 0) {
9637 R = R.twice()
9638
9639 var jBit = j.testBit(i)
9640 var kBit = k.testBit(i)
9641
9642 if (jBit) {
9643 if (kBit) {
9644 R = R.add(both)
9645
9646 } else {
9647 R = R.add(this)
9648 }
9649
9650 } else {
9651 if (kBit) {
9652 R = R.add(x)
9653 }
9654 }
9655 --i
9656 }
9657
9658 return R
9659 }
9660
9661 Point.prototype.getEncoded = function(compressed) {
9662 if (compressed == undefined) compressed = this.compressed
9663 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9664
9665 var x = this.affineX
9666 var y = this.affineY
9667
9668 var buffer
9669
9670 // Determine size of q in bytes
9671 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9672
9673 // 0x02/0x03 | X
9674 if (compressed) {
9675 buffer = new Buffer(1 + byteLength)
9676 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9677
9678 // 0x04 | X | Y
9679 } else {
9680 buffer = new Buffer(1 + byteLength + byteLength)
9681 buffer.writeUInt8(0x04, 0)
9682
9683 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9684 }
9685
9686 x.toBuffer(byteLength).copy(buffer, 1)
9687
9688 return buffer
9689 }
9690
9691 Point.decodeFrom = function(curve, buffer) {
9692 var type = buffer.readUInt8(0)
9693 var compressed = (type !== 4)
9694
9695 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9696 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9697
9698 var Q
9699 if (compressed) {
9700 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9701 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9702
9703 var isOdd = (type === 0x03)
9704 Q = curve.pointFromX(isOdd, x)
9705
9706 } else {
9707 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9708
9709 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9710 Q = Point.fromAffine(curve, x, y)
9711 }
9712
9713 Q.compressed = compressed
9714 return Q
9715 }
9716
9717 Point.prototype.toString = function () {
9718 if (this.curve.isInfinity(this)) return '(INFINITY)'
9719
9720 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9721 }
9722
9723 module.exports = Point
9724
9725 }).call(this,require("buffer").Buffer)
9726 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9727 (function (process,global,Buffer){
9728 'use strict';
9729
9730 var crypto = global.crypto || global.msCrypto
9731 if(crypto && crypto.getRandomValues) {
9732 module.exports = randomBytes;
9733 } else {
9734 module.exports = oldBrowser;
9735 }
9736 function randomBytes(size, cb) {
9737 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9738 /* This will not work in older browsers.
9739 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9740 */
9741
9742 crypto.getRandomValues(bytes);
9743 if (typeof cb === 'function') {
9744 return process.nextTick(function () {
9745 cb(null, bytes);
9746 });
9747 }
9748 return bytes;
9749 }
9750 function oldBrowser() {
9751 throw new Error(
9752 'secure random number generation not supported by this browser\n'+
9753 'use chrome, FireFox or Internet Explorer 11'
9754 )
9755 }
9756
9757 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9758 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9759 (function (Buffer){
9760 'use strict';
9761
9762 function getFunctionName(fn) {
9763 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9764 }
9765
9766 function getTypeTypeName(type) {
9767 if (nativeTypes.Function(type)) {
9768 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9769 }
9770 if (nativeTypes.Object(type)) return JSON.stringify(type);
9771
9772 return type;
9773 }
9774
9775 function getValueTypeName(value) {
9776 if (nativeTypes.Null(value)) return '';
9777
9778 return getFunctionName(value.constructor);
9779 }
9780
9781 function tfErrorString(type, value) {
9782 var typeTypeName = getTypeTypeName(type);
9783 var valueTypeName = getValueTypeName(value);
9784
9785 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9786 }
9787
9788 function tfPropertyErrorString(type, name, value) {
9789 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9790 }
9791
9792 var nativeTypes = {
9793 Array: (function (_Array) {
9794 function Array(_x) {
9795 return _Array.apply(this, arguments);
9796 }
9797
9798 Array.toString = function () {
9799 return _Array.toString();
9800 };
9801
9802 return Array;
9803 })(function (value) {
9804 return value !== null && value !== undefined && value.constructor === Array;
9805 }),
9806 Boolean: function Boolean(value) {
9807 return typeof value === 'boolean';
9808 },
9809 Buffer: (function (_Buffer) {
9810 function Buffer(_x2) {
9811 return _Buffer.apply(this, arguments);
9812 }
9813
9814 Buffer.toString = function () {
9815 return _Buffer.toString();
9816 };
9817
9818 return Buffer;
9819 })(function (value) {
9820 return Buffer.isBuffer(value);
9821 }),
9822 Function: function Function(value) {
9823 return typeof value === 'function';
9824 },
9825 Null: function Null(value) {
9826 return value === undefined || value === null;
9827 },
9828 Number: function Number(value) {
9829 return typeof value === 'number';
9830 },
9831 Object: function Object(value) {
9832 return typeof value === 'object';
9833 },
9834 String: function String(value) {
9835 return typeof value === 'string';
9836 },
9837 '': function _() {
9838 return true;
9839 }
9840 };
9841
9842 function tJSON(type) {
9843 return type && type.toJSON ? type.toJSON() : type;
9844 }
9845
9846 function sJSON(type) {
9847 var json = tJSON(type);
9848 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9849 }
9850
9851 var otherTypes = {
9852 arrayOf: function arrayOf(type) {
9853 function arrayOf(value, strict) {
9854 try {
9855 return nativeTypes.Array(value) && value.every(function (x) {
9856 return typeforce(type, x, strict);
9857 });
9858 } catch (e) {
9859 return false;
9860 }
9861 }
9862 arrayOf.toJSON = function () {
9863 return [tJSON(type)];
9864 };
9865
9866 return arrayOf;
9867 },
9868
9869 maybe: function maybe(type) {
9870 function maybe(value, strict) {
9871 return nativeTypes.Null(value) || typeforce(type, value, strict);
9872 }
9873 maybe.toJSON = function () {
9874 return '?' + sJSON(type);
9875 };
9876
9877 return maybe;
9878 },
9879
9880 object: function object(type) {
9881 function object(value, strict) {
9882 typeforce(nativeTypes.Object, value, strict);
9883
9884 var propertyName, propertyType, propertyValue;
9885
9886 try {
9887 for (propertyName in type) {
9888 propertyType = type[propertyName];
9889 propertyValue = value[propertyName];
9890
9891 typeforce(propertyType, propertyValue, strict);
9892 }
9893 } catch (e) {
9894 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9895 }
9896
9897 if (strict) {
9898 for (propertyName in value) {
9899 if (type[propertyName]) continue;
9900
9901 throw new TypeError('Unexpected property "' + propertyName + '"');
9902 }
9903 }
9904
9905 return true;
9906 }
9907 object.toJSON = function () {
9908 return type;
9909 };
9910
9911 return object;
9912 },
9913
9914 oneOf: function oneOf() {
9915 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9916 types[_key] = arguments[_key];
9917 }
9918
9919 function oneOf(value, strict) {
9920 return types.some(function (type) {
9921 try {
9922 return typeforce(type, value, strict);
9923 } catch (e) {
9924 return false;
9925 }
9926 });
9927 }
9928 oneOf.toJSON = function () {
9929 return types.map(sJSON).join('|');
9930 };
9931
9932 return oneOf;
9933 },
9934
9935 quacksLike: function quacksLike(type) {
9936 function quacksLike(value, strict) {
9937 return type === getValueTypeName(value);
9938 }
9939 quacksLike.toJSON = function () {
9940 return type;
9941 };
9942
9943 return quacksLike;
9944 },
9945
9946 tuple: function tuple() {
9947 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9948 types[_key2] = arguments[_key2];
9949 }
9950
9951 function tuple(value, strict) {
9952 return types.every(function (type, i) {
9953 return typeforce(type, value[i], strict);
9954 });
9955 }
9956 tuple.toJSON = function () {
9957 return '(' + types.map(sJSON).join(', ') + ')';
9958 };
9959
9960 return tuple;
9961 },
9962
9963 value: function value(expected) {
9964 function value(actual) {
9965 return actual === expected;
9966 }
9967 value.toJSON = function () {
9968 return expected;
9969 };
9970
9971 return value;
9972 }
9973 };
9974
9975 function compile(type) {
9976 if (nativeTypes.String(type)) {
9977 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9978
9979 return nativeTypes[type] || otherTypes.quacksLike(type);
9980 } else if (type && nativeTypes.Object(type)) {
9981 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9982
9983 var compiled = {};
9984
9985 for (var propertyName in type) {
9986 compiled[propertyName] = compile(type[propertyName]);
9987 }
9988
9989 return otherTypes.object(compiled);
9990 } else if (nativeTypes.Function(type)) {
9991 return type;
9992 }
9993
9994 return otherTypes.value(type);
9995 }
9996
9997 function typeforce(_x3, _x4, _x5) {
9998 var _again = true;
9999
10000 _function: while (_again) {
10001 var type = _x3,
10002 value = _x4,
10003 strict = _x5;
10004 _again = false;
10005
10006 if (nativeTypes.Function(type)) {
10007 if (type(value, strict)) return true;
10008
10009 throw new TypeError(tfErrorString(type, value));
10010 }
10011
10012 // JIT
10013 _x3 = compile(type);
10014 _x4 = value;
10015 _x5 = strict;
10016 _again = true;
10017 continue _function;
10018 }
10019 }
10020
10021 // assign all types to typeforce function
10022 var typeName;
10023 Object.keys(nativeTypes).forEach(function (typeName) {
10024 var nativeType = nativeTypes[typeName];
10025 nativeType.toJSON = function () {
10026 return typeName;
10027 };
10028
10029 typeforce[typeName] = nativeType;
10030 });
10031
10032 for (typeName in otherTypes) {
10033 typeforce[typeName] = otherTypes[typeName];
10034 }
10035
10036 module.exports = typeforce;
10037 module.exports.compile = compile;
10038 }).call(this,require("buffer").Buffer)
10039 },{"buffer":7}],54:[function(require,module,exports){
10040 (function (Buffer){
10041 var assert = require('assert')
10042 var base58check = require('bs58check')
10043 var typeForce = require('typeforce')
10044 var networks = require('./networks')
10045 var scripts = require('./scripts')
10046
10047 function findScriptTypeByVersion (version) {
10048 for (var networkName in networks) {
10049 var network = networks[networkName]
10050
10051 if (version === network.pubKeyHash) return 'pubkeyhash'
10052 if (version === network.scriptHash) return 'scripthash'
10053 }
10054 }
10055
10056 function Address (hash, version) {
10057 typeForce('Buffer', hash)
10058
10059 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10060 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10061
10062 this.hash = hash
10063 this.version = version
10064 }
10065
10066 Address.fromBase58Check = function (string) {
10067 var payload = base58check.decode(string)
10068 var version = payload.readUInt8(0)
10069 var hash = payload.slice(1)
10070
10071 return new Address(hash, version)
10072 }
10073
10074 Address.fromOutputScript = function (script, network) {
10075 network = network || networks.bitcoin
10076
10077 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10078 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10079
10080 assert(false, script.toASM() + ' has no matching Address')
10081 }
10082
10083 Address.prototype.toBase58Check = function () {
10084 var payload = new Buffer(21)
10085 payload.writeUInt8(this.version, 0)
10086 this.hash.copy(payload, 1)
10087
10088 return base58check.encode(payload)
10089 }
10090
10091 Address.prototype.toOutputScript = function () {
10092 var scriptType = findScriptTypeByVersion(this.version)
10093
10094 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10095 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10096
10097 assert(false, this.toString() + ' has no matching Script')
10098 }
10099
10100 Address.prototype.toString = Address.prototype.toBase58Check
10101
10102 module.exports = Address
10103
10104 }).call(this,require("buffer").Buffer)
10105 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10106 var bs58check = require('bs58check')
10107
10108 function decode () {
10109 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10110
10111 return bs58check.decode.apply(undefined, arguments)
10112 }
10113
10114 function encode () {
10115 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10116
10117 return bs58check.encode.apply(undefined, arguments)
10118 }
10119
10120 module.exports = {
10121 decode: decode,
10122 encode: encode
10123 }
10124
10125 },{"bs58check":31}],56:[function(require,module,exports){
10126 (function (Buffer){
10127 var assert = require('assert')
10128 var bufferutils = require('./bufferutils')
10129 var crypto = require('./crypto')
10130
10131 var Transaction = require('./transaction')
10132
10133 function Block () {
10134 this.version = 1
10135 this.prevHash = null
10136 this.merkleRoot = null
10137 this.timestamp = 0
10138 this.bits = 0
10139 this.nonce = 0
10140 }
10141
10142 Block.fromBuffer = function (buffer) {
10143 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10144
10145 var offset = 0
10146 function readSlice (n) {
10147 offset += n
10148 return buffer.slice(offset - n, offset)
10149 }
10150
10151 function readUInt32 () {
10152 var i = buffer.readUInt32LE(offset)
10153 offset += 4
10154 return i
10155 }
10156
10157 var block = new Block()
10158 block.version = readUInt32()
10159 block.prevHash = readSlice(32)
10160 block.merkleRoot = readSlice(32)
10161 block.timestamp = readUInt32()
10162 block.bits = readUInt32()
10163 block.nonce = readUInt32()
10164
10165 if (buffer.length === 80) return block
10166
10167 function readVarInt () {
10168 var vi = bufferutils.readVarInt(buffer, offset)
10169 offset += vi.size
10170 return vi.number
10171 }
10172
10173 // FIXME: poor performance
10174 function readTransaction () {
10175 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10176
10177 offset += tx.toBuffer().length
10178 return tx
10179 }
10180
10181 var nTransactions = readVarInt()
10182 block.transactions = []
10183
10184 for (var i = 0; i < nTransactions; ++i) {
10185 var tx = readTransaction()
10186 block.transactions.push(tx)
10187 }
10188
10189 return block
10190 }
10191
10192 Block.fromHex = function (hex) {
10193 return Block.fromBuffer(new Buffer(hex, 'hex'))
10194 }
10195
10196 Block.prototype.getHash = function () {
10197 return crypto.hash256(this.toBuffer(true))
10198 }
10199
10200 Block.prototype.getId = function () {
10201 return bufferutils.reverse(this.getHash()).toString('hex')
10202 }
10203
10204 Block.prototype.getUTCDate = function () {
10205 var date = new Date(0) // epoch
10206 date.setUTCSeconds(this.timestamp)
10207
10208 return date
10209 }
10210
10211 Block.prototype.toBuffer = function (headersOnly) {
10212 var buffer = new Buffer(80)
10213
10214 var offset = 0
10215 function writeSlice (slice) {
10216 slice.copy(buffer, offset)
10217 offset += slice.length
10218 }
10219
10220 function writeUInt32 (i) {
10221 buffer.writeUInt32LE(i, offset)
10222 offset += 4
10223 }
10224
10225 writeUInt32(this.version)
10226 writeSlice(this.prevHash)
10227 writeSlice(this.merkleRoot)
10228 writeUInt32(this.timestamp)
10229 writeUInt32(this.bits)
10230 writeUInt32(this.nonce)
10231
10232 if (headersOnly || !this.transactions) return buffer
10233
10234 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10235 var txBuffers = this.transactions.map(function (tx) {
10236 return tx.toBuffer()
10237 })
10238
10239 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10240 }
10241
10242 Block.prototype.toHex = function (headersOnly) {
10243 return this.toBuffer(headersOnly).toString('hex')
10244 }
10245
10246 module.exports = Block
10247
10248 }).call(this,require("buffer").Buffer)
10249 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10250 (function (Buffer){
10251 var assert = require('assert')
10252 var opcodes = require('./opcodes')
10253
10254 // https://github.com/feross/buffer/blob/master/index.js#L1127
10255 function verifuint (value, max) {
10256 assert(typeof value === 'number', 'cannot write a non-number as a number')
10257 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10258 assert(value <= max, 'value is larger than maximum value for type')
10259 assert(Math.floor(value) === value, 'value has a fractional component')
10260 }
10261
10262 function pushDataSize (i) {
10263 return i < opcodes.OP_PUSHDATA1 ? 1
10264 : i < 0xff ? 2
10265 : i < 0xffff ? 3
10266 : 5
10267 }
10268
10269 function readPushDataInt (buffer, offset) {
10270 var opcode = buffer.readUInt8(offset)
10271 var number, size
10272
10273 // ~6 bit
10274 if (opcode < opcodes.OP_PUSHDATA1) {
10275 number = opcode
10276 size = 1
10277
10278 // 8 bit
10279 } else if (opcode === opcodes.OP_PUSHDATA1) {
10280 if (offset + 2 > buffer.length) return null
10281 number = buffer.readUInt8(offset + 1)
10282 size = 2
10283
10284 // 16 bit
10285 } else if (opcode === opcodes.OP_PUSHDATA2) {
10286 if (offset + 3 > buffer.length) return null
10287 number = buffer.readUInt16LE(offset + 1)
10288 size = 3
10289
10290 // 32 bit
10291 } else {
10292 if (offset + 5 > buffer.length) return null
10293 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10294
10295 number = buffer.readUInt32LE(offset + 1)
10296 size = 5
10297 }
10298
10299 return {
10300 opcode: opcode,
10301 number: number,
10302 size: size
10303 }
10304 }
10305
10306 function readUInt64LE (buffer, offset) {
10307 var a = buffer.readUInt32LE(offset)
10308 var b = buffer.readUInt32LE(offset + 4)
10309 b *= 0x100000000
10310
10311 verifuint(b + a, 0x001fffffffffffff)
10312
10313 return b + a
10314 }
10315
10316 function readVarInt (buffer, offset) {
10317 var t = buffer.readUInt8(offset)
10318 var number, size
10319
10320 // 8 bit
10321 if (t < 253) {
10322 number = t
10323 size = 1
10324
10325 // 16 bit
10326 } else if (t < 254) {
10327 number = buffer.readUInt16LE(offset + 1)
10328 size = 3
10329
10330 // 32 bit
10331 } else if (t < 255) {
10332 number = buffer.readUInt32LE(offset + 1)
10333 size = 5
10334
10335 // 64 bit
10336 } else {
10337 number = readUInt64LE(buffer, offset + 1)
10338 size = 9
10339 }
10340
10341 return {
10342 number: number,
10343 size: size
10344 }
10345 }
10346
10347 function writePushDataInt (buffer, number, offset) {
10348 var size = pushDataSize(number)
10349
10350 // ~6 bit
10351 if (size === 1) {
10352 buffer.writeUInt8(number, offset)
10353
10354 // 8 bit
10355 } else if (size === 2) {
10356 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10357 buffer.writeUInt8(number, offset + 1)
10358
10359 // 16 bit
10360 } else if (size === 3) {
10361 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10362 buffer.writeUInt16LE(number, offset + 1)
10363
10364 // 32 bit
10365 } else {
10366 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10367 buffer.writeUInt32LE(number, offset + 1)
10368 }
10369
10370 return size
10371 }
10372
10373 function writeUInt64LE (buffer, value, offset) {
10374 verifuint(value, 0x001fffffffffffff)
10375
10376 buffer.writeInt32LE(value & -1, offset)
10377 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10378 }
10379
10380 function varIntSize (i) {
10381 return i < 253 ? 1
10382 : i < 0x10000 ? 3
10383 : i < 0x100000000 ? 5
10384 : 9
10385 }
10386
10387 function writeVarInt (buffer, number, offset) {
10388 var size = varIntSize(number)
10389
10390 // 8 bit
10391 if (size === 1) {
10392 buffer.writeUInt8(number, offset)
10393
10394 // 16 bit
10395 } else if (size === 3) {
10396 buffer.writeUInt8(253, offset)
10397 buffer.writeUInt16LE(number, offset + 1)
10398
10399 // 32 bit
10400 } else if (size === 5) {
10401 buffer.writeUInt8(254, offset)
10402 buffer.writeUInt32LE(number, offset + 1)
10403
10404 // 64 bit
10405 } else {
10406 buffer.writeUInt8(255, offset)
10407 writeUInt64LE(buffer, number, offset + 1)
10408 }
10409
10410 return size
10411 }
10412
10413 function varIntBuffer (i) {
10414 var size = varIntSize(i)
10415 var buffer = new Buffer(size)
10416 writeVarInt(buffer, i, 0)
10417
10418 return buffer
10419 }
10420
10421 function reverse (buffer) {
10422 var buffer2 = new Buffer(buffer)
10423 Array.prototype.reverse.call(buffer2)
10424 return buffer2
10425 }
10426
10427 module.exports = {
10428 pushDataSize: pushDataSize,
10429 readPushDataInt: readPushDataInt,
10430 readUInt64LE: readUInt64LE,
10431 readVarInt: readVarInt,
10432 reverse: reverse,
10433 varIntBuffer: varIntBuffer,
10434 varIntSize: varIntSize,
10435 writePushDataInt: writePushDataInt,
10436 writeUInt64LE: writeUInt64LE,
10437 writeVarInt: writeVarInt
10438 }
10439
10440 }).call(this,require("buffer").Buffer)
10441 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10442 var createHash = require('create-hash')
10443
10444 function hash160 (buffer) {
10445 return ripemd160(sha256(buffer))
10446 }
10447
10448 function hash256 (buffer) {
10449 return sha256(sha256(buffer))
10450 }
10451
10452 function ripemd160 (buffer) {
10453 return createHash('rmd160').update(buffer).digest()
10454 }
10455
10456 function sha1 (buffer) {
10457 return createHash('sha1').update(buffer).digest()
10458 }
10459
10460 function sha256 (buffer) {
10461 return createHash('sha256').update(buffer).digest()
10462 }
10463
10464 // FIXME: Name not consistent with others
10465 var createHmac = require('create-hmac')
10466
10467 function HmacSHA256 (buffer, secret) {
10468 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10469 return createHmac('sha256', secret).update(buffer).digest()
10470 }
10471
10472 function HmacSHA512 (buffer, secret) {
10473 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10474 return createHmac('sha512', secret).update(buffer).digest()
10475 }
10476
10477 module.exports = {
10478 ripemd160: ripemd160,
10479 sha1: sha1,
10480 sha256: sha256,
10481 hash160: hash160,
10482 hash256: hash256,
10483 HmacSHA256: HmacSHA256,
10484 HmacSHA512: HmacSHA512
10485 }
10486
10487 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10488 (function (Buffer){
10489 var assert = require('assert')
10490 var createHmac = require('create-hmac')
10491 var typeForce = require('typeforce')
10492
10493 var BigInteger = require('bigi')
10494 var ECSignature = require('./ecsignature')
10495
10496 var ZERO = new Buffer([0])
10497 var ONE = new Buffer([1])
10498
10499 // https://tools.ietf.org/html/rfc6979#section-3.2
10500 function deterministicGenerateK (curve, hash, d, checkSig) {
10501 typeForce('Buffer', hash)
10502 typeForce('BigInteger', d)
10503
10504 // FIXME: remove/uncomment for 2.0.0
10505 // typeForce('Function', checkSig)
10506
10507 if (typeof checkSig !== 'function') {
10508 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10509
10510 checkSig = function (k) {
10511 var G = curve.G
10512 var n = curve.n
10513 var e = BigInteger.fromBuffer(hash)
10514
10515 var Q = G.multiply(k)
10516
10517 if (curve.isInfinity(Q))
10518 return false
10519
10520 var r = Q.affineX.mod(n)
10521 if (r.signum() === 0)
10522 return false
10523
10524 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10525 if (s.signum() === 0)
10526 return false
10527
10528 return true
10529 }
10530 }
10531
10532 // sanity check
10533 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10534
10535 var x = d.toBuffer(32)
10536 var k = new Buffer(32)
10537 var v = new Buffer(32)
10538
10539 // Step A, ignored as hash already provided
10540 // Step B
10541 v.fill(1)
10542
10543 // Step C
10544 k.fill(0)
10545
10546 // Step D
10547 k = createHmac('sha256', k)
10548 .update(v)
10549 .update(ZERO)
10550 .update(x)
10551 .update(hash)
10552 .digest()
10553
10554 // Step E
10555 v = createHmac('sha256', k).update(v).digest()
10556
10557 // Step F
10558 k = createHmac('sha256', k)
10559 .update(v)
10560 .update(ONE)
10561 .update(x)
10562 .update(hash)
10563 .digest()
10564
10565 // Step G
10566 v = createHmac('sha256', k).update(v).digest()
10567
10568 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10569 // Step H2b
10570 v = createHmac('sha256', k).update(v).digest()
10571
10572 var T = BigInteger.fromBuffer(v)
10573
10574 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10575 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10576 k = createHmac('sha256', k)
10577 .update(v)
10578 .update(ZERO)
10579 .digest()
10580
10581 v = createHmac('sha256', k).update(v).digest()
10582
10583 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10584 // Step H2b again
10585 v = createHmac('sha256', k).update(v).digest()
10586 T = BigInteger.fromBuffer(v)
10587 }
10588
10589 return T
10590 }
10591
10592 function sign (curve, hash, d) {
10593 var r, s
10594
10595 var e = BigInteger.fromBuffer(hash)
10596 var n = curve.n
10597 var G = curve.G
10598
10599 deterministicGenerateK(curve, hash, d, function (k) {
10600 var Q = G.multiply(k)
10601
10602 if (curve.isInfinity(Q))
10603 return false
10604
10605 r = Q.affineX.mod(n)
10606 if (r.signum() === 0)
10607 return false
10608
10609 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10610 if (s.signum() === 0)
10611 return false
10612
10613 return true
10614 })
10615
10616 var N_OVER_TWO = n.shiftRight(1)
10617
10618 // enforce low S values, see bip62: 'low s values in signatures'
10619 if (s.compareTo(N_OVER_TWO) > 0) {
10620 s = n.subtract(s)
10621 }
10622
10623 return new ECSignature(r, s)
10624 }
10625
10626 function verifyRaw (curve, e, signature, Q) {
10627 var n = curve.n
10628 var G = curve.G
10629
10630 var r = signature.r
10631 var s = signature.s
10632
10633 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10634 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10635 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10636
10637 // c = s^-1 mod n
10638 var c = s.modInverse(n)
10639
10640 // 1.4.4 Compute u1 = es^−1 mod n
10641 // u2 = rs^−1 mod n
10642 var u1 = e.multiply(c).mod(n)
10643 var u2 = r.multiply(c).mod(n)
10644
10645 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10646 var R = G.multiplyTwo(u1, Q, u2)
10647 var v = R.affineX.mod(n)
10648
10649 // 1.4.5 (cont.) Enforce R is not at infinity
10650 if (curve.isInfinity(R)) return false
10651
10652 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10653 return v.equals(r)
10654 }
10655
10656 function verify (curve, hash, signature, Q) {
10657 // 1.4.2 H = Hash(M), already done by the user
10658 // 1.4.3 e = H
10659 var e = BigInteger.fromBuffer(hash)
10660
10661 return verifyRaw(curve, e, signature, Q)
10662 }
10663
10664 /**
10665 * Recover a public key from a signature.
10666 *
10667 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10668 * Key Recovery Operation".
10669 *
10670 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10671 */
10672 function recoverPubKey (curve, e, signature, i) {
10673 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10674
10675 var n = curve.n
10676 var G = curve.G
10677
10678 var r = signature.r
10679 var s = signature.s
10680
10681 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10682 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10683
10684 // A set LSB signifies that the y-coordinate is odd
10685 var isYOdd = i & 1
10686
10687 // The more significant bit specifies whether we should use the
10688 // first or second candidate key.
10689 var isSecondKey = i >> 1
10690
10691 // 1.1 Let x = r + jn
10692 var x = isSecondKey ? r.add(n) : r
10693 var R = curve.pointFromX(isYOdd, x)
10694
10695 // 1.4 Check that nR is at infinity
10696 var nR = R.multiply(n)
10697 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10698
10699 // Compute -e from e
10700 var eNeg = e.negate().mod(n)
10701
10702 // 1.6.1 Compute Q = r^-1 (sR - eG)
10703 // Q = r^-1 (sR + -eG)
10704 var rInv = r.modInverse(n)
10705
10706 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10707 curve.validate(Q)
10708
10709 return Q
10710 }
10711
10712 /**
10713 * Calculate pubkey extraction parameter.
10714 *
10715 * When extracting a pubkey from a signature, we have to
10716 * distinguish four different cases. Rather than putting this
10717 * burden on the verifier, Bitcoin includes a 2-bit value with the
10718 * signature.
10719 *
10720 * This function simply tries all four cases and returns the value
10721 * that resulted in a successful pubkey recovery.
10722 */
10723 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10724 for (var i = 0; i < 4; i++) {
10725 var Qprime = recoverPubKey(curve, e, signature, i)
10726
10727 // 1.6.2 Verify Q
10728 if (Qprime.equals(Q)) {
10729 return i
10730 }
10731 }
10732
10733 throw new Error('Unable to find valid recovery factor')
10734 }
10735
10736 module.exports = {
10737 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10738 deterministicGenerateK: deterministicGenerateK,
10739 recoverPubKey: recoverPubKey,
10740 sign: sign,
10741 verify: verify,
10742 verifyRaw: verifyRaw
10743 }
10744
10745 }).call(this,require("buffer").Buffer)
10746 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10747 (function (Buffer){
10748 var assert = require('assert')
10749 var base58check = require('bs58check')
10750 var ecdsa = require('./ecdsa')
10751 var networks = require('./networks')
10752 var randomBytes = require('randombytes')
10753 var typeForce = require('typeforce')
10754
10755 var BigInteger = require('bigi')
10756 var ECPubKey = require('./ecpubkey')
10757
10758 var ecurve = require('ecurve')
10759 var secp256k1 = ecurve.getCurveByName('secp256k1')
10760
10761 function ECKey (d, compressed) {
10762 assert(d.signum() > 0, 'Private key must be greater than 0')
10763 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10764
10765 var Q = ECKey.curve.G.multiply(d)
10766
10767 this.d = d
10768 this.pub = new ECPubKey(Q, compressed)
10769 }
10770
10771 // Constants
10772 ECKey.curve = secp256k1
10773
10774 // Static constructors
10775 ECKey.fromWIF = function (string) {
10776 var payload = base58check.decode(string)
10777 var compressed = false
10778
10779 // Ignore the version byte
10780 payload = payload.slice(1)
10781
10782 if (payload.length === 33) {
10783 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10784
10785 // Truncate the compression flag
10786 payload = payload.slice(0, -1)
10787 compressed = true
10788 }
10789
10790 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10791
10792 var d = BigInteger.fromBuffer(payload)
10793 return new ECKey(d, compressed)
10794 }
10795
10796 ECKey.makeRandom = function (compressed, rng) {
10797 rng = rng || randomBytes
10798
10799 var buffer = rng(32)
10800 typeForce('Buffer', buffer)
10801 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10802
10803 var d = BigInteger.fromBuffer(buffer)
10804 d = d.mod(ECKey.curve.n)
10805
10806 return new ECKey(d, compressed)
10807 }
10808
10809 // Export functions
10810 ECKey.prototype.toWIF = function (network) {
10811 network = network || networks.bitcoin
10812
10813 var bufferLen = this.pub.compressed ? 34 : 33
10814 var buffer = new Buffer(bufferLen)
10815
10816 buffer.writeUInt8(network.wif, 0)
10817 this.d.toBuffer(32).copy(buffer, 1)
10818
10819 if (this.pub.compressed) {
10820 buffer.writeUInt8(0x01, 33)
10821 }
10822
10823 return base58check.encode(buffer)
10824 }
10825
10826 // Operations
10827 ECKey.prototype.sign = function (hash) {
10828 return ecdsa.sign(ECKey.curve, hash, this.d)
10829 }
10830
10831 module.exports = ECKey
10832
10833 }).call(this,require("buffer").Buffer)
10834 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
10835 (function (Buffer){
10836 var crypto = require('./crypto')
10837 var ecdsa = require('./ecdsa')
10838 var typeForce = require('typeforce')
10839 var networks = require('./networks')
10840
10841 var Address = require('./address')
10842
10843 var ecurve = require('ecurve')
10844 var secp256k1 = ecurve.getCurveByName('secp256k1')
10845
10846 function ECPubKey (Q, compressed) {
10847 if (compressed === undefined) {
10848 compressed = true
10849 }
10850
10851 typeForce('Point', Q)
10852 typeForce('Boolean', compressed)
10853
10854 this.compressed = compressed
10855 this.Q = Q
10856 }
10857
10858 // Constants
10859 ECPubKey.curve = secp256k1
10860
10861 // Static constructors
10862 ECPubKey.fromBuffer = function (buffer) {
10863 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10864 return new ECPubKey(Q, Q.compressed)
10865 }
10866
10867 ECPubKey.fromHex = function (hex) {
10868 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10869 }
10870
10871 // Operations
10872 ECPubKey.prototype.getAddress = function (network) {
10873 network = network || networks.bitcoin
10874
10875 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10876 }
10877
10878 ECPubKey.prototype.verify = function (hash, signature) {
10879 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10880 }
10881
10882 // Export functions
10883 ECPubKey.prototype.toBuffer = function () {
10884 return this.Q.getEncoded(this.compressed)
10885 }
10886
10887 ECPubKey.prototype.toHex = function () {
10888 return this.toBuffer().toString('hex')
10889 }
10890
10891 module.exports = ECPubKey
10892
10893 }).call(this,require("buffer").Buffer)
10894 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10895 (function (Buffer){
10896 var assert = require('assert')
10897 var typeForce = require('typeforce')
10898
10899 var BigInteger = require('bigi')
10900
10901 function ECSignature (r, s) {
10902 typeForce('BigInteger', r)
10903 typeForce('BigInteger', s)
10904
10905 this.r = r
10906 this.s = s
10907 }
10908
10909 ECSignature.parseCompact = function (buffer) {
10910 assert.equal(buffer.length, 65, 'Invalid signature length')
10911 var i = buffer.readUInt8(0) - 27
10912
10913 // At most 3 bits
10914 assert.equal(i, i & 7, 'Invalid signature parameter')
10915 var compressed = !!(i & 4)
10916
10917 // Recovery param only
10918 i = i & 3
10919
10920 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10921 var s = BigInteger.fromBuffer(buffer.slice(33))
10922
10923 return {
10924 compressed: compressed,
10925 i: i,
10926 signature: new ECSignature(r, s)
10927 }
10928 }
10929
10930 ECSignature.fromDER = function (buffer) {
10931 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10932 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10933 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10934
10935 var rLen = buffer.readUInt8(3)
10936 assert(rLen > 0, 'R length is zero')
10937
10938 var offset = 4 + rLen
10939 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10940
10941 var sLen = buffer.readUInt8(offset + 1)
10942 assert(sLen > 0, 'S length is zero')
10943
10944 var rB = buffer.slice(4, offset)
10945 var sB = buffer.slice(offset + 2)
10946 offset += 2 + sLen
10947
10948 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10949 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10950 }
10951
10952 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10953 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10954 }
10955
10956 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10957 var r = BigInteger.fromDERInteger(rB)
10958 var s = BigInteger.fromDERInteger(sB)
10959
10960 assert(r.signum() >= 0, 'R value is negative')
10961 assert(s.signum() >= 0, 'S value is negative')
10962
10963 return new ECSignature(r, s)
10964 }
10965
10966 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10967 ECSignature.parseScriptSignature = function (buffer) {
10968 var hashType = buffer.readUInt8(buffer.length - 1)
10969 var hashTypeMod = hashType & ~0x80
10970
10971 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10972
10973 return {
10974 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10975 hashType: hashType
10976 }
10977 }
10978
10979 ECSignature.prototype.toCompact = function (i, compressed) {
10980 if (compressed) {
10981 i += 4
10982 }
10983
10984 i += 27
10985
10986 var buffer = new Buffer(65)
10987 buffer.writeUInt8(i, 0)
10988
10989 this.r.toBuffer(32).copy(buffer, 1)
10990 this.s.toBuffer(32).copy(buffer, 33)
10991
10992 return buffer
10993 }
10994
10995 ECSignature.prototype.toDER = function () {
10996 var rBa = this.r.toDERInteger()
10997 var sBa = this.s.toDERInteger()
10998
10999 var sequence = []
11000
11001 // INTEGER
11002 sequence.push(0x02, rBa.length)
11003 sequence = sequence.concat(rBa)
11004
11005 // INTEGER
11006 sequence.push(0x02, sBa.length)
11007 sequence = sequence.concat(sBa)
11008
11009 // SEQUENCE
11010 sequence.unshift(0x30, sequence.length)
11011
11012 return new Buffer(sequence)
11013 }
11014
11015 ECSignature.prototype.toScriptSignature = function (hashType) {
11016 var hashTypeMod = hashType & ~0x80
11017 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11018
11019 var hashTypeBuffer = new Buffer(1)
11020 hashTypeBuffer.writeUInt8(hashType, 0)
11021
11022 return Buffer.concat([this.toDER(), hashTypeBuffer])
11023 }
11024
11025 module.exports = ECSignature
11026
11027 }).call(this,require("buffer").Buffer)
11028 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11029 (function (Buffer){
11030 var assert = require('assert')
11031 var base58check = require('bs58check')
11032 var bcrypto = require('./crypto')
11033 var createHmac = require('create-hmac')
11034 var typeForce = require('typeforce')
11035 var networks = require('./networks')
11036
11037 var BigInteger = require('bigi')
11038 var ECKey = require('./eckey')
11039 var ECPubKey = require('./ecpubkey')
11040
11041 var ecurve = require('ecurve')
11042 var curve = ecurve.getCurveByName('secp256k1')
11043
11044 function findBIP32NetworkByVersion (version) {
11045 for (var name in networks) {
11046 var network = networks[name]
11047
11048 if (version === network.bip32.private || version === network.bip32.public) {
11049 return network
11050 }
11051 }
11052
11053 assert(false, 'Could not find network for ' + version.toString(16))
11054 }
11055
11056 function HDNode (K, chainCode, network) {
11057 network = network || networks.bitcoin
11058
11059 typeForce('Buffer', chainCode)
11060
11061 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11062 assert(network.bip32, 'Unknown BIP32 constants for network')
11063
11064 this.chainCode = chainCode
11065 this.depth = 0
11066 this.index = 0
11067 this.parentFingerprint = 0x00000000
11068 this.network = network
11069
11070 if (K instanceof BigInteger) {
11071 this.privKey = new ECKey(K, true)
11072 this.pubKey = this.privKey.pub
11073 } else if (K instanceof ECKey) {
11074 assert(K.pub.compressed, 'ECKey must be compressed')
11075 this.privKey = K
11076 this.pubKey = K.pub
11077 } else if (K instanceof ECPubKey) {
11078 assert(K.compressed, 'ECPubKey must be compressed')
11079 this.pubKey = K
11080 } else {
11081 this.pubKey = new ECPubKey(K, true)
11082 }
11083 }
11084
11085 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11086 HDNode.HIGHEST_BIT = 0x80000000
11087 HDNode.LENGTH = 78
11088
11089 HDNode.fromSeedBuffer = function (seed, network) {
11090 typeForce('Buffer', seed)
11091
11092 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11093 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11094
11095 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11096 var IL = I.slice(0, 32)
11097 var IR = I.slice(32)
11098
11099 // In case IL is 0 or >= n, the master key is invalid
11100 // This is handled by `new ECKey` in the HDNode constructor
11101 var pIL = BigInteger.fromBuffer(IL)
11102
11103 return new HDNode(pIL, IR, network)
11104 }
11105
11106 HDNode.fromSeedHex = function (hex, network) {
11107 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11108 }
11109
11110 HDNode.fromBase58 = function (string, network) {
11111 return HDNode.fromBuffer(base58check.decode(string), network, true)
11112 }
11113
11114 // FIXME: remove in 2.x.y
11115 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11116 if (!__ignoreDeprecation) {
11117 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11118 }
11119
11120 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11121
11122 // 4 byte: version bytes
11123 var version = buffer.readUInt32BE(0)
11124
11125 if (network) {
11126 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11127
11128 // auto-detect
11129 } else {
11130 network = findBIP32NetworkByVersion(version)
11131 }
11132
11133 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11134 var depth = buffer.readUInt8(4)
11135
11136 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11137 var parentFingerprint = buffer.readUInt32BE(5)
11138 if (depth === 0) {
11139 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11140 }
11141
11142 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11143 // This is encoded in MSB order. (0x00000000 if master key)
11144 var index = buffer.readUInt32BE(9)
11145 assert(depth > 0 || index === 0, 'Invalid index')
11146
11147 // 32 bytes: the chain code
11148 var chainCode = buffer.slice(13, 45)
11149 var data, hd
11150
11151 // 33 bytes: private key data (0x00 + k)
11152 if (version === network.bip32.private) {
11153 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11154 data = buffer.slice(46, 78)
11155 var d = BigInteger.fromBuffer(data)
11156 hd = new HDNode(d, chainCode, network)
11157
11158 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11159 } else {
11160 data = buffer.slice(45, 78)
11161 var Q = ecurve.Point.decodeFrom(curve, data)
11162 assert.equal(Q.compressed, true, 'Invalid public key')
11163
11164 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11165 // If not, the extended public key is invalid.
11166 curve.validate(Q)
11167
11168 hd = new HDNode(Q, chainCode, network)
11169 }
11170
11171 hd.depth = depth
11172 hd.index = index
11173 hd.parentFingerprint = parentFingerprint
11174
11175 return hd
11176 }
11177
11178 // FIXME: remove in 2.x.y
11179 HDNode.fromHex = function (hex, network) {
11180 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11181 }
11182
11183 HDNode.prototype.getIdentifier = function () {
11184 return bcrypto.hash160(this.pubKey.toBuffer())
11185 }
11186
11187 HDNode.prototype.getFingerprint = function () {
11188 return this.getIdentifier().slice(0, 4)
11189 }
11190
11191 HDNode.prototype.getAddress = function () {
11192 return this.pubKey.getAddress(this.network)
11193 }
11194
11195 HDNode.prototype.neutered = function () {
11196 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11197 neutered.depth = this.depth
11198 neutered.index = this.index
11199 neutered.parentFingerprint = this.parentFingerprint
11200
11201 return neutered
11202 }
11203
11204 HDNode.prototype.toBase58 = function (isPrivate) {
11205 return base58check.encode(this.toBuffer(isPrivate, true))
11206 }
11207
11208 // FIXME: remove in 2.x.y
11209 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11210 if (isPrivate === undefined) {
11211 isPrivate = !!this.privKey
11212
11213 // FIXME: remove in 2.x.y
11214 } else {
11215 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11216 }
11217
11218 if (!__ignoreDeprecation) {
11219 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11220 }
11221
11222 // Version
11223 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11224 var buffer = new Buffer(HDNode.LENGTH)
11225
11226 // 4 bytes: version bytes
11227 buffer.writeUInt32BE(version, 0)
11228
11229 // Depth
11230 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11231 buffer.writeUInt8(this.depth, 4)
11232
11233 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11234 buffer.writeUInt32BE(this.parentFingerprint, 5)
11235
11236 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11237 // This is encoded in Big endian. (0x00000000 if master key)
11238 buffer.writeUInt32BE(this.index, 9)
11239
11240 // 32 bytes: the chain code
11241 this.chainCode.copy(buffer, 13)
11242
11243 // 33 bytes: the public key or private key data
11244 if (isPrivate) {
11245 // FIXME: remove in 2.x.y
11246 assert(this.privKey, 'Missing private key')
11247
11248 // 0x00 + k for private keys
11249 buffer.writeUInt8(0, 45)
11250 this.privKey.d.toBuffer(32).copy(buffer, 46)
11251 } else {
11252 // X9.62 encoding for public keys
11253 this.pubKey.toBuffer().copy(buffer, 45)
11254 }
11255
11256 return buffer
11257 }
11258
11259 // FIXME: remove in 2.x.y
11260 HDNode.prototype.toHex = function (isPrivate) {
11261 return this.toBuffer(isPrivate).toString('hex')
11262 }
11263
11264 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11265 HDNode.prototype.derive = function (index) {
11266 var isHardened = index >= HDNode.HIGHEST_BIT
11267 var indexBuffer = new Buffer(4)
11268 indexBuffer.writeUInt32BE(index, 0)
11269
11270 var data
11271
11272 // Hardened child
11273 if (isHardened) {
11274 assert(this.privKey, 'Could not derive hardened child key')
11275
11276 // data = 0x00 || ser256(kpar) || ser32(index)
11277 data = Buffer.concat([
11278 this.privKey.d.toBuffer(33),
11279 indexBuffer
11280 ])
11281
11282 // Normal child
11283 } else {
11284 // data = serP(point(kpar)) || ser32(index)
11285 // = serP(Kpar) || ser32(index)
11286 data = Buffer.concat([
11287 this.pubKey.toBuffer(),
11288 indexBuffer
11289 ])
11290 }
11291
11292 var I = createHmac('sha512', this.chainCode).update(data).digest()
11293 var IL = I.slice(0, 32)
11294 var IR = I.slice(32)
11295
11296 var pIL = BigInteger.fromBuffer(IL)
11297
11298 // In case parse256(IL) >= n, proceed with the next value for i
11299 if (pIL.compareTo(curve.n) >= 0) {
11300 return this.derive(index + 1)
11301 }
11302
11303 // Private parent key -> private child key
11304 var hd
11305 if (this.privKey) {
11306 // ki = parse256(IL) + kpar (mod n)
11307 var ki = pIL.add(this.privKey.d).mod(curve.n)
11308
11309 // In case ki == 0, proceed with the next value for i
11310 if (ki.signum() === 0) {
11311 return this.derive(index + 1)
11312 }
11313
11314 hd = new HDNode(ki, IR, this.network)
11315
11316 // Public parent key -> public child key
11317 } else {
11318 // Ki = point(parse256(IL)) + Kpar
11319 // = G*IL + Kpar
11320 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11321
11322 // In case Ki is the point at infinity, proceed with the next value for i
11323 if (curve.isInfinity(Ki)) {
11324 return this.derive(index + 1)
11325 }
11326
11327 hd = new HDNode(Ki, IR, this.network)
11328 }
11329
11330 hd.depth = this.depth + 1
11331 hd.index = index
11332 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11333
11334 return hd
11335 }
11336
11337 HDNode.prototype.deriveHardened = function (index) {
11338 // Only derives hardened private keys by default
11339 return this.derive(index + HDNode.HIGHEST_BIT)
11340 }
11341
11342 HDNode.prototype.toString = HDNode.prototype.toBase58
11343
11344 module.exports = HDNode
11345
11346 }).call(this,require("buffer").Buffer)
11347 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
11348 module.exports = {
11349 Address: require('./address'),
11350 base58check: require('./base58check'),
11351 Block: require('./block'),
11352 bufferutils: require('./bufferutils'),
11353 crypto: require('./crypto'),
11354 ecdsa: require('./ecdsa'),
11355 ECKey: require('./eckey'),
11356 ECPubKey: require('./ecpubkey'),
11357 ECSignature: require('./ecsignature'),
11358 Message: require('./message'),
11359 opcodes: require('./opcodes'),
11360 HDNode: require('./hdnode'),
11361 Script: require('./script'),
11362 scripts: require('./scripts'),
11363 Transaction: require('./transaction'),
11364 TransactionBuilder: require('./transaction_builder'),
11365 networks: require('./networks'),
11366 Wallet: require('./wallet')
11367 }
11368
11369 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
11370 (function (Buffer){
11371 var bufferutils = require('./bufferutils')
11372 var crypto = require('./crypto')
11373 var ecdsa = require('./ecdsa')
11374 var networks = require('./networks')
11375
11376 var BigInteger = require('bigi')
11377 var ECPubKey = require('./ecpubkey')
11378 var ECSignature = require('./ecsignature')
11379
11380 var ecurve = require('ecurve')
11381 var ecparams = ecurve.getCurveByName('secp256k1')
11382
11383 function magicHash (message, network) {
11384 var magicPrefix = new Buffer(network.magicPrefix)
11385 var messageBuffer = new Buffer(message)
11386 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11387
11388 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11389 return crypto.hash256(buffer)
11390 }
11391
11392 function sign (privKey, message, network) {
11393 network = network || networks.bitcoin
11394
11395 var hash = magicHash(message, network)
11396 var signature = privKey.sign(hash)
11397 var e = BigInteger.fromBuffer(hash)
11398 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11399
11400 return signature.toCompact(i, privKey.pub.compressed)
11401 }
11402
11403 // TODO: network could be implied from address
11404 function verify (address, signature, message, network) {
11405 if (!Buffer.isBuffer(signature)) {
11406 signature = new Buffer(signature, 'base64')
11407 }
11408
11409 network = network || networks.bitcoin
11410
11411 var hash = magicHash(message, network)
11412 var parsed = ECSignature.parseCompact(signature)
11413 var e = BigInteger.fromBuffer(hash)
11414 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11415
11416 var pubKey = new ECPubKey(Q, parsed.compressed)
11417 return pubKey.getAddress(network).toString() === address.toString()
11418 }
11419
11420 module.exports = {
11421 magicHash: magicHash,
11422 sign: sign,
11423 verify: verify
11424 }
11425
11426 }).call(this,require("buffer").Buffer)
11427 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11428 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11429 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11430
11431 var networks = {
11432 bitcoin: {
11433 magicPrefix: '\x18Bitcoin Signed Message:\n',
11434 bip32: {
11435 public: 0x0488b21e,
11436 private: 0x0488ade4
11437 },
11438 pubKeyHash: 0x00,
11439 scriptHash: 0x05,
11440 wif: 0x80,
11441 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11442 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11443 estimateFee: estimateFee('bitcoin')
11444 },
11445 testnet: {
11446 magicPrefix: '\x18Bitcoin Signed Message:\n',
11447 bip32: {
11448 public: 0x043587cf,
11449 private: 0x04358394
11450 },
11451 pubKeyHash: 0x6f,
11452 scriptHash: 0xc4,
11453 wif: 0xef,
11454 dustThreshold: 546,
11455 feePerKb: 10000,
11456 estimateFee: estimateFee('testnet')
11457 },
11458 litecoin: {
11459 magicPrefix: '\x19Litecoin Signed Message:\n',
11460 bip32: {
11461 public: 0x019da462,
11462 private: 0x019d9cfe
11463 },
11464 pubKeyHash: 0x30,
11465 scriptHash: 0x05,
11466 wif: 0xb0,
11467 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11468 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11469 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11470 estimateFee: estimateFee('litecoin')
11471 },
11472 dogecoin: {
11473 magicPrefix: '\x19Dogecoin Signed Message:\n',
11474 bip32: {
11475 public: 0x02facafd,
11476 private: 0x02fac398
11477 },
11478 pubKeyHash: 0x1e,
11479 scriptHash: 0x16,
11480 wif: 0x9e,
11481 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11482 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11483 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11484 estimateFee: estimateFee('dogecoin')
11485 },
11486 viacoin: {
11487 magicPrefix: '\x18Viacoin Signed Message:\n',
11488 bip32: {
11489 public: 0x0488b21e,
11490 private: 0x0488ade4
11491 },
11492 pubKeyHash: 0x47,
11493 scriptHash: 0x21,
11494 wif: 0xc7,
11495 dustThreshold: 560,
11496 dustSoftThreshold: 100000,
11497 feePerKb: 100000, //
11498 estimateFee: estimateFee('viacoin')
11499 },
11500 viacointestnet: {
11501 magicPrefix: '\x18Viacoin Signed Message:\n',
11502 bip32: {
11503 public: 0x043587cf,
11504 private: 0x04358394
11505 },
11506 pubKeyHash: 0x7f,
11507 scriptHash: 0xc4,
11508 wif: 0xff,
11509 dustThreshold: 560,
11510 dustSoftThreshold: 100000,
11511 feePerKb: 100000,
11512 estimateFee: estimateFee('viacointestnet')
11513 },
11514 gamerscoin: {
11515 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11516 bip32: {
11517 public: 0x019da462,
11518 private: 0x019d9cfe
11519 },
11520 pubKeyHash: 0x26,
11521 scriptHash: 0x05,
11522 wif: 0xA6,
11523 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11524 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11525 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11526 estimateFee: estimateFee('gamerscoin')
11527 },
11528 jumbucks: {
11529 magicPrefix: '\x19Jumbucks Signed Message:\n',
11530 bip32: {
11531 public: 0x037a689a,
11532 private: 0x037a6460
11533 },
11534 pubKeyHash: 0x2b,
11535 scriptHash: 0x05,
11536 wif: 0xab,
11537 dustThreshold: 0,
11538 dustSoftThreshold: 10000,
11539 feePerKb: 10000,
11540 estimateFee: estimateFee('jumbucks')
11541 },
11542 zetacoin: {
11543 magicPrefix: '\x18Zetacoin Signed Message:\n',
11544 bip32: {
11545 public: 0x0488b21e,
11546 private: 0x0488ade4
11547 },
11548 pubKeyHash: 0x50,
11549 scriptHash: 0x09,
11550 wif: 0xe0,
11551 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11552 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11553 estimateFee: estimateFee('zetacoin')
11554 }
11555 }
11556
11557 function estimateFee (type) {
11558 return function (tx) {
11559 var network = networks[type]
11560 var baseFee = network.feePerKb
11561 var byteSize = tx.toBuffer().length
11562
11563 var fee = baseFee * Math.ceil(byteSize / 1000)
11564 if (network.dustSoftThreshold === undefined) return fee
11565
11566 tx.outs.forEach(function (e) {
11567 if (e.value < network.dustSoftThreshold) {
11568 fee += baseFee
11569 }
11570 })
11571
11572 return fee
11573 }
11574 }
11575
11576 module.exports = networks
11577
11578 },{}],67:[function(require,module,exports){
11579 module.exports = {
11580 // push value
11581 OP_FALSE: 0,
11582 OP_0: 0,
11583 OP_PUSHDATA1: 76,
11584 OP_PUSHDATA2: 77,
11585 OP_PUSHDATA4: 78,
11586 OP_1NEGATE: 79,
11587 OP_RESERVED: 80,
11588 OP_1: 81,
11589 OP_TRUE: 81,
11590 OP_2: 82,
11591 OP_3: 83,
11592 OP_4: 84,
11593 OP_5: 85,
11594 OP_6: 86,
11595 OP_7: 87,
11596 OP_8: 88,
11597 OP_9: 89,
11598 OP_10: 90,
11599 OP_11: 91,
11600 OP_12: 92,
11601 OP_13: 93,
11602 OP_14: 94,
11603 OP_15: 95,
11604 OP_16: 96,
11605
11606 // control
11607 OP_NOP: 97,
11608 OP_VER: 98,
11609 OP_IF: 99,
11610 OP_NOTIF: 100,
11611 OP_VERIF: 101,
11612 OP_VERNOTIF: 102,
11613 OP_ELSE: 103,
11614 OP_ENDIF: 104,
11615 OP_VERIFY: 105,
11616 OP_RETURN: 106,
11617
11618 // stack ops
11619 OP_TOALTSTACK: 107,
11620 OP_FROMALTSTACK: 108,
11621 OP_2DROP: 109,
11622 OP_2DUP: 110,
11623 OP_3DUP: 111,
11624 OP_2OVER: 112,
11625 OP_2ROT: 113,
11626 OP_2SWAP: 114,
11627 OP_IFDUP: 115,
11628 OP_DEPTH: 116,
11629 OP_DROP: 117,
11630 OP_DUP: 118,
11631 OP_NIP: 119,
11632 OP_OVER: 120,
11633 OP_PICK: 121,
11634 OP_ROLL: 122,
11635 OP_ROT: 123,
11636 OP_SWAP: 124,
11637 OP_TUCK: 125,
11638
11639 // splice ops
11640 OP_CAT: 126,
11641 OP_SUBSTR: 127,
11642 OP_LEFT: 128,
11643 OP_RIGHT: 129,
11644 OP_SIZE: 130,
11645
11646 // bit logic
11647 OP_INVERT: 131,
11648 OP_AND: 132,
11649 OP_OR: 133,
11650 OP_XOR: 134,
11651 OP_EQUAL: 135,
11652 OP_EQUALVERIFY: 136,
11653 OP_RESERVED1: 137,
11654 OP_RESERVED2: 138,
11655
11656 // numeric
11657 OP_1ADD: 139,
11658 OP_1SUB: 140,
11659 OP_2MUL: 141,
11660 OP_2DIV: 142,
11661 OP_NEGATE: 143,
11662 OP_ABS: 144,
11663 OP_NOT: 145,
11664 OP_0NOTEQUAL: 146,
11665
11666 OP_ADD: 147,
11667 OP_SUB: 148,
11668 OP_MUL: 149,
11669 OP_DIV: 150,
11670 OP_MOD: 151,
11671 OP_LSHIFT: 152,
11672 OP_RSHIFT: 153,
11673
11674 OP_BOOLAND: 154,
11675 OP_BOOLOR: 155,
11676 OP_NUMEQUAL: 156,
11677 OP_NUMEQUALVERIFY: 157,
11678 OP_NUMNOTEQUAL: 158,
11679 OP_LESSTHAN: 159,
11680 OP_GREATERTHAN: 160,
11681 OP_LESSTHANOREQUAL: 161,
11682 OP_GREATERTHANOREQUAL: 162,
11683 OP_MIN: 163,
11684 OP_MAX: 164,
11685
11686 OP_WITHIN: 165,
11687
11688 // crypto
11689 OP_RIPEMD160: 166,
11690 OP_SHA1: 167,
11691 OP_SHA256: 168,
11692 OP_HASH160: 169,
11693 OP_HASH256: 170,
11694 OP_CODESEPARATOR: 171,
11695 OP_CHECKSIG: 172,
11696 OP_CHECKSIGVERIFY: 173,
11697 OP_CHECKMULTISIG: 174,
11698 OP_CHECKMULTISIGVERIFY: 175,
11699
11700 // expansion
11701 OP_NOP1: 176,
11702 OP_NOP2: 177,
11703 OP_NOP3: 178,
11704 OP_NOP4: 179,
11705 OP_NOP5: 180,
11706 OP_NOP6: 181,
11707 OP_NOP7: 182,
11708 OP_NOP8: 183,
11709 OP_NOP9: 184,
11710 OP_NOP10: 185,
11711
11712 // template matching params
11713 OP_PUBKEYHASH: 253,
11714 OP_PUBKEY: 254,
11715 OP_INVALIDOPCODE: 255
11716 }
11717
11718 },{}],68:[function(require,module,exports){
11719 (function (Buffer){
11720 var assert = require('assert')
11721 var bufferutils = require('./bufferutils')
11722 var crypto = require('./crypto')
11723 var typeForce = require('typeforce')
11724 var opcodes = require('./opcodes')
11725
11726 function Script (buffer, chunks) {
11727 typeForce('Buffer', buffer)
11728 typeForce('Array', chunks)
11729
11730 this.buffer = buffer
11731 this.chunks = chunks
11732 }
11733
11734 Script.fromASM = function (asm) {
11735 var strChunks = asm.split(' ')
11736 var chunks = strChunks.map(function (strChunk) {
11737 // opcode
11738 if (strChunk in opcodes) {
11739 return opcodes[strChunk]
11740
11741 // data chunk
11742 } else {
11743 return new Buffer(strChunk, 'hex')
11744 }
11745 })
11746
11747 return Script.fromChunks(chunks)
11748 }
11749
11750 Script.fromBuffer = function (buffer) {
11751 var chunks = []
11752 var i = 0
11753
11754 while (i < buffer.length) {
11755 var opcode = buffer.readUInt8(i)
11756
11757 // data chunk
11758 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11759 var d = bufferutils.readPushDataInt(buffer, i)
11760
11761 // did reading a pushDataInt fail? return non-chunked script
11762 if (d === null) return new Script(buffer, [])
11763 i += d.size
11764
11765 // attempt to read too much data?
11766 if (i + d.number > buffer.length) return new Script(buffer, [])
11767
11768 var data = buffer.slice(i, i + d.number)
11769 i += d.number
11770
11771 chunks.push(data)
11772
11773 // opcode
11774 } else {
11775 chunks.push(opcode)
11776
11777 i += 1
11778 }
11779 }
11780
11781 return new Script(buffer, chunks)
11782 }
11783
11784 Script.fromChunks = function (chunks) {
11785 typeForce('Array', chunks)
11786
11787 var bufferSize = chunks.reduce(function (accum, chunk) {
11788 // data chunk
11789 if (Buffer.isBuffer(chunk)) {
11790 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11791 }
11792
11793 // opcode
11794 return accum + 1
11795 }, 0.0)
11796
11797 var buffer = new Buffer(bufferSize)
11798 var offset = 0
11799
11800 chunks.forEach(function (chunk) {
11801 // data chunk
11802 if (Buffer.isBuffer(chunk)) {
11803 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11804
11805 chunk.copy(buffer, offset)
11806 offset += chunk.length
11807
11808 // opcode
11809 } else {
11810 buffer.writeUInt8(chunk, offset)
11811 offset += 1
11812 }
11813 })
11814
11815 assert.equal(offset, buffer.length, 'Could not decode chunks')
11816 return new Script(buffer, chunks)
11817 }
11818
11819 Script.fromHex = function (hex) {
11820 return Script.fromBuffer(new Buffer(hex, 'hex'))
11821 }
11822
11823 Script.EMPTY = Script.fromChunks([])
11824
11825 Script.prototype.getHash = function () {
11826 return crypto.hash160(this.buffer)
11827 }
11828
11829 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11830 Script.prototype.without = function (needle) {
11831 return Script.fromChunks(this.chunks.filter(function (op) {
11832 return op !== needle
11833 }))
11834 }
11835
11836 var reverseOps = []
11837 for (var op in opcodes) {
11838 var code = opcodes[op]
11839 reverseOps[code] = op
11840 }
11841
11842 Script.prototype.toASM = function () {
11843 return this.chunks.map(function (chunk) {
11844 // data chunk
11845 if (Buffer.isBuffer(chunk)) {
11846 return chunk.toString('hex')
11847
11848 // opcode
11849 } else {
11850 return reverseOps[chunk]
11851 }
11852 }).join(' ')
11853 }
11854
11855 Script.prototype.toBuffer = function () {
11856 return this.buffer
11857 }
11858
11859 Script.prototype.toHex = function () {
11860 return this.toBuffer().toString('hex')
11861 }
11862
11863 module.exports = Script
11864
11865 }).call(this,require("buffer").Buffer)
11866 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11867 (function (Buffer){
11868 var assert = require('assert')
11869 var ops = require('./opcodes')
11870 var typeForce = require('typeforce')
11871
11872 var ecurve = require('ecurve')
11873 var curve = ecurve.getCurveByName('secp256k1')
11874
11875 var ECSignature = require('./ecsignature')
11876 var Script = require('./script')
11877
11878 function isCanonicalPubKey (buffer) {
11879 if (!Buffer.isBuffer(buffer)) return false
11880
11881 try {
11882 ecurve.Point.decodeFrom(curve, buffer)
11883 } catch (e) {
11884 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11885 throw e
11886
11887 return false
11888 }
11889
11890 return true
11891 }
11892
11893 function isCanonicalSignature (buffer) {
11894 if (!Buffer.isBuffer(buffer)) return false
11895
11896 try {
11897 ECSignature.parseScriptSignature(buffer)
11898 } catch (e) {
11899 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
11900 throw e
11901 }
11902
11903 return false
11904 }
11905
11906 return true
11907 }
11908
11909 function isPubKeyHashInput (script) {
11910 return script.chunks.length === 2 &&
11911 isCanonicalSignature(script.chunks[0]) &&
11912 isCanonicalPubKey(script.chunks[1])
11913 }
11914
11915 function isPubKeyHashOutput (script) {
11916 return script.chunks.length === 5 &&
11917 script.chunks[0] === ops.OP_DUP &&
11918 script.chunks[1] === ops.OP_HASH160 &&
11919 Buffer.isBuffer(script.chunks[2]) &&
11920 script.chunks[2].length === 20 &&
11921 script.chunks[3] === ops.OP_EQUALVERIFY &&
11922 script.chunks[4] === ops.OP_CHECKSIG
11923 }
11924
11925 function isPubKeyInput (script) {
11926 return script.chunks.length === 1 &&
11927 isCanonicalSignature(script.chunks[0])
11928 }
11929
11930 function isPubKeyOutput (script) {
11931 return script.chunks.length === 2 &&
11932 isCanonicalPubKey(script.chunks[0]) &&
11933 script.chunks[1] === ops.OP_CHECKSIG
11934 }
11935
11936 function isScriptHashInput (script, allowIncomplete) {
11937 if (script.chunks.length < 2) return false
11938
11939 var lastChunk = script.chunks[script.chunks.length - 1]
11940 if (!Buffer.isBuffer(lastChunk)) return false
11941
11942 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11943 var redeemScript = Script.fromBuffer(lastChunk)
11944
11945 // is redeemScript a valid script?
11946 if (redeemScript.chunks.length === 0) return false
11947
11948 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11949 }
11950
11951 function isScriptHashOutput (script) {
11952 return script.chunks.length === 3 &&
11953 script.chunks[0] === ops.OP_HASH160 &&
11954 Buffer.isBuffer(script.chunks[1]) &&
11955 script.chunks[1].length === 20 &&
11956 script.chunks[2] === ops.OP_EQUAL
11957 }
11958
11959 // allowIncomplete is to account for combining signatures
11960 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11961 function isMultisigInput (script, allowIncomplete) {
11962 if (script.chunks.length < 2) return false
11963 if (script.chunks[0] !== ops.OP_0) return false
11964
11965 if (allowIncomplete) {
11966 return script.chunks.slice(1).every(function (chunk) {
11967 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11968 })
11969 }
11970
11971 return script.chunks.slice(1).every(isCanonicalSignature)
11972 }
11973
11974 function isMultisigOutput (script) {
11975 if (script.chunks.length < 4) return false
11976 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11977
11978 var mOp = script.chunks[0]
11979 if (mOp === ops.OP_0) return false
11980 if (mOp < ops.OP_1) return false
11981 if (mOp > ops.OP_16) return false
11982
11983 var nOp = script.chunks[script.chunks.length - 2]
11984 if (nOp === ops.OP_0) return false
11985 if (nOp < ops.OP_1) return false
11986 if (nOp > ops.OP_16) return false
11987
11988 var m = mOp - (ops.OP_1 - 1)
11989 var n = nOp - (ops.OP_1 - 1)
11990 if (n < m) return false
11991
11992 var pubKeys = script.chunks.slice(1, -2)
11993 if (n < pubKeys.length) return false
11994
11995 return pubKeys.every(isCanonicalPubKey)
11996 }
11997
11998 function isNullDataOutput (script) {
11999 return script.chunks[0] === ops.OP_RETURN
12000 }
12001
12002 function classifyOutput (script) {
12003 typeForce('Script', script)
12004
12005 if (isPubKeyHashOutput(script)) {
12006 return 'pubkeyhash'
12007 } else if (isScriptHashOutput(script)) {
12008 return 'scripthash'
12009 } else if (isMultisigOutput(script)) {
12010 return 'multisig'
12011 } else if (isPubKeyOutput(script)) {
12012 return 'pubkey'
12013 } else if (isNullDataOutput(script)) {
12014 return 'nulldata'
12015 }
12016
12017 return 'nonstandard'
12018 }
12019
12020 function classifyInput (script, allowIncomplete) {
12021 typeForce('Script', script)
12022
12023 if (isPubKeyHashInput(script)) {
12024 return 'pubkeyhash'
12025 } else if (isMultisigInput(script, allowIncomplete)) {
12026 return 'multisig'
12027 } else if (isScriptHashInput(script, allowIncomplete)) {
12028 return 'scripthash'
12029 } else if (isPubKeyInput(script)) {
12030 return 'pubkey'
12031 }
12032
12033 return 'nonstandard'
12034 }
12035
12036 // Standard Script Templates
12037 // {pubKey} OP_CHECKSIG
12038 function pubKeyOutput (pubKey) {
12039 return Script.fromChunks([
12040 pubKey.toBuffer(),
12041 ops.OP_CHECKSIG
12042 ])
12043 }
12044
12045 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12046 function pubKeyHashOutput (hash) {
12047 typeForce('Buffer', hash)
12048
12049 return Script.fromChunks([
12050 ops.OP_DUP,
12051 ops.OP_HASH160,
12052 hash,
12053 ops.OP_EQUALVERIFY,
12054 ops.OP_CHECKSIG
12055 ])
12056 }
12057
12058 // OP_HASH160 {scriptHash} OP_EQUAL
12059 function scriptHashOutput (hash) {
12060 typeForce('Buffer', hash)
12061
12062 return Script.fromChunks([
12063 ops.OP_HASH160,
12064 hash,
12065 ops.OP_EQUAL
12066 ])
12067 }
12068
12069 // m [pubKeys ...] n OP_CHECKMULTISIG
12070 function multisigOutput (m, pubKeys) {
12071 typeForce(['ECPubKey'], pubKeys)
12072
12073 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12074
12075 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12076 return pubKey.toBuffer()
12077 })
12078 var n = pubKeys.length
12079
12080 return Script.fromChunks([].concat(
12081 (ops.OP_1 - 1) + m,
12082 pubKeyBuffers,
12083 (ops.OP_1 - 1) + n,
12084 ops.OP_CHECKMULTISIG
12085 ))
12086 }
12087
12088 // {signature}
12089 function pubKeyInput (signature) {
12090 typeForce('Buffer', signature)
12091
12092 return Script.fromChunks([signature])
12093 }
12094
12095 // {signature} {pubKey}
12096 function pubKeyHashInput (signature, pubKey) {
12097 typeForce('Buffer', signature)
12098
12099 return Script.fromChunks([signature, pubKey.toBuffer()])
12100 }
12101
12102 // <scriptSig> {serialized scriptPubKey script}
12103 function scriptHashInput (scriptSig, scriptPubKey) {
12104 return Script.fromChunks([].concat(
12105 scriptSig.chunks,
12106 scriptPubKey.toBuffer()
12107 ))
12108 }
12109
12110 // OP_0 [signatures ...]
12111 function multisigInput (signatures, scriptPubKey) {
12112 if (scriptPubKey) {
12113 assert(isMultisigOutput(scriptPubKey))
12114
12115 var mOp = scriptPubKey.chunks[0]
12116 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12117 var m = mOp - (ops.OP_1 - 1)
12118 var n = nOp - (ops.OP_1 - 1)
12119
12120 assert(signatures.length >= m, 'Not enough signatures provided')
12121 assert(signatures.length <= n, 'Too many signatures provided')
12122 }
12123
12124 return Script.fromChunks([].concat(ops.OP_0, signatures))
12125 }
12126
12127 function nullDataOutput (data) {
12128 return Script.fromChunks([ops.OP_RETURN, data])
12129 }
12130
12131 module.exports = {
12132 isCanonicalPubKey: isCanonicalPubKey,
12133 isCanonicalSignature: isCanonicalSignature,
12134 isPubKeyHashInput: isPubKeyHashInput,
12135 isPubKeyHashOutput: isPubKeyHashOutput,
12136 isPubKeyInput: isPubKeyInput,
12137 isPubKeyOutput: isPubKeyOutput,
12138 isScriptHashInput: isScriptHashInput,
12139 isScriptHashOutput: isScriptHashOutput,
12140 isMultisigInput: isMultisigInput,
12141 isMultisigOutput: isMultisigOutput,
12142 isNullDataOutput: isNullDataOutput,
12143 classifyOutput: classifyOutput,
12144 classifyInput: classifyInput,
12145 pubKeyOutput: pubKeyOutput,
12146 pubKeyHashOutput: pubKeyHashOutput,
12147 scriptHashOutput: scriptHashOutput,
12148 multisigOutput: multisigOutput,
12149 pubKeyInput: pubKeyInput,
12150 pubKeyHashInput: pubKeyHashInput,
12151 scriptHashInput: scriptHashInput,
12152 multisigInput: multisigInput,
12153 dataOutput: function (data) {
12154 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12155 return nullDataOutput(data)
12156 },
12157 nullDataOutput: nullDataOutput
12158 }
12159
12160 }).call(this,require("buffer").Buffer)
12161 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12162 (function (Buffer){
12163 var assert = require('assert')
12164 var bufferutils = require('./bufferutils')
12165 var crypto = require('./crypto')
12166 var typeForce = require('typeforce')
12167 var opcodes = require('./opcodes')
12168 var scripts = require('./scripts')
12169
12170 var Address = require('./address')
12171 var ECSignature = require('./ecsignature')
12172 var Script = require('./script')
12173
12174 function Transaction () {
12175 this.version = 1
12176 this.locktime = 0
12177 this.ins = []
12178 this.outs = []
12179 }
12180
12181 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12182 Transaction.SIGHASH_ALL = 0x01
12183 Transaction.SIGHASH_NONE = 0x02
12184 Transaction.SIGHASH_SINGLE = 0x03
12185 Transaction.SIGHASH_ANYONECANPAY = 0x80
12186
12187 Transaction.fromBuffer = function (buffer, __disableAssert) {
12188 var offset = 0
12189 function readSlice (n) {
12190 offset += n
12191 return buffer.slice(offset - n, offset)
12192 }
12193
12194 function readUInt32 () {
12195 var i = buffer.readUInt32LE(offset)
12196 offset += 4
12197 return i
12198 }
12199
12200 function readUInt64 () {
12201 var i = bufferutils.readUInt64LE(buffer, offset)
12202 offset += 8
12203 return i
12204 }
12205
12206 function readVarInt () {
12207 var vi = bufferutils.readVarInt(buffer, offset)
12208 offset += vi.size
12209 return vi.number
12210 }
12211
12212 function readScript () {
12213 return Script.fromBuffer(readSlice(readVarInt()))
12214 }
12215
12216 function readGenerationScript () {
12217 return new Script(readSlice(readVarInt()), [])
12218 }
12219
12220 var tx = new Transaction()
12221 tx.version = readUInt32()
12222
12223 var vinLen = readVarInt()
12224 for (var i = 0; i < vinLen; ++i) {
12225 var hash = readSlice(32)
12226
12227 if (Transaction.isCoinbaseHash(hash)) {
12228 tx.ins.push({
12229 hash: hash,
12230 index: readUInt32(),
12231 script: readGenerationScript(),
12232 sequence: readUInt32()
12233 })
12234 } else {
12235 tx.ins.push({
12236 hash: hash,
12237 index: readUInt32(),
12238 script: readScript(),
12239 sequence: readUInt32()
12240 })
12241 }
12242 }
12243
12244 var voutLen = readVarInt()
12245 for (i = 0; i < voutLen; ++i) {
12246 tx.outs.push({
12247 value: readUInt64(),
12248 script: readScript()
12249 })
12250 }
12251
12252 tx.locktime = readUInt32()
12253
12254 if (!__disableAssert) {
12255 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12256 }
12257
12258 return tx
12259 }
12260
12261 Transaction.fromHex = function (hex) {
12262 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12263 }
12264
12265 Transaction.isCoinbaseHash = function (buffer) {
12266 return Array.prototype.every.call(buffer, function (x) {
12267 return x === 0
12268 })
12269 }
12270
12271 /**
12272 * Create a new txIn.
12273 *
12274 * Can be called with any of:
12275 *
12276 * - A transaction and an index
12277 * - A transaction hash and an index
12278 *
12279 * Note that this method does not sign the created input.
12280 */
12281 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12282 if (sequence === undefined || sequence === null) {
12283 sequence = Transaction.DEFAULT_SEQUENCE
12284 }
12285
12286 script = script || Script.EMPTY
12287
12288 if (typeof hash === 'string') {
12289 // TxId hex is big-endian, we need little-endian
12290 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12291 } else if (hash instanceof Transaction) {
12292 hash = hash.getHash()
12293 }
12294
12295 typeForce('Buffer', hash)
12296 typeForce('Number', index)
12297 typeForce('Number', sequence)
12298 typeForce('Script', script)
12299
12300 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12301
12302 // Add the input and return the input's index
12303 return (this.ins.push({
12304 hash: hash,
12305 index: index,
12306 script: script,
12307 sequence: sequence
12308 }) - 1)
12309 }
12310
12311 /**
12312 * Create a new txOut.
12313 *
12314 * Can be called with:
12315 *
12316 * - A base58 address string and a value
12317 * - An Address object and a value
12318 * - A scriptPubKey Script and a value
12319 */
12320 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12321 // Attempt to get a valid address if it's a base58 address string
12322 if (typeof scriptPubKey === 'string') {
12323 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12324 }
12325
12326 // Attempt to get a valid script if it's an Address object
12327 if (scriptPubKey instanceof Address) {
12328 scriptPubKey = scriptPubKey.toOutputScript()
12329 }
12330
12331 typeForce('Script', scriptPubKey)
12332 typeForce('Number', value)
12333
12334 // Add the output and return the output's index
12335 return (this.outs.push({
12336 script: scriptPubKey,
12337 value: value
12338 }) - 1)
12339 }
12340
12341 Transaction.prototype.clone = function () {
12342 var newTx = new Transaction()
12343 newTx.version = this.version
12344 newTx.locktime = this.locktime
12345
12346 newTx.ins = this.ins.map(function (txIn) {
12347 return {
12348 hash: txIn.hash,
12349 index: txIn.index,
12350 script: txIn.script,
12351 sequence: txIn.sequence
12352 }
12353 })
12354
12355 newTx.outs = this.outs.map(function (txOut) {
12356 return {
12357 script: txOut.script,
12358 value: txOut.value
12359 }
12360 })
12361
12362 return newTx
12363 }
12364
12365 /**
12366 * Hash transaction for signing a specific input.
12367 *
12368 * Bitcoin uses a different hash for each signed transaction input. This
12369 * method copies the transaction, makes the necessary changes based on the
12370 * hashType, serializes and finally hashes the result. This hash can then be
12371 * used to sign the transaction input in question.
12372 */
12373 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12374 // FIXME: remove in 2.x.y
12375 if (arguments[0] instanceof Script) {
12376 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12377
12378 // swap the arguments (must be stored in tmp, arguments is special)
12379 var tmp = arguments[0]
12380 inIndex = arguments[1]
12381 prevOutScript = tmp
12382 }
12383
12384 typeForce('Number', inIndex)
12385 typeForce('Script', prevOutScript)
12386 typeForce('Number', hashType)
12387
12388 assert(inIndex >= 0, 'Invalid vin index')
12389 assert(inIndex < this.ins.length, 'Invalid vin index')
12390
12391 var txTmp = this.clone()
12392 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12393
12394 // Blank out other inputs' signatures
12395 txTmp.ins.forEach(function (txIn) {
12396 txIn.script = Script.EMPTY
12397 })
12398 txTmp.ins[inIndex].script = hashScript
12399
12400 var hashTypeModifier = hashType & 0x1f
12401
12402 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12403 assert(false, 'SIGHASH_NONE not yet supported')
12404 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12405 assert(false, 'SIGHASH_SINGLE not yet supported')
12406 }
12407
12408 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12409 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12410 }
12411
12412 var hashTypeBuffer = new Buffer(4)
12413 hashTypeBuffer.writeInt32LE(hashType, 0)
12414
12415 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12416 return crypto.hash256(buffer)
12417 }
12418
12419 Transaction.prototype.getHash = function () {
12420 return crypto.hash256(this.toBuffer())
12421 }
12422
12423 Transaction.prototype.getId = function () {
12424 // TxHash is little-endian, we need big-endian
12425 return bufferutils.reverse(this.getHash()).toString('hex')
12426 }
12427
12428 Transaction.prototype.toBuffer = function () {
12429 function scriptSize (script) {
12430 var length = script.buffer.length
12431
12432 return bufferutils.varIntSize(length) + length
12433 }
12434
12435 var buffer = new Buffer(
12436 8 +
12437 bufferutils.varIntSize(this.ins.length) +
12438 bufferutils.varIntSize(this.outs.length) +
12439 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12440 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12441 )
12442
12443 var offset = 0
12444 function writeSlice (slice) {
12445 slice.copy(buffer, offset)
12446 offset += slice.length
12447 }
12448
12449 function writeUInt32 (i) {
12450 buffer.writeUInt32LE(i, offset)
12451 offset += 4
12452 }
12453
12454 function writeUInt64 (i) {
12455 bufferutils.writeUInt64LE(buffer, i, offset)
12456 offset += 8
12457 }
12458
12459 function writeVarInt (i) {
12460 var n = bufferutils.writeVarInt(buffer, i, offset)
12461 offset += n
12462 }
12463
12464 writeUInt32(this.version)
12465 writeVarInt(this.ins.length)
12466
12467 this.ins.forEach(function (txIn) {
12468 writeSlice(txIn.hash)
12469 writeUInt32(txIn.index)
12470 writeVarInt(txIn.script.buffer.length)
12471 writeSlice(txIn.script.buffer)
12472 writeUInt32(txIn.sequence)
12473 })
12474
12475 writeVarInt(this.outs.length)
12476 this.outs.forEach(function (txOut) {
12477 writeUInt64(txOut.value)
12478 writeVarInt(txOut.script.buffer.length)
12479 writeSlice(txOut.script.buffer)
12480 })
12481
12482 writeUInt32(this.locktime)
12483
12484 return buffer
12485 }
12486
12487 Transaction.prototype.toHex = function () {
12488 return this.toBuffer().toString('hex')
12489 }
12490
12491 Transaction.prototype.setInputScript = function (index, script) {
12492 typeForce('Number', index)
12493 typeForce('Script', script)
12494
12495 this.ins[index].script = script
12496 }
12497
12498 // FIXME: remove in 2.x.y
12499 Transaction.prototype.sign = function (index, privKey, hashType) {
12500 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12501
12502 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12503 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12504
12505 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12506 this.setInputScript(index, scriptSig)
12507 }
12508
12509 // FIXME: remove in 2.x.y
12510 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12511 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12512
12513 hashType = hashType || Transaction.SIGHASH_ALL
12514
12515 var hash = this.hashForSignature(index, prevOutScript, hashType)
12516 var signature = privKey.sign(hash)
12517
12518 return signature.toScriptSignature(hashType)
12519 }
12520
12521 // FIXME: remove in 2.x.y
12522 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12523 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12524
12525 var parsed = ECSignature.parseScriptSignature(buffer)
12526 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12527
12528 return pubKey.verify(hash, parsed.signature)
12529 }
12530
12531 module.exports = Transaction
12532
12533 }).call(this,require("buffer").Buffer)
12534 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
12535 (function (Buffer){
12536 var assert = require('assert')
12537 var ops = require('./opcodes')
12538 var scripts = require('./scripts')
12539
12540 var ECPubKey = require('./ecpubkey')
12541 var ECSignature = require('./ecsignature')
12542 var Script = require('./script')
12543 var Transaction = require('./transaction')
12544
12545 function extractInput (txIn) {
12546 var redeemScript
12547 var scriptSig = txIn.script
12548 var prevOutScript
12549 var prevOutType = scripts.classifyInput(scriptSig, true)
12550 var scriptType
12551
12552 // Re-classify if scriptHash
12553 if (prevOutType === 'scripthash') {
12554 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12555 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12556
12557 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12558 scriptType = scripts.classifyInput(scriptSig, true)
12559 } else {
12560 scriptType = prevOutType
12561 }
12562
12563 // Extract hashType, pubKeys and signatures
12564 var hashType, parsed, pubKeys, signatures
12565
12566 switch (scriptType) {
12567 case 'pubkeyhash': {
12568 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12569 hashType = parsed.hashType
12570 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12571 signatures = [parsed.signature]
12572 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12573
12574 break
12575 }
12576
12577 case 'pubkey': {
12578 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12579 hashType = parsed.hashType
12580 signatures = [parsed.signature]
12581
12582 if (redeemScript) {
12583 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12584 }
12585
12586 break
12587 }
12588
12589 case 'multisig': {
12590 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12591 if (chunk === ops.OP_0) return chunk
12592
12593 var parsed = ECSignature.parseScriptSignature(chunk)
12594 hashType = parsed.hashType
12595
12596 return parsed.signature
12597 })
12598
12599 if (redeemScript) {
12600 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12601 }
12602
12603 break
12604 }
12605 }
12606
12607 return {
12608 hashType: hashType,
12609 prevOutScript: prevOutScript,
12610 prevOutType: prevOutType,
12611 pubKeys: pubKeys,
12612 redeemScript: redeemScript,
12613 scriptType: scriptType,
12614 signatures: signatures
12615 }
12616 }
12617
12618 function TransactionBuilder () {
12619 this.prevTxMap = {}
12620 this.prevOutScripts = {}
12621 this.prevOutTypes = {}
12622
12623 this.inputs = []
12624 this.tx = new Transaction()
12625 }
12626
12627 TransactionBuilder.fromTransaction = function (transaction) {
12628 var txb = new TransactionBuilder()
12629
12630 // Copy other transaction fields
12631 txb.tx.version = transaction.version
12632 txb.tx.locktime = transaction.locktime
12633
12634 // Extract/add inputs
12635 transaction.ins.forEach(function (txIn) {
12636 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12637 })
12638
12639 // Extract/add outputs
12640 transaction.outs.forEach(function (txOut) {
12641 txb.addOutput(txOut.script, txOut.value)
12642 })
12643
12644 // Extract/add signatures
12645 txb.inputs = transaction.ins.map(function (txIn) {
12646 // TODO: remove me after testcase added
12647 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12648
12649 // Ignore empty scripts
12650 if (txIn.script.buffer.length === 0) return {}
12651
12652 return extractInput(txIn)
12653 })
12654
12655 return txb
12656 }
12657
12658 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12659 var prevOutHash
12660
12661 // txId
12662 if (typeof prevTx === 'string') {
12663 prevOutHash = new Buffer(prevTx, 'hex')
12664
12665 // TxId hex is big-endian, we want little-endian hash
12666 Array.prototype.reverse.call(prevOutHash)
12667
12668 // Transaction
12669 } else if (prevTx instanceof Transaction) {
12670 prevOutHash = prevTx.getHash()
12671 prevOutScript = prevTx.outs[index].script
12672
12673 // txHash
12674 } else {
12675 prevOutHash = prevTx
12676 }
12677
12678 var input = {}
12679 if (prevOutScript) {
12680 var prevOutType = scripts.classifyOutput(prevOutScript)
12681
12682 // if we can, extract pubKey information
12683 switch (prevOutType) {
12684 case 'multisig': {
12685 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12686 break
12687 }
12688
12689 case 'pubkey': {
12690 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12691 break
12692 }
12693 }
12694
12695 if (prevOutType !== 'scripthash') {
12696 input.scriptType = prevOutType
12697 }
12698
12699 input.prevOutScript = prevOutScript
12700 input.prevOutType = prevOutType
12701 }
12702
12703 assert(this.inputs.every(function (input2) {
12704 if (input2.hashType === undefined) return true
12705
12706 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12707 }), 'No, this would invalidate signatures')
12708
12709 var prevOut = prevOutHash.toString('hex') + ':' + index
12710 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12711
12712 var vin = this.tx.addInput(prevOutHash, index, sequence)
12713 this.inputs[vin] = input
12714 this.prevTxMap[prevOut] = vin
12715
12716 return vin
12717 }
12718
12719 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12720 assert(this.inputs.every(function (input) {
12721 if (input.hashType === undefined) return true
12722
12723 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12724 }), 'No, this would invalidate signatures')
12725
12726 return this.tx.addOutput(scriptPubKey, value)
12727 }
12728
12729 TransactionBuilder.prototype.build = function () {
12730 return this.__build(false)
12731 }
12732 TransactionBuilder.prototype.buildIncomplete = function () {
12733 return this.__build(true)
12734 }
12735
12736 var canSignTypes = {
12737 'pubkeyhash': true,
12738 'multisig': true,
12739 'pubkey': true
12740 }
12741
12742 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12743 if (!allowIncomplete) {
12744 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12745 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12746 }
12747
12748 var tx = this.tx.clone()
12749
12750 // Create script signatures from signature meta-data
12751 this.inputs.forEach(function (input, index) {
12752 var scriptType = input.scriptType
12753 var scriptSig
12754
12755 if (!allowIncomplete) {
12756 assert(!!scriptType, 'Transaction is not complete')
12757 assert(scriptType in canSignTypes, scriptType + ' not supported')
12758 assert(input.signatures, 'Transaction is missing signatures')
12759 }
12760
12761 if (input.signatures) {
12762 switch (scriptType) {
12763 case 'pubkeyhash': {
12764 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12765 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12766 break
12767 }
12768
12769 case 'multisig': {
12770 // Array.prototype.map is sparse-compatible
12771 var msSignatures = input.signatures.map(function (signature) {
12772 return signature && signature.toScriptSignature(input.hashType)
12773 })
12774
12775 // fill in blanks with OP_0
12776 if (allowIncomplete) {
12777 for (var i = 0; i < msSignatures.length; ++i) {
12778 if (msSignatures[i]) continue
12779
12780 msSignatures[i] = ops.OP_0
12781 }
12782 } else {
12783 // Array.prototype.filter returns non-sparse array
12784 msSignatures = msSignatures.filter(function (x) { return x })
12785 }
12786
12787 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12788 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12789 break
12790 }
12791
12792 case 'pubkey': {
12793 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12794 scriptSig = scripts.pubKeyInput(pkSignature)
12795 break
12796 }
12797 }
12798 }
12799
12800 // did we build a scriptSig?
12801 if (scriptSig) {
12802 // wrap as scriptHash if necessary
12803 if (input.prevOutType === 'scripthash') {
12804 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12805 }
12806
12807 tx.setInputScript(index, scriptSig)
12808 }
12809 })
12810
12811 return tx
12812 }
12813
12814 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12815 assert(index in this.inputs, 'No input at index: ' + index)
12816 hashType = hashType || Transaction.SIGHASH_ALL
12817
12818 var input = this.inputs[index]
12819 var canSign = input.hashType &&
12820 input.prevOutScript &&
12821 input.prevOutType &&
12822 input.pubKeys &&
12823 input.scriptType &&
12824 input.signatures
12825
12826 // are we almost ready to sign?
12827 if (canSign) {
12828 // if redeemScript was provided, enforce consistency
12829 if (redeemScript) {
12830 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12831 }
12832
12833 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12834
12835 // no? prepare
12836 } else {
12837 // must be pay-to-scriptHash?
12838 if (redeemScript) {
12839 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12840 if (input.prevOutScript) {
12841 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12842
12843 var scriptHash = input.prevOutScript.chunks[1]
12844 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12845 }
12846
12847 var scriptType = scripts.classifyOutput(redeemScript)
12848 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12849
12850 var pubKeys = []
12851 switch (scriptType) {
12852 case 'multisig': {
12853 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12854 break
12855 }
12856
12857 case 'pubkeyhash': {
12858 var pkh1 = redeemScript.chunks[2]
12859 var pkh2 = privKey.pub.getAddress().hash
12860
12861 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12862 pubKeys = [privKey.pub]
12863 break
12864 }
12865
12866 case 'pubkey': {
12867 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12868 break
12869 }
12870 }
12871
12872 if (!input.prevOutScript) {
12873 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12874 input.prevOutType = 'scripthash'
12875 }
12876
12877 input.pubKeys = pubKeys
12878 input.redeemScript = redeemScript
12879 input.scriptType = scriptType
12880
12881 // cannot be pay-to-scriptHash
12882 } else {
12883 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12884
12885 // can we otherwise sign this?
12886 if (input.scriptType) {
12887 assert(input.pubKeys, input.scriptType + ' not supported')
12888
12889 // we know nothin' Jon Snow, assume pubKeyHash
12890 } else {
12891 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12892 input.prevOutType = 'pubkeyhash'
12893 input.pubKeys = [privKey.pub]
12894 input.scriptType = input.prevOutType
12895 }
12896 }
12897
12898 input.hashType = hashType
12899 input.signatures = input.signatures || []
12900 }
12901
12902 var signatureScript = input.redeemScript || input.prevOutScript
12903 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12904
12905 // enforce signature order matches public keys
12906 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12907 // maintain a local copy of unmatched signatures
12908 var unmatched = input.signatures.slice()
12909
12910 input.signatures = input.pubKeys.map(function (pubKey) {
12911 var match
12912
12913 // check for any matching signatures
12914 unmatched.some(function (signature, i) {
12915 if (!pubKey.verify(signatureHash, signature)) return false
12916 match = signature
12917
12918 // remove matched signature from unmatched
12919 unmatched.splice(i, 1)
12920
12921 return true
12922 })
12923
12924 return match || undefined
12925 })
12926 }
12927
12928 // enforce in order signing of public keys
12929 assert(input.pubKeys.some(function (pubKey, i) {
12930 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12931
12932 assert(!input.signatures[i], 'Signature already exists')
12933 var signature = privKey.sign(signatureHash)
12934 input.signatures[i] = signature
12935
12936 return true
12937 }, this), 'privateKey cannot sign for this input')
12938 }
12939
12940 module.exports = TransactionBuilder
12941
12942 }).call(this,require("buffer").Buffer)
12943 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12944 (function (Buffer){
12945 var assert = require('assert')
12946 var bufferutils = require('./bufferutils')
12947 var typeForce = require('typeforce')
12948 var networks = require('./networks')
12949 var randomBytes = require('randombytes')
12950
12951 var Address = require('./address')
12952 var HDNode = require('./hdnode')
12953 var TransactionBuilder = require('./transaction_builder')
12954 var Script = require('./script')
12955
12956 function Wallet (seed, network) {
12957 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12958
12959 seed = seed || randomBytes(32)
12960 network = network || networks.bitcoin
12961
12962 // Stored in a closure to make accidental serialization less likely
12963 var masterKey = HDNode.fromSeedBuffer(seed, network)
12964
12965 // HD first-level child derivation method should be hardened
12966 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12967 var accountZero = masterKey.deriveHardened(0)
12968 var externalAccount = accountZero.derive(0)
12969 var internalAccount = accountZero.derive(1)
12970
12971 this.addresses = []
12972 this.changeAddresses = []
12973 this.network = network
12974 this.unspents = []
12975
12976 // FIXME: remove in 2.0.0
12977 this.unspentMap = {}
12978
12979 // FIXME: remove in 2.0.0
12980 var me = this
12981 this.newMasterKey = function (seed) {
12982 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12983
12984 seed = seed || randomBytes(32)
12985 masterKey = HDNode.fromSeedBuffer(seed, network)
12986
12987 accountZero = masterKey.deriveHardened(0)
12988 externalAccount = accountZero.derive(0)
12989 internalAccount = accountZero.derive(1)
12990
12991 me.addresses = []
12992 me.changeAddresses = []
12993
12994 me.unspents = []
12995 me.unspentMap = {}
12996 }
12997
12998 this.getMasterKey = function () {
12999 return masterKey
13000 }
13001 this.getAccountZero = function () {
13002 return accountZero
13003 }
13004 this.getExternalAccount = function () {
13005 return externalAccount
13006 }
13007 this.getInternalAccount = function () {
13008 return internalAccount
13009 }
13010 }
13011
13012 Wallet.prototype.createTransaction = function (to, value, options) {
13013 // FIXME: remove in 2.0.0
13014 if (typeof options !== 'object') {
13015 if (options !== undefined) {
13016 console.warn('Non options object parameters are deprecated, use options object instead')
13017
13018 options = {
13019 fixedFee: arguments[2],
13020 changeAddress: arguments[3]
13021 }
13022 }
13023 }
13024
13025 options = options || {}
13026
13027 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13028
13029 var changeAddress = options.changeAddress
13030 var fixedFee = options.fixedFee
13031 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13032
13033 // filter by minConf, then pending and sort by descending value
13034 var unspents = this.unspents.filter(function (unspent) {
13035 return unspent.confirmations >= minConf
13036 }).filter(function (unspent) {
13037 return !unspent.pending
13038 }).sort(function (o1, o2) {
13039 return o2.value - o1.value
13040 })
13041
13042 var accum = 0
13043 var addresses = []
13044 var subTotal = value
13045
13046 var txb = new TransactionBuilder()
13047 txb.addOutput(to, value)
13048
13049 for (var i = 0; i < unspents.length; ++i) {
13050 var unspent = unspents[i]
13051 addresses.push(unspent.address)
13052
13053 txb.addInput(unspent.txHash, unspent.index)
13054
13055 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13056
13057 accum += unspent.value
13058 subTotal = value + fee
13059
13060 if (accum >= subTotal) {
13061 var change = accum - subTotal
13062
13063 if (change > this.network.dustThreshold) {
13064 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13065 }
13066
13067 break
13068 }
13069 }
13070
13071 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13072
13073 return this.signWith(txb, addresses).build()
13074 }
13075
13076 // FIXME: remove in 2.0.0
13077 Wallet.prototype.processPendingTx = function (tx) {
13078 this.__processTx(tx, true)
13079 }
13080
13081 // FIXME: remove in 2.0.0
13082 Wallet.prototype.processConfirmedTx = function (tx) {
13083 this.__processTx(tx, false)
13084 }
13085
13086 // FIXME: remove in 2.0.0
13087 Wallet.prototype.__processTx = function (tx, isPending) {
13088 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13089
13090 var txId = tx.getId()
13091 var txHash = tx.getHash()
13092
13093 tx.outs.forEach(function (txOut, i) {
13094 var address
13095
13096 try {
13097 address = Address.fromOutputScript(txOut.script, this.network).toString()
13098 } catch (e) {
13099 if (!(e.message.match(/has no matching Address/)))
13100 throw e
13101 }
13102
13103 var myAddresses = this.addresses.concat(this.changeAddresses)
13104 if (myAddresses.indexOf(address) > -1) {
13105 var lookup = txId + ':' + i
13106 if (lookup in this.unspentMap) return
13107
13108 // its unique, add it
13109 var unspent = {
13110 address: address,
13111 confirmations: 0, // no way to determine this without more information
13112 index: i,
13113 txHash: txHash,
13114 txId: txId,
13115 value: txOut.value,
13116 pending: isPending
13117 }
13118
13119 this.unspentMap[lookup] = unspent
13120 this.unspents.push(unspent)
13121 }
13122 }, this)
13123
13124 tx.ins.forEach(function (txIn) {
13125 // copy and convert to big-endian hex
13126 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13127
13128 var lookup = txInId + ':' + txIn.index
13129 if (!(lookup in this.unspentMap)) return
13130
13131 var unspent = this.unspentMap[lookup]
13132
13133 if (isPending) {
13134 unspent.pending = true
13135 unspent.spent = true
13136 } else {
13137 delete this.unspentMap[lookup]
13138
13139 this.unspents = this.unspents.filter(function (unspent2) {
13140 return unspent !== unspent2
13141 })
13142 }
13143 }, this)
13144 }
13145
13146 Wallet.prototype.generateAddress = function () {
13147 var k = this.addresses.length
13148 var address = this.getExternalAccount().derive(k).getAddress()
13149
13150 this.addresses.push(address.toString())
13151
13152 return this.getReceiveAddress()
13153 }
13154
13155 Wallet.prototype.generateChangeAddress = function () {
13156 var k = this.changeAddresses.length
13157 var address = this.getInternalAccount().derive(k).getAddress()
13158
13159 this.changeAddresses.push(address.toString())
13160
13161 return this.getChangeAddress()
13162 }
13163
13164 Wallet.prototype.getAddress = function () {
13165 if (this.addresses.length === 0) {
13166 this.generateAddress()
13167 }
13168
13169 return this.addresses[this.addresses.length - 1]
13170 }
13171
13172 Wallet.prototype.getBalance = function (minConf) {
13173 minConf = minConf || 0
13174
13175 return this.unspents.filter(function (unspent) {
13176 return unspent.confirmations >= minConf
13177
13178 // FIXME: remove spent filter in 2.0.0
13179 }).filter(function (unspent) {
13180 return !unspent.spent
13181 }).reduce(function (accum, unspent) {
13182 return accum + unspent.value
13183 }, 0)
13184 }
13185
13186 Wallet.prototype.getChangeAddress = function () {
13187 if (this.changeAddresses.length === 0) {
13188 this.generateChangeAddress()
13189 }
13190
13191 return this.changeAddresses[this.changeAddresses.length - 1]
13192 }
13193
13194 Wallet.prototype.getInternalPrivateKey = function (index) {
13195 return this.getInternalAccount().derive(index).privKey
13196 }
13197
13198 Wallet.prototype.getPrivateKey = function (index) {
13199 return this.getExternalAccount().derive(index).privKey
13200 }
13201
13202 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13203 var index
13204
13205 if ((index = this.addresses.indexOf(address)) > -1) {
13206 return this.getPrivateKey(index)
13207 }
13208
13209 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13210 return this.getInternalPrivateKey(index)
13211 }
13212
13213 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13214 }
13215
13216 Wallet.prototype.getUnspentOutputs = function (minConf) {
13217 minConf = minConf || 0
13218
13219 return this.unspents.filter(function (unspent) {
13220 return unspent.confirmations >= minConf
13221
13222 // FIXME: remove spent filter in 2.0.0
13223 }).filter(function (unspent) {
13224 return !unspent.spent
13225 }).map(function (unspent) {
13226 return {
13227 address: unspent.address,
13228 confirmations: unspent.confirmations,
13229 index: unspent.index,
13230 txId: unspent.txId,
13231 value: unspent.value,
13232
13233 // FIXME: remove in 2.0.0
13234 hash: unspent.txId,
13235 pending: unspent.pending
13236 }
13237 })
13238 }
13239
13240 Wallet.prototype.setUnspentOutputs = function (unspents) {
13241 this.unspentMap = {}
13242 this.unspents = unspents.map(function (unspent) {
13243 // FIXME: remove unspent.hash in 2.0.0
13244 var txId = unspent.txId || unspent.hash
13245 var index = unspent.index
13246
13247 // FIXME: remove in 2.0.0
13248 if (unspent.hash !== undefined) {
13249 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13250 }
13251
13252 // FIXME: remove in 2.0.0
13253 if (index === undefined) {
13254 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13255 index = unspent.outputIndex
13256 }
13257
13258 typeForce('String', txId)
13259 typeForce('Number', index)
13260 typeForce('Number', unspent.value)
13261
13262 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13263 assert.doesNotThrow(function () {
13264 Address.fromBase58Check(unspent.address)
13265 }, 'Expected Base58 Address, got ' + unspent.address)
13266 assert(isFinite(index), 'Expected finite index, got ' + index)
13267
13268 // FIXME: remove branch in 2.0.0
13269 if (unspent.confirmations !== undefined) {
13270 typeForce('Number', unspent.confirmations)
13271 }
13272
13273 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13274
13275 unspent = {
13276 address: unspent.address,
13277 confirmations: unspent.confirmations || 0,
13278 index: index,
13279 txHash: txHash,
13280 txId: txId,
13281 value: unspent.value,
13282
13283 // FIXME: remove in 2.0.0
13284 pending: unspent.pending || false
13285 }
13286
13287 // FIXME: remove in 2.0.0
13288 this.unspentMap[txId + ':' + index] = unspent
13289
13290 return unspent
13291 }, this)
13292 }
13293
13294 Wallet.prototype.signWith = function (tx, addresses) {
13295 addresses.forEach(function (address, i) {
13296 var privKey = this.getPrivateKeyForAddress(address)
13297
13298 tx.sign(i, privKey)
13299 }, this)
13300
13301 return tx
13302 }
13303
13304 function estimatePaddedFee (tx, network) {
13305 var tmpTx = tx.clone()
13306 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13307
13308 return network.estimateFee(tmpTx)
13309 }
13310
13311 // FIXME: 1.0.0 shims, remove in 2.0.0
13312 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13313 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13314
13315 module.exports = Wallet
13316
13317 }).call(this,require("buffer").Buffer)
13318 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13319 });</script>
13320 <script>bitcoin.networks.shadow = {
13321 magicPrefix: '\x19ShadowCash Signed Message:\n',
13322 bip32: {
13323 public: 0xEE80286A,
13324 private: 0xEE8031E8
13325 },
13326 pubKeyHash: 0x3f,
13327 scriptHash: 0x7d,
13328 wif: 0xbf,
13329 dustThreshold: 0,
13330 feePerKb: 1000,
13331 estimateFee: function() { return "unused in this app" },
13332 };
13333
13334 bitcoin.networks.shadowtn = {
13335 magicPrefix: '\x19ShadowCash Signed Message:\n',
13336 bip32: {
13337 public: 0x76C0FDFB,
13338 private: 0x76C1077A
13339 },
13340 pubKeyHash: 0x7f,
13341 scriptHash: 0xc4,
13342 wif: 0xff,
13343 dustThreshold: 0,
13344 feePerKb: 1000,
13345 estimateFee: function() { return "unused in this app" },
13346 };
13347
13348 bitcoin.networks.clam = {
13349 bip32: {
13350 public: 0xa8c26d64,
13351 private: 0xa8c17826
13352 },
13353 pubKeyHash: 0x89,
13354 wif: 0x85,
13355 };
13356 </script>
13357 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13358
13359 //// base.js
13360
13361 /** @fileOverview Javascript cryptography implementation.
13362 *
13363 * Crush to remove comments, shorten variable names and
13364 * generally reduce transmission size.
13365 *
13366 * @author Emily Stark
13367 * @author Mike Hamburg
13368 * @author Dan Boneh
13369 */
13370
13371 "use strict";
13372 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13373 /*global document, window, escape, unescape, module, require, Uint32Array */
13374
13375 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13376 var sjcl = {
13377 /** @namespace Symmetric ciphers. */
13378 cipher: {},
13379
13380 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13381 hash: {},
13382
13383 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13384 keyexchange: {},
13385
13386 /** @namespace Block cipher modes of operation. */
13387 mode: {},
13388
13389 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13390 misc: {},
13391
13392 /**
13393 * @namespace Bit array encoders and decoders.
13394 *
13395 * @description
13396 * The members of this namespace are functions which translate between
13397 * SJCL's bitArrays and other objects (usually strings). Because it
13398 * isn't always clear which direction is encoding and which is decoding,
13399 * the method names are "fromBits" and "toBits".
13400 */
13401 codec: {},
13402
13403 /** @namespace Exceptions. */
13404 exception: {
13405 /** @constructor Ciphertext is corrupt. */
13406 corrupt: function(message) {
13407 this.toString = function() { return "CORRUPT: "+this.message; };
13408 this.message = message;
13409 },
13410
13411 /** @constructor Invalid parameter. */
13412 invalid: function(message) {
13413 this.toString = function() { return "INVALID: "+this.message; };
13414 this.message = message;
13415 },
13416
13417 /** @constructor Bug or missing feature in SJCL. @constructor */
13418 bug: function(message) {
13419 this.toString = function() { return "BUG: "+this.message; };
13420 this.message = message;
13421 },
13422
13423 /** @constructor Something isn't ready. */
13424 notReady: function(message) {
13425 this.toString = function() { return "NOT READY: "+this.message; };
13426 this.message = message;
13427 }
13428 }
13429 };
13430
13431 if(typeof module !== 'undefined' && module.exports){
13432 module.exports = sjcl;
13433 }
13434 if (typeof define === "function") {
13435 define([], function () {
13436 return sjcl;
13437 });
13438 }
13439
13440
13441 //// bitArray.js
13442
13443 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13444 *
13445 * @author Emily Stark
13446 * @author Mike Hamburg
13447 * @author Dan Boneh
13448 */
13449
13450 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13451 *
13452 * @description
13453 * <p>
13454 * These objects are the currency accepted by SJCL's crypto functions.
13455 * </p>
13456 *
13457 * <p>
13458 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13459 * but many of them can take arguments that are not a multiple of 4 bytes.
13460 * This library encodes arrays of bits (whose size need not be a multiple of 8
13461 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13462 * array of words, 32 bits at a time. Since the words are double-precision
13463 * floating point numbers, they fit some extra data. We use this (in a private,
13464 * possibly-changing manner) to encode the number of bits actually present
13465 * in the last word of the array.
13466 * </p>
13467 *
13468 * <p>
13469 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13470 * to ciphers like AES which want arrays of words.
13471 * </p>
13472 */
13473 sjcl.bitArray = {
13474 /**
13475 * Array slices in units of bits.
13476 * @param {bitArray} a The array to slice.
13477 * @param {Number} bstart The offset to the start of the slice, in bits.
13478 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13479 * slice until the end of the array.
13480 * @return {bitArray} The requested slice.
13481 */
13482 bitSlice: function (a, bstart, bend) {
13483 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13484 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13485 },
13486
13487 /**
13488 * Extract a number packed into a bit array.
13489 * @param {bitArray} a The array to slice.
13490 * @param {Number} bstart The offset to the start of the slice, in bits.
13491 * @param {Number} length The length of the number to extract.
13492 * @return {Number} The requested slice.
13493 */
13494 extract: function(a, bstart, blength) {
13495 // FIXME: this Math.floor is not necessary at all, but for some reason
13496 // seems to suppress a bug in the Chromium JIT.
13497 var x, sh = Math.floor((-bstart-blength) & 31);
13498 if ((bstart + blength - 1 ^ bstart) & -32) {
13499 // it crosses a boundary
13500 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13501 } else {
13502 // within a single word
13503 x = a[bstart/32|0] >>> sh;
13504 }
13505 return x & ((1<<blength) - 1);
13506 },
13507
13508 /**
13509 * Concatenate two bit arrays.
13510 * @param {bitArray} a1 The first array.
13511 * @param {bitArray} a2 The second array.
13512 * @return {bitArray} The concatenation of a1 and a2.
13513 */
13514 concat: function (a1, a2) {
13515 if (a1.length === 0 || a2.length === 0) {
13516 return a1.concat(a2);
13517 }
13518
13519 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13520 if (shift === 32) {
13521 return a1.concat(a2);
13522 } else {
13523 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13524 }
13525 },
13526
13527 /**
13528 * Find the length of an array of bits.
13529 * @param {bitArray} a The array.
13530 * @return {Number} The length of a, in bits.
13531 */
13532 bitLength: function (a) {
13533 var l = a.length, x;
13534 if (l === 0) { return 0; }
13535 x = a[l - 1];
13536 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13537 },
13538
13539 /**
13540 * Truncate an array.
13541 * @param {bitArray} a The array.
13542 * @param {Number} len The length to truncate to, in bits.
13543 * @return {bitArray} A new array, truncated to len bits.
13544 */
13545 clamp: function (a, len) {
13546 if (a.length * 32 < len) { return a; }
13547 a = a.slice(0, Math.ceil(len / 32));
13548 var l = a.length;
13549 len = len & 31;
13550 if (l > 0 && len) {
13551 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13552 }
13553 return a;
13554 },
13555
13556 /**
13557 * Make a partial word for a bit array.
13558 * @param {Number} len The number of bits in the word.
13559 * @param {Number} x The bits.
13560 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13561 * @return {Number} The partial word.
13562 */
13563 partial: function (len, x, _end) {
13564 if (len === 32) { return x; }
13565 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13566 },
13567
13568 /**
13569 * Get the number of bits used by a partial word.
13570 * @param {Number} x The partial word.
13571 * @return {Number} The number of bits used by the partial word.
13572 */
13573 getPartial: function (x) {
13574 return Math.round(x/0x10000000000) || 32;
13575 },
13576
13577 /**
13578 * Compare two arrays for equality in a predictable amount of time.
13579 * @param {bitArray} a The first array.
13580 * @param {bitArray} b The second array.
13581 * @return {boolean} true if a == b; false otherwise.
13582 */
13583 equal: function (a, b) {
13584 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13585 return false;
13586 }
13587 var x = 0, i;
13588 for (i=0; i<a.length; i++) {
13589 x |= a[i]^b[i];
13590 }
13591 return (x === 0);
13592 },
13593
13594 /** Shift an array right.
13595 * @param {bitArray} a The array to shift.
13596 * @param {Number} shift The number of bits to shift.
13597 * @param {Number} [carry=0] A byte to carry in
13598 * @param {bitArray} [out=[]] An array to prepend to the output.
13599 * @private
13600 */
13601 _shiftRight: function (a, shift, carry, out) {
13602 var i, last2=0, shift2;
13603 if (out === undefined) { out = []; }
13604
13605 for (; shift >= 32; shift -= 32) {
13606 out.push(carry);
13607 carry = 0;
13608 }
13609 if (shift === 0) {
13610 return out.concat(a);
13611 }
13612
13613 for (i=0; i<a.length; i++) {
13614 out.push(carry | a[i]>>>shift);
13615 carry = a[i] << (32-shift);
13616 }
13617 last2 = a.length ? a[a.length-1] : 0;
13618 shift2 = sjcl.bitArray.getPartial(last2);
13619 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13620 return out;
13621 },
13622
13623 /** xor a block of 4 words together.
13624 * @private
13625 */
13626 _xor4: function(x,y) {
13627 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13628 },
13629
13630 /** byteswap a word array inplace.
13631 * (does not handle partial words)
13632 * @param {sjcl.bitArray} a word array
13633 * @return {sjcl.bitArray} byteswapped array
13634 */
13635 byteswapM: function(a) {
13636 var i, v, m = 0xff00;
13637 for (i = 0; i < a.length; ++i) {
13638 v = a[i];
13639 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13640 }
13641 return a;
13642 }
13643 };
13644
13645
13646 //// codecString.js
13647
13648 /** @fileOverview Bit array codec implementations.
13649 *
13650 * @author Emily Stark
13651 * @author Mike Hamburg
13652 * @author Dan Boneh
13653 */
13654
13655 /** @namespace UTF-8 strings */
13656 sjcl.codec.utf8String = {
13657 /** Convert from a bitArray to a UTF-8 string. */
13658 fromBits: function (arr) {
13659 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13660 for (i=0; i<bl/8; i++) {
13661 if ((i&3) === 0) {
13662 tmp = arr[i/4];
13663 }
13664 out += String.fromCharCode(tmp >>> 24);
13665 tmp <<= 8;
13666 }
13667 return decodeURIComponent(escape(out));
13668 },
13669
13670 /** Convert from a UTF-8 string to a bitArray. */
13671 toBits: function (str) {
13672 str = unescape(encodeURIComponent(str));
13673 var out = [], i, tmp=0;
13674 for (i=0; i<str.length; i++) {
13675 tmp = tmp << 8 | str.charCodeAt(i);
13676 if ((i&3) === 3) {
13677 out.push(tmp);
13678 tmp = 0;
13679 }
13680 }
13681 if (i&3) {
13682 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13683 }
13684 return out;
13685 }
13686 };
13687
13688
13689 //// codecHex.js
13690
13691 /** @fileOverview Bit array codec implementations.
13692 *
13693 * @author Emily Stark
13694 * @author Mike Hamburg
13695 * @author Dan Boneh
13696 */
13697
13698 /** @namespace Hexadecimal */
13699 sjcl.codec.hex = {
13700 /** Convert from a bitArray to a hex string. */
13701 fromBits: function (arr) {
13702 var out = "", i;
13703 for (i=0; i<arr.length; i++) {
13704 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13705 }
13706 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13707 },
13708 /** Convert from a hex string to a bitArray. */
13709 toBits: function (str) {
13710 var i, out=[], len;
13711 str = str.replace(/\s|0x/g, "");
13712 len = str.length;
13713 str = str + "00000000";
13714 for (i=0; i<str.length; i+=8) {
13715 out.push(parseInt(str.substr(i,8),16)^0);
13716 }
13717 return sjcl.bitArray.clamp(out, len*4);
13718 }
13719 };
13720
13721
13722 //// sha512.js
13723
13724 /** @fileOverview Javascript SHA-512 implementation.
13725 *
13726 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13727 * SJCL by Stefan Thomas.
13728 *
13729 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13730 * Released with New BSD License
13731 *
13732 * @author Emily Stark
13733 * @author Mike Hamburg
13734 * @author Dan Boneh
13735 * @author Jeff Mott
13736 * @author Stefan Thomas
13737 */
13738
13739 /**
13740 * Context for a SHA-512 operation in progress.
13741 * @constructor
13742 * @class Secure Hash Algorithm, 512 bits.
13743 */
13744 sjcl.hash.sha512 = function (hash) {
13745 if (!this._key[0]) { this._precompute(); }
13746 if (hash) {
13747 this._h = hash._h.slice(0);
13748 this._buffer = hash._buffer.slice(0);
13749 this._length = hash._length;
13750 } else {
13751 this.reset();
13752 }
13753 };
13754
13755 /**
13756 * Hash a string or an array of words.
13757 * @static
13758 * @param {bitArray|String} data the data to hash.
13759 * @return {bitArray} The hash value, an array of 16 big-endian words.
13760 */
13761 sjcl.hash.sha512.hash = function (data) {
13762 return (new sjcl.hash.sha512()).update(data).finalize();
13763 };
13764
13765 sjcl.hash.sha512.prototype = {
13766 /**
13767 * The hash's block size, in bits.
13768 * @constant
13769 */
13770 blockSize: 1024,
13771
13772 /**
13773 * Reset the hash state.
13774 * @return this
13775 */
13776 reset:function () {
13777 this._h = this._init.slice(0);
13778 this._buffer = [];
13779 this._length = 0;
13780 return this;
13781 },
13782
13783 /**
13784 * Input several words to the hash.
13785 * @param {bitArray|String} data the data to hash.
13786 * @return this
13787 */
13788 update: function (data) {
13789 if (typeof data === "string") {
13790 data = sjcl.codec.utf8String.toBits(data);
13791 }
13792 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13793 ol = this._length,
13794 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13795 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13796 this._block(b.splice(0,32));
13797 }
13798 return this;
13799 },
13800
13801 /**
13802 * Complete hashing and output the hash value.
13803 * @return {bitArray} The hash value, an array of 16 big-endian words.
13804 */
13805 finalize:function () {
13806 var i, b = this._buffer, h = this._h;
13807
13808 // Round out and push the buffer
13809 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13810
13811 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13812 for (i = b.length + 4; i & 31; i++) {
13813 b.push(0);
13814 }
13815
13816 // append the length
13817 b.push(0);
13818 b.push(0);
13819 b.push(Math.floor(this._length / 0x100000000));
13820 b.push(this._length | 0);
13821
13822 while (b.length) {
13823 this._block(b.splice(0,32));
13824 }
13825
13826 this.reset();
13827 return h;
13828 },
13829
13830 /**
13831 * The SHA-512 initialization vector, to be precomputed.
13832 * @private
13833 */
13834 _init:[],
13835
13836 /**
13837 * Least significant 24 bits of SHA512 initialization values.
13838 *
13839 * Javascript only has 53 bits of precision, so we compute the 40 most
13840 * significant bits and add the remaining 24 bits as constants.
13841 *
13842 * @private
13843 */
13844 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13845
13846 /*
13847 _init:
13848 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13849 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13850 */
13851
13852 /**
13853 * The SHA-512 hash key, to be precomputed.
13854 * @private
13855 */
13856 _key:[],
13857
13858 /**
13859 * Least significant 24 bits of SHA512 key values.
13860 * @private
13861 */
13862 _keyr:
13863 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13864 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13865 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13866 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13867 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13868 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13869 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13870 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13871 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13872 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13873
13874 /*
13875 _key:
13876 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13877 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13878 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13879 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13880 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13881 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13882 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13883 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13884 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13885 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13886 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13887 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13888 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13889 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13890 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13891 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13892 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13893 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13894 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13895 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13896 */
13897
13898 /**
13899 * Function to precompute _init and _key.
13900 * @private
13901 */
13902 _precompute: function () {
13903 // XXX: This code is for precomputing the SHA256 constants, change for
13904 // SHA512 and re-enable.
13905 var i = 0, prime = 2, factor;
13906
13907 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13908 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13909
13910 outer: for (; i<80; prime++) {
13911 for (factor=2; factor*factor <= prime; factor++) {
13912 if (prime % factor === 0) {
13913 // not a prime
13914 continue outer;
13915 }
13916 }
13917
13918 if (i<8) {
13919 this._init[i*2] = frac(Math.pow(prime, 1/2));
13920 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13921 }
13922 this._key[i*2] = frac(Math.pow(prime, 1/3));
13923 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13924 i++;
13925 }
13926 },
13927
13928 /**
13929 * Perform one cycle of SHA-512.
13930 * @param {bitArray} words one block of words.
13931 * @private
13932 */
13933 _block:function (words) {
13934 var i, wrh, wrl,
13935 w = words.slice(0),
13936 h = this._h,
13937 k = this._key,
13938 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13939 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13940 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13941 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13942
13943 // Working variables
13944 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13945 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13946 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13947 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13948
13949 for (i=0; i<80; i++) {
13950 // load up the input word for this round
13951 if (i<16) {
13952 wrh = w[i * 2];
13953 wrl = w[i * 2 + 1];
13954 } else {
13955 // Gamma0
13956 var gamma0xh = w[(i-15) * 2];
13957 var gamma0xl = w[(i-15) * 2 + 1];
13958 var gamma0h =
13959 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13960 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13961 (gamma0xh >>> 7);
13962 var gamma0l =
13963 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13964 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13965 ((gamma0xh << 25) | (gamma0xl >>> 7));
13966
13967 // Gamma1
13968 var gamma1xh = w[(i-2) * 2];
13969 var gamma1xl = w[(i-2) * 2 + 1];
13970 var gamma1h =
13971 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13972 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13973 (gamma1xh >>> 6);
13974 var gamma1l =
13975 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13976 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13977 ((gamma1xh << 26) | (gamma1xl >>> 6));
13978
13979 // Shortcuts
13980 var wr7h = w[(i-7) * 2];
13981 var wr7l = w[(i-7) * 2 + 1];
13982
13983 var wr16h = w[(i-16) * 2];
13984 var wr16l = w[(i-16) * 2 + 1];
13985
13986 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13987 wrl = gamma0l + wr7l;
13988 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13989 wrl += gamma1l;
13990 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13991 wrl += wr16l;
13992 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13993 }
13994
13995 w[i*2] = wrh |= 0;
13996 w[i*2 + 1] = wrl |= 0;
13997
13998 // Ch
13999 var chh = (eh & fh) ^ (~eh & gh);
14000 var chl = (el & fl) ^ (~el & gl);
14001
14002 // Maj
14003 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14004 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14005
14006 // Sigma0
14007 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14008 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14009
14010 // Sigma1
14011 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14012 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14013
14014 // K(round)
14015 var krh = k[i*2];
14016 var krl = k[i*2+1];
14017
14018 // t1 = h + sigma1 + ch + K(round) + W(round)
14019 var t1l = hl + sigma1l;
14020 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14021 t1l += chl;
14022 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14023 t1l += krl;
14024 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14025 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14026 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14027
14028 // t2 = sigma0 + maj
14029 var t2l = sigma0l + majl;
14030 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14031
14032 // Update working variables
14033 hh = gh;
14034 hl = gl;
14035 gh = fh;
14036 gl = fl;
14037 fh = eh;
14038 fl = el;
14039 el = (dl + t1l) | 0;
14040 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14041 dh = ch;
14042 dl = cl;
14043 ch = bh;
14044 cl = bl;
14045 bh = ah;
14046 bl = al;
14047 al = (t1l + t2l) | 0;
14048 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14049 }
14050
14051 // Intermediate hash
14052 h0l = h[1] = (h0l + al) | 0;
14053 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14054 h1l = h[3] = (h1l + bl) | 0;
14055 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14056 h2l = h[5] = (h2l + cl) | 0;
14057 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14058 h3l = h[7] = (h3l + dl) | 0;
14059 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14060 h4l = h[9] = (h4l + el) | 0;
14061 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14062 h5l = h[11] = (h5l + fl) | 0;
14063 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14064 h6l = h[13] = (h6l + gl) | 0;
14065 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14066 h7l = h[15] = (h7l + hl) | 0;
14067 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14068 }
14069 };
14070
14071
14072 //// hmac.js
14073
14074 /** @fileOverview HMAC implementation.
14075 *
14076 * @author Emily Stark
14077 * @author Mike Hamburg
14078 * @author Dan Boneh
14079 */
14080
14081 /** HMAC with the specified hash function.
14082 * @constructor
14083 * @param {bitArray} key the key for HMAC.
14084 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14085 */
14086 sjcl.misc.hmac = function (key, Hash) {
14087 this._hash = Hash = Hash || sjcl.hash.sha256;
14088 var exKey = [[],[]], i,
14089 bs = Hash.prototype.blockSize / 32;
14090 this._baseHash = [new Hash(), new Hash()];
14091
14092 if (key.length > bs) {
14093 key = Hash.hash(key);
14094 }
14095
14096 for (i=0; i<bs; i++) {
14097 exKey[0][i] = key[i]^0x36363636;
14098 exKey[1][i] = key[i]^0x5C5C5C5C;
14099 }
14100
14101 this._baseHash[0].update(exKey[0]);
14102 this._baseHash[1].update(exKey[1]);
14103 this._resultHash = new Hash(this._baseHash[0]);
14104 };
14105
14106 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14107 * @param {bitArray|String} data The data to mac.
14108 */
14109 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14110 if (!this._updated) {
14111 this.update(data);
14112 return this.digest(data);
14113 } else {
14114 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14115 }
14116 };
14117
14118 sjcl.misc.hmac.prototype.reset = function () {
14119 this._resultHash = new this._hash(this._baseHash[0]);
14120 this._updated = false;
14121 };
14122
14123 sjcl.misc.hmac.prototype.update = function (data) {
14124 this._updated = true;
14125 this._resultHash.update(data);
14126 };
14127
14128 sjcl.misc.hmac.prototype.digest = function () {
14129 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14130
14131 this.reset();
14132
14133 return result;
14134 };
14135
14136
14137 //// pbkdf2.js
14138
14139
14140 /** @fileOverview Password-based key-derivation function, version 2.0.
14141 *
14142 * @author Emily Stark
14143 * @author Mike Hamburg
14144 * @author Dan Boneh
14145 */
14146
14147 /** Password-Based Key-Derivation Function, version 2.0.
14148 *
14149 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14150 *
14151 * This is the method specified by RSA's PKCS #5 standard.
14152 *
14153 * @param {bitArray|String} password The password.
14154 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14155 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14156 * @param {Number} [length] The length of the derived key. Defaults to the
14157 output size of the hash function.
14158 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14159 * @return {bitArray} the derived key.
14160 */
14161 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14162 count = count || 1000;
14163
14164 if (length < 0 || count < 0) {
14165 throw sjcl.exception.invalid("invalid params to pbkdf2");
14166 }
14167
14168 if (typeof password === "string") {
14169 password = sjcl.codec.utf8String.toBits(password);
14170 }
14171
14172 if (typeof salt === "string") {
14173 salt = sjcl.codec.utf8String.toBits(salt);
14174 }
14175
14176 Prff = Prff || sjcl.misc.hmac;
14177
14178 var prf = new Prff(password),
14179 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14180
14181 for (k = 1; 32 * out.length < (length || 1); k++) {
14182 u = ui = prf.encrypt(b.concat(salt,[k]));
14183
14184 for (i=1; i<count; i++) {
14185 ui = prf.encrypt(ui);
14186 for (j=0; j<ui.length; j++) {
14187 u[j] ^= ui[j];
14188 }
14189 }
14190
14191 out = out.concat(u);
14192 }
14193
14194 if (length) { out = b.clamp(out, length); }
14195
14196 return out;
14197 };
14198
14199
14200 //// sha256.js
14201
14202 /** @fileOverview Javascript SHA-256 implementation.
14203 *
14204 * An older version of this implementation is available in the public
14205 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14206 * Stanford University 2008-2010 and BSD-licensed for liability
14207 * reasons.
14208 *
14209 * Special thanks to Aldo Cortesi for pointing out several bugs in
14210 * this code.
14211 *
14212 * @author Emily Stark
14213 * @author Mike Hamburg
14214 * @author Dan Boneh
14215 */
14216
14217 /**
14218 * Context for a SHA-256 operation in progress.
14219 * @constructor
14220 * @class Secure Hash Algorithm, 256 bits.
14221 */
14222 sjcl.hash.sha256 = function (hash) {
14223 if (!this._key[0]) { this._precompute(); }
14224 if (hash) {
14225 this._h = hash._h.slice(0);
14226 this._buffer = hash._buffer.slice(0);
14227 this._length = hash._length;
14228 } else {
14229 this.reset();
14230 }
14231 };
14232
14233 /**
14234 * Hash a string or an array of words.
14235 * @static
14236 * @param {bitArray|String} data the data to hash.
14237 * @return {bitArray} The hash value, an array of 16 big-endian words.
14238 */
14239 sjcl.hash.sha256.hash = function (data) {
14240 return (new sjcl.hash.sha256()).update(data).finalize();
14241 };
14242
14243 sjcl.hash.sha256.prototype = {
14244 /**
14245 * The hash's block size, in bits.
14246 * @constant
14247 */
14248 blockSize: 512,
14249
14250 /**
14251 * Reset the hash state.
14252 * @return this
14253 */
14254 reset:function () {
14255 this._h = this._init.slice(0);
14256 this._buffer = [];
14257 this._length = 0;
14258 return this;
14259 },
14260
14261 /**
14262 * Input several words to the hash.
14263 * @param {bitArray|String} data the data to hash.
14264 * @return this
14265 */
14266 update: function (data) {
14267 if (typeof data === "string") {
14268 data = sjcl.codec.utf8String.toBits(data);
14269 }
14270 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14271 ol = this._length,
14272 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14273 for (i = 512+ol & -512; i <= nl; i+= 512) {
14274 this._block(b.splice(0,16));
14275 }
14276 return this;
14277 },
14278
14279 /**
14280 * Complete hashing and output the hash value.
14281 * @return {bitArray} The hash value, an array of 8 big-endian words.
14282 */
14283 finalize:function () {
14284 var i, b = this._buffer, h = this._h;
14285
14286 // Round out and push the buffer
14287 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14288
14289 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14290 for (i = b.length + 2; i & 15; i++) {
14291 b.push(0);
14292 }
14293
14294 // append the length
14295 b.push(Math.floor(this._length / 0x100000000));
14296 b.push(this._length | 0);
14297
14298 while (b.length) {
14299 this._block(b.splice(0,16));
14300 }
14301
14302 this.reset();
14303 return h;
14304 },
14305
14306 /**
14307 * The SHA-256 initialization vector, to be precomputed.
14308 * @private
14309 */
14310 _init:[],
14311 /*
14312 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14313 */
14314
14315 /**
14316 * The SHA-256 hash key, to be precomputed.
14317 * @private
14318 */
14319 _key:[],
14320 /*
14321 _key:
14322 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14323 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14324 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14325 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14326 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14327 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14328 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14329 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14330 */
14331
14332
14333 /**
14334 * Function to precompute _init and _key.
14335 * @private
14336 */
14337 _precompute: function () {
14338 var i = 0, prime = 2, factor;
14339
14340 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14341
14342 outer: for (; i<64; prime++) {
14343 for (factor=2; factor*factor <= prime; factor++) {
14344 if (prime % factor === 0) {
14345 // not a prime
14346 continue outer;
14347 }
14348 }
14349
14350 if (i<8) {
14351 this._init[i] = frac(Math.pow(prime, 1/2));
14352 }
14353 this._key[i] = frac(Math.pow(prime, 1/3));
14354 i++;
14355 }
14356 },
14357
14358 /**
14359 * Perform one cycle of SHA-256.
14360 * @param {bitArray} words one block of words.
14361 * @private
14362 */
14363 _block:function (words) {
14364 var i, tmp, a, b,
14365 w = words.slice(0),
14366 h = this._h,
14367 k = this._key,
14368 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14369 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14370
14371 /* Rationale for placement of |0 :
14372 * If a value can overflow is original 32 bits by a factor of more than a few
14373 * million (2^23 ish), there is a possibility that it might overflow the
14374 * 53-bit mantissa and lose precision.
14375 *
14376 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14377 * propagates around the loop, and on the hash state h[]. I don't believe
14378 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14379 * (for h4 anyway), and better safe than sorry.
14380 *
14381 * The clamps on h[] are necessary for the output to be correct even in the
14382 * common case and for short inputs.
14383 */
14384 for (i=0; i<64; i++) {
14385 // load up the input word for this round
14386 if (i<16) {
14387 tmp = w[i];
14388 } else {
14389 a = w[(i+1 ) & 15];
14390 b = w[(i+14) & 15];
14391 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14392 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14393 w[i&15] + w[(i+9) & 15]) | 0;
14394 }
14395
14396 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14397
14398 // shift register
14399 h7 = h6; h6 = h5; h5 = h4;
14400 h4 = h3 + tmp | 0;
14401 h3 = h2; h2 = h1; h1 = h0;
14402
14403 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14404 }
14405
14406 h[0] = h[0]+h0 | 0;
14407 h[1] = h[1]+h1 | 0;
14408 h[2] = h[2]+h2 | 0;
14409 h[3] = h[3]+h3 | 0;
14410 h[4] = h[4]+h4 | 0;
14411 h[5] = h[5]+h5 | 0;
14412 h[6] = h[6]+h6 | 0;
14413 h[7] = h[7]+h7 | 0;
14414 }
14415 };
14416 </script>
14417 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14418 WORDLISTS["english"] = [
14419 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14420 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14421 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14422 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14423 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14424 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14425 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14426 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14427 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14428 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14429 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14430 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14431 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14432 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14433 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14434 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14435 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14436 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14437 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14438 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14439 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14440 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14441 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14442 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14443 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14444 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14445 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14446 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14447 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14448 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14449 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14450 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14451 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14452 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14453 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14454 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14455 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14456 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14457 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14458 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14459 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14460 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14461 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14462 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14463 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14464 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14465 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14466 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14467 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14468 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14469 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14470 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14471 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14472 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14473 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14474 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14475 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14476 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14477 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14478 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14479 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14480 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14481 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14482 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14483 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14484 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14485 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14486 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14487 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14488 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14489 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14490 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14491 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14492 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14493 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14494 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14495 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14496 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14497 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14498 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14499 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14500 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14501 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14502 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14503 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14504 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14505 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14506 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14507 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14508 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14509 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14510 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14511 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14512 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14513 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14514 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14515 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14516 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14517 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14518 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14519 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14520 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14521 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14522 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14523 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14524 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14525 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14526 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14527 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14528 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14529 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14530 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14531 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14532 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14533 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14534 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14535 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14536 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14537 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14538 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14539 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14540 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14541 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14542 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14543 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14544 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14545 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14546 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14547 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14548 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14549 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14550 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14551 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14552 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14553 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14554 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14555 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14556 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14557 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14558 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14559 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14560 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14561 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14562 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14563 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14564 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14565 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14566 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14567 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14568 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14569 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14570 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14571 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14572 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14573 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14574 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14575 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14576 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14577 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14578 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14579 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14580 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14581 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14582 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14583 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14584 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14585 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14586 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14587 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14588 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14589 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14590 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14591 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14592 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14593 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14594 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14595 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14596 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14597 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14598 "thank","that","theme","then","theory","there","they","thing","this","thought",
14599 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14600 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14601 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14602 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14603 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14604 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14605 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14606 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14607 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14608 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14609 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14610 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14611 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14612 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14613 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14614 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14615 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14616 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14617 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14618 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14619 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14620 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14621 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14622 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14623 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14624 </script>
14625 <script>/*
14626 * Copyright (c) 2013 Pavol Rusnak
14627 *
14628 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14629 * this software and associated documentation files (the "Software"), to deal in
14630 * the Software without restriction, including without limitation the rights to
14631 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14632 * of the Software, and to permit persons to whom the Software is furnished to do
14633 * so, subject to the following conditions:
14634 *
14635 * The above copyright notice and this permission notice shall be included in all
14636 * copies or substantial portions of the Software.
14637 *
14638 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14639 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14640 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14641 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14642 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14643 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14644 */
14645
14646 /*
14647 * Javascript port from python by Ian Coleman
14648 *
14649 * Requires code from sjcl
14650 * https://github.com/bitwiseshiftleft/sjcl
14651 */
14652
14653 var Mnemonic = function(language) {
14654
14655 var PBKDF2_ROUNDS = 2048;
14656 var RADIX = 2048;
14657
14658 var self = this;
14659 var wordlist = [];
14660
14661 var hmacSHA512 = function(key) {
14662 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14663 this.encrypt = function() {
14664 return hasher.encrypt.apply(hasher, arguments);
14665 };
14666 };
14667
14668 function init() {
14669 wordlist = WORDLISTS[language];
14670 if (wordlist.length != RADIX) {
14671 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14672 throw err;
14673 }
14674 }
14675
14676 self.generate = function(strength) {
14677 strength = strength || 128;
14678 var r = strength % 32;
14679 if (r > 0) {
14680 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14681 }
14682 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14683 if (!hasStrongCrypto) {
14684 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14685 }
14686 var buffer = new Uint8Array(strength / 8);
14687 var data = crypto.getRandomValues(buffer);
14688 return self.toMnemonic(data);
14689 }
14690
14691 self.toMnemonic = function(byteArray) {
14692 if (byteArray.length % 4 > 0) {
14693 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14694 }
14695
14696 //h = hashlib.sha256(data).hexdigest()
14697 var data = byteArrayToWordArray(byteArray);
14698 var hash = sjcl.hash.sha256.hash(data);
14699 var h = sjcl.codec.hex.fromBits(hash);
14700
14701 // b is a binary string, eg '00111010101100...'
14702 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14703 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14704 //
14705 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14706 // c = bin(int(h, 16))[2:].zfill(256)
14707 // d = c[:len(data) * 8 / 32]
14708 var a = byteArrayToBinaryString(byteArray);
14709 var c = zfill(hexStringToBinaryString(h), 256);
14710 var d = c.substring(0, byteArray.length * 8 / 32);
14711 // b = line1 + line2
14712 var b = a + d;
14713
14714 var result = [];
14715 var blen = b.length / 11;
14716 for (var i=0; i<blen; i++) {
14717 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14718 result.push(wordlist[idx]);
14719 }
14720 return result.join(' ');
14721 }
14722
14723 self.check = function(mnemonic) {
14724 var mnemonic = mnemonic.split(' ')
14725 if (mnemonic.length % 3 > 0) {
14726 return false
14727 }
14728 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14729 var idx = [];
14730 for (var i=0; i<mnemonic.length; i++) {
14731 var word = mnemonic[i];
14732 var wordIndex = wordlist.indexOf(word);
14733 if (wordIndex == -1) {
14734 return false;
14735 }
14736 var binaryIndex = zfill(wordIndex.toString(2), 11);
14737 idx.push(binaryIndex);
14738 }
14739 var b = idx.join('');
14740 var l = b.length;
14741 //d = b[:l / 33 * 32]
14742 //h = b[-l / 33:]
14743 var d = b.substring(0, l / 33 * 32);
14744 var h = b.substring(l - l / 33, l);
14745 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14746 var nd = binaryStringToWordArray(d);
14747 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14748 var ndHash = sjcl.hash.sha256.hash(nd);
14749 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14750 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14751 var nh = ndBstr.substring(0,l/33);
14752 return h == nh;
14753 }
14754
14755 self.toSeed = function(mnemonic, passphrase) {
14756 passphrase = passphrase || '';
14757 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14758 passphrase = self.normalizeString(passphrase)
14759 passphrase = "mnemonic" + passphrase;
14760 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14761 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14762 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14763 var hashHex = sjcl.codec.hex.fromBits(result);
14764 return hashHex;
14765 }
14766
14767 self.normalizeString = function(str) {
14768 if (typeof str.normalize == "function") {
14769 return str.normalize("NFKD");
14770 }
14771 else {
14772 // TODO decide how to handle this in the future.
14773 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14774 return str;
14775 }
14776 }
14777
14778 function byteArrayToWordArray(data) {
14779 var a = [];
14780 for (var i=0; i<data.length/4; i++) {
14781 v = 0;
14782 v += data[i*4 + 0] << 8 * 3;
14783 v += data[i*4 + 1] << 8 * 2;
14784 v += data[i*4 + 2] << 8 * 1;
14785 v += data[i*4 + 3] << 8 * 0;
14786 a.push(v);
14787 }
14788 return a;
14789 }
14790
14791 function byteArrayToBinaryString(data) {
14792 var bin = "";
14793 for (var i=0; i<data.length; i++) {
14794 bin += zfill(data[i].toString(2), 8);
14795 }
14796 return bin;
14797 }
14798
14799 function hexStringToBinaryString(hexString) {
14800 binaryString = "";
14801 for (var i=0; i<hexString.length; i++) {
14802 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14803 }
14804 return binaryString;
14805 }
14806
14807 function binaryStringToWordArray(binary) {
14808 var aLen = binary.length / 32;
14809 var a = [];
14810 for (var i=0; i<aLen; i++) {
14811 var valueStr = binary.substring(0,32);
14812 var value = parseInt(valueStr, 2);
14813 a.push(value);
14814 binary = binary.slice(32);
14815 }
14816 return a;
14817 }
14818
14819 // Pad a numeric string on the left with zero digits until the given width
14820 // is reached.
14821 // Note this differs to the python implementation because it does not
14822 // handle numbers starting with a sign.
14823 function zfill(source, length) {
14824 source = source.toString();
14825 while (source.length < length) {
14826 source = '0' + source;
14827 }
14828 return source;
14829 }
14830
14831 init();
14832
14833 }
14834 </script>
14835 <script>(function() {
14836
14837 var mnemonic = new Mnemonic("english");
14838 var seed = null
14839 var bip32RootKey = null;
14840 var bip32ExtendedKey = null;
14841 var network = bitcoin.networks.bitcoin;
14842 var addressRowTemplate = $("#address-row-template");
14843
14844 var showIndex = true;
14845 var showAddress = true;
14846 var showPrivKey = true;
14847
14848 var phraseChangeTimeoutEvent = null;
14849 var rootKeyChangedTimeoutEvent = null;
14850
14851 var DOM = {};
14852 DOM.network = $(".network");
14853 DOM.phraseNetwork = $("#network-phrase");
14854 DOM.phrase = $(".phrase");
14855 DOM.passphrase = $(".passphrase");
14856 DOM.generate = $(".generate");
14857 DOM.seed = $(".seed");
14858 DOM.rootKey = $(".root-key");
14859 DOM.extendedPrivKey = $(".extended-priv-key");
14860 DOM.extendedPubKey = $(".extended-pub-key");
14861 DOM.bip32tab = $("#bip32-tab");
14862 DOM.bip44tab = $("#bip44-tab");
14863 DOM.bip32panel = $("#bip32");
14864 DOM.bip44panel = $("#bip44");
14865 DOM.bip32path = $("#bip32-path");
14866 DOM.bip44path = $("#bip44-path");
14867 DOM.bip44purpose = $("#bip44 .purpose");
14868 DOM.bip44coin = $("#bip44 .coin");
14869 DOM.bip44account = $("#bip44 .account");
14870 DOM.bip44change = $("#bip44 .change");
14871 DOM.strength = $(".strength");
14872 DOM.hardenedAddresses = $(".hardened-addresses");
14873 DOM.addresses = $(".addresses");
14874 DOM.rowsToAdd = $(".rows-to-add");
14875 DOM.more = $(".more");
14876 DOM.feedback = $(".feedback");
14877 DOM.tab = $(".derivation-type a");
14878 DOM.indexToggle = $(".index-toggle");
14879 DOM.addressToggle = $(".address-toggle");
14880 DOM.privateKeyToggle = $(".private-key-toggle");
14881
14882 function init() {
14883 // Events
14884 DOM.network.on("change", networkChanged);
14885 DOM.phrase.on("input", delayedPhraseChanged);
14886 DOM.passphrase.on("input", delayedPhraseChanged);
14887 DOM.generate.on("click", generateClicked);
14888 DOM.more.on("click", showMore);
14889 DOM.rootKey.on("input", delayedRootKeyChanged);
14890 DOM.bip32path.on("input", calcForDerivationPath);
14891 DOM.bip44purpose.on("input", calcForDerivationPath);
14892 DOM.bip44coin.on("input", calcForDerivationPath);
14893 DOM.bip44account.on("input", calcForDerivationPath);
14894 DOM.bip44change.on("input", calcForDerivationPath);
14895 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14896 DOM.hardenedAddresses.on("change", calcForDerivationPath);
14897 DOM.indexToggle.on("click", toggleIndexes);
14898 DOM.addressToggle.on("click", toggleAddresses);
14899 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14900 disableForms();
14901 hidePending();
14902 hideValidationError();
14903 populateNetworkSelect();
14904 }
14905
14906 // Event handlers
14907
14908 function networkChanged(e) {
14909 var networkIndex = e.target.value;
14910 networks[networkIndex].onSelect();
14911 if (seed != null) {
14912 phraseChanged();
14913 }
14914 else {
14915 rootKeyChanged();
14916 }
14917 }
14918
14919 function delayedPhraseChanged() {
14920 hideValidationError();
14921 showPending();
14922 if (phraseChangeTimeoutEvent != null) {
14923 clearTimeout(phraseChangeTimeoutEvent);
14924 }
14925 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14926 }
14927
14928 function phraseChanged() {
14929 showPending();
14930 hideValidationError();
14931 // Get the mnemonic phrase
14932 var phrase = DOM.phrase.val();
14933 var errorText = findPhraseErrors(phrase);
14934 if (errorText) {
14935 showValidationError(errorText);
14936 return;
14937 }
14938 // Calculate and display
14939 var passphrase = DOM.passphrase.val();
14940 calcBip32RootKeyFromSeed(phrase, passphrase);
14941 calcForDerivationPath();
14942 hidePending();
14943 }
14944
14945 function delayedRootKeyChanged() {
14946 // Warn if there is an existing mnemonic or passphrase.
14947 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14948 if (!confirm("This will clear existing mnemonic and passphrase")) {
14949 DOM.rootKey.val(bip32RootKey);
14950 return
14951 }
14952 }
14953 hideValidationError();
14954 showPending();
14955 // Clear existing mnemonic and passphrase
14956 DOM.phrase.val("");
14957 DOM.passphrase.val("");
14958 seed = null;
14959 if (rootKeyChangedTimeoutEvent != null) {
14960 clearTimeout(rootKeyChangedTimeoutEvent);
14961 }
14962 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
14963 }
14964
14965 function rootKeyChanged() {
14966 showPending();
14967 hideValidationError();
14968 // Validate the root key TODO
14969 var rootKeyBase58 = DOM.rootKey.val();
14970 var errorText = validateRootKey(rootKeyBase58);
14971 if (errorText) {
14972 showValidationError(errorText);
14973 return;
14974 }
14975 // Calculate and display
14976 calcBip32RootKeyFromBase58(rootKeyBase58);
14977 calcForDerivationPath();
14978 hidePending();
14979 }
14980
14981 function calcForDerivationPath() {
14982 showPending();
14983 hideValidationError();
14984 // Get the derivation path
14985 var derivationPath = getDerivationPath();
14986 var errorText = findDerivationPathErrors(derivationPath);
14987 if (errorText) {
14988 showValidationError(errorText);
14989 return;
14990 }
14991 calcBip32ExtendedKey(derivationPath);
14992 displayBip32Info();
14993 hidePending();
14994 }
14995
14996 function generateClicked() {
14997 clearDisplay();
14998 showPending();
14999 setTimeout(function() {
15000 var phrase = generateRandomPhrase();
15001 if (!phrase) {
15002 return;
15003 }
15004 phraseChanged();
15005 }, 50);
15006 }
15007
15008 function toggleIndexes() {
15009 showIndex = !showIndex;
15010 $("td.index span").toggleClass("invisible");
15011 }
15012
15013 function toggleAddresses() {
15014 showAddress = !showAddress;
15015 $("td.address span").toggleClass("invisible");
15016 }
15017
15018 function togglePrivateKeys() {
15019 showPrivKey = !showPrivKey;
15020 $("td.privkey span").toggleClass("invisible");
15021 }
15022
15023 // Private methods
15024
15025 function generateRandomPhrase() {
15026 if (!hasStrongRandom()) {
15027 var errorText = "This browser does not support strong randomness";
15028 showValidationError(errorText);
15029 return;
15030 }
15031 var numWords = parseInt(DOM.strength.val());
15032 var strength = numWords / 3 * 32;
15033 var words = mnemonic.generate(strength);
15034 DOM.phrase.val(words);
15035 return words;
15036 }
15037
15038 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15039 seed = mnemonic.toSeed(phrase, passphrase);
15040 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15041 }
15042
15043 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15044 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58);
15045 }
15046
15047 function calcBip32ExtendedKey(path) {
15048 bip32ExtendedKey = bip32RootKey;
15049 // Derive the key from the path
15050 var pathBits = path.split("/");
15051 for (var i=0; i<pathBits.length; i++) {
15052 var bit = pathBits[i];
15053 var index = parseInt(bit);
15054 if (isNaN(index)) {
15055 continue;
15056 }
15057 var hardened = bit[bit.length-1] == "'";
15058 if (hardened) {
15059 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15060 }
15061 else {
15062 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15063 }
15064 }
15065 }
15066
15067 function showValidationError(errorText) {
15068 DOM.feedback
15069 .text(errorText)
15070 .show();
15071 }
15072
15073 function hideValidationError() {
15074 DOM.feedback
15075 .text("")
15076 .hide();
15077 }
15078
15079 function findPhraseErrors(phrase) {
15080 // TODO make this right
15081 // Preprocess the words
15082 phrase = mnemonic.normalizeString(phrase);
15083 var parts = phrase.split(" ");
15084 var proper = [];
15085 for (var i=0; i<parts.length; i++) {
15086 var part = parts[i];
15087 if (part.length > 0) {
15088 // TODO check that lowercasing is always valid to do
15089 proper.push(part.toLowerCase());
15090 }
15091 }
15092 var properPhrase = proper.join(' ');
15093 // Check each word
15094 for (var i=0; i<proper.length; i++) {
15095 var word = proper[i];
15096 if (WORDLISTS["english"].indexOf(word) == -1) {
15097 console.log("Finding closest match to " + word);
15098 var nearestWord = findNearestWord(word);
15099 return word + " not in wordlist, did you mean " + nearestWord + "?";
15100 }
15101 }
15102 // Check the words are valid
15103 var isValid = mnemonic.check(properPhrase);
15104 if (!isValid) {
15105 return "Invalid mnemonic";
15106 }
15107 return false;
15108 }
15109
15110 function validateRootKey(rootKeyBase58) {
15111 try {
15112 bitcoin.HDNode.fromBase58(rootKeyBase58);
15113 }
15114 catch (e) {
15115 return "Invalid root key";
15116 }
15117 return "";
15118 }
15119
15120 function getDerivationPath() {
15121 if (DOM.bip44tab.hasClass("active")) {
15122 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15123 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15124 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15125 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15126 var path = "m/";
15127 path += purpose + "'/";
15128 path += coin + "'/";
15129 path += account + "'/";
15130 path += change;
15131 DOM.bip44path.val(path);
15132 var derivationPath = DOM.bip44path.val();
15133 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15134 return derivationPath;
15135 }
15136 else if (DOM.bip32tab.hasClass("active")) {
15137 var derivationPath = DOM.bip32path.val();
15138 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15139 return derivationPath;
15140 }
15141 else {
15142 console.log("Unknown derivation path");
15143 }
15144 }
15145
15146 function findDerivationPathErrors(path) {
15147 // TODO is not perfect but is better than nothing
15148 // Inspired by
15149 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15150 // and
15151 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15152 var maxDepth = 255; // TODO verify this!!
15153 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15154 if (path[0] != "m") {
15155 return "First character must be 'm'";
15156 }
15157 if (path.length > 1) {
15158 if (path[1] != "/") {
15159 return "Separator must be '/'";
15160 }
15161 var indexes = path.split("/");
15162 if (indexes.length > maxDepth) {
15163 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15164 }
15165 for (var depth = 1; depth<indexes.length; depth++) {
15166 var index = indexes[depth];
15167 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15168 if (invalidChars.length > 0) {
15169 return "Invalid characters " + invalidChars + " found at depth " + depth;
15170 }
15171 var indexValue = parseInt(index.replace("'", ""));
15172 if (isNaN(depth)) {
15173 return "Invalid number at depth " + depth;
15174 }
15175 if (indexValue > maxIndexValue) {
15176 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15177 }
15178 }
15179 }
15180 return false;
15181 }
15182
15183 function displayBip32Info() {
15184 // Display the key
15185 DOM.seed.val(seed);
15186 var rootKey = bip32RootKey.toBase58();
15187 DOM.rootKey.val(rootKey);
15188 var extendedPrivKey = bip32ExtendedKey.toBase58();
15189 DOM.extendedPrivKey.val(extendedPrivKey);
15190 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15191 DOM.extendedPubKey.val(extendedPubKey);
15192 // Display the addresses and privkeys
15193 clearAddressesList();
15194 displayAddresses(0, 20);
15195 }
15196
15197 function displayAddresses(start, total) {
15198 for (var i=0; i<total; i++) {
15199 var index = i + start;
15200 new TableRow(index);
15201 }
15202 }
15203
15204 function TableRow(index) {
15205
15206 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
15207
15208 function init() {
15209 calculateValues();
15210 }
15211
15212 function calculateValues() {
15213 setTimeout(function() {
15214 var key = "";
15215 if (useHardenedAddresses) {
15216 key = bip32ExtendedKey.deriveHardened(index);
15217 }
15218 else {
15219 key = bip32ExtendedKey.derive(index);
15220 }
15221 var address = key.getAddress().toString();
15222 var privkey = key.privKey.toWIF(network);
15223 var indexText = getDerivationPath() + "/" + index;
15224 if (useHardenedAddresses) {
15225 indexText = indexText + "'";
15226 }
15227 addAddressToList(indexText, address, privkey);
15228 }, 50)
15229 }
15230
15231 init();
15232
15233 }
15234
15235 function showMore() {
15236 var start = DOM.addresses.children().length;
15237 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15238 if (isNaN(rowsToAdd)) {
15239 rowsToAdd = 20;
15240 DOM.rowsToAdd.val("20");
15241 }
15242 if (rowsToAdd > 200) {
15243 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15244 msg += "Do you want to continue?";
15245 if (!confirm(msg)) {
15246 return;
15247 }
15248 }
15249 displayAddresses(start, rowsToAdd);
15250 }
15251
15252 function clearDisplay() {
15253 clearAddressesList();
15254 clearKey();
15255 hideValidationError();
15256 }
15257
15258 function clearAddressesList() {
15259 DOM.addresses.empty();
15260 }
15261
15262 function clearKey() {
15263 DOM.rootKey.val("");
15264 DOM.extendedPrivKey.val("");
15265 DOM.extendedPubKey.val("");
15266 }
15267
15268 function addAddressToList(indexText, address, privkey) {
15269 var row = $(addressRowTemplate.html());
15270 // Elements
15271 var indexCell = row.find(".index span");
15272 var addressCell = row.find(".address span");
15273 var privkeyCell = row.find(".privkey span");
15274 // Content
15275 indexCell.text(indexText);
15276 addressCell.text(address);
15277 privkeyCell.text(privkey);
15278 // Visibility
15279 if (!showIndex) {
15280 indexCell.addClass("invisible");
15281 }
15282 if (!showAddress) {
15283 addressCell.addClass("invisible");
15284 }
15285 if (!showPrivKey) {
15286 privkeyCell.addClass("invisible");
15287 }
15288 DOM.addresses.append(row);
15289 }
15290
15291 function hasStrongRandom() {
15292 return 'crypto' in window && window['crypto'] !== null;
15293 }
15294
15295 function disableForms() {
15296 $("form").on("submit", function(e) {
15297 e.preventDefault();
15298 });
15299 }
15300
15301 function parseIntNoNaN(val, defaultVal) {
15302 var v = parseInt(val);
15303 if (isNaN(v)) {
15304 return defaultVal;
15305 }
15306 return v;
15307 }
15308
15309 function showPending() {
15310 DOM.feedback
15311 .text("Calculating...")
15312 .show();
15313 }
15314
15315 function findNearestWord(word) {
15316 var words = WORDLISTS["english"];
15317 var minDistance = 99;
15318 var closestWord = words[0];
15319 for (var i=0; i<words.length; i++) {
15320 var comparedTo = words[i];
15321 var distance = Levenshtein.get(word, comparedTo);
15322 if (distance < minDistance) {
15323 closestWord = comparedTo;
15324 minDistance = distance;
15325 }
15326 }
15327 return closestWord;
15328 }
15329
15330 function hidePending() {
15331 DOM.feedback
15332 .text("")
15333 .hide();
15334 }
15335
15336 function populateNetworkSelect() {
15337 for (var i=0; i<networks.length; i++) {
15338 var network = networks[i];
15339 var option = $("<option>");
15340 option.attr("value", i);
15341 option.text(network.name);
15342 DOM.phraseNetwork.append(option);
15343 }
15344 }
15345
15346 var networks = [
15347 {
15348 name: "Bitcoin",
15349 onSelect: function() {
15350 network = bitcoin.networks.bitcoin;
15351 DOM.bip44coin.val(0);
15352 },
15353 },
15354 {
15355 name: "Bitcoin Testnet",
15356 onSelect: function() {
15357 network = bitcoin.networks.testnet;
15358 DOM.bip44coin.val(1);
15359 },
15360 },
15361 {
15362 name: "Litecoin",
15363 onSelect: function() {
15364 network = bitcoin.networks.litecoin;
15365 DOM.bip44coin.val(2);
15366 },
15367 },
15368 {
15369 name: "Dogecoin",
15370 onSelect: function() {
15371 network = bitcoin.networks.dogecoin;
15372 DOM.bip44coin.val(3);
15373 },
15374 },
15375 {
15376 name: "ShadowCash",
15377 onSelect: function() {
15378 network = bitcoin.networks.shadow;
15379 DOM.bip44coin.val(35);
15380 },
15381 },
15382 {
15383 name: "ShadowCash Testnet",
15384 onSelect: function() {
15385 network = bitcoin.networks.shadowtn;
15386 DOM.bip44coin.val(1);
15387 },
15388 },
15389 {
15390 name: "Viacoin",
15391 onSelect: function() {
15392 network = bitcoin.networks.viacoin;
15393 DOM.bip44coin.val(14);
15394 },
15395 },
15396 {
15397 name: "Viacoin Testnet",
15398 onSelect: function() {
15399 network = bitcoin.networks.viacointestnet;
15400 DOM.bip44coin.val(1);
15401 },
15402 },
15403 {
15404 name: "Jumbucks",
15405 onSelect: function() {
15406 network = bitcoin.networks.jumbucks;
15407 DOM.bip44coin.val(26);
15408 },
15409 },
15410 {
15411 name: "CLAM",
15412 onSelect: function() {
15413 network = bitcoin.networks.clam;
15414 DOM.bip44coin.val(23);
15415 },
15416 },
15417 ]
15418
15419 init();
15420
15421 })();
15422 </script>
15423 </body>
15424 </html>