]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Derivation path for Block Explorers
[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 <div class="form-group">
228 <label class="col-sm-2 control-label">Block Explorers</label>
229 <div class="col-sm-10">
230 <p class="form-control no-border">
231 Use path <code>m/44'/0'/0'</code>.
232 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
233 </p>
234 </div>
235 </div>
236 </form>
237 </div>
238 </div>
239 <form class="form-horizontal" role="form">
240 <div class="form-group">
241 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
242 <div class="col-sm-10">
243 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
244 </div>
245 </div>
246 <div class="form-group">
247 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
248 <div class="col-sm-10">
249 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
250 </div>
251 </div>
252 </form>
253 </div>
254 </div>
255
256 <hr>
257
258 <div class="row">
259 <div class="col-md-12">
260 <h2>Derived Addresses</h2>
261 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
262 <table class="table table-striped">
263 <thead>
264 <th>
265 <div class="input-group">
266 Path&nbsp;&nbsp;
267 <button class="index-toggle">Toggle</button>
268 </div>
269 </th>
270 <th>
271 <div class="input-group">
272 Address&nbsp;&nbsp;
273 <button class="address-toggle">Toggle</button>
274 </div>
275 </th>
276 <th>
277 <div class="input-group">
278 Private Key&nbsp;&nbsp;
279 <button class="private-key-toggle">Toggle</button>
280 </div>
281 </th>
282 </thead>
283 <tbody class="addresses">
284 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
285 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
286 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
287 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
288 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
289 </tbody>
290 </table>
291 </div>
292 </div>
293 <span>Show next </button>
294 <input type="number" class="rows-to-add" value="20">
295 <button class="more">Show</button>
296
297 <hr>
298
299 <div class="row">
300 <div class="col-md-12">
301 <h2>More info</h2>
302 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
303 <p>
304 Read more at the
305 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
306 </p>
307 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
308 <p>
309 Read more at the
310 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
311 and see the demo at
312 <a href="http://bip32.org/" target="_blank">bip32.org</a>
313 </p>
314 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
315 <p>
316 Read more at the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
318 </p>
319 <h3>Private Keys</h3>
320 <p>
321 Use private keys at
322 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
323 but be careful - it can be easy to make mistakes if you
324 don't know what you're doing
325 </p>
326 </div>
327 </div>
328
329 <hr>
330
331 <div class="row">
332 <div class="col-md-12">
333
334 <h2>Offline Usage</h2>
335
336 <p>
337 You can use this tool without having to be online.
338 </p>
339 <p>
340 In your browser, select file save-as, and save this page
341 as a file.
342 </p>
343 <p>
344 Double-click that file to open it in a browser
345 on any offline computer.
346 </p>
347 <p>
348 Alternatively, download it from
349 <a href="https://github.com/dcpos/bip39">
350 https://github.com/dcpos/bip39
351 </a>
352
353 </div>
354 </div>
355
356 <hr>
357
358 <div class="row">
359 <div class="col-md-12">
360
361 <h2>This project is 100% open-source code</h2>
362
363 <p>
364 <span>Get the source code at - </span>
365 <a href="https://github.com/dcpos/bip39" target="_blank">
366 https://github.com/dcpos/bip39
367 </a>
368 </p>
369
370 <h3>Libraries</h3>
371
372 <p>
373 <span>BitcoinJS - </span>
374 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
375 https://github.com/bitcoinjs/bitcoinjs-lib
376 </a>
377 </p>
378
379 <p>
380 <span>jsBIP39 - </span>
381 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
382 https://github.com/iancoleman/jsbip39
383 </a>
384 </p>
385
386 <p>
387 <span>sjcl - </span>
388 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
389 https://github.com/bitwiseshiftleft/sjcl
390 </a>
391 </p>
392
393 <p>
394 <span>jQuery - </span>
395 <a href="https://jquery.com/" target="_blank">
396 https://jquery.com/
397 </a>
398 </p>
399
400 <p>
401 <span>Twitter Bootstrap - </span>
402 <a href="http://getbootstrap.com/" target="_blank">
403 http://getbootstrap.com/
404 </a>
405 </p>
406
407 </div>
408 </div>
409
410 </div>
411
412 <div class="feedback-container">
413 <div class="feedback">Loading...</div>
414 </div>
415
416 <script type="text/template" id="address-row-template">
417 <tr>
418 <td class="index"><span></span></td>
419 <td class="address"><span></span></td>
420 <td class="privkey"><span></span></td>
421 </tr>
422 </script>
423 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
424 !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)
425 },_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))
426 },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});
427 </script>
428 <script>/*!
429 * Bootstrap v3.2.0 (http://getbootstrap.com)
430 * Copyright 2011-2014 Twitter, Inc.
431 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
432 */
433 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>
434 <script>(function() {
435 'use strict';
436
437 /**
438 * Extend an Object with another Object's properties.
439 *
440 * The source objects are specified as additional arguments.
441 *
442 * @param dst Object the object to extend.
443 *
444 * @return Object the final object.
445 */
446 var _extend = function(dst) {
447 var sources = Array.prototype.slice.call(arguments, 1);
448 for (var i=0; i<sources.length; ++i) {
449 var src = sources[i];
450 for (var p in src) {
451 if (src.hasOwnProperty(p)) dst[p] = src[p];
452 }
453 }
454 return dst;
455 };
456
457
458 /**
459 * Defer execution of given function.
460 * @param {Function} func
461 */
462 var _defer = function(func) {
463 if (typeof setImmediate === 'function') {
464 return setImmediate(func);
465 } else {
466 return setTimeout(func, 0);
467 }
468 };
469
470 /**
471 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
472 */
473 var Levenshtein = {
474 /**
475 * Calculate levenshtein distance of the two strings.
476 *
477 * @param str1 String the first string.
478 * @param str2 String the second string.
479 * @return Integer the levenshtein distance (0 and above).
480 */
481 get: function(str1, str2) {
482 // base cases
483 if (str1 === str2) return 0;
484 if (str1.length === 0) return str2.length;
485 if (str2.length === 0) return str1.length;
486
487 // two rows
488 var prevRow = new Array(str2.length + 1),
489 curCol, nextCol, i, j, tmp;
490
491 // initialise previous row
492 for (i=0; i<prevRow.length; ++i) {
493 prevRow[i] = i;
494 }
495
496 // calculate current row distance from previous row
497 for (i=0; i<str1.length; ++i) {
498 nextCol = i + 1;
499
500 for (j=0; j<str2.length; ++j) {
501 curCol = nextCol;
502
503 // substution
504 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
505 // insertion
506 tmp = curCol + 1;
507 if (nextCol > tmp) {
508 nextCol = tmp;
509 }
510 // deletion
511 tmp = prevRow[j + 1] + 1;
512 if (nextCol > tmp) {
513 nextCol = tmp;
514 }
515
516 // copy current col value into previous (in preparation for next iteration)
517 prevRow[j] = curCol;
518 }
519
520 // copy last col value into previous (in preparation for next iteration)
521 prevRow[j] = nextCol;
522 }
523
524 return nextCol;
525 },
526
527 /**
528 * Asynchronously calculate levenshtein distance of the two strings.
529 *
530 * @param str1 String the first string.
531 * @param str2 String the second string.
532 * @param cb Function callback function with signature: function(Error err, int distance)
533 * @param [options] Object additional options.
534 * @param [options.progress] Function progress callback with signature: function(percentComplete)
535 */
536 getAsync: function(str1, str2, cb, options) {
537 options = _extend({}, {
538 progress: null
539 }, options);
540
541 // base cases
542 if (str1 === str2) return cb(null, 0);
543 if (str1.length === 0) return cb(null, str2.length);
544 if (str2.length === 0) return cb(null, str1.length);
545
546 // two rows
547 var prevRow = new Array(str2.length + 1),
548 curCol, nextCol,
549 i, j, tmp,
550 startTime, currentTime;
551
552 // initialise previous row
553 for (i=0; i<prevRow.length; ++i) {
554 prevRow[i] = i;
555 }
556
557 nextCol = 1;
558 i = 0;
559 j = -1;
560
561 var __calculate = function() {
562 // reset timer
563 startTime = new Date().valueOf();
564 currentTime = startTime;
565
566 // keep going until one second has elapsed
567 while (currentTime - startTime < 1000) {
568 // reached end of current row?
569 if (str2.length <= (++j)) {
570 // copy current into previous (in preparation for next iteration)
571 prevRow[j] = nextCol;
572
573 // if already done all chars
574 if (str1.length <= (++i)) {
575 return cb(null, nextCol);
576 }
577 // else if we have more left to do
578 else {
579 nextCol = i + 1;
580 j = 0;
581 }
582 }
583
584 // calculation
585 curCol = nextCol;
586
587 // substution
588 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
589 // insertion
590 tmp = curCol + 1;
591 if (nextCol > tmp) {
592 nextCol = tmp;
593 }
594 // deletion
595 tmp = prevRow[j + 1] + 1;
596 if (nextCol > tmp) {
597 nextCol = tmp;
598 }
599
600 // copy current into previous (in preparation for next iteration)
601 prevRow[j] = curCol;
602
603 // get current time
604 currentTime = new Date().valueOf();
605 }
606
607 // send a progress update?
608 if (null !== options.progress) {
609 try {
610 options.progress.call(null, (i * 100.0/ str1.length));
611 } catch (err) {
612 return cb('Progress callback: ' + err.toString());
613 }
614 }
615
616 // next iteration
617 _defer(__calculate);
618 };
619
620 __calculate();
621 }
622
623 };
624
625 // amd
626 if (typeof define !== "undefined" && define !== null && define.amd) {
627 define(function() {
628 return Levenshtein;
629 });
630 }
631 // commonjs
632 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
633 module.exports = Levenshtein;
634 }
635 // web worker
636 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
637 self.Levenshtein = Levenshtein;
638 }
639 // browser main thread
640 else if (typeof window !== "undefined" && window !== null) {
641 window.Levenshtein = Levenshtein;
642 }
643 }());
644
645 </script>
646 <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){
647 // (public) Constructor
648 function BigInteger(a, b, c) {
649 if (!(this instanceof BigInteger))
650 return new BigInteger(a, b, c)
651
652 if (a != null) {
653 if ("number" == typeof a) this.fromNumber(a, b, c)
654 else if (b == null && "string" != typeof a) this.fromString(a, 256)
655 else this.fromString(a, b)
656 }
657 }
658
659 var proto = BigInteger.prototype
660
661 // duck-typed isBigInteger
662 proto.__bigi = require('../package.json').version
663 BigInteger.isBigInteger = function (obj, check_ver) {
664 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
665 }
666
667 // Bits per digit
668 var dbits
669
670 // am: Compute w_j += (x*this_i), propagate carries,
671 // c is initial carry, returns final carry.
672 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
673 // We need to select the fastest one that works in this environment.
674
675 // am1: use a single mult and divide to get the high bits,
676 // max digit bits should be 26 because
677 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
678 function am1(i, x, w, j, c, n) {
679 while (--n >= 0) {
680 var v = x * this[i++] + w[j] + c
681 c = Math.floor(v / 0x4000000)
682 w[j++] = v & 0x3ffffff
683 }
684 return c
685 }
686 // am2 avoids a big mult-and-extract completely.
687 // Max digit bits should be <= 30 because we do bitwise ops
688 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
689 function am2(i, x, w, j, c, n) {
690 var xl = x & 0x7fff,
691 xh = x >> 15
692 while (--n >= 0) {
693 var l = this[i] & 0x7fff
694 var h = this[i++] >> 15
695 var m = xh * l + h * xl
696 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
697 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
698 w[j++] = l & 0x3fffffff
699 }
700 return c
701 }
702 // Alternately, set max digit bits to 28 since some
703 // browsers slow down when dealing with 32-bit numbers.
704 function am3(i, x, w, j, c, n) {
705 var xl = x & 0x3fff,
706 xh = x >> 14
707 while (--n >= 0) {
708 var l = this[i] & 0x3fff
709 var h = this[i++] >> 14
710 var m = xh * l + h * xl
711 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
712 c = (l >> 28) + (m >> 14) + xh * h
713 w[j++] = l & 0xfffffff
714 }
715 return c
716 }
717
718 // wtf?
719 BigInteger.prototype.am = am1
720 dbits = 26
721
722 BigInteger.prototype.DB = dbits
723 BigInteger.prototype.DM = ((1 << dbits) - 1)
724 var DV = BigInteger.prototype.DV = (1 << dbits)
725
726 var BI_FP = 52
727 BigInteger.prototype.FV = Math.pow(2, BI_FP)
728 BigInteger.prototype.F1 = BI_FP - dbits
729 BigInteger.prototype.F2 = 2 * dbits - BI_FP
730
731 // Digit conversions
732 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
733 var BI_RC = new Array()
734 var rr, vv
735 rr = "0".charCodeAt(0)
736 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
737 rr = "a".charCodeAt(0)
738 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
739 rr = "A".charCodeAt(0)
740 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
741
742 function int2char(n) {
743 return BI_RM.charAt(n)
744 }
745
746 function intAt(s, i) {
747 var c = BI_RC[s.charCodeAt(i)]
748 return (c == null) ? -1 : c
749 }
750
751 // (protected) copy this to r
752 function bnpCopyTo(r) {
753 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
754 r.t = this.t
755 r.s = this.s
756 }
757
758 // (protected) set from integer value x, -DV <= x < DV
759 function bnpFromInt(x) {
760 this.t = 1
761 this.s = (x < 0) ? -1 : 0
762 if (x > 0) this[0] = x
763 else if (x < -1) this[0] = x + DV
764 else this.t = 0
765 }
766
767 // return bigint initialized to value
768 function nbv(i) {
769 var r = new BigInteger()
770 r.fromInt(i)
771 return r
772 }
773
774 // (protected) set from string and radix
775 function bnpFromString(s, b) {
776 var self = this
777
778 var k
779 if (b == 16) k = 4
780 else if (b == 8) k = 3
781 else if (b == 256) k = 8; // byte array
782 else if (b == 2) k = 1
783 else if (b == 32) k = 5
784 else if (b == 4) k = 2
785 else {
786 self.fromRadix(s, b)
787 return
788 }
789 self.t = 0
790 self.s = 0
791 var i = s.length,
792 mi = false,
793 sh = 0
794 while (--i >= 0) {
795 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
796 if (x < 0) {
797 if (s.charAt(i) == "-") mi = true
798 continue
799 }
800 mi = false
801 if (sh == 0)
802 self[self.t++] = x
803 else if (sh + k > self.DB) {
804 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
805 self[self.t++] = (x >> (self.DB - sh))
806 } else
807 self[self.t - 1] |= x << sh
808 sh += k
809 if (sh >= self.DB) sh -= self.DB
810 }
811 if (k == 8 && (s[0] & 0x80) != 0) {
812 self.s = -1
813 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
814 }
815 self.clamp()
816 if (mi) BigInteger.ZERO.subTo(self, self)
817 }
818
819 // (protected) clamp off excess high words
820 function bnpClamp() {
821 var c = this.s & this.DM
822 while (this.t > 0 && this[this.t - 1] == c)--this.t
823 }
824
825 // (public) return string representation in given radix
826 function bnToString(b) {
827 var self = this
828 if (self.s < 0) return "-" + self.negate()
829 .toString(b)
830 var k
831 if (b == 16) k = 4
832 else if (b == 8) k = 3
833 else if (b == 2) k = 1
834 else if (b == 32) k = 5
835 else if (b == 4) k = 2
836 else return self.toRadix(b)
837 var km = (1 << k) - 1,
838 d, m = false,
839 r = "",
840 i = self.t
841 var p = self.DB - (i * self.DB) % k
842 if (i-- > 0) {
843 if (p < self.DB && (d = self[i] >> p) > 0) {
844 m = true
845 r = int2char(d)
846 }
847 while (i >= 0) {
848 if (p < k) {
849 d = (self[i] & ((1 << p) - 1)) << (k - p)
850 d |= self[--i] >> (p += self.DB - k)
851 } else {
852 d = (self[i] >> (p -= k)) & km
853 if (p <= 0) {
854 p += self.DB
855 --i
856 }
857 }
858 if (d > 0) m = true
859 if (m) r += int2char(d)
860 }
861 }
862 return m ? r : "0"
863 }
864
865 // (public) -this
866 function bnNegate() {
867 var r = new BigInteger()
868 BigInteger.ZERO.subTo(this, r)
869 return r
870 }
871
872 // (public) |this|
873 function bnAbs() {
874 return (this.s < 0) ? this.negate() : this
875 }
876
877 // (public) return + if this > a, - if this < a, 0 if equal
878 function bnCompareTo(a) {
879 var r = this.s - a.s
880 if (r != 0) return r
881 var i = this.t
882 r = i - a.t
883 if (r != 0) return (this.s < 0) ? -r : r
884 while (--i >= 0)
885 if ((r = this[i] - a[i]) != 0) return r
886 return 0
887 }
888
889 // returns bit length of the integer x
890 function nbits(x) {
891 var r = 1,
892 t
893 if ((t = x >>> 16) != 0) {
894 x = t
895 r += 16
896 }
897 if ((t = x >> 8) != 0) {
898 x = t
899 r += 8
900 }
901 if ((t = x >> 4) != 0) {
902 x = t
903 r += 4
904 }
905 if ((t = x >> 2) != 0) {
906 x = t
907 r += 2
908 }
909 if ((t = x >> 1) != 0) {
910 x = t
911 r += 1
912 }
913 return r
914 }
915
916 // (public) return the number of bits in "this"
917 function bnBitLength() {
918 if (this.t <= 0) return 0
919 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
920 }
921
922 // (public) return the number of bytes in "this"
923 function bnByteLength() {
924 return this.bitLength() >> 3
925 }
926
927 // (protected) r = this << n*DB
928 function bnpDLShiftTo(n, r) {
929 var i
930 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
931 for (i = n - 1; i >= 0; --i) r[i] = 0
932 r.t = this.t + n
933 r.s = this.s
934 }
935
936 // (protected) r = this >> n*DB
937 function bnpDRShiftTo(n, r) {
938 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
939 r.t = Math.max(this.t - n, 0)
940 r.s = this.s
941 }
942
943 // (protected) r = this << n
944 function bnpLShiftTo(n, r) {
945 var self = this
946 var bs = n % self.DB
947 var cbs = self.DB - bs
948 var bm = (1 << cbs) - 1
949 var ds = Math.floor(n / self.DB),
950 c = (self.s << bs) & self.DM,
951 i
952 for (i = self.t - 1; i >= 0; --i) {
953 r[i + ds + 1] = (self[i] >> cbs) | c
954 c = (self[i] & bm) << bs
955 }
956 for (i = ds - 1; i >= 0; --i) r[i] = 0
957 r[ds] = c
958 r.t = self.t + ds + 1
959 r.s = self.s
960 r.clamp()
961 }
962
963 // (protected) r = this >> n
964 function bnpRShiftTo(n, r) {
965 var self = this
966 r.s = self.s
967 var ds = Math.floor(n / self.DB)
968 if (ds >= self.t) {
969 r.t = 0
970 return
971 }
972 var bs = n % self.DB
973 var cbs = self.DB - bs
974 var bm = (1 << bs) - 1
975 r[0] = self[ds] >> bs
976 for (var i = ds + 1; i < self.t; ++i) {
977 r[i - ds - 1] |= (self[i] & bm) << cbs
978 r[i - ds] = self[i] >> bs
979 }
980 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
981 r.t = self.t - ds
982 r.clamp()
983 }
984
985 // (protected) r = this - a
986 function bnpSubTo(a, r) {
987 var self = this
988 var i = 0,
989 c = 0,
990 m = Math.min(a.t, self.t)
991 while (i < m) {
992 c += self[i] - a[i]
993 r[i++] = c & self.DM
994 c >>= self.DB
995 }
996 if (a.t < self.t) {
997 c -= a.s
998 while (i < self.t) {
999 c += self[i]
1000 r[i++] = c & self.DM
1001 c >>= self.DB
1002 }
1003 c += self.s
1004 } else {
1005 c += self.s
1006 while (i < a.t) {
1007 c -= a[i]
1008 r[i++] = c & self.DM
1009 c >>= self.DB
1010 }
1011 c -= a.s
1012 }
1013 r.s = (c < 0) ? -1 : 0
1014 if (c < -1) r[i++] = self.DV + c
1015 else if (c > 0) r[i++] = c
1016 r.t = i
1017 r.clamp()
1018 }
1019
1020 // (protected) r = this * a, r != this,a (HAC 14.12)
1021 // "this" should be the larger one if appropriate.
1022 function bnpMultiplyTo(a, r) {
1023 var x = this.abs(),
1024 y = a.abs()
1025 var i = x.t
1026 r.t = i + y.t
1027 while (--i >= 0) r[i] = 0
1028 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1029 r.s = 0
1030 r.clamp()
1031 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1032 }
1033
1034 // (protected) r = this^2, r != this (HAC 14.16)
1035 function bnpSquareTo(r) {
1036 var x = this.abs()
1037 var i = r.t = 2 * x.t
1038 while (--i >= 0) r[i] = 0
1039 for (i = 0; i < x.t - 1; ++i) {
1040 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1041 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1042 r[i + x.t] -= x.DV
1043 r[i + x.t + 1] = 1
1044 }
1045 }
1046 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1047 r.s = 0
1048 r.clamp()
1049 }
1050
1051 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1052 // r != q, this != m. q or r may be null.
1053 function bnpDivRemTo(m, q, r) {
1054 var self = this
1055 var pm = m.abs()
1056 if (pm.t <= 0) return
1057 var pt = self.abs()
1058 if (pt.t < pm.t) {
1059 if (q != null) q.fromInt(0)
1060 if (r != null) self.copyTo(r)
1061 return
1062 }
1063 if (r == null) r = new BigInteger()
1064 var y = new BigInteger(),
1065 ts = self.s,
1066 ms = m.s
1067 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1068 if (nsh > 0) {
1069 pm.lShiftTo(nsh, y)
1070 pt.lShiftTo(nsh, r)
1071 } else {
1072 pm.copyTo(y)
1073 pt.copyTo(r)
1074 }
1075 var ys = y.t
1076 var y0 = y[ys - 1]
1077 if (y0 == 0) return
1078 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1079 var d1 = self.FV / yt,
1080 d2 = (1 << self.F1) / yt,
1081 e = 1 << self.F2
1082 var i = r.t,
1083 j = i - ys,
1084 t = (q == null) ? new BigInteger() : q
1085 y.dlShiftTo(j, t)
1086 if (r.compareTo(t) >= 0) {
1087 r[r.t++] = 1
1088 r.subTo(t, r)
1089 }
1090 BigInteger.ONE.dlShiftTo(ys, t)
1091 t.subTo(y, y); // "negative" y so we can replace sub with am later
1092 while (y.t < ys) y[y.t++] = 0
1093 while (--j >= 0) {
1094 // Estimate quotient digit
1095 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1096 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1097 y.dlShiftTo(j, t)
1098 r.subTo(t, r)
1099 while (r[i] < --qd) r.subTo(t, r)
1100 }
1101 }
1102 if (q != null) {
1103 r.drShiftTo(ys, q)
1104 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1105 }
1106 r.t = ys
1107 r.clamp()
1108 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1109 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1110 }
1111
1112 // (public) this mod a
1113 function bnMod(a) {
1114 var r = new BigInteger()
1115 this.abs()
1116 .divRemTo(a, null, r)
1117 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1118 return r
1119 }
1120
1121 // Modular reduction using "classic" algorithm
1122 function Classic(m) {
1123 this.m = m
1124 }
1125
1126 function cConvert(x) {
1127 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1128 else return x
1129 }
1130
1131 function cRevert(x) {
1132 return x
1133 }
1134
1135 function cReduce(x) {
1136 x.divRemTo(this.m, null, x)
1137 }
1138
1139 function cMulTo(x, y, r) {
1140 x.multiplyTo(y, r)
1141 this.reduce(r)
1142 }
1143
1144 function cSqrTo(x, r) {
1145 x.squareTo(r)
1146 this.reduce(r)
1147 }
1148
1149 Classic.prototype.convert = cConvert
1150 Classic.prototype.revert = cRevert
1151 Classic.prototype.reduce = cReduce
1152 Classic.prototype.mulTo = cMulTo
1153 Classic.prototype.sqrTo = cSqrTo
1154
1155 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1156 // justification:
1157 // xy == 1 (mod m)
1158 // xy = 1+km
1159 // xy(2-xy) = (1+km)(1-km)
1160 // x[y(2-xy)] = 1-k^2m^2
1161 // x[y(2-xy)] == 1 (mod m^2)
1162 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1163 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1164 // JS multiply "overflows" differently from C/C++, so care is needed here.
1165 function bnpInvDigit() {
1166 if (this.t < 1) return 0
1167 var x = this[0]
1168 if ((x & 1) == 0) return 0
1169 var y = x & 3; // y == 1/x mod 2^2
1170 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1171 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1172 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1173 // last step - calculate inverse mod DV directly
1174 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1175 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1176 // we really want the negative inverse, and -DV < y < DV
1177 return (y > 0) ? this.DV - y : -y
1178 }
1179
1180 // Montgomery reduction
1181 function Montgomery(m) {
1182 this.m = m
1183 this.mp = m.invDigit()
1184 this.mpl = this.mp & 0x7fff
1185 this.mph = this.mp >> 15
1186 this.um = (1 << (m.DB - 15)) - 1
1187 this.mt2 = 2 * m.t
1188 }
1189
1190 // xR mod m
1191 function montConvert(x) {
1192 var r = new BigInteger()
1193 x.abs()
1194 .dlShiftTo(this.m.t, r)
1195 r.divRemTo(this.m, null, r)
1196 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1197 return r
1198 }
1199
1200 // x/R mod m
1201 function montRevert(x) {
1202 var r = new BigInteger()
1203 x.copyTo(r)
1204 this.reduce(r)
1205 return r
1206 }
1207
1208 // x = x/R mod m (HAC 14.32)
1209 function montReduce(x) {
1210 while (x.t <= this.mt2) // pad x so am has enough room later
1211 x[x.t++] = 0
1212 for (var i = 0; i < this.m.t; ++i) {
1213 // faster way of calculating u0 = x[i]*mp mod DV
1214 var j = x[i] & 0x7fff
1215 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1216 // use am to combine the multiply-shift-add into one call
1217 j = i + this.m.t
1218 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1219 // propagate carry
1220 while (x[j] >= x.DV) {
1221 x[j] -= x.DV
1222 x[++j]++
1223 }
1224 }
1225 x.clamp()
1226 x.drShiftTo(this.m.t, x)
1227 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1228 }
1229
1230 // r = "x^2/R mod m"; x != r
1231 function montSqrTo(x, r) {
1232 x.squareTo(r)
1233 this.reduce(r)
1234 }
1235
1236 // r = "xy/R mod m"; x,y != r
1237 function montMulTo(x, y, r) {
1238 x.multiplyTo(y, r)
1239 this.reduce(r)
1240 }
1241
1242 Montgomery.prototype.convert = montConvert
1243 Montgomery.prototype.revert = montRevert
1244 Montgomery.prototype.reduce = montReduce
1245 Montgomery.prototype.mulTo = montMulTo
1246 Montgomery.prototype.sqrTo = montSqrTo
1247
1248 // (protected) true iff this is even
1249 function bnpIsEven() {
1250 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1251 }
1252
1253 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1254 function bnpExp(e, z) {
1255 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1256 var r = new BigInteger(),
1257 r2 = new BigInteger(),
1258 g = z.convert(this),
1259 i = nbits(e) - 1
1260 g.copyTo(r)
1261 while (--i >= 0) {
1262 z.sqrTo(r, r2)
1263 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1264 else {
1265 var t = r
1266 r = r2
1267 r2 = t
1268 }
1269 }
1270 return z.revert(r)
1271 }
1272
1273 // (public) this^e % m, 0 <= e < 2^32
1274 function bnModPowInt(e, m) {
1275 var z
1276 if (e < 256 || m.isEven()) z = new Classic(m)
1277 else z = new Montgomery(m)
1278 return this.exp(e, z)
1279 }
1280
1281 // protected
1282 proto.copyTo = bnpCopyTo
1283 proto.fromInt = bnpFromInt
1284 proto.fromString = bnpFromString
1285 proto.clamp = bnpClamp
1286 proto.dlShiftTo = bnpDLShiftTo
1287 proto.drShiftTo = bnpDRShiftTo
1288 proto.lShiftTo = bnpLShiftTo
1289 proto.rShiftTo = bnpRShiftTo
1290 proto.subTo = bnpSubTo
1291 proto.multiplyTo = bnpMultiplyTo
1292 proto.squareTo = bnpSquareTo
1293 proto.divRemTo = bnpDivRemTo
1294 proto.invDigit = bnpInvDigit
1295 proto.isEven = bnpIsEven
1296 proto.exp = bnpExp
1297
1298 // public
1299 proto.toString = bnToString
1300 proto.negate = bnNegate
1301 proto.abs = bnAbs
1302 proto.compareTo = bnCompareTo
1303 proto.bitLength = bnBitLength
1304 proto.byteLength = bnByteLength
1305 proto.mod = bnMod
1306 proto.modPowInt = bnModPowInt
1307
1308 // (public)
1309 function bnClone() {
1310 var r = new BigInteger()
1311 this.copyTo(r)
1312 return r
1313 }
1314
1315 // (public) return value as integer
1316 function bnIntValue() {
1317 if (this.s < 0) {
1318 if (this.t == 1) return this[0] - this.DV
1319 else if (this.t == 0) return -1
1320 } else if (this.t == 1) return this[0]
1321 else if (this.t == 0) return 0
1322 // assumes 16 < DB < 32
1323 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1324 }
1325
1326 // (public) return value as byte
1327 function bnByteValue() {
1328 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1329 }
1330
1331 // (public) return value as short (assumes DB>=16)
1332 function bnShortValue() {
1333 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1334 }
1335
1336 // (protected) return x s.t. r^x < DV
1337 function bnpChunkSize(r) {
1338 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1339 }
1340
1341 // (public) 0 if this == 0, 1 if this > 0
1342 function bnSigNum() {
1343 if (this.s < 0) return -1
1344 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1345 else return 1
1346 }
1347
1348 // (protected) convert to radix string
1349 function bnpToRadix(b) {
1350 if (b == null) b = 10
1351 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1352 var cs = this.chunkSize(b)
1353 var a = Math.pow(b, cs)
1354 var d = nbv(a),
1355 y = new BigInteger(),
1356 z = new BigInteger(),
1357 r = ""
1358 this.divRemTo(d, y, z)
1359 while (y.signum() > 0) {
1360 r = (a + z.intValue())
1361 .toString(b)
1362 .substr(1) + r
1363 y.divRemTo(d, y, z)
1364 }
1365 return z.intValue()
1366 .toString(b) + r
1367 }
1368
1369 // (protected) convert from radix string
1370 function bnpFromRadix(s, b) {
1371 var self = this
1372 self.fromInt(0)
1373 if (b == null) b = 10
1374 var cs = self.chunkSize(b)
1375 var d = Math.pow(b, cs),
1376 mi = false,
1377 j = 0,
1378 w = 0
1379 for (var i = 0; i < s.length; ++i) {
1380 var x = intAt(s, i)
1381 if (x < 0) {
1382 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1383 continue
1384 }
1385 w = b * w + x
1386 if (++j >= cs) {
1387 self.dMultiply(d)
1388 self.dAddOffset(w, 0)
1389 j = 0
1390 w = 0
1391 }
1392 }
1393 if (j > 0) {
1394 self.dMultiply(Math.pow(b, j))
1395 self.dAddOffset(w, 0)
1396 }
1397 if (mi) BigInteger.ZERO.subTo(self, self)
1398 }
1399
1400 // (protected) alternate constructor
1401 function bnpFromNumber(a, b, c) {
1402 var self = this
1403 if ("number" == typeof b) {
1404 // new BigInteger(int,int,RNG)
1405 if (a < 2) self.fromInt(1)
1406 else {
1407 self.fromNumber(a, c)
1408 if (!self.testBit(a - 1)) // force MSB set
1409 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1410 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1411 while (!self.isProbablePrime(b)) {
1412 self.dAddOffset(2, 0)
1413 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1414 }
1415 }
1416 } else {
1417 // new BigInteger(int,RNG)
1418 var x = new Array(),
1419 t = a & 7
1420 x.length = (a >> 3) + 1
1421 b.nextBytes(x)
1422 if (t > 0) x[0] &= ((1 << t) - 1)
1423 else x[0] = 0
1424 self.fromString(x, 256)
1425 }
1426 }
1427
1428 // (public) convert to bigendian byte array
1429 function bnToByteArray() {
1430 var self = this
1431 var i = self.t,
1432 r = new Array()
1433 r[0] = self.s
1434 var p = self.DB - (i * self.DB) % 8,
1435 d, k = 0
1436 if (i-- > 0) {
1437 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1438 r[k++] = d | (self.s << (self.DB - p))
1439 while (i >= 0) {
1440 if (p < 8) {
1441 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1442 d |= self[--i] >> (p += self.DB - 8)
1443 } else {
1444 d = (self[i] >> (p -= 8)) & 0xff
1445 if (p <= 0) {
1446 p += self.DB
1447 --i
1448 }
1449 }
1450 if ((d & 0x80) != 0) d |= -256
1451 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1452 if (k > 0 || d != self.s) r[k++] = d
1453 }
1454 }
1455 return r
1456 }
1457
1458 function bnEquals(a) {
1459 return (this.compareTo(a) == 0)
1460 }
1461
1462 function bnMin(a) {
1463 return (this.compareTo(a) < 0) ? this : a
1464 }
1465
1466 function bnMax(a) {
1467 return (this.compareTo(a) > 0) ? this : a
1468 }
1469
1470 // (protected) r = this op a (bitwise)
1471 function bnpBitwiseTo(a, op, r) {
1472 var self = this
1473 var i, f, m = Math.min(a.t, self.t)
1474 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1475 if (a.t < self.t) {
1476 f = a.s & self.DM
1477 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1478 r.t = self.t
1479 } else {
1480 f = self.s & self.DM
1481 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1482 r.t = a.t
1483 }
1484 r.s = op(self.s, a.s)
1485 r.clamp()
1486 }
1487
1488 // (public) this & a
1489 function op_and(x, y) {
1490 return x & y
1491 }
1492
1493 function bnAnd(a) {
1494 var r = new BigInteger()
1495 this.bitwiseTo(a, op_and, r)
1496 return r
1497 }
1498
1499 // (public) this | a
1500 function op_or(x, y) {
1501 return x | y
1502 }
1503
1504 function bnOr(a) {
1505 var r = new BigInteger()
1506 this.bitwiseTo(a, op_or, r)
1507 return r
1508 }
1509
1510 // (public) this ^ a
1511 function op_xor(x, y) {
1512 return x ^ y
1513 }
1514
1515 function bnXor(a) {
1516 var r = new BigInteger()
1517 this.bitwiseTo(a, op_xor, r)
1518 return r
1519 }
1520
1521 // (public) this & ~a
1522 function op_andnot(x, y) {
1523 return x & ~y
1524 }
1525
1526 function bnAndNot(a) {
1527 var r = new BigInteger()
1528 this.bitwiseTo(a, op_andnot, r)
1529 return r
1530 }
1531
1532 // (public) ~this
1533 function bnNot() {
1534 var r = new BigInteger()
1535 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1536 r.t = this.t
1537 r.s = ~this.s
1538 return r
1539 }
1540
1541 // (public) this << n
1542 function bnShiftLeft(n) {
1543 var r = new BigInteger()
1544 if (n < 0) this.rShiftTo(-n, r)
1545 else this.lShiftTo(n, r)
1546 return r
1547 }
1548
1549 // (public) this >> n
1550 function bnShiftRight(n) {
1551 var r = new BigInteger()
1552 if (n < 0) this.lShiftTo(-n, r)
1553 else this.rShiftTo(n, r)
1554 return r
1555 }
1556
1557 // return index of lowest 1-bit in x, x < 2^31
1558 function lbit(x) {
1559 if (x == 0) return -1
1560 var r = 0
1561 if ((x & 0xffff) == 0) {
1562 x >>= 16
1563 r += 16
1564 }
1565 if ((x & 0xff) == 0) {
1566 x >>= 8
1567 r += 8
1568 }
1569 if ((x & 0xf) == 0) {
1570 x >>= 4
1571 r += 4
1572 }
1573 if ((x & 3) == 0) {
1574 x >>= 2
1575 r += 2
1576 }
1577 if ((x & 1) == 0)++r
1578 return r
1579 }
1580
1581 // (public) returns index of lowest 1-bit (or -1 if none)
1582 function bnGetLowestSetBit() {
1583 for (var i = 0; i < this.t; ++i)
1584 if (this[i] != 0) return i * this.DB + lbit(this[i])
1585 if (this.s < 0) return this.t * this.DB
1586 return -1
1587 }
1588
1589 // return number of 1 bits in x
1590 function cbit(x) {
1591 var r = 0
1592 while (x != 0) {
1593 x &= x - 1
1594 ++r
1595 }
1596 return r
1597 }
1598
1599 // (public) return number of set bits
1600 function bnBitCount() {
1601 var r = 0,
1602 x = this.s & this.DM
1603 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1604 return r
1605 }
1606
1607 // (public) true iff nth bit is set
1608 function bnTestBit(n) {
1609 var j = Math.floor(n / this.DB)
1610 if (j >= this.t) return (this.s != 0)
1611 return ((this[j] & (1 << (n % this.DB))) != 0)
1612 }
1613
1614 // (protected) this op (1<<n)
1615 function bnpChangeBit(n, op) {
1616 var r = BigInteger.ONE.shiftLeft(n)
1617 this.bitwiseTo(r, op, r)
1618 return r
1619 }
1620
1621 // (public) this | (1<<n)
1622 function bnSetBit(n) {
1623 return this.changeBit(n, op_or)
1624 }
1625
1626 // (public) this & ~(1<<n)
1627 function bnClearBit(n) {
1628 return this.changeBit(n, op_andnot)
1629 }
1630
1631 // (public) this ^ (1<<n)
1632 function bnFlipBit(n) {
1633 return this.changeBit(n, op_xor)
1634 }
1635
1636 // (protected) r = this + a
1637 function bnpAddTo(a, r) {
1638 var self = this
1639
1640 var i = 0,
1641 c = 0,
1642 m = Math.min(a.t, self.t)
1643 while (i < m) {
1644 c += self[i] + a[i]
1645 r[i++] = c & self.DM
1646 c >>= self.DB
1647 }
1648 if (a.t < self.t) {
1649 c += a.s
1650 while (i < self.t) {
1651 c += self[i]
1652 r[i++] = c & self.DM
1653 c >>= self.DB
1654 }
1655 c += self.s
1656 } else {
1657 c += self.s
1658 while (i < a.t) {
1659 c += a[i]
1660 r[i++] = c & self.DM
1661 c >>= self.DB
1662 }
1663 c += a.s
1664 }
1665 r.s = (c < 0) ? -1 : 0
1666 if (c > 0) r[i++] = c
1667 else if (c < -1) r[i++] = self.DV + c
1668 r.t = i
1669 r.clamp()
1670 }
1671
1672 // (public) this + a
1673 function bnAdd(a) {
1674 var r = new BigInteger()
1675 this.addTo(a, r)
1676 return r
1677 }
1678
1679 // (public) this - a
1680 function bnSubtract(a) {
1681 var r = new BigInteger()
1682 this.subTo(a, r)
1683 return r
1684 }
1685
1686 // (public) this * a
1687 function bnMultiply(a) {
1688 var r = new BigInteger()
1689 this.multiplyTo(a, r)
1690 return r
1691 }
1692
1693 // (public) this^2
1694 function bnSquare() {
1695 var r = new BigInteger()
1696 this.squareTo(r)
1697 return r
1698 }
1699
1700 // (public) this / a
1701 function bnDivide(a) {
1702 var r = new BigInteger()
1703 this.divRemTo(a, r, null)
1704 return r
1705 }
1706
1707 // (public) this % a
1708 function bnRemainder(a) {
1709 var r = new BigInteger()
1710 this.divRemTo(a, null, r)
1711 return r
1712 }
1713
1714 // (public) [this/a,this%a]
1715 function bnDivideAndRemainder(a) {
1716 var q = new BigInteger(),
1717 r = new BigInteger()
1718 this.divRemTo(a, q, r)
1719 return new Array(q, r)
1720 }
1721
1722 // (protected) this *= n, this >= 0, 1 < n < DV
1723 function bnpDMultiply(n) {
1724 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1725 ++this.t
1726 this.clamp()
1727 }
1728
1729 // (protected) this += n << w words, this >= 0
1730 function bnpDAddOffset(n, w) {
1731 if (n == 0) return
1732 while (this.t <= w) this[this.t++] = 0
1733 this[w] += n
1734 while (this[w] >= this.DV) {
1735 this[w] -= this.DV
1736 if (++w >= this.t) this[this.t++] = 0
1737 ++this[w]
1738 }
1739 }
1740
1741 // A "null" reducer
1742 function NullExp() {}
1743
1744 function nNop(x) {
1745 return x
1746 }
1747
1748 function nMulTo(x, y, r) {
1749 x.multiplyTo(y, r)
1750 }
1751
1752 function nSqrTo(x, r) {
1753 x.squareTo(r)
1754 }
1755
1756 NullExp.prototype.convert = nNop
1757 NullExp.prototype.revert = nNop
1758 NullExp.prototype.mulTo = nMulTo
1759 NullExp.prototype.sqrTo = nSqrTo
1760
1761 // (public) this^e
1762 function bnPow(e) {
1763 return this.exp(e, new NullExp())
1764 }
1765
1766 // (protected) r = lower n words of "this * a", a.t <= n
1767 // "this" should be the larger one if appropriate.
1768 function bnpMultiplyLowerTo(a, n, r) {
1769 var i = Math.min(this.t + a.t, n)
1770 r.s = 0; // assumes a,this >= 0
1771 r.t = i
1772 while (i > 0) r[--i] = 0
1773 var j
1774 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1775 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1776 r.clamp()
1777 }
1778
1779 // (protected) r = "this * a" without lower n words, n > 0
1780 // "this" should be the larger one if appropriate.
1781 function bnpMultiplyUpperTo(a, n, r) {
1782 --n
1783 var i = r.t = this.t + a.t - n
1784 r.s = 0; // assumes a,this >= 0
1785 while (--i >= 0) r[i] = 0
1786 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1787 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1788 r.clamp()
1789 r.drShiftTo(1, r)
1790 }
1791
1792 // Barrett modular reduction
1793 function Barrett(m) {
1794 // setup Barrett
1795 this.r2 = new BigInteger()
1796 this.q3 = new BigInteger()
1797 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1798 this.mu = this.r2.divide(m)
1799 this.m = m
1800 }
1801
1802 function barrettConvert(x) {
1803 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1804 else if (x.compareTo(this.m) < 0) return x
1805 else {
1806 var r = new BigInteger()
1807 x.copyTo(r)
1808 this.reduce(r)
1809 return r
1810 }
1811 }
1812
1813 function barrettRevert(x) {
1814 return x
1815 }
1816
1817 // x = x mod m (HAC 14.42)
1818 function barrettReduce(x) {
1819 var self = this
1820 x.drShiftTo(self.m.t - 1, self.r2)
1821 if (x.t > self.m.t + 1) {
1822 x.t = self.m.t + 1
1823 x.clamp()
1824 }
1825 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1826 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1827 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1828 x.subTo(self.r2, x)
1829 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1830 }
1831
1832 // r = x^2 mod m; x != r
1833 function barrettSqrTo(x, r) {
1834 x.squareTo(r)
1835 this.reduce(r)
1836 }
1837
1838 // r = x*y mod m; x,y != r
1839 function barrettMulTo(x, y, r) {
1840 x.multiplyTo(y, r)
1841 this.reduce(r)
1842 }
1843
1844 Barrett.prototype.convert = barrettConvert
1845 Barrett.prototype.revert = barrettRevert
1846 Barrett.prototype.reduce = barrettReduce
1847 Barrett.prototype.mulTo = barrettMulTo
1848 Barrett.prototype.sqrTo = barrettSqrTo
1849
1850 // (public) this^e % m (HAC 14.85)
1851 function bnModPow(e, m) {
1852 var i = e.bitLength(),
1853 k, r = nbv(1),
1854 z
1855 if (i <= 0) return r
1856 else if (i < 18) k = 1
1857 else if (i < 48) k = 3
1858 else if (i < 144) k = 4
1859 else if (i < 768) k = 5
1860 else k = 6
1861 if (i < 8)
1862 z = new Classic(m)
1863 else if (m.isEven())
1864 z = new Barrett(m)
1865 else
1866 z = new Montgomery(m)
1867
1868 // precomputation
1869 var g = new Array(),
1870 n = 3,
1871 k1 = k - 1,
1872 km = (1 << k) - 1
1873 g[1] = z.convert(this)
1874 if (k > 1) {
1875 var g2 = new BigInteger()
1876 z.sqrTo(g[1], g2)
1877 while (n <= km) {
1878 g[n] = new BigInteger()
1879 z.mulTo(g2, g[n - 2], g[n])
1880 n += 2
1881 }
1882 }
1883
1884 var j = e.t - 1,
1885 w, is1 = true,
1886 r2 = new BigInteger(),
1887 t
1888 i = nbits(e[j]) - 1
1889 while (j >= 0) {
1890 if (i >= k1) w = (e[j] >> (i - k1)) & km
1891 else {
1892 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1893 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1894 }
1895
1896 n = k
1897 while ((w & 1) == 0) {
1898 w >>= 1
1899 --n
1900 }
1901 if ((i -= n) < 0) {
1902 i += this.DB
1903 --j
1904 }
1905 if (is1) { // ret == 1, don't bother squaring or multiplying it
1906 g[w].copyTo(r)
1907 is1 = false
1908 } else {
1909 while (n > 1) {
1910 z.sqrTo(r, r2)
1911 z.sqrTo(r2, r)
1912 n -= 2
1913 }
1914 if (n > 0) z.sqrTo(r, r2)
1915 else {
1916 t = r
1917 r = r2
1918 r2 = t
1919 }
1920 z.mulTo(r2, g[w], r)
1921 }
1922
1923 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1924 z.sqrTo(r, r2)
1925 t = r
1926 r = r2
1927 r2 = t
1928 if (--i < 0) {
1929 i = this.DB - 1
1930 --j
1931 }
1932 }
1933 }
1934 return z.revert(r)
1935 }
1936
1937 // (public) gcd(this,a) (HAC 14.54)
1938 function bnGCD(a) {
1939 var x = (this.s < 0) ? this.negate() : this.clone()
1940 var y = (a.s < 0) ? a.negate() : a.clone()
1941 if (x.compareTo(y) < 0) {
1942 var t = x
1943 x = y
1944 y = t
1945 }
1946 var i = x.getLowestSetBit(),
1947 g = y.getLowestSetBit()
1948 if (g < 0) return x
1949 if (i < g) g = i
1950 if (g > 0) {
1951 x.rShiftTo(g, x)
1952 y.rShiftTo(g, y)
1953 }
1954 while (x.signum() > 0) {
1955 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1956 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1957 if (x.compareTo(y) >= 0) {
1958 x.subTo(y, x)
1959 x.rShiftTo(1, x)
1960 } else {
1961 y.subTo(x, y)
1962 y.rShiftTo(1, y)
1963 }
1964 }
1965 if (g > 0) y.lShiftTo(g, y)
1966 return y
1967 }
1968
1969 // (protected) this % n, n < 2^26
1970 function bnpModInt(n) {
1971 if (n <= 0) return 0
1972 var d = this.DV % n,
1973 r = (this.s < 0) ? n - 1 : 0
1974 if (this.t > 0)
1975 if (d == 0) r = this[0] % n
1976 else
1977 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1978 return r
1979 }
1980
1981 // (public) 1/this % m (HAC 14.61)
1982 function bnModInverse(m) {
1983 var ac = m.isEven()
1984 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1985 var u = m.clone(),
1986 v = this.clone()
1987 var a = nbv(1),
1988 b = nbv(0),
1989 c = nbv(0),
1990 d = nbv(1)
1991 while (u.signum() != 0) {
1992 while (u.isEven()) {
1993 u.rShiftTo(1, u)
1994 if (ac) {
1995 if (!a.isEven() || !b.isEven()) {
1996 a.addTo(this, a)
1997 b.subTo(m, b)
1998 }
1999 a.rShiftTo(1, a)
2000 } else if (!b.isEven()) b.subTo(m, b)
2001 b.rShiftTo(1, b)
2002 }
2003 while (v.isEven()) {
2004 v.rShiftTo(1, v)
2005 if (ac) {
2006 if (!c.isEven() || !d.isEven()) {
2007 c.addTo(this, c)
2008 d.subTo(m, d)
2009 }
2010 c.rShiftTo(1, c)
2011 } else if (!d.isEven()) d.subTo(m, d)
2012 d.rShiftTo(1, d)
2013 }
2014 if (u.compareTo(v) >= 0) {
2015 u.subTo(v, u)
2016 if (ac) a.subTo(c, a)
2017 b.subTo(d, b)
2018 } else {
2019 v.subTo(u, v)
2020 if (ac) c.subTo(a, c)
2021 d.subTo(b, d)
2022 }
2023 }
2024 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2025 if (d.compareTo(m) >= 0) return d.subtract(m)
2026 if (d.signum() < 0) d.addTo(m, d)
2027 else return d
2028 if (d.signum() < 0) return d.add(m)
2029 else return d
2030 }
2031
2032 var lowprimes = [
2033 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2034 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2035 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2036 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2037 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2038 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2039 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2040 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2041 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2042 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2043 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2044 ]
2045
2046 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2047
2048 // (public) test primality with certainty >= 1-.5^t
2049 function bnIsProbablePrime(t) {
2050 var i, x = this.abs()
2051 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2052 for (i = 0; i < lowprimes.length; ++i)
2053 if (x[0] == lowprimes[i]) return true
2054 return false
2055 }
2056 if (x.isEven()) return false
2057 i = 1
2058 while (i < lowprimes.length) {
2059 var m = lowprimes[i],
2060 j = i + 1
2061 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2062 m = x.modInt(m)
2063 while (i < j) if (m % lowprimes[i++] == 0) return false
2064 }
2065 return x.millerRabin(t)
2066 }
2067
2068 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2069 function bnpMillerRabin(t) {
2070 var n1 = this.subtract(BigInteger.ONE)
2071 var k = n1.getLowestSetBit()
2072 if (k <= 0) return false
2073 var r = n1.shiftRight(k)
2074 t = (t + 1) >> 1
2075 if (t > lowprimes.length) t = lowprimes.length
2076 var a = new BigInteger(null)
2077 var j, bases = []
2078 for (var i = 0; i < t; ++i) {
2079 for (;;) {
2080 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2081 if (bases.indexOf(j) == -1) break
2082 }
2083 bases.push(j)
2084 a.fromInt(j)
2085 var y = a.modPow(r, this)
2086 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2087 var j = 1
2088 while (j++ < k && y.compareTo(n1) != 0) {
2089 y = y.modPowInt(2, this)
2090 if (y.compareTo(BigInteger.ONE) == 0) return false
2091 }
2092 if (y.compareTo(n1) != 0) return false
2093 }
2094 }
2095 return true
2096 }
2097
2098 // protected
2099 proto.chunkSize = bnpChunkSize
2100 proto.toRadix = bnpToRadix
2101 proto.fromRadix = bnpFromRadix
2102 proto.fromNumber = bnpFromNumber
2103 proto.bitwiseTo = bnpBitwiseTo
2104 proto.changeBit = bnpChangeBit
2105 proto.addTo = bnpAddTo
2106 proto.dMultiply = bnpDMultiply
2107 proto.dAddOffset = bnpDAddOffset
2108 proto.multiplyLowerTo = bnpMultiplyLowerTo
2109 proto.multiplyUpperTo = bnpMultiplyUpperTo
2110 proto.modInt = bnpModInt
2111 proto.millerRabin = bnpMillerRabin
2112
2113 // public
2114 proto.clone = bnClone
2115 proto.intValue = bnIntValue
2116 proto.byteValue = bnByteValue
2117 proto.shortValue = bnShortValue
2118 proto.signum = bnSigNum
2119 proto.toByteArray = bnToByteArray
2120 proto.equals = bnEquals
2121 proto.min = bnMin
2122 proto.max = bnMax
2123 proto.and = bnAnd
2124 proto.or = bnOr
2125 proto.xor = bnXor
2126 proto.andNot = bnAndNot
2127 proto.not = bnNot
2128 proto.shiftLeft = bnShiftLeft
2129 proto.shiftRight = bnShiftRight
2130 proto.getLowestSetBit = bnGetLowestSetBit
2131 proto.bitCount = bnBitCount
2132 proto.testBit = bnTestBit
2133 proto.setBit = bnSetBit
2134 proto.clearBit = bnClearBit
2135 proto.flipBit = bnFlipBit
2136 proto.add = bnAdd
2137 proto.subtract = bnSubtract
2138 proto.multiply = bnMultiply
2139 proto.divide = bnDivide
2140 proto.remainder = bnRemainder
2141 proto.divideAndRemainder = bnDivideAndRemainder
2142 proto.modPow = bnModPow
2143 proto.modInverse = bnModInverse
2144 proto.pow = bnPow
2145 proto.gcd = bnGCD
2146 proto.isProbablePrime = bnIsProbablePrime
2147
2148 // JSBN-specific extension
2149 proto.square = bnSquare
2150
2151 // constants
2152 BigInteger.ZERO = nbv(0)
2153 BigInteger.ONE = nbv(1)
2154 BigInteger.valueOf = nbv
2155
2156 module.exports = BigInteger
2157
2158 },{"../package.json":4}],2:[function(require,module,exports){
2159 (function (Buffer){
2160 // FIXME: Kind of a weird way to throw exceptions, consider removing
2161 var assert = require('assert')
2162 var BigInteger = require('./bigi')
2163
2164 /**
2165 * Turns a byte array into a big integer.
2166 *
2167 * This function will interpret a byte array as a big integer in big
2168 * endian notation.
2169 */
2170 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2171 // BigInteger expects a DER integer conformant byte array
2172 if (byteArray[0] & 0x80) {
2173 return new BigInteger([0].concat(byteArray))
2174 }
2175
2176 return new BigInteger(byteArray)
2177 }
2178
2179 /**
2180 * Returns a byte array representation of the big integer.
2181 *
2182 * This returns the absolute of the contained value in big endian
2183 * form. A value of zero results in an empty array.
2184 */
2185 BigInteger.prototype.toByteArrayUnsigned = function() {
2186 var byteArray = this.toByteArray()
2187 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2188 }
2189
2190 BigInteger.fromDERInteger = function(byteArray) {
2191 return new BigInteger(byteArray)
2192 }
2193
2194 /*
2195 * Converts BigInteger to a DER integer representation.
2196 *
2197 * The format for this value uses the most significant bit as a sign
2198 * bit. If the most significant bit is already set and the integer is
2199 * positive, a 0x00 is prepended.
2200 *
2201 * Examples:
2202 *
2203 * 0 => 0x00
2204 * 1 => 0x01
2205 * -1 => 0xff
2206 * 127 => 0x7f
2207 * -127 => 0x81
2208 * 128 => 0x0080
2209 * -128 => 0x80
2210 * 255 => 0x00ff
2211 * -255 => 0xff01
2212 * 16300 => 0x3fac
2213 * -16300 => 0xc054
2214 * 62300 => 0x00f35c
2215 * -62300 => 0xff0ca4
2216 */
2217 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2218
2219 BigInteger.fromBuffer = function(buffer) {
2220 // BigInteger expects a DER integer conformant byte array
2221 if (buffer[0] & 0x80) {
2222 var byteArray = Array.prototype.slice.call(buffer)
2223
2224 return new BigInteger([0].concat(byteArray))
2225 }
2226
2227 return new BigInteger(buffer)
2228 }
2229
2230 BigInteger.fromHex = function(hex) {
2231 if (hex === '') return BigInteger.ZERO
2232
2233 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2234 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2235 return new BigInteger(hex, 16)
2236 }
2237
2238 BigInteger.prototype.toBuffer = function(size) {
2239 var byteArray = this.toByteArrayUnsigned()
2240 var zeros = []
2241
2242 var padding = size - byteArray.length
2243 while (zeros.length < padding) zeros.push(0)
2244
2245 return new Buffer(zeros.concat(byteArray))
2246 }
2247
2248 BigInteger.prototype.toHex = function(size) {
2249 return this.toBuffer(size).toString('hex')
2250 }
2251
2252 }).call(this,require("buffer").Buffer)
2253 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2254 var BigInteger = require('./bigi')
2255
2256 //addons
2257 require('./convert')
2258
2259 module.exports = BigInteger
2260 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2261 module.exports={
2262 "name": "bigi",
2263 "version": "1.4.0",
2264 "description": "Big integers.",
2265 "keywords": [
2266 "cryptography",
2267 "math",
2268 "bitcoin",
2269 "arbitrary",
2270 "precision",
2271 "arithmetic",
2272 "big",
2273 "integer",
2274 "int",
2275 "number",
2276 "biginteger",
2277 "bigint",
2278 "bignumber",
2279 "decimal",
2280 "float"
2281 ],
2282 "devDependencies": {
2283 "mocha": "^1.20.1",
2284 "jshint": "^2.5.1",
2285 "coveralls": "^2.10.0",
2286 "istanbul": "^0.2.11"
2287 },
2288 "repository": {
2289 "url": "https://github.com/cryptocoinjs/bigi",
2290 "type": "git"
2291 },
2292 "main": "./lib/index.js",
2293 "scripts": {
2294 "test": "_mocha -- test/*.js",
2295 "jshint": "jshint --config jshint.json lib/*.js ; true",
2296 "unit": "mocha",
2297 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2298 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2299 },
2300 "dependencies": {},
2301 "testling": {
2302 "files": "test/*.js",
2303 "harness": "mocha",
2304 "browsers": [
2305 "ie/9..latest",
2306 "firefox/latest",
2307 "chrome/latest",
2308 "safari/6.0..latest",
2309 "iphone/6.0..latest",
2310 "android-browser/4.2..latest"
2311 ]
2312 },
2313 "bugs": {
2314 "url": "https://github.com/cryptocoinjs/bigi/issues"
2315 },
2316 "homepage": "https://github.com/cryptocoinjs/bigi",
2317 "_id": "bigi@1.4.0",
2318 "dist": {
2319 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2320 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2321 },
2322 "_from": "bigi@^1.4.0",
2323 "_npmVersion": "1.4.3",
2324 "_npmUser": {
2325 "name": "jp",
2326 "email": "jprichardson@gmail.com"
2327 },
2328 "maintainers": [
2329 {
2330 "name": "jp",
2331 "email": "jprichardson@gmail.com"
2332 },
2333 {
2334 "name": "midnightlightning",
2335 "email": "boydb@midnightdesign.ws"
2336 },
2337 {
2338 "name": "sidazhang",
2339 "email": "sidazhang89@gmail.com"
2340 },
2341 {
2342 "name": "nadav",
2343 "email": "npm@shesek.info"
2344 }
2345 ],
2346 "directories": {},
2347 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2348 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2349 }
2350
2351 },{}],5:[function(require,module,exports){
2352 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2353 //
2354 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2355 //
2356 // Originally from narwhal.js (http://narwhaljs.org)
2357 // Copyright (c) 2009 Thomas Robinson <280north.com>
2358 //
2359 // Permission is hereby granted, free of charge, to any person obtaining a copy
2360 // of this software and associated documentation files (the 'Software'), to
2361 // deal in the Software without restriction, including without limitation the
2362 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2363 // sell copies of the Software, and to permit persons to whom the Software is
2364 // furnished to do so, subject to the following conditions:
2365 //
2366 // The above copyright notice and this permission notice shall be included in
2367 // all copies or substantial portions of the Software.
2368 //
2369 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2370 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2371 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2372 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2373 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2374 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2375
2376 // when used in node, this will actually load the util module we depend on
2377 // versus loading the builtin util module as happens otherwise
2378 // this is a bug in node module loading as far as I am concerned
2379 var util = require('util/');
2380
2381 var pSlice = Array.prototype.slice;
2382 var hasOwn = Object.prototype.hasOwnProperty;
2383
2384 // 1. The assert module provides functions that throw
2385 // AssertionError's when particular conditions are not met. The
2386 // assert module must conform to the following interface.
2387
2388 var assert = module.exports = ok;
2389
2390 // 2. The AssertionError is defined in assert.
2391 // new assert.AssertionError({ message: message,
2392 // actual: actual,
2393 // expected: expected })
2394
2395 assert.AssertionError = function AssertionError(options) {
2396 this.name = 'AssertionError';
2397 this.actual = options.actual;
2398 this.expected = options.expected;
2399 this.operator = options.operator;
2400 if (options.message) {
2401 this.message = options.message;
2402 this.generatedMessage = false;
2403 } else {
2404 this.message = getMessage(this);
2405 this.generatedMessage = true;
2406 }
2407 var stackStartFunction = options.stackStartFunction || fail;
2408
2409 if (Error.captureStackTrace) {
2410 Error.captureStackTrace(this, stackStartFunction);
2411 }
2412 else {
2413 // non v8 browsers so we can have a stacktrace
2414 var err = new Error();
2415 if (err.stack) {
2416 var out = err.stack;
2417
2418 // try to strip useless frames
2419 var fn_name = stackStartFunction.name;
2420 var idx = out.indexOf('\n' + fn_name);
2421 if (idx >= 0) {
2422 // once we have located the function frame
2423 // we need to strip out everything before it (and its line)
2424 var next_line = out.indexOf('\n', idx + 1);
2425 out = out.substring(next_line + 1);
2426 }
2427
2428 this.stack = out;
2429 }
2430 }
2431 };
2432
2433 // assert.AssertionError instanceof Error
2434 util.inherits(assert.AssertionError, Error);
2435
2436 function replacer(key, value) {
2437 if (util.isUndefined(value)) {
2438 return '' + value;
2439 }
2440 if (util.isNumber(value) && !isFinite(value)) {
2441 return value.toString();
2442 }
2443 if (util.isFunction(value) || util.isRegExp(value)) {
2444 return value.toString();
2445 }
2446 return value;
2447 }
2448
2449 function truncate(s, n) {
2450 if (util.isString(s)) {
2451 return s.length < n ? s : s.slice(0, n);
2452 } else {
2453 return s;
2454 }
2455 }
2456
2457 function getMessage(self) {
2458 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2459 self.operator + ' ' +
2460 truncate(JSON.stringify(self.expected, replacer), 128);
2461 }
2462
2463 // At present only the three keys mentioned above are used and
2464 // understood by the spec. Implementations or sub modules can pass
2465 // other keys to the AssertionError's constructor - they will be
2466 // ignored.
2467
2468 // 3. All of the following functions must throw an AssertionError
2469 // when a corresponding condition is not met, with a message that
2470 // may be undefined if not provided. All assertion methods provide
2471 // both the actual and expected values to the assertion error for
2472 // display purposes.
2473
2474 function fail(actual, expected, message, operator, stackStartFunction) {
2475 throw new assert.AssertionError({
2476 message: message,
2477 actual: actual,
2478 expected: expected,
2479 operator: operator,
2480 stackStartFunction: stackStartFunction
2481 });
2482 }
2483
2484 // EXTENSION! allows for well behaved errors defined elsewhere.
2485 assert.fail = fail;
2486
2487 // 4. Pure assertion tests whether a value is truthy, as determined
2488 // by !!guard.
2489 // assert.ok(guard, message_opt);
2490 // This statement is equivalent to assert.equal(true, !!guard,
2491 // message_opt);. To test strictly for the value true, use
2492 // assert.strictEqual(true, guard, message_opt);.
2493
2494 function ok(value, message) {
2495 if (!value) fail(value, true, message, '==', assert.ok);
2496 }
2497 assert.ok = ok;
2498
2499 // 5. The equality assertion tests shallow, coercive equality with
2500 // ==.
2501 // assert.equal(actual, expected, message_opt);
2502
2503 assert.equal = function equal(actual, expected, message) {
2504 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2505 };
2506
2507 // 6. The non-equality assertion tests for whether two objects are not equal
2508 // with != assert.notEqual(actual, expected, message_opt);
2509
2510 assert.notEqual = function notEqual(actual, expected, message) {
2511 if (actual == expected) {
2512 fail(actual, expected, message, '!=', assert.notEqual);
2513 }
2514 };
2515
2516 // 7. The equivalence assertion tests a deep equality relation.
2517 // assert.deepEqual(actual, expected, message_opt);
2518
2519 assert.deepEqual = function deepEqual(actual, expected, message) {
2520 if (!_deepEqual(actual, expected)) {
2521 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2522 }
2523 };
2524
2525 function _deepEqual(actual, expected) {
2526 // 7.1. All identical values are equivalent, as determined by ===.
2527 if (actual === expected) {
2528 return true;
2529
2530 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2531 if (actual.length != expected.length) return false;
2532
2533 for (var i = 0; i < actual.length; i++) {
2534 if (actual[i] !== expected[i]) return false;
2535 }
2536
2537 return true;
2538
2539 // 7.2. If the expected value is a Date object, the actual value is
2540 // equivalent if it is also a Date object that refers to the same time.
2541 } else if (util.isDate(actual) && util.isDate(expected)) {
2542 return actual.getTime() === expected.getTime();
2543
2544 // 7.3 If the expected value is a RegExp object, the actual value is
2545 // equivalent if it is also a RegExp object with the same source and
2546 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2547 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2548 return actual.source === expected.source &&
2549 actual.global === expected.global &&
2550 actual.multiline === expected.multiline &&
2551 actual.lastIndex === expected.lastIndex &&
2552 actual.ignoreCase === expected.ignoreCase;
2553
2554 // 7.4. Other pairs that do not both pass typeof value == 'object',
2555 // equivalence is determined by ==.
2556 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2557 return actual == expected;
2558
2559 // 7.5 For all other Object pairs, including Array objects, equivalence is
2560 // determined by having the same number of owned properties (as verified
2561 // with Object.prototype.hasOwnProperty.call), the same set of keys
2562 // (although not necessarily the same order), equivalent values for every
2563 // corresponding key, and an identical 'prototype' property. Note: this
2564 // accounts for both named and indexed properties on Arrays.
2565 } else {
2566 return objEquiv(actual, expected);
2567 }
2568 }
2569
2570 function isArguments(object) {
2571 return Object.prototype.toString.call(object) == '[object Arguments]';
2572 }
2573
2574 function objEquiv(a, b) {
2575 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2576 return false;
2577 // an identical 'prototype' property.
2578 if (a.prototype !== b.prototype) return false;
2579 // if one is a primitive, the other must be same
2580 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2581 return a === b;
2582 }
2583 var aIsArgs = isArguments(a),
2584 bIsArgs = isArguments(b);
2585 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2586 return false;
2587 if (aIsArgs) {
2588 a = pSlice.call(a);
2589 b = pSlice.call(b);
2590 return _deepEqual(a, b);
2591 }
2592 var ka = objectKeys(a),
2593 kb = objectKeys(b),
2594 key, i;
2595 // having the same number of owned properties (keys incorporates
2596 // hasOwnProperty)
2597 if (ka.length != kb.length)
2598 return false;
2599 //the same set of keys (although not necessarily the same order),
2600 ka.sort();
2601 kb.sort();
2602 //~~~cheap key test
2603 for (i = ka.length - 1; i >= 0; i--) {
2604 if (ka[i] != kb[i])
2605 return false;
2606 }
2607 //equivalent values for every corresponding key, and
2608 //~~~possibly expensive deep test
2609 for (i = ka.length - 1; i >= 0; i--) {
2610 key = ka[i];
2611 if (!_deepEqual(a[key], b[key])) return false;
2612 }
2613 return true;
2614 }
2615
2616 // 8. The non-equivalence assertion tests for any deep inequality.
2617 // assert.notDeepEqual(actual, expected, message_opt);
2618
2619 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2620 if (_deepEqual(actual, expected)) {
2621 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2622 }
2623 };
2624
2625 // 9. The strict equality assertion tests strict equality, as determined by ===.
2626 // assert.strictEqual(actual, expected, message_opt);
2627
2628 assert.strictEqual = function strictEqual(actual, expected, message) {
2629 if (actual !== expected) {
2630 fail(actual, expected, message, '===', assert.strictEqual);
2631 }
2632 };
2633
2634 // 10. The strict non-equality assertion tests for strict inequality, as
2635 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2636
2637 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2638 if (actual === expected) {
2639 fail(actual, expected, message, '!==', assert.notStrictEqual);
2640 }
2641 };
2642
2643 function expectedException(actual, expected) {
2644 if (!actual || !expected) {
2645 return false;
2646 }
2647
2648 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2649 return expected.test(actual);
2650 } else if (actual instanceof expected) {
2651 return true;
2652 } else if (expected.call({}, actual) === true) {
2653 return true;
2654 }
2655
2656 return false;
2657 }
2658
2659 function _throws(shouldThrow, block, expected, message) {
2660 var actual;
2661
2662 if (util.isString(expected)) {
2663 message = expected;
2664 expected = null;
2665 }
2666
2667 try {
2668 block();
2669 } catch (e) {
2670 actual = e;
2671 }
2672
2673 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2674 (message ? ' ' + message : '.');
2675
2676 if (shouldThrow && !actual) {
2677 fail(actual, expected, 'Missing expected exception' + message);
2678 }
2679
2680 if (!shouldThrow && expectedException(actual, expected)) {
2681 fail(actual, expected, 'Got unwanted exception' + message);
2682 }
2683
2684 if ((shouldThrow && actual && expected &&
2685 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2686 throw actual;
2687 }
2688 }
2689
2690 // 11. Expected to throw an error:
2691 // assert.throws(block, Error_opt, message_opt);
2692
2693 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2694 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2695 };
2696
2697 // EXTENSION! This is annoying to write outside this module.
2698 assert.doesNotThrow = function(block, /*optional*/message) {
2699 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2700 };
2701
2702 assert.ifError = function(err) { if (err) {throw err;}};
2703
2704 var objectKeys = Object.keys || function (obj) {
2705 var keys = [];
2706 for (var key in obj) {
2707 if (hasOwn.call(obj, key)) keys.push(key);
2708 }
2709 return keys;
2710 };
2711
2712 },{"util/":29}],6:[function(require,module,exports){
2713
2714 },{}],7:[function(require,module,exports){
2715 /*!
2716 * The buffer module from node.js, for the browser.
2717 *
2718 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2719 * @license MIT
2720 */
2721
2722 var base64 = require('base64-js')
2723 var ieee754 = require('ieee754')
2724 var isArray = require('is-array')
2725
2726 exports.Buffer = Buffer
2727 exports.SlowBuffer = SlowBuffer
2728 exports.INSPECT_MAX_BYTES = 50
2729 Buffer.poolSize = 8192 // not used by this implementation
2730
2731 var rootParent = {}
2732
2733 /**
2734 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2735 * === true Use Uint8Array implementation (fastest)
2736 * === false Use Object implementation (most compatible, even IE6)
2737 *
2738 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2739 * Opera 11.6+, iOS 4.2+.
2740 *
2741 * Due to various browser bugs, sometimes the Object implementation will be used even
2742 * when the browser supports typed arrays.
2743 *
2744 * Note:
2745 *
2746 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2747 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2748 *
2749 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2750 * on objects.
2751 *
2752 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2753 *
2754 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2755 * incorrect length in some situations.
2756
2757 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2758 * get the Object implementation, which is slower but behaves correctly.
2759 */
2760 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2761 function Bar () {}
2762 try {
2763 var arr = new Uint8Array(1)
2764 arr.foo = function () { return 42 }
2765 arr.constructor = Bar
2766 return arr.foo() === 42 && // typed array instances can be augmented
2767 arr.constructor === Bar && // constructor can be set
2768 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2769 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2770 } catch (e) {
2771 return false
2772 }
2773 })()
2774
2775 function kMaxLength () {
2776 return Buffer.TYPED_ARRAY_SUPPORT
2777 ? 0x7fffffff
2778 : 0x3fffffff
2779 }
2780
2781 /**
2782 * Class: Buffer
2783 * =============
2784 *
2785 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2786 * with function properties for all the node `Buffer` API functions. We use
2787 * `Uint8Array` so that square bracket notation works as expected -- it returns
2788 * a single octet.
2789 *
2790 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2791 * prototype.
2792 */
2793 function Buffer (arg) {
2794 if (!(this instanceof Buffer)) {
2795 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2796 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2797 return new Buffer(arg)
2798 }
2799
2800 this.length = 0
2801 this.parent = undefined
2802
2803 // Common case.
2804 if (typeof arg === 'number') {
2805 return fromNumber(this, arg)
2806 }
2807
2808 // Slightly less common case.
2809 if (typeof arg === 'string') {
2810 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2811 }
2812
2813 // Unusual.
2814 return fromObject(this, arg)
2815 }
2816
2817 function fromNumber (that, length) {
2818 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2819 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2820 for (var i = 0; i < length; i++) {
2821 that[i] = 0
2822 }
2823 }
2824 return that
2825 }
2826
2827 function fromString (that, string, encoding) {
2828 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2829
2830 // Assumption: byteLength() return value is always < kMaxLength.
2831 var length = byteLength(string, encoding) | 0
2832 that = allocate(that, length)
2833
2834 that.write(string, encoding)
2835 return that
2836 }
2837
2838 function fromObject (that, object) {
2839 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2840
2841 if (isArray(object)) return fromArray(that, object)
2842
2843 if (object == null) {
2844 throw new TypeError('must start with number, buffer, array or string')
2845 }
2846
2847 if (typeof ArrayBuffer !== 'undefined') {
2848 if (object.buffer instanceof ArrayBuffer) {
2849 return fromTypedArray(that, object)
2850 }
2851 if (object instanceof ArrayBuffer) {
2852 return fromArrayBuffer(that, object)
2853 }
2854 }
2855
2856 if (object.length) return fromArrayLike(that, object)
2857
2858 return fromJsonObject(that, object)
2859 }
2860
2861 function fromBuffer (that, buffer) {
2862 var length = checked(buffer.length) | 0
2863 that = allocate(that, length)
2864 buffer.copy(that, 0, 0, length)
2865 return that
2866 }
2867
2868 function fromArray (that, array) {
2869 var length = checked(array.length) | 0
2870 that = allocate(that, length)
2871 for (var i = 0; i < length; i += 1) {
2872 that[i] = array[i] & 255
2873 }
2874 return that
2875 }
2876
2877 // Duplicate of fromArray() to keep fromArray() monomorphic.
2878 function fromTypedArray (that, array) {
2879 var length = checked(array.length) | 0
2880 that = allocate(that, length)
2881 // Truncating the elements is probably not what people expect from typed
2882 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2883 // of the old Buffer constructor.
2884 for (var i = 0; i < length; i += 1) {
2885 that[i] = array[i] & 255
2886 }
2887 return that
2888 }
2889
2890 function fromArrayBuffer (that, array) {
2891 if (Buffer.TYPED_ARRAY_SUPPORT) {
2892 // Return an augmented `Uint8Array` instance, for best performance
2893 array.byteLength
2894 that = Buffer._augment(new Uint8Array(array))
2895 } else {
2896 // Fallback: Return an object instance of the Buffer class
2897 that = fromTypedArray(that, new Uint8Array(array))
2898 }
2899 return that
2900 }
2901
2902 function fromArrayLike (that, array) {
2903 var length = checked(array.length) | 0
2904 that = allocate(that, length)
2905 for (var i = 0; i < length; i += 1) {
2906 that[i] = array[i] & 255
2907 }
2908 return that
2909 }
2910
2911 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2912 // Returns a zero-length buffer for inputs that don't conform to the spec.
2913 function fromJsonObject (that, object) {
2914 var array
2915 var length = 0
2916
2917 if (object.type === 'Buffer' && isArray(object.data)) {
2918 array = object.data
2919 length = checked(array.length) | 0
2920 }
2921 that = allocate(that, length)
2922
2923 for (var i = 0; i < length; i += 1) {
2924 that[i] = array[i] & 255
2925 }
2926 return that
2927 }
2928
2929 function allocate (that, length) {
2930 if (Buffer.TYPED_ARRAY_SUPPORT) {
2931 // Return an augmented `Uint8Array` instance, for best performance
2932 that = Buffer._augment(new Uint8Array(length))
2933 } else {
2934 // Fallback: Return an object instance of the Buffer class
2935 that.length = length
2936 that._isBuffer = true
2937 }
2938
2939 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2940 if (fromPool) that.parent = rootParent
2941
2942 return that
2943 }
2944
2945 function checked (length) {
2946 // Note: cannot use `length < kMaxLength` here because that fails when
2947 // length is NaN (which is otherwise coerced to zero.)
2948 if (length >= kMaxLength()) {
2949 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2950 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2951 }
2952 return length | 0
2953 }
2954
2955 function SlowBuffer (subject, encoding) {
2956 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2957
2958 var buf = new Buffer(subject, encoding)
2959 delete buf.parent
2960 return buf
2961 }
2962
2963 Buffer.isBuffer = function isBuffer (b) {
2964 return !!(b != null && b._isBuffer)
2965 }
2966
2967 Buffer.compare = function compare (a, b) {
2968 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2969 throw new TypeError('Arguments must be Buffers')
2970 }
2971
2972 if (a === b) return 0
2973
2974 var x = a.length
2975 var y = b.length
2976
2977 var i = 0
2978 var len = Math.min(x, y)
2979 while (i < len) {
2980 if (a[i] !== b[i]) break
2981
2982 ++i
2983 }
2984
2985 if (i !== len) {
2986 x = a[i]
2987 y = b[i]
2988 }
2989
2990 if (x < y) return -1
2991 if (y < x) return 1
2992 return 0
2993 }
2994
2995 Buffer.isEncoding = function isEncoding (encoding) {
2996 switch (String(encoding).toLowerCase()) {
2997 case 'hex':
2998 case 'utf8':
2999 case 'utf-8':
3000 case 'ascii':
3001 case 'binary':
3002 case 'base64':
3003 case 'raw':
3004 case 'ucs2':
3005 case 'ucs-2':
3006 case 'utf16le':
3007 case 'utf-16le':
3008 return true
3009 default:
3010 return false
3011 }
3012 }
3013
3014 Buffer.concat = function concat (list, length) {
3015 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3016
3017 if (list.length === 0) {
3018 return new Buffer(0)
3019 }
3020
3021 var i
3022 if (length === undefined) {
3023 length = 0
3024 for (i = 0; i < list.length; i++) {
3025 length += list[i].length
3026 }
3027 }
3028
3029 var buf = new Buffer(length)
3030 var pos = 0
3031 for (i = 0; i < list.length; i++) {
3032 var item = list[i]
3033 item.copy(buf, pos)
3034 pos += item.length
3035 }
3036 return buf
3037 }
3038
3039 function byteLength (string, encoding) {
3040 if (typeof string !== 'string') string = '' + string
3041
3042 var len = string.length
3043 if (len === 0) return 0
3044
3045 // Use a for loop to avoid recursion
3046 var loweredCase = false
3047 for (;;) {
3048 switch (encoding) {
3049 case 'ascii':
3050 case 'binary':
3051 // Deprecated
3052 case 'raw':
3053 case 'raws':
3054 return len
3055 case 'utf8':
3056 case 'utf-8':
3057 return utf8ToBytes(string).length
3058 case 'ucs2':
3059 case 'ucs-2':
3060 case 'utf16le':
3061 case 'utf-16le':
3062 return len * 2
3063 case 'hex':
3064 return len >>> 1
3065 case 'base64':
3066 return base64ToBytes(string).length
3067 default:
3068 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3069 encoding = ('' + encoding).toLowerCase()
3070 loweredCase = true
3071 }
3072 }
3073 }
3074 Buffer.byteLength = byteLength
3075
3076 // pre-set for values that may exist in the future
3077 Buffer.prototype.length = undefined
3078 Buffer.prototype.parent = undefined
3079
3080 function slowToString (encoding, start, end) {
3081 var loweredCase = false
3082
3083 start = start | 0
3084 end = end === undefined || end === Infinity ? this.length : end | 0
3085
3086 if (!encoding) encoding = 'utf8'
3087 if (start < 0) start = 0
3088 if (end > this.length) end = this.length
3089 if (end <= start) return ''
3090
3091 while (true) {
3092 switch (encoding) {
3093 case 'hex':
3094 return hexSlice(this, start, end)
3095
3096 case 'utf8':
3097 case 'utf-8':
3098 return utf8Slice(this, start, end)
3099
3100 case 'ascii':
3101 return asciiSlice(this, start, end)
3102
3103 case 'binary':
3104 return binarySlice(this, start, end)
3105
3106 case 'base64':
3107 return base64Slice(this, start, end)
3108
3109 case 'ucs2':
3110 case 'ucs-2':
3111 case 'utf16le':
3112 case 'utf-16le':
3113 return utf16leSlice(this, start, end)
3114
3115 default:
3116 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3117 encoding = (encoding + '').toLowerCase()
3118 loweredCase = true
3119 }
3120 }
3121 }
3122
3123 Buffer.prototype.toString = function toString () {
3124 var length = this.length | 0
3125 if (length === 0) return ''
3126 if (arguments.length === 0) return utf8Slice(this, 0, length)
3127 return slowToString.apply(this, arguments)
3128 }
3129
3130 Buffer.prototype.equals = function equals (b) {
3131 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3132 if (this === b) return true
3133 return Buffer.compare(this, b) === 0
3134 }
3135
3136 Buffer.prototype.inspect = function inspect () {
3137 var str = ''
3138 var max = exports.INSPECT_MAX_BYTES
3139 if (this.length > 0) {
3140 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3141 if (this.length > max) str += ' ... '
3142 }
3143 return '<Buffer ' + str + '>'
3144 }
3145
3146 Buffer.prototype.compare = function compare (b) {
3147 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3148 if (this === b) return 0
3149 return Buffer.compare(this, b)
3150 }
3151
3152 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3153 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3154 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3155 byteOffset >>= 0
3156
3157 if (this.length === 0) return -1
3158 if (byteOffset >= this.length) return -1
3159
3160 // Negative offsets start from the end of the buffer
3161 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3162
3163 if (typeof val === 'string') {
3164 if (val.length === 0) return -1 // special case: looking for empty string always fails
3165 return String.prototype.indexOf.call(this, val, byteOffset)
3166 }
3167 if (Buffer.isBuffer(val)) {
3168 return arrayIndexOf(this, val, byteOffset)
3169 }
3170 if (typeof val === 'number') {
3171 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3172 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3173 }
3174 return arrayIndexOf(this, [ val ], byteOffset)
3175 }
3176
3177 function arrayIndexOf (arr, val, byteOffset) {
3178 var foundIndex = -1
3179 for (var i = 0; byteOffset + i < arr.length; i++) {
3180 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3181 if (foundIndex === -1) foundIndex = i
3182 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3183 } else {
3184 foundIndex = -1
3185 }
3186 }
3187 return -1
3188 }
3189
3190 throw new TypeError('val must be string, number or Buffer')
3191 }
3192
3193 // `get` is deprecated
3194 Buffer.prototype.get = function get (offset) {
3195 console.log('.get() is deprecated. Access using array indexes instead.')
3196 return this.readUInt8(offset)
3197 }
3198
3199 // `set` is deprecated
3200 Buffer.prototype.set = function set (v, offset) {
3201 console.log('.set() is deprecated. Access using array indexes instead.')
3202 return this.writeUInt8(v, offset)
3203 }
3204
3205 function hexWrite (buf, string, offset, length) {
3206 offset = Number(offset) || 0
3207 var remaining = buf.length - offset
3208 if (!length) {
3209 length = remaining
3210 } else {
3211 length = Number(length)
3212 if (length > remaining) {
3213 length = remaining
3214 }
3215 }
3216
3217 // must be an even number of digits
3218 var strLen = string.length
3219 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3220
3221 if (length > strLen / 2) {
3222 length = strLen / 2
3223 }
3224 for (var i = 0; i < length; i++) {
3225 var parsed = parseInt(string.substr(i * 2, 2), 16)
3226 if (isNaN(parsed)) throw new Error('Invalid hex string')
3227 buf[offset + i] = parsed
3228 }
3229 return i
3230 }
3231
3232 function utf8Write (buf, string, offset, length) {
3233 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3234 }
3235
3236 function asciiWrite (buf, string, offset, length) {
3237 return blitBuffer(asciiToBytes(string), buf, offset, length)
3238 }
3239
3240 function binaryWrite (buf, string, offset, length) {
3241 return asciiWrite(buf, string, offset, length)
3242 }
3243
3244 function base64Write (buf, string, offset, length) {
3245 return blitBuffer(base64ToBytes(string), buf, offset, length)
3246 }
3247
3248 function ucs2Write (buf, string, offset, length) {
3249 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3250 }
3251
3252 Buffer.prototype.write = function write (string, offset, length, encoding) {
3253 // Buffer#write(string)
3254 if (offset === undefined) {
3255 encoding = 'utf8'
3256 length = this.length
3257 offset = 0
3258 // Buffer#write(string, encoding)
3259 } else if (length === undefined && typeof offset === 'string') {
3260 encoding = offset
3261 length = this.length
3262 offset = 0
3263 // Buffer#write(string, offset[, length][, encoding])
3264 } else if (isFinite(offset)) {
3265 offset = offset | 0
3266 if (isFinite(length)) {
3267 length = length | 0
3268 if (encoding === undefined) encoding = 'utf8'
3269 } else {
3270 encoding = length
3271 length = undefined
3272 }
3273 // legacy write(string, encoding, offset, length) - remove in v0.13
3274 } else {
3275 var swap = encoding
3276 encoding = offset
3277 offset = length | 0
3278 length = swap
3279 }
3280
3281 var remaining = this.length - offset
3282 if (length === undefined || length > remaining) length = remaining
3283
3284 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3285 throw new RangeError('attempt to write outside buffer bounds')
3286 }
3287
3288 if (!encoding) encoding = 'utf8'
3289
3290 var loweredCase = false
3291 for (;;) {
3292 switch (encoding) {
3293 case 'hex':
3294 return hexWrite(this, string, offset, length)
3295
3296 case 'utf8':
3297 case 'utf-8':
3298 return utf8Write(this, string, offset, length)
3299
3300 case 'ascii':
3301 return asciiWrite(this, string, offset, length)
3302
3303 case 'binary':
3304 return binaryWrite(this, string, offset, length)
3305
3306 case 'base64':
3307 // Warning: maxLength not taken into account in base64Write
3308 return base64Write(this, string, offset, length)
3309
3310 case 'ucs2':
3311 case 'ucs-2':
3312 case 'utf16le':
3313 case 'utf-16le':
3314 return ucs2Write(this, string, offset, length)
3315
3316 default:
3317 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3318 encoding = ('' + encoding).toLowerCase()
3319 loweredCase = true
3320 }
3321 }
3322 }
3323
3324 Buffer.prototype.toJSON = function toJSON () {
3325 return {
3326 type: 'Buffer',
3327 data: Array.prototype.slice.call(this._arr || this, 0)
3328 }
3329 }
3330
3331 function base64Slice (buf, start, end) {
3332 if (start === 0 && end === buf.length) {
3333 return base64.fromByteArray(buf)
3334 } else {
3335 return base64.fromByteArray(buf.slice(start, end))
3336 }
3337 }
3338
3339 function utf8Slice (buf, start, end) {
3340 end = Math.min(buf.length, end)
3341 var firstByte
3342 var secondByte
3343 var thirdByte
3344 var fourthByte
3345 var bytesPerSequence
3346 var tempCodePoint
3347 var codePoint
3348 var res = []
3349 var i = start
3350
3351 for (; i < end; i += bytesPerSequence) {
3352 firstByte = buf[i]
3353 codePoint = 0xFFFD
3354
3355 if (firstByte > 0xEF) {
3356 bytesPerSequence = 4
3357 } else if (firstByte > 0xDF) {
3358 bytesPerSequence = 3
3359 } else if (firstByte > 0xBF) {
3360 bytesPerSequence = 2
3361 } else {
3362 bytesPerSequence = 1
3363 }
3364
3365 if (i + bytesPerSequence <= end) {
3366 switch (bytesPerSequence) {
3367 case 1:
3368 if (firstByte < 0x80) {
3369 codePoint = firstByte
3370 }
3371 break
3372 case 2:
3373 secondByte = buf[i + 1]
3374 if ((secondByte & 0xC0) === 0x80) {
3375 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3376 if (tempCodePoint > 0x7F) {
3377 codePoint = tempCodePoint
3378 }
3379 }
3380 break
3381 case 3:
3382 secondByte = buf[i + 1]
3383 thirdByte = buf[i + 2]
3384 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3385 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3386 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3387 codePoint = tempCodePoint
3388 }
3389 }
3390 break
3391 case 4:
3392 secondByte = buf[i + 1]
3393 thirdByte = buf[i + 2]
3394 fourthByte = buf[i + 3]
3395 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3396 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3397 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3398 codePoint = tempCodePoint
3399 }
3400 }
3401 }
3402 }
3403
3404 if (codePoint === 0xFFFD) {
3405 // we generated an invalid codePoint so make sure to only advance by 1 byte
3406 bytesPerSequence = 1
3407 } else if (codePoint > 0xFFFF) {
3408 // encode to utf16 (surrogate pair dance)
3409 codePoint -= 0x10000
3410 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3411 codePoint = 0xDC00 | codePoint & 0x3FF
3412 }
3413
3414 res.push(codePoint)
3415 }
3416
3417 return String.fromCharCode.apply(String, res)
3418 }
3419
3420 function asciiSlice (buf, start, end) {
3421 var ret = ''
3422 end = Math.min(buf.length, end)
3423
3424 for (var i = start; i < end; i++) {
3425 ret += String.fromCharCode(buf[i] & 0x7F)
3426 }
3427 return ret
3428 }
3429
3430 function binarySlice (buf, start, end) {
3431 var ret = ''
3432 end = Math.min(buf.length, end)
3433
3434 for (var i = start; i < end; i++) {
3435 ret += String.fromCharCode(buf[i])
3436 }
3437 return ret
3438 }
3439
3440 function hexSlice (buf, start, end) {
3441 var len = buf.length
3442
3443 if (!start || start < 0) start = 0
3444 if (!end || end < 0 || end > len) end = len
3445
3446 var out = ''
3447 for (var i = start; i < end; i++) {
3448 out += toHex(buf[i])
3449 }
3450 return out
3451 }
3452
3453 function utf16leSlice (buf, start, end) {
3454 var bytes = buf.slice(start, end)
3455 var res = ''
3456 for (var i = 0; i < bytes.length; i += 2) {
3457 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3458 }
3459 return res
3460 }
3461
3462 Buffer.prototype.slice = function slice (start, end) {
3463 var len = this.length
3464 start = ~~start
3465 end = end === undefined ? len : ~~end
3466
3467 if (start < 0) {
3468 start += len
3469 if (start < 0) start = 0
3470 } else if (start > len) {
3471 start = len
3472 }
3473
3474 if (end < 0) {
3475 end += len
3476 if (end < 0) end = 0
3477 } else if (end > len) {
3478 end = len
3479 }
3480
3481 if (end < start) end = start
3482
3483 var newBuf
3484 if (Buffer.TYPED_ARRAY_SUPPORT) {
3485 newBuf = Buffer._augment(this.subarray(start, end))
3486 } else {
3487 var sliceLen = end - start
3488 newBuf = new Buffer(sliceLen, undefined)
3489 for (var i = 0; i < sliceLen; i++) {
3490 newBuf[i] = this[i + start]
3491 }
3492 }
3493
3494 if (newBuf.length) newBuf.parent = this.parent || this
3495
3496 return newBuf
3497 }
3498
3499 /*
3500 * Need to make sure that buffer isn't trying to write out of bounds.
3501 */
3502 function checkOffset (offset, ext, length) {
3503 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3504 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3505 }
3506
3507 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3508 offset = offset | 0
3509 byteLength = byteLength | 0
3510 if (!noAssert) checkOffset(offset, byteLength, this.length)
3511
3512 var val = this[offset]
3513 var mul = 1
3514 var i = 0
3515 while (++i < byteLength && (mul *= 0x100)) {
3516 val += this[offset + i] * mul
3517 }
3518
3519 return val
3520 }
3521
3522 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3523 offset = offset | 0
3524 byteLength = byteLength | 0
3525 if (!noAssert) {
3526 checkOffset(offset, byteLength, this.length)
3527 }
3528
3529 var val = this[offset + --byteLength]
3530 var mul = 1
3531 while (byteLength > 0 && (mul *= 0x100)) {
3532 val += this[offset + --byteLength] * mul
3533 }
3534
3535 return val
3536 }
3537
3538 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3539 if (!noAssert) checkOffset(offset, 1, this.length)
3540 return this[offset]
3541 }
3542
3543 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3544 if (!noAssert) checkOffset(offset, 2, this.length)
3545 return this[offset] | (this[offset + 1] << 8)
3546 }
3547
3548 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3549 if (!noAssert) checkOffset(offset, 2, this.length)
3550 return (this[offset] << 8) | this[offset + 1]
3551 }
3552
3553 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3554 if (!noAssert) checkOffset(offset, 4, this.length)
3555
3556 return ((this[offset]) |
3557 (this[offset + 1] << 8) |
3558 (this[offset + 2] << 16)) +
3559 (this[offset + 3] * 0x1000000)
3560 }
3561
3562 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3563 if (!noAssert) checkOffset(offset, 4, this.length)
3564
3565 return (this[offset] * 0x1000000) +
3566 ((this[offset + 1] << 16) |
3567 (this[offset + 2] << 8) |
3568 this[offset + 3])
3569 }
3570
3571 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3572 offset = offset | 0
3573 byteLength = byteLength | 0
3574 if (!noAssert) checkOffset(offset, byteLength, this.length)
3575
3576 var val = this[offset]
3577 var mul = 1
3578 var i = 0
3579 while (++i < byteLength && (mul *= 0x100)) {
3580 val += this[offset + i] * mul
3581 }
3582 mul *= 0x80
3583
3584 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3585
3586 return val
3587 }
3588
3589 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3590 offset = offset | 0
3591 byteLength = byteLength | 0
3592 if (!noAssert) checkOffset(offset, byteLength, this.length)
3593
3594 var i = byteLength
3595 var mul = 1
3596 var val = this[offset + --i]
3597 while (i > 0 && (mul *= 0x100)) {
3598 val += this[offset + --i] * mul
3599 }
3600 mul *= 0x80
3601
3602 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3603
3604 return val
3605 }
3606
3607 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3608 if (!noAssert) checkOffset(offset, 1, this.length)
3609 if (!(this[offset] & 0x80)) return (this[offset])
3610 return ((0xff - this[offset] + 1) * -1)
3611 }
3612
3613 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3614 if (!noAssert) checkOffset(offset, 2, this.length)
3615 var val = this[offset] | (this[offset + 1] << 8)
3616 return (val & 0x8000) ? val | 0xFFFF0000 : val
3617 }
3618
3619 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3620 if (!noAssert) checkOffset(offset, 2, this.length)
3621 var val = this[offset + 1] | (this[offset] << 8)
3622 return (val & 0x8000) ? val | 0xFFFF0000 : val
3623 }
3624
3625 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3626 if (!noAssert) checkOffset(offset, 4, this.length)
3627
3628 return (this[offset]) |
3629 (this[offset + 1] << 8) |
3630 (this[offset + 2] << 16) |
3631 (this[offset + 3] << 24)
3632 }
3633
3634 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3635 if (!noAssert) checkOffset(offset, 4, this.length)
3636
3637 return (this[offset] << 24) |
3638 (this[offset + 1] << 16) |
3639 (this[offset + 2] << 8) |
3640 (this[offset + 3])
3641 }
3642
3643 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3644 if (!noAssert) checkOffset(offset, 4, this.length)
3645 return ieee754.read(this, offset, true, 23, 4)
3646 }
3647
3648 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3649 if (!noAssert) checkOffset(offset, 4, this.length)
3650 return ieee754.read(this, offset, false, 23, 4)
3651 }
3652
3653 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3654 if (!noAssert) checkOffset(offset, 8, this.length)
3655 return ieee754.read(this, offset, true, 52, 8)
3656 }
3657
3658 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3659 if (!noAssert) checkOffset(offset, 8, this.length)
3660 return ieee754.read(this, offset, false, 52, 8)
3661 }
3662
3663 function checkInt (buf, value, offset, ext, max, min) {
3664 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3665 if (value > max || value < min) throw new RangeError('value is out of bounds')
3666 if (offset + ext > buf.length) throw new RangeError('index out of range')
3667 }
3668
3669 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3670 value = +value
3671 offset = offset | 0
3672 byteLength = byteLength | 0
3673 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3674
3675 var mul = 1
3676 var i = 0
3677 this[offset] = value & 0xFF
3678 while (++i < byteLength && (mul *= 0x100)) {
3679 this[offset + i] = (value / mul) & 0xFF
3680 }
3681
3682 return offset + byteLength
3683 }
3684
3685 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3686 value = +value
3687 offset = offset | 0
3688 byteLength = byteLength | 0
3689 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3690
3691 var i = byteLength - 1
3692 var mul = 1
3693 this[offset + i] = value & 0xFF
3694 while (--i >= 0 && (mul *= 0x100)) {
3695 this[offset + i] = (value / mul) & 0xFF
3696 }
3697
3698 return offset + byteLength
3699 }
3700
3701 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3702 value = +value
3703 offset = offset | 0
3704 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3705 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3706 this[offset] = value
3707 return offset + 1
3708 }
3709
3710 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3711 if (value < 0) value = 0xffff + value + 1
3712 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3713 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3714 (littleEndian ? i : 1 - i) * 8
3715 }
3716 }
3717
3718 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3719 value = +value
3720 offset = offset | 0
3721 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3722 if (Buffer.TYPED_ARRAY_SUPPORT) {
3723 this[offset] = value
3724 this[offset + 1] = (value >>> 8)
3725 } else {
3726 objectWriteUInt16(this, value, offset, true)
3727 }
3728 return offset + 2
3729 }
3730
3731 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3732 value = +value
3733 offset = offset | 0
3734 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3735 if (Buffer.TYPED_ARRAY_SUPPORT) {
3736 this[offset] = (value >>> 8)
3737 this[offset + 1] = value
3738 } else {
3739 objectWriteUInt16(this, value, offset, false)
3740 }
3741 return offset + 2
3742 }
3743
3744 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3745 if (value < 0) value = 0xffffffff + value + 1
3746 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3747 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3748 }
3749 }
3750
3751 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3752 value = +value
3753 offset = offset | 0
3754 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3755 if (Buffer.TYPED_ARRAY_SUPPORT) {
3756 this[offset + 3] = (value >>> 24)
3757 this[offset + 2] = (value >>> 16)
3758 this[offset + 1] = (value >>> 8)
3759 this[offset] = value
3760 } else {
3761 objectWriteUInt32(this, value, offset, true)
3762 }
3763 return offset + 4
3764 }
3765
3766 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3767 value = +value
3768 offset = offset | 0
3769 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3770 if (Buffer.TYPED_ARRAY_SUPPORT) {
3771 this[offset] = (value >>> 24)
3772 this[offset + 1] = (value >>> 16)
3773 this[offset + 2] = (value >>> 8)
3774 this[offset + 3] = value
3775 } else {
3776 objectWriteUInt32(this, value, offset, false)
3777 }
3778 return offset + 4
3779 }
3780
3781 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3782 value = +value
3783 offset = offset | 0
3784 if (!noAssert) {
3785 var limit = Math.pow(2, 8 * byteLength - 1)
3786
3787 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3788 }
3789
3790 var i = 0
3791 var mul = 1
3792 var sub = value < 0 ? 1 : 0
3793 this[offset] = value & 0xFF
3794 while (++i < byteLength && (mul *= 0x100)) {
3795 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3796 }
3797
3798 return offset + byteLength
3799 }
3800
3801 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3802 value = +value
3803 offset = offset | 0
3804 if (!noAssert) {
3805 var limit = Math.pow(2, 8 * byteLength - 1)
3806
3807 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3808 }
3809
3810 var i = byteLength - 1
3811 var mul = 1
3812 var sub = value < 0 ? 1 : 0
3813 this[offset + i] = value & 0xFF
3814 while (--i >= 0 && (mul *= 0x100)) {
3815 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3816 }
3817
3818 return offset + byteLength
3819 }
3820
3821 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3822 value = +value
3823 offset = offset | 0
3824 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3825 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3826 if (value < 0) value = 0xff + value + 1
3827 this[offset] = value
3828 return offset + 1
3829 }
3830
3831 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3832 value = +value
3833 offset = offset | 0
3834 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3835 if (Buffer.TYPED_ARRAY_SUPPORT) {
3836 this[offset] = value
3837 this[offset + 1] = (value >>> 8)
3838 } else {
3839 objectWriteUInt16(this, value, offset, true)
3840 }
3841 return offset + 2
3842 }
3843
3844 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3845 value = +value
3846 offset = offset | 0
3847 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3848 if (Buffer.TYPED_ARRAY_SUPPORT) {
3849 this[offset] = (value >>> 8)
3850 this[offset + 1] = value
3851 } else {
3852 objectWriteUInt16(this, value, offset, false)
3853 }
3854 return offset + 2
3855 }
3856
3857 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3858 value = +value
3859 offset = offset | 0
3860 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3861 if (Buffer.TYPED_ARRAY_SUPPORT) {
3862 this[offset] = value
3863 this[offset + 1] = (value >>> 8)
3864 this[offset + 2] = (value >>> 16)
3865 this[offset + 3] = (value >>> 24)
3866 } else {
3867 objectWriteUInt32(this, value, offset, true)
3868 }
3869 return offset + 4
3870 }
3871
3872 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3873 value = +value
3874 offset = offset | 0
3875 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3876 if (value < 0) value = 0xffffffff + value + 1
3877 if (Buffer.TYPED_ARRAY_SUPPORT) {
3878 this[offset] = (value >>> 24)
3879 this[offset + 1] = (value >>> 16)
3880 this[offset + 2] = (value >>> 8)
3881 this[offset + 3] = value
3882 } else {
3883 objectWriteUInt32(this, value, offset, false)
3884 }
3885 return offset + 4
3886 }
3887
3888 function checkIEEE754 (buf, value, offset, ext, max, min) {
3889 if (value > max || value < min) throw new RangeError('value is out of bounds')
3890 if (offset + ext > buf.length) throw new RangeError('index out of range')
3891 if (offset < 0) throw new RangeError('index out of range')
3892 }
3893
3894 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3895 if (!noAssert) {
3896 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3897 }
3898 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3899 return offset + 4
3900 }
3901
3902 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3903 return writeFloat(this, value, offset, true, noAssert)
3904 }
3905
3906 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3907 return writeFloat(this, value, offset, false, noAssert)
3908 }
3909
3910 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3911 if (!noAssert) {
3912 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3913 }
3914 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3915 return offset + 8
3916 }
3917
3918 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3919 return writeDouble(this, value, offset, true, noAssert)
3920 }
3921
3922 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3923 return writeDouble(this, value, offset, false, noAssert)
3924 }
3925
3926 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3927 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3928 if (!start) start = 0
3929 if (!end && end !== 0) end = this.length
3930 if (targetStart >= target.length) targetStart = target.length
3931 if (!targetStart) targetStart = 0
3932 if (end > 0 && end < start) end = start
3933
3934 // Copy 0 bytes; we're done
3935 if (end === start) return 0
3936 if (target.length === 0 || this.length === 0) return 0
3937
3938 // Fatal error conditions
3939 if (targetStart < 0) {
3940 throw new RangeError('targetStart out of bounds')
3941 }
3942 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3943 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3944
3945 // Are we oob?
3946 if (end > this.length) end = this.length
3947 if (target.length - targetStart < end - start) {
3948 end = target.length - targetStart + start
3949 }
3950
3951 var len = end - start
3952 var i
3953
3954 if (this === target && start < targetStart && targetStart < end) {
3955 // descending copy from end
3956 for (i = len - 1; i >= 0; i--) {
3957 target[i + targetStart] = this[i + start]
3958 }
3959 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3960 // ascending copy from start
3961 for (i = 0; i < len; i++) {
3962 target[i + targetStart] = this[i + start]
3963 }
3964 } else {
3965 target._set(this.subarray(start, start + len), targetStart)
3966 }
3967
3968 return len
3969 }
3970
3971 // fill(value, start=0, end=buffer.length)
3972 Buffer.prototype.fill = function fill (value, start, end) {
3973 if (!value) value = 0
3974 if (!start) start = 0
3975 if (!end) end = this.length
3976
3977 if (end < start) throw new RangeError('end < start')
3978
3979 // Fill 0 bytes; we're done
3980 if (end === start) return
3981 if (this.length === 0) return
3982
3983 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3984 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3985
3986 var i
3987 if (typeof value === 'number') {
3988 for (i = start; i < end; i++) {
3989 this[i] = value
3990 }
3991 } else {
3992 var bytes = utf8ToBytes(value.toString())
3993 var len = bytes.length
3994 for (i = start; i < end; i++) {
3995 this[i] = bytes[i % len]
3996 }
3997 }
3998
3999 return this
4000 }
4001
4002 /**
4003 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4004 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4005 */
4006 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4007 if (typeof Uint8Array !== 'undefined') {
4008 if (Buffer.TYPED_ARRAY_SUPPORT) {
4009 return (new Buffer(this)).buffer
4010 } else {
4011 var buf = new Uint8Array(this.length)
4012 for (var i = 0, len = buf.length; i < len; i += 1) {
4013 buf[i] = this[i]
4014 }
4015 return buf.buffer
4016 }
4017 } else {
4018 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4019 }
4020 }
4021
4022 // HELPER FUNCTIONS
4023 // ================
4024
4025 var BP = Buffer.prototype
4026
4027 /**
4028 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4029 */
4030 Buffer._augment = function _augment (arr) {
4031 arr.constructor = Buffer
4032 arr._isBuffer = true
4033
4034 // save reference to original Uint8Array set method before overwriting
4035 arr._set = arr.set
4036
4037 // deprecated
4038 arr.get = BP.get
4039 arr.set = BP.set
4040
4041 arr.write = BP.write
4042 arr.toString = BP.toString
4043 arr.toLocaleString = BP.toString
4044 arr.toJSON = BP.toJSON
4045 arr.equals = BP.equals
4046 arr.compare = BP.compare
4047 arr.indexOf = BP.indexOf
4048 arr.copy = BP.copy
4049 arr.slice = BP.slice
4050 arr.readUIntLE = BP.readUIntLE
4051 arr.readUIntBE = BP.readUIntBE
4052 arr.readUInt8 = BP.readUInt8
4053 arr.readUInt16LE = BP.readUInt16LE
4054 arr.readUInt16BE = BP.readUInt16BE
4055 arr.readUInt32LE = BP.readUInt32LE
4056 arr.readUInt32BE = BP.readUInt32BE
4057 arr.readIntLE = BP.readIntLE
4058 arr.readIntBE = BP.readIntBE
4059 arr.readInt8 = BP.readInt8
4060 arr.readInt16LE = BP.readInt16LE
4061 arr.readInt16BE = BP.readInt16BE
4062 arr.readInt32LE = BP.readInt32LE
4063 arr.readInt32BE = BP.readInt32BE
4064 arr.readFloatLE = BP.readFloatLE
4065 arr.readFloatBE = BP.readFloatBE
4066 arr.readDoubleLE = BP.readDoubleLE
4067 arr.readDoubleBE = BP.readDoubleBE
4068 arr.writeUInt8 = BP.writeUInt8
4069 arr.writeUIntLE = BP.writeUIntLE
4070 arr.writeUIntBE = BP.writeUIntBE
4071 arr.writeUInt16LE = BP.writeUInt16LE
4072 arr.writeUInt16BE = BP.writeUInt16BE
4073 arr.writeUInt32LE = BP.writeUInt32LE
4074 arr.writeUInt32BE = BP.writeUInt32BE
4075 arr.writeIntLE = BP.writeIntLE
4076 arr.writeIntBE = BP.writeIntBE
4077 arr.writeInt8 = BP.writeInt8
4078 arr.writeInt16LE = BP.writeInt16LE
4079 arr.writeInt16BE = BP.writeInt16BE
4080 arr.writeInt32LE = BP.writeInt32LE
4081 arr.writeInt32BE = BP.writeInt32BE
4082 arr.writeFloatLE = BP.writeFloatLE
4083 arr.writeFloatBE = BP.writeFloatBE
4084 arr.writeDoubleLE = BP.writeDoubleLE
4085 arr.writeDoubleBE = BP.writeDoubleBE
4086 arr.fill = BP.fill
4087 arr.inspect = BP.inspect
4088 arr.toArrayBuffer = BP.toArrayBuffer
4089
4090 return arr
4091 }
4092
4093 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4094
4095 function base64clean (str) {
4096 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4097 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4098 // Node converts strings with length < 2 to ''
4099 if (str.length < 2) return ''
4100 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4101 while (str.length % 4 !== 0) {
4102 str = str + '='
4103 }
4104 return str
4105 }
4106
4107 function stringtrim (str) {
4108 if (str.trim) return str.trim()
4109 return str.replace(/^\s+|\s+$/g, '')
4110 }
4111
4112 function toHex (n) {
4113 if (n < 16) return '0' + n.toString(16)
4114 return n.toString(16)
4115 }
4116
4117 function utf8ToBytes (string, units) {
4118 units = units || Infinity
4119 var codePoint
4120 var length = string.length
4121 var leadSurrogate = null
4122 var bytes = []
4123
4124 for (var i = 0; i < length; i++) {
4125 codePoint = string.charCodeAt(i)
4126
4127 // is surrogate component
4128 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4129 // last char was a lead
4130 if (!leadSurrogate) {
4131 // no lead yet
4132 if (codePoint > 0xDBFF) {
4133 // unexpected trail
4134 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4135 continue
4136
4137 } else if (i + 1 === length) {
4138 // unpaired lead
4139 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4140 continue
4141 }
4142
4143 // valid lead
4144 leadSurrogate = codePoint
4145
4146 continue
4147 }
4148
4149 // 2 leads in a row
4150 if (codePoint < 0xDC00) {
4151 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4152 leadSurrogate = codePoint
4153 continue
4154 }
4155
4156 // valid surrogate pair
4157 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4158
4159 } else if (leadSurrogate) {
4160 // valid bmp char, but last char was a lead
4161 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4162 }
4163
4164 leadSurrogate = null
4165
4166 // encode utf8
4167 if (codePoint < 0x80) {
4168 if ((units -= 1) < 0) break
4169 bytes.push(codePoint)
4170 } else if (codePoint < 0x800) {
4171 if ((units -= 2) < 0) break
4172 bytes.push(
4173 codePoint >> 0x6 | 0xC0,
4174 codePoint & 0x3F | 0x80
4175 )
4176 } else if (codePoint < 0x10000) {
4177 if ((units -= 3) < 0) break
4178 bytes.push(
4179 codePoint >> 0xC | 0xE0,
4180 codePoint >> 0x6 & 0x3F | 0x80,
4181 codePoint & 0x3F | 0x80
4182 )
4183 } else if (codePoint < 0x110000) {
4184 if ((units -= 4) < 0) break
4185 bytes.push(
4186 codePoint >> 0x12 | 0xF0,
4187 codePoint >> 0xC & 0x3F | 0x80,
4188 codePoint >> 0x6 & 0x3F | 0x80,
4189 codePoint & 0x3F | 0x80
4190 )
4191 } else {
4192 throw new Error('Invalid code point')
4193 }
4194 }
4195
4196 return bytes
4197 }
4198
4199 function asciiToBytes (str) {
4200 var byteArray = []
4201 for (var i = 0; i < str.length; i++) {
4202 // Node's code seems to be doing this and not & 0x7F..
4203 byteArray.push(str.charCodeAt(i) & 0xFF)
4204 }
4205 return byteArray
4206 }
4207
4208 function utf16leToBytes (str, units) {
4209 var c, hi, lo
4210 var byteArray = []
4211 for (var i = 0; i < str.length; i++) {
4212 if ((units -= 2) < 0) break
4213
4214 c = str.charCodeAt(i)
4215 hi = c >> 8
4216 lo = c % 256
4217 byteArray.push(lo)
4218 byteArray.push(hi)
4219 }
4220
4221 return byteArray
4222 }
4223
4224 function base64ToBytes (str) {
4225 return base64.toByteArray(base64clean(str))
4226 }
4227
4228 function blitBuffer (src, dst, offset, length) {
4229 for (var i = 0; i < length; i++) {
4230 if ((i + offset >= dst.length) || (i >= src.length)) break
4231 dst[i + offset] = src[i]
4232 }
4233 return i
4234 }
4235
4236 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4237 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4238
4239 ;(function (exports) {
4240 'use strict';
4241
4242 var Arr = (typeof Uint8Array !== 'undefined')
4243 ? Uint8Array
4244 : Array
4245
4246 var PLUS = '+'.charCodeAt(0)
4247 var SLASH = '/'.charCodeAt(0)
4248 var NUMBER = '0'.charCodeAt(0)
4249 var LOWER = 'a'.charCodeAt(0)
4250 var UPPER = 'A'.charCodeAt(0)
4251 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4252 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4253
4254 function decode (elt) {
4255 var code = elt.charCodeAt(0)
4256 if (code === PLUS ||
4257 code === PLUS_URL_SAFE)
4258 return 62 // '+'
4259 if (code === SLASH ||
4260 code === SLASH_URL_SAFE)
4261 return 63 // '/'
4262 if (code < NUMBER)
4263 return -1 //no match
4264 if (code < NUMBER + 10)
4265 return code - NUMBER + 26 + 26
4266 if (code < UPPER + 26)
4267 return code - UPPER
4268 if (code < LOWER + 26)
4269 return code - LOWER + 26
4270 }
4271
4272 function b64ToByteArray (b64) {
4273 var i, j, l, tmp, placeHolders, arr
4274
4275 if (b64.length % 4 > 0) {
4276 throw new Error('Invalid string. Length must be a multiple of 4')
4277 }
4278
4279 // the number of equal signs (place holders)
4280 // if there are two placeholders, than the two characters before it
4281 // represent one byte
4282 // if there is only one, then the three characters before it represent 2 bytes
4283 // this is just a cheap hack to not do indexOf twice
4284 var len = b64.length
4285 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4286
4287 // base64 is 4/3 + up to two characters of the original data
4288 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4289
4290 // if there are placeholders, only get up to the last complete 4 chars
4291 l = placeHolders > 0 ? b64.length - 4 : b64.length
4292
4293 var L = 0
4294
4295 function push (v) {
4296 arr[L++] = v
4297 }
4298
4299 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4300 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4301 push((tmp & 0xFF0000) >> 16)
4302 push((tmp & 0xFF00) >> 8)
4303 push(tmp & 0xFF)
4304 }
4305
4306 if (placeHolders === 2) {
4307 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4308 push(tmp & 0xFF)
4309 } else if (placeHolders === 1) {
4310 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4311 push((tmp >> 8) & 0xFF)
4312 push(tmp & 0xFF)
4313 }
4314
4315 return arr
4316 }
4317
4318 function uint8ToBase64 (uint8) {
4319 var i,
4320 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4321 output = "",
4322 temp, length
4323
4324 function encode (num) {
4325 return lookup.charAt(num)
4326 }
4327
4328 function tripletToBase64 (num) {
4329 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4330 }
4331
4332 // go through the array every three bytes, we'll deal with trailing stuff later
4333 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4334 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4335 output += tripletToBase64(temp)
4336 }
4337
4338 // pad the end with zeros, but make sure to not forget the extra bytes
4339 switch (extraBytes) {
4340 case 1:
4341 temp = uint8[uint8.length - 1]
4342 output += encode(temp >> 2)
4343 output += encode((temp << 4) & 0x3F)
4344 output += '=='
4345 break
4346 case 2:
4347 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4348 output += encode(temp >> 10)
4349 output += encode((temp >> 4) & 0x3F)
4350 output += encode((temp << 2) & 0x3F)
4351 output += '='
4352 break
4353 }
4354
4355 return output
4356 }
4357
4358 exports.toByteArray = b64ToByteArray
4359 exports.fromByteArray = uint8ToBase64
4360 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4361
4362 },{}],9:[function(require,module,exports){
4363 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4364 var e, m
4365 var eLen = nBytes * 8 - mLen - 1
4366 var eMax = (1 << eLen) - 1
4367 var eBias = eMax >> 1
4368 var nBits = -7
4369 var i = isLE ? (nBytes - 1) : 0
4370 var d = isLE ? -1 : 1
4371 var s = buffer[offset + i]
4372
4373 i += d
4374
4375 e = s & ((1 << (-nBits)) - 1)
4376 s >>= (-nBits)
4377 nBits += eLen
4378 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4379
4380 m = e & ((1 << (-nBits)) - 1)
4381 e >>= (-nBits)
4382 nBits += mLen
4383 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4384
4385 if (e === 0) {
4386 e = 1 - eBias
4387 } else if (e === eMax) {
4388 return m ? NaN : ((s ? -1 : 1) * Infinity)
4389 } else {
4390 m = m + Math.pow(2, mLen)
4391 e = e - eBias
4392 }
4393 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4394 }
4395
4396 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4397 var e, m, c
4398 var eLen = nBytes * 8 - mLen - 1
4399 var eMax = (1 << eLen) - 1
4400 var eBias = eMax >> 1
4401 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4402 var i = isLE ? 0 : (nBytes - 1)
4403 var d = isLE ? 1 : -1
4404 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4405
4406 value = Math.abs(value)
4407
4408 if (isNaN(value) || value === Infinity) {
4409 m = isNaN(value) ? 1 : 0
4410 e = eMax
4411 } else {
4412 e = Math.floor(Math.log(value) / Math.LN2)
4413 if (value * (c = Math.pow(2, -e)) < 1) {
4414 e--
4415 c *= 2
4416 }
4417 if (e + eBias >= 1) {
4418 value += rt / c
4419 } else {
4420 value += rt * Math.pow(2, 1 - eBias)
4421 }
4422 if (value * c >= 2) {
4423 e++
4424 c /= 2
4425 }
4426
4427 if (e + eBias >= eMax) {
4428 m = 0
4429 e = eMax
4430 } else if (e + eBias >= 1) {
4431 m = (value * c - 1) * Math.pow(2, mLen)
4432 e = e + eBias
4433 } else {
4434 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4435 e = 0
4436 }
4437 }
4438
4439 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4440
4441 e = (e << mLen) | m
4442 eLen += mLen
4443 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4444
4445 buffer[offset + i - d] |= s * 128
4446 }
4447
4448 },{}],10:[function(require,module,exports){
4449
4450 /**
4451 * isArray
4452 */
4453
4454 var isArray = Array.isArray;
4455
4456 /**
4457 * toString
4458 */
4459
4460 var str = Object.prototype.toString;
4461
4462 /**
4463 * Whether or not the given `val`
4464 * is an array.
4465 *
4466 * example:
4467 *
4468 * isArray([]);
4469 * // > true
4470 * isArray(arguments);
4471 * // > false
4472 * isArray('');
4473 * // > false
4474 *
4475 * @param {mixed} val
4476 * @return {bool}
4477 */
4478
4479 module.exports = isArray || function (val) {
4480 return !! val && '[object Array]' == str.call(val);
4481 };
4482
4483 },{}],11:[function(require,module,exports){
4484 // Copyright Joyent, Inc. and other Node contributors.
4485 //
4486 // Permission is hereby granted, free of charge, to any person obtaining a
4487 // copy of this software and associated documentation files (the
4488 // "Software"), to deal in the Software without restriction, including
4489 // without limitation the rights to use, copy, modify, merge, publish,
4490 // distribute, sublicense, and/or sell copies of the Software, and to permit
4491 // persons to whom the Software is furnished to do so, subject to the
4492 // following conditions:
4493 //
4494 // The above copyright notice and this permission notice shall be included
4495 // in all copies or substantial portions of the Software.
4496 //
4497 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4498 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4499 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4500 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4501 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4502 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4503 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4504
4505 function EventEmitter() {
4506 this._events = this._events || {};
4507 this._maxListeners = this._maxListeners || undefined;
4508 }
4509 module.exports = EventEmitter;
4510
4511 // Backwards-compat with node 0.10.x
4512 EventEmitter.EventEmitter = EventEmitter;
4513
4514 EventEmitter.prototype._events = undefined;
4515 EventEmitter.prototype._maxListeners = undefined;
4516
4517 // By default EventEmitters will print a warning if more than 10 listeners are
4518 // added to it. This is a useful default which helps finding memory leaks.
4519 EventEmitter.defaultMaxListeners = 10;
4520
4521 // Obviously not all Emitters should be limited to 10. This function allows
4522 // that to be increased. Set to zero for unlimited.
4523 EventEmitter.prototype.setMaxListeners = function(n) {
4524 if (!isNumber(n) || n < 0 || isNaN(n))
4525 throw TypeError('n must be a positive number');
4526 this._maxListeners = n;
4527 return this;
4528 };
4529
4530 EventEmitter.prototype.emit = function(type) {
4531 var er, handler, len, args, i, listeners;
4532
4533 if (!this._events)
4534 this._events = {};
4535
4536 // If there is no 'error' event listener then throw.
4537 if (type === 'error') {
4538 if (!this._events.error ||
4539 (isObject(this._events.error) && !this._events.error.length)) {
4540 er = arguments[1];
4541 if (er instanceof Error) {
4542 throw er; // Unhandled 'error' event
4543 }
4544 throw TypeError('Uncaught, unspecified "error" event.');
4545 }
4546 }
4547
4548 handler = this._events[type];
4549
4550 if (isUndefined(handler))
4551 return false;
4552
4553 if (isFunction(handler)) {
4554 switch (arguments.length) {
4555 // fast cases
4556 case 1:
4557 handler.call(this);
4558 break;
4559 case 2:
4560 handler.call(this, arguments[1]);
4561 break;
4562 case 3:
4563 handler.call(this, arguments[1], arguments[2]);
4564 break;
4565 // slower
4566 default:
4567 len = arguments.length;
4568 args = new Array(len - 1);
4569 for (i = 1; i < len; i++)
4570 args[i - 1] = arguments[i];
4571 handler.apply(this, args);
4572 }
4573 } else if (isObject(handler)) {
4574 len = arguments.length;
4575 args = new Array(len - 1);
4576 for (i = 1; i < len; i++)
4577 args[i - 1] = arguments[i];
4578
4579 listeners = handler.slice();
4580 len = listeners.length;
4581 for (i = 0; i < len; i++)
4582 listeners[i].apply(this, args);
4583 }
4584
4585 return true;
4586 };
4587
4588 EventEmitter.prototype.addListener = function(type, listener) {
4589 var m;
4590
4591 if (!isFunction(listener))
4592 throw TypeError('listener must be a function');
4593
4594 if (!this._events)
4595 this._events = {};
4596
4597 // To avoid recursion in the case that type === "newListener"! Before
4598 // adding it to the listeners, first emit "newListener".
4599 if (this._events.newListener)
4600 this.emit('newListener', type,
4601 isFunction(listener.listener) ?
4602 listener.listener : listener);
4603
4604 if (!this._events[type])
4605 // Optimize the case of one listener. Don't need the extra array object.
4606 this._events[type] = listener;
4607 else if (isObject(this._events[type]))
4608 // If we've already got an array, just append.
4609 this._events[type].push(listener);
4610 else
4611 // Adding the second element, need to change to array.
4612 this._events[type] = [this._events[type], listener];
4613
4614 // Check for listener leak
4615 if (isObject(this._events[type]) && !this._events[type].warned) {
4616 var m;
4617 if (!isUndefined(this._maxListeners)) {
4618 m = this._maxListeners;
4619 } else {
4620 m = EventEmitter.defaultMaxListeners;
4621 }
4622
4623 if (m && m > 0 && this._events[type].length > m) {
4624 this._events[type].warned = true;
4625 console.error('(node) warning: possible EventEmitter memory ' +
4626 'leak detected. %d listeners added. ' +
4627 'Use emitter.setMaxListeners() to increase limit.',
4628 this._events[type].length);
4629 if (typeof console.trace === 'function') {
4630 // not supported in IE 10
4631 console.trace();
4632 }
4633 }
4634 }
4635
4636 return this;
4637 };
4638
4639 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4640
4641 EventEmitter.prototype.once = function(type, listener) {
4642 if (!isFunction(listener))
4643 throw TypeError('listener must be a function');
4644
4645 var fired = false;
4646
4647 function g() {
4648 this.removeListener(type, g);
4649
4650 if (!fired) {
4651 fired = true;
4652 listener.apply(this, arguments);
4653 }
4654 }
4655
4656 g.listener = listener;
4657 this.on(type, g);
4658
4659 return this;
4660 };
4661
4662 // emits a 'removeListener' event iff the listener was removed
4663 EventEmitter.prototype.removeListener = function(type, listener) {
4664 var list, position, length, i;
4665
4666 if (!isFunction(listener))
4667 throw TypeError('listener must be a function');
4668
4669 if (!this._events || !this._events[type])
4670 return this;
4671
4672 list = this._events[type];
4673 length = list.length;
4674 position = -1;
4675
4676 if (list === listener ||
4677 (isFunction(list.listener) && list.listener === listener)) {
4678 delete this._events[type];
4679 if (this._events.removeListener)
4680 this.emit('removeListener', type, listener);
4681
4682 } else if (isObject(list)) {
4683 for (i = length; i-- > 0;) {
4684 if (list[i] === listener ||
4685 (list[i].listener && list[i].listener === listener)) {
4686 position = i;
4687 break;
4688 }
4689 }
4690
4691 if (position < 0)
4692 return this;
4693
4694 if (list.length === 1) {
4695 list.length = 0;
4696 delete this._events[type];
4697 } else {
4698 list.splice(position, 1);
4699 }
4700
4701 if (this._events.removeListener)
4702 this.emit('removeListener', type, listener);
4703 }
4704
4705 return this;
4706 };
4707
4708 EventEmitter.prototype.removeAllListeners = function(type) {
4709 var key, listeners;
4710
4711 if (!this._events)
4712 return this;
4713
4714 // not listening for removeListener, no need to emit
4715 if (!this._events.removeListener) {
4716 if (arguments.length === 0)
4717 this._events = {};
4718 else if (this._events[type])
4719 delete this._events[type];
4720 return this;
4721 }
4722
4723 // emit removeListener for all listeners on all events
4724 if (arguments.length === 0) {
4725 for (key in this._events) {
4726 if (key === 'removeListener') continue;
4727 this.removeAllListeners(key);
4728 }
4729 this.removeAllListeners('removeListener');
4730 this._events = {};
4731 return this;
4732 }
4733
4734 listeners = this._events[type];
4735
4736 if (isFunction(listeners)) {
4737 this.removeListener(type, listeners);
4738 } else {
4739 // LIFO order
4740 while (listeners.length)
4741 this.removeListener(type, listeners[listeners.length - 1]);
4742 }
4743 delete this._events[type];
4744
4745 return this;
4746 };
4747
4748 EventEmitter.prototype.listeners = function(type) {
4749 var ret;
4750 if (!this._events || !this._events[type])
4751 ret = [];
4752 else if (isFunction(this._events[type]))
4753 ret = [this._events[type]];
4754 else
4755 ret = this._events[type].slice();
4756 return ret;
4757 };
4758
4759 EventEmitter.listenerCount = function(emitter, type) {
4760 var ret;
4761 if (!emitter._events || !emitter._events[type])
4762 ret = 0;
4763 else if (isFunction(emitter._events[type]))
4764 ret = 1;
4765 else
4766 ret = emitter._events[type].length;
4767 return ret;
4768 };
4769
4770 function isFunction(arg) {
4771 return typeof arg === 'function';
4772 }
4773
4774 function isNumber(arg) {
4775 return typeof arg === 'number';
4776 }
4777
4778 function isObject(arg) {
4779 return typeof arg === 'object' && arg !== null;
4780 }
4781
4782 function isUndefined(arg) {
4783 return arg === void 0;
4784 }
4785
4786 },{}],12:[function(require,module,exports){
4787 if (typeof Object.create === 'function') {
4788 // implementation from standard node.js 'util' module
4789 module.exports = function inherits(ctor, superCtor) {
4790 ctor.super_ = superCtor
4791 ctor.prototype = Object.create(superCtor.prototype, {
4792 constructor: {
4793 value: ctor,
4794 enumerable: false,
4795 writable: true,
4796 configurable: true
4797 }
4798 });
4799 };
4800 } else {
4801 // old school shim for old browsers
4802 module.exports = function inherits(ctor, superCtor) {
4803 ctor.super_ = superCtor
4804 var TempCtor = function () {}
4805 TempCtor.prototype = superCtor.prototype
4806 ctor.prototype = new TempCtor()
4807 ctor.prototype.constructor = ctor
4808 }
4809 }
4810
4811 },{}],13:[function(require,module,exports){
4812 module.exports = Array.isArray || function (arr) {
4813 return Object.prototype.toString.call(arr) == '[object Array]';
4814 };
4815
4816 },{}],14:[function(require,module,exports){
4817 // shim for using process in browser
4818
4819 var process = module.exports = {};
4820 var queue = [];
4821 var draining = false;
4822 var currentQueue;
4823 var queueIndex = -1;
4824
4825 function cleanUpNextTick() {
4826 draining = false;
4827 if (currentQueue.length) {
4828 queue = currentQueue.concat(queue);
4829 } else {
4830 queueIndex = -1;
4831 }
4832 if (queue.length) {
4833 drainQueue();
4834 }
4835 }
4836
4837 function drainQueue() {
4838 if (draining) {
4839 return;
4840 }
4841 var timeout = setTimeout(cleanUpNextTick);
4842 draining = true;
4843
4844 var len = queue.length;
4845 while(len) {
4846 currentQueue = queue;
4847 queue = [];
4848 while (++queueIndex < len) {
4849 currentQueue[queueIndex].run();
4850 }
4851 queueIndex = -1;
4852 len = queue.length;
4853 }
4854 currentQueue = null;
4855 draining = false;
4856 clearTimeout(timeout);
4857 }
4858
4859 process.nextTick = function (fun) {
4860 var args = new Array(arguments.length - 1);
4861 if (arguments.length > 1) {
4862 for (var i = 1; i < arguments.length; i++) {
4863 args[i - 1] = arguments[i];
4864 }
4865 }
4866 queue.push(new Item(fun, args));
4867 if (queue.length === 1 && !draining) {
4868 setTimeout(drainQueue, 0);
4869 }
4870 };
4871
4872 // v8 likes predictible objects
4873 function Item(fun, array) {
4874 this.fun = fun;
4875 this.array = array;
4876 }
4877 Item.prototype.run = function () {
4878 this.fun.apply(null, this.array);
4879 };
4880 process.title = 'browser';
4881 process.browser = true;
4882 process.env = {};
4883 process.argv = [];
4884 process.version = ''; // empty string to avoid regexp issues
4885 process.versions = {};
4886
4887 function noop() {}
4888
4889 process.on = noop;
4890 process.addListener = noop;
4891 process.once = noop;
4892 process.off = noop;
4893 process.removeListener = noop;
4894 process.removeAllListeners = noop;
4895 process.emit = noop;
4896
4897 process.binding = function (name) {
4898 throw new Error('process.binding is not supported');
4899 };
4900
4901 // TODO(shtylman)
4902 process.cwd = function () { return '/' };
4903 process.chdir = function (dir) {
4904 throw new Error('process.chdir is not supported');
4905 };
4906 process.umask = function() { return 0; };
4907
4908 },{}],15:[function(require,module,exports){
4909 module.exports = require("./lib/_stream_duplex.js")
4910
4911 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4912 (function (process){
4913 // Copyright Joyent, Inc. and other Node contributors.
4914 //
4915 // Permission is hereby granted, free of charge, to any person obtaining a
4916 // copy of this software and associated documentation files (the
4917 // "Software"), to deal in the Software without restriction, including
4918 // without limitation the rights to use, copy, modify, merge, publish,
4919 // distribute, sublicense, and/or sell copies of the Software, and to permit
4920 // persons to whom the Software is furnished to do so, subject to the
4921 // following conditions:
4922 //
4923 // The above copyright notice and this permission notice shall be included
4924 // in all copies or substantial portions of the Software.
4925 //
4926 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4927 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4928 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4929 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4930 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4931 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4932 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4933
4934 // a duplex stream is just a stream that is both readable and writable.
4935 // Since JS doesn't have multiple prototypal inheritance, this class
4936 // prototypally inherits from Readable, and then parasitically from
4937 // Writable.
4938
4939 module.exports = Duplex;
4940
4941 /*<replacement>*/
4942 var objectKeys = Object.keys || function (obj) {
4943 var keys = [];
4944 for (var key in obj) keys.push(key);
4945 return keys;
4946 }
4947 /*</replacement>*/
4948
4949
4950 /*<replacement>*/
4951 var util = require('core-util-is');
4952 util.inherits = require('inherits');
4953 /*</replacement>*/
4954
4955 var Readable = require('./_stream_readable');
4956 var Writable = require('./_stream_writable');
4957
4958 util.inherits(Duplex, Readable);
4959
4960 forEach(objectKeys(Writable.prototype), function(method) {
4961 if (!Duplex.prototype[method])
4962 Duplex.prototype[method] = Writable.prototype[method];
4963 });
4964
4965 function Duplex(options) {
4966 if (!(this instanceof Duplex))
4967 return new Duplex(options);
4968
4969 Readable.call(this, options);
4970 Writable.call(this, options);
4971
4972 if (options && options.readable === false)
4973 this.readable = false;
4974
4975 if (options && options.writable === false)
4976 this.writable = false;
4977
4978 this.allowHalfOpen = true;
4979 if (options && options.allowHalfOpen === false)
4980 this.allowHalfOpen = false;
4981
4982 this.once('end', onend);
4983 }
4984
4985 // the no-half-open enforcer
4986 function onend() {
4987 // if we allow half-open state, or if the writable side ended,
4988 // then we're ok.
4989 if (this.allowHalfOpen || this._writableState.ended)
4990 return;
4991
4992 // no more data can be written.
4993 // But allow more writes to happen in this tick.
4994 process.nextTick(this.end.bind(this));
4995 }
4996
4997 function forEach (xs, f) {
4998 for (var i = 0, l = xs.length; i < l; i++) {
4999 f(xs[i], i);
5000 }
5001 }
5002
5003 }).call(this,require('_process'))
5004 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5005 // Copyright Joyent, Inc. and other Node contributors.
5006 //
5007 // Permission is hereby granted, free of charge, to any person obtaining a
5008 // copy of this software and associated documentation files (the
5009 // "Software"), to deal in the Software without restriction, including
5010 // without limitation the rights to use, copy, modify, merge, publish,
5011 // distribute, sublicense, and/or sell copies of the Software, and to permit
5012 // persons to whom the Software is furnished to do so, subject to the
5013 // following conditions:
5014 //
5015 // The above copyright notice and this permission notice shall be included
5016 // in all copies or substantial portions of the Software.
5017 //
5018 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5019 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5020 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5021 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5022 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5023 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5024 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5025
5026 // a passthrough stream.
5027 // basically just the most minimal sort of Transform stream.
5028 // Every written chunk gets output as-is.
5029
5030 module.exports = PassThrough;
5031
5032 var Transform = require('./_stream_transform');
5033
5034 /*<replacement>*/
5035 var util = require('core-util-is');
5036 util.inherits = require('inherits');
5037 /*</replacement>*/
5038
5039 util.inherits(PassThrough, Transform);
5040
5041 function PassThrough(options) {
5042 if (!(this instanceof PassThrough))
5043 return new PassThrough(options);
5044
5045 Transform.call(this, options);
5046 }
5047
5048 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5049 cb(null, chunk);
5050 };
5051
5052 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5053 (function (process){
5054 // Copyright Joyent, Inc. and other Node contributors.
5055 //
5056 // Permission is hereby granted, free of charge, to any person obtaining a
5057 // copy of this software and associated documentation files (the
5058 // "Software"), to deal in the Software without restriction, including
5059 // without limitation the rights to use, copy, modify, merge, publish,
5060 // distribute, sublicense, and/or sell copies of the Software, and to permit
5061 // persons to whom the Software is furnished to do so, subject to the
5062 // following conditions:
5063 //
5064 // The above copyright notice and this permission notice shall be included
5065 // in all copies or substantial portions of the Software.
5066 //
5067 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5068 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5069 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5070 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5071 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5072 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5073 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5074
5075 module.exports = Readable;
5076
5077 /*<replacement>*/
5078 var isArray = require('isarray');
5079 /*</replacement>*/
5080
5081
5082 /*<replacement>*/
5083 var Buffer = require('buffer').Buffer;
5084 /*</replacement>*/
5085
5086 Readable.ReadableState = ReadableState;
5087
5088 var EE = require('events').EventEmitter;
5089
5090 /*<replacement>*/
5091 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5092 return emitter.listeners(type).length;
5093 };
5094 /*</replacement>*/
5095
5096 var Stream = require('stream');
5097
5098 /*<replacement>*/
5099 var util = require('core-util-is');
5100 util.inherits = require('inherits');
5101 /*</replacement>*/
5102
5103 var StringDecoder;
5104
5105
5106 /*<replacement>*/
5107 var debug = require('util');
5108 if (debug && debug.debuglog) {
5109 debug = debug.debuglog('stream');
5110 } else {
5111 debug = function () {};
5112 }
5113 /*</replacement>*/
5114
5115
5116 util.inherits(Readable, Stream);
5117
5118 function ReadableState(options, stream) {
5119 var Duplex = require('./_stream_duplex');
5120
5121 options = options || {};
5122
5123 // the point at which it stops calling _read() to fill the buffer
5124 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5125 var hwm = options.highWaterMark;
5126 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5127 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5128
5129 // cast to ints.
5130 this.highWaterMark = ~~this.highWaterMark;
5131
5132 this.buffer = [];
5133 this.length = 0;
5134 this.pipes = null;
5135 this.pipesCount = 0;
5136 this.flowing = null;
5137 this.ended = false;
5138 this.endEmitted = false;
5139 this.reading = false;
5140
5141 // a flag to be able to tell if the onwrite cb is called immediately,
5142 // or on a later tick. We set this to true at first, because any
5143 // actions that shouldn't happen until "later" should generally also
5144 // not happen before the first write call.
5145 this.sync = true;
5146
5147 // whenever we return null, then we set a flag to say
5148 // that we're awaiting a 'readable' event emission.
5149 this.needReadable = false;
5150 this.emittedReadable = false;
5151 this.readableListening = false;
5152
5153
5154 // object stream flag. Used to make read(n) ignore n and to
5155 // make all the buffer merging and length checks go away
5156 this.objectMode = !!options.objectMode;
5157
5158 if (stream instanceof Duplex)
5159 this.objectMode = this.objectMode || !!options.readableObjectMode;
5160
5161 // Crypto is kind of old and crusty. Historically, its default string
5162 // encoding is 'binary' so we have to make this configurable.
5163 // Everything else in the universe uses 'utf8', though.
5164 this.defaultEncoding = options.defaultEncoding || 'utf8';
5165
5166 // when piping, we only care about 'readable' events that happen
5167 // after read()ing all the bytes and not getting any pushback.
5168 this.ranOut = false;
5169
5170 // the number of writers that are awaiting a drain event in .pipe()s
5171 this.awaitDrain = 0;
5172
5173 // if true, a maybeReadMore has been scheduled
5174 this.readingMore = false;
5175
5176 this.decoder = null;
5177 this.encoding = null;
5178 if (options.encoding) {
5179 if (!StringDecoder)
5180 StringDecoder = require('string_decoder/').StringDecoder;
5181 this.decoder = new StringDecoder(options.encoding);
5182 this.encoding = options.encoding;
5183 }
5184 }
5185
5186 function Readable(options) {
5187 var Duplex = require('./_stream_duplex');
5188
5189 if (!(this instanceof Readable))
5190 return new Readable(options);
5191
5192 this._readableState = new ReadableState(options, this);
5193
5194 // legacy
5195 this.readable = true;
5196
5197 Stream.call(this);
5198 }
5199
5200 // Manually shove something into the read() buffer.
5201 // This returns true if the highWaterMark has not been hit yet,
5202 // similar to how Writable.write() returns true if you should
5203 // write() some more.
5204 Readable.prototype.push = function(chunk, encoding) {
5205 var state = this._readableState;
5206
5207 if (util.isString(chunk) && !state.objectMode) {
5208 encoding = encoding || state.defaultEncoding;
5209 if (encoding !== state.encoding) {
5210 chunk = new Buffer(chunk, encoding);
5211 encoding = '';
5212 }
5213 }
5214
5215 return readableAddChunk(this, state, chunk, encoding, false);
5216 };
5217
5218 // Unshift should *always* be something directly out of read()
5219 Readable.prototype.unshift = function(chunk) {
5220 var state = this._readableState;
5221 return readableAddChunk(this, state, chunk, '', true);
5222 };
5223
5224 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5225 var er = chunkInvalid(state, chunk);
5226 if (er) {
5227 stream.emit('error', er);
5228 } else if (util.isNullOrUndefined(chunk)) {
5229 state.reading = false;
5230 if (!state.ended)
5231 onEofChunk(stream, state);
5232 } else if (state.objectMode || chunk && chunk.length > 0) {
5233 if (state.ended && !addToFront) {
5234 var e = new Error('stream.push() after EOF');
5235 stream.emit('error', e);
5236 } else if (state.endEmitted && addToFront) {
5237 var e = new Error('stream.unshift() after end event');
5238 stream.emit('error', e);
5239 } else {
5240 if (state.decoder && !addToFront && !encoding)
5241 chunk = state.decoder.write(chunk);
5242
5243 if (!addToFront)
5244 state.reading = false;
5245
5246 // if we want the data now, just emit it.
5247 if (state.flowing && state.length === 0 && !state.sync) {
5248 stream.emit('data', chunk);
5249 stream.read(0);
5250 } else {
5251 // update the buffer info.
5252 state.length += state.objectMode ? 1 : chunk.length;
5253 if (addToFront)
5254 state.buffer.unshift(chunk);
5255 else
5256 state.buffer.push(chunk);
5257
5258 if (state.needReadable)
5259 emitReadable(stream);
5260 }
5261
5262 maybeReadMore(stream, state);
5263 }
5264 } else if (!addToFront) {
5265 state.reading = false;
5266 }
5267
5268 return needMoreData(state);
5269 }
5270
5271
5272
5273 // if it's past the high water mark, we can push in some more.
5274 // Also, if we have no data yet, we can stand some
5275 // more bytes. This is to work around cases where hwm=0,
5276 // such as the repl. Also, if the push() triggered a
5277 // readable event, and the user called read(largeNumber) such that
5278 // needReadable was set, then we ought to push more, so that another
5279 // 'readable' event will be triggered.
5280 function needMoreData(state) {
5281 return !state.ended &&
5282 (state.needReadable ||
5283 state.length < state.highWaterMark ||
5284 state.length === 0);
5285 }
5286
5287 // backwards compatibility.
5288 Readable.prototype.setEncoding = function(enc) {
5289 if (!StringDecoder)
5290 StringDecoder = require('string_decoder/').StringDecoder;
5291 this._readableState.decoder = new StringDecoder(enc);
5292 this._readableState.encoding = enc;
5293 return this;
5294 };
5295
5296 // Don't raise the hwm > 128MB
5297 var MAX_HWM = 0x800000;
5298 function roundUpToNextPowerOf2(n) {
5299 if (n >= MAX_HWM) {
5300 n = MAX_HWM;
5301 } else {
5302 // Get the next highest power of 2
5303 n--;
5304 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5305 n++;
5306 }
5307 return n;
5308 }
5309
5310 function howMuchToRead(n, state) {
5311 if (state.length === 0 && state.ended)
5312 return 0;
5313
5314 if (state.objectMode)
5315 return n === 0 ? 0 : 1;
5316
5317 if (isNaN(n) || util.isNull(n)) {
5318 // only flow one buffer at a time
5319 if (state.flowing && state.buffer.length)
5320 return state.buffer[0].length;
5321 else
5322 return state.length;
5323 }
5324
5325 if (n <= 0)
5326 return 0;
5327
5328 // If we're asking for more than the target buffer level,
5329 // then raise the water mark. Bump up to the next highest
5330 // power of 2, to prevent increasing it excessively in tiny
5331 // amounts.
5332 if (n > state.highWaterMark)
5333 state.highWaterMark = roundUpToNextPowerOf2(n);
5334
5335 // don't have that much. return null, unless we've ended.
5336 if (n > state.length) {
5337 if (!state.ended) {
5338 state.needReadable = true;
5339 return 0;
5340 } else
5341 return state.length;
5342 }
5343
5344 return n;
5345 }
5346
5347 // you can override either this method, or the async _read(n) below.
5348 Readable.prototype.read = function(n) {
5349 debug('read', n);
5350 var state = this._readableState;
5351 var nOrig = n;
5352
5353 if (!util.isNumber(n) || n > 0)
5354 state.emittedReadable = false;
5355
5356 // if we're doing read(0) to trigger a readable event, but we
5357 // already have a bunch of data in the buffer, then just trigger
5358 // the 'readable' event and move on.
5359 if (n === 0 &&
5360 state.needReadable &&
5361 (state.length >= state.highWaterMark || state.ended)) {
5362 debug('read: emitReadable', state.length, state.ended);
5363 if (state.length === 0 && state.ended)
5364 endReadable(this);
5365 else
5366 emitReadable(this);
5367 return null;
5368 }
5369
5370 n = howMuchToRead(n, state);
5371
5372 // if we've ended, and we're now clear, then finish it up.
5373 if (n === 0 && state.ended) {
5374 if (state.length === 0)
5375 endReadable(this);
5376 return null;
5377 }
5378
5379 // All the actual chunk generation logic needs to be
5380 // *below* the call to _read. The reason is that in certain
5381 // synthetic stream cases, such as passthrough streams, _read
5382 // may be a completely synchronous operation which may change
5383 // the state of the read buffer, providing enough data when
5384 // before there was *not* enough.
5385 //
5386 // So, the steps are:
5387 // 1. Figure out what the state of things will be after we do
5388 // a read from the buffer.
5389 //
5390 // 2. If that resulting state will trigger a _read, then call _read.
5391 // Note that this may be asynchronous, or synchronous. Yes, it is
5392 // deeply ugly to write APIs this way, but that still doesn't mean
5393 // that the Readable class should behave improperly, as streams are
5394 // designed to be sync/async agnostic.
5395 // Take note if the _read call is sync or async (ie, if the read call
5396 // has returned yet), so that we know whether or not it's safe to emit
5397 // 'readable' etc.
5398 //
5399 // 3. Actually pull the requested chunks out of the buffer and return.
5400
5401 // if we need a readable event, then we need to do some reading.
5402 var doRead = state.needReadable;
5403 debug('need readable', doRead);
5404
5405 // if we currently have less than the highWaterMark, then also read some
5406 if (state.length === 0 || state.length - n < state.highWaterMark) {
5407 doRead = true;
5408 debug('length less than watermark', doRead);
5409 }
5410
5411 // however, if we've ended, then there's no point, and if we're already
5412 // reading, then it's unnecessary.
5413 if (state.ended || state.reading) {
5414 doRead = false;
5415 debug('reading or ended', doRead);
5416 }
5417
5418 if (doRead) {
5419 debug('do read');
5420 state.reading = true;
5421 state.sync = true;
5422 // if the length is currently zero, then we *need* a readable event.
5423 if (state.length === 0)
5424 state.needReadable = true;
5425 // call internal read method
5426 this._read(state.highWaterMark);
5427 state.sync = false;
5428 }
5429
5430 // If _read pushed data synchronously, then `reading` will be false,
5431 // and we need to re-evaluate how much data we can return to the user.
5432 if (doRead && !state.reading)
5433 n = howMuchToRead(nOrig, state);
5434
5435 var ret;
5436 if (n > 0)
5437 ret = fromList(n, state);
5438 else
5439 ret = null;
5440
5441 if (util.isNull(ret)) {
5442 state.needReadable = true;
5443 n = 0;
5444 }
5445
5446 state.length -= n;
5447
5448 // If we have nothing in the buffer, then we want to know
5449 // as soon as we *do* get something into the buffer.
5450 if (state.length === 0 && !state.ended)
5451 state.needReadable = true;
5452
5453 // If we tried to read() past the EOF, then emit end on the next tick.
5454 if (nOrig !== n && state.ended && state.length === 0)
5455 endReadable(this);
5456
5457 if (!util.isNull(ret))
5458 this.emit('data', ret);
5459
5460 return ret;
5461 };
5462
5463 function chunkInvalid(state, chunk) {
5464 var er = null;
5465 if (!util.isBuffer(chunk) &&
5466 !util.isString(chunk) &&
5467 !util.isNullOrUndefined(chunk) &&
5468 !state.objectMode) {
5469 er = new TypeError('Invalid non-string/buffer chunk');
5470 }
5471 return er;
5472 }
5473
5474
5475 function onEofChunk(stream, state) {
5476 if (state.decoder && !state.ended) {
5477 var chunk = state.decoder.end();
5478 if (chunk && chunk.length) {
5479 state.buffer.push(chunk);
5480 state.length += state.objectMode ? 1 : chunk.length;
5481 }
5482 }
5483 state.ended = true;
5484
5485 // emit 'readable' now to make sure it gets picked up.
5486 emitReadable(stream);
5487 }
5488
5489 // Don't emit readable right away in sync mode, because this can trigger
5490 // another read() call => stack overflow. This way, it might trigger
5491 // a nextTick recursion warning, but that's not so bad.
5492 function emitReadable(stream) {
5493 var state = stream._readableState;
5494 state.needReadable = false;
5495 if (!state.emittedReadable) {
5496 debug('emitReadable', state.flowing);
5497 state.emittedReadable = true;
5498 if (state.sync)
5499 process.nextTick(function() {
5500 emitReadable_(stream);
5501 });
5502 else
5503 emitReadable_(stream);
5504 }
5505 }
5506
5507 function emitReadable_(stream) {
5508 debug('emit readable');
5509 stream.emit('readable');
5510 flow(stream);
5511 }
5512
5513
5514 // at this point, the user has presumably seen the 'readable' event,
5515 // and called read() to consume some data. that may have triggered
5516 // in turn another _read(n) call, in which case reading = true if
5517 // it's in progress.
5518 // However, if we're not ended, or reading, and the length < hwm,
5519 // then go ahead and try to read some more preemptively.
5520 function maybeReadMore(stream, state) {
5521 if (!state.readingMore) {
5522 state.readingMore = true;
5523 process.nextTick(function() {
5524 maybeReadMore_(stream, state);
5525 });
5526 }
5527 }
5528
5529 function maybeReadMore_(stream, state) {
5530 var len = state.length;
5531 while (!state.reading && !state.flowing && !state.ended &&
5532 state.length < state.highWaterMark) {
5533 debug('maybeReadMore read 0');
5534 stream.read(0);
5535 if (len === state.length)
5536 // didn't get any data, stop spinning.
5537 break;
5538 else
5539 len = state.length;
5540 }
5541 state.readingMore = false;
5542 }
5543
5544 // abstract method. to be overridden in specific implementation classes.
5545 // call cb(er, data) where data is <= n in length.
5546 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5547 // arbitrary, and perhaps not very meaningful.
5548 Readable.prototype._read = function(n) {
5549 this.emit('error', new Error('not implemented'));
5550 };
5551
5552 Readable.prototype.pipe = function(dest, pipeOpts) {
5553 var src = this;
5554 var state = this._readableState;
5555
5556 switch (state.pipesCount) {
5557 case 0:
5558 state.pipes = dest;
5559 break;
5560 case 1:
5561 state.pipes = [state.pipes, dest];
5562 break;
5563 default:
5564 state.pipes.push(dest);
5565 break;
5566 }
5567 state.pipesCount += 1;
5568 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5569
5570 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5571 dest !== process.stdout &&
5572 dest !== process.stderr;
5573
5574 var endFn = doEnd ? onend : cleanup;
5575 if (state.endEmitted)
5576 process.nextTick(endFn);
5577 else
5578 src.once('end', endFn);
5579
5580 dest.on('unpipe', onunpipe);
5581 function onunpipe(readable) {
5582 debug('onunpipe');
5583 if (readable === src) {
5584 cleanup();
5585 }
5586 }
5587
5588 function onend() {
5589 debug('onend');
5590 dest.end();
5591 }
5592
5593 // when the dest drains, it reduces the awaitDrain counter
5594 // on the source. This would be more elegant with a .once()
5595 // handler in flow(), but adding and removing repeatedly is
5596 // too slow.
5597 var ondrain = pipeOnDrain(src);
5598 dest.on('drain', ondrain);
5599
5600 function cleanup() {
5601 debug('cleanup');
5602 // cleanup event handlers once the pipe is broken
5603 dest.removeListener('close', onclose);
5604 dest.removeListener('finish', onfinish);
5605 dest.removeListener('drain', ondrain);
5606 dest.removeListener('error', onerror);
5607 dest.removeListener('unpipe', onunpipe);
5608 src.removeListener('end', onend);
5609 src.removeListener('end', cleanup);
5610 src.removeListener('data', ondata);
5611
5612 // if the reader is waiting for a drain event from this
5613 // specific writer, then it would cause it to never start
5614 // flowing again.
5615 // So, if this is awaiting a drain, then we just call it now.
5616 // If we don't know, then assume that we are waiting for one.
5617 if (state.awaitDrain &&
5618 (!dest._writableState || dest._writableState.needDrain))
5619 ondrain();
5620 }
5621
5622 src.on('data', ondata);
5623 function ondata(chunk) {
5624 debug('ondata');
5625 var ret = dest.write(chunk);
5626 if (false === ret) {
5627 debug('false write response, pause',
5628 src._readableState.awaitDrain);
5629 src._readableState.awaitDrain++;
5630 src.pause();
5631 }
5632 }
5633
5634 // if the dest has an error, then stop piping into it.
5635 // however, don't suppress the throwing behavior for this.
5636 function onerror(er) {
5637 debug('onerror', er);
5638 unpipe();
5639 dest.removeListener('error', onerror);
5640 if (EE.listenerCount(dest, 'error') === 0)
5641 dest.emit('error', er);
5642 }
5643 // This is a brutally ugly hack to make sure that our error handler
5644 // is attached before any userland ones. NEVER DO THIS.
5645 if (!dest._events || !dest._events.error)
5646 dest.on('error', onerror);
5647 else if (isArray(dest._events.error))
5648 dest._events.error.unshift(onerror);
5649 else
5650 dest._events.error = [onerror, dest._events.error];
5651
5652
5653
5654 // Both close and finish should trigger unpipe, but only once.
5655 function onclose() {
5656 dest.removeListener('finish', onfinish);
5657 unpipe();
5658 }
5659 dest.once('close', onclose);
5660 function onfinish() {
5661 debug('onfinish');
5662 dest.removeListener('close', onclose);
5663 unpipe();
5664 }
5665 dest.once('finish', onfinish);
5666
5667 function unpipe() {
5668 debug('unpipe');
5669 src.unpipe(dest);
5670 }
5671
5672 // tell the dest that it's being piped to
5673 dest.emit('pipe', src);
5674
5675 // start the flow if it hasn't been started already.
5676 if (!state.flowing) {
5677 debug('pipe resume');
5678 src.resume();
5679 }
5680
5681 return dest;
5682 };
5683
5684 function pipeOnDrain(src) {
5685 return function() {
5686 var state = src._readableState;
5687 debug('pipeOnDrain', state.awaitDrain);
5688 if (state.awaitDrain)
5689 state.awaitDrain--;
5690 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5691 state.flowing = true;
5692 flow(src);
5693 }
5694 };
5695 }
5696
5697
5698 Readable.prototype.unpipe = function(dest) {
5699 var state = this._readableState;
5700
5701 // if we're not piping anywhere, then do nothing.
5702 if (state.pipesCount === 0)
5703 return this;
5704
5705 // just one destination. most common case.
5706 if (state.pipesCount === 1) {
5707 // passed in one, but it's not the right one.
5708 if (dest && dest !== state.pipes)
5709 return this;
5710
5711 if (!dest)
5712 dest = state.pipes;
5713
5714 // got a match.
5715 state.pipes = null;
5716 state.pipesCount = 0;
5717 state.flowing = false;
5718 if (dest)
5719 dest.emit('unpipe', this);
5720 return this;
5721 }
5722
5723 // slow case. multiple pipe destinations.
5724
5725 if (!dest) {
5726 // remove all.
5727 var dests = state.pipes;
5728 var len = state.pipesCount;
5729 state.pipes = null;
5730 state.pipesCount = 0;
5731 state.flowing = false;
5732
5733 for (var i = 0; i < len; i++)
5734 dests[i].emit('unpipe', this);
5735 return this;
5736 }
5737
5738 // try to find the right one.
5739 var i = indexOf(state.pipes, dest);
5740 if (i === -1)
5741 return this;
5742
5743 state.pipes.splice(i, 1);
5744 state.pipesCount -= 1;
5745 if (state.pipesCount === 1)
5746 state.pipes = state.pipes[0];
5747
5748 dest.emit('unpipe', this);
5749
5750 return this;
5751 };
5752
5753 // set up data events if they are asked for
5754 // Ensure readable listeners eventually get something
5755 Readable.prototype.on = function(ev, fn) {
5756 var res = Stream.prototype.on.call(this, ev, fn);
5757
5758 // If listening to data, and it has not explicitly been paused,
5759 // then call resume to start the flow of data on the next tick.
5760 if (ev === 'data' && false !== this._readableState.flowing) {
5761 this.resume();
5762 }
5763
5764 if (ev === 'readable' && this.readable) {
5765 var state = this._readableState;
5766 if (!state.readableListening) {
5767 state.readableListening = true;
5768 state.emittedReadable = false;
5769 state.needReadable = true;
5770 if (!state.reading) {
5771 var self = this;
5772 process.nextTick(function() {
5773 debug('readable nexttick read 0');
5774 self.read(0);
5775 });
5776 } else if (state.length) {
5777 emitReadable(this, state);
5778 }
5779 }
5780 }
5781
5782 return res;
5783 };
5784 Readable.prototype.addListener = Readable.prototype.on;
5785
5786 // pause() and resume() are remnants of the legacy readable stream API
5787 // If the user uses them, then switch into old mode.
5788 Readable.prototype.resume = function() {
5789 var state = this._readableState;
5790 if (!state.flowing) {
5791 debug('resume');
5792 state.flowing = true;
5793 if (!state.reading) {
5794 debug('resume read 0');
5795 this.read(0);
5796 }
5797 resume(this, state);
5798 }
5799 return this;
5800 };
5801
5802 function resume(stream, state) {
5803 if (!state.resumeScheduled) {
5804 state.resumeScheduled = true;
5805 process.nextTick(function() {
5806 resume_(stream, state);
5807 });
5808 }
5809 }
5810
5811 function resume_(stream, state) {
5812 state.resumeScheduled = false;
5813 stream.emit('resume');
5814 flow(stream);
5815 if (state.flowing && !state.reading)
5816 stream.read(0);
5817 }
5818
5819 Readable.prototype.pause = function() {
5820 debug('call pause flowing=%j', this._readableState.flowing);
5821 if (false !== this._readableState.flowing) {
5822 debug('pause');
5823 this._readableState.flowing = false;
5824 this.emit('pause');
5825 }
5826 return this;
5827 };
5828
5829 function flow(stream) {
5830 var state = stream._readableState;
5831 debug('flow', state.flowing);
5832 if (state.flowing) {
5833 do {
5834 var chunk = stream.read();
5835 } while (null !== chunk && state.flowing);
5836 }
5837 }
5838
5839 // wrap an old-style stream as the async data source.
5840 // This is *not* part of the readable stream interface.
5841 // It is an ugly unfortunate mess of history.
5842 Readable.prototype.wrap = function(stream) {
5843 var state = this._readableState;
5844 var paused = false;
5845
5846 var self = this;
5847 stream.on('end', function() {
5848 debug('wrapped end');
5849 if (state.decoder && !state.ended) {
5850 var chunk = state.decoder.end();
5851 if (chunk && chunk.length)
5852 self.push(chunk);
5853 }
5854
5855 self.push(null);
5856 });
5857
5858 stream.on('data', function(chunk) {
5859 debug('wrapped data');
5860 if (state.decoder)
5861 chunk = state.decoder.write(chunk);
5862 if (!chunk || !state.objectMode && !chunk.length)
5863 return;
5864
5865 var ret = self.push(chunk);
5866 if (!ret) {
5867 paused = true;
5868 stream.pause();
5869 }
5870 });
5871
5872 // proxy all the other methods.
5873 // important when wrapping filters and duplexes.
5874 for (var i in stream) {
5875 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5876 this[i] = function(method) { return function() {
5877 return stream[method].apply(stream, arguments);
5878 }}(i);
5879 }
5880 }
5881
5882 // proxy certain important events.
5883 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5884 forEach(events, function(ev) {
5885 stream.on(ev, self.emit.bind(self, ev));
5886 });
5887
5888 // when we try to consume some more bytes, simply unpause the
5889 // underlying stream.
5890 self._read = function(n) {
5891 debug('wrapped _read', n);
5892 if (paused) {
5893 paused = false;
5894 stream.resume();
5895 }
5896 };
5897
5898 return self;
5899 };
5900
5901
5902
5903 // exposed for testing purposes only.
5904 Readable._fromList = fromList;
5905
5906 // Pluck off n bytes from an array of buffers.
5907 // Length is the combined lengths of all the buffers in the list.
5908 function fromList(n, state) {
5909 var list = state.buffer;
5910 var length = state.length;
5911 var stringMode = !!state.decoder;
5912 var objectMode = !!state.objectMode;
5913 var ret;
5914
5915 // nothing in the list, definitely empty.
5916 if (list.length === 0)
5917 return null;
5918
5919 if (length === 0)
5920 ret = null;
5921 else if (objectMode)
5922 ret = list.shift();
5923 else if (!n || n >= length) {
5924 // read it all, truncate the array.
5925 if (stringMode)
5926 ret = list.join('');
5927 else
5928 ret = Buffer.concat(list, length);
5929 list.length = 0;
5930 } else {
5931 // read just some of it.
5932 if (n < list[0].length) {
5933 // just take a part of the first list item.
5934 // slice is the same for buffers and strings.
5935 var buf = list[0];
5936 ret = buf.slice(0, n);
5937 list[0] = buf.slice(n);
5938 } else if (n === list[0].length) {
5939 // first list is a perfect match
5940 ret = list.shift();
5941 } else {
5942 // complex case.
5943 // we have enough to cover it, but it spans past the first buffer.
5944 if (stringMode)
5945 ret = '';
5946 else
5947 ret = new Buffer(n);
5948
5949 var c = 0;
5950 for (var i = 0, l = list.length; i < l && c < n; i++) {
5951 var buf = list[0];
5952 var cpy = Math.min(n - c, buf.length);
5953
5954 if (stringMode)
5955 ret += buf.slice(0, cpy);
5956 else
5957 buf.copy(ret, c, 0, cpy);
5958
5959 if (cpy < buf.length)
5960 list[0] = buf.slice(cpy);
5961 else
5962 list.shift();
5963
5964 c += cpy;
5965 }
5966 }
5967 }
5968
5969 return ret;
5970 }
5971
5972 function endReadable(stream) {
5973 var state = stream._readableState;
5974
5975 // If we get here before consuming all the bytes, then that is a
5976 // bug in node. Should never happen.
5977 if (state.length > 0)
5978 throw new Error('endReadable called on non-empty stream');
5979
5980 if (!state.endEmitted) {
5981 state.ended = true;
5982 process.nextTick(function() {
5983 // Check that we didn't get one last unshift.
5984 if (!state.endEmitted && state.length === 0) {
5985 state.endEmitted = true;
5986 stream.readable = false;
5987 stream.emit('end');
5988 }
5989 });
5990 }
5991 }
5992
5993 function forEach (xs, f) {
5994 for (var i = 0, l = xs.length; i < l; i++) {
5995 f(xs[i], i);
5996 }
5997 }
5998
5999 function indexOf (xs, x) {
6000 for (var i = 0, l = xs.length; i < l; i++) {
6001 if (xs[i] === x) return i;
6002 }
6003 return -1;
6004 }
6005
6006 }).call(this,require('_process'))
6007 },{"./_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){
6008 // Copyright Joyent, Inc. and other Node contributors.
6009 //
6010 // Permission is hereby granted, free of charge, to any person obtaining a
6011 // copy of this software and associated documentation files (the
6012 // "Software"), to deal in the Software without restriction, including
6013 // without limitation the rights to use, copy, modify, merge, publish,
6014 // distribute, sublicense, and/or sell copies of the Software, and to permit
6015 // persons to whom the Software is furnished to do so, subject to the
6016 // following conditions:
6017 //
6018 // The above copyright notice and this permission notice shall be included
6019 // in all copies or substantial portions of the Software.
6020 //
6021 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6022 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6023 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6024 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6025 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6026 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6027 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6028
6029
6030 // a transform stream is a readable/writable stream where you do
6031 // something with the data. Sometimes it's called a "filter",
6032 // but that's not a great name for it, since that implies a thing where
6033 // some bits pass through, and others are simply ignored. (That would
6034 // be a valid example of a transform, of course.)
6035 //
6036 // While the output is causally related to the input, it's not a
6037 // necessarily symmetric or synchronous transformation. For example,
6038 // a zlib stream might take multiple plain-text writes(), and then
6039 // emit a single compressed chunk some time in the future.
6040 //
6041 // Here's how this works:
6042 //
6043 // The Transform stream has all the aspects of the readable and writable
6044 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6045 // internally, and returns false if there's a lot of pending writes
6046 // buffered up. When you call read(), that calls _read(n) until
6047 // there's enough pending readable data buffered up.
6048 //
6049 // In a transform stream, the written data is placed in a buffer. When
6050 // _read(n) is called, it transforms the queued up data, calling the
6051 // buffered _write cb's as it consumes chunks. If consuming a single
6052 // written chunk would result in multiple output chunks, then the first
6053 // outputted bit calls the readcb, and subsequent chunks just go into
6054 // the read buffer, and will cause it to emit 'readable' if necessary.
6055 //
6056 // This way, back-pressure is actually determined by the reading side,
6057 // since _read has to be called to start processing a new chunk. However,
6058 // a pathological inflate type of transform can cause excessive buffering
6059 // here. For example, imagine a stream where every byte of input is
6060 // interpreted as an integer from 0-255, and then results in that many
6061 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6062 // 1kb of data being output. In this case, you could write a very small
6063 // amount of input, and end up with a very large amount of output. In
6064 // such a pathological inflating mechanism, there'd be no way to tell
6065 // the system to stop doing the transform. A single 4MB write could
6066 // cause the system to run out of memory.
6067 //
6068 // However, even in such a pathological case, only a single written chunk
6069 // would be consumed, and then the rest would wait (un-transformed) until
6070 // the results of the previous transformed chunk were consumed.
6071
6072 module.exports = Transform;
6073
6074 var Duplex = require('./_stream_duplex');
6075
6076 /*<replacement>*/
6077 var util = require('core-util-is');
6078 util.inherits = require('inherits');
6079 /*</replacement>*/
6080
6081 util.inherits(Transform, Duplex);
6082
6083
6084 function TransformState(options, stream) {
6085 this.afterTransform = function(er, data) {
6086 return afterTransform(stream, er, data);
6087 };
6088
6089 this.needTransform = false;
6090 this.transforming = false;
6091 this.writecb = null;
6092 this.writechunk = null;
6093 }
6094
6095 function afterTransform(stream, er, data) {
6096 var ts = stream._transformState;
6097 ts.transforming = false;
6098
6099 var cb = ts.writecb;
6100
6101 if (!cb)
6102 return stream.emit('error', new Error('no writecb in Transform class'));
6103
6104 ts.writechunk = null;
6105 ts.writecb = null;
6106
6107 if (!util.isNullOrUndefined(data))
6108 stream.push(data);
6109
6110 if (cb)
6111 cb(er);
6112
6113 var rs = stream._readableState;
6114 rs.reading = false;
6115 if (rs.needReadable || rs.length < rs.highWaterMark) {
6116 stream._read(rs.highWaterMark);
6117 }
6118 }
6119
6120
6121 function Transform(options) {
6122 if (!(this instanceof Transform))
6123 return new Transform(options);
6124
6125 Duplex.call(this, options);
6126
6127 this._transformState = new TransformState(options, this);
6128
6129 // when the writable side finishes, then flush out anything remaining.
6130 var stream = this;
6131
6132 // start out asking for a readable event once data is transformed.
6133 this._readableState.needReadable = true;
6134
6135 // we have implemented the _read method, and done the other things
6136 // that Readable wants before the first _read call, so unset the
6137 // sync guard flag.
6138 this._readableState.sync = false;
6139
6140 this.once('prefinish', function() {
6141 if (util.isFunction(this._flush))
6142 this._flush(function(er) {
6143 done(stream, er);
6144 });
6145 else
6146 done(stream);
6147 });
6148 }
6149
6150 Transform.prototype.push = function(chunk, encoding) {
6151 this._transformState.needTransform = false;
6152 return Duplex.prototype.push.call(this, chunk, encoding);
6153 };
6154
6155 // This is the part where you do stuff!
6156 // override this function in implementation classes.
6157 // 'chunk' is an input chunk.
6158 //
6159 // Call `push(newChunk)` to pass along transformed output
6160 // to the readable side. You may call 'push' zero or more times.
6161 //
6162 // Call `cb(err)` when you are done with this chunk. If you pass
6163 // an error, then that'll put the hurt on the whole operation. If you
6164 // never call cb(), then you'll never get another chunk.
6165 Transform.prototype._transform = function(chunk, encoding, cb) {
6166 throw new Error('not implemented');
6167 };
6168
6169 Transform.prototype._write = function(chunk, encoding, cb) {
6170 var ts = this._transformState;
6171 ts.writecb = cb;
6172 ts.writechunk = chunk;
6173 ts.writeencoding = encoding;
6174 if (!ts.transforming) {
6175 var rs = this._readableState;
6176 if (ts.needTransform ||
6177 rs.needReadable ||
6178 rs.length < rs.highWaterMark)
6179 this._read(rs.highWaterMark);
6180 }
6181 };
6182
6183 // Doesn't matter what the args are here.
6184 // _transform does all the work.
6185 // That we got here means that the readable side wants more data.
6186 Transform.prototype._read = function(n) {
6187 var ts = this._transformState;
6188
6189 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6190 ts.transforming = true;
6191 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6192 } else {
6193 // mark that we need a transform, so that any data that comes in
6194 // will get processed, now that we've asked for it.
6195 ts.needTransform = true;
6196 }
6197 };
6198
6199
6200 function done(stream, er) {
6201 if (er)
6202 return stream.emit('error', er);
6203
6204 // if there's nothing in the write buffer, then that means
6205 // that nothing more will ever be provided
6206 var ws = stream._writableState;
6207 var ts = stream._transformState;
6208
6209 if (ws.length)
6210 throw new Error('calling transform done when ws.length != 0');
6211
6212 if (ts.transforming)
6213 throw new Error('calling transform done when still transforming');
6214
6215 return stream.push(null);
6216 }
6217
6218 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6219 (function (process){
6220 // Copyright Joyent, Inc. and other Node contributors.
6221 //
6222 // Permission is hereby granted, free of charge, to any person obtaining a
6223 // copy of this software and associated documentation files (the
6224 // "Software"), to deal in the Software without restriction, including
6225 // without limitation the rights to use, copy, modify, merge, publish,
6226 // distribute, sublicense, and/or sell copies of the Software, and to permit
6227 // persons to whom the Software is furnished to do so, subject to the
6228 // following conditions:
6229 //
6230 // The above copyright notice and this permission notice shall be included
6231 // in all copies or substantial portions of the Software.
6232 //
6233 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6234 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6235 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6236 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6237 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6238 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6239 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6240
6241 // A bit simpler than readable streams.
6242 // Implement an async ._write(chunk, cb), and it'll handle all
6243 // the drain event emission and buffering.
6244
6245 module.exports = Writable;
6246
6247 /*<replacement>*/
6248 var Buffer = require('buffer').Buffer;
6249 /*</replacement>*/
6250
6251 Writable.WritableState = WritableState;
6252
6253
6254 /*<replacement>*/
6255 var util = require('core-util-is');
6256 util.inherits = require('inherits');
6257 /*</replacement>*/
6258
6259 var Stream = require('stream');
6260
6261 util.inherits(Writable, Stream);
6262
6263 function WriteReq(chunk, encoding, cb) {
6264 this.chunk = chunk;
6265 this.encoding = encoding;
6266 this.callback = cb;
6267 }
6268
6269 function WritableState(options, stream) {
6270 var Duplex = require('./_stream_duplex');
6271
6272 options = options || {};
6273
6274 // the point at which write() starts returning false
6275 // Note: 0 is a valid value, means that we always return false if
6276 // the entire buffer is not flushed immediately on write()
6277 var hwm = options.highWaterMark;
6278 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6279 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6280
6281 // object stream flag to indicate whether or not this stream
6282 // contains buffers or objects.
6283 this.objectMode = !!options.objectMode;
6284
6285 if (stream instanceof Duplex)
6286 this.objectMode = this.objectMode || !!options.writableObjectMode;
6287
6288 // cast to ints.
6289 this.highWaterMark = ~~this.highWaterMark;
6290
6291 this.needDrain = false;
6292 // at the start of calling end()
6293 this.ending = false;
6294 // when end() has been called, and returned
6295 this.ended = false;
6296 // when 'finish' is emitted
6297 this.finished = false;
6298
6299 // should we decode strings into buffers before passing to _write?
6300 // this is here so that some node-core streams can optimize string
6301 // handling at a lower level.
6302 var noDecode = options.decodeStrings === false;
6303 this.decodeStrings = !noDecode;
6304
6305 // Crypto is kind of old and crusty. Historically, its default string
6306 // encoding is 'binary' so we have to make this configurable.
6307 // Everything else in the universe uses 'utf8', though.
6308 this.defaultEncoding = options.defaultEncoding || 'utf8';
6309
6310 // not an actual buffer we keep track of, but a measurement
6311 // of how much we're waiting to get pushed to some underlying
6312 // socket or file.
6313 this.length = 0;
6314
6315 // a flag to see when we're in the middle of a write.
6316 this.writing = false;
6317
6318 // when true all writes will be buffered until .uncork() call
6319 this.corked = 0;
6320
6321 // a flag to be able to tell if the onwrite cb is called immediately,
6322 // or on a later tick. We set this to true at first, because any
6323 // actions that shouldn't happen until "later" should generally also
6324 // not happen before the first write call.
6325 this.sync = true;
6326
6327 // a flag to know if we're processing previously buffered items, which
6328 // may call the _write() callback in the same tick, so that we don't
6329 // end up in an overlapped onwrite situation.
6330 this.bufferProcessing = false;
6331
6332 // the callback that's passed to _write(chunk,cb)
6333 this.onwrite = function(er) {
6334 onwrite(stream, er);
6335 };
6336
6337 // the callback that the user supplies to write(chunk,encoding,cb)
6338 this.writecb = null;
6339
6340 // the amount that is being written when _write is called.
6341 this.writelen = 0;
6342
6343 this.buffer = [];
6344
6345 // number of pending user-supplied write callbacks
6346 // this must be 0 before 'finish' can be emitted
6347 this.pendingcb = 0;
6348
6349 // emit prefinish if the only thing we're waiting for is _write cbs
6350 // This is relevant for synchronous Transform streams
6351 this.prefinished = false;
6352
6353 // True if the error was already emitted and should not be thrown again
6354 this.errorEmitted = false;
6355 }
6356
6357 function Writable(options) {
6358 var Duplex = require('./_stream_duplex');
6359
6360 // Writable ctor is applied to Duplexes, though they're not
6361 // instanceof Writable, they're instanceof Readable.
6362 if (!(this instanceof Writable) && !(this instanceof Duplex))
6363 return new Writable(options);
6364
6365 this._writableState = new WritableState(options, this);
6366
6367 // legacy.
6368 this.writable = true;
6369
6370 Stream.call(this);
6371 }
6372
6373 // Otherwise people can pipe Writable streams, which is just wrong.
6374 Writable.prototype.pipe = function() {
6375 this.emit('error', new Error('Cannot pipe. Not readable.'));
6376 };
6377
6378
6379 function writeAfterEnd(stream, state, cb) {
6380 var er = new Error('write after end');
6381 // TODO: defer error events consistently everywhere, not just the cb
6382 stream.emit('error', er);
6383 process.nextTick(function() {
6384 cb(er);
6385 });
6386 }
6387
6388 // If we get something that is not a buffer, string, null, or undefined,
6389 // and we're not in objectMode, then that's an error.
6390 // Otherwise stream chunks are all considered to be of length=1, and the
6391 // watermarks determine how many objects to keep in the buffer, rather than
6392 // how many bytes or characters.
6393 function validChunk(stream, state, chunk, cb) {
6394 var valid = true;
6395 if (!util.isBuffer(chunk) &&
6396 !util.isString(chunk) &&
6397 !util.isNullOrUndefined(chunk) &&
6398 !state.objectMode) {
6399 var er = new TypeError('Invalid non-string/buffer chunk');
6400 stream.emit('error', er);
6401 process.nextTick(function() {
6402 cb(er);
6403 });
6404 valid = false;
6405 }
6406 return valid;
6407 }
6408
6409 Writable.prototype.write = function(chunk, encoding, cb) {
6410 var state = this._writableState;
6411 var ret = false;
6412
6413 if (util.isFunction(encoding)) {
6414 cb = encoding;
6415 encoding = null;
6416 }
6417
6418 if (util.isBuffer(chunk))
6419 encoding = 'buffer';
6420 else if (!encoding)
6421 encoding = state.defaultEncoding;
6422
6423 if (!util.isFunction(cb))
6424 cb = function() {};
6425
6426 if (state.ended)
6427 writeAfterEnd(this, state, cb);
6428 else if (validChunk(this, state, chunk, cb)) {
6429 state.pendingcb++;
6430 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6431 }
6432
6433 return ret;
6434 };
6435
6436 Writable.prototype.cork = function() {
6437 var state = this._writableState;
6438
6439 state.corked++;
6440 };
6441
6442 Writable.prototype.uncork = function() {
6443 var state = this._writableState;
6444
6445 if (state.corked) {
6446 state.corked--;
6447
6448 if (!state.writing &&
6449 !state.corked &&
6450 !state.finished &&
6451 !state.bufferProcessing &&
6452 state.buffer.length)
6453 clearBuffer(this, state);
6454 }
6455 };
6456
6457 function decodeChunk(state, chunk, encoding) {
6458 if (!state.objectMode &&
6459 state.decodeStrings !== false &&
6460 util.isString(chunk)) {
6461 chunk = new Buffer(chunk, encoding);
6462 }
6463 return chunk;
6464 }
6465
6466 // if we're already writing something, then just put this
6467 // in the queue, and wait our turn. Otherwise, call _write
6468 // If we return false, then we need a drain event, so set that flag.
6469 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6470 chunk = decodeChunk(state, chunk, encoding);
6471 if (util.isBuffer(chunk))
6472 encoding = 'buffer';
6473 var len = state.objectMode ? 1 : chunk.length;
6474
6475 state.length += len;
6476
6477 var ret = state.length < state.highWaterMark;
6478 // we must ensure that previous needDrain will not be reset to false.
6479 if (!ret)
6480 state.needDrain = true;
6481
6482 if (state.writing || state.corked)
6483 state.buffer.push(new WriteReq(chunk, encoding, cb));
6484 else
6485 doWrite(stream, state, false, len, chunk, encoding, cb);
6486
6487 return ret;
6488 }
6489
6490 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6491 state.writelen = len;
6492 state.writecb = cb;
6493 state.writing = true;
6494 state.sync = true;
6495 if (writev)
6496 stream._writev(chunk, state.onwrite);
6497 else
6498 stream._write(chunk, encoding, state.onwrite);
6499 state.sync = false;
6500 }
6501
6502 function onwriteError(stream, state, sync, er, cb) {
6503 if (sync)
6504 process.nextTick(function() {
6505 state.pendingcb--;
6506 cb(er);
6507 });
6508 else {
6509 state.pendingcb--;
6510 cb(er);
6511 }
6512
6513 stream._writableState.errorEmitted = true;
6514 stream.emit('error', er);
6515 }
6516
6517 function onwriteStateUpdate(state) {
6518 state.writing = false;
6519 state.writecb = null;
6520 state.length -= state.writelen;
6521 state.writelen = 0;
6522 }
6523
6524 function onwrite(stream, er) {
6525 var state = stream._writableState;
6526 var sync = state.sync;
6527 var cb = state.writecb;
6528
6529 onwriteStateUpdate(state);
6530
6531 if (er)
6532 onwriteError(stream, state, sync, er, cb);
6533 else {
6534 // Check if we're actually ready to finish, but don't emit yet
6535 var finished = needFinish(stream, state);
6536
6537 if (!finished &&
6538 !state.corked &&
6539 !state.bufferProcessing &&
6540 state.buffer.length) {
6541 clearBuffer(stream, state);
6542 }
6543
6544 if (sync) {
6545 process.nextTick(function() {
6546 afterWrite(stream, state, finished, cb);
6547 });
6548 } else {
6549 afterWrite(stream, state, finished, cb);
6550 }
6551 }
6552 }
6553
6554 function afterWrite(stream, state, finished, cb) {
6555 if (!finished)
6556 onwriteDrain(stream, state);
6557 state.pendingcb--;
6558 cb();
6559 finishMaybe(stream, state);
6560 }
6561
6562 // Must force callback to be called on nextTick, so that we don't
6563 // emit 'drain' before the write() consumer gets the 'false' return
6564 // value, and has a chance to attach a 'drain' listener.
6565 function onwriteDrain(stream, state) {
6566 if (state.length === 0 && state.needDrain) {
6567 state.needDrain = false;
6568 stream.emit('drain');
6569 }
6570 }
6571
6572
6573 // if there's something in the buffer waiting, then process it
6574 function clearBuffer(stream, state) {
6575 state.bufferProcessing = true;
6576
6577 if (stream._writev && state.buffer.length > 1) {
6578 // Fast case, write everything using _writev()
6579 var cbs = [];
6580 for (var c = 0; c < state.buffer.length; c++)
6581 cbs.push(state.buffer[c].callback);
6582
6583 // count the one we are adding, as well.
6584 // TODO(isaacs) clean this up
6585 state.pendingcb++;
6586 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6587 for (var i = 0; i < cbs.length; i++) {
6588 state.pendingcb--;
6589 cbs[i](err);
6590 }
6591 });
6592
6593 // Clear buffer
6594 state.buffer = [];
6595 } else {
6596 // Slow case, write chunks one-by-one
6597 for (var c = 0; c < state.buffer.length; c++) {
6598 var entry = state.buffer[c];
6599 var chunk = entry.chunk;
6600 var encoding = entry.encoding;
6601 var cb = entry.callback;
6602 var len = state.objectMode ? 1 : chunk.length;
6603
6604 doWrite(stream, state, false, len, chunk, encoding, cb);
6605
6606 // if we didn't call the onwrite immediately, then
6607 // it means that we need to wait until it does.
6608 // also, that means that the chunk and cb are currently
6609 // being processed, so move the buffer counter past them.
6610 if (state.writing) {
6611 c++;
6612 break;
6613 }
6614 }
6615
6616 if (c < state.buffer.length)
6617 state.buffer = state.buffer.slice(c);
6618 else
6619 state.buffer.length = 0;
6620 }
6621
6622 state.bufferProcessing = false;
6623 }
6624
6625 Writable.prototype._write = function(chunk, encoding, cb) {
6626 cb(new Error('not implemented'));
6627
6628 };
6629
6630 Writable.prototype._writev = null;
6631
6632 Writable.prototype.end = function(chunk, encoding, cb) {
6633 var state = this._writableState;
6634
6635 if (util.isFunction(chunk)) {
6636 cb = chunk;
6637 chunk = null;
6638 encoding = null;
6639 } else if (util.isFunction(encoding)) {
6640 cb = encoding;
6641 encoding = null;
6642 }
6643
6644 if (!util.isNullOrUndefined(chunk))
6645 this.write(chunk, encoding);
6646
6647 // .end() fully uncorks
6648 if (state.corked) {
6649 state.corked = 1;
6650 this.uncork();
6651 }
6652
6653 // ignore unnecessary end() calls.
6654 if (!state.ending && !state.finished)
6655 endWritable(this, state, cb);
6656 };
6657
6658
6659 function needFinish(stream, state) {
6660 return (state.ending &&
6661 state.length === 0 &&
6662 !state.finished &&
6663 !state.writing);
6664 }
6665
6666 function prefinish(stream, state) {
6667 if (!state.prefinished) {
6668 state.prefinished = true;
6669 stream.emit('prefinish');
6670 }
6671 }
6672
6673 function finishMaybe(stream, state) {
6674 var need = needFinish(stream, state);
6675 if (need) {
6676 if (state.pendingcb === 0) {
6677 prefinish(stream, state);
6678 state.finished = true;
6679 stream.emit('finish');
6680 } else
6681 prefinish(stream, state);
6682 }
6683 return need;
6684 }
6685
6686 function endWritable(stream, state, cb) {
6687 state.ending = true;
6688 finishMaybe(stream, state);
6689 if (cb) {
6690 if (state.finished)
6691 process.nextTick(cb);
6692 else
6693 stream.once('finish', cb);
6694 }
6695 state.ended = true;
6696 }
6697
6698 }).call(this,require('_process'))
6699 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6700 (function (Buffer){
6701 // Copyright Joyent, Inc. and other Node contributors.
6702 //
6703 // Permission is hereby granted, free of charge, to any person obtaining a
6704 // copy of this software and associated documentation files (the
6705 // "Software"), to deal in the Software without restriction, including
6706 // without limitation the rights to use, copy, modify, merge, publish,
6707 // distribute, sublicense, and/or sell copies of the Software, and to permit
6708 // persons to whom the Software is furnished to do so, subject to the
6709 // following conditions:
6710 //
6711 // The above copyright notice and this permission notice shall be included
6712 // in all copies or substantial portions of the Software.
6713 //
6714 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6715 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6716 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6717 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6718 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6719 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6720 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6721
6722 // NOTE: These type checking functions intentionally don't use `instanceof`
6723 // because it is fragile and can be easily faked with `Object.create()`.
6724 function isArray(ar) {
6725 return Array.isArray(ar);
6726 }
6727 exports.isArray = isArray;
6728
6729 function isBoolean(arg) {
6730 return typeof arg === 'boolean';
6731 }
6732 exports.isBoolean = isBoolean;
6733
6734 function isNull(arg) {
6735 return arg === null;
6736 }
6737 exports.isNull = isNull;
6738
6739 function isNullOrUndefined(arg) {
6740 return arg == null;
6741 }
6742 exports.isNullOrUndefined = isNullOrUndefined;
6743
6744 function isNumber(arg) {
6745 return typeof arg === 'number';
6746 }
6747 exports.isNumber = isNumber;
6748
6749 function isString(arg) {
6750 return typeof arg === 'string';
6751 }
6752 exports.isString = isString;
6753
6754 function isSymbol(arg) {
6755 return typeof arg === 'symbol';
6756 }
6757 exports.isSymbol = isSymbol;
6758
6759 function isUndefined(arg) {
6760 return arg === void 0;
6761 }
6762 exports.isUndefined = isUndefined;
6763
6764 function isRegExp(re) {
6765 return isObject(re) && objectToString(re) === '[object RegExp]';
6766 }
6767 exports.isRegExp = isRegExp;
6768
6769 function isObject(arg) {
6770 return typeof arg === 'object' && arg !== null;
6771 }
6772 exports.isObject = isObject;
6773
6774 function isDate(d) {
6775 return isObject(d) && objectToString(d) === '[object Date]';
6776 }
6777 exports.isDate = isDate;
6778
6779 function isError(e) {
6780 return isObject(e) &&
6781 (objectToString(e) === '[object Error]' || e instanceof Error);
6782 }
6783 exports.isError = isError;
6784
6785 function isFunction(arg) {
6786 return typeof arg === 'function';
6787 }
6788 exports.isFunction = isFunction;
6789
6790 function isPrimitive(arg) {
6791 return arg === null ||
6792 typeof arg === 'boolean' ||
6793 typeof arg === 'number' ||
6794 typeof arg === 'string' ||
6795 typeof arg === 'symbol' || // ES6 symbol
6796 typeof arg === 'undefined';
6797 }
6798 exports.isPrimitive = isPrimitive;
6799
6800 function isBuffer(arg) {
6801 return Buffer.isBuffer(arg);
6802 }
6803 exports.isBuffer = isBuffer;
6804
6805 function objectToString(o) {
6806 return Object.prototype.toString.call(o);
6807 }
6808 }).call(this,require("buffer").Buffer)
6809 },{"buffer":7}],22:[function(require,module,exports){
6810 module.exports = require("./lib/_stream_passthrough.js")
6811
6812 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6813 exports = module.exports = require('./lib/_stream_readable.js');
6814 exports.Stream = require('stream');
6815 exports.Readable = exports;
6816 exports.Writable = require('./lib/_stream_writable.js');
6817 exports.Duplex = require('./lib/_stream_duplex.js');
6818 exports.Transform = require('./lib/_stream_transform.js');
6819 exports.PassThrough = require('./lib/_stream_passthrough.js');
6820
6821 },{"./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){
6822 module.exports = require("./lib/_stream_transform.js")
6823
6824 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6825 module.exports = require("./lib/_stream_writable.js")
6826
6827 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6828 // Copyright Joyent, Inc. and other Node contributors.
6829 //
6830 // Permission is hereby granted, free of charge, to any person obtaining a
6831 // copy of this software and associated documentation files (the
6832 // "Software"), to deal in the Software without restriction, including
6833 // without limitation the rights to use, copy, modify, merge, publish,
6834 // distribute, sublicense, and/or sell copies of the Software, and to permit
6835 // persons to whom the Software is furnished to do so, subject to the
6836 // following conditions:
6837 //
6838 // The above copyright notice and this permission notice shall be included
6839 // in all copies or substantial portions of the Software.
6840 //
6841 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6842 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6843 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6844 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6845 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6846 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6847 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6848
6849 module.exports = Stream;
6850
6851 var EE = require('events').EventEmitter;
6852 var inherits = require('inherits');
6853
6854 inherits(Stream, EE);
6855 Stream.Readable = require('readable-stream/readable.js');
6856 Stream.Writable = require('readable-stream/writable.js');
6857 Stream.Duplex = require('readable-stream/duplex.js');
6858 Stream.Transform = require('readable-stream/transform.js');
6859 Stream.PassThrough = require('readable-stream/passthrough.js');
6860
6861 // Backwards-compat with node 0.4.x
6862 Stream.Stream = Stream;
6863
6864
6865
6866 // old-style streams. Note that the pipe method (the only relevant
6867 // part of this class) is overridden in the Readable class.
6868
6869 function Stream() {
6870 EE.call(this);
6871 }
6872
6873 Stream.prototype.pipe = function(dest, options) {
6874 var source = this;
6875
6876 function ondata(chunk) {
6877 if (dest.writable) {
6878 if (false === dest.write(chunk) && source.pause) {
6879 source.pause();
6880 }
6881 }
6882 }
6883
6884 source.on('data', ondata);
6885
6886 function ondrain() {
6887 if (source.readable && source.resume) {
6888 source.resume();
6889 }
6890 }
6891
6892 dest.on('drain', ondrain);
6893
6894 // If the 'end' option is not supplied, dest.end() will be called when
6895 // source gets the 'end' or 'close' events. Only dest.end() once.
6896 if (!dest._isStdio && (!options || options.end !== false)) {
6897 source.on('end', onend);
6898 source.on('close', onclose);
6899 }
6900
6901 var didOnEnd = false;
6902 function onend() {
6903 if (didOnEnd) return;
6904 didOnEnd = true;
6905
6906 dest.end();
6907 }
6908
6909
6910 function onclose() {
6911 if (didOnEnd) return;
6912 didOnEnd = true;
6913
6914 if (typeof dest.destroy === 'function') dest.destroy();
6915 }
6916
6917 // don't leave dangling pipes when there are errors.
6918 function onerror(er) {
6919 cleanup();
6920 if (EE.listenerCount(this, 'error') === 0) {
6921 throw er; // Unhandled stream error in pipe.
6922 }
6923 }
6924
6925 source.on('error', onerror);
6926 dest.on('error', onerror);
6927
6928 // remove all the event listeners that were added.
6929 function cleanup() {
6930 source.removeListener('data', ondata);
6931 dest.removeListener('drain', ondrain);
6932
6933 source.removeListener('end', onend);
6934 source.removeListener('close', onclose);
6935
6936 source.removeListener('error', onerror);
6937 dest.removeListener('error', onerror);
6938
6939 source.removeListener('end', cleanup);
6940 source.removeListener('close', cleanup);
6941
6942 dest.removeListener('close', cleanup);
6943 }
6944
6945 source.on('end', cleanup);
6946 source.on('close', cleanup);
6947
6948 dest.on('close', cleanup);
6949
6950 dest.emit('pipe', source);
6951
6952 // Allow for unix-like usage: A.pipe(B).pipe(C)
6953 return dest;
6954 };
6955
6956 },{"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){
6957 // Copyright Joyent, Inc. and other Node contributors.
6958 //
6959 // Permission is hereby granted, free of charge, to any person obtaining a
6960 // copy of this software and associated documentation files (the
6961 // "Software"), to deal in the Software without restriction, including
6962 // without limitation the rights to use, copy, modify, merge, publish,
6963 // distribute, sublicense, and/or sell copies of the Software, and to permit
6964 // persons to whom the Software is furnished to do so, subject to the
6965 // following conditions:
6966 //
6967 // The above copyright notice and this permission notice shall be included
6968 // in all copies or substantial portions of the Software.
6969 //
6970 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6971 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6972 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6973 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6974 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6975 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6976 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6977
6978 var Buffer = require('buffer').Buffer;
6979
6980 var isBufferEncoding = Buffer.isEncoding
6981 || function(encoding) {
6982 switch (encoding && encoding.toLowerCase()) {
6983 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;
6984 default: return false;
6985 }
6986 }
6987
6988
6989 function assertEncoding(encoding) {
6990 if (encoding && !isBufferEncoding(encoding)) {
6991 throw new Error('Unknown encoding: ' + encoding);
6992 }
6993 }
6994
6995 // StringDecoder provides an interface for efficiently splitting a series of
6996 // buffers into a series of JS strings without breaking apart multi-byte
6997 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6998 //
6999 // @TODO Handling all encodings inside a single object makes it very difficult
7000 // to reason about this code, so it should be split up in the future.
7001 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7002 // points as used by CESU-8.
7003 var StringDecoder = exports.StringDecoder = function(encoding) {
7004 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7005 assertEncoding(encoding);
7006 switch (this.encoding) {
7007 case 'utf8':
7008 // CESU-8 represents each of Surrogate Pair by 3-bytes
7009 this.surrogateSize = 3;
7010 break;
7011 case 'ucs2':
7012 case 'utf16le':
7013 // UTF-16 represents each of Surrogate Pair by 2-bytes
7014 this.surrogateSize = 2;
7015 this.detectIncompleteChar = utf16DetectIncompleteChar;
7016 break;
7017 case 'base64':
7018 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7019 this.surrogateSize = 3;
7020 this.detectIncompleteChar = base64DetectIncompleteChar;
7021 break;
7022 default:
7023 this.write = passThroughWrite;
7024 return;
7025 }
7026
7027 // Enough space to store all bytes of a single character. UTF-8 needs 4
7028 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7029 this.charBuffer = new Buffer(6);
7030 // Number of bytes received for the current incomplete multi-byte character.
7031 this.charReceived = 0;
7032 // Number of bytes expected for the current incomplete multi-byte character.
7033 this.charLength = 0;
7034 };
7035
7036
7037 // write decodes the given buffer and returns it as JS string that is
7038 // guaranteed to not contain any partial multi-byte characters. Any partial
7039 // character found at the end of the buffer is buffered up, and will be
7040 // returned when calling write again with the remaining bytes.
7041 //
7042 // Note: Converting a Buffer containing an orphan surrogate to a String
7043 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7044 // Buffer#write) will replace incomplete surrogates with the unicode
7045 // replacement character. See https://codereview.chromium.org/121173009/ .
7046 StringDecoder.prototype.write = function(buffer) {
7047 var charStr = '';
7048 // if our last write ended with an incomplete multibyte character
7049 while (this.charLength) {
7050 // determine how many remaining bytes this buffer has to offer for this char
7051 var available = (buffer.length >= this.charLength - this.charReceived) ?
7052 this.charLength - this.charReceived :
7053 buffer.length;
7054
7055 // add the new bytes to the char buffer
7056 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7057 this.charReceived += available;
7058
7059 if (this.charReceived < this.charLength) {
7060 // still not enough chars in this buffer? wait for more ...
7061 return '';
7062 }
7063
7064 // remove bytes belonging to the current character from the buffer
7065 buffer = buffer.slice(available, buffer.length);
7066
7067 // get the character that was split
7068 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7069
7070 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7071 var charCode = charStr.charCodeAt(charStr.length - 1);
7072 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7073 this.charLength += this.surrogateSize;
7074 charStr = '';
7075 continue;
7076 }
7077 this.charReceived = this.charLength = 0;
7078
7079 // if there are no more bytes in this buffer, just emit our char
7080 if (buffer.length === 0) {
7081 return charStr;
7082 }
7083 break;
7084 }
7085
7086 // determine and set charLength / charReceived
7087 this.detectIncompleteChar(buffer);
7088
7089 var end = buffer.length;
7090 if (this.charLength) {
7091 // buffer the incomplete character bytes we got
7092 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7093 end -= this.charReceived;
7094 }
7095
7096 charStr += buffer.toString(this.encoding, 0, end);
7097
7098 var end = charStr.length - 1;
7099 var charCode = charStr.charCodeAt(end);
7100 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7101 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7102 var size = this.surrogateSize;
7103 this.charLength += size;
7104 this.charReceived += size;
7105 this.charBuffer.copy(this.charBuffer, size, 0, size);
7106 buffer.copy(this.charBuffer, 0, 0, size);
7107 return charStr.substring(0, end);
7108 }
7109
7110 // or just emit the charStr
7111 return charStr;
7112 };
7113
7114 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7115 // the end of the given buffer. If so, it sets this.charLength to the byte
7116 // length that character, and sets this.charReceived to the number of bytes
7117 // that are available for this character.
7118 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7119 // determine how many bytes we have to check at the end of this buffer
7120 var i = (buffer.length >= 3) ? 3 : buffer.length;
7121
7122 // Figure out if one of the last i bytes of our buffer announces an
7123 // incomplete char.
7124 for (; i > 0; i--) {
7125 var c = buffer[buffer.length - i];
7126
7127 // See http://en.wikipedia.org/wiki/UTF-8#Description
7128
7129 // 110XXXXX
7130 if (i == 1 && c >> 5 == 0x06) {
7131 this.charLength = 2;
7132 break;
7133 }
7134
7135 // 1110XXXX
7136 if (i <= 2 && c >> 4 == 0x0E) {
7137 this.charLength = 3;
7138 break;
7139 }
7140
7141 // 11110XXX
7142 if (i <= 3 && c >> 3 == 0x1E) {
7143 this.charLength = 4;
7144 break;
7145 }
7146 }
7147 this.charReceived = i;
7148 };
7149
7150 StringDecoder.prototype.end = function(buffer) {
7151 var res = '';
7152 if (buffer && buffer.length)
7153 res = this.write(buffer);
7154
7155 if (this.charReceived) {
7156 var cr = this.charReceived;
7157 var buf = this.charBuffer;
7158 var enc = this.encoding;
7159 res += buf.slice(0, cr).toString(enc);
7160 }
7161
7162 return res;
7163 };
7164
7165 function passThroughWrite(buffer) {
7166 return buffer.toString(this.encoding);
7167 }
7168
7169 function utf16DetectIncompleteChar(buffer) {
7170 this.charReceived = buffer.length % 2;
7171 this.charLength = this.charReceived ? 2 : 0;
7172 }
7173
7174 function base64DetectIncompleteChar(buffer) {
7175 this.charReceived = buffer.length % 3;
7176 this.charLength = this.charReceived ? 3 : 0;
7177 }
7178
7179 },{"buffer":7}],28:[function(require,module,exports){
7180 module.exports = function isBuffer(arg) {
7181 return arg && typeof arg === 'object'
7182 && typeof arg.copy === 'function'
7183 && typeof arg.fill === 'function'
7184 && typeof arg.readUInt8 === 'function';
7185 }
7186 },{}],29:[function(require,module,exports){
7187 (function (process,global){
7188 // Copyright Joyent, Inc. and other Node contributors.
7189 //
7190 // Permission is hereby granted, free of charge, to any person obtaining a
7191 // copy of this software and associated documentation files (the
7192 // "Software"), to deal in the Software without restriction, including
7193 // without limitation the rights to use, copy, modify, merge, publish,
7194 // distribute, sublicense, and/or sell copies of the Software, and to permit
7195 // persons to whom the Software is furnished to do so, subject to the
7196 // following conditions:
7197 //
7198 // The above copyright notice and this permission notice shall be included
7199 // in all copies or substantial portions of the Software.
7200 //
7201 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7202 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7203 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7204 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7205 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7206 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7207 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7208
7209 var formatRegExp = /%[sdj%]/g;
7210 exports.format = function(f) {
7211 if (!isString(f)) {
7212 var objects = [];
7213 for (var i = 0; i < arguments.length; i++) {
7214 objects.push(inspect(arguments[i]));
7215 }
7216 return objects.join(' ');
7217 }
7218
7219 var i = 1;
7220 var args = arguments;
7221 var len = args.length;
7222 var str = String(f).replace(formatRegExp, function(x) {
7223 if (x === '%%') return '%';
7224 if (i >= len) return x;
7225 switch (x) {
7226 case '%s': return String(args[i++]);
7227 case '%d': return Number(args[i++]);
7228 case '%j':
7229 try {
7230 return JSON.stringify(args[i++]);
7231 } catch (_) {
7232 return '[Circular]';
7233 }
7234 default:
7235 return x;
7236 }
7237 });
7238 for (var x = args[i]; i < len; x = args[++i]) {
7239 if (isNull(x) || !isObject(x)) {
7240 str += ' ' + x;
7241 } else {
7242 str += ' ' + inspect(x);
7243 }
7244 }
7245 return str;
7246 };
7247
7248
7249 // Mark that a method should not be used.
7250 // Returns a modified function which warns once by default.
7251 // If --no-deprecation is set, then it is a no-op.
7252 exports.deprecate = function(fn, msg) {
7253 // Allow for deprecating things in the process of starting up.
7254 if (isUndefined(global.process)) {
7255 return function() {
7256 return exports.deprecate(fn, msg).apply(this, arguments);
7257 };
7258 }
7259
7260 if (process.noDeprecation === true) {
7261 return fn;
7262 }
7263
7264 var warned = false;
7265 function deprecated() {
7266 if (!warned) {
7267 if (process.throwDeprecation) {
7268 throw new Error(msg);
7269 } else if (process.traceDeprecation) {
7270 console.trace(msg);
7271 } else {
7272 console.error(msg);
7273 }
7274 warned = true;
7275 }
7276 return fn.apply(this, arguments);
7277 }
7278
7279 return deprecated;
7280 };
7281
7282
7283 var debugs = {};
7284 var debugEnviron;
7285 exports.debuglog = function(set) {
7286 if (isUndefined(debugEnviron))
7287 debugEnviron = process.env.NODE_DEBUG || '';
7288 set = set.toUpperCase();
7289 if (!debugs[set]) {
7290 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7291 var pid = process.pid;
7292 debugs[set] = function() {
7293 var msg = exports.format.apply(exports, arguments);
7294 console.error('%s %d: %s', set, pid, msg);
7295 };
7296 } else {
7297 debugs[set] = function() {};
7298 }
7299 }
7300 return debugs[set];
7301 };
7302
7303
7304 /**
7305 * Echos the value of a value. Trys to print the value out
7306 * in the best way possible given the different types.
7307 *
7308 * @param {Object} obj The object to print out.
7309 * @param {Object} opts Optional options object that alters the output.
7310 */
7311 /* legacy: obj, showHidden, depth, colors*/
7312 function inspect(obj, opts) {
7313 // default options
7314 var ctx = {
7315 seen: [],
7316 stylize: stylizeNoColor
7317 };
7318 // legacy...
7319 if (arguments.length >= 3) ctx.depth = arguments[2];
7320 if (arguments.length >= 4) ctx.colors = arguments[3];
7321 if (isBoolean(opts)) {
7322 // legacy...
7323 ctx.showHidden = opts;
7324 } else if (opts) {
7325 // got an "options" object
7326 exports._extend(ctx, opts);
7327 }
7328 // set default options
7329 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7330 if (isUndefined(ctx.depth)) ctx.depth = 2;
7331 if (isUndefined(ctx.colors)) ctx.colors = false;
7332 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7333 if (ctx.colors) ctx.stylize = stylizeWithColor;
7334 return formatValue(ctx, obj, ctx.depth);
7335 }
7336 exports.inspect = inspect;
7337
7338
7339 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7340 inspect.colors = {
7341 'bold' : [1, 22],
7342 'italic' : [3, 23],
7343 'underline' : [4, 24],
7344 'inverse' : [7, 27],
7345 'white' : [37, 39],
7346 'grey' : [90, 39],
7347 'black' : [30, 39],
7348 'blue' : [34, 39],
7349 'cyan' : [36, 39],
7350 'green' : [32, 39],
7351 'magenta' : [35, 39],
7352 'red' : [31, 39],
7353 'yellow' : [33, 39]
7354 };
7355
7356 // Don't use 'blue' not visible on cmd.exe
7357 inspect.styles = {
7358 'special': 'cyan',
7359 'number': 'yellow',
7360 'boolean': 'yellow',
7361 'undefined': 'grey',
7362 'null': 'bold',
7363 'string': 'green',
7364 'date': 'magenta',
7365 // "name": intentionally not styling
7366 'regexp': 'red'
7367 };
7368
7369
7370 function stylizeWithColor(str, styleType) {
7371 var style = inspect.styles[styleType];
7372
7373 if (style) {
7374 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7375 '\u001b[' + inspect.colors[style][1] + 'm';
7376 } else {
7377 return str;
7378 }
7379 }
7380
7381
7382 function stylizeNoColor(str, styleType) {
7383 return str;
7384 }
7385
7386
7387 function arrayToHash(array) {
7388 var hash = {};
7389
7390 array.forEach(function(val, idx) {
7391 hash[val] = true;
7392 });
7393
7394 return hash;
7395 }
7396
7397
7398 function formatValue(ctx, value, recurseTimes) {
7399 // Provide a hook for user-specified inspect functions.
7400 // Check that value is an object with an inspect function on it
7401 if (ctx.customInspect &&
7402 value &&
7403 isFunction(value.inspect) &&
7404 // Filter out the util module, it's inspect function is special
7405 value.inspect !== exports.inspect &&
7406 // Also filter out any prototype objects using the circular check.
7407 !(value.constructor && value.constructor.prototype === value)) {
7408 var ret = value.inspect(recurseTimes, ctx);
7409 if (!isString(ret)) {
7410 ret = formatValue(ctx, ret, recurseTimes);
7411 }
7412 return ret;
7413 }
7414
7415 // Primitive types cannot have properties
7416 var primitive = formatPrimitive(ctx, value);
7417 if (primitive) {
7418 return primitive;
7419 }
7420
7421 // Look up the keys of the object.
7422 var keys = Object.keys(value);
7423 var visibleKeys = arrayToHash(keys);
7424
7425 if (ctx.showHidden) {
7426 keys = Object.getOwnPropertyNames(value);
7427 }
7428
7429 // IE doesn't make error fields non-enumerable
7430 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7431 if (isError(value)
7432 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7433 return formatError(value);
7434 }
7435
7436 // Some type of object without properties can be shortcutted.
7437 if (keys.length === 0) {
7438 if (isFunction(value)) {
7439 var name = value.name ? ': ' + value.name : '';
7440 return ctx.stylize('[Function' + name + ']', 'special');
7441 }
7442 if (isRegExp(value)) {
7443 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7444 }
7445 if (isDate(value)) {
7446 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7447 }
7448 if (isError(value)) {
7449 return formatError(value);
7450 }
7451 }
7452
7453 var base = '', array = false, braces = ['{', '}'];
7454
7455 // Make Array say that they are Array
7456 if (isArray(value)) {
7457 array = true;
7458 braces = ['[', ']'];
7459 }
7460
7461 // Make functions say that they are functions
7462 if (isFunction(value)) {
7463 var n = value.name ? ': ' + value.name : '';
7464 base = ' [Function' + n + ']';
7465 }
7466
7467 // Make RegExps say that they are RegExps
7468 if (isRegExp(value)) {
7469 base = ' ' + RegExp.prototype.toString.call(value);
7470 }
7471
7472 // Make dates with properties first say the date
7473 if (isDate(value)) {
7474 base = ' ' + Date.prototype.toUTCString.call(value);
7475 }
7476
7477 // Make error with message first say the error
7478 if (isError(value)) {
7479 base = ' ' + formatError(value);
7480 }
7481
7482 if (keys.length === 0 && (!array || value.length == 0)) {
7483 return braces[0] + base + braces[1];
7484 }
7485
7486 if (recurseTimes < 0) {
7487 if (isRegExp(value)) {
7488 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7489 } else {
7490 return ctx.stylize('[Object]', 'special');
7491 }
7492 }
7493
7494 ctx.seen.push(value);
7495
7496 var output;
7497 if (array) {
7498 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7499 } else {
7500 output = keys.map(function(key) {
7501 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7502 });
7503 }
7504
7505 ctx.seen.pop();
7506
7507 return reduceToSingleString(output, base, braces);
7508 }
7509
7510
7511 function formatPrimitive(ctx, value) {
7512 if (isUndefined(value))
7513 return ctx.stylize('undefined', 'undefined');
7514 if (isString(value)) {
7515 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7516 .replace(/'/g, "\\'")
7517 .replace(/\\"/g, '"') + '\'';
7518 return ctx.stylize(simple, 'string');
7519 }
7520 if (isNumber(value))
7521 return ctx.stylize('' + value, 'number');
7522 if (isBoolean(value))
7523 return ctx.stylize('' + value, 'boolean');
7524 // For some reason typeof null is "object", so special case here.
7525 if (isNull(value))
7526 return ctx.stylize('null', 'null');
7527 }
7528
7529
7530 function formatError(value) {
7531 return '[' + Error.prototype.toString.call(value) + ']';
7532 }
7533
7534
7535 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7536 var output = [];
7537 for (var i = 0, l = value.length; i < l; ++i) {
7538 if (hasOwnProperty(value, String(i))) {
7539 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7540 String(i), true));
7541 } else {
7542 output.push('');
7543 }
7544 }
7545 keys.forEach(function(key) {
7546 if (!key.match(/^\d+$/)) {
7547 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7548 key, true));
7549 }
7550 });
7551 return output;
7552 }
7553
7554
7555 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7556 var name, str, desc;
7557 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7558 if (desc.get) {
7559 if (desc.set) {
7560 str = ctx.stylize('[Getter/Setter]', 'special');
7561 } else {
7562 str = ctx.stylize('[Getter]', 'special');
7563 }
7564 } else {
7565 if (desc.set) {
7566 str = ctx.stylize('[Setter]', 'special');
7567 }
7568 }
7569 if (!hasOwnProperty(visibleKeys, key)) {
7570 name = '[' + key + ']';
7571 }
7572 if (!str) {
7573 if (ctx.seen.indexOf(desc.value) < 0) {
7574 if (isNull(recurseTimes)) {
7575 str = formatValue(ctx, desc.value, null);
7576 } else {
7577 str = formatValue(ctx, desc.value, recurseTimes - 1);
7578 }
7579 if (str.indexOf('\n') > -1) {
7580 if (array) {
7581 str = str.split('\n').map(function(line) {
7582 return ' ' + line;
7583 }).join('\n').substr(2);
7584 } else {
7585 str = '\n' + str.split('\n').map(function(line) {
7586 return ' ' + line;
7587 }).join('\n');
7588 }
7589 }
7590 } else {
7591 str = ctx.stylize('[Circular]', 'special');
7592 }
7593 }
7594 if (isUndefined(name)) {
7595 if (array && key.match(/^\d+$/)) {
7596 return str;
7597 }
7598 name = JSON.stringify('' + key);
7599 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7600 name = name.substr(1, name.length - 2);
7601 name = ctx.stylize(name, 'name');
7602 } else {
7603 name = name.replace(/'/g, "\\'")
7604 .replace(/\\"/g, '"')
7605 .replace(/(^"|"$)/g, "'");
7606 name = ctx.stylize(name, 'string');
7607 }
7608 }
7609
7610 return name + ': ' + str;
7611 }
7612
7613
7614 function reduceToSingleString(output, base, braces) {
7615 var numLinesEst = 0;
7616 var length = output.reduce(function(prev, cur) {
7617 numLinesEst++;
7618 if (cur.indexOf('\n') >= 0) numLinesEst++;
7619 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7620 }, 0);
7621
7622 if (length > 60) {
7623 return braces[0] +
7624 (base === '' ? '' : base + '\n ') +
7625 ' ' +
7626 output.join(',\n ') +
7627 ' ' +
7628 braces[1];
7629 }
7630
7631 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7632 }
7633
7634
7635 // NOTE: These type checking functions intentionally don't use `instanceof`
7636 // because it is fragile and can be easily faked with `Object.create()`.
7637 function isArray(ar) {
7638 return Array.isArray(ar);
7639 }
7640 exports.isArray = isArray;
7641
7642 function isBoolean(arg) {
7643 return typeof arg === 'boolean';
7644 }
7645 exports.isBoolean = isBoolean;
7646
7647 function isNull(arg) {
7648 return arg === null;
7649 }
7650 exports.isNull = isNull;
7651
7652 function isNullOrUndefined(arg) {
7653 return arg == null;
7654 }
7655 exports.isNullOrUndefined = isNullOrUndefined;
7656
7657 function isNumber(arg) {
7658 return typeof arg === 'number';
7659 }
7660 exports.isNumber = isNumber;
7661
7662 function isString(arg) {
7663 return typeof arg === 'string';
7664 }
7665 exports.isString = isString;
7666
7667 function isSymbol(arg) {
7668 return typeof arg === 'symbol';
7669 }
7670 exports.isSymbol = isSymbol;
7671
7672 function isUndefined(arg) {
7673 return arg === void 0;
7674 }
7675 exports.isUndefined = isUndefined;
7676
7677 function isRegExp(re) {
7678 return isObject(re) && objectToString(re) === '[object RegExp]';
7679 }
7680 exports.isRegExp = isRegExp;
7681
7682 function isObject(arg) {
7683 return typeof arg === 'object' && arg !== null;
7684 }
7685 exports.isObject = isObject;
7686
7687 function isDate(d) {
7688 return isObject(d) && objectToString(d) === '[object Date]';
7689 }
7690 exports.isDate = isDate;
7691
7692 function isError(e) {
7693 return isObject(e) &&
7694 (objectToString(e) === '[object Error]' || e instanceof Error);
7695 }
7696 exports.isError = isError;
7697
7698 function isFunction(arg) {
7699 return typeof arg === 'function';
7700 }
7701 exports.isFunction = isFunction;
7702
7703 function isPrimitive(arg) {
7704 return arg === null ||
7705 typeof arg === 'boolean' ||
7706 typeof arg === 'number' ||
7707 typeof arg === 'string' ||
7708 typeof arg === 'symbol' || // ES6 symbol
7709 typeof arg === 'undefined';
7710 }
7711 exports.isPrimitive = isPrimitive;
7712
7713 exports.isBuffer = require('./support/isBuffer');
7714
7715 function objectToString(o) {
7716 return Object.prototype.toString.call(o);
7717 }
7718
7719
7720 function pad(n) {
7721 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7722 }
7723
7724
7725 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7726 'Oct', 'Nov', 'Dec'];
7727
7728 // 26 Feb 16:19:34
7729 function timestamp() {
7730 var d = new Date();
7731 var time = [pad(d.getHours()),
7732 pad(d.getMinutes()),
7733 pad(d.getSeconds())].join(':');
7734 return [d.getDate(), months[d.getMonth()], time].join(' ');
7735 }
7736
7737
7738 // log is just a thin wrapper to console.log that prepends a timestamp
7739 exports.log = function() {
7740 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7741 };
7742
7743
7744 /**
7745 * Inherit the prototype methods from one constructor into another.
7746 *
7747 * The Function.prototype.inherits from lang.js rewritten as a standalone
7748 * function (not on Function.prototype). NOTE: If this file is to be loaded
7749 * during bootstrapping this function needs to be rewritten using some native
7750 * functions as prototype setup using normal JavaScript does not work as
7751 * expected during bootstrapping (see mirror.js in r114903).
7752 *
7753 * @param {function} ctor Constructor function which needs to inherit the
7754 * prototype.
7755 * @param {function} superCtor Constructor function to inherit prototype from.
7756 */
7757 exports.inherits = require('inherits');
7758
7759 exports._extend = function(origin, add) {
7760 // Don't do anything if add isn't an object
7761 if (!add || !isObject(add)) return origin;
7762
7763 var keys = Object.keys(add);
7764 var i = keys.length;
7765 while (i--) {
7766 origin[keys[i]] = add[keys[i]];
7767 }
7768 return origin;
7769 };
7770
7771 function hasOwnProperty(obj, prop) {
7772 return Object.prototype.hasOwnProperty.call(obj, prop);
7773 }
7774
7775 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7776 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7777 // Base58 encoding/decoding
7778 // Originally written by Mike Hearn for BitcoinJ
7779 // Copyright (c) 2011 Google Inc
7780 // Ported to JavaScript by Stefan Thomas
7781 // Merged Buffer refactorings from base58-native by Stephen Pair
7782 // Copyright (c) 2013 BitPay Inc
7783
7784 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7785 var ALPHABET_MAP = {}
7786 for(var i = 0; i < ALPHABET.length; i++) {
7787 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7788 }
7789 var BASE = 58
7790
7791 function encode(buffer) {
7792 if (buffer.length === 0) return ''
7793
7794 var i, j, digits = [0]
7795 for (i = 0; i < buffer.length; i++) {
7796 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7797
7798 digits[0] += buffer[i]
7799
7800 var carry = 0
7801 for (j = 0; j < digits.length; ++j) {
7802 digits[j] += carry
7803
7804 carry = (digits[j] / BASE) | 0
7805 digits[j] %= BASE
7806 }
7807
7808 while (carry) {
7809 digits.push(carry % BASE)
7810
7811 carry = (carry / BASE) | 0
7812 }
7813 }
7814
7815 // deal with leading zeros
7816 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7817
7818 // convert digits to a string
7819 var stringOutput = ""
7820 for (var i = digits.length - 1; i >= 0; i--) {
7821 stringOutput = stringOutput + ALPHABET[digits[i]]
7822 }
7823 return stringOutput
7824 }
7825
7826 function decode(string) {
7827 if (string.length === 0) return []
7828
7829 var i, j, bytes = [0]
7830 for (i = 0; i < string.length; i++) {
7831 var c = string[i]
7832 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7833
7834 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7835 bytes[0] += ALPHABET_MAP[c]
7836
7837 var carry = 0
7838 for (j = 0; j < bytes.length; ++j) {
7839 bytes[j] += carry
7840
7841 carry = bytes[j] >> 8
7842 bytes[j] &= 0xff
7843 }
7844
7845 while (carry) {
7846 bytes.push(carry & 0xff)
7847
7848 carry >>= 8
7849 }
7850 }
7851
7852 // deal with leading zeros
7853 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7854
7855 return bytes.reverse()
7856 }
7857
7858 module.exports = {
7859 encode: encode,
7860 decode: decode
7861 }
7862
7863 },{}],31:[function(require,module,exports){
7864 (function (Buffer){
7865 'use strict'
7866
7867 var base58 = require('bs58')
7868 var createHash = require('create-hash')
7869
7870 // SHA256(SHA256(buffer))
7871 function sha256x2 (buffer) {
7872 buffer = createHash('sha256').update(buffer).digest()
7873 return createHash('sha256').update(buffer).digest()
7874 }
7875
7876 // Encode a buffer as a base58-check encoded string
7877 function encode (payload) {
7878 var checksum = sha256x2(payload).slice(0, 4)
7879
7880 return base58.encode(Buffer.concat([
7881 payload,
7882 checksum
7883 ]))
7884 }
7885
7886 // Decode a base58-check encoded string to a buffer
7887 function decode (string) {
7888 var buffer = new Buffer(base58.decode(string))
7889
7890 var payload = buffer.slice(0, -4)
7891 var checksum = buffer.slice(-4)
7892 var newChecksum = sha256x2(payload).slice(0, 4)
7893
7894 for (var i = 0; i < newChecksum.length; ++i) {
7895 if (newChecksum[i] === checksum[i]) continue
7896
7897 throw new Error('Invalid checksum')
7898 }
7899
7900 return payload
7901 }
7902
7903 module.exports = {
7904 encode: encode,
7905 decode: decode
7906 }
7907
7908 }).call(this,require("buffer").Buffer)
7909 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7910 (function (Buffer){
7911 'use strict';
7912 var inherits = require('inherits')
7913 var md5 = require('./md5')
7914 var rmd160 = require('ripemd160')
7915 var sha = require('sha.js')
7916
7917 var Transform = require('stream').Transform
7918
7919 function HashNoConstructor(hash) {
7920 Transform.call(this)
7921
7922 this._hash = hash
7923 this.buffers = []
7924 }
7925
7926 inherits(HashNoConstructor, Transform)
7927
7928 HashNoConstructor.prototype._transform = function (data, _, next) {
7929 this.buffers.push(data)
7930
7931 next()
7932 }
7933
7934 HashNoConstructor.prototype._flush = function (next) {
7935 this.push(this.digest())
7936 next()
7937 }
7938
7939 HashNoConstructor.prototype.update = function (data, enc) {
7940 if (typeof data === 'string') {
7941 data = new Buffer(data, enc)
7942 }
7943
7944 this.buffers.push(data)
7945 return this
7946 }
7947
7948 HashNoConstructor.prototype.digest = function (enc) {
7949 var buf = Buffer.concat(this.buffers)
7950 var r = this._hash(buf)
7951 this.buffers = null
7952
7953 return enc ? r.toString(enc) : r
7954 }
7955
7956 function Hash(hash) {
7957 Transform.call(this)
7958
7959 this._hash = hash
7960 }
7961
7962 inherits(Hash, Transform)
7963
7964 Hash.prototype._transform = function (data, enc, next) {
7965 if (enc) data = new Buffer(data, enc)
7966
7967 this._hash.update(data)
7968
7969 next()
7970 }
7971
7972 Hash.prototype._flush = function (next) {
7973 this.push(this._hash.digest())
7974 this._hash = null
7975
7976 next()
7977 }
7978
7979 Hash.prototype.update = function (data, enc) {
7980 if (typeof data === 'string') {
7981 data = new Buffer(data, enc)
7982 }
7983
7984 this._hash.update(data)
7985 return this
7986 }
7987
7988 Hash.prototype.digest = function (enc) {
7989 var outData = this._hash.digest()
7990
7991 return enc ? outData.toString(enc) : outData
7992 }
7993
7994 module.exports = function createHash (alg) {
7995 if ('md5' === alg) return new HashNoConstructor(md5)
7996 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7997
7998 return new Hash(sha(alg))
7999 }
8000
8001 }).call(this,require("buffer").Buffer)
8002 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
8003 (function (Buffer){
8004 'use strict';
8005 var intSize = 4;
8006 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8007 var chrsz = 8;
8008
8009 function toArray(buf, bigEndian) {
8010 if ((buf.length % intSize) !== 0) {
8011 var len = buf.length + (intSize - (buf.length % intSize));
8012 buf = Buffer.concat([buf, zeroBuffer], len);
8013 }
8014
8015 var arr = [];
8016 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8017 for (var i = 0; i < buf.length; i += intSize) {
8018 arr.push(fn.call(buf, i));
8019 }
8020 return arr;
8021 }
8022
8023 function toBuffer(arr, size, bigEndian) {
8024 var buf = new Buffer(size);
8025 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8026 for (var i = 0; i < arr.length; i++) {
8027 fn.call(buf, arr[i], i * 4, true);
8028 }
8029 return buf;
8030 }
8031
8032 function hash(buf, fn, hashSize, bigEndian) {
8033 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8034 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8035 return toBuffer(arr, hashSize, bigEndian);
8036 }
8037 exports.hash = hash;
8038 }).call(this,require("buffer").Buffer)
8039 },{"buffer":7}],34:[function(require,module,exports){
8040 'use strict';
8041 /*
8042 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8043 * Digest Algorithm, as defined in RFC 1321.
8044 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8045 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8046 * Distributed under the BSD License
8047 * See http://pajhome.org.uk/crypt/md5 for more info.
8048 */
8049
8050 var helpers = require('./helpers');
8051
8052 /*
8053 * Calculate the MD5 of an array of little-endian words, and a bit length
8054 */
8055 function core_md5(x, len)
8056 {
8057 /* append padding */
8058 x[len >> 5] |= 0x80 << ((len) % 32);
8059 x[(((len + 64) >>> 9) << 4) + 14] = len;
8060
8061 var a = 1732584193;
8062 var b = -271733879;
8063 var c = -1732584194;
8064 var d = 271733878;
8065
8066 for(var i = 0; i < x.length; i += 16)
8067 {
8068 var olda = a;
8069 var oldb = b;
8070 var oldc = c;
8071 var oldd = d;
8072
8073 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8074 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8075 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8076 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8077 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8078 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8079 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8080 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8081 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8082 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8083 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8084 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8085 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8086 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8087 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8088 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8089
8090 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8091 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8092 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8093 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8094 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8095 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8096 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8097 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8098 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8099 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8100 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8101 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8102 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8103 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8104 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8105 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8106
8107 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8108 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8109 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8110 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8111 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8112 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8113 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8114 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8115 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8116 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8117 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8118 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8119 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8120 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8121 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8122 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8123
8124 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8125 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8126 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8127 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8128 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8129 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8130 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8131 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8132 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8133 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8134 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8135 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8136 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8137 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8138 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8139 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8140
8141 a = safe_add(a, olda);
8142 b = safe_add(b, oldb);
8143 c = safe_add(c, oldc);
8144 d = safe_add(d, oldd);
8145 }
8146 return Array(a, b, c, d);
8147
8148 }
8149
8150 /*
8151 * These functions implement the four basic operations the algorithm uses.
8152 */
8153 function md5_cmn(q, a, b, x, s, t)
8154 {
8155 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8156 }
8157 function md5_ff(a, b, c, d, x, s, t)
8158 {
8159 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8160 }
8161 function md5_gg(a, b, c, d, x, s, t)
8162 {
8163 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8164 }
8165 function md5_hh(a, b, c, d, x, s, t)
8166 {
8167 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8168 }
8169 function md5_ii(a, b, c, d, x, s, t)
8170 {
8171 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8172 }
8173
8174 /*
8175 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8176 * to work around bugs in some JS interpreters.
8177 */
8178 function safe_add(x, y)
8179 {
8180 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8181 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8182 return (msw << 16) | (lsw & 0xFFFF);
8183 }
8184
8185 /*
8186 * Bitwise rotate a 32-bit number to the left.
8187 */
8188 function bit_rol(num, cnt)
8189 {
8190 return (num << cnt) | (num >>> (32 - cnt));
8191 }
8192
8193 module.exports = function md5(buf) {
8194 return helpers.hash(buf, core_md5, 16);
8195 };
8196 },{"./helpers":33}],35:[function(require,module,exports){
8197 arguments[4][12][0].apply(exports,arguments)
8198 },{"dup":12}],36:[function(require,module,exports){
8199 (function (Buffer){
8200 /*
8201 CryptoJS v3.1.2
8202 code.google.com/p/crypto-js
8203 (c) 2009-2013 by Jeff Mott. All rights reserved.
8204 code.google.com/p/crypto-js/wiki/License
8205 */
8206 /** @preserve
8207 (c) 2012 by Cédric Mesnil. All rights reserved.
8208
8209 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8210
8211 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8212 - 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.
8213
8214 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.
8215 */
8216
8217 // constants table
8218 var zl = [
8219 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8220 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8221 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8222 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8223 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8224 ]
8225
8226 var zr = [
8227 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8228 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8229 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8230 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8231 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8232 ]
8233
8234 var sl = [
8235 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8236 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8237 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8238 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8239 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8240 ]
8241
8242 var sr = [
8243 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8244 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8245 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8246 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8247 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8248 ]
8249
8250 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8251 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8252
8253 function bytesToWords (bytes) {
8254 var words = []
8255 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8256 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8257 }
8258 return words
8259 }
8260
8261 function wordsToBytes (words) {
8262 var bytes = []
8263 for (var b = 0; b < words.length * 32; b += 8) {
8264 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8265 }
8266 return bytes
8267 }
8268
8269 function processBlock (H, M, offset) {
8270 // swap endian
8271 for (var i = 0; i < 16; i++) {
8272 var offset_i = offset + i
8273 var M_offset_i = M[offset_i]
8274
8275 // Swap
8276 M[offset_i] = (
8277 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8278 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8279 )
8280 }
8281
8282 // Working variables
8283 var al, bl, cl, dl, el
8284 var ar, br, cr, dr, er
8285
8286 ar = al = H[0]
8287 br = bl = H[1]
8288 cr = cl = H[2]
8289 dr = dl = H[3]
8290 er = el = H[4]
8291
8292 // computation
8293 var t
8294 for (i = 0; i < 80; i += 1) {
8295 t = (al + M[offset + zl[i]]) | 0
8296 if (i < 16) {
8297 t += f1(bl, cl, dl) + hl[0]
8298 } else if (i < 32) {
8299 t += f2(bl, cl, dl) + hl[1]
8300 } else if (i < 48) {
8301 t += f3(bl, cl, dl) + hl[2]
8302 } else if (i < 64) {
8303 t += f4(bl, cl, dl) + hl[3]
8304 } else {// if (i<80) {
8305 t += f5(bl, cl, dl) + hl[4]
8306 }
8307 t = t | 0
8308 t = rotl(t, sl[i])
8309 t = (t + el) | 0
8310 al = el
8311 el = dl
8312 dl = rotl(cl, 10)
8313 cl = bl
8314 bl = t
8315
8316 t = (ar + M[offset + zr[i]]) | 0
8317 if (i < 16) {
8318 t += f5(br, cr, dr) + hr[0]
8319 } else if (i < 32) {
8320 t += f4(br, cr, dr) + hr[1]
8321 } else if (i < 48) {
8322 t += f3(br, cr, dr) + hr[2]
8323 } else if (i < 64) {
8324 t += f2(br, cr, dr) + hr[3]
8325 } else {// if (i<80) {
8326 t += f1(br, cr, dr) + hr[4]
8327 }
8328
8329 t = t | 0
8330 t = rotl(t, sr[i])
8331 t = (t + er) | 0
8332 ar = er
8333 er = dr
8334 dr = rotl(cr, 10)
8335 cr = br
8336 br = t
8337 }
8338
8339 // intermediate hash value
8340 t = (H[1] + cl + dr) | 0
8341 H[1] = (H[2] + dl + er) | 0
8342 H[2] = (H[3] + el + ar) | 0
8343 H[3] = (H[4] + al + br) | 0
8344 H[4] = (H[0] + bl + cr) | 0
8345 H[0] = t
8346 }
8347
8348 function f1 (x, y, z) {
8349 return ((x) ^ (y) ^ (z))
8350 }
8351
8352 function f2 (x, y, z) {
8353 return (((x) & (y)) | ((~x) & (z)))
8354 }
8355
8356 function f3 (x, y, z) {
8357 return (((x) | (~(y))) ^ (z))
8358 }
8359
8360 function f4 (x, y, z) {
8361 return (((x) & (z)) | ((y) & (~(z))))
8362 }
8363
8364 function f5 (x, y, z) {
8365 return ((x) ^ ((y) | (~(z))))
8366 }
8367
8368 function rotl (x, n) {
8369 return (x << n) | (x >>> (32 - n))
8370 }
8371
8372 function ripemd160 (message) {
8373 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8374
8375 if (typeof message === 'string') {
8376 message = new Buffer(message, 'utf8')
8377 }
8378
8379 var m = bytesToWords(message)
8380
8381 var nBitsLeft = message.length * 8
8382 var nBitsTotal = message.length * 8
8383
8384 // Add padding
8385 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8386 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8387 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8388 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8389 )
8390
8391 for (var i = 0; i < m.length; i += 16) {
8392 processBlock(H, m, i)
8393 }
8394
8395 // swap endian
8396 for (i = 0; i < 5; i++) {
8397 // shortcut
8398 var H_i = H[i]
8399
8400 // Swap
8401 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8402 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8403 }
8404
8405 var digestbytes = wordsToBytes(H)
8406 return new Buffer(digestbytes)
8407 }
8408
8409 module.exports = ripemd160
8410
8411 }).call(this,require("buffer").Buffer)
8412 },{"buffer":7}],37:[function(require,module,exports){
8413 (function (Buffer){
8414 // prototype class for hash functions
8415 function Hash (blockSize, finalSize) {
8416 this._block = new Buffer(blockSize)
8417 this._finalSize = finalSize
8418 this._blockSize = blockSize
8419 this._len = 0
8420 this._s = 0
8421 }
8422
8423 Hash.prototype.update = function (data, enc) {
8424 if (typeof data === 'string') {
8425 enc = enc || 'utf8'
8426 data = new Buffer(data, enc)
8427 }
8428
8429 var l = this._len += data.length
8430 var s = this._s || 0
8431 var f = 0
8432 var buffer = this._block
8433
8434 while (s < l) {
8435 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8436 var ch = (t - f)
8437
8438 for (var i = 0; i < ch; i++) {
8439 buffer[(s % this._blockSize) + i] = data[i + f]
8440 }
8441
8442 s += ch
8443 f += ch
8444
8445 if ((s % this._blockSize) === 0) {
8446 this._update(buffer)
8447 }
8448 }
8449 this._s = s
8450
8451 return this
8452 }
8453
8454 Hash.prototype.digest = function (enc) {
8455 // Suppose the length of the message M, in bits, is l
8456 var l = this._len * 8
8457
8458 // Append the bit 1 to the end of the message
8459 this._block[this._len % this._blockSize] = 0x80
8460
8461 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8462 this._block.fill(0, this._len % this._blockSize + 1)
8463
8464 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8465 this._update(this._block)
8466 this._block.fill(0)
8467 }
8468
8469 // to this append the block which is equal to the number l written in binary
8470 // TODO: handle case where l is > Math.pow(2, 29)
8471 this._block.writeInt32BE(l, this._blockSize - 4)
8472
8473 var hash = this._update(this._block) || this._hash()
8474
8475 return enc ? hash.toString(enc) : hash
8476 }
8477
8478 Hash.prototype._update = function () {
8479 throw new Error('_update must be implemented by subclass')
8480 }
8481
8482 module.exports = Hash
8483
8484 }).call(this,require("buffer").Buffer)
8485 },{"buffer":7}],38:[function(require,module,exports){
8486 var exports = module.exports = function SHA (algorithm) {
8487 algorithm = algorithm.toLowerCase()
8488
8489 var Algorithm = exports[algorithm]
8490 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8491
8492 return new Algorithm()
8493 }
8494
8495 exports.sha = require('./sha')
8496 exports.sha1 = require('./sha1')
8497 exports.sha224 = require('./sha224')
8498 exports.sha256 = require('./sha256')
8499 exports.sha384 = require('./sha384')
8500 exports.sha512 = require('./sha512')
8501
8502 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8503 (function (Buffer){
8504 /*
8505 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8506 * in FIPS PUB 180-1
8507 * This source code is derived from sha1.js of the same repository.
8508 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8509 * operation was added.
8510 */
8511
8512 var inherits = require('inherits')
8513 var Hash = require('./hash')
8514
8515 var W = new Array(80)
8516
8517 function Sha () {
8518 this.init()
8519 this._w = W
8520
8521 Hash.call(this, 64, 56)
8522 }
8523
8524 inherits(Sha, Hash)
8525
8526 Sha.prototype.init = function () {
8527 this._a = 0x67452301 | 0
8528 this._b = 0xefcdab89 | 0
8529 this._c = 0x98badcfe | 0
8530 this._d = 0x10325476 | 0
8531 this._e = 0xc3d2e1f0 | 0
8532
8533 return this
8534 }
8535
8536 /*
8537 * Bitwise rotate a 32-bit number to the left.
8538 */
8539 function rol (num, cnt) {
8540 return (num << cnt) | (num >>> (32 - cnt))
8541 }
8542
8543 Sha.prototype._update = function (M) {
8544 var W = this._w
8545
8546 var a = this._a
8547 var b = this._b
8548 var c = this._c
8549 var d = this._d
8550 var e = this._e
8551
8552 var j = 0, k
8553
8554 /*
8555 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8556 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8557 */
8558 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8559 function loop (w, f) {
8560 W[j] = w
8561
8562 var t = rol(a, 5) + f + e + w + k
8563
8564 e = d
8565 d = c
8566 c = rol(b, 30)
8567 b = a
8568 a = t
8569 j++
8570 }
8571
8572 k = 1518500249
8573 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8574 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8575 k = 1859775393
8576 while (j < 40) loop(calcW(), b ^ c ^ d)
8577 k = -1894007588
8578 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8579 k = -899497514
8580 while (j < 80) loop(calcW(), b ^ c ^ d)
8581
8582 this._a = (a + this._a) | 0
8583 this._b = (b + this._b) | 0
8584 this._c = (c + this._c) | 0
8585 this._d = (d + this._d) | 0
8586 this._e = (e + this._e) | 0
8587 }
8588
8589 Sha.prototype._hash = function () {
8590 var H = new Buffer(20)
8591
8592 H.writeInt32BE(this._a | 0, 0)
8593 H.writeInt32BE(this._b | 0, 4)
8594 H.writeInt32BE(this._c | 0, 8)
8595 H.writeInt32BE(this._d | 0, 12)
8596 H.writeInt32BE(this._e | 0, 16)
8597
8598 return H
8599 }
8600
8601 module.exports = Sha
8602
8603
8604 }).call(this,require("buffer").Buffer)
8605 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8606 (function (Buffer){
8607 /*
8608 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8609 * in FIPS PUB 180-1
8610 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8611 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8612 * Distributed under the BSD License
8613 * See http://pajhome.org.uk/crypt/md5 for details.
8614 */
8615
8616 var inherits = require('inherits')
8617 var Hash = require('./hash')
8618
8619 var W = new Array(80)
8620
8621 function Sha1 () {
8622 this.init()
8623 this._w = W
8624
8625 Hash.call(this, 64, 56)
8626 }
8627
8628 inherits(Sha1, Hash)
8629
8630 Sha1.prototype.init = function () {
8631 this._a = 0x67452301 | 0
8632 this._b = 0xefcdab89 | 0
8633 this._c = 0x98badcfe | 0
8634 this._d = 0x10325476 | 0
8635 this._e = 0xc3d2e1f0 | 0
8636
8637 return this
8638 }
8639
8640 /*
8641 * Bitwise rotate a 32-bit number to the left.
8642 */
8643 function rol (num, cnt) {
8644 return (num << cnt) | (num >>> (32 - cnt))
8645 }
8646
8647 Sha1.prototype._update = function (M) {
8648 var W = this._w
8649
8650 var a = this._a
8651 var b = this._b
8652 var c = this._c
8653 var d = this._d
8654 var e = this._e
8655
8656 var j = 0, k
8657
8658 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8659 function loop (w, f) {
8660 W[j] = w
8661
8662 var t = rol(a, 5) + f + e + w + k
8663
8664 e = d
8665 d = c
8666 c = rol(b, 30)
8667 b = a
8668 a = t
8669 j++
8670 }
8671
8672 k = 1518500249
8673 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8674 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8675 k = 1859775393
8676 while (j < 40) loop(calcW(), b ^ c ^ d)
8677 k = -1894007588
8678 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8679 k = -899497514
8680 while (j < 80) loop(calcW(), b ^ c ^ d)
8681
8682 this._a = (a + this._a) | 0
8683 this._b = (b + this._b) | 0
8684 this._c = (c + this._c) | 0
8685 this._d = (d + this._d) | 0
8686 this._e = (e + this._e) | 0
8687 }
8688
8689 Sha1.prototype._hash = function () {
8690 var H = new Buffer(20)
8691
8692 H.writeInt32BE(this._a | 0, 0)
8693 H.writeInt32BE(this._b | 0, 4)
8694 H.writeInt32BE(this._c | 0, 8)
8695 H.writeInt32BE(this._d | 0, 12)
8696 H.writeInt32BE(this._e | 0, 16)
8697
8698 return H
8699 }
8700
8701 module.exports = Sha1
8702
8703 }).call(this,require("buffer").Buffer)
8704 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8705 (function (Buffer){
8706 /**
8707 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8708 * in FIPS 180-2
8709 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8710 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8711 *
8712 */
8713
8714 var inherits = require('inherits')
8715 var Sha256 = require('./sha256')
8716 var Hash = require('./hash')
8717
8718 var W = new Array(64)
8719
8720 function Sha224 () {
8721 this.init()
8722
8723 this._w = W // new Array(64)
8724
8725 Hash.call(this, 64, 56)
8726 }
8727
8728 inherits(Sha224, Sha256)
8729
8730 Sha224.prototype.init = function () {
8731 this._a = 0xc1059ed8 | 0
8732 this._b = 0x367cd507 | 0
8733 this._c = 0x3070dd17 | 0
8734 this._d = 0xf70e5939 | 0
8735 this._e = 0xffc00b31 | 0
8736 this._f = 0x68581511 | 0
8737 this._g = 0x64f98fa7 | 0
8738 this._h = 0xbefa4fa4 | 0
8739
8740 return this
8741 }
8742
8743 Sha224.prototype._hash = function () {
8744 var H = new Buffer(28)
8745
8746 H.writeInt32BE(this._a, 0)
8747 H.writeInt32BE(this._b, 4)
8748 H.writeInt32BE(this._c, 8)
8749 H.writeInt32BE(this._d, 12)
8750 H.writeInt32BE(this._e, 16)
8751 H.writeInt32BE(this._f, 20)
8752 H.writeInt32BE(this._g, 24)
8753
8754 return H
8755 }
8756
8757 module.exports = Sha224
8758
8759 }).call(this,require("buffer").Buffer)
8760 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8761 (function (Buffer){
8762 /**
8763 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8764 * in FIPS 180-2
8765 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8766 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8767 *
8768 */
8769
8770 var inherits = require('inherits')
8771 var Hash = require('./hash')
8772
8773 var K = [
8774 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8775 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8776 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8777 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8778 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8779 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8780 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8781 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8782 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8783 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8784 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8785 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8786 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8787 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8788 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8789 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8790 ]
8791
8792 var W = new Array(64)
8793
8794 function Sha256 () {
8795 this.init()
8796
8797 this._w = W // new Array(64)
8798
8799 Hash.call(this, 64, 56)
8800 }
8801
8802 inherits(Sha256, Hash)
8803
8804 Sha256.prototype.init = function () {
8805 this._a = 0x6a09e667 | 0
8806 this._b = 0xbb67ae85 | 0
8807 this._c = 0x3c6ef372 | 0
8808 this._d = 0xa54ff53a | 0
8809 this._e = 0x510e527f | 0
8810 this._f = 0x9b05688c | 0
8811 this._g = 0x1f83d9ab | 0
8812 this._h = 0x5be0cd19 | 0
8813
8814 return this
8815 }
8816
8817 function S (X, n) {
8818 return (X >>> n) | (X << (32 - n))
8819 }
8820
8821 function R (X, n) {
8822 return (X >>> n)
8823 }
8824
8825 function Ch (x, y, z) {
8826 return ((x & y) ^ ((~x) & z))
8827 }
8828
8829 function Maj (x, y, z) {
8830 return ((x & y) ^ (x & z) ^ (y & z))
8831 }
8832
8833 function Sigma0256 (x) {
8834 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8835 }
8836
8837 function Sigma1256 (x) {
8838 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8839 }
8840
8841 function Gamma0256 (x) {
8842 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8843 }
8844
8845 function Gamma1256 (x) {
8846 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8847 }
8848
8849 Sha256.prototype._update = function (M) {
8850 var W = this._w
8851
8852 var a = this._a | 0
8853 var b = this._b | 0
8854 var c = this._c | 0
8855 var d = this._d | 0
8856 var e = this._e | 0
8857 var f = this._f | 0
8858 var g = this._g | 0
8859 var h = this._h | 0
8860
8861 var j = 0
8862
8863 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8864 function loop (w) {
8865 W[j] = w
8866
8867 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8868 var T2 = Sigma0256(a) + Maj(a, b, c)
8869
8870 h = g
8871 g = f
8872 f = e
8873 e = d + T1
8874 d = c
8875 c = b
8876 b = a
8877 a = T1 + T2
8878
8879 j++
8880 }
8881
8882 while (j < 16) loop(M.readInt32BE(j * 4))
8883 while (j < 64) loop(calcW())
8884
8885 this._a = (a + this._a) | 0
8886 this._b = (b + this._b) | 0
8887 this._c = (c + this._c) | 0
8888 this._d = (d + this._d) | 0
8889 this._e = (e + this._e) | 0
8890 this._f = (f + this._f) | 0
8891 this._g = (g + this._g) | 0
8892 this._h = (h + this._h) | 0
8893 }
8894
8895 Sha256.prototype._hash = function () {
8896 var H = new Buffer(32)
8897
8898 H.writeInt32BE(this._a, 0)
8899 H.writeInt32BE(this._b, 4)
8900 H.writeInt32BE(this._c, 8)
8901 H.writeInt32BE(this._d, 12)
8902 H.writeInt32BE(this._e, 16)
8903 H.writeInt32BE(this._f, 20)
8904 H.writeInt32BE(this._g, 24)
8905 H.writeInt32BE(this._h, 28)
8906
8907 return H
8908 }
8909
8910 module.exports = Sha256
8911
8912 }).call(this,require("buffer").Buffer)
8913 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8914 (function (Buffer){
8915 var inherits = require('inherits')
8916 var SHA512 = require('./sha512')
8917 var Hash = require('./hash')
8918
8919 var W = new Array(160)
8920
8921 function Sha384 () {
8922 this.init()
8923 this._w = W
8924
8925 Hash.call(this, 128, 112)
8926 }
8927
8928 inherits(Sha384, SHA512)
8929
8930 Sha384.prototype.init = function () {
8931 this._a = 0xcbbb9d5d | 0
8932 this._b = 0x629a292a | 0
8933 this._c = 0x9159015a | 0
8934 this._d = 0x152fecd8 | 0
8935 this._e = 0x67332667 | 0
8936 this._f = 0x8eb44a87 | 0
8937 this._g = 0xdb0c2e0d | 0
8938 this._h = 0x47b5481d | 0
8939
8940 this._al = 0xc1059ed8 | 0
8941 this._bl = 0x367cd507 | 0
8942 this._cl = 0x3070dd17 | 0
8943 this._dl = 0xf70e5939 | 0
8944 this._el = 0xffc00b31 | 0
8945 this._fl = 0x68581511 | 0
8946 this._gl = 0x64f98fa7 | 0
8947 this._hl = 0xbefa4fa4 | 0
8948
8949 return this
8950 }
8951
8952 Sha384.prototype._hash = function () {
8953 var H = new Buffer(48)
8954
8955 function writeInt64BE (h, l, offset) {
8956 H.writeInt32BE(h, offset)
8957 H.writeInt32BE(l, offset + 4)
8958 }
8959
8960 writeInt64BE(this._a, this._al, 0)
8961 writeInt64BE(this._b, this._bl, 8)
8962 writeInt64BE(this._c, this._cl, 16)
8963 writeInt64BE(this._d, this._dl, 24)
8964 writeInt64BE(this._e, this._el, 32)
8965 writeInt64BE(this._f, this._fl, 40)
8966
8967 return H
8968 }
8969
8970 module.exports = Sha384
8971
8972 }).call(this,require("buffer").Buffer)
8973 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8974 (function (Buffer){
8975 var inherits = require('inherits')
8976 var Hash = require('./hash')
8977
8978 var K = [
8979 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8980 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8981 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8982 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8983 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8984 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8985 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8986 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8987 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8988 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8989 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8990 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8991 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8992 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8993 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8994 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8995 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8996 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8997 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8998 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8999 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9000 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9001 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9002 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9003 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9004 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9005 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9006 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9007 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9008 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9009 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9010 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9011 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9012 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9013 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9014 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9015 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9016 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9017 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9018 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9019 ]
9020
9021 var W = new Array(160)
9022
9023 function Sha512 () {
9024 this.init()
9025 this._w = W
9026
9027 Hash.call(this, 128, 112)
9028 }
9029
9030 inherits(Sha512, Hash)
9031
9032 Sha512.prototype.init = function () {
9033 this._a = 0x6a09e667 | 0
9034 this._b = 0xbb67ae85 | 0
9035 this._c = 0x3c6ef372 | 0
9036 this._d = 0xa54ff53a | 0
9037 this._e = 0x510e527f | 0
9038 this._f = 0x9b05688c | 0
9039 this._g = 0x1f83d9ab | 0
9040 this._h = 0x5be0cd19 | 0
9041
9042 this._al = 0xf3bcc908 | 0
9043 this._bl = 0x84caa73b | 0
9044 this._cl = 0xfe94f82b | 0
9045 this._dl = 0x5f1d36f1 | 0
9046 this._el = 0xade682d1 | 0
9047 this._fl = 0x2b3e6c1f | 0
9048 this._gl = 0xfb41bd6b | 0
9049 this._hl = 0x137e2179 | 0
9050
9051 return this
9052 }
9053
9054 function S (X, Xl, n) {
9055 return (X >>> n) | (Xl << (32 - n))
9056 }
9057
9058 function Ch (x, y, z) {
9059 return ((x & y) ^ ((~x) & z))
9060 }
9061
9062 function Maj (x, y, z) {
9063 return ((x & y) ^ (x & z) ^ (y & z))
9064 }
9065
9066 Sha512.prototype._update = function (M) {
9067 var W = this._w
9068
9069 var a = this._a | 0
9070 var b = this._b | 0
9071 var c = this._c | 0
9072 var d = this._d | 0
9073 var e = this._e | 0
9074 var f = this._f | 0
9075 var g = this._g | 0
9076 var h = this._h | 0
9077
9078 var al = this._al | 0
9079 var bl = this._bl | 0
9080 var cl = this._cl | 0
9081 var dl = this._dl | 0
9082 var el = this._el | 0
9083 var fl = this._fl | 0
9084 var gl = this._gl | 0
9085 var hl = this._hl | 0
9086
9087 var i = 0, j = 0
9088 var Wi, Wil
9089 function calcW () {
9090 var x = W[j - 15 * 2]
9091 var xl = W[j - 15 * 2 + 1]
9092 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9093 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9094
9095 x = W[j - 2 * 2]
9096 xl = W[j - 2 * 2 + 1]
9097 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9098 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9099
9100 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9101 var Wi7 = W[j - 7 * 2]
9102 var Wi7l = W[j - 7 * 2 + 1]
9103
9104 var Wi16 = W[j - 16 * 2]
9105 var Wi16l = W[j - 16 * 2 + 1]
9106
9107 Wil = gamma0l + Wi7l
9108 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9109 Wil = Wil + gamma1l
9110 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9111 Wil = Wil + Wi16l
9112 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9113 }
9114
9115 function loop () {
9116 W[j] = Wi
9117 W[j + 1] = Wil
9118
9119 var maj = Maj(a, b, c)
9120 var majl = Maj(al, bl, cl)
9121
9122 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9123 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9124 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9125 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9126
9127 // t1 = h + sigma1 + ch + K[i] + W[i]
9128 var Ki = K[j]
9129 var Kil = K[j + 1]
9130
9131 var ch = Ch(e, f, g)
9132 var chl = Ch(el, fl, gl)
9133
9134 var t1l = hl + sigma1l
9135 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9136 t1l = t1l + chl
9137 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9138 t1l = t1l + Kil
9139 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9140 t1l = t1l + Wil
9141 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9142
9143 // t2 = sigma0 + maj
9144 var t2l = sigma0l + majl
9145 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9146
9147 h = g
9148 hl = gl
9149 g = f
9150 gl = fl
9151 f = e
9152 fl = el
9153 el = (dl + t1l) | 0
9154 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9155 d = c
9156 dl = cl
9157 c = b
9158 cl = bl
9159 b = a
9160 bl = al
9161 al = (t1l + t2l) | 0
9162 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9163
9164 i++
9165 j += 2
9166 }
9167
9168 while (i < 16) {
9169 Wi = M.readInt32BE(j * 4)
9170 Wil = M.readInt32BE(j * 4 + 4)
9171
9172 loop()
9173 }
9174
9175 while (i < 80) {
9176 calcW()
9177 loop()
9178 }
9179
9180 this._al = (this._al + al) | 0
9181 this._bl = (this._bl + bl) | 0
9182 this._cl = (this._cl + cl) | 0
9183 this._dl = (this._dl + dl) | 0
9184 this._el = (this._el + el) | 0
9185 this._fl = (this._fl + fl) | 0
9186 this._gl = (this._gl + gl) | 0
9187 this._hl = (this._hl + hl) | 0
9188
9189 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9190 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9191 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9192 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9193 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9194 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9195 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9196 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9197 }
9198
9199 Sha512.prototype._hash = function () {
9200 var H = new Buffer(64)
9201
9202 function writeInt64BE (h, l, offset) {
9203 H.writeInt32BE(h, offset)
9204 H.writeInt32BE(l, offset + 4)
9205 }
9206
9207 writeInt64BE(this._a, this._al, 0)
9208 writeInt64BE(this._b, this._bl, 8)
9209 writeInt64BE(this._c, this._cl, 16)
9210 writeInt64BE(this._d, this._dl, 24)
9211 writeInt64BE(this._e, this._el, 32)
9212 writeInt64BE(this._f, this._fl, 40)
9213 writeInt64BE(this._g, this._gl, 48)
9214 writeInt64BE(this._h, this._hl, 56)
9215
9216 return H
9217 }
9218
9219 module.exports = Sha512
9220
9221 }).call(this,require("buffer").Buffer)
9222 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9223 (function (Buffer){
9224 'use strict';
9225 var createHash = require('create-hash/browser');
9226 var inherits = require('inherits')
9227
9228 var Transform = require('stream').Transform
9229
9230 var ZEROS = new Buffer(128)
9231 ZEROS.fill(0)
9232
9233 function Hmac(alg, key) {
9234 Transform.call(this)
9235
9236 if (typeof key === 'string') {
9237 key = new Buffer(key)
9238 }
9239
9240 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9241
9242 this._alg = alg
9243 this._key = key
9244
9245 if (key.length > blocksize) {
9246 key = createHash(alg).update(key).digest()
9247
9248 } else if (key.length < blocksize) {
9249 key = Buffer.concat([key, ZEROS], blocksize)
9250 }
9251
9252 var ipad = this._ipad = new Buffer(blocksize)
9253 var opad = this._opad = new Buffer(blocksize)
9254
9255 for (var i = 0; i < blocksize; i++) {
9256 ipad[i] = key[i] ^ 0x36
9257 opad[i] = key[i] ^ 0x5C
9258 }
9259
9260 this._hash = createHash(alg).update(ipad)
9261 }
9262
9263 inherits(Hmac, Transform)
9264
9265 Hmac.prototype.update = function (data, enc) {
9266 this._hash.update(data, enc)
9267
9268 return this
9269 }
9270
9271 Hmac.prototype._transform = function (data, _, next) {
9272 this._hash.update(data)
9273
9274 next()
9275 }
9276
9277 Hmac.prototype._flush = function (next) {
9278 this.push(this.digest())
9279
9280 next()
9281 }
9282
9283 Hmac.prototype.digest = function (enc) {
9284 var h = this._hash.digest()
9285
9286 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9287 }
9288
9289 module.exports = function createHmac(alg, key) {
9290 return new Hmac(alg, key)
9291 }
9292
9293 }).call(this,require("buffer").Buffer)
9294 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9295 arguments[4][12][0].apply(exports,arguments)
9296 },{"dup":12}],47:[function(require,module,exports){
9297 var assert = require('assert')
9298 var BigInteger = require('bigi')
9299
9300 var Point = require('./point')
9301
9302 function Curve(p, a, b, Gx, Gy, n, h) {
9303 this.p = p
9304 this.a = a
9305 this.b = b
9306 this.G = Point.fromAffine(this, Gx, Gy)
9307 this.n = n
9308 this.h = h
9309
9310 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9311
9312 // result caching
9313 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9314 }
9315
9316 Curve.prototype.pointFromX = function(isOdd, x) {
9317 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9318 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9319
9320 var y = beta
9321 if (beta.isEven() ^ !isOdd) {
9322 y = this.p.subtract(y) // -y % p
9323 }
9324
9325 return Point.fromAffine(this, x, y)
9326 }
9327
9328 Curve.prototype.isInfinity = function(Q) {
9329 if (Q === this.infinity) return true
9330
9331 return Q.z.signum() === 0 && Q.y.signum() !== 0
9332 }
9333
9334 Curve.prototype.isOnCurve = function(Q) {
9335 if (this.isInfinity(Q)) return true
9336
9337 var x = Q.affineX
9338 var y = Q.affineY
9339 var a = this.a
9340 var b = this.b
9341 var p = this.p
9342
9343 // Check that xQ and yQ are integers in the interval [0, p - 1]
9344 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9345 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9346
9347 // and check that y^2 = x^3 + ax + b (mod p)
9348 var lhs = y.square().mod(p)
9349 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9350 return lhs.equals(rhs)
9351 }
9352
9353 /**
9354 * Validate an elliptic curve point.
9355 *
9356 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9357 */
9358 Curve.prototype.validate = function(Q) {
9359 // Check Q != O
9360 assert(!this.isInfinity(Q), 'Point is at infinity')
9361 assert(this.isOnCurve(Q), 'Point is not on the curve')
9362
9363 // Check nQ = O (where Q is a scalar multiple of G)
9364 var nQ = Q.multiply(this.n)
9365 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9366
9367 return true
9368 }
9369
9370 module.exports = Curve
9371
9372 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9373 module.exports={
9374 "secp128r1": {
9375 "p": "fffffffdffffffffffffffffffffffff",
9376 "a": "fffffffdfffffffffffffffffffffffc",
9377 "b": "e87579c11079f43dd824993c2cee5ed3",
9378 "n": "fffffffe0000000075a30d1b9038a115",
9379 "h": "01",
9380 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9381 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9382 },
9383 "secp160k1": {
9384 "p": "fffffffffffffffffffffffffffffffeffffac73",
9385 "a": "00",
9386 "b": "07",
9387 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9388 "h": "01",
9389 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9390 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9391 },
9392 "secp160r1": {
9393 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9394 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9395 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9396 "n": "0100000000000000000001f4c8f927aed3ca752257",
9397 "h": "01",
9398 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9399 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9400 },
9401 "secp192k1": {
9402 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9403 "a": "00",
9404 "b": "03",
9405 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9406 "h": "01",
9407 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9408 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9409 },
9410 "secp192r1": {
9411 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9412 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9413 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9414 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9415 "h": "01",
9416 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9417 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9418 },
9419 "secp256k1": {
9420 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9421 "a": "00",
9422 "b": "07",
9423 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9424 "h": "01",
9425 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9426 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9427 },
9428 "secp256r1": {
9429 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9430 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9431 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9432 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9433 "h": "01",
9434 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9435 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9436 }
9437 }
9438
9439 },{}],49:[function(require,module,exports){
9440 var Point = require('./point')
9441 var Curve = require('./curve')
9442
9443 var getCurveByName = require('./names')
9444
9445 module.exports = {
9446 Curve: Curve,
9447 Point: Point,
9448 getCurveByName: getCurveByName
9449 }
9450
9451 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9452 var BigInteger = require('bigi')
9453
9454 var curves = require('./curves')
9455 var Curve = require('./curve')
9456
9457 function getCurveByName(name) {
9458 var curve = curves[name]
9459 if (!curve) return null
9460
9461 var p = new BigInteger(curve.p, 16)
9462 var a = new BigInteger(curve.a, 16)
9463 var b = new BigInteger(curve.b, 16)
9464 var n = new BigInteger(curve.n, 16)
9465 var h = new BigInteger(curve.h, 16)
9466 var Gx = new BigInteger(curve.Gx, 16)
9467 var Gy = new BigInteger(curve.Gy, 16)
9468
9469 return new Curve(p, a, b, Gx, Gy, n, h)
9470 }
9471
9472 module.exports = getCurveByName
9473
9474 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9475 (function (Buffer){
9476 var assert = require('assert')
9477 var BigInteger = require('bigi')
9478
9479 var THREE = BigInteger.valueOf(3)
9480
9481 function Point(curve, x, y, z) {
9482 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9483
9484 this.curve = curve
9485 this.x = x
9486 this.y = y
9487 this.z = z
9488 this._zInv = null
9489
9490 this.compressed = true
9491 }
9492
9493 Object.defineProperty(Point.prototype, 'zInv', {
9494 get: function() {
9495 if (this._zInv === null) {
9496 this._zInv = this.z.modInverse(this.curve.p)
9497 }
9498
9499 return this._zInv
9500 }
9501 })
9502
9503 Object.defineProperty(Point.prototype, 'affineX', {
9504 get: function() {
9505 return this.x.multiply(this.zInv).mod(this.curve.p)
9506 }
9507 })
9508
9509 Object.defineProperty(Point.prototype, 'affineY', {
9510 get: function() {
9511 return this.y.multiply(this.zInv).mod(this.curve.p)
9512 }
9513 })
9514
9515 Point.fromAffine = function(curve, x, y) {
9516 return new Point(curve, x, y, BigInteger.ONE)
9517 }
9518
9519 Point.prototype.equals = function(other) {
9520 if (other === this) return true
9521 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9522 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9523
9524 // u = Y2 * Z1 - Y1 * Z2
9525 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9526
9527 if (u.signum() !== 0) return false
9528
9529 // v = X2 * Z1 - X1 * Z2
9530 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9531
9532 return v.signum() === 0
9533 }
9534
9535 Point.prototype.negate = function() {
9536 var y = this.curve.p.subtract(this.y)
9537
9538 return new Point(this.curve, this.x, y, this.z)
9539 }
9540
9541 Point.prototype.add = function(b) {
9542 if (this.curve.isInfinity(this)) return b
9543 if (this.curve.isInfinity(b)) return this
9544
9545 var x1 = this.x
9546 var y1 = this.y
9547 var x2 = b.x
9548 var y2 = b.y
9549
9550 // u = Y2 * Z1 - Y1 * Z2
9551 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9552 // v = X2 * Z1 - X1 * Z2
9553 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9554
9555 if (v.signum() === 0) {
9556 if (u.signum() === 0) {
9557 return this.twice() // this == b, so double
9558 }
9559
9560 return this.curve.infinity // this = -b, so infinity
9561 }
9562
9563 var v2 = v.square()
9564 var v3 = v2.multiply(v)
9565 var x1v2 = x1.multiply(v2)
9566 var zu2 = u.square().multiply(this.z)
9567
9568 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9569 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9570 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9571 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)
9572 // z3 = v^3 * z1 * z2
9573 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9574
9575 return new Point(this.curve, x3, y3, z3)
9576 }
9577
9578 Point.prototype.twice = function() {
9579 if (this.curve.isInfinity(this)) return this
9580 if (this.y.signum() === 0) return this.curve.infinity
9581
9582 var x1 = this.x
9583 var y1 = this.y
9584
9585 var y1z1 = y1.multiply(this.z)
9586 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9587 var a = this.curve.a
9588
9589 // w = 3 * x1^2 + a * z1^2
9590 var w = x1.square().multiply(THREE)
9591
9592 if (a.signum() !== 0) {
9593 w = w.add(this.z.square().multiply(a))
9594 }
9595
9596 w = w.mod(this.curve.p)
9597 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9598 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9599 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9600 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9601 // z3 = 8 * (y1 * z1)^3
9602 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9603
9604 return new Point(this.curve, x3, y3, z3)
9605 }
9606
9607 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9608 // TODO: modularize the multiplication algorithm
9609 Point.prototype.multiply = function(k) {
9610 if (this.curve.isInfinity(this)) return this
9611 if (k.signum() === 0) return this.curve.infinity
9612
9613 var e = k
9614 var h = e.multiply(THREE)
9615
9616 var neg = this.negate()
9617 var R = this
9618
9619 for (var i = h.bitLength() - 2; i > 0; --i) {
9620 R = R.twice()
9621
9622 var hBit = h.testBit(i)
9623 var eBit = e.testBit(i)
9624
9625 if (hBit != eBit) {
9626 R = R.add(hBit ? this : neg)
9627 }
9628 }
9629
9630 return R
9631 }
9632
9633 // Compute this*j + x*k (simultaneous multiplication)
9634 Point.prototype.multiplyTwo = function(j, x, k) {
9635 var i
9636
9637 if (j.bitLength() > k.bitLength())
9638 i = j.bitLength() - 1
9639 else
9640 i = k.bitLength() - 1
9641
9642 var R = this.curve.infinity
9643 var both = this.add(x)
9644
9645 while (i >= 0) {
9646 R = R.twice()
9647
9648 var jBit = j.testBit(i)
9649 var kBit = k.testBit(i)
9650
9651 if (jBit) {
9652 if (kBit) {
9653 R = R.add(both)
9654
9655 } else {
9656 R = R.add(this)
9657 }
9658
9659 } else {
9660 if (kBit) {
9661 R = R.add(x)
9662 }
9663 }
9664 --i
9665 }
9666
9667 return R
9668 }
9669
9670 Point.prototype.getEncoded = function(compressed) {
9671 if (compressed == undefined) compressed = this.compressed
9672 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9673
9674 var x = this.affineX
9675 var y = this.affineY
9676
9677 var buffer
9678
9679 // Determine size of q in bytes
9680 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9681
9682 // 0x02/0x03 | X
9683 if (compressed) {
9684 buffer = new Buffer(1 + byteLength)
9685 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9686
9687 // 0x04 | X | Y
9688 } else {
9689 buffer = new Buffer(1 + byteLength + byteLength)
9690 buffer.writeUInt8(0x04, 0)
9691
9692 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9693 }
9694
9695 x.toBuffer(byteLength).copy(buffer, 1)
9696
9697 return buffer
9698 }
9699
9700 Point.decodeFrom = function(curve, buffer) {
9701 var type = buffer.readUInt8(0)
9702 var compressed = (type !== 4)
9703
9704 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9705 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9706
9707 var Q
9708 if (compressed) {
9709 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9710 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9711
9712 var isOdd = (type === 0x03)
9713 Q = curve.pointFromX(isOdd, x)
9714
9715 } else {
9716 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9717
9718 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9719 Q = Point.fromAffine(curve, x, y)
9720 }
9721
9722 Q.compressed = compressed
9723 return Q
9724 }
9725
9726 Point.prototype.toString = function () {
9727 if (this.curve.isInfinity(this)) return '(INFINITY)'
9728
9729 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9730 }
9731
9732 module.exports = Point
9733
9734 }).call(this,require("buffer").Buffer)
9735 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9736 (function (process,global,Buffer){
9737 'use strict';
9738
9739 var crypto = global.crypto || global.msCrypto
9740 if(crypto && crypto.getRandomValues) {
9741 module.exports = randomBytes;
9742 } else {
9743 module.exports = oldBrowser;
9744 }
9745 function randomBytes(size, cb) {
9746 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9747 /* This will not work in older browsers.
9748 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9749 */
9750
9751 crypto.getRandomValues(bytes);
9752 if (typeof cb === 'function') {
9753 return process.nextTick(function () {
9754 cb(null, bytes);
9755 });
9756 }
9757 return bytes;
9758 }
9759 function oldBrowser() {
9760 throw new Error(
9761 'secure random number generation not supported by this browser\n'+
9762 'use chrome, FireFox or Internet Explorer 11'
9763 )
9764 }
9765
9766 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9767 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9768 (function (Buffer){
9769 'use strict';
9770
9771 function getFunctionName(fn) {
9772 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9773 }
9774
9775 function getTypeTypeName(type) {
9776 if (nativeTypes.Function(type)) {
9777 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9778 }
9779 if (nativeTypes.Object(type)) return JSON.stringify(type);
9780
9781 return type;
9782 }
9783
9784 function getValueTypeName(value) {
9785 if (nativeTypes.Null(value)) return '';
9786
9787 return getFunctionName(value.constructor);
9788 }
9789
9790 function tfErrorString(type, value) {
9791 var typeTypeName = getTypeTypeName(type);
9792 var valueTypeName = getValueTypeName(value);
9793
9794 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9795 }
9796
9797 function tfPropertyErrorString(type, name, value) {
9798 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9799 }
9800
9801 var nativeTypes = {
9802 Array: (function (_Array) {
9803 function Array(_x) {
9804 return _Array.apply(this, arguments);
9805 }
9806
9807 Array.toString = function () {
9808 return _Array.toString();
9809 };
9810
9811 return Array;
9812 })(function (value) {
9813 return value !== null && value !== undefined && value.constructor === Array;
9814 }),
9815 Boolean: function Boolean(value) {
9816 return typeof value === 'boolean';
9817 },
9818 Buffer: (function (_Buffer) {
9819 function Buffer(_x2) {
9820 return _Buffer.apply(this, arguments);
9821 }
9822
9823 Buffer.toString = function () {
9824 return _Buffer.toString();
9825 };
9826
9827 return Buffer;
9828 })(function (value) {
9829 return Buffer.isBuffer(value);
9830 }),
9831 Function: function Function(value) {
9832 return typeof value === 'function';
9833 },
9834 Null: function Null(value) {
9835 return value === undefined || value === null;
9836 },
9837 Number: function Number(value) {
9838 return typeof value === 'number';
9839 },
9840 Object: function Object(value) {
9841 return typeof value === 'object';
9842 },
9843 String: function String(value) {
9844 return typeof value === 'string';
9845 },
9846 '': function _() {
9847 return true;
9848 }
9849 };
9850
9851 function tJSON(type) {
9852 return type && type.toJSON ? type.toJSON() : type;
9853 }
9854
9855 function sJSON(type) {
9856 var json = tJSON(type);
9857 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9858 }
9859
9860 var otherTypes = {
9861 arrayOf: function arrayOf(type) {
9862 function arrayOf(value, strict) {
9863 try {
9864 return nativeTypes.Array(value) && value.every(function (x) {
9865 return typeforce(type, x, strict);
9866 });
9867 } catch (e) {
9868 return false;
9869 }
9870 }
9871 arrayOf.toJSON = function () {
9872 return [tJSON(type)];
9873 };
9874
9875 return arrayOf;
9876 },
9877
9878 maybe: function maybe(type) {
9879 function maybe(value, strict) {
9880 return nativeTypes.Null(value) || typeforce(type, value, strict);
9881 }
9882 maybe.toJSON = function () {
9883 return '?' + sJSON(type);
9884 };
9885
9886 return maybe;
9887 },
9888
9889 object: function object(type) {
9890 function object(value, strict) {
9891 typeforce(nativeTypes.Object, value, strict);
9892
9893 var propertyName, propertyType, propertyValue;
9894
9895 try {
9896 for (propertyName in type) {
9897 propertyType = type[propertyName];
9898 propertyValue = value[propertyName];
9899
9900 typeforce(propertyType, propertyValue, strict);
9901 }
9902 } catch (e) {
9903 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9904 }
9905
9906 if (strict) {
9907 for (propertyName in value) {
9908 if (type[propertyName]) continue;
9909
9910 throw new TypeError('Unexpected property "' + propertyName + '"');
9911 }
9912 }
9913
9914 return true;
9915 }
9916 object.toJSON = function () {
9917 return type;
9918 };
9919
9920 return object;
9921 },
9922
9923 oneOf: function oneOf() {
9924 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9925 types[_key] = arguments[_key];
9926 }
9927
9928 function oneOf(value, strict) {
9929 return types.some(function (type) {
9930 try {
9931 return typeforce(type, value, strict);
9932 } catch (e) {
9933 return false;
9934 }
9935 });
9936 }
9937 oneOf.toJSON = function () {
9938 return types.map(sJSON).join('|');
9939 };
9940
9941 return oneOf;
9942 },
9943
9944 quacksLike: function quacksLike(type) {
9945 function quacksLike(value, strict) {
9946 return type === getValueTypeName(value);
9947 }
9948 quacksLike.toJSON = function () {
9949 return type;
9950 };
9951
9952 return quacksLike;
9953 },
9954
9955 tuple: function tuple() {
9956 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9957 types[_key2] = arguments[_key2];
9958 }
9959
9960 function tuple(value, strict) {
9961 return types.every(function (type, i) {
9962 return typeforce(type, value[i], strict);
9963 });
9964 }
9965 tuple.toJSON = function () {
9966 return '(' + types.map(sJSON).join(', ') + ')';
9967 };
9968
9969 return tuple;
9970 },
9971
9972 value: function value(expected) {
9973 function value(actual) {
9974 return actual === expected;
9975 }
9976 value.toJSON = function () {
9977 return expected;
9978 };
9979
9980 return value;
9981 }
9982 };
9983
9984 function compile(type) {
9985 if (nativeTypes.String(type)) {
9986 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9987
9988 return nativeTypes[type] || otherTypes.quacksLike(type);
9989 } else if (type && nativeTypes.Object(type)) {
9990 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9991
9992 var compiled = {};
9993
9994 for (var propertyName in type) {
9995 compiled[propertyName] = compile(type[propertyName]);
9996 }
9997
9998 return otherTypes.object(compiled);
9999 } else if (nativeTypes.Function(type)) {
10000 return type;
10001 }
10002
10003 return otherTypes.value(type);
10004 }
10005
10006 function typeforce(_x3, _x4, _x5) {
10007 var _again = true;
10008
10009 _function: while (_again) {
10010 var type = _x3,
10011 value = _x4,
10012 strict = _x5;
10013 _again = false;
10014
10015 if (nativeTypes.Function(type)) {
10016 if (type(value, strict)) return true;
10017
10018 throw new TypeError(tfErrorString(type, value));
10019 }
10020
10021 // JIT
10022 _x3 = compile(type);
10023 _x4 = value;
10024 _x5 = strict;
10025 _again = true;
10026 continue _function;
10027 }
10028 }
10029
10030 // assign all types to typeforce function
10031 var typeName;
10032 Object.keys(nativeTypes).forEach(function (typeName) {
10033 var nativeType = nativeTypes[typeName];
10034 nativeType.toJSON = function () {
10035 return typeName;
10036 };
10037
10038 typeforce[typeName] = nativeType;
10039 });
10040
10041 for (typeName in otherTypes) {
10042 typeforce[typeName] = otherTypes[typeName];
10043 }
10044
10045 module.exports = typeforce;
10046 module.exports.compile = compile;
10047 }).call(this,require("buffer").Buffer)
10048 },{"buffer":7}],54:[function(require,module,exports){
10049 (function (Buffer){
10050 var assert = require('assert')
10051 var base58check = require('bs58check')
10052 var typeForce = require('typeforce')
10053 var networks = require('./networks')
10054 var scripts = require('./scripts')
10055
10056 function findScriptTypeByVersion (version) {
10057 for (var networkName in networks) {
10058 var network = networks[networkName]
10059
10060 if (version === network.pubKeyHash) return 'pubkeyhash'
10061 if (version === network.scriptHash) return 'scripthash'
10062 }
10063 }
10064
10065 function Address (hash, version) {
10066 typeForce('Buffer', hash)
10067
10068 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10069 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10070
10071 this.hash = hash
10072 this.version = version
10073 }
10074
10075 Address.fromBase58Check = function (string) {
10076 var payload = base58check.decode(string)
10077 var version = payload.readUInt8(0)
10078 var hash = payload.slice(1)
10079
10080 return new Address(hash, version)
10081 }
10082
10083 Address.fromOutputScript = function (script, network) {
10084 network = network || networks.bitcoin
10085
10086 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10087 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10088
10089 assert(false, script.toASM() + ' has no matching Address')
10090 }
10091
10092 Address.prototype.toBase58Check = function () {
10093 var payload = new Buffer(21)
10094 payload.writeUInt8(this.version, 0)
10095 this.hash.copy(payload, 1)
10096
10097 return base58check.encode(payload)
10098 }
10099
10100 Address.prototype.toOutputScript = function () {
10101 var scriptType = findScriptTypeByVersion(this.version)
10102
10103 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10104 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10105
10106 assert(false, this.toString() + ' has no matching Script')
10107 }
10108
10109 Address.prototype.toString = Address.prototype.toBase58Check
10110
10111 module.exports = Address
10112
10113 }).call(this,require("buffer").Buffer)
10114 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10115 var bs58check = require('bs58check')
10116
10117 function decode () {
10118 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10119
10120 return bs58check.decode.apply(undefined, arguments)
10121 }
10122
10123 function encode () {
10124 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10125
10126 return bs58check.encode.apply(undefined, arguments)
10127 }
10128
10129 module.exports = {
10130 decode: decode,
10131 encode: encode
10132 }
10133
10134 },{"bs58check":31}],56:[function(require,module,exports){
10135 (function (Buffer){
10136 var assert = require('assert')
10137 var bufferutils = require('./bufferutils')
10138 var crypto = require('./crypto')
10139
10140 var Transaction = require('./transaction')
10141
10142 function Block () {
10143 this.version = 1
10144 this.prevHash = null
10145 this.merkleRoot = null
10146 this.timestamp = 0
10147 this.bits = 0
10148 this.nonce = 0
10149 }
10150
10151 Block.fromBuffer = function (buffer) {
10152 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10153
10154 var offset = 0
10155 function readSlice (n) {
10156 offset += n
10157 return buffer.slice(offset - n, offset)
10158 }
10159
10160 function readUInt32 () {
10161 var i = buffer.readUInt32LE(offset)
10162 offset += 4
10163 return i
10164 }
10165
10166 var block = new Block()
10167 block.version = readUInt32()
10168 block.prevHash = readSlice(32)
10169 block.merkleRoot = readSlice(32)
10170 block.timestamp = readUInt32()
10171 block.bits = readUInt32()
10172 block.nonce = readUInt32()
10173
10174 if (buffer.length === 80) return block
10175
10176 function readVarInt () {
10177 var vi = bufferutils.readVarInt(buffer, offset)
10178 offset += vi.size
10179 return vi.number
10180 }
10181
10182 // FIXME: poor performance
10183 function readTransaction () {
10184 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10185
10186 offset += tx.toBuffer().length
10187 return tx
10188 }
10189
10190 var nTransactions = readVarInt()
10191 block.transactions = []
10192
10193 for (var i = 0; i < nTransactions; ++i) {
10194 var tx = readTransaction()
10195 block.transactions.push(tx)
10196 }
10197
10198 return block
10199 }
10200
10201 Block.fromHex = function (hex) {
10202 return Block.fromBuffer(new Buffer(hex, 'hex'))
10203 }
10204
10205 Block.prototype.getHash = function () {
10206 return crypto.hash256(this.toBuffer(true))
10207 }
10208
10209 Block.prototype.getId = function () {
10210 return bufferutils.reverse(this.getHash()).toString('hex')
10211 }
10212
10213 Block.prototype.getUTCDate = function () {
10214 var date = new Date(0) // epoch
10215 date.setUTCSeconds(this.timestamp)
10216
10217 return date
10218 }
10219
10220 Block.prototype.toBuffer = function (headersOnly) {
10221 var buffer = new Buffer(80)
10222
10223 var offset = 0
10224 function writeSlice (slice) {
10225 slice.copy(buffer, offset)
10226 offset += slice.length
10227 }
10228
10229 function writeUInt32 (i) {
10230 buffer.writeUInt32LE(i, offset)
10231 offset += 4
10232 }
10233
10234 writeUInt32(this.version)
10235 writeSlice(this.prevHash)
10236 writeSlice(this.merkleRoot)
10237 writeUInt32(this.timestamp)
10238 writeUInt32(this.bits)
10239 writeUInt32(this.nonce)
10240
10241 if (headersOnly || !this.transactions) return buffer
10242
10243 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10244 var txBuffers = this.transactions.map(function (tx) {
10245 return tx.toBuffer()
10246 })
10247
10248 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10249 }
10250
10251 Block.prototype.toHex = function (headersOnly) {
10252 return this.toBuffer(headersOnly).toString('hex')
10253 }
10254
10255 module.exports = Block
10256
10257 }).call(this,require("buffer").Buffer)
10258 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10259 (function (Buffer){
10260 var assert = require('assert')
10261 var opcodes = require('./opcodes')
10262
10263 // https://github.com/feross/buffer/blob/master/index.js#L1127
10264 function verifuint (value, max) {
10265 assert(typeof value === 'number', 'cannot write a non-number as a number')
10266 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10267 assert(value <= max, 'value is larger than maximum value for type')
10268 assert(Math.floor(value) === value, 'value has a fractional component')
10269 }
10270
10271 function pushDataSize (i) {
10272 return i < opcodes.OP_PUSHDATA1 ? 1
10273 : i < 0xff ? 2
10274 : i < 0xffff ? 3
10275 : 5
10276 }
10277
10278 function readPushDataInt (buffer, offset) {
10279 var opcode = buffer.readUInt8(offset)
10280 var number, size
10281
10282 // ~6 bit
10283 if (opcode < opcodes.OP_PUSHDATA1) {
10284 number = opcode
10285 size = 1
10286
10287 // 8 bit
10288 } else if (opcode === opcodes.OP_PUSHDATA1) {
10289 if (offset + 2 > buffer.length) return null
10290 number = buffer.readUInt8(offset + 1)
10291 size = 2
10292
10293 // 16 bit
10294 } else if (opcode === opcodes.OP_PUSHDATA2) {
10295 if (offset + 3 > buffer.length) return null
10296 number = buffer.readUInt16LE(offset + 1)
10297 size = 3
10298
10299 // 32 bit
10300 } else {
10301 if (offset + 5 > buffer.length) return null
10302 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10303
10304 number = buffer.readUInt32LE(offset + 1)
10305 size = 5
10306 }
10307
10308 return {
10309 opcode: opcode,
10310 number: number,
10311 size: size
10312 }
10313 }
10314
10315 function readUInt64LE (buffer, offset) {
10316 var a = buffer.readUInt32LE(offset)
10317 var b = buffer.readUInt32LE(offset + 4)
10318 b *= 0x100000000
10319
10320 verifuint(b + a, 0x001fffffffffffff)
10321
10322 return b + a
10323 }
10324
10325 function readVarInt (buffer, offset) {
10326 var t = buffer.readUInt8(offset)
10327 var number, size
10328
10329 // 8 bit
10330 if (t < 253) {
10331 number = t
10332 size = 1
10333
10334 // 16 bit
10335 } else if (t < 254) {
10336 number = buffer.readUInt16LE(offset + 1)
10337 size = 3
10338
10339 // 32 bit
10340 } else if (t < 255) {
10341 number = buffer.readUInt32LE(offset + 1)
10342 size = 5
10343
10344 // 64 bit
10345 } else {
10346 number = readUInt64LE(buffer, offset + 1)
10347 size = 9
10348 }
10349
10350 return {
10351 number: number,
10352 size: size
10353 }
10354 }
10355
10356 function writePushDataInt (buffer, number, offset) {
10357 var size = pushDataSize(number)
10358
10359 // ~6 bit
10360 if (size === 1) {
10361 buffer.writeUInt8(number, offset)
10362
10363 // 8 bit
10364 } else if (size === 2) {
10365 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10366 buffer.writeUInt8(number, offset + 1)
10367
10368 // 16 bit
10369 } else if (size === 3) {
10370 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10371 buffer.writeUInt16LE(number, offset + 1)
10372
10373 // 32 bit
10374 } else {
10375 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10376 buffer.writeUInt32LE(number, offset + 1)
10377 }
10378
10379 return size
10380 }
10381
10382 function writeUInt64LE (buffer, value, offset) {
10383 verifuint(value, 0x001fffffffffffff)
10384
10385 buffer.writeInt32LE(value & -1, offset)
10386 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10387 }
10388
10389 function varIntSize (i) {
10390 return i < 253 ? 1
10391 : i < 0x10000 ? 3
10392 : i < 0x100000000 ? 5
10393 : 9
10394 }
10395
10396 function writeVarInt (buffer, number, offset) {
10397 var size = varIntSize(number)
10398
10399 // 8 bit
10400 if (size === 1) {
10401 buffer.writeUInt8(number, offset)
10402
10403 // 16 bit
10404 } else if (size === 3) {
10405 buffer.writeUInt8(253, offset)
10406 buffer.writeUInt16LE(number, offset + 1)
10407
10408 // 32 bit
10409 } else if (size === 5) {
10410 buffer.writeUInt8(254, offset)
10411 buffer.writeUInt32LE(number, offset + 1)
10412
10413 // 64 bit
10414 } else {
10415 buffer.writeUInt8(255, offset)
10416 writeUInt64LE(buffer, number, offset + 1)
10417 }
10418
10419 return size
10420 }
10421
10422 function varIntBuffer (i) {
10423 var size = varIntSize(i)
10424 var buffer = new Buffer(size)
10425 writeVarInt(buffer, i, 0)
10426
10427 return buffer
10428 }
10429
10430 function reverse (buffer) {
10431 var buffer2 = new Buffer(buffer)
10432 Array.prototype.reverse.call(buffer2)
10433 return buffer2
10434 }
10435
10436 module.exports = {
10437 pushDataSize: pushDataSize,
10438 readPushDataInt: readPushDataInt,
10439 readUInt64LE: readUInt64LE,
10440 readVarInt: readVarInt,
10441 reverse: reverse,
10442 varIntBuffer: varIntBuffer,
10443 varIntSize: varIntSize,
10444 writePushDataInt: writePushDataInt,
10445 writeUInt64LE: writeUInt64LE,
10446 writeVarInt: writeVarInt
10447 }
10448
10449 }).call(this,require("buffer").Buffer)
10450 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10451 var createHash = require('create-hash')
10452
10453 function hash160 (buffer) {
10454 return ripemd160(sha256(buffer))
10455 }
10456
10457 function hash256 (buffer) {
10458 return sha256(sha256(buffer))
10459 }
10460
10461 function ripemd160 (buffer) {
10462 return createHash('rmd160').update(buffer).digest()
10463 }
10464
10465 function sha1 (buffer) {
10466 return createHash('sha1').update(buffer).digest()
10467 }
10468
10469 function sha256 (buffer) {
10470 return createHash('sha256').update(buffer).digest()
10471 }
10472
10473 // FIXME: Name not consistent with others
10474 var createHmac = require('create-hmac')
10475
10476 function HmacSHA256 (buffer, secret) {
10477 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10478 return createHmac('sha256', secret).update(buffer).digest()
10479 }
10480
10481 function HmacSHA512 (buffer, secret) {
10482 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10483 return createHmac('sha512', secret).update(buffer).digest()
10484 }
10485
10486 module.exports = {
10487 ripemd160: ripemd160,
10488 sha1: sha1,
10489 sha256: sha256,
10490 hash160: hash160,
10491 hash256: hash256,
10492 HmacSHA256: HmacSHA256,
10493 HmacSHA512: HmacSHA512
10494 }
10495
10496 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10497 (function (Buffer){
10498 var assert = require('assert')
10499 var createHmac = require('create-hmac')
10500 var typeForce = require('typeforce')
10501
10502 var BigInteger = require('bigi')
10503 var ECSignature = require('./ecsignature')
10504
10505 var ZERO = new Buffer([0])
10506 var ONE = new Buffer([1])
10507
10508 // https://tools.ietf.org/html/rfc6979#section-3.2
10509 function deterministicGenerateK (curve, hash, d, checkSig) {
10510 typeForce('Buffer', hash)
10511 typeForce('BigInteger', d)
10512
10513 // FIXME: remove/uncomment for 2.0.0
10514 // typeForce('Function', checkSig)
10515
10516 if (typeof checkSig !== 'function') {
10517 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10518
10519 checkSig = function (k) {
10520 var G = curve.G
10521 var n = curve.n
10522 var e = BigInteger.fromBuffer(hash)
10523
10524 var Q = G.multiply(k)
10525
10526 if (curve.isInfinity(Q))
10527 return false
10528
10529 var r = Q.affineX.mod(n)
10530 if (r.signum() === 0)
10531 return false
10532
10533 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10534 if (s.signum() === 0)
10535 return false
10536
10537 return true
10538 }
10539 }
10540
10541 // sanity check
10542 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10543
10544 var x = d.toBuffer(32)
10545 var k = new Buffer(32)
10546 var v = new Buffer(32)
10547
10548 // Step A, ignored as hash already provided
10549 // Step B
10550 v.fill(1)
10551
10552 // Step C
10553 k.fill(0)
10554
10555 // Step D
10556 k = createHmac('sha256', k)
10557 .update(v)
10558 .update(ZERO)
10559 .update(x)
10560 .update(hash)
10561 .digest()
10562
10563 // Step E
10564 v = createHmac('sha256', k).update(v).digest()
10565
10566 // Step F
10567 k = createHmac('sha256', k)
10568 .update(v)
10569 .update(ONE)
10570 .update(x)
10571 .update(hash)
10572 .digest()
10573
10574 // Step G
10575 v = createHmac('sha256', k).update(v).digest()
10576
10577 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10578 // Step H2b
10579 v = createHmac('sha256', k).update(v).digest()
10580
10581 var T = BigInteger.fromBuffer(v)
10582
10583 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10584 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10585 k = createHmac('sha256', k)
10586 .update(v)
10587 .update(ZERO)
10588 .digest()
10589
10590 v = createHmac('sha256', k).update(v).digest()
10591
10592 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10593 // Step H2b again
10594 v = createHmac('sha256', k).update(v).digest()
10595 T = BigInteger.fromBuffer(v)
10596 }
10597
10598 return T
10599 }
10600
10601 function sign (curve, hash, d) {
10602 var r, s
10603
10604 var e = BigInteger.fromBuffer(hash)
10605 var n = curve.n
10606 var G = curve.G
10607
10608 deterministicGenerateK(curve, hash, d, function (k) {
10609 var Q = G.multiply(k)
10610
10611 if (curve.isInfinity(Q))
10612 return false
10613
10614 r = Q.affineX.mod(n)
10615 if (r.signum() === 0)
10616 return false
10617
10618 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10619 if (s.signum() === 0)
10620 return false
10621
10622 return true
10623 })
10624
10625 var N_OVER_TWO = n.shiftRight(1)
10626
10627 // enforce low S values, see bip62: 'low s values in signatures'
10628 if (s.compareTo(N_OVER_TWO) > 0) {
10629 s = n.subtract(s)
10630 }
10631
10632 return new ECSignature(r, s)
10633 }
10634
10635 function verifyRaw (curve, e, signature, Q) {
10636 var n = curve.n
10637 var G = curve.G
10638
10639 var r = signature.r
10640 var s = signature.s
10641
10642 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10643 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10644 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10645
10646 // c = s^-1 mod n
10647 var c = s.modInverse(n)
10648
10649 // 1.4.4 Compute u1 = es^−1 mod n
10650 // u2 = rs^−1 mod n
10651 var u1 = e.multiply(c).mod(n)
10652 var u2 = r.multiply(c).mod(n)
10653
10654 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10655 var R = G.multiplyTwo(u1, Q, u2)
10656 var v = R.affineX.mod(n)
10657
10658 // 1.4.5 (cont.) Enforce R is not at infinity
10659 if (curve.isInfinity(R)) return false
10660
10661 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10662 return v.equals(r)
10663 }
10664
10665 function verify (curve, hash, signature, Q) {
10666 // 1.4.2 H = Hash(M), already done by the user
10667 // 1.4.3 e = H
10668 var e = BigInteger.fromBuffer(hash)
10669
10670 return verifyRaw(curve, e, signature, Q)
10671 }
10672
10673 /**
10674 * Recover a public key from a signature.
10675 *
10676 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10677 * Key Recovery Operation".
10678 *
10679 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10680 */
10681 function recoverPubKey (curve, e, signature, i) {
10682 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10683
10684 var n = curve.n
10685 var G = curve.G
10686
10687 var r = signature.r
10688 var s = signature.s
10689
10690 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10691 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10692
10693 // A set LSB signifies that the y-coordinate is odd
10694 var isYOdd = i & 1
10695
10696 // The more significant bit specifies whether we should use the
10697 // first or second candidate key.
10698 var isSecondKey = i >> 1
10699
10700 // 1.1 Let x = r + jn
10701 var x = isSecondKey ? r.add(n) : r
10702 var R = curve.pointFromX(isYOdd, x)
10703
10704 // 1.4 Check that nR is at infinity
10705 var nR = R.multiply(n)
10706 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10707
10708 // Compute -e from e
10709 var eNeg = e.negate().mod(n)
10710
10711 // 1.6.1 Compute Q = r^-1 (sR - eG)
10712 // Q = r^-1 (sR + -eG)
10713 var rInv = r.modInverse(n)
10714
10715 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10716 curve.validate(Q)
10717
10718 return Q
10719 }
10720
10721 /**
10722 * Calculate pubkey extraction parameter.
10723 *
10724 * When extracting a pubkey from a signature, we have to
10725 * distinguish four different cases. Rather than putting this
10726 * burden on the verifier, Bitcoin includes a 2-bit value with the
10727 * signature.
10728 *
10729 * This function simply tries all four cases and returns the value
10730 * that resulted in a successful pubkey recovery.
10731 */
10732 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10733 for (var i = 0; i < 4; i++) {
10734 var Qprime = recoverPubKey(curve, e, signature, i)
10735
10736 // 1.6.2 Verify Q
10737 if (Qprime.equals(Q)) {
10738 return i
10739 }
10740 }
10741
10742 throw new Error('Unable to find valid recovery factor')
10743 }
10744
10745 module.exports = {
10746 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10747 deterministicGenerateK: deterministicGenerateK,
10748 recoverPubKey: recoverPubKey,
10749 sign: sign,
10750 verify: verify,
10751 verifyRaw: verifyRaw
10752 }
10753
10754 }).call(this,require("buffer").Buffer)
10755 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10756 (function (Buffer){
10757 var assert = require('assert')
10758 var base58check = require('bs58check')
10759 var ecdsa = require('./ecdsa')
10760 var networks = require('./networks')
10761 var randomBytes = require('randombytes')
10762 var typeForce = require('typeforce')
10763
10764 var BigInteger = require('bigi')
10765 var ECPubKey = require('./ecpubkey')
10766
10767 var ecurve = require('ecurve')
10768 var secp256k1 = ecurve.getCurveByName('secp256k1')
10769
10770 function ECKey (d, compressed) {
10771 assert(d.signum() > 0, 'Private key must be greater than 0')
10772 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10773
10774 var Q = ECKey.curve.G.multiply(d)
10775
10776 this.d = d
10777 this.pub = new ECPubKey(Q, compressed)
10778 }
10779
10780 // Constants
10781 ECKey.curve = secp256k1
10782
10783 // Static constructors
10784 ECKey.fromWIF = function (string) {
10785 var payload = base58check.decode(string)
10786 var compressed = false
10787
10788 // Ignore the version byte
10789 payload = payload.slice(1)
10790
10791 if (payload.length === 33) {
10792 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10793
10794 // Truncate the compression flag
10795 payload = payload.slice(0, -1)
10796 compressed = true
10797 }
10798
10799 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10800
10801 var d = BigInteger.fromBuffer(payload)
10802 return new ECKey(d, compressed)
10803 }
10804
10805 ECKey.makeRandom = function (compressed, rng) {
10806 rng = rng || randomBytes
10807
10808 var buffer = rng(32)
10809 typeForce('Buffer', buffer)
10810 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10811
10812 var d = BigInteger.fromBuffer(buffer)
10813 d = d.mod(ECKey.curve.n)
10814
10815 return new ECKey(d, compressed)
10816 }
10817
10818 // Export functions
10819 ECKey.prototype.toWIF = function (network) {
10820 network = network || networks.bitcoin
10821
10822 var bufferLen = this.pub.compressed ? 34 : 33
10823 var buffer = new Buffer(bufferLen)
10824
10825 buffer.writeUInt8(network.wif, 0)
10826 this.d.toBuffer(32).copy(buffer, 1)
10827
10828 if (this.pub.compressed) {
10829 buffer.writeUInt8(0x01, 33)
10830 }
10831
10832 return base58check.encode(buffer)
10833 }
10834
10835 // Operations
10836 ECKey.prototype.sign = function (hash) {
10837 return ecdsa.sign(ECKey.curve, hash, this.d)
10838 }
10839
10840 module.exports = ECKey
10841
10842 }).call(this,require("buffer").Buffer)
10843 },{"./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){
10844 (function (Buffer){
10845 var crypto = require('./crypto')
10846 var ecdsa = require('./ecdsa')
10847 var typeForce = require('typeforce')
10848 var networks = require('./networks')
10849
10850 var Address = require('./address')
10851
10852 var ecurve = require('ecurve')
10853 var secp256k1 = ecurve.getCurveByName('secp256k1')
10854
10855 function ECPubKey (Q, compressed) {
10856 if (compressed === undefined) {
10857 compressed = true
10858 }
10859
10860 typeForce('Point', Q)
10861 typeForce('Boolean', compressed)
10862
10863 this.compressed = compressed
10864 this.Q = Q
10865 }
10866
10867 // Constants
10868 ECPubKey.curve = secp256k1
10869
10870 // Static constructors
10871 ECPubKey.fromBuffer = function (buffer) {
10872 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10873 return new ECPubKey(Q, Q.compressed)
10874 }
10875
10876 ECPubKey.fromHex = function (hex) {
10877 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10878 }
10879
10880 // Operations
10881 ECPubKey.prototype.getAddress = function (network) {
10882 network = network || networks.bitcoin
10883
10884 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10885 }
10886
10887 ECPubKey.prototype.verify = function (hash, signature) {
10888 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10889 }
10890
10891 // Export functions
10892 ECPubKey.prototype.toBuffer = function () {
10893 return this.Q.getEncoded(this.compressed)
10894 }
10895
10896 ECPubKey.prototype.toHex = function () {
10897 return this.toBuffer().toString('hex')
10898 }
10899
10900 module.exports = ECPubKey
10901
10902 }).call(this,require("buffer").Buffer)
10903 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10904 (function (Buffer){
10905 var assert = require('assert')
10906 var typeForce = require('typeforce')
10907
10908 var BigInteger = require('bigi')
10909
10910 function ECSignature (r, s) {
10911 typeForce('BigInteger', r)
10912 typeForce('BigInteger', s)
10913
10914 this.r = r
10915 this.s = s
10916 }
10917
10918 ECSignature.parseCompact = function (buffer) {
10919 assert.equal(buffer.length, 65, 'Invalid signature length')
10920 var i = buffer.readUInt8(0) - 27
10921
10922 // At most 3 bits
10923 assert.equal(i, i & 7, 'Invalid signature parameter')
10924 var compressed = !!(i & 4)
10925
10926 // Recovery param only
10927 i = i & 3
10928
10929 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10930 var s = BigInteger.fromBuffer(buffer.slice(33))
10931
10932 return {
10933 compressed: compressed,
10934 i: i,
10935 signature: new ECSignature(r, s)
10936 }
10937 }
10938
10939 ECSignature.fromDER = function (buffer) {
10940 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10941 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10942 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10943
10944 var rLen = buffer.readUInt8(3)
10945 assert(rLen > 0, 'R length is zero')
10946
10947 var offset = 4 + rLen
10948 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10949
10950 var sLen = buffer.readUInt8(offset + 1)
10951 assert(sLen > 0, 'S length is zero')
10952
10953 var rB = buffer.slice(4, offset)
10954 var sB = buffer.slice(offset + 2)
10955 offset += 2 + sLen
10956
10957 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10958 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10959 }
10960
10961 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10962 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10963 }
10964
10965 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10966 var r = BigInteger.fromDERInteger(rB)
10967 var s = BigInteger.fromDERInteger(sB)
10968
10969 assert(r.signum() >= 0, 'R value is negative')
10970 assert(s.signum() >= 0, 'S value is negative')
10971
10972 return new ECSignature(r, s)
10973 }
10974
10975 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10976 ECSignature.parseScriptSignature = function (buffer) {
10977 var hashType = buffer.readUInt8(buffer.length - 1)
10978 var hashTypeMod = hashType & ~0x80
10979
10980 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10981
10982 return {
10983 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10984 hashType: hashType
10985 }
10986 }
10987
10988 ECSignature.prototype.toCompact = function (i, compressed) {
10989 if (compressed) {
10990 i += 4
10991 }
10992
10993 i += 27
10994
10995 var buffer = new Buffer(65)
10996 buffer.writeUInt8(i, 0)
10997
10998 this.r.toBuffer(32).copy(buffer, 1)
10999 this.s.toBuffer(32).copy(buffer, 33)
11000
11001 return buffer
11002 }
11003
11004 ECSignature.prototype.toDER = function () {
11005 var rBa = this.r.toDERInteger()
11006 var sBa = this.s.toDERInteger()
11007
11008 var sequence = []
11009
11010 // INTEGER
11011 sequence.push(0x02, rBa.length)
11012 sequence = sequence.concat(rBa)
11013
11014 // INTEGER
11015 sequence.push(0x02, sBa.length)
11016 sequence = sequence.concat(sBa)
11017
11018 // SEQUENCE
11019 sequence.unshift(0x30, sequence.length)
11020
11021 return new Buffer(sequence)
11022 }
11023
11024 ECSignature.prototype.toScriptSignature = function (hashType) {
11025 var hashTypeMod = hashType & ~0x80
11026 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11027
11028 var hashTypeBuffer = new Buffer(1)
11029 hashTypeBuffer.writeUInt8(hashType, 0)
11030
11031 return Buffer.concat([this.toDER(), hashTypeBuffer])
11032 }
11033
11034 module.exports = ECSignature
11035
11036 }).call(this,require("buffer").Buffer)
11037 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11038 (function (Buffer){
11039 var assert = require('assert')
11040 var base58check = require('bs58check')
11041 var bcrypto = require('./crypto')
11042 var createHmac = require('create-hmac')
11043 var typeForce = require('typeforce')
11044 var networks = require('./networks')
11045
11046 var BigInteger = require('bigi')
11047 var ECKey = require('./eckey')
11048 var ECPubKey = require('./ecpubkey')
11049
11050 var ecurve = require('ecurve')
11051 var curve = ecurve.getCurveByName('secp256k1')
11052
11053 function findBIP32NetworkByVersion (version) {
11054 for (var name in networks) {
11055 var network = networks[name]
11056
11057 if (version === network.bip32.private || version === network.bip32.public) {
11058 return network
11059 }
11060 }
11061
11062 assert(false, 'Could not find network for ' + version.toString(16))
11063 }
11064
11065 function HDNode (K, chainCode, network) {
11066 network = network || networks.bitcoin
11067
11068 typeForce('Buffer', chainCode)
11069
11070 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11071 assert(network.bip32, 'Unknown BIP32 constants for network')
11072
11073 this.chainCode = chainCode
11074 this.depth = 0
11075 this.index = 0
11076 this.parentFingerprint = 0x00000000
11077 this.network = network
11078
11079 if (K instanceof BigInteger) {
11080 this.privKey = new ECKey(K, true)
11081 this.pubKey = this.privKey.pub
11082 } else if (K instanceof ECKey) {
11083 assert(K.pub.compressed, 'ECKey must be compressed')
11084 this.privKey = K
11085 this.pubKey = K.pub
11086 } else if (K instanceof ECPubKey) {
11087 assert(K.compressed, 'ECPubKey must be compressed')
11088 this.pubKey = K
11089 } else {
11090 this.pubKey = new ECPubKey(K, true)
11091 }
11092 }
11093
11094 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11095 HDNode.HIGHEST_BIT = 0x80000000
11096 HDNode.LENGTH = 78
11097
11098 HDNode.fromSeedBuffer = function (seed, network) {
11099 typeForce('Buffer', seed)
11100
11101 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11102 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11103
11104 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11105 var IL = I.slice(0, 32)
11106 var IR = I.slice(32)
11107
11108 // In case IL is 0 or >= n, the master key is invalid
11109 // This is handled by `new ECKey` in the HDNode constructor
11110 var pIL = BigInteger.fromBuffer(IL)
11111
11112 return new HDNode(pIL, IR, network)
11113 }
11114
11115 HDNode.fromSeedHex = function (hex, network) {
11116 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11117 }
11118
11119 HDNode.fromBase58 = function (string, network) {
11120 return HDNode.fromBuffer(base58check.decode(string), network, true)
11121 }
11122
11123 // FIXME: remove in 2.x.y
11124 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11125 if (!__ignoreDeprecation) {
11126 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11127 }
11128
11129 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11130
11131 // 4 byte: version bytes
11132 var version = buffer.readUInt32BE(0)
11133
11134 if (network) {
11135 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11136
11137 // auto-detect
11138 } else {
11139 network = findBIP32NetworkByVersion(version)
11140 }
11141
11142 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11143 var depth = buffer.readUInt8(4)
11144
11145 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11146 var parentFingerprint = buffer.readUInt32BE(5)
11147 if (depth === 0) {
11148 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11149 }
11150
11151 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11152 // This is encoded in MSB order. (0x00000000 if master key)
11153 var index = buffer.readUInt32BE(9)
11154 assert(depth > 0 || index === 0, 'Invalid index')
11155
11156 // 32 bytes: the chain code
11157 var chainCode = buffer.slice(13, 45)
11158 var data, hd
11159
11160 // 33 bytes: private key data (0x00 + k)
11161 if (version === network.bip32.private) {
11162 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11163 data = buffer.slice(46, 78)
11164 var d = BigInteger.fromBuffer(data)
11165 hd = new HDNode(d, chainCode, network)
11166
11167 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11168 } else {
11169 data = buffer.slice(45, 78)
11170 var Q = ecurve.Point.decodeFrom(curve, data)
11171 assert.equal(Q.compressed, true, 'Invalid public key')
11172
11173 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11174 // If not, the extended public key is invalid.
11175 curve.validate(Q)
11176
11177 hd = new HDNode(Q, chainCode, network)
11178 }
11179
11180 hd.depth = depth
11181 hd.index = index
11182 hd.parentFingerprint = parentFingerprint
11183
11184 return hd
11185 }
11186
11187 // FIXME: remove in 2.x.y
11188 HDNode.fromHex = function (hex, network) {
11189 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11190 }
11191
11192 HDNode.prototype.getIdentifier = function () {
11193 return bcrypto.hash160(this.pubKey.toBuffer())
11194 }
11195
11196 HDNode.prototype.getFingerprint = function () {
11197 return this.getIdentifier().slice(0, 4)
11198 }
11199
11200 HDNode.prototype.getAddress = function () {
11201 return this.pubKey.getAddress(this.network)
11202 }
11203
11204 HDNode.prototype.neutered = function () {
11205 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11206 neutered.depth = this.depth
11207 neutered.index = this.index
11208 neutered.parentFingerprint = this.parentFingerprint
11209
11210 return neutered
11211 }
11212
11213 HDNode.prototype.toBase58 = function (isPrivate) {
11214 return base58check.encode(this.toBuffer(isPrivate, true))
11215 }
11216
11217 // FIXME: remove in 2.x.y
11218 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11219 if (isPrivate === undefined) {
11220 isPrivate = !!this.privKey
11221
11222 // FIXME: remove in 2.x.y
11223 } else {
11224 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11225 }
11226
11227 if (!__ignoreDeprecation) {
11228 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11229 }
11230
11231 // Version
11232 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11233 var buffer = new Buffer(HDNode.LENGTH)
11234
11235 // 4 bytes: version bytes
11236 buffer.writeUInt32BE(version, 0)
11237
11238 // Depth
11239 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11240 buffer.writeUInt8(this.depth, 4)
11241
11242 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11243 buffer.writeUInt32BE(this.parentFingerprint, 5)
11244
11245 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11246 // This is encoded in Big endian. (0x00000000 if master key)
11247 buffer.writeUInt32BE(this.index, 9)
11248
11249 // 32 bytes: the chain code
11250 this.chainCode.copy(buffer, 13)
11251
11252 // 33 bytes: the public key or private key data
11253 if (isPrivate) {
11254 // FIXME: remove in 2.x.y
11255 assert(this.privKey, 'Missing private key')
11256
11257 // 0x00 + k for private keys
11258 buffer.writeUInt8(0, 45)
11259 this.privKey.d.toBuffer(32).copy(buffer, 46)
11260 } else {
11261 // X9.62 encoding for public keys
11262 this.pubKey.toBuffer().copy(buffer, 45)
11263 }
11264
11265 return buffer
11266 }
11267
11268 // FIXME: remove in 2.x.y
11269 HDNode.prototype.toHex = function (isPrivate) {
11270 return this.toBuffer(isPrivate).toString('hex')
11271 }
11272
11273 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11274 HDNode.prototype.derive = function (index) {
11275 var isHardened = index >= HDNode.HIGHEST_BIT
11276 var indexBuffer = new Buffer(4)
11277 indexBuffer.writeUInt32BE(index, 0)
11278
11279 var data
11280
11281 // Hardened child
11282 if (isHardened) {
11283 assert(this.privKey, 'Could not derive hardened child key')
11284
11285 // data = 0x00 || ser256(kpar) || ser32(index)
11286 data = Buffer.concat([
11287 this.privKey.d.toBuffer(33),
11288 indexBuffer
11289 ])
11290
11291 // Normal child
11292 } else {
11293 // data = serP(point(kpar)) || ser32(index)
11294 // = serP(Kpar) || ser32(index)
11295 data = Buffer.concat([
11296 this.pubKey.toBuffer(),
11297 indexBuffer
11298 ])
11299 }
11300
11301 var I = createHmac('sha512', this.chainCode).update(data).digest()
11302 var IL = I.slice(0, 32)
11303 var IR = I.slice(32)
11304
11305 var pIL = BigInteger.fromBuffer(IL)
11306
11307 // In case parse256(IL) >= n, proceed with the next value for i
11308 if (pIL.compareTo(curve.n) >= 0) {
11309 return this.derive(index + 1)
11310 }
11311
11312 // Private parent key -> private child key
11313 var hd
11314 if (this.privKey) {
11315 // ki = parse256(IL) + kpar (mod n)
11316 var ki = pIL.add(this.privKey.d).mod(curve.n)
11317
11318 // In case ki == 0, proceed with the next value for i
11319 if (ki.signum() === 0) {
11320 return this.derive(index + 1)
11321 }
11322
11323 hd = new HDNode(ki, IR, this.network)
11324
11325 // Public parent key -> public child key
11326 } else {
11327 // Ki = point(parse256(IL)) + Kpar
11328 // = G*IL + Kpar
11329 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11330
11331 // In case Ki is the point at infinity, proceed with the next value for i
11332 if (curve.isInfinity(Ki)) {
11333 return this.derive(index + 1)
11334 }
11335
11336 hd = new HDNode(Ki, IR, this.network)
11337 }
11338
11339 hd.depth = this.depth + 1
11340 hd.index = index
11341 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11342
11343 return hd
11344 }
11345
11346 HDNode.prototype.deriveHardened = function (index) {
11347 // Only derives hardened private keys by default
11348 return this.derive(index + HDNode.HIGHEST_BIT)
11349 }
11350
11351 HDNode.prototype.toString = HDNode.prototype.toBase58
11352
11353 module.exports = HDNode
11354
11355 }).call(this,require("buffer").Buffer)
11356 },{"./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){
11357 module.exports = {
11358 Address: require('./address'),
11359 base58check: require('./base58check'),
11360 Block: require('./block'),
11361 bufferutils: require('./bufferutils'),
11362 crypto: require('./crypto'),
11363 ecdsa: require('./ecdsa'),
11364 ECKey: require('./eckey'),
11365 ECPubKey: require('./ecpubkey'),
11366 ECSignature: require('./ecsignature'),
11367 Message: require('./message'),
11368 opcodes: require('./opcodes'),
11369 HDNode: require('./hdnode'),
11370 Script: require('./script'),
11371 scripts: require('./scripts'),
11372 Transaction: require('./transaction'),
11373 TransactionBuilder: require('./transaction_builder'),
11374 networks: require('./networks'),
11375 Wallet: require('./wallet')
11376 }
11377
11378 },{"./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){
11379 (function (Buffer){
11380 var bufferutils = require('./bufferutils')
11381 var crypto = require('./crypto')
11382 var ecdsa = require('./ecdsa')
11383 var networks = require('./networks')
11384
11385 var BigInteger = require('bigi')
11386 var ECPubKey = require('./ecpubkey')
11387 var ECSignature = require('./ecsignature')
11388
11389 var ecurve = require('ecurve')
11390 var ecparams = ecurve.getCurveByName('secp256k1')
11391
11392 function magicHash (message, network) {
11393 var magicPrefix = new Buffer(network.magicPrefix)
11394 var messageBuffer = new Buffer(message)
11395 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11396
11397 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11398 return crypto.hash256(buffer)
11399 }
11400
11401 function sign (privKey, message, network) {
11402 network = network || networks.bitcoin
11403
11404 var hash = magicHash(message, network)
11405 var signature = privKey.sign(hash)
11406 var e = BigInteger.fromBuffer(hash)
11407 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11408
11409 return signature.toCompact(i, privKey.pub.compressed)
11410 }
11411
11412 // TODO: network could be implied from address
11413 function verify (address, signature, message, network) {
11414 if (!Buffer.isBuffer(signature)) {
11415 signature = new Buffer(signature, 'base64')
11416 }
11417
11418 network = network || networks.bitcoin
11419
11420 var hash = magicHash(message, network)
11421 var parsed = ECSignature.parseCompact(signature)
11422 var e = BigInteger.fromBuffer(hash)
11423 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11424
11425 var pubKey = new ECPubKey(Q, parsed.compressed)
11426 return pubKey.getAddress(network).toString() === address.toString()
11427 }
11428
11429 module.exports = {
11430 magicHash: magicHash,
11431 sign: sign,
11432 verify: verify
11433 }
11434
11435 }).call(this,require("buffer").Buffer)
11436 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11437 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11438 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11439
11440 var networks = {
11441 bitcoin: {
11442 magicPrefix: '\x18Bitcoin Signed Message:\n',
11443 bip32: {
11444 public: 0x0488b21e,
11445 private: 0x0488ade4
11446 },
11447 pubKeyHash: 0x00,
11448 scriptHash: 0x05,
11449 wif: 0x80,
11450 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11451 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11452 estimateFee: estimateFee('bitcoin')
11453 },
11454 testnet: {
11455 magicPrefix: '\x18Bitcoin Signed Message:\n',
11456 bip32: {
11457 public: 0x043587cf,
11458 private: 0x04358394
11459 },
11460 pubKeyHash: 0x6f,
11461 scriptHash: 0xc4,
11462 wif: 0xef,
11463 dustThreshold: 546,
11464 feePerKb: 10000,
11465 estimateFee: estimateFee('testnet')
11466 },
11467 litecoin: {
11468 magicPrefix: '\x19Litecoin Signed Message:\n',
11469 bip32: {
11470 public: 0x019da462,
11471 private: 0x019d9cfe
11472 },
11473 pubKeyHash: 0x30,
11474 scriptHash: 0x05,
11475 wif: 0xb0,
11476 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11477 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11478 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11479 estimateFee: estimateFee('litecoin')
11480 },
11481 dogecoin: {
11482 magicPrefix: '\x19Dogecoin Signed Message:\n',
11483 bip32: {
11484 public: 0x02facafd,
11485 private: 0x02fac398
11486 },
11487 pubKeyHash: 0x1e,
11488 scriptHash: 0x16,
11489 wif: 0x9e,
11490 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11491 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11492 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11493 estimateFee: estimateFee('dogecoin')
11494 },
11495 viacoin: {
11496 magicPrefix: '\x18Viacoin Signed Message:\n',
11497 bip32: {
11498 public: 0x0488b21e,
11499 private: 0x0488ade4
11500 },
11501 pubKeyHash: 0x47,
11502 scriptHash: 0x21,
11503 wif: 0xc7,
11504 dustThreshold: 560,
11505 dustSoftThreshold: 100000,
11506 feePerKb: 100000, //
11507 estimateFee: estimateFee('viacoin')
11508 },
11509 viacointestnet: {
11510 magicPrefix: '\x18Viacoin Signed Message:\n',
11511 bip32: {
11512 public: 0x043587cf,
11513 private: 0x04358394
11514 },
11515 pubKeyHash: 0x7f,
11516 scriptHash: 0xc4,
11517 wif: 0xff,
11518 dustThreshold: 560,
11519 dustSoftThreshold: 100000,
11520 feePerKb: 100000,
11521 estimateFee: estimateFee('viacointestnet')
11522 },
11523 gamerscoin: {
11524 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11525 bip32: {
11526 public: 0x019da462,
11527 private: 0x019d9cfe
11528 },
11529 pubKeyHash: 0x26,
11530 scriptHash: 0x05,
11531 wif: 0xA6,
11532 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11533 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11534 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11535 estimateFee: estimateFee('gamerscoin')
11536 },
11537 jumbucks: {
11538 magicPrefix: '\x19Jumbucks Signed Message:\n',
11539 bip32: {
11540 public: 0x037a689a,
11541 private: 0x037a6460
11542 },
11543 pubKeyHash: 0x2b,
11544 scriptHash: 0x05,
11545 wif: 0xab,
11546 dustThreshold: 0,
11547 dustSoftThreshold: 10000,
11548 feePerKb: 10000,
11549 estimateFee: estimateFee('jumbucks')
11550 },
11551 zetacoin: {
11552 magicPrefix: '\x18Zetacoin Signed Message:\n',
11553 bip32: {
11554 public: 0x0488b21e,
11555 private: 0x0488ade4
11556 },
11557 pubKeyHash: 0x50,
11558 scriptHash: 0x09,
11559 wif: 0xe0,
11560 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11561 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11562 estimateFee: estimateFee('zetacoin')
11563 }
11564 }
11565
11566 function estimateFee (type) {
11567 return function (tx) {
11568 var network = networks[type]
11569 var baseFee = network.feePerKb
11570 var byteSize = tx.toBuffer().length
11571
11572 var fee = baseFee * Math.ceil(byteSize / 1000)
11573 if (network.dustSoftThreshold === undefined) return fee
11574
11575 tx.outs.forEach(function (e) {
11576 if (e.value < network.dustSoftThreshold) {
11577 fee += baseFee
11578 }
11579 })
11580
11581 return fee
11582 }
11583 }
11584
11585 module.exports = networks
11586
11587 },{}],67:[function(require,module,exports){
11588 module.exports = {
11589 // push value
11590 OP_FALSE: 0,
11591 OP_0: 0,
11592 OP_PUSHDATA1: 76,
11593 OP_PUSHDATA2: 77,
11594 OP_PUSHDATA4: 78,
11595 OP_1NEGATE: 79,
11596 OP_RESERVED: 80,
11597 OP_1: 81,
11598 OP_TRUE: 81,
11599 OP_2: 82,
11600 OP_3: 83,
11601 OP_4: 84,
11602 OP_5: 85,
11603 OP_6: 86,
11604 OP_7: 87,
11605 OP_8: 88,
11606 OP_9: 89,
11607 OP_10: 90,
11608 OP_11: 91,
11609 OP_12: 92,
11610 OP_13: 93,
11611 OP_14: 94,
11612 OP_15: 95,
11613 OP_16: 96,
11614
11615 // control
11616 OP_NOP: 97,
11617 OP_VER: 98,
11618 OP_IF: 99,
11619 OP_NOTIF: 100,
11620 OP_VERIF: 101,
11621 OP_VERNOTIF: 102,
11622 OP_ELSE: 103,
11623 OP_ENDIF: 104,
11624 OP_VERIFY: 105,
11625 OP_RETURN: 106,
11626
11627 // stack ops
11628 OP_TOALTSTACK: 107,
11629 OP_FROMALTSTACK: 108,
11630 OP_2DROP: 109,
11631 OP_2DUP: 110,
11632 OP_3DUP: 111,
11633 OP_2OVER: 112,
11634 OP_2ROT: 113,
11635 OP_2SWAP: 114,
11636 OP_IFDUP: 115,
11637 OP_DEPTH: 116,
11638 OP_DROP: 117,
11639 OP_DUP: 118,
11640 OP_NIP: 119,
11641 OP_OVER: 120,
11642 OP_PICK: 121,
11643 OP_ROLL: 122,
11644 OP_ROT: 123,
11645 OP_SWAP: 124,
11646 OP_TUCK: 125,
11647
11648 // splice ops
11649 OP_CAT: 126,
11650 OP_SUBSTR: 127,
11651 OP_LEFT: 128,
11652 OP_RIGHT: 129,
11653 OP_SIZE: 130,
11654
11655 // bit logic
11656 OP_INVERT: 131,
11657 OP_AND: 132,
11658 OP_OR: 133,
11659 OP_XOR: 134,
11660 OP_EQUAL: 135,
11661 OP_EQUALVERIFY: 136,
11662 OP_RESERVED1: 137,
11663 OP_RESERVED2: 138,
11664
11665 // numeric
11666 OP_1ADD: 139,
11667 OP_1SUB: 140,
11668 OP_2MUL: 141,
11669 OP_2DIV: 142,
11670 OP_NEGATE: 143,
11671 OP_ABS: 144,
11672 OP_NOT: 145,
11673 OP_0NOTEQUAL: 146,
11674
11675 OP_ADD: 147,
11676 OP_SUB: 148,
11677 OP_MUL: 149,
11678 OP_DIV: 150,
11679 OP_MOD: 151,
11680 OP_LSHIFT: 152,
11681 OP_RSHIFT: 153,
11682
11683 OP_BOOLAND: 154,
11684 OP_BOOLOR: 155,
11685 OP_NUMEQUAL: 156,
11686 OP_NUMEQUALVERIFY: 157,
11687 OP_NUMNOTEQUAL: 158,
11688 OP_LESSTHAN: 159,
11689 OP_GREATERTHAN: 160,
11690 OP_LESSTHANOREQUAL: 161,
11691 OP_GREATERTHANOREQUAL: 162,
11692 OP_MIN: 163,
11693 OP_MAX: 164,
11694
11695 OP_WITHIN: 165,
11696
11697 // crypto
11698 OP_RIPEMD160: 166,
11699 OP_SHA1: 167,
11700 OP_SHA256: 168,
11701 OP_HASH160: 169,
11702 OP_HASH256: 170,
11703 OP_CODESEPARATOR: 171,
11704 OP_CHECKSIG: 172,
11705 OP_CHECKSIGVERIFY: 173,
11706 OP_CHECKMULTISIG: 174,
11707 OP_CHECKMULTISIGVERIFY: 175,
11708
11709 // expansion
11710 OP_NOP1: 176,
11711 OP_NOP2: 177,
11712 OP_NOP3: 178,
11713 OP_NOP4: 179,
11714 OP_NOP5: 180,
11715 OP_NOP6: 181,
11716 OP_NOP7: 182,
11717 OP_NOP8: 183,
11718 OP_NOP9: 184,
11719 OP_NOP10: 185,
11720
11721 // template matching params
11722 OP_PUBKEYHASH: 253,
11723 OP_PUBKEY: 254,
11724 OP_INVALIDOPCODE: 255
11725 }
11726
11727 },{}],68:[function(require,module,exports){
11728 (function (Buffer){
11729 var assert = require('assert')
11730 var bufferutils = require('./bufferutils')
11731 var crypto = require('./crypto')
11732 var typeForce = require('typeforce')
11733 var opcodes = require('./opcodes')
11734
11735 function Script (buffer, chunks) {
11736 typeForce('Buffer', buffer)
11737 typeForce('Array', chunks)
11738
11739 this.buffer = buffer
11740 this.chunks = chunks
11741 }
11742
11743 Script.fromASM = function (asm) {
11744 var strChunks = asm.split(' ')
11745 var chunks = strChunks.map(function (strChunk) {
11746 // opcode
11747 if (strChunk in opcodes) {
11748 return opcodes[strChunk]
11749
11750 // data chunk
11751 } else {
11752 return new Buffer(strChunk, 'hex')
11753 }
11754 })
11755
11756 return Script.fromChunks(chunks)
11757 }
11758
11759 Script.fromBuffer = function (buffer) {
11760 var chunks = []
11761 var i = 0
11762
11763 while (i < buffer.length) {
11764 var opcode = buffer.readUInt8(i)
11765
11766 // data chunk
11767 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11768 var d = bufferutils.readPushDataInt(buffer, i)
11769
11770 // did reading a pushDataInt fail? return non-chunked script
11771 if (d === null) return new Script(buffer, [])
11772 i += d.size
11773
11774 // attempt to read too much data?
11775 if (i + d.number > buffer.length) return new Script(buffer, [])
11776
11777 var data = buffer.slice(i, i + d.number)
11778 i += d.number
11779
11780 chunks.push(data)
11781
11782 // opcode
11783 } else {
11784 chunks.push(opcode)
11785
11786 i += 1
11787 }
11788 }
11789
11790 return new Script(buffer, chunks)
11791 }
11792
11793 Script.fromChunks = function (chunks) {
11794 typeForce('Array', chunks)
11795
11796 var bufferSize = chunks.reduce(function (accum, chunk) {
11797 // data chunk
11798 if (Buffer.isBuffer(chunk)) {
11799 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11800 }
11801
11802 // opcode
11803 return accum + 1
11804 }, 0.0)
11805
11806 var buffer = new Buffer(bufferSize)
11807 var offset = 0
11808
11809 chunks.forEach(function (chunk) {
11810 // data chunk
11811 if (Buffer.isBuffer(chunk)) {
11812 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11813
11814 chunk.copy(buffer, offset)
11815 offset += chunk.length
11816
11817 // opcode
11818 } else {
11819 buffer.writeUInt8(chunk, offset)
11820 offset += 1
11821 }
11822 })
11823
11824 assert.equal(offset, buffer.length, 'Could not decode chunks')
11825 return new Script(buffer, chunks)
11826 }
11827
11828 Script.fromHex = function (hex) {
11829 return Script.fromBuffer(new Buffer(hex, 'hex'))
11830 }
11831
11832 Script.EMPTY = Script.fromChunks([])
11833
11834 Script.prototype.getHash = function () {
11835 return crypto.hash160(this.buffer)
11836 }
11837
11838 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11839 Script.prototype.without = function (needle) {
11840 return Script.fromChunks(this.chunks.filter(function (op) {
11841 return op !== needle
11842 }))
11843 }
11844
11845 var reverseOps = []
11846 for (var op in opcodes) {
11847 var code = opcodes[op]
11848 reverseOps[code] = op
11849 }
11850
11851 Script.prototype.toASM = function () {
11852 return this.chunks.map(function (chunk) {
11853 // data chunk
11854 if (Buffer.isBuffer(chunk)) {
11855 return chunk.toString('hex')
11856
11857 // opcode
11858 } else {
11859 return reverseOps[chunk]
11860 }
11861 }).join(' ')
11862 }
11863
11864 Script.prototype.toBuffer = function () {
11865 return this.buffer
11866 }
11867
11868 Script.prototype.toHex = function () {
11869 return this.toBuffer().toString('hex')
11870 }
11871
11872 module.exports = Script
11873
11874 }).call(this,require("buffer").Buffer)
11875 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11876 (function (Buffer){
11877 var assert = require('assert')
11878 var ops = require('./opcodes')
11879 var typeForce = require('typeforce')
11880
11881 var ecurve = require('ecurve')
11882 var curve = ecurve.getCurveByName('secp256k1')
11883
11884 var ECSignature = require('./ecsignature')
11885 var Script = require('./script')
11886
11887 function isCanonicalPubKey (buffer) {
11888 if (!Buffer.isBuffer(buffer)) return false
11889
11890 try {
11891 ecurve.Point.decodeFrom(curve, buffer)
11892 } catch (e) {
11893 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11894 throw e
11895
11896 return false
11897 }
11898
11899 return true
11900 }
11901
11902 function isCanonicalSignature (buffer) {
11903 if (!Buffer.isBuffer(buffer)) return false
11904
11905 try {
11906 ECSignature.parseScriptSignature(buffer)
11907 } catch (e) {
11908 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/))) {
11909 throw e
11910 }
11911
11912 return false
11913 }
11914
11915 return true
11916 }
11917
11918 function isPubKeyHashInput (script) {
11919 return script.chunks.length === 2 &&
11920 isCanonicalSignature(script.chunks[0]) &&
11921 isCanonicalPubKey(script.chunks[1])
11922 }
11923
11924 function isPubKeyHashOutput (script) {
11925 return script.chunks.length === 5 &&
11926 script.chunks[0] === ops.OP_DUP &&
11927 script.chunks[1] === ops.OP_HASH160 &&
11928 Buffer.isBuffer(script.chunks[2]) &&
11929 script.chunks[2].length === 20 &&
11930 script.chunks[3] === ops.OP_EQUALVERIFY &&
11931 script.chunks[4] === ops.OP_CHECKSIG
11932 }
11933
11934 function isPubKeyInput (script) {
11935 return script.chunks.length === 1 &&
11936 isCanonicalSignature(script.chunks[0])
11937 }
11938
11939 function isPubKeyOutput (script) {
11940 return script.chunks.length === 2 &&
11941 isCanonicalPubKey(script.chunks[0]) &&
11942 script.chunks[1] === ops.OP_CHECKSIG
11943 }
11944
11945 function isScriptHashInput (script, allowIncomplete) {
11946 if (script.chunks.length < 2) return false
11947
11948 var lastChunk = script.chunks[script.chunks.length - 1]
11949 if (!Buffer.isBuffer(lastChunk)) return false
11950
11951 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11952 var redeemScript = Script.fromBuffer(lastChunk)
11953
11954 // is redeemScript a valid script?
11955 if (redeemScript.chunks.length === 0) return false
11956
11957 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11958 }
11959
11960 function isScriptHashOutput (script) {
11961 return script.chunks.length === 3 &&
11962 script.chunks[0] === ops.OP_HASH160 &&
11963 Buffer.isBuffer(script.chunks[1]) &&
11964 script.chunks[1].length === 20 &&
11965 script.chunks[2] === ops.OP_EQUAL
11966 }
11967
11968 // allowIncomplete is to account for combining signatures
11969 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11970 function isMultisigInput (script, allowIncomplete) {
11971 if (script.chunks.length < 2) return false
11972 if (script.chunks[0] !== ops.OP_0) return false
11973
11974 if (allowIncomplete) {
11975 return script.chunks.slice(1).every(function (chunk) {
11976 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11977 })
11978 }
11979
11980 return script.chunks.slice(1).every(isCanonicalSignature)
11981 }
11982
11983 function isMultisigOutput (script) {
11984 if (script.chunks.length < 4) return false
11985 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11986
11987 var mOp = script.chunks[0]
11988 if (mOp === ops.OP_0) return false
11989 if (mOp < ops.OP_1) return false
11990 if (mOp > ops.OP_16) return false
11991
11992 var nOp = script.chunks[script.chunks.length - 2]
11993 if (nOp === ops.OP_0) return false
11994 if (nOp < ops.OP_1) return false
11995 if (nOp > ops.OP_16) return false
11996
11997 var m = mOp - (ops.OP_1 - 1)
11998 var n = nOp - (ops.OP_1 - 1)
11999 if (n < m) return false
12000
12001 var pubKeys = script.chunks.slice(1, -2)
12002 if (n < pubKeys.length) return false
12003
12004 return pubKeys.every(isCanonicalPubKey)
12005 }
12006
12007 function isNullDataOutput (script) {
12008 return script.chunks[0] === ops.OP_RETURN
12009 }
12010
12011 function classifyOutput (script) {
12012 typeForce('Script', script)
12013
12014 if (isPubKeyHashOutput(script)) {
12015 return 'pubkeyhash'
12016 } else if (isScriptHashOutput(script)) {
12017 return 'scripthash'
12018 } else if (isMultisigOutput(script)) {
12019 return 'multisig'
12020 } else if (isPubKeyOutput(script)) {
12021 return 'pubkey'
12022 } else if (isNullDataOutput(script)) {
12023 return 'nulldata'
12024 }
12025
12026 return 'nonstandard'
12027 }
12028
12029 function classifyInput (script, allowIncomplete) {
12030 typeForce('Script', script)
12031
12032 if (isPubKeyHashInput(script)) {
12033 return 'pubkeyhash'
12034 } else if (isMultisigInput(script, allowIncomplete)) {
12035 return 'multisig'
12036 } else if (isScriptHashInput(script, allowIncomplete)) {
12037 return 'scripthash'
12038 } else if (isPubKeyInput(script)) {
12039 return 'pubkey'
12040 }
12041
12042 return 'nonstandard'
12043 }
12044
12045 // Standard Script Templates
12046 // {pubKey} OP_CHECKSIG
12047 function pubKeyOutput (pubKey) {
12048 return Script.fromChunks([
12049 pubKey.toBuffer(),
12050 ops.OP_CHECKSIG
12051 ])
12052 }
12053
12054 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12055 function pubKeyHashOutput (hash) {
12056 typeForce('Buffer', hash)
12057
12058 return Script.fromChunks([
12059 ops.OP_DUP,
12060 ops.OP_HASH160,
12061 hash,
12062 ops.OP_EQUALVERIFY,
12063 ops.OP_CHECKSIG
12064 ])
12065 }
12066
12067 // OP_HASH160 {scriptHash} OP_EQUAL
12068 function scriptHashOutput (hash) {
12069 typeForce('Buffer', hash)
12070
12071 return Script.fromChunks([
12072 ops.OP_HASH160,
12073 hash,
12074 ops.OP_EQUAL
12075 ])
12076 }
12077
12078 // m [pubKeys ...] n OP_CHECKMULTISIG
12079 function multisigOutput (m, pubKeys) {
12080 typeForce(['ECPubKey'], pubKeys)
12081
12082 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12083
12084 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12085 return pubKey.toBuffer()
12086 })
12087 var n = pubKeys.length
12088
12089 return Script.fromChunks([].concat(
12090 (ops.OP_1 - 1) + m,
12091 pubKeyBuffers,
12092 (ops.OP_1 - 1) + n,
12093 ops.OP_CHECKMULTISIG
12094 ))
12095 }
12096
12097 // {signature}
12098 function pubKeyInput (signature) {
12099 typeForce('Buffer', signature)
12100
12101 return Script.fromChunks([signature])
12102 }
12103
12104 // {signature} {pubKey}
12105 function pubKeyHashInput (signature, pubKey) {
12106 typeForce('Buffer', signature)
12107
12108 return Script.fromChunks([signature, pubKey.toBuffer()])
12109 }
12110
12111 // <scriptSig> {serialized scriptPubKey script}
12112 function scriptHashInput (scriptSig, scriptPubKey) {
12113 return Script.fromChunks([].concat(
12114 scriptSig.chunks,
12115 scriptPubKey.toBuffer()
12116 ))
12117 }
12118
12119 // OP_0 [signatures ...]
12120 function multisigInput (signatures, scriptPubKey) {
12121 if (scriptPubKey) {
12122 assert(isMultisigOutput(scriptPubKey))
12123
12124 var mOp = scriptPubKey.chunks[0]
12125 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12126 var m = mOp - (ops.OP_1 - 1)
12127 var n = nOp - (ops.OP_1 - 1)
12128
12129 assert(signatures.length >= m, 'Not enough signatures provided')
12130 assert(signatures.length <= n, 'Too many signatures provided')
12131 }
12132
12133 return Script.fromChunks([].concat(ops.OP_0, signatures))
12134 }
12135
12136 function nullDataOutput (data) {
12137 return Script.fromChunks([ops.OP_RETURN, data])
12138 }
12139
12140 module.exports = {
12141 isCanonicalPubKey: isCanonicalPubKey,
12142 isCanonicalSignature: isCanonicalSignature,
12143 isPubKeyHashInput: isPubKeyHashInput,
12144 isPubKeyHashOutput: isPubKeyHashOutput,
12145 isPubKeyInput: isPubKeyInput,
12146 isPubKeyOutput: isPubKeyOutput,
12147 isScriptHashInput: isScriptHashInput,
12148 isScriptHashOutput: isScriptHashOutput,
12149 isMultisigInput: isMultisigInput,
12150 isMultisigOutput: isMultisigOutput,
12151 isNullDataOutput: isNullDataOutput,
12152 classifyOutput: classifyOutput,
12153 classifyInput: classifyInput,
12154 pubKeyOutput: pubKeyOutput,
12155 pubKeyHashOutput: pubKeyHashOutput,
12156 scriptHashOutput: scriptHashOutput,
12157 multisigOutput: multisigOutput,
12158 pubKeyInput: pubKeyInput,
12159 pubKeyHashInput: pubKeyHashInput,
12160 scriptHashInput: scriptHashInput,
12161 multisigInput: multisigInput,
12162 dataOutput: function (data) {
12163 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12164 return nullDataOutput(data)
12165 },
12166 nullDataOutput: nullDataOutput
12167 }
12168
12169 }).call(this,require("buffer").Buffer)
12170 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12171 (function (Buffer){
12172 var assert = require('assert')
12173 var bufferutils = require('./bufferutils')
12174 var crypto = require('./crypto')
12175 var typeForce = require('typeforce')
12176 var opcodes = require('./opcodes')
12177 var scripts = require('./scripts')
12178
12179 var Address = require('./address')
12180 var ECSignature = require('./ecsignature')
12181 var Script = require('./script')
12182
12183 function Transaction () {
12184 this.version = 1
12185 this.locktime = 0
12186 this.ins = []
12187 this.outs = []
12188 }
12189
12190 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12191 Transaction.SIGHASH_ALL = 0x01
12192 Transaction.SIGHASH_NONE = 0x02
12193 Transaction.SIGHASH_SINGLE = 0x03
12194 Transaction.SIGHASH_ANYONECANPAY = 0x80
12195
12196 Transaction.fromBuffer = function (buffer, __disableAssert) {
12197 var offset = 0
12198 function readSlice (n) {
12199 offset += n
12200 return buffer.slice(offset - n, offset)
12201 }
12202
12203 function readUInt32 () {
12204 var i = buffer.readUInt32LE(offset)
12205 offset += 4
12206 return i
12207 }
12208
12209 function readUInt64 () {
12210 var i = bufferutils.readUInt64LE(buffer, offset)
12211 offset += 8
12212 return i
12213 }
12214
12215 function readVarInt () {
12216 var vi = bufferutils.readVarInt(buffer, offset)
12217 offset += vi.size
12218 return vi.number
12219 }
12220
12221 function readScript () {
12222 return Script.fromBuffer(readSlice(readVarInt()))
12223 }
12224
12225 function readGenerationScript () {
12226 return new Script(readSlice(readVarInt()), [])
12227 }
12228
12229 var tx = new Transaction()
12230 tx.version = readUInt32()
12231
12232 var vinLen = readVarInt()
12233 for (var i = 0; i < vinLen; ++i) {
12234 var hash = readSlice(32)
12235
12236 if (Transaction.isCoinbaseHash(hash)) {
12237 tx.ins.push({
12238 hash: hash,
12239 index: readUInt32(),
12240 script: readGenerationScript(),
12241 sequence: readUInt32()
12242 })
12243 } else {
12244 tx.ins.push({
12245 hash: hash,
12246 index: readUInt32(),
12247 script: readScript(),
12248 sequence: readUInt32()
12249 })
12250 }
12251 }
12252
12253 var voutLen = readVarInt()
12254 for (i = 0; i < voutLen; ++i) {
12255 tx.outs.push({
12256 value: readUInt64(),
12257 script: readScript()
12258 })
12259 }
12260
12261 tx.locktime = readUInt32()
12262
12263 if (!__disableAssert) {
12264 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12265 }
12266
12267 return tx
12268 }
12269
12270 Transaction.fromHex = function (hex) {
12271 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12272 }
12273
12274 Transaction.isCoinbaseHash = function (buffer) {
12275 return Array.prototype.every.call(buffer, function (x) {
12276 return x === 0
12277 })
12278 }
12279
12280 /**
12281 * Create a new txIn.
12282 *
12283 * Can be called with any of:
12284 *
12285 * - A transaction and an index
12286 * - A transaction hash and an index
12287 *
12288 * Note that this method does not sign the created input.
12289 */
12290 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12291 if (sequence === undefined || sequence === null) {
12292 sequence = Transaction.DEFAULT_SEQUENCE
12293 }
12294
12295 script = script || Script.EMPTY
12296
12297 if (typeof hash === 'string') {
12298 // TxId hex is big-endian, we need little-endian
12299 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12300 } else if (hash instanceof Transaction) {
12301 hash = hash.getHash()
12302 }
12303
12304 typeForce('Buffer', hash)
12305 typeForce('Number', index)
12306 typeForce('Number', sequence)
12307 typeForce('Script', script)
12308
12309 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12310
12311 // Add the input and return the input's index
12312 return (this.ins.push({
12313 hash: hash,
12314 index: index,
12315 script: script,
12316 sequence: sequence
12317 }) - 1)
12318 }
12319
12320 /**
12321 * Create a new txOut.
12322 *
12323 * Can be called with:
12324 *
12325 * - A base58 address string and a value
12326 * - An Address object and a value
12327 * - A scriptPubKey Script and a value
12328 */
12329 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12330 // Attempt to get a valid address if it's a base58 address string
12331 if (typeof scriptPubKey === 'string') {
12332 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12333 }
12334
12335 // Attempt to get a valid script if it's an Address object
12336 if (scriptPubKey instanceof Address) {
12337 scriptPubKey = scriptPubKey.toOutputScript()
12338 }
12339
12340 typeForce('Script', scriptPubKey)
12341 typeForce('Number', value)
12342
12343 // Add the output and return the output's index
12344 return (this.outs.push({
12345 script: scriptPubKey,
12346 value: value
12347 }) - 1)
12348 }
12349
12350 Transaction.prototype.clone = function () {
12351 var newTx = new Transaction()
12352 newTx.version = this.version
12353 newTx.locktime = this.locktime
12354
12355 newTx.ins = this.ins.map(function (txIn) {
12356 return {
12357 hash: txIn.hash,
12358 index: txIn.index,
12359 script: txIn.script,
12360 sequence: txIn.sequence
12361 }
12362 })
12363
12364 newTx.outs = this.outs.map(function (txOut) {
12365 return {
12366 script: txOut.script,
12367 value: txOut.value
12368 }
12369 })
12370
12371 return newTx
12372 }
12373
12374 /**
12375 * Hash transaction for signing a specific input.
12376 *
12377 * Bitcoin uses a different hash for each signed transaction input. This
12378 * method copies the transaction, makes the necessary changes based on the
12379 * hashType, serializes and finally hashes the result. This hash can then be
12380 * used to sign the transaction input in question.
12381 */
12382 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12383 // FIXME: remove in 2.x.y
12384 if (arguments[0] instanceof Script) {
12385 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12386
12387 // swap the arguments (must be stored in tmp, arguments is special)
12388 var tmp = arguments[0]
12389 inIndex = arguments[1]
12390 prevOutScript = tmp
12391 }
12392
12393 typeForce('Number', inIndex)
12394 typeForce('Script', prevOutScript)
12395 typeForce('Number', hashType)
12396
12397 assert(inIndex >= 0, 'Invalid vin index')
12398 assert(inIndex < this.ins.length, 'Invalid vin index')
12399
12400 var txTmp = this.clone()
12401 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12402
12403 // Blank out other inputs' signatures
12404 txTmp.ins.forEach(function (txIn) {
12405 txIn.script = Script.EMPTY
12406 })
12407 txTmp.ins[inIndex].script = hashScript
12408
12409 var hashTypeModifier = hashType & 0x1f
12410
12411 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12412 assert(false, 'SIGHASH_NONE not yet supported')
12413 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12414 assert(false, 'SIGHASH_SINGLE not yet supported')
12415 }
12416
12417 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12418 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12419 }
12420
12421 var hashTypeBuffer = new Buffer(4)
12422 hashTypeBuffer.writeInt32LE(hashType, 0)
12423
12424 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12425 return crypto.hash256(buffer)
12426 }
12427
12428 Transaction.prototype.getHash = function () {
12429 return crypto.hash256(this.toBuffer())
12430 }
12431
12432 Transaction.prototype.getId = function () {
12433 // TxHash is little-endian, we need big-endian
12434 return bufferutils.reverse(this.getHash()).toString('hex')
12435 }
12436
12437 Transaction.prototype.toBuffer = function () {
12438 function scriptSize (script) {
12439 var length = script.buffer.length
12440
12441 return bufferutils.varIntSize(length) + length
12442 }
12443
12444 var buffer = new Buffer(
12445 8 +
12446 bufferutils.varIntSize(this.ins.length) +
12447 bufferutils.varIntSize(this.outs.length) +
12448 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12449 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12450 )
12451
12452 var offset = 0
12453 function writeSlice (slice) {
12454 slice.copy(buffer, offset)
12455 offset += slice.length
12456 }
12457
12458 function writeUInt32 (i) {
12459 buffer.writeUInt32LE(i, offset)
12460 offset += 4
12461 }
12462
12463 function writeUInt64 (i) {
12464 bufferutils.writeUInt64LE(buffer, i, offset)
12465 offset += 8
12466 }
12467
12468 function writeVarInt (i) {
12469 var n = bufferutils.writeVarInt(buffer, i, offset)
12470 offset += n
12471 }
12472
12473 writeUInt32(this.version)
12474 writeVarInt(this.ins.length)
12475
12476 this.ins.forEach(function (txIn) {
12477 writeSlice(txIn.hash)
12478 writeUInt32(txIn.index)
12479 writeVarInt(txIn.script.buffer.length)
12480 writeSlice(txIn.script.buffer)
12481 writeUInt32(txIn.sequence)
12482 })
12483
12484 writeVarInt(this.outs.length)
12485 this.outs.forEach(function (txOut) {
12486 writeUInt64(txOut.value)
12487 writeVarInt(txOut.script.buffer.length)
12488 writeSlice(txOut.script.buffer)
12489 })
12490
12491 writeUInt32(this.locktime)
12492
12493 return buffer
12494 }
12495
12496 Transaction.prototype.toHex = function () {
12497 return this.toBuffer().toString('hex')
12498 }
12499
12500 Transaction.prototype.setInputScript = function (index, script) {
12501 typeForce('Number', index)
12502 typeForce('Script', script)
12503
12504 this.ins[index].script = script
12505 }
12506
12507 // FIXME: remove in 2.x.y
12508 Transaction.prototype.sign = function (index, privKey, hashType) {
12509 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12510
12511 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12512 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12513
12514 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12515 this.setInputScript(index, scriptSig)
12516 }
12517
12518 // FIXME: remove in 2.x.y
12519 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12520 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12521
12522 hashType = hashType || Transaction.SIGHASH_ALL
12523
12524 var hash = this.hashForSignature(index, prevOutScript, hashType)
12525 var signature = privKey.sign(hash)
12526
12527 return signature.toScriptSignature(hashType)
12528 }
12529
12530 // FIXME: remove in 2.x.y
12531 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12532 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12533
12534 var parsed = ECSignature.parseScriptSignature(buffer)
12535 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12536
12537 return pubKey.verify(hash, parsed.signature)
12538 }
12539
12540 module.exports = Transaction
12541
12542 }).call(this,require("buffer").Buffer)
12543 },{"./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){
12544 (function (Buffer){
12545 var assert = require('assert')
12546 var ops = require('./opcodes')
12547 var scripts = require('./scripts')
12548
12549 var ECPubKey = require('./ecpubkey')
12550 var ECSignature = require('./ecsignature')
12551 var Script = require('./script')
12552 var Transaction = require('./transaction')
12553
12554 function extractInput (txIn) {
12555 var redeemScript
12556 var scriptSig = txIn.script
12557 var prevOutScript
12558 var prevOutType = scripts.classifyInput(scriptSig, true)
12559 var scriptType
12560
12561 // Re-classify if scriptHash
12562 if (prevOutType === 'scripthash') {
12563 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12564 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12565
12566 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12567 scriptType = scripts.classifyInput(scriptSig, true)
12568 } else {
12569 scriptType = prevOutType
12570 }
12571
12572 // Extract hashType, pubKeys and signatures
12573 var hashType, parsed, pubKeys, signatures
12574
12575 switch (scriptType) {
12576 case 'pubkeyhash': {
12577 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12578 hashType = parsed.hashType
12579 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12580 signatures = [parsed.signature]
12581 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12582
12583 break
12584 }
12585
12586 case 'pubkey': {
12587 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12588 hashType = parsed.hashType
12589 signatures = [parsed.signature]
12590
12591 if (redeemScript) {
12592 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12593 }
12594
12595 break
12596 }
12597
12598 case 'multisig': {
12599 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12600 if (chunk === ops.OP_0) return chunk
12601
12602 var parsed = ECSignature.parseScriptSignature(chunk)
12603 hashType = parsed.hashType
12604
12605 return parsed.signature
12606 })
12607
12608 if (redeemScript) {
12609 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12610 }
12611
12612 break
12613 }
12614 }
12615
12616 return {
12617 hashType: hashType,
12618 prevOutScript: prevOutScript,
12619 prevOutType: prevOutType,
12620 pubKeys: pubKeys,
12621 redeemScript: redeemScript,
12622 scriptType: scriptType,
12623 signatures: signatures
12624 }
12625 }
12626
12627 function TransactionBuilder () {
12628 this.prevTxMap = {}
12629 this.prevOutScripts = {}
12630 this.prevOutTypes = {}
12631
12632 this.inputs = []
12633 this.tx = new Transaction()
12634 }
12635
12636 TransactionBuilder.fromTransaction = function (transaction) {
12637 var txb = new TransactionBuilder()
12638
12639 // Copy other transaction fields
12640 txb.tx.version = transaction.version
12641 txb.tx.locktime = transaction.locktime
12642
12643 // Extract/add inputs
12644 transaction.ins.forEach(function (txIn) {
12645 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12646 })
12647
12648 // Extract/add outputs
12649 transaction.outs.forEach(function (txOut) {
12650 txb.addOutput(txOut.script, txOut.value)
12651 })
12652
12653 // Extract/add signatures
12654 txb.inputs = transaction.ins.map(function (txIn) {
12655 // TODO: remove me after testcase added
12656 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12657
12658 // Ignore empty scripts
12659 if (txIn.script.buffer.length === 0) return {}
12660
12661 return extractInput(txIn)
12662 })
12663
12664 return txb
12665 }
12666
12667 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12668 var prevOutHash
12669
12670 // txId
12671 if (typeof prevTx === 'string') {
12672 prevOutHash = new Buffer(prevTx, 'hex')
12673
12674 // TxId hex is big-endian, we want little-endian hash
12675 Array.prototype.reverse.call(prevOutHash)
12676
12677 // Transaction
12678 } else if (prevTx instanceof Transaction) {
12679 prevOutHash = prevTx.getHash()
12680 prevOutScript = prevTx.outs[index].script
12681
12682 // txHash
12683 } else {
12684 prevOutHash = prevTx
12685 }
12686
12687 var input = {}
12688 if (prevOutScript) {
12689 var prevOutType = scripts.classifyOutput(prevOutScript)
12690
12691 // if we can, extract pubKey information
12692 switch (prevOutType) {
12693 case 'multisig': {
12694 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12695 break
12696 }
12697
12698 case 'pubkey': {
12699 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12700 break
12701 }
12702 }
12703
12704 if (prevOutType !== 'scripthash') {
12705 input.scriptType = prevOutType
12706 }
12707
12708 input.prevOutScript = prevOutScript
12709 input.prevOutType = prevOutType
12710 }
12711
12712 assert(this.inputs.every(function (input2) {
12713 if (input2.hashType === undefined) return true
12714
12715 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12716 }), 'No, this would invalidate signatures')
12717
12718 var prevOut = prevOutHash.toString('hex') + ':' + index
12719 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12720
12721 var vin = this.tx.addInput(prevOutHash, index, sequence)
12722 this.inputs[vin] = input
12723 this.prevTxMap[prevOut] = vin
12724
12725 return vin
12726 }
12727
12728 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12729 assert(this.inputs.every(function (input) {
12730 if (input.hashType === undefined) return true
12731
12732 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12733 }), 'No, this would invalidate signatures')
12734
12735 return this.tx.addOutput(scriptPubKey, value)
12736 }
12737
12738 TransactionBuilder.prototype.build = function () {
12739 return this.__build(false)
12740 }
12741 TransactionBuilder.prototype.buildIncomplete = function () {
12742 return this.__build(true)
12743 }
12744
12745 var canSignTypes = {
12746 'pubkeyhash': true,
12747 'multisig': true,
12748 'pubkey': true
12749 }
12750
12751 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12752 if (!allowIncomplete) {
12753 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12754 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12755 }
12756
12757 var tx = this.tx.clone()
12758
12759 // Create script signatures from signature meta-data
12760 this.inputs.forEach(function (input, index) {
12761 var scriptType = input.scriptType
12762 var scriptSig
12763
12764 if (!allowIncomplete) {
12765 assert(!!scriptType, 'Transaction is not complete')
12766 assert(scriptType in canSignTypes, scriptType + ' not supported')
12767 assert(input.signatures, 'Transaction is missing signatures')
12768 }
12769
12770 if (input.signatures) {
12771 switch (scriptType) {
12772 case 'pubkeyhash': {
12773 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12774 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12775 break
12776 }
12777
12778 case 'multisig': {
12779 // Array.prototype.map is sparse-compatible
12780 var msSignatures = input.signatures.map(function (signature) {
12781 return signature && signature.toScriptSignature(input.hashType)
12782 })
12783
12784 // fill in blanks with OP_0
12785 if (allowIncomplete) {
12786 for (var i = 0; i < msSignatures.length; ++i) {
12787 if (msSignatures[i]) continue
12788
12789 msSignatures[i] = ops.OP_0
12790 }
12791 } else {
12792 // Array.prototype.filter returns non-sparse array
12793 msSignatures = msSignatures.filter(function (x) { return x })
12794 }
12795
12796 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12797 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12798 break
12799 }
12800
12801 case 'pubkey': {
12802 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12803 scriptSig = scripts.pubKeyInput(pkSignature)
12804 break
12805 }
12806 }
12807 }
12808
12809 // did we build a scriptSig?
12810 if (scriptSig) {
12811 // wrap as scriptHash if necessary
12812 if (input.prevOutType === 'scripthash') {
12813 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12814 }
12815
12816 tx.setInputScript(index, scriptSig)
12817 }
12818 })
12819
12820 return tx
12821 }
12822
12823 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12824 assert(index in this.inputs, 'No input at index: ' + index)
12825 hashType = hashType || Transaction.SIGHASH_ALL
12826
12827 var input = this.inputs[index]
12828 var canSign = input.hashType &&
12829 input.prevOutScript &&
12830 input.prevOutType &&
12831 input.pubKeys &&
12832 input.scriptType &&
12833 input.signatures
12834
12835 // are we almost ready to sign?
12836 if (canSign) {
12837 // if redeemScript was provided, enforce consistency
12838 if (redeemScript) {
12839 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12840 }
12841
12842 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12843
12844 // no? prepare
12845 } else {
12846 // must be pay-to-scriptHash?
12847 if (redeemScript) {
12848 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12849 if (input.prevOutScript) {
12850 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12851
12852 var scriptHash = input.prevOutScript.chunks[1]
12853 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12854 }
12855
12856 var scriptType = scripts.classifyOutput(redeemScript)
12857 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12858
12859 var pubKeys = []
12860 switch (scriptType) {
12861 case 'multisig': {
12862 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12863 break
12864 }
12865
12866 case 'pubkeyhash': {
12867 var pkh1 = redeemScript.chunks[2]
12868 var pkh2 = privKey.pub.getAddress().hash
12869
12870 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12871 pubKeys = [privKey.pub]
12872 break
12873 }
12874
12875 case 'pubkey': {
12876 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12877 break
12878 }
12879 }
12880
12881 if (!input.prevOutScript) {
12882 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12883 input.prevOutType = 'scripthash'
12884 }
12885
12886 input.pubKeys = pubKeys
12887 input.redeemScript = redeemScript
12888 input.scriptType = scriptType
12889
12890 // cannot be pay-to-scriptHash
12891 } else {
12892 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12893
12894 // can we otherwise sign this?
12895 if (input.scriptType) {
12896 assert(input.pubKeys, input.scriptType + ' not supported')
12897
12898 // we know nothin' Jon Snow, assume pubKeyHash
12899 } else {
12900 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12901 input.prevOutType = 'pubkeyhash'
12902 input.pubKeys = [privKey.pub]
12903 input.scriptType = input.prevOutType
12904 }
12905 }
12906
12907 input.hashType = hashType
12908 input.signatures = input.signatures || []
12909 }
12910
12911 var signatureScript = input.redeemScript || input.prevOutScript
12912 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12913
12914 // enforce signature order matches public keys
12915 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12916 // maintain a local copy of unmatched signatures
12917 var unmatched = input.signatures.slice()
12918
12919 input.signatures = input.pubKeys.map(function (pubKey) {
12920 var match
12921
12922 // check for any matching signatures
12923 unmatched.some(function (signature, i) {
12924 if (!pubKey.verify(signatureHash, signature)) return false
12925 match = signature
12926
12927 // remove matched signature from unmatched
12928 unmatched.splice(i, 1)
12929
12930 return true
12931 })
12932
12933 return match || undefined
12934 })
12935 }
12936
12937 // enforce in order signing of public keys
12938 assert(input.pubKeys.some(function (pubKey, i) {
12939 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12940
12941 assert(!input.signatures[i], 'Signature already exists')
12942 var signature = privKey.sign(signatureHash)
12943 input.signatures[i] = signature
12944
12945 return true
12946 }, this), 'privateKey cannot sign for this input')
12947 }
12948
12949 module.exports = TransactionBuilder
12950
12951 }).call(this,require("buffer").Buffer)
12952 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12953 (function (Buffer){
12954 var assert = require('assert')
12955 var bufferutils = require('./bufferutils')
12956 var typeForce = require('typeforce')
12957 var networks = require('./networks')
12958 var randomBytes = require('randombytes')
12959
12960 var Address = require('./address')
12961 var HDNode = require('./hdnode')
12962 var TransactionBuilder = require('./transaction_builder')
12963 var Script = require('./script')
12964
12965 function Wallet (seed, network) {
12966 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12967
12968 seed = seed || randomBytes(32)
12969 network = network || networks.bitcoin
12970
12971 // Stored in a closure to make accidental serialization less likely
12972 var masterKey = HDNode.fromSeedBuffer(seed, network)
12973
12974 // HD first-level child derivation method should be hardened
12975 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12976 var accountZero = masterKey.deriveHardened(0)
12977 var externalAccount = accountZero.derive(0)
12978 var internalAccount = accountZero.derive(1)
12979
12980 this.addresses = []
12981 this.changeAddresses = []
12982 this.network = network
12983 this.unspents = []
12984
12985 // FIXME: remove in 2.0.0
12986 this.unspentMap = {}
12987
12988 // FIXME: remove in 2.0.0
12989 var me = this
12990 this.newMasterKey = function (seed) {
12991 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12992
12993 seed = seed || randomBytes(32)
12994 masterKey = HDNode.fromSeedBuffer(seed, network)
12995
12996 accountZero = masterKey.deriveHardened(0)
12997 externalAccount = accountZero.derive(0)
12998 internalAccount = accountZero.derive(1)
12999
13000 me.addresses = []
13001 me.changeAddresses = []
13002
13003 me.unspents = []
13004 me.unspentMap = {}
13005 }
13006
13007 this.getMasterKey = function () {
13008 return masterKey
13009 }
13010 this.getAccountZero = function () {
13011 return accountZero
13012 }
13013 this.getExternalAccount = function () {
13014 return externalAccount
13015 }
13016 this.getInternalAccount = function () {
13017 return internalAccount
13018 }
13019 }
13020
13021 Wallet.prototype.createTransaction = function (to, value, options) {
13022 // FIXME: remove in 2.0.0
13023 if (typeof options !== 'object') {
13024 if (options !== undefined) {
13025 console.warn('Non options object parameters are deprecated, use options object instead')
13026
13027 options = {
13028 fixedFee: arguments[2],
13029 changeAddress: arguments[3]
13030 }
13031 }
13032 }
13033
13034 options = options || {}
13035
13036 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13037
13038 var changeAddress = options.changeAddress
13039 var fixedFee = options.fixedFee
13040 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13041
13042 // filter by minConf, then pending and sort by descending value
13043 var unspents = this.unspents.filter(function (unspent) {
13044 return unspent.confirmations >= minConf
13045 }).filter(function (unspent) {
13046 return !unspent.pending
13047 }).sort(function (o1, o2) {
13048 return o2.value - o1.value
13049 })
13050
13051 var accum = 0
13052 var addresses = []
13053 var subTotal = value
13054
13055 var txb = new TransactionBuilder()
13056 txb.addOutput(to, value)
13057
13058 for (var i = 0; i < unspents.length; ++i) {
13059 var unspent = unspents[i]
13060 addresses.push(unspent.address)
13061
13062 txb.addInput(unspent.txHash, unspent.index)
13063
13064 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13065
13066 accum += unspent.value
13067 subTotal = value + fee
13068
13069 if (accum >= subTotal) {
13070 var change = accum - subTotal
13071
13072 if (change > this.network.dustThreshold) {
13073 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13074 }
13075
13076 break
13077 }
13078 }
13079
13080 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13081
13082 return this.signWith(txb, addresses).build()
13083 }
13084
13085 // FIXME: remove in 2.0.0
13086 Wallet.prototype.processPendingTx = function (tx) {
13087 this.__processTx(tx, true)
13088 }
13089
13090 // FIXME: remove in 2.0.0
13091 Wallet.prototype.processConfirmedTx = function (tx) {
13092 this.__processTx(tx, false)
13093 }
13094
13095 // FIXME: remove in 2.0.0
13096 Wallet.prototype.__processTx = function (tx, isPending) {
13097 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13098
13099 var txId = tx.getId()
13100 var txHash = tx.getHash()
13101
13102 tx.outs.forEach(function (txOut, i) {
13103 var address
13104
13105 try {
13106 address = Address.fromOutputScript(txOut.script, this.network).toString()
13107 } catch (e) {
13108 if (!(e.message.match(/has no matching Address/)))
13109 throw e
13110 }
13111
13112 var myAddresses = this.addresses.concat(this.changeAddresses)
13113 if (myAddresses.indexOf(address) > -1) {
13114 var lookup = txId + ':' + i
13115 if (lookup in this.unspentMap) return
13116
13117 // its unique, add it
13118 var unspent = {
13119 address: address,
13120 confirmations: 0, // no way to determine this without more information
13121 index: i,
13122 txHash: txHash,
13123 txId: txId,
13124 value: txOut.value,
13125 pending: isPending
13126 }
13127
13128 this.unspentMap[lookup] = unspent
13129 this.unspents.push(unspent)
13130 }
13131 }, this)
13132
13133 tx.ins.forEach(function (txIn) {
13134 // copy and convert to big-endian hex
13135 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13136
13137 var lookup = txInId + ':' + txIn.index
13138 if (!(lookup in this.unspentMap)) return
13139
13140 var unspent = this.unspentMap[lookup]
13141
13142 if (isPending) {
13143 unspent.pending = true
13144 unspent.spent = true
13145 } else {
13146 delete this.unspentMap[lookup]
13147
13148 this.unspents = this.unspents.filter(function (unspent2) {
13149 return unspent !== unspent2
13150 })
13151 }
13152 }, this)
13153 }
13154
13155 Wallet.prototype.generateAddress = function () {
13156 var k = this.addresses.length
13157 var address = this.getExternalAccount().derive(k).getAddress()
13158
13159 this.addresses.push(address.toString())
13160
13161 return this.getReceiveAddress()
13162 }
13163
13164 Wallet.prototype.generateChangeAddress = function () {
13165 var k = this.changeAddresses.length
13166 var address = this.getInternalAccount().derive(k).getAddress()
13167
13168 this.changeAddresses.push(address.toString())
13169
13170 return this.getChangeAddress()
13171 }
13172
13173 Wallet.prototype.getAddress = function () {
13174 if (this.addresses.length === 0) {
13175 this.generateAddress()
13176 }
13177
13178 return this.addresses[this.addresses.length - 1]
13179 }
13180
13181 Wallet.prototype.getBalance = function (minConf) {
13182 minConf = minConf || 0
13183
13184 return this.unspents.filter(function (unspent) {
13185 return unspent.confirmations >= minConf
13186
13187 // FIXME: remove spent filter in 2.0.0
13188 }).filter(function (unspent) {
13189 return !unspent.spent
13190 }).reduce(function (accum, unspent) {
13191 return accum + unspent.value
13192 }, 0)
13193 }
13194
13195 Wallet.prototype.getChangeAddress = function () {
13196 if (this.changeAddresses.length === 0) {
13197 this.generateChangeAddress()
13198 }
13199
13200 return this.changeAddresses[this.changeAddresses.length - 1]
13201 }
13202
13203 Wallet.prototype.getInternalPrivateKey = function (index) {
13204 return this.getInternalAccount().derive(index).privKey
13205 }
13206
13207 Wallet.prototype.getPrivateKey = function (index) {
13208 return this.getExternalAccount().derive(index).privKey
13209 }
13210
13211 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13212 var index
13213
13214 if ((index = this.addresses.indexOf(address)) > -1) {
13215 return this.getPrivateKey(index)
13216 }
13217
13218 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13219 return this.getInternalPrivateKey(index)
13220 }
13221
13222 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13223 }
13224
13225 Wallet.prototype.getUnspentOutputs = function (minConf) {
13226 minConf = minConf || 0
13227
13228 return this.unspents.filter(function (unspent) {
13229 return unspent.confirmations >= minConf
13230
13231 // FIXME: remove spent filter in 2.0.0
13232 }).filter(function (unspent) {
13233 return !unspent.spent
13234 }).map(function (unspent) {
13235 return {
13236 address: unspent.address,
13237 confirmations: unspent.confirmations,
13238 index: unspent.index,
13239 txId: unspent.txId,
13240 value: unspent.value,
13241
13242 // FIXME: remove in 2.0.0
13243 hash: unspent.txId,
13244 pending: unspent.pending
13245 }
13246 })
13247 }
13248
13249 Wallet.prototype.setUnspentOutputs = function (unspents) {
13250 this.unspentMap = {}
13251 this.unspents = unspents.map(function (unspent) {
13252 // FIXME: remove unspent.hash in 2.0.0
13253 var txId = unspent.txId || unspent.hash
13254 var index = unspent.index
13255
13256 // FIXME: remove in 2.0.0
13257 if (unspent.hash !== undefined) {
13258 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13259 }
13260
13261 // FIXME: remove in 2.0.0
13262 if (index === undefined) {
13263 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13264 index = unspent.outputIndex
13265 }
13266
13267 typeForce('String', txId)
13268 typeForce('Number', index)
13269 typeForce('Number', unspent.value)
13270
13271 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13272 assert.doesNotThrow(function () {
13273 Address.fromBase58Check(unspent.address)
13274 }, 'Expected Base58 Address, got ' + unspent.address)
13275 assert(isFinite(index), 'Expected finite index, got ' + index)
13276
13277 // FIXME: remove branch in 2.0.0
13278 if (unspent.confirmations !== undefined) {
13279 typeForce('Number', unspent.confirmations)
13280 }
13281
13282 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13283
13284 unspent = {
13285 address: unspent.address,
13286 confirmations: unspent.confirmations || 0,
13287 index: index,
13288 txHash: txHash,
13289 txId: txId,
13290 value: unspent.value,
13291
13292 // FIXME: remove in 2.0.0
13293 pending: unspent.pending || false
13294 }
13295
13296 // FIXME: remove in 2.0.0
13297 this.unspentMap[txId + ':' + index] = unspent
13298
13299 return unspent
13300 }, this)
13301 }
13302
13303 Wallet.prototype.signWith = function (tx, addresses) {
13304 addresses.forEach(function (address, i) {
13305 var privKey = this.getPrivateKeyForAddress(address)
13306
13307 tx.sign(i, privKey)
13308 }, this)
13309
13310 return tx
13311 }
13312
13313 function estimatePaddedFee (tx, network) {
13314 var tmpTx = tx.clone()
13315 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13316
13317 return network.estimateFee(tmpTx)
13318 }
13319
13320 // FIXME: 1.0.0 shims, remove in 2.0.0
13321 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13322 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13323
13324 module.exports = Wallet
13325
13326 }).call(this,require("buffer").Buffer)
13327 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13328 });</script>
13329 <script>bitcoin.networks.shadow = {
13330 magicPrefix: '\x19ShadowCash Signed Message:\n',
13331 bip32: {
13332 public: 0xEE80286A,
13333 private: 0xEE8031E8
13334 },
13335 pubKeyHash: 0x3f,
13336 scriptHash: 0x7d,
13337 wif: 0xbf,
13338 dustThreshold: 0,
13339 feePerKb: 1000,
13340 estimateFee: function() { return "unused in this app" },
13341 };
13342
13343 bitcoin.networks.shadowtn = {
13344 magicPrefix: '\x19ShadowCash Signed Message:\n',
13345 bip32: {
13346 public: 0x76C0FDFB,
13347 private: 0x76C1077A
13348 },
13349 pubKeyHash: 0x7f,
13350 scriptHash: 0xc4,
13351 wif: 0xff,
13352 dustThreshold: 0,
13353 feePerKb: 1000,
13354 estimateFee: function() { return "unused in this app" },
13355 };
13356
13357 bitcoin.networks.clam = {
13358 bip32: {
13359 public: 0xa8c26d64,
13360 private: 0xa8c17826
13361 },
13362 pubKeyHash: 0x89,
13363 wif: 0x85,
13364 };
13365
13366 bitcoin.networks.dash = {
13367 bip32: {
13368 public: 0x0488b21e,
13369 private: 0x0488ade4
13370 },
13371 pubKeyHash: 0x4c,
13372 scriptHash: 0x10,
13373 wif: 0xcc,
13374 };
13375
13376 bitcoin.networks.namecoin = {
13377 bip32: {
13378 public: 0x0488b21e,
13379 private: 0x0488ade4
13380 },
13381 pubKeyHash: 0x34,
13382 //scriptHash: 0x10,
13383 wif: 0x80,
13384 };
13385
13386 bitcoin.networks.peercoin = {
13387 bip32: {
13388 public: 0x0488b21e,
13389 private: 0x0488ade4
13390 },
13391 pubKeyHash: 0x37,
13392 //scriptHash: 0x10,
13393 wif: 0xb7,
13394 };
13395
13396 </script>
13397 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13398
13399 //// base.js
13400
13401 /** @fileOverview Javascript cryptography implementation.
13402 *
13403 * Crush to remove comments, shorten variable names and
13404 * generally reduce transmission size.
13405 *
13406 * @author Emily Stark
13407 * @author Mike Hamburg
13408 * @author Dan Boneh
13409 */
13410
13411 "use strict";
13412 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13413 /*global document, window, escape, unescape, module, require, Uint32Array */
13414
13415 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13416 var sjcl = {
13417 /** @namespace Symmetric ciphers. */
13418 cipher: {},
13419
13420 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13421 hash: {},
13422
13423 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13424 keyexchange: {},
13425
13426 /** @namespace Block cipher modes of operation. */
13427 mode: {},
13428
13429 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13430 misc: {},
13431
13432 /**
13433 * @namespace Bit array encoders and decoders.
13434 *
13435 * @description
13436 * The members of this namespace are functions which translate between
13437 * SJCL's bitArrays and other objects (usually strings). Because it
13438 * isn't always clear which direction is encoding and which is decoding,
13439 * the method names are "fromBits" and "toBits".
13440 */
13441 codec: {},
13442
13443 /** @namespace Exceptions. */
13444 exception: {
13445 /** @constructor Ciphertext is corrupt. */
13446 corrupt: function(message) {
13447 this.toString = function() { return "CORRUPT: "+this.message; };
13448 this.message = message;
13449 },
13450
13451 /** @constructor Invalid parameter. */
13452 invalid: function(message) {
13453 this.toString = function() { return "INVALID: "+this.message; };
13454 this.message = message;
13455 },
13456
13457 /** @constructor Bug or missing feature in SJCL. @constructor */
13458 bug: function(message) {
13459 this.toString = function() { return "BUG: "+this.message; };
13460 this.message = message;
13461 },
13462
13463 /** @constructor Something isn't ready. */
13464 notReady: function(message) {
13465 this.toString = function() { return "NOT READY: "+this.message; };
13466 this.message = message;
13467 }
13468 }
13469 };
13470
13471 if(typeof module !== 'undefined' && module.exports){
13472 module.exports = sjcl;
13473 }
13474 if (typeof define === "function") {
13475 define([], function () {
13476 return sjcl;
13477 });
13478 }
13479
13480
13481 //// bitArray.js
13482
13483 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13484 *
13485 * @author Emily Stark
13486 * @author Mike Hamburg
13487 * @author Dan Boneh
13488 */
13489
13490 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13491 *
13492 * @description
13493 * <p>
13494 * These objects are the currency accepted by SJCL's crypto functions.
13495 * </p>
13496 *
13497 * <p>
13498 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13499 * but many of them can take arguments that are not a multiple of 4 bytes.
13500 * This library encodes arrays of bits (whose size need not be a multiple of 8
13501 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13502 * array of words, 32 bits at a time. Since the words are double-precision
13503 * floating point numbers, they fit some extra data. We use this (in a private,
13504 * possibly-changing manner) to encode the number of bits actually present
13505 * in the last word of the array.
13506 * </p>
13507 *
13508 * <p>
13509 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13510 * to ciphers like AES which want arrays of words.
13511 * </p>
13512 */
13513 sjcl.bitArray = {
13514 /**
13515 * Array slices in units of bits.
13516 * @param {bitArray} a The array to slice.
13517 * @param {Number} bstart The offset to the start of the slice, in bits.
13518 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13519 * slice until the end of the array.
13520 * @return {bitArray} The requested slice.
13521 */
13522 bitSlice: function (a, bstart, bend) {
13523 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13524 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13525 },
13526
13527 /**
13528 * Extract a number packed into a bit array.
13529 * @param {bitArray} a The array to slice.
13530 * @param {Number} bstart The offset to the start of the slice, in bits.
13531 * @param {Number} length The length of the number to extract.
13532 * @return {Number} The requested slice.
13533 */
13534 extract: function(a, bstart, blength) {
13535 // FIXME: this Math.floor is not necessary at all, but for some reason
13536 // seems to suppress a bug in the Chromium JIT.
13537 var x, sh = Math.floor((-bstart-blength) & 31);
13538 if ((bstart + blength - 1 ^ bstart) & -32) {
13539 // it crosses a boundary
13540 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13541 } else {
13542 // within a single word
13543 x = a[bstart/32|0] >>> sh;
13544 }
13545 return x & ((1<<blength) - 1);
13546 },
13547
13548 /**
13549 * Concatenate two bit arrays.
13550 * @param {bitArray} a1 The first array.
13551 * @param {bitArray} a2 The second array.
13552 * @return {bitArray} The concatenation of a1 and a2.
13553 */
13554 concat: function (a1, a2) {
13555 if (a1.length === 0 || a2.length === 0) {
13556 return a1.concat(a2);
13557 }
13558
13559 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13560 if (shift === 32) {
13561 return a1.concat(a2);
13562 } else {
13563 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13564 }
13565 },
13566
13567 /**
13568 * Find the length of an array of bits.
13569 * @param {bitArray} a The array.
13570 * @return {Number} The length of a, in bits.
13571 */
13572 bitLength: function (a) {
13573 var l = a.length, x;
13574 if (l === 0) { return 0; }
13575 x = a[l - 1];
13576 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13577 },
13578
13579 /**
13580 * Truncate an array.
13581 * @param {bitArray} a The array.
13582 * @param {Number} len The length to truncate to, in bits.
13583 * @return {bitArray} A new array, truncated to len bits.
13584 */
13585 clamp: function (a, len) {
13586 if (a.length * 32 < len) { return a; }
13587 a = a.slice(0, Math.ceil(len / 32));
13588 var l = a.length;
13589 len = len & 31;
13590 if (l > 0 && len) {
13591 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13592 }
13593 return a;
13594 },
13595
13596 /**
13597 * Make a partial word for a bit array.
13598 * @param {Number} len The number of bits in the word.
13599 * @param {Number} x The bits.
13600 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13601 * @return {Number} The partial word.
13602 */
13603 partial: function (len, x, _end) {
13604 if (len === 32) { return x; }
13605 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13606 },
13607
13608 /**
13609 * Get the number of bits used by a partial word.
13610 * @param {Number} x The partial word.
13611 * @return {Number} The number of bits used by the partial word.
13612 */
13613 getPartial: function (x) {
13614 return Math.round(x/0x10000000000) || 32;
13615 },
13616
13617 /**
13618 * Compare two arrays for equality in a predictable amount of time.
13619 * @param {bitArray} a The first array.
13620 * @param {bitArray} b The second array.
13621 * @return {boolean} true if a == b; false otherwise.
13622 */
13623 equal: function (a, b) {
13624 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13625 return false;
13626 }
13627 var x = 0, i;
13628 for (i=0; i<a.length; i++) {
13629 x |= a[i]^b[i];
13630 }
13631 return (x === 0);
13632 },
13633
13634 /** Shift an array right.
13635 * @param {bitArray} a The array to shift.
13636 * @param {Number} shift The number of bits to shift.
13637 * @param {Number} [carry=0] A byte to carry in
13638 * @param {bitArray} [out=[]] An array to prepend to the output.
13639 * @private
13640 */
13641 _shiftRight: function (a, shift, carry, out) {
13642 var i, last2=0, shift2;
13643 if (out === undefined) { out = []; }
13644
13645 for (; shift >= 32; shift -= 32) {
13646 out.push(carry);
13647 carry = 0;
13648 }
13649 if (shift === 0) {
13650 return out.concat(a);
13651 }
13652
13653 for (i=0; i<a.length; i++) {
13654 out.push(carry | a[i]>>>shift);
13655 carry = a[i] << (32-shift);
13656 }
13657 last2 = a.length ? a[a.length-1] : 0;
13658 shift2 = sjcl.bitArray.getPartial(last2);
13659 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13660 return out;
13661 },
13662
13663 /** xor a block of 4 words together.
13664 * @private
13665 */
13666 _xor4: function(x,y) {
13667 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13668 },
13669
13670 /** byteswap a word array inplace.
13671 * (does not handle partial words)
13672 * @param {sjcl.bitArray} a word array
13673 * @return {sjcl.bitArray} byteswapped array
13674 */
13675 byteswapM: function(a) {
13676 var i, v, m = 0xff00;
13677 for (i = 0; i < a.length; ++i) {
13678 v = a[i];
13679 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13680 }
13681 return a;
13682 }
13683 };
13684
13685
13686 //// codecString.js
13687
13688 /** @fileOverview Bit array codec implementations.
13689 *
13690 * @author Emily Stark
13691 * @author Mike Hamburg
13692 * @author Dan Boneh
13693 */
13694
13695 /** @namespace UTF-8 strings */
13696 sjcl.codec.utf8String = {
13697 /** Convert from a bitArray to a UTF-8 string. */
13698 fromBits: function (arr) {
13699 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13700 for (i=0; i<bl/8; i++) {
13701 if ((i&3) === 0) {
13702 tmp = arr[i/4];
13703 }
13704 out += String.fromCharCode(tmp >>> 24);
13705 tmp <<= 8;
13706 }
13707 return decodeURIComponent(escape(out));
13708 },
13709
13710 /** Convert from a UTF-8 string to a bitArray. */
13711 toBits: function (str) {
13712 str = unescape(encodeURIComponent(str));
13713 var out = [], i, tmp=0;
13714 for (i=0; i<str.length; i++) {
13715 tmp = tmp << 8 | str.charCodeAt(i);
13716 if ((i&3) === 3) {
13717 out.push(tmp);
13718 tmp = 0;
13719 }
13720 }
13721 if (i&3) {
13722 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13723 }
13724 return out;
13725 }
13726 };
13727
13728
13729 //// codecHex.js
13730
13731 /** @fileOverview Bit array codec implementations.
13732 *
13733 * @author Emily Stark
13734 * @author Mike Hamburg
13735 * @author Dan Boneh
13736 */
13737
13738 /** @namespace Hexadecimal */
13739 sjcl.codec.hex = {
13740 /** Convert from a bitArray to a hex string. */
13741 fromBits: function (arr) {
13742 var out = "", i;
13743 for (i=0; i<arr.length; i++) {
13744 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13745 }
13746 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13747 },
13748 /** Convert from a hex string to a bitArray. */
13749 toBits: function (str) {
13750 var i, out=[], len;
13751 str = str.replace(/\s|0x/g, "");
13752 len = str.length;
13753 str = str + "00000000";
13754 for (i=0; i<str.length; i+=8) {
13755 out.push(parseInt(str.substr(i,8),16)^0);
13756 }
13757 return sjcl.bitArray.clamp(out, len*4);
13758 }
13759 };
13760
13761
13762 //// sha512.js
13763
13764 /** @fileOverview Javascript SHA-512 implementation.
13765 *
13766 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13767 * SJCL by Stefan Thomas.
13768 *
13769 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13770 * Released with New BSD License
13771 *
13772 * @author Emily Stark
13773 * @author Mike Hamburg
13774 * @author Dan Boneh
13775 * @author Jeff Mott
13776 * @author Stefan Thomas
13777 */
13778
13779 /**
13780 * Context for a SHA-512 operation in progress.
13781 * @constructor
13782 * @class Secure Hash Algorithm, 512 bits.
13783 */
13784 sjcl.hash.sha512 = function (hash) {
13785 if (!this._key[0]) { this._precompute(); }
13786 if (hash) {
13787 this._h = hash._h.slice(0);
13788 this._buffer = hash._buffer.slice(0);
13789 this._length = hash._length;
13790 } else {
13791 this.reset();
13792 }
13793 };
13794
13795 /**
13796 * Hash a string or an array of words.
13797 * @static
13798 * @param {bitArray|String} data the data to hash.
13799 * @return {bitArray} The hash value, an array of 16 big-endian words.
13800 */
13801 sjcl.hash.sha512.hash = function (data) {
13802 return (new sjcl.hash.sha512()).update(data).finalize();
13803 };
13804
13805 sjcl.hash.sha512.prototype = {
13806 /**
13807 * The hash's block size, in bits.
13808 * @constant
13809 */
13810 blockSize: 1024,
13811
13812 /**
13813 * Reset the hash state.
13814 * @return this
13815 */
13816 reset:function () {
13817 this._h = this._init.slice(0);
13818 this._buffer = [];
13819 this._length = 0;
13820 return this;
13821 },
13822
13823 /**
13824 * Input several words to the hash.
13825 * @param {bitArray|String} data the data to hash.
13826 * @return this
13827 */
13828 update: function (data) {
13829 if (typeof data === "string") {
13830 data = sjcl.codec.utf8String.toBits(data);
13831 }
13832 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13833 ol = this._length,
13834 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13835 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13836 this._block(b.splice(0,32));
13837 }
13838 return this;
13839 },
13840
13841 /**
13842 * Complete hashing and output the hash value.
13843 * @return {bitArray} The hash value, an array of 16 big-endian words.
13844 */
13845 finalize:function () {
13846 var i, b = this._buffer, h = this._h;
13847
13848 // Round out and push the buffer
13849 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13850
13851 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13852 for (i = b.length + 4; i & 31; i++) {
13853 b.push(0);
13854 }
13855
13856 // append the length
13857 b.push(0);
13858 b.push(0);
13859 b.push(Math.floor(this._length / 0x100000000));
13860 b.push(this._length | 0);
13861
13862 while (b.length) {
13863 this._block(b.splice(0,32));
13864 }
13865
13866 this.reset();
13867 return h;
13868 },
13869
13870 /**
13871 * The SHA-512 initialization vector, to be precomputed.
13872 * @private
13873 */
13874 _init:[],
13875
13876 /**
13877 * Least significant 24 bits of SHA512 initialization values.
13878 *
13879 * Javascript only has 53 bits of precision, so we compute the 40 most
13880 * significant bits and add the remaining 24 bits as constants.
13881 *
13882 * @private
13883 */
13884 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13885
13886 /*
13887 _init:
13888 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13889 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13890 */
13891
13892 /**
13893 * The SHA-512 hash key, to be precomputed.
13894 * @private
13895 */
13896 _key:[],
13897
13898 /**
13899 * Least significant 24 bits of SHA512 key values.
13900 * @private
13901 */
13902 _keyr:
13903 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13904 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13905 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13906 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13907 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13908 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13909 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13910 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13911 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13912 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13913
13914 /*
13915 _key:
13916 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13917 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13918 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13919 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13920 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13921 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13922 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13923 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13924 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13925 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13926 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13927 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13928 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13929 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13930 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13931 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13932 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13933 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13934 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13935 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13936 */
13937
13938 /**
13939 * Function to precompute _init and _key.
13940 * @private
13941 */
13942 _precompute: function () {
13943 // XXX: This code is for precomputing the SHA256 constants, change for
13944 // SHA512 and re-enable.
13945 var i = 0, prime = 2, factor;
13946
13947 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13948 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13949
13950 outer: for (; i<80; prime++) {
13951 for (factor=2; factor*factor <= prime; factor++) {
13952 if (prime % factor === 0) {
13953 // not a prime
13954 continue outer;
13955 }
13956 }
13957
13958 if (i<8) {
13959 this._init[i*2] = frac(Math.pow(prime, 1/2));
13960 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13961 }
13962 this._key[i*2] = frac(Math.pow(prime, 1/3));
13963 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13964 i++;
13965 }
13966 },
13967
13968 /**
13969 * Perform one cycle of SHA-512.
13970 * @param {bitArray} words one block of words.
13971 * @private
13972 */
13973 _block:function (words) {
13974 var i, wrh, wrl,
13975 w = words.slice(0),
13976 h = this._h,
13977 k = this._key,
13978 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13979 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13980 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13981 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13982
13983 // Working variables
13984 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13985 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13986 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13987 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13988
13989 for (i=0; i<80; i++) {
13990 // load up the input word for this round
13991 if (i<16) {
13992 wrh = w[i * 2];
13993 wrl = w[i * 2 + 1];
13994 } else {
13995 // Gamma0
13996 var gamma0xh = w[(i-15) * 2];
13997 var gamma0xl = w[(i-15) * 2 + 1];
13998 var gamma0h =
13999 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14000 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14001 (gamma0xh >>> 7);
14002 var gamma0l =
14003 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14004 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14005 ((gamma0xh << 25) | (gamma0xl >>> 7));
14006
14007 // Gamma1
14008 var gamma1xh = w[(i-2) * 2];
14009 var gamma1xl = w[(i-2) * 2 + 1];
14010 var gamma1h =
14011 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14012 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14013 (gamma1xh >>> 6);
14014 var gamma1l =
14015 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14016 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14017 ((gamma1xh << 26) | (gamma1xl >>> 6));
14018
14019 // Shortcuts
14020 var wr7h = w[(i-7) * 2];
14021 var wr7l = w[(i-7) * 2 + 1];
14022
14023 var wr16h = w[(i-16) * 2];
14024 var wr16l = w[(i-16) * 2 + 1];
14025
14026 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14027 wrl = gamma0l + wr7l;
14028 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14029 wrl += gamma1l;
14030 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14031 wrl += wr16l;
14032 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14033 }
14034
14035 w[i*2] = wrh |= 0;
14036 w[i*2 + 1] = wrl |= 0;
14037
14038 // Ch
14039 var chh = (eh & fh) ^ (~eh & gh);
14040 var chl = (el & fl) ^ (~el & gl);
14041
14042 // Maj
14043 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14044 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14045
14046 // Sigma0
14047 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14048 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14049
14050 // Sigma1
14051 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14052 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14053
14054 // K(round)
14055 var krh = k[i*2];
14056 var krl = k[i*2+1];
14057
14058 // t1 = h + sigma1 + ch + K(round) + W(round)
14059 var t1l = hl + sigma1l;
14060 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14061 t1l += chl;
14062 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14063 t1l += krl;
14064 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14065 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14066 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14067
14068 // t2 = sigma0 + maj
14069 var t2l = sigma0l + majl;
14070 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14071
14072 // Update working variables
14073 hh = gh;
14074 hl = gl;
14075 gh = fh;
14076 gl = fl;
14077 fh = eh;
14078 fl = el;
14079 el = (dl + t1l) | 0;
14080 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14081 dh = ch;
14082 dl = cl;
14083 ch = bh;
14084 cl = bl;
14085 bh = ah;
14086 bl = al;
14087 al = (t1l + t2l) | 0;
14088 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14089 }
14090
14091 // Intermediate hash
14092 h0l = h[1] = (h0l + al) | 0;
14093 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14094 h1l = h[3] = (h1l + bl) | 0;
14095 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14096 h2l = h[5] = (h2l + cl) | 0;
14097 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14098 h3l = h[7] = (h3l + dl) | 0;
14099 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14100 h4l = h[9] = (h4l + el) | 0;
14101 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14102 h5l = h[11] = (h5l + fl) | 0;
14103 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14104 h6l = h[13] = (h6l + gl) | 0;
14105 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14106 h7l = h[15] = (h7l + hl) | 0;
14107 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14108 }
14109 };
14110
14111
14112 //// hmac.js
14113
14114 /** @fileOverview HMAC implementation.
14115 *
14116 * @author Emily Stark
14117 * @author Mike Hamburg
14118 * @author Dan Boneh
14119 */
14120
14121 /** HMAC with the specified hash function.
14122 * @constructor
14123 * @param {bitArray} key the key for HMAC.
14124 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14125 */
14126 sjcl.misc.hmac = function (key, Hash) {
14127 this._hash = Hash = Hash || sjcl.hash.sha256;
14128 var exKey = [[],[]], i,
14129 bs = Hash.prototype.blockSize / 32;
14130 this._baseHash = [new Hash(), new Hash()];
14131
14132 if (key.length > bs) {
14133 key = Hash.hash(key);
14134 }
14135
14136 for (i=0; i<bs; i++) {
14137 exKey[0][i] = key[i]^0x36363636;
14138 exKey[1][i] = key[i]^0x5C5C5C5C;
14139 }
14140
14141 this._baseHash[0].update(exKey[0]);
14142 this._baseHash[1].update(exKey[1]);
14143 this._resultHash = new Hash(this._baseHash[0]);
14144 };
14145
14146 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14147 * @param {bitArray|String} data The data to mac.
14148 */
14149 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14150 if (!this._updated) {
14151 this.update(data);
14152 return this.digest(data);
14153 } else {
14154 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14155 }
14156 };
14157
14158 sjcl.misc.hmac.prototype.reset = function () {
14159 this._resultHash = new this._hash(this._baseHash[0]);
14160 this._updated = false;
14161 };
14162
14163 sjcl.misc.hmac.prototype.update = function (data) {
14164 this._updated = true;
14165 this._resultHash.update(data);
14166 };
14167
14168 sjcl.misc.hmac.prototype.digest = function () {
14169 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14170
14171 this.reset();
14172
14173 return result;
14174 };
14175
14176
14177 //// pbkdf2.js
14178
14179
14180 /** @fileOverview Password-based key-derivation function, version 2.0.
14181 *
14182 * @author Emily Stark
14183 * @author Mike Hamburg
14184 * @author Dan Boneh
14185 */
14186
14187 /** Password-Based Key-Derivation Function, version 2.0.
14188 *
14189 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14190 *
14191 * This is the method specified by RSA's PKCS #5 standard.
14192 *
14193 * @param {bitArray|String} password The password.
14194 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14195 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14196 * @param {Number} [length] The length of the derived key. Defaults to the
14197 output size of the hash function.
14198 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14199 * @return {bitArray} the derived key.
14200 */
14201 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14202 count = count || 1000;
14203
14204 if (length < 0 || count < 0) {
14205 throw sjcl.exception.invalid("invalid params to pbkdf2");
14206 }
14207
14208 if (typeof password === "string") {
14209 password = sjcl.codec.utf8String.toBits(password);
14210 }
14211
14212 if (typeof salt === "string") {
14213 salt = sjcl.codec.utf8String.toBits(salt);
14214 }
14215
14216 Prff = Prff || sjcl.misc.hmac;
14217
14218 var prf = new Prff(password),
14219 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14220
14221 for (k = 1; 32 * out.length < (length || 1); k++) {
14222 u = ui = prf.encrypt(b.concat(salt,[k]));
14223
14224 for (i=1; i<count; i++) {
14225 ui = prf.encrypt(ui);
14226 for (j=0; j<ui.length; j++) {
14227 u[j] ^= ui[j];
14228 }
14229 }
14230
14231 out = out.concat(u);
14232 }
14233
14234 if (length) { out = b.clamp(out, length); }
14235
14236 return out;
14237 };
14238
14239
14240 //// sha256.js
14241
14242 /** @fileOverview Javascript SHA-256 implementation.
14243 *
14244 * An older version of this implementation is available in the public
14245 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14246 * Stanford University 2008-2010 and BSD-licensed for liability
14247 * reasons.
14248 *
14249 * Special thanks to Aldo Cortesi for pointing out several bugs in
14250 * this code.
14251 *
14252 * @author Emily Stark
14253 * @author Mike Hamburg
14254 * @author Dan Boneh
14255 */
14256
14257 /**
14258 * Context for a SHA-256 operation in progress.
14259 * @constructor
14260 * @class Secure Hash Algorithm, 256 bits.
14261 */
14262 sjcl.hash.sha256 = function (hash) {
14263 if (!this._key[0]) { this._precompute(); }
14264 if (hash) {
14265 this._h = hash._h.slice(0);
14266 this._buffer = hash._buffer.slice(0);
14267 this._length = hash._length;
14268 } else {
14269 this.reset();
14270 }
14271 };
14272
14273 /**
14274 * Hash a string or an array of words.
14275 * @static
14276 * @param {bitArray|String} data the data to hash.
14277 * @return {bitArray} The hash value, an array of 16 big-endian words.
14278 */
14279 sjcl.hash.sha256.hash = function (data) {
14280 return (new sjcl.hash.sha256()).update(data).finalize();
14281 };
14282
14283 sjcl.hash.sha256.prototype = {
14284 /**
14285 * The hash's block size, in bits.
14286 * @constant
14287 */
14288 blockSize: 512,
14289
14290 /**
14291 * Reset the hash state.
14292 * @return this
14293 */
14294 reset:function () {
14295 this._h = this._init.slice(0);
14296 this._buffer = [];
14297 this._length = 0;
14298 return this;
14299 },
14300
14301 /**
14302 * Input several words to the hash.
14303 * @param {bitArray|String} data the data to hash.
14304 * @return this
14305 */
14306 update: function (data) {
14307 if (typeof data === "string") {
14308 data = sjcl.codec.utf8String.toBits(data);
14309 }
14310 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14311 ol = this._length,
14312 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14313 for (i = 512+ol & -512; i <= nl; i+= 512) {
14314 this._block(b.splice(0,16));
14315 }
14316 return this;
14317 },
14318
14319 /**
14320 * Complete hashing and output the hash value.
14321 * @return {bitArray} The hash value, an array of 8 big-endian words.
14322 */
14323 finalize:function () {
14324 var i, b = this._buffer, h = this._h;
14325
14326 // Round out and push the buffer
14327 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14328
14329 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14330 for (i = b.length + 2; i & 15; i++) {
14331 b.push(0);
14332 }
14333
14334 // append the length
14335 b.push(Math.floor(this._length / 0x100000000));
14336 b.push(this._length | 0);
14337
14338 while (b.length) {
14339 this._block(b.splice(0,16));
14340 }
14341
14342 this.reset();
14343 return h;
14344 },
14345
14346 /**
14347 * The SHA-256 initialization vector, to be precomputed.
14348 * @private
14349 */
14350 _init:[],
14351 /*
14352 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14353 */
14354
14355 /**
14356 * The SHA-256 hash key, to be precomputed.
14357 * @private
14358 */
14359 _key:[],
14360 /*
14361 _key:
14362 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14363 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14364 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14365 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14366 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14367 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14368 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14369 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14370 */
14371
14372
14373 /**
14374 * Function to precompute _init and _key.
14375 * @private
14376 */
14377 _precompute: function () {
14378 var i = 0, prime = 2, factor;
14379
14380 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14381
14382 outer: for (; i<64; prime++) {
14383 for (factor=2; factor*factor <= prime; factor++) {
14384 if (prime % factor === 0) {
14385 // not a prime
14386 continue outer;
14387 }
14388 }
14389
14390 if (i<8) {
14391 this._init[i] = frac(Math.pow(prime, 1/2));
14392 }
14393 this._key[i] = frac(Math.pow(prime, 1/3));
14394 i++;
14395 }
14396 },
14397
14398 /**
14399 * Perform one cycle of SHA-256.
14400 * @param {bitArray} words one block of words.
14401 * @private
14402 */
14403 _block:function (words) {
14404 var i, tmp, a, b,
14405 w = words.slice(0),
14406 h = this._h,
14407 k = this._key,
14408 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14409 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14410
14411 /* Rationale for placement of |0 :
14412 * If a value can overflow is original 32 bits by a factor of more than a few
14413 * million (2^23 ish), there is a possibility that it might overflow the
14414 * 53-bit mantissa and lose precision.
14415 *
14416 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14417 * propagates around the loop, and on the hash state h[]. I don't believe
14418 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14419 * (for h4 anyway), and better safe than sorry.
14420 *
14421 * The clamps on h[] are necessary for the output to be correct even in the
14422 * common case and for short inputs.
14423 */
14424 for (i=0; i<64; i++) {
14425 // load up the input word for this round
14426 if (i<16) {
14427 tmp = w[i];
14428 } else {
14429 a = w[(i+1 ) & 15];
14430 b = w[(i+14) & 15];
14431 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14432 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14433 w[i&15] + w[(i+9) & 15]) | 0;
14434 }
14435
14436 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14437
14438 // shift register
14439 h7 = h6; h6 = h5; h5 = h4;
14440 h4 = h3 + tmp | 0;
14441 h3 = h2; h2 = h1; h1 = h0;
14442
14443 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14444 }
14445
14446 h[0] = h[0]+h0 | 0;
14447 h[1] = h[1]+h1 | 0;
14448 h[2] = h[2]+h2 | 0;
14449 h[3] = h[3]+h3 | 0;
14450 h[4] = h[4]+h4 | 0;
14451 h[5] = h[5]+h5 | 0;
14452 h[6] = h[6]+h6 | 0;
14453 h[7] = h[7]+h7 | 0;
14454 }
14455 };
14456 </script>
14457 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14458 WORDLISTS["english"] = [
14459 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14460 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14461 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14462 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14463 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14464 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14465 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14466 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14467 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14468 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14469 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14470 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14471 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14472 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14473 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14474 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14475 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14476 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14477 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14478 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14479 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14480 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14481 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14482 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14483 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14484 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14485 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14486 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14487 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14488 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14489 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14490 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14491 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14492 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14493 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14494 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14495 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14496 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14497 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14498 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14499 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14500 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14501 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14502 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14503 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14504 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14505 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14506 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14507 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14508 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14509 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14510 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14511 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14512 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14513 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14514 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14515 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14516 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14517 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14518 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14519 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14520 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14521 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14522 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14523 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14524 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14525 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14526 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14527 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14528 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14529 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14530 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14531 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14532 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14533 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14534 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14535 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14536 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14537 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14538 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14539 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14540 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14541 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14542 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14543 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14544 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14545 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14546 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14547 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14548 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14549 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14550 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14551 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14552 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14553 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14554 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14555 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14556 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14557 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14558 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14559 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14560 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14561 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14562 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14563 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14564 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14565 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14566 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14567 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14568 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14569 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14570 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14571 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14572 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14573 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14574 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14575 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14576 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14577 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14578 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14579 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14580 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14581 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14582 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14583 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14584 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14585 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14586 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14587 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14588 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14589 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14590 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14591 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14592 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14593 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14594 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14595 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14596 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14597 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14598 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14599 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14600 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14601 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14602 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14603 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14604 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14605 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14606 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14607 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14608 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14609 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14610 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14611 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14612 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14613 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14614 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14615 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14616 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14617 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14618 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14619 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14620 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14621 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14622 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14623 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14624 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14625 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14626 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14627 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14628 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14629 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14630 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14631 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14632 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14633 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14634 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14635 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14636 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14637 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14638 "thank","that","theme","then","theory","there","they","thing","this","thought",
14639 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14640 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14641 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14642 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14643 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14644 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14645 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14646 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14647 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14648 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14649 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14650 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14651 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14652 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14653 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14654 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14655 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14656 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14657 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14658 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14659 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14660 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14661 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14662 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14663 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14664 </script>
14665 <script>/*
14666 * Copyright (c) 2013 Pavol Rusnak
14667 *
14668 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14669 * this software and associated documentation files (the "Software"), to deal in
14670 * the Software without restriction, including without limitation the rights to
14671 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14672 * of the Software, and to permit persons to whom the Software is furnished to do
14673 * so, subject to the following conditions:
14674 *
14675 * The above copyright notice and this permission notice shall be included in all
14676 * copies or substantial portions of the Software.
14677 *
14678 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14679 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14680 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14681 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14682 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14683 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14684 */
14685
14686 /*
14687 * Javascript port from python by Ian Coleman
14688 *
14689 * Requires code from sjcl
14690 * https://github.com/bitwiseshiftleft/sjcl
14691 */
14692
14693 var Mnemonic = function(language) {
14694
14695 var PBKDF2_ROUNDS = 2048;
14696 var RADIX = 2048;
14697
14698 var self = this;
14699 var wordlist = [];
14700
14701 var hmacSHA512 = function(key) {
14702 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14703 this.encrypt = function() {
14704 return hasher.encrypt.apply(hasher, arguments);
14705 };
14706 };
14707
14708 function init() {
14709 wordlist = WORDLISTS[language];
14710 if (wordlist.length != RADIX) {
14711 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14712 throw err;
14713 }
14714 }
14715
14716 self.generate = function(strength) {
14717 strength = strength || 128;
14718 var r = strength % 32;
14719 if (r > 0) {
14720 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14721 }
14722 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14723 if (!hasStrongCrypto) {
14724 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14725 }
14726 var buffer = new Uint8Array(strength / 8);
14727 var data = crypto.getRandomValues(buffer);
14728 return self.toMnemonic(data);
14729 }
14730
14731 self.toMnemonic = function(byteArray) {
14732 if (byteArray.length % 4 > 0) {
14733 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14734 }
14735
14736 //h = hashlib.sha256(data).hexdigest()
14737 var data = byteArrayToWordArray(byteArray);
14738 var hash = sjcl.hash.sha256.hash(data);
14739 var h = sjcl.codec.hex.fromBits(hash);
14740
14741 // b is a binary string, eg '00111010101100...'
14742 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14743 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14744 //
14745 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14746 // c = bin(int(h, 16))[2:].zfill(256)
14747 // d = c[:len(data) * 8 / 32]
14748 var a = byteArrayToBinaryString(byteArray);
14749 var c = zfill(hexStringToBinaryString(h), 256);
14750 var d = c.substring(0, byteArray.length * 8 / 32);
14751 // b = line1 + line2
14752 var b = a + d;
14753
14754 var result = [];
14755 var blen = b.length / 11;
14756 for (var i=0; i<blen; i++) {
14757 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14758 result.push(wordlist[idx]);
14759 }
14760 return result.join(' ');
14761 }
14762
14763 self.check = function(mnemonic) {
14764 var mnemonic = mnemonic.split(' ')
14765 if (mnemonic.length % 3 > 0) {
14766 return false
14767 }
14768 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14769 var idx = [];
14770 for (var i=0; i<mnemonic.length; i++) {
14771 var word = mnemonic[i];
14772 var wordIndex = wordlist.indexOf(word);
14773 if (wordIndex == -1) {
14774 return false;
14775 }
14776 var binaryIndex = zfill(wordIndex.toString(2), 11);
14777 idx.push(binaryIndex);
14778 }
14779 var b = idx.join('');
14780 var l = b.length;
14781 //d = b[:l / 33 * 32]
14782 //h = b[-l / 33:]
14783 var d = b.substring(0, l / 33 * 32);
14784 var h = b.substring(l - l / 33, l);
14785 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14786 var nd = binaryStringToWordArray(d);
14787 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14788 var ndHash = sjcl.hash.sha256.hash(nd);
14789 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14790 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14791 var nh = ndBstr.substring(0,l/33);
14792 return h == nh;
14793 }
14794
14795 self.toSeed = function(mnemonic, passphrase) {
14796 passphrase = passphrase || '';
14797 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14798 passphrase = self.normalizeString(passphrase)
14799 passphrase = "mnemonic" + passphrase;
14800 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14801 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14802 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14803 var hashHex = sjcl.codec.hex.fromBits(result);
14804 return hashHex;
14805 }
14806
14807 self.normalizeString = function(str) {
14808 if (typeof str.normalize == "function") {
14809 return str.normalize("NFKD");
14810 }
14811 else {
14812 // TODO decide how to handle this in the future.
14813 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14814 return str;
14815 }
14816 }
14817
14818 function byteArrayToWordArray(data) {
14819 var a = [];
14820 for (var i=0; i<data.length/4; i++) {
14821 v = 0;
14822 v += data[i*4 + 0] << 8 * 3;
14823 v += data[i*4 + 1] << 8 * 2;
14824 v += data[i*4 + 2] << 8 * 1;
14825 v += data[i*4 + 3] << 8 * 0;
14826 a.push(v);
14827 }
14828 return a;
14829 }
14830
14831 function byteArrayToBinaryString(data) {
14832 var bin = "";
14833 for (var i=0; i<data.length; i++) {
14834 bin += zfill(data[i].toString(2), 8);
14835 }
14836 return bin;
14837 }
14838
14839 function hexStringToBinaryString(hexString) {
14840 binaryString = "";
14841 for (var i=0; i<hexString.length; i++) {
14842 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14843 }
14844 return binaryString;
14845 }
14846
14847 function binaryStringToWordArray(binary) {
14848 var aLen = binary.length / 32;
14849 var a = [];
14850 for (var i=0; i<aLen; i++) {
14851 var valueStr = binary.substring(0,32);
14852 var value = parseInt(valueStr, 2);
14853 a.push(value);
14854 binary = binary.slice(32);
14855 }
14856 return a;
14857 }
14858
14859 // Pad a numeric string on the left with zero digits until the given width
14860 // is reached.
14861 // Note this differs to the python implementation because it does not
14862 // handle numbers starting with a sign.
14863 function zfill(source, length) {
14864 source = source.toString();
14865 while (source.length < length) {
14866 source = '0' + source;
14867 }
14868 return source;
14869 }
14870
14871 init();
14872
14873 }
14874 </script>
14875 <script>(function() {
14876
14877 var mnemonic = new Mnemonic("english");
14878 var seed = null
14879 var bip32RootKey = null;
14880 var bip32ExtendedKey = null;
14881 var network = bitcoin.networks.bitcoin;
14882 var addressRowTemplate = $("#address-row-template");
14883
14884 var showIndex = true;
14885 var showAddress = true;
14886 var showPrivKey = true;
14887
14888 var phraseChangeTimeoutEvent = null;
14889 var rootKeyChangedTimeoutEvent = null;
14890
14891 var DOM = {};
14892 DOM.network = $(".network");
14893 DOM.phraseNetwork = $("#network-phrase");
14894 DOM.phrase = $(".phrase");
14895 DOM.passphrase = $(".passphrase");
14896 DOM.generate = $(".generate");
14897 DOM.seed = $(".seed");
14898 DOM.rootKey = $(".root-key");
14899 DOM.extendedPrivKey = $(".extended-priv-key");
14900 DOM.extendedPubKey = $(".extended-pub-key");
14901 DOM.bip32tab = $("#bip32-tab");
14902 DOM.bip44tab = $("#bip44-tab");
14903 DOM.bip32panel = $("#bip32");
14904 DOM.bip44panel = $("#bip44");
14905 DOM.bip32path = $("#bip32-path");
14906 DOM.bip44path = $("#bip44-path");
14907 DOM.bip44purpose = $("#bip44 .purpose");
14908 DOM.bip44coin = $("#bip44 .coin");
14909 DOM.bip44account = $("#bip44 .account");
14910 DOM.bip44change = $("#bip44 .change");
14911 DOM.strength = $(".strength");
14912 DOM.hardenedAddresses = $(".hardened-addresses");
14913 DOM.addresses = $(".addresses");
14914 DOM.rowsToAdd = $(".rows-to-add");
14915 DOM.more = $(".more");
14916 DOM.feedback = $(".feedback");
14917 DOM.tab = $(".derivation-type a");
14918 DOM.indexToggle = $(".index-toggle");
14919 DOM.addressToggle = $(".address-toggle");
14920 DOM.privateKeyToggle = $(".private-key-toggle");
14921
14922 function init() {
14923 // Events
14924 DOM.network.on("change", networkChanged);
14925 DOM.phrase.on("input", delayedPhraseChanged);
14926 DOM.passphrase.on("input", delayedPhraseChanged);
14927 DOM.generate.on("click", generateClicked);
14928 DOM.more.on("click", showMore);
14929 DOM.rootKey.on("input", delayedRootKeyChanged);
14930 DOM.bip32path.on("input", calcForDerivationPath);
14931 DOM.bip44purpose.on("input", calcForDerivationPath);
14932 DOM.bip44coin.on("input", calcForDerivationPath);
14933 DOM.bip44account.on("input", calcForDerivationPath);
14934 DOM.bip44change.on("input", calcForDerivationPath);
14935 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14936 DOM.hardenedAddresses.on("change", calcForDerivationPath);
14937 DOM.indexToggle.on("click", toggleIndexes);
14938 DOM.addressToggle.on("click", toggleAddresses);
14939 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14940 disableForms();
14941 hidePending();
14942 hideValidationError();
14943 populateNetworkSelect();
14944 }
14945
14946 // Event handlers
14947
14948 function networkChanged(e) {
14949 var networkIndex = e.target.value;
14950 networks[networkIndex].onSelect();
14951 if (seed != null) {
14952 phraseChanged();
14953 }
14954 else {
14955 rootKeyChanged();
14956 }
14957 }
14958
14959 function delayedPhraseChanged() {
14960 hideValidationError();
14961 showPending();
14962 if (phraseChangeTimeoutEvent != null) {
14963 clearTimeout(phraseChangeTimeoutEvent);
14964 }
14965 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14966 }
14967
14968 function phraseChanged() {
14969 showPending();
14970 hideValidationError();
14971 // Get the mnemonic phrase
14972 var phrase = DOM.phrase.val();
14973 var errorText = findPhraseErrors(phrase);
14974 if (errorText) {
14975 showValidationError(errorText);
14976 return;
14977 }
14978 // Calculate and display
14979 var passphrase = DOM.passphrase.val();
14980 calcBip32RootKeyFromSeed(phrase, passphrase);
14981 calcForDerivationPath();
14982 hidePending();
14983 }
14984
14985 function delayedRootKeyChanged() {
14986 // Warn if there is an existing mnemonic or passphrase.
14987 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14988 if (!confirm("This will clear existing mnemonic and passphrase")) {
14989 DOM.rootKey.val(bip32RootKey);
14990 return
14991 }
14992 }
14993 hideValidationError();
14994 showPending();
14995 // Clear existing mnemonic and passphrase
14996 DOM.phrase.val("");
14997 DOM.passphrase.val("");
14998 seed = null;
14999 if (rootKeyChangedTimeoutEvent != null) {
15000 clearTimeout(rootKeyChangedTimeoutEvent);
15001 }
15002 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
15003 }
15004
15005 function rootKeyChanged() {
15006 showPending();
15007 hideValidationError();
15008 // Validate the root key TODO
15009 var rootKeyBase58 = DOM.rootKey.val();
15010 var errorText = validateRootKey(rootKeyBase58);
15011 if (errorText) {
15012 showValidationError(errorText);
15013 return;
15014 }
15015 // Calculate and display
15016 calcBip32RootKeyFromBase58(rootKeyBase58);
15017 calcForDerivationPath();
15018 hidePending();
15019 }
15020
15021 function calcForDerivationPath() {
15022 showPending();
15023 hideValidationError();
15024 // Get the derivation path
15025 var derivationPath = getDerivationPath();
15026 var errorText = findDerivationPathErrors(derivationPath);
15027 if (errorText) {
15028 showValidationError(errorText);
15029 return;
15030 }
15031 calcBip32ExtendedKey(derivationPath);
15032 displayBip32Info();
15033 hidePending();
15034 }
15035
15036 function generateClicked() {
15037 clearDisplay();
15038 showPending();
15039 setTimeout(function() {
15040 var phrase = generateRandomPhrase();
15041 if (!phrase) {
15042 return;
15043 }
15044 phraseChanged();
15045 }, 50);
15046 }
15047
15048 function toggleIndexes() {
15049 showIndex = !showIndex;
15050 $("td.index span").toggleClass("invisible");
15051 }
15052
15053 function toggleAddresses() {
15054 showAddress = !showAddress;
15055 $("td.address span").toggleClass("invisible");
15056 }
15057
15058 function togglePrivateKeys() {
15059 showPrivKey = !showPrivKey;
15060 $("td.privkey span").toggleClass("invisible");
15061 }
15062
15063 // Private methods
15064
15065 function generateRandomPhrase() {
15066 if (!hasStrongRandom()) {
15067 var errorText = "This browser does not support strong randomness";
15068 showValidationError(errorText);
15069 return;
15070 }
15071 var numWords = parseInt(DOM.strength.val());
15072 var strength = numWords / 3 * 32;
15073 var words = mnemonic.generate(strength);
15074 DOM.phrase.val(words);
15075 return words;
15076 }
15077
15078 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15079 seed = mnemonic.toSeed(phrase, passphrase);
15080 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15081 }
15082
15083 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15084 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
15085 }
15086
15087 function calcBip32ExtendedKey(path) {
15088 bip32ExtendedKey = bip32RootKey;
15089 // Derive the key from the path
15090 var pathBits = path.split("/");
15091 for (var i=0; i<pathBits.length; i++) {
15092 var bit = pathBits[i];
15093 var index = parseInt(bit);
15094 if (isNaN(index)) {
15095 continue;
15096 }
15097 var hardened = bit[bit.length-1] == "'";
15098 if (hardened) {
15099 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15100 }
15101 else {
15102 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15103 }
15104 }
15105 }
15106
15107 function showValidationError(errorText) {
15108 DOM.feedback
15109 .text(errorText)
15110 .show();
15111 }
15112
15113 function hideValidationError() {
15114 DOM.feedback
15115 .text("")
15116 .hide();
15117 }
15118
15119 function findPhraseErrors(phrase) {
15120 // TODO make this right
15121 // Preprocess the words
15122 phrase = mnemonic.normalizeString(phrase);
15123 var parts = phrase.split(" ");
15124 var proper = [];
15125 for (var i=0; i<parts.length; i++) {
15126 var part = parts[i];
15127 if (part.length > 0) {
15128 // TODO check that lowercasing is always valid to do
15129 proper.push(part.toLowerCase());
15130 }
15131 }
15132 var properPhrase = proper.join(' ');
15133 // Check each word
15134 for (var i=0; i<proper.length; i++) {
15135 var word = proper[i];
15136 if (WORDLISTS["english"].indexOf(word) == -1) {
15137 console.log("Finding closest match to " + word);
15138 var nearestWord = findNearestWord(word);
15139 return word + " not in wordlist, did you mean " + nearestWord + "?";
15140 }
15141 }
15142 // Check the words are valid
15143 var isValid = mnemonic.check(properPhrase);
15144 if (!isValid) {
15145 return "Invalid mnemonic";
15146 }
15147 return false;
15148 }
15149
15150 function validateRootKey(rootKeyBase58) {
15151 try {
15152 bitcoin.HDNode.fromBase58(rootKeyBase58);
15153 }
15154 catch (e) {
15155 return "Invalid root key";
15156 }
15157 return "";
15158 }
15159
15160 function getDerivationPath() {
15161 if (DOM.bip44tab.hasClass("active")) {
15162 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15163 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15164 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15165 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15166 var path = "m/";
15167 path += purpose + "'/";
15168 path += coin + "'/";
15169 path += account + "'/";
15170 path += change;
15171 DOM.bip44path.val(path);
15172 var derivationPath = DOM.bip44path.val();
15173 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15174 return derivationPath;
15175 }
15176 else if (DOM.bip32tab.hasClass("active")) {
15177 var derivationPath = DOM.bip32path.val();
15178 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15179 return derivationPath;
15180 }
15181 else {
15182 console.log("Unknown derivation path");
15183 }
15184 }
15185
15186 function findDerivationPathErrors(path) {
15187 // TODO is not perfect but is better than nothing
15188 // Inspired by
15189 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15190 // and
15191 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15192 var maxDepth = 255; // TODO verify this!!
15193 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15194 if (path[0] != "m") {
15195 return "First character must be 'm'";
15196 }
15197 if (path.length > 1) {
15198 if (path[1] != "/") {
15199 return "Separator must be '/'";
15200 }
15201 var indexes = path.split("/");
15202 if (indexes.length > maxDepth) {
15203 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15204 }
15205 for (var depth = 1; depth<indexes.length; depth++) {
15206 var index = indexes[depth];
15207 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15208 if (invalidChars.length > 0) {
15209 return "Invalid characters " + invalidChars + " found at depth " + depth;
15210 }
15211 var indexValue = parseInt(index.replace("'", ""));
15212 if (isNaN(depth)) {
15213 return "Invalid number at depth " + depth;
15214 }
15215 if (indexValue > maxIndexValue) {
15216 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15217 }
15218 }
15219 }
15220 return false;
15221 }
15222
15223 function displayBip32Info() {
15224 // Display the key
15225 DOM.seed.val(seed);
15226 var rootKey = bip32RootKey.toBase58();
15227 DOM.rootKey.val(rootKey);
15228 var extendedPrivKey = bip32ExtendedKey.toBase58();
15229 DOM.extendedPrivKey.val(extendedPrivKey);
15230 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15231 DOM.extendedPubKey.val(extendedPubKey);
15232 // Display the addresses and privkeys
15233 clearAddressesList();
15234 displayAddresses(0, 20);
15235 }
15236
15237 function displayAddresses(start, total) {
15238 for (var i=0; i<total; i++) {
15239 var index = i + start;
15240 new TableRow(index);
15241 }
15242 }
15243
15244 function TableRow(index) {
15245
15246 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
15247
15248 function init() {
15249 calculateValues();
15250 }
15251
15252 function calculateValues() {
15253 setTimeout(function() {
15254 var key = "";
15255 if (useHardenedAddresses) {
15256 key = bip32ExtendedKey.deriveHardened(index);
15257 }
15258 else {
15259 key = bip32ExtendedKey.derive(index);
15260 }
15261 var address = key.getAddress().toString();
15262 var privkey = key.privKey.toWIF(network);
15263 var indexText = getDerivationPath() + "/" + index;
15264 if (useHardenedAddresses) {
15265 indexText = indexText + "'";
15266 }
15267 addAddressToList(indexText, address, privkey);
15268 }, 50)
15269 }
15270
15271 init();
15272
15273 }
15274
15275 function showMore() {
15276 var start = DOM.addresses.children().length;
15277 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15278 if (isNaN(rowsToAdd)) {
15279 rowsToAdd = 20;
15280 DOM.rowsToAdd.val("20");
15281 }
15282 if (rowsToAdd > 200) {
15283 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15284 msg += "Do you want to continue?";
15285 if (!confirm(msg)) {
15286 return;
15287 }
15288 }
15289 displayAddresses(start, rowsToAdd);
15290 }
15291
15292 function clearDisplay() {
15293 clearAddressesList();
15294 clearKey();
15295 hideValidationError();
15296 }
15297
15298 function clearAddressesList() {
15299 DOM.addresses.empty();
15300 }
15301
15302 function clearKey() {
15303 DOM.rootKey.val("");
15304 DOM.extendedPrivKey.val("");
15305 DOM.extendedPubKey.val("");
15306 }
15307
15308 function addAddressToList(indexText, address, privkey) {
15309 var row = $(addressRowTemplate.html());
15310 // Elements
15311 var indexCell = row.find(".index span");
15312 var addressCell = row.find(".address span");
15313 var privkeyCell = row.find(".privkey span");
15314 // Content
15315 indexCell.text(indexText);
15316 addressCell.text(address);
15317 privkeyCell.text(privkey);
15318 // Visibility
15319 if (!showIndex) {
15320 indexCell.addClass("invisible");
15321 }
15322 if (!showAddress) {
15323 addressCell.addClass("invisible");
15324 }
15325 if (!showPrivKey) {
15326 privkeyCell.addClass("invisible");
15327 }
15328 DOM.addresses.append(row);
15329 }
15330
15331 function hasStrongRandom() {
15332 return 'crypto' in window && window['crypto'] !== null;
15333 }
15334
15335 function disableForms() {
15336 $("form").on("submit", function(e) {
15337 e.preventDefault();
15338 });
15339 }
15340
15341 function parseIntNoNaN(val, defaultVal) {
15342 var v = parseInt(val);
15343 if (isNaN(v)) {
15344 return defaultVal;
15345 }
15346 return v;
15347 }
15348
15349 function showPending() {
15350 DOM.feedback
15351 .text("Calculating...")
15352 .show();
15353 }
15354
15355 function findNearestWord(word) {
15356 var words = WORDLISTS["english"];
15357 var minDistance = 99;
15358 var closestWord = words[0];
15359 for (var i=0; i<words.length; i++) {
15360 var comparedTo = words[i];
15361 var distance = Levenshtein.get(word, comparedTo);
15362 if (distance < minDistance) {
15363 closestWord = comparedTo;
15364 minDistance = distance;
15365 }
15366 }
15367 return closestWord;
15368 }
15369
15370 function hidePending() {
15371 DOM.feedback
15372 .text("")
15373 .hide();
15374 }
15375
15376 function populateNetworkSelect() {
15377 for (var i=0; i<networks.length; i++) {
15378 var network = networks[i];
15379 var option = $("<option>");
15380 option.attr("value", i);
15381 option.text(network.name);
15382 DOM.phraseNetwork.append(option);
15383 }
15384 }
15385
15386 var networks = [
15387 {
15388 name: "Bitcoin",
15389 onSelect: function() {
15390 network = bitcoin.networks.bitcoin;
15391 DOM.bip44coin.val(0);
15392 },
15393 },
15394 {
15395 name: "Bitcoin Testnet",
15396 onSelect: function() {
15397 network = bitcoin.networks.testnet;
15398 DOM.bip44coin.val(1);
15399 },
15400 },
15401 {
15402 name: "Litecoin",
15403 onSelect: function() {
15404 network = bitcoin.networks.litecoin;
15405 DOM.bip44coin.val(2);
15406 },
15407 },
15408 {
15409 name: "Dogecoin",
15410 onSelect: function() {
15411 network = bitcoin.networks.dogecoin;
15412 DOM.bip44coin.val(3);
15413 },
15414 },
15415 {
15416 name: "ShadowCash",
15417 onSelect: function() {
15418 network = bitcoin.networks.shadow;
15419 DOM.bip44coin.val(35);
15420 },
15421 },
15422 {
15423 name: "ShadowCash Testnet",
15424 onSelect: function() {
15425 network = bitcoin.networks.shadowtn;
15426 DOM.bip44coin.val(1);
15427 },
15428 },
15429 {
15430 name: "Viacoin",
15431 onSelect: function() {
15432 network = bitcoin.networks.viacoin;
15433 DOM.bip44coin.val(14);
15434 },
15435 },
15436 {
15437 name: "Viacoin Testnet",
15438 onSelect: function() {
15439 network = bitcoin.networks.viacointestnet;
15440 DOM.bip44coin.val(1);
15441 },
15442 },
15443 {
15444 name: "Jumbucks",
15445 onSelect: function() {
15446 network = bitcoin.networks.jumbucks;
15447 DOM.bip44coin.val(26);
15448 },
15449 },
15450 {
15451 name: "CLAM",
15452 onSelect: function() {
15453 network = bitcoin.networks.clam;
15454 DOM.bip44coin.val(23);
15455 },
15456 },
15457 {
15458 name: "DASH",
15459 onSelect: function() {
15460 network = bitcoin.networks.dash;
15461 DOM.bip44coin.val(5);
15462 },
15463 },
15464 {
15465 name: "Namecoin",
15466 onSelect: function() {
15467 network = bitcoin.networks.namecoin;
15468 DOM.bip44coin.val(7);
15469 },
15470 },
15471 {
15472 name: "Peercoin",
15473 onSelect: function() {
15474 network = bitcoin.networks.peercoin;
15475 DOM.bip44coin.val(6);
15476 },
15477 },
15478 ]
15479
15480 init();
15481
15482 })();
15483 </script>
15484 </body>
15485 </html>